/**
 * This package contains various extensions on top of the stable components included in GoodData.UI.
 *
 * @remarks
 * The extensions land here instead of their own project as part of their staged development.
 *
 * Notable member of the package is InsightView, the component that allows you to embed
 * Analytical Designer insights.
 *
 * @packageDocumentation
 */

import { AutomationType } from '@gooddata/sdk-backend-spi';
import { ChartInlineVisualizationType } from '@gooddata/sdk-ui-charts';
import { ComponentType } from 'react';
import { CopyCodeOriginType } from '@gooddata/sdk-ui-kit';
import { EmbedType } from '@gooddata/sdk-ui-kit';
import { ExplicitDrill } from '@gooddata/sdk-ui';
import { GoodDataSdkError } from '@gooddata/sdk-ui';
import { IAlertComparisonOperator } from '@gooddata/sdk-model';
import { IAlertRelativeArithmeticOperator } from '@gooddata/sdk-model';
import { IAlertRelativeOperator } from '@gooddata/sdk-model';
import { IAnalyticalBackend } from '@gooddata/sdk-backend-spi';
import { IAutomationMetadataObject } from '@gooddata/sdk-model';
import { ICatalogAttributeHierarchy } from '@gooddata/sdk-model';
import { IChartConfig } from '@gooddata/sdk-ui-charts';
import { IColorPalette } from '@gooddata/sdk-model';
import { IDashboardUrlBuilder } from '@gooddata/sdk-ui';
import { IDrillEvent } from '@gooddata/sdk-ui';
import { IDrillEventIntersectionElement } from '@gooddata/sdk-ui';
import { IErrorProps } from '@gooddata/sdk-ui';
import { IExecutionConfig } from '@gooddata/sdk-model';
import { IFilter } from '@gooddata/sdk-model';
import { IGeoConfig } from '@gooddata/sdk-ui-geo';
import { IInsight } from '@gooddata/sdk-model';
import { IInsightDefinition } from '@gooddata/sdk-model';
import { IInsightWidget } from '@gooddata/sdk-model';
import { ILoadingProps } from '@gooddata/sdk-ui';
import { ILocale } from '@gooddata/sdk-ui';
import { INotification } from '@gooddata/sdk-model';
import { IntlShape } from 'react-intl';
import { IPivotTableConfig } from '@gooddata/sdk-ui-pivot';
import { ISettings } from '@gooddata/sdk-model';
import { ITheme } from '@gooddata/sdk-model';
import { IUserWorkspaceSettings } from '@gooddata/sdk-backend-spi';
import { IVisualizationCallbacks } from '@gooddata/sdk-ui';
import { IWidgetUrlBuilder } from '@gooddata/sdk-ui';
import { JSX } from 'react/jsx-runtime';
import { LocalIdRef } from '@gooddata/sdk-model';
import { ObjRef } from '@gooddata/sdk-model';
import { OnError } from '@gooddata/sdk-ui';
import { PivotTableNextConfig } from '@gooddata/sdk-ui-pivot/next';
import { ReactElement } from 'react';
import { ReactNode } from 'react';
import { RefObject } from 'react';
import { UiAsyncTableVariant } from '@gooddata/sdk-ui-kit';
import { UiSkeleton } from '@gooddata/sdk-ui-kit';
import { UseCancelablePromiseStatus } from '@gooddata/sdk-ui';

/**
 * @internal
 */
