@servicetitan/anvil2 3.0.5 → 3.0.7
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 +48 -0
- package/dist/{AiMark-DjOf60tj.js → AiMark-BXL0sWIV.js} +2 -2
- package/dist/{AiMark-DjOf60tj.js.map → AiMark-BXL0sWIV.js.map} +1 -1
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-BTesdKK7.js → Alert-BNH0UD2s.js} +2 -2
- package/dist/{Alert-BTesdKK7.js.map → Alert-BNH0UD2s.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{Breadcrumbs-DTi5RqT-.js → Breadcrumbs-Bzxbdu-S.js} +2 -2
- package/dist/{Breadcrumbs-DTi5RqT-.js.map → Breadcrumbs-Bzxbdu-S.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-ddGQKSGU.js → Calendar-BYNFAWpZ.js} +2 -2
- package/dist/{Calendar-ddGQKSGU.js.map → Calendar-BYNFAWpZ.js.map} +1 -1
- package/dist/{Calendar-CpCRxcue.js → Calendar-DS5eWpGF.js} +2 -2
- package/dist/{Calendar-CpCRxcue.js.map → Calendar-DS5eWpGF.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-CJ8eYejR.js → Checkbox-BB3BDJsK.js} +4 -4
- package/dist/{Checkbox-CJ8eYejR.js.map → Checkbox-BB3BDJsK.js.map} +1 -1
- package/dist/{Checkbox-CVidv1sO.js → Checkbox-BeIzx_ZX.js} +2 -2
- package/dist/{Checkbox-CVidv1sO.js.map → Checkbox-BeIzx_ZX.js.map} +1 -1
- package/dist/Checkbox.css +40 -37
- package/dist/Checkbox.js +1 -1
- package/dist/Checkbox.module-CURNX27M.js +28 -0
- package/dist/Checkbox.module-CURNX27M.js.map +1 -0
- package/dist/{Chip-0-Yx9SGX.js → Chip-D2k5X_wX.js} +2 -2
- package/dist/{Chip-0-Yx9SGX.js.map → Chip-D2k5X_wX.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -2
- package/dist/Combobox.js.map +1 -1
- package/dist/{DataTable-BFzj8cZG.js → DataTable-E8z0H8c7.js} +144 -17
- package/dist/{DataTable-BFzj8cZG.js.map → DataTable-E8z0H8c7.js.map} +1 -1
- package/dist/DataTable.css +47 -5
- package/dist/{DateFieldRange-CO2C776E.js → DateFieldRange-BN_uIvHI.js} +27 -15
- package/dist/DateFieldRange-BN_uIvHI.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-DjmHpn1y.js → DateFieldSingle-h3YkdwPo.js} +5 -5
- package/dist/{DateFieldSingle-DjmHpn1y.js.map → DateFieldSingle-h3YkdwPo.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-CCJAopYd.js → DateFieldYearless-m_Hl2gMY.js} +5 -5
- package/dist/{DateFieldYearless-CCJAopYd.js.map → DateFieldYearless-m_Hl2gMY.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-BUv1mGJg.js → DateFieldYearlessRange-DNqSTBDr.js} +4 -4
- package/dist/{DateFieldYearlessRange-BUv1mGJg.js.map → DateFieldYearlessRange-DNqSTBDr.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-BihTU2No.js → DaysOfTheWeek-D58z_eF3.js} +10 -9
- package/dist/{DaysOfTheWeek-BihTU2No.js.map → DaysOfTheWeek-D58z_eF3.js.map} +1 -1
- package/dist/DaysOfTheWeek.css +10 -6
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-BZTo4hbX.js → Dialog-CvYSMvfD.js} +23 -21
- package/dist/{Dialog-BZTo4hbX.js.map → Dialog-CvYSMvfD.js.map} +1 -1
- package/dist/Dialog.css +43 -29
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-Dg35inxH.js → Drawer-s2y0xcgV.js} +3 -3
- package/dist/{Drawer-Dg35inxH.js.map → Drawer-s2y0xcgV.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-BfNq-T8n.js → EditCard-B25pj0Jx.js} +2 -2
- package/dist/{EditCard-BfNq-T8n.js.map → EditCard-B25pj0Jx.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-xV6EdVwo.js → FieldLabel-D1qPAGtB.js} +3 -3
- package/dist/{FieldLabel-xV6EdVwo.js.map → FieldLabel-D1qPAGtB.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/FilterBar-B4ZAs73g.js +412 -0
- package/dist/FilterBar-B4ZAs73g.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/{InputMask-8rI6UIb8.js → InputMask-BDl09V4u.js} +3 -3
- package/dist/{InputMask-8rI6UIb8.js.map → InputMask-BDl09V4u.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-CIa981KJ.js → ListView-DO5psxd4.js} +6 -6
- package/dist/{ListView-CIa981KJ.js.map → ListView-DO5psxd4.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{ListView.module-CKUQP3kf.js → ListView.module-DfqtCL3Q.js} +3 -3
- package/dist/ListView.module-DfqtCL3Q.js.map +1 -0
- package/dist/{Listbox-DRznPBCr.js → Listbox-CvQHBFWb.js} +2 -2
- package/dist/{Listbox-DRznPBCr.js.map → Listbox-CvQHBFWb.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-BxyQiVPQ.js → MultiSelectFieldSync-CXX2F0ru.js} +62 -32
- package/dist/MultiSelectFieldSync-CXX2F0ru.js.map +1 -0
- package/dist/MultiSelectFieldSync.css +72 -65
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-BJfvZGf3.js → MultiSelectMenuSync-EKtvlL62.js} +218 -47
- package/dist/MultiSelectMenuSync-EKtvlL62.js.map +1 -0
- package/dist/{NumberField-D7YYo4Rl.js → NumberField-BymFZhIJ.js} +4 -4
- package/dist/{NumberField-D7YYo4Rl.js.map → NumberField-BymFZhIJ.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-cELP59Hm.js → Page-C2_Hm27h.js} +8 -8
- package/dist/{Page-cELP59Hm.js.map → Page-C2_Hm27h.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DTN4FovY.js → Pagination-Bmd4JORe.js} +3 -3
- package/dist/{Pagination-DTN4FovY.js.map → Pagination-Bmd4JORe.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-B3Vw4lDW.js → Popover-8mTJoMy7.js} +2 -2
- package/dist/{Popover-B3Vw4lDW.js.map → Popover-8mTJoMy7.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-kzCNhaCO.js → ProgressBar-C1CkQHV5.js} +2 -2
- package/dist/{ProgressBar-kzCNhaCO.js.map → ProgressBar-C1CkQHV5.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-CSBetBV6.js → Radio-BcHMk8dD.js} +2 -2
- package/dist/{Radio-CSBetBV6.js.map → Radio-BcHMk8dD.js.map} +1 -1
- package/dist/{Radio-BDE1xGel.js → Radio-D5WyQN2i.js} +16 -16
- package/dist/{Radio-BDE1xGel.js.map → Radio-D5WyQN2i.js.map} +1 -1
- package/dist/Radio.css +40 -37
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-BFFXj0zS.js → RichTextEditor-DstVbYch.js} +8 -8
- package/dist/{RichTextEditor-BFFXj0zS.js.map → RichTextEditor-DstVbYch.js.map} +1 -1
- package/dist/RichTextEditor.js +1 -1
- package/dist/SavedFiltersButton-2qba2Cgu.js +650 -0
- package/dist/SavedFiltersButton-2qba2Cgu.js.map +1 -0
- package/dist/SavedFiltersButton.css +8 -0
- package/dist/SavedFiltersButton.d.ts +1 -0
- package/dist/SavedFiltersButton.js +2 -0
- package/dist/SavedFiltersButton.js.map +1 -0
- package/dist/{SearchField-Dl7sh_M4.js → SearchField-BMHJCVFu.js} +2 -2
- package/dist/{SearchField-Dl7sh_M4.js.map → SearchField-BMHJCVFu.js.map} +1 -1
- package/dist/{SearchField-CO9BHCYB.js → SearchField-fXc_vWEr.js} +3 -3
- package/dist/{SearchField-CO9BHCYB.js.map → SearchField-fXc_vWEr.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SelectCard-CLCLIBoq.js → SelectCard-BN-LI14f.js} +3 -3
- package/dist/{SelectCard-CLCLIBoq.js.map → SelectCard-BN-LI14f.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-Db9w6O6r.js → SelectFieldLabel-UbQT7fDD.js} +2 -2
- package/dist/{SelectFieldLabel-Db9w6O6r.js.map → SelectFieldLabel-UbQT7fDD.js.map} +1 -1
- package/dist/{SelectFieldSync-z8b41JZz.js → SelectFieldSync-DykGkR_w.js} +6 -6
- package/dist/SelectFieldSync-DykGkR_w.js.map +1 -0
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-Cf1Zradm.js → SelectMenuSync-DTQ8Ofoz.js} +21 -9
- package/dist/SelectMenuSync-DTQ8Ofoz.js.map +1 -0
- package/dist/{SelectOptions-BgT1V6qp.js → SelectOptions-DVSOJwRy.js} +2 -2
- package/dist/{SelectOptions-BgT1V6qp.js.map → SelectOptions-DVSOJwRy.js.map} +1 -1
- package/dist/{SelectTrigger-37HzF-VI.js → SelectTrigger-CHk0KO-P.js} +2 -2
- package/dist/{SelectTrigger-37HzF-VI.js.map → SelectTrigger-CHk0KO-P.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-4o1cqEbR.js → SelectTriggerBase-B2S5SOZr.js} +137 -41
- package/dist/SelectTriggerBase-B2S5SOZr.js.map +1 -0
- package/dist/SelectTriggerBase.css +46 -42
- package/dist/SelectTriggerBase.module-DsPvTQE7.js +37 -0
- package/dist/SelectTriggerBase.module-DsPvTQE7.js.map +1 -0
- package/dist/{Switch-p4yVJTNy.js → Switch-onmiKoRd.js} +2 -2
- package/dist/{Switch-p4yVJTNy.js.map → Switch-onmiKoRd.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-BgPuOXJM.js → Text-BTzgTpqu.js} +2 -2
- package/dist/{Text-BgPuOXJM.js.map → Text-BTzgTpqu.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-DzuM8vvd.js → TextField-WTYZJlX3.js} +2 -2
- package/dist/{TextField-DzuM8vvd.js.map → TextField-WTYZJlX3.js.map} +1 -1
- package/dist/{TextField-D7NyaKId.js → TextField-rVfctM1E.js} +4 -4
- package/dist/{TextField-D7NyaKId.js.map → TextField-rVfctM1E.js.map} +1 -1
- package/dist/TextField.css +22 -58
- package/dist/TextField.js +1 -1
- package/dist/TextField.module-C8FsjTpx.js +23 -0
- package/dist/TextField.module-C8FsjTpx.js.map +1 -0
- package/dist/{Textarea-Dks15Zt3.js → Textarea-PXjppEQ6.js} +3 -3
- package/dist/{Textarea-Dks15Zt3.js.map → Textarea-PXjppEQ6.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-lN_5V6-X.js → TimeField-BJPXIv6W.js} +4 -4
- package/dist/{TimeField-lN_5V6-X.js.map → TimeField-BJPXIv6W.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-3GI_qJxj.js → Toaster-CoChsMD0.js} +3 -3
- package/dist/{Toaster-3GI_qJxj.js.map → Toaster-CoChsMD0.js.map} +1 -1
- package/dist/{Toaster-2pAMQXRk.js → Toaster-DXLc86VD.js} +2 -2
- package/dist/{Toaster-2pAMQXRk.js.map → Toaster-DXLc86VD.js.map} +1 -1
- package/dist/{Toolbar-BRQpvj9U.js → Toolbar-Bt3kShho.js} +4 -4
- package/dist/{Toolbar-BRQpvj9U.js.map → Toolbar-Bt3kShho.js.map} +1 -1
- package/dist/{Toolbar-B0WHsX9W.js → Toolbar-DaUKbbsL.js} +6 -6
- package/dist/{Toolbar-B0WHsX9W.js.map → Toolbar-DaUKbbsL.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-xvMWRxzC.js → ToolbarButtonToggle-BPu81Wuv.js} +5 -4
- package/dist/ToolbarButtonToggle-BPu81Wuv.js.map +1 -0
- package/dist/{Tooltip-DGo3OWqL.js → Tooltip-yr1D06BE.js} +5 -5
- package/dist/{Tooltip-DGo3OWqL.js.map → Tooltip-yr1D06BE.js.map} +1 -1
- package/dist/Tooltip.css +6 -7
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-BhbR5F22.js → YearlessDateInputWithPicker-BIcVgz-J.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-BhbR5F22.js.map → YearlessDateInputWithPicker-BIcVgz-J.js.map} +1 -1
- package/dist/assets/icons/st/batch.svg +1 -1
- package/dist/assets/icons/st/call.svg +1 -1
- package/dist/assets/icons/st/customer.svg +1 -1
- package/dist/assets/icons/st/enterprise_hub.svg +1 -1
- package/dist/assets/icons/st/equipment.svg +1 -1
- package/dist/assets/icons/st/estimate.svg +1 -1
- package/dist/assets/icons/st/full_fluid.svg +1 -1
- package/dist/assets/icons/st/gnav_titan_advisor_active.svg +1 -1
- package/dist/assets/icons/st/gnav_titan_advisor_inactive.svg +1 -1
- package/dist/assets/icons/st/job.svg +1 -1
- package/dist/assets/icons/st/leads.svg +1 -1
- package/dist/assets/icons/st/proposal.svg +1 -1
- package/dist/assets/icons/st/roofing.svg +1 -1
- package/dist/beta.js +13 -12
- package/dist/beta.js.map +1 -1
- package/dist/filter-state-Bx3aYS1r.js +1627 -0
- package/dist/filter-state-Bx3aYS1r.js.map +1 -0
- package/dist/{FilterBar.css → filter-state.css} +19 -33
- package/dist/{index-B6Demgr-.js → index-DVYRUKtW.js} +2 -2
- package/dist/{index-B6Demgr-.js.map → index-DVYRUKtW.js.map} +1 -1
- package/dist/index.js +38 -39
- package/dist/index.js.map +1 -1
- package/dist/src/beta/components/FilterBar/FilterBar.d.ts +12 -10
- package/dist/src/beta/components/FilterBar/FilterDateList.d.ts +47 -0
- package/dist/src/beta/components/FilterBar/FilterDateRange.d.ts +34 -29
- package/dist/src/beta/components/FilterBar/FilterDateSingle.d.ts +31 -22
- package/dist/src/beta/components/FilterBar/FilterDrawer.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/FilterItemWrapper.d.ts +4 -12
- package/dist/src/beta/components/FilterBar/FilterNumericRange.d.ts +29 -0
- package/dist/src/beta/components/FilterBar/FilterPopoverButton.d.ts +86 -0
- package/dist/src/beta/components/FilterBar/FilterToggleButton.d.ts +2 -2
- package/dist/src/beta/components/FilterBar/FilterTriggerButton.d.ts +50 -0
- package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/internal/FilterGroupContext.d.ts +5 -9
- package/dist/src/beta/components/FilterBar/internal/adapters/asyncMultiSelect.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/asyncSelect.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/boolean.d.ts +3 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/custom.d.ts +3 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/date.d.ts +5 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/dateList.d.ts +5 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/dateRange.d.ts +8 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/index.d.ts +15 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/multiSelect.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/numericRange.d.ts +3 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/singleSelect.d.ts +6 -0
- package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +78 -0
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +204 -61
- package/dist/src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.d.ts +29 -0
- package/dist/src/beta/components/FilterBar/internal/utils/filter-state.d.ts +2 -38
- package/dist/src/beta/components/FilterBar/internal/utils/test.d.ts +14 -28
- package/dist/src/beta/components/FilterBar/internal/utils/value-compare.d.ts +14 -0
- package/dist/src/beta/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
- package/dist/src/beta/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
- package/dist/src/beta/components/MultiSelectField/internal/types.d.ts +4 -2
- package/dist/src/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +7 -5
- package/dist/src/beta/components/MultiSelectField/internal/useSelectModeMultiple.d.ts +5 -2
- package/dist/src/beta/components/MultiSelectField/types.d.ts +21 -36
- package/dist/src/beta/components/MultiSelectMenu/MultiSelectMenu.d.ts +1 -0
- package/dist/src/beta/components/MultiSelectMenu/types.d.ts +52 -12
- package/dist/src/beta/components/SavedFiltersButton/SavedFiltersButton.d.ts +40 -0
- package/dist/src/beta/components/SavedFiltersButton/index.d.ts +2 -0
- package/dist/src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.d.ts +27 -0
- package/dist/src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.d.ts +38 -0
- package/dist/src/beta/components/SavedFiltersButton/types.d.ts +147 -0
- package/dist/src/beta/components/SelectField/types.d.ts +7 -11
- package/dist/src/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +8 -1
- package/dist/src/beta/components/SelectMenu/types.d.ts +21 -1
- package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +6 -0
- package/dist/src/beta/components/Table/DataTable/types.d.ts +43 -10
- package/dist/src/beta/components/Toolbar/internal/ToolbarContext.d.ts +3 -2
- package/dist/src/beta/components/index.d.ts +1 -0
- package/dist/src/internal/components/MenuFooter/MenuFooter.d.ts +43 -0
- package/dist/src/internal/components/OptionCheckbox.d.ts +6 -0
- package/dist/src/internal/components/OptionContentArea.d.ts +8 -0
- package/dist/src/internal/components/OptionRow.d.ts +10 -0
- package/dist/src/internal/components/OptionsPopover/OptionsPopover.d.ts +4 -4
- package/dist/src/internal/hooks/index.d.ts +2 -0
- package/dist/src/internal/hooks/useBulkActionRunner.d.ts +41 -0
- package/dist/src/internal/hooks/useConfirmationDraft.d.ts +21 -0
- package/dist/src/internal/types/bulkActionTypes.d.ts +39 -0
- package/dist/src/internal/types/confirmationTypes.d.ts +19 -0
- package/dist/src/internal/types/optionContent.d.ts +19 -0
- package/dist/src/internal/types/selectFieldInternalTypes.d.ts +2 -0
- package/dist/{stripInlineMarkdown-D_eHogvh.js → stripInlineMarkdown-C5DNxxwf.js} +2 -2
- package/dist/{stripInlineMarkdown-D_eHogvh.js.map → stripInlineMarkdown-C5DNxxwf.js.map} +1 -1
- package/dist/{syncFilterUtils-Dpp7gt05.js → syncFilterUtils-BEKek64h.js} +497 -458
- package/dist/syncFilterUtils-BEKek64h.js.map +1 -0
- package/dist/syncFilterUtils.css +96 -59
- package/dist/{useDrilldown-bIRsbg1m.js → useDrilldown-KZ9rRsXQ.js} +2 -2
- package/dist/{useDrilldown-bIRsbg1m.js.map → useDrilldown-KZ9rRsXQ.js.map} +1 -1
- package/dist/{Combobox-BXQFOwX4.js → useInfiniteCombobox-CknXmqlQ.js} +188 -13
- package/dist/useInfiniteCombobox-CknXmqlQ.js.map +1 -0
- package/dist/{useMenuInteraction-C4RU5Fdq.js → useMenuInteraction-CpAOHSJu.js} +118 -5
- package/dist/useMenuInteraction-CpAOHSJu.js.map +1 -0
- package/dist/useMenuInteraction.css +28 -0
- package/dist/{useToggleSelection-DBqr4HwT.js → useToggleSelection-B-Z80gy2.js} +53 -4
- package/dist/useToggleSelection-B-Z80gy2.js.map +1 -0
- package/package.json +1 -1
- package/dist/Checkbox.module-DVbXNsaN.js +0 -28
- package/dist/Checkbox.module-DVbXNsaN.js.map +0 -1
- package/dist/Combobox-BXQFOwX4.js.map +0 -1
- package/dist/DateFieldRange-CO2C776E.js.map +0 -1
- package/dist/FilterBar-GjMlLOME.js +0 -1442
- package/dist/FilterBar-GjMlLOME.js.map +0 -1
- package/dist/ListView.module-CKUQP3kf.js.map +0 -1
- package/dist/MultiSelectFieldSync-BxyQiVPQ.js.map +0 -1
- package/dist/MultiSelectMenuSync-BJfvZGf3.js.map +0 -1
- package/dist/SelectFieldSync-z8b41JZz.js.map +0 -1
- package/dist/SelectMenuSync-Cf1Zradm.js.map +0 -1
- package/dist/SelectTriggerBase-4o1cqEbR.js.map +0 -1
- package/dist/SelectTriggerBase.module-BgZSNZfE.js +0 -37
- package/dist/SelectTriggerBase.module-BgZSNZfE.js.map +0 -1
- package/dist/TextField.module-DkZwywjf.js +0 -23
- package/dist/TextField.module-DkZwywjf.js.map +0 -1
- package/dist/ToolbarButtonToggle-xvMWRxzC.js.map +0 -1
- package/dist/src/beta/components/FilterBar/FilterButton.d.ts +0 -30
- package/dist/src/beta/components/FilterBar/FilterSelect.d.ts +0 -29
- package/dist/syncFilterUtils-Dpp7gt05.js.map +0 -1
- package/dist/useInfiniteCombobox-WcRgC9p6.js +0 -179
- package/dist/useInfiniteCombobox-WcRgC9p6.js.map +0 -1
- package/dist/useMenuInteraction-C4RU5Fdq.js.map +0 -1
- package/dist/useToggleSelection-DBqr4HwT.js.map +0 -1
- /package/dist/{Combobox.css → useInfiniteCombobox.css} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelectMenuSync-BJfvZGf3.js","sources":["../src/beta/components/MultiSelectMenu/MultiSelectMenu.tsx","../src/beta/components/MultiSelectMenu/MultiSelectMenuSync.tsx"],"sourcesContent":["import { MultiSelectMenuHandle, MultiSelectMenuProps } from \"./types\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { warnOnce } from \"../../../internal/functions\";\nimport { CheckState } from \"../../../types\";\nimport { MultiSelectOptions } from \"../../../internal/components/MultiSelectOptions\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"../SelectMenu/internal/useMenuInteraction\";\nimport { useToggleSelection } from \"../../../internal/hooks/useToggleSelection\";\nimport { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../../components\";\n\n/**\n * MultiSelectMenu component for selecting multiple options from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Multiple selection with checkbox indicators\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Optional \"Select All\" functionality\n * - Optional \"Select Filtered\" functionality\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n *\n * @example\n * <MultiSelectMenu\n * trigger={(props) => <Button {...props}>Select books</Button>}\n * label=\"Books\"\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * loadOptions={loadOptions}\n * />\n */\nexport const MultiSelectMenu = forwardRef<\n MultiSelectMenuHandle,\n MultiSelectMenuProps\n>((props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n id: idProp,\n value: selectedOptions,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionsChange,\n cache,\n pinned,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n if (disableSearch && selectFilteredProp) {\n warnOnce(\n \"MultiSelectMenu: `selectFiltered` has no effect when `disableSearch` is true because there is no search input to produce filtered results.\",\n );\n }\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const selectAll = useMemo(\n () =>\n selectAllProp\n ? {\n label: selectAllProp.label ?? \"Select All\",\n onClick: selectAllProp.onClick,\n checkState: (selectAllProp.checkState === true\n ? \"checked\"\n : selectAllProp.checkState === false\n ? \"unchecked\"\n : (selectAllProp.checkState ?? \"indeterminate\")) as CheckState,\n }\n : undefined,\n [selectAllProp],\n );\n\n const selectFiltered = useMemo(\n () =>\n selectFilteredProp\n ? (searchValue: string) => {\n const config = selectFilteredProp(searchValue);\n return {\n label: config.label,\n onClick: config.onClick,\n checkState: (config.checkState === true\n ? \"checked\"\n : config.checkState === false\n ? \"unchecked\"\n : (config.checkState ?? \"indeterminate\")) as CheckState,\n };\n }\n : undefined,\n [selectFilteredProp],\n );\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { handleItemClick } = useToggleSelection({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n });\n\n const bulkActionItems = useMemo(() => {\n const items: SelectItem[] = [];\n if (selectAll && !searchValue) {\n items.push({\n id: \"select-all\",\n type: \"select-all\",\n original: { id: \"select-all\", label: selectAll.label ?? \"Select All\" },\n checkState: selectAll.checkState,\n });\n }\n if (selectFiltered && searchValue && !loading) {\n const config = selectFiltered(searchValue);\n items.push({\n id: \"select-filtered\",\n type: \"select-filtered\",\n original: {\n id: \"select-filtered\",\n label: config.label ?? \"Select Filtered\",\n },\n checkState: config.checkState,\n });\n }\n return items;\n }, [selectAll, selectFiltered, searchValue, loading]);\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n prefixItems: bulkActionItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [bulkActionItems, pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOptions.map((o) => o.id)),\n [selectedOptions],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (item.type === \"select-all\") {\n selectAll?.onClick();\n } else if (item.type === \"select-filtered\" && selectFiltered) {\n const config = selectFiltered(searchValue);\n config.onClick();\n } else if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n handleItemClick(item.original);\n }\n },\n [selectAll, selectFiltered, searchValue, handleItemClick],\n );\n\n const {\n isOpen,\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: false,\n id,\n triggerRef,\n label,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={handleInputChange as React.ChangeEventHandler<HTMLInputElement>}\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n />\n ) : null;\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => closeMenu({ restoreFocus: false })}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={addNewItemButton ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <MultiSelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={addNewItemButton ?? undefined}\n >\n {searchInput}\n <MultiSelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOptions={selectedOptions}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n});\n\nMultiSelectMenu.displayName = \"MultiSelectMenu\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { MultiSelectMenu } from \"./MultiSelectMenu\";\nimport {\n MultiSelectMenuHandle,\n MultiSelectMenuProps,\n MultiSelectMenuOption,\n} from \"./types\";\nimport { CheckState } from \"../../../types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type MultiSelectMenuSyncProps = Omit<\n MultiSelectMenuProps,\n | \"loadOptions\"\n | \"lazy\"\n | \"debounceMs\"\n | \"cache\"\n | \"initialLoad\"\n | \"selectAll\"\n | \"selectFiltered\"\n> & {\n /**\n * The options to display in the multi-select menu.\n */\n options: MultiSelectMenuOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?:\n | SyncFilterFn<MultiSelectMenuOption>\n | MatchSorterOptions<MultiSelectMenuOption>;\n /**\n * Enables the \"Select All\" option at the top of the list.\n * Can be a boolean to enable with default label, or an object to customize the label.\n * Click handling and check state are managed automatically.\n */\n selectAll?: boolean | { label?: string | ((checked: boolean) => string) };\n /**\n * Enables the \"Select Filtered\" option when a search term is active.\n * Can be a boolean to enable with default label, or a function returning a config with a custom label.\n * Click handling and check state are managed automatically.\n */\n selectFiltered?: boolean | ((searchValue: string) => { label?: string });\n};\n\n/**\n * MultiSelectMenuSync is a simplified version of MultiSelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Simplified `selectAll` prop that automatically handles click and check state\n * - Simplified `selectFiltered` prop that automatically selects/deselects filtered options\n * - Supports all other props of MultiSelectMenu\n *\n * @example\n * <MultiSelectMenuSync\n * trigger={(props) => <Button {...props}>Pick books</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOptions}\n * onSelectedOptionsChange={setSelectedOptions}\n * selectAll\n * />\n */\nexport const MultiSelectMenuSync = (props: MultiSelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n selectAll: selectAllProp,\n selectFiltered: selectFilteredProp,\n value,\n onSelectedOptionsChange,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const selectAllConfig = useMemo(() => {\n if (!selectAllProp) return undefined;\n\n const enabledOptions = options.filter((opt) => !opt.disabled);\n const enabledIds = new Set(enabledOptions.map((opt) => opt.id));\n const selectedCount = value.filter((v) => enabledIds.has(v.id)).length;\n const totalCount = enabledOptions.length;\n const allSelected = selectedCount === totalCount;\n\n const labelProp =\n typeof selectAllProp === \"object\" ? selectAllProp.label : undefined;\n const label =\n typeof labelProp === \"function\" ? labelProp(allSelected) : labelProp;\n\n const checkState: CheckState = allSelected\n ? \"checked\"\n : selectedCount > 0\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allSelected) {\n onSelectedOptionsChange([]);\n } else {\n onSelectedOptionsChange(enabledOptions);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n }, [selectAllProp, options, value, onSelectedOptionsChange]);\n\n const selectFilteredConfig = useMemo(() => {\n if (!selectFilteredProp) return undefined;\n\n return (searchValue: string) => {\n const filteredOptions = filter(options, searchValue);\n const enabledFilteredOptions = filteredOptions.filter(\n (opt) => !opt.disabled,\n );\n const selectedIds = new Set(value.map((v) => v.id));\n const allFilteredSelected =\n enabledFilteredOptions.length > 0 &&\n enabledFilteredOptions.every((opt) => selectedIds.has(opt.id));\n const someFilteredSelected = enabledFilteredOptions.some((opt) =>\n selectedIds.has(opt.id),\n );\n\n const label =\n typeof selectFilteredProp === \"function\"\n ? selectFilteredProp(searchValue).label\n : undefined;\n\n const checkState: CheckState = allFilteredSelected\n ? \"checked\"\n : someFilteredSelected\n ? \"indeterminate\"\n : \"unchecked\";\n\n const handleClick = () => {\n if (allFilteredSelected) {\n const filteredIds = new Set(enabledFilteredOptions.map((o) => o.id));\n onSelectedOptionsChange(value.filter((v) => !filteredIds.has(v.id)));\n } else {\n const currentIds = new Set(value.map((v) => v.id));\n const newSelections = enabledFilteredOptions.filter(\n (opt) => !currentIds.has(opt.id),\n );\n onSelectedOptionsChange([...value, ...newSelections]);\n }\n };\n\n return {\n label,\n onClick: handleClick,\n checkState,\n };\n };\n }, [selectFilteredProp, options, value, onSelectedOptionsChange, filter]);\n\n const fieldRef = useRef<MultiSelectMenuHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <MultiSelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={(searchValue) => filter(options, searchValue)}\n debounceMs={0}\n value={value}\n onSelectedOptionsChange={onSelectedOptionsChange}\n selectAll={selectAllConfig}\n selectFiltered={selectFilteredConfig}\n {...rest}\n />\n );\n};\n"],"names":["searchValue","items"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectFieldSync-z8b41JZz.js","sources":["../src/beta/components/SelectField/internal/SelectFieldInput.tsx","../src/beta/components/SelectField/internal/useCombo.tsx","../src/beta/components/SelectField/internal/SelectFieldComboboxMode.tsx","../src/beta/components/SelectField/internal/SelectFieldTrigger.tsx","../src/beta/components/SelectField/internal/useSelectMode.ts","../src/beta/components/SelectField/internal/SelectFieldSelectMode.tsx","../src/beta/components/SelectField/SelectField.tsx","../src/beta/components/SelectField/SelectFieldSync.tsx"],"sourcesContent":["import styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport { PassThroughProps, Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { ReactElement, RefObject } from \"react\";\n\n/**\n * Props for the SelectFieldInput component\n * @property {string} [placeholder] - Placeholder text displayed when input is empty\n * @property {Extract<Size, \"small\" | \"medium\" | \"large\">} [size] - Size variant of the input\n * @property {boolean} [disableClearButton] - Hides the clear button when true\n * @property {boolean} [disableToggleButton] - Hides the toggle button when true\n * @property {boolean} [disabled] - Disables the input entirely\n * @property {boolean} [readOnly] - Cannot be modified but remains interactive\n * @property {boolean} [required] - Marks the input as required for form validation\n * @property {boolean} [error] - Shows error styling on the input when true\n * @property {() => void} [onClear] - Callback fired when the clear button is clicked\n * @property {string} [id] - HTML id attribute for the input element\n * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element\n * @property {PassThroughProps<\"div\">} [htmlInputWrapperProps] - Additional props passed to the wrapper div\n * @property {PassThroughProps<\"input\">} [inputProps] - Additional props passed to the input element\n * @property {PassThroughProps<\"button\">} [toggleButtonProps] - Additional props passed to the toggle button\n * @property {string | ReactElement} [prefix] - Content to display before the input\n * @property {string | ReactElement} [suffix] - Content to display after the input\n */\nexport type SelectFieldInputProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n required?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n htmlInputWrapperProps?: PassThroughProps<\"div\">;\n inputProps?: PassThroughProps<\"input\">;\n toggleButtonProps?: PassThroughProps<\"button\">;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n};\n\n/**\n * Internal input component for the SelectField that provides the text input and action buttons.\n *\n * Features:\n * - Text input for filtering and displaying selected values\n * - Optional clear button for removing the current selection\n * - Optional toggle button for opening/closing the dropdown menu\n * - Supports multiple size variants (small, medium, large)\n * - Fully accessible with proper ARIA labels on buttons\n * - Supports pass-through props for customization of internal elements\n * - Optional prefix and suffix content\n * - Error state styling\n *\n * @example\n * <SelectFieldInput\n * placeholder=\"Search...\"\n * size=\"medium\"\n * onClear={() => handleClear()}\n * prefix=\"$\"\n * />\n */\nexport const SelectFieldInput = ({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n required,\n error,\n onClear,\n id,\n inputWrapperRef,\n htmlInputWrapperProps,\n inputProps,\n toggleButtonProps,\n prefix,\n suffix,\n}: SelectFieldInputProps) => {\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"no-toggle-button\"]]: disableToggleButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n return (\n <div\n ref={inputWrapperRef}\n {...htmlInputWrapperProps}\n className={cx(inputWrapperClassNames, htmlInputWrapperProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <input\n type=\"text\"\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n {...inputProps}\n className={cx(styles[\"input\"], inputProps?.className, {\n [styles[\"error\"]]: error,\n })}\n />\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n <div className={styles[\"buttons-wrapper\"]}>\n {disableClearButton ? null : (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={() => {\n onClear?.();\n }}\n />\n </div>\n )}\n {disableToggleButton ? null : (\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n {...toggleButtonProps}\n className={cx(\n styles[\"toggle-button\"],\n toggleButtonProps?.className,\n )}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nSelectFieldInput.displayName = \"SelectFieldInput\";\n","import {\n useCombobox,\n UseComboboxProps,\n UseComboboxState,\n UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport { useMemo, useState } from \"react\";\nimport {\n SectionMeta,\n SelectItem,\n} from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../../internal/functions/buildSelectItems\";\n\nexport type { SectionMeta };\n\nexport type UseComboOptions = {\n // An array of currently loaded options\n options: SelectFieldOption[];\n // Pinned options configuration (raw prop)\n pinned?: SelectFieldPinnedOptions;\n // Function to convert a group value to a display label\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n // Function to sort group sections\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption | null;\n onSelectedOptionChange: (option: SelectFieldOption | null) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n} & Pick<UseComboboxProps<SelectItem>, \"onInputValueChange\" | \"onIsOpenChange\">;\n\n/**\n * The purpose of useCombo is to provide an abstraction over the downshift combobox hook.\n */\nexport const useCombo = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboOptions) => {\n // Controlled input value state - needed so usePinnedOptions can access it\n // before useCombobox is called\n const [inputValue, setInputValue] = useState(selectedOption?.label ?? \"\");\n\n // Compute effective search value (empty if showing selected option's label)\n const effectiveSearchValue =\n selectedOption?.label === inputValue ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: effectiveSearchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\n } = useCombobox({\n isItemDisabled: (item, _index) => {\n if (!item) {\n return false; // Downshift passes -1 index with an undefined item. Ignore it.\n }\n return (disabled || item.disabled) ?? false;\n },\n environment: environment,\n selectedItem: selectedDownshiftItem,\n inputValue, // Controlled input value\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem;\n }) => {\n // Regular, pinned, and grouped options are all selectable\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onInputValueChange: (changes) => {\n // Update local state\n setInputValue(changes.inputValue ?? \"\");\n // Call external handler\n onInputValueChange?.(changes);\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useCombobox.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n return {\n inputValue,\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n };\n};\n\nfunction stateReducer(\n state: UseComboboxState<SelectItem>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n // this prevents the menu from being closed when the user selects an item with 'Enter' or mouse\n switch (type) {\n case useCombobox.stateChangeTypes.InputBlur:\n // keep the dialog open if the user blurs the input while the dialog is open\n if (displayAs === \"dialog\" && state.isOpen) {\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputKeyDownEscape:\n case useCombobox.stateChangeTypes.FunctionCloseMenu:\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n // keep the dialog open if the user clicks the input while the dialog is open\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return changes;\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n return changes;\n default:\n return changes; // otherwise business as usual.\n }\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../../internal/components/SelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { SelectFieldInput } from \"./SelectFieldInput\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport { useDebouncedCallback } from \"../../../../internal/hooks/useDebouncedCallback\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useCombo } from \"./useCombo\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../../internal/components/AddNewItemButton\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { SelectFieldComboboxInternalProps } from \"../../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Combobox mode: searchable select using useCombobox.\n * This is the default behavior when disableSearch is false.\n */\nexport const SelectFieldComboboxMode = ({\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n labelAiMark,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n debounceMs,\n addItemLabel,\n onAddNewItem,\n}: SelectFieldComboboxInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const debouncedOptionLoader = useDebouncedCallback((inputValue: string) => {\n loadOptions(selectedOption?.label === inputValue ? \"\" : inputValue, {\n initial: true,\n });\n }, debounceMs);\n\n const adjustInputValueForSelectedOption = useCallback(\n (inputValue: string) => {\n return selectedOption?.label === inputValue ? \"\" : inputValue;\n },\n [selectedOption?.label],\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n inputValue,\n items,\n closeMenu,\n sectionsMeta,\n } = useCombo({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n },\n onInputValueChange: ({ inputValue: iv }) => {\n debouncedOptionLoader(iv ?? \"\");\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n inputValue,\n adjustInputValueForSelectedOption,\n setInitialLoadPerformed,\n ]);\n\n const handleLoadMore = async () => {\n await loadMore(adjustInputValueForSelectedOption(inputValue));\n };\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps()}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n inputProps={getInputProps({\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n inputProps={getInputProps()}\n disableToggleButton\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-dialog-input`}\n inputWrapperRef={inputWrapperRef}\n size=\"medium\"\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n }\n initialFocusResolver={(elements) => {\n return (\n elements.find((element) => element.tagName === \"INPUT\") ||\n elements[0]\n );\n }}\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n inputProps={getInputProps({\n popovertarget: `${id}-popover`,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n toggleButtonProps={getToggleButtonProps()}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport { Size } from \"../../../../types\";\nimport { Button } from \"../../../../components/Button\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { ReactElement, RefObject } from \"react\";\nimport { useMergeRefs } from \"../../../../hooks/useMergeRefs/useMergeRefs\";\n\nexport type SelectFieldTriggerProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n popoverTarget?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toggleButtonProps?: Record<string, any>;\n /** The display text (selected option label or empty) */\n displayValue?: string;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n};\n\n/**\n * Non-searchable select trigger for SelectField when disableSearch is true.\n * Renders a div-based trigger instead of an input, suitable for the listbox ARIA pattern.\n */\nexport const SelectFieldTrigger = ({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n error,\n onClear,\n id,\n inputWrapperRef,\n toggleButtonProps,\n displayValue,\n prefix,\n suffix,\n popoverTarget,\n}: SelectFieldTriggerProps) => {\n const { ref: downshiftRef, ...restToggleButtonProps } =\n toggleButtonProps ?? {};\n const mergedRef = useMergeRefs([inputWrapperRef, downshiftRef]);\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n });\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n // @ts-expect-error: popovertarget is a valid HTML attribute\n popovertarget={popoverTarget}\n id={id}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <div\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n >\n {displayValue ? (\n <span>{displayValue}</span>\n ) : (\n <span className={styles[\"fake-placeholder\"]}>{placeholder}</span>\n )}\n </div>\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n tabIndex={-1}\n className={styles[\"toggle-button\"]}\n />\n </div>\n </div>\n </div>\n {disableClearButton ? null : (\n <div\n className={styles[\"buttons-wrapper\"]}\n style={{ insetInlineEnd: \"2rem\" }}\n >\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n onClick={(e) => {\n e.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nSelectFieldTrigger.displayName = \"SelectFieldTrigger\";\n","import {\n useSelect,\n UseSelectState,\n UseSelectStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../../internal/hooks\";\nimport {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport { SelectItem } from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { useMemo } from \"react\";\nimport { useProcessedOptions } from \"../../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../../internal/functions/buildSelectItems\";\n\nexport type UseSelectModeOptions = {\n options: SelectFieldOption[];\n pinned?: SelectFieldPinnedOptions;\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption | null;\n onSelectedOptionChange: (option: SelectFieldOption | null) => void;\n onIsOpenChange?: (changes: { isOpen?: boolean }) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n};\n\n/**\n * Wraps downshift's useSelect for non-searchable select fields.\n * Returns a compatible interface to useCombo (minus getInputProps/inputValue).\n */\nexport const useSelectMode = ({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeOptions) => {\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: \"\",\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\n } = useSelect({\n isItemDisabled: (item) => {\n if (!item) return false;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: selectedDownshiftItem,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem;\n }) => {\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useSelect.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n return {\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n };\n};\n\nfunction stateReducer(\n state: UseSelectState<SelectItem>,\n actionAndChanges: UseSelectStateChangeOptions<SelectItem>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEscape:\n case useSelect.stateChangeTypes.FunctionCloseMenu:\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ItemClick:\n return changes;\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../../internal/components/SelectOptions\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\nimport { SelectFieldTrigger } from \"./SelectFieldTrigger\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport styles from \"../../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useSelectMode } from \"./useSelectMode\";\nimport { OptionsPopover } from \"../../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../../internal/components/AddNewItemButton\";\nimport { FieldMessage } from \"../../../../components/FieldMessage\";\nimport { SelectFieldBaseInternalProps } from \"../../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Select mode: non-searchable select using useSelect.\n * Active when disableSearch is true.\n */\nexport const SelectFieldSelectMode = ({\n labelAiMark,\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n required,\n addItemLabel,\n onAddNewItem,\n}: SelectFieldBaseInternalProps) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n items,\n closeMenu,\n sectionsMeta,\n } = useSelectMode({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(\"\");\n };\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText=\"\"\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n const toggleButtonProps = getToggleButtonProps({\n disabled: !!disabled,\n \"aria-required\": required ? true : undefined,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n } as Record<string, unknown>);\n\n if (displayAs === \"dialog\") {\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) =>\n getMenuProps({\n ...opts,\n style: { ...opts?.style, outline: \"none\" },\n onKeyDown: toggleButtonProps.onKeyDown,\n tabIndex: 0,\n \"aria-activedescendant\":\n toggleButtonProps[\"aria-activedescendant\"],\n })\n }\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n popoverTarget={`${id}-popover`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import { SelectFieldHandle, SelectFieldProps } from \"./types\";\nimport { forwardRef, useId, useRef } from \"react\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../../components/FieldMessage\";\nimport { SelectFieldComboboxMode } from \"./internal/SelectFieldComboboxMode\";\nimport { SelectFieldSelectMode } from \"./internal/SelectFieldSelectMode\";\nimport {\n SelectFieldBaseInternalProps,\n SelectFieldComboboxInternalProps,\n} from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\n\n/**\n * SelectField component for selecting a single option from a searchable dropdown.\n *\n * Features:\n * - Async option loading with caching, lazy pagination (page, offset, group), and debounced search\n * - Supports pinned option sections (static or dynamically loaded)\n * - Grouped options with custom sort and label functions\n * - Combobox mode (searchable) and select mode (non-searchable) via disableSearch\n * - Dialog and popover display modes with auto-detection based on viewport\n * - Imperative handle for cache management (clearCache, invalidate)\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <SelectField\n * label=\"Technician\"\n * value={selected}\n * onSelectedOptionChange={setSelected}\n * loadOptions={async (search) => fetchTechnicians(search)}\n * />\n */\nexport const SelectField = forwardRef<SelectFieldHandle, SelectFieldProps>(\n (propsWithLayout, ref) => {\n const { layoutStyles, componentProps } =\n useLayoutPropsUtil(propsWithLayout);\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n labelAiMark,\n hideLabel,\n placeholder,\n disableClearButton: disableClearButtonProp = false,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n size,\n error,\n hint,\n moreInfo,\n description,\n errorAriaLive: _errorAriaLive,\n required,\n disabled,\n readOnly,\n prefix,\n suffix,\n warning,\n className,\n style,\n pinned,\n virtualize,\n disableSearch,\n addItemLabel,\n onAddNewItem,\n } = componentProps;\n\n const groupToString =\n \"groupToString\" in componentProps\n ? componentProps.groupToString\n : undefined;\n const groupSorter =\n \"groupSorter\" in componentProps ? componentProps.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n\n warnDeprecatedErrorUsage(\"SelectField\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isDisabledOrReadOnly = (disabled || readOnly) ?? false;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions:\n \"lazyOptions\" in componentProps\n ? componentProps.lazyOptions\n : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const disableClearButton =\n disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;\n\n const baseProps: SelectFieldBaseInternalProps = {\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n labelAiMark,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId: moreInfo ? moreInfoUid : undefined,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n addItemLabel,\n onAddNewItem,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n };\n\n if (disableSearch) {\n return <SelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: SelectFieldComboboxInternalProps = {\n ...baseProps,\n debounceMs,\n };\n\n return <SelectFieldComboboxMode {...comboboxProps} />;\n },\n);\n\nSelectField.displayName = \"SelectField\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { SelectField } from \"./SelectField\";\nimport {\n SelectFieldHandle,\n SelectFieldProps,\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"./types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type SelectFieldSyncProps = Omit<\n SelectFieldProps,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select field.\n */\n options: SelectFieldOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * Before any search is performed, options appear in the order they are supplied.\n * By default, options are filtered by `label` and `searchText` using match-sorter,\n * which also ranks results by match quality (best matches first).\n *\n * @example\n * <SelectFieldSync\n * options={options}\n * filter={(options, searchValue) => {\n * return options.filter((option) => {\n * return option.label?.toLowerCase().includes(searchValue.toLowerCase());\n * });\n * }}\n * />\n *\n * @example\n * <SelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?: SyncFilterFn | MatchSorterOptions<SelectFieldOption>;\n /**\n * Function to compare two group values for sorting.\n * When provided, options are sorted by group using this comparator,\n * then by match-sort order within each group.\n * @param a - First group value to compare\n * @param b - Second group value to compare\n * @returns Negative if a < b, positive if a > b, zero if equal\n */\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n};\n\n/**\n * SelectFieldSync is a simplified version of SelectField that is used to display a list of options in a select field.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`.\n * - Performs client-side filtering of the options.\n * - Optionally accepts a function to filter the options, or a MatchSorterOptions object to customize the default filtering.\n * - Supports grouping with optional group sorting via `groupSorter`.\n * - Supports all the other props of SelectField.\n */\nexport const SelectFieldSync = (props: SelectFieldSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectFieldHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <SelectField\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","stateReducer","inputValue"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMenuSync-Cf1Zradm.js","sources":["../src/beta/components/SelectMenu/SelectMenu.tsx","../src/beta/components/SelectMenu/SelectMenuSync.tsx"],"sourcesContent":["import { SelectMenuHandle, SelectMenuProps } from \"./types\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOptions } from \"../../../internal/components/SelectOptions\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"./internal/useMenuInteraction\";\nimport { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../../components\";\n\n/**\n * SelectMenu component for selecting a single option from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n *\n * @example\n * <SelectMenu\n * trigger={(props) => <Button {...props}>Select a book</Button>}\n * label=\"Books\"\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * loadOptions={loadOptions}\n * />\n */\nexport const SelectMenu = forwardRef<SelectMenuHandle, SelectMenuProps>(\n (props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n pinned,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } =\n useProcessedOptions({\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n });\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOption ? [selectedOption.id] : []),\n [selectedOption],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n onSelectedOptionChange(item.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n [onSelectedOptionChange],\n );\n\n const {\n isOpen,\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: true,\n id,\n triggerRef,\n label,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n setInitialLoadPerformed,\n ]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n const selectedIdx = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n if (selectedIdx >= 0) {\n setHighlightedIndex(selectedIdx);\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n items,\n selectedOption?.id,\n setHighlightedIndex,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={\n handleInputChange as React.ChangeEventHandler<HTMLInputElement>\n }\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n />\n ) : null;\n\n const addNewItemButton = onAddNewItem ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => closeMenu({ restoreFocus: false })}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={addNewItemButton ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={addNewItemButton ?? undefined}\n >\n {searchInput}\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n },\n);\n\nSelectMenu.displayName = \"SelectMenu\";\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { MatchSorterOptions } from \"match-sorter\";\nimport { SelectMenu } from \"./SelectMenu\";\nimport {\n SelectMenuHandle,\n SelectMenuProps,\n SelectMenuOption,\n SelectMenuGroupByValue,\n} from \"./types\";\nimport {\n SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../../internal/functions/syncFilterUtils\";\n\nexport type SelectMenuSyncProps = Omit<\n SelectMenuProps,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select menu.\n */\n options: SelectMenuOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?: SyncFilterFn | MatchSorterOptions<SelectMenuOption>;\n /**\n * Custom comparator function to sort groups.\n */\n groupSorter?: (\n a: SelectMenuGroupByValue,\n b: SelectMenuGroupByValue,\n ) => number;\n};\n\n/**\n * SelectMenuSync is a simplified version of SelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Optionally accepts a custom filter function or MatchSorterOptions\n * - Supports grouping with optional group sorting via `groupSorter`\n * - Supports all other props of SelectMenu\n *\n * @example\n * <SelectMenuSync\n * trigger={(props) => <Button {...props}>Pick a book</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * />\n */\nexport const SelectMenuSync = (props: SelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectMenuHandle>(null);\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (prevOptionsRef.current !== options) {\n prevOptionsRef.current = options;\n fieldRef.current?.invalidate();\n }\n }, [options]);\n\n return (\n <SelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTriggerBase-4o1cqEbR.js","sources":["../src/components/Combobox/internal/ComboboxUtils.ts","../src/components/SelectTrigger/internal/SelectTriggerBase.tsx"],"sourcesContent":["import {\n ComboboxMultipleProps,\n ComboboxProps,\n ComboboxSelectProps,\n SelectMultipleProps,\n} from \"../ComboboxTypes\";\n\nexport const ADD_NEW = Symbol.for(\"add-new\");\nexport const SELECT_ALL = Symbol.for(\"select-all\");\n\n/**\n * Default function to convert an item to a string representation\n * @template Item - The type of the item\n * @param item - The item to convert to string\n * @returns String representation of the item or empty string if null/undefined\n */\nexport const defaultItemToString = function <Item>(item: Item | null) {\n return item != null ? String(item) : \"\";\n};\n\n/**\n * Default function to generate a unique key for an item\n * @template Item - The type of the item\n * @param item - The item to generate a key for\n * @returns The item itself as the key\n */\nexport const defaultItemToKey = function <Item>(item: Item | null) {\n return item;\n};\n\nexport function isMultiple<Item>(\n props: ComboboxProps<Item> | ComboboxSelectProps<Item>,\n): props is ComboboxMultipleProps<Item> | SelectMultipleProps<Item> {\n return Object.hasOwn(props, \"multiple\") && props.multiple === true;\n}\n\nexport function getScrollParent(node: HTMLElement | null) {\n if (node == null) {\n return null;\n }\n\n if (node.scrollHeight > node.clientHeight) {\n return node;\n } else {\n if (node.parentNode instanceof HTMLElement) {\n return getScrollParent(node.parentNode);\n }\n return null;\n }\n}\n","import {\n useState,\n useId,\n useRef,\n useLayoutEffect,\n isValidElement,\n type ComponentPropsWithoutRef,\n type MouseEvent,\n type MutableRefObject,\n type MouseEventHandler,\n ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport Chevron_Right from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\n\nimport { Button } from \"../../Button\";\nimport { Chip, ChipProps } from \"../../Chip\";\nimport { Flex } from \"../../Flex\";\nimport { FieldLabel, FieldLabelProps } from \"../../FieldLabel\";\nimport { Helper } from \"../../../internal/components\";\nimport { warnDeprecatedErrorUsage } from \"../../FieldMessage\";\nimport { TextFieldProps } from \"../../TextField\";\n\nimport styles from \"./SelectTriggerBase.module.scss\";\nimport { DistributiveOmit } from \"../../../types\";\nimport { defaultItemToString } from \"../../Combobox/internal/ComboboxUtils\";\n\ntype PartialChipProps = Partial<Omit<ChipProps, \"icon\" | \"avatar\">> &\n (\n | { icon?: ChipProps[\"icon\"]; avatar?: never }\n | { icon?: never; avatar?: ChipProps[\"avatar\"] }\n );\n\nfunction mergeChipProps(\n ...propSets: (PartialChipProps | Partial<ChipProps>)[]\n): ChipProps {\n const merged = propSets.reduce(\n (acc, props) => ({ ...acc, ...props }),\n {} as Record<string, unknown>,\n );\n\n return merged as ChipProps;\n}\n\nexport type SelectTriggerBaseProps<Item = unknown> = DistributiveOmit<\n TextFieldProps,\n \"showCounter\" | \"prefix\"\n> & {\n /**\n * Should be a positive integer.\n */\n maxRows?: number;\n\n /** Allows Combobox/Select to display custom-colored Chips */\n selectedItemProps?: (item: Item, index: number) => PartialChipProps;\n} & {\n itemToString?: (item: Item) => string;\n removeSelectedItem?: (item: Item) => void;\n disableClearSelection?: boolean;\n selectedItem: Item | null;\n selectedItems: Item[];\n\n inputValue?: string;\n referenceRef?: MutableRefObject<HTMLDivElement | null>;\n} & {\n variant?: \"select\" | \"combobox\";\n onClearButtonClick?: MouseEventHandler<HTMLButtonElement>;\n labelProps?: Partial<FieldLabelProps>;\n inputWrapperProps?: ComponentPropsWithoutRef<\"div\">;\n toggleButtonProps?: ComponentPropsWithoutRef<\"button\">;\n chipProps?: (item: Item, index: number) => PartialChipProps;\n inputProps?: ComponentPropsWithoutRef<\"input\" | \"div\">;\n} & {\n prefix?: string | ReactNode;\n};\n\nexport const SelectTriggerBase = function <Item>({\n className,\n label,\n size,\n error,\n hint,\n description,\n prefix,\n suffix,\n maxRows,\n selectedItemProps = (_item: Item, _index: number): PartialChipProps => ({}),\n disabled,\n readOnly,\n /** ======== */\n disableClearSelection,\n itemToString: itemToStringProp,\n selectedItem,\n selectedItems,\n removeSelectedItem,\n inputValue,\n referenceRef,\n /** ======== */\n variant = \"select\",\n onClearButtonClick,\n labelProps,\n inputWrapperProps = {},\n toggleButtonProps = {},\n inputProps = {},\n chipProps = (_item: Item, _index: number): PartialChipProps => ({}),\n warning,\n placeholder,\n ...rest\n}: SelectTriggerBaseProps<Item>) {\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n\n const ComboboxTriggerClassNames = cx(styles[\"search-field\"], {\n [styles[\"select\"]]: variant === \"select\",\n });\n\n const noClearButton = disabled || readOnly || disableClearSelection;\n\n const ComboboxInputWrapperClassNames = cx(\n styles[\"input-wrapper\"],\n className\n ? {\n [className]: variant === \"select\",\n }\n : {},\n {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: noClearButton,\n },\n );\n\n const ComboboxInputClassNames = cx(\n styles[\"input\"],\n className\n ? {\n [className]: variant === \"combobox\",\n }\n : {},\n {\n [styles[\"error\"]]: error,\n },\n );\n\n const helperUid = \"helper\" + useId();\n const placeholderUid = \"placeholder\" + useId();\n const ariaDescribedBy = `${helperUid} ${placeholderUid}`;\n\n warnDeprecatedErrorUsage(\"SelectTrigger\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n\n const rowsRef = useRef<HTMLDivElement>(null);\n const [stillCalculating, setStillCalculating] = useState<boolean>(false);\n const [collapsedChips, setCollapsedChips] = useState<boolean>(false);\n const [visibleChipsCount, setVisibleChipsCount] = useState<number | null>(\n null,\n );\n const [forceRenderCount, setForceRenderCount] = useState<number>(0);\n\n useLayoutEffect(() => {\n // we only need to do this nonsense if maxRows is set\n if (maxRows === undefined) return;\n\n // 1) Render with no chips collapsed, if it's already just one row, we're done\n // 2) If there is a second row, then render again with best guess at how we should collapse\n // 3) If there is still a second row while collapsed, then render again with one less item\n // 4) Keep going until there is only one row, then /actually/ render\n\n // start calculation loop, set intiial values and force re-render\n if (stillCalculating === false) {\n setStillCalculating(true);\n setCollapsedChips(false);\n setVisibleChipsCount(null);\n setForceRenderCount((x) => x + 1);\n\n // otherwise, calculate the number of rows\n } else if (rowsRef?.current?.children) {\n const children = rowsRef?.current?.children;\n\n // Exclude the input-flex element from row counting so the algorithm\n // only considers chip elements when deciding whether to collapse.\n // The input will naturally fit alongside chips thanks to its\n // reduced min-width.\n const chipChildren = Array.from(children).filter(\n (child) =>\n !(child as HTMLElement).classList?.contains(styles[\"input-flex\"]),\n );\n\n const rowData = chipChildren.reduce(\n (acc, child) => {\n const top = child.getBoundingClientRect().top;\n\n if (!acc.length) {\n return [{ count: 1, top }];\n } else if (acc[acc.length - 1].top === top) {\n return [\n ...acc.slice(0, -1),\n { count: acc[acc.length - 1].count + 1, top },\n ];\n } else if (acc[acc.length - 1].top !== top) {\n return [...acc, { count: 1, top }];\n } else {\n return acc;\n }\n },\n [] as { count: number; top: number }[],\n );\n\n // Call it a day if:\n // We don't have a second row OR\n // We're already hiding everything OR\n // There's only one item selected\n if (\n !rowData[maxRows] ||\n visibleChipsCount === 0 ||\n selectedItems.length === 1\n ) {\n setStillCalculating(false);\n } else {\n setCollapsedChips(true);\n\n // otherwise, either guess how many visible chips we have\n if (visibleChipsCount == null) {\n if (rowData[maxRows]) {\n const quickGuess = Math.max(\n rowData\n .slice(0, maxRows)\n .reduce((sum, row) => sum + row.count, -1),\n 0,\n );\n\n setVisibleChipsCount(quickGuess);\n } else {\n const naiveGuess = Math.max(\n rowData.reduce((sum, row) => sum + row.count, -2),\n 0,\n );\n setVisibleChipsCount(naiveGuess);\n }\n\n // or decrease our last guess by 1 and try again\n } else {\n setVisibleChipsCount(visibleChipsCount - 1);\n }\n\n setForceRenderCount((x) => x + 1);\n }\n }\n }, [selectedItems.length, maxRows, forceRenderCount]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const selectedItemsDisplayCount =\n collapsedChips && maxRows != null && visibleChipsCount !== null\n ? visibleChipsCount\n : selectedItems.length;\n\n // TODO: Update this to use a TextField component once we can pass props\n // directly to both the label and the text input\n return (\n <div {...rest} className={ComboboxTriggerClassNames} ref={referenceRef}>\n {label ? (\n <FieldLabel\n {...labelProps}\n className={cx(styles[\"label\"], labelProps?.className)}\n >\n {label}\n </FieldLabel>\n ) : null}\n\n <div\n {...inputWrapperProps}\n className={ComboboxInputWrapperClassNames}\n {...(variant === \"select\"\n ? {\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": labelProps?.id,\n }\n : {})}\n >\n <div className={styles[\"buttons-wrapper\"]}>\n {(inputValue || selectedItem || selectedItems.length) &&\n !noClearButton ? (\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n icon={Close}\n className={styles[\"close-button\"]}\n onClick={(e: MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n onClearButtonClick?.(e);\n }}\n tabIndex={-1}\n />\n </div>\n ) : null}\n\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n {...toggleButtonProps}\n {...(variant === \"select\" ? { tabIndex: -1, inert: \"true\" } : {})}\n className={styles[\"toggle-button\"]}\n aria-label=\"toggle menu\"\n icon={Chevron_Right}\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n />\n </div>\n </div>\n\n <div className={styles[\"prefix-wrapper\"]}>\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n </div>\n\n <div\n className={cx(styles[\"rows-wrapper\"], {\n [styles[\"max-rows\"]]: maxRows !== undefined,\n [styles[\"single-row\"]]: maxRows === 1 && !stillCalculating,\n })}\n ref={rowsRef}\n >\n {selectedItems.length && removeSelectedItem != null\n ? selectedItems\n .slice(0, selectedItemsDisplayCount)\n .map((item, index) => {\n return (\n <div\n key={`selected-item-${index}`}\n className={styles[\"chip-wrapper\"]}\n >\n <Chip\n {...mergeChipProps(\n chipProps(item, index),\n selectedItemProps(item, index),\n {\n label: itemToString(item),\n onClose:\n disabled || readOnly\n ? undefined\n : (_e) => {\n removeSelectedItem(item);\n },\n className: styles[\"chip\"],\n title: itemToString(item),\n },\n )}\n />\n </div>\n );\n })\n : null}\n\n {collapsedChips && maxRows != null ? (\n <div className={styles[\"chip-wrapper\"]}>\n <Chip\n label={`+${selectedItems.length - selectedItemsDisplayCount}`}\n className={styles[\"chip\"]}\n title={selectedItems\n .slice(selectedItemsDisplayCount)\n .map((item) => itemToString(item))\n .join(\", \")}\n />\n </div>\n ) : null}\n\n <Flex className={styles[\"input-flex\"]} alignItems=\"center\">\n {variant === \"select\" ? (\n <div\n {...inputProps}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n >\n {selectedItems.length ? null : selectedItem ? (\n itemToString(selectedItem)\n ) : (\n <span\n className={styles[\"fake-placeholder\"]}\n id={placeholderUid}\n >\n {placeholder}\n </span>\n )}\n </div>\n ) : (\n <input\n type=\"text\"\n {...inputProps}\n placeholder={placeholder}\n className={cx(ComboboxInputClassNames, inputProps.className)}\n {...(inputProps[\"aria-expanded\"] != null &&\n inputProps[\"aria-controls\"] != null\n ? {\n role: \"combobox\",\n }\n : {})}\n />\n )}\n\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n </Flex>\n </div>\n </div>\n\n {hint || errorMessages || warning || description ? (\n <Helper\n id={helperUid}\n error={\n typeof errorMessages === \"string\" || Array.isArray(errorMessages)\n ? errorMessages\n : undefined\n }\n warning={warning}\n errorMessage={\n isValidElement(errorMessages) ? errorMessages : undefined\n }\n hint={hint}\n description={description}\n />\n ) : null}\n </div>\n );\n};\n"],"names":["Close","Chevron_Right"],"mappings":"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"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import './SelectTriggerBase.css';const select = "_select_66f9d_17";
|
|
2
|
-
const input = "_input_66f9d_21";
|
|
3
|
-
const error = "_error_66f9d_48";
|
|
4
|
-
const disabled = "_disabled_66f9d_55";
|
|
5
|
-
const small = "_small_66f9d_133";
|
|
6
|
-
const large = "_large_66f9d_139";
|
|
7
|
-
const chip = "_chip_66f9d_243";
|
|
8
|
-
const prefix = "_prefix_66f9d_223";
|
|
9
|
-
const suffix = "_suffix_66f9d_256";
|
|
10
|
-
const styles = {
|
|
11
|
-
"search-field": "_search-field_66f9d_1",
|
|
12
|
-
select: select,
|
|
13
|
-
"input-wrapper": "_input-wrapper_66f9d_21",
|
|
14
|
-
input: input,
|
|
15
|
-
error: error,
|
|
16
|
-
disabled: disabled,
|
|
17
|
-
"input-flex": "_input-flex_66f9d_65",
|
|
18
|
-
"fake-placeholder": "_fake-placeholder_66f9d_116",
|
|
19
|
-
"no-clear-button": "_no-clear-button_66f9d_121",
|
|
20
|
-
"no-toggle-button": "_no-toggle-button_66f9d_125",
|
|
21
|
-
small: small,
|
|
22
|
-
large: large,
|
|
23
|
-
"buttons-wrapper": "_buttons-wrapper_66f9d_145",
|
|
24
|
-
"close-button-wrapper": "_close-button-wrapper_66f9d_162",
|
|
25
|
-
"close-button": "_close-button_66f9d_162",
|
|
26
|
-
"toggle-button-wrapper": "_toggle-button-wrapper_66f9d_185",
|
|
27
|
-
"toggle-button": "_toggle-button_66f9d_185",
|
|
28
|
-
"prefix-wrapper": "_prefix-wrapper_66f9d_223",
|
|
29
|
-
"rows-wrapper": "_rows-wrapper_66f9d_232",
|
|
30
|
-
"chip-wrapper": "_chip-wrapper_66f9d_243",
|
|
31
|
-
chip: chip,
|
|
32
|
-
prefix: prefix,
|
|
33
|
-
suffix: suffix
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export { styles as s };
|
|
37
|
-
//# sourceMappingURL=SelectTriggerBase.module-BgZSNZfE.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTriggerBase.module-BgZSNZfE.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import './TextField.css';const textfield = "_textfield_1tdg8_1";
|
|
2
|
-
const input = "_input_1tdg8_19";
|
|
3
|
-
const error = "_error_1tdg8_57";
|
|
4
|
-
const prefix = "_prefix_1tdg8_68";
|
|
5
|
-
const suffix = "_suffix_1tdg8_72";
|
|
6
|
-
const xsmall = "_xsmall_1tdg8_98";
|
|
7
|
-
const small = "_small_1tdg8_103";
|
|
8
|
-
const large = "_large_1tdg8_107";
|
|
9
|
-
const textFieldStyles = {
|
|
10
|
-
textfield: textfield,
|
|
11
|
-
"input-wrapper": "_input-wrapper_1tdg8_19",
|
|
12
|
-
input: input,
|
|
13
|
-
error: error,
|
|
14
|
-
prefix: prefix,
|
|
15
|
-
suffix: suffix,
|
|
16
|
-
xsmall: xsmall,
|
|
17
|
-
small: small,
|
|
18
|
-
large: large,
|
|
19
|
-
"loading-spinner-wrapper": "_loading-spinner-wrapper_1tdg8_177"
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export { textFieldStyles as t };
|
|
23
|
-
//# sourceMappingURL=TextField.module-DkZwywjf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TextField.module-DkZwywjf.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarButtonToggle-xvMWRxzC.js","sources":["../src/beta/components/Toolbar/internal/ToolbarContext.tsx","../src/beta/components/Toolbar/internal/utils/accessibility.ts","../src/beta/components/Toolbar/internal/ToolbarItemWrapper.tsx","../src/beta/components/Toolbar/internal/ToolbarItemOverflowContext.tsx","../src/beta/components/Toolbar/ToolbarButtonToggle.tsx"],"sourcesContent":["import { createContext, RefObject, useContext } from \"react\";\nimport { ToolbarItemProps, ToolbarOverflowTypes, ToolbarSize } from \"../types\";\n\n/**\n * Context for sharing toolbar state with child components\n */\nexport type ToolbarContextProps = {\n /**\n * Array of toolbar items that should appear in the overflow menu\n */\n overflowItems: ToolbarItemProps[];\n /**\n * Function to add an item to the overflow menu\n */\n addItem: (element: ToolbarItemProps) => void;\n /**\n * Function to remove an item from the overflow menu\n */\n removeItem: (element: ToolbarItemProps) => void;\n /**\n * Reference to the toolbar container element\n */\n toolbarRef: RefObject<HTMLDivElement>;\n /**\n * Array of item IDs in their original order\n */\n orderedIds?: string[];\n /**\n * Overflow behavior type (wrap or collapse)\n */\n overflow: ToolbarOverflowTypes;\n /**\n * Size of toolbar child components\n */\n size: ToolbarSize;\n};\n\n/**\n * Context for managing toolbar state including overflow and size\n */\nexport const ToolbarContext = createContext<ToolbarContextProps>({\n overflowItems: [],\n addItem: () => {\n return;\n },\n removeItem: () => {\n return;\n },\n toolbarRef: { current: null },\n orderedIds: [],\n overflow: \"wrap\",\n size: \"xsmall\",\n});\n\n/**\n * Hook to access the toolbar size from context\n * @returns The current toolbar size\n */\nexport const useToolbarSize = (): ToolbarSize =>\n useContext(ToolbarContext).size;\n","import { KeyboardEvent } from \"react\";\nimport { getKeyboardFocusableElements } from \"../../../../../internal/functions\";\n\n/**\n * Gets all visible focusable elements for a specific toolbar instance.\n * Filters out hidden items and includes the overflow trigger if present.\n */\nexport function getToolbarElements(toolbarElement: HTMLElement) {\n const toolbarContent = toolbarElement.querySelector<HTMLElement>(\n '[data-anv=\"toolbar-content\"]',\n );\n\n const mainItems = getKeyboardFocusableElements(toolbarContent).filter(\n (item) => {\n // Only include visible items that are explicitly marked as toolbar items\n const isHidden = !item.closest('[aria-hidden=\"true\"]');\n const isInDrawer = !item.closest('[data-anv=\"filter-group-drawer\"]');\n const isInPopover = !item.closest('[data-anv=\"popover-content\"]');\n const isNotInMenuContent = !item.closest('[data-anv=\"menu-content\"]');\n return isHidden && isInDrawer && isInPopover && isNotInMenuContent;\n },\n );\n\n const overflowTrigger = toolbarElement.querySelector<HTMLElement>(\n '[data-anv=\"toolbar-overflow-trigger\"]',\n );\n\n return overflowTrigger ? [...mainItems, overflowTrigger] : mainItems;\n}\n\n/**\n * Updates tabindex values for all items in a toolbar.\n * Sets tabindex=\"0\" for the active item and tabindex=\"-1\" for all others.\n */\nexport function updateToolbarItemsTabIndex(\n toolbarElement: HTMLElement,\n activeItem?: Element | number,\n) {\n if (!toolbarElement) return;\n\n // Get all toolbar items\n const items = getToolbarElements(toolbarElement);\n if (!items.length) return;\n\n // Determine the active index - default to the first item\n let activeIndex = 0;\n\n if (typeof activeItem === \"number\") {\n // If activeItem is a number, use it directly\n activeIndex = Math.max(0, Math.min(activeItem, items.length - 1));\n } else if (activeItem instanceof Element) {\n // If activeItem is an element, find its index\n const foundIndex = items.indexOf(activeItem);\n if (foundIndex !== -1) {\n activeIndex = foundIndex;\n }\n }\n\n // Update tabindex values\n items.forEach((item, index) => {\n item.setAttribute(\"tabindex\", index === activeIndex ? \"0\" : \"-1\");\n });\n\n return items[activeIndex];\n}\n\n/**\n * Handles keyboard navigation within the toolbar component following ARIA practices.\n *\n * Navigation behavior:\n * - Left/Right arrows move focus in horizontal toolbars\n * - Up/Down arrows move focus in vertical toolbars\n * - Home/End move to first/last items\n * - Navigation wraps around at the ends\n * - Only visible items are included in navigation\n */\nexport function handleToolbarKeyDown(\n event: KeyboardEvent<HTMLElement>,\n toolbarElement: HTMLElement,\n) {\n if (!toolbarElement || event.altKey || event.ctrlKey || event.metaKey) return;\n\n const items = getToolbarElements(toolbarElement);\n if (!items.length) return;\n\n const activeElement = event.target as HTMLElement;\n if (!toolbarElement.contains(activeElement)) return;\n\n const activeItem = items.find(\n (item) =>\n item === activeElement ||\n Array.from(item.children).some((child) => child === activeElement),\n );\n\n const activeIndex = activeItem ? items.indexOf(activeItem) : -1;\n if (activeIndex === -1) return;\n\n let nextIndex = activeIndex;\n const isVertical =\n toolbarElement.getAttribute(\"aria-orientation\") === \"vertical\";\n\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n event.preventDefault();\n if (\n (isVertical && event.key === \"ArrowUp\") ||\n (!isVertical && event.key === \"ArrowLeft\")\n ) {\n nextIndex = activeIndex <= 0 ? items.length - 1 : activeIndex - 1;\n }\n break;\n\n case \"ArrowRight\":\n case \"ArrowDown\":\n event.preventDefault();\n if (\n (isVertical && event.key === \"ArrowDown\") ||\n (!isVertical && event.key === \"ArrowRight\")\n ) {\n nextIndex = activeIndex >= items.length - 1 ? 0 : activeIndex + 1;\n }\n break;\n\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n\n case \"End\":\n event.preventDefault();\n nextIndex = items.length - 1;\n break;\n\n default:\n return;\n }\n\n updateToolbarItemsTabIndex(toolbarElement, nextIndex);\n (items[nextIndex] as HTMLElement)?.focus();\n}\n\n/**\n * Handles keyboard navigation within overflow menu using arrow keys\n */\nexport const handleMenuKeyboardNavigation = (\n event: KeyboardEvent<HTMLUListElement>,\n) => {\n const menuItems = Array.from(\n event.currentTarget.querySelectorAll('[role=\"menuitem\"]'),\n ).map((menuItem) => {\n // Get first focusable element or fallback to menuitem itself\n return getKeyboardFocusableElements(menuItem as HTMLElement)[0] || menuItem;\n });\n\n if (!menuItems.length) return;\n\n const currentIndex = menuItems.indexOf(document.activeElement as HTMLElement);\n if (currentIndex === -1) return;\n\n let nextIndex = currentIndex;\n const isModifierKey = event.altKey || event.ctrlKey || event.metaKey;\n\n if (isModifierKey) return;\n\n switch (event.key) {\n case \"ArrowDown\":\n case \"ArrowUp\": {\n event.preventDefault();\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n nextIndex =\n (currentIndex + direction + menuItems.length) % menuItems.length;\n break;\n }\n case \"Home\":\n event.preventDefault();\n nextIndex = 0;\n break;\n case \"End\":\n event.preventDefault();\n nextIndex = menuItems.length - 1;\n break;\n default:\n return;\n }\n\n (menuItems[nextIndex] as HTMLElement)?.focus();\n};\n","import { useContext, useEffect, useId, useRef, useCallback } from \"react\";\nimport { ToolbarItemProps } from \"../types\";\nimport { ToolbarContext } from \"./ToolbarContext\";\nimport { useIntersectionObserver } from \"../../../../internal/hooks\";\nimport { updateToolbarItemsTabIndex } from \"./utils/accessibility\";\n\nimport cx from \"classnames\";\nimport styles from \"../Toolbar.module.scss\";\n\n/**\n * Props for the ToolbarItemWrapper component\n */\nexport type ToolbarItemWrapperProps = {\n /**\n * Toolbar item configuration without ID (ID is generated internally)\n */\n item: Omit<ToolbarItemProps, \"id\">;\n /**\n * The toolbar item component to wrap\n */\n children: React.ReactNode;\n /** Optional override for the intersection observer root element */\n observerRoot?: Element | null;\n /** Optional override for visibility change handling */\n onVisibilityChange?: (isVisible: boolean) => void;\n /** Optional margin offset for the intersection observer root */\n rootMargin?: string;\n /** Optional class name to apply to the wrapper element */\n className?: string;\n};\n\n/**\n * ToolbarItemWrapper manages item visibility and focus behavior within a toolbar.\n *\n * Features:\n * - Intersection observation for overflow detection\n * - Automatic overflow menu integration in collapse mode\n * - Focus management and keyboard navigation\n * - ARIA compliance for accessibility\n * - Visibility state management\n * - Proper tab index handling\n * - Context integration with toolbar state\n *\n * @example\n * <ToolbarItemWrapper item={{ itemType: \"button\", itemProps: buttonProps }}>\n * <ToolbarButton {...buttonProps} />\n * </ToolbarItemWrapper>\n */\nexport const ToolbarItemWrapper = ({\n item,\n children,\n observerRoot,\n onVisibilityChange,\n rootMargin,\n className,\n}: ToolbarItemWrapperProps) => {\n const { addItem, removeItem, toolbarRef, overflow } =\n useContext(ToolbarContext);\n const itemId = useId();\n const elementRef = useRef<HTMLDivElement | null>(null);\n const isCollapseMode = overflow === \"collapse\";\n const prevIntersectingRef = useRef<boolean>(true); // Start as visible\n\n /**\n * Handles visibility changes from intersection observer in collapse mode\n * In collapse mode:\n * - When item becomes visible, removes it from overflow menu\n * - When item becomes hidden, adds it to overflow menu\n */\n const handleVisibilityChange = useCallback(\n (isVisible: boolean) => {\n if (!isCollapseMode || prevIntersectingRef.current === isVisible) return;\n\n if (onVisibilityChange) {\n onVisibilityChange(isVisible);\n } else if (item) {\n const itemWithId = { ...item, id: itemId };\n if (isVisible) {\n removeItem(itemWithId);\n } else {\n addItem(itemWithId);\n }\n }\n prevIntersectingRef.current = isVisible;\n },\n [isCollapseMode, onVisibilityChange, item, itemId, addItem, removeItem],\n );\n\n const { isIntersecting, ref } = useIntersectionObserver({\n root: isCollapseMode ? (observerRoot ?? toolbarRef.current) : null,\n threshold: 1,\n initialIsIntersecting: true, // Start as visible\n onChange: handleVisibilityChange,\n rootMargin,\n });\n\n const setRefCallback = useCallback(\n (node: HTMLDivElement | null) => {\n elementRef.current = node;\n // Only set up intersection observer in collapse mode\n if (isCollapseMode) {\n ref(node);\n }\n },\n [ref, isCollapseMode],\n );\n\n /**\n * Manages focus behavior between toolbar items using accessibility utils\n * - Uses updateToolbarItemsTabIndex to manage focus state\n * - Ensures proper keyboard navigation support\n * - Maintains ARIA compliance for focus management\n */\n const handleFocusOrClick = useCallback(() => {\n if (!toolbarRef.current || !elementRef.current) return;\n\n const currentElement = elementRef.current.querySelector(\"button, a, input\");\n if (!currentElement) return;\n\n updateToolbarItemsTabIndex(toolbarRef.current, currentElement);\n }, [toolbarRef]);\n\n // Set up focus management\n useEffect(() => {\n const interactiveEl = elementRef.current?.querySelector(\"button, a, input\");\n if (!interactiveEl) return;\n\n interactiveEl.addEventListener(\"focus\", handleFocusOrClick);\n interactiveEl.addEventListener(\"click\", handleFocusOrClick);\n\n return () => {\n interactiveEl.removeEventListener(\"focus\", handleFocusOrClick);\n interactiveEl.removeEventListener(\"click\", handleFocusOrClick);\n };\n }, [handleFocusOrClick]);\n\n const toolbarItemClassName = cx(styles[\"toolbar-item\"], className);\n const isHidden = isCollapseMode && !isIntersecting;\n\n return (\n <div\n ref={setRefCallback}\n className={toolbarItemClassName}\n style={{ visibility: isHidden ? \"hidden\" : \"visible\" }}\n aria-hidden={isHidden}\n {...{ inert: isHidden ? \"\" : undefined }}\n data-id={itemId}\n data-anv=\"toolbar-item\"\n >\n {children}\n </div>\n );\n};\n","import { createContext, useContext } from \"react\";\n\n/**\n * Context for denoting if the current item is rendered in the overflow menu\n */\ntype OverflowItemContextType = {\n /**\n * Whether the current item is rendered inside the overflow menu\n */\n isInOverflowMenu: boolean;\n};\n\n/**\n * Context for managing overflow menu state\n */\nexport const OverflowItemContext = createContext<OverflowItemContextType>({\n isInOverflowMenu: false,\n});\n\n/**\n * Hook for accessing overflow menu context\n * @returns OverflowItemContextType - The overflow menu context\n */\nexport const useOverFlowItemContext = () => useContext(OverflowItemContext);\n","import { forwardRef } from \"react\";\nimport ButtonToggle, {\n ButtonToggleProps,\n} from \"../../../components/ButtonToggle\";\nimport { WithAriaLabelEnforcement } from \"./types\";\nimport { DataTrackingId } from \"../../../types\";\nimport { useOverFlowItemContext } from \"./internal/ToolbarItemOverflowContext\";\nimport Tooltip from \"../../../components/Tooltip\";\nimport { ToolbarItemWrapper } from \"./internal/ToolbarItemWrapper\";\nimport { useTrackingId } from \"../../../hooks\";\nimport { useToolbarSize } from \"./internal/ToolbarContext\";\n\nimport cx from \"classnames\";\nimport styles from \"./Toolbar.module.scss\";\n\n/**\n * Base props for the ToolbarButtonToggle component\n * @extends Omit<ButtonToggleProps, \"aria-label\" | \"children\">\n */\ntype ToolbarButtonToggleBaseProps = Omit<\n ButtonToggleProps,\n \"aria-label\" | \"children\"\n> & {\n /**\n * Is this toolbar control a filter?\n */\n isFilter?: boolean;\n};\n\n/**\n * Props for the ToolbarButtonToggle component\n * @extends WithAriaLabelEnforcement<ToolbarButtonToggleBaseProps>\n */\nexport type ToolbarButtonToggleProps =\n WithAriaLabelEnforcement<ToolbarButtonToggleBaseProps> & DataTrackingId;\n\n/**\n * ToolbarButtonToggle component for toggleable actions within a toolbar.\n *\n * Features:\n * - Toggle state management (on/off)\n * - Designed specifically for toolbar integration\n * - Consistent styling with other toolbar items\n * - Automatic tooltip for icon-only toggles\n * - Overflow menu support\n * - Accessibility enforcement for aria-labels\n * - Visual feedback for toggle state\n * - Proper ARIA attributes for toggle semantics\n *\n * @example\n * <ToolbarButtonToggle icon={BoldIcon} aria-label=\"Bold\" checked={isBold} />\n *\n * @example\n * <ToolbarButtonToggle checked={isItalic}>\n * Italic\n * </ToolbarButtonToggle>\n */\nexport const ToolbarButtonToggle = forwardRef<\n HTMLButtonElement,\n ToolbarButtonToggleProps\n>((props, _ref) => {\n const { className, children, isFilter, ...rest } = props;\n\n // Checks if this component is rendered inside the overflow menu and fallbacks when the context is unavailable\n const { isInOverflowMenu = false } = useOverFlowItemContext?.() || {};\n const size = useToolbarSize();\n\n const trackingId = useTrackingId({\n name: \"ToolbarButtonToggle\",\n data: {\n checked: props.checked,\n disabled: props.disabled,\n \"aria-label\": props[\"aria-label\"],\n children: props.children,\n },\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const buttonToggleClassNames = cx(\n className,\n styles[\"toolbar-button-item\"],\n styles[\"toolbar-button-toggle-item\"],\n );\n\n const item = children ? (\n <ButtonToggle\n data-tracking-id={trackingId}\n size={size}\n data-anv=\"toolbar-button-toggle\"\n className={buttonToggleClassNames}\n {...rest}\n >\n {children}\n </ButtonToggle>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonToggle\n data-tracking-id={trackingId}\n size={size}\n data-anv=\"toolbar-button-toggle\"\n className={buttonToggleClassNames}\n {...rest}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{rest[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n );\n\n if (isInOverflowMenu || isFilter) {\n return item;\n }\n\n return (\n <ToolbarItemWrapper item={{ itemProps: props, itemType: \"buttonToggle\" }}>\n {item}\n </ToolbarItemWrapper>\n );\n});\n\nToolbarButtonToggle.displayName = \"ToolbarButtonToggle\";\n"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { Filter } from './internal/types';
|
|
3
|
-
/**
|
|
4
|
-
* Props for the FilterButton component
|
|
5
|
-
*/
|
|
6
|
-
interface FilterButtonProps {
|
|
7
|
-
/** Filter configuration object */
|
|
8
|
-
filter: Filter;
|
|
9
|
-
/** Optional child content for non-custom filter types */
|
|
10
|
-
children?: ReactNode;
|
|
11
|
-
/** Optional class name for the popover content */
|
|
12
|
-
className?: string;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* FilterButton component provides a popover interface for filter selection.
|
|
16
|
-
* Handles both controlled and uncontrolled filter updates.
|
|
17
|
-
* Built into FilterGroup for single-select, multi-select, date, and date range filter rendering.
|
|
18
|
-
*
|
|
19
|
-
* Features:
|
|
20
|
-
* - Maintains draft state for controlled filters
|
|
21
|
-
* - Updates immediately for uncontrolled filters
|
|
22
|
-
* - Provides Apply and Cancel actions in controlled mode
|
|
23
|
-
* - Supports keyboard navigation and accessibility
|
|
24
|
-
* - Renders custom, single-select, multi-select, date, and date range filter types
|
|
25
|
-
* - Integrates with FilterGroup context for state management
|
|
26
|
-
* - Displays appropriate icons for date-based filters
|
|
27
|
-
* - Shows formatted date values in button labels
|
|
28
|
-
*/
|
|
29
|
-
export declare const FilterButton: ({ filter, children, className, }: FilterButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
-
export {};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { MultiSelectFilter, SingleSelectFilter } from './internal/types';
|
|
2
|
-
/**
|
|
3
|
-
* Props for the FilterSelect component
|
|
4
|
-
*/
|
|
5
|
-
interface FilterSelectProps<Item extends {
|
|
6
|
-
id: string;
|
|
7
|
-
label: string;
|
|
8
|
-
}> {
|
|
9
|
-
/** The filter configuration object */
|
|
10
|
-
filter: SingleSelectFilter<Item> | MultiSelectFilter<Item>;
|
|
11
|
-
/** The current draft value for the filter */
|
|
12
|
-
draftValue: Item | Item[] | undefined;
|
|
13
|
-
/** Callback to update the draft value */
|
|
14
|
-
onDraftChange: (value: Item | Item[] | undefined) => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* FilterSelect component renders a Listbox or ListView for single or multi-select filters.
|
|
18
|
-
* Built into FilterButton and FilterDrawer for filter selection UI.
|
|
19
|
-
*
|
|
20
|
-
* Features:
|
|
21
|
-
* - Renders a Listbox for single select filters
|
|
22
|
-
* - Renders a ListView for multi select filters
|
|
23
|
-
* - Supports search field for filtering options
|
|
24
|
-
*/
|
|
25
|
-
export declare const FilterSelect: <Item extends {
|
|
26
|
-
id: string;
|
|
27
|
-
label: string;
|
|
28
|
-
}>({ filter, draftValue, onDraftChange, }: FilterSelectProps<Item>) => import("react/jsx-runtime").JSX.Element;
|
|
29
|
-
export {};
|