import { ReactNode } from 'react';
/**
 * SelectDropdown: komponen dropdown yang menampilkan daftar opsi dengan kemampuan search, infinite scroll, dan preview selected value.
 *
 * Fitur utama:
 * - Search dengan debounce untuk performa optimal
 * - Load More button untuk pagination data besar
 * - Preview selected value di dalam panel
 * - Support single dan multiple selection
 * - Customizable rendering
 *
 * Props penting:
 * - width:         lebar komponen (trigger + default popup). ex: 320 | '24rem' | '100%'
 * - panelWidth:    lebar khusus popup; fallback ke width jika kosong
 * - panelHeight:   tinggi maksimum popup (scroll otomatis). default: 600 (px)
 * - hasMore:       apakah masih ada data yang bisa di-load (load more button)
 * - loading:       apakah sedang loading data
 * - currentPage:   halaman saat ini
 * - onLoadMore:    callback untuk load data halaman berikutnya (triggered by button)
 * - onSearch:      callback untuk search dengan debounce
 * - searchDebounceMs: delay untuk debounce search (ms). default: 300
 * - renderSelectedPreview: custom render untuk preview selected value
 * - onRemoveSelected: callback untuk remove/deselect item dari preview
 * - searchValue:   controlled search value (optional)
 * - onSearchChange: callback untuk perubahan search value (controlled mode)
 * - disabled:      apakah komponen dalam mode readonly/disabled
 */
export interface SelectOption {
    label: string;
    value: any;
    disabled?: boolean;
}
export type SelectDropdownSize = 'sm' | 'md' | 'lg';
export interface SelectDropdownProps {
    options: SelectOption[];
    selected: any | any[];
    onSelect: (selectedValue: any | any[], rawValue?: any) => void;
    placeholder?: string;
    size?: SelectDropdownSize;
    triggerClassName?: string;
    panelClassName?: string;
    renderOptionLabel?: (option: SelectOption) => ReactNode | undefined;
    indicator?: 'check' | 'radio';
    multiple?: boolean;
    className?: string;
    onClose?: () => void;
    prefixNode?: ReactNode;
    /** Lebar komponen (container + default popup). Contoh: 320, '24rem', '100%' */
    width?: number | string;
    /** (Opsional) Lebar khusus popup; jika tak diisi, ikut `width`. */
    panelWidth?: number | string;
    /** 🆕 Tinggi maksimum popup; overflow akan scroll. Default: 600px */
    panelHeight?: number | string;
    /** 🆕 Infinite Scroll Props */
    /** Apakah masih ada data yang bisa di-load (untuk infinite scroll) */
    hasMore?: boolean;
    /** Apakah sedang loading data (untuk infinite scroll) */
    loading?: boolean;
    /** Halaman saat ini (untuk infinite scroll) */
    currentPage?: number;
    /** Callback untuk load data halaman berikutnya */
    onLoadMore?: (page: number) => void;
    /** Callback untuk search dengan debounce */
    onSearch?: (searchTerm: string) => void;
    /** Delay untuk debounce search (ms). Default: 300 */
    searchDebounceMs?: number;
    /** Custom render untuk preview selected value */
    renderSelectedPreview?: (selected: any | any[]) => ReactNode;
    /** Callback untuk remove/deselect item dari preview */
    onRemoveSelected?: (value: any) => void;
    /** Controlled search value (optional) - jika tidak disediakan, akan menggunakan internal state */
    searchValue?: string;
    /** Callback untuk perubahan search value (optional) - untuk controlled mode */
    onSearchChange?: (searchTerm: string) => void;
    /** Apakah komponen dalam mode readonly/disabled */
    disabled?: boolean;
    /** Tampilkan preview selected value. Default: true */
    showPreviewValue?: boolean;
    /** Tampilkan fitur search. Default: true */
    searchable?: boolean;
    /** Callback untuk perubahan selectedRaw (berisi SelectOption object atau array) */
    onSelectedRawChange?: (selectedRaw: SelectOption | SelectOption[] | null) => void;
    /** Label untuk dropdown */
    label?: ReactNode;
    /** Apakah field ini required (menampilkan asterisk) */
    required?: boolean;
    /** Judul untuk bagian selected value di dalam panel */
    selectionTitle?: ReactNode;
}
export declare const SelectDropdown: ({ options, selected, onSelect, placeholder, size, triggerClassName, panelClassName, renderOptionLabel, indicator, multiple, className, onClose, prefixNode, width, panelWidth, panelHeight, hasMore, loading, currentPage, onLoadMore, onSearch, searchDebounceMs, renderSelectedPreview, onRemoveSelected, searchValue, onSearchChange, disabled, showPreviewValue, searchable, onSelectedRawChange, label, required, selectionTitle, }: SelectDropdownProps) => import("react/jsx-runtime").JSX.Element;
//# sourceMappingURL=SelectDropdown.d.ts.map