@persona/design-system 0.1.5-pre.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +461 -0
- package/LICENSE +77 -0
- package/README.md +9 -0
- package/dist/Action-B10lxofb.d.mts +35 -0
- package/dist/Action-uduFOh2m.d.cts +35 -0
- package/dist/Action.d.cts +2 -0
- package/dist/Action.d.mts +2 -0
- package/dist/Attribute.d.cts +107 -0
- package/dist/Attribute.d.mts +107 -0
- package/dist/AttributeGrid.d.cts +40 -0
- package/dist/AttributeGrid.d.mts +41 -0
- package/dist/Badge-BqLnhb4n.mjs +34 -0
- package/dist/Badge-BqLnhb4n.mjs.map +1 -0
- package/dist/Badge-BwAZD9BH.cjs +41 -0
- package/dist/Badge-BwAZD9BH.cjs.map +1 -0
- package/dist/Badge.d.cts +25 -0
- package/dist/Badge.d.mts +25 -0
- package/dist/Banner.d.cts +48 -0
- package/dist/Banner.d.mts +48 -0
- package/dist/Button-C_3p5Xfi.d.cts +101 -0
- package/dist/Button-DqDLGURJ.d.mts +101 -0
- package/dist/Button.d.cts +2 -0
- package/dist/Button.d.mts +2 -0
- package/dist/ButtonGroup.d.cts +20 -0
- package/dist/ButtonGroup.d.mts +20 -0
- package/dist/Calendar.d.cts +11 -0
- package/dist/Calendar.d.mts +12 -0
- package/dist/CalendarBase.d.mts +12 -0
- package/dist/CalendarCell.d.mts +18 -0
- package/dist/CalendarGrid.d.mts +18 -0
- package/dist/Card-CcU9cKCd.d.mts +52 -0
- package/dist/Card-CrQL0hXm.d.cts +52 -0
- package/dist/Card-CyCKL-M5.cjs +248 -0
- package/dist/Card-CyCKL-M5.cjs.map +1 -0
- package/dist/Card-DeJSt5ys.mjs +205 -0
- package/dist/Card-DeJSt5ys.mjs.map +1 -0
- package/dist/Card.d.cts +2 -0
- package/dist/Card.d.mts +2 -0
- package/dist/Card2.d.cts +95 -0
- package/dist/Card2.d.mts +96 -0
- package/dist/Checkbox-BWJNAP27.d.mts +46 -0
- package/dist/Checkbox-BmjK0Wac.d.cts +46 -0
- package/dist/Checkbox-C5bGcb-r.mjs +176 -0
- package/dist/Checkbox-C5bGcb-r.mjs.map +1 -0
- package/dist/Checkbox-D4nv7eNs.cjs +183 -0
- package/dist/Checkbox-D4nv7eNs.cjs.map +1 -0
- package/dist/Checkbox.d.cts +2 -0
- package/dist/Checkbox.d.mts +2 -0
- package/dist/CheckboxGroupField.d.cts +24 -0
- package/dist/CheckboxGroupField.d.mts +25 -0
- package/dist/Combobox-B_-swcix.mjs +1672 -0
- package/dist/Combobox-B_-swcix.mjs.map +1 -0
- package/dist/Combobox-B_oe33Re.cjs +1692 -0
- package/dist/Combobox-B_oe33Re.cjs.map +1 -0
- package/dist/Combobox-DjbJYK_u.d.mts +11 -0
- package/dist/Combobox.d.cts +12 -0
- package/dist/Combobox.d.mts +3 -0
- package/dist/ComboboxBase-D2wypeXf.d.cts +320 -0
- package/dist/ComboboxBase-INya0Csa.d.mts +320 -0
- package/dist/ComboboxBase.d.cts +2 -0
- package/dist/ComboboxBase.d.mts +2 -0
- package/dist/ComboboxMultiSelect-Dn8cRZ6Z.d.cts +47 -0
- package/dist/ComboboxMultiSelect-Dq9DGH8S.d.mts +47 -0
- package/dist/ComboboxMultiSelect.d.cts +2 -0
- package/dist/ComboboxMultiSelect.d.mts +2 -0
- package/dist/ComboboxSingleSelect-D8YM7GKP.d.cts +35 -0
- package/dist/ComboboxSingleSelect-WwBJRb0e.d.mts +35 -0
- package/dist/ComboboxSingleSelect.d.cts +2 -0
- package/dist/ComboboxSingleSelect.d.mts +2 -0
- package/dist/ConfigFormGroup.d.cts +7 -0
- package/dist/ConfigFormGroup.d.mts +7 -0
- package/dist/DateField-Bwe_0qm9.d.cts +24 -0
- package/dist/DateField-Chko9oLb.d.mts +24 -0
- package/dist/DateField.d.cts +2 -0
- package/dist/DateField.d.mts +2 -0
- package/dist/DatePicker.d.cts +19 -0
- package/dist/DatePicker.d.mts +19 -0
- package/dist/DateRangePicker.d.cts +46 -0
- package/dist/DateRangePicker.d.mts +47 -0
- package/dist/DropdownButton-DO4NqvWR.cjs +33 -0
- package/dist/DropdownButton-DO4NqvWR.cjs.map +1 -0
- package/dist/DropdownButton-k9kEcexu.mjs +27 -0
- package/dist/DropdownButton-k9kEcexu.mjs.map +1 -0
- package/dist/DropdownButton.d.cts +26 -0
- package/dist/DropdownButton.d.mts +26 -0
- package/dist/DropdownMenu-BTk--LWo.mjs +60 -0
- package/dist/DropdownMenu-BTk--LWo.mjs.map +1 -0
- package/dist/DropdownMenu-Bm2QqLEq.d.cts +75 -0
- package/dist/DropdownMenu-D2fzpkX2.cjs +74 -0
- package/dist/DropdownMenu-D2fzpkX2.cjs.map +1 -0
- package/dist/DropdownMenu-rWgROxQe.d.mts +75 -0
- package/dist/DropdownMenu.d.cts +2 -0
- package/dist/DropdownMenu.d.mts +2 -0
- package/dist/ErrorProps-DLdVsYlk.d.cts +8 -0
- package/dist/ErrorProps-DYUKygmd.d.mts +8 -0
- package/dist/ErrorProps.d.cts +2 -0
- package/dist/ErrorProps.d.mts +2 -0
- package/dist/FormControl-BXHqI_2D.mjs +168 -0
- package/dist/FormControl-BXHqI_2D.mjs.map +1 -0
- package/dist/FormControl-CM7wTn1P.d.mts +60 -0
- package/dist/FormControl-DiR2e7Od.cjs +212 -0
- package/dist/FormControl-DiR2e7Od.cjs.map +1 -0
- package/dist/FormControl-KkeIYuBa.d.cts +60 -0
- package/dist/FormControl.d.cts +2 -0
- package/dist/FormControl.d.mts +2 -0
- package/dist/FormField-19ownwjH.d.cts +69 -0
- package/dist/FormField-CdMru4s5.d.mts +69 -0
- package/dist/FormField.d.cts +2 -0
- package/dist/FormField.d.mts +2 -0
- package/dist/Header-D8oDtnIL.d.cts +35 -0
- package/dist/Header-t1plnZc0.d.mts +35 -0
- package/dist/Header.d.cts +2 -0
- package/dist/Header.d.mts +2 -0
- package/dist/HelperTooltip-Cd7I0Ucq.d.mts +20 -0
- package/dist/HelperTooltip-oXdyk2At.d.cts +20 -0
- package/dist/HelperTooltip.d.cts +2 -0
- package/dist/HelperTooltip.d.mts +2 -0
- package/dist/IconButton-B1ZL8BqW.cjs +372 -0
- package/dist/IconButton-B1ZL8BqW.cjs.map +1 -0
- package/dist/IconButton-C28qxOdi.mjs +341 -0
- package/dist/IconButton-C28qxOdi.mjs.map +1 -0
- package/dist/IconButton-DsXbc3nQ.d.mts +24 -0
- package/dist/IconButton-ZcyTFjPn.d.cts +24 -0
- package/dist/IconButton.d.cts +2 -0
- package/dist/IconButton.d.mts +2 -0
- package/dist/ImageTile.d.cts +60 -0
- package/dist/ImageTile.d.mts +60 -0
- package/dist/Input-Cv5qieRg.d.mts +65 -0
- package/dist/Input-DHOsR4cl.cjs +210 -0
- package/dist/Input-DHOsR4cl.cjs.map +1 -0
- package/dist/Input-XppkvfUf.d.cts +65 -0
- package/dist/Input-eoFk39bE.mjs +191 -0
- package/dist/Input-eoFk39bE.mjs.map +1 -0
- package/dist/Input.d.cts +2 -0
- package/dist/Input.d.mts +2 -0
- package/dist/InputProps-BHu05fX0.d.mts +16 -0
- package/dist/InputProps-CitGo8QA.d.cts +16 -0
- package/dist/InputProps.d.cts +2 -0
- package/dist/InputProps.d.mts +2 -0
- package/dist/Link.d.cts +43 -0
- package/dist/Link.d.mts +43 -0
- package/dist/ListBox-AyjzT6ra.d.mts +138 -0
- package/dist/ListBox-CE3mfDSB.cjs +383 -0
- package/dist/ListBox-CE3mfDSB.cjs.map +1 -0
- package/dist/ListBox-DbyZFy2W.d.cts +138 -0
- package/dist/ListBox-Z1y0LG1H.mjs +369 -0
- package/dist/ListBox-Z1y0LG1H.mjs.map +1 -0
- package/dist/ListBox.d.cts +2 -0
- package/dist/ListBox.d.mts +2 -0
- package/dist/ListBoxField.d.cts +46 -0
- package/dist/ListBoxField.d.mts +47 -0
- package/dist/LoadingShimmer-CNE6JUVF.mjs +67 -0
- package/dist/LoadingShimmer-CNE6JUVF.mjs.map +1 -0
- package/dist/LoadingShimmer-DMK9RC4N.cjs +92 -0
- package/dist/LoadingShimmer-DMK9RC4N.cjs.map +1 -0
- package/dist/LoadingShimmer.d.cts +38 -0
- package/dist/LoadingShimmer.d.mts +38 -0
- package/dist/MaskedInput.d.cts +10 -0
- package/dist/MaskedInput.d.mts +10 -0
- package/dist/MatchHighlight.d.cts +11 -0
- package/dist/MatchHighlight.d.mts +11 -0
- package/dist/Menu-BpkjNO81.cjs +217 -0
- package/dist/Menu-BpkjNO81.cjs.map +1 -0
- package/dist/Menu-DIFkRQ6x.d.mts +70 -0
- package/dist/Menu-DNRHo2i_.mjs +167 -0
- package/dist/Menu-DNRHo2i_.mjs.map +1 -0
- package/dist/Menu-DPrNMatb.d.cts +70 -0
- package/dist/Menu.d.cts +2 -0
- package/dist/Menu.d.mts +2 -0
- package/dist/Modal.d.cts +141 -0
- package/dist/Modal.d.mts +141 -0
- package/dist/PageHeader.d.cts +26 -0
- package/dist/PageHeader.d.mts +26 -0
- package/dist/PageSelector.d.cts +30 -0
- package/dist/PageSelector.d.mts +30 -0
- package/dist/PageSizeSelector.d.mts +22 -0
- package/dist/Pagination.d.cts +33 -0
- package/dist/Pagination.d.mts +33 -0
- package/dist/Pii.d.cts +16 -0
- package/dist/Pii.d.mts +17 -0
- package/dist/Popover-BSdyxuja.mjs +124 -0
- package/dist/Popover-BSdyxuja.mjs.map +1 -0
- package/dist/Popover-C2dBSwiU.cjs +168 -0
- package/dist/Popover-C2dBSwiU.cjs.map +1 -0
- package/dist/Popover.d.cts +90 -0
- package/dist/Popover.d.mts +90 -0
- package/dist/ProgressBar.d.cts +83 -0
- package/dist/ProgressBar.d.mts +83 -0
- package/dist/ProgressIndicator.d.cts +64 -0
- package/dist/ProgressIndicator.d.mts +64 -0
- package/dist/PseudoClassProps-C5jpj6Rp.d.cts +12 -0
- package/dist/PseudoClassProps-mZgO_iZJ.d.mts +12 -0
- package/dist/PseudoClassProps.d.cts +2 -0
- package/dist/PseudoClassProps.d.mts +2 -0
- package/dist/Radio-mFfT6G3d.cjs +154 -0
- package/dist/Radio-mFfT6G3d.cjs.map +1 -0
- package/dist/Radio-w-L3Otuk.mjs +147 -0
- package/dist/Radio-w-L3Otuk.mjs.map +1 -0
- package/dist/Radio.d.cts +21 -0
- package/dist/Radio.d.mts +21 -0
- package/dist/RadioGroup-B8htTzsS.mjs +50 -0
- package/dist/RadioGroup-B8htTzsS.mjs.map +1 -0
- package/dist/RadioGroup-BjDmweRK.cjs +57 -0
- package/dist/RadioGroup-BjDmweRK.cjs.map +1 -0
- package/dist/RadioGroup-D5ueuC6a.d.cts +21 -0
- package/dist/RadioGroup-Ls0vPsP_.d.mts +21 -0
- package/dist/RadioGroup.d.cts +2 -0
- package/dist/RadioGroup.d.mts +2 -0
- package/dist/RangeCalendar.d.mts +33 -0
- package/dist/RangeCalendarPresets.d.mts +25 -0
- package/dist/RegisterComponent-BDb43KvI.d.mts +34 -0
- package/dist/RegisterComponent-CpXIR-51.d.cts +34 -0
- package/dist/Section.d.mts +67 -0
- package/dist/SectionHeading-DVSXofwK.d.cts +72 -0
- package/dist/SectionHeading-QvAmhVmD.d.mts +72 -0
- package/dist/SectionHeading.d.cts +2 -0
- package/dist/SectionHeading.d.mts +2 -0
- package/dist/SegmentedControl-CvznPXgC.cjs +124 -0
- package/dist/SegmentedControl-CvznPXgC.cjs.map +1 -0
- package/dist/SegmentedControl-DRtXdbLe.d.cts +59 -0
- package/dist/SegmentedControl-Dk5S4Dhz.d.mts +59 -0
- package/dist/SegmentedControl-DnwNjYre.mjs +111 -0
- package/dist/SegmentedControl-DnwNjYre.mjs.map +1 -0
- package/dist/SegmentedControl.d.cts +2 -0
- package/dist/SegmentedControl.d.mts +2 -0
- package/dist/Select-BdPdgtfU.d.cts +77 -0
- package/dist/Select-CVB-Q1g1.cjs +266 -0
- package/dist/Select-CVB-Q1g1.cjs.map +1 -0
- package/dist/Select-Cl3AOq0-.mjs +246 -0
- package/dist/Select-Cl3AOq0-.mjs.map +1 -0
- package/dist/Select-DRnRqMAL.d.mts +77 -0
- package/dist/Select.d.cts +2 -0
- package/dist/Select.d.mts +2 -0
- package/dist/Slider-D3gz7otf.d.mts +56 -0
- package/dist/Slider-uH5MOu2D.d.cts +56 -0
- package/dist/Slider.d.cts +2 -0
- package/dist/Slider.d.mts +2 -0
- package/dist/SliderRHF-Cc-9RuPe.d.cts +984 -0
- package/dist/SliderRHF-DIV-tCEv.d.mts +984 -0
- package/dist/SliderRHF.d.cts +2 -0
- package/dist/SliderRHF.d.mts +2 -0
- package/dist/SliderThumb.d.mts +139 -0
- package/dist/Spacer-DWGkX170.cjs +20 -0
- package/dist/Spacer-DWGkX170.cjs.map +1 -0
- package/dist/Spacer-DxH_sQrV.mjs +13 -0
- package/dist/Spacer-DxH_sQrV.mjs.map +1 -0
- package/dist/Spacer.d.cts +17 -0
- package/dist/Spacer.d.mts +18 -0
- package/dist/Spinner-C05An_fn.mjs +41 -0
- package/dist/Spinner-C05An_fn.mjs.map +1 -0
- package/dist/Spinner-z7DrPE1d.cjs +48 -0
- package/dist/Spinner-z7DrPE1d.cjs.map +1 -0
- package/dist/Spinner.d.cts +26 -0
- package/dist/Spinner.d.mts +26 -0
- package/dist/Stack-BHb3ZB2A.cjs +53 -0
- package/dist/Stack-BHb3ZB2A.cjs.map +1 -0
- package/dist/Stack-BntgUvsW.d.mts +47 -0
- package/dist/Stack-hwgS2FU1.mjs +40 -0
- package/dist/Stack-hwgS2FU1.mjs.map +1 -0
- package/dist/Stack-toDRLy--.d.cts +47 -0
- package/dist/Stack.d.cts +2 -0
- package/dist/Stack.d.mts +2 -0
- package/dist/StatusIndicator.d.cts +54 -0
- package/dist/StatusIndicator.d.mts +54 -0
- package/dist/Sticker-Bd7KkekO.d.mts +68 -0
- package/dist/Sticker-D6bwBTGr.mjs +215 -0
- package/dist/Sticker-D6bwBTGr.mjs.map +1 -0
- package/dist/Sticker-D_dutvp_.cjs +246 -0
- package/dist/Sticker-D_dutvp_.cjs.map +1 -0
- package/dist/Sticker-S6QWjlEJ.d.cts +68 -0
- package/dist/Sticker.d.cts +2 -0
- package/dist/Sticker.d.mts +2 -0
- package/dist/SwatchPicker.d.cts +18 -0
- package/dist/SwatchPicker.d.mts +18 -0
- package/dist/Tab.d.cts +26 -0
- package/dist/Tab.d.mts +26 -0
- package/dist/TabBar-BMv8dAS3.cjs +297 -0
- package/dist/TabBar-BMv8dAS3.cjs.map +1 -0
- package/dist/TabBar-Bf89XksH.mjs +266 -0
- package/dist/TabBar-Bf89XksH.mjs.map +1 -0
- package/dist/TabBar.d.cts +33 -0
- package/dist/TabBar.d.mts +33 -0
- package/dist/TabBarContext.d.mts +10 -0
- package/dist/TabBarIconButton.d.cts +10 -0
- package/dist/TabBarIconButton.d.mts +11 -0
- package/dist/Table-34f5m7w5.d.mts +13 -0
- package/dist/Table-DkAA1lt_.d.cts +13 -0
- package/dist/Table.d.cts +2 -0
- package/dist/Table.d.mts +2 -0
- package/dist/TableBody-5QcVMPP_.d.cts +9 -0
- package/dist/TableBody-Clf34yzJ.d.mts +9 -0
- package/dist/TableBody.d.cts +2 -0
- package/dist/TableBody.d.mts +2 -0
- package/dist/TableCell-DIs9h97h.d.cts +75 -0
- package/dist/TableCell-Dog4Blfq.d.mts +75 -0
- package/dist/TableCell.d.cts +2 -0
- package/dist/TableCell.d.mts +2 -0
- package/dist/TableHead-9LLM1B8I.d.cts +12 -0
- package/dist/TableHead-DJBGHoUD.d.mts +12 -0
- package/dist/TableHead.d.cts +2 -0
- package/dist/TableHead.d.mts +2 -0
- package/dist/TableHeaderCell-25lC9tNk.d.cts +17 -0
- package/dist/TableHeaderCell-DzYZq7SG.d.mts +17 -0
- package/dist/TableHeaderCell.d.cts +2 -0
- package/dist/TableHeaderCell.d.mts +2 -0
- package/dist/TableLayout-BA3jbdbi.d.mts +19 -0
- package/dist/TableLayout-CmDKOu10.d.cts +19 -0
- package/dist/TableLayout.d.cts +2 -0
- package/dist/TableLayout.d.mts +2 -0
- package/dist/TableRow-CBKpDeUV.d.mts +13 -0
- package/dist/TableRow-IPjQnK2q.d.cts +13 -0
- package/dist/TableRow.d.cts +2 -0
- package/dist/TableRow.d.mts +2 -0
- package/dist/TableTH.d.cts +2 -0
- package/dist/TableTH.d.mts +2 -0
- package/dist/Text-CnXedFut.d.mts +42 -0
- package/dist/Text-CrGiWG2E.d.cts +42 -0
- package/dist/Text-DOTYjIt0.mjs +58 -0
- package/dist/Text-DOTYjIt0.mjs.map +1 -0
- package/dist/Text-DVz8erdF.cjs +95 -0
- package/dist/Text-DVz8erdF.cjs.map +1 -0
- package/dist/Text.d.cts +2 -0
- package/dist/Text.d.mts +2 -0
- package/dist/TextArea-1bHvaq9p.d.mts +10 -0
- package/dist/TextArea-B1kitxCl.mjs +33 -0
- package/dist/TextArea-B1kitxCl.mjs.map +1 -0
- package/dist/TextArea-MVgGGM6r.cjs +40 -0
- package/dist/TextArea-MVgGGM6r.cjs.map +1 -0
- package/dist/TextArea-j43fhp2P.d.cts +10 -0
- package/dist/TextArea.d.cts +2 -0
- package/dist/TextArea.d.mts +2 -0
- package/dist/TextUnderlineTooltip-BDMs4iXn.d.cts +18 -0
- package/dist/TextUnderlineTooltip-z4sSGL91.d.mts +18 -0
- package/dist/TextUnderlineTooltip.d.cts +2 -0
- package/dist/TextUnderlineTooltip.d.mts +2 -0
- package/dist/Tile.d.cts +63 -0
- package/dist/Tile.d.mts +63 -0
- package/dist/Toast.d.cts +27 -0
- package/dist/Toast.d.mts +27 -0
- package/dist/Toggle-8GNRxyvE.mjs +167 -0
- package/dist/Toggle-8GNRxyvE.mjs.map +1 -0
- package/dist/Toggle-B3Cdyf7T.d.mts +54 -0
- package/dist/Toggle-BjkbL_uf.d.cts +54 -0
- package/dist/Toggle-CVdg5iQ0.cjs +174 -0
- package/dist/Toggle-CVdg5iQ0.cjs.map +1 -0
- package/dist/Toggle.d.cts +2 -0
- package/dist/Toggle.d.mts +2 -0
- package/dist/Tooltip-0i_15ysU.cjs +152 -0
- package/dist/Tooltip-0i_15ysU.cjs.map +1 -0
- package/dist/Tooltip-C0PS5InA.d.mts +100 -0
- package/dist/Tooltip-CE1oH6Iz.d.cts +100 -0
- package/dist/Tooltip-T7RQpy_a.mjs +120 -0
- package/dist/Tooltip-T7RQpy_a.mjs.map +1 -0
- package/dist/Tooltip.d.cts +2 -0
- package/dist/Tooltip.d.mts +2 -0
- package/dist/TruncatedText-0Tf8CwFX.d.mts +18 -0
- package/dist/TruncatedText-D8f3AiBL.d.cts +18 -0
- package/dist/chunk-Bpcn9VDT.mjs +39 -0
- package/dist/chunk-CoPdw6nB.cjs +64 -0
- package/dist/common.d.mts +7 -0
- package/dist/components/Attribute/index.cjs +210 -0
- package/dist/components/Attribute/index.cjs.map +1 -0
- package/dist/components/Attribute/index.d.cts +3 -0
- package/dist/components/Attribute/index.d.mts +3 -0
- package/dist/components/Attribute/index.mjs +198 -0
- package/dist/components/Attribute/index.mjs.map +1 -0
- package/dist/components/Badge/index.cjs +8 -0
- package/dist/components/Badge/index.d.cts +2 -0
- package/dist/components/Badge/index.d.mts +2 -0
- package/dist/components/Badge/index.mjs +2 -0
- package/dist/components/Banner/index.cjs +100 -0
- package/dist/components/Banner/index.cjs.map +1 -0
- package/dist/components/Banner/index.d.cts +2 -0
- package/dist/components/Banner/index.d.mts +2 -0
- package/dist/components/Banner/index.mjs +93 -0
- package/dist/components/Banner/index.mjs.map +1 -0
- package/dist/components/Button/index.cjs +12 -0
- package/dist/components/Button/index.d.cts +3 -0
- package/dist/components/Button/index.d.mts +3 -0
- package/dist/components/Button/index.mjs +2 -0
- package/dist/components/ButtonGroup/index.cjs +112 -0
- package/dist/components/ButtonGroup/index.cjs.map +1 -0
- package/dist/components/ButtonGroup/index.d.cts +2 -0
- package/dist/components/ButtonGroup/index.d.mts +2 -0
- package/dist/components/ButtonGroup/index.mjs +103 -0
- package/dist/components/ButtonGroup/index.mjs.map +1 -0
- package/dist/components/Card/index.cjs +13 -0
- package/dist/components/Card/index.d.cts +3 -0
- package/dist/components/Card/index.d.mts +3 -0
- package/dist/components/Card/index.mjs +2 -0
- package/dist/components/CardV2/index.cjs +512 -0
- package/dist/components/CardV2/index.cjs.map +1 -0
- package/dist/components/CardV2/index.d.cts +3 -0
- package/dist/components/CardV2/index.d.mts +3 -0
- package/dist/components/CardV2/index.mjs +511 -0
- package/dist/components/CardV2/index.mjs.map +1 -0
- package/dist/components/Checkbox/index.cjs +8 -0
- package/dist/components/Checkbox/index.d.cts +2 -0
- package/dist/components/Checkbox/index.d.mts +2 -0
- package/dist/components/Checkbox/index.mjs +2 -0
- package/dist/components/Combobox/index.cjs +10 -0
- package/dist/components/Combobox/index.d.cts +3 -0
- package/dist/components/Combobox/index.d.mts +3 -0
- package/dist/components/Combobox/index.mjs +2 -0
- package/dist/components/ConfigFormGroup/index.cjs +37 -0
- package/dist/components/ConfigFormGroup/index.cjs.map +1 -0
- package/dist/components/ConfigFormGroup/index.d.cts +3 -0
- package/dist/components/ConfigFormGroup/index.d.mts +3 -0
- package/dist/components/ConfigFormGroup/index.mjs +28 -0
- package/dist/components/ConfigFormGroup/index.mjs.map +1 -0
- package/dist/components/DatePicker/index.cjs +11503 -0
- package/dist/components/DatePicker/index.cjs.map +1 -0
- package/dist/components/DatePicker/index.d.cts +5 -0
- package/dist/components/DatePicker/index.d.mts +5 -0
- package/dist/components/DatePicker/index.mjs +11491 -0
- package/dist/components/DatePicker/index.mjs.map +1 -0
- package/dist/components/DropdownButton/index.cjs +8 -0
- package/dist/components/DropdownButton/index.d.cts +2 -0
- package/dist/components/DropdownButton/index.d.mts +2 -0
- package/dist/components/DropdownButton/index.mjs +2 -0
- package/dist/components/DropdownMenu/index.cjs +8 -0
- package/dist/components/DropdownMenu/index.d.cts +2 -0
- package/dist/components/DropdownMenu/index.d.mts +2 -0
- package/dist/components/DropdownMenu/index.mjs +2 -0
- package/dist/components/FormControl/index.cjs +16 -0
- package/dist/components/FormControl/index.d.cts +3 -0
- package/dist/components/FormControl/index.d.mts +3 -0
- package/dist/components/FormControl/index.mjs +3 -0
- package/dist/components/FormField/index.cjs +385 -0
- package/dist/components/FormField/index.cjs.map +1 -0
- package/dist/components/FormField/index.d.cts +5 -0
- package/dist/components/FormField/index.d.mts +5 -0
- package/dist/components/FormField/index.mjs +367 -0
- package/dist/components/FormField/index.mjs.map +1 -0
- package/dist/components/ImageTile/index.cjs +228 -0
- package/dist/components/ImageTile/index.cjs.map +1 -0
- package/dist/components/ImageTile/index.d.cts +2 -0
- package/dist/components/ImageTile/index.d.mts +2 -0
- package/dist/components/ImageTile/index.mjs +221 -0
- package/dist/components/ImageTile/index.mjs.map +1 -0
- package/dist/components/Input/index.cjs +15 -0
- package/dist/components/Input/index.cjs.map +1 -0
- package/dist/components/Input/index.d.cts +2 -0
- package/dist/components/Input/index.d.mts +2 -0
- package/dist/components/Input/index.mjs +7 -0
- package/dist/components/Input/index.mjs.map +1 -0
- package/dist/components/Link/index.cjs +87 -0
- package/dist/components/Link/index.cjs.map +1 -0
- package/dist/components/Link/index.d.cts +2 -0
- package/dist/components/Link/index.d.mts +2 -0
- package/dist/components/Link/index.mjs +80 -0
- package/dist/components/Link/index.mjs.map +1 -0
- package/dist/components/ListBox/index.cjs +9 -0
- package/dist/components/ListBox/index.d.cts +2 -0
- package/dist/components/ListBox/index.d.mts +2 -0
- package/dist/components/ListBox/index.mjs +2 -0
- package/dist/components/LoadingShimmer/index.cjs +7 -0
- package/dist/components/LoadingShimmer/index.d.cts +2 -0
- package/dist/components/LoadingShimmer/index.d.mts +2 -0
- package/dist/components/LoadingShimmer/index.mjs +2 -0
- package/dist/components/MaskedInput/index.cjs +29 -0
- package/dist/components/MaskedInput/index.cjs.map +1 -0
- package/dist/components/MaskedInput/index.d.cts +2 -0
- package/dist/components/MaskedInput/index.d.mts +2 -0
- package/dist/components/MaskedInput/index.mjs +24 -0
- package/dist/components/MaskedInput/index.mjs.map +1 -0
- package/dist/components/MatchHighlight/index.cjs +31 -0
- package/dist/components/MatchHighlight/index.cjs.map +1 -0
- package/dist/components/MatchHighlight/index.d.cts +2 -0
- package/dist/components/MatchHighlight/index.d.mts +2 -0
- package/dist/components/MatchHighlight/index.mjs +24 -0
- package/dist/components/MatchHighlight/index.mjs.map +1 -0
- package/dist/components/Menu/index.cjs +15 -0
- package/dist/components/Menu/index.d.cts +2 -0
- package/dist/components/Menu/index.d.mts +2 -0
- package/dist/components/Menu/index.mjs +2 -0
- package/dist/components/Modal/index.cjs +285 -0
- package/dist/components/Modal/index.cjs.map +1 -0
- package/dist/components/Modal/index.d.cts +2 -0
- package/dist/components/Modal/index.d.mts +2 -0
- package/dist/components/Modal/index.mjs +276 -0
- package/dist/components/Modal/index.mjs.map +1 -0
- package/dist/components/PageHeader/index.cjs +71 -0
- package/dist/components/PageHeader/index.cjs.map +1 -0
- package/dist/components/PageHeader/index.d.cts +2 -0
- package/dist/components/PageHeader/index.d.mts +2 -0
- package/dist/components/PageHeader/index.mjs +64 -0
- package/dist/components/PageHeader/index.mjs.map +1 -0
- package/dist/components/Pagination/index.cjs +211 -0
- package/dist/components/Pagination/index.cjs.map +1 -0
- package/dist/components/Pagination/index.d.cts +3 -0
- package/dist/components/Pagination/index.d.mts +3 -0
- package/dist/components/Pagination/index.mjs +203 -0
- package/dist/components/Pagination/index.mjs.map +1 -0
- package/dist/components/Pii/index.cjs +20 -0
- package/dist/components/Pii/index.cjs.map +1 -0
- package/dist/components/Pii/index.d.cts +2 -0
- package/dist/components/Pii/index.d.mts +2 -0
- package/dist/components/Pii/index.mjs +19 -0
- package/dist/components/Pii/index.mjs.map +1 -0
- package/dist/components/Popover/index.cjs +13 -0
- package/dist/components/Popover/index.d.cts +2 -0
- package/dist/components/Popover/index.d.mts +2 -0
- package/dist/components/Popover/index.mjs +2 -0
- package/dist/components/ProgressBar/index.cjs +177 -0
- package/dist/components/ProgressBar/index.cjs.map +1 -0
- package/dist/components/ProgressBar/index.d.cts +2 -0
- package/dist/components/ProgressBar/index.d.mts +2 -0
- package/dist/components/ProgressBar/index.mjs +168 -0
- package/dist/components/ProgressBar/index.mjs.map +1 -0
- package/dist/components/ProgressIndicator/index.cjs +185 -0
- package/dist/components/ProgressIndicator/index.cjs.map +1 -0
- package/dist/components/ProgressIndicator/index.d.cts +2 -0
- package/dist/components/ProgressIndicator/index.d.mts +2 -0
- package/dist/components/ProgressIndicator/index.mjs +178 -0
- package/dist/components/ProgressIndicator/index.mjs.map +1 -0
- package/dist/components/Radio/index.cjs +8 -0
- package/dist/components/Radio/index.d.cts +2 -0
- package/dist/components/Radio/index.d.mts +2 -0
- package/dist/components/Radio/index.mjs +2 -0
- package/dist/components/RadioGroup/index.cjs +8 -0
- package/dist/components/RadioGroup/index.d.cts +2 -0
- package/dist/components/RadioGroup/index.d.mts +2 -0
- package/dist/components/RadioGroup/index.mjs +2 -0
- package/dist/components/SegmentedControl/index.cjs +9 -0
- package/dist/components/SegmentedControl/index.d.cts +2 -0
- package/dist/components/SegmentedControl/index.d.mts +2 -0
- package/dist/components/SegmentedControl/index.mjs +2 -0
- package/dist/components/Select/index.cjs +10 -0
- package/dist/components/Select/index.d.cts +2 -0
- package/dist/components/Select/index.d.mts +2 -0
- package/dist/components/Select/index.mjs +2 -0
- package/dist/components/Slider/index.cjs +1507 -0
- package/dist/components/Slider/index.cjs.map +1 -0
- package/dist/components/Slider/index.d.cts +3 -0
- package/dist/components/Slider/index.d.mts +3 -0
- package/dist/components/Slider/index.mjs +1497 -0
- package/dist/components/Slider/index.mjs.map +1 -0
- package/dist/components/Spacer/index.cjs +3 -0
- package/dist/components/Spacer/index.d.cts +2 -0
- package/dist/components/Spacer/index.d.mts +2 -0
- package/dist/components/Spacer/index.mjs +2 -0
- package/dist/components/Spinner/index.cjs +8 -0
- package/dist/components/Spinner/index.d.cts +2 -0
- package/dist/components/Spinner/index.d.mts +2 -0
- package/dist/components/Spinner/index.mjs +2 -0
- package/dist/components/Stack/index.cjs +9 -0
- package/dist/components/Stack/index.d.cts +2 -0
- package/dist/components/Stack/index.d.mts +2 -0
- package/dist/components/Stack/index.mjs +2 -0
- package/dist/components/StatusIndicator/index.cjs +174 -0
- package/dist/components/StatusIndicator/index.cjs.map +1 -0
- package/dist/components/StatusIndicator/index.d.cts +2 -0
- package/dist/components/StatusIndicator/index.d.mts +2 -0
- package/dist/components/StatusIndicator/index.mjs +167 -0
- package/dist/components/StatusIndicator/index.mjs.map +1 -0
- package/dist/components/Sticker/index.cjs +12 -0
- package/dist/components/Sticker/index.d.cts +2 -0
- package/dist/components/Sticker/index.d.mts +2 -0
- package/dist/components/Sticker/index.mjs +2 -0
- package/dist/components/SwatchPicker/index.cjs +65 -0
- package/dist/components/SwatchPicker/index.cjs.map +1 -0
- package/dist/components/SwatchPicker/index.d.cts +2 -0
- package/dist/components/SwatchPicker/index.d.mts +2 -0
- package/dist/components/SwatchPicker/index.mjs +58 -0
- package/dist/components/SwatchPicker/index.mjs.map +1 -0
- package/dist/components/TabBar/index.cjs +12 -0
- package/dist/components/TabBar/index.d.cts +4 -0
- package/dist/components/TabBar/index.d.mts +4 -0
- package/dist/components/TabBar/index.mjs +2 -0
- package/dist/components/Table/index.cjs +400 -0
- package/dist/components/Table/index.cjs.map +1 -0
- package/dist/components/Table/index.d.cts +8 -0
- package/dist/components/Table/index.d.mts +8 -0
- package/dist/components/Table/index.mjs +379 -0
- package/dist/components/Table/index.mjs.map +1 -0
- package/dist/components/Text/index.cjs +9 -0
- package/dist/components/Text/index.d.cts +2 -0
- package/dist/components/Text/index.d.mts +2 -0
- package/dist/components/Text/index.mjs +2 -0
- package/dist/components/TextArea/index.cjs +8 -0
- package/dist/components/TextArea/index.d.cts +2 -0
- package/dist/components/TextArea/index.d.mts +2 -0
- package/dist/components/TextArea/index.mjs +2 -0
- package/dist/components/Tile/index.cjs +103 -0
- package/dist/components/Tile/index.cjs.map +1 -0
- package/dist/components/Tile/index.d.cts +2 -0
- package/dist/components/Tile/index.d.mts +2 -0
- package/dist/components/Tile/index.mjs +96 -0
- package/dist/components/Tile/index.mjs.map +1 -0
- package/dist/components/Toast/index.cjs +141 -0
- package/dist/components/Toast/index.cjs.map +1 -0
- package/dist/components/Toast/index.d.cts +2 -0
- package/dist/components/Toast/index.d.mts +2 -0
- package/dist/components/Toast/index.mjs +136 -0
- package/dist/components/Toast/index.mjs.map +1 -0
- package/dist/components/Toggle/index.cjs +8 -0
- package/dist/components/Toggle/index.d.cts +2 -0
- package/dist/components/Toggle/index.d.mts +2 -0
- package/dist/components/Toggle/index.mjs +2 -0
- package/dist/components/Tooltip/index.cjs +12 -0
- package/dist/components/Tooltip/index.d.cts +4 -0
- package/dist/components/Tooltip/index.d.mts +4 -0
- package/dist/components/Tooltip/index.mjs +2 -0
- package/dist/constants.d.mts +5 -0
- package/dist/ids-Cr-NW2RJ.d.mts +11 -0
- package/dist/ids-e4V5Y3Ub.d.cts +11 -0
- package/dist/index-1-AkepUA.d.mts +1 -0
- package/dist/index-7in8TPrM.d.mts +1 -0
- package/dist/index-8R9vlM2B.d.mts +83 -0
- package/dist/index-B2KLYYkM.d.cts +1 -0
- package/dist/index-BBDa5smF.d.cts +1 -0
- package/dist/index-BJ8-FA6N.d.cts +1 -0
- package/dist/index-BM1DqNZf.d.cts +628 -0
- package/dist/index-BPSCxsMC.d.cts +1 -0
- package/dist/index-BPiqSRRl.d.mts +1 -0
- package/dist/index-BUYyA1Xh.d.cts +1 -0
- package/dist/index-CCt0lwyI.d.mts +1 -0
- package/dist/index-CEDY7cmG.d.cts +1 -0
- package/dist/index-CEqOS-7M.d.mts +1 -0
- package/dist/index-CExuKKOI.d.cts +218 -0
- package/dist/index-CIABef8t.d.mts +1 -0
- package/dist/index-CIBxlpQo.d.mts +1 -0
- package/dist/index-CKu60b9I.d.mts +154 -0
- package/dist/index-CP2eJYlK.d.mts +1 -0
- package/dist/index-CRo77wc3.d.mts +1 -0
- package/dist/index-CiBIKhMu.d.cts +1 -0
- package/dist/index-Cii4Qb1X.d.mts +1 -0
- package/dist/index-CspKFJM1.d.cts +1 -0
- package/dist/index-CsuikFeJ.d.mts +1 -0
- package/dist/index-Cz6N-KeS.d.cts +1 -0
- package/dist/index-D-BciAtf.d.cts +1 -0
- package/dist/index-D26lpgQi.d.cts +1 -0
- package/dist/index-D2HUTZ-d.d.cts +1 -0
- package/dist/index-D4DUvwPf.d.mts +1 -0
- package/dist/index-D4ELpJXS.d.cts +1 -0
- package/dist/index-D6CnpA_r.d.cts +1 -0
- package/dist/index-DLoAMD9J.d.cts +1 -0
- package/dist/index-DQvVmqvS.d.mts +628 -0
- package/dist/index-DWfPppPU.d.mts +1 -0
- package/dist/index-DcU87nuJ2.d.cts +1 -0
- package/dist/index-DkrC-i1D.d.mts +1 -0
- package/dist/index-DvuJXuAN.d.mts +1 -0
- package/dist/index-OEBbnNdr.d.mts +1 -0
- package/dist/index-QbUkWSLh.d.mts +1 -0
- package/dist/index-VmEFGBxN.d.cts +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.mjs +0 -0
- package/dist/index2.d.cts +1 -0
- package/dist/index2.d.mts +1 -0
- package/dist/input-BCmP106-.d.mts +17 -0
- package/dist/input-Bm_anD8X.d.cts +17 -0
- package/dist/inputFields.d.cts +83 -0
- package/dist/inputFields.d.mts +83 -0
- package/dist/intersperse.d.mts +18 -0
- package/dist/lib/ConfigContext.cjs +15 -0
- package/dist/lib/ConfigContext.cjs.map +1 -0
- package/dist/lib/ConfigContext.d.cts +16 -0
- package/dist/lib/ConfigContext.d.mts +17 -0
- package/dist/lib/ConfigContext.mjs +15 -0
- package/dist/lib/ConfigContext.mjs.map +1 -0
- package/dist/lib/HeadlessAriaButton.cjs +33 -0
- package/dist/lib/HeadlessAriaButton.cjs.map +1 -0
- package/dist/lib/HeadlessAriaButton.d.cts +12 -0
- package/dist/lib/HeadlessAriaButton.d.mts +12 -0
- package/dist/lib/HeadlessAriaButton.mjs +30 -0
- package/dist/lib/HeadlessAriaButton.mjs.map +1 -0
- package/dist/lib/PDSProvider.cjs +20 -0
- package/dist/lib/PDSProvider.cjs.map +1 -0
- package/dist/lib/PDSProvider.d.cts +12 -0
- package/dist/lib/PDSProvider.d.mts +13 -0
- package/dist/lib/PDSProvider.mjs +19 -0
- package/dist/lib/PDSProvider.mjs.map +1 -0
- package/dist/lib/TruncatedText.cjs +39 -0
- package/dist/lib/TruncatedText.cjs.map +1 -0
- package/dist/lib/TruncatedText.d.cts +2 -0
- package/dist/lib/TruncatedText.d.mts +2 -0
- package/dist/lib/TruncatedText.mjs +31 -0
- package/dist/lib/TruncatedText.mjs.map +1 -0
- package/dist/lib/TruncatedTextWithTooltip.cjs +34 -0
- package/dist/lib/TruncatedTextWithTooltip.cjs.map +1 -0
- package/dist/lib/TruncatedTextWithTooltip.d.cts +15 -0
- package/dist/lib/TruncatedTextWithTooltip.d.mts +15 -0
- package/dist/lib/TruncatedTextWithTooltip.mjs +28 -0
- package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -0
- package/dist/lib/comboboxHelper.cjs +46 -0
- package/dist/lib/comboboxHelper.cjs.map +1 -0
- package/dist/lib/comboboxHelper.d.cts +24 -0
- package/dist/lib/comboboxHelper.d.mts +24 -0
- package/dist/lib/comboboxHelper.mjs +42 -0
- package/dist/lib/comboboxHelper.mjs.map +1 -0
- package/dist/lib/datePickerHelper.cjs +3568 -0
- package/dist/lib/datePickerHelper.cjs.map +1 -0
- package/dist/lib/datePickerHelper.d.cts +19 -0
- package/dist/lib/datePickerHelper.d.mts +19 -0
- package/dist/lib/datePickerHelper.mjs +3566 -0
- package/dist/lib/datePickerHelper.mjs.map +1 -0
- package/dist/lib/pseudoClass.cjs +32 -0
- package/dist/lib/pseudoClass.cjs.map +1 -0
- package/dist/lib/pseudoClass.d.cts +45 -0
- package/dist/lib/pseudoClass.d.mts +45 -0
- package/dist/lib/pseudoClass.mjs +18 -0
- package/dist/lib/pseudoClass.mjs.map +1 -0
- package/dist/lib/register/RegisterComponent.cjs +91 -0
- package/dist/lib/register/RegisterComponent.cjs.map +1 -0
- package/dist/lib/register/RegisterComponent.d.cts +2 -0
- package/dist/lib/register/RegisterComponent.d.mts +2 -0
- package/dist/lib/register/RegisterComponent.mjs +88 -0
- package/dist/lib/register/RegisterComponent.mjs.map +1 -0
- package/dist/lib/register/ids.cjs +31 -0
- package/dist/lib/register/ids.cjs.map +1 -0
- package/dist/lib/register/ids.d.cts +2 -0
- package/dist/lib/register/ids.d.mts +2 -0
- package/dist/lib/register/ids.mjs +28 -0
- package/dist/lib/register/ids.mjs.map +1 -0
- package/dist/lib/register/index.cjs +8 -0
- package/dist/lib/register/index.d.cts +4 -0
- package/dist/lib/register/index.d.mts +4 -0
- package/dist/lib/register/index.mjs +3 -0
- package/dist/lib/register/types.cjs +1 -0
- package/dist/lib/register/types.d.cts +2 -0
- package/dist/lib/register/types.d.mts +2 -0
- package/dist/lib/register/types.mjs +0 -0
- package/dist/lib/reorderItems.cjs +39 -0
- package/dist/lib/reorderItems.cjs.map +1 -0
- package/dist/lib/reorderItems.d.cts +26 -0
- package/dist/lib/reorderItems.d.mts +26 -0
- package/dist/lib/reorderItems.mjs +36 -0
- package/dist/lib/reorderItems.mjs.map +1 -0
- package/dist/lib/selectHelper.cjs +22 -0
- package/dist/lib/selectHelper.cjs.map +1 -0
- package/dist/lib/selectHelper.d.cts +14 -0
- package/dist/lib/selectHelper.d.mts +14 -0
- package/dist/lib/selectHelper.mjs +20 -0
- package/dist/lib/selectHelper.mjs.map +1 -0
- package/dist/lib/useControlled.cjs +20 -0
- package/dist/lib/useControlled.cjs.map +1 -0
- package/dist/lib/useControlled.d.cts +16 -0
- package/dist/lib/useControlled.d.mts +17 -0
- package/dist/lib/useControlled.mjs +19 -0
- package/dist/lib/useControlled.mjs.map +1 -0
- package/dist/lib/useIsOverflow.cjs +58 -0
- package/dist/lib/useIsOverflow.cjs.map +1 -0
- package/dist/lib/useIsOverflow.d.cts +11 -0
- package/dist/lib/useIsOverflow.d.mts +11 -0
- package/dist/lib/useIsOverflow.mjs +56 -0
- package/dist/lib/useIsOverflow.mjs.map +1 -0
- package/dist/lib/useOutsideClick.cjs +19 -0
- package/dist/lib/useOutsideClick.cjs.map +1 -0
- package/dist/lib/useOutsideClick.d.cts +13 -0
- package/dist/lib/useOutsideClick.d.mts +13 -0
- package/dist/lib/useOutsideClick.mjs +17 -0
- package/dist/lib/useOutsideClick.mjs.map +1 -0
- package/dist/lib/zindex.cjs +27 -0
- package/dist/lib/zindex.cjs.map +1 -0
- package/dist/lib/zindex.d.cts +25 -0
- package/dist/lib/zindex.d.mts +25 -0
- package/dist/lib/zindex.mjs +25 -0
- package/dist/lib/zindex.mjs.map +1 -0
- package/dist/mergeRefs-BZinWopc.cjs +31 -0
- package/dist/mergeRefs-BZinWopc.cjs.map +1 -0
- package/dist/mergeRefs-BgcbK0Qy.mjs +26 -0
- package/dist/mergeRefs-BgcbK0Qy.mjs.map +1 -0
- package/dist/mixins/focus.cjs +39 -0
- package/dist/mixins/focus.cjs.map +1 -0
- package/dist/mixins/focus.d.cts +11 -0
- package/dist/mixins/focus.d.mts +11 -0
- package/dist/mixins/focus.mjs +34 -0
- package/dist/mixins/focus.mjs.map +1 -0
- package/dist/mixins/hoverable.cjs +38 -0
- package/dist/mixins/hoverable.cjs.map +1 -0
- package/dist/mixins/hoverable.d.cts +16 -0
- package/dist/mixins/hoverable.d.mts +16 -0
- package/dist/mixins/hoverable.mjs +32 -0
- package/dist/mixins/hoverable.mjs.map +1 -0
- package/dist/mixins/input.cjs +95 -0
- package/dist/mixins/input.cjs.map +1 -0
- package/dist/mixins/input.d.cts +2 -0
- package/dist/mixins/input.d.mts +2 -0
- package/dist/mixins/input.mjs +94 -0
- package/dist/mixins/input.mjs.map +1 -0
- package/dist/mixins/menuItem.cjs +110 -0
- package/dist/mixins/menuItem.cjs.map +1 -0
- package/dist/mixins/menuItem.d.cts +30 -0
- package/dist/mixins/menuItem.d.mts +31 -0
- package/dist/mixins/menuItem.mjs +109 -0
- package/dist/mixins/menuItem.mjs.map +1 -0
- package/dist/mixins/print/index.cjs +25 -0
- package/dist/mixins/print/index.cjs.map +1 -0
- package/dist/mixins/print/index.d.cts +11 -0
- package/dist/mixins/print/index.d.mts +11 -0
- package/dist/mixins/print/index.mjs +23 -0
- package/dist/mixins/print/index.mjs.map +1 -0
- package/dist/mixins/text.cjs +93 -0
- package/dist/mixins/text.cjs.map +1 -0
- package/dist/mixins/text.d.cts +2 -0
- package/dist/mixins/text.d.mts +2 -0
- package/dist/mixins/text.mjs +88 -0
- package/dist/mixins/text.mjs.map +1 -0
- package/dist/motion-DoikasqZ.mjs +7483 -0
- package/dist/motion-DoikasqZ.mjs.map +1 -0
- package/dist/motion-QW6imSxE.cjs +7488 -0
- package/dist/motion-QW6imSxE.cjs.map +1 -0
- package/dist/react.esm-C-es35jP.cjs +11441 -0
- package/dist/react.esm-C-es35jP.cjs.map +1 -0
- package/dist/react.esm-Dv1lMDRs.mjs +11397 -0
- package/dist/react.esm-Dv1lMDRs.mjs.map +1 -0
- package/dist/text-BrSUs-88.d.mts +14 -0
- package/dist/text-PmH5oc61.d.cts +14 -0
- package/dist/theme-Cadb1xzQ.d.cts +154 -0
- package/dist/theme-DGAqgnUa.d.mts +154 -0
- package/dist/theme.cjs +353 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +2 -0
- package/dist/theme.d.mts +2 -0
- package/dist/theme.mjs +346 -0
- package/dist/theme.mjs.map +1 -0
- package/dist/types-DzHQ5MGm.d.mts +69 -0
- package/dist/types-N-cXznfM.d.cts +69 -0
- package/dist/useFormField-Ba0CQ43u.d.cts +30 -0
- package/dist/useFormField-BmtItl8y.d.mts +30 -0
- package/dist/useFormField-DN3gpEEV.cjs +37 -0
- package/dist/useFormField-DN3gpEEV.cjs.map +1 -0
- package/dist/useFormField-eftOPiXj.mjs +25 -0
- package/dist/useFormField-eftOPiXj.mjs.map +1 -0
- package/dist/useFormField.d.cts +2 -0
- package/dist/useFormField.d.mts +2 -0
- package/dist/useFormGroup-BMukAMAd.mjs +14 -0
- package/dist/useFormGroup-BMukAMAd.mjs.map +1 -0
- package/dist/useFormGroup-B_mFNoN9.cjs +26 -0
- package/dist/useFormGroup-B_mFNoN9.cjs.map +1 -0
- package/dist/useFormGroup.d.cts +18 -0
- package/dist/useFormGroup.d.mts +18 -0
- package/dist/useLabel-BcbghpIU.cjs +1465 -0
- package/dist/useLabel-BcbghpIU.cjs.map +1 -0
- package/dist/useLabel-DHGzNIKw.mjs +1212 -0
- package/dist/useLabel-DHGzNIKw.mjs.map +1 -0
- package/dist/useModalInsetRight.d.mts +21 -0
- package/dist/useToggle-0zLL1E7s.mjs +21 -0
- package/dist/useToggle-0zLL1E7s.mjs.map +1 -0
- package/dist/useToggle-DNrEsTpr.cjs +27 -0
- package/dist/useToggle-DNrEsTpr.cjs.map +1 -0
- package/dist/useToggle.d.mts +17 -0
- package/dist/useTruncation.d.mts +12 -0
- package/dist/utilities-C8Jf-xpi.d.cts +9 -0
- package/dist/utilities-w1K54IAy.d.mts +9 -0
- package/dist/utilities.d.cts +2 -0
- package/dist/utilities.d.mts +2 -0
- package/dist/utils/storybook.cjs +13 -0
- package/dist/utils/storybook.cjs.map +1 -0
- package/dist/utils/storybook.mjs +11 -0
- package/dist/utils/storybook.mjs.map +1 -0
- package/dist/utils/testing.cjs +50 -0
- package/dist/utils/testing.cjs.map +1 -0
- package/dist/utils/testing.d.cts +370 -0
- package/dist/utils/testing.d.mts +370 -0
- package/dist/utils/testing.mjs +45 -0
- package/dist/utils/testing.mjs.map +1 -0
- package/dist/variables/color.cjs +23 -0
- package/dist/variables/color.cjs.map +1 -0
- package/dist/variables/color.d.cts +19 -0
- package/dist/variables/color.d.mts +19 -0
- package/dist/variables/color.mjs +21 -0
- package/dist/variables/color.mjs.map +1 -0
- package/dist/variables/effect.cjs +27 -0
- package/dist/variables/effect.cjs.map +1 -0
- package/dist/variables/effect.d.cts +21 -0
- package/dist/variables/effect.d.mts +21 -0
- package/dist/variables/effect.mjs +24 -0
- package/dist/variables/effect.mjs.map +1 -0
- package/dist/variables/keyframes.cjs +22 -0
- package/dist/variables/keyframes.cjs.map +1 -0
- package/dist/variables/keyframes.d.cts +8 -0
- package/dist/variables/keyframes.d.mts +8 -0
- package/dist/variables/keyframes.mjs +19 -0
- package/dist/variables/keyframes.mjs.map +1 -0
- package/dist/variables/spacing.cjs +11 -0
- package/dist/variables/spacing.cjs.map +1 -0
- package/dist/variables/spacing.d.cts +8 -0
- package/dist/variables/spacing.d.mts +8 -0
- package/dist/variables/spacing.mjs +9 -0
- package/dist/variables/spacing.mjs.map +1 -0
- package/dist/variables/text.cjs +14 -0
- package/dist/variables/text.cjs.map +1 -0
- package/dist/variables/text.d.cts +10 -0
- package/dist/variables/text.d.mts +10 -0
- package/dist/variables/text.mjs +12 -0
- package/dist/variables/text.mjs.map +1 -0
- package/dist/variables/transitions.cjs +25 -0
- package/dist/variables/transitions.cjs.map +1 -0
- package/dist/variables/transitions.d.cts +19 -0
- package/dist/variables/transitions.d.mts +19 -0
- package/dist/variables/transitions.mjs +22 -0
- package/dist/variables/transitions.mjs.map +1 -0
- package/package.json +781 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox-B_oe33Re.cjs","names":["Fuse","MenuHeading","Fragment","Input","Spacing","focusStyle","Button","Color","FloatingCard","Z_INDICES","MenuList","Paragraph","Typography","EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH","Spacing","Sticker","StyledMenuItem","MenuItem","Color","Typography","useFormField","useMultipleSelection","useCombobox","Stack","Checkbox","CircleXInverseIcon","CaretDownIcon","InputGroup","SearchIcon","Spinner","MenuItem","Spacing","MenuItemIconContainer","Color","Typography","Sticker","useFormField","Fuse","useCombobox","ChevronRightIcon","Fragment","MenuHeading","CaretDownIcon","InputGroup","SearchIcon","ArrowLeftIcon","Spinner"],"sources":["../components/Combobox/ComboboxBase.tsx","../components/Combobox/useTruncation.ts","../components/Combobox/ComboboxMultiSelect.tsx","../components/Combobox/ComboboxSingleSelect.tsx","../components/Combobox/Combobox.tsx"],"sourcesContent":["import { Color, Spacing, Typography } from '@persona/design-tokens';\nimport type { Virtualizer } from '@tanstack/react-virtual';\nimport Fuse, { type IFuseOptions } from 'fuse.js';\nimport { type CSSProperties, Fragment, useEffect, useMemo, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport styled, { css } from 'styled-components';\n\nimport Button from 'design-system/components/Button';\nimport Input from 'design-system/components/Input';\nimport { FloatingCard, MenuHeading, MenuList } from 'design-system/components/Menu';\nimport type { StickerProps } from 'design-system/components/Sticker/Sticker';\nimport { Paragraph } from 'design-system/components/Text';\nimport { Z_INDICES } from 'design-system/lib/zindex';\nimport { focusStyle } from 'design-system/mixins/focus';\nimport type { InputSizes } from 'design-system/mixins/input';\n\n/**\n * In the future, we may extend this to include other style properties\n * like fontWeight, fontStyle, etc. if needed.\n */\ntype LabelStyle = Pick<CSSProperties, 'fontFamily'>;\n\n// Re-export ComboboxOption type that both components need\nexport interface ComboboxOption<T = string> {\n label: string;\n /**\n * Description of the option that will be displayed below the label. Will not be rendered when labelStickerVariant is provided.\n */\n description?: string;\n value: T;\n /**\n * Sticker variant to render the label within.\n */\n labelStickerVariant?: StickerProps['variant'];\n /**\n * Optional style properties to apply to the option label currently limited to fontFamily.\n * This should only be used as a one-off for font dropdowns and most comboboxes should use the default fontFamily.\n */\n PLEASE_DO_NOT_USE_labelFontStyle?: LabelStyle;\n}\n\n// Group type — either an inline section header (the default) or a\n// nested submenu the user navigates into (`nested: true`).\nexport interface ComboboxOptionGroup<T = string> {\n readonly label: string;\n readonly options: ComboboxOptionsOrGroups<T>;\n /**\n * When `true`, the group renders as a single navigation row with a\n * trailing chevron. Clicking it descends into a submenu whose\n * contents are this group's `options`; the group itself never\n * commits a value via `onChange`. The `label` becomes the\n * breadcrumb crumb shown alongside any leaf inside in search mode.\n *\n * When omitted (or `false`), the group renders inline as a section\n * header above its options — the legacy `MenuHeading` behavior.\n *\n * Today only single-select Combobox honors the nested-navigation\n * UX. Multi-select degrades gracefully: it strips the `nested`\n * flag from every group at the top of the component (treating the\n * tree as inline section headers + leaves), so every leaf stays\n * reachable with checkboxes — just without the chevron / Back-row\n * navigation. Nested-nav for multi-select can be added once we\n * have customer demand without changing this API.\n */\n readonly nested?: boolean;\n}\n\n// Type guard using structural typing (like react-select's GroupBase)\nexport function isOptionGroup<T>(\n item: ComboboxOption<T> | ComboboxOptionGroup<T>,\n): item is ComboboxOptionGroup<T> {\n return 'options' in item && Array.isArray((item as ComboboxOptionGroup<T>).options);\n}\n\n/** True when a group renders as a navigation row rather than a section header. */\nexport function isNestedGroup<T>(\n item: ComboboxOption<T> | ComboboxOptionGroup<T>,\n): item is ComboboxOptionGroup<T> & { nested: true } {\n return isOptionGroup(item) && item.nested === true;\n}\n\n// Union type for options prop — supports flat options, inline groups\n// (section headers), nested groups (submenu entries), or any mix.\nexport type ComboboxOptionsOrGroups<T = string> = readonly (\n | ComboboxOption<T>\n | ComboboxOptionGroup<T>\n)[];\n\n/**\n * Flatten the visible leaves at the current navigation level. Inline\n * (non-nested) groups are walked through transparently — their leaves\n * surface at this level. Nested groups are skipped along with their\n * contents — those leaves live behind a navigation step in single-\n * select. Multi-select doesn't reach this code with nested groups\n * intact (it inlines them at the component boundary), so the skip\n * here is the single-select-only contract.\n */\nexport function flattenOptions<T>(items: ComboboxOptionsOrGroups<T>): ComboboxOption<T>[] {\n const out: ComboboxOption<T>[] = [];\n for (const item of items) {\n if (isOptionGroup(item)) {\n if (!item.nested) {\n out.push(...flattenOptions(item.options));\n }\n } else {\n out.push(item);\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// Nested-navigation helpers\n//\n// A single-select Combobox can act as a cascading menu by tagging\n// groups with `nested: true`: those groups render as navigation rows\n// (chevron) that descend into a submenu showing the group's `options`.\n// The functions below resolve the items visible at a given navigation\n// path and flatten the tree to its leaves for search-mode fallback.\n// ---------------------------------------------------------------------------\n\n/**\n * Recurse through the entire option tree looking for any nested\n * group. Used to gate nested-mode behavior so trees that don't opt\n * in (the overwhelmingly common case) skip the extra book-keeping\n * entirely. Single-select uses this to switch between its nested-nav\n * render path and the legacy renderer; multi-select uses it to\n * short-circuit its `nested → inline` transform when there's nothing\n * to convert.\n */\nexport function containsNestedGroup<T>(\n items: readonly (ComboboxOption<T> | ComboboxOptionGroup<T>)[],\n): boolean {\n for (const item of items) {\n if (isOptionGroup(item)) {\n if (item.nested) {\n return true;\n }\n if (containsNestedGroup(item.options)) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * Find a nested-group child of `items` whose `label` matches `label`.\n * Walks transparently through inline (non-nested) groups at the same\n * level — they don't add a navigation step, so a nested submenu\n * declared inside an inline section header is still \"at this level\"\n * for descent purposes. Returns `null` if no match.\n */\nfunction findNestedGroupByLabel<T>(\n items: ComboboxOptionsOrGroups<T>,\n label: string,\n): ComboboxOptionGroup<T> | null {\n for (const item of items) {\n if (!isOptionGroup(item)) {\n continue;\n }\n if (item.nested) {\n if (item.label === label) {\n return item;\n }\n } else {\n const found = findNestedGroupByLabel(item.options, label);\n if (found) {\n return found;\n }\n }\n }\n return null;\n}\n\n/**\n * Walk the option tree by following `path` step-by-step. Each entry\n * in `path` is the `label` of a nested group at that level; we\n * descend into its `options` at each step. Returns the items visible\n * at the resolved level (a mix of leaves, inline groups, and further\n * nested groups).\n *\n * - Empty `path` returns the original top-level items unchanged.\n * - If any step doesn't resolve to a known nested group (e.g. stale\n * state after the registry changes), returns an empty list so the\n * consumer can fall back to the root view.\n */\nexport function getOptionsAtPath<T>(\n options: ComboboxOptionsOrGroups<T>,\n path: readonly string[],\n): ComboboxOptionsOrGroups<T> {\n let scope = options;\n for (const label of path) {\n const found = findNestedGroupByLabel(scope, label);\n if (!found) {\n return [];\n }\n scope = found.options;\n }\n return scope;\n}\n\n/**\n * One leaf hit returned by `flattenLeafOptions`. Carries the leaf's\n * `option` alongside the labels of every nested-group ancestor\n * (top-down). Used as the search-results data shape so each hit can\n * render with a breadcrumb (e.g. \"Business Account\" for a custom\n * field that lives under that parent record type's submenu).\n */\nexport interface LeafOptionEntry<T = string> {\n option: ComboboxOption<T>;\n breadcrumb: readonly string[];\n}\n\n/**\n * Recursively walk the tree and return every leaf option, each paired\n * with the labels of its nested-group ancestors. Used by single-select\n * Combobox to populate the search-results view: the search query\n * bypasses the active navigation path and matches against every leaf\n * in the tree, with the breadcrumb surfacing parent context in each\n * hit.\n *\n * Inline (non-nested) groups are walked through transparently — their\n * `label` isn't a breadcrumb crumb because they don't correspond to a\n * navigation step. Only nested groups contribute a crumb.\n */\nexport function flattenLeafOptions<T>(\n options: ComboboxOptionsOrGroups<T>,\n breadcrumb: readonly string[] = [],\n): LeafOptionEntry<T>[] {\n const result: LeafOptionEntry<T>[] = [];\n for (const item of options) {\n if (isOptionGroup(item)) {\n const nextBreadcrumb = item.nested ? [...breadcrumb, item.label] : breadcrumb;\n result.push(...flattenLeafOptions(item.options, nextBreadcrumb));\n } else {\n result.push({ option: item, breadcrumb });\n }\n }\n return result;\n}\n\n/**\n * Discriminated tagged item for single-select's downshift items list\n * in nested-navigation mode. Leaves are selectable and commit via\n * `onChange`; groups are navigable and descend into a submenu instead.\n */\nexport type NavigableItem<T> =\n | { readonly kind: 'leaf'; readonly option: ComboboxOption<T> }\n | { readonly kind: 'group'; readonly group: ComboboxOptionGroup<T> };\n\n/**\n * Build the flat list of navigable items at the current navigation\n * level, in document order. Inline (non-nested) groups are walked\n * through transparently; their leaves and any nested subgroups\n * contribute at this level. Nested groups become a `kind: 'group'`\n * entry that the renderer turns into a navigation row.\n */\nexport function getNavigableItemsAtLevel<T>(items: ComboboxOptionsOrGroups<T>): NavigableItem<T>[] {\n const out: NavigableItem<T>[] = [];\n for (const item of items) {\n if (isOptionGroup(item)) {\n if (item.nested) {\n out.push({ kind: 'group', group: item });\n } else {\n out.push(...getNavigableItemsAtLevel(item.options));\n }\n } else {\n out.push({ kind: 'leaf', option: item });\n }\n }\n return out;\n}\n\n/**\n * A hook which provides the caller with dynamically filtered options\n *\n * @param options - The options to filter (can be flat or grouped)\n * @param inputValue - The input value to filter the options by\n * @returns The subset of the options that match the input value according to the fuse.js library\n */\nexport function useFilteredOptions<T = string>(\n options: ComboboxOptionsOrGroups<T>,\n inputValue: string,\n) {\n return useMemo(() => {\n // Flatten grouped options for filtering\n const flatOptions = flattenOptions(options);\n\n const fuseOptions: IFuseOptions<ComboboxOption<T>> = {\n shouldSort: false,\n threshold: 0.0,\n ignoreLocation: true,\n minMatchCharLength: 1,\n keys: ['label', 'description'],\n };\n\n const fuse = new Fuse<ComboboxOption<T>>(flatOptions, fuseOptions);\n\n return inputValue === ''\n ? flatOptions\n : Array.from(new Set(fuse.search(inputValue).map(({ item }) => item)).values());\n }, [options, inputValue]);\n}\n\n// A row in the virtualized list — either a group label or an option\ntype VirtualRow<T> =\n | { kind: 'group-header'; label: string }\n | { kind: 'option'; option: ComboboxOption<T>; index: number };\n\nexport function buildVirtualRows<T>(\n options: ComboboxOptionsOrGroups<T>,\n filteredOptions: ComboboxOption<T>[],\n indexRealToIndexVirtual: Map<number, number>,\n): VirtualRow<T>[] {\n const rows: VirtualRow<T>[] = [];\n // idx counts only option rows — matches navigableItems indices (no group headers)\n let idx = 0;\n\n for (const item of options) {\n if (isOptionGroup(item)) {\n // Nested groups belong to the single-select nested-nav render\n // path. Multi-select (the only `buildVirtualRows` caller)\n // inlines its nested groups at the component boundary, so any\n // group reaching here with `nested: true` is unexpected — skip\n // defensively rather than render a header without a row.\n if (item.nested) {\n continue;\n }\n const groupLeaves = flattenOptions(item.options);\n const visibleLeaves = groupLeaves.filter((opt) =>\n filteredOptions.some((f) => f.value === opt.value),\n );\n if (visibleLeaves.length > 0) {\n rows.push({ kind: 'group-header', label: item.label });\n for (const opt of visibleLeaves) {\n indexRealToIndexVirtual.set(idx, rows.length);\n rows.push({ kind: 'option', option: opt, index: idx++ });\n }\n }\n } else {\n if (filteredOptions.some((f) => f.value === item.value)) {\n indexRealToIndexVirtual.set(idx, rows.length);\n rows.push({ kind: 'option', option: item, index: idx++ });\n }\n }\n }\n\n return rows;\n}\n\ninterface RenderOptionsWithGroupsParams<T> {\n options: ComboboxOptionsOrGroups<T>;\n filteredOptions: ComboboxOption<T>[];\n virtualizer?: Virtualizer<HTMLDivElement, Element>;\n virtualRows?: VirtualRow<T>[];\n renderOption: (option: ComboboxOption<T>, flatIndex: number) => React.ReactNode;\n}\n\n/**\n * Renders options with support for groups, handling filtering and proper indexing\n *\n * @param params - Object containing options, filteredOptions, and renderOption\n * @param params.options - The original options array (can include groups)\n * @param params.filteredOptions - The flat filtered options to display\n * @param params.virtualizer - Optional virtualizer for large lists\n * @param params.virtualRows - Pre-built flat rows list (required when virtualizer is provided)\n * @param params.renderOption - Callback to render each individual option with its flat index\n * @returns React nodes with properly grouped and filtered options\n */\nexport function renderOptionsWithGroups<T>({\n options,\n filteredOptions,\n renderOption,\n virtualizer,\n virtualRows,\n}: RenderOptionsWithGroupsParams<T>): React.ReactNode {\n if (virtualizer && virtualRows) {\n const rows = virtualRows;\n const vItems = virtualizer.getVirtualItems();\n return (\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n {vItems.map((vItem) => {\n const row = rows[vItem.index];\n if (!row) {\n return null;\n }\n\n return (\n <div\n key={String(vItem.key)}\n data-index={vItem.index}\n ref={virtualizer.measureElement}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${vItem.start}px)`,\n }}\n >\n {row.kind === 'group-header' ? (\n <MenuHeading as='div'>{row.label}</MenuHeading>\n ) : (\n renderOption(row.option, row.index)\n )}\n </div>\n );\n })}\n </div>\n );\n }\n\n let flatIndex = -1;\n\n return options.map((item, groupIndex) => {\n if (isOptionGroup(item)) {\n // Nested groups belong to the single-select nested-nav code\n // path, which renders them via its own local helper. Multi-\n // select inlines nested groups at the component boundary\n // before calling this renderer, so a group reaching here with\n // `nested: true` is single-select's responsibility — skip it.\n if (item.nested) {\n return null;\n }\n const groupLeaves = flattenOptions(item.options);\n const visibleLeaves = groupLeaves.filter((opt) =>\n filteredOptions.some((filtered) => filtered.value === opt.value),\n );\n\n if (visibleLeaves.length === 0) {\n return null;\n }\n\n return (\n <Fragment key={`group-${groupIndex}`}>\n <MenuHeading>{item.label}</MenuHeading>\n {visibleLeaves.map((option) => {\n flatIndex++;\n return renderOption(option, flatIndex);\n })}\n </Fragment>\n );\n } else {\n // This is a flat option\n if (!filteredOptions.some((filtered) => filtered.value === item.value)) {\n return null;\n }\n\n flatIndex++;\n return renderOption(item, flatIndex);\n }\n });\n}\n\n// Base interface with common props\nexport interface ComboboxBaseProps<T = string> {\n /**\n * Size of the combobox input\n */\n size?: InputSizes;\n\n /**\n * Array of options to display in the dropdown\n * Can be flat options, grouped options, or a mix of both\n */\n options: ComboboxOptionsOrGroups<T>;\n\n /**\n * If true, the options are currently being loaded\n */\n isOptionsLoading?: boolean;\n\n /**\n * Callback when input value changes (for filtering)\n * In single this is the main input, in multi this is the search input\n * In both cases this corresponds to the input the user can type into to filter the options\n */\n onInputChange?: (value: string) => void;\n\n /**\n * Callback when dropdown open state changes\n */\n onOpenChange?: (isOpen: boolean) => void;\n\n /**\n * Custom empty state message when no options match filter\n */\n emptyStateMessage?: string;\n\n /**\n * Whether the combobox is disabled\n */\n disabled?: boolean;\n\n /**\n * ID of the label for the combobox input\n */\n labelId?: string;\n\n /**\n * Aria label for accessibility when no visible label is provided\n */\n 'aria-label'?: string;\n\n /**\n * Placeholder text when no option is selected\n */\n placeholder?: string;\n\n /**\n * Whether the combobox has a warning state\n */\n hasWarning?: boolean;\n\n /**\n * Whether the combobox has an error state\n */\n hasError?: boolean;\n\n /**\n * ID for the combobox input\n */\n id?: string;\n\n /**\n * Whether to render the dropdown in a portal (breaks out of overflow containers)\n */\n portal?: boolean;\n\n /**\n * Reference to the container element for portal rendering.\n * When provided, the dropdown will use this element's dimensions for positioning.\n */\n portalContainerRef?: React.RefObject<HTMLElement>;\n\n /**\n * Optional external trigger (e.g. an \"Add\" button or icon-only menu opener).\n * When provided, the Combobox clones it with downshift's toggle props and\n * renders it in place of the default input + caret; the search input moves\n * inside the dropdown.\n */\n trigger?: React.ReactElement;\n\n /**\n * Render the searchable option list inline without a trigger or floating\n * dropdown. Use when another component already owns the containing popover.\n *\n * When `true`, the in-panel search uses bordered `Input` chrome and the\n * embedder owns all surrounding spacing; when `false`, the floating-dropdown\n * borderless search strip is preserved.\n */\n embedded?: boolean;\n}\n\n// Shared constants\nexport const MAX_DROPDOWN_HEIGHT = '300px';\n\n// Shared styled components\nexport const Container = styled.div`\n display: flex;\n position: relative;\n width: 100%;\n`;\n\nexport const InputContainer = styled.div`\n position: relative;\n width: 100%;\n`;\n\n// Interface for ComboboxInput props\ninterface ComboboxInputProps {\n $isOpen?: boolean;\n hasError?: boolean;\n hasWarning?: boolean;\n $selectedItemStyle?: LabelStyle;\n}\n\nexport const ComboboxInput = styled(Input)<ComboboxInputProps>`\n padding-right: ${({ size }) =>\n size === 'sm' ? Spacing[5] : Spacing[6]}; /* Space for caret icon */\n\n ${({ $isOpen }) =>\n $isOpen &&\n css`\n ${focusStyle}\n `}\n\n /* Apply custom font family from selected item when dropdown is closed */\n ${({ $selectedItemStyle, $isOpen }) =>\n !$isOpen &&\n $selectedItemStyle?.fontFamily &&\n css`\n && {\n font-family: ${$selectedItemStyle.fontFamily};\n }\n `}\n`;\n\nexport const CaretButton = styled(Button).attrs({ width: 'icon' })`\n background-color: transparent;\n border: none;\n color: ${Color.BorderIconPrimary};\n\n &:hover:not(:disabled),\n &:active:not(:disabled) {\n color: ${Color.BorderIconPrimary};\n background-color: transparent;\n border: none;\n }\n\n &:disabled {\n color: ${Color.BorderIconDisabled};\n background-color: transparent;\n border: none;\n }\n\n position: absolute;\n right: 0;\n top: 0;\n`;\n\ninterface DropdownContainerProps {\n $isOpen?: boolean;\n $portal?: boolean;\n $embedded?: boolean;\n $top?: number;\n $left?: number;\n $width?: number;\n /** Minimum dropdown width (decouples from a narrow trigger). */\n $minWidth?: string;\n}\n\nexport const DropdownContainer = styled(FloatingCard)<DropdownContainerProps>`\n ${({ $portal, $embedded, $top, $left, $width }) =>\n $embedded\n ? css`\n position: static;\n width: 100%;\n min-width: 0;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n background: transparent;\n margin: 0;\n `\n : $portal\n ? css`\n position: fixed;\n top: ${$top != null ? `${$top}px` : '0'};\n left: ${$left != null ? `${$left}px` : '0'};\n width: ${$width != null ? `${$width}px` : 'auto'};\n `\n : css`\n position: absolute;\n top: calc(100% + ${Spacing[2]});\n left: 0;\n right: 0;\n width: 100%;\n `}\n\n ${({ $minWidth }) =>\n $minWidth &&\n css`\n min-width: ${$minWidth};\n `}\n\n display: flex;\n flex-direction: column;\n ${({ $embedded }) =>\n $embedded &&\n css`\n gap: ${Spacing[2]};\n `}\n overflow: ${({ $embedded }) =>\n $embedded\n ? 'visible'\n : 'hidden'}; /* Prevent floating menu overflow while preserving embedded focus rings */\n box-sizing: border-box;\n z-index: ${Z_INDICES.modalDropdown}; /* Ensure portal dropdown appears above other content */\n\n ${({ $isOpen }) =>\n !$isOpen &&\n css`\n display: none;\n `}\n`;\n\nexport const ScrollableMenuList = styled(MenuList)`\n max-height: ${MAX_DROPDOWN_HEIGHT};\n overflow-y: auto;\n overflow-x: hidden; /* Prevent horizontal scrolling */\n width: 100%; /* Ensure full width is used */\n box-sizing: border-box;\n`;\n\n// In-dropdown search chrome, shared by any Combobox-family component that\n// renders a search row inside the dropdown panel.\nexport const SearchInputContainer = styled.div<{ $embedded?: boolean }>`\n flex-shrink: 0;\n ${({ $embedded }) =>\n $embedded\n ? css`\n padding: 0;\n `\n : css`\n padding: ${Spacing[1]} ${Spacing[2]};\n border-bottom: 1px solid ${({ theme }) => theme.color.border.primary};\n `}\n`;\n\nexport const SearchInput = styled(Input)<{ $embedded?: boolean }>`\n ${({ $embedded }) =>\n !$embedded &&\n css`\n /* Borderless strip inside floating menus */\n border: none;\n padding-top: ${Spacing[1]};\n padding-bottom: ${Spacing[1]};\n\n &:focus {\n outline: none !important;\n }\n `}\n`;\n\nexport const EmptyState = styled(Paragraph).attrs<{ size: InputSizes }>(({ size }) => ({\n size,\n}))`\n padding: 0 ${({ size }) => (size === 'sm' ? Spacing[1] : Spacing[2])};\n color: ${({ theme }) => theme.color.text.tertiary};\n ${({ theme }) => theme.text.paragraph.md};\n`;\n\nexport const LoadingContainer = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 136px;\n padding: ${Spacing[3]};\n`;\n\nexport const OptionLabel = styled.div<{ $labelStyle?: LabelStyle }>`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0; /* Allow flex item to shrink below content size */\n\n /* Apply custom font family if provided */\n ${({ $labelStyle }) =>\n $labelStyle?.fontFamily &&\n css`\n font-family: ${$labelStyle.fontFamily};\n `}\n`;\n\nexport const Description = styled.p`\n ${Typography.TextSmall};\n color: ${Color.TextSecondary};\n margin: 0;\n\n /* Multi-line truncation with 3-line limit */\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n\n /* Fallback for browsers that don't support -webkit-line-clamp */\n max-height: calc(${Typography.TextSmall.lineHeight} * 3); /* line-height * 3 lines */\n`;\n\n// Hook to calculate dropdown position for portal rendering\nexport function useDropdownPosition(\n portalContainerRef: React.RefObject<HTMLElement>,\n isOpen: boolean,\n portal?: boolean,\n) {\n const [position, setPosition] = useState({ top: 0, left: 0, width: 0 });\n\n useEffect(() => {\n if (!portal || !isOpen || !portalContainerRef.current) {\n return;\n }\n\n const updatePosition = () => {\n const rect = portalContainerRef.current!.getBoundingClientRect();\n const spacing = parseInt(Spacing[2]);\n setPosition({\n top: rect.bottom + spacing,\n left: rect.left,\n width: rect.width,\n });\n };\n\n updatePosition();\n\n // Update position on scroll and resize\n window.addEventListener('scroll', updatePosition, true);\n window.addEventListener('resize', updatePosition);\n\n return () => {\n window.removeEventListener('scroll', updatePosition, true);\n window.removeEventListener('resize', updatePosition);\n };\n }, [portalContainerRef, isOpen, portal]);\n\n return position;\n}\n\n// Wrapper component for portal rendering\nexport interface DropdownPortalWrapperProps {\n children: React.ReactNode;\n portal?: boolean;\n}\n\nexport function DropdownPortalWrapper({ children, portal }: DropdownPortalWrapperProps) {\n const portalRoot = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (portal) {\n portalRoot.current = document.body;\n }\n }, [portal]);\n\n if (portal && portalRoot.current) {\n return createPortal(\n <div id='combobox-dropdown-portal-wrapper'>{children}</div>,\n portalRoot.current,\n );\n }\n\n return <>{children}</>;\n}\n","import { type MutableRefObject, type RefObject, useEffect, useState } from 'react';\n\nimport type { ComboboxOption } from 'design-system/components/Combobox';\n\n/**\n * Custom hook for calculating truncation when multi-select items are restricted to a single line using actual DOM measurements\n * Ensures at least one item is always visible\n */\nexport function useTruncation<T>(\n selectedItems: ComboboxOption<T>[],\n stickerRefs: MutableRefObject<(HTMLElement | null)[]>,\n truncatorRef: RefObject<HTMLElement>,\n containerRef: RefObject<HTMLDivElement>,\n truncate: boolean,\n) {\n const [visibleCount, setVisibleCount] = useState<number>(selectedItems.length);\n\n useEffect(() => {\n if (!truncate || selectedItems.length === 0 || !containerRef.current) {\n setVisibleCount(selectedItems.length);\n return;\n }\n\n const calculateVisibleCount = () => {\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n // Check if all refs are populated\n const allRefsReady =\n selectedItems.every((_, i) => stickerRefs.current[i] != null) &&\n truncatorRef.current != null;\n if (!allRefsReady) {\n return;\n }\n\n // Get actual content width by subtracting padding\n const computedStyle = window.getComputedStyle(container);\n const paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;\n const paddingRight = parseFloat(computedStyle.paddingRight) || 0;\n const availableWidth = container.offsetWidth - paddingLeft - paddingRight;\n\n const gap = 4; // Spacing[1] = 4px\n const truncatorWidth = truncatorRef.current!.offsetWidth;\n\n // Simple algorithm: Start with 1 item, keep adding while they fit\n let count = 1;\n let totalWidth = stickerRefs.current[0]!.offsetWidth;\n\n // Try to add more items\n for (let i = 1; i < selectedItems.length; i++) {\n const itemWidth = stickerRefs.current[i]!.offsetWidth;\n const wouldBeLastItem = i === selectedItems.length - 1;\n\n // Calculate required width if we add this item\n const widthWithItem = totalWidth + gap + itemWidth;\n const widthWithTruncator = wouldBeLastItem ? 0 : gap + truncatorWidth;\n const requiredWidth = widthWithItem + widthWithTruncator;\n\n if (requiredWidth <= availableWidth) {\n totalWidth = widthWithItem;\n count++;\n } else {\n // Can't fit this item, stop\n break;\n }\n }\n\n // Update state only if changed\n setVisibleCount((prev) => (prev === count ? prev : count));\n };\n\n // Recalculate on resize\n const resizeObserver = new ResizeObserver(calculateVisibleCount);\n resizeObserver.observe(containerRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [selectedItems, stickerRefs, truncatorRef, containerRef, truncate]);\n\n return visibleCount;\n}\n","import { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { CaretDownIcon, CircleXInverseIcon, SearchIcon } from '@persona/icons';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { useCombobox, useMultipleSelection } from 'downshift';\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport Checkbox from 'design-system/components/Checkbox';\nimport {\n CaretButton,\n type ComboboxBaseProps,\n ComboboxInput,\n type ComboboxOption,\n type ComboboxOptionsOrGroups,\n containsNestedGroup,\n Container,\n Description,\n DropdownContainer,\n DropdownPortalWrapper,\n EmptyState,\n flattenOptions,\n InputContainer,\n isOptionGroup,\n LoadingContainer,\n MAX_DROPDOWN_HEIGHT,\n OptionLabel,\n renderOptionsWithGroups,\n ScrollableMenuList,\n SearchInput,\n SearchInputContainer,\n useDropdownPosition,\n useFilteredOptions,\n buildVirtualRows,\n} from 'design-system/components/Combobox/ComboboxBase';\nimport { useTruncation } from 'design-system/components/Combobox/useTruncation';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport { InputGroup } from 'design-system/components/Input';\nimport { MenuItem } from 'design-system/components/Menu';\nimport Spinner from 'design-system/components/Spinner/Spinner';\nimport Stack from 'design-system/components/Stack';\nimport Sticker from 'design-system/components/Sticker';\nimport { useOutsideClick } from 'design-system/lib/useOutsideClick';\nimport type { InputSizes } from 'design-system/mixins/input';\n\n// Constants\nconst SELECT_ALL_VALUE = '__SELECT_ALL__';\nconst EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH = '240px';\n\n/**\n * Recursively drop the `nested: true` flag from every group in the\n * tree, converting nested-navigation groups into inline section-\n * header groups. Multi-select doesn't implement the nested-nav UX\n * (chevron rows, Back row, descent), so this graceful-degradation\n * transform keeps every leaf reachable as a checkable option under\n * its parent's section header — instead of having `flattenOptions` /\n * `renderOptionsWithGroups` silently drop them along with their\n * descendants. Single-select Combobox is unaffected; it owns its own\n * nested-nav render path.\n *\n * For a multi-level tree (`{nested, options: [{nested, options}]}`),\n * the inner inline group is walked through by `flattenOptions` so\n * its leaves surface under the outer header — the inner label is\n * lost, but all leaves stay reachable. Acceptable for the\n * graceful-degradation goal; nested-nav can be added later without\n * changing this API.\n */\nfunction inlineNestedGroups<T>(items: ComboboxOptionsOrGroups<T>): ComboboxOptionsOrGroups<T> {\n return items.map((item) => {\n if (!isOptionGroup(item)) {\n return item;\n }\n return {\n label: item.label,\n options: inlineNestedGroups(item.options),\n };\n });\n}\n\n// Multi-select specific props\nexport interface ComboboxMultiSelectProps<T = string> extends ComboboxBaseProps<T> {\n /**\n * Multi-select mode\n */\n multiple: true;\n\n /**\n * Selected values\n */\n values?: T[];\n\n /**\n * Callback when selection changes\n */\n onValuesChange?: (values: T[]) => void;\n\n /**\n * Placeholder for search input in dropdown\n */\n searchPlaceholder?: string;\n\n /**\n * If true, the combobox will truncate the selected items to a single line with overflow indicator.\n */\n truncate?: boolean;\n\n /**\n * If true, the combobox will show a special option to select or deselect all items in the current list\n */\n selectAll?: boolean;\n\n /**\n * When `true`, options keep their given order instead of floating\n * currently-selected options to the top. Toggling a value no longer\n * reorders the list under the pointer — important for surfaces like filter\n * value pickers, where the just-clicked row visibly jumping to another\n * position reads as \"the wrong item toggled\". Defaults to `false`\n * (selected-first).\n */\n stableOptionOrder?: boolean;\n\n // Explicitly exclude single-select props to prevent usage\n value?: never;\n onChange?: never;\n virtualize?: boolean;\n}\n\n// Multi-select specific extensions of base components\nconst MultiSelectComboboxInput = styled(ComboboxInput)`\n position: absolute;\n inset: 0;\n height: auto;\n caret-color: transparent; /* Hide cursor in multi-select mode because we use stickers and focus into the search input */\n`;\n\n// Multi-select specific ScrollableMenuList that accounts for search bar\nconst MultiSelectScrollableMenuList = styled(ScrollableMenuList)<{ $embedded?: boolean }>`\n max-height: calc(${MAX_DROPDOWN_HEIGHT} - 60px); /* Subtract approximate search bar height */\n overflow-x: hidden; /* Prevent horizontal scrolling */\n width: 100%; /* Ensure full width is used */\n box-sizing: border-box;\n ${({ $embedded }) =>\n $embedded &&\n css`\n padding: 0;\n `}\n`;\n\nconst SelectedItemsContainer = styled.div<{ $size: InputSizes; $truncate?: boolean }>`\n position: relative; /* Establish positioning context */\n box-sizing: border-box;\n min-height: ${({ $size }) => ($size === 'sm' ? Spacing[5] : Spacing[6])};\n max-height: ${({ $truncate, $size }) =>\n $truncate ? ($size === 'sm' ? Spacing[5] : Spacing[6]) : 'none'};\n padding-left: ${Spacing[2]};\n padding-right: ${({ $size }) =>\n $size === 'sm' ? Spacing[5] : Spacing[6]}; /* Leave space for caret button. */\n padding-top: ${({ $size }) => ($size === 'sm' ? Spacing[1] : Spacing[2])};\n padding-bottom: ${({ $size }) => ($size === 'sm' ? Spacing[1] : Spacing[2])};\n display: flex;\n flex-wrap: ${({ $truncate }) => ($truncate ? 'nowrap' : 'wrap')};\n gap: ${Spacing[1]};\n align-items: flex-start;\n align-content: flex-start;\n pointer-events: none; /* Allow clicks to pass through to underlying input */\n overflow: hidden; /* Required for truncation when truncate mode is enabled */\n\n /* Re-enable pointer events on stickers' dismiss buttons */\n button {\n pointer-events: auto;\n }\n`;\n\nconst TruncatedItemsWrapper = styled.div`\n display: flex;\n flex-wrap: nowrap;\n gap: ${Spacing[1]};\n overflow: hidden;\n flex: 1;\n min-width: 0; /* Allow shrinking below content size */\n pointer-events: none;\n`;\n\nconst TruncatedSticker = styled(Sticker)<{ $isOnlyItem: boolean }>`\n /* Allow first sticker to truncate its text only when it's the only item */\n flex-shrink: ${({ $isOnlyItem }) => ($isOnlyItem ? 1 : 0)};\n min-width: 0;\n max-width: 100%;\n /* If the sticker is an inline element it was causing the parent to gain an extra pixel of height */\n vertical-align: top;\n`;\n\nconst TruncatorSticker = styled(Sticker)`\n /* Truncator should never shrink */\n flex-shrink: 0;\n /* If the sticker is an inline element it was causing the parent to gain an extra pixel of height */\n vertical-align: top;\n`;\n\nconst HiddenMeasurementContainer = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n visibility: hidden;\n display: flex;\n flex-wrap: nowrap;\n gap: ${Spacing[1]};\n pointer-events: none;\n overflow: hidden;\n max-width: 100%;\n`;\n\nconst StyledMenuItem = styled(MenuItem)<{ $size?: InputSizes }>`\n /* These heights should add up to 24 and 32 respectively and the content is 20 already */\n padding: ${({ $size }) => ($size === 'sm' ? `2px ${Spacing[2]}` : `6px ${Spacing[2]}`)};\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: ${Spacing[1]};\n min-width: 0; /* Allow content to shrink below natural size */\n width: 100%; /* Ensure full width of dropdown */\n box-sizing: border-box;\n\n /* Force all children to respect the container width */\n > * {\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n }\n`;\n\nconst CheckboxLabel = styled.span<{ id?: string; $size?: InputSizes }>`\n color: ${Color.TextPrimary};\n ${({ $size }) => ($size === 'sm' ? Typography.TextSmall : Typography.TextMedium)};\n display: flex;\n flex-direction: column;\n gap: ${Spacing[1]};\n min-width: 0; /* Allow content to shrink below natural size */\n\n /** Nudge text for visual alignment */\n position: relative;\n bottom: -1px;\n`;\n\nfunction ComboboxMultiSelectComponent<T = string>(\n {\n size = 'md',\n options: rawOptions,\n isOptionsLoading,\n values = [],\n onValuesChange,\n searchPlaceholder = 'Search...',\n onInputChange,\n placeholder = 'Select an option...',\n emptyStateMessage = 'No options found',\n disabled = false,\n hasWarning,\n hasError,\n id,\n labelId,\n 'aria-label': ariaLabel,\n onOpenChange,\n truncate = false,\n selectAll = false,\n stableOptionOrder = false,\n portal = false,\n portalContainerRef: externalPortalContainerRef,\n trigger,\n embedded = false,\n virtualize = false,\n ...props\n }: ComboboxMultiSelectProps<T>,\n ref: React.Ref<HTMLInputElement>,\n) {\n // Normalize `nested: true` groups into inline section-header\n // groups before the rest of the component sees them, so the legacy\n // flatten / render / virtualization code paths work uniformly. The\n // common case (no nested groups anywhere) short-circuits via\n // `containsNestedGroup` and returns the prop value as-is, keeping\n // referential identity stable for downstream memoization.\n const options = useMemo(\n () => (containsNestedGroup(rawOptions) ? inlineNestedGroups(rawOptions) : rawOptions),\n [rawOptions],\n );\n\n const field = useFormField({ hasWarning, hasError, disabled, inputId: id });\n const [inputValue, setInputValue] = useState('');\n const searchInputRef = useRef<HTMLInputElement>(null);\n const comboboxInputRef = useRef<HTMLInputElement>(null);\n const caretButtonRef = useRef<HTMLButtonElement>(null);\n const comboboxContainerRef = useRef<HTMLDivElement>(null);\n const scrollableListRef = useRef<HTMLDivElement>(null);\n const selectedItemsContainerRef = useRef<HTMLDivElement>(null);\n const measurementStickerRefs = useRef<(HTMLElement | null)[]>([]);\n const measurementTruncatorRef = useRef<HTMLElement>(null);\n\n // Use external portalContainerRef if provided, otherwise use internal ref for portal positioning\n const portalContainerRef = externalPortalContainerRef || comboboxContainerRef;\n\n // Flatten options for working with downshift (which only works with flat arrays)\n const flatOptions = useMemo(() => flattenOptions(options), [options]);\n\n // Get selected items from flat options\n const selectedItems = flatOptions.filter((option) => values.includes(option.value));\n\n // Initialize measurement refs array\n useEffect(() => {\n measurementStickerRefs.current = measurementStickerRefs.current.slice(0, selectedItems.length);\n }, [selectedItems.length]);\n\n const visibleCount = useTruncation(\n selectedItems,\n measurementStickerRefs,\n measurementTruncatorRef,\n selectedItemsContainerRef,\n truncate,\n );\n\n // Expose methods to parent component\n useImperativeHandle(\n ref,\n () => ({\n ...comboboxInputRef.current!,\n focusSearchInput: () => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n },\n }),\n [],\n );\n\n // Filter options based on input value\n const filteredOptions = useFilteredOptions<T>(options, inputValue);\n\n // When options are not grouped, we float selected items to the top of the menu.\n // When grouped, we float selected items to the top within each group.\n const isGrouped = useMemo(() => options.some(isOptionGroup), [options]);\n\n // When grouped and there are selected values, reorder each group's options so selected come first\n const optionsWithSelectedFirstInGroups = useMemo(() => {\n if (!isGrouped || values.length === 0 || stableOptionOrder) {\n return options;\n }\n return options.map((item) => {\n if (isOptionGroup(item)) {\n // `options` has already been normalized to inline groups at\n // the component boundary (`inlineNestedGroups` above), so\n // flattening the group's contents here surfaces every leaf\n // under it — even ones that came from a nested-marked\n // subtree in the original prop. Sort selected-first within\n // the resulting flat list.\n const groupLeaves = flattenOptions(item.options);\n return {\n ...item,\n options: groupLeaves.toSorted((a, b) => {\n const aSelected = values.includes(a.value);\n const bSelected = values.includes(b.value);\n if (aSelected === bSelected) {\n return 0;\n }\n return aSelected ? -1 : 1;\n }),\n };\n }\n return item;\n });\n }, [options, isGrouped, values, stableOptionOrder]);\n\n // Create navigable items array that includes select all option for keyboard navigation.\n // When flat (not grouped): selected items first. When grouped: selected first within each group.\n const navigableItems = useMemo(() => {\n const items: ComboboxOption<T>[] = [];\n\n if (isGrouped && values.length > 0) {\n // Build flat list in render order: each group's options with selected first, only including filtered\n if (selectAll && filteredOptions.length > 0) {\n items.push({\n value: SELECT_ALL_VALUE as T,\n label: 'Select all',\n } satisfies ComboboxOption<T>);\n }\n for (const item of optionsWithSelectedFirstInGroups) {\n if (isOptionGroup(item)) {\n // `optionsWithSelectedFirstInGroups` flattens each group's\n // contents to leaves above; the inner iteration is safe to\n // treat as `ComboboxOption<T>[]` here.\n for (const opt of flattenOptions(item.options)) {\n if (filteredOptions.some((f) => f.value === opt.value)) {\n items.push(opt);\n }\n }\n } else {\n if (filteredOptions.some((f) => f.value === item.value)) {\n items.push(item);\n }\n }\n }\n return items;\n }\n\n const orderedFiltered =\n !isGrouped && values.length > 0 && !stableOptionOrder\n ? filteredOptions.toSorted((a, b) => {\n const aSelected = values.includes(a.value);\n const bSelected = values.includes(b.value);\n if (aSelected === bSelected) {\n return 0;\n }\n return aSelected ? -1 : 1;\n })\n : filteredOptions;\n\n // Add select all option if enabled and there are filtered options\n if (selectAll && orderedFiltered.length > 0) {\n items.push({\n value: SELECT_ALL_VALUE as T,\n label: 'Select all',\n } satisfies ComboboxOption<T>);\n }\n\n // Add regular filtered options (selected first when ungrouped)\n items.push(...orderedFiltered);\n\n return items;\n }, [\n selectAll,\n filteredOptions,\n isGrouped,\n values,\n optionsWithSelectedFirstInGroups,\n stableOptionOrder,\n ]);\n\n const optionsToRender = useMemo(() => {\n if (!isGrouped && values.length > 0) {\n return navigableItems;\n }\n\n const hasSelectAll =\n selectAll && filteredOptions.length > 0 && navigableItems[0]?.value === SELECT_ALL_VALUE;\n\n const baseOptions = isGrouped && values.length > 0 ? optionsWithSelectedFirstInGroups : options;\n\n return hasSelectAll ? [navigableItems[0], ...baseOptions] : baseOptions;\n }, [\n isGrouped,\n values,\n navigableItems,\n selectAll,\n filteredOptions,\n optionsWithSelectedFirstInGroups,\n options,\n ]);\n\n const navigableToVirtualRowRef = useRef(new Map<number, number>());\n\n const virtualRows = useMemo(() => {\n if (!virtualize) {\n return [];\n }\n const map = new Map<number, number>();\n const rows = buildVirtualRows(optionsToRender, navigableItems, map);\n navigableToVirtualRowRef.current = map;\n return rows;\n }, [optionsToRender, navigableItems, virtualize]);\n\n const virtualizer = useVirtualizer({\n count: virtualRows.length,\n getScrollElement: () => scrollableListRef.current,\n estimateSize: () => (size === 'sm' ? 24 : 32),\n overscan: 5,\n });\n\n const itemToString = useCallback((item: ComboboxOption<T> | null) => {\n return item ? item.label : '';\n }, []);\n\n // Multi-select hooks - pass selectedItems to initialize downshift state\n const {\n addSelectedItem,\n getSelectedItemProps,\n getDropdownProps,\n removeSelectedItem,\n reset,\n setSelectedItems,\n } = useMultipleSelection({\n selectedItems, // Pass selectedItems to initialize/control downshift state\n onStateChange: ({ selectedItems: newSelectedItems, type }) => {\n switch (type) {\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownDelete:\n case useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace:\n case useMultipleSelection.stateChangeTypes.FunctionRemoveSelectedItem:\n case useMultipleSelection.stateChangeTypes.FunctionAddSelectedItem:\n case useMultipleSelection.stateChangeTypes.FunctionSetSelectedItems:\n if (onValuesChange && newSelectedItems) {\n const newValues = newSelectedItems.map((item) => item.value);\n onValuesChange?.(newValues);\n }\n break;\n case useMultipleSelection.stateChangeTypes.FunctionReset:\n if (onValuesChange) {\n onValuesChange([]);\n }\n break;\n default:\n break;\n }\n },\n });\n\n // Calculate selected state for filtered items (for select all checkbox state)\n const selectedState = useMemo(() => {\n const counts = filteredOptions.reduce(\n (acc, option) => {\n if (values.includes(option.value)) {\n acc.selected++;\n } else {\n acc.notSelected++;\n }\n return acc;\n },\n { selected: 0, notSelected: 0 },\n );\n return {\n allSelected: counts.selected === filteredOptions.length,\n allNotSelected: counts.notSelected === filteredOptions.length,\n indeterminate: counts.selected > 0 && counts.selected < filteredOptions.length,\n };\n }, [values, filteredOptions]);\n\n const handleSelectAllToggle = useCallback(() => {\n if (selectedState.allSelected || selectedState.indeterminate) {\n // Deselect all visible filtered items - keep only items not in filtered results\n const visibleValues = filteredOptions.map((option) => option.value);\n const remainingItems = selectedItems.filter((item) => !visibleValues.includes(item.value));\n setSelectedItems(remainingItems);\n } else {\n // Select all: combine existing + new filtered items\n const newItems = filteredOptions.filter((option) => !values.includes(option.value));\n setSelectedItems([...selectedItems, ...newItems]);\n }\n }, [\n selectedState.allSelected,\n selectedState.indeterminate,\n filteredOptions,\n selectedItems,\n values,\n setSelectedItems,\n ]);\n\n // Multi-select combobox hooks\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n setHighlightedIndex,\n closeMenu,\n openMenu,\n } = useCombobox({\n items: navigableItems,\n itemToString,\n isOpen: embedded ? true : undefined,\n selectedItem: null,\n initialHighlightedIndex: 0,\n defaultHighlightedIndex: 0,\n onIsOpenChange({ isOpen: newIsOpen }) {\n // Clear search input when dropdown opens, but only if it has content\n // This prevents unnecessary recalculation when inputValue is already empty\n if (newIsOpen && inputValue !== '') {\n setInputValue('');\n }\n },\n onHighlightedIndexChange: ({ highlightedIndex, type }) => {\n if (\n virtualize &&\n type !== useCombobox.stateChangeTypes.MenuMouseLeave &&\n highlightedIndex >= 0\n ) {\n const rowIndex = navigableToVirtualRowRef.current.get(highlightedIndex);\n if (rowIndex != null) {\n virtualizer.scrollToIndex(rowIndex, { align: 'auto' });\n }\n }\n },\n onStateChange({ type, selectedItem: newSelectedItem, inputValue: newInputValue }) {\n switch (type) {\n case useCombobox.stateChangeTypes.InputChange:\n setInputValue(newInputValue || '');\n onInputChange?.(newInputValue || '');\n break;\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n // Handle select all option\n if (newSelectedItem && newSelectedItem.value === SELECT_ALL_VALUE) {\n handleSelectAllToggle();\n break;\n }\n\n // Handle regular multi-select logic\n if (newSelectedItem) {\n const isSelected = values.includes(newSelectedItem.value);\n if (isSelected) {\n removeSelectedItem(newSelectedItem);\n } else {\n addSelectedItem(newSelectedItem);\n }\n }\n break;\n default:\n break;\n }\n },\n stateReducer(state, actionAndChanges) {\n const { type, changes } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n // Keep menu open after selection and let Downshift manage highlighting\n return {\n ...changes,\n isOpen: true,\n inputValue: '', // Always keep input empty in multi-select mode\n highlightedIndex: state.highlightedIndex, // Not doing this resets the highlighted index to 0\n };\n case useCombobox.stateChangeTypes.InputBlur:\n // Prevent closing when focus moves to search input\n if (isOpen) {\n return {\n ...changes,\n isOpen: true, // Keep open, let search input onBlur handle external focus\n };\n }\n return changes;\n case useCombobox.stateChangeTypes.InputClick:\n case useCombobox.stateChangeTypes.ToggleButtonClick:\n return changes;\n default:\n return changes;\n }\n },\n });\n\n const renderOption = useCallback(\n (option: ComboboxOption<T>, currentIndex: number) => {\n const isHighlighted = highlightedIndex === currentIndex;\n const isSelected = values.includes(option.value);\n\n // Handle select all option\n if (option.value === SELECT_ALL_VALUE) {\n return (\n <StyledMenuItem\n key='select-all'\n {...getItemProps({\n item: option,\n index: currentIndex,\n })}\n focused={isHighlighted}\n selected={false}\n aria-labelledby={`combobox-option-label-${currentIndex}`}\n $size={size}\n tabIndex={-1}\n >\n <Stack direction='horizontal' align='center' spacing={Spacing[2]}>\n <Checkbox\n checked={selectedState.allSelected}\n indeterminate={selectedState.indeterminate}\n tabIndex={-1}\n />\n <CheckboxLabel id={`combobox-option-label-${currentIndex}`} $size={size}>\n <OptionLabel>{option.label}</OptionLabel>\n </CheckboxLabel>\n </Stack>\n </StyledMenuItem>\n );\n }\n\n // Handle regular options\n return (\n <StyledMenuItem\n key={`${option.value}-${currentIndex}`}\n {...getItemProps({\n item: option,\n index: currentIndex,\n 'aria-selected': isSelected,\n })}\n focused={isHighlighted}\n selected={false} // Don't use selected styling for multi-select items\n aria-labelledby={`combobox-option-label-${currentIndex}`}\n $size={size}\n tabIndex={-1}\n >\n <Stack direction='horizontal' align='center' spacing={Spacing[2]}>\n <Checkbox checked={isSelected} tabIndex={-1} />\n <CheckboxLabel id={`combobox-option-label-${currentIndex}`} $size={size}>\n {option.labelStickerVariant ? (\n <Sticker variant={option.labelStickerVariant}>{option.label}</Sticker>\n ) : (\n <>\n <OptionLabel\n title={option.label}\n $labelStyle={option.PLEASE_DO_NOT_USE_labelFontStyle}\n >\n {option.label}\n </OptionLabel>\n {option.description && (\n <Description title={option.description}>{option.description}</Description>\n )}\n </>\n )}\n </CheckboxLabel>\n </Stack>\n </StyledMenuItem>\n );\n },\n [highlightedIndex, values, getItemProps, size, selectedState],\n );\n\n // Downshift owns the open state; embedded mode controls Downshift open via\n // `isOpen: true` above so rendered UI and Downshift state stay synchronized.\n const isMenuOpen = isOpen;\n\n // Handle Enter key to open menu when closed\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !isMenuOpen) {\n openMenu();\n }\n },\n [isMenuOpen, openMenu],\n );\n\n // Calculate dropdown position for portal rendering\n const dropdownPosition = useDropdownPosition(\n portalContainerRef,\n isMenuOpen,\n embedded ? false : portal,\n );\n\n // Call onOpenChange when dropdown state changes\n useEffect(() => {\n onOpenChange?.(isMenuOpen);\n }, [isMenuOpen, onOpenChange]);\n\n // Reset highlighted index when filtering changes options\n // We might need to remove this because it resets the highlighted index to 0 when the mouse leaves the menu\n useEffect(() => {\n if (isMenuOpen && navigableItems.length > 0) {\n if (highlightedIndex === -1 || highlightedIndex >= navigableItems.length) {\n setHighlightedIndex(0);\n }\n }\n }, [navigableItems, isMenuOpen, highlightedIndex, setHighlightedIndex]);\n\n // Generate unique ID for SearchInput component\n const searchInputId = `${field.inputId}-search`;\n\n // Simple focus management for multi-select search input\n useEffect(() => {\n if (isMenuOpen && searchInputRef.current) {\n // Focus search input when dropdown opens - downshift handles the rest\n searchInputRef.current.focus();\n }\n }, [isMenuOpen]);\n\n const handleSearchInputKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Handle arrow keys to navigate through options\n if (e.key === 'ArrowDown' && navigableItems.length > 0) {\n e.preventDefault();\n const nextIndex =\n highlightedIndex === -1 ? 0 : (highlightedIndex + 1) % navigableItems.length;\n setHighlightedIndex(nextIndex);\n }\n\n if (e.key === 'ArrowUp' && navigableItems.length > 0) {\n e.preventDefault();\n const prevIndex =\n highlightedIndex === -1\n ? navigableItems.length - 1\n : (highlightedIndex - 1 + navigableItems.length) % navigableItems.length;\n setHighlightedIndex(prevIndex);\n }\n\n if (e.key === 'Enter' && highlightedIndex >= 0 && navigableItems[highlightedIndex]) {\n e.preventDefault();\n const selectedItem = navigableItems[highlightedIndex];\n\n // Handle select all option\n if (selectedItem.value === SELECT_ALL_VALUE) {\n handleSelectAllToggle();\n return;\n }\n\n // Handle regular options\n const isSelected = values.includes(selectedItem.value);\n if (isSelected) {\n removeSelectedItem(selectedItem);\n } else {\n addSelectedItem(selectedItem);\n }\n }\n\n if (e.key === 'Escape') {\n closeMenu();\n // Restore focus to main input\n if (comboboxInputRef.current) {\n comboboxInputRef.current.focus();\n }\n }\n if (e.key === 'Tab' && highlightedIndex >= 0 && navigableItems[highlightedIndex]) {\n closeMenu();\n // Don't prevent default - let Tab continue to next element\n }\n },\n [\n navigableItems,\n highlightedIndex,\n setHighlightedIndex,\n values,\n addSelectedItem,\n removeSelectedItem,\n closeMenu,\n comboboxInputRef,\n handleSelectAllToggle,\n ],\n );\n\n const handleOutsideClick = useCallback(\n (e: MouseEvent) => {\n if (\n !embedded &&\n isMenuOpen &&\n !(e.target as HTMLElement)?.closest('#combobox-dropdown-portal-wrapper')\n ) {\n closeMenu();\n }\n },\n [embedded, isMenuOpen, closeMenu],\n );\n\n useOutsideClick({\n ref: comboboxContainerRef,\n onOutsideClick: handleOutsideClick,\n });\n\n const externalTrigger = (() => {\n if (embedded || trigger == null || !isValidElement(trigger)) {\n return null;\n }\n const triggerProps = trigger.props as Record<string, unknown> & { disabled?: unknown };\n return cloneElement(\n trigger,\n getToggleButtonProps({\n ...triggerProps,\n disabled: field.disabled || Boolean(triggerProps.disabled),\n }) as Record<string, unknown>,\n );\n })();\n\n const handleSearchInputBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n if (!isMenuOpen) {\n return;\n }\n\n // Check if focus is moving outside the component boundary\n const relatedTarget = e.relatedTarget as HTMLElement | null;\n\n if (!embedded && (!relatedTarget || !comboboxContainerRef.current?.contains(relatedTarget))) {\n // Focus is moving outside the component, close the dropdown\n closeMenu();\n }\n },\n [embedded, isMenuOpen, closeMenu],\n );\n\n return (\n <Container {...props} ref={comboboxContainerRef}>\n {embedded ? null : externalTrigger != null ? (\n externalTrigger\n ) : (\n <InputContainer>\n <MultiSelectComboboxInput\n {...getInputProps(\n getDropdownProps({\n ...props,\n ref: comboboxInputRef,\n id: field.inputId,\n placeholder: selectedItems.length === 0 ? placeholder : '',\n disabled: field.disabled,\n 'aria-label': ariaLabel,\n 'aria-labelledby': labelId,\n 'aria-describedby':\n [field.helperTextId, field.hasWarning ? field.warningTextId : null]\n .filter(Boolean)\n .join(' ') || undefined,\n 'aria-errormessage': field.hasError ? field.errorTextId : undefined,\n 'aria-invalid': field.hasError,\n preventKeyAction: isMenuOpen,\n onKeyDown: handleKeyDown,\n }),\n )}\n size={size}\n $isOpen={isMenuOpen}\n hasWarning={field.hasWarning}\n hasError={field.hasError}\n value='' // Always empty in multi-select mode\n />\n {/* Hidden measurement container - always renders all items for accurate measurements */}\n {truncate && selectedItems.length > 0 && (\n <HiddenMeasurementContainer aria-hidden='true'>\n {selectedItems.map((item, index) => {\n const selectedOption = flatOptions.find((opt) => opt.value === item.value);\n const stickerVariant = selectedOption?.labelStickerVariant || 'grey';\n return (\n <div\n key={`measurement-${item.value}-${index}`}\n ref={(el: HTMLDivElement | null) =>\n (measurementStickerRefs.current[index] = el)\n }\n >\n <Sticker variant={stickerVariant} disabled={field.disabled}>\n {item.label}\n </Sticker>\n </div>\n );\n })}\n <div ref={measurementTruncatorRef as React.RefObject<HTMLDivElement>}>\n <TruncatorSticker variant='grey' disabled={field.disabled}>\n +{selectedItems.length - visibleCount}\n </TruncatorSticker>\n </div>\n </HiddenMeasurementContainer>\n )}\n {/* Show selected items as stickers */}\n <SelectedItemsContainer $size={size} $truncate={truncate} ref={selectedItemsContainerRef}>\n {truncate ? (\n <TruncatedItemsWrapper>\n {selectedItems.slice(0, visibleCount).map((item, index) => {\n const { ref: _ref, ...stickerProps } = getSelectedItemProps({\n selectedItem: item,\n index,\n });\n const selectedOption = flatOptions.find((opt) => opt.value === item.value);\n const stickerVariant = selectedOption?.labelStickerVariant || 'grey';\n\n return (\n <TruncatedSticker\n key={`selected-${item.value}-${index}`}\n {...stickerProps}\n variant={stickerVariant}\n disabled={field.disabled}\n $isOnlyItem={visibleCount === 1}\n >\n {item.label}\n </TruncatedSticker>\n );\n })}\n {visibleCount < selectedItems.length && (\n <TruncatorSticker variant='grey' disabled={field.disabled}>\n +{selectedItems.length - visibleCount}\n </TruncatorSticker>\n )}\n </TruncatedItemsWrapper>\n ) : (\n selectedItems.map((item, index) => {\n const { ref, ...stickerProps } = getSelectedItemProps({\n selectedItem: item,\n index,\n });\n const selectedOption = flatOptions.find((opt) => opt.value === item.value);\n const stickerVariant = selectedOption?.labelStickerVariant || 'grey';\n return (\n <Sticker\n key={`selected-${item.value}-${index}`}\n {...stickerProps}\n variant={stickerVariant}\n onDismiss={(e) => {\n // Without this, clicking dismiss doesn't work due to event bubbling\n e.stopPropagation();\n removeSelectedItem(item);\n }}\n dismissButtonProps={{\n tabIndex: -1,\n }}\n disabled={field.disabled}\n tabIndex={-1}\n >\n {item.label}\n </Sticker>\n );\n })\n )}\n </SelectedItemsContainer>\n\n {selectedItems.length > 0 ? (\n <CaretButton\n id={`${field.inputId}__clear-all`}\n onClick={reset}\n size={size}\n disabled={field.disabled}\n aria-label='Clear all selected items'\n >\n <CircleXInverseIcon />\n </CaretButton>\n ) : (\n <CaretButton\n {...getToggleButtonProps({\n ref: caretButtonRef,\n })}\n size={size}\n disabled={field.disabled}\n aria-label={`${isMenuOpen ? 'Close' : 'Open'} options menu`}\n aria-haspopup='listbox'\n >\n <CaretDownIcon />\n </CaretButton>\n )}\n </InputContainer>\n )}\n\n <DropdownPortalWrapper portal={embedded ? false : portal}>\n <DropdownContainer\n $isOpen={isMenuOpen}\n $portal={embedded ? false : portal}\n $embedded={embedded}\n $top={dropdownPosition.top}\n $left={dropdownPosition.left}\n $width={dropdownPosition.width}\n $minWidth={externalTrigger ? EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH : undefined}\n {...getMenuProps()}\n aria-multiselectable='true'\n >\n {/* Fixed search input */}\n {isMenuOpen && (\n <SearchInputContainer $embedded={embedded}>\n <InputGroup leftIcon={embedded ? undefined : <SearchIcon />} size={size}>\n <SearchInput\n $embedded={embedded}\n id={searchInputId}\n ref={searchInputRef}\n placeholder={searchPlaceholder}\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n onInputChange?.(e.target.value);\n }}\n onKeyDown={handleSearchInputKeyDown}\n onBlur={handleSearchInputBlur}\n disabled={field.disabled}\n aria-label={embedded ? 'Search options' : (ariaLabel ?? searchPlaceholder)}\n size={size}\n />\n </InputGroup>\n </SearchInputContainer>\n )}\n <MultiSelectScrollableMenuList $embedded={embedded} tabIndex={-1} ref={scrollableListRef}>\n {isMenuOpen && (\n <>\n {isOptionsLoading ? (\n <LoadingContainer>\n <Spinner size='md' />\n </LoadingContainer>\n ) : navigableItems.length > 0 ? (\n renderOptionsWithGroups({\n options: optionsToRender,\n filteredOptions: navigableItems,\n renderOption,\n virtualizer: virtualize ? virtualizer : undefined,\n virtualRows: virtualize ? virtualRows : undefined,\n })\n ) : (\n <EmptyState role='status' aria-live='polite' size={size}>\n {emptyStateMessage}\n </EmptyState>\n )}\n </>\n )}\n </MultiSelectScrollableMenuList>\n </DropdownContainer>\n </DropdownPortalWrapper>\n </Container>\n );\n}\n\nexport const ComboboxMultiSelect = forwardRef(ComboboxMultiSelectComponent) as <T = string>(\n props: ComboboxMultiSelectProps<T> & { ref?: React.Ref<HTMLInputElement> },\n) => React.ReactElement;\n\nexport default ComboboxMultiSelect;\n","import { Color, Spacing, Typography } from '@persona/design-tokens';\nimport { ArrowLeftIcon, CaretDownIcon, ChevronRightIcon, SearchIcon } from '@persona/icons';\nimport { useCombobox } from 'downshift';\nimport Fuse from 'fuse.js';\nimport {\n cloneElement,\n forwardRef,\n Fragment,\n isValidElement,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport styled, { css } from 'styled-components';\n\nimport {\n CaretButton,\n type ComboboxBaseProps,\n ComboboxInput,\n type ComboboxOption,\n type ComboboxOptionGroup,\n containsNestedGroup,\n Container,\n Description,\n DropdownContainer,\n DropdownPortalWrapper,\n EmptyState,\n flattenLeafOptions,\n flattenOptions,\n getNavigableItemsAtLevel,\n getOptionsAtPath,\n InputContainer,\n isOptionGroup,\n LoadingContainer,\n type NavigableItem,\n OptionLabel,\n renderOptionsWithGroups,\n ScrollableMenuList,\n SearchInput,\n SearchInputContainer,\n useDropdownPosition,\n useFilteredOptions,\n} from 'design-system/components/Combobox/ComboboxBase';\nimport useFormField from 'design-system/components/FormControl/useFormField';\nimport { InputGroup } from 'design-system/components/Input';\nimport {\n IconContainer as MenuItemIconContainer,\n MenuHeading,\n MenuItem,\n} from 'design-system/components/Menu';\nimport Spinner from 'design-system/components/Spinner/Spinner';\nimport Sticker from 'design-system/components/Sticker';\nimport type { InputSizes } from 'design-system/mixins/input';\n\nexport interface ComboboxSingleSelectProps<T = string> extends ComboboxBaseProps<T> {\n /**\n * Single-select mode\n */\n multiple?: false;\n\n /**\n * Selected value\n */\n value?: T | null;\n\n /**\n * Callback when selection changes\n */\n onChange?: (value: T | null) => void;\n\n // Explicitly exclude multi-select props to prevent usage\n values?: never;\n onValuesChange?: never;\n searchPlaceholder?: never;\n truncate?: never;\n selectAll?: never;\n stableOptionOrder?: never;\n}\n\nexport const StyledMenuItem = styled(MenuItem)<{ size?: InputSizes }>`\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: ${Spacing[1]};\n min-width: 0; /* Allow content to shrink below natural size */\n width: 100%; /* Ensure full width of dropdown */\n box-sizing: border-box;\n\n /* Force all children to respect the container width */\n > * {\n width: 100%;\n min-width: 0;\n box-sizing: border-box;\n }\n`;\n\nconst ParentMenuItem = styled(MenuItem)<{ size?: InputSizes }>`\n ${MenuItemIconContainer} {\n margin-right: 0;\n }\n`;\n\nconst ParentChevron = styled.span`\n display: inline-flex;\n align-items: center;\n color: ${Color.BorderIconSecondary};\n`;\n\n// Minimum dropdown width when an external `trigger` is supplied —\n// keeps the dropdown readable even when the trigger is icon-sized.\nconst EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH = '240px';\n\nconst SingleSelectScrollableMenuList = styled(ScrollableMenuList)<{ $embedded?: boolean }>`\n ${({ $embedded }) =>\n $embedded &&\n css`\n padding: 0;\n `}\n`;\n\n// Back-navigation affordance shown at the top of the dropdown whenever\n// the user has descended into a submenu. Click ascends one level; the\n// ← keyboard arrow does the same. The Back row is intentionally NOT\n// part of downshift's `items` list so it doesn't interfere with the\n// option highlight/keyboard nav across the level's real options.\nconst BackRow = styled.button<{ $size?: InputSizes }>`\n display: flex;\n align-items: center;\n gap: ${({ $size }) => ($size === 'sm' ? Spacing[1] : Spacing[2])};\n width: 100%;\n padding: ${({ $size }) => ($size === 'sm' ? `${Spacing[1]} ${Spacing[2]}` : Spacing[2])};\n background: transparent;\n border: 0;\n cursor: pointer;\n color: ${Color.TextPrimary};\n ${({ $size }) => ($size === 'sm' ? Typography.TextSmall : Typography.TextMedium)};\n\n svg {\n color: ${Color.BorderIconPrimary};\n }\n`;\n\nconst StickerDisplay = styled(Sticker)`\n position: absolute;\n left: ${Spacing[2]};\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n z-index: 1;\n`;\n\nconst StickerComboboxInput = styled(ComboboxInput)`\n /* Hide text when sticker is shown */\n color: transparent;\n caret-color: transparent;\n`;\n\nfunction ComboboxSingleSelectComponent<T = string>(\n {\n size = 'md',\n options,\n isOptionsLoading,\n value,\n onChange,\n onInputChange,\n placeholder = 'Select an option...',\n emptyStateMessage = 'No options found',\n disabled = false,\n hasWarning,\n hasError,\n id,\n labelId,\n 'aria-label': ariaLabel,\n onOpenChange,\n portal = false,\n portalContainerRef: externalPortalContainerRef,\n trigger,\n embedded = false,\n ...props\n }: ComboboxSingleSelectProps<T>,\n ref: React.Ref<HTMLInputElement>,\n) {\n const field = useFormField({ hasWarning, hasError, disabled, inputId: id });\n const [inputValue, setInputValue] = useState('');\n // Keep track of dropdown state to avoid filtering options when updating value while dropdown is open\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n // Path of nested-group labels the user has descended into. Empty\n // when the dropdown is at the root. Reset on close so the next\n // open always lands at the top of the tree.\n const [navigationPath, setNavigationPath] = useState<string[]>([]);\n const comboboxInputRef = useRef<HTMLInputElement>(null);\n const internalContainerRef = useRef<HTMLDivElement>(null);\n // Descent triggered from `stateReducer` is queued here (a reducer\n // can't `setState`); the consumer effect drains it after render.\n const pendingDescentRef = useRef<string | null>(null);\n\n // Use external portalContainerRef if provided, otherwise use internal ref for portal positioning\n const portalContainerRef = externalPortalContainerRef || internalContainerRef;\n\n // Expose methods to parent component\n useImperativeHandle(\n ref,\n () => ({\n ...comboboxInputRef.current!,\n }),\n [],\n );\n\n // Active query — drives the search vs. nested mode switch. A non-empty\n // query flattens the tree and shows all leaves matching the query;\n // an empty query shows the level the navigation path resolves to.\n const trimmedQuery = inputValue.trim();\n const isSearching = trimmedQuery !== '';\n\n // The items visible at the current navigation depth: either the\n // original `options` at the root, or the contents of the nested\n // group `navigationPath` resolves to. Returns `[]` if the path is\n // stale (e.g. the group was removed from `options` mid-drill-down).\n const nestedOptions = useMemo(\n () => getOptionsAtPath(options, navigationPath),\n [options, navigationPath],\n );\n\n // True when at least one nested group exists anywhere in the tree.\n // Nested-navigation behavior (Back row, chevron, search-flattens-tree)\n // only activates for trees that actually use the new feature; legacy\n // flat or grouped option lists keep their original render unchanged.\n const hasNestedGroups = useMemo(() => containsNestedGroup(options), [options]);\n\n // Navigable items at the current nav level: leaves and nested groups\n // interleaved, in document order. Inline section-header groups are\n // walked through transparently (their leaves surface at this level).\n // This is the downshift `items` list in browse mode, and the order\n // matches what `renderNestedLevel` paints below.\n const navigableItems = useMemo(() => getNavigableItemsAtLevel(nestedOptions), [nestedOptions]);\n\n // Search-mode hits: every leaf in the tree (groups are unselectable).\n // Built only when the tree is nested; legacy flat/grouped lists keep\n // their original search render.\n const searchableLeaves = useMemo(() => {\n if (!isSearching || !hasNestedGroups) {\n return [] as ComboboxOption<T>[];\n }\n return flattenLeafOptions(options).map(({ option }) => option);\n }, [options, isSearching, hasNestedGroups]);\n\n // Separate Fuse index for nested-mode search that ALSO matches against\n // each leaf's ancestor labels — so typing a parent's label (e.g.\n // \"Business Account\") returns all of that parent's children. The\n // ancestor list is a search-only field carried alongside the option\n // (not on the option itself), so the leaf's rendered `description`\n // stays exactly what the consumer supplied.\n const searchableLeafFuse = useMemo(() => {\n if (!isSearching || !hasNestedGroups) {\n return null;\n }\n const entries = flattenLeafOptions(options).map(({ option, breadcrumb }) => ({\n option,\n label: String(option.label),\n description: option.description,\n ancestors: breadcrumb.join(' '),\n }));\n return new Fuse(entries, {\n shouldSort: false,\n threshold: 0,\n ignoreLocation: true,\n minMatchCharLength: 1,\n keys: ['label', 'description', 'ancestors'],\n });\n }, [options, isSearching, hasNestedGroups]);\n\n // The source the visible dropdown renders from. Nested-browse uses\n // whatever the navigation path resolves to. Search mode falls back to\n // the original `options` for flat/grouped lists (group headers stay\n // visible) and uses the flat-leaves overlay for nested trees.\n const renderSource = isSearching ? (hasNestedGroups ? searchableLeaves : options) : nestedOptions;\n\n // Filter the render source's LEAVES by the query. Nested+searching\n // uses the ancestor-aware Fuse so parent-label matches still surface\n // children; every other case (browse mode, flat/grouped search) goes\n // through the shared `useFilteredOptions` Fuse.\n const standardFilteredOptions = useFilteredOptions<T>(renderSource, inputValue);\n const filteredOptions = useMemo(() => {\n if (!isSearching || !hasNestedGroups || searchableLeafFuse == null) {\n return standardFilteredOptions;\n }\n if (inputValue === '') {\n return searchableLeaves;\n }\n return Array.from(\n new Set(searchableLeafFuse.search(inputValue).map(({ item }) => item.option)).values(),\n );\n }, [\n isSearching,\n hasNestedGroups,\n searchableLeafFuse,\n inputValue,\n searchableLeaves,\n standardFilteredOptions,\n ]);\n\n // Downshift `items` list. In search mode every item is a leaf\n // (groups never appear in search results). In browse mode the list\n // is `navigableItems` — leaves + nested groups, in render order —\n // so the highlightedIndex tracks both selectable and navigable rows.\n const downshiftItems = useMemo<NavigableItem<T>[]>(() => {\n if (isSearching) {\n return filteredOptions.map((option) => ({ kind: 'leaf', option }) as const);\n }\n // Browse-mode filter: navigable items whose leaf option is still\n // in `filteredOptions` (nested groups always pass through — they\n // aren't filtered by query because we'd flip to search mode).\n return navigableItems.filter(\n (item) => item.kind === 'group' || filteredOptions.some((f) => f.value === item.option.value),\n );\n }, [isSearching, filteredOptions, navigableItems]);\n\n // Lookup table for resolving the selected option's label when the\n // dropdown is closed. Walks the full tree so values stored deep in a\n // submenu still render their label in the input.\n const allLeaves = useMemo(() => flattenLeafOptions(options), [options]);\n const flatOptionsForFallback = useMemo(() => flattenOptions(options), [options]);\n const selectedOption =\n allLeaves.find(({ option }) => option.value === value)?.option ??\n flatOptionsForFallback.find((option) => option.value === value) ??\n null;\n\n // Downshift's `selectedItem` is a NavigableItem in nested mode. The\n // selected leaf is wrapped here so `itemToString` and the input's\n // displayed value resolve to the right label.\n //\n // Memoize on the committed value + label, NOT the `selectedOption` object\n // identity. Consumers that rebuild `options` on `onInputChange` produce a\n // fresh option object on every keystroke; keying off identity would make\n // Downshift treat the controlled `selectedItem` as changed and reset the\n // search input back to the selected label, clobbering an in-progress query.\n // The wrapper only needs to change when the committed selection does, and\n // Downshift only reads its label via `itemToString`.\n const selectedNavigableItem = useMemo<NavigableItem<T> | null>(\n () => (selectedOption ? { kind: 'leaf', option: selectedOption } : null),\n [selectedOption?.value, selectedOption?.label],\n );\n\n const itemToString = useCallback((item: NavigableItem<T> | null) => {\n if (!item) {\n return '';\n }\n return item.kind === 'leaf' ? item.option.label : item.group.label;\n }, []);\n\n const handleAscend = useCallback(() => {\n setNavigationPath((prev) => (prev.length > 0 ? prev.slice(0, -1) : prev));\n setInputValue('');\n }, []);\n\n const handleDescend = useCallback((groupLabel: string) => {\n setNavigationPath((prev) => [...prev, groupLabel]);\n setInputValue('');\n }, []);\n\n // Single-select combobox hooks\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n setHighlightedIndex,\n openMenu,\n } = useCombobox<NavigableItem<T>>({\n items: downshiftItems,\n itemToString,\n isOpen: embedded ? true : undefined,\n selectedItem: isDropdownOpen ? null : selectedNavigableItem,\n inputValue: inputValue,\n onInputValueChange({ inputValue: newInputValue }) {\n if (newInputValue === '' && !embedded && trigger == null) {\n onChange?.(null);\n }\n setInputValue(newInputValue || '');\n onInputChange?.(newInputValue || '');\n },\n onIsOpenChange({ isOpen: newIsOpen }) {\n setIsDropdownOpen(newIsOpen); // Keep our state in sync\n if (newIsOpen) {\n // Clear input when opening dropdown\n const shouldClear =\n selectedOption ||\n (value &&\n inputValue === flatOptionsForFallback.find((opt) => opt.value === value)?.label);\n if (shouldClear) {\n setInputValue('');\n }\n } else {\n // Set input to selected option's label when closing dropdown\n setInputValue(selectedOption?.label || '');\n }\n },\n // Group items are intercepted by `stateReducer` below (descent\n // queued; selection preserved). Anything that lands here is a\n // leaf, which we commit.\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n if (newSelectedItem == null || newSelectedItem.kind !== 'leaf') {\n return;\n }\n const leaf = newSelectedItem.option;\n onChange?.(leaf.value);\n setInputValue(leaf.label);\n },\n stateReducer(state, actionAndChanges) {\n const { changes, type } = actionAndChanges;\n\n switch (type) {\n case useCombobox.stateChangeTypes.InputBlur:\n // Close menu on blur but don't select highlighted item\n return {\n ...changes,\n selectedItem: state.selectedItem, // Keep current selection unchanged\n };\n case useCombobox.stateChangeTypes.ItemClick:\n case useCombobox.stateChangeTypes.InputKeyDownEnter: {\n // Intercept commits on nested-group items — descend into\n // their submenu instead of returning a value. The reducer\n // can't `setState`, so we queue the descent target via a\n // ref and let a consumer effect drain it after render.\n const candidate = changes.selectedItem;\n if (candidate && candidate.kind === 'group') {\n pendingDescentRef.current = candidate.group.label;\n return {\n ...changes,\n selectedItem: state.selectedItem, // preserve null in nested mode\n isOpen: true, // descent never closes the dropdown\n };\n }\n return changes;\n }\n default:\n return changes;\n }\n },\n });\n\n // Drain the pending-descent ref queued by `stateReducer`. Runs after\n // every render so a parent click → reducer queue → effect → state\n // update fires within one paint, before the user sees a stale view.\n useEffect(() => {\n if (pendingDescentRef.current != null) {\n const target = pendingDescentRef.current;\n pendingDescentRef.current = null;\n handleDescend(target);\n }\n });\n\n // Reset navigation path whenever the dropdown closes so the next open\n // always starts at the root. Without this the user re-opens the\n // dropdown deep in a submenu they were previously browsing, which\n // surprises both the keyboard-search and mouse-driven re-entry flows.\n useEffect(() => {\n if (!isOpen && !embedded && navigationPath.length > 0) {\n setNavigationPath([]);\n }\n }, [embedded, isOpen, navigationPath.length]);\n\n const renderLeaf = useCallback(\n (option: ComboboxOption<T>, currentIndex: number) => {\n const isHighlighted = highlightedIndex === currentIndex;\n const isSelected = selectedOption?.value === option.value;\n const itemProps = getItemProps({\n item: { kind: 'leaf', option } as NavigableItem<T>,\n index: currentIndex,\n // Override aria-selected to be true if the option is selected downshift has an open issue related to this https://github.com/downshift-js/downshift/issues/935\n 'aria-selected': isSelected,\n });\n\n const labelContent = option.labelStickerVariant ? (\n <Sticker variant={option.labelStickerVariant}>{option.label}</Sticker>\n ) : (\n <>\n <OptionLabel title={option.label} $labelStyle={option.PLEASE_DO_NOT_USE_labelFontStyle}>\n {option.label}\n </OptionLabel>\n {option.description && (\n <Description title={option.description}>{option.description}</Description>\n )}\n </>\n );\n\n return (\n <StyledMenuItem\n key={`leaf-${String(option.value)}-${currentIndex}`}\n {...itemProps}\n focused={isHighlighted}\n selected={isSelected}\n size={size}\n tabIndex={-1}\n >\n {labelContent}\n </StyledMenuItem>\n );\n },\n [highlightedIndex, selectedOption, getItemProps, size],\n );\n\n // Nested-group rows render with a trailing chevron in the MenuItem's\n // built-in `suffixIcon` slot — the DS layout owns the right-alignment\n // + spacing so we don't have to fight the `flex-direction: column` +\n // `> * { width: 100% }` rules baked into `StyledMenuItem`.\n // `stretchLabel` makes the label take the available row width so the\n // chevron sits flush against the right edge. `aria-haspopup` tells AT\n // that activating this row opens a submenu instead of committing a\n // value; the reducer queues a descent for `kind: 'group'` items to\n // match that contract.\n const renderNestedGroupRow = useCallback(\n (group: ComboboxOptionGroup<T>, currentIndex: number) => {\n const isHighlighted = highlightedIndex === currentIndex;\n const itemProps = getItemProps({\n item: { kind: 'group', group } as NavigableItem<T>,\n index: currentIndex,\n });\n return (\n <ParentMenuItem\n key={`group-${group.label}-${currentIndex}`}\n {...itemProps}\n aria-haspopup='menu'\n focused={isHighlighted}\n size={size}\n tabIndex={-1}\n stretchLabel\n suffixIcon={\n <ParentChevron aria-hidden='true'>\n <ChevronRightIcon />\n </ParentChevron>\n }\n >\n <OptionLabel title={group.label}>{group.label}</OptionLabel>\n </ParentMenuItem>\n );\n },\n [highlightedIndex, getItemProps, size],\n );\n\n // Browse-mode renderer for nested-nav trees. Walks the items at the\n // current navigation level, interleaving leaves (via `renderLeaf`),\n // nested-group nav rows (via `renderNestedGroupRow`), and inline\n // section headers (`MenuHeading`). `navIndex` advances in lockstep\n // with `downshiftItems` so highlightedIndex maps cleanly to what\n // gets painted.\n const renderNestedLevel = useCallback(\n (items: typeof nestedOptions) => {\n let navIndex = -1;\n const walk = (\n node: ComboboxOption<T> | ComboboxOptionGroup<T>,\n key: string,\n ): React.ReactNode => {\n if (isOptionGroup(node)) {\n if (node.nested) {\n // Only render if the node is in the filtered downshift\n // items list (browse mode keeps groups; search mode never\n // reaches this code path).\n if (!downshiftItems.some((i) => i.kind === 'group' && i.group === node)) {\n return null;\n }\n navIndex++;\n return <Fragment key={key}>{renderNestedGroupRow(node, navIndex)}</Fragment>;\n }\n // Inline section header: render header + walk children. Skip\n // entirely if no children would render (keeps the header from\n // floating above nothing).\n const childNodes: React.ReactNode[] = [];\n for (let i = 0; i < node.options.length; i++) {\n const rendered = walk(node.options[i]!, `${key}-${i}`);\n if (rendered != null) {\n childNodes.push(rendered);\n }\n }\n if (childNodes.length === 0) {\n return null;\n }\n return (\n <Fragment key={key}>\n <MenuHeading>{node.label}</MenuHeading>\n {childNodes}\n </Fragment>\n );\n }\n if (!downshiftItems.some((i) => i.kind === 'leaf' && i.option === node)) {\n return null;\n }\n navIndex++;\n return renderLeaf(node, navIndex);\n };\n return items.map((item, idx) => walk(item, `item-${idx}`));\n },\n [downshiftItems, renderLeaf, renderNestedGroupRow],\n );\n\n // Adapter wrapping `renderLeaf` for the legacy `renderOptionsWithGroups`\n // signature — the shared multi/single search-mode renderer expects\n // `(ComboboxOption<T>, flatIndex) => ReactNode`.\n const renderOption = useCallback(\n (option: ComboboxOption<T>, currentIndex: number) => renderLeaf(option, currentIndex),\n [renderLeaf],\n );\n\n // Downshift owns the open state; embedded mode controls Downshift open via\n // `isOpen: true` above so rendered UI and Downshift state stay synchronized.\n const isMenuOpen = isOpen;\n const dropdownPosition = useDropdownPosition(\n portalContainerRef,\n isMenuOpen,\n embedded ? false : portal,\n );\n\n // Keyboard:\n // - Enter on a closed input opens the menu (existing behavior)\n // - Right arrow on a highlighted parent option descends\n // - Left arrow at the start of the input (i.e. not text-navigating\n // within the query) ascends one level, when not at the root\n //\n // Nested-mode-only — search mode bypasses arrow navigation so the\n // arrow keys retain their normal text-caret semantics inside the\n // search query.\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter' && !isMenuOpen) {\n openMenu();\n return;\n }\n if (!isMenuOpen || isSearching) {\n return;\n }\n if (event.key === 'ArrowRight') {\n const highlighted = downshiftItems[highlightedIndex];\n if (highlighted && highlighted.kind === 'group') {\n event.preventDefault();\n handleDescend(highlighted.group.label);\n }\n return;\n }\n if (event.key === 'ArrowLeft' && navigationPath.length > 0) {\n const input = event.currentTarget;\n const caretAtStart = (input.selectionStart ?? 0) === 0 && (input.selectionEnd ?? 0) === 0;\n if (caretAtStart) {\n event.preventDefault();\n handleAscend();\n }\n }\n },\n [\n isMenuOpen,\n isSearching,\n downshiftItems,\n highlightedIndex,\n navigationPath.length,\n openMenu,\n handleDescend,\n handleAscend,\n ],\n );\n\n // Call onOpenChange when dropdown state changes\n useEffect(() => {\n onOpenChange?.(isMenuOpen);\n }, [isMenuOpen, onOpenChange]);\n\n // Keep inputValue in sync with selected option when dropdown is closed\n useEffect(() => {\n if (!isMenuOpen) {\n setInputValue(selectedOption?.label || '');\n }\n }, [selectedOption, isMenuOpen]);\n\n // Embedded mode pins the menu open, so the close-driven sync above never\n // runs. Mirror it for embedded mode so an externally-driven `value` update\n // (e.g. the surrounding filter UI clearing or replacing the value) refreshes\n // the search input and re-filters the list instead of holding a stale label.\n //\n // Key off the committed label *string*, not the `selectedOption` object\n // identity: consumers that rebuild `options` on `onInputChange` produce a\n // fresh option object on every keystroke, and keying off identity would\n // overwrite the user's in-progress search back to the selected label. The\n // label only changes when the committed value actually changes, so typing a\n // replacement query is left untouched.\n const selectedLabel = selectedOption?.label || '';\n useEffect(() => {\n if (embedded) {\n setInputValue(selectedLabel);\n }\n }, [selectedLabel, embedded]);\n\n // Reset highlighted index when filtering changes options\n useEffect(() => {\n if (isMenuOpen && downshiftItems.length > 0) {\n if (highlightedIndex === -1 || highlightedIndex >= downshiftItems.length) {\n setHighlightedIndex(0);\n }\n }\n }, [downshiftItems, isMenuOpen, highlightedIndex, setHighlightedIndex]);\n\n const displayValue = isMenuOpen ? inputValue : selectedOption?.label || '';\n const hasSticker = !isMenuOpen && selectedOption?.labelStickerVariant;\n const InputComponent = hasSticker ? StickerComboboxInput : ComboboxInput;\n\n // Show the Back row only in nested mode at a non-root level. In\n // search mode the tree is flattened and breadcrumbs surface as\n // option `description`s, so a Back row would just be noise.\n const showBackRow = isMenuOpen && navigationPath.length > 0 && !isSearching;\n\n // External trigger mode: clone the consumer-supplied trigger with\n // downshift's toggle props so click / aria-expanded / aria-controls\n // wire up. The trigger's own props are passed through\n // `getToggleButtonProps` so downshift composes (rather than clobbers)\n // existing handlers like `onClick`. Falls back to the default\n // input + caret if a non-element was passed.\n const externalTrigger = (() => {\n if (embedded || trigger == null || !isValidElement(trigger)) {\n return null;\n }\n const triggerProps = trigger.props as Record<string, unknown> & { disabled?: unknown };\n return cloneElement(\n trigger,\n getToggleButtonProps({\n ...triggerProps,\n disabled: field.disabled || Boolean(triggerProps.disabled),\n }) as Record<string, unknown>,\n );\n })();\n\n // Pre-computed downshift-wrapped props for the in-dropdown search\n // input rendered in external-trigger mode (only used when\n // `externalTrigger` is non-null; cheap to compute either way).\n const searchInputProps = getInputProps({\n ref: comboboxInputRef,\n id: field.inputId,\n placeholder: 'Search…',\n disabled: field.disabled,\n 'aria-label': embedded ? 'Search options' : (ariaLabel ?? 'Search options'),\n 'aria-labelledby': embedded ? undefined : labelId,\n 'aria-describedby':\n [field.helperTextId, field.hasWarning ? field.warningTextId : null]\n .filter(Boolean)\n .join(' ') || undefined,\n 'aria-errormessage': field.hasError ? field.errorTextId : undefined,\n 'aria-invalid': field.hasError,\n onKeyDown: handleKeyDown,\n });\n\n return (\n <Container {...props} ref={internalContainerRef}>\n {embedded ? null : externalTrigger != null ? (\n externalTrigger\n ) : (\n <InputContainer>\n {hasSticker && (\n <StickerDisplay variant={selectedOption.labelStickerVariant}>\n {selectedOption.label}\n </StickerDisplay>\n )}\n <InputComponent\n {...getInputProps({\n ...props,\n ref: comboboxInputRef,\n id: field.inputId,\n placeholder,\n disabled: field.disabled,\n 'aria-label': ariaLabel,\n 'aria-labelledby': labelId,\n 'aria-describedby':\n [field.helperTextId, field.hasWarning ? field.warningTextId : null]\n .filter(Boolean)\n .join(' ') || undefined,\n 'aria-errormessage': field.hasError ? field.errorTextId : undefined,\n 'aria-invalid': field.hasError,\n onKeyDown: handleKeyDown,\n })}\n size={size}\n $isOpen={isMenuOpen}\n hasWarning={field.hasWarning}\n hasError={field.hasError}\n value={displayValue}\n $selectedItemStyle={selectedOption?.PLEASE_DO_NOT_USE_labelFontStyle}\n />\n\n <CaretButton\n {...getToggleButtonProps()}\n size={size}\n disabled={field.disabled}\n aria-label={`${isMenuOpen ? 'Close' : 'Open'} options menu`}\n aria-haspopup='listbox'\n >\n <CaretDownIcon />\n </CaretButton>\n </InputContainer>\n )}\n\n <DropdownPortalWrapper portal={embedded ? false : portal}>\n <DropdownContainer\n $isOpen={isMenuOpen}\n $portal={embedded ? false : portal}\n $embedded={embedded}\n $top={dropdownPosition.top}\n $left={dropdownPosition.left}\n $width={dropdownPosition.width}\n $minWidth={externalTrigger ? EXTERNAL_TRIGGER_DROPDOWN_MIN_WIDTH : undefined}\n {...getMenuProps()}\n >\n {(externalTrigger || embedded) && (\n // Search input moves into the dropdown when an external\n // trigger owns the closed state. Mounted unconditionally\n // so downshift's input ref stays stable across open/close\n // (the surrounding `DropdownContainer` handles visibility).\n <SearchInputContainer $embedded={embedded}>\n <InputGroup leftIcon={embedded ? undefined : <SearchIcon />} size={size}>\n <SearchInput\n $embedded={embedded}\n {...searchInputProps}\n size={size}\n hasWarning={field.hasWarning}\n hasError={field.hasError}\n value={inputValue}\n autoComplete='off'\n />\n </InputGroup>\n </SearchInputContainer>\n )}\n <SingleSelectScrollableMenuList $embedded={embedded} tabIndex={-1}>\n {isMenuOpen && (\n <>\n {showBackRow && (\n <BackRow\n type='button'\n // Removed from the Tab order: a Tab landing here\n // would blur the input and downshift would close\n // the menu before any handler could ascend. The\n // documented keyboard path is ArrowLeft from the\n // input (caret at position 0). The button stays\n // discoverable to assistive tech (screen-reader\n // cursors can still focus + activate it).\n tabIndex={-1}\n onMouseDown={(event) => {\n // Beat downshift's blur-on-mousedown by handling\n // the ascend here and preventing the input from\n // losing focus (which would close the dropdown).\n event.preventDefault();\n handleAscend();\n }}\n onClick={(event) => {\n // Assistive-tech activation (e.g. VoiceOver\n // VO+Space) dispatches `click` with `detail === 0`\n // without firing `mousedown` — handle it here so\n // a screen-reader user who activates the Back\n // affordance actually ascends. Mouse clicks\n // (`detail >= 1`) were already handled by\n // `onMouseDown`; skip them to avoid double-ascending.\n if (event.detail === 0) {\n handleAscend();\n }\n }}\n aria-label='Back to previous menu'\n $size={size}\n >\n <ArrowLeftIcon aria-hidden='true' size={size === 'sm' ? 12 : 16} />\n <span>Back</span>\n </BackRow>\n )}\n {isOptionsLoading ? (\n <LoadingContainer>\n <Spinner size='md' />\n </LoadingContainer>\n ) : downshiftItems.length > 0 ? (\n hasNestedGroups && !isSearching ? (\n // Browse-mode for nested-nav trees: render leaves +\n // nested-group nav rows + inline section headers in\n // document order; downshift's highlightedIndex maps\n // to this list via `downshiftItems`.\n renderNestedLevel(nestedOptions)\n ) : (\n // Legacy / flat / grouped search: the shared\n // renderer handles section headers and leaves.\n // `renderSource` is the flat-leaves overlay in\n // search mode and the original `options` (legacy\n // tree) otherwise.\n renderOptionsWithGroups({\n options: renderSource,\n filteredOptions,\n renderOption,\n })\n )\n ) : (\n <EmptyState role='status' aria-live='polite' size={size}>\n {emptyStateMessage}\n </EmptyState>\n )}\n </>\n )}\n </SingleSelectScrollableMenuList>\n </DropdownContainer>\n </DropdownPortalWrapper>\n </Container>\n );\n}\n\nexport const ComboboxSingleSelect = forwardRef(ComboboxSingleSelectComponent) as <T = string>(\n props: ComboboxSingleSelectProps<T> & { ref?: React.Ref<HTMLInputElement> },\n) => React.ReactElement;\n\nexport default ComboboxSingleSelect;\n","import { forwardRef } from 'react';\n\nimport { CaretButton } from './ComboboxBase';\nimport ComboboxMultiSelect, { type ComboboxMultiSelectProps } from './ComboboxMultiSelect';\nimport ComboboxSingleSelect, { type ComboboxSingleSelectProps } from './ComboboxSingleSelect';\n\n// Discriminated union type\nexport type ComboboxProps<T = string> = ComboboxSingleSelectProps<T> | ComboboxMultiSelectProps<T>;\n\nfunction ComboboxComponent<T = string>(props: ComboboxProps<T>, ref: React.Ref<HTMLInputElement>) {\n // Use discriminated union to determine which component to render\n if (props.multiple) {\n return <ComboboxMultiSelect<T> ref={ref} {...props} />;\n } else {\n return <ComboboxSingleSelect<T> ref={ref} {...props} />;\n }\n}\n\nexport const Combobox = forwardRef(ComboboxComponent) as <T = string>(\n props: ComboboxProps<T> & { ref?: React.Ref<HTMLInputElement> },\n) => React.ReactElement;\n\nexport { CaretButton };\n\nexport default Combobox;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-Dq9DGH8S.mjs";
|
|
2
|
+
import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-WwBJRb0e.mjs";
|
|
3
|
+
|
|
4
|
+
//#region components/Combobox/Combobox.d.ts
|
|
5
|
+
type ComboboxProps<T = string> = ComboboxSingleSelectProps<T> | ComboboxMultiSelectProps<T>;
|
|
6
|
+
declare const Combobox: <T = string>(props: ComboboxProps<T> & {
|
|
7
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
8
|
+
}) => React.ReactElement;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ComboboxProps as n, Combobox as t };
|
|
11
|
+
//# sourceMappingURL=Combobox-DjbJYK_u.d.mts.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { t as CaretButton } from "./ComboboxBase-D2wypeXf.cjs";
|
|
2
|
+
import { n as ComboboxMultiSelectProps } from "./ComboboxMultiSelect-Dn8cRZ6Z.cjs";
|
|
3
|
+
import { n as ComboboxSingleSelectProps } from "./ComboboxSingleSelect-D8YM7GKP.cjs";
|
|
4
|
+
|
|
5
|
+
//#region components/Combobox/Combobox.d.ts
|
|
6
|
+
type ComboboxProps<T = string> = ComboboxSingleSelectProps<T> | ComboboxMultiSelectProps<T>;
|
|
7
|
+
declare const Combobox: <T = string>(props: ComboboxProps<T> & {
|
|
8
|
+
ref?: React.Ref<HTMLInputElement>;
|
|
9
|
+
}) => React.ReactElement;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { CaretButton, Combobox, Combobox as default, ComboboxProps };
|
|
12
|
+
//# sourceMappingURL=Combobox.d.cts.map
|