Prezentare generală
Dropdown combină o fereastră pop-up poziționată, rânduri vizuale, navigare prin tastatură, focalizare și închidere. Aplicația dvs. gestionează datele, filtrarea, preluarea și paginarea. SelectionGroup gestionează valori de selecție independente în interiorul ferestrei popup. Importați-l din twenty-ui/components.
Dropdown.Content acceptă decalaje numerice sau funcții pentru sideOffset și alignOffset. Funcțiile de decalare primesc dimensiunile ancorei și ale ferestrei pop-up, latura și alinierea. Folosește-le pentru a păstra suprapunerea unui selector de câmp ancorat atunci când celula este scalată.
Utilizare
Alegeți un tip de interacțiune
Setațitype în Dropdown.Root pentru a corespunde conținutului ferestrei pop-up.
Selectoarele permit acțiuni de creare și grupuri de selecție independente în aceeași pagină, în orice ordine. Fiecare grup de selectare este o casetă cu listă, iar opțiunile sale expun
aria-selected. Grupurile de meniu utilizează elemente de meniu radio sau cu casetă de bifare bifate. Grupurile de panouri utilizează butoane cu aria-pressed. Comenzile păstrează semantica acțiunilor modului lor. Atribuiți fiecărui grup și lui Search un nume accesibil. Acest selector personalizat nu este un Combobox nativ.
Content își preia numele accesibil de la Trigger sau de la SubmenuTrigger într-un submeniu. Transmiteți aria-label în Content atunci când declanșatorul afișează o valoare, cum ar fi opțiunea selectată, sau când rădăcina nu are declanșator. Un aria-label sau aria-labelledby explicit și un Title dintr-un Header au prioritate față de numele declanșatorului.
Select și Popover rămân disponibile pentru compunere directă.
Anatomie
Content include portalul și poziționatorul. Utilizați width, side, align, sideOffset și alignOffset pentru a controla poziționarea, iar collisionPadding pentru a menține fereastra pop-up mai departe de marginile ferestrei de vizualizare înainte de a se deplasa sau inversa (5 pixeli în mod implicit). Section grupează rânduri cu spațiere comună, iar Separator separă secțiunile. O secțiune scrollable își limitează înălțimea și se derulează; imbricați în ea secțiuni etichetate pentru a le derula ca pe o singură listă. Rândurile utilizează ListItem pentru aspectul lor.
render, astfel încât declanșatorul să rămână un singur element interactiv. Componentele personalizate trebuie să redirecționeze props și ref furnizate. ActionItem acceptă, de asemenea, render pentru linkuri.
Acțiuni pentru elemente
ActionItem și OptionItem acceptă actions pentru controalele de final, cum ar fi butonul de editare al unei file. Folosește-le numai în paginile picker și panel: un menu poate conține doar elemente de meniu, deci nu poate include alte controale. Setează actionsVisibility="always" pentru a le menține vizibile; valoarea implicită este "hover". Controalele secundare sunt afișate lângă controlul rândului principal și se activează independent: nu închid fereastra pop-up, așadar închide-o din handlerul acțiunii atunci când este necesar. Proprietatea render și referința se aplică în continuare controlului principal, astfel încât acesta poate servi și ca mâner de glisare.
Utilizează tabIndex={-1} pentru o acțiune secundară disponibilă doar cu indicatorul, care are o alternativă separată pentru tastatură. Navigarea cu tastatura continuă să focalizeze și să activeze controlul principal.
Anteturi
Header aranjează un rând în partea de sus a ferestrei pop-up. Introduceți un Title în acesta pentru a denumi fereastra pop-up după titlu, în loc de declanșator. Close închide fereastra pop-up în același mod ca o apăsare în exterior. În mod implicit, acesta redă un buton cu pictogramă X, așadar oferiți-i un aria-label sau transmiteți render și elemente copil pentru un alt control. Alte controale, cum ar fi un buton care revine la un pas anterior, pot fi în același rând. Utilizați Dropdown.Back când navigați în istoricul paginilor rădăcinii.
Căutare și selecție
Search furnizează câmpul de introducere și navigarea către rândurile de rezultate. Transmiteți value și onValueChange; calculați sau preluați rezultatele potrivite în aplicația dvs. Redați Loading cât timp o solicitare este în așteptare și Empty când nu există rezultate potrivite. Ambele acceptă text de stare furnizat de apelant.
Încadrați opțiunile selectabile în SelectionGroup și atribuiți fiecărei opțiuni un value stabil, unic în cadrul grupului. Un grup necontrolat necesită, de asemenea, un id unic în cadrul arborelui său derulant, inclusiv în submeniuri. Componentele Root imbricate independent își păstrează propriul depozit de selecție. Selecția unică utilizează un șir sau null pentru lipsa unei selecții. Selecția multiplă utilizează un tablou, inclusiv [] pentru lipsa unei selecții.
value și onValueChange pentru selecția controlată. Omiterea lui value sau transmiterea lui undefined lasă selecția necontrolată; defaultValue îi stabilește valoarea inițială. Un grup necontrolat are implicit valoarea null sau [] cu multiple. id-ul său stabil păstrează selecția la închidere și redeschidere, precum și la navigarea între pagini. Eliminarea sau filtrarea unei opțiuni nu îi șterge identificatorul selectat și nu emite o modificare; opțiunea este selectată din nou când revine. Utilizați o valoare controlată atunci când aplicația trebuie să elimine alegerile indisponibile.
Fiecare grup se modifică independent. O opțiune se confirmă în cel mai apropiat grup al său, în timp ce pagina activă furnizează o colecție ordonată pentru navigarea cu săgețile între grupuri și rânduri de acțiuni. Activarea repetată a unei opțiuni unice selectate îi păstrează valoarea fără un alt callback de modificare. Activarea multiplă comută opțiunea în tablou.
Selecția unică se închide implicit; selecția multiplă rămâne deschisă. SelectionGroup.closeOnSelect modifică valoarea implicită a grupului, iar OptionItem.closeOnSelect o suprascrie pentru o opțiune. Rândurile de acțiuni utilizează closeOnClick independent. O modificare anulată păstrează selecția anterioară și nu închide automat fereastra popup.
onValueChange primește următoarea valoare și detaliile evenimentului cu event, reason, trigger, cancel() și isCanceled. Motivul este item-press, iar event este evenimentul original de activare. OptionItem.onSelect primește aceleași detalii înainte ca proprietarul să confirme. Apelați cancel() în oricare dintre callback-uri pentru a preveni selecția și închiderea automată.
Search are focalizarea și o interogare nevidă, primul OptionItem eligibil din grupurile de selecție este evidențiat, iar Enter îl activează. Rândurile de acțiuni nu sunt niciodată selectate în acest mod. ArrowDown mută focalizarea pe primul rând activat, inclusiv pe acțiuni. Ieșirea din căutare șterge previzualizarea și aria-activedescendant, chiar și atunci când fereastra pop-up rămâne deschisă. Revenirea la căutare restaurează previzualizarea pentru interogarea curentă.
Enter nu face nimic pentru o interogare goală sau care conține doar spații albe ori când nu mai rămâne nicio opțiune eligibilă. Compunerea textului cu o metodă de introducere nu activează o opțiune și nu mută focalizarea cu tastele săgeată. Când rândurile sunt fixate deasupra rezultatelor, cum ar fi valoarea curentă sau un rând „niciuna”, redați-le numai când corespund textului de căutare. Fereastra pop-up rămâne deschisă când nicio opțiune nu se potrivește. Filtrarea rămâne în responsabilitatea apelantului.
OptionItem independent acceptă în continuare selected și onSelect pentru apelanții care gestionează singuri selecția. Opțiunile grupate derivă selecția din valoarea grupului; nu duplicați acea stare în opțiune. Grupurile de selecție personalizate nu oferă trimitere nativă a formularelor, resetare, validare obligatorie, comportament doar în citire sau integrare Field. Utilizați Select când sunt necesare aceste contracte native ale formularelor.
Grile de pictograme
Setațicolumns în Section pentru a aranja elementele în coloane de grilă cu lățime egală. Același număr controlează navigarea prin tastatură: Left și Right se deplasează într-un rând, iar Up și Down se deplasează între rânduri. Navigarea omite opțiunile dezactivate și urmează direcția de citire. Când nu mai există nicio opțiune activată în coloană, Up și Down se deplasează la cea mai apropiată opțiune activată din rândul următor. Up din primul rând revine la câmpul de căutare când nu există nicio secțiune anterioară. Un ultim rând scurt utilizează ultimul său element când coloana solicitată lipsește. Într-un submeniu, săgeata înapoi închide submeniul când nu mai rămâne nicio opțiune activată în stânga sa.
Redați fiecare pictogramă ca OptionItem cu o etichetă accesibilă și un buton cu pictogramă prin render. Utilizați indicator="none" pentru a afișa selecția prin fundalul butonului. Funcția callback render primește starea { selected, multiple, disabled }; utilizați-o pentru a stiliza o celulă selectată și transmiteți prop-urile și ref furnizate.
Focalizare tastatură
În paginilemenu și picker, rândurile formează un singur punct de oprire Tab. Tastele săgeată mută focalizarea între secțiuni, acțiuni și opțiuni, iar Home și End o mută la primul și ultimul rând activat, cu excepția cazului în care câmpul de căutare are focalizarea. Mutarea focalizării nu selectează niciodată o opțiune; Enter sau Space activează rândul focalizat. Revenirea cu Tab la rânduri readuce focalizarea la ultimul rând focalizat sau la primul rând activat după ce acel rând nu mai există. Căutarea, Back de lângă o căutare, butoanele antetului și alte controale din fereastra pop-up își păstrează propriile puncte de oprire Tab.
Tab și Shift+Tab închid un menu, împreună cu meniurile sale părinte atunci când focalizarea este într-un submeniu. Într-un picker, Tab parcurge controalele ferestrei pop-up și închide fereastra pop-up atunci când focalizarea o părăsește. Un panel păstrează ordinea Tab nativă a controalelor sale.
Pagini și submeniuri
UtilizațiPage pentru navigare care înlocuiește conținutul aceleiași ferestre pop-up. Încadrați prima pagină în Page id="root" sau alegeți o altă pagină inițială cu defaultPage. Setați page pentru o acțiune ca să navigați fără a închide. Back revine la pagina anterioară și restaurează focalizarea pe rândul care a invocat-o.
Paginile sunt montate la prima vizitare și rămân montate pe durata sesiunii deschise. Revenirea la o pagină îi păstrează căutarea locală, schițele de formular și secțiunile derulabile. Paginile inactive sunt ascunse și inerte: nu participă la navigarea prin tastatură, la focalizare sau la arborele de accesibilitate, iar ferestrele lor popup Dropdown imbricate sunt inactive.
Redeschiderea începe o sesiune nouă la defaultPage, cu conținut nou, inclusiv când este setat Content.keepMounted sau când fereastra popup se redeschide în timpul tranziției sale de ieșire. Istoricul paginii, căutarea locală și schițele se resetează. Pagina care se închide rămâne montată în timpul tranziției sale de ieșire.
Valorile necontrolate ale SelectionGroup rămân stocate în Root sub id-ul stabil al fiecărui grup și se păstrează la redeschidere. Valorile controlate de apelant rămân în proprietatea apelantului. De exemplu, o valoare de căutare stocată deasupra lui Content rămâne neschimbată până când apelantul o actualizează. Pune starea temporară de căutare sau de schiță într-o componentă din Content sau Page atunci când ar trebui să se reseteze odată cu sesiunea; păstrează starea durabilă a aplicației deasupra lui Content.
O pagină poate suprascrie type al rădăcinii. De exemplu, un meniu de acțiuni poate deschide o pagină de selector cu căutare sau un panou de formular. Căutarea primește focalizarea la intrarea într-o pagină cu căutare; celelalte pagini își focalizează primul rând după Back.
useDropdownPage într-o componentă redată în interiorul rădăcinii. Returnează page-ul curent, goToPage(page), goBack(), canGoBack și isActive. Într-o pagină, isActive este adevărat numai cât timp pagina respectivă este activă și meniul său derulant este deschis. Folosește isActive pentru a afișa ferestrele popup personalizate ale unei pagini, randate prin portal, astfel încât acestea să dispară când pagina devine inactivă sau meniul derulant se închide. De exemplu, o opțiune poate reveni la pagina anterioară după o selecție, în timp ce fereastra pop-up rămâne deschisă:
Submenu cu SubmenuTrigger și un Content imbricat pentru un meniu alăturat. Arrow Right intră în submeniu; Arrow Left revine la părintele său. Selectarea unei acțiuni de închidere închide întregul dropdown.
Selectoare imbricate independente
Plasați un altDropdown.Root în Content când un control își deschide propriul selector, cum ar fi un selector pentru direcția de sortare. Selectarea unei opțiuni interioare închide numai acel selector și restaurează focalizarea pe declanșatorul său. Escape și apăsările în exterior închid câte un strat pe rând. Utilizați Submenu pentru comenzi care ar trebui să închidă întregul arbore de meniuri când sunt selectate.
Panouri și stare controlată
Utilizațitype="panel" pentru câmpuri de formular. Interacțiunea cu câmpul de introducere menține panoul deschis; o acțiune de salvare îl poate închide. Gestionați open și onOpenChange când o altă componentă sau o comandă rapidă trebuie să deschidă dropdownul. Păstrați această stare împreună cu funcționalitatea care coordonează interacțiunea.
Escape închide fereastra pop-up și restaurează focalizarea pe declanșatorul său. Interacțiunea în exterior o închide, de asemenea, iar clicul care o închide nu activează elementul pe care ajunge. Tastele apăsate în fereastra pop-up rămân în interiorul acesteia, cu excepția comenzilor rapide Ctrl sau Cmd pe care dropdownul nu le gestionează, astfel încât comenzile rapide la nivel de pagină să continue să funcționeze. Content acceptă opțiuni de focalizare și portal de la Popover, inclusiv o țintă explicită pentru revenirea focalizării în fluxurile de lucru ale editorului.
Închidere
Escape, o apăsare în exteriorul ferestrei pop-up și ieșirea cu Tab din aceasta închid dropdownul. TransmiteționEscapeKeyDown sau onInteractOutside la Root pentru a reacționa înainte de închidere și apelați event.preventDefault() pentru a o menține deschisă. event.target este elementul apăsat în exterior sau null când focalizarea părăsește elementul cu Tab, iar event.type este tipul evenimentului DOM care l-a declanșat, cum ar fi touchmove pentru o glisare în exteriorul ferestrei pop-up. O apăsare în exterior prevenită ajunge totuși la elementul pe care aterizează.
Ancorare fără declanșator
O rădăcină se poate deschide fără unTrigger, de exemplu ca meniu contextual. Controlați-o cu open și onOpenChange și transmiteți anchor la Content: un element, un ref sau un element virtual care returnează un dreptunghi în coordonatele ferestrei de vizualizare. Oferiți lui Content un aria-label, deoarece nu există un declanșator după care să fie denumit. La închidere, focalizarea revine la elementul care era focalizat când s-a deschis fereastra pop-up.
useDropdownPlacementOrThrow în Dropdown.Content pentru a citi valorile rezolvate pentru side și align, inclusiv inversările cauzate de coliziuni. Folosiți latura rezolvată pentru a poziționa căutarea și controalele de creare ale unui selector lângă declanșatorul acestuia. Păstrați controalele în ordinea lor vizuală în DOM, astfel încât navigarea cu tastatura să urmeze aspectul. O căutare de sub rezultate primește focalizarea de la ArrowDown pe ultimul rezultat; ArrowUp din acea căutare revine la ultimul rezultat.
Etichete
Fiecare parte își gestionează propriul text: furnizațiSearch.placeholder și nume accesibile native, atribute accesibile pentru Close și elemente copil pentru Back, Loading și Empty. Back are implicit valoarea Back; stările de încărcare și gol nu au mesaj integrat. Părțile elementului acceptă shortcutJoinLabel pentru a înlocui then implicit dintre pașii secvențiali ai unei comenzi rapide. aria-labelledby nativ are prioritate față de aria-label.
Proprietăți
Dropdown.Root
boolean
Whether the popup is initially open when uncontrolled.
string
ID of the
Page shown when the popup opens. Closing the popup resets the page history to it. Defaults to root.boolean
Default for standalone options. Use
SelectionGroup.multiple for independently owned selection values.((event: DropdownDismissEvent) => void)
Called when Escape is about to close the popup. Call
event.preventDefault() to keep it open.((event: DropdownDismissEvent) => void)
Called when a press outside the popup, or Tab out of it, is about to close it.
event.target is the element pressed outside, or null after Tab, and event.type is the type of the DOM event that triggered it. Call event.preventDefault() to keep it open.((open: boolean) => void)
Called with the next open state when the popup opens or closes.
boolean
Whether the popup is open. Use with
onOpenChange to control it."menu" | "panel" | "picker"
obligatoriu
Interaction model:
menu for commands and links, picker for search and selectable options, or panel for forms. It sets the ARIA roles, initial focus, and keyboard navigation.Dropdown.Trigger
string | ((state: PopoverTriggerState) => string | undefined)
CSS class applied to the element, or a function that
returns a class based on the component’s state.
number
implicit:"0"
How long to wait before closing the popover that was opened on hover.
Specified in milliseconds.Requires the
openOnHover prop.number
implicit:"300"
How long to wait before the popover may be opened on hover. Specified in milliseconds.Requires the
openOnHover prop.string
ID of the trigger. In addition to being forwarded to the rendered element,
it is also used to specify the active trigger for the popover in controlled mode (with the PopoverRoot
triggerId prop).boolean
implicit:"true"
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (e.g. <div>).boolean
implicit:"false"
Whether the popover should also open when the trigger is hovered.
ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, PopoverTriggerState>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render.CSSProperties | ((state: PopoverTriggerState) => CSSProperties | undefined)
Style applied to the element, or a function that
returns a style object based on the component’s state.
Dropdown.Content
"center" | "end" | "start"
implicit:"start"
Alignment along the anchor. Defaults to start.
number | OffsetFunction
implicit:"0"
Offset along the alignment axis. Accepts a number or positioning function.
Element | VirtualElement | RefObject<Element | null> | (() => Element | VirtualElement | null) | null
An element to position the popup against.
By default, the popup will be positioned against the trigger.
string | ((state: PopoverPopupState) => string | undefined)
CSS class applied to the element, or a function that
returns a class based on the component’s state.
Padding
implicit:"5"
Additional space to maintain from the edge of the collision boundary.
HTMLElement | ShadowRoot | RefObject<HTMLElement | ShadowRoot | null> | null
Portal destination, using the scoped theme when omitted. Explicit null waits for a target, matching Popover.Portal.
boolean | RefObject<HTMLElement | null> | ((closeType: InteractionType) => boolean | void | HTMLElement | null)
Determines the element to focus when the popover is closed.
false: Do not move focus.true: Move focus based on the default behavior (trigger or previously focused element).RefObject: Move focus to the ref element.function: Called with the interaction type (mouse,touch,pen, orkeyboard). Return an element to focus,trueto use the default behavior,nullto fall back to the default behavior, orfalse/undefinedto do nothing.
boolean | RefObject<HTMLElement | null> | ((openType: InteractionType) => boolean | void | HTMLElement | null)
Determines the element to focus when the popover is opened.
By default, focus moves to the first tabbable element inside the popup, except when the popover
is opened by touch — then the popup itself is focused to avoid opening the virtual keyboard.
false: Do not move focus.true: Move focus based on the default behavior (first tabbable element or popup).RefObject: Move focus to the ref element.function: Called with the interaction type (mouse,touch,pen, orkeyboard). Return an element to focus,trueto use the default behavior,nullto fall back to the default behavior, orfalse/undefinedto do nothing.
boolean
implicit:"false"
Keeps the popup mounted while closed.
ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, PopoverPopupState>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render."bottom" | "inline-end" | "inline-start" | "left" | "right" | "top"
implicit:"bottom"
Preferred side of the anchor. Defaults to bottom, or inline-end in a submenu.
number | OffsetFunction
implicit:"0"
Distance from the anchor. Defaults to 0. Accepts a number or positioning function.
CSSProperties | ((state: PopoverPopupState) => CSSProperties | undefined)
Style applied to the element, or a function that
returns a style object based on the component’s state.
Width<string | number>
implicit:"200"
CSS width of the popup. Numbers are in pixels.
Dropdown.ActionItem
ReactNode
Trailing controls rendered beside the primary row control. Only supported in picker and panel pages, since a menu may only contain menu items. Secondary actions activate independently of the row.
"always" | "hover"
Whether trailing actions appear on hover or remain visible. Defaults to
hover.string
CSS class applied to the row.
boolean
implicit:"true"
Closes the dropdown after activation, along with parent menus when inside a submenu. Ignored when
page is set."danger" | "neutral"
Color of the text and icons.
danger marks a destructive action.ReactNode
Supporting text, placed according to
descriptionPlacement."below" | "end" | "inline"
Places supporting content inline after the label, at the end, or below it with wrapping. Inline is the default.
ReactNode
Icon rendered after the content.
boolean
implicit:"false"
Whether the button should be focusable when disabled.
Shows a chevron indicating that the item opens a submenu.
boolean
implicit:"true when render is omitted; false otherwise"
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (for example, <div>).string
ID of the
Page to show on activation. The popup stays open, and the row shows a chevron by default.ReactElement<unknown, string | JSXElementConstructor<any>>
Element rendered as the row instead of a native button. Custom components must forward the supplied props and ref.
ShortcutDefinition
Keyboard shortcut keys displayed at the end of the row. Registering the
shortcut is up to the application.
string
Text between sequential shortcut steps. Defaults to
then.ReactNode
Icon rendered before the content.
CSSProperties
Inline styles applied to the row.
Dropdown.OptionItem
ReactNode
Trailing controls rendered beside the primary row control. Only supported in picker and panel pages, since a menu may only contain menu items. Secondary actions activate independently of the row.
"always" | "hover"
Whether trailing actions appear on hover or remain visible. Defaults to
hover.string
CSS class applied to the row.
boolean
Overrides the nearest group close policy for this option. A cancelled selection never closes automatically.
"danger" | "neutral"
Color of the text and icons.
danger marks a destructive action.ReactNode
Supporting text, placed according to
descriptionPlacement."below" | "end" | "inline"
Places supporting content inline after the label, at the end, or below it with wrapping. Inline is the default.
ReactNode
Icon rendered after the content.
boolean
implicit:"false"
Whether the button should be focusable when disabled.
Shows a chevron indicating that the item opens a submenu.
"check" | "checkbox" | "none"
Selection indicator: a check icon after the content, a checkbox before it, or none. Defaults to
checkbox when multiple is set, otherwise check, and to none when selected is omitted.boolean
implicit:"true when render is omitted; false otherwise"
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (for example, <div>).((eventDetails: DropdownSelectionGroupChangeEventDetails) => void)
Called before the nearest group commits selection, with
event, reason, trigger, cancel and isCanceled. Calling cancel() prevents the value change and automatic close.ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, DropdownOptionItemState>
Element or function rendered as the row. Functions receive the supplied props and
{ selected, multiple, disabled } state. Forward the props and ref to the rendered control.boolean
Selected state for standalone options. Options inside a
SelectionGroup derive it from their owner. Grouped picker options expose aria-selected, menu options expose aria-checked, and panel options expose aria-pressed.ShortcutDefinition
Keyboard shortcut keys displayed at the end of the row. Registering the
shortcut is up to the application.
string
Text between sequential shortcut steps. Defaults to
then.ReactNode
Icon rendered before the content.
CSSProperties
Inline styles applied to the row.
string
Stable option identifier within its nearest
SelectionGroup. The group supplies selected state and commits this value on activation.Dropdown.SelectionGroup
boolean
Default close policy for owned options: true for single selection, false for multiple selection. Individual options can override it.
string | string[] | null
Initial uncontrolled selection. Defaults to null for single selection and an empty array for multiple selection.
string
Stable identifier unique within the dropdown root. Required for uncontrolled groups, whose values persist under it across popup close and page navigation. Optional for controlled groups.
boolean
Uses an array of selected identifiers when true. Otherwise the value is one identifier or null.
((value: string | null, eventDetails: DropdownSelectionGroupChangeEventDetails) => void) | ((value: string[], eventDetails: DropdownSelectionGroupChangeEventDetails) => void)
Called with the next value and cancellable event details:
event, reason, trigger, cancel and isCanceled. Calling cancel() preserves the value and keeps the popup open. Repeated single selection does not emit another change.ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, DropdownSelectionGroupState>
Element or function rendered as the group. Functions receive supplied props and
{ value, multiple } state. Forward the props and ref.string | string[] | null
Controlled selection: a string or null for single selection, or an array for multiple selection. Undefined leaves selection uncontrolled.
Dropdown.Search
string | ((state: InputState) => string | undefined)
CSS class applied to the element, or a function that
returns a class based on the component’s state.
string | number | readonly string[]
The default value of the input. Use when uncontrolled.
boolean
implicit:"false"
Shows the search input focus outline. Defaults to false for all dropdown searches. Set true to opt in. Error styling remains visible.
((value: string) => void)
Called with the search text on every change. The application filters the results.
ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, InputState>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render.CSSProperties | ((state: InputState) => CSSProperties | undefined)
Style applied to the element, or a function that
returns a style object based on the component’s state.
"end" | "start"
Aligns text to the logical start or end of the input. Follows the text direction.
string | number | readonly string[]
The value of the input. Use when controlled.
Dropdown.Header
ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, {}>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render.Dropdown.Title
string | ((state: PopoverTitleState) => string | undefined)
CSS class applied to the element, or a function that
returns a class based on the component’s state.
ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, PopoverTitleState>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render.CSSProperties | ((state: PopoverTitleState) => CSSProperties | undefined)
Style applied to the element, or a function that
returns a style object based on the component’s state.
Dropdown.Close
string
obligatoriu
Accessible name of the close control. Required because the default control only shows an icon.
string | ((state: PopoverCloseState) => string | undefined)
CSS class applied to the element, or a function that
returns a class based on the component’s state.
boolean
implicit:"true"
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (for example, <div>).ReactElement<unknown, string | JSXElementConstructor<any>> | ComponentRenderFn<HTMLProps, PopoverCloseState>
Allows you to replace the component’s HTML element
with a different tag, or compose it with another component.Accepts a
ReactElement or a function that returns the element to render.CSSProperties | ((state: PopoverCloseState) => CSSProperties | undefined)
Style applied to the element, or a function that
returns a style object based on the component’s state.
Dropdown.Page
string
obligatoriu
Identifier matched by
defaultPage, the page prop of actions, and goToPage. The page renders only while it is current."menu" | "panel" | "picker"
Interaction model while the page is shown. Defaults to the root
type.Dropdown.Back
string
CSS class applied to the row.
"danger" | "neutral"
Color of the text and icons.
danger marks a destructive action.ReactNode
Supporting text, placed according to
descriptionPlacement."below" | "end" | "inline"
Places supporting content inline after the label, at the end, or below it with wrapping. Inline is the default.
ReactNode
Icon rendered after the content.
boolean
implicit:"false"
Whether the button should be focusable when disabled.
Shows a chevron indicating that the item opens a submenu.
boolean
implicit:"true when render is omitted; false otherwise"
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (for example, <div>).ReactElement<unknown, string | JSXElementConstructor<any>>
Element rendered as the row instead of a native button. Custom components must forward the supplied props and ref.
ShortcutDefinition
Keyboard shortcut keys displayed at the end of the row. Registering the
shortcut is up to the application.
string
Text between sequential shortcut steps. Defaults to
then.ReactNode
Icon rendered before the content.
CSSProperties
Inline styles applied to the row.
Dropdown.Submenu
Whether the popup is initially open when uncontrolled.
ID of the
Page shown when the popup opens. Closing the popup resets the page history to it. Defaults to root.Default for standalone options. Use
SelectionGroup.multiple for independently owned selection values.Called with the next open state when the popup opens or closes.
Whether the popup is open. Use with
onOpenChange to control it.Interaction model:
menu for commands and links, picker for search and selectable options, or panel for forms. It sets the ARIA roles, initial focus, and keyboard navigation.Dropdown.SubmenuTrigger
CSS class applied to the row.
Delay in milliseconds before a submenu opened on hover closes. Requires
openOnHover. Defaults to 0.Color of the text and icons.
danger marks a destructive action.Delay in milliseconds before the submenu opens on hover. Requires
openOnHover. Defaults to 300.Supporting text, placed according to
descriptionPlacement.Places supporting content inline after the label, at the end, or below it with wrapping. Inline is the default.
Icon rendered after the content.
Whether the button should be focusable when disabled.
Shows a chevron indicating that the item opens a submenu.
Whether the component renders a native
<button> element when replacing it
via the render prop.
Set to false if the rendered element is not a button (for example, <div>).Also opens the submenu when the row is hovered.
Element rendered as the row instead of a native button. Custom components must forward the supplied props and ref.
Keyboard shortcut keys displayed at the end of the row. Registering the
shortcut is up to the application.
Text between sequential shortcut steps. Defaults to
then.Icon rendered before the content.
Inline styles applied to the row.
Dropdown.Section
number
Number of grid columns. Sets the grid layout and enables horizontal arrow navigation and vertical movement by row.
ReactNode
Heading displayed above the rows. It also names the group for assistive technologies.
boolean
Caps the section height and scrolls its rows. Nest labelled sections inside it to scroll them as one list.
Dropdown.Separator
string
Class applied to the separator. Native div attributes and refs are also accepted.
Dropdown.Loading
ReactNode
Loading message announced as a polite, busy status.
string
Class applied to the status. Native div attributes and refs are also accepted.
Dropdown.Empty
ReactNode
Empty-state message announced as a polite status.
string
Class applied to the status. Native div attributes and refs are also accepted.