import React from "react";
import { Intent } from "@blueprintjs/core/src/common/intent";
import { TestableComponent } from "../../components/interfaces";
import { ElapsedDateTimeDisplayUnits } from "../DateTimeDisplay/ElapsedDateTimeDisplay";
import { SilkActivityStatusConcrete, SilkActivityStatusProps } from "./ActivityControlTypes";
export interface SilkActivityControlProps extends TestableComponent {
    label: string | JSX.Element;
    /**
     * To add tags in addition to the widget status description
     */
    tags?: JSX.Element;
    initialStatus?: SilkActivityStatusProps;
    registerForUpdates: (callback: (status: SilkActivityStatusProps) => any) => any;
    unregisterFromUpdates: () => any;
    showStartAction: boolean;
    showStopAction: boolean;
    failureReportAction?: IErrorReportAction;
    showReloadAction: boolean;
    viewValueAction?: {
        tooltip?: string;
        action: string | (() => any);
    };
    executeActivityAction: (action: SilkActivityControlAction) => void;
    /** If specified, the activity control will offer a "Start prioritized" button while the activity is in the waiting state.
     * When the button is clicked it should start the activity via the startPrioritized endpoint.
     */
    executePrioritized?: () => void;
    translate: (key: SilkActivityControlTranslationKeys) => string;
    elapsedTimeOfLastStart?: {
        prefix?: string;
        suffix?: string;
        translate: (unit: ElapsedDateTimeDisplayUnits) => string;
    };
    layoutConfig?: SilkActivityControlLayoutProps;
    /** Configures when the status message should be hidden, e.g. because it is uninteresting. */
    hideMessageOnStatus?: (concreteStatus: SilkActivityStatusConcrete | undefined) => boolean;
    /**
     * The translation of the time units
     */
    translateUnits?: (unit: ElapsedDateTimeDisplayUnits) => string;
}
export interface SilkActivityControlLayoutProps {
    small?: boolean;
    border?: boolean;
    hasSpacing?: boolean;
    canShrink?: boolean;
    visualization?: "none" | "progressbar" | "spinner";
    labelWrapper?: JSX.Element;
}
interface IErrorReportAction {
    title?: string;
    renderReport: (report: string | SilkActivityExecutionReportProps) => JSX.Element;
    renderMarkdown: boolean;
    fetchErrorReport: (markdown: boolean) => Promise<string | SilkActivityExecutionReportProps | undefined>;
    allowDownload?: boolean;
    downloadButtonValue: string;
    closeButtonValue: string;
}
export interface SilkActivityExecutionReportProps {
    errorSummary: string;
    projectId?: string;
    taskId?: string;
    activityId: string;
    projectLabel?: string;
    taskLabel?: string;
    taskDescription?: string;
    errorMessage?: string;
    stackTrace?: IStacktrace;
}
interface IStacktrace {
    errorMessage?: string;
    lines: string[];
    cause?: IStacktrace;
}
export type SilkActivityControlTranslationKeys = "startActivity" | "stopActivity" | "reloadActivity" | "showErrorReport" | "startPrioritized";
export type SilkActivityControlAction = "start" | "cancel" | "restart";
/** Silk activity control. */
export declare function SilkActivityControl(props: SilkActivityControlProps): React.JSX.Element;
export declare function useSilkActivityControl({ label, initialStatus, registerForUpdates, executeActivityAction, showReloadAction, showStartAction, viewValueAction, showStopAction, failureReportAction, unregisterFromUpdates, translate, elapsedTimeOfLastStart, tags, layoutConfig, hideMessageOnStatus, executePrioritized, translateUnits, ...props }: SilkActivityControlProps): {
    readonly elapsedDateTime: React.JSX.Element;
    readonly intent: Intent;
    readonly widget: React.JSX.Element;
};
export declare const calcIntent: (activityStatus: SilkActivityStatusProps) => Intent;
export {};
