@servicetitan/anvil2 2.6.0 → 2.7.0
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 +34 -0
- package/dist/{Alert-efJbA3Sy.js → Alert-C_o2f78C.js} +4 -4
- package/dist/{Alert-efJbA3Sy.js.map → Alert-C_o2f78C.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{Announcement-D9eVhPwx.js → Announcement-CyrTvgP4.js} +4 -4
- package/dist/{Announcement-D9eVhPwx.js.map → Announcement-CyrTvgP4.js.map} +1 -1
- package/dist/Announcement.js +1 -1
- package/dist/{AnvilProvider-DrjU73_k.js → AnvilProvider-ClfmLl_6.js} +3 -3
- package/dist/{AnvilProvider-DrjU73_k.js.map → AnvilProvider-ClfmLl_6.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Avatar--E9iBILU.js → Avatar--CnTAnfD.js} +2 -2
- package/dist/{Avatar--E9iBILU.js.map → Avatar--CnTAnfD.js.map} +1 -1
- package/dist/{Avatar-CJCAu9Hk.js → Avatar-CCnbKkCm.js} +3 -3
- package/dist/{Avatar-CJCAu9Hk.js.map → Avatar-CCnbKkCm.js.map} +1 -1
- package/dist/Avatar.js +2 -2
- package/dist/{Badge-pHlnInjl.js → Badge-C2W7Dls9.js} +3 -3
- package/dist/{Badge-pHlnInjl.js.map → Badge-C2W7Dls9.js.map} +1 -1
- package/dist/Badge.js +1 -1
- package/dist/{Breadcrumbs-B5deMJRX.js → Breadcrumbs-3Y7jnj-F.js} +5 -5
- package/dist/{Breadcrumbs-B5deMJRX.js.map → Breadcrumbs-3Y7jnj-F.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Button-DuvaXRZ5.js → Button-CVsGhVJz.js} +4 -4
- package/dist/{Button-DuvaXRZ5.js.map → Button-CVsGhVJz.js.map} +1 -1
- package/dist/Button.js +1 -1
- package/dist/{ButtonCompound-CfRJlClF.js → ButtonCompound-Cmw3cgMY.js} +2 -2
- package/dist/{ButtonCompound-CfRJlClF.js.map → ButtonCompound-Cmw3cgMY.js.map} +1 -1
- package/dist/ButtonCompound.js +1 -1
- package/dist/{ButtonLink-B5Ixd5d5.js → ButtonLink-BJKTJER8.js} +4 -4
- package/dist/{ButtonLink-B5Ixd5d5.js.map → ButtonLink-BJKTJER8.js.map} +1 -1
- package/dist/ButtonLink.js +1 -1
- package/dist/{ButtonToggle-BkDR0AcM.js → ButtonToggle-DaYJWso_.js} +3 -3
- package/dist/{ButtonToggle-BkDR0AcM.js.map → ButtonToggle-DaYJWso_.js.map} +1 -1
- package/dist/ButtonToggle.js +1 -1
- package/dist/{Calendar-MXQWMrwC.js → Calendar-C1U2npPP.js} +2 -2
- package/dist/{Calendar-MXQWMrwC.js.map → Calendar-C1U2npPP.js.map} +1 -1
- package/dist/{Calendar-M8K2O28r.js → Calendar-SGlTt-bs.js} +6 -6
- package/dist/{Calendar-M8K2O28r.js.map → Calendar-SGlTt-bs.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Card-C5TyS0Iv.js → Card-wz71dEVA.js} +2 -2
- package/dist/{Card-C5TyS0Iv.js.map → Card-wz71dEVA.js.map} +1 -1
- package/dist/Card.js +1 -1
- package/dist/{Checkbox-Czx6UCfq.js → Checkbox-CjEKa5Iv.js} +2 -2
- package/dist/{Checkbox-Czx6UCfq.js.map → Checkbox-CjEKa5Iv.js.map} +1 -1
- package/dist/{Checkbox-LPr8zpzs.js → Checkbox-CtKUNeyu.js} +20 -11
- package/dist/Checkbox-CtKUNeyu.js.map +1 -0
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-BJmzOMOd.js → Chip-DjTAR0va.js} +5 -5
- package/dist/{Chip-BJmzOMOd.js.map → Chip-DjTAR0va.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-CnzBCYLC.js → Combobox-By8-34bw.js} +13 -12
- package/dist/{Combobox-CnzBCYLC.js.map → Combobox-By8-34bw.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-Cau6ylNR.js → DataTable-BYOS6icI.js} +95 -53
- package/dist/DataTable-BYOS6icI.js.map +1 -0
- package/dist/DataTable.css +68 -55
- package/dist/{DateFieldRange-B1BR8K7C.js → DateFieldRange-C8Uzrboc.js} +45 -54
- package/dist/DateFieldRange-C8Uzrboc.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CaWruBBO.js → DateFieldSingle-DrhLIjlK.js} +43 -52
- package/dist/DateFieldSingle-DrhLIjlK.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-ClF88lnZ.js → DateFieldYearless-DbivK4Hm.js} +6 -6
- package/dist/{DateFieldYearless-ClF88lnZ.js.map → DateFieldYearless-DbivK4Hm.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-LZFr55tn.js → DateFieldYearlessRange-BEqJe4Uf.js} +7 -7
- package/dist/{DateFieldYearlessRange-LZFr55tn.js.map → DateFieldYearlessRange-BEqJe4Uf.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-BLdndX4a.js → DaysOfTheWeek-BR32AA32.js} +6 -6
- package/dist/{DaysOfTheWeek-BLdndX4a.js.map → DaysOfTheWeek-BR32AA32.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-C9temdJE.js → Details-Dxq_v3Qg.js} +3 -3
- package/dist/{Details-C9temdJE.js.map → Details-Dxq_v3Qg.js.map} +1 -1
- package/dist/Details.js +1 -1
- package/dist/{Dialog-CXnUkcrS.js → Dialog-CGhwkwvq.js} +5 -5
- package/dist/{Dialog-CXnUkcrS.js.map → Dialog-CGhwkwvq.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{DialogCancelButton-LfPkSYCE.js → DialogCancelButton-DQDMzGeT.js} +2 -2
- package/dist/{DialogCancelButton-LfPkSYCE.js.map → DialogCancelButton-DQDMzGeT.js.map} +1 -1
- package/dist/{Divider-HHjG0KYA.js → Divider-B1UoK8ho.js} +2 -2
- package/dist/{Divider-HHjG0KYA.js.map → Divider-B1UoK8ho.js.map} +1 -1
- package/dist/Divider.js +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndSort.js +8 -10
- package/dist/DndSort.js.map +1 -1
- package/dist/{Drawer-BmNHRJJJ.js → Drawer-DA4iAgt-.js} +5 -5
- package/dist/{Drawer-BmNHRJJJ.js.map → Drawer-DA4iAgt-.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-8gQ6IJez.js → EditCard-CLN0GBN_.js} +6 -6
- package/dist/{EditCard-8gQ6IJez.js.map → EditCard-CLN0GBN_.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-35fac7b-.js → FieldLabel-DbMosKtd.js} +5 -5
- package/dist/{FieldLabel-35fac7b-.js.map → FieldLabel-DbMosKtd.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FieldMessage-eYenMJY5.js → FieldMessage-COHqUdj5.js} +3 -3
- package/dist/{FieldMessage-eYenMJY5.js.map → FieldMessage-COHqUdj5.js.map} +1 -1
- package/dist/FieldMessage.js +2 -2
- package/dist/{Flex-DZu-_z-U.js → Flex-WyyZm1bf.js} +2 -2
- package/dist/{Flex-DZu-_z-U.js.map → Flex-WyyZm1bf.js.map} +1 -1
- package/dist/Flex.js +1 -1
- package/dist/{Grid-xRKvVHA2.js → Grid-ONcUpb__.js} +2 -2
- package/dist/{Grid-xRKvVHA2.js.map → Grid-ONcUpb__.js.map} +1 -1
- package/dist/Grid.js +1 -1
- package/dist/{Helper-CDZD_AOG.js → Helper-B_FIOlhy.js} +3 -3
- package/dist/{Helper-CDZD_AOG.js.map → Helper-B_FIOlhy.js.map} +1 -1
- package/dist/{Icon-Bgkq1egx.js → Icon-DuIlne4x.js} +2 -2
- package/dist/{Icon-Bgkq1egx.js.map → Icon-DuIlne4x.js.map} +1 -1
- package/dist/Icon.js +1 -1
- package/dist/{InputMask-DkvZ4MIT.js → InputMask-HjaNCb73.js} +3 -3
- package/dist/{InputMask-DkvZ4MIT.js.map → InputMask-HjaNCb73.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{InteractiveCard-B3_FAoIE.js → InteractiveCard-GTYbR6Xy.js} +3 -3
- package/dist/{InteractiveCard-B3_FAoIE.js.map → InteractiveCard-GTYbR6Xy.js.map} +1 -1
- package/dist/InteractiveCard.js +1 -1
- package/dist/{Layout-DTAU7jS5.js → Layout-VfhlilMG.js} +2 -2
- package/dist/{Layout-DTAU7jS5.js.map → Layout-VfhlilMG.js.map} +1 -1
- package/dist/Layout.js +1 -1
- package/dist/{Link-DSyeiS7g.js → Link-jTvzyXca.js} +3 -3
- package/dist/{Link-DSyeiS7g.js.map → Link-jTvzyXca.js.map} +1 -1
- package/dist/Link.js +1 -1
- package/dist/{LinkButton-DOI4osnN.js → LinkButton-DGyHR1E7.js} +2 -2
- package/dist/{LinkButton-DOI4osnN.js.map → LinkButton-DGyHR1E7.js.map} +1 -1
- package/dist/LinkButton.js +1 -1
- package/dist/{List-Cyvkt0Px.js → List-CJZjElAQ.js} +2 -2
- package/dist/{List-Cyvkt0Px.js.map → List-CJZjElAQ.js.map} +1 -1
- package/dist/List.js +1 -1
- package/dist/{ListView-VzdUffCe.js → ListView-mujFK6mQ.js} +3 -3
- package/dist/{ListView-VzdUffCe.js.map → ListView-mujFK6mQ.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-SRBgb1VS.js → Listbox-BtAgBDRS.js} +6 -6
- package/dist/{Listbox-SRBgb1VS.js.map → Listbox-BtAgBDRS.js.map} +1 -1
- package/dist/Listbox.css +29 -29
- package/dist/Listbox.js +1 -1
- package/dist/Listbox.module-HAXMOKvC.js +18 -0
- package/dist/Listbox.module-HAXMOKvC.js.map +1 -0
- package/dist/{Menu-Bxbrulia.js → Menu-BXsmCP20.js} +6 -5
- package/dist/{Menu-Bxbrulia.js.map → Menu-BXsmCP20.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-B6J42MpG.js → MultiSelectFieldSync-DGpGgu8q.js} +91 -176
- package/dist/MultiSelectFieldSync-DGpGgu8q.js.map +1 -0
- package/dist/MultiSelectMenu.d.ts +2 -0
- package/dist/MultiSelectMenu.js +2 -0
- package/dist/MultiSelectMenu.js.map +1 -0
- package/dist/MultiSelectMenuSync-DiLddJDw.js +432 -0
- package/dist/MultiSelectMenuSync-DiLddJDw.js.map +1 -0
- package/dist/{NumberField-BgeDEoHw.js → NumberField-svhZp1kB.js} +8 -8
- package/dist/{NumberField-BgeDEoHw.js.map → NumberField-svhZp1kB.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.js +2 -2
- package/dist/{Page-DgqEClR7.js → Page-Be029Dij.js} +123 -82
- package/dist/Page-Be029Dij.js.map +1 -0
- package/dist/Page.css +84 -72
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DIredMzG.js → Pagination-BAwqfl_2.js} +8 -8
- package/dist/{Pagination-DIredMzG.js.map → Pagination-BAwqfl_2.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-CsVesD9_.js → Popover-D0qSKZ1J.js} +6 -5
- package/dist/{Popover-CsVesD9_.js.map → Popover-D0qSKZ1J.js.map} +1 -1
- package/dist/{Popover-ZyaN26OB.js → Popover-DxZF6lbJ.js} +28 -15
- package/dist/Popover-DxZF6lbJ.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-x1cyKo1E.js → ProgressBar-JpRDW5vG.js} +7 -7
- package/dist/{ProgressBar-x1cyKo1E.js.map → ProgressBar-JpRDW5vG.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-Beneo_h3.js → Radio-BOq9UkpC.js} +2 -2
- package/dist/{Radio-Beneo_h3.js.map → Radio-BOq9UkpC.js.map} +1 -1
- package/dist/{Radio-D8HSazJ6.js → Radio-BQg7exDG.js} +17 -8
- package/dist/{Radio-D8HSazJ6.js.map → Radio-BQg7exDG.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SearchField-Dn_5cMo3.js → SearchField-im7AHGYo.js} +4 -4
- package/dist/{SearchField-Dn_5cMo3.js.map → SearchField-im7AHGYo.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SegmentedControl-BshzGPsW.js → SegmentedControl-7fDLhgvh.js} +3 -3
- package/dist/{SegmentedControl-BshzGPsW.js.map → SegmentedControl-7fDLhgvh.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-D94UKLxM.js → SelectCard-cu4MBuh8.js} +24 -15
- package/dist/{SelectCard-D94UKLxM.js.map → SelectCard-cu4MBuh8.js.map} +1 -1
- package/dist/SelectCard.css +23 -18
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/SelectFieldLabel-Dr8HeW3N.js +31 -0
- package/dist/SelectFieldLabel-Dr8HeW3N.js.map +1 -0
- package/dist/{SelectFieldSync-BQrC0j2-.js → SelectFieldSync-CJ2Ie_v1.js} +79 -168
- package/dist/SelectFieldSync-CJ2Ie_v1.js.map +1 -0
- package/dist/SelectMenu.d.ts +2 -0
- package/dist/SelectMenu.js +2 -0
- package/dist/SelectMenu.js.map +1 -0
- package/dist/SelectMenuSync-CJA_coqD.js +327 -0
- package/dist/SelectMenuSync-CJA_coqD.js.map +1 -0
- package/dist/SelectOptions-Bf4xsFek.js +26 -0
- package/dist/SelectOptions-Bf4xsFek.js.map +1 -0
- package/dist/{SelectTrigger-D8xkq1wa.js → SelectTrigger-ObsnAKNp.js} +4 -4
- package/dist/{SelectTrigger-D8xkq1wa.js.map → SelectTrigger-ObsnAKNp.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-CBS5URqs.js → SelectTriggerBase-DKfOL2RJ.js} +8 -8
- package/dist/{SelectTriggerBase-CBS5URqs.js.map → SelectTriggerBase-DKfOL2RJ.js.map} +1 -1
- package/dist/{SideNav-2CgD8uxD.js → SideNav-KksbSQn7.js} +3 -3
- package/dist/{SideNav-2CgD8uxD.js.map → SideNav-KksbSQn7.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/Skeleton.js +1 -1
- package/dist/{Spinner-CpEm3Lud.js → Spinner-BqmcE2pb.js} +2 -2
- package/dist/{Spinner-CpEm3Lud.js.map → Spinner-BqmcE2pb.js.map} +1 -1
- package/dist/Spinner.js +1 -1
- package/dist/{SrOnly-CrdBTl6E.js → SrOnly-eUpYGpAT.js} +2 -2
- package/dist/{SrOnly-CrdBTl6E.js.map → SrOnly-eUpYGpAT.js.map} +1 -1
- package/dist/SrOnly.js +1 -1
- package/dist/{Stepper-D71Zhlr9.js → Stepper-Dt8_ImvJ.js} +4 -4
- package/dist/{Stepper-D71Zhlr9.js.map → Stepper-Dt8_ImvJ.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-DxkmA-o4.js → Switch-DpPHr3G3.js} +5 -5
- package/dist/{Switch-DxkmA-o4.js.map → Switch-DpPHr3G3.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/{Tab-2mEMF0vc.js → Tab-DO7LaUbw.js} +3 -3
- package/dist/{Tab-2mEMF0vc.js.map → Tab-DO7LaUbw.js.map} +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-BqES2rv3.js → Text-BJo4oMI2.js} +2 -2
- package/dist/{Text-BqES2rv3.js.map → Text-BJo4oMI2.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-Dk90SWXl.js → TextField-BW8sJAls.js} +2 -2
- package/dist/{TextField-Dk90SWXl.js.map → TextField-BW8sJAls.js.map} +1 -1
- package/dist/{TextField-Dn6HWZoH.js → TextField-DeHpgPag.js} +12 -7
- package/dist/TextField-DeHpgPag.js.map +1 -0
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-D4gqy2ZR.js → Textarea-DyqdMTvQ.js} +5 -5
- package/dist/{Textarea-D4gqy2ZR.js.map → Textarea-DyqdMTvQ.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-BwZHpkFv.js → ThemeProvider-CaYW3RuA.js} +2 -2
- package/dist/{ThemeProvider-BwZHpkFv.js.map → ThemeProvider-CaYW3RuA.js.map} +1 -1
- package/dist/ThemeProvider.js +1 -1
- package/dist/{TimeField-DgdGwPF9.js → TimeField-Dc0Y1JD-.js} +6 -7
- package/dist/{TimeField-DgdGwPF9.js.map → TimeField-Dc0Y1JD-.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BBcWImWl.js → Toaster-DikGo_hR.js} +2 -2
- package/dist/{Toaster-BBcWImWl.js.map → Toaster-DikGo_hR.js.map} +1 -1
- package/dist/{Toaster-C07D40P9.js → Toaster-b0-Ub3yt.js} +7 -7
- package/dist/{Toaster-C07D40P9.js.map → Toaster-b0-Ub3yt.js.map} +1 -1
- package/dist/{Toolbar-4LHKM6ub.js → Toolbar-DAuz4Gs2.js} +41 -129
- package/dist/Toolbar-DAuz4Gs2.js.map +1 -0
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-BiW5nNAy.js → Tooltip-Bupqao9B.js} +5 -4
- package/dist/{Tooltip-BiW5nNAy.js.map → Tooltip-Bupqao9B.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-CxfcJqro.js → YearlessDateInputWithPicker-DFi08TLG.js} +13 -15
- package/dist/YearlessDateInputWithPicker-DFi08TLG.js.map +1 -0
- package/dist/YearlessDateInputWithPicker.css +33 -33
- package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +2 -3
- package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +8 -7
- package/dist/beta/components/MultiSelectField/internal/useSelectModeMultiple.d.ts +6 -4
- package/dist/beta/components/MultiSelectField/types.d.ts +2 -3
- package/dist/beta/components/MultiSelectMenu/MultiSelectMenu.d.ts +30 -0
- package/dist/beta/components/MultiSelectMenu/MultiSelectMenuSync.d.ts +54 -0
- package/dist/beta/components/MultiSelectMenu/index.d.ts +3 -0
- package/dist/beta/components/MultiSelectMenu/types.d.ts +170 -0
- package/dist/beta/components/SelectField/SelectFieldSync.d.ts +2 -3
- package/dist/beta/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
- package/dist/beta/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +7 -7
- package/dist/beta/components/SelectField/internal/useSelectMode.d.ts +7 -6
- package/dist/beta/components/SelectField/types.d.ts +2 -9
- package/dist/beta/components/SelectMenu/SelectMenu.d.ts +27 -0
- package/dist/beta/components/SelectMenu/SelectMenuSync.d.ts +41 -0
- package/dist/beta/components/SelectMenu/index.d.ts +3 -0
- package/dist/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +72 -0
- package/dist/beta/components/SelectMenu/types.d.ts +153 -0
- package/dist/beta/components/Table/DataTable/DataTable.d.ts +7 -1
- package/dist/beta/components/Table/DataTable/internal/cells/CellFocusContext.d.ts +1 -1
- package/dist/beta/components/Table/DataTable/internal/cells/CellStatus.d.ts +12 -0
- package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +7 -1
- package/dist/beta/components/Table/createColumnHelper.d.ts +6 -0
- package/dist/beta/components/Table/types.d.ts +20 -0
- package/dist/beta/components/Toolbar/ToolbarSelect.d.ts +3 -3
- package/dist/beta/components/index.d.ts +2 -0
- package/dist/beta.js +10 -8
- package/dist/beta.js.map +1 -1
- package/dist/components/Announcement/Announcement.figma.d.ts +1 -0
- package/dist/components/Checkbox/internal/Checkbox.d.ts +8 -0
- package/dist/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +1 -1
- package/dist/components/DndSort/internal/test-utils.d.ts +15 -8
- package/dist/components/FieldMessage/FieldMessage.figma.d.ts +1 -0
- package/dist/components/Page/Page.d.ts +1 -1
- package/dist/components/Page/PageContent.d.ts +5 -5
- package/dist/components/Page/PageContext.d.ts +2 -0
- package/dist/components/Page/PageFooter.d.ts +1 -0
- package/dist/components/Radio/internal/Radio.d.ts +8 -0
- package/dist/components/Toolbar/ToolbarSelect.d.ts +3 -3
- package/dist/{match-sorter.esm-adzV1NDp.js → downshift.esm-xtSnQp44.js} +3 -907
- package/dist/downshift.esm-xtSnQp44.js.map +1 -0
- package/dist/{floating-ui.react-S01OoTc9.js → floating-ui.react-C_s3_nEb.js} +2 -2
- package/dist/{floating-ui.react-S01OoTc9.js.map → floating-ui.react-C_s3_nEb.js.map} +1 -1
- package/dist/{floating-ui.react-dom-DSiPHZwm.js → floating-ui.react-dom-imrk9N49.js} +2 -17
- package/dist/floating-ui.react-dom-imrk9N49.js.map +1 -0
- package/dist/{index-DuDm69S1.js → index-D6ag_WQW.js} +4 -4
- package/dist/{index-DuDm69S1.js.map → index-D6ag_WQW.js.map} +1 -1
- package/dist/{index-SvGbrGuT.js → index-De1g9FRV.js} +2 -2
- package/dist/{index-SvGbrGuT.js.map → index-De1g9FRV.js.map} +1 -1
- package/dist/index.js +73 -100
- package/dist/index.js.map +1 -1
- package/dist/internal/components/MultiSelectOptions.d.ts +23 -0
- package/dist/{beta/components/SelectField/internal/FieldDialog/FieldDialog.d.ts → internal/components/OptionsDialog/OptionsDialog.d.ts} +2 -2
- package/dist/internal/components/OptionsPanel.d.ts +26 -0
- package/dist/internal/components/OptionsPopover/OptionsPopover.d.ts +16 -0
- package/dist/internal/components/Popover/Popover.d.ts +3 -2
- package/dist/internal/components/Popover/PopoverContent.d.ts +4 -0
- package/dist/internal/components/Popover/internal/PopoverContext.d.ts +2 -2
- package/dist/internal/components/SelectOption.d.ts +13 -0
- package/dist/internal/components/SelectOptions.d.ts +23 -0
- package/dist/internal/components/VirtualizedOptionsPanel.d.ts +2 -0
- package/dist/internal/functions/buildSelectItems.d.ts +22 -0
- package/dist/internal/functions/syncFilterUtils.d.ts +10 -0
- package/dist/{beta/components/SelectField/internal → internal/hooks}/useGroupedOptions.d.ts +4 -3
- package/dist/{beta/components/SelectField/internal/useFieldListSections.d.ts → internal/hooks/useOptionsSections.d.ts} +7 -8
- package/dist/{beta/components/SelectField/internal → internal/hooks}/usePinnedOptions.d.ts +1 -1
- package/dist/{beta/components/SelectField/internal → internal/hooks}/useProcessedOptions.d.ts +2 -2
- package/dist/internal/hooks/useSelectOrchestration.d.ts +38 -0
- package/dist/{beta/components/MultiSelectField/internal → internal/hooks}/useToggleSelection.d.ts +2 -2
- package/dist/{beta/components/SelectField/internal/types.d.ts → internal/types/selectFieldInternalTypes.d.ts} +11 -3
- package/dist/match-sorter.esm-CGAauEiU.js +908 -0
- package/dist/match-sorter.esm-CGAauEiU.js.map +1 -0
- package/dist/safePopover-BDso-xSH.js +17 -0
- package/dist/safePopover-BDso-xSH.js.map +1 -0
- package/dist/{FieldDialog-DaRvLS6m.js → syncFilterUtils-vt8ldsES.js} +287 -146
- package/dist/syncFilterUtils-vt8ldsES.js.map +1 -0
- package/dist/{FieldDialog.css → syncFilterUtils.css} +18 -11
- package/dist/{useDrilldown-CuvPT4gS.js → useDrilldown-wwXRpNgb.js} +5 -5
- package/dist/{useDrilldown-CuvPT4gS.js.map → useDrilldown-wwXRpNgb.js.map} +1 -1
- package/dist/useMenuInteraction-zR_78KQC.js +249 -0
- package/dist/useMenuInteraction-zR_78KQC.js.map +1 -0
- package/dist/useToggleSelection-BdXW3Zg3.js +63 -0
- package/dist/useToggleSelection-BdXW3Zg3.js.map +1 -0
- package/dist/{utils-pudAMGnO.js → utils-CM48ODEJ.js} +3 -13
- package/dist/utils-CM48ODEJ.js.map +1 -0
- package/dist/warnOnce-Y9PRHcU4.js +13 -0
- package/dist/warnOnce-Y9PRHcU4.js.map +1 -0
- package/package.json +10 -9
- package/dist/Checkbox-LPr8zpzs.js.map +0 -1
- package/dist/DataTable-Cau6ylNR.js.map +0 -1
- package/dist/DateFieldRange-B1BR8K7C.js.map +0 -1
- package/dist/DateFieldSingle-CaWruBBO.js.map +0 -1
- package/dist/FieldDialog-DaRvLS6m.js.map +0 -1
- package/dist/Listbox.module-XuKszT3X.js +0 -18
- package/dist/Listbox.module-XuKszT3X.js.map +0 -1
- package/dist/MultiSelectFieldSync-B6J42MpG.js.map +0 -1
- package/dist/Page-DgqEClR7.js.map +0 -1
- package/dist/Popover-ZyaN26OB.js.map +0 -1
- package/dist/SelectFieldSync-BQrC0j2-.js.map +0 -1
- package/dist/TextField-Dn6HWZoH.js.map +0 -1
- package/dist/Toolbar-4LHKM6ub.js.map +0 -1
- package/dist/YearlessDateInputWithPicker-CxfcJqro.js.map +0 -1
- package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +0 -24
- package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +0 -27
- package/dist/beta/components/SelectField/internal/FieldPopover/FieldPopover.d.ts +0 -9
- package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +0 -26
- package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +0 -14
- package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +0 -2
- package/dist/beta/components/SelectField/internal/buildDownshiftItems.d.ts +0 -22
- package/dist/beta/components/Table/DataTable/internal/cells/CellError.d.ts +0 -10
- package/dist/floating-ui.react-dom-DSiPHZwm.js.map +0 -1
- package/dist/match-sorter.esm-adzV1NDp.js.map +0 -1
- package/dist/utils-pudAMGnO.js.map +0 -1
- /package/dist/{beta/components/SelectField/internal → internal/components}/InView.d.ts +0 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { useState, useId, useRef, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
const useMenuInteraction = ({
|
|
4
|
+
items,
|
|
5
|
+
sectionsMeta: _sectionsMeta,
|
|
6
|
+
onItemActivate,
|
|
7
|
+
selectedItemIds,
|
|
8
|
+
displayAs: _displayAs,
|
|
9
|
+
closeOnActivate,
|
|
10
|
+
disabled = false,
|
|
11
|
+
id,
|
|
12
|
+
triggerRef,
|
|
13
|
+
label
|
|
14
|
+
}) => {
|
|
15
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
16
|
+
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
17
|
+
const generatedId = useId();
|
|
18
|
+
const menuId = `${id}-menu-${generatedId}`;
|
|
19
|
+
const menuContainerRef = useRef(null);
|
|
20
|
+
const listRef = useRef(null);
|
|
21
|
+
const isItemDisabled = useCallback(
|
|
22
|
+
(item) => {
|
|
23
|
+
return (disabled || item.disabled) ?? false;
|
|
24
|
+
},
|
|
25
|
+
[disabled]
|
|
26
|
+
);
|
|
27
|
+
const findNextEnabledIndex = useCallback(
|
|
28
|
+
(startIndex, direction, wrap = true) => {
|
|
29
|
+
if (items.length === 0) return -1;
|
|
30
|
+
const len = items.length;
|
|
31
|
+
let index = startIndex;
|
|
32
|
+
for (let i = 0; i < len; i++) {
|
|
33
|
+
index = wrap ? (index + direction + len) % len : Math.min(Math.max(index + direction, 0), len - 1);
|
|
34
|
+
if (!isItemDisabled(items[index])) return index;
|
|
35
|
+
if (!wrap && (index === 0 || index === len - 1)) return -1;
|
|
36
|
+
}
|
|
37
|
+
return -1;
|
|
38
|
+
},
|
|
39
|
+
[items, isItemDisabled]
|
|
40
|
+
);
|
|
41
|
+
const openMenu = useCallback(() => {
|
|
42
|
+
if (disabled) return;
|
|
43
|
+
setIsOpen(true);
|
|
44
|
+
}, [disabled]);
|
|
45
|
+
const closeMenu = useCallback(
|
|
46
|
+
(options) => {
|
|
47
|
+
setIsOpen(false);
|
|
48
|
+
setHighlightedIndex(-1);
|
|
49
|
+
if (options?.restoreFocus !== false) {
|
|
50
|
+
triggerRef.current?.focus();
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
[triggerRef]
|
|
54
|
+
);
|
|
55
|
+
const getItemId = useCallback(
|
|
56
|
+
(index) => `${menuId}-option-${index}`,
|
|
57
|
+
[menuId]
|
|
58
|
+
);
|
|
59
|
+
const handleKeyDown = useCallback(
|
|
60
|
+
(e) => {
|
|
61
|
+
if (!isOpen) return;
|
|
62
|
+
switch (e.key) {
|
|
63
|
+
case "ArrowDown": {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
const next = highlightedIndex < 0 ? findNextEnabledIndex(-1, 1) : findNextEnabledIndex(highlightedIndex, 1);
|
|
66
|
+
if (next >= 0) {
|
|
67
|
+
setHighlightedIndex(next);
|
|
68
|
+
listRef.current?.scrollToIndex(next);
|
|
69
|
+
}
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case "ArrowUp": {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
const prev = highlightedIndex < 0 ? findNextEnabledIndex(items.length, -1) : findNextEnabledIndex(highlightedIndex, -1);
|
|
75
|
+
if (prev >= 0) {
|
|
76
|
+
setHighlightedIndex(prev);
|
|
77
|
+
listRef.current?.scrollToIndex(prev);
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
case "Home": {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
const first = findNextEnabledIndex(-1, 1, false);
|
|
84
|
+
if (first >= 0) {
|
|
85
|
+
setHighlightedIndex(first);
|
|
86
|
+
listRef.current?.scrollToIndex(first);
|
|
87
|
+
}
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
case "End": {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
const last = findNextEnabledIndex(items.length, -1, false);
|
|
93
|
+
if (last >= 0) {
|
|
94
|
+
setHighlightedIndex(last);
|
|
95
|
+
listRef.current?.scrollToIndex(last);
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case "Enter": {
|
|
100
|
+
e.preventDefault();
|
|
101
|
+
if (highlightedIndex >= 0 && highlightedIndex < items.length) {
|
|
102
|
+
const item = items[highlightedIndex];
|
|
103
|
+
if (!isItemDisabled(item)) {
|
|
104
|
+
onItemActivate(item);
|
|
105
|
+
if (closeOnActivate) {
|
|
106
|
+
closeMenu();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
case " ": {
|
|
113
|
+
const target = e.target;
|
|
114
|
+
if (target.tagName === "INPUT") break;
|
|
115
|
+
e.preventDefault();
|
|
116
|
+
if (highlightedIndex >= 0 && highlightedIndex < items.length) {
|
|
117
|
+
const item = items[highlightedIndex];
|
|
118
|
+
if (!isItemDisabled(item)) {
|
|
119
|
+
onItemActivate(item);
|
|
120
|
+
if (closeOnActivate) {
|
|
121
|
+
closeMenu();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case "Escape": {
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
closeMenu();
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case "Tab": {
|
|
133
|
+
closeMenu({ restoreFocus: false });
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
[
|
|
139
|
+
isOpen,
|
|
140
|
+
highlightedIndex,
|
|
141
|
+
items,
|
|
142
|
+
findNextEnabledIndex,
|
|
143
|
+
isItemDisabled,
|
|
144
|
+
onItemActivate,
|
|
145
|
+
closeOnActivate,
|
|
146
|
+
closeMenu
|
|
147
|
+
]
|
|
148
|
+
);
|
|
149
|
+
const handleTriggerKeyDown = useCallback(
|
|
150
|
+
(e) => {
|
|
151
|
+
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
if (!isOpen) openMenu();
|
|
154
|
+
}
|
|
155
|
+
if (e.key === "Enter" || e.key === " ") {
|
|
156
|
+
e.preventDefault();
|
|
157
|
+
if (isOpen) {
|
|
158
|
+
closeMenu();
|
|
159
|
+
} else {
|
|
160
|
+
openMenu();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
[isOpen, openMenu, closeMenu]
|
|
165
|
+
);
|
|
166
|
+
const getTriggerProps = useCallback(() => {
|
|
167
|
+
return {
|
|
168
|
+
ref: triggerRef,
|
|
169
|
+
onClick: () => {
|
|
170
|
+
if (isOpen) {
|
|
171
|
+
closeMenu();
|
|
172
|
+
} else {
|
|
173
|
+
openMenu();
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
onKeyDown: handleTriggerKeyDown,
|
|
177
|
+
"aria-haspopup": "listbox",
|
|
178
|
+
"aria-controls": menuId,
|
|
179
|
+
"aria-expanded": isOpen,
|
|
180
|
+
"data-state": isOpen ? "open" : "close"
|
|
181
|
+
};
|
|
182
|
+
}, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);
|
|
183
|
+
const getMenuProps = useCallback(
|
|
184
|
+
(opts) => {
|
|
185
|
+
return {
|
|
186
|
+
role: "listbox",
|
|
187
|
+
id: menuId,
|
|
188
|
+
"aria-label": label,
|
|
189
|
+
tabIndex: 0,
|
|
190
|
+
"aria-activedescendant": highlightedIndex >= 0 ? getItemId(highlightedIndex) : void 0,
|
|
191
|
+
ref: menuContainerRef,
|
|
192
|
+
onKeyDown: handleKeyDown,
|
|
193
|
+
className: opts?.className,
|
|
194
|
+
style: { outline: "none", ...opts?.style }
|
|
195
|
+
};
|
|
196
|
+
},
|
|
197
|
+
[menuId, label, highlightedIndex, getItemId, handleKeyDown]
|
|
198
|
+
);
|
|
199
|
+
const getItemProps = useCallback(
|
|
200
|
+
(opts) => {
|
|
201
|
+
const { item, index, className, "data-type": dataType } = opts;
|
|
202
|
+
return {
|
|
203
|
+
role: "option",
|
|
204
|
+
id: getItemId(index),
|
|
205
|
+
"aria-selected": selectedItemIds.has(item.original.id),
|
|
206
|
+
"aria-disabled": isItemDisabled(item) || void 0,
|
|
207
|
+
onClick: () => {
|
|
208
|
+
if (isItemDisabled(item)) return;
|
|
209
|
+
onItemActivate(item);
|
|
210
|
+
if (closeOnActivate) {
|
|
211
|
+
closeMenu();
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
onMouseMove: () => {
|
|
215
|
+
if (highlightedIndex !== index) {
|
|
216
|
+
setHighlightedIndex(index);
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
className,
|
|
220
|
+
"data-type": dataType
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
[
|
|
224
|
+
getItemId,
|
|
225
|
+
selectedItemIds,
|
|
226
|
+
isItemDisabled,
|
|
227
|
+
onItemActivate,
|
|
228
|
+
closeOnActivate,
|
|
229
|
+
closeMenu,
|
|
230
|
+
highlightedIndex
|
|
231
|
+
]
|
|
232
|
+
);
|
|
233
|
+
return {
|
|
234
|
+
isOpen,
|
|
235
|
+
openMenu,
|
|
236
|
+
closeMenu,
|
|
237
|
+
highlightedIndex,
|
|
238
|
+
setHighlightedIndex,
|
|
239
|
+
getTriggerProps,
|
|
240
|
+
getMenuProps,
|
|
241
|
+
getItemProps,
|
|
242
|
+
listRef,
|
|
243
|
+
menuContainerRef,
|
|
244
|
+
handleKeyDown
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
export { useMenuInteraction as u };
|
|
249
|
+
//# sourceMappingURL=useMenuInteraction-zR_78KQC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenuInteraction-zR_78KQC.js","sources":["../src/beta/components/SelectMenu/internal/useMenuInteraction.ts"],"sourcesContent":["import {\n CSSProperties,\n KeyboardEvent,\n RefObject,\n useCallback,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n SelectItem,\n SectionMeta,\n} from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\n\nexport type UseMenuInteractionConfig = {\n items: SelectItem[];\n sectionsMeta: SectionMeta[];\n onItemActivate: (item: SelectItem) => void;\n selectedItemIds: Set<string | number>;\n displayAs: \"popover\" | \"dialog\";\n closeOnActivate: boolean;\n disabled?: boolean;\n id: string;\n triggerRef: RefObject<HTMLButtonElement>;\n label: string;\n};\n\nexport type MenuTriggerProps = {\n ref: RefObject<HTMLButtonElement>;\n onClick: () => void;\n onKeyDown: (e: KeyboardEvent) => void;\n \"aria-haspopup\": \"listbox\";\n \"aria-controls\": string;\n \"aria-expanded\": boolean;\n \"data-state\": \"open\" | \"close\";\n};\n\ntype MenuPropsArg = {\n className?: string;\n style?: CSSProperties;\n};\n\ntype MenuReturnProps = MenuPropsArg & {\n role: \"listbox\";\n id: string;\n \"aria-label\": string;\n \"aria-labelledby\"?: string;\n tabIndex?: number;\n \"aria-activedescendant\"?: string;\n ref: RefObject<HTMLDivElement>;\n onKeyDown: (e: KeyboardEvent) => void;\n};\n\ntype ItemPropsArg = {\n item: SelectItem;\n index: number;\n className?: string;\n \"data-type\"?: string;\n};\n\ntype ItemReturnProps = {\n role: \"option\";\n id: string;\n \"aria-selected\": boolean;\n \"aria-disabled\"?: boolean;\n onClick: () => void;\n onMouseMove: () => void;\n className?: string;\n \"data-type\"?: string;\n};\n\nexport type GetMenuPropsFn = (opts?: MenuPropsArg) => MenuReturnProps;\nexport type GetItemPropsFn = (opts: ItemPropsArg) => ItemReturnProps;\n\nexport const useMenuInteraction = ({\n items,\n sectionsMeta: _sectionsMeta,\n onItemActivate,\n selectedItemIds,\n displayAs: _displayAs,\n closeOnActivate,\n disabled = false,\n id,\n triggerRef,\n label,\n}: UseMenuInteractionConfig) => {\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const generatedId = useId();\n const menuId = `${id}-menu-${generatedId}`;\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const isItemDisabled = useCallback(\n (item: SelectItem) => {\n return (disabled || item.disabled) ?? false;\n },\n [disabled],\n );\n\n const findNextEnabledIndex = useCallback(\n (startIndex: number, direction: 1 | -1, wrap = true): number => {\n if (items.length === 0) return -1;\n const len = items.length;\n let index = startIndex;\n for (let i = 0; i < len; i++) {\n index = wrap\n ? (index + direction + len) % len\n : Math.min(Math.max(index + direction, 0), len - 1);\n if (!isItemDisabled(items[index])) return index;\n if (!wrap && (index === 0 || index === len - 1)) return -1;\n }\n return -1;\n },\n [items, isItemDisabled],\n );\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n const closeMenu = useCallback(\n (options?: { restoreFocus?: boolean }) => {\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (options?.restoreFocus !== false) {\n triggerRef.current?.focus();\n }\n },\n [triggerRef],\n );\n\n const getItemId = useCallback(\n (index: number) => `${menuId}-option-${index}`,\n [menuId],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next =\n highlightedIndex < 0\n ? findNextEnabledIndex(-1, 1)\n : findNextEnabledIndex(highlightedIndex, 1);\n if (next >= 0) {\n setHighlightedIndex(next);\n listRef.current?.scrollToIndex(next);\n }\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev =\n highlightedIndex < 0\n ? findNextEnabledIndex(items.length, -1)\n : findNextEnabledIndex(highlightedIndex, -1);\n if (prev >= 0) {\n setHighlightedIndex(prev);\n listRef.current?.scrollToIndex(prev);\n }\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const first = findNextEnabledIndex(-1, 1, false);\n if (first >= 0) {\n setHighlightedIndex(first);\n listRef.current?.scrollToIndex(first);\n }\n break;\n }\n case \"End\": {\n e.preventDefault();\n const last = findNextEnabledIndex(items.length, -1, false);\n if (last >= 0) {\n setHighlightedIndex(last);\n listRef.current?.scrollToIndex(last);\n }\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \" \": {\n // Only activate on Space when the menu container itself has focus.\n // If a search input is focused, Space should type a space character.\n const target = e.target as HTMLElement;\n if (target.tagName === \"INPUT\") break;\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \"Escape\": {\n e.preventDefault();\n closeMenu();\n break;\n }\n case \"Tab\": {\n closeMenu({ restoreFocus: false });\n break;\n }\n }\n },\n [\n isOpen,\n highlightedIndex,\n items,\n findNextEnabledIndex,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!isOpen) openMenu();\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }\n },\n [isOpen, openMenu, closeMenu],\n );\n\n const getTriggerProps = useCallback((): MenuTriggerProps => {\n return {\n ref: triggerRef,\n onClick: () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": menuId,\n \"aria-expanded\": isOpen,\n \"data-state\": isOpen ? \"open\" : \"close\",\n };\n }, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);\n\n const getMenuProps: GetMenuPropsFn = useCallback(\n (opts?: MenuPropsArg): MenuReturnProps => {\n return {\n role: \"listbox\",\n id: menuId,\n \"aria-label\": label,\n tabIndex: 0,\n \"aria-activedescendant\":\n highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,\n ref: menuContainerRef,\n onKeyDown: handleKeyDown,\n className: opts?.className,\n style: { outline: \"none\", ...opts?.style },\n };\n },\n [menuId, label, highlightedIndex, getItemId, handleKeyDown],\n );\n\n const getItemProps: GetItemPropsFn = useCallback(\n (opts: ItemPropsArg): ItemReturnProps => {\n const { item, index, className, \"data-type\": dataType } = opts;\n return {\n role: \"option\",\n id: getItemId(index),\n \"aria-selected\": selectedItemIds.has(item.original.id),\n \"aria-disabled\": isItemDisabled(item) || undefined,\n onClick: () => {\n if (isItemDisabled(item)) return;\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n },\n onMouseMove: () => {\n if (highlightedIndex !== index) {\n setHighlightedIndex(index);\n }\n },\n className,\n \"data-type\": dataType,\n };\n },\n [\n getItemId,\n selectedItemIds,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n highlightedIndex,\n ],\n );\n\n return {\n isOpen,\n openMenu,\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useMemo, useCallback } from 'react';
|
|
3
|
+
import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-vt8ldsES.js';
|
|
4
|
+
|
|
5
|
+
const MultiSelectOptions = forwardRef(({ selectedOptions, items, virtualize, ...rest }, ref) => {
|
|
6
|
+
const selectedIds = useMemo(
|
|
7
|
+
() => new Set(selectedOptions.map((opt) => opt.id)),
|
|
8
|
+
[selectedOptions]
|
|
9
|
+
);
|
|
10
|
+
const getCheckedState = useCallback(
|
|
11
|
+
(item) => {
|
|
12
|
+
if (item.type === "select-all" || item.type === "select-filtered") {
|
|
13
|
+
return item.checkState ?? "indeterminate";
|
|
14
|
+
}
|
|
15
|
+
const checkId = item.type === "pinned-option" ? item.original.id : item.id;
|
|
16
|
+
return selectedIds.has(checkId) ? "checked" : "unchecked";
|
|
17
|
+
},
|
|
18
|
+
[selectedIds]
|
|
19
|
+
);
|
|
20
|
+
const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;
|
|
21
|
+
return /* @__PURE__ */ jsx(
|
|
22
|
+
ListComponent,
|
|
23
|
+
{
|
|
24
|
+
...rest,
|
|
25
|
+
ref,
|
|
26
|
+
items,
|
|
27
|
+
selectionType: "multiple",
|
|
28
|
+
getCheckedState
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
});
|
|
32
|
+
MultiSelectOptions.displayName = "MultiSelectOptions";
|
|
33
|
+
|
|
34
|
+
const useToggleSelection = ({
|
|
35
|
+
options,
|
|
36
|
+
pinnedSections,
|
|
37
|
+
selectedOptions,
|
|
38
|
+
onSelectedOptionsChange
|
|
39
|
+
}) => {
|
|
40
|
+
const allPinnedOptions = useMemo(() => {
|
|
41
|
+
return pinnedSections.flatMap((section) => section.options);
|
|
42
|
+
}, [pinnedSections]);
|
|
43
|
+
const handleItemClick = useCallback(
|
|
44
|
+
(option) => {
|
|
45
|
+
const isSelected = selectedOptions.some((opt) => opt.id === option.id);
|
|
46
|
+
if (isSelected) {
|
|
47
|
+
onSelectedOptionsChange(
|
|
48
|
+
selectedOptions.filter((opt) => opt.id !== option.id)
|
|
49
|
+
);
|
|
50
|
+
} else {
|
|
51
|
+
const fullOption = options.find((opt) => opt.id === option.id) || allPinnedOptions.find((opt) => opt.id === option.id);
|
|
52
|
+
if (fullOption) {
|
|
53
|
+
onSelectedOptionsChange([...selectedOptions, fullOption]);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
[selectedOptions, onSelectedOptionsChange, options, allPinnedOptions]
|
|
58
|
+
);
|
|
59
|
+
return { handleItemClick, allPinnedOptions };
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export { MultiSelectOptions as M, useToggleSelection as u };
|
|
63
|
+
//# sourceMappingURL=useToggleSelection-BdXW3Zg3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useToggleSelection-BdXW3Zg3.js","sources":["../src/internal/components/MultiSelectOptions.tsx","../src/internal/hooks/useToggleSelection.ts"],"sourcesContent":["import { MultiSelectFieldOption } from \"../../beta/components/MultiSelectField/types\";\nimport { CheckState } from \"../../types\";\nimport { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { OptionsPanel, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type MultiSelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOptions: MultiSelectFieldOption[];\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 virtualize?: boolean;\n};\n\nexport const MultiSelectOptions = forwardRef<\n OptionsPanelHandle,\n MultiSelectOptionsProps\n>(({ selectedOptions, items, virtualize, ...rest }, ref) => {\n const selectedIds = useMemo(\n () => new Set(selectedOptions.map((opt) => opt.id)),\n [selectedOptions],\n );\n\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState => {\n if (item.type === \"select-all\" || item.type === \"select-filtered\") {\n return item.checkState ?? \"indeterminate\";\n }\n const checkId =\n item.type === \"pinned-option\" ? item.original.id : item.id;\n return selectedIds.has(checkId) ? \"checked\" : \"unchecked\";\n },\n [selectedIds],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n items={items}\n selectionType=\"multiple\"\n getCheckedState={getCheckedState}\n />\n );\n});\n\nMultiSelectOptions.displayName = \"MultiSelectOptions\";\n","import { useCallback, useMemo } from \"react\";\nimport { SelectFieldOption } from \"../../beta/components/SelectField/types\";\nimport { NormalizedPinnedSection } from \"./usePinnedOptions\";\n\ntype UseToggleSelectionParams = {\n options: SelectFieldOption[];\n pinnedSections: NormalizedPinnedSection[];\n selectedOptions: SelectFieldOption[];\n onSelectedOptionsChange: (options: SelectFieldOption[]) => void;\n};\n\n/**\n * Shared multi-select toggle logic: computes allPinnedOptions and provides\n * handleItemClick to add/remove an option from the selection.\n * Used by both useComboMultiple and useSelectModeMultiple.\n */\nexport const useToggleSelection = ({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n}: UseToggleSelectionParams) => {\n const allPinnedOptions = useMemo(() => {\n return pinnedSections.flatMap((section) => section.options);\n }, [pinnedSections]);\n\n const handleItemClick = useCallback(\n (option: { id: string | number; label: string }) => {\n const isSelected = selectedOptions.some((opt) => opt.id === option.id);\n if (isSelected) {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n } else {\n const fullOption =\n options.find((opt) => opt.id === option.id) ||\n allPinnedOptions.find((opt) => opt.id === option.id);\n if (fullOption) {\n onSelectedOptionsChange([...selectedOptions, fullOption]);\n }\n }\n },\n [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions],\n );\n\n return { handleItemClick, allPinnedOptions };\n};\n"],"names":[],"mappings":";;;;AA+BO,MAAM,kBAAA,GAAqB,UAAA,CAGhC,CAAC,EAAE,eAAA,EAAiB,OAAO,UAAA,EAAY,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AAC1D,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IAClD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiC;AAChC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACjE,QAAA,OAAO,KAAK,UAAA,IAAc,eAAA;AAAA,MAC5B;AACA,MAAA,MAAM,UACJ,IAAA,CAAK,IAAA,KAAS,kBAAkB,IAAA,CAAK,QAAA,CAAS,KAAK,IAAA,CAAK,EAAA;AAC1D,MAAA,OAAO,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GAAI,SAAA,GAAY,WAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,uBAAA,GAA0B,YAAA;AAE7D,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAc,UAAA;AAAA,MACd;AAAA;AAAA,GACF;AAEJ,CAAC;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;ACjD1B,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,CAAC,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,MAAA,KAAmD;AAClD,MAAA,MAAM,UAAA,GAAa,gBAAgB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,uBAAA;AAAA,UACE,gBAAgB,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE;AAAA,SACtD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,aACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,IAC1C,iBAAiB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,uBAAA,CAAwB,CAAC,GAAG,eAAA,EAAiB,UAAU,CAAC,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,uBAAA,EAAyB,OAAA,EAAS,gBAAgB;AAAA,GACtE;AAEA,EAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAC7C;;;;"}
|
|
@@ -1,15 +1,5 @@
|
|
|
1
1
|
import { isValidElement } from 'react';
|
|
2
|
-
|
|
3
|
-
const warned = /* @__PURE__ */ new Set();
|
|
4
|
-
function warnOnce(message) {
|
|
5
|
-
if (process.env.NODE_ENV === "production") {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
if (!warned.has(message)) {
|
|
9
|
-
warned.add(message);
|
|
10
|
-
console.warn(message);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
2
|
+
import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
|
|
13
3
|
|
|
14
4
|
function warnDeprecatedErrorUsage(componentName, error) {
|
|
15
5
|
if (error === void 0 || typeof error === "boolean") return;
|
|
@@ -21,5 +11,5 @@ function warnDeprecatedErrorUsage(componentName, error) {
|
|
|
21
11
|
}
|
|
22
12
|
}
|
|
23
13
|
|
|
24
|
-
export {
|
|
25
|
-
//# sourceMappingURL=utils-
|
|
14
|
+
export { warnDeprecatedErrorUsage as w };
|
|
15
|
+
//# sourceMappingURL=utils-CM48ODEJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CM48ODEJ.js","sources":["../src/components/FieldMessage/utils.ts"],"sourcesContent":["import { isValidElement, type ReactElement } from \"react\";\nimport { warnOnce } from \"../../internal/functions\";\n\n/**\n * Logs a dev-only deprecation warning when `error` is passed as a `ReactElement`.\n * String values are the preferred type and are NOT deprecated.\n * Should be called in consumer components that accept the union `error` prop.\n */\nexport function warnDeprecatedErrorUsage(\n componentName: string,\n error: ReactElement | string | boolean | string[] | undefined,\n): void {\n if (error === undefined || typeof error === \"boolean\") return;\n if (typeof error === \"string\" || Array.isArray(error)) return;\n\n // At this point, error is a ReactElement\n if (isValidElement(error)) {\n warnOnce(\n `[Anvil2 ${componentName}] Passing a ReactElement to the \\`error\\` prop is deprecated. ` +\n `Use a string or string[] instead: \\`error=\"message\"\\` or \\`error={[\"msg1\", \"msg2\"]}\\`. ` +\n `See https://beta.anvil.servicetitan.com/docs/web/components/field-message/code`,\n );\n }\n}\n"],"names":[],"mappings":";;;AAQO,SAAS,wBAAA,CACd,eACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,OAAO,KAAA,KAAU,SAAA,EAAW;AACvD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAGvD,EAAA,IAAI,cAAA,CAAe,KAAK,CAAA,EAAG;AACzB,IAAA,QAAA;AAAA,MACE,WAAW,aAAa,CAAA,mOAAA;AAAA,KAG1B;AAAA,EACF;AACF;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const warned = /* @__PURE__ */ new Set();
|
|
2
|
+
function warnOnce(message) {
|
|
3
|
+
if (process.env.NODE_ENV === "production") {
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
if (!warned.has(message)) {
|
|
7
|
+
warned.add(message);
|
|
8
|
+
console.warn(message);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { warnOnce as w };
|
|
13
|
+
//# sourceMappingURL=warnOnce-Y9PRHcU4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnOnce-Y9PRHcU4.js","sources":["../src/internal/functions/warnOnce.ts"],"sourcesContent":["const warned = new Set<string>();\n\n/**\n * Logs a console.warn in development only, and only once per unique message.\n * Tree-shaken in production builds via the `process.env.NODE_ENV` guard.\n */\nexport function warnOnce(message: string): void {\n if (process.env.NODE_ENV === \"production\") {\n return;\n }\n\n if (!warned.has(message)) {\n warned.add(message);\n console.warn(message);\n }\n}\n"],"names":[],"mappings":"AAAA,MAAM,MAAA,uBAAa,GAAA,EAAY;AAMxB,SAAS,SAAS,OAAA,EAAuB;AAC9C,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,EAAG;AACxB,IAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,IAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,EACtB;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/anvil2",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"tabbable": "^6.2.0",
|
|
60
60
|
"tinycolor2": "^1.6.0",
|
|
61
61
|
"uuid": "^10.0.0",
|
|
62
|
-
"@servicetitan/hammer-
|
|
63
|
-
"@servicetitan/hammer-
|
|
62
|
+
"@servicetitan/hammer-icon": "1.2.0",
|
|
63
|
+
"@servicetitan/hammer-token": "2.5.1"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"@types/react": "^18 || ^19",
|
|
@@ -71,11 +71,12 @@
|
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@chromatic-com/storybook": "^5.0.1",
|
|
73
73
|
"@figma/code-connect": "^1.3.12",
|
|
74
|
-
"@storybook/addon-a11y": "10.
|
|
75
|
-
"@storybook/addon-docs": "10.
|
|
76
|
-
"@storybook/addon-links": "10.
|
|
77
|
-
"@storybook/addon-
|
|
78
|
-
"@storybook/
|
|
74
|
+
"@storybook/addon-a11y": "10.3.3",
|
|
75
|
+
"@storybook/addon-docs": "10.3.3",
|
|
76
|
+
"@storybook/addon-links": "10.3.3",
|
|
77
|
+
"@storybook/addon-mcp": "0.4.2",
|
|
78
|
+
"@storybook/addon-vitest": "10.3.3",
|
|
79
|
+
"@storybook/react-vite": "10.3.3",
|
|
79
80
|
"@testing-library/jest-dom": "^5.17.0",
|
|
80
81
|
"@testing-library/react": "^16.1.0",
|
|
81
82
|
"@testing-library/user-event": "^14.5.2",
|
|
@@ -101,7 +102,7 @@
|
|
|
101
102
|
"remark-parse": "^11.0.0",
|
|
102
103
|
"remark-stringify": "^11.0.0",
|
|
103
104
|
"sass": "1.87.0",
|
|
104
|
-
"storybook": "10.
|
|
105
|
+
"storybook": "10.3.3",
|
|
105
106
|
"svgo": "^3.3.2",
|
|
106
107
|
"typescript": "^5.7.2",
|
|
107
108
|
"unified": "^11.0.5",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox-LPr8zpzs.js","sources":["../src/components/Checkbox/internal/CheckboxGroupContext.tsx","../src/components/Checkbox/CheckboxGroup.tsx","../src/components/Checkbox/internal/Checkbox.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\n/**\n * Context value for CheckboxGroup\n * @property {boolean} hasError - Whether the group has an error state\n */\nexport type CheckboxGroupContextValue = {\n /**\n * Whether the checkbox group has an error state\n */\n hasError: boolean;\n};\n\n/**\n * Context for sharing state between CheckboxGroup and child Checkbox components\n */\nexport const CheckboxGroupContext = createContext<\n CheckboxGroupContextValue | undefined\n>(undefined);\n\n/**\n * Hook to access CheckboxGroup context from child Checkbox components\n * @returns CheckboxGroupContextValue if inside a CheckboxGroup, undefined otherwise\n */\nexport const useCheckboxGroupContext = () => {\n return useContext(CheckboxGroupContext);\n};\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ReactElement,\n useId,\n useMemo,\n} from \"react\";\nimport styles from \"./Checkbox.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelMoreInfoIcon } from \"../FieldLabel/internal/FieldLabelMoreInfoIcon\";\nimport { FieldLabelProps } from \"../../internal/types\";\nimport { HelperProps } from \"../../internal/components\";\nimport FieldMessage, { warnDeprecatedErrorUsage } from \"../FieldMessage\";\nimport { CheckboxGroupContext } from \"./internal/CheckboxGroupContext\";\n\n/**\n * Props for the CheckboxGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type CheckboxGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * required flag for label\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n\n /**\n * legend for the fieldset\n */\n legend: string | ReactElement;\n /**\n * Error state for the field. Pass `true` to indicate error styling without a message.\n * Pass a string, string[], or ReactElement (deprecated) for error messages.\n */\n error?: boolean | string | ReactElement | string[];\n /**\n * @deprecated No longer used. Error messages always use `aria-live=\"assertive\"`.\n */\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n /**\n * Warning message(s) to display. Supports a single string or an array of strings.\n */\n warning?: string | string[];\n /**\n * Description text to display below the field.\n */\n description?: HelperProps[\"description\"];\n /**\n * Hint text to display below the field.\n */\n hint?: HelperProps[\"hint\"];\n };\n\n/**\n * CheckboxGroup component for grouping related checkboxes together.\n *\n * Features:\n * - Groups multiple checkboxes with a common legend\n * - Supports required field indication\n * - Optional helper text and descriptions\n * - Full accessibility support with fieldset/legend\n * - Focus management for keyboard navigation\n * - Layout utility props for positioning and spacing\n * - Flexible layout direction (row/column)\n * - Screen reader support with hidden labels\n *\n * @example\n * <CheckboxGroup legend=\"Select your interests\" required>\n * <Checkbox label=\"Technology\" />\n * <Checkbox label=\"Sports\" />\n * <Checkbox label=\"Music\" />\n * </CheckboxGroup>\n */\nexport const CheckboxGroup = forwardRef<\n HTMLFieldSetElement,\n CheckboxGroupProps\n>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n\n const {\n className,\n children,\n description,\n error,\n errorAriaLive: _errorAriaLive,\n hint,\n warning,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const checkboxGroupClassNames = cx(styles[\"checkbox-group\"], className);\n const helperUid = useId();\n const moreInfoUid = useId();\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"flex-start\" : undefined),\n };\n\n const labelClassNames = cx(styles[\"label\"], {\n [styles[\"direction-row\"]]: layoutStyles?.flexDirection === \"row\",\n });\n\n warnDeprecatedErrorUsage(\"CheckboxGroup\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n\n const hasHelperText = hint || errorMessages || warning || description;\n\n const ariaDescribedBy =\n [hasHelperText && helperUid, moreInfo && moreInfoUid]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n const contextValue = useMemo(\n () => ({\n hasError: !!error,\n }),\n [error],\n );\n\n return (\n <fieldset\n role=\"group\"\n data-anv=\"checkbox-group\"\n className={checkboxGroupClassNames}\n ref={ref}\n style={styleCombined}\n onFocus={onFocus}\n onBlur={onBlur}\n {...rest}\n aria-describedby={ariaDescribedBy}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n </legend>\n <div className={styles[\"label-row\"]}>\n <FieldLabel aria-hidden required={required} className={labelClassNames}>\n {legend}\n </FieldLabel>\n {moreInfo && (\n <FieldLabelMoreInfoIcon\n moreInfo={moreInfo}\n moreInfoId={moreInfoUid}\n />\n )}\n </div>\n <CheckboxGroupContext.Provider value={contextValue}>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </CheckboxGroupContext.Provider>\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n </fieldset>\n );\n});\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n","import {\n forwardRef,\n ChangeEvent,\n ComponentPropsWithoutRef,\n ReactElement,\n MouseEvent,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\n\nimport styles from \"../Checkbox.module.scss\";\nimport { Svg, LayoutUtilProps } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { CheckboxState } from \"../types\";\nimport { useCheckboxGroupContext } from \"./CheckboxGroupContext\";\n\nexport type { CheckboxState };\n\n/**\n * Props for the Checkbox component\n * @extends LayoutUtilProps\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\" | \"onClick\" | \"indeterminate\">\n */\nexport type CheckboxProps = LayoutUtilProps &\n Omit<\n ComponentPropsWithoutRef<\"input\">,\n \"onChange\" | \"onClick\" | \"indeterminate\"\n > & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Indeterminate state of the checkbox\n * @accessibility Applies aria-checked=\"mixed\"\n * @default false\n */\n indeterminate?: boolean;\n\n /**\n * Callback when checkbox is changed\n */\n onChange?: (\n e: ChangeEvent<HTMLInputElement>,\n state?: CheckboxState,\n ) => void;\n\n /**\n * Callback when checkbox is clicked\n */\n onClick?: (e?: MouseEvent<HTMLInputElement>, state?: CheckboxState) => void;\n\n /**\n * label for checkbox\n * @accessibility This should either be a string or have text content inside for accessibility\n */\n label?: string | ReactElement;\n\n /**\n * Error state for the checkbox\n * @accessibility Applies aria-invalid=\"true\"\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides\n */\n icons?: {\n checked?: Svg;\n indeterminate?: Svg;\n unchecked?: Svg;\n };\n\n description?: HelperProps[\"description\"];\n\n /**\n * When `true`, hides the checkbox for visual users.\n * @default false\n */\n hideCheckbox?: boolean;\n };\n\nconst CheckboxElement = forwardRef<HTMLInputElement, CheckboxProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n indeterminate,\n onChange,\n onClick,\n value,\n className,\n disabled,\n error,\n icons,\n checked: checkedProp,\n defaultChecked,\n label,\n style,\n required,\n description,\n hideCheckbox = false,\n ...rest\n } = componentProps;\n\n const groupContext = useCheckboxGroupContext();\n const {\n checked: checkedIcon = CheckboxChecked,\n indeterminate: indeterminateIcon = CheckboxIndeterminate,\n unchecked: uncheckedIcon = CheckboxOutline,\n } = { ...icons };\n\n const isControlled = typeof checkedProp !== \"undefined\";\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: checkedProp ?? e.target.checked });\n };\n\n const onClickHandler = (e: MouseEvent<HTMLInputElement>) => {\n onClick?.(e, {\n value,\n checked: checkedProp ?? (e.target as HTMLInputElement).checked,\n });\n };\n\n const helperUid = useId();\n\n // Combine local error state with group error state\n const hasError = error || groupContext?.hasError;\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideCheckbox },\n className,\n );\n\n const checkboxClassNames = cx(styles[\"checkbox\"], {\n [styles[\"error\"]]: hasError,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div\n className={wrapperClassNames}\n style={styleCombined}\n data-anv=\"checkbox\"\n >\n <label className={checkboxClassNames}>\n <input\n type=\"checkbox\"\n disabled={disabled}\n value={value}\n onChange={onChangeHandler}\n onClick={onClickHandler}\n aria-checked={\n indeterminate ? \"mixed\" : (checkedProp ?? defaultChecked)\n }\n checked={isControlled ? checkedProp : undefined}\n defaultChecked={defaultChecked}\n aria-invalid={hasError}\n aria-describedby={description ? helperUid : undefined}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideCheckbox,\n })}\n aria-hidden\n >\n <Icon\n size=\"large\"\n svg={indeterminateIcon}\n className={styles[\"icon-indeterminate\"]}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={styles[\"icon-checked\"]}\n />\n\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={styles[\"icon-unchecked\"]}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideCheckbox })}>\n {label}\n\n {required && (\n <span aria-hidden className={styles[\"required-asterisk\"]}>\n *\n </span>\n )}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nCheckboxElement.displayName = \"Checkbox\";\n\n/**\n * Checkbox component for selecting one or more options from a list.\n *\n * Features:\n * - Controlled and uncontrolled state management\n * - Indeterminate state for partial selections\n * - Customizable icons for different states\n * - Error state with accessibility support\n * - Optional helper text and descriptions\n * - Hide checkbox option for visual-only interactions\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support\n * - Layout utility props for positioning and spacing\n *\n * @example\n * <Checkbox\n * label=\"Accept terms and conditions\"\n * onChange={(e, state) => console.log('Checked:', state.checked)}\n * required\n * />\n */\nexport const Checkbox = CheckboxElement;\n"],"names":["styles","CheckboxChecked","CheckboxIndeterminate","CheckboxOutline"],"mappings":"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"}
|