@servicetitan/anvil2 3.14.1 → 3.15.1
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 +18 -0
- package/dist/{AiMark-CWufA6pV.js → AiMark-BfmK30vL.js} +3 -3
- package/dist/AiMark-BfmK30vL.js.map +1 -0
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-RkvFtmRP.js → Alert-lLo1N7Tj.js} +3 -3
- package/dist/Alert-lLo1N7Tj.js.map +1 -0
- package/dist/Alert.js +1 -1
- package/dist/{Announcement-CGTv6M31.js → Announcement-Cnz80WGx.js} +2 -2
- package/dist/Announcement-Cnz80WGx.js.map +1 -0
- package/dist/Announcement.js +1 -1
- package/dist/Avatar-Ba662b3z.js +17 -0
- package/dist/Avatar-Ba662b3z.js.map +1 -0
- package/dist/{Avatar-DZxHhMTP.js → Avatar-CwnLhw9m.js} +1 -20
- package/dist/Avatar-CwnLhw9m.js.map +1 -0
- package/dist/Avatar.js +2 -2
- package/dist/Badge-BNrYBFiU.js.map +1 -1
- package/dist/{Breadcrumbs-DbOrdao2.js → Breadcrumbs-RdL4Fvmu.js} +3 -16
- package/dist/Breadcrumbs-RdL4Fvmu.js.map +1 -0
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Button-Dwh_Nd4l.js → Button-Dn6-01xl.js} +230 -67
- package/dist/Button-Dn6-01xl.js.map +1 -0
- package/dist/Button.js +1 -1
- package/dist/ButtonCompound-D7kA0qXr.js.map +1 -1
- package/dist/ButtonLink-DOFAxNvC.js.map +1 -1
- package/dist/{ButtonToggle-DKDBD1g3.js → ButtonToggle-BSU8GBxr.js} +2 -2
- package/dist/ButtonToggle-BSU8GBxr.js.map +1 -0
- package/dist/ButtonToggle.js +1 -1
- package/dist/{Calendar-DLnn6dJE.js → Calendar-DoLRAWLp.js} +2 -2
- package/dist/Calendar-DoLRAWLp.js.map +1 -0
- package/dist/{Calendar-CK-AAaSG.js → Calendar-IzXG1aJw.js} +12 -80
- package/dist/Calendar-IzXG1aJw.js.map +1 -0
- package/dist/Calendar.js +2 -2
- package/dist/Card-Bt0F6RTq.js.map +1 -1
- package/dist/{Checkbox-CboZhOtU.js → Checkbox-CVxbe-iN.js} +3 -3
- package/dist/Checkbox-CVxbe-iN.js.map +1 -0
- package/dist/{Checkbox-Cn4iNLW_.js → Checkbox-U-kuWhgc.js} +3 -23
- package/dist/Checkbox-U-kuWhgc.js.map +1 -0
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-UbrxYEqs.js → Chip-2OydLs66.js} +3 -3
- package/dist/Chip-2OydLs66.js.map +1 -0
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-COExZbOC.js → DataTable-DkEpJ_Op.js} +17 -42
- package/dist/DataTable-DkEpJ_Op.js.map +1 -0
- package/dist/{DateFieldRange-CpTxlASD.js → DateFieldRange-X2jdOTYY.js} +7 -15
- package/dist/DateFieldRange-X2jdOTYY.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-DR2kfrzh.js → DateFieldSingle-BJ16tpOz.js} +6 -9
- package/dist/DateFieldSingle-BJ16tpOz.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-4mS_2Mgw.js → DateFieldYearless-CMm8vtz_.js} +4 -4
- package/dist/DateFieldYearless-CMm8vtz_.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-C-yvKBkJ.js → DateFieldYearlessRange-BHHs-Z1Q.js} +3 -3
- package/dist/DateFieldYearlessRange-BHHs-Z1Q.js.map +1 -0
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-Bo4w8SsT.js → DaysOfTheWeek-BHXxs0Bo.js} +4 -4
- package/dist/DaysOfTheWeek-BHXxs0Bo.js.map +1 -0
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-CVA5zbrR.js → Details-BxqP-5vp.js} +13 -9
- package/dist/Details-BxqP-5vp.js.map +1 -0
- package/dist/Details.css +18 -14
- package/dist/Details.js +1 -1
- package/dist/{Dialog-Ds25dKQp.js → Dialog-B9llUKJz.js} +44 -102
- package/dist/Dialog-B9llUKJz.js.map +1 -0
- package/dist/Dialog.js +1 -1
- package/dist/{DialogCancelButton-DBL0aKTK.js → DialogCancelButton-C0r8hJ8Z.js} +2 -2
- package/dist/DialogCancelButton-C0r8hJ8Z.js.map +1 -0
- package/dist/DialogContext-DBgtApl9.js.map +1 -1
- package/dist/Divider-C7fp5Xb6.js.map +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndHandleButton-BRlodkDO.js.map +1 -1
- package/dist/DndSort.js +4 -6
- package/dist/DndSort.js.map +1 -1
- package/dist/{Drawer-Da-bj_6o.js → Drawer-Bjd2XLUX.js} +33 -103
- package/dist/Drawer-Bjd2XLUX.js.map +1 -0
- package/dist/Drawer.js +1 -1
- package/dist/DrawerContext-BSpnzXVZ.js.map +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/DrillDown.module-1VBKDZRA.js.map +1 -1
- package/dist/{EditCard-CocV93gS.js → EditCard-B6l2vhBS.js} +3 -3
- package/dist/EditCard-B6l2vhBS.js.map +1 -0
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-6aFKQfyD.js → FieldLabel-ThEmUiAq.js} +3 -4
- package/dist/FieldLabel-ThEmUiAq.js.map +1 -0
- package/dist/FieldLabel.js +1 -1
- package/dist/FieldMessage-8c9yA_kw.js.map +1 -1
- package/dist/{FilterBar-CZT1ryz_.js → FilterBar-ecqJDraA.js} +7 -7
- package/dist/FilterBar-ecqJDraA.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/Flex-CRF7gj0_.js.map +1 -1
- package/dist/{Grid-CvGQrIhE.js → Grid-BPCDtqoT.js} +2 -20
- package/dist/Grid-BPCDtqoT.js.map +1 -0
- package/dist/Grid.js +1 -1
- package/dist/Icon-B5zwN7GD.js.map +1 -1
- package/dist/{InputMask-CNV0Ucli.js → InputMask-BQigi5oW.js} +3 -3
- package/dist/{InputMask-CNV0Ucli.js.map → InputMask-BQigi5oW.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{InteractiveCard-C0g5PxB6.js → InteractiveCard-C2CYRtgQ.js} +3 -3
- package/dist/InteractiveCard-C2CYRtgQ.js.map +1 -0
- package/dist/InteractiveCard.js +1 -1
- package/dist/{Layout-C2Q2hyLG.js → Layout-C8fKY7Eh.js} +2 -1
- package/dist/Layout-C8fKY7Eh.js.map +1 -0
- package/dist/Layout.js +1 -1
- package/dist/Link-D7ycmfQ_.js.map +1 -1
- package/dist/LinkButton-C0wps8r1.js.map +1 -1
- package/dist/{List-BvzfZ9TW.js → List-CTr2fk7l.js} +2 -11
- package/dist/List-CTr2fk7l.js.map +1 -0
- package/dist/List.js +1 -1
- package/dist/{ListView-DFAWrwzi.js → ListView-YJscfG4x.js} +4 -26
- package/dist/ListView-YJscfG4x.js.map +1 -0
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-BErqErNN.js → Listbox-CD9ZptSZ.js} +4 -30
- package/dist/Listbox-CD9ZptSZ.js.map +1 -0
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-BjPE_ODh.js → Menu-Da2OEN0o.js} +3 -23
- package/dist/Menu-Da2OEN0o.js.map +1 -0
- package/dist/Menu.js +1 -1
- package/dist/{MenuFooter-fGSZYh8e.js → MenuFooter-D__gg92C.js} +2 -2
- package/dist/{MenuFooter-fGSZYh8e.js.map → MenuFooter-D__gg92C.js.map} +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-CqWUidCm.js → MultiSelectFieldSync-DpPO0cya.js} +7 -14
- package/dist/MultiSelectFieldSync-DpPO0cya.js.map +1 -0
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-DG3rKyQc.js → MultiSelectMenuSync-BN_3moW_.js} +5 -5
- package/dist/MultiSelectMenuSync-BN_3moW_.js.map +1 -0
- package/dist/{NumberField-DRYYJHec.js → NumberField-CxmJx4gs.js} +4 -4
- package/dist/NumberField-CxmJx4gs.js.map +1 -0
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.js +1 -1
- package/dist/Overflow.js.map +1 -1
- package/dist/{Page-pfK5iSmv.js → Page-IZ4p51iJ.js} +20 -189
- package/dist/Page-IZ4p51iJ.js.map +1 -0
- package/dist/Page.js +1 -1
- package/dist/{Pagination-Bc4fhdNm.js → Pagination-Su4VBAhT.js} +15 -11
- package/dist/Pagination-Su4VBAhT.js.map +1 -0
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-BgVOsP4J.js → Popover-CIh1CsoJ.js} +6 -74
- package/dist/Popover-CIh1CsoJ.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-Chb0uKfL.js → ProgressBar-TQ0fPmn9.js} +2 -2
- package/dist/ProgressBar-TQ0fPmn9.js.map +1 -0
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-DcNlFfSu.js → Radio-BYowelK2.js} +3 -3
- package/dist/Radio-BYowelK2.js.map +1 -0
- package/dist/Radio-C1VnatcL.js +31 -0
- package/dist/Radio-C1VnatcL.js.map +1 -0
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-DeO4p-S-.js → RichTextEditor-BpzUo8dB.js} +12 -17
- package/dist/RichTextEditor-BpzUo8dB.js.map +1 -0
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-Cvf1mJk8.js → SavedFiltersButton-D9GJbJQu.js} +10 -24
- package/dist/SavedFiltersButton-D9GJbJQu.js.map +1 -0
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/SearchField-ChoNtw8w.js.map +1 -1
- package/dist/SearchField-DX8hZyo2.js.map +1 -1
- package/dist/{SegmentedControl-CQ6DrbDc.js → SegmentedControl-BHVJmmTH.js} +4 -19
- package/dist/SegmentedControl-BHVJmmTH.js.map +1 -0
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-bp5hRyHK.js → SelectCard-DrmMU_GD.js} +4 -28
- package/dist/SelectCard-DrmMU_GD.js.map +1 -0
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-DZqxaZsp.js → SelectFieldLabel-BxsKvfqo.js} +2 -2
- package/dist/SelectFieldLabel-BxsKvfqo.js.map +1 -0
- package/dist/{SelectFieldSync-Wkx6DGpg.js → SelectFieldSync-BN2ebLWT.js} +8 -7
- package/dist/SelectFieldSync-BN2ebLWT.js.map +1 -0
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-O55TODxn.js → SelectMenuSync-DuPf8KCc.js} +5 -5
- package/dist/SelectMenuSync-DuPf8KCc.js.map +1 -0
- package/dist/{SelectOptions-0A8BYx1q.js → SelectOptions-BK7kNjYM.js} +2 -2
- package/dist/{SelectOptions-0A8BYx1q.js.map → SelectOptions-BK7kNjYM.js.map} +1 -1
- package/dist/{SelectTrigger-BfJ7DWYq.js → SelectTrigger-B5h-aqhl.js} +3 -3
- package/dist/SelectTrigger-B5h-aqhl.js.map +1 -0
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-DvsI-kSG.js → SelectTriggerBase-SML2Mlt-.js} +4 -6
- package/dist/SelectTriggerBase-SML2Mlt-.js.map +1 -0
- package/dist/{SideNav-BLXgM918.js → SideNav-CHG7i8Dy.js} +4 -57
- package/dist/SideNav-CHG7i8Dy.js.map +1 -0
- package/dist/SideNav.js +1 -1
- package/dist/Skeleton.js.map +1 -1
- package/dist/Spinner-B7tTWcP6.js.map +1 -1
- package/dist/SrOnly-pnf8ajnh.js.map +1 -1
- package/dist/{Stepper-CCKHWlUr.js → Stepper-l_P6VPOv.js} +12 -180
- package/dist/Stepper-l_P6VPOv.js.map +1 -0
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-CrDmBj4D.js → Switch-1iNdXTik.js} +2 -2
- package/dist/Switch-1iNdXTik.js.map +1 -0
- package/dist/Switch.js +1 -1
- package/dist/{Tab-Bqfvg8Ce.js → Tab-DR5YYXkq.js} +127 -76
- package/dist/Tab-DR5YYXkq.js.map +1 -0
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-CZccJAnm.js → Text-rihxXHSe.js} +2 -2
- package/dist/Text-rihxXHSe.js.map +1 -0
- package/dist/Text.js +1 -1
- package/dist/{TextField-DX5qyWPo.js → TextField-Bxd-Qzoi.js} +2 -2
- package/dist/TextField-Bxd-Qzoi.js.map +1 -0
- package/dist/{TextField-D0f9LwgQ.js → TextField-vuS7xeo-.js} +3 -3
- package/dist/TextField-vuS7xeo-.js.map +1 -0
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-CdTcekFd.js → Textarea-ppapJUwh.js} +3 -3
- package/dist/Textarea-ppapJUwh.js.map +1 -0
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-BxNglWQt.js → TimeField-Hwt_oRbg.js} +5 -9
- package/dist/TimeField-Hwt_oRbg.js.map +1 -0
- package/dist/TimeField.js +1 -1
- package/dist/TimezoneMessage-BrKB_psP.js.map +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-C-Z_FMbW.js → Toaster-BryQmKe1.js} +7 -19
- package/dist/Toaster-BryQmKe1.js.map +1 -0
- package/dist/{Toaster-nyQgF9Ki.js → Toaster-BtP_HezK.js} +3 -6
- package/dist/Toaster-BtP_HezK.js.map +1 -0
- package/dist/{Toolbar-BUbMtBVz.js → Toolbar-CMulzswf.js} +10 -79
- package/dist/Toolbar-CMulzswf.js.map +1 -0
- package/dist/{Toolbar-BxAFPvbn.js → Toolbar-DGHZpFi9.js} +12 -106
- package/dist/Toolbar-DGHZpFi9.js.map +1 -0
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-NSJ2XfXT.js → ToolbarButtonToggle-T8YnSJ5x.js} +3 -4
- package/dist/ToolbarButtonToggle-T8YnSJ5x.js.map +1 -0
- package/dist/{Tooltip-B4MSqIpg.js → Tooltip-C_VcYS9P.js} +3 -37
- package/dist/Tooltip-C_VcYS9P.js.map +1 -0
- package/dist/Tooltip.js +1 -1
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-DpvwlM7B.js → TreeSelectFieldSync-C0mXwYZL.js} +7 -7
- package/dist/TreeSelectFieldSync-C0mXwYZL.js.map +1 -0
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-BDitYX_k.js → TreeSelectMenuSync-D2TvKxP-.js} +4 -4
- package/dist/TreeSelectMenuSync-D2TvKxP-.js.map +1 -0
- package/dist/{TypeaheadTextField-Cj09sEji.js → TypeaheadTextField-DgazozK7.js} +10 -19
- package/dist/TypeaheadTextField-DgazozK7.js.map +1 -0
- package/dist/TypeaheadTextField.js +1 -1
- package/dist/{YearlessDateInputWithPicker-CoomgSEK.js → YearlessDateInputWithPicker-Bc8a33D5.js} +5 -7
- package/dist/YearlessDateInputWithPicker-Bc8a33D5.js.map +1 -0
- package/dist/assets/icons/st/gnav_analytics_active.svg +1 -0
- package/dist/assets/icons/st/gnav_analytics_inactive.svg +1 -0
- package/dist/assets/icons/st.ts +3 -1
- package/dist/beta.js +18 -18
- package/dist/{bulkActionTypes-DAo3_ECS.js → bulkActionTypes-D5y3Acn1.js} +2 -2
- package/dist/{bulkActionTypes-DAo3_ECS.js.map → bulkActionTypes-D5y3Acn1.js.map} +1 -1
- package/dist/{filter-state-CZcczj37.js → filter-state-Do862BNr.js} +56 -38
- package/dist/filter-state-Do862BNr.js.map +1 -0
- package/dist/{index-BwV_Pz7v.js → index-Bldaza5t.js} +5 -1
- package/dist/index-Bldaza5t.js.map +1 -0
- package/dist/{index-BFxzUzoz.js → index-Dt0zG4YB.js} +2 -2
- package/dist/{index-BFxzUzoz.js.map → index-Dt0zG4YB.js.map} +1 -1
- package/dist/index.js +63 -173
- package/dist/index.js.map +1 -1
- package/dist/{makeZeroShortcutPreprocessor-CxsiGTRW.js → makeZeroShortcutPreprocessor-D5KWcgUA.js} +2 -4
- package/dist/makeZeroShortcutPreprocessor-D5KWcgUA.js.map +1 -0
- package/dist/{proxy-DEehATlA.js → react-ORV84FjM.js} +6862 -5814
- package/dist/react-ORV84FjM.js.map +1 -0
- package/dist/src/beta/components/Calendar/Calendar.d.ts +8 -17
- package/dist/src/beta/components/Calendar/CalendarBetaPropsContext.d.ts +1 -0
- package/dist/src/beta/components/Calendar/useCalendarBetaProps.d.ts +1 -0
- package/dist/src/beta/components/FilterBar/FilterBar.d.ts +12 -53
- package/dist/src/beta/components/FilterBar/FilterDateList.d.ts +8 -0
- package/dist/src/beta/components/FilterBar/FilterDateRange.d.ts +15 -9
- package/dist/src/beta/components/FilterBar/FilterDateSingle.d.ts +15 -9
- package/dist/src/beta/components/FilterBar/FilterDrawer.d.ts +1 -14
- package/dist/src/beta/components/FilterBar/FilterItemWrapper.d.ts +0 -7
- package/dist/src/beta/components/FilterBar/FilterNumericRange.d.ts +4 -13
- package/dist/src/beta/components/FilterBar/FilterPopoverButton.d.ts +6 -8
- package/dist/src/beta/components/FilterBar/FilterSearchField.d.ts +3 -6
- package/dist/src/beta/components/FilterBar/FilterTextInput.d.ts +4 -13
- package/dist/src/beta/components/FilterBar/FilterToggleButton.d.ts +3 -14
- package/dist/src/beta/components/FilterBar/FilterTriggerButton.d.ts +3 -3
- package/dist/src/beta/components/FilterBar/internal/FilterGroupContext.d.ts +6 -20
- package/dist/src/beta/components/FilterBar/internal/adapters/index.d.ts +3 -8
- package/dist/src/beta/components/FilterBar/internal/adapters/types.d.ts +7 -19
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +48 -57
- package/dist/src/beta/components/FilterBar/internal/utils/dateConstraints.d.ts +3 -3
- package/dist/src/beta/components/FilterBar/internal/utils/dateListLibraryOptions.d.ts +4 -7
- package/dist/src/beta/components/FilterBar/internal/utils/filter-state.d.ts +3 -24
- package/dist/src/beta/components/InteractiveCard/InteractiveCard.d.ts +2 -47
- package/dist/src/beta/components/InteractiveCard/types.d.ts +13 -71
- package/dist/src/beta/components/Page/Page.d.ts +8 -166
- package/dist/src/beta/components/Page/PageContent.d.ts +3 -17
- package/dist/src/beta/components/Page/PageContext.d.ts +9 -0
- package/dist/src/beta/components/Page/PageFooter.d.ts +2 -15
- package/dist/src/beta/components/Page/PageHeader.d.ts +38 -91
- package/dist/src/beta/components/Page/PagePanel.d.ts +17 -115
- package/dist/src/beta/components/Page/PagePanelContent.d.ts +5 -37
- package/dist/src/beta/components/Page/PagePanelFooter.d.ts +4 -27
- package/dist/src/beta/components/Page/PagePanelHeader.d.ts +3 -16
- package/dist/src/beta/components/Page/PageSidebar.d.ts +8 -41
- package/dist/src/beta/components/Page/PageSidebarHeader.d.ts +2 -20
- package/dist/src/beta/components/Page/internal/PagePanelContext.d.ts +1 -6
- package/dist/src/beta/components/Page/pageBreakpoint.d.ts +5 -18
- package/dist/src/beta/components/RichTextEditor/RichTextEditor.d.ts +2 -25
- package/dist/src/beta/components/RichTextEditor/internal/LinkPopover.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/MentionList.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/MentionPopover.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/RichTextEditorToolbar.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/YouTubeEmbedPrompt.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/YouTubePopover.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/extensions/ImageUploadExtension.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/extensions/LinkKeyboardShortcutExtension.d.ts +1 -0
- package/dist/src/beta/components/RichTextEditor/internal/extensions/MentionExtension.d.ts +5 -0
- package/dist/src/beta/components/RichTextEditor/internal/extensions/SafeImageExtension.d.ts +3 -10
- package/dist/src/beta/components/RichTextEditor/internal/extensions/YoutubeExtension.d.ts +4 -0
- package/dist/src/beta/components/RichTextEditor/internal/useRichTextEditor.d.ts +3 -17
- package/dist/src/beta/components/RichTextEditor/types.d.ts +46 -71
- package/dist/src/beta/components/SavedFiltersButton/SavedFiltersButton.d.ts +2 -33
- package/dist/src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.d.ts +2 -12
- package/dist/src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.d.ts +2 -20
- package/dist/src/beta/components/SavedFiltersButton/parts.d.ts +0 -23
- package/dist/src/beta/components/SavedFiltersButton/types.d.ts +36 -85
- package/dist/src/beta/components/Table/DataTable/DataTable.d.ts +34 -84
- package/dist/src/beta/components/Table/DataTable/internal/DataTableBody.d.ts +15 -22
- package/dist/src/beta/components/Table/DataTable/internal/DataTableBodyRow.d.ts +47 -18
- package/dist/src/beta/components/Table/DataTable/internal/DataTableCellAffordance.d.ts +8 -0
- package/dist/src/beta/components/Table/DataTable/internal/DataTableFooter.d.ts +17 -23
- package/dist/src/beta/components/Table/DataTable/internal/DataTableHeader.d.ts +6 -9
- package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +16 -0
- package/dist/src/beta/components/Table/DataTable/internal/cells/CellFocusContext.d.ts +2 -11
- package/dist/src/beta/components/Table/DataTable/internal/cells/CellStatus.d.ts +7 -5
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableBodyCell.d.ts +4 -8
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableBodyImmutableCell.d.ts +4 -17
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableBodyMutableCell.d.ts +4 -18
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableFooterCell.d.ts +3 -10
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableHeaderCell.d.ts +3 -15
- package/dist/src/beta/components/Table/DataTable/internal/cells/DataTableOverflowCell.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/cells/useCellFocusListener.d.ts +2 -6
- package/dist/src/beta/components/Table/DataTable/internal/constants.d.ts +13 -30
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/DTFocusContext.d.ts +1 -6
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/DTFocusProvider.d.ts +3 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/useDTFocusDispatchContext.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/focus/useDTFocusStateContext.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/rowClick/DataTableRowClickContext.d.ts +2 -5
- package/dist/src/beta/components/Table/DataTable/internal/context/rowClick/DataTableRowClickProvider.d.ts +2 -5
- package/dist/src/beta/components/Table/DataTable/internal/context/rowClick/useDataTableRowClick.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/DataTableSurfaceCoordinatorContext.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/DataTableSurfaceCoordinatorProvider.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/context/surface/useDataTableSurfaceCoordinator.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/dataTableCellAffordanceHostClassName.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableBooleanCell.d.ts +6 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableCellEditIcon.d.ts +1 -4
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableCustomCell.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectAsyncCell.d.ts +5 -25
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectCell.d.ts +3 -13
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectAsyncCell.d.ts +5 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectCell.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableTextCell.d.ts +4 -0
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/types.d.ts +7 -20
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/useCustomEditHelpers.d.ts +13 -26
- package/dist/src/beta/components/Table/DataTable/internal/editable-cells/useEditableMenuCell.d.ts +2 -10
- package/dist/src/beta/components/Table/DataTable/internal/useAsyncData.d.ts +8 -0
- package/dist/src/beta/components/Table/DataTable/internal/useColumnOrder.d.ts +2 -2
- package/dist/src/beta/components/Table/DataTable/internal/useDataTableVirtualizer.d.ts +7 -18
- package/dist/src/beta/components/Table/DataTable/internal/usePageDataCache.d.ts +6 -10
- package/dist/src/beta/components/Table/DataTable/internal/util/cellPositionHelpers.d.ts +0 -3
- package/dist/src/beta/components/Table/DataTable/internal/util/cellTypeHelpers.d.ts +7 -24
- package/dist/src/beta/components/Table/DataTable/internal/util/getCellInteractives.d.ts +4 -17
- package/dist/src/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +5 -29
- package/dist/src/beta/components/Table/DataTable/internal/util/shallowSortingEqual.d.ts +1 -0
- package/dist/src/beta/components/Table/DataTable/parts.d.ts +3 -17
- package/dist/src/beta/components/Table/DataTable/types.d.ts +41 -64
- package/dist/src/beta/components/Table/base/TableBase.d.ts +8 -26
- package/dist/src/beta/components/Table/base/TableBody.d.ts +5 -14
- package/dist/src/beta/components/Table/base/TableContainer.d.ts +1 -11
- package/dist/src/beta/components/Table/base/TableFooter.d.ts +5 -14
- package/dist/src/beta/components/Table/base/TableHeader.d.ts +5 -14
- package/dist/src/beta/components/Table/base/cells/TableBodyCell.d.ts +4 -13
- package/dist/src/beta/components/Table/base/cells/TableEmptyCellContent.d.ts +1 -1
- package/dist/src/beta/components/Table/base/cells/TableFooterCell.d.ts +5 -13
- package/dist/src/beta/components/Table/base/cells/TableHeaderCell.d.ts +8 -25
- package/dist/src/beta/components/Table/base/cells/types.d.ts +2 -6
- package/dist/src/beta/components/Table/columnTypeDefaults.d.ts +7 -36
- package/dist/src/beta/components/Table/createColumnHelper.d.ts +38 -153
- package/dist/src/beta/components/Table/formatters/booleanFormatter.d.ts +4 -15
- package/dist/src/beta/components/Table/formatters/chipsFormatter.d.ts +7 -9
- package/dist/src/beta/components/Table/formatters/currencyFormatter.d.ts +3 -15
- package/dist/src/beta/components/Table/formatters/dateFormatter.d.ts +10 -23
- package/dist/src/beta/components/Table/formatters/dateTimeFormatter.d.ts +23 -46
- package/dist/src/beta/components/Table/formatters/htmlFormatter.d.ts +2 -11
- package/dist/src/beta/components/Table/formatters/htmlToMarkdown.d.ts +5 -10
- package/dist/src/beta/components/Table/formatters/markdownFormatter.d.ts +3 -8
- package/dist/src/beta/components/Table/formatters/numberFormatter.d.ts +8 -27
- package/dist/src/beta/components/Table/formatters/percentFormatter.d.ts +4 -15
- package/dist/src/beta/components/Table/formatters/presets.d.ts +4 -12
- package/dist/src/beta/components/Table/formatters/timeFormatter.d.ts +7 -17
- package/dist/src/beta/components/Table/formatters/yearlessDateFormatter.d.ts +9 -21
- package/dist/src/beta/components/Table/internal/ResizeHandle.d.ts +5 -9
- package/dist/src/beta/components/Table/internal/TruncateChips.d.ts +2 -11
- package/dist/src/beta/components/Table/internal/getCommonPinningClasses.d.ts +2 -1
- package/dist/src/beta/components/Table/internal/getCommonPinningStyles.d.ts +6 -2
- package/dist/src/beta/components/Table/internal/scrollCellIntoView.d.ts +3 -7
- package/dist/src/beta/components/Table/internal/types.d.ts +2 -7
- package/dist/src/beta/components/Table/types.d.ts +183 -462
- package/dist/src/beta/components/Toolbar/Toolbar.d.ts +35 -267
- package/dist/src/beta/components/Toolbar/ToolbarButton.d.ts +5 -26
- package/dist/src/beta/components/Toolbar/ToolbarButtonLink.d.ts +5 -28
- package/dist/src/beta/components/Toolbar/ToolbarButtonToggle.d.ts +5 -27
- package/dist/src/beta/components/Toolbar/ToolbarControlGroup.d.ts +6 -8
- package/dist/src/beta/components/Toolbar/ToolbarSearchField.d.ts +3 -14
- package/dist/src/beta/components/Toolbar/ToolbarSelect.d.ts +13 -65
- package/dist/src/beta/components/Toolbar/internal/ToolbarContext.d.ts +0 -32
- package/dist/src/beta/components/Toolbar/internal/ToolbarItemOverflowContext.d.ts +0 -13
- package/dist/src/beta/components/Toolbar/internal/ToolbarItemWrapper.d.ts +2 -28
- package/dist/src/beta/components/Toolbar/internal/ToolbarOverflowMenu.d.ts +4 -21
- package/dist/src/beta/components/Toolbar/internal/utils/accessibility.d.ts +7 -15
- package/dist/src/beta/components/Toolbar/types.d.ts +7 -26
- package/dist/src/beta/components/TreeSelectField/TreeSelectField.d.ts +2 -23
- package/dist/src/beta/components/TreeSelectField/TreeSelectFieldSync.d.ts +10 -46
- package/dist/src/beta/components/TreeSelectField/internal/TreeContent.d.ts +5 -21
- package/dist/src/beta/components/TreeSelectField/internal/TreePanel.d.ts +1 -38
- package/dist/src/beta/components/TreeSelectField/internal/TreeRow.d.ts +6 -38
- package/dist/src/beta/components/TreeSelectField/internal/TreeSelectFieldInput.d.ts +2 -50
- package/dist/src/beta/components/TreeSelectField/internal/VirtualizedTreePanel.d.ts +2 -39
- package/dist/src/beta/components/TreeSelectField/internal/treeSync.d.ts +6 -21
- package/dist/src/beta/components/TreeSelectField/internal/treeUtils.d.ts +3 -19
- package/dist/src/beta/components/TreeSelectField/internal/useTree.d.ts +9 -50
- package/dist/src/beta/components/TreeSelectField/internal/useTreeCascade.d.ts +8 -79
- package/dist/src/beta/components/TreeSelectField/internal/useTreeKeyboard.d.ts +3 -29
- package/dist/src/beta/components/TreeSelectField/internal/useTreeLazyCascade.d.ts +8 -36
- package/dist/src/beta/components/TreeSelectField/internal/useTreeLoader.d.ts +10 -34
- package/dist/src/beta/components/TreeSelectField/parts.d.ts +3 -9
- package/dist/src/beta/components/TreeSelectField/types.d.ts +82 -68
- package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenu.d.ts +4 -18
- package/dist/src/beta/components/TreeSelectMenu/TreeSelectMenuSync.d.ts +9 -47
- package/dist/src/beta/components/TreeSelectMenu/parts.d.ts +4 -4
- package/dist/src/beta/components/TreeSelectMenu/types.d.ts +44 -54
- package/dist/src/beta/components/TypeaheadTextField/TypeaheadTextField.d.ts +15 -43
- package/dist/src/beta/components/TypeaheadTextField/internal/SuggestionItem.d.ts +1 -18
- package/dist/src/beta/hooks/useAdaptiveView/useAdaptiveView.d.ts +6 -41
- package/dist/src/components/AiMark/AiMark.d.ts +9 -69
- package/dist/src/components/AiMark/internal/AiMarkIconAnimated.d.ts +2 -20
- package/dist/src/components/AiMark/internal/AiMarkInteractive.d.ts +4 -0
- package/dist/src/components/Alert/Alert.d.ts +10 -54
- package/dist/src/components/Announcement/Announcement.d.ts +7 -49
- package/dist/src/components/Avatar/Avatar.d.ts +5 -41
- package/dist/src/components/Avatar/AvatarGroup.d.ts +4 -25
- package/dist/src/components/Avatar/internal/Avatar.d.ts +1 -44
- package/dist/src/components/Avatar/internal/AvatarBase.d.ts +13 -53
- package/dist/src/components/Badge/Badge.d.ts +9 -42
- package/dist/src/components/Breadcrumbs/Breadcrumbs.d.ts +6 -33
- package/dist/src/components/Breadcrumbs/BreadcrumbsLink.d.ts +1 -15
- package/dist/src/components/Button/Button.d.ts +19 -41
- package/dist/src/components/Button/internal/buttonAiMarkUtils.d.ts +2 -5
- package/dist/src/components/ButtonCompound/ButtonCompound.d.ts +5 -28
- package/dist/src/components/ButtonLink/ButtonLink.d.ts +23 -59
- package/dist/src/components/ButtonToggle/ButtonToggle.d.ts +14 -51
- package/dist/src/components/Calendar/Calendar.d.ts +43 -239
- package/dist/src/components/Calendar/CalendarContext.d.ts +32 -102
- package/dist/src/components/Calendar/CalendarMonth.d.ts +1 -6
- package/dist/src/components/Calendar/CalendarMonthButton.d.ts +2 -11
- package/dist/src/components/Calendar/CalendarNextButton.d.ts +1 -8
- package/dist/src/components/Calendar/CalendarNowButton.d.ts +5 -12
- package/dist/src/components/Calendar/CalendarPrevButton.d.ts +1 -8
- package/dist/src/components/Calendar/CalendarYearButton.d.ts +2 -10
- package/dist/src/components/Calendar/internal/CalendarDay.d.ts +3 -13
- package/dist/src/components/Calendar/internal/CalendarMonthSelection.d.ts +3 -17
- package/dist/src/components/Calendar/internal/CalendarWeek.d.ts +5 -18
- package/dist/src/components/Calendar/internal/utils.d.ts +1 -0
- package/dist/src/components/Card/Card.d.ts +4 -21
- package/dist/src/components/Checkbox/Checkbox.d.ts +3 -50
- package/dist/src/components/Checkbox/CheckboxGroup.d.ts +21 -65
- package/dist/src/components/Checkbox/internal/Checkbox.d.ts +32 -90
- package/dist/src/components/Checkbox/internal/CheckboxGroupContext.d.ts +2 -14
- package/dist/src/components/Checkbox/types.d.ts +2 -0
- package/dist/src/components/Chip/Chip.d.ts +5 -41
- package/dist/src/components/Chip/internal/Chip.d.ts +13 -84
- package/dist/src/components/DateFieldRange/DateFieldRange.d.ts +27 -44
- package/dist/src/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +7 -0
- package/dist/src/components/DateFieldRange/internal/MaskedDateRangeInput.d.ts +18 -11
- package/dist/src/components/DateFieldRange/internal/maskito/dateRangePlaceholderMask.d.ts +2 -0
- package/dist/src/components/DateFieldRange/internal/useDateFieldRangeConversion.d.ts +1 -7
- package/dist/src/components/DateFieldRange/internal/useDateFieldRangeState.d.ts +11 -33
- package/dist/src/components/DateFieldRange/internal/utils.d.ts +4 -0
- package/dist/src/components/DateFieldRange/parts.d.ts +2 -7
- package/dist/src/components/DateFieldSingle/DateFieldSingle.d.ts +24 -46
- package/dist/src/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +4 -0
- package/dist/src/components/DateFieldSingle/internal/MaskedDateInput.d.ts +15 -8
- package/dist/src/components/DateFieldSingle/internal/TimezoneMessage.d.ts +2 -0
- package/dist/src/components/DateFieldSingle/internal/maskito/datePlaceholderMask.d.ts +1 -0
- package/dist/src/components/DateFieldSingle/internal/maskito/makeZeroShortcutPreprocessor.d.ts +3 -5
- package/dist/src/components/DateFieldSingle/internal/useDateFieldSingleConversion.d.ts +3 -29
- package/dist/src/components/DateFieldSingle/internal/useDateFieldSingleState.d.ts +13 -22
- package/dist/src/components/DateFieldSingle/internal/utils.d.ts +6 -16
- package/dist/src/components/DateFieldSingle/parts.d.ts +2 -7
- package/dist/src/components/DateFieldSingle/types.d.ts +1 -0
- package/dist/src/components/DateFieldYearless/DateFieldYearless.d.ts +31 -96
- package/dist/src/components/DateFieldYearless/internal/PickerList.d.ts +12 -40
- package/dist/src/components/DateFieldYearless/internal/PickerListOption.d.ts +5 -22
- package/dist/src/components/DateFieldYearless/internal/YearlessDateInput.d.ts +23 -8
- package/dist/src/components/DateFieldYearless/internal/YearlessDateInputWithPicker.d.ts +31 -90
- package/dist/src/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +6 -8
- package/dist/src/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.d.ts +1 -0
- package/dist/src/components/DateFieldYearless/internal/maskito/yearlessDateSegmentsStepping.d.ts +3 -5
- package/dist/src/components/DateFieldYearless/internal/utils.d.ts +7 -36
- package/dist/src/components/DateFieldYearless/parts.d.ts +2 -4
- package/dist/src/components/DateFieldYearless/types.d.ts +3 -0
- package/dist/src/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +32 -48
- package/dist/src/components/DateFieldYearlessRange/parts.d.ts +2 -4
- package/dist/src/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +32 -93
- package/dist/src/components/Details/Details.d.ts +10 -38
- package/dist/src/components/Details/DetailsContent.d.ts +6 -30
- package/dist/src/components/Details/DetailsSummary.d.ts +2 -18
- package/dist/src/components/Details/internal/DetailsArrow.d.ts +1 -17
- package/dist/src/components/Dialog/Dialog.d.ts +41 -218
- package/dist/src/components/Dialog/DialogCancelButton.d.ts +2 -17
- package/dist/src/components/Dialog/DialogContent.d.ts +4 -35
- package/dist/src/components/Dialog/DialogFooter.d.ts +4 -26
- package/dist/src/components/Dialog/DialogHeader.d.ts +2 -17
- package/dist/src/components/Dialog/internal/DialogContext.d.ts +0 -3
- package/dist/src/components/Dialog/internal/useInitialFocus.d.ts +3 -14
- package/dist/src/components/Divider/Divider.d.ts +8 -44
- package/dist/src/components/Dnd/DndHandle.d.ts +1 -18
- package/dist/src/components/Dnd/DndHandleButton.d.ts +2 -26
- package/dist/src/components/Dnd/DndSortLine.d.ts +4 -31
- package/dist/src/components/Dnd/DndZone.d.ts +6 -43
- package/dist/src/components/Dnd/index.d.ts +8 -0
- package/dist/src/components/DndSort/DndSort.d.ts +2 -34
- package/dist/src/components/DndSort/DndSortCard.d.ts +7 -51
- package/dist/src/components/DndSort/DndSortZone.d.ts +17 -99
- package/dist/src/components/DndSort/index.d.ts +6 -0
- package/dist/src/components/DndSort/internal/DndSortContextProvider.d.ts +1 -3
- package/dist/src/components/DndSort/internal/DndSortItem.d.ts +0 -11
- package/dist/src/components/DndSort/internal/DndSortOverlay.d.ts +0 -4
- package/dist/src/components/DndSort/internal/DndSortZoneContextProvider.d.ts +1 -9
- package/dist/src/components/DndSort/internal/test-utils.d.ts +2 -9
- package/dist/src/components/DndSort/internal/utils.d.ts +6 -32
- package/dist/src/components/DndSort/types.d.ts +14 -35
- package/dist/src/components/Drawer/Drawer.d.ts +25 -151
- package/dist/src/components/Drawer/DrawerCancelButton.d.ts +2 -21
- package/dist/src/components/Drawer/DrawerContent.d.ts +4 -38
- package/dist/src/components/Drawer/DrawerFooter.d.ts +4 -30
- package/dist/src/components/Drawer/DrawerHeader.d.ts +9 -41
- package/dist/src/components/Drawer/index.d.ts +1 -1
- package/dist/src/components/Drawer/internal/DrawerContext.d.ts +0 -15
- package/dist/src/components/Drawer/internal/useDrawerContext.d.ts +1 -6
- package/dist/src/components/DrillDown/DrillDown.d.ts +20 -48
- package/dist/src/components/DrillDown/DrillDownContent.d.ts +1 -21
- package/dist/src/components/DrillDown/DrillDownFooter.d.ts +1 -25
- package/dist/src/components/DrillDown/DrillDownHeader.d.ts +3 -25
- package/dist/src/components/DrillDown/DrillDownNextButton.d.ts +2 -22
- package/dist/src/components/DrillDown/DrillDownPrevButton.d.ts +2 -22
- package/dist/src/components/DrillDown/internal/DrillDownContext.d.ts +3 -0
- package/dist/src/components/DrillDown/internal/useDrillDownContext.d.ts +1 -0
- package/dist/src/components/DrillDown/internal/useDrillDownContextState.d.ts +4 -0
- package/dist/src/components/DrillDown/useDrilldown.d.ts +4 -23
- package/dist/src/components/EditCard/EditCard.d.ts +21 -77
- package/dist/src/components/FieldLabel/FieldLabel.d.ts +13 -46
- package/dist/src/components/FieldLabel/internal/FieldLabelButton.d.ts +1 -20
- package/dist/src/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +2 -5
- package/dist/src/components/FieldMessage/FieldMessage.d.ts +18 -56
- package/dist/src/components/FieldMessage/utils.d.ts +2 -3
- package/dist/src/components/Flex/Flex.d.ts +12 -63
- package/dist/src/components/Flex/internal/FlexSpecificProps.d.ts +6 -22
- package/dist/src/components/Grid/Grid.d.ts +15 -92
- package/dist/src/components/Grid/internal/GridItem.d.ts +0 -23
- package/dist/src/components/Grid/internal/GridSpecificProps.d.ts +5 -19
- package/dist/src/components/Icon/Icon.d.ts +10 -58
- package/dist/src/components/Layout/Layout.d.ts +60 -124
- package/dist/src/components/Link/Link.d.ts +12 -38
- package/dist/src/components/Link/internal/Link.d.ts +7 -52
- package/dist/src/components/Link/internal/LinkHeadless.d.ts +3 -19
- package/dist/src/components/Link/useLinkStyles.d.ts +3 -8
- package/dist/src/components/LinkButton/LinkButton.d.ts +9 -28
- package/dist/src/components/List/List.d.ts +10 -48
- package/dist/src/components/List/ListItem.d.ts +1 -4
- package/dist/src/components/ListView/ListView.d.ts +4 -46
- package/dist/src/components/ListView/ListViewOption.d.ts +9 -20
- package/dist/src/components/ListView/ListViewOptionCell.d.ts +1 -11
- package/dist/src/components/ListView/internal/ListViewContext.d.ts +2 -13
- package/dist/src/components/ListView/internal/types.d.ts +17 -35
- package/dist/src/components/Listbox/Listbox.d.ts +32 -99
- package/dist/src/components/Listbox/ListboxOption.d.ts +7 -28
- package/dist/src/components/Listbox/ListboxOptionGroup.d.ts +6 -23
- package/dist/src/components/Listbox/internal/ListboxContext.d.ts +2 -20
- package/dist/src/components/Menu/Menu.d.ts +8 -48
- package/dist/src/components/Menu/MenuItem.d.ts +8 -41
- package/dist/src/components/Menu/internal/MenuContext.d.ts +0 -9
- package/dist/src/components/Menu/internal/MenuNested.d.ts +2 -35
- package/dist/src/components/Menu/internal/menuSelectors.d.ts +0 -3
- package/dist/src/components/Menu/types.d.ts +32 -40
- package/dist/src/components/MultiSelectField/MultiSelectField.d.ts +1 -19
- package/dist/src/components/MultiSelectField/MultiSelectFieldSync.d.ts +10 -65
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -3
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldInput.d.ts +1 -49
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -4
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldTrigger.d.ts +1 -4
- package/dist/src/components/MultiSelectField/internal/types.d.ts +0 -2
- package/dist/src/components/MultiSelectField/internal/useChipLayout.d.ts +1 -7
- package/dist/src/components/MultiSelectField/internal/useComboMultiple.d.ts +3 -20
- package/dist/src/components/MultiSelectField/internal/useSelectModeMultiple.d.ts +1 -6
- package/dist/src/components/MultiSelectField/parts.d.ts +0 -12
- package/dist/src/components/MultiSelectField/types.d.ts +97 -215
- package/dist/src/components/MultiSelectMenu/MultiSelectMenu.d.ts +1 -30
- package/dist/src/components/MultiSelectMenu/MultiSelectMenuSync.d.ts +10 -34
- package/dist/src/components/MultiSelectMenu/types.d.ts +75 -98
- package/dist/src/components/NumberField/NumberField.d.ts +76 -40
- package/dist/src/components/Overflow/Overflow.d.ts +17 -61
- package/dist/src/components/Overflow/OverflowText.d.ts +10 -60
- package/dist/src/components/Overflow/index.d.ts +4 -21
- package/dist/src/components/Page/Page.d.ts +8 -156
- package/dist/src/components/Page/PageContent.d.ts +4 -19
- package/dist/src/components/Page/PageContext.d.ts +9 -0
- package/dist/src/components/Page/PageFooter.d.ts +2 -15
- package/dist/src/components/Page/PageHeader.d.ts +34 -85
- package/dist/src/components/Page/PagePanel.d.ts +13 -52
- package/dist/src/components/Page/PageSidebar.d.ts +8 -41
- package/dist/src/components/Page/PageSidebarHeader.d.ts +2 -20
- package/dist/src/components/Page/pageBreakpoint.d.ts +6 -19
- package/dist/src/components/Pagination/Pagination.d.ts +44 -31
- package/dist/src/components/Pagination/internal/Pagination.d.ts +6 -23
- package/dist/src/components/Pagination/internal/PaginationItem.d.ts +5 -38
- package/dist/src/components/Pagination/internal/PaginationItemsPerPageMenu.d.ts +5 -35
- package/dist/src/components/Pagination/internal/PaginationOverflowMenu.d.ts +12 -52
- package/dist/src/components/Pagination/internal/usePaginationArray.d.ts +4 -19
- package/dist/src/components/Pagination/parts.d.ts +3 -14
- package/dist/src/components/Popover/Popover.d.ts +55 -296
- package/dist/src/components/Popover/PopoverButton.d.ts +2 -29
- package/dist/src/components/Popover/PopoverClose.d.ts +2 -28
- package/dist/src/components/Popover/PopoverContent.d.ts +8 -38
- package/dist/src/components/Popover/PopoverTrigger.d.ts +6 -32
- package/dist/src/components/Popover/internal/compareElements.d.ts +1 -0
- package/dist/src/components/Popover/internal/usePopoverContext.d.ts +1 -0
- package/dist/src/components/ProgressBar/ProgressBar.d.ts +17 -69
- package/dist/src/components/Radio/Radio.d.ts +3 -82
- package/dist/src/components/Radio/RadioGroup.d.ts +21 -73
- package/dist/src/components/Radio/internal/Radio.d.ts +22 -117
- package/dist/src/components/Radio/internal/RadioGroupContext.d.ts +2 -14
- package/dist/src/components/Radio/types.d.ts +2 -9
- package/dist/src/components/SearchField/SearchField.d.ts +5 -43
- package/dist/src/components/SearchField/internal/SearchField.d.ts +6 -53
- package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +12 -82
- package/dist/src/components/SegmentedControl/SegmentedControlSegment.d.ts +12 -43
- package/dist/src/components/SegmentedControl/internal/SegmentedControlContext.d.ts +0 -15
- package/dist/src/components/SelectCard/SelectCard.d.ts +13 -78
- package/dist/src/components/SelectCard/SelectCardGroup.d.ts +13 -47
- package/dist/src/components/SelectCard/internal/SelectCardContext.d.ts +14 -51
- package/dist/src/components/SelectCard/internal/SelectCardProvider.d.ts +3 -29
- package/dist/src/components/SelectField/SelectField.d.ts +1 -21
- package/dist/src/components/SelectField/SelectFieldSync.d.ts +6 -44
- package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -4
- package/dist/src/components/SelectField/internal/SelectFieldInput.d.ts +1 -41
- package/dist/src/components/SelectField/internal/SelectFieldLabel.d.ts +3 -30
- package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -4
- package/dist/src/components/SelectField/internal/SelectFieldTrigger.d.ts +2 -5
- package/dist/src/components/SelectField/internal/useCombo.d.ts +1 -3
- package/dist/src/components/SelectField/internal/useSelectMode.d.ts +1 -4
- package/dist/src/components/SelectField/types.d.ts +95 -171
- package/dist/src/components/SelectMenu/SelectMenu.d.ts +1 -26
- package/dist/src/components/SelectMenu/SelectMenuSync.d.ts +6 -30
- package/dist/src/components/SelectMenu/internal/useMenuInteraction.d.ts +2 -0
- package/dist/src/components/SelectMenu/types.d.ts +65 -64
- package/dist/src/components/SelectTrigger/SelectTrigger.d.ts +19 -11
- package/dist/src/components/SelectTrigger/internal/SelectTriggerBase.d.ts +18 -2
- package/dist/src/components/SideNav/SideNav.d.ts +10 -77
- package/dist/src/components/SideNav/SideNavCollapsible.d.ts +14 -49
- package/dist/src/components/SideNav/SideNavContext.d.ts +0 -18
- package/dist/src/components/SideNav/SideNavGroup.d.ts +2 -27
- package/dist/src/components/SideNav/SideNavLink.d.ts +8 -35
- package/dist/src/components/SideNav/internal/SideNavContext.d.ts +1 -13
- package/dist/src/components/SideNav/internal/SideNavLink.d.ts +14 -50
- package/dist/src/components/SideNav/internal/SideNavProvider.d.ts +1 -17
- package/dist/src/components/SideNav/internal/utils.d.ts +1 -13
- package/dist/src/components/SideNav/useSideNav.d.ts +2 -3
- package/dist/src/components/Skeleton/SkeletonCircle.d.ts +5 -39
- package/dist/src/components/Skeleton/SkeletonPill.d.ts +5 -39
- package/dist/src/components/Skeleton/SkeletonRectangle.d.ts +5 -40
- package/dist/src/components/Skeleton/SkeletonText.d.ts +6 -43
- package/dist/src/components/Skeleton/index.d.ts +5 -0
- package/dist/src/components/Spinner/Spinner.d.ts +5 -34
- package/dist/src/components/SrOnly/SrOnly.d.ts +2 -13
- package/dist/src/components/Stepper/Stepper.d.ts +34 -210
- package/dist/src/components/Stepper/StepperFinalPanel.d.ts +2 -23
- package/dist/src/components/Stepper/StepperList.d.ts +1 -22
- package/dist/src/components/Stepper/StepperNextButton.d.ts +12 -52
- package/dist/src/components/Stepper/StepperPanel.d.ts +6 -37
- package/dist/src/components/Stepper/StepperPrevButton.d.ts +6 -32
- package/dist/src/components/Stepper/StepperStep.d.ts +8 -43
- package/dist/src/components/Stepper/base/StepperBase.d.ts +18 -67
- package/dist/src/components/Stepper/base/StepperBaseList.d.ts +1 -15
- package/dist/src/components/Stepper/base/StepperBasePanel.d.ts +6 -23
- package/dist/src/components/Stepper/base/StepperBaseStep.d.ts +14 -37
- package/dist/src/components/Stepper/internal/StepperWizardBootstrap.d.ts +4 -0
- package/dist/src/components/Stepper/internal/countRegisteredSteps.d.ts +1 -0
- package/dist/src/components/Switch/Switch.d.ts +14 -61
- package/dist/src/components/Tab/Tab.d.ts +14 -115
- package/dist/src/components/Tab/TabButton.d.ts +7 -39
- package/dist/src/components/Tab/TabList.d.ts +1 -20
- package/dist/src/components/Tab/TabPanel.d.ts +3 -24
- package/dist/src/components/Text/Text.d.ts +3 -32
- package/dist/src/components/Text/types.d.ts +13 -69
- package/dist/src/components/TextField/TextField.d.ts +6 -14
- package/dist/src/components/TextField/internal/TextField.d.ts +21 -11
- package/dist/src/components/Textarea/Textarea.d.ts +18 -57
- package/dist/src/components/Textarea/types.d.ts +7 -20
- package/dist/src/components/TimeField/TimeField.d.ts +14 -65
- package/dist/src/components/TimeField/internal/MaskedTimeInput.d.ts +10 -64
- package/dist/src/components/TimeField/internal/constants.d.ts +2 -12
- package/dist/src/components/TimeField/internal/maskito/timePlaceholderMask.d.ts +1 -13
- package/dist/src/components/TimeField/internal/types.d.ts +9 -14
- package/dist/src/components/TimeField/internal/utils/timeFormatting.d.ts +1 -8
- package/dist/src/components/TimeField/internal/utils/timeOptions.d.ts +2 -16
- package/dist/src/components/TimeField/internal/utils/timeParsing.d.ts +3 -29
- package/dist/src/components/TimeField/internal/utils/timeRounding.d.ts +5 -47
- package/dist/src/components/TimeField/internal/utils/timeValidation.d.ts +4 -22
- package/dist/src/components/Toast/Toaster.d.ts +2 -40
- package/dist/src/components/Toast/internal/Toast.d.ts +14 -75
- package/dist/src/components/Toast/internal/ToastProvider.d.ts +2 -64
- package/dist/src/components/Toast/internal/ToastStack.d.ts +13 -59
- package/dist/src/components/Toast/internal/Toaster.d.ts +18 -61
- package/dist/src/components/Toast/internal/ToasterPopover.d.ts +1 -16
- package/dist/src/components/Toast/internal/addOrUpdateToastHeight.d.ts +1 -6
- package/dist/src/components/Toast/internal/constants.d.ts +0 -15
- package/dist/src/components/Toast/internal/types.d.ts +1 -0
- package/dist/src/components/Toast/internal/useCloseToast.d.ts +1 -5
- package/dist/src/components/Toast/internal/useHotkeyFocus.d.ts +2 -10
- package/dist/src/components/Toast/internal/useShowMoreButtonPositionStyles.d.ts +1 -4
- package/dist/src/components/Toast/internal/useToastPositionStyles.d.ts +1 -5
- package/dist/src/components/Toast/internal/useToasts.d.ts +1 -5
- package/dist/src/components/Toast/toast.d.ts +14 -63
- package/dist/src/components/Toolbar/Toolbar.d.ts +16 -138
- package/dist/src/components/Toolbar/ToolbarButton.d.ts +4 -29
- package/dist/src/components/Toolbar/ToolbarButtonLink.d.ts +3 -28
- package/dist/src/components/Toolbar/ToolbarButtonToggle.d.ts +2 -24
- package/dist/src/components/Toolbar/ToolbarSelect.d.ts +12 -65
- package/dist/src/components/Toolbar/internal/ToolbarContext.d.ts +0 -31
- package/dist/src/components/Toolbar/internal/ToolbarItemOverflowContext.d.ts +0 -13
- package/dist/src/components/Toolbar/internal/ToolbarItemWrapper.d.ts +1 -24
- package/dist/src/components/Toolbar/internal/ToolbarOverflowMenu.d.ts +1 -23
- package/dist/src/components/Toolbar/internal/utils/accessibility.d.ts +4 -15
- package/dist/src/components/Toolbar/types.d.ts +7 -21
- package/dist/src/components/Tooltip/Tooltip.d.ts +17 -96
- package/dist/src/components/Tooltip/TooltipContent.d.ts +1 -23
- package/dist/src/components/Tooltip/TooltipTrigger.d.ts +3 -22
- package/dist/src/components/Tooltip/internal/TooltipContext.d.ts +0 -66
- package/dist/src/components/Tooltip/internal/useTooltipContext.d.ts +1 -14
- package/dist/src/integration-testing/stepper-panel-flicker.spec.d.ts +1 -0
- package/dist/{stripInlineMarkdown-CosQSmBr.js → stripInlineMarkdown-BhYLEiXu.js} +2 -2
- package/dist/{stripInlineMarkdown-CosQSmBr.js.map → stripInlineMarkdown-BhYLEiXu.js.map} +1 -1
- package/dist/{syncFilterUtils-_uwyt6FD.js → syncFilterUtils-ClEj4Oeg.js} +4 -4
- package/dist/{syncFilterUtils-_uwyt6FD.js.map → syncFilterUtils-ClEj4Oeg.js.map} +1 -1
- package/dist/{treeSync-Bp80Xduj.js → treeSync-B38r1dRQ.js} +5 -11
- package/dist/treeSync-B38r1dRQ.js.map +1 -0
- package/dist/{use-reduced-motion-CqjZZ5QB.js → use-reduced-motion-yYB9Tb0D.js} +2 -2
- package/dist/use-reduced-motion-yYB9Tb0D.js.map +1 -0
- package/dist/useChipLayout-BBe6Tzyl.js.map +1 -1
- package/dist/useDrillDownContext-D5_NjqY4.js.map +1 -1
- package/dist/{useDrilldown-D5XGfAUT.js → useDrilldown-BOeeNUsy.js} +8 -3
- package/dist/{useDrilldown-D5XGfAUT.js.map → useDrilldown-BOeeNUsy.js.map} +1 -1
- package/dist/{useInfiniteCombobox-ORhH44Rp.js → useInfiniteCombobox-7oIT2Mzn.js} +5 -5
- package/dist/{useInfiniteCombobox-ORhH44Rp.js.map → useInfiniteCombobox-7oIT2Mzn.js.map} +1 -1
- package/dist/useInitialFocus-CGybEc6x.js.map +1 -1
- package/dist/{useInvalidateOnOptionsChange-ieSgbkwT.js → useInvalidateOnOptionsChange-BD2VBpbK.js} +5 -5
- package/dist/useInvalidateOnOptionsChange-BD2VBpbK.js.map +1 -0
- package/dist/useMenuInteraction-nNF1dsrp.js.map +1 -1
- package/dist/utils-CM48ODEJ.js.map +1 -1
- package/package.json +6 -4
- package/dist/AiMark-CWufA6pV.js.map +0 -1
- package/dist/Alert-RkvFtmRP.js.map +0 -1
- package/dist/Announcement-CGTv6M31.js.map +0 -1
- package/dist/Avatar-DZxHhMTP.js.map +0 -1
- package/dist/Avatar-DkWoRhJu.js +0 -35
- package/dist/Avatar-DkWoRhJu.js.map +0 -1
- package/dist/Breadcrumbs-DbOrdao2.js.map +0 -1
- package/dist/Button-Dwh_Nd4l.js.map +0 -1
- package/dist/ButtonToggle-DKDBD1g3.js.map +0 -1
- package/dist/Calendar-CK-AAaSG.js.map +0 -1
- package/dist/Calendar-DLnn6dJE.js.map +0 -1
- package/dist/Checkbox-CboZhOtU.js.map +0 -1
- package/dist/Checkbox-Cn4iNLW_.js.map +0 -1
- package/dist/Chip-UbrxYEqs.js.map +0 -1
- package/dist/DataTable-COExZbOC.js.map +0 -1
- package/dist/DateFieldRange-CpTxlASD.js.map +0 -1
- package/dist/DateFieldSingle-DR2kfrzh.js.map +0 -1
- package/dist/DateFieldYearless-4mS_2Mgw.js.map +0 -1
- package/dist/DateFieldYearlessRange-C-yvKBkJ.js.map +0 -1
- package/dist/DaysOfTheWeek-Bo4w8SsT.js.map +0 -1
- package/dist/Details-CVA5zbrR.js.map +0 -1
- package/dist/Dialog-Ds25dKQp.js.map +0 -1
- package/dist/DialogCancelButton-DBL0aKTK.js.map +0 -1
- package/dist/Drawer-Da-bj_6o.js.map +0 -1
- package/dist/EditCard-CocV93gS.js.map +0 -1
- package/dist/FieldLabel-6aFKQfyD.js.map +0 -1
- package/dist/FilterBar-CZT1ryz_.js.map +0 -1
- package/dist/Grid-CvGQrIhE.js.map +0 -1
- package/dist/InteractiveCard-C0g5PxB6.js.map +0 -1
- package/dist/Layout-C2Q2hyLG.js.map +0 -1
- package/dist/List-BvzfZ9TW.js.map +0 -1
- package/dist/ListView-DFAWrwzi.js.map +0 -1
- package/dist/Listbox-BErqErNN.js.map +0 -1
- package/dist/Menu-BjPE_ODh.js.map +0 -1
- package/dist/MultiSelectFieldSync-CqWUidCm.js.map +0 -1
- package/dist/MultiSelectMenuSync-DG3rKyQc.js.map +0 -1
- package/dist/NumberField-DRYYJHec.js.map +0 -1
- package/dist/Page-pfK5iSmv.js.map +0 -1
- package/dist/Pagination-Bc4fhdNm.js.map +0 -1
- package/dist/Popover-BgVOsP4J.js.map +0 -1
- package/dist/ProgressBar-Chb0uKfL.js.map +0 -1
- package/dist/Radio-DcNlFfSu.js.map +0 -1
- package/dist/Radio-gpMEsFss.js +0 -60
- package/dist/Radio-gpMEsFss.js.map +0 -1
- package/dist/RichTextEditor-DeO4p-S-.js.map +0 -1
- package/dist/SavedFiltersButton-Cvf1mJk8.js.map +0 -1
- package/dist/SegmentedControl-CQ6DrbDc.js.map +0 -1
- package/dist/SelectCard-bp5hRyHK.js.map +0 -1
- package/dist/SelectFieldLabel-DZqxaZsp.js.map +0 -1
- package/dist/SelectFieldSync-Wkx6DGpg.js.map +0 -1
- package/dist/SelectMenuSync-O55TODxn.js.map +0 -1
- package/dist/SelectTrigger-BfJ7DWYq.js.map +0 -1
- package/dist/SelectTriggerBase-DvsI-kSG.js.map +0 -1
- package/dist/SideNav-BLXgM918.js.map +0 -1
- package/dist/Stepper-CCKHWlUr.js.map +0 -1
- package/dist/Switch-CrDmBj4D.js.map +0 -1
- package/dist/Tab-Bqfvg8Ce.js.map +0 -1
- package/dist/Text-CZccJAnm.js.map +0 -1
- package/dist/TextField-D0f9LwgQ.js.map +0 -1
- package/dist/TextField-DX5qyWPo.js.map +0 -1
- package/dist/Textarea-CdTcekFd.js.map +0 -1
- package/dist/TimeField-BxNglWQt.js.map +0 -1
- package/dist/Toaster-C-Z_FMbW.js.map +0 -1
- package/dist/Toaster-nyQgF9Ki.js.map +0 -1
- package/dist/Toolbar-BUbMtBVz.js.map +0 -1
- package/dist/Toolbar-BxAFPvbn.js.map +0 -1
- package/dist/ToolbarButtonToggle-NSJ2XfXT.js.map +0 -1
- package/dist/Tooltip-B4MSqIpg.js.map +0 -1
- package/dist/TreeSelectFieldSync-DpvwlM7B.js.map +0 -1
- package/dist/TreeSelectMenuSync-BDitYX_k.js.map +0 -1
- package/dist/TypeaheadTextField-Cj09sEji.js.map +0 -1
- package/dist/YearlessDateInputWithPicker-CoomgSEK.js.map +0 -1
- package/dist/filter-state-CZcczj37.js.map +0 -1
- package/dist/index-BwV_Pz7v.js.map +0 -1
- package/dist/makeZeroShortcutPreprocessor-CxsiGTRW.js.map +0 -1
- package/dist/proxy-DEehATlA.js.map +0 -1
- package/dist/treeSync-Bp80Xduj.js.map +0 -1
- package/dist/use-reduced-motion-CqjZZ5QB.js.map +0 -1
- package/dist/useInvalidateOnOptionsChange-ieSgbkwT.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SavedFiltersButton-Cvf1mJk8.js","sources":["../src/beta/components/SavedFiltersButton/parts.ts","../src/beta/components/SavedFiltersButton/internal/AddSavedFilterDrawer.tsx","../src/beta/components/SavedFiltersButton/internal/EditSavedFiltersDrawer.tsx","../src/beta/components/SavedFiltersButton/SavedFiltersButton.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for SavedFiltersButton's interactive sub-elements.\n *\n * The trigger is stamped by FilterTriggerButton (`FilterBar` PARTS.trigger) —\n * do not redeclare `trigger` here. Popover / menu / option parts come from\n * shared OptionsPopover / OptionsPanel internals.\n *\n * Scope in-wrapper queries by the consumer's `data-cy` on the trigger.\n * Drawers and their contents render in the top layer — target those parts\n * by attribute directly. Edit-row buttons also carry `data-id={preset.id}`.\n */\nexport const PARTS = {\n // Common roles (shared values)\n input: COMMON_PART.input,\n cancelButton: COMMON_PART.cancelButton,\n applyButton: COMMON_PART.applyButton,\n\n // SavedFiltersButton-specific roles\n /** Popover footer CTA that opens the Save Current Filter drawer. */\n saveCurrentButton: \"save-current-button\",\n /** Popover footer CTA that opens the Edit Saved Filters drawer. */\n manageButton: \"manage-button\",\n /** Save Current Filter drawer shell. */\n addDrawer: \"add-drawer\",\n /** Edit Saved Filters drawer shell. */\n editDrawer: \"edit-drawer\",\n /**\n * Per-preset edit drilldown screen inside the Edit drawer (visible after\n * clicking an edit-row-button).\n */\n drilldown: \"drilldown\",\n /** Per-preset Edit affordance in the Edit drawer list (use with `data-id`). */\n editRowButton: \"edit-row-button\",\n /** Drilldown Delete Filter action. */\n deleteButton: \"delete-button\",\n /** Drilldown Update Filter action. */\n updateButton: \"update-button\",\n /** Edit drawer list-view Close action. */\n closeButton: \"close-button\",\n} as const;\n","import { useEffect, useState } from \"react\";\nimport Button from \"../../../../components/Button\";\nimport Drawer from \"../../../../components/Drawer\";\nimport Flex from \"../../../../components/Flex\";\nimport { TextField } from \"../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport type { Filter } from \"../../FilterBar/internal/types\";\nimport { PARTS } from \"../parts\";\n\ntype AddSavedFilterDrawerProps = {\n open: boolean;\n onClose: () => void;\n /** Snapshot of filters captured when the drawer opened. */\n filtersSnapshot: Filter[];\n onSave: (payload: {\n name: string;\n filters: Filter[];\n }) => void | Promise<void>;\n /**\n * Consumer-supplied name validator. Returning a string blocks Add and is\n * surfaced as the field's error message; `undefined` allows submit.\n */\n validateName?: (name: string) => string | undefined;\n};\n\n/**\n * Drawer rendered when the user clicks \"Save Current Filter\" in the\n * SavedFiltersButton popover. Captures a name and emits `onSave` with the\n * filters snapshot. Supports async `onSave`; while pending the Add button\n * shows a loading spinner and the form is disabled.\n *\n * If `onSave` rejects, the drawer stays open with the current input so the\n * user can retry or cancel. On success the drawer closes.\n */\nexport const AddSavedFilterDrawer = ({\n open,\n onClose,\n filtersSnapshot,\n onSave,\n validateName,\n}: AddSavedFilterDrawerProps) => {\n const [name, setName] = useState(\"\");\n const [submitting, setSubmitting] = useState(false);\n const [submitError, setSubmitError] = useState<string | undefined>(undefined);\n // After a successful save, the consumer will likely add the just-saved\n // name into their `savedFilters` list synchronously. If we keep running\n // `validateName` against the current input we'll flash a \"name already\n // exists\" error (the validator now sees our own freshly-created preset)\n // before the parent unmounts us. This flag suspends validation between\n // `onSave` resolving and the drawer actually closing.\n const [justSubmitted, setJustSubmitted] = useState(false);\n\n // Reset state every time the drawer opens. We don't reset on close so the\n // closing animation can flush without snapping the visible state mid-tween.\n useEffect(() => {\n if (open) {\n setName(\"\");\n setSubmitting(false);\n setSubmitError(undefined);\n setJustSubmitted(false);\n }\n }, [open]);\n\n const trimmed = name.trim();\n const validationError =\n !justSubmitted && validateName ? validateName(trimmed) : undefined;\n const canSubmit = trimmed.length > 0 && !validationError && !submitting;\n\n const handleAdd = async () => {\n if (!canSubmit) return;\n setSubmitting(true);\n setSubmitError(undefined);\n try {\n await onSave({ name: trimmed, filters: filtersSnapshot });\n // Suspend validation; the parent will close us synchronously, but the\n // closing transition keeps us mounted for a beat — long enough to\n // re-render with the consumer's updated savedFilters list, which\n // otherwise would now collide with our input value.\n setJustSubmitted(true);\n onClose();\n } catch (err) {\n setSubmitError(\n err instanceof Error && err.message\n ? err.message\n : \"Failed to save filter.\",\n );\n setSubmitting(false);\n }\n };\n\n const handleCancel = () => {\n if (submitting) return;\n onClose();\n };\n\n return (\n <Drawer\n open={open}\n onClose={handleCancel}\n {...{ [ANV_PART_ATTR]: PARTS.addDrawer }}\n >\n <Drawer.Header>Save Current Filter</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={name}\n onChange={(e) => setName(e?.target.value ?? \"\")}\n disabled={submitting}\n required\n error={submitError ?? validationError}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && canSubmit) {\n e.preventDefault();\n handleAdd();\n }\n }}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" gap=\"3\" grow={1}>\n <Button\n onClick={handleCancel}\n disabled={submitting}\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleAdd}\n disabled={!canSubmit}\n loading={submitting}\n {...{ [ANV_PART_ATTR]: PARTS.applyButton }}\n >\n Add Saved Filter\n </Button>\n </Flex>\n </Drawer.Footer>\n </Drawer>\n );\n};\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\nimport Alert from \"../../../../components/Alert\";\nimport Button from \"../../../../components/Button\";\nimport Divider from \"../../../../components/Divider\";\nimport {\n DndSort,\n type DndSortChangeEvent,\n} from \"../../../../components/DndSort\";\nimport Drawer from \"../../../../components/Drawer\";\nimport { DrillDown, useDrillDown } from \"../../../../components/DrillDown\";\nimport Flex from \"../../../../components/Flex\";\nimport Text from \"../../../../components/Text\";\nimport { TextField } from \"../../../../components/TextField\";\nimport { ANV_PART_ATTR } from \"../../../../internal/constants/anvParts\";\nimport { DateListDialog } from \"../../FilterBar/FilterDateList\";\nimport { getAdapter } from \"../../FilterBar/internal/adapters\";\nimport {\n cloneFiltersWithItemRefs,\n updateSingleFilter,\n} from \"../../FilterBar/internal/utils/filter-state\";\nimport type {\n DateListFilter,\n DateListLibraryOptionId,\n Filter,\n} from \"../../FilterBar/internal/types\";\nimport { PARTS } from \"../parts\";\nimport type { SavedFilter, SavedFiltersAlertText } from \"../types\";\n\n/**\n * Settled outcome of a delete or update operation. Surfaced as an Alert on\n * the list view of the drawer; persists until the drawer closes or another\n * outcome replaces it.\n */\ntype DrawerAlert = {\n status: \"success\" | \"danger\";\n title: string;\n};\n\ntype EditSavedFiltersDrawerProps = {\n open: boolean;\n onClose: () => void;\n savedFilters: SavedFilter[];\n /** Drilldown's \"Update Filter\" action. May return a promise. */\n onUpdate?: (\n id: string,\n update: { name: string; filters: SavedFilter[\"filters\"] },\n ) => void | Promise<void>;\n /** Drilldown's \"Delete Filter\" action. May return a promise. */\n onDelete?: (id: string) => void | Promise<void>;\n /**\n * Optional drag-to-reorder callback. When provided, the list view renders\n * each row as a `DndSort.Card` with a drag handle and emits the new\n * `orderedIds` after a drop. When omitted, the list renders as a static\n * stack with no handles.\n */\n onReorder?: (orderedIds: string[]) => void | Promise<void>;\n /**\n * Optional validator for the name field in the drilldown. The `currentId`\n * is set to the preset being edited so the consumer can permit the row's\n * own name in uniqueness checks.\n */\n validateName?: (name: string, currentId?: string) => string | undefined;\n /** Optional override for the auto-managed alert text. */\n alertText?: SavedFiltersAlertText;\n};\n\nconst DEFAULT_ALERT_TEXT: Required<SavedFiltersAlertText> = {\n saveSuccess: \"Filter saved.\",\n saveError: \"Failed to save filter.\",\n updateSuccess: \"Filter updated.\",\n updateError: \"Failed to update filter.\",\n deleteSuccess: \"Filter deleted.\",\n deleteError: \"Failed to delete filter.\",\n reorderError: \"Failed to reorder filters.\",\n};\n\n/** The per-preset edit screen lives at drilldown index 0. */\nconst EDIT_INDEX = 0;\n\n/**\n * Drawer that lets the user manage existing saved filters. Composed of two\n * views — a list of presets (the Drawer host) and a per-preset edit screen\n * (a `DrillDown` child) that reuses the FilterBar adapter `renderDrawer`\n * machinery to render edit fields. Navigation between the two is driven by\n * `useDrillDown`, which also wires the back-button affordance built into\n * `DrillDown.Header`.\n */\nexport const EditSavedFiltersDrawer = ({\n open,\n onClose,\n savedFilters,\n onUpdate,\n onDelete,\n onReorder,\n validateName,\n alertText,\n}: EditSavedFiltersDrawerProps) => {\n const { setIndex, back, drillDownProps } = useDrillDown();\n\n // Which preset the user clicked Edit on. `null` while on the list view.\n // We track this ourselves because DrillDown only tracks \"which screen is\n // active,\" not \"which preset is being edited.\"\n const [editingId, setEditingId] = useState<string | null>(null);\n\n // Drilldown-local form state. Re-seeded whenever a new preset is opened\n // (i.e. editingId changes); not re-seeded on each parent re-render so the\n // consumer can hot-swap `savedFilters` mid-edit without clobbering edits.\n const [drilldownName, setDrilldownName] = useState(\"\");\n const [drilldownDraft, setDrilldownDraft] = useState<Filter[]>([]);\n const [dateListDialogState, setDateListDialogState] = useState<{\n filterId: string;\n libraryId: DateListLibraryOptionId;\n } | null>(null);\n const [submitting, setSubmitting] = useState<\"update\" | \"delete\" | null>(\n null,\n );\n const [submitError, setSubmitError] = useState<string | null>(null);\n\n const seededForRef = useRef<string | null>(null);\n const wasOpenRef = useRef(open);\n\n // Alerts surface settled outcomes from update / delete / reorder.\n // listAlert appears at the top of the list view (most outcomes return\n // there); drilldownAlert appears at the top of the drilldown content when\n // an Update failed and we need to keep the user's in-progress edits\n // available for retry.\n const [listAlert, setListAlert] = useState<DrawerAlert | null>(null);\n const [drilldownAlert, setDrilldownAlert] = useState<DrawerAlert | null>(\n null,\n );\n\n // Reset state every time the drawer opens. We don't reset on close so the\n // closing animation can flush without snapping the visible state mid-tween.\n useEffect(() => {\n if (!open) return;\n setEditingId(null);\n seededForRef.current = null;\n setSubmitError(null);\n setSubmitting(null);\n setListAlert(null);\n setDrilldownAlert(null);\n setDrilldownName(\"\");\n setDrilldownDraft([]);\n }, [open]);\n\n // Drawer restores defaultDrillDownIndex (0) on close, which is this\n // screen. Reset to the list on open so reopen does not land here.\n useLayoutEffect(() => {\n if (open && !wasOpenRef.current) {\n setIndex(undefined);\n }\n wasOpenRef.current = open;\n }, [open, setIndex]);\n\n const drilldownTarget = editingId\n ? savedFilters.find((s) => s.id === editingId)\n : undefined;\n\n // Seed the drilldown form when entering edit on a new preset. Not\n // re-seeded when the consumer's savedFilters array updates mid-edit —\n // once a drilldown is open, the user's edits are authoritative until\n // they Update, Delete, or Cancel.\n useEffect(() => {\n if (!editingId || !drilldownTarget) return;\n if (seededForRef.current === editingId) return;\n seededForRef.current = editingId;\n setDrilldownName(drilldownTarget.name);\n setDrilldownDraft(cloneFiltersWithItemRefs(drilldownTarget.filters));\n setSubmitError(null);\n }, [editingId, drilldownTarget]);\n\n const resolvedAlertText = useMemo(\n () => ({ ...DEFAULT_ALERT_TEXT, ...alertText }),\n [alertText],\n );\n\n const handleEdit = useCallback(\n (id: string) => {\n setListAlert(null);\n setEditingId(id);\n setIndex(EDIT_INDEX);\n },\n [setIndex],\n );\n\n // DndSort's drop event carries the new id ordering for the zone; we hand\n // that straight to the consumer so they can re-sort `savedFilters`. The\n // callback may return a promise — a rejection surfaces as a danger alert\n // on the list view (matching the delete-failure pattern) so failures\n // aren't invisible. A thrown `Error` with a message takes precedence over\n // the configured `reorderError` text, mirroring update / delete.\n const handleDrop = useCallback(\n (event: DndSortChangeEvent) => {\n if (!onReorder || !event.valid || !event.zoneSort) return;\n Promise.resolve(onReorder(event.zoneSort.map((id) => String(id)))).catch(\n (err) => {\n console.error(\n \"SavedFiltersButton onReorderSavedFilters failed:\",\n err,\n );\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.reorderError,\n });\n },\n );\n },\n [onReorder, resolvedAlertText],\n );\n\n const sortedIds = useMemo(\n () => savedFilters.map((s) => s.id),\n [savedFilters],\n );\n\n // Pop back to the list. Clears form scratch state so the next drilldown\n // entry seeds fresh, and clears the drilldown's error alert.\n const handleBackToList = useCallback(() => {\n seededForRef.current = null;\n setEditingId(null);\n setSubmitError(null);\n setDrilldownAlert(null);\n back();\n }, [back]);\n\n const handleDraftChange = useCallback((filterId: string, value: unknown) => {\n setDrilldownDraft((prev) => updateSingleFilter(prev, filterId, value));\n }, []);\n\n const requestDateListDialog = useCallback(\n (filterId: string, libraryId: DateListLibraryOptionId) => {\n setDateListDialogState({ filterId, libraryId });\n },\n [],\n );\n\n // Render the per-filter form fields by delegating to each adapter's\n // renderDrawer — the exact same machinery FilterDrawer uses, so any\n // adapter that works there works here too.\n const drilldownForm = useMemo(() => {\n if (!drilldownTarget) return null;\n return drilldownDraft.map((draftFilter) => {\n const originalFilter =\n drilldownTarget.filters.find((f) => f.id === draftFilter.id) ??\n draftFilter;\n return getAdapter(draftFilter).renderDrawer({\n originalFilter,\n draftFilter,\n onDraftChange: handleDraftChange,\n requestDateListDialog,\n });\n });\n }, [\n drilldownDraft,\n drilldownTarget,\n handleDraftChange,\n requestDateListDialog,\n ]);\n\n const trimmedName = drilldownName.trim();\n const validationError =\n validateName && editingId\n ? validateName(trimmedName, editingId)\n : undefined;\n const canSubmit =\n editingId !== null &&\n trimmedName.length > 0 &&\n !validationError &&\n submitting === null;\n\n const handleUpdate = useCallback(async () => {\n if (!editingId || !onUpdate || !canSubmit) return;\n setSubmitting(\"update\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onUpdate(editingId, {\n name: trimmedName,\n filters: drilldownDraft,\n });\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.updateSuccess,\n });\n } catch (err) {\n // Failure: stay in drilldown so the user can adjust and retry. The\n // server error surfaces as a drilldown-level alert above the form.\n setDrilldownAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.updateError,\n });\n setSubmitting(null);\n }\n }, [\n editingId,\n onUpdate,\n canSubmit,\n trimmedName,\n drilldownDraft,\n resolvedAlertText,\n back,\n ]);\n\n const handleDelete = useCallback(async () => {\n if (!editingId || !onDelete || submitting !== null) return;\n if (drilldownTarget?.disableDelete) return;\n setSubmitting(\"delete\");\n setSubmitError(null);\n setDrilldownAlert(null);\n try {\n await onDelete(editingId);\n // Success: pop back to the list with a success alert.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"success\",\n title: resolvedAlertText.deleteSuccess,\n });\n } catch (err) {\n // Failure: pop back to the list with an error alert — the drilldown\n // had nothing to preserve since the user was trying to remove the\n // row entirely.\n seededForRef.current = null;\n setEditingId(null);\n back();\n setSubmitting(null);\n setListAlert({\n status: \"danger\",\n title:\n err instanceof Error && err.message\n ? err.message\n : resolvedAlertText.deleteError,\n });\n }\n }, [\n editingId,\n onDelete,\n submitting,\n drilldownTarget,\n resolvedAlertText,\n back,\n ]);\n\n // dateList dialog target derives from drilldownDraft (so the dialog can\n // pre-seed from whatever's currently in the draft).\n const dateListDialogTarget = dateListDialogState\n ? drilldownDraft.find(\n (f): f is DateListFilter =>\n f.id === dateListDialogState.filterId && f.type === \"dateList\",\n )\n : undefined;\n const dateListDialogSelected = dateListDialogTarget?.selectedOption;\n const dateListDialogInitialValue =\n dateListDialogSelected &&\n dateListDialogSelected.id === dateListDialogState?.libraryId &&\n dateListDialogSelected.value !== null\n ? dateListDialogSelected.value\n : undefined;\n\n const drilldownTitle = drilldownTarget?.name ?? \"Edit Saved Filter\";\n\n return (\n <>\n <Drawer\n open={open}\n onClose={onClose}\n {...drillDownProps}\n {...{ [ANV_PART_ATTR]: PARTS.editDrawer }}\n >\n {/* Host view — the saved-filters list. Visible whenever no\n DrillDown screen is active. */}\n <Drawer.Header>Edit Saved Filters</Drawer.Header>\n <Drawer.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {listAlert && (\n <Alert title={listAlert.title} status={listAlert.status} />\n )}\n {savedFilters.length === 0 ? (\n <Text subdued size=\"small\">\n No saved filters to edit.\n </Text>\n ) : onReorder ? (\n <DndSort onDrop={handleDrop}>\n <DndSort.Zone\n sortable\n id=\"saved-filters-zone\"\n label=\"Saved filters\"\n orientation=\"vertical\"\n sortedIds={sortedIds}\n gap=\"2\"\n >\n {savedFilters.map((saved) => (\n <DndSort.Card\n key={saved.id}\n id={saved.id}\n label={saved.name}\n dragOnlyWithHandle\n >\n <Flex\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n grow={1}\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n data-id={saved.id}\n onClick={() => handleEdit(saved.id)}\n {...{ [ANV_PART_ATTR]: PARTS.editRowButton }}\n />\n )}\n </Flex>\n </DndSort.Card>\n ))}\n </DndSort.Zone>\n </DndSort>\n ) : (\n <Flex direction=\"column\" gap=\"2\">\n {savedFilters.map((saved) => (\n <Flex\n key={saved.id}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap=\"2\"\n >\n <Text>{saved.name}</Text>\n {!saved.disableEdit && (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={IconEdit}\n aria-label={`Edit ${saved.name}`}\n data-id={saved.id}\n onClick={() => handleEdit(saved.id)}\n {...{ [ANV_PART_ATTR]: PARTS.editRowButton }}\n />\n )}\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n </Drawer.Content>\n <Drawer.Footer>\n <Flex justifyContent=\"flex-end\" grow={1}>\n <Button\n onClick={onClose}\n {...{ [ANV_PART_ATTR]: PARTS.closeButton }}\n >\n Close\n </Button>\n </Flex>\n </Drawer.Footer>\n\n {/* Per-preset edit screen. `DrillDown.Header` brings its own back\n button (aria-label \"Previous\") and, via `onClose`, a close\n button that dismisses the whole drawer. We hook into `back()`\n via handleBackToList to clear local form scratch state when\n popping back to the list. */}\n <DrillDown\n index={EDIT_INDEX}\n onClose={onClose}\n interactive={dateListDialogState === null}\n {...{ [ANV_PART_ATTR]: PARTS.drilldown }}\n >\n <DrillDown.Header>{drilldownTitle}</DrillDown.Header>\n <DrillDown.Content>\n <Flex direction=\"column\" gap=\"4\" grow={1}>\n {drilldownAlert && (\n <Alert\n title={drilldownAlert.title}\n status={drilldownAlert.status}\n />\n )}\n <TextField\n label=\"Filter Name\"\n placeholder=\"Name this filter\"\n value={drilldownName}\n onChange={(e) => setDrilldownName(e?.target.value ?? \"\")}\n disabled={submitting !== null}\n required\n error={submitError ?? validationError}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n <Divider />\n {drilldownForm}\n </Flex>\n </DrillDown.Content>\n <DrillDown.Footer>\n <Flex\n justifyContent={\n drilldownTarget?.disableDelete ? \"flex-end\" : \"space-between\"\n }\n gap=\"3\"\n grow={1}\n >\n {!drilldownTarget?.disableDelete && (\n <Button\n appearance=\"danger-secondary\"\n onClick={handleDelete}\n loading={submitting === \"delete\"}\n disabled={submitting !== null}\n {...{ [ANV_PART_ATTR]: PARTS.deleteButton }}\n >\n Delete Filter\n </Button>\n )}\n <Flex gap=\"3\">\n <Button\n onClick={handleBackToList}\n disabled={submitting !== null}\n {...{ [ANV_PART_ATTR]: PARTS.cancelButton }}\n >\n Cancel\n </Button>\n <Button\n appearance=\"primary\"\n onClick={handleUpdate}\n disabled={!canSubmit}\n loading={submitting === \"update\"}\n {...{ [ANV_PART_ATTR]: PARTS.updateButton }}\n >\n Update Filter\n </Button>\n </Flex>\n </Flex>\n </DrillDown.Footer>\n </DrillDown>\n </Drawer>\n <DateListDialog\n libraryId={dateListDialogState?.libraryId ?? null}\n parentFilterId={dateListDialogState?.filterId ?? \"\"}\n initialValue={dateListDialogInitialValue}\n mode={dateListDialogTarget?.mode}\n customRange={dateListDialogTarget?.customRange}\n dialogCtaLabel=\"Save\"\n onCommit={(option) => {\n if (dateListDialogState) {\n handleDraftChange(dateListDialogState.filterId, option);\n }\n setDateListDialogState(null);\n }}\n onCancel={() => setDateListDialogState(null)}\n />\n </>\n );\n};\n","import {\n type KeyboardEvent,\n type ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport IconAdd from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport IconEdit from \"@servicetitan/hammer-icon/mdi/round/edit.svg\";\n\nimport Button from \"../../../components/Button\";\nimport { Text } from \"../../../components/Text\";\nimport { Flex } from \"../../../components/Flex\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsPanel } from \"../../../internal/components/OptionsPanel\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport type { CheckState, DataAttributes } from \"../../../types\";\nimport { useMenuInteraction } from \"../../../components/SelectMenu/internal/useMenuInteraction\";\nimport { FilterTriggerButton } from \"../FilterBar/FilterTriggerButton\";\nimport styles from \"./SavedFiltersButton.module.scss\";\nimport { PARTS } from \"./parts\";\nimport type { SavedFiltersButtonProps } from \"./types\";\nimport { AddSavedFilterDrawer } from \"./internal/AddSavedFilterDrawer\";\nimport { EditSavedFiltersDrawer } from \"./internal/EditSavedFiltersDrawer\";\n\n/**\n * `SavedFiltersButton` is an opt-in companion to FilterBar that lets users\n * apply, save, edit, and delete preset filter selections. It is fully\n * stateless: the consumer owns the `savedFilters` array and writes its own\n * persistence (server, localStorage, etc.) by reacting to the callbacks the\n * component fires.\n *\n * Visually it's a single Button trigger that opens a popover listing the\n * presets, with two footer actions:\n *\n * - **Save Current Filter** opens a drawer that snapshots `currentFilters`\n * into a new preset.\n * - **Edit Saved Filters** opens a drawer listing every preset with edit\n * affordances; clicking edit on a row drills into a per-preset form\n * reusing the FilterBar adapter `renderDrawer` machinery.\n *\n * Apply, save, update, and delete are all delivered as consumer callbacks\n * (`onApplySavedFilter`, `onSaveCurrentFilter`, `onUpdateSavedFilter`,\n * `onDeleteSavedFilter`). Promise-returning callbacks are supported with\n * loading state on the relevant submit button and success/error alerts on\n * the parent drawer.\n *\n * @example\n * <SavedFiltersButton\n * savedFilters={presets}\n * currentFilters={filters}\n * onApplySavedFilter={(preset) => setFilters(preset.filters)}\n * onSaveCurrentFilter={async ({ name, filters }) => {\n * await api.savePreset({ name, filters });\n * refetchPresets();\n * }}\n * onUpdateSavedFilter={async (id, update) => api.updatePreset(id, update)}\n * onDeleteSavedFilter={async (id) => api.deletePreset(id)}\n * />\n */\nexport const SavedFiltersButton = (props: SavedFiltersButtonProps) => {\n // Root is a fragment — forward consumer `data-*` onto the trigger (Path B).\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n savedFilters,\n currentFilters,\n onApplySavedFilter,\n onSaveCurrentFilter,\n onUpdateSavedFilter,\n onDeleteSavedFilter,\n onReorderSavedFilters,\n validateName,\n alertText,\n activeSavedFilterId,\n label: labelProp,\n emptyState,\n } = props;\n\n const DEFAULT_LABEL = \"Saved Filters\";\n const label = labelProp\n ? labelProp\n : activeSavedFilterId\n ? savedFilters.find((sf) => sf.id === activeSavedFilterId)?.name ||\n DEFAULT_LABEL\n : DEFAULT_LABEL;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n // Synthesize SelectItems so we can reuse the SelectMenu list machinery\n // (OptionsPanel, useMenuInteraction). Each row is one saved filter; the\n // row's id mirrors the preset id.\n const items = useMemo<SelectItem[]>(\n () =>\n savedFilters.map((saved) => ({\n id: saved.id,\n type: \"option\" as const,\n original: { id: saved.id, label: saved.name },\n })),\n [savedFilters],\n );\n\n // Active-preset state is consumer-owned via `activeSavedFilterId`. When\n // the prop names a preset we mark just that row checked; when it's\n // undefined the list reads as a clean unchecked menu (no row has the\n // single-select check affordance).\n const selectedItemIds = useMemo<Set<string | number>>(\n () => (activeSavedFilterId ? new Set([activeSavedFilterId]) : new Set()),\n [activeSavedFilterId],\n );\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState =>\n item.id === activeSavedFilterId ? \"checked\" : \"unchecked\",\n [activeSavedFilterId],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n const saved = savedFilters.find((s) => s.id === item.id);\n if (saved) onApplySavedFilter(saved);\n },\n [savedFilters, onApplySavedFilter],\n );\n\n // We use the SelectMenu menu-interaction hook as-is so keyboard and focus\n // behavior matches the platform's other menu surfaces. Popover-vs-dialog\n // adaptation is fixed to \"popover\" here — saved filters always render\n // inline in a popover even on mobile, since the heavy editing UX lives in\n // the drawer flows.\n const [isOpen, setIsOpen] = useState(false);\n const {\n closeMenu,\n highlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n } = useMenuInteraction({\n items,\n sectionsMeta: [],\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs: \"popover\",\n closeOnActivate: true,\n id: \"saved-filters\",\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n });\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = getTriggerProps();\n\n const [addOpen, setAddOpen] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n // Snapshot of `currentFilters` captured at the moment the Save drawer\n // opens, so subsequent edits to the bar don't change what gets saved.\n const [filtersSnapshot, setFiltersSnapshot] = useState<typeof currentFilters>(\n [],\n );\n\n const handleSaveCurrentClick = useCallback(() => {\n setFiltersSnapshot(currentFilters);\n closeMenu({ restoreFocus: false });\n setAddOpen(true);\n }, [closeMenu, currentFilters]);\n\n const handleEditClick = useCallback(() => {\n closeMenu({ restoreFocus: false });\n setEditOpen(true);\n }, [closeMenu]);\n\n // Pressing Enter on a row activates via useMenuInteraction; the popover\n // closes on activation, so footer button focus does not contend with it.\n const handleFooterKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n closeMenu();\n }\n };\n\n const footer: ReactElement = (\n <Flex\n direction=\"column\"\n gap=\"2\"\n className={styles[\"footer\"]}\n onKeyDown={handleFooterKeyDown}\n >\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconAdd }}\n style={{ width: \"100%\" }}\n onClick={handleSaveCurrentClick}\n {...{ [ANV_PART_ATTR]: PARTS.saveCurrentButton }}\n >\n Save Current Filter\n </Button>\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: IconEdit }}\n style={{ width: \"100%\" }}\n onClick={handleEditClick}\n disabled={savedFilters.length === 0}\n {...{ [ANV_PART_ATTR]: PARTS.manageButton }}\n >\n Edit Saved Filters\n </Button>\n </Flex>\n );\n\n return (\n <>\n {/*\n FilterTriggerButton renders the same ghost/toolbar-sized chrome the\n FilterBar uses for every filter trigger, so the saved-filters entry\n point reads as just another control in the bar. `isSelected` mirrors\n whether the consumer has named an active preset via\n `activeSavedFilterId`.\n */}\n <FilterTriggerButton\n {...triggerProps}\n {...dataAttributes}\n filterId=\"saved-filters\"\n label={label}\n isSelected={!!(activeSavedFilterId ?? false)}\n />\n <OptionsPopover\n id=\"saved-filters-popover\"\n referenceElement={triggerRef}\n open={isOpen}\n onClose={handleClickOutside}\n width={280}\n footer={footer}\n >\n {items.length === 0 ? (\n <Flex\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n className={styles[\"empty-state\"]}\n >\n {typeof emptyState === \"string\" || emptyState == null ? (\n <Text subdued size=\"small\">\n {emptyState ?? \"No saved filters yet.\"}\n </Text>\n ) : (\n emptyState\n )}\n </Flex>\n ) : (\n <OptionsPanel\n isOpen={isOpen}\n items={items}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n getCheckedState={getCheckedState}\n selectionType=\"single\"\n hasMore={false}\n onLoadMore={() => {}}\n loading={false}\n loadingMore={false}\n />\n )}\n </OptionsPopover>\n <AddSavedFilterDrawer\n open={addOpen}\n onClose={() => setAddOpen(false)}\n filtersSnapshot={filtersSnapshot}\n onSave={onSaveCurrentFilter}\n validateName={validateName ? (name) => validateName(name) : undefined}\n />\n <EditSavedFiltersDrawer\n open={editOpen}\n onClose={() => setEditOpen(false)}\n savedFilters={savedFilters}\n onUpdate={onUpdateSavedFilter}\n onDelete={onDeleteSavedFilter}\n onReorder={onReorderSavedFilters}\n validateName={validateName}\n alertText={alertText}\n />\n </>\n );\n};\n\nSavedFiltersButton.displayName = \"SavedFiltersButton\";\n"],"names":["IconEdit","IconAdd"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SegmentedControl-CQ6DrbDc.js","sources":["../src/components/SegmentedControl/internal/SegmentedControlContext.ts","../src/components/SegmentedControl/SegmentedControlSegment.tsx","../src/components/SegmentedControl/SegmentedControl.tsx"],"sourcesContent":["import { createContext } from \"react\";\n\nimport type { SegmentedControlSegmentProps } from \"../SegmentedControlSegment\";\nimport type { SegmentedControlProps } from \"../SegmentedControl\";\n\n/**\n * Context props for SegmentedControl internal state management\n */\nexport type SegmentedControlContextProps = {\n /**\n * Currently selected segment value\n */\n current?: SegmentedControlSegmentProps[\"value\"];\n /**\n * Function to set the current segment\n */\n setCurrent?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n /**\n * Change handler for the segmented control\n */\n onChange?: SegmentedControlProps[\"onChange\"];\n /**\n * Name attribute for radio inputs\n */\n name?: string;\n};\n\nexport const SegmentedControlContext =\n createContext<SegmentedControlContextProps>({});\n","import {\n useContext,\n useRef,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\n\nimport type { DataTrackingId } from \"../../types\";\nimport { Icon, type IconProps } from \"../Icon\";\nimport { motion, useReducedMotion } from \"motion/react\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * State object returned by segment interactions\n */\nexport type SegmentState = {\n /**\n * Whether the segment is checked\n */\n checked: boolean;\n /**\n * The value of the segment\n */\n value?: SegmentedControlSegmentProps[\"value\"];\n};\n\n/**\n * Props for the SegmentedControlSegment component\n * @extends ComponentPropsWithoutRef<\"label\">\n */\nexport type SegmentedControlSegmentProps = ComponentPropsWithoutRef<\"label\"> & {\n /**\n * Optional icon to display in the segment\n */\n icon?: IconProps[\"svg\"];\n /**\n * Value of the segment\n */\n value: string;\n /**\n * The content to display in the segment\n */\n children?: React.ReactNode;\n} & DataTrackingId;\n\n/**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n * - Icon-only mode when no children provided\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n *\n * @example\n * <SegmentedControl.Segment value=\"icon-only\" icon={IconOnly} />\n */\nexport const SegmentedControlSegment = forwardRef<\n HTMLLabelElement,\n SegmentedControlSegmentProps\n>((props, ref) => {\n const {\n icon,\n value,\n children,\n className,\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const shouldReduceMotion = useReducedMotion();\n const { current, setCurrent, name } = useContext(SegmentedControlContext);\n const labelRef = useRef<HTMLSpanElement>(null);\n\n const classNames = cx(styles.segment, className, {\n [styles[\"icon-only\"]]: icon && !children,\n });\n\n const data = {\n value: props.value,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControlSegment\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n // For icon-only segments (no children), use aria-label if provided, otherwise fall back to value\n const computedAriaLabel = !children ? ariaLabel || value : undefined;\n\n return (\n <>\n <label\n className={classNames}\n ref={useMergeRefs([labelRef, ref])}\n data-tracking-id={trackingId}\n data-anv=\"segmented-control-segment\"\n aria-label={computedAriaLabel}\n {...rest}\n >\n <input\n type=\"radio\"\n name={name}\n value={value}\n onChange={() => setCurrent?.(value)}\n checked={current === value}\n aria-checked={current === value}\n className={styles[\"input\"]}\n />\n {icon ? <Icon svg={icon} aria-hidden /> : null}\n {children}\n {current === value && (\n <motion.span\n layoutId={name}\n className={styles[\"select-indicator\"]}\n transition={{\n duration: shouldReduceMotion\n ? 0\n : +core.primitive.DurationDefault.value.replace(\"ms\", \"\") /\n 1000,\n }}\n />\n )}\n </label>\n </>\n );\n});\n\nSegmentedControlSegment.displayName = \"SegmentedControlSegment\";\n","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n useRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport { motion } from \"motion/react\";\n\nimport type { DataTrackingId, LayoutUtilProps, Size } from \"../../types\";\nimport { useMergeRefs, useTrackingId } from \"../../hooks\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\n\nimport { SegmentedControlContext } from \"./internal/SegmentedControlContext\";\nimport {\n SegmentedControlSegment,\n type SegmentedControlSegmentProps,\n} from \"./SegmentedControlSegment\";\n\nimport styles from \"./SegmentedControl.module.scss\";\n\n/**\n * Base props for SegmentedControl component\n * @extends Omit<ComponentPropsWithoutRef<\"div\">, \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\">\n * @extends LayoutUtilProps\n */\ntype BaseSegmentedControlProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\"\n> &\n LayoutUtilProps &\n DataTrackingId & {\n /**\n * Callback when segment is changed\n */\n onChange?: (value: SegmentedControlSegmentProps[\"value\"]) => void;\n\n /**\n * Size of the segment\n * @default \"medium\"\n */\n size?: Extract<Size, \"small\" | \"medium\">;\n\n /**\n * Whether to fill available width\n * @default false\n */\n fill?: boolean;\n\n /**\n * Name attribute for radio inputs\n * @remarks If empty, it will auto generate one using useId()\n */\n name?: string;\n\n /**\n * The segments to render within the segmented control\n */\n children?: React.ReactNode;\n };\n\n/**\n * Props for controlled SegmentedControl\n */\ntype ControlledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Selected segment (controlled mode)\n */\n selected: SegmentedControlSegmentProps[\"value\"];\n defaultSelected?: never;\n};\n\n/**\n * Props for uncontrolled SegmentedControl\n */\ntype UncontrolledSegmentedControlProps = BaseSegmentedControlProps & {\n /**\n * Initial selection (uncontrolled mode)\n */\n defaultSelected: SegmentedControlSegmentProps[\"value\"];\n selected?: never;\n};\n\n/**\n * Props for the SegmentedControl component\n */\nexport type SegmentedControlProps =\n | ControlledSegmentedControlProps\n | UncontrolledSegmentedControlProps;\n\n/**\n * SegmentedControl component for selecting one option from a group of related choices — a horizontal set of segmented buttons, a segmented toggle or view switcher, for switching between a few mutually exclusive views or options such as list versus map.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Multiple size variants (small, medium)\n * - Optional fill width mode\n * - Smooth animations with motion\n * - Accessibility support with proper radio group semantics\n * - Layout utility props for positioning and spacing\n * - Context-based state management\n * - Auto-generated or custom name attributes\n * - Segment support via SegmentedControl.Segment\n * - Data tracking id support\n *\n * @example\n * <SegmentedControl\n * selected={selectedValue}\n * onChange={setSelectedValue}\n * size=\"medium\"\n * >\n * <SegmentedControl.Segment value=\"option1\">Option 1</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option2\">Option 2</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"option3\">Option 3</SegmentedControl.Segment>\n * </SegmentedControl>\n *\n * @example\n * <SegmentedControl\n * defaultSelected=\"small\"\n * size=\"small\"\n * fill\n * >\n * <SegmentedControl.Segment value=\"small\" icon={SmallIcon}>Small</SegmentedControl.Segment>\n * <SegmentedControl.Segment value=\"large\" icon={LargeIcon}>Large</SegmentedControl.Segment>\n * </SegmentedControl>\n */\nexport const SegmentedControl = Object.assign(\n forwardRef<HTMLDivElement, SegmentedControlProps>(\n function SegmentedControlInner(props, ref) {\n const {\n className,\n onClick,\n onChange,\n children,\n size = \"medium\",\n defaultSelected,\n selected,\n name,\n fill,\n ...rest\n } = props;\n\n const [current, setCurrent] = useOptionallyControlledState({\n controlledValue: selected,\n defaultValue: defaultSelected,\n onChange,\n });\n\n const segmentedControlRef = useRef<HTMLDivElement>(null);\n\n const SegmentedControlClassNames = cx(\n styles[\"segmented-control\"],\n styles[size],\n className,\n {\n [styles.fill]: fill,\n },\n );\n\n const uid = useId();\n\n const data = {\n name: props.name,\n };\n\n const trackingId = useTrackingId({\n name: \"SegmentedControl\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return (\n <motion.div\n transition={{ duration: 0 }}\n layout\n role=\"radiogroup\"\n className={SegmentedControlClassNames}\n data-anv=\"segmented-control\"\n data-tracking-id={trackingId}\n ref={useMergeRefs([segmentedControlRef, ref])}\n {...rest}\n >\n <SegmentedControlContext.Provider\n value={{ current, setCurrent, name: name ?? uid }}\n >\n {children}\n </SegmentedControlContext.Provider>\n </motion.div>\n );\n },\n ),\n {\n /**\n * SegmentedControlSegment component for individual segments within a segmented control.\n *\n * Features:\n * - Individual segment with radio input\n * - Optional icon support\n * - Animated selection indicator\n * - Accessibility support with proper ARIA attributes\n * - Context integration with parent SegmentedControl\n * - Motion animations with reduced motion support\n *\n * @example\n * <SegmentedControl.Segment value=\"option1\" icon={Icon1}>\n * Option 1\n * </SegmentedControl.Segment>\n */\n Segment: SegmentedControlSegment,\n },\n);\nSegmentedControl.displayName = \"SegmentedControl\";\n\nexport default SegmentedControl;\n"],"names":["core.primitive.DurationDefault"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectCard-bp5hRyHK.js","sources":["../src/components/SelectCard/internal/SelectCardContext.tsx","../src/components/SelectCard/internal/SelectCardProvider.tsx","../src/components/SelectCard/SelectCardGroup.tsx","../src/components/SelectCard/SelectCard.tsx"],"sourcesContent":["import { type ChangeEvent, createContext, useContext } from \"react\";\n\n/**\n * Interface for the select card state\n */\nexport interface ISelectCardState {\n /**\n * When `true`, adds the item to the selected state holder.\n */\n checked: boolean;\n\n /**\n * Gives an explicit id to each item in the set.\n */\n id?: string | number;\n}\n\n/**\n * Interface for the select card onChange options\n */\nexport interface ISelectCardOnChangeOptions {\n /**\n * When `true`, doesn't fire the user's `onChange`\n */\n internal?: boolean;\n}\n\n/**\n * Interface for the select card context\n */\nexport interface ISelectCardContext {\n /**\n * Callback function that is triggered when the selection state changes.\n *\n * @callback OnChangeCallback\n * @param {ChangeEvent<HTMLInputElement>} [e] - The native HTML input change event.\n * @param {ISelectCardState} [state] - The current state of the select card component after the change.\n * @returns {void}\n */\n onChange?: (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => void;\n\n /**\n * Sets how many cards the user can select, either 'single' (radio buttons) or 'multiple' (checkboxes)\n */\n selectionMode: \"single\" | \"multiple\";\n\n /**\n * Used internally to create a UUID for the HTML `name` property on radios.\n */\n radioName: string;\n\n /**\n * Creates a set of ids that are selected.\n */\n selection: Set<string | number>;\n\n /**\n * When `true`, indicates that selection is controlled at the group level via the `value` prop.\n * @default false\n */\n isGroupControlled?: boolean;\n\n /**\n * When `true`, the group was given a `defaultValue` and owns the initial selection state.\n * Individual `SelectCard` mount syncs should be skipped to avoid overriding it.\n * @default false\n */\n hasGroupDefault?: boolean;\n\n /**\n * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the selection mode from SelectCard.Group context.\n * @default false\n */\n showSelectIndicator?: boolean;\n}\n\nexport const SelectCardContext = createContext<ISelectCardContext | null>(null);\n\n/**\n * Custom hook for accessing the SelectCard context.\n * @returns The SelectCard context or null if not within a SelectCardProvider\n */\nexport const useSelectCardContext = () => useContext(SelectCardContext);\n","import {\n type ChangeEvent,\n type ReactNode,\n useId,\n useMemo,\n useState,\n} from \"react\";\nimport {\n type ISelectCardContext,\n type ISelectCardOnChangeOptions,\n type ISelectCardState,\n SelectCardContext,\n} from \"./SelectCardContext\";\n\n/**\n * Props for the SelectCardProvider component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\ninterface ISelectCardProviderProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\"> {\n children: ReactNode;\n\n /**\n * Controlled selection state. When provided, the group becomes controlled.\n * Array of `SelectCard` ids that are currently selected.\n */\n value?: Array<string | number>;\n\n /**\n * Initial selection state for uncontrolled usage.\n * Array of `SelectCard` ids that are selected on first render.\n */\n defaultValue?: Array<string | number>;\n}\n\n/**\n * SelectCardProvider component for managing selection state across SelectCard components.\n *\n * Features:\n * - Provides context for SelectCard components to share selection state\n * - Manages selection mode (single vs multiple)\n * - Handles selection state updates and callbacks\n * - Generates unique radio button names for single selection mode\n * - Maintains a set of selected card IDs\n * - Integrates with SelectCardGroup for automatic context provision\n *\n * @example\n * <SelectCardProvider\n * selectionMode=\"multiple\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"1\" onChange={() => {}}>Option 1</SelectCard>\n * <SelectCard id=\"2\" onChange={() => {}}>Option 2</SelectCard>\n * </SelectCardProvider>\n */\nexport const SelectCardProvider = ({\n children,\n defaultValue,\n onChange,\n selectionMode,\n showSelectIndicator,\n value,\n}: ISelectCardProviderProps) => {\n const isControlled = value !== undefined;\n const [internalSelection, setInternalSelection] = useState<\n Set<string | number>\n >(() => {\n const ids = defaultValue ?? [];\n return new Set(selectionMode === \"single\" ? ids.slice(0, 1) : ids);\n });\n const selection = useMemo(() => {\n if (!isControlled) return internalSelection;\n const ids = value ?? [];\n return new Set(selectionMode === \"single\" ? ids.slice(0, 1) : ids);\n }, [isControlled, value, internalSelection, selectionMode]);\n\n const radioName = useId();\n\n const handleChange = (\n e?: ChangeEvent<HTMLInputElement>,\n state?: ISelectCardState,\n options?: ISelectCardOnChangeOptions,\n ) => {\n if (!state || !state.id) {\n if (!options?.internal) {\n onChange?.(e, state);\n }\n\n return;\n }\n\n // Update internal selection when uncontrolled\n if (!isControlled) {\n if (selectionMode === \"single\") {\n setInternalSelection(state.checked ? new Set([state.id]) : new Set());\n } else {\n setInternalSelection((prev) => {\n const next = new Set(prev);\n if (state.checked) {\n next.add(state.id!);\n } else {\n next.delete(state.id!);\n }\n return next;\n });\n }\n }\n\n if (!options?.internal) {\n onChange?.(e, state);\n }\n };\n\n const context = {\n hasGroupDefault: defaultValue !== undefined,\n isGroupControlled: isControlled,\n selectionMode,\n onChange: handleChange,\n radioName,\n selection,\n showSelectIndicator,\n };\n\n return (\n <SelectCardContext.Provider value={context}>\n {children}\n </SelectCardContext.Provider>\n );\n};\n","import { forwardRef, type ReactNode } from \"react\";\nimport {\n CheckboxGroup,\n type CheckboxGroupProps,\n} from \"../Checkbox/CheckboxGroup\";\nimport { RadioGroup } from \"../Radio/RadioGroup\";\nimport { SelectCardProvider } from \"./internal/SelectCardProvider\";\nimport type { ISelectCardContext } from \"./internal/SelectCardContext\";\n\n/**\n * Props for the SelectCardGroup component\n * @extends Omit<ISelectCardContext, \"radioName\" | \"selection\">\n */\nexport interface SelectCardGroupProps\n extends Omit<ISelectCardContext, \"radioName\" | \"selection\">,\n Pick<CheckboxGroupProps, \"moreInfo\"> {\n /**\n * Associates the legend with content below.\n */\n ariaLabelledBy?: string;\n\n children?: ReactNode;\n\n /**\n * Initial selection state for uncontrolled usage.\n * Array of `SelectCard` ids that are selected on first render.\n * Takes precedence over individual `SelectCard` `defaultChecked` props.\n */\n defaultValue?: Array<string | number>;\n\n /**\n * Sets the legend on the group.\n */\n legend: CheckboxGroupProps[\"legend\"];\n\n /**\n * Additional props for the legend `FieldLabel` (for example `aiMark`, `className`).\n */\n legendProps?: CheckboxGroupProps[\"legendProps\"];\n\n /**\n * When `true`, sets \"required\" text in label.\n * @accessibility This does not enforce error when nothing is selected.\n * @default false\n */\n required?: boolean;\n\n /**\n * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the `selectionMode` setting.\n * @default false\n */\n showSelectIndicator?: boolean;\n\n /**\n * Controlled selection state. When provided, the group becomes controlled.\n * Array of `SelectCard` ids that are currently selected.\n */\n value?: Array<string | number>;\n}\n\n/**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n * - Integrates with CheckboxGroup and RadioGroup for proper form semantics\n * - Supports AI mark indicator\n *\n * @example\n * <SelectCardGroup\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * legendProps={{ aiMark: true }}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\" el=\"h3\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCardGroup>\n */\nexport const SelectCardGroup = forwardRef<\n HTMLInputElement,\n SelectCardGroupProps\n>((props, _ref) => {\n const {\n ariaLabelledBy,\n children,\n defaultValue,\n legend,\n legendProps,\n moreInfo,\n onChange,\n required = false,\n selectionMode,\n showSelectIndicator = false,\n value,\n ...rest\n } = props;\n\n return (\n <SelectCardProvider\n defaultValue={defaultValue}\n onChange={onChange}\n selectionMode={selectionMode}\n showSelectIndicator={showSelectIndicator}\n value={value}\n >\n {selectionMode === \"multiple\" && (\n <CheckboxGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n legendProps={legendProps}\n required={required}\n moreInfo={moreInfo}\n {...rest}\n >\n {children}\n </CheckboxGroup>\n )}\n {selectionMode === \"single\" && (\n <RadioGroup\n aria-labelledby={ariaLabelledBy}\n legend={legend}\n legendProps={legendProps}\n required={required}\n moreInfo={moreInfo}\n {...rest}\n >\n {children}\n </RadioGroup>\n )}\n </SelectCardProvider>\n );\n});\n\nSelectCardGroup.displayName = \"SelectCardGroup\";\n","import {\n useLayoutEffect,\n useState,\n useRef,\n forwardRef,\n type ChangeEvent,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { SelectCardGroup } from \"./SelectCardGroup\";\nimport { Card, type CardProps } from \"../Card\";\nimport { Radio, type RadioProps } from \"../Radio/internal/Radio\";\nimport { Checkbox, type CheckboxProps } from \"../Checkbox/internal/Checkbox\";\nimport { useOptionallyControlledState } from \"../../internal/hooks\";\nimport { useSelectCardContext } from \"./internal/SelectCardContext\";\nimport { Icon } from \"../Icon\";\n\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 RadioOutline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport RadioChecked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\n\nimport styles from \"./SelectCard.module.scss\";\n\n/**\n * Props for the SelectCard component\n * @extends Omit<CardProps, \"onChange\" | \"id\">\n */\nexport interface SelectCardProps extends Omit<CardProps, \"onChange\" | \"id\"> {\n /**\n * Passes props to the underlying `<Checkbox />` component.\n */\n checkboxProps?: Omit<CheckboxProps, \"label\">;\n\n /**\n * Controlled state. When provided, the component becomes controlled.\n */\n checked?: boolean;\n\n /**\n * Uncontrolled initial state. Ignored when inside a `SelectCard.Group` that sets `defaultValue`.\n */\n defaultChecked?: boolean;\n\n /**\n * When `true`, disables the card.\n */\n disabled?: boolean;\n\n /**\n * When `true`, sets error styling on the card.\n */\n errored?: boolean;\n\n /**\n * A unique identifier for the card, used to track the selection state.\n */\n id: string | number;\n\n /**\n * Function called on selection state change.\n */\n onChange?: (value: boolean) => void;\n\n /**\n * Passes props to the underlying `<Radio />` component.\n */\n radioProps?: Omit<RadioProps, \"label\">;\n\n /**\n * Removes the drop shadow effect on the card.\n */\n removeDropShadow?: boolean;\n\n /**\n * When `true`, displays a checkbox or radio indicator in a separate column on the left side of the card.\n * The indicator type (checkbox or radio) is automatically determined by the `selectionMode` prop on the\n * `SelectCard.Group`, and defaults to checkbox if no `SelectCard.Group` is used.\n * @default false\n */\n showSelectIndicator?: boolean;\n}\n\nconst SelectCardElement = forwardRef<HTMLInputElement, SelectCardProps>(\n (props, ref) => {\n const {\n checkboxProps,\n children,\n checked: checkedProp,\n className,\n defaultChecked: defaultCheckedProp,\n disabled,\n errored,\n radioProps,\n onChange,\n removeDropShadow,\n showSelectIndicator = false,\n id,\n ...rest\n } = props;\n\n const [checked, setChecked] = useOptionallyControlledState<boolean>({\n controlledValue: checkedProp,\n defaultValue: defaultCheckedProp || false,\n onChange,\n });\n\n const context = useSelectCardContext();\n const isCardControlled = checkedProp !== undefined;\n const isGroupControlled = context?.isGroupControlled ?? false;\n\n // we need to re-render after setting the initial selection state on context\n const [_, setForceRenderCount] = useState(0);\n useLayoutEffect(() => {\n // Sync initial checked state to context (for both controlled and uncontrolled modes).\n // Skip when group is controlled — the group's value prop owns the selection Set.\n const initialChecked = checkedProp ?? defaultCheckedProp;\n if (initialChecked && !isGroupControlled && !context?.hasGroupDefault) {\n context?.onChange?.(\n undefined,\n {\n id,\n checked: initialChecked,\n },\n { internal: true },\n );\n\n setForceRenderCount((prev) => prev + 1);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Sync controlled state changes to context (skip initial mount - handled by above effect)\n const isFirstRender = useRef(true);\n useLayoutEffect(() => {\n if (isFirstRender.current) {\n isFirstRender.current = false;\n return;\n }\n if (isCardControlled && context) {\n // In single selection mode, only sync when checked is true.\n // Unchecking is implicit when another card becomes checked.\n // Syncing checked=false would clear the entire selection.\n if (context.selectionMode === \"single\" && !checkedProp) {\n return;\n }\n context.onChange?.(\n undefined,\n {\n id,\n checked: checkedProp!,\n },\n { internal: true },\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [checkedProp]);\n\n const handleChange = (event?: ChangeEvent<HTMLInputElement>) => {\n const newChecked = event ? event.target.checked : false;\n setChecked(newChecked);\n context?.onChange?.(event, {\n id,\n checked: newChecked,\n });\n };\n\n // A selection in the group context supersedes the normal checked state of the card\n const isChecked = context ? context.selection.has(id) : checked;\n const showIndicator = context?.showSelectIndicator || showSelectIndicator;\n\n // When group is controlled (value prop), drive input from context selection.\n // When group has defaultValue, it takes precedence — ignore individual defaultChecked.\n const inputChecked = isGroupControlled\n ? isChecked\n : isCardControlled\n ? checkedProp\n : undefined;\n const inputDefaultChecked =\n isGroupControlled || isCardControlled\n ? undefined\n : context?.hasGroupDefault\n ? context.selection.has(id)\n : defaultCheckedProp;\n\n const contentClassName = cx(styles[\"select-card\"], className, {\n [styles[\"select-card--remove-drop-shadow\"]]: removeDropShadow,\n [styles[\"select-card--checked\"]]: isChecked,\n [styles[\"select-card--selected\"]]: isChecked && !errored,\n [styles[\"select-card--errored\"]]: errored,\n [styles[\"select-card--disabled\"]]: disabled,\n });\n\n const iconClassNames = cx({\n [styles[\"icon-checked\"]]: isChecked && !errored && !disabled,\n [styles[\"icon-unchecked\"]]: !isChecked && !disabled,\n [styles[\"icon-checked-error\"]]: errored && !disabled,\n [styles[\"icon-checked-disabled\"]]: disabled,\n });\n\n return (\n <>\n {(!context || context?.selectionMode === \"multiple\") && (\n <Checkbox\n {...checkboxProps}\n className={cx(\n styles[\"select-card-wrapper\"],\n checkboxProps?.className,\n {\n [styles[\"select-card-checkbox-unchecked\"]]:\n !isChecked && !errored,\n [styles[\"select-card-checkbox-checked\"]]: isChecked && !errored,\n [styles[\"select-card-checkbox-error\"]]: errored,\n },\n )}\n labelWrapperClassName={styles[\"select-card-label\"]}\n checked={inputChecked}\n defaultChecked={inputDefaultChecked}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n label={\n <Card\n {...rest}\n className={contentClassName}\n flex={showIndicator ? \"1\" : undefined}\n gap={showIndicator ? \"2\" : undefined}\n alignItems={showIndicator ? \"flex-start\" : undefined}\n >\n {showIndicator ? (\n <>\n <span className={styles[\"icon-wrapper\"]} aria-hidden>\n <Icon\n size=\"large\"\n svg={isChecked ? CheckboxChecked : CheckboxOutline}\n className={iconClassNames}\n />\n </span>\n {children}\n </>\n ) : (\n children\n )}\n </Card>\n }\n hideCheckbox\n />\n )}\n {context?.selectionMode === \"single\" && (\n <Radio\n {...radioProps}\n className={cx(\n styles[\"select-card-wrapper\"],\n radioProps?.className,\n {\n [styles[\"select-card-checkbox-unchecked\"]]:\n !isChecked && !errored,\n [styles[\"select-card-checkbox-checked\"]]: isChecked && !errored,\n [styles[\"select-card-checkbox-error\"]]: errored,\n },\n )}\n labelWrapperClassName={styles[\"select-card-label\"]}\n checked={inputChecked}\n defaultChecked={inputDefaultChecked}\n onChange={handleChange}\n disabled={disabled}\n ref={ref}\n name={context.radioName}\n label={\n <Card\n {...rest}\n className={contentClassName}\n flex={showIndicator ? \"1\" : undefined}\n gap={showIndicator ? \"2\" : undefined}\n alignItems={showIndicator ? \"flex-start\" : undefined}\n >\n {showIndicator ? (\n <>\n <span className={styles[\"icon-wrapper\"]} aria-hidden>\n <Icon\n size=\"large\"\n svg={isChecked ? RadioChecked : RadioOutline}\n className={iconClassNames}\n />\n </span>\n {children}\n </>\n ) : (\n children\n )}\n </Card>\n }\n hideRadio\n />\n )}\n </>\n );\n },\n);\n\nSelectCardElement.displayName = \"SelectCard\";\n\n/**\n * SelectCard component for creating interactive card-based selection interfaces.\n *\n * Features:\n * - Supports both single selection (radio) and multiple selection (checkbox) modes\n * - Automatic context detection for selection behavior\n * - Visual feedback for selected, disabled, and error states\n * - Accessible with proper ARIA roles and keyboard navigation\n * - Customizable styling through Card component props\n * - Hover and focus states with smooth transitions\n * - Integration with SelectCardGroup for grouped selection\n *\n * @example\n * <SelectCard\n * id=\"option-1\"\n * onChange={(checked) => console.log('Selected:', checked)}\n * >\n * <Text variant=\"headline\" size=\"small\">Option 1</Text>\n * <Text>Description of option 1</Text>\n * </SelectCard>\n */\nexport const SelectCard = Object.assign(SelectCardElement, {\n /**\n * SelectCardGroup component for managing groups of selectable cards.\n *\n * Features:\n * - Manages selection state for multiple SelectCard components\n * - Supports both single and multiple selection modes\n * - Provides proper accessibility with legends and ARIA labels\n * - Handles required field validation\n * - Automatic radio button grouping for single selection\n * - Context provider for child SelectCard components\n *\n * @example\n * <SelectCard.Group\n * legend=\"Choose your plan\"\n * selectionMode=\"single\"\n * onChange={(e, state) => console.log('Selection changed:', state)}\n * >\n * <SelectCard id=\"basic\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Basic Plan</Text>\n * </SelectCard>\n * <SelectCard id=\"premium\" onChange={() => {}}>\n * <Text variant=\"headline\" size=\"small\">Premium Plan</Text>\n * </SelectCard>\n * </SelectCard.Group>\n */\n Group: SelectCardGroup,\n});\n"],"names":["CheckboxChecked","CheckboxOutline","RadioChecked","RadioOutline"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectFieldLabel-DZqxaZsp.js","sources":["../src/internal/functions/popoverTargetDomProps.ts","../src/components/SelectField/internal/SelectFieldLabel.tsx"],"sourcesContent":["import { version as reactVersion } from \"react\";\n\n/** React 18 warns on `popoverTarget`; React 19 warns on `popovertarget`. Missing `id` is `{}`. */\nexport function popoverTargetDomProps(\n id: string | undefined,\n version: string = reactVersion,\n) {\n return id\n ? {\n [Number.parseInt(version, 10) >= 19\n ? \"popoverTarget\"\n : \"popovertarget\"]: id,\n }\n : {};\n}\n","import type { ReactNode } from \"react\";\nimport {\n FieldLabel,\n type FieldLabelProps,\n} from \"../../../components/FieldLabel\";\nimport { SrOnly } from \"../../../components/SrOnly\";\n\ntype GetLabelProps = (options?: object) => { id: string; htmlFor: string };\n\n/**\n * Props for the SelectFieldLabel component\n * @property {AiMarkWithTooltipOrPopoverProps} aiMark - The AI mark to display\n * @property {string} label - The text content to display as the label\n * @property {GetLabelProps} getLabelProps - Downshift getter function that returns accessibility props for the label\n * @property {boolean} [required] - Whether the field is required. Shows a red asterisk (*) when true.\n * @property {ReactNode} [moreInfo] - Additional information to display in a tooltip\n * @property {string} [moreInfoId] - ID for the sr-only description span, referenced via aria-describedby on the associated input\n * @property {boolean} [moreInfoOpen] - Controls the open state of the more info tooltip\n * @property {boolean} [hideLabel] - Visually hides the label while keeping it accessible to screen readers\n */\nexport type SelectFieldLabelProps = {\n aiMark?: FieldLabelProps[\"aiMark\"];\n label: string;\n getLabelProps: GetLabelProps;\n hideLabel?: boolean;\n moreInfo?: ReactNode;\n moreInfoId?: string;\n moreInfoOpen?: boolean;\n required?: boolean;\n};\n\n/**\n * Internal label component for the SelectField that renders an accessible label element.\n *\n * Features:\n * - Renders a FieldLabel with proper accessibility attributes from Downshift\n * - Automatically associates the label with the combobox input\n * - Supports screen readers with proper labeling\n * - Optional required field indicator with red asterisk\n * - Help tooltip with info icon for additional context\n * - Can visually hide the label while maintaining accessibility\n *\n * @example\n * <SelectFieldLabel\n * label=\"Select an option\"\n * getLabelProps={getLabelProps}\n * required\n * moreInfo=\"Choose from available options\"\n * />\n */\nexport const SelectFieldLabel = ({\n aiMark,\n label,\n getLabelProps,\n hideLabel = false,\n moreInfo,\n moreInfoId,\n moreInfoOpen,\n required,\n}: SelectFieldLabelProps) => {\n const labelContent = (\n <FieldLabel\n {...getLabelProps()}\n aiMark={aiMark}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n moreInfoOpen={moreInfoOpen}\n >\n {label}\n </FieldLabel>\n );\n\n if (hideLabel) {\n return <SrOnly>{labelContent}</SrOnly>;\n }\n\n return labelContent;\n};\n"],"names":["version","reactVersion"],"mappings":";;;;;AAGO,SAAS,qBAAA,CACd,EAAA,EACAA,SAAA,GAAkBC,OAAA,EAClB;AACA,EAAA,OAAO,EAAA,GACH;AAAA,IACE,CAAC,OAAO,QAAA,CAASD,SAAA,EAAS,EAAE,CAAA,IAAK,EAAA,GAC7B,eAAA,GACA,eAAe,GAAG;AAAA,MAExB,EAAC;AACP;;ACoCO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,YAAA,mBACJ,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,aAAA,EAAc;AAAA,MAClB,MAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MAEC,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,UAAQ,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,EAC/B;AAEA,EAAA,OAAO,YAAA;AACT;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectFieldSync-Wkx6DGpg.js","sources":["../src/components/SelectField/parts.ts","../src/components/SelectField/internal/SelectFieldInput.tsx","../src/components/SelectField/internal/useCombo.tsx","../src/components/SelectField/internal/SelectFieldComboboxMode.tsx","../src/components/SelectField/internal/SelectFieldTrigger.tsx","../src/components/SelectField/internal/useSelectMode.ts","../src/components/SelectField/internal/SelectFieldSelectMode.tsx","../src/components/SelectField/SelectField.tsx","../src/components/SelectField/SelectFieldSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for SelectField's interactive sub-elements.\n *\n * Scope a query by the consumer's `data-cy` on the field root\n * (`[data-cy=\"x\"] [data-anv-part=\"input\"]`). Portaled parts (`menu`, `option`,\n * `dialog`, `popover`) come from the shared option internals and render in the\n * top layer — target them by part attribute or the field's `#{id}-popover` /\n * `#{id}-dialog`.\n *\n * Every role SelectField needs is a shared one, so all values come from\n * `COMMON_PART`.\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n clearButton: COMMON_PART.clearButton,\n toggleButton: COMMON_PART.toggleButton,\n} as const;\n","import styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport type { PassThroughProps, Size } from \"../../../types\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { PARTS } from \"../parts\";\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 type { 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} [isHighlighted] - Applies a subdued primary background to draw attention to the field\n * @property {boolean} [required] - Marks the input as required for form validation\n * @property {boolean} [error] - Shows error styling on the input when true\n * @property {() => void} [onClear] - Callback fired when the clear button is clicked\n * @property {string} [id] - HTML id attribute for the input element\n * @property {RefObject<HTMLDivElement>} [inputWrapperRef] - Ref for the input wrapper div element\n * @property {PassThroughProps<\"div\">} [htmlInputWrapperProps] - Additional props passed to the wrapper div\n * @property {PassThroughProps<\"input\">} [inputProps] - Additional props passed to the input element\n * @property {PassThroughProps<\"button\">} [toggleButtonProps] - Additional props passed to the toggle button\n * @property {string | ReactElement} [prefix] - Content to display before the input\n * @property {string | ReactElement} [suffix] - Content to display after the input\n */\nexport type SelectFieldInputProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disableToggleButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: boolean;\n required?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n htmlInputWrapperProps?: PassThroughProps<\"div\">;\n inputProps?: PassThroughProps<\"input\">;\n toggleButtonProps?: PassThroughProps<\"button\">;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n};\n\n/**\n * Internal input component for the SelectField that provides the text input and action buttons.\n *\n * Features:\n * - Text input for filtering and displaying selected values\n * - Optional clear button for removing the current selection\n * - Optional toggle button for opening/closing the dropdown menu\n * - Supports multiple size variants (small, medium, large)\n * - Fully accessible with proper ARIA labels on buttons\n * - Supports pass-through props for customization of internal elements\n * - Optional prefix and suffix content\n * - Error state styling\n *\n * @example\n * <SelectFieldInput\n * placeholder=\"Search...\"\n * size=\"medium\"\n * onClear={() => handleClear()}\n * prefix=\"$\"\n * />\n */\nexport const SelectFieldInput = ({\n placeholder,\n size,\n disableClearButton,\n disableToggleButton,\n disabled,\n readOnly,\n isHighlighted,\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 [styles[\"is-disabled\"]]: disabled,\n [styles[\"highlight\"]]: isHighlighted,\n });\n\n return (\n <div\n ref={inputWrapperRef}\n {...htmlInputWrapperProps}\n className={cx(inputWrapperClassNames, htmlInputWrapperProps?.className)}\n aria-disabled={disabled || undefined}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <input\n type=\"text\"\n id={id}\n placeholder={placeholder}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n {...inputProps}\n {...{ [ANV_PART_ATTR]: PARTS.input }}\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 {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\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 {...toggleButtonProps}\n disabled={disabled}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\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 type UseComboboxProps,\n type UseComboboxState,\n type UseComboboxStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../internal/hooks\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport { useEffect, useMemo, useState } from \"react\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../internal/functions/buildSelectItems\";\n\nexport type { SectionMeta };\n\nexport type UseComboOptions<TID extends string | number> = {\n // An array of currently loaded options\n options: SelectFieldOption<TID>[];\n // Pinned options configuration (raw prop)\n pinned?: SelectFieldPinnedOptions<TID>;\n // Function to convert a group value to a display label\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n // Function to sort group sections\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption<TID> | null;\n onSelectedOptionChange: (option: SelectFieldOption<TID> | null) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n} & Pick<UseComboboxProps<SelectItem>, \"onInputValueChange\" | \"onIsOpenChange\">;\n\n/**\n * The purpose of useCombo is to provide an abstraction over the downshift combobox hook.\n */\nexport const useCombo = <TID extends string | number>({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onInputValueChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseComboOptions<TID>) => {\n // Controlled input value state - needed so usePinnedOptions can access it\n // before useCombobox is called\n const [inputValue, setInputValue] = useState(selectedOption?.label ?? \"\");\n\n // Compute effective search value (empty if showing selected option's label)\n const effectiveSearchValue =\n selectedOption?.label === inputValue ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: effectiveSearchValue,\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\n } = useCombobox({\n isItemDisabled: (item, _index) => {\n if (!item) {\n return false; // Downshift passes -1 index with an undefined item. Ignore it.\n }\n return (disabled || item.disabled) ?? false;\n },\n environment: environment,\n selectedItem: selectedDownshiftItem,\n inputValue, // Controlled input value\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem<TID>;\n }) => {\n // Regular, pinned, and grouped options are all selectable\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onInputValueChange: (changes) => {\n // Update local state\n setInputValue(changes.inputValue ?? \"\");\n // Call external handler\n onInputValueChange?.(changes);\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useCombobox.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\n\n return {\n inputValue,\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n };\n};\n\nfunction stateReducer<TID extends string | number>(\n state: UseComboboxState<SelectItem<TID>>,\n actionAndChanges: UseComboboxStateChangeOptions<SelectItem<TID>>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n // this prevents the menu from being closed when the user selects an item with 'Enter' or mouse\n switch (type) {\n case useCombobox.stateChangeTypes.InputBlur:\n // keep the dialog open if the user blurs the input while the dialog is open\n if (displayAs === \"dialog\" && state.isOpen) {\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputKeyDownEscape:\n case useCombobox.stateChangeTypes.FunctionCloseMenu:\n return {\n ...changes,\n inputValue: state.selectedItem?.original.label ?? state.inputValue,\n };\n case useCombobox.stateChangeTypes.InputClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n // keep the dialog open if the user clicks the input while the dialog is open\n return {\n ...changes,\n isOpen: state.isOpen,\n };\n }\n return changes;\n case useCombobox.stateChangeTypes.InputKeyDownEnter:\n case useCombobox.stateChangeTypes.ItemClick:\n return changes;\n default:\n return changes; // otherwise business as usual.\n }\n}\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../internal/components/SelectOptions\";\nimport type { OptionsPanelHandle } from \"../../../internal/components/OptionsPanel\";\nimport { SelectFieldInput } from \"./SelectFieldInput\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport { useDebouncedCallback } from \"../../../internal/hooks/useDebouncedCallback\";\nimport styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useCombo } from \"./useCombo\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport { popoverTargetDomProps } from \"../../../internal/functions/popoverTargetDomProps\";\nimport type { SelectFieldComboboxInternalProps } from \"../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Combobox mode: searchable select using useCombobox.\n * This is the default behavior when disableSearch is false.\n */\nexport const SelectFieldComboboxMode = <TID extends string | number>({\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n labelAiMark,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n debounceMs,\n addItemLabel,\n onAddNewItem,\n dataAttributes,\n}: SelectFieldComboboxInternalProps<TID>) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const debouncedOptionLoader = useDebouncedCallback((inputValue: string) => {\n loadOptions(selectedOption?.label === inputValue ? \"\" : inputValue, {\n initial: true,\n });\n }, debounceMs);\n\n const adjustInputValueForSelectedOption = useCallback(\n (inputValue: string) => {\n return selectedOption?.label === inputValue ? \"\" : inputValue;\n },\n [selectedOption?.label],\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getInputProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n inputValue,\n items,\n closeMenu,\n sectionsMeta,\n } = useCombo({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n },\n onInputValueChange: ({ inputValue: iv }) => {\n debouncedOptionLoader(iv ?? \"\");\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(adjustInputValueForSelectedOption(inputValue), {\n initial: true,\n });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n inputValue,\n adjustInputValueForSelectedOption,\n setInitialLoadPerformed,\n ]);\n\n const handleLoadMore = async () => {\n await loadMore(adjustInputValueForSelectedOption(inputValue));\n };\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n if (displayAs === \"dialog\") {\n return (\n <div\n {...dataAttributes}\n data-anv=\"select-field\"\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n required={required}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={getToggleButtonProps({ disabled: !!disabled })}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n inputProps={getInputProps({\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n inputProps={getInputProps()}\n disableToggleButton\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-dialog-input`}\n inputWrapperRef={inputWrapperRef}\n size=\"medium\"\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n }\n initialFocusResolver={(elements) => {\n return (\n elements.find((element) => element.tagName === \"INPUT\") ||\n elements[0]\n );\n }}\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n {...dataAttributes}\n data-anv=\"select-field\"\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldInput\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n required={required}\n inputProps={getInputProps({\n ...popoverTargetDomProps(`${id}-popover`),\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n })}\n toggleButtonProps={getToggleButtonProps({ disabled: !!disabled })}\n disableToggleButton={false}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-input`}\n inputWrapperRef={inputWrapperRef}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport cx from \"classnames\";\nimport type { 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 type { ReactElement, RefObject } from \"react\";\nimport { useMergeRefs } from \"../../../hooks/useMergeRefs/useMergeRefs\";\nimport { ANV_PART_ATTR } from \"../../../internal/constants/anvParts\";\nimport { popoverTargetDomProps } from \"../../../internal/functions/popoverTargetDomProps\";\nimport { PARTS } from \"../parts\";\n\nexport type SelectFieldTriggerProps = {\n placeholder?: string;\n size?: Extract<Size, \"small\" | \"medium\" | \"large\">;\n disableClearButton?: boolean;\n disabled?: boolean;\n readOnly?: boolean;\n isHighlighted?: boolean;\n error?: boolean;\n onClear?: () => void;\n id?: string;\n popoverTarget?: string;\n inputWrapperRef?: RefObject<HTMLDivElement>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toggleButtonProps?: Record<string, any>;\n /** The display text (selected option label or empty) */\n displayValue?: string;\n prefix?: string | ReactElement;\n suffix?: string | ReactElement;\n};\n\n/**\n * Non-searchable select trigger for SelectField when disableSearch is true.\n * Renders a div-based trigger instead of an input, suitable for the listbox ARIA pattern.\n */\nexport const SelectFieldTrigger = ({\n placeholder,\n size,\n disableClearButton,\n disabled,\n readOnly,\n isHighlighted,\n error,\n onClear,\n id,\n inputWrapperRef,\n toggleButtonProps,\n displayValue,\n prefix,\n suffix,\n popoverTarget,\n}: SelectFieldTriggerProps) => {\n const { ref: downshiftRef, ...restToggleButtonProps } =\n toggleButtonProps ?? {};\n const mergedRef = useMergeRefs([inputWrapperRef, downshiftRef]);\n\n const inputWrapperClassNames = cx(styles[\"input-wrapper\"], {\n [styles[\"small\"]]: size === \"small\",\n [styles[\"large\"]]: size === \"large\",\n [styles[\"no-clear-button\"]]: disableClearButton,\n [styles[\"disabled\"]]: disabled || readOnly,\n [styles[\"is-disabled\"]]: disabled,\n [styles[\"highlight\"]]: isHighlighted,\n });\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n ref={mergedRef}\n {...restToggleButtonProps}\n {...popoverTargetDomProps(popoverTarget)}\n id={id}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : restToggleButtonProps.onClick}\n onKeyDown={disabled ? undefined : restToggleButtonProps.onKeyDown}\n {...{ [ANV_PART_ATTR]: PARTS.trigger }}\n className={cx(inputWrapperClassNames, restToggleButtonProps?.className)}\n >\n {prefix ? <div className={styles[\"prefix\"]}>{prefix}</div> : null}\n <div\n className={cx(styles[\"input\"], {\n [styles[\"error\"]]: error,\n })}\n >\n {displayValue ? (\n <span>{displayValue}</span>\n ) : (\n <span className={styles[\"fake-placeholder\"]}>{placeholder}</span>\n )}\n </div>\n {suffix ? <div className={styles[\"suffix\"]}>{suffix}</div> : null}\n <div className={styles[\"buttons-wrapper\"]}>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Button\n icon={Chevron_Right}\n aria-label=\"toggle menu\"\n appearance=\"ghost\"\n size=\"small\"\n disabled={disabled}\n tabIndex={-1}\n {...{ [ANV_PART_ATTR]: PARTS.toggleButton }}\n className={styles[\"toggle-button\"]}\n />\n </div>\n </div>\n </div>\n {disableClearButton ? null : (\n <div\n className={styles[\"buttons-wrapper\"]}\n style={{\n insetInlineEnd: \"2rem\",\n ...(size === \"small\"\n ? {}\n : {\n insetBlock: \"0\",\n }),\n }}\n >\n <div className={styles[\"close-button-wrapper\"]}>\n <Button\n icon={Close}\n aria-label=\"clear selection\"\n appearance=\"ghost\"\n size=\"small\"\n className={styles[\"close-button\"]}\n {...{ [ANV_PART_ATTR]: PARTS.clearButton }}\n onClick={(e) => {\n e.stopPropagation();\n onClear?.();\n }}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nSelectFieldTrigger.displayName = \"SelectFieldTrigger\";\n","import {\n useSelect,\n type UseSelectState,\n type UseSelectStateChangeOptions,\n} from \"downshift\";\nimport { useDownshiftEnvironment } from \"../../../internal/hooks\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../types\";\nimport type { SelectItem } from \"../../../internal/types/selectFieldInternalTypes\";\nimport { useEffect, useMemo } from \"react\";\nimport { useProcessedOptions } from \"../../../internal/hooks/useProcessedOptions\";\nimport {\n buildSelectItems,\n toSelectItem,\n} from \"../../../internal/functions/buildSelectItems\";\n\nexport type UseSelectModeOptions<TID extends string | number> = {\n options: SelectFieldOption<TID>[];\n pinned?: SelectFieldPinnedOptions<TID>;\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n selectedOption: SelectFieldOption<TID> | null;\n onSelectedOptionChange: (option: SelectFieldOption<TID> | null) => void;\n onIsOpenChange?: (changes: { isOpen?: boolean }) => void;\n displayAs: \"popover\" | \"dialog\";\n disableHighlightOnOpen?: boolean;\n disabled: boolean;\n virtualize?: boolean;\n onScrollToHighlight?: (index: number) => void;\n};\n\n/**\n * Wraps downshift's useSelect for non-searchable select fields.\n * Returns a compatible interface to useCombo (minus getInputProps/inputValue).\n */\nexport const useSelectMode = <TID extends string | number>({\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n onSelectedOptionChange,\n onIsOpenChange,\n displayAs = \"popover\",\n disableHighlightOnOpen = false,\n disabled,\n virtualize = false,\n onScrollToHighlight,\n}: UseSelectModeOptions<TID>) => {\n const { pinnedSections, ungroupedItems, groupSections } = useProcessedOptions(\n {\n options,\n pinned,\n searchValue: \"\",\n groupToString,\n groupSorter,\n },\n );\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems<TID>({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedDownshiftItem = useMemo(() => {\n return selectedOption ? toSelectItem(selectedOption) : null;\n }, [selectedOption]);\n\n const { ref: wrapperDivRef, environment } = useDownshiftEnvironment();\n\n const {\n isOpen,\n highlightedIndex,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n closeMenu,\n openMenu,\n setHighlightedIndex,\n } = useSelect<SelectItem<TID>>({\n isItemDisabled: (item) => {\n if (!item) return false;\n return (disabled || item.disabled) ?? false;\n },\n environment,\n selectedItem: selectedDownshiftItem,\n onSelectedItemChange: ({\n selectedItem: si,\n }: {\n selectedItem: SelectItem<TID>;\n }) => {\n if (\n si &&\n (si.type === \"option\" ||\n si.type === \"pinned-option\" ||\n si.type === \"grouped-option\")\n ) {\n onSelectedOptionChange(si.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n onHighlightedIndexChange: ({ type, highlightedIndex: idx }) => {\n if (type !== useSelect.stateChangeTypes.ItemMouseMove && idx >= 0) {\n onScrollToHighlight?.(idx);\n }\n },\n onIsOpenChange: (changes) => {\n onIsOpenChange?.(changes);\n if (changes.isOpen && !disableHighlightOnOpen) {\n const selectedItemIndex = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n setHighlightedIndex(selectedItemIndex);\n }\n },\n items: items,\n itemToString(item: SelectItem | null) {\n return item?.original.label ?? \"\";\n },\n stateReducer: (state, actionAndChanges) =>\n stateReducer(state, actionAndChanges, displayAs),\n ...(virtualize && { scrollIntoView: () => {} }),\n });\n\n useEffect(() => {\n if (disabled) {\n closeMenu();\n }\n }, [disabled, closeMenu]);\n\n return {\n wrapperDivRef,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n isOpen,\n items,\n sectionsMeta,\n closeMenu,\n openMenu,\n };\n};\n\nfunction stateReducer<TID extends string | number>(\n state: UseSelectState<SelectItem<TID>>,\n actionAndChanges: UseSelectStateChangeOptions<SelectItem<TID>>,\n displayAs: \"popover\" | \"dialog\",\n) {\n const { type, changes } = actionAndChanges;\n switch (type) {\n case useSelect.stateChangeTypes.ToggleButtonBlur:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEscape:\n case useSelect.stateChangeTypes.FunctionCloseMenu:\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonClick:\n if (displayAs === \"dialog\" && state.isOpen) {\n return { ...changes, isOpen: state.isOpen };\n }\n return changes;\n case useSelect.stateChangeTypes.ToggleButtonKeyDownEnter:\n case useSelect.stateChangeTypes.ItemClick:\n return changes;\n default:\n return changes;\n }\n}\n","import { useEffect, useRef } from \"react\";\nimport { SelectOptions } from \"../../../internal/components/SelectOptions\";\nimport type { OptionsPanelHandle } from \"../../../internal/components/OptionsPanel\";\nimport { SelectFieldTrigger } from \"./SelectFieldTrigger\";\nimport { SelectFieldLabel } from \"./SelectFieldLabel\";\nimport styles from \"../../../components/SelectTrigger/internal/SelectTriggerBase.module.scss\";\nimport { useSelectMode } from \"./useSelectMode\";\nimport { OptionsPopover } from \"../../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../../internal/components/OptionsDialog/OptionsDialog\";\nimport { AddNewItemButton } from \"../../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../../internal/types/addNewItemTypes\";\nimport { FieldMessage } from \"../../../components/FieldMessage\";\nimport type { SelectFieldBaseInternalProps } from \"../../../internal/types/selectFieldInternalTypes\";\n\n/**\n * Select mode: non-searchable select using useSelect.\n * Active when disableSearch is true.\n */\nexport const SelectFieldSelectMode = <\n TID extends string | number = string | number,\n>({\n labelAiMark,\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n required,\n addItemLabel,\n onAddNewItem,\n dataAttributes,\n}: SelectFieldBaseInternalProps<TID>) => {\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const {\n isOpen,\n getToggleButtonProps,\n getLabelProps,\n getMenuProps,\n wrapperDivRef,\n highlightedIndex,\n getItemProps,\n items,\n closeMenu,\n sectionsMeta,\n } = useSelectMode({\n displayAs,\n disabled: isDisabledOrReadOnly,\n options,\n pinned,\n groupToString,\n groupSorter,\n selectedOption,\n virtualize,\n onSelectedOptionChange: (opt) => onSelectedOptionChange(opt),\n async onIsOpenChange(changes) {\n if (initialLoad === \"open\" && !initialLoadPerformed && changes.isOpen) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n },\n onScrollToHighlight: (i) => listRef.current?.scrollToIndex(i),\n });\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [loadOptions, initialLoadPerformed, initialLoad, setInitialLoadPerformed]);\n\n const handleLoadMore = async () => {\n await loadMore(\"\");\n };\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n \"\",\n ) ? (\n <AddNewItemButton\n searchText=\"\"\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={closeMenu}\n />\n ) : null;\n\n const toggleButtonProps = getToggleButtonProps({\n disabled: !!disabled,\n \"aria-required\": required ? true : undefined,\n \"aria-describedby\":\n [hasHelperText && helperUid, moreInfo && moreInfoId]\n .filter(Boolean)\n .join(\" \") || undefined,\n \"aria-invalid\": error ? true : undefined,\n } as Record<string, unknown>);\n\n if (displayAs === \"dialog\") {\n return (\n <div\n {...dataAttributes}\n data-anv=\"select-field\"\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n ref={wrapperDivRef}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) =>\n getMenuProps({\n ...opts,\n style: { ...opts?.style, outline: \"none\" },\n onKeyDown: toggleButtonProps.onKeyDown,\n tabIndex: 0,\n \"aria-activedescendant\":\n toggleButtonProps[\"aria-activedescendant\"],\n })\n }\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </div>\n );\n }\n\n return (\n <div\n {...dataAttributes}\n data-anv=\"select-field\"\n className={\n className\n ? `${styles[\"search-field\"]} ${className}`\n : styles[\"search-field\"]\n }\n style={{ ...layoutStyles, ...style }}\n >\n <SelectFieldLabel\n aiMark={labelAiMark}\n label={label}\n hideLabel={hideLabel}\n getLabelProps={getLabelProps}\n required={required}\n moreInfo={moreInfo}\n moreInfoId={moreInfoId}\n />\n <SelectFieldTrigger\n disabled={disabled}\n readOnly={readOnly}\n isHighlighted={isHighlighted}\n placeholder={placeholder}\n disableClearButton={disableClearButton}\n toggleButtonProps={toggleButtonProps}\n onClear={() => onSelectedOptionChange(null)}\n id={`${id}-trigger`}\n popoverTarget={`${id}-popover`}\n inputWrapperRef={inputWrapperRef}\n displayValue={selectedOption?.label}\n size={size}\n error={!!error}\n prefix={prefix}\n suffix={suffix}\n />\n {hasHelperText ? (\n <FieldMessage\n id={helperUid}\n hint={hint}\n error={errorMessages}\n warning={warning}\n description={description}\n />\n ) : null}\n\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={inputWrapperRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={closeMenu}\n width=\"reference\"\n footer={addNewItemButton ?? undefined}\n >\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n disabled={isDisabledOrReadOnly}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </div>\n );\n};\n","import type { SelectFieldHandle, SelectFieldProps } from \"./types\";\nimport {\n type ForwardedRef,\n forwardRef,\n type ReactNode,\n useId,\n useRef,\n} from \"react\";\nimport type { DataAttributes } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks/useLayoutPropsUtil\";\nimport { warnDeprecatedErrorUsage } from \"../../components/FieldMessage\";\nimport { SelectFieldComboboxMode } from \"./internal/SelectFieldComboboxMode\";\nimport { SelectFieldSelectMode } from \"./internal/SelectFieldSelectMode\";\nimport type {\n SelectFieldBaseInternalProps,\n SelectFieldComboboxInternalProps,\n} from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\n\nconst SelectFieldInner = <TID extends string | number>(\n propsWithLayout: SelectFieldProps<TID>,\n ref: ForwardedRef<SelectFieldHandle>,\n) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(propsWithLayout);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(componentProps).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const inputWrapperRef = useRef<HTMLDivElement>(null);\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n labelAiMark,\n hideLabel,\n placeholder,\n disableClearButton: disableClearButtonProp = false,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n size,\n error,\n hint,\n moreInfo,\n description,\n errorAriaLive: _errorAriaLive,\n required,\n disabled,\n readOnly,\n isHighlighted,\n prefix,\n suffix,\n warning,\n className,\n style,\n pinned,\n virtualize,\n disableSearch,\n addItemLabel,\n onAddNewItem,\n } = componentProps;\n\n const groupToString =\n \"groupToString\" in componentProps\n ? componentProps.groupToString\n : undefined;\n const groupSorter =\n \"groupSorter\" in componentProps ? componentProps.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n const helperUid = useId();\n const moreInfoUid = useId();\n\n warnDeprecatedErrorUsage(\"SelectField\", error);\n\n const errorMessages =\n typeof error === \"boolean\" || error === undefined ? undefined : error;\n const hasHelperText = !!(hint || errorMessages || warning || description);\n const isDisabledOrReadOnly = (disabled || readOnly) ?? false;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration<TID>({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions:\n \"lazyOptions\" in componentProps ? componentProps.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const disableClearButton =\n disableClearButtonProp || !selectedOption || isDisabledOrReadOnly;\n\n const baseProps: SelectFieldBaseInternalProps<TID> = {\n id,\n helperUid,\n selectedOption,\n onSelectedOptionChange,\n displayAs,\n isDisabledOrReadOnly,\n disabled,\n readOnly,\n isHighlighted,\n required,\n placeholder,\n size,\n error,\n hasHelperText,\n disableClearButton,\n prefix,\n suffix,\n label,\n labelAiMark,\n hideLabel,\n hint,\n moreInfo,\n moreInfoId: moreInfo ? moreInfoUid : undefined,\n errorMessages,\n warning,\n description,\n className,\n style,\n layoutStyles,\n pinned,\n groupToString,\n groupSorter,\n virtualize,\n addItemLabel,\n onAddNewItem,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n inputWrapperRef,\n dataAttributes,\n };\n\n if (disableSearch) {\n return <SelectFieldSelectMode {...baseProps} />;\n }\n\n const comboboxProps: SelectFieldComboboxInternalProps<TID> = {\n ...baseProps,\n debounceMs,\n };\n\n return <SelectFieldComboboxMode {...comboboxProps} />;\n};\n\n/**\n * SelectField component for selecting a single option from a searchable dropdown.\n *\n * Features:\n * - Async option loading with caching, lazy pagination (page, offset, group), and debounced search\n * - Supports pinned option sections (static or dynamically loaded)\n * - Grouped options with custom sort and label functions\n * - Combobox mode (searchable) and select mode (non-searchable) via disableSearch\n * - Dialog and popover display modes with auto-detection based on viewport\n * - Imperative handle for cache management (clearCache, invalidate)\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n * - Supports layout utilities for positioning and spacing\n *\n * @example\n * <SelectField\n * label=\"Technician\"\n * value={selected}\n * onSelectedOptionChange={setSelected}\n * loadOptions={async (search) => fetchTechnicians(search)}\n * />\n */\nexport const SelectField = Object.assign(forwardRef(SelectFieldInner), {\n displayName: \"SelectField\",\n}) as <TID extends string | number = string | number>(\n propsWithLayout: SelectFieldProps<TID> & {\n ref?: ForwardedRef<SelectFieldHandle>;\n },\n) => ReactNode;\n","import { useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { SelectField } from \"./SelectField\";\nimport type {\n SelectFieldHandle,\n SelectFieldProps,\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"./types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../internal/functions/syncFilterUtils\";\nimport { useInvalidateOnOptionsChange } from \"../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type SelectFieldSyncProps<\n TID extends string | number = string | number,\n> = Omit<\n SelectFieldProps<TID>,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select field.\n */\n options: SelectFieldOption<TID>[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * Before any search is performed, options appear in the order they are supplied.\n * By default, options are filtered by `label` and `searchText` using match-sorter,\n * which also ranks results by match quality (best matches first).\n *\n * @example\n * <SelectFieldSync\n * options={options}\n * filter={(options, searchValue) => {\n * return options.filter((option) => {\n * return option.label?.toLowerCase().includes(searchValue.toLowerCase());\n * });\n * }}\n * />\n *\n * @example\n * <SelectFieldSync\n * options={options}\n * filter={{ keys: [\"label\"] }}\n * />\n */\n filter?: SyncFilterFn<TID> | MatchSorterOptions<SelectFieldOption<TID>>;\n /**\n * Function to compare two group values for sorting.\n * When provided, options are sorted by group using this comparator,\n * then by match-sort order within each group.\n * @param a - First group value to compare\n * @param b - Second group value to compare\n * @returns Negative if a < b, positive if a > b, zero if equal\n */\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n};\n\n/**\n * SelectFieldSync is a simplified version of SelectField that is used to display a list of options in a select field.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`.\n * - Performs client-side filtering of the options.\n * - Optionally accepts a function to filter the options, or a MatchSorterOptions object to customize the default filtering.\n * - Supports grouping with optional group sorting via `groupSorter`.\n * - Supports all the other props of SelectField.\n */\nexport const SelectFieldSync = <TID extends string | number>(\n props: SelectFieldSyncProps<TID>,\n) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn<TID>(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup<TID>(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectFieldHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <SelectField\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":["Close","Chevron_Right","stateReducer","inputValue"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectMenuSync-O55TODxn.js","sources":["../src/components/SelectMenu/parts.ts","../src/components/SelectMenu/SelectMenu.tsx","../src/components/SelectMenu/SelectMenuSync.tsx"],"sourcesContent":["import { COMMON_PART } from \"../../internal/constants/anvParts\";\n\n/**\n * `data-anv-part` names for SelectMenu interactive sub-elements.\n *\n * There is no wrapper root — attach consumer `data-*` (e.g. `data-cy`) via\n * props; they are merged into the trigger render-prop bag. Portaled\n * `menu` / `option` / `popover` / `dialog` / footer buttons come from shared\n * internals (not redeclared here).\n */\nexport const PARTS = {\n trigger: COMMON_PART.trigger,\n input: COMMON_PART.input,\n} as const;\n","import type { SelectMenuHandle, SelectMenuProps } from \"./types\";\nimport {\n type ChangeEvent,\n type KeyboardEvent,\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOptions } from \"../../internal/components/SelectOptions\";\nimport { useDebouncedCallback } from \"../../internal/hooks/useDebouncedCallback\";\nimport { OptionsPopover } from \"../../internal/components/OptionsPopover/OptionsPopover\";\nimport { OptionsDialog } from \"../../internal/components/OptionsDialog/OptionsDialog\";\nimport { MenuFooter } from \"../../internal/components/MenuFooter/MenuFooter\";\nimport { AddNewItemButton } from \"../../internal/components/AddNewItemButton\";\nimport { shouldShowAddNewItem } from \"../../internal/types/addNewItemTypes\";\nimport { useProcessedOptions } from \"../../internal/hooks/useProcessedOptions\";\nimport { buildSelectItems } from \"../../internal/functions/buildSelectItems\";\nimport { useMenuInteraction } from \"./internal/useMenuInteraction\";\nimport type { SelectItem } from \"../../internal/types/selectFieldInternalTypes\";\nimport { useSelectOrchestration } from \"../../internal/hooks/useSelectOrchestration\";\nimport { SearchField } from \"../../components\";\nimport type { DataAttributes } from \"../../types\";\nimport { ANV_PART_ATTR } from \"../../internal/constants/anvParts\";\nimport { PARTS } from \"./parts\";\n\n/**\n * SelectMenu component for selecting a single option from a dropdown triggered by any element.\n *\n * Features:\n * - Attaches to any trigger element via a render prop\n * - Optional search input rendered inside the popover/dialog\n * - Lazy loading with pagination (page, offset, or group modes)\n * - Pinned options support\n * - Grouped options support\n * - Supports both popover and dialog display modes\n * - Adaptive display based on device (mobile uses dialog)\n * - Cache support for loadOptions results\n * - Full accessibility support with ARIA attributes\n * - Controlled selection state\n * - Configurable popover width\n * - Optional \"Add new item\" affordance below the option list with consumer-owned dialog\n *\n * @example\n * <SelectMenu\n * trigger={(props) => <Button {...props}>Select a book</Button>}\n * label=\"Books\"\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * loadOptions={loadOptions}\n * />\n */\nexport const SelectMenu = forwardRef<SelectMenuHandle, SelectMenuProps>(\n (props, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n\n const dataAttributes = Object.fromEntries(\n Object.entries(props).filter(([key]) => key.startsWith(\"data-\")),\n ) as DataAttributes;\n\n const {\n id: idProp,\n value: selectedOption,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n lazy,\n loadOptions: loadOptionsProp,\n label,\n searchPlaceholder,\n debounceMs = 200,\n onSelectedOptionChange,\n cache,\n pinned,\n virtualize,\n disableSearch,\n popoverWidth,\n trigger,\n onSearchChange,\n onMenuKeyDown,\n onImplicitClose,\n onExplicitClose,\n addItemLabel,\n onAddNewItem,\n clear,\n } = props;\n\n const groupToString =\n \"groupToString\" in props ? props.groupToString : undefined;\n const groupSorter = \"groupSorter\" in props ? props.groupSorter : undefined;\n\n const autoId = useId();\n const id = idProp ?? autoId;\n\n const {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n setInitialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n } = useSelectOrchestration({\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions: \"lazyOptions\" in props ? props.lazyOptions : undefined,\n initialLoad: initialLoadProp,\n displayMenuAs: displayMenuAsProp,\n ref,\n });\n\n const [inputValue, setInputValue] = useState(\"\");\n\n const searchValue = disableSearch ? \"\" : inputValue;\n\n const { pinnedSections, ungroupedItems, groupSections } =\n useProcessedOptions({\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n });\n\n const { items, sectionsMeta } = useMemo(\n () =>\n buildSelectItems({\n pinnedSections,\n groupSections,\n ungroupedItems,\n }),\n [pinnedSections, groupSections, ungroupedItems],\n );\n\n const selectedItemIds = useMemo(\n () => new Set(selectedOption ? [selectedOption.id] : []),\n [selectedOption],\n );\n\n const handleItemActivate = useCallback(\n (item: SelectItem) => {\n if (\n item.type === \"option\" ||\n item.type === \"pinned-option\" ||\n item.type === \"grouped-option\"\n ) {\n onSelectedOptionChange(item.original);\n } else {\n onSelectedOptionChange(null);\n }\n },\n [onSelectedOptionChange],\n );\n\n const [isOpen, setIsOpen] = useState(false);\n\n const {\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n } = useMenuInteraction({\n items: items,\n sectionsMeta,\n onItemActivate: handleItemActivate,\n selectedItemIds,\n displayAs,\n closeOnActivate: true,\n id,\n triggerRef,\n label,\n isOpen,\n setIsOpen,\n onImplicitClose,\n onExplicitClose,\n });\n\n const debouncedOptionLoader = useDebouncedCallback((value: string) => {\n loadOptions(value, { initial: true });\n }, debounceMs);\n\n const handleInputChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value;\n setInputValue(value);\n debouncedOptionLoader(value);\n onSearchChange?.(value);\n },\n [debouncedOptionLoader, onSearchChange],\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n onMenuKeyDown?.(e);\n handleKeyDown(e);\n },\n [handleKeyDown, onMenuKeyDown],\n );\n\n const getMenuPropsWithKeyDown: typeof getMenuProps = useCallback(\n (opts) => {\n const menuProps = getMenuProps(opts);\n if (!onMenuKeyDown) return menuProps;\n return {\n ...menuProps,\n onKeyDown: (e: KeyboardEvent) => {\n onMenuKeyDown(e);\n menuProps.onKeyDown(e);\n },\n };\n },\n [getMenuProps, onMenuKeyDown],\n );\n\n useEffect(() => {\n const performInitialLoad = async () => {\n if (initialLoad === \"immediate\" && !initialLoadPerformed) {\n await loadOptions(\"\", { initial: true });\n setInitialLoadPerformed(true);\n }\n };\n performInitialLoad();\n }, [\n loadOptions,\n initialLoadPerformed,\n initialLoad,\n setInitialLoadPerformed,\n ]);\n\n const prevIsOpenRef = useRef(false);\n useEffect(() => {\n const wasOpen = prevIsOpenRef.current;\n prevIsOpenRef.current = isOpen;\n\n if (isOpen && !wasOpen) {\n if (initialLoad === \"open\" && !initialLoadPerformed) {\n loadOptions(\"\", { initial: true }).then(() => {\n setInitialLoadPerformed(true);\n });\n }\n const selectedIdx = items.findIndex(\n (item) => item.original.id === selectedOption?.id,\n );\n if (selectedIdx >= 0) {\n setHighlightedIndex(selectedIdx);\n }\n }\n\n if (!isOpen && wasOpen) {\n setInputValue(\"\");\n loadOptions(\"\", { initial: true });\n }\n }, [\n isOpen,\n initialLoad,\n initialLoadPerformed,\n loadOptions,\n setInitialLoadPerformed,\n items,\n selectedOption?.id,\n setHighlightedIndex,\n ]);\n\n useEffect(() => {\n if (!isOpen || displayAs !== \"popover\") return;\n\n const frameId = requestAnimationFrame(() => {\n if (!disableSearch) {\n searchRef.current?.focus();\n } else {\n menuContainerRef.current?.focus();\n }\n });\n\n return () => cancelAnimationFrame(frameId);\n }, [isOpen, displayAs, disableSearch, menuContainerRef]);\n\n const handleLoadMore = async () => {\n await loadMore(searchValue);\n };\n\n const handleClickOutside = useCallback(() => {\n closeMenu({ restoreFocus: false });\n }, [closeMenu]);\n\n const triggerProps = {\n ...getTriggerProps(),\n ...dataAttributes,\n [ANV_PART_ATTR]: PARTS.trigger,\n };\n\n const menuPropsForAria = getMenuProps();\n const activeDescendant = menuPropsForAria[\"aria-activedescendant\"];\n\n const handleSearchClear = useCallback(() => {\n setInputValue(\"\");\n debouncedOptionLoader(\"\");\n onSearchChange?.(\"\");\n }, [debouncedOptionLoader, onSearchChange]);\n\n const searchInput = !disableSearch ? (\n <SearchField\n ref={searchRef}\n value={inputValue}\n onChange={\n handleInputChange as React.ChangeEventHandler<HTMLInputElement>\n }\n onKeyDown={\n handleInputKeyDown as React.KeyboardEventHandler<HTMLInputElement>\n }\n onClear={handleSearchClear}\n aria-activedescendant={activeDescendant}\n aria-controls={menuPropsForAria.id}\n placeholder={searchPlaceholder}\n type=\"search\"\n {...{ [ANV_PART_ATTR]: PARTS.input }}\n />\n ) : null;\n\n const addNewItemButton = shouldShowAddNewItem(\n onAddNewItem,\n addItemLabel,\n inputValue,\n ) ? (\n <AddNewItemButton\n searchText={inputValue}\n addItemLabel={addItemLabel}\n onAddNewItem={onAddNewItem}\n onCloseMenu={() => closeMenu({ restoreFocus: false })}\n />\n ) : null;\n\n // Wrap clear's onClick so clicking Clear always also closes the menu and\n // returns focus to the trigger.\n const wrappedClear = clear\n ? {\n ...clear,\n onClick: () => {\n clear.onClick();\n closeMenu();\n },\n }\n : undefined;\n // Only render a footer when at least one slot has content; passing an empty\n // <MenuFooter/> would still draw the popover's footer divider.\n const hasFooter = !!wrappedClear || !!addNewItemButton;\n const footer = hasFooter ? (\n <MenuFooter clear={wrappedClear} addNew={addNewItemButton} />\n ) : undefined;\n\n if (displayAs === \"dialog\") {\n return (\n <>\n {trigger(triggerProps)}\n <OptionsDialog\n id={`${id}-dialog`}\n isOpen={isOpen}\n onClose={closeMenu}\n title={label}\n field={searchInput ?? undefined}\n footer={footer ?? undefined}\n initialFocusResolver={\n !disableSearch\n ? (elements) =>\n elements.find((el) => el.tagName === \"INPUT\") || elements[0]\n : undefined\n }\n >\n <SelectOptions\n ref={listRef}\n isOpen\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsDialog>\n </>\n );\n }\n\n return (\n <>\n {trigger(triggerProps)}\n <OptionsPopover\n id={`${id}-popover`}\n referenceElement={triggerRef}\n open={isOpen && displayAs === \"popover\"}\n onClose={handleClickOutside}\n width={popoverWidth ?? 320}\n footer={footer ?? undefined}\n >\n {searchInput}\n <SelectOptions\n ref={listRef}\n isOpen={isOpen}\n items={items}\n sectionsMeta={sectionsMeta}\n getMenuProps={(opts) => {\n const menuProps = getMenuPropsWithKeyDown(opts);\n if (disableSearch) {\n return menuProps;\n }\n return { ...menuProps, tabIndex: -1 };\n }}\n getItemProps={getItemProps}\n highlightedIndex={highlightedIndex}\n selectedOption={selectedOption}\n hasMore={hasMore}\n onLoadMore={handleLoadMore}\n loading={loading}\n loadingMore={loadingMore}\n virtualize={virtualize}\n />\n </OptionsPopover>\n </>\n );\n },\n);\n\nSelectMenu.displayName = \"SelectMenu\";\n","import { useMemo, useRef } from \"react\";\nimport type { MatchSorterOptions } from \"match-sorter\";\nimport { SelectMenu } from \"./SelectMenu\";\nimport type {\n SelectMenuHandle,\n SelectMenuProps,\n SelectMenuOption,\n SelectMenuGroupByValue,\n} from \"./types\";\nimport {\n type SyncFilterFn,\n defaultSyncFilter,\n toSyncFilterFn,\n sortByGroup,\n} from \"../../internal/functions/syncFilterUtils\";\nimport { useInvalidateOnOptionsChange } from \"../../internal/hooks/useInvalidateOnOptionsChange\";\n\nexport type SelectMenuSyncProps = Omit<\n SelectMenuProps,\n \"loadOptions\" | \"lazy\" | \"debounceMs\" | \"cache\" | \"initialLoad\"\n> & {\n /**\n * The options to display in the select menu.\n */\n options: SelectMenuOption[];\n /**\n * Controls how options are filtered and sorted when the user types a search value.\n * Can be a function that returns options in the desired display order,\n * or a MatchSorterOptions object to customize the default match-sorter behavior.\n *\n * By default, options are filtered by `label` and `searchText` using match-sorter.\n */\n filter?: SyncFilterFn | MatchSorterOptions<SelectMenuOption>;\n /**\n * Custom comparator function to sort groups.\n */\n groupSorter?: (\n a: SelectMenuGroupByValue,\n b: SelectMenuGroupByValue,\n ) => number;\n};\n\n/**\n * SelectMenuSync is a simplified version of SelectMenu for client-side option sets.\n *\n * Features:\n * - Accepts `options` instead of `loadOptions` and `lazy`\n * - Performs client-side filtering of the options\n * - Optionally accepts a custom filter function or MatchSorterOptions\n * - Supports grouping with optional group sorting via `groupSorter`\n * - Supports all other props of SelectMenu\n *\n * @example\n * <SelectMenuSync\n * trigger={(props) => <Button {...props}>Pick a book</Button>}\n * label=\"Books\"\n * options={bookOptions}\n * value={selectedOption}\n * onSelectedOptionChange={setSelectedOption}\n * />\n */\nexport const SelectMenuSync = (props: SelectMenuSyncProps) => {\n const {\n options,\n filter: filterProp = defaultSyncFilter,\n groupSorter,\n ...rest\n } = props;\n\n const filter = useMemo(() => toSyncFilterFn(filterProp), [filterProp]);\n\n const loadOptions = (searchValue: string) => {\n const filtered = filter(options, searchValue);\n return groupSorter ? sortByGroup(filtered, groupSorter) : filtered;\n };\n\n const fieldRef = useRef<SelectMenuHandle>(null);\n useInvalidateOnOptionsChange(fieldRef, options);\n\n return (\n <SelectMenu\n ref={fieldRef}\n lazy={false}\n loadOptions={loadOptions}\n debounceMs={0}\n {...rest}\n />\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelectTrigger-BfJ7DWYq.js","sources":["../src/components/SelectTrigger/SelectTrigger.tsx"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n UseComboboxProps as UseDownshiftComboboxProps,\n UseMultipleSelectionProps as UseDownshiftMultipleSelectionProps,\n} from \"downshift\";\n\nimport { Avatar, type AvatarProps } from \"../Avatar\";\nimport { childrenToString } from \"../../internal/functions\";\nimport type { DataTrackingId, DistributiveOmit } from \"../../types\";\nimport type { FieldLabelProps } from \"../FieldLabel\";\nimport { Icon, type IconProps } from \"../Icon\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport {\n SelectTriggerBase,\n type 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\"> &\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/**\n * SelectTrigger component — a field-styled button for opening a custom\n * select-like menu (e.g. paired with `Combobox.Content` or a custom\n * popover), for building select components that need a trigger different\n * from `SelectMenu`'s built-in one.\n *\n * Features:\n * - Single (`selectedItem`) or multiple (`selectedItems`) selection display\n * - Optional prefix as text, an icon, or an avatar\n * - Label, hint, description, error, and required-field messaging\n * - Full accessibility support via `FieldLabel`\n *\n * @example\n * <SelectTrigger\n * label=\"Assignee\"\n * selectedItem={selected}\n * itemToString={(item) => item?.name ?? \"\"}\n * />\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO: look into unknown\nexport const SelectTrigger = <Item = any>(props: SelectTriggerProps<Item>) => {\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 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 { aiMark, ...labelPropsWithoutAiMark } = props.labelProps || {};\n\n const data = {\n label: childrenToString(props.label),\n size: props.size,\n required: props.required,\n moreInfo: props.moreInfo,\n description: childrenToString(props.description),\n hint: props.hint,\n labelProps: labelPropsWithoutAiMark,\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 aiMark,\n moreInfo,\n required,\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":";;;;;;;;AAyEO,MAAM,aAAA,GAAgB,CAAa,KAAA,KAAoC;AAC5E,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AAEjE,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,MAAA;AAAA,IACA,OAAA;AAAA,IACA,iBAAA,GAAoB,OAAO,EAAC,CAAA;AAAA,IAC5B,EAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA,EAAU,UAAA;AAAA,IACV,QAAA,EAAU,UAAA;AAAA,IACV,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,qBAAA;AAAA,IACA,YAAA,EAAc,gBAAA;AAAA,IACd,SAAA,EAAW,aAAA;AAAA,IACX,YAAA,GAAe,IAAA;AAAA,IACf,gBAAgB,EAAC;AAAA,IACjB,GAAG;AAAA,GACL,GAAI,cAAA;AAEJ,EAAA,MAAM,eAAe,gBAAA,IAAoB,mBAAA;AACzC,EAAA,MAAM,YAAY,aAAA,IAAiB,gBAAA;AAEnC,EAAA,SAAS,mBAAmB,IAAA,EAAY;AACtC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA;AAAA,QACE,aAAA,CAAc,MAAA;AAAA,UACZ,CAACA,aAAAA,KAAuB,SAAA,CAAUA,aAAY,CAAA,KAAM,UAAU,IAAI;AAAA;AACpE,OACF;AAAA,IACF,WAAW,SAAA,CAAU,YAAY,CAAA,KAAM,SAAA,CAAU,IAAI,CAAA,EAAG;AACtD,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,SAAS,KAAA,GAAQ;AACf,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,GAAW,EAAE,CAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,IAAI,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,MAAM,aAAA,GAAgB,cAAc,UAAA,IAAc,qBAAA;AAElD,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,GAAG,KAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,yBAAwB,GAAI,KAAA,CAAM,cAAc,EAAC;AAEpE,EAAA,MAAM,IAAA,GAAO;AAAA,IACX,KAAA,EAAO,gBAAA,CAAiB,KAAA,CAAM,KAAK,CAAA;AAAA,IACnC,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,WAAA,EAAa,gBAAA,CAAiB,KAAA,CAAM,WAAW,CAAA;AAAA,IAC/C,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AAEA,EAAA,MAAM,aAAa,aAAA,CAAc;AAAA,IAC/B,IAAA,EAAM,qBAAA;AAAA,IACN,IAAA;AAAA,IACA,WAAA,EAAa,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,GACxC,CAAA;AAED,EAAA,MAAM,SACJ,UAAA,IAAc,IAAA,IAAQ,OAAO,UAAA,KAAe,WAC1C,UAAA,GACE,MAAA,IAAU,UAAA,mBACZ,GAAA,CAAC,QAAM,GAAG,UAAA,CAAW,IAAA,EAAM,CAAA,GACzB,YAAY,UAAA,mBACd,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,UAAA,CAAW,MAAA;AAAA,MACf,IAAA,EAAM,KAAA,CAAM,IAAA,KAAS,OAAA,GAAU,OAAA,GAAU;AAAA;AAAA,GAC3C,GAEA,UAAA;AAGJ,EAAA,uBACE,GAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAS,gBAAA;AAAA,MACT,kBAAA,EAAkB,UAAA;AAAA,MAClB,SAAA;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,KAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY;AAAA,QACV,MAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,EAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,YAAA;AAAA,MACA,kBAAA;AAAA,MACA,qBAAA,EAAuB,aAAA;AAAA,MACvB,YAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAA,EAAoB,KAAA;AAAA,MACpB,iBAAA,EAAmB,EAAE,OAAA,EAAQ;AAAA,MAC7B,UAAA,EAAY;AAAA;AAAA,GACd;AAEJ;;;;"}
|