import { type ComponentType, type ReactElement } from "react";
import { type DashboardAttributeFilterItem, type IDashboardDateFilter, type IDashboardMeasureValueFilter, type IFilter, type IInsight, type IKpi, type ObjRef } from "@gooddata/sdk-model";
import { type ICustomWidget } from "../../model/types/layoutTypes.js";
import { type ILayoutItemPath, type ILayoutSectionPath } from "../../types.js";
/**
 * @internal
 */
export type DraggableContentItemType = "attributeFilter" | "dateFilter" | "parameter" | "measureValueFilter" | "attributeFilter-placeholder" | "insightListItem" | "insight" | "insight-placeholder" | "kpi" | "kpi-placeholder" | "richText" | "richTextListItem" | "visualizationSwitcher" | "visualizationSwitcherListItem" | "dashboardLayout" | "dashboardLayoutListItem" | "custom";
/**
 * @internal
 */
export type DraggableInternalItemType = "internal-width-resizer" | "internal-height-resizer";
/**
 * @internal
 */
export declare function isDraggableInternalItemType(type: string): type is DraggableInternalItemType;
/**
 * @internal
 */
export type DraggableItemType = DraggableContentItemType | DraggableInternalItemType;
/**
 * @internal
 */
export type AttributeFilterDraggableItem = {
    type: "attributeFilter";
    filter: DashboardAttributeFilterItem;
    filterIndex: number;
};
/**
 * @internal
 */
export declare function isAttributeFilterDraggableItem(item: DraggableContentItem): item is AttributeFilterDraggableItem;
/**
 * @internal
 */
export type DateFilterDraggableItem = {
    type: "dateFilter";
    filter: IDashboardDateFilter;
    filterIndex: number;
};
/**
 * @internal
 */
export declare function isDateFilterDraggableItem(item: DraggableContentItem): item is DateFilterDraggableItem;
/**
 * @internal
 */
export type ParameterDraggableItem = {
    type: "parameter";
    ref: ObjRef;
};
/**
 * @internal
 */
export declare function isParameterDraggableItem(item: DraggableContentItem): item is ParameterDraggableItem;
/**
 * @internal
 */
export type MeasureValueFilterDraggableItem = {
    type: "measureValueFilter";
    filter: IDashboardMeasureValueFilter;
    filterIndex: number;
};
/**
 * @internal
 */
export declare function isMeasureValueFilterDraggableItem(item: DraggableContentItem): item is MeasureValueFilterDraggableItem;
/**
 * @internal
 */
export type BaseDraggableLayoutItemSize = {
    gridWidth: number;
    gridHeight: number;
};
/**
 * @internal
 */
export type BaseDraggableLayoutItem = {
    size: BaseDraggableLayoutItemSize;
};
/**
 * @internal
 */
export declare function isBaseDraggableLayoutItem(item: any): item is BaseDraggableMovingItem;
/**
 * @internal
 */
export type BaseDraggableMovingItem = BaseDraggableLayoutItem & {
    title: string;
    isOnlyItemInSection: boolean;
    sectionIndex: number;
    itemIndex: number;
    layoutPath?: ILayoutItemPath;
};
/**
 * @internal
 */
export declare function isBaseDraggableMovingItem(item: any): item is BaseDraggableMovingItem;
/**
 * @internal
 */
export type InsightDraggableItem = BaseDraggableMovingItem & {
    type: "insight";
    insight: IInsight;
};
/**
 * @internal
 */
export declare function isInsightDraggableItem(item: any): item is InsightDraggableItem;
/**
 * @internal
 */
export type KpiDraggableItem = BaseDraggableMovingItem & {
    type: "kpi";
    kpi: IKpi;
};
/**
 * @internal
 */
export declare function isKpiDraggableItem(item: any): item is KpiDraggableItem;
/**
 * @internal
 */
export type RichTextDraggableItem = BaseDraggableMovingItem & {
    type: "richText";
};
/**
 * @internal
 */
export declare function isRichTextDraggableItem(item: any): item is InsightDraggableItem;
/**
 * @internal
 */
