import React from "react"; import type { SelectOption } from "@krosoft/core/types"; export interface SingleSelectOption extends SelectOption { /** Texte secondaire affiché en gris à côté du libellé (ex. le groupe d'un tenant). Inclus dans la recherche (mode `searchable`). */ description?: string; /** Option visible mais non sélectionnable : grisée, ignorée par le clic et par la navigation clavier. */ disabled?: boolean; /** Vignette affichée avant le libellé. Définie (URL) → image ; définie à `null`/`""` → placeholder gris ; absente → pas de vignette. */ imageUrl?: string | null; } /** * Les props non reconnues (et la `ref`) sont relayées au bouton du trigger, dans les deux modes : c'est ce * qui permet à un `` (Slot) d'y poser `id`, `aria-describedby` et `aria-invalid`, et donc de * raccrocher le champ à son libellé et à son message d'erreur. Sous React 19 `ref` est une prop ordinaire, * elle voyage donc dans le spread : pas besoin de `forwardRef` (voir aussi `MultiSelect`). */ interface SingleSelectProps extends Omit, "children" | "disabled" | "onChange" | "value"> { options?: SingleSelectOption[]; value: string | undefined; onChange: (value: string) => void; onClear?: () => void; /** Active la recherche : rend un panneau filtrable (aligné visuellement sur `MultiSelect`) au lieu du select simple (Radix). */ searchable?: boolean; /** Mode `searchable` : propose de créer une option quand la saisie ne correspond à aucun libellé existant. */ onCreate?: (label: string) => void; placeholder?: string; searchPlaceholder?: string; emptyLabel?: string; createLabel?: (search: string) => string; disabled?: boolean; /** * Mode `searchable` : panneau rendu en modal (défaut, comme le `Select`). À laisser tel quel dans une boîte de * dialogue : sans ça, le `Dialog` neutralise les clics sur le panneau porté dans le portail. */ modal?: boolean; /** * `"input"` : contrôle de formulaire pleine largeur. * `"filter"` : le même contrôle, dimensionné pour une barre de filtres * (`controlFilterWidthClass`) plutôt que pour la largeur d'un champ de formulaire. */ variant?: "input" | "filter"; className?: string; } export declare const SingleSelect: ({ options, value, onChange, onClear, searchable, onCreate, placeholder, searchPlaceholder, emptyLabel, createLabel, disabled, modal, variant, className, ...triggerProps }: SingleSelectProps) => React.ReactElement; export {}; //# sourceMappingURL=SingleSelect.d.ts.map