import { EventEmitter } from '../../stencil-public-runtime';
export interface SelectItem {
    label: string;
    value: string | number;
    disabled?: boolean;
    created?: boolean;
}
export declare class SpwCustomSelect {
    hostElement: HTMLElement;
    private host;
    private selectContainer;
    private defaultValue;
    private parentScrollContainer;
    /** Événement émis lorsque la valeur sélectionnée change */
    valueChanged: EventEmitter<(string | number)[] | string | number>;
    /** Événement émis lorsqu'une nouvelle option est créée via le champ de recherche */
    optionCreated: EventEmitter<SelectItem>;
    /** Événement émis lorsqu'une option créée est supprimée */
    optionRemoved: EventEmitter<SelectItem>;
    internalValue: (string | number)[] | string | number;
    isOpen: boolean;
    parsedOptions: SelectItem[];
    focusedOptionIndex: number | null;
    searchText: string;
    hasSlottedFooter: boolean;
    dropdownDirection: 'up' | 'down';
    hasSelectedValue: boolean;
    dropdownPosition: {
        top: number;
        left: number;
        width: number;
    };
    /** Valeur actuelle sélectionnée dans le composant, peut être une chaîne, un nombre ou un tableau */
    value: (string | number)[] | string | number;
    /** Label associé au champ de sélection personnalisé */
    label: string;
    /** Placeholder à afficher lorsque aucune option n'est sélectionnée */
    placeholder: string;
    /** Placeholder à afficher dans l'input de recherche si actif */
    searchPlaceholder: string;
    /** Texte à afficher si pas de résultats de recherche */
    noResultsText: string;
    /** Indique si le champ est désactivé et donc non interactif */
    disabled: boolean;
    /** Nom de l'élément dans les formulaires, utilisé pour associer la valeur */
    name: string;
    /** Indique si la sélection est obligatoire dans le formulaire */
    required: boolean;
    /** Liste d'items dynamiques pour générer les options (array d'objets avec label + value) */
    items?: SelectItem[];
    /** Taille du select, peut être "large" ou "medium" */
    size: 'large' | 'medium';
    /** Permet la sélection multiple si vrai */
    multiple: boolean;
    /** Active la fonction de recherche dans la liste des items */
    isSearch: boolean;
    /** Texte d'assistance à afficher sous le label */
    assistiveText?: string;
    /** Message d'erreur à afficher sous le champ */
    error?: string;
    /** Message d'indication (hint) à afficher sous le champ */
    hint?: string;
    /** Message de succès à afficher sous le champ */
    success?: string;
    /** Message de warning à afficher sous le champ */
    warning?: string;
    /** Affiche une icône d'erreur si vrai */
    showErrorIcon?: boolean;
    /** Affiche une icône d'indication si vrai */
    showHintIcon?: boolean;
    /** Affiche une icône de succès si vrai */
    showSuccessIcon?: boolean;
    /** Affiche une icône de warning si vrai */
    showWarningIcon?: boolean;
    /** Titre du tooltip */
    tooltipTitle?: string;
    /** Texte du tooltip */
    tooltipText?: string;
    /** Largeur maximale du tooltip */
    tooltipMaxWidth?: string;
    /** Positionnement du tooltip */
    tooltipDirection?: 'top' | 'bottom' | 'left' | 'right';
    /** Curseur du tooltip */
    tooltipCursor?: 'pointer' | 'default' | 'help' | 'disabled';
    /** Utilise un positionnement fixed pour le dropdown si nécessité de sortir du contexte (utile dans une modal avec overflow hidden) */
    fixedDropdown?: boolean;
    /** Tag name du composant parent contenant le scroll (ex: 'spw-modal'). Le composant remontera les parents pour trouver ce composant et écouter son scroll interne. */
    fixedDropdownParent?: string;
    /** Indique si le champ peut être effacé avec un bouton */
    isClear?: boolean;
    /** Direction d'ouverture du dropdown */
    direction?: 'top' | 'bottom' | 'auto';
    /** Permet à l'utilisateur d'ajouter une option si elle n'existe pas dans la liste (nécessite isSearch) */
    allowCreate?: boolean;
    internals: ElementInternals;
    componentWillLoad(): void;
    /** Méthode publique pour mettre le focus sur le champ de sélection. */
    setFocus(): Promise<void>;
    /** Réinitialise le champ de sélection */
    resetSelect(): Promise<void>;
    /** Définit la valeur du champ de sélection */
    setValue(val: (string | number)[] | string | number): Promise<void>;
    /** Récupère la valeur actuelle du champ de sélection */
    getValue(): Promise<(string | number)[] | string | number>;
    formResetCallback(): void;
    componentDidLoad(): void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    private findParentComponent;
    private findScrollContainerInShadowRoot;
    private ensureParentScrollListener;
    private cleanupParentScrollListener;
    private handleOtherSelectOpened;
    private handleClickOutside;
    parseOptions(newValue: SelectItem[]): void;
    valueChangedHandler(newValue: (string | number)[] | string | number): void;
    private updateSelectedOption;
    internalValueChanged(): void;
    private getFormValue;
    private toggleDropdown;
    private notifyOtherSelects;
    private updateDropdownPosition;
    private determineDropdownDirection;
    private openDropdownWithKeyboard;
    private closeDropdown;
    private slugify;
    private addCreatedOption;
    private removeCreatedOption;
    private handleClear;
    private selectOption;
    private handleOptionKeyDown;
    private handleKeyDown;
    private renderErrorMessage;
    private renderHintMessage;
    private renderWarningMessage;
    private renderSuccessMessage;
    private get elementClass();
    private normalizeString;
    private getSelectedLabels;
    private getFilteredOptions;
    private handleSearchInput;
    private isSearchVisible;
    private showPlaceholder;
    private showCreateButton;
    render(): any;
}