export type RichTextDraggableListItem = BaseDraggableLayoutItem & {
    type: "richTextListItem";
};
/**
 * @internal
 */
export declare function isRichTextDraggableListItem(item: any): item is RichTextDraggableListItem;
/**
 * @internal
 */
export type VisualizationSwitcherDraggableItem = BaseDraggableMovingItem & {
    type: "visualizationSwitcher";
};
/**
 * @internal
 */
export declare function isVisualizationSwitcherDraggableItem(item: any): item is VisualizationSwitcherDraggableItem;
/**
 * @internal
 */
export type VisualizationSwitcherDraggableListItem = BaseDraggableLayoutItem & {
    type: "visualizationSwitcherListItem";
};
/**
 * @internal
 */
export declare function isVisualizationSwitcherDraggableListItem(item: any): item is VisualizationSwitcherDraggableListItem;
/**
 * @internal
 */
export type DashboardLayoutDraggableItem = BaseDraggableMovingItem & {
    type: "dashboardLayout";
};
/**
 * @internal
 */
export declare function isDashboardLayoutDraggableItem(item: any): item is DashboardLayoutDraggableItem;
/**
 * @internal
 */
export type DashboardLayoutDraggableListItem = BaseDraggableLayoutItem & {
    type: "dashboardLayoutListItem";
};
/**
 * @internal
 */
export declare function isDashboardLayoutDraggableListItem(item: any): item is DashboardLayoutDraggableListItem;
/**
 * @internal
 */
export type CustomWidgetDraggableItem = BaseDraggableMovingItem & {
    type: "customWidget";
    widget: ICustomWidget;
};
/**
 * @internal
 */
export type AttributeFilterPlaceholderDraggableItem = {
    type: "attributeFilter-placeholder";
};
/**
 * @internal
 */
export declare function isAttributeFilterPlaceholderDraggableItem(item: any): item is AttributeFilterPlaceholderDraggableItem;
/**
 * @internal
 */
export type KpiPlaceholderDraggableItem = BaseDraggableLayoutItem & {
    type: "kpi-placeholder";
};
/**
 * @internal
 */
export declare function isKpiPlaceholderDraggableItem(item: any): item is KpiPlaceholderDraggableItem;
/**
 * @internal
 */
export type InsightPlaceholderDraggableItem = BaseDraggableLayoutItem & {
    type: "insight-placeholder";
};
/**
 * @internal
 */
export declare function isInsightPlaceholderDraggableItem(item: any): item is InsightPlaceholderDraggableItem;
/**
 * @internal
 */
export type InsightDraggableListItem = BaseDraggableLayoutItem & {
    type: "insightListItem";
    insight: IInsight;
};
/**
 * @internal
 */
export declare function isInsightDraggableListItem(item: any): item is InsightDraggableListItem;
/**
 * @internal
 */
export type CustomDraggableItem = {
    type: "custom";
    [key: string]: any;
};
/**
 * @internal
 */
export type DraggableContentItem = AttributeFilterDraggableItem | AttributeFilterPlaceholderDraggableItem | DateFilterDraggableItem | ParameterDraggableItem | MeasureValueFilterDraggableItem | InsightDraggableItem | InsightDraggableListItem | InsightPlaceholderDraggableItem | KpiDraggableItem | KpiPlaceholderDraggableItem | RichTextDraggableItem | RichTextDraggableListItem | VisualizationSwitcherDraggableItem | VisualizationSwitcherDraggableListItem | DashboardLayoutDraggableItem | DashboardLayoutDraggableListItem | CustomWidgetDraggableItem | CustomDraggableItem;
/**
 * @internal
 */
export type DraggableLayoutItem = InsightDraggableItem | KpiDraggableItem | RichTextDraggableItem | VisualizationSwitcherDraggableItem | DashboardLayoutDraggableItem | CustomWidgetDraggableItem;
/**
 * @internal
 */
export type DraggableInternalItem = IHeightResizerDragItem | IWidthResizerDragItem;
/**
 * @internal
 */