export declare const AddDataSourceToSubjects: {
    (props: IAddDataSourceToSubjectsProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare function addIntersectionFiltersToInsight(source: IInsight, intersection: IDrillEventIntersectionElement[] | undefined | null, backendSupportsElementUris: boolean): IInsight;

/**
 * @internal
 */
export declare const AddUserGroupsToUsersDialog: {
    (props: IAddUserGroupsToUsersDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const AddUsersToUserGroupsDialog: {
    (props: IAddUsersToUserGroupsDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const AddWorkspaceToSubjects: {
    (props: IAddWorkspaceToSubjectsProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const AI_OPERATOR = "AI";

/**
 * @internal
 */
export declare const AI_OPERATORS: {
    readonly ANOMALY_DETECTION: "ANOMALY_DETECTION";
};

/**
 * @internal
 */
export declare const ARITHMETIC_OPERATORS: {
    readonly ARITHMETIC_OPERATOR_DIFFERENCE: "DIFFERENCE";
    readonly ARITHMETIC_OPERATOR_CHANGE: "CHANGE";
};

/**
 *
 * @internal
 */
export declare function AttributeHierarchyDetailBubble({ children, className, }: IAttributeHierarchyDetailBubbleProps): JSX.Element;

/**
 *
 * @internal
 */
export declare function AttributeHierarchyDetailPanel({ title, description, attributes, onEdit, }: IAttributeHierarchyDetailPanelProps): JSX.Element;

/**
 * @internal
 */
export declare function AttributeHierarchyDialog({ initialAttributeRef, editingAttributeHierarchy, onClose, onSaveOrUpdateSuccess, onDeleteSuccess, onAddAttributeClicked, onCreateHierarchyClicked, }: IAttributeHierarchyDialogProps): JSX.Element;

/**
 * Automation column definition
 * @internal
 */
export declare type AutomationColumnDefinition = {
    name: AutomationsColumnName;
    width?: number;
    minWidth?: number;
};

/**
 * Automation column definitions
 * @internal
 */
export declare type AutomationColumnDefinitions = Array<AutomationColumnDefinition>;

/**
 * Internal component for displaying automations.
 *
 * @internal
 */
export declare function Automations({ backend, scope, workspace, organization, locale, timezone, selectedColumnDefinitions, preselectedFilters, availableFilters, maxHeight, pageSize, type, tableVariant, isMobileView, enableBulkActions, externalInvalidationId, renderToolbarCustomElement, dashboardUrlBuilder, widgetUrlBuilder, editAutomation, onLoad, }: IAutomationsProps): JSX.Element;

/**
 * Available filters configuration
 * @internal
 */
export declare type AutomationsAvailableFilters = Array<AutomationsFilterName>;

/**
 * All available automation column names
 * @internal
 */
export declare type AutomationsColumnName = CommonAutomationsColumnName | ScheduleAutomationsColumnName;

/**
 * Automation filter names
 * @internal
 */
export declare type AutomationsFilterName = "dashboard" | "workspace" | "createdBy" | "recipients" | "status";

/**
 * Automation filter preselect names
 * @internal
 */
export declare type AutomationsFilterPreselectName = AutomationsFilterName | "externalRecipients";

/**
 * Automation filter preselect value
 * @internal
 */
export declare type AutomationsFilterPreselectValue = {
    value: string;
    label?: string;
};

/**
 * Callback function to be called when automations are loaded
 * @internal
 */
export declare type AutomationsOnLoad = (items: Array<IAutomationMetadataObject>, isInitial: boolean) => void;

/**
 * Preselected filters configuration
 * @internal
 */
export declare type AutomationsPreselectedFilters = Partial<Record<AutomationsFilterPreselectName, Array<AutomationsFilterPreselectValue>>>;

/**
 * Automation scope
 * @internal
 */
export declare type AutomationsScope = "workspace" | "organization";

/**
 * @internal
 */
export declare type AutomationsType = Extract<AutomationType, "alert" | "schedule">;

export { ChartInlineVisualizationType }

/**
 * Clears all the caches used by the InsightView components.
 *
 * @public
 */
export declare function clearInsightViewCaches(): void;

/**
 * Common automation columns available for all automation types
 * @internal
 */
export declare type CommonAutomationsColumnName = "id" | "title" | "dashboard" | "recipients" | "lastRun" | "lastRunStatus" | "createdBy" | "createdAt" | "notificationChannel" | "workspace" | "menu" | "state" | "widget";

/**
 * @internal
 */
export declare const COMPARISON_OPERATORS: {
    readonly COMPARISON_OPERATOR_LESS_THAN: "LESS_THAN";
    readonly COMPARISON_OPERATOR_LESS_THAN_OR_EQUAL_TO: "LESS_THAN_OR_EQUAL_TO";
    readonly COMPARISON_OPERATOR_GREATER_THAN: "GREATER_THAN";
    readonly COMPARISON_OPERATOR_GREATER_THAN_OR_EQUAL_TO: "GREATER_THAN_OR_EQUAL_TO";
};

/**
 * @internal
 */
export declare const CreateUserGroupDialog: {
    (props: ICreateUserGroupDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const DASHBOARD_LAYOUT_DEFAULT_VIS_HEIGHT_PX = 450;

/**
 * @internal
 */
export declare const DASHBOARD_LAYOUT_WIDGET_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare type DataSourcePermission = "USE" | "MANAGE";

/**
 * @internal
 */
export declare type DataSourcePermissionSubject = "user" | "userGroup";

/**
 * Default implementation of the Notification component.
 *
 * @public
 */
export declare function DefaultNotification({ notification, markNotificationAsRead, onNotificationClick, closeNotificationsPanel, }: INotificationComponentProps): JSX.Element;

/**
 * Default implementation of the NotificationSkeletonItem component.
 *
 * @public
 */
export declare const DefaultNotificationSkeletonItem: typeof UiSkeleton;

/**
 * Default implementation of the NotificationsList component.
 *
 * @public
 */
export declare function DefaultNotificationsList({ Notification, NotificationsListEmptyState, NotificationsListErrorState, NotificationSkeletonItem, activeView, status, error, activeNotifications, markNotificationAsRead, onNotificationClick, hasNextPage, loadNextPage, itemHeight, itemsGap, itemPadding, skeletonItemsCount, maxListHeight, closeNotificationsPanel, }: INotificationsListComponentProps): JSX.Element;

/**
 * Default implementation of the NotificationsListEmptyState component.
 *
 * @public
 */
export declare function DefaultNotificationsListEmptyState({ activeView, }: INotificationsListEmptyStateComponentProps): JSX.Element;

/**
 * Default implementation of the NotificationsListErrorState component.
 *
 * @public
 */
export declare function DefaultNotificationsListErrorState({ error }: INotificationsListErrorStateComponentProps): JSX.Element;

/**
 * Default implementation of the NotificationsPanel component.
 *
 * @public
 */
export declare function DefaultNotificationsPanel({ NotificationsPanelHeader, NotificationsList, NotificationsListEmptyState, NotificationsListErrorState, Notification, NotificationSkeletonItem, activeView, changeActiveView, markNotificationAsRead, markAllNotificationsAsRead, unreadNotificationsCount, hasUnreadNotifications, activeNotifications, onNotificationClick, closeNotificationsPanel, status, error, loadNextPage, hasNextPage, itemHeight, itemsGap, itemPadding, skeletonItemsCount, maxListHeight, }: INotificationsPanelComponentProps): JSX.Element;

/**
 * @internal
 */
export declare function DefaultNotificationsPanelButton({ buttonRef, isNotificationPanelOpen, toggleNotificationPanel, hasUnreadNotifications, }: INotificationsPanelButtonComponentProps): JSX.Element;

/**
 * Default implementation of the notifications panel header.
 *
 * @public
 */
export declare function DefaultNotificationsPanelHeader({ activeView, changeActiveView, markAllNotificationsAsRead, hasUnreadNotifications, unreadNotificationsCount, }: INotificationsPanelHeaderComponentProps): JSX.Element;

/**
 * @internal
 */
export declare const DeleteUserDialog: {
    (props: IDeleteUserDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const DeleteUserGroupDialog: {
    (props: IDeleteUserGroupDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const DeleteUserGroupsDialog: {
    (props: IDeleteUserGroupsDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare const DeleteUsersDialog: {
    (props: IDeleteUsersDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare function EmbedInsightDialog(props: IEmbedInsightDialogProps): JSX.Element;

/**
 * @alpha
 */
export declare class EmptyAfmSdkError extends GoodDataSdkError {
    readonly pveType: PluggableVisualizationErrorType;
    constructor(cause?: Error);
    getErrorCode(): string;
}

/**
 * @alpha
 */
export declare class FluidLayoutDescriptor implements IFluidLayoutDescriptor {
    type: "fluid";
    gridColumnsCount: number;
    gridRowHeight: number;
    toGridHeight(heightPx: number): number;
    toHeightInPx(height: number): number;
}

/**
 * @alpha
 */
export declare const fluidLayoutDescriptor: FluidLayoutDescriptor;

/**
 * @internal
 */
export declare const getComparisonOperatorTitle: (operator: IAlertComparisonOperator, intl: IntlShape) => string;

/**
 * @internal
 */
export declare function getInsightSizeInfo(insight: IInsightDefinition, settings: ISettings): IVisualizationSizeInfo;

/**
 * @internal
 */
export declare function getInsightVisualizationMeta(insight: IInsightDefinition, settings?: ISettings): IVisualizationMeta;

/**
 * @internal
 */
export declare function getInsightWithAppliedDrillDown(insight: IInsight, drillEvent: IDrillEvent, drillDefinition: IDrillDownDefinition, backendSupportsElementUris: boolean, settings: ISettings): IInsight;

/**
 * @internal
 */
export declare const getRelativeOperatorTitle: (operator: IAlertRelativeOperator, art: IAlertRelativeArithmeticOperator, intl: IntlShape) => string;

/**
 * @internal
 */
export declare interface IAddDataSourceToSubjectsProps extends IWithTelemetryProps {
    ids: string[];
    subjectType: DataSourcePermissionSubject;
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
    renderDataSourceIcon?: (dataSource: IGrantedDataSource) => ReactElement;
}

/**
 * @internal
 */
export declare interface IAddUserGroupsToUsersDialogProps extends IWithTelemetryProps {
    userIds: string[];
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * @internal
 */
export declare interface IAddUsersToUserGroupsDialogProps extends IWithTelemetryProps {
    userGroupIds: string[];
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * @internal
 */
export declare interface IAddWorkspaceToSubjectsProps extends IWithTelemetryProps {
    ids: string[];
    subjectType: WorkspacePermissionSubject;
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
    areFilterViewsEnabled?: boolean;
}

/**
 *
 * @internal
 */
export declare interface IAttributeHierarchyDetailBubbleProps {
    className?: string;
    children?: ReactNode;
}

/**
 *
 * @internal
 */
export declare interface IAttributeHierarchyDetailItem {
    title: string;
    isDate: boolean;
}

/**
 *
 * @internal
 */
export declare interface IAttributeHierarchyDetailPanelProps {
    title: string;
    description?: string;
    attributes: IAttributeHierarchyDetailItem[];
    onEdit?: () => void;
}

/**
 * @internal
 */
export declare interface IAttributeHierarchyDialogProps {
    initialAttributeRef?: ObjRef;
    editingAttributeHierarchy?: ICatalogAttributeHierarchy;
    onClose?: () => void;
    onSaveOrUpdateSuccess?: (attributeHierarchy: ICatalogAttributeHierarchy) => void;
    onDeleteSuccess?: () => void;
    onAddAttributeClicked?: () => void;
    onCreateHierarchyClicked?: () => void;
}

/**
 * @internal
 */
export declare interface IAutomationsProps {
    backend?: IAnalyticalBackend;
    scope: AutomationsScope;
    workspace?: string;
    organization?: string;
    locale?: string;
    timezone?: string;
    selectedColumnDefinitions?: AutomationColumnDefinitions;
    availableFilters?: AutomationsAvailableFilters;
    preselectedFilters?: AutomationsPreselectedFilters;
    maxHeight?: number;
    pageSize?: number;
    type?: AutomationsType;
    tableVariant?: UiAsyncTableVariant;
    isMobileView?: boolean;
    enableBulkActions?: boolean;
    /**
     * External invalidation ID. When this value changes, the automations list will be reloaded.
     * This allows parent components to trigger a refresh without callback/ref patterns.
     * If not provided or set to 0, the automations list will not be reloaded.
     */
    externalInvalidationId?: number;
    renderToolbarCustomElement?: () => ReactNode;
    onLoad?: AutomationsOnLoad;
    dashboardUrlBuilder?: IDashboardUrlBuilder;
    widgetUrlBuilder?: IWidgetUrlBuilder;
    editAutomation?: IEditAutomation;
}

/**
 * @internal
 */
export declare interface ICreateUserGroupDialogProps extends IWithTelemetryProps {
    organizationId: string;
    onSuccess: () => void;
    onCancel: () => void;
}

/**
 * @internal
 */
export declare interface IDeleteUserDialogProps extends IWithTelemetryProps {
    userId: string;
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * @internal
 */
export declare interface IDeleteUserGroupDialogProps extends IWithTelemetryProps {
    userGroupId: string;
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * @internal
 */
export declare interface IDeleteUserGroupsDialogProps extends IWithTelemetryProps {
    userGroupIds: string[];
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * @internal
 */
export declare interface IDeleteUsersDialogProps extends IWithTelemetryProps {
    userIds: string[];
    organizationId: string;
    onSuccess: () => void;
    onClose: () => void;
}

/**
 * Information about the DrillDown interaction - the attribute that is next in the drill down hierarchy.
 * @beta
 */
export declare interface IDrillDownDefinition {
    type: "drillDown";
    /**
     * Local identifier of the attribute that triggered the drill down.
     */
    origin: LocalIdRef;
    /**
     * Target attribute display form for drill down.
     */
    target: ObjRef;
}

/**
 * @internal
 */
export declare interface IEditAutomation {
    (automation: IAutomationMetadataObject, workspaceId: string | undefined, dashboardId: string | undefined): void;
}

/**
 * @internal
 */
export declare interface IEmbedInsightDialogProps {
    insight: IInsight;
    locale?: string;
    backend?: IAnalyticalBackend;
    reactIntegrationDocLink?: string;
    webComponentIntegrationDocLink?: string;
    saveInsightDocLink?: string;
    settings?: IUserWorkspaceSettings;
    colorPalette?: IColorPalette;
    theme?: ITheme;
    executionConfig?: IExecutionConfig;
    workspaceId?: string;
    showWebComponentsTab?: boolean;
    openSaveInsightDialog: () => void;
    onClose: () => void;
    onCopyCode: (code: string, type: CopyCodeOriginType, codeType: EmbedType) => void;
}

/**
 * Fluid Layout descriptor.
 * Provides parameters of fluid layout.
 *
 * @alpha
 */
export declare interface IFluidLayoutDescriptor extends ILayoutDescriptor {
    type: "fluid";
    /**
     * Total number of grid columns. Used if visualization should take 100% width by its size
     */
    gridColumnsCount: number;
    /**
     * Height of one grid row in px. It is used for conversion of height between grid rows and px
     */
    gridRowHeight: number;
    /**
     * Converts height in px to the height in layout units
     */
    toGridHeight(heightPx: number): number;
    /**
     * Converts height in layout units to the height in px
     */
    toHeightInPx(height: number): number;
}

/**
 * @internal
 */
export declare interface IGrantedDataSource {
    id: string;
    title: string;
    permission: DataSourcePermission;
}

/**
 * @internal
 */
export declare interface IInsightErrorProps {
    error: GoodDataSdkError;
    ErrorComponent?: ComponentType<IErrorProps>;
    height?: number | string | null;
    clientHeight?: number;
}

/**
 * @internal
 */
export declare interface IInsightRendererProps extends Omit<IInsightViewProps, "insight" | "TitleComponent" | "onInsightLoaded" | "showTitle"> {
    insight: IInsightDefinition | undefined;
    locale: ILocale;
    settings: IUserWorkspaceSettings | undefined;
    colorPalette: IColorPalette | undefined;
    onError?: OnError;
    theme?: ITheme;
    afterRender?: () => void;
    /**
     * Widget data containing title and other metadata.
     * When provided, the widget title and description will be passed through to the chart configuration.
     */
    widget?: IInsightWidget;
}

/**
 * @public
 */
export declare interface IInsightTitleProps {
    title: string;
}

/**
 * @public
 */
export declare interface IInsightViewProps extends Partial<IVisualizationCallbacks> {
    /**
     * Backend to work with.
     *
     * Note: the backend must come either from this property or from BackendContext. If you do not specify
     * backend here, then the executor MUST be rendered within an existing BackendContext.
     */
    backend?: IAnalyticalBackend;
    /**
     * Workspace where the insight exists.
     *
     * Note: the workspace must come either from this property or from WorkspaceContext. If you do not specify
     * workspace here, then the executor MUST be rendered within an existing WorkspaceContext.
     */
    workspace?: string;
    /**
     * Reference to the insight to render. This can be specified by either object reference using URI or using identifier.
     *
     * For convenience it is also possible to specify just the identifier of the insight.
     */
    insight: ObjRef | string;
    /**
     * Additional filters to apply on top of the insight.
     */
    filters?: IFilter[];
    /**
     * Configure chart drillability; e.g. which parts of the charts can be clicked.
     */
    drillableItems?: ExplicitDrill[];
    /**
     * Configure color palette to use for the chart. If you do not specify this, then the palette will be
     * obtained from style settings stored on the backend.
     */
    colorPalette?: IColorPalette;
    /**
     * When embedding insight rendered by a chart, you can specify extra options to merge with existing
     * options saved for the insight.
     */
    config?: IChartConfig | IGeoConfig | IPivotTableConfig | PivotTableNextConfig | any;
    /**
     * execConfig will provide the execution with necessary settings before initiating execution.
     */
    execConfig?: IExecutionConfig;
    /**
     * Locale to use for localization of texts appearing in the chart.
     *
     * Note: text values coming from the data itself are not localized.
     */
    locale?: ILocale;
    /**
     * Indicates that the execution to obtain the data for the insight should be an 'execution by reference'.
     *
     * Execution by reference means that the InsightView will ask analytical backend to compute results for an insight
     * which is stored on the backend by specifying link to the insight, additional filters and description how
     * to organize the data.
     *
     * Otherwise, a freeform execution is done, in which the InsightView will send to backend the full execution
     * definition of what to compute.
     *
     * This distinction is in place because some backends MAY want to prohibit users from doing freeform executions
     * and only allow computing data for set of insights created by admins.
     *
     * Note: the need for execute by reference is rare. You will typically be notified by the solution admin to use
     * this mode.
     */
    executeByReference?: boolean;
    /**
     * In case this property is boolean it indicates that the title component will be rendered if specified in
     * components properties. In case the property is string, this string must not be empty and will be shown as insight
     * title. In case the property is a function, it should be implemented to take the loaded insight object and return
     * modified title in string representation.
     */
    showTitle?: boolean | string | ((insight: IInsight) => string | undefined);
    /**
     * Called when the insight is loaded. This is to allow the embedding code to read the insight data.
     */
    onInsightLoaded?: (insight: IInsight) => void;
    /**
     * Component to render if embedding fails.
     */
    ErrorComponent?: ComponentType<IErrorProps>;
    /**
     * Component to render while the insight is loading.
     */
    LoadingComponent?: ComponentType<ILoadingProps>;
    /**
     * Component to render insight title.
     */
    TitleComponent?: ComponentType<IInsightTitleProps>;
}

/**
 * Layout descriptor.
 * Provides parameters of used layout.
 *
 * @alpha
 */
export declare interface ILayoutDescriptor {
    type: LayoutType;
}

/**
 * Props for the Notification component.
 *
 * @public
 */
export declare interface INotificationComponentProps {
    /**
     * Notification to display.
     */
    notification: INotification;
    /**
     * Function to mark notification as read.
     */
    markNotificationAsRead: (id: string) => void;
    /**
     * Function to handle notification click.
     */
    onNotificationClick?: (notification: INotification) => void;
    /**
     * Function to handle closing the overlay
     */
    closeNotificationsPanel: () => void;
}

/**
 * Props for the NotificationSkeletonItem component.
 *
 * @public
 */
export declare interface INotificationSkeletonItemComponentProps {
    /**
     * Height of the skeleton item in pixels.
     */
    itemHeight: number;
}

/**
 * Props for the NotificationsList component.
 *
 * @public
 */
export declare interface INotificationsListComponentProps {
    /**
     * Component to render when the notifications list is empty.
     */
    NotificationsListEmptyState: ComponentType<INotificationsListEmptyStateComponentProps>;
    /**
     * Component to render when the notifications list is in error state.
     */
    NotificationsListErrorState: ComponentType<INotificationsListErrorStateComponentProps>;
    /**
     * Component to render each notification.
     */
    Notification: ComponentType<INotificationComponentProps>;
    /**
     * Component to render each skeleton item.
     */
    NotificationSkeletonItem: ComponentType<INotificationSkeletonItemComponentProps>;
    /**
     * Active view of the notifications list.
     */
    activeView: INotificationsPanelView;
    /**
     * Status of the notifications list.
     */
    status: UseCancelablePromiseStatus;
    /**
     * Error to display.
     */
    error?: GoodDataSdkError;
    /**
     * Loaded notifications relevant to the active view.
     */
    activeNotifications?: INotification[];
    /**
     * Callback function to mark notification as read.
     */
    markNotificationAsRead: (notificationId: string) => Promise<void>;
    /**
     * Callback function to handle notification click.
     */
    onNotificationClick?: (notification: INotification) => void;
    /**
     * Whether there is a next page of notifications.
     */
    hasNextPage: boolean;
    /**
     * Load next page of notifications.
     */
    loadNextPage: () => void;
    /**
     * Height of the notification item in pixels.
     */
    itemHeight: number;
    /**
     * Gap between notification items in pixels.
     */
    itemsGap: number;
    /**
     * Padding of the notification item (from left/right) in pixels.
     */
    itemPadding: number;
    /**
     * Number of skeleton items to render when loading notifications.
     */
    skeletonItemsCount: number;
    /**
     * Maximum height of the notifications list in pixels.
     */
    maxListHeight?: number;
    /**
     * Callback function to close the notifications panel.
     */
    closeNotificationsPanel: () => void;
}

/**
 * Props for the NotificationsListEmptyState component.
 *
 * @public
 */
export declare interface INotificationsListEmptyStateComponentProps {
    /**
     * Active view of the notifications list.
     */
    activeView: INotificationsPanelView;
}

/**
 * Props for the NotificationsListErrorState component.
 *
 * @public
 */
export declare interface INotificationsListErrorStateComponentProps {
    /**
     * Error to display.
     */
    error?: GoodDataSdkError;
}

/**
 * OpenNotificationsPanelButton component props.
 *
 * @public
 */
export declare interface INotificationsPanelButtonComponentProps {
    /**
     * Ref to the button element - is required for proper alignment of the notification panel.
     */
    buttonRef: RefObject<HTMLButtonElement | null>;
    /**
     * Opens the notification panel.
     */
    openNotificationPanel: () => void;
    /**
     * Closes the notification panel.
     */
    closeNotificationPanel: () => void;
    /**
     * Toggles the notification panel.
     */
    toggleNotificationPanel: () => void;
    /**
     * Indicates whether the notification panel is open.
     */
    isNotificationPanelOpen: boolean;
    /**
     * Indicates whether there are unread notifications.
     */
    hasUnreadNotifications: boolean;
}

/**
 * NotificationsPanel component props.
 *
 * @public
 */
export declare interface INotificationsPanelComponentProps {
    /**
     * Custom notifications panel header component.
     */
    NotificationsPanelHeader: ComponentType<INotificationsPanelHeaderComponentProps>;
    /**
     * Custom notifications list component.
     */
    NotificationsList: ComponentType<INotificationsListComponentProps>;
    /**
     * Custom notifications list empty state component.
     */
    NotificationsListEmptyState: ComponentType<INotificationsListEmptyStateComponentProps>;
    /**
     * Custom notifications list error state component.
     */
    NotificationsListErrorState: ComponentType<INotificationsListErrorStateComponentProps>;
    /**
     * Custom notification component.
     */
    Notification: ComponentType<INotificationComponentProps>;
    /**
     * Custom notification skeleton item component.
     */
    NotificationSkeletonItem: ComponentType<INotificationSkeletonItemComponentProps>;
    /**
     * The callback to toggle the notifications panel.
     */
    toggleNotificationsPanel: () => void;
    /**
     * The callback to open the notifications panel.
     */
    openNotificationsPanel: () => void;
    /**
     * The callback to close the notifications panel.
     */
    closeNotificationsPanel: () => void;
    /**
     * The currently active view of the notifications panel.
     */
    activeView: INotificationsPanelView;
    /**
     * The callback to change the active view of the notifications panel.
     */
    changeActiveView: (view: INotificationsPanelView) => void;
    /**
     * The callback to mark a notification as read.
     */
    markNotificationAsRead: (notificationId: string) => Promise<void>;
    /**
     * The callback to mark all notifications as read.
     */
    markAllNotificationsAsRead: () => Promise<void>;
    /**
     * The number of unread notifications.
     */
    unreadNotificationsCount: number;
    /**
     * Indicates if there are unread notifications.
     */
    hasUnreadNotifications: boolean;
    /**
     * Loaded notifications, relevant for the currently active view.
     */
    activeNotifications: INotification[];
    /**
     * The callback to handle a notification click.
     */
    onNotificationClick?: (notification: INotification) => void;
    /**
     * The status of the notifications loading.
     */
    status: UseCancelablePromiseStatus;
    /**
     * The error that occurred while loading notifications.
     */
    error?: GoodDataSdkError;
    /**
     * The callback to load the next page of notifications.
     */
    loadNextPage: () => void;
    /**
     * Indicates if there is a next page of notifications.
     */
    hasNextPage: boolean;
    /**
     * The height of the notification item in pixels.
     */
    itemHeight: number;
    /**
     * Gap between notification items in pixels.
     */
    itemsGap: number;
    /**
     * Padding of the notification item (from left/right) in pixels.
     */
    itemPadding: number;
    /**
     * Number of skeleton items to render when loading notifications.
     */
    skeletonItemsCount: number;
    /**
     * Maximum height of the notifications list in pixels.
     */
    maxListHeight?: number;
}

/**
 * @public
 */
export declare interface INotificationsPanelCustomComponentsProps {
    /**
     * Custom open notifications panel button component.
     *
     * - Required if renderInline is not enabled.
     */
    NotificationsPanelButton?: ComponentType<INotificationsPanelButtonComponentProps>;
    /**
     * Custom notifications panel component.
     */
    NotificationsPanel?: ComponentType<INotificationsPanelComponentProps>;
    /**
     * Custom notifications panel header component.
     */
    NotificationsPanelHeader?: ComponentType<INotificationsPanelHeaderComponentProps>;
    /**
     * Custom notifications list component.
     */
    NotificationsList?: ComponentType<INotificationsListComponentProps>;
    /**
     * Custom notifications list empty state component.
     */
    NotificationsListEmptyState?: ComponentType<INotificationsListEmptyStateComponentProps>;
    /**
     * Custom notifications list error state component.
     */
    NotificationsListErrorState?: ComponentType<INotificationsListErrorStateComponentProps>;
    /**
     * Custom notification component.
     */
    Notification?: ComponentType<INotificationComponentProps>;
    /**
     * Custom notification skeleton item component.
     */
    NotificationSkeletonItem?: ComponentType<INotificationSkeletonItemComponentProps>;
}

/**
 * Props for the NotificationsPanelHeader component.
 *
 * @public
 */
export declare interface INotificationsPanelHeaderComponentProps {
    /**
     * The currently active view of the notifications panel.
     */
    activeView: INotificationsPanelView;
    /**
     * The callback to change the active view.
     */
    changeActiveView: (view: INotificationsPanelView) => void;
    /**
     * Indicates if there are unread notifications.
     */
    hasUnreadNotifications: boolean;
    /**
     * The number of unread notifications.
     */
    unreadNotificationsCount: number;
    /**
     * The callback to mark all notifications as read.
     */
    markAllNotificationsAsRead: () => void;
}

/**
 * @public
 */
export declare interface INotificationsPanelProps extends INotificationsPanelCustomComponentsProps {
    /**
     * Locale to use.
     */
    locale?: ILocale;
    /**
     * Backend to use.
     *
     * - If not defined, the backend from the BackendProvider context will be used.
     */
    backend?: IAnalyticalBackend;
    /**
     * Workspace ID to use.
     *
     * - If not defined, the workspace ID from the WorkspaceProvider context will be used.
     * - If workspace is not defined and there is no WorkspaceProvider, notifications will be loaded from all workspaces.
     */
    workspace?: string;
    /**
     * Enable inline rendering of the notifications panel
     *
     * - Default: false
     * - If enabled, NotificationsPanelButton won't be rendered, and NotificationsPanel won't be rendered inside modal
     * - This is useful when you want to render notifications panel in a custom modal.
     */
    renderInline?: boolean;
    /**
     * Refresh interval in milliseconds.
     *
     * - Default: 600000 (10 minutes)
     * - If set to 0, notifications won't be refreshed automatically.
     */
    refreshInterval?: number;
    /**
     * Number of notifications to load per page.
     *
     * - Default: 50
     */
    itemsPerPage?: number;
    /**
     * Number of skeleton items to render when loading notifications.
     *
     * - Default: 5
     */
    skeletonItemsCount?: number;
    /**
     * Height of the item in notifications list in pixels.
     *
     * - Default: 52
     */
    itemHeight?: number;
    /**
     * Optionally override max width of the notifications panel.
     *
     * - Does not have effect when renderInline is true - inline rendering always fills the parent container.
     */
    maxWidth?: number | string;
    /**
     * Maximum height of the notifications list in pixels.
     *
     * - Default: 527
     * - Does not have effect when renderInline is true - inline rendering always fills the parent container.
     */
    maxListHeight?: number;
    /**
     * Gap between notification items in the list in pixels.
     *
     * - Default: 10
     */
    itemsGap?: number;
    /**
     * Padding of the notification item (from left and right) in pixels.
     *
     * - Default: 15
     */
    itemPadding?: number;
    /**
     * Callback for notification click.
     */
    onNotificationClick?: (notification: INotification) => void;
    /**
     * Enable export to document storage.
     *
     * - Default: false
     */
    enableScheduleNotifications?: boolean;
}

/**
 * View mode of the notifications panel.
 *
 * @public
 */
export declare type INotificationsPanelView = "all" | "unread";

/**
 * @internal
 */
export declare const INSIGHT_WIDGET_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare const INSIGHT_WIDGET_SIZE_INFO_NEW_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare function InsightError({ error, ErrorComponent, height, clientHeight, }: IInsightErrorProps): JSX.Element;

/**
 * Renders insight passed as a parameter.
 *
 * @internal
 */
export declare function InsightRenderer(props: IInsightRendererProps): JSX.Element | null;

/**
 * Renders insight which was previously created and saved in the Analytical Designer.
 *
 * @public
 */
export declare function InsightView(props: IInsightViewProps): JSX.Element;

/**
 * Type-guard testing whether the provided object is an instance of {@link IDrillDownDefinition}.
 * @beta
 */
export declare function isDrillDownDefinition(obj: unknown): obj is IDrillDownDefinition;

/**
 * @alpha
 */
export declare function isEmptyAfm(obj: unknown): obj is EmptyAfmSdkError;

/**
 * @internal
 */
export declare const isInsightAlertingConfigurationEnabled: (insight: IInsight | IInsightDefinition | undefined) => boolean;

/**
 * @internal
 */
export declare const isInsightKeyDriverAnalysisEnabled: (insight: IInsight | IInsightDefinition | undefined) => boolean;

/**
 * @internal
 */
export declare const isInsightScheduledExportsConfigurationEnabled: (insight: IInsight | IInsightDefinition | undefined) => boolean;

/**
 * @internal
 */
export declare const isInsightSupportedForAlerts: (insight: IInsight | IInsightDefinition | null | undefined) => boolean;

/**
 * @internal
 */
export declare const isInsightSupportedForScheduledExports: (insight: IInsight | IInsightDefinition | null | undefined) => boolean;

/**
 * Info about min, max and default in layout units.
 * If no value is provided for min/max/default layout will use its generic defaults for it.
 *
 * @alpha
 */
export declare interface ISizeInfo {
    default?: number;
    min?: number;
    max?: number;
}

/**
 * Info about min, max and default in layout units with required default value.
 *
 * @alpha
 */
export declare type ISizeInfoDefault = ISizeInfo & {
    default: number;
};

/**
 * Type guard for ISizeInfoDefault
 *
 * @alpha
 */
export declare function isSizeInfo(obj: any): obj is ISizeInfo;

/**
 * Type guard for ISizeInfoDefault
 *
 * @alpha
 */
export declare function isSizeInfoDefault(obj: any): obj is ISizeInfoDefault;

/**
 * Type guard for IVisualizationDefaultSizeInfo
 *
 * @alpha
 */
export declare function isVisualizationDefaultSizeInfo(obj: any): obj is IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare interface IUserEditDialogProps extends IWithTelemetryProps {
    userId: string;
    organizationId: string;
    isAdmin: boolean;
    initialView?: UserEditDialogMode;
    changeUserMembership?: boolean;
    onSuccess: () => void;
    onClose: () => void;
    renderDataSourceIcon?: (dataSource: IGrantedDataSource) => ReactElement;
    areFilterViewsEnabled?: boolean;
    selectedTab?: UserTabId;
}

/**
 * @internal
 */
export declare interface IUserGroupEditDialogProps extends IWithTelemetryProps {
    userGroupId: string;
    organizationId: string;
    isAdmin: boolean;
    initialView?: UserGroupEditDialogMode;
    onSuccess: () => void;
    onClose: () => void;
    renderDataSourceIcon?: (dataSource: IGrantedDataSource) => ReactElement;
    areFilterViewsEnabled?: boolean;
}

/**
 * Info about visualization's min, max and default for width and height with required default value.
 *
 * @alpha
 */
export declare interface IVisualizationDefaultSizeInfo {
    width: ISizeInfoDefault;
    height: ISizeInfoDefault;
}

/**
 * Metadata of the visualization.
 *
 * @privateRemarks
 * This should probably come from the visualizationClass objects, but that is not feasible right now.
 *
 * @alpha
 */
export declare interface IVisualizationMeta {
    /**
     * URL where documentation of the visualization can be found.
     */
    documentationUrl?: string;
    /**
     * If true, the visualization supports being exported (if the currently used backend supports exports as well).
     */
    supportsExport: boolean;
    /**
     * If true, the visualization supports zoom to detailed view.
     */
    supportsZooming: boolean;
}

/**
 * Info about visualization's min, max and default for width and height.
 *
 * @alpha
 */
export declare interface IVisualizationSizeInfo {
    width: ISizeInfo;
    height: ISizeInfo;
}

/**
 * @internal
 */
export declare interface IWithTelemetryProps {
    onEvent: TrackEventCallback;
}

/**
 * @internal
 */
export declare const KPI_WIDGET_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @alpha
 */
export declare type LayoutType = "fluid";

/**
 * @internal
 */
export declare const MIN_VISUALIZATION_WIDTH = 2;

/**
 * @public
 */
export declare function NotificationsPanel(props: INotificationsPanelProps): JSX.Element;

/**
 * @alpha
 */
export declare const PluggableVisualizationErrorCodes: {
    /**
     * If pluggable visualization is asked to render itself but its buckets do not contain the right 'stuff',
     * then this is the error code to communicate the fact.
     */
    INVALID_BUCKETS: string;
    /**
     * If pluggable visualization is asked to render itself but its columns bucket do not contain the right 'stuff',
     * then this is the error code to communicate the fact.
     */
    INVALID_COLUMNS: string;
    /**
     * This error means that empty AFM was went to the GoodData.UI and as such can't be executed.
     */
    EMPTY_AFM: string;
};

/**
 * @alpha
 */
export declare type PluggableVisualizationErrorType = keyof typeof PluggableVisualizationErrorCodes;

/**
 * In order to use React18 for visualization rendering, one has to provide createRoot function.
 * Older React17 render is used by default.

 * @public
 * @deprecated no longer necessary to call this method. It's now no-op for React 18 and 19, kept for backward compatibility.
 */
export declare function provideCreateRoot(_fn: any): void;

/**
 * @internal
 */
export declare const RELATIVE_OPERATORS: {
    readonly RELATIVE_OPERATOR_INCREASE_BY: "INCREASES_BY";
    readonly RELATIVE_OPERATOR_DECREASE_BY: "DECREASES_BY";
    readonly RELATIVE_OPERATOR_CHANGES_BY: "CHANGES_BY";
};

/**
 * @internal
 */
export declare const RICH_TEXT_WIDGET_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare const RICH_TEXT_WIDGET_SIZE_INFO_NEW_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * Schedule-specific automation column names
 * @internal
 */
export declare type ScheduleAutomationsColumnName = "nextRun" | "attachments";

/**
 * @internal
 */
export declare type TelemetryEvent = "multiple-users-deleted" | "multiple-groups-deleted" | "group-deleted" | "user-deleted" | "group-created" | "user-detail-updated" | "group-detail-updated" | "groups-added-to-single-user" | "groups-added-to-multiple-users" | "users-added-to-single-group" | "users-added-to-multiple-groups" | "permission-added-to-single-user" | "permission-added-to-single-group" | "permission-added-to-multiple-users" | "permission-added-to-multiple-groups" | "user-permission-changed-to-hierarchy" | "user-permission-changed-to-single-workspace" | "group-permission-changed-to-hierarchy" | "group-permission-changed-to-single-workspace" | "user-permission-changed-to-view" | "group-permission-changed-to-view" | "user-permission-changed-to-view-save-views" | "group-permission-changed-to-view-save-views" | "user-permission-changed-to-view-export" | "group-permission-changed-to-view-export" | "user-permission-changed-to-view-export-save-views" | "group-permission-changed-to-view-export-save-views" | "user-permission-changed-to-analyze" | "group-permission-changed-to-analyze" | "user-permission-changed-to-analyze-export" | "group-permission-changed-to-analyze-export" | "user-permission-changed-to-manage" | "group-permission-changed-to-manage" | "user-data-source-permission-changed-to-use" | "group-data-source-permission-changed-to-use" | "user-data-source-permission-changed-to-manage" | "group-data-source-permission-changed-to-manage" | "user-role-changed-to-admin" | "user-role-changed-to-member";

/**
 * @internal
 */
export declare type TrackEventCallback = (event: TelemetryEvent) => void;

/**
 * @internal
 */
export declare const UserEditDialog: {
    (props: IUserEditDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare type UserEditDialogMode = "VIEW" | "WORKSPACE" | "USER_GROUPS" | "DATA_SOURCES" | "DETAIL";

/**
 * @internal
 */
export declare const UserGroupEditDialog: {
    (props: IUserGroupEditDialogProps): JSX.Element;
    displayName: string | undefined;
};

/**
 * @internal
 */
export declare type UserGroupEditDialogMode = "VIEW" | "WORKSPACE" | "USERS" | "DATA_SOURCES" | "DETAIL";

/**
 * @internal
 */
export declare type UserTabId = "WORKSPACES" | "USER_GROUPS" | "DETAILS" | "DATA_SOURCES";

/**
 * @internal
 */
export declare const VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare const VISUALIZATION_SWITCHER_WIDGET_SIZE_INFO_NEW_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare const WIDGET_DROPZONE_SIZE_INFO_DEFAULT: IVisualizationDefaultSizeInfo;

/**
 * @internal
 */
export declare type WorkspacePermissionSubject = "user" | "userGroup";

export { }
