import { TemplateResult } from 'lit';
import NileElement from '../internal/nile-element';
import '../nile-checkbox/index';
import '../nile-input/index';
import '../nile-link/index';
import '../nile-icon/index';
import '../nile-lite-tooltip/index';
import type { CSSResultGroup } from 'lit';
export type NileDetailVariant = 'default' | 'selection' | 'light' | 'select-light';
export interface NileDetailSelectionItem {
    value: string;
    label?: string;
    description?: string;
    prefix?: string;
    suffix?: string;
    disabled?: boolean;
    className?: string;
}
export interface NileDetailRenderItemConfig {
    getDisplayText: (item: any) => string;
    getValue?: (item: any) => string;
    getSearchText?: (item: any) => string;
    getDescription?: (item: any) => string;
    getPrefix?: (item: any) => string;
    getSuffix?: (item: any) => string;
    getDisabled?: (item: any) => boolean;
    getClassName?: (item: any) => string;
}
type SelectionItem = string | NileDetailSelectionItem | Record<string, any>;
export interface NileDetailSelectionConfig {
    variant?: NileDetailVariant;
    heading?: string;
    description?: string;
    itemsLabel?: string;
    items?: SelectionItem[];
    selected?: string[];
    renderItemConfig?: NileDetailRenderItemConfig;
    allowHtmlLabel?: boolean;
    layout?: {
        orientation?: 'horizontal' | 'vertical' | 'both';
        gridRows?: number;
        gridColumns?: number;
        matrixColumns?: number;
        minColumnWidth?: string;
        laneHeight?: number;
        maxHeight?: string;
        expandIconPlacement?: 'left' | 'right';
    };
    search?: {
        placeholder?: string;
        disableLocal?: boolean;
    };
    virtualization?: {
        enabled?: boolean;
        threshold?: number;
        overscan?: number;
    };
    pagination?: {
        totalCount?: number;
        pageSize?: number;
        fetchPage?: (offset: number, limit: number) => Promise<SelectionItem[]>;
        placeholderLabel?: string;
    };
    labels?: {
        restore?: string;
        clear?: string;
        selectedOnly?: string;
        showAll?: string;
    };
    showSelectedToggle?: boolean;
    open?: boolean;
    disabled?: boolean;
}
export declare class NileDetail extends NileElement {
    static styles: CSSResultGroup;
    detail: HTMLDetailsElement;
    header: HTMLElement;
    body: HTMLElement;
    open: boolean;
    heading: string;
    description: string;
    expandIconPlacement: 'left' | 'right';
    disabled: boolean;
    variant: NileDetailVariant;
    items: SelectionItem[];
    selected: string[];
    renderItemConfig?: NileDetailRenderItemConfig;
    allowHtmlLabel: boolean;
    disableLocalSearch: boolean;
    totalCount?: number;
    pageSize: number;
    fetchPage?: (offset: number, limit: number) => Promise<SelectionItem[]>;
    placeholderLabel: string;
    config?: NileDetailSelectionConfig;
    searchPlaceholder: string;
    itemsLabel: string;
    restoreLabel: string;
    clearLabel: string;
    gridRows: number;
    gridColumns: number;
    minColumnWidth: string;
    laneHeight: number;
    orientation: 'horizontal' | 'vertical' | 'both';
    maxHeight: string;
    matrixColumns: number;
    virtualize: boolean;
    virtualizeThreshold: number;
    overscan: number;
    private _detailOpen;
    private _hasSlottedContent;
    private _searchTerm;
    private _selectedSet;
    private _showSelectedOnly;
    showSelectedToggle: boolean;
    selectedOnlyLabel: string;
    showAllLabel: string;
    private _restoreDefaults;
    private _gridResizeObserver;
    private _virtCtrl;
    private _rowVirtCtrl;
    private _colVirtCtrl;
    private _pageCache;
    private _pendingPages;
    /** True for any variant that renders the selection UI/behavior. */
    private get _isSelectionVariant();
    /** True for any variant that applies the light styling. */
    private get _isLightVariant();
    private get _isInfiniteMode();
    private _effectiveTotalCount;
    private _getItemAt;
    private _scheduleFetchForRange;
    private _loadPage;
    /** Public: clear the page cache (use after a query change to refetch). */
    resetPages(): void;
    private get _isVirtualized();
    private get _columnWidthPx();
    firstUpdated(): void;
    disconnectedCallback(): void;
    updated(_changed: Map<string, unknown>): void;
    private _syncVirtualizer;
    private _syncBothVirtualizers;
    private _setupGridResizeObserver;
    private _scheduleTooltipOverflowCheck;
    private _updateTooltipOverflowStates;
    _onSelectedPropertyChange(): void;
    _onConfigChange(): void;
    private _applyConfig;
    private _syncSelectedFromProperty;
    private _getItemValue;
    private _getItemLabel;
    private _getItemSearchText;
    private _getItemDescription;
    private _getItemPrefix;
    private _getItemSuffix;
    private _getItemDisabled;
    private _getItemClassName;
    private get _filteredItems();
    private _onToggleSelectedOnly;
    private _selectableValues;
    private get _allChecked();
    private get _indeterminate();
    private get _countLabel();
    private _emitSelectionChange;
    private _onItemChange;
    private _onSelectAllChange;
    private _emitSearch;
    private _onSearchInput;
    private _onSearchClear;
    private _onRestore;
    private _onClear;
    private _handleDefaultSlotChange;
    private _stopHeaderToggle;
    private _handleSummaryClick;
    private _handleSummaryKeyDown;
    handleOpenChange(): Promise<void>;
    show(): Promise<unknown>;
    hide(): Promise<unknown>;
    private get _summaryLabel();
    private _renderSelectionLabel;
    private _renderSelectionBody;
    private _renderItemContent;
    private _renderItemTooltip;
    private _renderStaticGrid;
    private _renderBothVirtualGrid;
    private _renderVirtualGrid;
    private _renderPlaceholder;
    render(): TemplateResult;
}
export default NileDetail;
declare global {
    interface HTMLElementTagNameMap {
        'nile-detail': NileDetail;
    }
}
