import { default as React } from 'react';
import { DataNode, DataTree } from '../../types/data-structures';
import { BooleanValue } from '../../types/legacy';
export type ImageTextMode = "Code" | "Text" | "Both";
export type ImageSource = {
    type: "url" | "icon" | "none";
    src?: string;
};
export type FlattenedImageListNode = DataNode & {
    id: string;
    level: number;
    expandable: boolean;
};
export interface BreadcrumbNode extends DataNode {
    level: number;
}
export type ClickEvent = {
    ctrlKey: boolean;
    metaKey: boolean;
    shiftKey: boolean;
};
export interface NavigationStackItem {
    items: DataNode[];
    parentId: string | null;
    parentValue: string | null;
}
/**
 * Payload emitted by `onSelectionChange`.
 * Contains the **complete** set of currently-selected nodes so the
 * consumer can replace its bucket wholesale — no per-item diffing
 * required.
 */
export type SelectionChangePayload = DataNode[];
export interface ImageListProps {
    Class?: string;
    className?: string;
    Columns?: string;
    data?: DataNode[];
    Drag?: BooleanValue;
    ImageText?: ImageTextMode;
    MultiSelect?: BooleanValue;
    PageSize?: string;
    Rows?: string;
    virtualization?: boolean;
    folderGrid?: boolean;
    Navigation?: "drilldown" | "modal" | "slideshow" | "catalog" | "explorer" | "compact" | "v-strip" | "h-strip" | "menu";
    QuickActions?: BooleanValue;
    onActionsRequest?: (node: DataNode) => Promise<DataTree>;
    onActionClick?: (node: DataNode, action: DataNode) => void;
    onClick?: (node: DataNode) => void;
    onDoubleClick?: (node: DataNode) => void;
    onSelectionChange?: (selectedNodes: SelectionChangePayload) => void;
    onContextMenu?: (data: DataNode, htmlElement: HTMLElement | null, ev: React.MouseEvent | MouseEvent) => void;
    onExpand?: (node: DataNode, isExpanded: boolean) => void;
    onDragStart?: (node: FlattenedImageListNode, event?: DragEvent) => void;
    onDragEnd?: (node: FlattenedImageListNode, event?: DragEvent) => void;
    onDrop?: (sourceNode: FlattenedImageListNode, targetNode: FlattenedImageListNode, event?: DragEvent) => void;
    onDragOver?: (node: FlattenedImageListNode, event?: DragEvent) => void;
}
export interface ImageListDrillDownProps {
    navigationStack: NavigationStackItem[];
    getCurrentPath: () => string[];
    navigateBack: () => void;
    navigateToTop: () => void;
}
export interface ImageListModalProps {
    node: DataNode;
    onClose: () => void;
    parentProps: ImageListProps;
}
export interface ImageListSlideshowProps {
    items: FlattenedImageListNode[];
}
export interface ImageListCatalogProps {
    data: DataNode[];
    parentProps: ImageListProps;
}
export interface ImageListExplorerProps {
    data: DataNode[];
    parentProps: ImageListProps;
}
export interface ImageListTreeProps {
    data: DataNode[];
    selectedNode: DataNode | null;
    onSelect: (node: DataNode) => void;
}
export interface ImageListItemProps {
    node: FlattenedImageListNode;
    isCompact?: boolean;
    className?: string;
    children?: React.ReactNode;
    /** Optional overrides that take precedence over context values. */
    overrides?: Partial<import('./image-list-context').ImageListContextValue>;
}
export interface ImageListFolderItemProps {
    node: FlattenedImageListNode;
    className?: string;
    /** Optional overrides that take precedence over context values. */
    overrides?: Partial<import('./image-list-context').ImageListContextValue>;
}
export interface ImageListCompactProps {
    items: FlattenedImageListNode[];
}
export interface ImageListVStripProps {
    data: DataNode[];
    parentProps: ImageListProps;
}
export interface ImageListHStripProps {
    data: DataNode[];
    parentProps: ImageListProps;
}
export interface ImageListMenuProps {
    data: DataNode[];
    parentProps: ImageListProps;
}
export interface StripItemProps {
    node: DataNode;
    index: number;
    orientation: "vertical" | "horizontal";
    isActive?: boolean;
    hasChildren: boolean;
    onClick: (node: DataNode, el: HTMLElement) => void;
    onKeyDown: (ev: React.KeyboardEvent, node: DataNode, index: number) => void;
}
export interface StripChildPopupProps {
    node: DataNode;
    anchorEl: HTMLElement | null;
    orientation: "vertical" | "horizontal";
    onClose: () => void;
    onSelect: (node: DataNode) => void;
}
export interface StripOverflowButtonProps {
    items: DataNode[];
    orientation: "vertical" | "horizontal";
    onItemClick: (node: DataNode, el: HTMLElement) => void;
    onOpenChange?: (isOpen: boolean) => void;
}
export interface MenuNavItemProps {
    node: DataNode;
    isExpanded: boolean;
    isCollapsed: boolean;
    hideLabel?: boolean;
    expandedSections: Set<string>;
    onToggleSection: (id: string) => void;
    onClick: (node: DataNode) => void;
    onSelect: (node: DataNode) => void;
}
//# sourceMappingURL=image-list-types.d.ts.map