export type DraggableItem = DraggableContentItem | DraggableInternalItem;
/**
 * @internal
 */
export type DraggableItemTypeMapping = DraggableItemComponentTypeMapping & DraggableItemInternalTypeMapping;
/**
 * @internal
 */
export type DraggableItemComponentTypeMapping = {
    attributeFilter: AttributeFilterDraggableItem;
    dateFilter: DateFilterDraggableItem;
    measureValueFilter: MeasureValueFilterDraggableItem;
    parameter: ParameterDraggableItem;
    "attributeFilter-placeholder": AttributeFilterPlaceholderDraggableItem;
    insight: InsightDraggableItem;
    insightListItem: InsightDraggableListItem;
    "insight-placeholder": InsightPlaceholderDraggableItem;
    kpi: KpiDraggableItem;
    "kpi-placeholder": KpiPlaceholderDraggableItem;
    richText: RichTextDraggableItem;
    richTextListItem: RichTextDraggableListItem;
    visualizationSwitcher: VisualizationSwitcherDraggableItem;
    visualizationSwitcherListItem: VisualizationSwitcherDraggableListItem;
    dashboardLayout: DashboardLayoutDraggableItem;
    dashboardLayoutListItem: DashboardLayoutDraggableListItem;
    custom: CustomDraggableItem;
};
/**
 * @internal
 */
export interface IHeightResizerDragItem {
    type: "internal-height-resizer";
    sectionIndex: number;
    sectionPath?: ILayoutSectionPath;
    itemIndexes: number[];
    widgetHeights: number[];
    initialLayoutDimensions: DOMRect;
    minLimit: number;
    maxLimit: number;
}
/**
 * @internal
 */
export interface IWidthResizerDragItem {
    type: "internal-width-resizer";
    sectionIndex: number;
    itemIndex: number;
    layoutPath?: ILayoutItemPath;
    gridColumnWidth: number;
    gridColumnHeightInPx: number;
    currentWidth: number;
    initialLayoutDimensions: DOMRect;
    minLimit: number;
    maxLimit: number;
    rowIndex?: number;
}
/**
 * @internal
 */
export type DraggableItemInternalTypeMapping = {
    "internal-width-resizer": IWidthResizerDragItem;
    "internal-height-resizer": IHeightResizerDragItem;
};
/**
 * @internal
 */
export type CustomDashboardInsightListItemComponentProps = {
    isLocked?: boolean;
    title?: string;
    description?: string;
    updated?: string;
    type?: string;
    className?: string;
    showDescriptionPanel?: boolean;
    onDescriptionPanelOpen?: () => void;
    metadataTimeZone?: string;
    filters?: IFilter[];
    useRichText?: boolean;
    useReferences?: boolean;
    LoadingComponent?: ComponentType;
};
/**
 * @internal
 */
export type CustomDashboardInsightListItemComponent = ComponentType<CustomDashboardInsightListItemComponentProps>;
/**
 * @internal
 */
export type IWrapCreatePanelItemWithDragProps = {
    children: ReactElement;
    dragItem: DraggableItem;
    hideDefaultPreview?: boolean;
    disabled?: boolean;
    onDragStart?: (item: DraggableItem) => void;
};
/**
 * @internal
 */
export type IWrapCreatePanelItemWithDragInnerProps = {
    children: ReactElement;
    dragItem: DraggableItem;
    hideDefaultPreview?: boolean;
    disabled?: boolean;
    canDrag: boolean;
    onDragStart?: (item: DraggableItem) => void;
    onDragEnd?: (didDrop: boolean) => void;
};
/**
 * @internal
 */
export type IWrapCreatePanelItemWithDragComponent = ComponentType<IWrapCreatePanelItemWithDragProps>;
/**
 * @internal
 */
export interface IWrapInsightListItemWithDragProps {
    children: ReactElement;
    insight: IInsight;
    onDragStart?: (item: DraggableItem) => void;
}
/**
 * @internal
 */
export type IWrapInsightListItemWithDragComponent = ComponentType<IWrapInsightListItemWithDragProps>;
//# sourceMappingURL=types.d.ts.map