@servicetitan/anvil2 3.17.0 → 3.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/dist/{AiMark-CYXbKuCA.js → AiMark-Ca7WmL-9.js} +113 -32
- package/dist/AiMark-Ca7WmL-9.js.map +1 -0
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-CYpl0czJ.js → Alert-BOqBFMUV.js} +2 -2
- package/dist/{Alert-CYpl0czJ.js.map → Alert-BOqBFMUV.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{AnvilProvider-DagOuc9c.js → AnvilProvider-BVTxXzoS.js} +3 -3
- package/dist/{AnvilProvider-DagOuc9c.js.map → AnvilProvider-BVTxXzoS.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Breadcrumbs-C0CXs9Ma.js → Breadcrumbs-1MCqy-gU.js} +2 -2
- package/dist/{Breadcrumbs-C0CXs9Ma.js.map → Breadcrumbs-1MCqy-gU.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-BAIyDHX9.js → Calendar-BcsuV4Xv.js} +2 -2
- package/dist/{Calendar-BAIyDHX9.js.map → Calendar-BcsuV4Xv.js.map} +1 -1
- package/dist/{Calendar-C_NPqjx3.js → Calendar-oBRbQqnG.js} +2 -2
- package/dist/{Calendar-C_NPqjx3.js.map → Calendar-oBRbQqnG.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-4Ow8rCbD.js → Checkbox-BCaUzwF_.js} +2 -2
- package/dist/{Checkbox-4Ow8rCbD.js.map → Checkbox-BCaUzwF_.js.map} +1 -1
- package/dist/{Checkbox-f1vutjn0.js → Checkbox-BocPrjKC.js} +4 -4
- package/dist/{Checkbox-f1vutjn0.js.map → Checkbox-BocPrjKC.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-AIF0WiNS.js → Chip-BWqgUX71.js} +11 -24
- package/dist/Chip-BWqgUX71.js.map +1 -0
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTableEditColumnsDrawer-DRgJgso9.js → DataTableEditColumnsDrawer-C7OHRsJU.js} +101 -42
- package/dist/DataTableEditColumnsDrawer-C7OHRsJU.js.map +1 -0
- package/dist/DataTableEditColumnsDrawer.css +49 -33
- package/dist/{DateFieldRange-D9PA985Z.js → DateFieldRange-BPcsS6TW.js} +5 -5
- package/dist/{DateFieldRange-D9PA985Z.js.map → DateFieldRange-BPcsS6TW.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-CMLojOb3.js → DateFieldSingle-BRMhe0OM.js} +5 -5
- package/dist/{DateFieldSingle-CMLojOb3.js.map → DateFieldSingle-BRMhe0OM.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-B5IyR75v.js → DateFieldYearless-NOgDKzrJ.js} +6 -6
- package/dist/{DateFieldYearless-B5IyR75v.js.map → DateFieldYearless-NOgDKzrJ.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-8yXILjx7.js → DateFieldYearlessRange-ChvypgXC.js} +5 -5
- package/dist/{DateFieldYearlessRange-8yXILjx7.js.map → DateFieldYearlessRange-ChvypgXC.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-Cxp5VdYK.js → DaysOfTheWeek-nYitIKnQ.js} +3 -3
- package/dist/{DaysOfTheWeek-Cxp5VdYK.js.map → DaysOfTheWeek-nYitIKnQ.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/Details-B2F3auTX.js +216 -0
- package/dist/Details-B2F3auTX.js.map +1 -0
- package/dist/{Details-BxqP-5vp.js → Details-DQ-_Mg4o.js} +3 -3
- package/dist/{Details-BxqP-5vp.js.map → Details-DQ-_Mg4o.js.map} +1 -1
- package/dist/Details.css +92 -68
- package/dist/Details.js +1 -1
- package/dist/Details2.css +137 -0
- package/dist/{Dialog-KDAJphrA.js → Dialog-BgWoV2on.js} +6 -4
- package/dist/Dialog-BgWoV2on.js.map +1 -0
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-C7E2NNnH.js → Drawer-BVBLtGn_.js} +7 -5
- package/dist/Drawer-BVBLtGn_.js.map +1 -0
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-CutlsXfK.js → EditCard-hivZDPZh.js} +2 -2
- package/dist/{EditCard-CutlsXfK.js.map → EditCard-hivZDPZh.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-DYcUS3A4.js → FieldLabel-Cn559Brf.js} +8 -58
- package/dist/FieldLabel-Cn559Brf.js.map +1 -0
- package/dist/FieldLabel.css +1 -12
- package/dist/FieldLabel.js +1 -1
- package/dist/FieldMessage.js +1 -1
- package/dist/{FilterBar-DbDfZph-.js → FilterBar-COd38Ent.js} +5 -5
- package/dist/{FilterBar-DbDfZph-.js.map → FilterBar-COd38Ent.js.map} +1 -1
- package/dist/FilterBar.js +1 -1
- package/dist/InlineMarkdown-CL1tKR01.js +87 -0
- package/dist/InlineMarkdown-CL1tKR01.js.map +1 -0
- package/dist/InlineMarkdown.css +12 -0
- package/dist/{InputMask-BxdQc1ld.js → InputMask-DICWdeiF.js} +3 -3
- package/dist/{InputMask-BxdQc1ld.js.map → InputMask-DICWdeiF.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-BVanVvBk.js → ListView-BeGBn5Vk.js} +2 -2
- package/dist/{ListView-BVanVvBk.js.map → ListView-BeGBn5Vk.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-BR0YQIee.js → Listbox-n1CmJ2gh.js} +2 -2
- package/dist/{Listbox-BR0YQIee.js.map → Listbox-n1CmJ2gh.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-9253tott.js → MultiSelectFieldSync-CWsOdu-o.js} +44 -62
- package/dist/MultiSelectFieldSync-CWsOdu-o.js.map +1 -0
- package/dist/MultiSelectFieldSync.css +107 -69
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-BUJbWN2I.js → MultiSelectMenuSync-AVcf8ZUZ.js} +16 -29
- package/dist/MultiSelectMenuSync-AVcf8ZUZ.js.map +1 -0
- package/dist/{NumberField-DhxywJVp.js → NumberField-DjOvcCa1.js} +5 -5
- package/dist/{NumberField-DhxywJVp.js.map → NumberField-DjOvcCa1.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-D_KL2tdK.js → Page-_dh-JesM.js} +128 -80
- package/dist/Page-_dh-JesM.js.map +1 -0
- package/dist/Page.css +85 -80
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DYpUtMha.js → Pagination-CsSpaTCs.js} +2 -2
- package/dist/{Pagination-DYpUtMha.js.map → Pagination-CsSpaTCs.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-B2ix8Ji4.js → Popover-CEKl0WY3.js} +3 -3
- package/dist/{Popover-B2ix8Ji4.js.map → Popover-CEKl0WY3.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-CjoOuJCi.js → ProgressBar-ubCKKewC.js} +3 -3
- package/dist/{ProgressBar-CjoOuJCi.js.map → ProgressBar-ubCKKewC.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-Bz36_d0V.js → Radio-DkB6zFsS.js} +2 -2
- package/dist/{Radio-Bz36_d0V.js.map → Radio-DkB6zFsS.js.map} +1 -1
- package/dist/{Radio-DOD1d9Vw.js → Radio-q1Vp_ZQG.js} +4 -4
- package/dist/{Radio-DOD1d9Vw.js.map → Radio-q1Vp_ZQG.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-BORVXVDw.js → RichTextEditor-BHt6sWMA.js} +8 -8
- package/dist/{RichTextEditor-BORVXVDw.js.map → RichTextEditor-BHt6sWMA.js.map} +1 -1
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-vq_Kt4Qc.js → SavedFiltersButton-Cl58iHZe.js} +9 -9
- package/dist/{SavedFiltersButton-vq_Kt4Qc.js.map → SavedFiltersButton-Cl58iHZe.js.map} +1 -1
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/{SearchField-ChoNtw8w.js → SearchField-Bk-Ltu4v.js} +2 -2
- package/dist/{SearchField-ChoNtw8w.js.map → SearchField-Bk-Ltu4v.js.map} +1 -1
- package/dist/{SearchField-DX8hZyo2.js → SearchField-INVftpNM.js} +2 -2
- package/dist/{SearchField-DX8hZyo2.js.map → SearchField-INVftpNM.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SelectCard-CJwetC1k.js → SelectCard-DeAUW1bL.js} +3 -3
- package/dist/{SelectCard-CJwetC1k.js.map → SelectCard-DeAUW1bL.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-BTKqybZm.js → SelectFieldLabel-DaXwIFZj.js} +2 -2
- package/dist/{SelectFieldLabel-BTKqybZm.js.map → SelectFieldLabel-DaXwIFZj.js.map} +1 -1
- package/dist/{SelectFieldSync-CoUi-BYw.js → SelectFieldSync-DpZL4wDo.js} +47 -68
- package/dist/SelectFieldSync-DpZL4wDo.js.map +1 -0
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-CvXx-6uU.js → SelectMenuSync-Klna2oqs.js} +16 -35
- package/dist/SelectMenuSync-Klna2oqs.js.map +1 -0
- package/dist/{SelectOptions-CGRUCyf4.js → SelectOptions-DGYYFU8i.js} +2 -2
- package/dist/{SelectOptions-CGRUCyf4.js.map → SelectOptions-DGYYFU8i.js.map} +1 -1
- package/dist/{SelectTrigger-CRbl804u.js → SelectTrigger-DKY7rpZn.js} +2 -2
- package/dist/{SelectTrigger-CRbl804u.js.map → SelectTrigger-DKY7rpZn.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-BRUW_Zgc.js → SelectTriggerBase-DUYq_L-6.js} +5 -5
- package/dist/{SelectTriggerBase-BRUW_Zgc.js.map → SelectTriggerBase-DUYq_L-6.js.map} +1 -1
- package/dist/SelectTriggerBase.css +94 -56
- package/dist/SelectTriggerBase.module-C-NmZbg4.js +41 -0
- package/dist/SelectTriggerBase.module-C-NmZbg4.js.map +1 -0
- package/dist/{Switch-rPPL4yEa.js → Switch-C9yQgF4w.js} +2 -2
- package/dist/{Switch-rPPL4yEa.js.map → Switch-C9yQgF4w.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-BRbkPr5s.js → Text-D4SWT4u-.js} +2 -2
- package/dist/{Text-BRbkPr5s.js.map → Text-D4SWT4u-.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-B9hivHsD.js → TextField-CKXSxube.js} +5 -5
- package/dist/{TextField-B9hivHsD.js.map → TextField-CKXSxube.js.map} +1 -1
- package/dist/{TextField-DGRVg_Cw.js → TextField-DmdT2k0w.js} +2 -2
- package/dist/{TextField-DGRVg_Cw.js.map → TextField-DmdT2k0w.js.map} +1 -1
- package/dist/TextField.css +38 -23
- package/dist/TextField.js +1 -1
- package/dist/TextField.module-B3y6caP9.js +25 -0
- package/dist/TextField.module-B3y6caP9.js.map +1 -0
- package/dist/{Textarea-DNqfV8rJ.js → Textarea-Dv__veBJ.js} +11 -11
- package/dist/{Textarea-DNqfV8rJ.js.map → Textarea-Dv__veBJ.js.map} +1 -1
- package/dist/Textarea.css +26 -11
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-DW-Mflv6.js → ThemeProvider-DS2aL89d.js} +2 -2
- package/dist/{ThemeProvider-DW-Mflv6.js.map → ThemeProvider-DS2aL89d.js.map} +1 -1
- package/dist/ThemeProvider.css +6 -4
- package/dist/ThemeProvider.js +1 -1
- package/dist/ThemeProvider.module-BkKwAw2f.js +8 -0
- package/dist/ThemeProvider.module-BkKwAw2f.js.map +1 -0
- package/dist/{TimeField-DldMBNAj.js → TimeField-De9qBimk.js} +48 -10
- package/dist/TimeField-De9qBimk.js.map +1 -0
- package/dist/TimeField.js +1 -1
- package/dist/{TimezoneMessage-CgVNxYpM.js → TimezoneMessage-DEJX87S3.js} +2 -2
- package/dist/{TimezoneMessage-CgVNxYpM.js.map → TimezoneMessage-DEJX87S3.js.map} +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-Bcy9XN3c.js → Toaster-BlwTxTLf.js} +2 -2
- package/dist/{Toaster-Bcy9XN3c.js.map → Toaster-BlwTxTLf.js.map} +1 -1
- package/dist/{Toaster-C66ra4BK.js → Toaster-sO16N9b5.js} +23 -9
- package/dist/Toaster-sO16N9b5.js.map +1 -0
- package/dist/{Toolbar-DgPah7M3.js → Toolbar-BhrHuIN7.js} +6 -6
- package/dist/{Toolbar-DgPah7M3.js.map → Toolbar-BhrHuIN7.js.map} +1 -1
- package/dist/{Toolbar-Br-5yBxq.js → Toolbar-Buq2zze0.js} +4 -4
- package/dist/{Toolbar-Br-5yBxq.js.map → Toolbar-Buq2zze0.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-BDfoHeie.js → ToolbarButtonToggle-CNIaqVWl.js} +2 -2
- package/dist/{ToolbarButtonToggle-BDfoHeie.js.map → ToolbarButtonToggle-CNIaqVWl.js.map} +1 -1
- package/dist/{Tooltip-C_VcYS9P.js → Tooltip-CsTkZqMg.js} +3 -3
- package/dist/{Tooltip-C_VcYS9P.js.map → Tooltip-CsTkZqMg.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-1psUeqtG.js → TreeSelectFieldSync-B7w31kbz.js} +22 -22
- package/dist/{TreeSelectFieldSync-1psUeqtG.js.map → TreeSelectFieldSync-B7w31kbz.js.map} +1 -1
- package/dist/TreeSelectFieldSync.css +57 -34
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-DIPSYUnE.js → TreeSelectMenuSync-EjxlvDZp.js} +4 -4
- package/dist/{TreeSelectMenuSync-DIPSYUnE.js.map → TreeSelectMenuSync-EjxlvDZp.js.map} +1 -1
- package/dist/{TypeaheadTextField-Di9ulOBl.js → TypeaheadTextField-DTOkaJda.js} +3 -3
- package/dist/{TypeaheadTextField-Di9ulOBl.js.map → TypeaheadTextField-DTOkaJda.js.map} +1 -1
- package/dist/TypeaheadTextField.js +1 -1
- package/dist/{YearlessDateInputWithPicker-CQ2-6Uj4.js → YearlessDateInputWithPicker-DJUQypnF.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-CQ2-6Uj4.js.map → YearlessDateInputWithPicker-DJUQypnF.js.map} +1 -1
- package/dist/beta.js +19 -18
- package/dist/beta.js.map +1 -1
- package/dist/{bulkActionTypes-B71ZHjVu.js → bulkActionTypes-bznuvizE.js} +2 -2
- package/dist/{bulkActionTypes-B71ZHjVu.js.map → bulkActionTypes-bznuvizE.js.map} +1 -1
- package/dist/{filter-state-Lw9qL0zP.js → filter-state-DxwL15y1.js} +23 -23
- package/dist/{filter-state-Lw9qL0zP.js.map → filter-state-DxwL15y1.js.map} +1 -1
- package/dist/{index-B3WhDZeI.js → index-Bn56UnMm.js} +2 -2
- package/dist/{index-B3WhDZeI.js.map → index-Bn56UnMm.js.map} +1 -1
- package/dist/index.js +157 -115
- package/dist/index.js.map +1 -1
- package/dist/index2.css +78 -73
- package/dist/{portalScopeClassNames-DA28LrXe.js → portalScopeClassNames-CMdDYHE0.js} +2 -2
- package/dist/{portalScopeClassNames-DA28LrXe.js.map → portalScopeClassNames-CMdDYHE0.js.map} +1 -1
- package/dist/src/beta/components/Details/Details.d.ts +25 -0
- package/dist/src/beta/components/Details/DetailsSummary.d.ts +121 -0
- package/dist/src/beta/components/Details/index.d.ts +4 -0
- package/dist/src/beta/components/Details/internal/DetailsArrow.d.ts +11 -0
- package/dist/src/beta/components/Details/internal/DetailsSummaryCells.d.ts +5 -0
- package/dist/src/beta/components/Page/Page.d.ts +1 -0
- package/dist/src/beta/components/Page/PageSidebar.d.ts +12 -0
- package/dist/src/beta/components/Table/DataTable/internal/DataTablePagination.d.ts +3 -3
- package/dist/src/beta/components/Table/DataTable/internal/context/tabbables/CellTabbablesQueue.d.ts +23 -0
- package/dist/src/beta/components/Table/DataTable/types.d.ts +11 -0
- package/dist/src/beta/components/deprecatedReexports/MultiSelectField.d.ts +4 -4
- package/dist/src/beta/components/deprecatedReexports/MultiSelectMenu.d.ts +4 -4
- package/dist/src/beta/components/deprecatedReexports/SelectField.d.ts +4 -4
- package/dist/src/beta/components/deprecatedReexports/SelectMenu.d.ts +4 -4
- package/dist/src/beta/components/index.d.ts +1 -0
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldComboboxMode.d.ts +1 -1
- package/dist/src/components/MultiSelectField/internal/MultiSelectFieldSelectMode.d.ts +1 -1
- package/dist/src/components/MultiSelectField/internal/types.d.ts +0 -1
- package/dist/src/components/Page/Page.d.ts +1 -0
- package/dist/src/components/Page/PageSidebar.d.ts +12 -0
- package/dist/src/components/SelectField/internal/SelectFieldComboboxMode.d.ts +1 -1
- package/dist/src/components/SelectField/internal/SelectFieldSelectMode.d.ts +1 -1
- package/dist/src/internal/components/InlineMarkdown/InlineMarkdown.d.ts +8 -1
- package/dist/src/internal/components/InlineMarkdown/index.d.ts +1 -1
- package/dist/src/internal/components/Popover/Popover.d.ts +10 -5
- package/dist/src/internal/components/Popover/internal/verticalPlacement.d.ts +9 -0
- package/dist/src/internal/contexts/DisableConditionalUnmountWarningContext.d.ts +6 -0
- package/dist/src/internal/contexts/SuppressPanelSwapWarningContext.d.ts +13 -0
- package/dist/src/internal/functions/inlineMarkdown.d.ts +5 -2
- package/dist/src/internal/functions/stripInlineMarkdown.d.ts +4 -2
- package/dist/src/internal/hooks/index.d.ts +1 -0
- package/dist/src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.d.ts +9 -1
- package/dist/src/internal/hooks/useSelectOrchestration.d.ts +0 -1
- package/dist/src/internal/hooks/useWarnOnConditionalUnmount/index.d.ts +1 -0
- package/dist/src/internal/hooks/useWarnOnConditionalUnmount/useWarnOnConditionalUnmount.d.ts +1 -0
- package/dist/src/internal/testing/keepMutationObserversAlive.d.ts +9 -0
- package/dist/src/internal/types/selectFieldInternalTypes.d.ts +0 -1
- package/dist/src/internal/utils/inlineMarkdownRegex.d.ts +5 -0
- package/dist/stripInlineMarkdown-BV12XXzl.js +35 -0
- package/dist/stripInlineMarkdown-BV12XXzl.js.map +1 -0
- package/dist/{syncFilterUtils-DnhuqY1S.js → syncFilterUtils-BNbAB0jz.js} +109 -38
- package/dist/syncFilterUtils-BNbAB0jz.js.map +1 -0
- package/dist/token/core/component-variables.scss +3 -0
- package/dist/token/core/component.d.ts +2 -0
- package/dist/token/core/component.js +17 -0
- package/dist/token/core/component.scss +2 -0
- package/dist/token/core/semantic-variables.scss +2 -0
- package/dist/token/core/semantic.d.ts +1 -0
- package/dist/token/core/semantic.js +13 -0
- package/dist/token/core/semantic.scss +1 -0
- package/dist/token.js +33 -0
- package/dist/token.js.map +1 -1
- package/dist/{treeSync-BDwht_1r.js → treeSync-BELsX1gY.js} +3 -3
- package/dist/{treeSync-BDwht_1r.js.map → treeSync-BELsX1gY.js.map} +1 -1
- package/dist/{useDrilldown-CGdhHs8L.js → useDrilldown-B8pIhfWa.js} +3 -3
- package/dist/{useDrilldown-CGdhHs8L.js.map → useDrilldown-B8pIhfWa.js.map} +1 -1
- package/dist/{useInfiniteCombobox-Db0kaxCj.js → useInfiniteCombobox-ZZalag0-.js} +4 -4
- package/dist/{useInfiniteCombobox-Db0kaxCj.js.map → useInfiniteCombobox-ZZalag0-.js.map} +1 -1
- package/dist/{useInitialFocus-fBiTU9l8.js → useInitialFocus-KdirjHEb.js} +45 -13
- package/dist/useInitialFocus-KdirjHEb.js.map +1 -0
- package/dist/{useInvalidateOnOptionsChange-PweyDORd.js → useInvalidateOnOptionsChange-ChrPmbtS.js} +5 -5
- package/dist/{useInvalidateOnOptionsChange-PweyDORd.js.map → useInvalidateOnOptionsChange-ChrPmbtS.js.map} +1 -1
- package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js} +1 -2
- package/dist/{usePopoverTransitionStates-CDXCdyKa.js.map → usePopoverTransitionStates-B1opfxxn.js.map} +1 -1
- package/dist/{utils-CM48ODEJ.js → utils-DwLrXpmt.js} +2 -2
- package/dist/{utils-CM48ODEJ.js.map → utils-DwLrXpmt.js.map} +1 -1
- package/package.json +3 -3
- package/dist/AiMark-CYXbKuCA.js.map +0 -1
- package/dist/Chip-AIF0WiNS.js.map +0 -1
- package/dist/DataTableEditColumnsDrawer-DRgJgso9.js.map +0 -1
- package/dist/Dialog-KDAJphrA.js.map +0 -1
- package/dist/Drawer-C7E2NNnH.js.map +0 -1
- package/dist/FieldLabel-DYcUS3A4.js.map +0 -1
- package/dist/MultiSelectFieldSync-9253tott.js.map +0 -1
- package/dist/MultiSelectMenuSync-BUJbWN2I.js.map +0 -1
- package/dist/Page-D_KL2tdK.js.map +0 -1
- package/dist/SelectFieldSync-CoUi-BYw.js.map +0 -1
- package/dist/SelectMenuSync-CvXx-6uU.js.map +0 -1
- package/dist/SelectTriggerBase.module-Dt4-6YvC.js +0 -40
- package/dist/SelectTriggerBase.module-Dt4-6YvC.js.map +0 -1
- package/dist/TextField.module-DklyLNKz.js +0 -25
- package/dist/TextField.module-DklyLNKz.js.map +0 -1
- package/dist/ThemeProvider.module-B9qgsQ8S.js +0 -8
- package/dist/ThemeProvider.module-B9qgsQ8S.js.map +0 -1
- package/dist/TimeField-DldMBNAj.js.map +0 -1
- package/dist/Toaster-C66ra4BK.js.map +0 -1
- package/dist/stripInlineMarkdown-B6lAJb4-.js +0 -25
- package/dist/stripInlineMarkdown-B6lAJb4-.js.map +0 -1
- package/dist/syncFilterUtils-DnhuqY1S.js.map +0 -1
- package/dist/useInitialFocus-fBiTU9l8.js.map +0 -1
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { S as Spinner } from './Spinner-B7tTWcP6.js';
|
|
3
3
|
import { c as cx } from './index-De1g9FRV.js';
|
|
4
|
-
import { useState, useRef, useCallback, useEffect, useMemo, forwardRef, useId, useImperativeHandle } from 'react';
|
|
4
|
+
import { useState, useRef, useCallback, useEffect, useMemo, forwardRef, useId, useImperativeHandle, useLayoutEffect } from 'react';
|
|
5
5
|
import { C as COMMON_PART, A as ANV_PART_ATTR } from './anvParts-DFVq7-Cm.js';
|
|
6
|
-
import { T as Text } from './Text-
|
|
6
|
+
import { T as Text } from './Text-D4SWT4u-.js';
|
|
7
7
|
import { D as Divider } from './Divider-C7fp5Xb6.js';
|
|
8
8
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
9
9
|
import { I as Icon } from './Icon-B5zwN7GD.js';
|
|
10
10
|
import { S as SvgCheck } from './check-Cf67OWrZ.js';
|
|
11
|
-
import { i as isThenable, c as OptionRow, d as OptionRowSideContent, e as OptionCheckbox, f as OptionContentArea, b as useAdaptiveView } from './useInvalidateOnOptionsChange-
|
|
11
|
+
import { i as isThenable, c as OptionRow, d as OptionRowSideContent, e as OptionCheckbox, f as OptionContentArea, b as useAdaptiveView } from './useInvalidateOnOptionsChange-ChrPmbtS.js';
|
|
12
12
|
import { B as Button } from './Button-B_E6ybA-.js';
|
|
13
13
|
import { S as SrOnly } from './SrOnly-pnf8ajnh.js';
|
|
14
14
|
import { d as defaultRangeExtractor, u as useVirtualizer } from './index-DXeGMe23.js';
|
|
@@ -18,7 +18,12 @@ import { m as matchSorter } from './match-sorter.esm-CGAauEiU.js';
|
|
|
18
18
|
import './syncFilterUtils.css';const DEFAULT_PAGE_SIZE = 20;
|
|
19
19
|
const DEFAULT_CACHE_MAX_SIZE = 15;
|
|
20
20
|
function useSelectFieldLoading(config) {
|
|
21
|
-
const {
|
|
21
|
+
const {
|
|
22
|
+
lazy,
|
|
23
|
+
loadOptions: loadOptionsProp,
|
|
24
|
+
cache: cacheConfig,
|
|
25
|
+
onInitialApplied
|
|
26
|
+
} = config;
|
|
22
27
|
const cacheEnabled = cacheConfig?.enabled !== false;
|
|
23
28
|
const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;
|
|
24
29
|
const [options, setOptions] = useState([]);
|
|
@@ -33,6 +38,7 @@ function useSelectFieldLoading(config) {
|
|
|
33
38
|
const [stateCache, setStateCache] = useState(() => /* @__PURE__ */ new Map());
|
|
34
39
|
const currentSearchValueRef = useRef("");
|
|
35
40
|
const hasCompletedLoadRef = useRef(false);
|
|
41
|
+
const generationRef = useRef(0);
|
|
36
42
|
const appendOptions = useCallback((newOptions) => {
|
|
37
43
|
setOptions((prevOptions) => prevOptions.concat(newOptions));
|
|
38
44
|
}, []);
|
|
@@ -72,37 +78,48 @@ function useSelectFieldLoading(config) {
|
|
|
72
78
|
previousGroup
|
|
73
79
|
]);
|
|
74
80
|
const loadOptions = useCallback(
|
|
75
|
-
async (searchValue,
|
|
76
|
-
const
|
|
77
|
-
if (
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
currentSearchValueRef.current = searchValue;
|
|
81
|
-
restoreFromCache(cached);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
81
|
+
async (searchValue, { initial: isInitial = false } = {}) => {
|
|
82
|
+
const cached = isInitial && cacheEnabled ? stateCache.get(searchValue) : void 0;
|
|
83
|
+
if (cached?.options === options && searchValue === currentSearchValueRef.current) {
|
|
84
|
+
onInitialApplied?.();
|
|
85
|
+
return;
|
|
84
86
|
}
|
|
87
|
+
const generation = isInitial ? ++generationRef.current : generationRef.current;
|
|
88
|
+
const isCurrent = () => generation === generationRef.current;
|
|
85
89
|
if (isInitial) {
|
|
86
90
|
currentSearchValueRef.current = searchValue;
|
|
91
|
+
setLoadingMore(false);
|
|
92
|
+
}
|
|
93
|
+
if (cached) {
|
|
94
|
+
restoreFromCache(cached);
|
|
95
|
+
setLoading(false);
|
|
96
|
+
onInitialApplied?.();
|
|
97
|
+
return;
|
|
87
98
|
}
|
|
88
99
|
const setBusy = isInitial ? setLoading : setLoadingMore;
|
|
89
|
-
const
|
|
90
|
-
(isInitial
|
|
100
|
+
const apply = (newOptions) => {
|
|
101
|
+
if (isInitial) {
|
|
102
|
+
setOptions(newOptions);
|
|
103
|
+
onInitialApplied?.();
|
|
104
|
+
} else {
|
|
105
|
+
appendOptions(newOptions);
|
|
106
|
+
}
|
|
91
107
|
hasCompletedLoadRef.current = true;
|
|
92
108
|
};
|
|
93
109
|
if (!lazy) {
|
|
94
|
-
const result = loadOptionsProp(searchValue);
|
|
95
|
-
if (!isThenable(result)) {
|
|
96
|
-
await Promise.resolve();
|
|
97
|
-
applyEagerResult(result);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
setBusy(true);
|
|
101
110
|
try {
|
|
111
|
+
const result = loadOptionsProp(searchValue);
|
|
112
|
+
if (!isThenable(result)) {
|
|
113
|
+
await Promise.resolve();
|
|
114
|
+
if (isCurrent()) apply(result);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
setBusy(true);
|
|
102
118
|
const awaited = await result;
|
|
103
|
-
|
|
119
|
+
const resolved = Array.isArray(awaited) ? awaited : await awaited;
|
|
120
|
+
if (isCurrent()) apply(resolved);
|
|
104
121
|
} finally {
|
|
105
|
-
setBusy(false);
|
|
122
|
+
if (isCurrent()) setBusy(false);
|
|
106
123
|
}
|
|
107
124
|
return;
|
|
108
125
|
}
|
|
@@ -112,14 +129,17 @@ function useSelectFieldLoading(config) {
|
|
|
112
129
|
if (lazy === "page") {
|
|
113
130
|
const page = isInitial ? 0 : previousPage;
|
|
114
131
|
result = await loadOptionsProp(searchValue, page, pageSize);
|
|
132
|
+
if (!isCurrent()) return;
|
|
115
133
|
setPreviousPage(isInitial ? 1 : page + 1);
|
|
116
134
|
} else if (lazy === "offset") {
|
|
117
135
|
const offset = isInitial ? 0 : previousOffset;
|
|
118
136
|
result = await loadOptionsProp(searchValue, offset, limit);
|
|
137
|
+
if (!isCurrent()) return;
|
|
119
138
|
setPreviousOffset(isInitial ? limit : offset + limit);
|
|
120
139
|
} else if (lazy === "group") {
|
|
121
140
|
const group = isInitial ? null : previousGroup;
|
|
122
141
|
result = await loadOptionsProp(searchValue, group);
|
|
142
|
+
if (!isCurrent()) return;
|
|
123
143
|
setPreviousGroup(
|
|
124
144
|
result.options[result.options.length - 1]?.group ?? null
|
|
125
145
|
);
|
|
@@ -129,10 +149,9 @@ function useSelectFieldLoading(config) {
|
|
|
129
149
|
);
|
|
130
150
|
}
|
|
131
151
|
setHasMoreToLoad(result.hasMore ?? false);
|
|
132
|
-
(
|
|
133
|
-
hasCompletedLoadRef.current = true;
|
|
152
|
+
apply(result.options);
|
|
134
153
|
} finally {
|
|
135
|
-
setBusy(false);
|
|
154
|
+
if (isCurrent()) setBusy(false);
|
|
136
155
|
}
|
|
137
156
|
},
|
|
138
157
|
[
|
|
@@ -146,7 +165,9 @@ function useSelectFieldLoading(config) {
|
|
|
146
165
|
previousGroup,
|
|
147
166
|
cacheEnabled,
|
|
148
167
|
stateCache,
|
|
149
|
-
|
|
168
|
+
options,
|
|
169
|
+
restoreFromCache,
|
|
170
|
+
onInitialApplied
|
|
150
171
|
]
|
|
151
172
|
);
|
|
152
173
|
const loadMore = useCallback(
|
|
@@ -156,6 +177,7 @@ function useSelectFieldLoading(config) {
|
|
|
156
177
|
[loadOptions]
|
|
157
178
|
);
|
|
158
179
|
const reset = useCallback(() => {
|
|
180
|
+
generationRef.current += 1;
|
|
159
181
|
setOptions([]);
|
|
160
182
|
setHasMoreToLoad(false);
|
|
161
183
|
setPreviousGroup(null);
|
|
@@ -167,6 +189,12 @@ function useSelectFieldLoading(config) {
|
|
|
167
189
|
const clearCache = useCallback(() => {
|
|
168
190
|
setStateCache(/* @__PURE__ */ new Map());
|
|
169
191
|
}, []);
|
|
192
|
+
const discardPending = useCallback(() => {
|
|
193
|
+
generationRef.current += 1;
|
|
194
|
+
hasCompletedLoadRef.current = false;
|
|
195
|
+
setLoading(false);
|
|
196
|
+
setLoadingMore(false);
|
|
197
|
+
}, []);
|
|
170
198
|
return {
|
|
171
199
|
options,
|
|
172
200
|
loading,
|
|
@@ -175,7 +203,8 @@ function useSelectFieldLoading(config) {
|
|
|
175
203
|
loadOptions,
|
|
176
204
|
loadMore,
|
|
177
205
|
reset,
|
|
178
|
-
clearCache
|
|
206
|
+
clearCache,
|
|
207
|
+
discardPending
|
|
179
208
|
};
|
|
180
209
|
}
|
|
181
210
|
|
|
@@ -1262,30 +1291,35 @@ function useSelectOrchestration(config) {
|
|
|
1262
1291
|
enabled: cache?.enabled,
|
|
1263
1292
|
maxSize: cache?.maxSize
|
|
1264
1293
|
};
|
|
1294
|
+
const onInitialApplied = () => setInitialLoadPerformed(true);
|
|
1265
1295
|
if (lazy === "page")
|
|
1266
1296
|
return {
|
|
1267
1297
|
lazy: "page",
|
|
1268
1298
|
loadOptions: loadOptionsProp,
|
|
1269
1299
|
pageSize,
|
|
1270
|
-
cache: cacheConfig
|
|
1300
|
+
cache: cacheConfig,
|
|
1301
|
+
onInitialApplied
|
|
1271
1302
|
};
|
|
1272
1303
|
if (lazy === "offset")
|
|
1273
1304
|
return {
|
|
1274
1305
|
lazy: "offset",
|
|
1275
1306
|
loadOptions: loadOptionsProp,
|
|
1276
1307
|
limit,
|
|
1277
|
-
cache: cacheConfig
|
|
1308
|
+
cache: cacheConfig,
|
|
1309
|
+
onInitialApplied
|
|
1278
1310
|
};
|
|
1279
1311
|
if (lazy === "group")
|
|
1280
1312
|
return {
|
|
1281
1313
|
lazy: "group",
|
|
1282
1314
|
loadOptions: loadOptionsProp,
|
|
1283
|
-
cache: cacheConfig
|
|
1315
|
+
cache: cacheConfig,
|
|
1316
|
+
onInitialApplied
|
|
1284
1317
|
};
|
|
1285
1318
|
return {
|
|
1286
1319
|
lazy: false,
|
|
1287
1320
|
loadOptions: loadOptionsProp,
|
|
1288
|
-
cache: cacheConfig
|
|
1321
|
+
cache: cacheConfig,
|
|
1322
|
+
onInitialApplied
|
|
1289
1323
|
};
|
|
1290
1324
|
}, [lazy, loadOptionsProp, pageSize, limit, cache?.enabled, cache?.maxSize]);
|
|
1291
1325
|
const {
|
|
@@ -1295,29 +1329,66 @@ function useSelectOrchestration(config) {
|
|
|
1295
1329
|
hasMore,
|
|
1296
1330
|
loadOptions,
|
|
1297
1331
|
loadMore,
|
|
1298
|
-
clearCache
|
|
1332
|
+
clearCache,
|
|
1333
|
+
discardPending
|
|
1299
1334
|
} = useSelectFieldLoading(loadingHookConfig);
|
|
1335
|
+
const loadOptionsRef = useRef(loadOptions);
|
|
1336
|
+
const initialLoadPerformedRef = useRef(initialLoadPerformed);
|
|
1337
|
+
useLayoutEffect(() => {
|
|
1338
|
+
loadOptionsRef.current = loadOptions;
|
|
1339
|
+
initialLoadPerformedRef.current = initialLoadPerformed;
|
|
1340
|
+
});
|
|
1341
|
+
const pagingRef = useRef({ lazy, pageSize, limit });
|
|
1342
|
+
useLayoutEffect(() => {
|
|
1343
|
+
const previous = pagingRef.current;
|
|
1344
|
+
if (previous.lazy === lazy && previous.pageSize === pageSize && previous.limit === limit) {
|
|
1345
|
+
return;
|
|
1346
|
+
}
|
|
1347
|
+
pagingRef.current = { lazy, pageSize, limit };
|
|
1348
|
+
discardPending();
|
|
1349
|
+
}, [lazy, pageSize, limit, discardPending]);
|
|
1350
|
+
const [invalidations, setInvalidations] = useState(0);
|
|
1351
|
+
const stableLoadOptions = useMemo(() => {
|
|
1352
|
+
let pendingFirstLoad = null;
|
|
1353
|
+
return (search, options2) => {
|
|
1354
|
+
const isFirstLoad = !!options2?.initial && !initialLoadPerformedRef.current;
|
|
1355
|
+
if (isFirstLoad && pendingFirstLoad?.search === search) {
|
|
1356
|
+
return pendingFirstLoad.promise;
|
|
1357
|
+
}
|
|
1358
|
+
const promise = loadOptionsRef.current(search, options2);
|
|
1359
|
+
if (isFirstLoad) {
|
|
1360
|
+
const entry = { search, promise };
|
|
1361
|
+
pendingFirstLoad = entry;
|
|
1362
|
+
const forget = () => {
|
|
1363
|
+
if (pendingFirstLoad === entry) pendingFirstLoad = null;
|
|
1364
|
+
};
|
|
1365
|
+
promise.then(forget, forget);
|
|
1366
|
+
}
|
|
1367
|
+
return promise;
|
|
1368
|
+
};
|
|
1369
|
+
}, [invalidations, lazy, pageSize, limit]);
|
|
1300
1370
|
useImperativeHandle(
|
|
1301
1371
|
ref,
|
|
1302
1372
|
() => ({
|
|
1303
1373
|
clearCache,
|
|
1304
1374
|
invalidate: () => {
|
|
1375
|
+
discardPending();
|
|
1305
1376
|
clearCache();
|
|
1306
1377
|
setInitialLoadPerformed(false);
|
|
1378
|
+
setInvalidations((count) => count + 1);
|
|
1307
1379
|
}
|
|
1308
1380
|
}),
|
|
1309
|
-
[clearCache]
|
|
1381
|
+
[clearCache, discardPending]
|
|
1310
1382
|
);
|
|
1311
1383
|
return {
|
|
1312
1384
|
displayAs,
|
|
1313
1385
|
initialLoad,
|
|
1314
1386
|
initialLoadPerformed,
|
|
1315
|
-
setInitialLoadPerformed,
|
|
1316
1387
|
options,
|
|
1317
1388
|
loading,
|
|
1318
1389
|
loadingMore,
|
|
1319
1390
|
hasMore,
|
|
1320
|
-
loadOptions,
|
|
1391
|
+
loadOptions: stableLoadOptions,
|
|
1321
1392
|
loadMore
|
|
1322
1393
|
};
|
|
1323
1394
|
}
|
|
@@ -1356,4 +1427,4 @@ const sortByGroup = (options, groupSorter) => {
|
|
|
1356
1427
|
};
|
|
1357
1428
|
|
|
1358
1429
|
export { AddNewItemButton as A, OptionsPanel as O, VirtualizedOptionsPanel as V, useProcessedOptions as a, buildSelectItems as b, sortByGroup as c, defaultSyncFilter as d, toSelectItem as e, shouldShowAddNewItem as s, toSyncFilterFn as t, useSelectOrchestration as u };
|
|
1359
|
-
//# sourceMappingURL=syncFilterUtils-
|
|
1430
|
+
//# sourceMappingURL=syncFilterUtils-BNbAB0jz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncFilterUtils-BNbAB0jz.js","sources":["../src/internal/hooks/useSelectFieldLoading/useSelectFieldLoading.ts","../src/internal/components/SelectOption.tsx","../src/internal/hooks/useFocusReturnOnUnmount.ts","../src/internal/components/LoadMoreSlot.tsx","../src/internal/hooks/useAutoLoadMore.ts","../src/internal/hooks/useOptionsSections.ts","../src/internal/components/OptionsPanel.tsx","../src/internal/components/VirtualizedOptionsPanel.tsx","../src/internal/hooks/usePinnedOptions.ts","../src/internal/hooks/useGroupedOptions.ts","../src/internal/hooks/useProcessedOptions.ts","../src/internal/functions/buildSelectItems.ts","../src/internal/types/addNewItemTypes.ts","../src/internal/components/AddNewItemButton.tsx","../src/internal/hooks/useSelectOrchestration.ts","../src/internal/functions/syncFilterUtils.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type {\n SelectFieldOption,\n SelectFieldPageLazyResult,\n SelectFieldOffsetLazyResult,\n SelectFieldGroupLazyResult,\n SelectFieldPropsLazyPage,\n SelectFieldPropsLazyOffset,\n SelectFieldPropsLazyGroup,\n SelectFieldPropsEager,\n} from \"../../../components/SelectField/types\";\nimport { isThenable } from \"../../functions/isThenable\";\n\nexport const DEFAULT_PAGE_SIZE = 20;\nconst DEFAULT_CACHE_MAX_SIZE = 15;\n\n/**\n * Cache policy for per-search snapshots. Stays on unless `enabled` is `false`.\n */\nexport type CacheConfig = {\n /** Off only when `false`. Defaults to on. */\n enabled?: boolean;\n /** Distinct search keys kept. Exceeding this wipes the map. Defaults to `15`. */\n maxSize?: number;\n};\n\ntype CachedSearchState<TID extends string | number> = {\n options: SelectFieldOption<TID>[];\n hasMore: boolean;\n previousPage: number;\n previousOffset: number;\n previousGroup: string | number | null;\n};\n\ntype UseSelectFieldLoadingConfigLazyPage<TID extends string | number> = Pick<\n SelectFieldPropsLazyPage<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n pageSize: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyOffset<TID extends string | number> = Pick<\n SelectFieldPropsLazyOffset<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n limit: number;\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigLazyGroup<TID extends string | number> = Pick<\n SelectFieldPropsLazyGroup<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\ntype UseSelectFieldLoadingConfigEager<TID extends string | number> = Pick<\n SelectFieldPropsEager<TID>,\n \"lazy\" | \"loadOptions\"\n> & {\n cache?: CacheConfig;\n};\n\n/**\n * Discriminated by `lazy`: omitted/`false` is eager; `\"page\"` needs `pageSize`;\n * `\"offset\"` needs `limit`; `\"group\"` pages by option `group`.\n */\nexport type UseSelectFieldLoadingConfig<TID extends string | number> = (\n | UseSelectFieldLoadingConfigLazyPage<TID>\n | UseSelectFieldLoadingConfigLazyOffset<TID>\n | UseSelectFieldLoadingConfigLazyGroup<TID>\n | UseSelectFieldLoadingConfigEager<TID>\n) & {\n /**\n * Called in the same step an initial load's result (or a cache restore) is\n * applied, so a superseded load never reports one.\n */\n onInitialApplied?: () => void;\n};\n\nexport type UseSelectFieldLoadingReturn<TID extends string | number> = {\n /** Replaced on `{ initial: true }`; appended on load-more. Empty until the first load. */\n options: SelectFieldOption<TID>[];\n /** True only while an initial fetch is in flight. Sync eager loads skip this. */\n loading: boolean;\n /** True while a continuation fetch is in flight. */\n loadingMore: boolean;\n /** From the last lazy result; stays `false` in eager mode. */\n hasMore: boolean;\n /**\n * `{ initial: true }` replaces options (or restores a cache hit). Otherwise\n * appends.\n */\n loadOptions: (\n searchValue: string,\n options?: { initial?: boolean },\n ) => Promise<void>;\n /** Same as `loadOptions(searchValue, { initial: false })`. */\n loadMore: (searchValue: string) => Promise<void>;\n /** Clears options, pagination, and busy flags. Does not call `clearCache`. */\n reset: () => void;\n /** Drops cached searches. In-memory options stay. */\n clearCache: () => void;\n /** Supersedes every pending request and ends their busy flags. Options stay. */\n discardPending: () => void;\n};\n\n/**\n * Loads SelectField options for eager or lazy (`page` / `offset` / `group`)\n * modes. Starts empty; callers must invoke `loadOptions`.\n */\nexport function useSelectFieldLoading<TID extends string | number>(\n config: UseSelectFieldLoadingConfig<TID>,\n): UseSelectFieldLoadingReturn<TID> {\n const {\n lazy,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n onInitialApplied,\n } = config;\n\n const cacheEnabled = cacheConfig?.enabled !== false;\n const cacheMaxSize = cacheConfig?.maxSize ?? DEFAULT_CACHE_MAX_SIZE;\n\n const [options, setOptions] = useState<SelectFieldOption<TID>[]>([]);\n const [hasMoreToLoad, setHasMoreToLoad] = useState(false);\n const [previousGroup, setPreviousGroup] = useState<string | number | null>(\n null,\n );\n const [previousPage, setPreviousPage] = useState<number>(0);\n const [previousOffset, setPreviousOffset] = useState<number>(0);\n const [loading, setLoading] = useState(false);\n const [loadingMore, setLoadingMore] = useState(false);\n\n const [stateCache, setStateCache] = useState<\n Map<string, CachedSearchState<TID>>\n >(() => new Map());\n const currentSearchValueRef = useRef<string>(\"\");\n // Distinguishes \"never loaded\" empty from an empty API result so the cache\n // effect does not snapshot the first paint.\n const hasCompletedLoadRef = useRef(false);\n // Bumped by every initial load, cache restore and reset. A request from an\n // earlier generation is dropped when it lands, so overlapping loads cannot\n // clear a newer request's busy flag or apply a superseded page.\n const generationRef = useRef(0);\n\n const appendOptions = useCallback((newOptions: SelectFieldOption<TID>[]) => {\n setOptions((prevOptions) => prevOptions.concat(newOptions));\n }, []);\n\n const pageSize =\n lazy === \"page\"\n ? (config as UseSelectFieldLoadingConfigLazyPage<TID>).pageSize\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (config as UseSelectFieldLoadingConfigLazyOffset<TID>).limit\n : DEFAULT_PAGE_SIZE;\n\n const restoreFromCache = useCallback((cached: CachedSearchState<TID>) => {\n setOptions(cached.options);\n setHasMoreToLoad(cached.hasMore);\n setPreviousPage(cached.previousPage);\n setPreviousOffset(cached.previousOffset);\n setPreviousGroup(cached.previousGroup);\n }, []);\n\n // Runs after batched load updates so the snapshot includes options + cursor.\n useEffect(() => {\n if (!cacheEnabled) return;\n const searchValue = currentSearchValueRef.current;\n if (!hasCompletedLoadRef.current) return;\n\n setStateCache((prev) => {\n // Not LRU: at capacity, every snapshot write wipes the map first.\n if (prev.size >= cacheMaxSize) {\n prev.clear();\n }\n\n prev.set(searchValue, {\n options,\n hasMore: hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n });\n return new Map(prev);\n });\n }, [\n cacheEnabled,\n cacheMaxSize,\n options,\n hasMoreToLoad,\n previousPage,\n previousOffset,\n previousGroup,\n ]);\n\n const loadOptions = useCallback(\n async (\n searchValue: string,\n { initial: isInitial = false }: { initial?: boolean } = {},\n ): Promise<void> => {\n const cached =\n isInitial && cacheEnabled ? stateCache.get(searchValue) : undefined;\n // Already on screen: superseding would drop a load-more in flight and\n // trip the auto-load stall check for nothing.\n if (\n cached?.options === options &&\n searchValue === currentSearchValueRef.current\n ) {\n onInitialApplied?.();\n return;\n }\n\n const generation = isInitial\n ? ++generationRef.current\n : generationRef.current;\n const isCurrent = () => generation === generationRef.current;\n\n if (isInitial) {\n currentSearchValueRef.current = searchValue;\n // A pending load-more belongs to the list this load replaces.\n setLoadingMore(false);\n }\n\n if (cached) {\n restoreFromCache(cached);\n setLoading(false);\n onInitialApplied?.();\n return;\n }\n\n const setBusy = isInitial ? setLoading : setLoadingMore;\n\n const apply = (newOptions: SelectFieldOption<TID>[]) => {\n if (isInitial) {\n setOptions(newOptions);\n onInitialApplied?.();\n } else {\n appendOptions(newOptions);\n }\n hasCompletedLoadRef.current = true;\n };\n\n if (!lazy) {\n // The `finally` also ends a flag a superseded pending load left on:\n // a synchronous result or throw sets none of its own.\n try {\n const result = loadOptionsProp(searchValue);\n if (!isThenable(result)) {\n // Yield so this commit's cache effect does not snapshot empty options.\n await Promise.resolve();\n if (isCurrent()) apply(result);\n return;\n }\n setBusy(true);\n const awaited = await result;\n const resolved = Array.isArray(awaited) ? awaited : await awaited;\n if (isCurrent()) apply(resolved);\n } finally {\n if (isCurrent()) setBusy(false);\n }\n return;\n }\n\n setBusy(true);\n try {\n let result:\n | SelectFieldPageLazyResult<TID>\n | SelectFieldOffsetLazyResult<TID>\n | SelectFieldGroupLazyResult<TID>;\n\n if (lazy === \"page\") {\n const page = isInitial ? 0 : previousPage;\n result = await loadOptionsProp(searchValue, page, pageSize);\n if (!isCurrent()) return;\n setPreviousPage(isInitial ? 1 : page + 1);\n } else if (lazy === \"offset\") {\n const offset = isInitial ? 0 : previousOffset;\n result = await loadOptionsProp(searchValue, offset, limit);\n if (!isCurrent()) return;\n setPreviousOffset(isInitial ? limit : offset + limit);\n } else if (lazy === \"group\") {\n const group = isInitial ? null : previousGroup;\n result = await loadOptionsProp(searchValue, group);\n if (!isCurrent()) return;\n setPreviousGroup(\n result.options[result.options.length - 1]?.group ?? null,\n );\n } else {\n throw new Error(\n `Invalid lazy mode: ${lazy}. Expected 'page', 'offset', or 'group'.`,\n );\n }\n\n setHasMoreToLoad(result.hasMore ?? false);\n apply(result.options);\n } finally {\n if (isCurrent()) setBusy(false);\n }\n },\n [\n lazy,\n pageSize,\n limit,\n loadOptionsProp,\n appendOptions,\n previousPage,\n previousOffset,\n previousGroup,\n cacheEnabled,\n stateCache,\n options,\n restoreFromCache,\n onInitialApplied,\n ],\n );\n\n const loadMore = useCallback(\n async (searchValue: string): Promise<void> => {\n await loadOptions(searchValue, { initial: false });\n },\n [loadOptions],\n );\n\n const reset = useCallback(() => {\n generationRef.current += 1;\n setOptions([]);\n setHasMoreToLoad(false);\n setPreviousGroup(null);\n setPreviousPage(0);\n setPreviousOffset(0);\n setLoading(false);\n setLoadingMore(false);\n }, []);\n\n const clearCache = useCallback(() => {\n setStateCache(new Map());\n }, []);\n\n const discardPending = useCallback(() => {\n generationRef.current += 1;\n // A page applied in the same batch is discarded too: keep the cache\n // effect from snapshotting it back into a cache the caller just cleared.\n hasCompletedLoadRef.current = false;\n setLoading(false);\n setLoadingMore(false);\n }, []);\n\n return {\n options,\n loading,\n loadingMore,\n hasMore: hasMoreToLoad,\n loadOptions,\n loadMore,\n reset,\n clearCache,\n discardPending,\n };\n}\n","import type { SelectItem } from \"../types/selectFieldInternalTypes\";\nimport Icon from \"../../components/Icon\";\nimport styles from \"./SelectOption.module.scss\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport cx from \"classnames\";\nimport type { CheckState } from \"../../types\";\nimport type { GetItemPropsFn } from \"../types/selectFieldInternalTypes\";\nimport { OptionCheckbox } from \"./OptionCheckbox\";\nimport { OptionContentArea } from \"./OptionContentArea\";\nimport { OptionRow, OptionRowSideContent } from \"./OptionRow\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nexport type SelectOptionProps = {\n item: SelectItem;\n /** Position passed to the host's item-prop getter. */\n index: number;\n /** Whether the host currently highlights this row. */\n highlighted: boolean;\n /** Applies disabled row styling. */\n disabled: boolean;\n /** Supplies the host listbox's interaction and accessibility props. */\n getItemProps: GetItemPropsFn;\n /** Chooses a leading checkbox or trailing selected checkmark. */\n selectionType: \"single\" | \"multiple\";\n /** Selection state shown by the row indicator. */\n checked: CheckState;\n /** Adds separation styling to sticky bulk-action rows after scrolling. */\n isListScrolled?: boolean;\n};\n\n/** Renders a select item with its content and selection indicator. */\nexport const SelectOption = ({\n item,\n index,\n highlighted,\n disabled,\n getItemProps,\n selectionType,\n checked,\n isListScrolled = false,\n}: SelectOptionProps) => {\n const isBulkAction =\n item.type === \"select-all\" || item.type === \"select-filtered\";\n const isSingleSelected = selectionType === \"single\" && checked === \"checked\";\n\n return (\n <OptionRow\n key={item.id}\n data-item-index={index}\n disabled={disabled}\n {...getItemProps({\n item,\n index,\n \"data-type\": item.type,\n [ANV_PART_ATTR]: COMMON_PART.option,\n className: cx(styles[\"select-option\"], {\n [styles.highlighted]: highlighted && !isSingleSelected,\n [styles[\"single-selected\"]]: isSingleSelected && !highlighted,\n [styles[\"single-selected-highlighted\"]]:\n isSingleSelected && highlighted,\n [styles[\"bulk-action\"]]: isBulkAction,\n [styles.floating]: isBulkAction && isListScrolled,\n }),\n })}\n >\n {selectionType === \"multiple\" && (\n <OptionRowSideContent>\n <OptionCheckbox checkState={checked} />\n </OptionRowSideContent>\n )}\n <OptionContentArea\n label={item.original.label}\n content={item.original.content}\n />\n {selectionType === \"single\" && checked === \"checked\" && (\n <OptionRowSideContent>\n <Icon\n aria-hidden=\"true\"\n size=\"medium\"\n svg={Check}\n className={styles[\"checkmark\"]}\n />\n </OptionRowSideContent>\n )}\n </OptionRow>\n );\n};\n","import { type FocusEvent, useCallback, useRef } from \"react\";\n\n/**\n * Returns focus to where it came from when the element unmounts while focused.\n * Chromium fires focusout with a null `relatedTarget` when a focused node is\n * removed, which a popover reads as focus leaving it.\n */\nexport function useFocusReturnOnUnmount<T extends HTMLElement>() {\n const nodeRef = useRef<T | null>(null);\n const returnToRef = useRef<HTMLElement | null>(null);\n\n // React detaches refs before it removes the node, so the outgoing node still\n // holds focus here and moving focus now prevents the null-target focusout.\n const ref = useCallback((node: T | null) => {\n const previous = nodeRef.current;\n nodeRef.current = node;\n if (node || !previous) return;\n // Inside a shadow root the document reports the host as active.\n const root = previous.getRootNode() as Document | ShadowRoot;\n if (previous !== root.activeElement) return;\n const returnTo = returnToRef.current;\n if (returnTo?.isConnected) returnTo.focus({ preventScroll: true });\n }, []);\n\n // Keep the last real origin: programmatic focus and window refocus arrive\n // with a null relatedTarget.\n const onFocus = useCallback((event: FocusEvent<T>) => {\n if (event.relatedTarget instanceof HTMLElement) {\n returnToRef.current = event.relatedTarget;\n }\n }, []);\n\n return { ref, onFocus };\n}\n","import { useEffect, useRef } from \"react\";\nimport Button from \"../../components/Button\";\nimport Spinner from \"../../components/Spinner\";\nimport { SrOnly } from \"../../components\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\nimport { useFocusReturnOnUnmount } from \"../hooks/useFocusReturnOnUnmount\";\n\ntype LoadMoreSlotProps = {\n /** Shows the spinner in place of the button. */\n loadingMore: boolean;\n onLoadMore: () => void;\n /** Reports whether the button has focus, including `false` when it unmounts. */\n onFocusChange: (focused: boolean) => void;\n};\n\n/**\n * Content of the option panels' load-more slot: the Load more button, or a\n * spinner while a page loads.\n */\nexport const LoadMoreSlot = ({\n loadingMore,\n ...buttonProps\n}: LoadMoreSlotProps) =>\n loadingMore ? (\n <>\n <Spinner size=\"small\" />\n <SrOnly>Loading more...</SrOnly>\n </>\n ) : (\n <LoadMoreButton {...buttonProps} />\n );\n\nconst LoadMoreButton = ({\n onLoadMore,\n onFocusChange,\n}: Omit<LoadMoreSlotProps, \"loadingMore\">) => {\n const focus = useFocusReturnOnUnmount<HTMLButtonElement>();\n const onFocusChangeRef = useRef(onFocusChange);\n onFocusChangeRef.current = onFocusChange;\n useEffect(() => () => onFocusChangeRef.current(false), []);\n\n return (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n // It unmounts as soon as it starts a load (virtualized: also once it\n // scrolls out of range), so a click must not focus it; after keyboard\n // activation, useFocusReturnOnUnmount hands focus back first.\n onMouseDown={(e) => e.preventDefault()}\n ref={focus.ref}\n onFocus={(e) => {\n focus.onFocus(e);\n onFocusChange(true);\n }}\n onBlur={() => onFocusChange(false)}\n onClick={onLoadMore}\n {...{ [ANV_PART_ATTR]: COMMON_PART.loadMoreButton }}\n >\n Load more\n </Button>\n );\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\n\ntype Keyed = { id: string | number };\n\ntype AutoLoadMoreState = {\n isOpen: boolean;\n hasMore: boolean;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n items: readonly Keyed[];\n};\n\n/**\n * Decides when a lazy option list may request its next page on its own.\n *\n * `canAutoLoad` is false while the list is closed, out of pages, loading, or\n * opted out, and while Load more has focus: focusing it scrolls it into view,\n * and auto-loading then would swap it for the spinner under a keyboard user\n * and send their Enter to the input. Feed `onLoadMoreFocusChange` from the\n * button.\n *\n * `isStalled` reports that the last load-more page added no rows, as a\n * rejected or empty load does. Auto-load stops while it holds so a failing\n * loader is not retried in a loop; the Load more button still retries, and\n * closing the list clears it, so opening it again retries too. It is keyed to\n * the rows (count and last id) rather than to request flags: any new rows, from\n * a successful retry or a new search, re-arm auto-load, even when a loader that\n * resolves in a microtask batches `loadingMore` true and false into one render.\n *\n * Call it before the effect that auto-loads: effects run in call order, so the\n * stall state is current by the time that effect reads it in the same commit.\n * `rowsKey` changes whenever the rows do, for effects that must re-run on a\n * new page or result set.\n */\nexport function useAutoLoadMore({\n isOpen,\n hasMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n items,\n}: AutoLoadMoreState) {\n const rowsKey = `${items.length}:${items[items.length - 1]?.id ?? \"\"}`;\n const rowsKeyRef = useRef(rowsKey);\n rowsKeyRef.current = rowsKey;\n const stalledAtRef = useRef<string | null>(null);\n const keyAtStartRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (loading) {\n stalledAtRef.current = null;\n keyAtStartRef.current = null;\n return;\n }\n if (loadingMore) {\n keyAtStartRef.current ??= rowsKey;\n return;\n }\n if (keyAtStartRef.current === null) return;\n stalledAtRef.current = rowsKey === keyAtStartRef.current ? rowsKey : null;\n keyAtStartRef.current = null;\n }, [loading, loadingMore, rowsKey]);\n\n useEffect(() => {\n if (isOpen) return;\n stalledAtRef.current = null;\n keyAtStartRef.current = null;\n }, [isOpen]);\n\n const isStalled = useCallback(\n () => stalledAtRef.current === rowsKeyRef.current,\n [],\n );\n\n const [loadMoreFocused, setLoadMoreFocused] = useState(false);\n const canAutoLoad =\n isOpen &&\n hasMore &&\n !loading &&\n !loadingMore &&\n !disableAutoLoadMore &&\n !loadMoreFocused;\n\n return {\n canAutoLoad,\n isStalled,\n rowsKey,\n onLoadMoreFocusChange: setLoadMoreFocused,\n };\n}\n","import { useMemo } from \"react\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type SectionItem = { item: SelectItem; index: number };\n\nexport type PinnedSection = {\n type: \"pinned\";\n label: string;\n items: SectionItem[];\n loading?: boolean;\n};\n\nexport type GroupSection = {\n type: \"group\";\n label: string;\n items: SectionItem[];\n};\n\nexport type FlatSection = {\n type: \"flat\";\n items: SectionItem[];\n};\n\nexport type Section = PinnedSection | GroupSection | FlatSection;\n\nexport type VirtualRow =\n | { type: \"item\"; item: SelectItem; index: number }\n | { type: \"header\"; label: string; sectionIndex: number }\n | { type: \"divider\"; sectionIndex: number }\n | { type: \"load-more\" };\n\n/**\n * Partitions a flat item list into indexed pinned, grouped, and unsectioned\n * ranges.\n */\nexport const useOptionsSections = (\n items: SelectItem[],\n sectionsMeta: SectionMeta[],\n): Section[] => {\n return useMemo((): Section[] => {\n if (sectionsMeta.length === 0) {\n return [\n {\n type: \"flat\",\n items: items.map((item, index) => ({ item, index })),\n },\n ];\n }\n\n const result: Section[] = [];\n\n const firstSectionStartIndex = Math.min(\n ...sectionsMeta.map((s) => s.startIndex),\n );\n\n if (firstSectionStartIndex > 0) {\n const flatItems: SectionItem[] = [];\n for (let i = 0; i < firstSectionStartIndex; i++) {\n if (items[i]) {\n flatItems.push({ item: items[i], index: i });\n }\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n sectionsMeta.forEach((meta) => {\n const sectionItems: SectionItem[] = [];\n for (let i = meta.startIndex; i < meta.endIndex; i++) {\n if (items[i]) {\n sectionItems.push({ item: items[i], index: i });\n }\n }\n if (meta.type === \"pinned\") {\n if (sectionItems.length > 0 || meta.loading) {\n result.push({\n type: \"pinned\",\n label: meta.label,\n items: sectionItems,\n loading: meta.loading,\n });\n }\n } else if (sectionItems.length > 0) {\n result.push({\n type: \"group\",\n label: meta.label,\n items: sectionItems,\n });\n }\n });\n\n const lastSectionIndex =\n sectionsMeta.length > 0\n ? Math.max(...sectionsMeta.map((s) => s.endIndex))\n : 0;\n\n if (lastSectionIndex < items.length) {\n const flatItems: SectionItem[] = [];\n for (let i = lastSectionIndex; i < items.length; i++) {\n flatItems.push({ item: items[i], index: i });\n }\n if (flatItems.length > 0) {\n result.push({ type: \"flat\", items: flatItems });\n }\n }\n\n return result;\n }, [items, sectionsMeta]);\n};\n\n/**\n * Builds virtual rows and index metadata, marking bulk-action rows as sticky\n * and appending a load-more row when requested.\n */\nexport function flattenSectionsToVirtualRows(\n sections: Section[],\n hasMore: boolean,\n): {\n virtualRows: VirtualRow[];\n downshiftIndexToVirtualRowIndex: Record<number, number>;\n stickyIndices: number[];\n} {\n const virtualRows: VirtualRow[] = [];\n const downshiftIndexToVirtualRowIndex: Record<number, number> = {};\n const stickyIndices: number[] = [];\n\n sections.forEach((section, sectionIndex) => {\n const isLastSection = sectionIndex === sections.length - 1;\n\n if (section.type === \"pinned\" || section.type === \"group\") {\n virtualRows.push({\n type: \"header\",\n label: section.label,\n sectionIndex,\n });\n\n section.items.forEach(({ item, index }) => {\n downshiftIndexToVirtualRowIndex[index] = virtualRows.length;\n virtualRows.push({ type: \"item\", item, index });\n });\n\n if (!isLastSection) {\n virtualRows.push({ type: \"divider\", sectionIndex });\n }\n } else {\n section.items.forEach(({ item, index }) => {\n const isBulkAction =\n item.type === \"select-all\" || item.type === \"select-filtered\";\n if (isBulkAction) {\n stickyIndices.push(virtualRows.length);\n }\n downshiftIndexToVirtualRowIndex[index] = virtualRows.length;\n virtualRows.push({ type: \"item\", item, index });\n });\n }\n });\n\n if (hasMore) {\n virtualRows.push({ type: \"load-more\" });\n }\n\n return { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices };\n}\n","import type { SelectItem } from \"../types/selectFieldInternalTypes\";\nimport Spinner from \"../../components/Spinner\";\nimport styles from \"./SelectOptions.module.scss\";\nimport cx from \"classnames\";\nimport {\n type CSSProperties,\n forwardRef,\n type ReactNode,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOption } from \"./SelectOption\";\nimport { LoadMoreSlot } from \"./LoadMoreSlot\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\nimport { Text } from \"../../components/Text\";\nimport Divider from \"../../components/Divider\";\nimport type { CheckState } from \"../../types\";\nimport type {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n} from \"../types/selectFieldInternalTypes\";\nimport { useMergeRefs } from \"../../hooks/useMergeRefs\";\nimport { useAutoLoadMore } from \"../hooks/useAutoLoadMore\";\nimport { useOptionsSections } from \"../hooks/useOptionsSections\";\n\nexport type OptionsPanelHandle = {\n scrollToTop: () => void;\n /** Scrolls the row at `index` into view. `<= 0` shows a leading group header. */\n scrollToIndex: (index: number) => void;\n};\n\nexport type OptionsPanelProps = {\n /** When false, option rows stay unmounted inside the menu scroller. */\n isOpen: boolean;\n /** Flattened option, pinned/group, and bulk-action rows. */\n items: SelectItem[];\n /** Downshift getter for the menu scroller. */\n getMenuProps: GetMenuPropsFn;\n /** Downshift getter for each option row. */\n getItemProps: GetItemPropsFn;\n /** Host highlight index into `items`. */\n highlightedIndex: number;\n /** Selection indicator shown on each row. */\n getCheckedState: (item: SelectItem) => CheckState;\n /** Leading checkbox vs trailing selected checkmark. */\n selectionType: \"single\" | \"multiple\";\n /** When true, shows the load-more control. */\n hasMore: boolean;\n /** Fetches the next page of options. */\n onLoadMore: () => void;\n /** Replaces the list with a spinner while the current page loads. */\n loading: boolean;\n /** Spinner in the load-more slot. */\n loadingMore: boolean;\n /** Skips automatic next-page fetch; the Load more button remains. */\n disableAutoLoadMore?: boolean;\n /** Disables every row, in addition to per-item `disabled`. */\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n /** Pinned and group ranges over `items`. */\n sectionsMeta?: SectionMeta[];\n};\n\n/** Non-virtualized option list scroller. */\nexport const OptionsPanel = forwardRef<OptionsPanelHandle, OptionsPanelProps>(\n (\n {\n isOpen,\n items,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n getCheckedState,\n selectionType,\n hasMore,\n onLoadMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n disabled,\n className,\n style,\n sectionsMeta = [],\n },\n ref,\n ) => {\n const baseId = useId();\n const scrollSentinelRef = useRef<HTMLDivElement>(null);\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [isScrolled, setIsScrolled] = useState(false);\n\n useImperativeHandle(ref, () => ({\n scrollToTop: () => {\n if (scrollerRef.current) {\n scrollerRef.current.scrollTop = 0;\n }\n },\n scrollToIndex: (index: number) => {\n if (!scrollerRef.current) return;\n if (index <= 0) {\n // Nearest-item scroll would clip a leading group header.\n scrollerRef.current.scrollTop = 0;\n return;\n }\n const item = scrollerRef.current.querySelector(\n `[data-item-index=\"${index}\"]`,\n );\n if (item) {\n item.scrollIntoView({ block: \"nearest\" });\n }\n },\n }));\n\n // Sentinel leaving the scroller means sticky bulk rows should show a shadow.\n useEffect(() => {\n if (!isOpen) {\n setIsScrolled(false);\n return;\n }\n if (!scrollSentinelRef.current) return;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n setIsScrolled(!entry.isIntersecting);\n });\n },\n { threshold: 0, root: scrollerRef.current },\n );\n observer.observe(scrollSentinelRef.current);\n return () => observer.disconnect();\n }, [isOpen]);\n\n // Keep the full-panel spinner so an empty pinned placeholder does not collapse the list.\n const anyPinnedLoading = sectionsMeta.some(\n (s) => s.type === \"pinned\" && s.loading,\n );\n\n const loadMoreSentinelRef = useRef<HTMLDivElement>(null);\n\n const { canAutoLoad, isStalled, rowsKey, onLoadMoreFocusChange } =\n useAutoLoadMore({\n isOpen,\n hasMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n items,\n });\n\n // Read in the observer callback, which can fire after a render that flips\n // these but before the effect below disconnects the observer.\n const onLoadMoreRef = useRef(onLoadMore);\n onLoadMoreRef.current = onLoadMore;\n const canAutoLoadRef = useRef(canAutoLoad);\n canAutoLoadRef.current = canAutoLoad;\n\n // Rooted at the options scroller, not the viewport, so the sentinel still\n // reports when the popover is clamped to the bottom of the screen.\n //\n // Re-created around every load, not only on open:\n // - an initial reload (`loading`, e.g. a new search) unmounts the sentinel\n // and mounts a fresh node, which an observer attached on open never sees;\n // - a page that lands without pushing the sentinel out of view changes no\n // intersection state, so only a fresh observer's initial entry chains the\n // next page (`rowsKey` also re-runs it when `loadingMore` never renders).\n useEffect(() => {\n if (!canAutoLoad || isStalled()) return;\n const sentinel = loadMoreSentinelRef.current;\n const scroller = scrollerRef.current;\n if (!sentinel || !scroller) return;\n // disconnect() does not drop a notification already queued, so a\n // superseded observer's callback checks `active` before requesting.\n let active = true;\n const observer = new IntersectionObserver(\n (entries) => {\n if (!active) return;\n const visible = entries.some((entry) => entry.isIntersecting);\n if (visible && canAutoLoadRef.current && !isStalled()) {\n // One request per observer.\n active = false;\n observer.disconnect();\n onLoadMoreRef.current();\n }\n },\n { threshold: 0, root: scroller },\n );\n observer.observe(sentinel);\n return () => {\n active = false;\n observer.disconnect();\n };\n }, [canAutoLoad, rowsKey, isStalled]);\n\n const sections = useOptionsSections(items, sectionsMeta);\n\n const renderItem = (item: SelectItem, index: number): ReactNode => (\n <SelectOption\n key={item.id}\n item={item}\n index={index}\n getItemProps={getItemProps}\n selectionType={selectionType}\n checked={getCheckedState(item)}\n highlighted={highlightedIndex === index}\n disabled={(disabled || item.disabled) ?? false}\n isListScrolled={isScrolled}\n />\n );\n\n const renderSections = (): ReactNode[] => {\n const result: ReactNode[] = [];\n\n sections.forEach((section, sectionIndex) => {\n const isLastSection = sectionIndex === sections.length - 1;\n\n if (section.type === \"pinned\" || section.type === \"group\") {\n const labelId = `${baseId}-section-${sectionIndex}`;\n\n result.push(\n <div\n key={`section-${sectionIndex}`}\n role=\"group\"\n aria-labelledby={labelId}\n className={styles[\"pinned-section\"]}\n >\n <span id={labelId} className={styles[\"pinned-section-header\"]}>\n <Text variant=\"eyebrow\">{section.label}</Text>\n </span>\n <div className={styles[\"pinned-section-list\"]}>\n {section.items.map(({ item, index }) =>\n renderItem(item, index),\n )}\n </div>\n </div>,\n );\n if (!isLastSection) {\n result.push(\n // Visual only; role=group and aria-labelledby already name the sections.\n <div\n key={`divider-${sectionIndex}`}\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"divider\"]}\n >\n <Divider />\n </div>,\n );\n }\n } else {\n section.items.forEach(({ item, index }) => {\n result.push(renderItem(item, index));\n });\n }\n });\n\n return result;\n };\n\n const menuProps = getMenuProps({\n className: cx(styles[\"scroller\"], className),\n style,\n [ANV_PART_ATTR]: COMMON_PART.menu,\n });\n\n const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);\n\n return (\n <div {...menuProps} ref={menuRef}>\n <div className={styles[\"select-field-list\"]}>\n {isOpen && (\n <div\n ref={scrollSentinelRef}\n className={styles[\"scroll-sentinel\"]}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n {isOpen && (\n <>\n {loading || anyPinnedLoading ? (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Spinner size=\"medium\" />\n </div>\n ) : items.length > 0 ? (\n renderSections()\n ) : (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n )}\n </>\n )}\n {hasMore && !loading ? (\n <div role=\"presentation\">\n <div\n ref={loadMoreSentinelRef}\n className={styles[\"scroll-sentinel\"]}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n <div className={styles[\"load-more\"]}>\n <LoadMoreSlot\n loadingMore={loadingMore}\n onLoadMore={onLoadMore}\n onFocusChange={onLoadMoreFocusChange}\n />\n </div>\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nOptionsPanel.displayName = \"OptionsPanel\";\n","import Spinner from \"../../components/Spinner\";\nimport styles from \"./SelectOptions.module.scss\";\nimport cx from \"classnames\";\nimport {\n forwardRef,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { SelectOption } from \"./SelectOption\";\nimport { LoadMoreSlot } from \"./LoadMoreSlot\";\nimport { Text } from \"../../components/Text\";\nimport Divider from \"../../components/Divider\";\nimport { useMergeRefs } from \"../../hooks/useMergeRefs\";\nimport { useAutoLoadMore } from \"../hooks/useAutoLoadMore\";\nimport {\n useOptionsSections,\n flattenSectionsToVirtualRows,\n type VirtualRow,\n} from \"../hooks/useOptionsSections\";\nimport { defaultRangeExtractor, useVirtualizer } from \"@tanstack/react-virtual\";\nimport type { Range } from \"@tanstack/react-virtual\";\nimport type { OptionsPanelProps, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nconst EST_PADDING_BLOCK = 16; // $size-2 * 2\nconst EST_LINE_HEIGHT = 18; // $size-4 + $size-half\nconst EST_CHIP_ROW_HEIGHT = 28; // $size-1 + chip\nconst EST_SIDE_CONTENT_HEIGHT = 40; // $size-10\nconst EST_HEADER_HEIGHT = 32;\nconst EST_DIVIDER_HEIGHT = 17;\nconst EST_LOAD_MORE_HEIGHT = 40;\nconst EST_BASE_ITEM_HEIGHT = EST_PADDING_BLOCK + EST_LINE_HEIGHT;\n\nfunction estimateRowHeight(row: VirtualRow): number {\n if (row.type === \"header\") return EST_HEADER_HEIGHT;\n if (row.type === \"divider\") return EST_DIVIDER_HEIGHT;\n if (row.type === \"load-more\") return EST_LOAD_MORE_HEIGHT;\n\n const content = row.item.original.content;\n if (!content) return EST_BASE_ITEM_HEIGHT;\n\n let contentHeight = EST_LINE_HEIGHT;\n if (content.description) contentHeight += EST_LINE_HEIGHT;\n if (content.chips?.length) contentHeight += EST_CHIP_ROW_HEIGHT;\n if (content.avatar || content.icon)\n contentHeight = Math.max(contentHeight, EST_SIDE_CONTENT_HEIGHT);\n\n return EST_PADDING_BLOCK + contentHeight;\n}\n\n/** Virtualized {@link OptionsPanel} scroller. */\nexport const VirtualizedOptionsPanel = forwardRef<\n OptionsPanelHandle,\n OptionsPanelProps\n>(\n (\n {\n isOpen,\n items,\n getMenuProps,\n getItemProps,\n highlightedIndex,\n getCheckedState,\n selectionType,\n hasMore,\n onLoadMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n disabled,\n className,\n style,\n sectionsMeta = [],\n },\n ref,\n ) => {\n const baseId = useId();\n const scrollSentinelRef = useRef<HTMLDivElement>(null);\n const scrollerRef = useRef<HTMLDivElement>(null);\n const [isScrolled, setIsScrolled] = useState(false);\n\n // Sentinel leaving the scroller means sticky bulk rows should show a shadow.\n useEffect(() => {\n if (!isOpen) {\n setIsScrolled(false);\n return;\n }\n if (!scrollSentinelRef.current) return;\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n setIsScrolled(!entry.isIntersecting);\n });\n },\n { threshold: 0, root: scrollerRef.current },\n );\n observer.observe(scrollSentinelRef.current);\n return () => observer.disconnect();\n }, [isOpen]);\n\n // Keep the full-panel spinner so an empty pinned placeholder does not collapse the list.\n const anyPinnedLoading = sectionsMeta.some(\n (s) => s.type === \"pinned\" && s.loading,\n );\n\n const sections = useOptionsSections(items, sectionsMeta);\n\n const { virtualRows, downshiftIndexToVirtualRowIndex, stickyIndices } =\n useMemo(\n () => flattenSectionsToVirtualRows(sections, hasMore),\n [sections, hasMore],\n );\n\n const stickyHeightRef = useRef(EST_BASE_ITEM_HEIGHT);\n\n // Keep the stuck header in the measured range so it is not virtualized away.\n const rangeExtractor = useCallback(\n (range: Range) => {\n if (stickyIndices.length === 0) {\n return defaultRangeExtractor(range);\n }\n const activeStickyIndex =\n [...stickyIndices]\n .reverse()\n .find((index) => range.startIndex >= index) ?? 0;\n\n const next = new Set([\n activeStickyIndex,\n ...defaultRangeExtractor(range),\n ]);\n\n return [...next].sort((a, b) => a - b);\n },\n [stickyIndices],\n );\n\n const virtualizer = useVirtualizer({\n count: virtualRows.length,\n getScrollElement: () => scrollerRef.current,\n estimateSize: (index) => estimateRowHeight(virtualRows[index]),\n overscan: 5,\n rangeExtractor,\n // Keep scrolled-to rows from landing under the stuck header.\n scrollPaddingStart:\n stickyIndices.length > 0 ? stickyHeightRef.current : 0,\n enabled: isOpen,\n getItemKey: (index) => {\n const row = virtualRows[index];\n if (row.type === \"item\") return row.item.id;\n if (row.type === \"header\") return `header-${row.sectionIndex}`;\n if (row.type === \"divider\") return `divider-${row.sectionIndex}`;\n return \"load-more\";\n },\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n if (stickyIndices.length > 0) {\n const stickyItem = virtualItems.find((vi) =>\n stickyIndices.includes(vi.index),\n );\n if (stickyItem) {\n stickyHeightRef.current = stickyItem.size;\n }\n }\n\n const downshiftMapRef = useRef(downshiftIndexToVirtualRowIndex);\n downshiftMapRef.current = downshiftIndexToVirtualRowIndex;\n\n const virtualizerRef = useRef(virtualizer);\n virtualizerRef.current = virtualizer;\n\n useImperativeHandle(ref, () => ({\n scrollToTop: () => {\n if (virtualizerRef.current) {\n virtualizerRef.current.scrollToOffset(0);\n }\n },\n scrollToIndex: (index: number) => {\n if (index <= 0) {\n // Nearest-item scroll would clip a leading group header.\n virtualizerRef.current.scrollToOffset(0);\n return;\n }\n const virtualRowIndex = downshiftMapRef.current[index];\n if (virtualRowIndex != null) {\n virtualizerRef.current.scrollToIndex(virtualRowIndex, {\n align: \"auto\",\n });\n }\n },\n }));\n\n const onLoadMoreRef = useRef(onLoadMore);\n onLoadMoreRef.current = onLoadMore;\n\n const { canAutoLoad, isStalled, rowsKey, onLoadMoreFocusChange } =\n useAutoLoadMore({\n isOpen,\n hasMore,\n loading,\n loadingMore,\n disableAutoLoadMore,\n items,\n });\n\n // Synchronous in-flight guard: useVirtualizer's measureElement can trigger\n // flushSync renders that re-run the effect below before the `loadingMore`\n // state prop commits, causing duplicate onLoadMore calls. Cleared when a\n // page lands (`rowsKey`, for a loader whose `loadingMore` never renders),\n // and on open and close, since an empty page from such a loader changes\n // nothing else. Declared before the trigger effect so a landed page clears\n // it before that effect reads it.\n const loadMoreInFlightRef = useRef(false);\n useEffect(() => {\n if (!loadingMore) loadMoreInFlightRef.current = false;\n }, [isOpen, loadingMore, rowsKey]);\n\n // Last rendered virtual row standing in for the non-virtual load-more sentinel.\n useEffect(() => {\n if (!canAutoLoad || loadMoreInFlightRef.current || isStalled()) return;\n const lastItem = virtualItems[virtualItems.length - 1];\n if (!lastItem) return;\n if (lastItem.index >= virtualRows.length - 1) {\n loadMoreInFlightRef.current = true;\n onLoadMoreRef.current();\n }\n }, [canAutoLoad, virtualItems, virtualRows.length]);\n\n const isSticky = useCallback(\n (index: number) => stickyIndices.includes(index),\n [stickyIndices],\n );\n\n const renderVirtualRow = (row: VirtualRow): ReactNode => {\n if (row.type === \"item\") {\n return (\n <SelectOption\n item={row.item}\n index={row.index}\n getItemProps={getItemProps}\n selectionType={selectionType}\n checked={getCheckedState(row.item)}\n highlighted={highlightedIndex === row.index}\n disabled={(disabled || row.item.disabled) ?? false}\n isListScrolled={isScrolled}\n />\n );\n }\n\n if (row.type === \"header\") {\n const labelId = `${baseId}-section-${row.sectionIndex}`;\n return (\n // Flattened virtual rows cannot wrap a labelled group.\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"pinned-section-header\"]}\n >\n <span id={labelId}>\n <Text variant=\"eyebrow\">{row.label}</Text>\n </span>\n </div>\n );\n }\n\n if (row.type === \"divider\") {\n return (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n className={styles[\"divider\"]}\n >\n <Divider />\n </div>\n );\n }\n\n if (row.type === \"load-more\") {\n return (\n <div role=\"presentation\" className={styles[\"load-more\"]}>\n <LoadMoreSlot\n loadingMore={loadingMore}\n onLoadMore={onLoadMore}\n onFocusChange={onLoadMoreFocusChange}\n />\n </div>\n );\n }\n\n return null;\n };\n\n const menuProps = getMenuProps({\n className: cx(styles[\"scroller\"], className),\n style,\n [ANV_PART_ATTR]: COMMON_PART.menu,\n });\n\n const menuRef = useMergeRefs([menuProps.ref, scrollerRef]);\n\n return (\n <div {...menuProps} ref={menuRef}>\n <div className={styles[\"select-field-list\"]}>\n {isOpen && (\n <div\n ref={scrollSentinelRef}\n className={styles[\"scroll-sentinel\"]}\n role=\"presentation\"\n aria-hidden=\"true\"\n />\n )}\n {isOpen && (\n <>\n {loading || anyPinnedLoading ? (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Spinner size=\"medium\" />\n </div>\n ) : items.length > 0 ? (\n <div\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{\n height: virtualizer.getTotalSize(),\n width: \"100%\",\n position: \"relative\",\n }}\n >\n {virtualItems.map((virtualItem) => {\n const row = virtualRows[virtualItem.index];\n const sticky = isSticky(virtualItem.index);\n\n return (\n <div\n key={virtualItem.key}\n data-index={virtualItem.index}\n ref={virtualizer.measureElement}\n style={\n sticky\n ? {\n position: \"sticky\",\n top: 0,\n zIndex: 1,\n }\n : {\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n transform: `translateY(${virtualItem.start}px)`,\n }\n }\n >\n {renderVirtualRow(row)}\n </div>\n );\n })}\n </div>\n ) : (\n <div role=\"presentation\" className={styles[\"empty\"]}>\n <Text subdued size=\"small\">\n No match found\n </Text>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n },\n);\n\nVirtualizedOptionsPanel.displayName = \"VirtualizedOptionsPanel\";\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n SelectFieldOption,\n SelectFieldPinnedOptions,\n SelectFieldPinnedOptionsSection,\n} from \"../../components/SelectField/types\";\n\nconst DEFAULT_CACHE_SIZE = 15;\nconst STATIC_CACHE_KEY = \"__static__\";\n\n/** A pinned section normalized for item building. */\nexport type NormalizedPinnedSection<TID extends string | number> = {\n label: string;\n options: SelectFieldOption<TID>[];\n loading?: boolean;\n};\n\ntype UsePinnedOptionsResult<TID extends string | number> = {\n pinnedSections: NormalizedPinnedSection<TID>[];\n};\n\ntype SectionConfig<TID extends string | number> = {\n label: string;\n isDynamic: boolean;\n searchReactive: boolean;\n cacheSize: number;\n staticOptions: SelectFieldOption<TID>[] | undefined;\n loader:\n | ((\n sv: string,\n ) => SelectFieldOption<TID>[] | Promise<SelectFieldOption<TID>[]>)\n | undefined;\n};\n\n/**\n * Writes a cache entry and evicts the least-recently written entries over the\n * limit.\n */\nfunction cacheSet(\n sectionCache: Map<string, SelectFieldOption[]>,\n key: string,\n value: SelectFieldOption[],\n maxSize: number,\n): void {\n // Re-insert so this key is newest; Map.set preserves its existing order.\n if (sectionCache.has(key)) {\n sectionCache.delete(key);\n }\n sectionCache.set(key, value);\n while (sectionCache.size > maxSize) {\n const oldest = sectionCache.keys().next().value;\n if (oldest !== undefined) {\n sectionCache.delete(oldest);\n }\n }\n}\n\n/**\n * Normalizes static and loaded pinned sections, caching dynamic results by\n * section and search value. Non-reactive loaders run once with an empty search;\n * unresolved sections are returned empty with `loading: true`.\n */\nexport function usePinnedOptions<TID extends string | number>(\n pinned: SelectFieldPinnedOptions<TID> | undefined,\n searchValue: string,\n): UsePinnedOptionsResult<TID> {\n const [dynamicResults, setDynamicResults] = useState<\n Record<number, SelectFieldOption<TID>[]>\n >({});\n const [loadingSet, setLoadingSet] = useState<Set<number>>(new Set());\n\n const latestSearchValueRef = useRef(searchValue);\n latestSearchValueRef.current = searchValue;\n\n const cacheRef = useRef<Map<number, Map<string, SelectFieldOption<TID>[]>>>(\n new Map(),\n );\n\n // Prevent duplicate non-reactive loads while the first request is pending.\n const nonReactiveTriggeredRef = useRef<Set<number>>(new Set());\n\n const sections = useMemo((): SelectFieldPinnedOptionsSection<TID>[] => {\n if (!pinned) return [];\n return Array.isArray(pinned) ? pinned : [pinned];\n }, [pinned]);\n\n const sectionConfig = useMemo((): SectionConfig<TID>[] => {\n return sections.map((section) => {\n const isDynamic = typeof section.options === \"function\";\n return {\n label: section.label,\n isDynamic,\n searchReactive: section.searchReactive ?? true,\n cacheSize: section.cacheSize ?? DEFAULT_CACHE_SIZE,\n staticOptions: isDynamic\n ? undefined\n : (section.options as SelectFieldOption<TID>[]),\n loader: isDynamic\n ? (section.options as (\n sv: string,\n ) => SelectFieldOption<TID>[] | Promise<SelectFieldOption<TID>[]>)\n : undefined,\n };\n });\n }, [sections]);\n\n // Reset before the loader effect can read the previous configuration's cache.\n useEffect(() => {\n cacheRef.current = new Map();\n nonReactiveTriggeredRef.current = new Set();\n }, [sectionConfig]);\n\n const getSectionCache = useCallback(\n (index: number): Map<string, SelectFieldOption<TID>[]> => {\n let sectionCache = cacheRef.current.get(index);\n if (!sectionCache) {\n sectionCache = new Map();\n cacheRef.current.set(index, sectionCache);\n }\n return sectionCache;\n },\n [],\n );\n\n const loadSection = useCallback(\n (config: SectionConfig<TID>, index: number, loaderArg: string) => {\n const cacheKey = config.searchReactive ? loaderArg : STATIC_CACHE_KEY;\n\n const handleResult = (options: SelectFieldOption<TID>[]) => {\n // Reactive results expire when search moves on; non-reactive always apply.\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n const sectionCache = getSectionCache(index);\n cacheSet(sectionCache, cacheKey, options, config.cacheSize);\n setDynamicResults((prev) => ({ ...prev, [index]: options }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n const handleError = (error: unknown) => {\n console.error(\"Failed to load pinned options:\", error);\n if (\n !config.searchReactive ||\n latestSearchValueRef.current === loaderArg\n ) {\n setDynamicResults((prev) => ({ ...prev, [index]: [] }));\n setLoadingSet((prev) => {\n const next = new Set(prev);\n next.delete(index);\n return next;\n });\n }\n };\n\n try {\n Promise.resolve(config.loader!(loaderArg))\n .then(handleResult)\n .catch(handleError);\n } catch (error) {\n handleError(error);\n }\n },\n [getSectionCache],\n );\n\n useEffect(() => {\n const dynamicEntries = sectionConfig\n .map((config, index) => ({ config, index }))\n .filter(({ config }) => config.isDynamic);\n\n if (dynamicEntries.length === 0) return;\n\n const toLoad: { config: SectionConfig<TID>; index: number }[] = [];\n const preResolved: Record<number, SelectFieldOption<TID>[]> = {};\n\n dynamicEntries.forEach(({ config, index }) => {\n const sectionCache = getSectionCache(index);\n\n if (config.searchReactive) {\n const cached = sectionCache.get(searchValue);\n if (cached) {\n preResolved[index] = cached;\n } else {\n toLoad.push({ config, index });\n }\n } else {\n const cached = sectionCache.get(STATIC_CACHE_KEY);\n if (cached) {\n preResolved[index] = cached;\n } else if (!nonReactiveTriggeredRef.current.has(index)) {\n nonReactiveTriggeredRef.current.add(index);\n toLoad.push({ config, index });\n }\n // Omitting an in-flight section preserves the empty, loading fallback.\n }\n });\n\n if (toLoad.length === 0) {\n setDynamicResults(preResolved);\n setLoadingSet(new Set());\n return;\n }\n\n const loadingIndices = toLoad.map(({ index }) => index);\n setDynamicResults(preResolved);\n setLoadingSet(new Set(loadingIndices));\n\n toLoad.forEach(({ config, index }) => {\n const loaderArg = config.searchReactive ? searchValue : \"\";\n loadSection(config, index, loaderArg);\n });\n }, [sectionConfig, searchValue, loadSection, getSectionCache]);\n\n const pinnedSections = useMemo((): NormalizedPinnedSection<TID>[] => {\n return sectionConfig.map((config, index) => {\n if (!config.isDynamic) {\n return { label: config.label, options: config.staticOptions! };\n }\n if (!loadingSet.has(index) && index in dynamicResults) {\n return {\n label: config.label,\n options: dynamicResults[index],\n };\n }\n return { label: config.label, options: [], loading: true };\n });\n }, [sectionConfig, dynamicResults, loadingSet]);\n\n return { pinnedSections };\n}\n","import { useMemo } from \"react\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n} from \"../../components/SelectField/types\";\nimport type { SelectItem } from \"../types/selectFieldInternalTypes\";\n\n/** A group label and its options, normalized for section rendering. */\nexport type NormalizedGroupSection<TID extends string | number> = {\n label: string;\n options: SelectFieldOption<TID>[];\n};\n\ntype UseGroupedOptionsResult<TID extends string | number> = {\n groupedItems: SelectItem<TID>[];\n ungroupedItems: SelectItem<TID>[];\n groupSections: NormalizedGroupSection<TID>[];\n};\n\n/**\n * Partitions options into Downshift items and group sections, preserving\n * first-seen group order.\n */\nexport function useGroupedOptions<TID extends string | number>(\n options: SelectFieldOption<TID>[],\n groupToString?: (groupValue: SelectFieldGroupByValue) => string,\n): UseGroupedOptionsResult<TID> {\n return useMemo(() => {\n const groupedItems: SelectItem<TID>[] = [];\n const ungroupedItems: SelectItem<TID>[] = [];\n const groupSections: NormalizedGroupSection<TID>[] = [];\n\n const groupMap = new Map<\n SelectFieldGroupByValue,\n { label: string; options: SelectFieldOption<TID>[] }\n >();\n\n options.forEach((option) => {\n if (option.group !== undefined) {\n const groupValue = option.group;\n\n if (!groupMap.has(groupValue)) {\n const label = groupToString\n ? groupToString(groupValue)\n : String(groupValue);\n groupMap.set(groupValue, { label, options: [] });\n }\n\n groupMap.get(groupValue)!.options.push(option);\n\n groupedItems.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n } else {\n ungroupedItems.push({\n id: option.id,\n type: \"option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n }\n });\n\n groupMap.forEach(({ label, options: groupOptions }) => {\n groupSections.push({ label, options: groupOptions });\n });\n\n return { groupedItems, ungroupedItems, groupSections };\n }, [options, groupToString]);\n}\n\n/**\n * Returns group sections sorted by each section's first option group value.\n */\nexport function sortGroupSections<TID extends string | number>(\n sections: NormalizedGroupSection<TID>[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): NormalizedGroupSection<TID>[] {\n return [...sections].sort((a, b) => {\n const groupA = a.options[0]?.group;\n const groupB = b.options[0]?.group;\n if (groupA === undefined || groupB === undefined) return 0;\n return groupSorter(groupA, groupB);\n });\n}\n","import { useMemo } from \"react\";\nimport type {\n SelectFieldGroupByValue,\n SelectFieldOption,\n SelectFieldPinnedOptions,\n} from \"../../components/SelectField/types\";\nimport { usePinnedOptions } from \"./usePinnedOptions\";\nimport { sortGroupSections, useGroupedOptions } from \"./useGroupedOptions\";\n\ntype UseProcessedOptionsParams<TID extends string | number> = {\n options: SelectFieldOption<TID>[];\n pinned?: SelectFieldPinnedOptions<TID>;\n searchValue: string;\n groupToString?: (groupValue: SelectFieldGroupByValue) => string;\n groupSorter?: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number;\n};\n\n/**\n * Combines pinned-option loading with grouped and ungrouped option\n * normalization, then optionally sorts the groups.\n */\nexport const useProcessedOptions = <TID extends string | number>({\n options,\n pinned,\n searchValue,\n groupToString,\n groupSorter,\n}: UseProcessedOptionsParams<TID>) => {\n const { pinnedSections } = usePinnedOptions(pinned, searchValue);\n\n const { ungroupedItems, groupSections: rawGroupSections } = useGroupedOptions(\n options,\n groupToString,\n );\n\n const groupSections = useMemo(() => {\n if (groupSorter && rawGroupSections.length > 0) {\n return sortGroupSections(rawGroupSections, groupSorter);\n }\n return rawGroupSections;\n }, [rawGroupSections, groupSorter]);\n\n return { pinnedSections, ungroupedItems, groupSections };\n};\n","import type { SelectFieldOption } from \"../../components/SelectField/types\";\nimport type {\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\nimport type { NormalizedPinnedSection } from \"../hooks/usePinnedOptions\";\nimport type { NormalizedGroupSection } from \"../hooks/useGroupedOptions\";\n\nexport function toSelectItem<TID extends string | number>(\n option: SelectFieldOption<TID>,\n): SelectItem<TID> {\n return {\n id: option.id,\n type: \"option\",\n disabled: option.disabled ?? false,\n original: option,\n };\n}\n\ntype BuildSelectItemsParams<TID extends string | number> = {\n prefixItems?: SelectItem[];\n pinnedSections: NormalizedPinnedSection<TID>[];\n groupSections: NormalizedGroupSection<TID>[];\n ungroupedItems: SelectItem<TID>[];\n};\n\n/**\n * Flattens normalized select sections into render items and indexed section\n * metadata.\n */\nexport function buildSelectItems<TID extends string | number>({\n prefixItems,\n pinnedSections,\n groupSections,\n ungroupedItems,\n}: BuildSelectItemsParams<TID>): {\n items: SelectItem<TID>[];\n sectionsMeta: SectionMeta[];\n} {\n const items: SelectItem<TID>[] = [];\n const meta: SectionMeta[] = [];\n\n if (prefixItems) {\n items.push(...(prefixItems as SelectItem<TID>[]));\n }\n\n pinnedSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id + \"-pinned\",\n type: \"pinned-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n if (endIndex > startIndex || section.loading) {\n meta.push({\n type: \"pinned\",\n label: section.label,\n startIndex,\n endIndex,\n loading: section.loading,\n });\n }\n });\n\n groupSections.forEach((section) => {\n const startIndex = items.length;\n\n section.options.forEach((option) => {\n items.push({\n id: option.id,\n type: \"grouped-option\",\n original: option,\n disabled: option.disabled ?? false,\n });\n });\n\n const endIndex = items.length;\n\n if (endIndex > startIndex) {\n meta.push({\n type: \"group\",\n label: section.label,\n startIndex,\n endIndex,\n });\n }\n });\n\n items.push(...ungroupedItems);\n\n return { items, sectionsMeta: meta };\n}\n","import type { ReactNode } from \"react\";\n\n/**\n * Shared \"Add new item\" affordance. The button mounts when `onAddNewItem` is\n * set and {@link resolveAddItemLabel} returns a node.\n */\nexport type AddNewItemProps = {\n /**\n * Button label. A callback receives the current search text and may return\n * `null`/`undefined` to hide the button. Omitted static labels fall back to\n * `\"Add new item\"`.\n */\n addItemLabel?: ReactNode | ((searchText: string) => ReactNode);\n /**\n * Called with the current search text after the host menu closes. Consumers\n * own overlay, list, and selection updates.\n */\n onAddNewItem?: (searchText: string) => void;\n};\n\n/** Resolves the add-new button label for the current search text. */\nexport function resolveAddItemLabel(\n addItemLabel: AddNewItemProps[\"addItemLabel\"],\n searchText: string,\n): ReactNode | null {\n if (typeof addItemLabel === \"function\") {\n return addItemLabel(searchText) ?? null;\n }\n return addItemLabel ?? \"Add new item\";\n}\n\n/**\n * Whether the add-new button should mount. Hosts use this so an empty footer\n * (and its divider) is not rendered when a label callback hides the button.\n */\nexport function shouldShowAddNewItem(\n onAddNewItem: AddNewItemProps[\"onAddNewItem\"],\n addItemLabel: AddNewItemProps[\"addItemLabel\"],\n searchText: string,\n): boolean {\n return (\n onAddNewItem != null &&\n resolveAddItemLabel(addItemLabel, searchText) != null\n );\n}\n","import Button from \"../../components/Button\";\nimport Add from \"@servicetitan/hammer-icon/mdi/round/add.svg\";\nimport {\n type AddNewItemProps,\n resolveAddItemLabel,\n} from \"../types/addNewItemTypes\";\nimport { ANV_PART_ATTR, COMMON_PART } from \"../constants/anvParts\";\n\nexport type AddNewItemButtonProps = AddNewItemProps & {\n /** Passed to the label callback and add-item handler. */\n searchText: string;\n /** Closes the host menu before the add-item handler runs. */\n onCloseMenu?: () => void;\n};\n\n/**\n * Add-new affordance for select menus. It remains unmounted without a handler\n * or when the label callback returns `null`/`undefined`.\n */\nexport const AddNewItemButton = ({\n searchText,\n addItemLabel,\n onAddNewItem,\n onCloseMenu,\n}: AddNewItemButtonProps) => {\n if (!onAddNewItem) return null;\n\n const resolvedLabel = resolveAddItemLabel(addItemLabel, searchText);\n if (resolvedLabel == null) return null;\n\n return (\n <Button\n appearance=\"secondary\"\n size=\"small\"\n icon={{ before: Add }}\n // Safari does not focus buttons on mousedown; without preventDefault the\n // popover's focusout listener fires with relatedTarget=null and closes\n // the menu before the click handler runs.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n onCloseMenu?.();\n onAddNewItem(searchText);\n }}\n style={{ width: \"100%\" }}\n {...{ [ANV_PART_ATTR]: COMMON_PART.addNewItemButton }}\n >\n {resolvedLabel}\n </Button>\n );\n};\n\nAddNewItemButton.displayName = \"AddNewItemButton\";\n","import {\n type ForwardedRef,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport {\n useSelectFieldLoading,\n DEFAULT_PAGE_SIZE,\n} from \"./useSelectFieldLoading\";\nimport { useAdaptiveView } from \"../../beta/hooks/useAdaptiveView\";\n\nexport type UseSelectOrchestrationConfig = {\n lazy: false | \"page\" | \"offset\" | \"group\" | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n loadOptions: any;\n cache?: { enabled?: boolean; maxSize?: number };\n lazyOptions?: { pageSize?: number; limit?: number };\n initialLoad?: \"auto\" | \"immediate\" | \"open\";\n displayMenuAs?: \"auto\" | \"popover\" | \"dialog\";\n ref: ForwardedRef<{ clearCache: () => void; invalidate: () => void }>;\n};\n\n/**\n * Resolves menu surface and initial-load mode, then wires option loading and\n * an imperative `clearCache` / `invalidate` handle. `displayMenuAs: \"auto\"` is\n * dialog on mobile and popover otherwise; `initialLoad: \"auto\"` is immediate.\n * `invalidate` also resets `initialLoadPerformed`.\n */\nexport function useSelectOrchestration<TID extends string | number>(\n config: UseSelectOrchestrationConfig,\n) {\n const {\n lazy,\n loadOptions: loadOptionsProp,\n cache,\n lazyOptions,\n initialLoad: initialLoadProp = \"auto\",\n displayMenuAs: displayMenuAsProp = \"auto\",\n ref,\n } = config;\n\n const [initialLoadPerformed, setInitialLoadPerformed] = useState(false);\n\n const { isMobile } = useAdaptiveView();\n const displayAs =\n displayMenuAsProp === \"auto\"\n ? isMobile\n ? \"dialog\"\n : \"popover\"\n : displayMenuAsProp;\n\n const initialLoad =\n initialLoadProp === \"auto\" ? \"immediate\" : initialLoadProp;\n\n const pageSize =\n lazy === \"page\"\n ? (lazyOptions?.pageSize ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n const limit =\n lazy === \"offset\"\n ? (lazyOptions?.limit ?? DEFAULT_PAGE_SIZE)\n : DEFAULT_PAGE_SIZE;\n\n const loadingHookConfig = useMemo(() => {\n const cacheConfig = {\n enabled: cache?.enabled,\n maxSize: cache?.maxSize,\n };\n const onInitialApplied = () => setInitialLoadPerformed(true);\n if (lazy === \"page\")\n return {\n lazy: \"page\" as const,\n loadOptions: loadOptionsProp,\n pageSize,\n cache: cacheConfig,\n onInitialApplied,\n };\n if (lazy === \"offset\")\n return {\n lazy: \"offset\" as const,\n loadOptions: loadOptionsProp,\n limit,\n cache: cacheConfig,\n onInitialApplied,\n };\n if (lazy === \"group\")\n return {\n lazy: \"group\" as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n onInitialApplied,\n };\n return {\n lazy: false as const,\n loadOptions: loadOptionsProp,\n cache: cacheConfig,\n onInitialApplied,\n };\n }, [lazy, loadOptionsProp, pageSize, limit, cache?.enabled, cache?.maxSize]);\n\n const {\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions,\n loadMore,\n clearCache,\n discardPending,\n } = useSelectFieldLoading<TID>(loadingHookConfig);\n\n // Committed renders only, so a pending debounced search never runs a\n // loader from a render that was thrown away.\n const loadOptionsRef = useRef(loadOptions);\n const initialLoadPerformedRef = useRef(initialLoadPerformed);\n useLayoutEffect(() => {\n loadOptionsRef.current = loadOptions;\n initialLoadPerformedRef.current = initialLoadPerformed;\n });\n\n // A paging config change drops requests made with the old config, so a\n // first page of the old size can't land later and mark the first load\n // done. A layout effect, so it runs before the components' load effects\n // start the replacement.\n const pagingRef = useRef({ lazy, pageSize, limit });\n useLayoutEffect(() => {\n const previous = pagingRef.current;\n if (\n previous.lazy === lazy &&\n previous.pageSize === pageSize &&\n previous.limit === limit\n ) {\n return;\n }\n pagingRef.current = { lazy, pageSize, limit };\n discardPending();\n }, [lazy, pageSize, limit, discardPending]);\n\n // The components start their first load from an effect keyed on this\n // loader. A new identity restarts a pending first load, so it changes on\n // `invalidate` and on a paging config change, but not when a consumer\n // passes a new `loadOptions`. Until the first load applies, a repeat\n // request for the same search (reopening the menu, the menus' close\n // reload) reuses the one in flight instead of superseding a good page.\n const [invalidations, setInvalidations] = useState(0);\n const stableLoadOptions = useMemo((): typeof loadOptions => {\n let pendingFirstLoad: { search: string; promise: Promise<void> } | null =\n null;\n return (search, options) => {\n const isFirstLoad =\n !!options?.initial && !initialLoadPerformedRef.current;\n if (isFirstLoad && pendingFirstLoad?.search === search) {\n return pendingFirstLoad.promise;\n }\n const promise = loadOptionsRef.current(search, options);\n if (isFirstLoad) {\n const entry = { search, promise };\n pendingFirstLoad = entry;\n const forget = () => {\n if (pendingFirstLoad === entry) pendingFirstLoad = null;\n };\n promise.then(forget, forget);\n }\n return promise;\n };\n }, [invalidations, lazy, pageSize, limit]);\n\n useImperativeHandle(\n ref,\n () => ({\n clearCache,\n invalidate: () => {\n discardPending();\n clearCache();\n setInitialLoadPerformed(false);\n setInvalidations((count) => count + 1);\n },\n }),\n [clearCache, discardPending],\n );\n\n return {\n displayAs,\n initialLoad,\n initialLoadPerformed,\n options,\n loading,\n loadingMore,\n hasMore,\n loadOptions: stableLoadOptions,\n loadMore,\n };\n}\n","import { matchSorter, type MatchSorterOptions } from \"match-sorter\";\nimport type {\n SelectFieldOption,\n SelectFieldGroupByValue,\n} from \"../../components/SelectField/types\";\n\nexport type SyncFilterFn<\n TID extends string | number = string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n> = (options: T[], searchValue: string) => T[];\n\n/** Filters by label and search text, preserving input order for equal matches. */\nexport const defaultSyncFilter = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n options: T[],\n searchValue: string,\n) =>\n matchSorter(options, searchValue, {\n keys: [\"label\", \"searchText\"],\n baseSort: (a, b) => a.index - b.index,\n });\n\n/** Normalizes a filter function or match-sorter options into a sync filter. */\nexport const toSyncFilterFn = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n filter: SyncFilterFn<TID, T> | MatchSorterOptions<T>,\n): SyncFilterFn<TID, T> =>\n typeof filter === \"function\"\n ? filter\n : (options, searchValue) =>\n matchSorter(options, searchValue, {\n baseSort: (a, b) => a.index - b.index,\n ...filter,\n });\n\n/**\n * Orders groups with the comparator, keeps options stable within each group,\n * and places ungrouped options last.\n */\nexport const sortByGroup = <\n TID extends string | number,\n T extends SelectFieldOption<TID> = SelectFieldOption<TID>,\n>(\n options: T[],\n groupSorter: (\n a: SelectFieldGroupByValue,\n b: SelectFieldGroupByValue,\n ) => number,\n): T[] => {\n const groupOrder = new Map<SelectFieldGroupByValue | undefined, number>();\n const uniqueGroups: (SelectFieldGroupByValue | undefined)[] = [];\n options.forEach((opt) => {\n if (!groupOrder.has(opt.group)) {\n groupOrder.set(opt.group, uniqueGroups.length);\n uniqueGroups.push(opt.group);\n }\n });\n\n uniqueGroups.sort((a, b) => {\n if (a === undefined && b === undefined) return 0;\n if (a === undefined) return 1;\n if (b === undefined) return -1;\n return groupSorter(a, b);\n });\n\n uniqueGroups.forEach((group, index) => {\n groupOrder.set(group, index);\n });\n\n return [...options].sort((a, b) => {\n const orderA = groupOrder.get(a.group) ?? Infinity;\n const orderB = groupOrder.get(b.group) ?? Infinity;\n return orderA - orderB;\n });\n};\n"],"names":["Check","styles","Add","options"],"mappings":"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"}
|
|
@@ -321,6 +321,7 @@ $light: (
|
|
|
321
321
|
combobox-item-selected-foreground-color-active: var(--a2-color-blue-800, #003472),
|
|
322
322
|
combobox-item-disabled-foreground-color: var(--a2-color-neutral-500, #707070),
|
|
323
323
|
combobox-item-disabled-icon-color: var(--a2-color-neutral-500, #707070),
|
|
324
|
+
data-table-pinned-column-shadow-color: #04040480,
|
|
324
325
|
details-summary-foreground-color: var(--a2-color-neutral-950, #040404),
|
|
325
326
|
details-summary-foreground-color-hover: var(--a2-color-neutral-950, #040404),
|
|
326
327
|
details-summary-foreground-color-active: var(--a2-color-neutral-950, #040404),
|
|
@@ -974,6 +975,7 @@ $dark: (
|
|
|
974
975
|
combobox-item-selected-foreground-color-active: var(--a2-color-blue-200, #9ecaff),
|
|
975
976
|
combobox-item-disabled-foreground-color: var(--a2-color-neutral-200, #c4c4c4),
|
|
976
977
|
combobox-item-disabled-icon-color: var(--a2-color-neutral-200, #c4c4c4),
|
|
978
|
+
data-table-pinned-column-shadow-color: #ffffff80,
|
|
977
979
|
details-summary-foreground-color: var(--a2-color-neutral-0, #ffffff),
|
|
978
980
|
details-summary-foreground-color-hover: var(--a2-color-neutral-0, #ffffff),
|
|
979
981
|
details-summary-foreground-color-active: var(--a2-color-neutral-0, #ffffff),
|
|
@@ -1313,6 +1315,7 @@ $nonColor: (
|
|
|
1313
1315
|
button-danger-secondary-border-radius: var(--a2-border-radius-medium, var(--a2-radius-2, 0.375rem)),
|
|
1314
1316
|
checkbox-border-radius: var(--a2-border-radius-small, var(--a2-radius-1, 0.1875rem)),
|
|
1315
1317
|
combobox-item-disabled-opacity: var(--a2-opacity-disabled, 0.6),
|
|
1318
|
+
data-table-pinned-column-shadow-opacity: 0.2,
|
|
1316
1319
|
dialog-backdrop-opacity: 0.6,
|
|
1317
1320
|
edit-card-indicator-border-style: solid,
|
|
1318
1321
|
edit-card-indicator-border-width: var(--a2-size-quarter, 0.0625rem),
|
|
@@ -330,6 +330,8 @@ export declare const ComboboxItemSelectedForegroundColorActive: TokenObj;
|
|
|
330
330
|
export declare const ComboboxItemDisabledForegroundColor: TokenObj;
|
|
331
331
|
export declare const ComboboxItemDisabledIconColor: TokenObj;
|
|
332
332
|
export declare const ComboboxItemDisabledOpacity: TokenObj;
|
|
333
|
+
export declare const DataTablePinnedColumnShadowColor: TokenObj;
|
|
334
|
+
export declare const DataTablePinnedColumnShadowOpacity: TokenObj;
|
|
333
335
|
export declare const DetailsSummaryForegroundColor: TokenObj;
|
|
334
336
|
export declare const DetailsSummaryForegroundColorHover: TokenObj;
|
|
335
337
|
export declare const DetailsSummaryForegroundColorActive: TokenObj;
|