@servicetitan/anvil2 2.0.2 → 2.0.3
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 +20 -0
- package/dist/{Alert-DREZhnU9.js → Alert-DXoEusod.js} +4 -4
- package/dist/{Alert-DREZhnU9.js.map → Alert-DXoEusod.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{Announcement-CRaUI73J.js → Announcement-SAypScAu.js} +4 -4
- package/dist/{Announcement-CRaUI73J.js.map → Announcement-SAypScAu.js.map} +1 -1
- package/dist/Announcement.js +1 -1
- package/dist/{AnvilProvider-bEeSKwNj.js → AnvilProvider-C3pjoStP.js} +4 -4
- package/dist/{AnvilProvider-bEeSKwNj.js.map → AnvilProvider-C3pjoStP.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Avatar-DQN2dNgB.js → Avatar-COMPK7Ym.js} +2 -2
- package/dist/{Avatar-DQN2dNgB.js.map → Avatar-COMPK7Ym.js.map} +1 -1
- package/dist/{Avatar-B4RLfLCS.js → Avatar-DShevhcs.js} +2 -2
- package/dist/{Avatar-B4RLfLCS.js.map → Avatar-DShevhcs.js.map} +1 -1
- package/dist/Avatar.js +2 -2
- package/dist/{Badge-BrysDYfx.js → Badge-CS-CwcOQ.js} +2 -2
- package/dist/{Badge-BrysDYfx.js.map → Badge-CS-CwcOQ.js.map} +1 -1
- package/dist/Badge.js +1 -1
- package/dist/{Breadcrumbs-CsVxbt4N.js → Breadcrumbs-CEVH4s23.js} +5 -5
- package/dist/{Breadcrumbs-CsVxbt4N.js.map → Breadcrumbs-CEVH4s23.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Button-B__Q1BA5.js → Button-l7pTJdPc.js} +3 -3
- package/dist/{Button-B__Q1BA5.js.map → Button-l7pTJdPc.js.map} +1 -1
- package/dist/Button.js +1 -1
- package/dist/{ButtonCompound-BB_WRzP4.js → ButtonCompound-CX2kHgWe.js} +2 -2
- package/dist/{ButtonCompound-BB_WRzP4.js.map → ButtonCompound-CX2kHgWe.js.map} +1 -1
- package/dist/ButtonCompound.js +1 -1
- package/dist/{ButtonLink-Dy0nfK_C.js → ButtonLink-CRlyK750.js} +3 -3
- package/dist/{ButtonLink-Dy0nfK_C.js.map → ButtonLink-CRlyK750.js.map} +1 -1
- package/dist/ButtonLink.js +1 -1
- package/dist/{ButtonToggle-DVwe4l6m.js → ButtonToggle-BOVP_jEN.js} +3 -3
- package/dist/{ButtonToggle-DVwe4l6m.js.map → ButtonToggle-BOVP_jEN.js.map} +1 -1
- package/dist/ButtonToggle.js +1 -1
- package/dist/{Calendar-BO9QiBJG.js → Calendar-BTr5I3t-.js} +2 -2
- package/dist/{Calendar-BO9QiBJG.js.map → Calendar-BTr5I3t-.js.map} +1 -1
- package/dist/{Calendar-BFWJ7Rlq.js → Calendar-DUGQQkga.js} +5 -5
- package/dist/{Calendar-BFWJ7Rlq.js.map → Calendar-DUGQQkga.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Card-TovA8Io5.js → Card-DDH7gI8m.js} +2 -2
- package/dist/{Card-TovA8Io5.js.map → Card-DDH7gI8m.js.map} +1 -1
- package/dist/Card.js +1 -1
- package/dist/{Checkbox-BrIThtCS.js → Checkbox-9VbydUcM.js} +6 -6
- package/dist/{Checkbox-BrIThtCS.js.map → Checkbox-9VbydUcM.js.map} +1 -1
- package/dist/{Checkbox-Igz3R72o.js → Checkbox-ZXftLNwB.js} +2 -2
- package/dist/{Checkbox-Igz3R72o.js.map → Checkbox-ZXftLNwB.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-U9Ly2Ykq.js → Chip-Bc7jiIJ1.js} +4 -4
- package/dist/{Chip-U9Ly2Ykq.js.map → Chip-Bc7jiIJ1.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-OUK7p5gp.js → Combobox-CNObHLjp.js} +9 -9
- package/dist/{Combobox-OUK7p5gp.js.map → Combobox-CNObHLjp.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-BPJeSvOx.js → DataTable-CQpySyDq.js} +154 -29
- package/dist/DataTable-CQpySyDq.js.map +1 -0
- package/dist/{DateFieldRange-CanMYRgZ.js → DateFieldRange-Cfnw1Chk.js} +5 -5
- package/dist/{DateFieldRange-CanMYRgZ.js.map → DateFieldRange-Cfnw1Chk.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CShe2aHZ.js → DateFieldSingle-BRuERJAl.js} +5 -5
- package/dist/{DateFieldSingle-CShe2aHZ.js.map → DateFieldSingle-BRuERJAl.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-MBQ233Xa.js → DateFieldYearless-Dw1k3_PY.js} +5 -5
- package/dist/{DateFieldYearless-MBQ233Xa.js.map → DateFieldYearless-Dw1k3_PY.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-BBtaFzsE.js → DateFieldYearlessRange--plyld10.js} +6 -6
- package/dist/{DateFieldYearlessRange-BBtaFzsE.js.map → DateFieldYearlessRange--plyld10.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-DOsJyEdk.js → DaysOfTheWeek-vE310Rjp.js} +6 -6
- package/dist/{DaysOfTheWeek-DOsJyEdk.js.map → DaysOfTheWeek-vE310Rjp.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-D_Iil6qI.js → Details-BF0-a1by.js} +3 -3
- package/dist/{Details-D_Iil6qI.js.map → Details-BF0-a1by.js.map} +1 -1
- package/dist/Details.js +1 -1
- package/dist/{Dialog-3pjJJiED.js → Dialog-DZPaz84r.js} +7 -6
- package/dist/{Dialog-3pjJJiED.js.map → Dialog-DZPaz84r.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{DialogCancelButton-D0r_OFKS.js → DialogCancelButton-GuN5lgR-.js} +2 -2
- package/dist/{DialogCancelButton-D0r_OFKS.js.map → DialogCancelButton-GuN5lgR-.js.map} +1 -1
- package/dist/DialogContext-DBgtApl9.js.map +1 -1
- package/dist/{Divider-CJvAnDYV.js → Divider-De04mOU6.js} +2 -2
- package/dist/{Divider-CJvAnDYV.js.map → Divider-De04mOU6.js.map} +1 -1
- package/dist/Divider.js +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndSort.js +17 -7
- package/dist/DndSort.js.map +1 -1
- package/dist/{Drawer-BPPWM11Z.js → Drawer-pMQOa2jH.js} +9 -10
- package/dist/Drawer-pMQOa2jH.js.map +1 -0
- package/dist/Drawer.js +1 -1
- package/dist/DrawerContext-BSpnzXVZ.js +6 -0
- package/dist/DrawerContext-BSpnzXVZ.js.map +1 -0
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-DgHXddkx.js → EditCard-DAiE-Hsc.js} +6 -6
- package/dist/{EditCard-DgHXddkx.js.map → EditCard-DAiE-Hsc.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldDialog-NcMR2ATl.js → FieldDialog-Be54L3E-.js} +381 -18
- package/dist/FieldDialog-Be54L3E-.js.map +1 -0
- package/dist/FieldDialog.css +22 -5
- package/dist/{FieldLabel-EjKzPf0f.js → FieldLabel-DSrHbw9U.js} +3 -3
- package/dist/{FieldLabel-EjKzPf0f.js.map → FieldLabel-DSrHbw9U.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FieldMessage-CRNo4fd5.js → FieldMessage-tEr6rWXS.js} +2 -2
- package/dist/{FieldMessage-CRNo4fd5.js.map → FieldMessage-tEr6rWXS.js.map} +1 -1
- package/dist/FieldMessage.js +1 -1
- package/dist/{Flex-DKS51qTf.js → Flex-CUtXN-C0.js} +2 -2
- package/dist/{Flex-DKS51qTf.js.map → Flex-CUtXN-C0.js.map} +1 -1
- package/dist/Flex.js +1 -1
- package/dist/{Grid-BUmKiLhz.js → Grid-CatFkT0X.js} +2 -2
- package/dist/{Grid-BUmKiLhz.js.map → Grid-CatFkT0X.js.map} +1 -1
- package/dist/Grid.js +1 -1
- package/dist/{Helper-xZuAxaI0.js → Helper-CK-XjpR3.js} +2 -2
- package/dist/{Helper-xZuAxaI0.js.map → Helper-CK-XjpR3.js.map} +1 -1
- package/dist/{Icon-BckjFkbw.js → Icon-Bcil6aBo.js} +2 -2
- package/dist/{Icon-BckjFkbw.js.map → Icon-Bcil6aBo.js.map} +1 -1
- package/dist/Icon.js +1 -1
- package/dist/{InputMask-DS9TWqfO.js → InputMask-DoqWRi3t.js} +2 -2
- package/dist/{InputMask-DS9TWqfO.js.map → InputMask-DoqWRi3t.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{InteractiveCard-CvX95yR4.js → InteractiveCard-OszQGxGw.js} +2 -2
- package/dist/{InteractiveCard-CvX95yR4.js.map → InteractiveCard-OszQGxGw.js.map} +1 -1
- package/dist/InteractiveCard.js +1 -1
- package/dist/{Link-DT8scNJ-.js → Link-B3reiL5f.js} +3 -3
- package/dist/{Link-DT8scNJ-.js.map → Link-B3reiL5f.js.map} +1 -1
- package/dist/Link.js +1 -1
- package/dist/{LinkButton-BMce3lWm.js → LinkButton-D62f2os3.js} +2 -2
- package/dist/{LinkButton-BMce3lWm.js.map → LinkButton-D62f2os3.js.map} +1 -1
- package/dist/LinkButton.js +1 -1
- package/dist/{ListView-CRDUPrbQ.js → ListView-CtRhYAls.js} +3 -3
- package/dist/{ListView-CRDUPrbQ.js.map → ListView-CtRhYAls.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-BFT6SBf3.js → Listbox-DMyxIokT.js} +5 -5
- package/dist/{Listbox-BFT6SBf3.js.map → Listbox-DMyxIokT.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{LocalizationProvider-u6xdKCBi.js → LocalizationProvider-ay-XWdlo.js} +2 -2
- package/dist/{LocalizationProvider-u6xdKCBi.js.map → LocalizationProvider-ay-XWdlo.js.map} +1 -1
- package/dist/LocalizationProvider.js +1 -1
- package/dist/{Menu-Dh0q__vE.js → Menu-3LIfRdTk.js} +3 -3
- package/dist/{Menu-Dh0q__vE.js.map → Menu-3LIfRdTk.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-7nxS5Fdi.js → MultiSelectFieldSync-xj7jXas-.js} +120 -94
- package/dist/MultiSelectFieldSync-xj7jXas-.js.map +1 -0
- package/dist/{NumberField-Dmm1YQNn.js → NumberField-W1k8V5Qq.js} +6 -6
- package/dist/{NumberField-Dmm1YQNn.js.map → NumberField-W1k8V5Qq.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.js +2 -2
- package/dist/{Page-C5nExhiH.js → Page-vc7zs4tn.js} +16 -16
- package/dist/{Page-C5nExhiH.js.map → Page-vc7zs4tn.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Pagination-CimQTC7M.js → Pagination-DIatYUXX.js} +7 -7
- package/dist/{Pagination-CimQTC7M.js.map → Pagination-DIatYUXX.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-CJLSDpgR.js → Popover-OOLK0hUz.js} +2 -2
- package/dist/{Popover-CJLSDpgR.js.map → Popover-OOLK0hUz.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-CSkAu2F4.js → ProgressBar-HA9RPZfC.js} +6 -6
- package/dist/{ProgressBar-CSkAu2F4.js.map → ProgressBar-HA9RPZfC.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-CRv09Kbt.js → Radio-31wKzlZ4.js} +6 -6
- package/dist/{Radio-CRv09Kbt.js.map → Radio-31wKzlZ4.js.map} +1 -1
- package/dist/{Radio-D_8PAnkC.js → Radio-BwWDJuLF.js} +2 -2
- package/dist/{Radio-D_8PAnkC.js.map → Radio-BwWDJuLF.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SearchField-0DZvPwPZ.js → SearchField-CoeaOip5.js} +3 -3
- package/dist/{SearchField-0DZvPwPZ.js.map → SearchField-CoeaOip5.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SegmentedControl-CMBQf7uo.js → SegmentedControl-CzTtiYS9.js} +3 -3
- package/dist/{SegmentedControl-CMBQf7uo.js.map → SegmentedControl-CzTtiYS9.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-B9RLpwtX.js → SelectCard-C91twG1S.js} +5 -5
- package/dist/{SelectCard-B9RLpwtX.js.map → SelectCard-C91twG1S.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BsDUUM84.js → SelectFieldSync-BFsJssdD.js} +163 -96
- package/dist/SelectFieldSync-BFsJssdD.js.map +1 -0
- package/dist/{SelectTrigger-DVLdDbfd.js → SelectTrigger-Cxhx9IVo.js} +5 -5
- package/dist/{SelectTrigger-DVLdDbfd.js.map → SelectTrigger-Cxhx9IVo.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-B3vw_qnJ.js → SelectTriggerBase-aaOWep-V.js} +6 -6
- package/dist/{SelectTriggerBase-B3vw_qnJ.js.map → SelectTriggerBase-aaOWep-V.js.map} +1 -1
- package/dist/{SideNav-DzcESFKB.js → SideNav-CbMGsIPM.js} +3 -3
- package/dist/{SideNav-DzcESFKB.js.map → SideNav-CbMGsIPM.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/Skeleton.js +1 -1
- package/dist/{Stepper-DXL6Ikux.js → Stepper-Jv9A3Ned.js} +5 -5
- package/dist/{Stepper-DXL6Ikux.js.map → Stepper-Jv9A3Ned.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-CkZm45S3.js → Switch-DQICcdAv.js} +5 -5
- package/dist/{Switch-CkZm45S3.js.map → Switch-DQICcdAv.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/{Tab-8a1qCMFA.js → Tab-CeXt6A_D.js} +4 -4
- package/dist/{Tab-8a1qCMFA.js.map → Tab-CeXt6A_D.js.map} +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-rR4bxNLd.js → Text-DhheKsns.js} +2 -2
- package/dist/{Text-rR4bxNLd.js.map → Text-DhheKsns.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-Bm9ElAU1.js → TextField-CDiiYSlT.js} +4 -4
- package/dist/{TextField-Bm9ElAU1.js.map → TextField-CDiiYSlT.js.map} +1 -1
- package/dist/{TextField-B_ciNx06.js → TextField-CnYxS52Y.js} +2 -2
- package/dist/{TextField-B_ciNx06.js.map → TextField-CnYxS52Y.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-stXDixWH.js → Textarea-BnHIDj2P.js} +4 -4
- package/dist/{Textarea-stXDixWH.js.map → Textarea-BnHIDj2P.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-DyYBQz5m.js → ThemeProvider-BEt_iJgf.js} +5 -5
- package/dist/{ThemeProvider-DyYBQz5m.js.map → ThemeProvider-BEt_iJgf.js.map} +1 -1
- package/dist/ThemeProvider.css +14 -14
- package/dist/ThemeProvider.js +1 -1
- package/dist/{TimeField-BeaCSkdZ.js → TimeField-ChqK40k_.js} +6 -6
- package/dist/{TimeField-BeaCSkdZ.js.map → TimeField-ChqK40k_.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-99KNznN3.js → Toaster-BlycAc63.js} +15 -9
- package/dist/Toaster-BlycAc63.js.map +1 -0
- package/dist/{Toaster-Br0IeKtP.js → Toaster-DW_bi2L9.js} +2 -2
- package/dist/{Toaster-Br0IeKtP.js.map → Toaster-DW_bi2L9.js.map} +1 -1
- package/dist/{Toolbar-Cjo7eAhI.js → Toolbar-CUjj2YEZ.js} +20 -20
- package/dist/{Toolbar-Cjo7eAhI.js.map → Toolbar-CUjj2YEZ.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-CIsvQwWo.js → Tooltip-CUiAJXak.js} +2 -2
- package/dist/{Tooltip-CIsvQwWo.js.map → Tooltip-CUiAJXak.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-BVRZlf9Y.js → YearlessDateInputWithPicker-DZSb8sPf.js} +5 -5
- package/dist/{YearlessDateInputWithPicker-BVRZlf9Y.js.map → YearlessDateInputWithPicker-DZSb8sPf.js.map} +1 -1
- package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +3 -1
- package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -6
- package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +10 -1
- package/dist/beta/components/MultiSelectField/types.d.ts +34 -32
- package/dist/beta/components/SelectField/SelectFieldSync.d.ts +11 -1
- package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +27 -0
- package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +3 -1
- package/dist/beta/components/SelectField/internal/types.d.ts +16 -0
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +8 -3
- package/dist/beta/components/SelectField/internal/useGroupedOptions.d.ts +39 -0
- package/dist/beta/components/SelectField/internal/usePinnedOptions.d.ts +37 -0
- package/dist/beta/components/SelectField/types.d.ts +33 -10
- package/dist/beta/components/Table/columnTypeDefaults.d.ts +51 -0
- package/dist/beta/components/Table/createColumnHelper.d.ts +88 -26
- package/dist/beta/components/Table/index.d.ts +1 -0
- package/dist/beta/components/Table/types.d.ts +188 -19
- package/dist/beta/hooks/useAdaptiveView/index.d.ts +1 -0
- package/dist/beta.js +8 -8
- package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
- package/dist/components/Dialog/internal/DialogContext.d.ts +5 -0
- package/dist/components/DndSort/DndSort.d.ts +1 -0
- package/dist/components/Drawer/internal/DrawerContext.d.ts +5 -0
- package/dist/components/FieldLabel/FieldLabel.d.ts +3 -1
- package/dist/{index-DVtI3CrN.js → index-DFvIVS57.js} +3 -3
- package/dist/{index-DVtI3CrN.js.map → index-DFvIVS57.js.map} +1 -1
- package/dist/index.js +64 -64
- package/dist/{primitive-BByug0kD.js → primitive-C3RFDRA8.js} +11 -11
- package/dist/{primitive-BByug0kD.js.map → primitive-C3RFDRA8.js.map} +1 -1
- package/dist/token/core/primitive-variables.scss +10 -10
- package/dist/token/core/primitive.js +10 -10
- package/dist/token/core/primitive.scss +10 -10
- package/dist/token.js +1 -1
- package/dist/{useBreakpoint-BGCsBhQ7.js → useBreakpoint-BP3HZXmh.js} +2 -2
- package/dist/{useBreakpoint-BGCsBhQ7.js.map → useBreakpoint-BP3HZXmh.js.map} +1 -1
- package/dist/useBreakpoint.js +1 -1
- package/dist/{useDrilldown-pzr3387k.js → useDrilldown-lAdB3FFW.js} +4 -4
- package/dist/{useDrilldown-pzr3387k.js.map → useDrilldown-lAdB3FFW.js.map} +1 -1
- package/dist/{useInitialFocus-DfFGsgjO.js → useInitialFocus-nOW12jQ5.js} +20 -17
- package/dist/useInitialFocus-nOW12jQ5.js.map +1 -0
- package/dist/{useLayoutPropsUtil-BlIWftBb.js → useLayoutPropsUtil-loxbyklF.js} +3 -3
- package/dist/{useLayoutPropsUtil-BlIWftBb.js.map → useLayoutPropsUtil-loxbyklF.js.map} +1 -1
- package/package.json +5 -5
- package/dist/DataTable-BPJeSvOx.js.map +0 -1
- package/dist/Drawer-BPPWM11Z.js.map +0 -1
- package/dist/FieldDialog-NcMR2ATl.js.map +0 -1
- package/dist/MultiSelectFieldSync-7nxS5Fdi.js.map +0 -1
- package/dist/SelectFieldSync-BsDUUM84.js.map +0 -1
- package/dist/Toaster-99KNznN3.js.map +0 -1
- package/dist/useInitialFocus-DfFGsgjO.js.map +0 -1
- /package/dist/beta/hooks/{useAdaptiveView.d.ts → useAdaptiveView/useAdaptiveView.d.ts} +0 -0
|
@@ -1,72 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { u as useDownshiftEnvironment, a as useCombobox, m as matchSorter } from './match-sorter.esm-B3vwg1-X.js';
|
|
3
|
-
import { useMemo, forwardRef,
|
|
4
|
-
import { S as
|
|
5
|
-
import {
|
|
6
|
-
import { s as styles, S as SelectFieldListItem, I as InView, u as useAdaptiveView, D as DEFAULT_PAGE_SIZE, a as useSelectFieldLoading, b as useDebouncedCallback, c as SelectFieldLabel, F as FieldDialog, d as FieldPopover } from './FieldDialog-NcMR2ATl.js';
|
|
3
|
+
import { useCallback, useState, useMemo, forwardRef, useRef, useId, useImperativeHandle, useEffect } from 'react';
|
|
4
|
+
import { F as FieldListBase, a as usePinnedOptions, b as useGroupedOptions, s as sortGroupSections, u as useAdaptiveView, D as DEFAULT_PAGE_SIZE, c as useSelectFieldLoading, d as useDebouncedCallback, S as SelectFieldLabel, e as FieldDialog, f as FieldPopover } from './FieldDialog-Be54L3E-.js';
|
|
5
|
+
import { s as styles } from './SelectTriggerBase.module-B0NFRlQP.js';
|
|
7
6
|
import { c as cx } from './index-SvGbrGuT.js';
|
|
8
|
-
import {
|
|
9
|
-
import { S as SrOnly } from './SrOnly-CrdBTl6E.js';
|
|
10
|
-
import { s as styles$1 } from './SelectTriggerBase.module-B0NFRlQP.js';
|
|
7
|
+
import { B as Button } from './Button-l7pTJdPc.js';
|
|
11
8
|
import { S as SvgChevronRight } from './chevron_right-BdpsxX7x.js';
|
|
12
9
|
import { S as SvgClose } from './close-DZj38AEh.js';
|
|
13
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
14
|
-
import { F as FieldMessage } from './FieldMessage-
|
|
10
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-loxbyklF.js';
|
|
11
|
+
import { F as FieldMessage } from './FieldMessage-tEr6rWXS.js';
|
|
15
12
|
|
|
16
13
|
const SelectFieldList = ({
|
|
17
|
-
isOpen,
|
|
18
|
-
items,
|
|
19
|
-
getMenuProps,
|
|
20
|
-
getItemProps,
|
|
21
|
-
highlightedIndex,
|
|
22
14
|
selectedOption,
|
|
23
|
-
|
|
24
|
-
onLoadMore,
|
|
25
|
-
loading,
|
|
26
|
-
loadingMore,
|
|
27
|
-
disableAutoLoadMore,
|
|
28
|
-
disabled,
|
|
29
|
-
className,
|
|
30
|
-
style
|
|
15
|
+
...rest
|
|
31
16
|
}) => {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"div",
|
|
17
|
+
const getCheckedState = useCallback(
|
|
18
|
+
(item) => selectedOption?.id === item.original.id ? "checked" : "unchecked",
|
|
19
|
+
[selectedOption]
|
|
20
|
+
);
|
|
21
|
+
return /* @__PURE__ */ jsx(
|
|
22
|
+
FieldListBase,
|
|
39
23
|
{
|
|
40
|
-
...
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}),
|
|
44
|
-
children: [
|
|
45
|
-
/* @__PURE__ */ jsx("ul", { className: cx(styles["select-field-list"]), children: isOpen && /* @__PURE__ */ jsx(Fragment, { children: loading ? /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Spinner, { size: "medium" }) }) : items.length > 0 ? items.map((item, index) => /* @__PURE__ */ jsx(
|
|
46
|
-
SelectFieldListItem,
|
|
47
|
-
{
|
|
48
|
-
item,
|
|
49
|
-
index,
|
|
50
|
-
getItemProps,
|
|
51
|
-
selectionType: "single",
|
|
52
|
-
checked: selectedOption?.id === item.original.id ? "checked" : "unchecked",
|
|
53
|
-
highlighted: highlightedIndex === index,
|
|
54
|
-
disabled: (disabled || item.disabled) ?? false
|
|
55
|
-
},
|
|
56
|
-
item.id
|
|
57
|
-
)) : /* @__PURE__ */ jsx("div", { className: styles["empty"], children: /* @__PURE__ */ jsx(Text, { subdued: true, size: "small", children: "No match found" }) }) }) }),
|
|
58
|
-
loadingMore ? /* @__PURE__ */ jsxs("div", { className: styles["load-more"], children: [
|
|
59
|
-
/* @__PURE__ */ jsx(Spinner, { size: "small" }),
|
|
60
|
-
/* @__PURE__ */ jsx(SrOnly, { children: "Loading more..." })
|
|
61
|
-
] }) : hasMore && !loading ? /* @__PURE__ */ jsx(
|
|
62
|
-
InView,
|
|
63
|
-
{
|
|
64
|
-
onVisibilityChange: handleLoaderVisibilityChange,
|
|
65
|
-
rootMargin: "0px 0px -100px 0px",
|
|
66
|
-
children: /* @__PURE__ */ jsx("div", { className: styles["load-more"], children: /* @__PURE__ */ jsx(Button, { appearance: "secondary", size: "small", onClick: onLoadMore, children: "Load more" }) })
|
|
67
|
-
}
|
|
68
|
-
) : null
|
|
69
|
-
]
|
|
24
|
+
...rest,
|
|
25
|
+
selectionType: "single",
|
|
26
|
+
getCheckedState
|
|
70
27
|
}
|
|
71
28
|
);
|
|
72
29
|
};
|
|
@@ -90,12 +47,12 @@ const SelectFieldInput = ({
|
|
|
90
47
|
prefix,
|
|
91
48
|
suffix
|
|
92
49
|
}) => {
|
|
93
|
-
const inputWrapperClassNames = cx(styles
|
|
94
|
-
[styles
|
|
95
|
-
[styles
|
|
96
|
-
[styles
|
|
97
|
-
[styles
|
|
98
|
-
[styles
|
|
50
|
+
const inputWrapperClassNames = cx(styles["input-wrapper"], {
|
|
51
|
+
[styles["small"]]: size === "small",
|
|
52
|
+
[styles["large"]]: size === "large",
|
|
53
|
+
[styles["no-clear-button"]]: disableClearButton,
|
|
54
|
+
[styles["no-toggle-button"]]: disableToggleButton,
|
|
55
|
+
[styles["disabled"]]: disabled || readOnly
|
|
99
56
|
});
|
|
100
57
|
return /* @__PURE__ */ jsxs(
|
|
101
58
|
"div",
|
|
@@ -104,7 +61,7 @@ const SelectFieldInput = ({
|
|
|
104
61
|
...htmlInputWrapperProps,
|
|
105
62
|
className: cx(inputWrapperClassNames, htmlInputWrapperProps?.className),
|
|
106
63
|
children: [
|
|
107
|
-
prefix ? /* @__PURE__ */ jsx("div", { className: styles
|
|
64
|
+
prefix ? /* @__PURE__ */ jsx("div", { className: styles["prefix"], children: prefix }) : null,
|
|
108
65
|
/* @__PURE__ */ jsx(
|
|
109
66
|
"input",
|
|
110
67
|
{
|
|
@@ -114,27 +71,27 @@ const SelectFieldInput = ({
|
|
|
114
71
|
readOnly,
|
|
115
72
|
required,
|
|
116
73
|
...inputProps,
|
|
117
|
-
className: cx(styles
|
|
118
|
-
[styles
|
|
74
|
+
className: cx(styles["input"], inputProps?.className, {
|
|
75
|
+
[styles["error"]]: error
|
|
119
76
|
})
|
|
120
77
|
}
|
|
121
78
|
),
|
|
122
|
-
suffix ? /* @__PURE__ */ jsx("div", { className: styles
|
|
123
|
-
/* @__PURE__ */ jsxs("div", { className: styles
|
|
124
|
-
disableClearButton ? null : /* @__PURE__ */ jsx("div", { className: styles
|
|
79
|
+
suffix ? /* @__PURE__ */ jsx("div", { className: styles["suffix"], children: suffix }) : null,
|
|
80
|
+
/* @__PURE__ */ jsxs("div", { className: styles["buttons-wrapper"], children: [
|
|
81
|
+
disableClearButton ? null : /* @__PURE__ */ jsx("div", { className: styles["close-button-wrapper"], children: /* @__PURE__ */ jsx(
|
|
125
82
|
Button,
|
|
126
83
|
{
|
|
127
84
|
icon: SvgClose,
|
|
128
85
|
"aria-label": "clear selection",
|
|
129
86
|
appearance: "ghost",
|
|
130
87
|
size: "small",
|
|
131
|
-
className: styles
|
|
88
|
+
className: styles["close-button"],
|
|
132
89
|
onClick: () => {
|
|
133
90
|
onClear?.();
|
|
134
91
|
}
|
|
135
92
|
}
|
|
136
93
|
) }),
|
|
137
|
-
disableToggleButton ? null : /* @__PURE__ */ jsx("div", { className: styles
|
|
94
|
+
disableToggleButton ? null : /* @__PURE__ */ jsx("div", { className: styles["toggle-button-wrapper"], children: /* @__PURE__ */ jsx(
|
|
138
95
|
Button,
|
|
139
96
|
{
|
|
140
97
|
icon: SvgChevronRight,
|
|
@@ -144,7 +101,7 @@ const SelectFieldInput = ({
|
|
|
144
101
|
disabled,
|
|
145
102
|
...toggleButtonProps,
|
|
146
103
|
className: cx(
|
|
147
|
-
styles
|
|
104
|
+
styles["toggle-button"],
|
|
148
105
|
toggleButtonProps?.className
|
|
149
106
|
)
|
|
150
107
|
}
|
|
@@ -158,7 +115,9 @@ SelectFieldInput.displayName = "SelectFieldInput";
|
|
|
158
115
|
|
|
159
116
|
const useCombo = ({
|
|
160
117
|
options,
|
|
161
|
-
|
|
118
|
+
pinned,
|
|
119
|
+
groupToString,
|
|
120
|
+
groupSorter,
|
|
162
121
|
selectAll,
|
|
163
122
|
selectedOption,
|
|
164
123
|
onSelectedOptionChange,
|
|
@@ -168,19 +127,78 @@ const useCombo = ({
|
|
|
168
127
|
disableHighlightOnOpen = false,
|
|
169
128
|
disabled
|
|
170
129
|
}) => {
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
130
|
+
const [inputValue, setInputValue] = useState(selectedOption?.label ?? "");
|
|
131
|
+
const effectiveSearchValue = selectedOption?.label === inputValue ? "" : inputValue;
|
|
132
|
+
const { pinnedSections } = usePinnedOptions(pinned, effectiveSearchValue);
|
|
133
|
+
const { ungroupedItems, groupSections: rawGroupSections } = useGroupedOptions(
|
|
134
|
+
options,
|
|
135
|
+
groupToString
|
|
136
|
+
);
|
|
137
|
+
const groupSections = useMemo(() => {
|
|
138
|
+
if (groupSorter && rawGroupSections.length > 0) {
|
|
139
|
+
return sortGroupSections(rawGroupSections, groupSorter);
|
|
140
|
+
}
|
|
141
|
+
return rawGroupSections;
|
|
142
|
+
}, [rawGroupSections, groupSorter]);
|
|
143
|
+
const { downshiftItems, sectionsMeta } = useMemo(() => {
|
|
144
|
+
const items = [];
|
|
145
|
+
const meta = [];
|
|
146
|
+
pinnedSections.forEach((section) => {
|
|
147
|
+
const startIndex = items.length;
|
|
148
|
+
section.options.forEach((option) => {
|
|
149
|
+
items.push({
|
|
150
|
+
id: option.id + "-pinned",
|
|
151
|
+
type: "pinned-option",
|
|
152
|
+
original: option,
|
|
153
|
+
disabled: option.disabled ?? false
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
const endIndex = items.length;
|
|
157
|
+
if (endIndex > startIndex || section.loading) {
|
|
158
|
+
meta.push({
|
|
159
|
+
type: "pinned",
|
|
160
|
+
label: section.label,
|
|
161
|
+
startIndex,
|
|
162
|
+
endIndex,
|
|
163
|
+
loading: section.loading
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
groupSections.forEach((section) => {
|
|
168
|
+
const startIndex = items.length;
|
|
169
|
+
section.options.forEach((option) => {
|
|
170
|
+
items.push({
|
|
171
|
+
id: option.id,
|
|
172
|
+
type: "grouped-option",
|
|
173
|
+
original: option,
|
|
174
|
+
disabled: option.disabled ?? false
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
const endIndex = items.length;
|
|
178
|
+
if (endIndex > startIndex) {
|
|
179
|
+
meta.push({
|
|
180
|
+
type: "group",
|
|
181
|
+
label: section.label,
|
|
182
|
+
startIndex,
|
|
183
|
+
endIndex
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
items.push(...ungroupedItems);
|
|
175
188
|
if (selectAll) {
|
|
189
|
+
meta.forEach((m) => {
|
|
190
|
+
m.startIndex += 1;
|
|
191
|
+
m.endIndex += 1;
|
|
192
|
+
});
|
|
176
193
|
items.unshift({
|
|
177
194
|
id: "select-all",
|
|
178
195
|
type: "select-all",
|
|
179
|
-
original: { id: "select-all", label: selectAll.label ?? "Select All" }
|
|
196
|
+
original: { id: "select-all", label: selectAll.label ?? "Select All" },
|
|
197
|
+
disabled: false
|
|
180
198
|
});
|
|
181
199
|
}
|
|
182
|
-
return items;
|
|
183
|
-
}, [
|
|
200
|
+
return { downshiftItems: items, sectionsMeta: meta };
|
|
201
|
+
}, [pinnedSections, groupSections, ungroupedItems, selectAll]);
|
|
184
202
|
const selectedDownshiftItem = useMemo(() => {
|
|
185
203
|
return selectedOption ? mapOptionToDownshiftItem(selectedOption) : null;
|
|
186
204
|
}, [selectedOption]);
|
|
@@ -193,7 +211,6 @@ const useCombo = ({
|
|
|
193
211
|
getMenuProps,
|
|
194
212
|
getInputProps,
|
|
195
213
|
getItemProps,
|
|
196
|
-
inputValue,
|
|
197
214
|
closeMenu,
|
|
198
215
|
openMenu,
|
|
199
216
|
setHighlightedIndex
|
|
@@ -206,21 +223,26 @@ const useCombo = ({
|
|
|
206
223
|
},
|
|
207
224
|
environment,
|
|
208
225
|
selectedItem: selectedDownshiftItem,
|
|
226
|
+
inputValue,
|
|
227
|
+
// Controlled input value
|
|
209
228
|
onSelectedItemChange: ({
|
|
210
229
|
selectedItem: si
|
|
211
230
|
}) => {
|
|
212
|
-
if (si && si.type === "option") {
|
|
231
|
+
if (si && (si.type === "option" || si.type === "pinned-option" || si.type === "grouped-option")) {
|
|
213
232
|
onSelectedOptionChange(si.original);
|
|
214
233
|
} else {
|
|
215
234
|
onSelectedOptionChange(null);
|
|
216
235
|
}
|
|
217
236
|
},
|
|
218
|
-
onInputValueChange
|
|
237
|
+
onInputValueChange: (changes) => {
|
|
238
|
+
setInputValue(changes.inputValue ?? "");
|
|
239
|
+
onInputValueChange?.(changes);
|
|
240
|
+
},
|
|
219
241
|
onIsOpenChange: (changes) => {
|
|
220
242
|
onIsOpenChange?.(changes);
|
|
221
243
|
if (changes.isOpen && !disableHighlightOnOpen) {
|
|
222
244
|
const selectedItemIndex = downshiftItems.findIndex(
|
|
223
|
-
(item) => item.id ===
|
|
245
|
+
(item) => item.original.id === selectedOption?.id
|
|
224
246
|
);
|
|
225
247
|
setHighlightedIndex(selectedItemIndex);
|
|
226
248
|
}
|
|
@@ -242,6 +264,7 @@ const useCombo = ({
|
|
|
242
264
|
highlightedIndex,
|
|
243
265
|
isOpen,
|
|
244
266
|
downshiftItems,
|
|
267
|
+
sectionsMeta,
|
|
245
268
|
closeMenu,
|
|
246
269
|
openMenu
|
|
247
270
|
};
|
|
@@ -321,8 +344,11 @@ const SelectField = forwardRef(
|
|
|
321
344
|
prefix,
|
|
322
345
|
suffix,
|
|
323
346
|
className,
|
|
324
|
-
style
|
|
347
|
+
style,
|
|
348
|
+
pinned
|
|
325
349
|
} = componentProps;
|
|
350
|
+
const groupToString = "groupToString" in componentProps ? componentProps.groupToString : void 0;
|
|
351
|
+
const groupSorter = "groupSorter" in componentProps ? componentProps.groupSorter : void 0;
|
|
326
352
|
const autoId = useId();
|
|
327
353
|
const id = idProp ?? autoId;
|
|
328
354
|
const helperUid = useId();
|
|
@@ -415,12 +441,15 @@ const SelectField = forwardRef(
|
|
|
415
441
|
getItemProps,
|
|
416
442
|
inputValue,
|
|
417
443
|
downshiftItems,
|
|
418
|
-
closeMenu
|
|
444
|
+
closeMenu,
|
|
445
|
+
sectionsMeta
|
|
419
446
|
} = useCombo({
|
|
420
447
|
displayAs,
|
|
421
448
|
disabled: isDisabledOrReadOnly,
|
|
422
449
|
options,
|
|
423
|
-
|
|
450
|
+
pinned,
|
|
451
|
+
groupToString,
|
|
452
|
+
groupSorter,
|
|
424
453
|
selectedOption,
|
|
425
454
|
onSelectedOptionChange: (selectedOption2) => {
|
|
426
455
|
onSelectedOptionChange(selectedOption2);
|
|
@@ -434,7 +463,7 @@ const SelectField = forwardRef(
|
|
|
434
463
|
}
|
|
435
464
|
},
|
|
436
465
|
onInputValueChange: ({ inputValue: iv }) => {
|
|
437
|
-
debouncedOptionLoader(iv);
|
|
466
|
+
debouncedOptionLoader(iv ?? "");
|
|
438
467
|
}
|
|
439
468
|
});
|
|
440
469
|
useEffect(() => {
|
|
@@ -462,7 +491,7 @@ const SelectField = forwardRef(
|
|
|
462
491
|
return /* @__PURE__ */ jsxs(
|
|
463
492
|
"div",
|
|
464
493
|
{
|
|
465
|
-
className: className ? `${styles
|
|
494
|
+
className: className ? `${styles["search-field"]} ${className}` : styles["search-field"],
|
|
466
495
|
style: { ...layoutStyles, ...style },
|
|
467
496
|
ref: wrapperDivRef,
|
|
468
497
|
children: [
|
|
@@ -543,6 +572,7 @@ const SelectField = forwardRef(
|
|
|
543
572
|
{
|
|
544
573
|
isOpen: true,
|
|
545
574
|
items: downshiftItems,
|
|
575
|
+
sectionsMeta,
|
|
546
576
|
getMenuProps,
|
|
547
577
|
getItemProps,
|
|
548
578
|
highlightedIndex,
|
|
@@ -567,7 +597,7 @@ const SelectField = forwardRef(
|
|
|
567
597
|
return /* @__PURE__ */ jsxs(
|
|
568
598
|
"div",
|
|
569
599
|
{
|
|
570
|
-
className: className ? `${styles
|
|
600
|
+
className: className ? `${styles["search-field"]} ${className}` : styles["search-field"],
|
|
571
601
|
style: { ...layoutStyles, ...style },
|
|
572
602
|
children: [
|
|
573
603
|
/* @__PURE__ */ jsx(
|
|
@@ -629,6 +659,7 @@ const SelectField = forwardRef(
|
|
|
629
659
|
{
|
|
630
660
|
isOpen,
|
|
631
661
|
items: downshiftItems,
|
|
662
|
+
sectionsMeta,
|
|
632
663
|
getMenuProps,
|
|
633
664
|
getItemProps,
|
|
634
665
|
highlightedIndex,
|
|
@@ -657,18 +688,54 @@ const defaultFilter = (options, searchValue) => {
|
|
|
657
688
|
keys: ["label", "searchText"]
|
|
658
689
|
});
|
|
659
690
|
};
|
|
691
|
+
const sortByGroup = (options, groupSorter) => {
|
|
692
|
+
const groupOrder = /* @__PURE__ */ new Map();
|
|
693
|
+
const uniqueGroups = [];
|
|
694
|
+
options.forEach((opt) => {
|
|
695
|
+
if (!groupOrder.has(opt.group)) {
|
|
696
|
+
groupOrder.set(opt.group, uniqueGroups.length);
|
|
697
|
+
uniqueGroups.push(opt.group);
|
|
698
|
+
}
|
|
699
|
+
});
|
|
700
|
+
uniqueGroups.sort((a, b) => {
|
|
701
|
+
if (a === void 0 && b === void 0) return 0;
|
|
702
|
+
if (a === void 0) return 1;
|
|
703
|
+
if (b === void 0) return -1;
|
|
704
|
+
return groupSorter(a, b);
|
|
705
|
+
});
|
|
706
|
+
uniqueGroups.forEach((group, index) => {
|
|
707
|
+
groupOrder.set(group, index);
|
|
708
|
+
});
|
|
709
|
+
return [...options].sort((a, b) => {
|
|
710
|
+
const orderA = groupOrder.get(a.group) ?? Infinity;
|
|
711
|
+
const orderB = groupOrder.get(b.group) ?? Infinity;
|
|
712
|
+
return orderA - orderB;
|
|
713
|
+
});
|
|
714
|
+
};
|
|
660
715
|
const SelectFieldSync = (props) => {
|
|
661
|
-
const {
|
|
716
|
+
const {
|
|
717
|
+
options,
|
|
718
|
+
filter: filterProp = defaultFilter,
|
|
719
|
+
groupSorter,
|
|
720
|
+
...rest
|
|
721
|
+
} = props;
|
|
662
722
|
const filter = typeof filterProp === "function" ? filterProp : (options2, searchValue) => matchSorter(
|
|
663
723
|
options2,
|
|
664
724
|
searchValue,
|
|
665
725
|
filterProp
|
|
666
726
|
);
|
|
727
|
+
const loadOptions = (searchValue) => {
|
|
728
|
+
const filtered = filter(options, searchValue);
|
|
729
|
+
if (groupSorter) {
|
|
730
|
+
return sortByGroup(filtered, groupSorter);
|
|
731
|
+
}
|
|
732
|
+
return filtered;
|
|
733
|
+
};
|
|
667
734
|
return /* @__PURE__ */ jsx(
|
|
668
735
|
SelectField,
|
|
669
736
|
{
|
|
670
737
|
lazy: false,
|
|
671
|
-
loadOptions
|
|
738
|
+
loadOptions,
|
|
672
739
|
debounceMs: 0,
|
|
673
740
|
...rest
|
|
674
741
|
}
|
|
@@ -676,4 +743,4 @@ const SelectFieldSync = (props) => {
|
|
|
676
743
|
};
|
|
677
744
|
|
|
678
745
|
export { SelectField as S, SelectFieldSync as a };
|
|
679
|
-
//# sourceMappingURL=SelectFieldSync-
|
|
746
|
+
//# sourceMappingURL=SelectFieldSync-BFsJssdD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectFieldSync-BFsJssdD.js","sources":["../src/beta/components/SelectField/internal/SelectFieldList.tsx","../src/beta/components/SelectField/internal/SelectFieldInput.tsx","../src/beta/components/SelectField/internal/useCombo.tsx","../src/beta/components/SelectField/SelectField.tsx","../src/beta/components/SelectField/SelectFieldSync.tsx"],"sourcesContent":["import { SelectFieldDownshiftItem, SelectFieldOption } from \"../types\";\nimport { UseComboboxPropGetters } from \"downshift\";\nimport { CSSProperties, useCallback } from \"react\";\nimport { CheckState } from \"../../../../types\";\nimport { FieldListBase } from \"./FieldListBase\";\nimport { SectionMeta } from \"./types\";\n\ntype GetMenuProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getMenuProps\"];\ntype GetItemProps =\n UseComboboxPropGetters<SelectFieldDownshiftItem>[\"getItemProps\"];\n\nexport type SelectFieldListProps = {\n isOpen: boolean;\n items: SelectFieldDownshiftItem[];\n getMenuProps: GetMenuProps;\n getItemProps: GetItemProps;\n highlightedIndex: number;\n selectedOption: SelectFieldOption | null;\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n};\n\nexport const SelectFieldList = ({\n selectedOption,\n ...rest\n}: SelectFieldListProps) => {\n const getCheckedState = useCallback(\n (item: SelectFieldDownshiftItem): CheckState =>\n selectedOption?.id === item.original.id ? \"checked\" : \"unchecked\",\n [selectedOption],\n );\n\n return (\n <FieldListBase\n {...rest}\n selectionType=\"single\"\n getCheckedState={getCheckedState}\n />\n );\n};\n\nSelectFieldList.displayName = \"SelectFieldList\";\n","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 {string} [popoverTarget] - Target identifier for popover association\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 popoverTarget?: 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 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 SelectFieldDownshiftItem,\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport { useMemo, useState } from \"react\";\nimport { usePinnedOptions } from \"./usePinnedOptions\";\nimport { sortGroupSections, useGroupedOptions } from \"./useGroupedOptions\";\nimport { SectionMeta } from \"./types\";\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 selectAll?: {\n label: string;\n onClick: () => void;\n };\n selectedOption: SelectFieldOption | null;\n onSelectedOptionChange: (option: SelectFieldOption | null) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n} & Pick<\n UseComboboxProps<SelectFieldDownshiftItem>,\n \"onInputValueChange\" | \"onIsOpenChange\"\n>;\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 selectAll,\n selectedOption,\n onSelectedOptionChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\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 // Load pinned options based on current search value\n const { pinnedSections } = usePinnedOptions(pinned, effectiveSearchValue);\n\n // Process options for grouping\n const { ungroupedItems, groupSections: rawGroupSections } = useGroupedOptions(\n options,\n groupToString,\n );\n\n // Apply custom group sorting if provided\n const groupSections = useMemo(() => {\n if (groupSorter && rawGroupSections.length > 0) {\n return sortGroupSections(rawGroupSections, groupSorter);\n }\n return rawGroupSections;\n }, [rawGroupSections, groupSorter]);\n\n // Build all items and combined section metadata\n // Order: pinned sections -> group sections -> flat items\n const { downshiftItems, sectionsMeta } = useMemo(() => {\n const items: SelectFieldDownshiftItem[] = [];\n const meta: SectionMeta[] = [];\n\n // 1. Add pinned sections\n pinnedSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id + \"-pinned\",\n type: \"pinned-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n // Always add metadata for pinned sections (even while loading with 0 items)\n if (endIndex > startIndex || section.loading) {\n meta.push({\n type: \"pinned\",\n label: section.label,\n startIndex,\n endIndex,\n loading: section.loading,\n });\n }\n });\n\n // 2. Add group sections (with their items)\n groupSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n // Only add metadata if the section has options\n if (endIndex > startIndex) {\n meta.push({\n type: \"group\",\n label: section.label,\n startIndex,\n endIndex,\n });\n }\n });\n\n // 3. Add ungrouped items (flat)\n items.push(...ungroupedItems);\n\n // Add the select all option to the top of the list if it is provided\n if (selectAll) {\n // Shift all section indices by 1 to account for select-all\n meta.forEach((m) => {\n m.startIndex += 1;\n m.endIndex += 1;\n });\n\n items.unshift({\n id: \"select-all\",\n type: \"select-all\",\n original: { id: \"select-all\", label: selectAll.label ?? \"Select All\" },\n disabled: false,\n });\n }\n\n return { downshiftItems: items, sectionsMeta: meta };\n }, [pinnedSections, groupSections, ungroupedItems, selectAll]);\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? mapOptionToDownshiftItem(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: SelectFieldDownshiftItem;\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 onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = downshiftItems.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\n items: downshiftItems,\n itemToString(item: SelectFieldDownshiftItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n });\n\n return {\n inputValue,\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n downshiftItems,\n sectionsMeta,\n closeMenu,\n openMenu,\n };\n};\n\nfunction mapOptionToDownshiftItem(\n option: SelectFieldOption,\n): SelectFieldDownshiftItem {\n return {\n id: option.id,\n type: \"option\",\n disabled: option.disabled ?? false,\n original: option,\n };\n}\n\nfunction stateReducer(\n state: UseComboboxState<SelectFieldDownshiftItem>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectFieldDownshiftItem>,\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 { SelectFieldHandle, SelectFieldProps } from \"./types\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState,\n useId,\n useRef,\n} from \"react\";\nimport { SelectFieldList } from \"./internal/SelectFieldList\";\nimport { SelectFieldInput } from \"./internal/SelectFieldInput\";\nimport { SelectFieldLabel } from \"./internal/SelectFieldLabel\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks/useLayoutPropsUtil\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport {\n useSelectFieldLoading,\n DEFAULT_PAGE_SIZE,\n} from \"../../../internal/hooks/useSelectFieldLoading\";\nimport styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useCombo } from \"./internal/useCombo\";\nimport { FieldPopover } from \"./internal/FieldPopover/FieldPopover\";\nimport { useAdaptiveView } from \"../../hooks/useAdaptiveView\";\nimport { FieldDialog } from \"./internal/FieldDialog/FieldDialog\";\nimport { FieldMessage } from \"../../../components\";\n\nexport const SelectField = forwardRef<SelectFieldHandle, SelectFieldProps>(\n (propsWithLayout, ref) => {\n const { layoutStyles, componentProps: componentProps } =\n useLayoutPropsUtil(propsWithLayout);\n const [initialLoadPerformed, setInitialLoadPerformed] = useState(false);\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp = \"auto\",\n displayMenuAs: displayMenuAsProp = \"auto\",\n lazy,\n loadOptions: loadOptionsProp,\n label,\n labelNode,\n hideLabel,\n placeholder,\n disableClearButton: disableClearButtonProp = false,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n size,\n error,\n hint,\n description,\n errorAriaLive: errorAriaLiveProp = \"assertive\",\n required,\n disabled,\n readOnly,\n prefix,\n suffix,\n className,\n style,\n pinned,\n } = componentProps;\n\n // Extract groupToString if available (only on lazy: \"group\" or eager mode)\n const groupToString =\n \"groupToString\" in componentProps\n ? componentProps.groupToString\n : undefined;\n\n // Extract groupSorter if available (only on lazy: \"group\" or eager mode)\n const groupSorter =\n \"groupSorter\" in componentProps ? componentProps.groupSorter : undefined;\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n\n const [shouldAriaLive, setShouldAriaLive] = useState(false);\n\n const handleFocus = () => {\n setShouldAriaLive(true);\n };\n const handleBlur = () => {\n // console.log(\"handleBlur\");\n setShouldAriaLive(false);\n };\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n const hasHelperText = hint || errorMessage || description;\n const isDisabledOrReadOnly = (disabled || readOnly) ?? false;\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const initialLoad =\n initialLoadProp === \"auto\" ? \"immediate\" : initialLoadProp;\n\n const pageSize =\n lazy === \"page\" && \"lazyOptions\" in componentProps\n ? (componentProps.lazyOptions?.pageSize ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\" && \"lazyOptions\" in componentProps\n ? (componentProps.lazyOptions?.limit ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n\n const loadingHookConfig = useMemo(() => {\n const cacheConfig = {\n enabled: cache?.enabled,\n maxSize: cache?.maxSize,\n };\n if (lazy === \"page\")\n return {\n lazy: \"page\" as const,\n loadOptions: loadOptionsProp,\n pageSize,\n cache: cacheConfig,\n };\n if (lazy === \"offset\")\n return {\n lazy: \"offset\" as const,\n loadOptions: loadOptionsProp,\n limit,\n cache: cacheConfig,\n };\n if (lazy === \"group\")\n return {\n lazy: \"group\" as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n };\n return {\n lazy: false as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n };\n }, [\n lazy,\n loadOptionsProp,\n pageSize,\n limit,\n cache?.enabled,\n cache?.maxSize,\n ]);\n\n const {\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n clearCache,\n } = useSelectFieldLoading(loadingHookConfig);\n\n useImperativeHandle(ref, () => ({ clearCache }), [clearCache]);\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 if (selectedOption?.label === inputValue) {\n return \"\";\n } else {\n return inputValue;\n }\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 downshiftItems,\n closeMenu,\n sectionsMeta,\n } = useCombo({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange: (selectedOption) => {\n onSelectedOptionChange(selectedOption);\n },\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 });\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 ]);\n\n const handleLoadMore = async () => {\n await loadMore(adjustInputValueForSelectedOption(inputValue));\n };\n\n const disableClearButton =\n disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;\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 label={label}\n labelNode={labelNode}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\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\": hasHelperText ? helperUid : undefined,\n \"aria-invalid\": error ? true : undefined,\n onFocus: handleFocus,\n onBlur: handleBlur,\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 errorMessage={errorMessage}\n errorAriaLive={\n isOpen || shouldAriaLive ? errorAriaLiveProp : \"off\"\n }\n description={description}\n />\n ) : null}\n <FieldDialog\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\" // always \"medium\" for the dialog\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 >\n <SelectFieldList\n isOpen // always \"open\" = always show the list in the dialog\n items={downshiftItems}\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 style={{\n paddingInline: 24,\n paddingBlockEnd: 24,\n }}\n />\n </FieldDialog>\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 label={label}\n labelNode={labelNode}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n />\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n inputProps={getInputProps({\n popovertarget: `${id}-popover`,\n \"aria-describedby\": hasHelperText ? helperUid : undefined,\n \"aria-invalid\": error ? true : undefined,\n onFocus: handleFocus,\n onBlur: handleBlur,\n })}\n toggleButtonProps={getToggleButtonProps()}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n popoverTarget={`${id}-popover`}\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 errorMessage={errorMessage}\n errorAriaLive={isOpen || shouldAriaLive ? errorAriaLiveProp : \"off\"}\n description={description}\n />\n ) : null}\n\n <FieldPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClickOutside={closeMenu}\n >\n <SelectFieldList\n isOpen={isOpen}\n items={downshiftItems}\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 style={{\n padding: 8,\n }}\n />\n </FieldPopover>\n </div>\n );\n },\n);\n\nSelectField.displayName = \"SelectField\";\n","import { matchSorter, MatchSorterOptions } from \"match-sorter\";\nimport { SelectField } from \"./SelectField\";\nimport {\n SelectFieldProps,\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"./types\";\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 * The filter to use to filter the options.\n * Can be a function to filter the options, or a MatchSorterOptions object to customize the default filtering.\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?:\n | ((\n options: SelectFieldOption[],\n searchValue: string,\n ) => SelectFieldOption[])\n | MatchSorterOptions;\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\nconst defaultFilter = (options: SelectFieldOption[], searchValue: string) => {\n return matchSorter(options, searchValue, {\n keys: [\"label\", \"searchText\"],\n });\n};\n\n/**\n * Sorts options by group using the provided comparator while maintaining\n * the original order within each group (stable sort).\n */\nconst sortByGroup = (\n options: SelectFieldOption[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): SelectFieldOption[] => {\n // Create a map to track the sort order of each group\n const groupOrder = new Map<SelectFieldGroupByValue | undefined, number>();\n\n // Get unique groups in their natural order, then sort them\n const uniqueGroups: (SelectFieldGroupByValue | undefined)[] = [];\n options.forEach((opt) => {\n if (!groupOrder.has(opt.group)) {\n groupOrder.set(opt.group, uniqueGroups.length);\n uniqueGroups.push(opt.group);\n }\n });\n\n // Sort groups (undefined/ungrouped items go last)\n uniqueGroups.sort((a, b) => {\n // Ungrouped items (undefined) always come last\n if (a === undefined && b === undefined) return 0;\n if (a === undefined) return 1;\n if (b === undefined) return -1;\n return groupSorter(a, b);\n });\n\n // Update group order map with sorted positions\n uniqueGroups.forEach((group, index) => {\n groupOrder.set(group, index);\n });\n\n // Sort options by group order (stable sort preserves match-sort order within groups)\n return [...options].sort((a, b) => {\n const orderA = groupOrder.get(a.group) ?? Infinity;\n const orderB = groupOrder.get(b.group) ?? Infinity;\n return orderA - orderB;\n });\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 = defaultFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter =\n typeof filterProp === \"function\"\n ? filterProp\n : (options: SelectFieldOption[], searchValue: string) =>\n matchSorter<SelectFieldOption>(\n options,\n searchValue,\n filterProp as MatchSorterOptions<SelectFieldOption>,\n );\n\n const loadOptions = (searchValue: string) => {\n // First, filter options using match-sorter\n const filtered = filter(options, searchValue);\n\n // Then, sort by group if groupSorter is provided\n if (groupSorter) {\n return sortByGroup(filtered, groupSorter);\n }\n\n return filtered;\n };\n\n return (\n <SelectField\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","inputValue","selectedOption","options"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { A as Avatar } from './Avatar-
|
|
3
|
-
import { I as Icon } from './Icon-
|
|
4
|
-
import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-
|
|
5
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
2
|
+
import { A as Avatar } from './Avatar-DShevhcs.js';
|
|
3
|
+
import { I as Icon } from './Icon-Bcil6aBo.js';
|
|
4
|
+
import { S as SelectTriggerBase, d as defaultItemToString, a as defaultItemToKey } from './SelectTriggerBase-aaOWep-V.js';
|
|
5
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-loxbyklF.js';
|
|
6
6
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
7
7
|
import { useTrackingId } from './useTrackingId.js';
|
|
8
8
|
|
|
@@ -122,4 +122,4 @@ const SelectTrigger = function(props) {
|
|
|
122
122
|
};
|
|
123
123
|
|
|
124
124
|
export { SelectTrigger as S };
|
|
125
|
-
//# sourceMappingURL=SelectTrigger-
|
|
125
|
+
//# sourceMappingURL=SelectTrigger-Cxhx9IVo.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTrigger-
|
|
1
|
+
{"version":3,"file":"SelectTrigger-Cxhx9IVo.js","sources":["../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import { Dispatch, SetStateAction } from \"react\";\nimport {\n UseComboboxProps as UseDownshiftComboboxProps,\n UseMultipleSelectionProps as UseDownshiftMultipleSelectionProps,\n} from \"downshift\";\n\nimport { Avatar, AvatarProps } from \"../Avatar\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport { FieldLabelProps } from \"../FieldLabel\";\nimport { Icon, IconProps } from \"../Icon\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport {\n SelectTriggerBase,\n SelectTriggerBaseProps,\n} from \"./internal/SelectTriggerBase\";\nimport {\n defaultItemToKey,\n defaultItemToString,\n} from \"../Combobox/internal/ComboboxUtils\";\n\nexport type SelectTriggerProps<Item> = DistributiveOmit<\n SelectTriggerBaseProps<Item>,\n \"prefix\" | \"selectedItem\" | \"selectedItems\" | \"onChange\"\n> &\n Pick<FieldLabelProps, \"required\" | \"moreInfo\" | \"moreInfoOpen\"> &\n Pick<UseDownshiftComboboxProps<Item>, \"itemToString\" | \"itemToKey\"> &\n DataTrackingId & {\n prefix?:\n | string\n | { icon: DistributiveOmit<IconProps, \"size\"> }\n | { avatar: DistributiveOmit<AvatarProps, \"size\"> };\n } & (\n | {\n multiple?: never;\n onChange?:\n | Dispatch<SetStateAction<Item | null>>\n | ((arg: Item | null) => void);\n selectedItem: UseDownshiftComboboxProps<Item>[\"selectedItem\"];\n selectedItems?: never;\n }\n | {\n multiple: true;\n onChange?:\n | Dispatch<SetStateAction<Item[] | null>>\n | ((arg: Item[] | null) => void);\n selectedItem?: never;\n selectedItems: UseDownshiftMultipleSelectionProps<Item>[\"selectedItems\"];\n }\n );\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: look into unknown\nexport const SelectTrigger = function <Item = any>(\n props: SelectTriggerProps<Item>,\n) {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n style,\n label,\n size,\n error,\n hint,\n description,\n required,\n moreInfo,\n moreInfoOpen,\n prefix: prefixProp,\n suffix,\n maxRows,\n selectedItemProps = () => ({}),\n id,\n placeholder,\n disabled: isDisabled,\n readOnly: isReadOnly,\n onClick,\n multiple,\n onChange,\n disableClearSelection,\n itemToString: itemToStringProp,\n itemToKey: itemToKeyProp,\n selectedItem = null,\n selectedItems = [],\n ...rest\n } = componentProps;\n\n const itemToString = itemToStringProp ?? defaultItemToString<Item>;\n const itemToKey = itemToKeyProp ?? defaultItemToKey<Item>;\n\n function removeSelectedItem(item: Item) {\n if (multiple) {\n onChange?.(\n selectedItems.filter(\n (selectedItem: Item) => itemToKey(selectedItem) !== itemToKey(item),\n ),\n );\n } else if (itemToKey(selectedItem) === itemToKey(item)) {\n onChange?.(null);\n }\n }\n\n function reset() {\n if (multiple) {\n onChange?.([]);\n } else {\n onChange?.(null);\n }\n }\n\n const noClearButton = isDisabled || isReadOnly || disableClearSelection;\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const data = {\n label: childrenToString(props.label),\n size: props.size,\n required: props.required,\n moreInfo: props.moreInfo,\n moreInfoOpen: props.moreInfoOpen,\n description: childrenToString(props.description),\n hint: props.hint,\n labelProps: props.labelProps,\n };\n\n const trackingId = useTrackingId({\n name: \"ComboboxSearchField\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const prefix =\n prefixProp == null || typeof prefixProp === \"string\" ? (\n prefixProp\n ) : \"icon\" in prefixProp ? (\n <Icon {...prefixProp.icon} />\n ) : \"avatar\" in prefixProp ? (\n <Avatar\n {...prefixProp.avatar}\n size={props.size === \"small\" ? \"small\" : \"medium\"}\n />\n ) : (\n prefixProp\n );\n\n return (\n <SelectTriggerBase\n data-anv=\"select-trigger\"\n data-tracking-id={trackingId}\n className={className}\n style={styleCombined}\n label={label}\n size={size}\n error={error}\n hint={hint}\n description={description}\n labelProps={{\n required,\n moreInfo,\n moreInfoOpen,\n }}\n prefix={prefix}\n suffix={suffix}\n maxRows={maxRows}\n selectedItemProps={selectedItemProps}\n id={id}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n itemToString={itemToString}\n removeSelectedItem={removeSelectedItem}\n disableClearSelection={noClearButton}\n selectedItem={selectedItem}\n selectedItems={selectedItems}\n onClearButtonClick={reset}\n inputWrapperProps={{ onClick }}\n inputProps={rest}\n />\n );\n};\n"],"names":["selectedItem"],"mappings":"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"}
|
package/dist/SelectTrigger.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as SelectTrigger, S as default } from './SelectTrigger-
|
|
1
|
+
export { S as SelectTrigger, S as default } from './SelectTrigger-Cxhx9IVo.js';
|
|
2
2
|
//# sourceMappingURL=SelectTrigger.js.map
|