@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,5 +1,6 @@
|
|
|
1
|
-
import { useCallback, useState,
|
|
2
|
-
import { u as useOpenCloseTransitionStates, t as tabbable } from './usePopoverTransitionStates-
|
|
1
|
+
import { useCallback, useState, useEffect, createContext, useContext, useRef } from 'react';
|
|
2
|
+
import { u as useOpenCloseTransitionStates, t as tabbable } from './usePopoverTransitionStates-B1opfxxn.js';
|
|
3
|
+
import { w as warnOnce } from './warnOnce-Y9PRHcU4.js';
|
|
3
4
|
|
|
4
5
|
const useDialogTransitionStates = (ref, openProp, options = {}) => {
|
|
5
6
|
const { onOpenAnimationStart, onCloseAnimationComplete } = options;
|
|
@@ -34,34 +35,65 @@ const useKeyboardFocusables = (element, options = {
|
|
|
34
35
|
subtree: true
|
|
35
36
|
}) => {
|
|
36
37
|
const [focusables, setFocusables] = useState(null);
|
|
37
|
-
const
|
|
38
|
+
const observeChange = options.observeChange;
|
|
38
39
|
useEffect(() => {
|
|
39
40
|
const target = element instanceof HTMLElement ? element : element?.current;
|
|
40
41
|
if (!target) return;
|
|
41
|
-
if (!
|
|
42
|
+
if (!observeChange) {
|
|
42
43
|
setFocusables(tabbable(target));
|
|
43
44
|
return;
|
|
44
45
|
}
|
|
45
|
-
const
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
setFocusables(
|
|
46
|
+
const syncFocusables = () => {
|
|
47
|
+
const next = tabbable(target);
|
|
48
|
+
if (next.length === 0) return;
|
|
49
|
+
setFocusables(next);
|
|
49
50
|
};
|
|
50
|
-
const observer = new MutationObserver(
|
|
51
|
-
observerRef.current = observer;
|
|
51
|
+
const observer = new MutationObserver(syncFocusables);
|
|
52
52
|
observer.observe(target, {
|
|
53
53
|
childList: true,
|
|
54
54
|
subtree: true,
|
|
55
55
|
attributes: true,
|
|
56
56
|
characterData: true
|
|
57
57
|
});
|
|
58
|
+
const dialog = target.closest("dialog");
|
|
59
|
+
if (dialog && dialog !== target) {
|
|
60
|
+
observer.observe(dialog, {
|
|
61
|
+
attributes: true,
|
|
62
|
+
attributeFilter: ["open"]
|
|
63
|
+
});
|
|
64
|
+
}
|
|
58
65
|
return () => {
|
|
59
66
|
observer.disconnect();
|
|
60
67
|
};
|
|
61
|
-
}, [element,
|
|
68
|
+
}, [element, observeChange]);
|
|
62
69
|
return { focusables };
|
|
63
70
|
};
|
|
64
71
|
|
|
72
|
+
const DisableConditionalUnmountWarningContext = createContext(false);
|
|
73
|
+
|
|
74
|
+
const SuppressPanelSwapWarningContext = createContext(void 0);
|
|
75
|
+
|
|
76
|
+
function useWarnOnConditionalUnmount(open, message) {
|
|
77
|
+
const disabled = useContext(DisableConditionalUnmountWarningContext);
|
|
78
|
+
const suppressRef = useContext(SuppressPanelSwapWarningContext);
|
|
79
|
+
const openRef = useRef(open);
|
|
80
|
+
openRef.current = open;
|
|
81
|
+
const messageRef = useRef(message);
|
|
82
|
+
messageRef.current = message;
|
|
83
|
+
const isMountedRef = useRef(false);
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
isMountedRef.current = true;
|
|
86
|
+
return () => {
|
|
87
|
+
isMountedRef.current = false;
|
|
88
|
+
queueMicrotask(() => {
|
|
89
|
+
if (!disabled && !(suppressRef?.current === true) && !isMountedRef.current && openRef.current) {
|
|
90
|
+
warnOnce(messageRef.current);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
}, [disabled, suppressRef]);
|
|
95
|
+
}
|
|
96
|
+
|
|
65
97
|
const getActiveHTMLElement = () => {
|
|
66
98
|
return document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
67
99
|
};
|
|
@@ -226,5 +258,5 @@ const useInitialFocus = (dialogRef, { computeFocus }) => {
|
|
|
226
258
|
}, [dialogRef, computeFocus]);
|
|
227
259
|
};
|
|
228
260
|
|
|
229
|
-
export {
|
|
230
|
-
//# sourceMappingURL=useInitialFocus-
|
|
261
|
+
export { DisableConditionalUnmountWarningContext as D, SuppressPanelSwapWarningContext as S, useDrillDownContextState as a, useDialogTransitionStates as b, useKeyboardFocusables as c, useInitialFocus as d, useWarnOnConditionalUnmount as u };
|
|
262
|
+
//# sourceMappingURL=useInitialFocus-KdirjHEb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInitialFocus-KdirjHEb.js","sources":["../src/internal/hooks/useDialogTransitionStates/useDialogTransitionStates.ts","../src/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.ts","../src/internal/contexts/DisableConditionalUnmountWarningContext.ts","../src/internal/contexts/SuppressPanelSwapWarningContext.ts","../src/internal/hooks/useWarnOnConditionalUnmount/useWarnOnConditionalUnmount.ts","../src/components/DrillDown/internal/useDrillDownContextState.ts","../src/components/Dialog/internal/useInitialFocus.ts"],"sourcesContent":["import { type RefObject, useCallback } from \"react\";\nimport {\n useOpenCloseTransitionStates,\n type OpenCloseTransitionStateEffects,\n} from \"../useOpenCloseTransitionStates\";\n\n/**\n * Coordinates a dialog's modal lifecycle with its CSS opening and closing\n * animations.\n */\nexport const useDialogTransitionStates = (\n ref: RefObject<HTMLDialogElement>,\n openProp: boolean | undefined,\n options: OpenCloseTransitionStateEffects = {},\n) => {\n const { onOpenAnimationStart, onCloseAnimationComplete } = options;\n\n const getDurationMs = useCallback(() => {\n if (!ref.current || !window) return 0;\n const duration = window.getComputedStyle(ref.current).animationDuration;\n return parseFloat(duration) * 1000;\n }, [ref]);\n\n const handleOpenAnimationStart = useCallback(() => {\n if (!ref.current) return;\n ref.current.showModal();\n onOpenAnimationStart?.();\n }, [ref, onOpenAnimationStart]);\n\n const handleCloseAnimationComplete = useCallback(() => {\n if (!ref.current) return;\n ref.current.close();\n onCloseAnimationComplete?.();\n }, [ref, onCloseAnimationComplete]);\n\n return useOpenCloseTransitionStates(openProp, {\n ...options,\n onOpenAnimationStart: handleOpenAnimationStart,\n onCloseAnimationComplete: handleCloseAnimationComplete,\n durationMs: getDurationMs,\n });\n};\n","import { type RefObject, useEffect, useState } from \"react\";\nimport { type FocusableElement, tabbable } from \"tabbable\";\n\ntype OptionProps =\n | {\n observeChange: false;\n }\n | {\n observeChange: true;\n attributes?: boolean;\n characterData?: boolean;\n childList?: boolean;\n subtree?: boolean;\n };\n\n/** Tracks tabbable descendants within a container as its DOM changes. */\nexport const useKeyboardFocusables = (\n element: RefObject<HTMLElement> | HTMLElement | undefined,\n options: OptionProps = {\n observeChange: true,\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true,\n },\n) => {\n const [focusables, setFocusables] = useState<FocusableElement[] | null>(null);\n const observeChange = options.observeChange;\n\n useEffect(() => {\n const target = element instanceof HTMLElement ? element : element?.current;\n if (!target) return;\n\n if (!observeChange) {\n setFocusables(tabbable(target));\n return;\n }\n\n const syncFocusables = () => {\n const next = tabbable(target);\n if (next.length === 0) return;\n setFocusables(next);\n };\n\n const observer = new MutationObserver(syncFocusables);\n observer.observe(target, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n });\n\n const dialog = target.closest(\"dialog\");\n if (dialog && dialog !== target) {\n observer.observe(dialog, {\n attributes: true,\n attributeFilter: [\"open\"],\n });\n }\n\n return () => {\n observer.disconnect();\n };\n }, [element, observeChange]);\n\n return { focusables };\n};\n","import { createContext } from \"react\";\n\n/**\n * Internal context to disable the conditional unmount warning for legitimate\n * viewport-based component swaps (e.g., Page.Panel switching between desktop\n * panel and mobile Dialog on resize).\n */\nexport const DisableConditionalUnmountWarningContext = createContext(false);\n","import type { MutableRefObject } from \"react\";\nimport { createContext } from \"react\";\n\n/**\n * Internal context for a mutable ref that suppresses the conditional unmount\n * warning during a Page.Panel viewport-branch swap (mobile ↔ desktop). When\n * Page.Panel swaps branches, it sets this ref to true before the old branch's\n * cleanups run, and clears it after the hook's microtask. Consumer Dialogs\n * and Drawers that remount with open=true during the swap do not warn.\n *\n * This is internal and not exported to consumers.\n *\n * @internal\n */\nexport const SuppressPanelSwapWarningContext = createContext<\n MutableRefObject<boolean> | undefined\n>(undefined);\n","import { useContext, useEffect, useRef } from \"react\";\nimport { warnOnce } from \"../../functions/warnOnce\";\nimport { DisableConditionalUnmountWarningContext } from \"../../contexts/DisableConditionalUnmountWarningContext\";\nimport { SuppressPanelSwapWarningContext } from \"../../contexts/SuppressPanelSwapWarningContext\";\n\nexport function useWarnOnConditionalUnmount(\n open: boolean,\n message: string,\n): void {\n const disabled = useContext(DisableConditionalUnmountWarningContext);\n const suppressRef = useContext(SuppressPanelSwapWarningContext);\n const openRef = useRef(open);\n openRef.current = open;\n\n const messageRef = useRef(message);\n messageRef.current = message;\n\n const isMountedRef = useRef(false);\n\n useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n\n // Wait a microtask so Strict Mode's remount is visible before warning.\n queueMicrotask(() => {\n if (\n !disabled &&\n !(suppressRef?.current === true) &&\n !isMountedRef.current &&\n openRef.current\n ) {\n warnOnce(messageRef.current);\n }\n });\n };\n }, [disabled, suppressRef]);\n}\n","import { useState, useCallback, useRef, type MutableRefObject } from \"react\";\nimport type { DrillDownContextProps, DrillDownHost } from \"./DrillDownContext\";\n\nconst getActiveHTMLElement = () => {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n};\n\ntype useDrillDownContextStateParams = {\n /**\n * Screen opened by the first `next()` from a closed stack, and restored when\n * the host closes after a drilldown session. Defaults to `0`.\n */\n defaultDrillDownIndex?: number;\n host: DrillDownHost;\n};\n\nexport function useDrillDownContextState({\n defaultDrillDownIndex = 0,\n host,\n}: useDrillDownContextStateParams) {\n // Closed until `next()` or `setIndex`; `defaultDrillDownIndex` is not the first paint.\n const [drillDownIndex, setDrillDownIndex] =\n useState<DrillDownContextProps[\"index\"]>(undefined);\n const [registeredIndices, setRegisteredIndices] = useState<\n DrillDownContextProps[\"registeredIndices\"]\n >([]);\n const drillDownPath = useRef<number[]>([]);\n const [onClose, setOnClose] = useState<((() => void) | undefined)[]>([]);\n const navigationTriggerFocusRef = useRef<HTMLElement | null>(null);\n const hostTriggerFocusRef = useRef<HTMLElement | null>(null);\n const shouldRestoreHostFocusRef = useRef(false);\n const hasActiveDrillDownRef = useRef(false);\n\n const restoreFocus = useCallback(\n (focusRef: MutableRefObject<HTMLElement | null>) => {\n requestAnimationFrame(() => {\n focusRef.current?.focus();\n focusRef.current = null;\n });\n },\n [],\n );\n\n const restoreNavigationFocus = useCallback(() => {\n restoreFocus(navigationTriggerFocusRef);\n }, [restoreFocus]);\n\n const restoreHostFocus = useCallback(() => {\n restoreFocus(hostTriggerFocusRef);\n }, [restoreFocus]);\n\n const back = useCallback(() => {\n const newIndex = drillDownPath.current.pop();\n // An empty path closes the stack and restores the opener.\n if (newIndex == null && navigationTriggerFocusRef.current) {\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n return;\n }\n setDrillDownIndex(newIndex);\n }, [setDrillDownIndex, drillDownPath, restoreNavigationFocus]);\n\n const next = useCallback(() => {\n if (drillDownIndex == null) {\n // Capture the opener so later close can restore it.\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n setDrillDownIndex(defaultDrillDownIndex);\n return;\n }\n if (registeredIndices && registeredIndices[drillDownIndex + 1] == null) {\n // No later registered screen: close rather than no-op.\n drillDownPath.current = [];\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n return;\n }\n drillDownPath.current.push(drillDownIndex);\n setDrillDownIndex(drillDownIndex + 1);\n }, [\n drillDownIndex,\n setDrillDownIndex,\n defaultDrillDownIndex,\n drillDownPath,\n registeredIndices,\n restoreNavigationFocus,\n ]);\n\n const setIndexWithinBounds = useCallback(\n (index: number | undefined) => {\n // Out of bounds or unregistered: close rather than clamp.\n if (\n index == null ||\n index < 0 ||\n (registeredIndices && registeredIndices[index] == null)\n ) {\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n return;\n }\n if (drillDownIndex === undefined) {\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n } else {\n // Jumps from an open screen still push so `back()` retraces this visit.\n drillDownPath.current.push(drillDownIndex);\n }\n setDrillDownIndex(index);\n },\n [\n drillDownIndex,\n setDrillDownIndex,\n drillDownPath,\n registeredIndices,\n restoreNavigationFocus,\n ],\n );\n\n const setHostTrigger = useCallback((element: HTMLElement | null) => {\n // First non-null host trigger wins for restore-after-close.\n if (element == null || hostTriggerFocusRef.current != null) return;\n hostTriggerFocusRef.current = element;\n }, []);\n\n const onHostCloseHandler = useCallback(() => {\n // Host close restores `defaultDrillDownIndex`, not a cleared stack.\n const shouldResetToDefault =\n drillDownIndex != null || hasActiveDrillDownRef.current;\n\n drillDownPath.current = [];\n navigationTriggerFocusRef.current = null;\n shouldRestoreHostFocusRef.current = true;\n hasActiveDrillDownRef.current = false;\n\n if (shouldResetToDefault) {\n setDrillDownIndex(defaultDrillDownIndex);\n }\n }, [defaultDrillDownIndex, drillDownIndex]);\n\n const onHostClosedHandler = useCallback(() => {\n if (!shouldRestoreHostFocusRef.current) return;\n\n shouldRestoreHostFocusRef.current = false;\n restoreHostFocus();\n }, [restoreHostFocus]);\n\n // Sticky so host close still resets after the index has already gone undefined.\n if (drillDownIndex != null) {\n hasActiveDrillDownRef.current = true;\n }\n\n const setOnCloseForIndex = useCallback(\n (fn: (() => void) | undefined, index: number) => {\n setOnClose((arr) => {\n if (!fn && arr[index] === undefined) return arr;\n const nextOnClose = [...arr];\n nextOnClose[index] = fn\n ? () => {\n fn();\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n }\n : undefined;\n return nextOnClose;\n });\n },\n [restoreNavigationFocus],\n );\n\n return {\n host,\n index: drillDownIndex,\n setIndex: setIndexWithinBounds,\n back,\n next,\n registeredIndices,\n setRegisteredIndices,\n onClose,\n setOnClose: setOnCloseForIndex,\n hostIsInteractive: true,\n setHostTrigger,\n onHostClose: onHostCloseHandler,\n onHostClosed: onHostClosedHandler,\n };\n}\n","import { type RefObject, useEffect } from \"react\";\nimport { type FocusableElement, tabbable } from \"tabbable\";\n\nexport type InitialFocusOptions = {\n /** Selects a target from the dialog's tabbable elements. */\n computeFocus?: (focusables: FocusableElement[]) => FocusableElement;\n};\n\n/** Moves focus into a dialog when its native `open` attribute is set. */\nexport const useInitialFocus = (\n dialogRef: RefObject<HTMLDialogElement>,\n { computeFocus }: InitialFocusOptions,\n) => {\n useEffect(() => {\n if (!dialogRef.current) {\n return () => {};\n }\n // Waiting for the native attribute ensures `tabbable` runs after `showModal()`.\n const observer = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.attributeName === \"open\" &&\n mutation.target === dialogRef.current &&\n mutation.target instanceof HTMLDialogElement &&\n mutation.target.open === true\n ) {\n const focusables = tabbable(dialogRef.current);\n const target = computeFocus?.(focusables) || focusables[0];\n target?.focus();\n }\n });\n });\n observer.observe(dialogRef.current, {\n attributes: true,\n attributeFilter: [\"open\"],\n });\n return () => {\n observer.disconnect();\n };\n }, [dialogRef, computeFocus]);\n};\n"],"names":[],"mappings":"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"}
|
package/dist/{useInvalidateOnOptionsChange-PweyDORd.js → useInvalidateOnOptionsChange-ChrPmbtS.js}
RENAMED
|
@@ -5,17 +5,17 @@ import { S as Spinner } from './Spinner-B7tTWcP6.js';
|
|
|
5
5
|
import { a as SvgCheckBoxOutlineBlank, S as SvgCheckBox } from './check_box-0U1tbEAd.js';
|
|
6
6
|
import { S as SvgIndeterminateCheckBox } from './indeterminate_check_box-jjLG4UY6.js';
|
|
7
7
|
import { F as Flex } from './Flex-CRF7gj0_.js';
|
|
8
|
-
import { T as Text } from './Text-
|
|
8
|
+
import { T as Text } from './Text-D4SWT4u-.js';
|
|
9
9
|
import { A as Avatar } from './Avatar-Ba662b3z.js';
|
|
10
|
-
import { C as Chip } from './Chip-
|
|
10
|
+
import { C as Chip } from './Chip-BWqgUX71.js';
|
|
11
11
|
import { forwardRef, useRef, useCallback, useEffect, useState } from 'react';
|
|
12
12
|
import { a as useOnClickOutside } from './useOnClickOutside-Zw5vzxSq.js';
|
|
13
|
-
import { u as usePortalScopeStyle, p as portalScopeClassNames } from './portalScopeClassNames-
|
|
13
|
+
import { u as usePortalScopeStyle, p as portalScopeClassNames } from './portalScopeClassNames-CMdDYHE0.js';
|
|
14
14
|
import { c as computePosition, o as offset, h as autoPlacement, g as size, a as autoUpdate } from './floating-ui.react-dom-BIKT960u.js';
|
|
15
15
|
import { D as DialogCancelButton } from './DialogCancelButton-CplrFu69.js';
|
|
16
16
|
import { S as SvgClose } from './close-DZj38AEh.js';
|
|
17
17
|
import { D as DialogContext } from './DialogContext-DBgtApl9.js';
|
|
18
|
-
import { t as tabbable } from './usePopoverTransitionStates-
|
|
18
|
+
import { t as tabbable } from './usePopoverTransitionStates-B1opfxxn.js';
|
|
19
19
|
import { u as useDialogScrollLock } from './useDialogScrollLock-BW-aVboo.js';
|
|
20
20
|
import { u as useBreakpoint } from './useBreakpoint-BBNRlMGZ.js';
|
|
21
21
|
|
|
@@ -438,4 +438,4 @@ function useInvalidateOnOptionsChange(handleRef, options) {
|
|
|
438
438
|
}
|
|
439
439
|
|
|
440
440
|
export { OptionsDialog as O, OptionsPopover as a, useAdaptiveView as b, OptionRow as c, OptionRowSideContent as d, OptionCheckbox as e, OptionContentArea as f, isThenable as i, useInvalidateOnOptionsChange as u };
|
|
441
|
-
//# sourceMappingURL=useInvalidateOnOptionsChange-
|
|
441
|
+
//# sourceMappingURL=useInvalidateOnOptionsChange-ChrPmbtS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInvalidateOnOptionsChange-PweyDORd.js","sources":["../src/internal/functions/isThenable.ts","../src/internal/components/OptionCheckbox.tsx","../src/internal/components/OptionRow.tsx","../src/internal/components/OptionContentArea.tsx","../src/internal/components/OptionsPopover/OptionsPopover.tsx","../src/internal/components/OptionsDialog/OptionsDialog.tsx","../src/beta/hooks/useAdaptiveView/useAdaptiveView.tsx","../src/internal/functions/areOptionsValueEqual.ts","../src/internal/hooks/useInvalidateOnOptionsChange.ts"],"sourcesContent":["/**\n * Detects objects with a callable `then` member.\n */\nexport function isThenable<T>(value: unknown): value is PromiseLike<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as PromiseLike<T>).then === \"function\"\n );\n}\n","import cx from \"classnames\";\nimport { Icon } from \"../../components/Icon\";\nimport { Spinner } from \"../../components/Spinner\";\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\nimport type { CheckState } from \"../../types\";\nimport styles from \"./OptionCheckbox.module.scss\";\n\nexport type OptionCheckboxProps = {\n /** Selects the checkbox glyph, or shows a spinner while loading. */\n checkState: CheckState;\n className?: string;\n};\n\nconst iconMap = {\n checked: CheckboxChecked,\n unchecked: CheckboxOutline,\n indeterminate: CheckboxIndeterminate,\n} as const;\n\n/** Decorative selection-state indicator for a multiple-select option. */\nexport function OptionCheckbox({ checkState, className }: OptionCheckboxProps) {\n if (checkState === \"loading\") {\n return (\n <span className={cx(styles[\"loading\"], className)}>\n <Spinner size=\"small\" aria-hidden=\"true\" />\n </span>\n );\n }\n\n return (\n <Icon\n aria-hidden=\"true\"\n size=\"large\"\n svg={iconMap[checkState]}\n className={cx(styles[\"checkbox\"], styles[checkState], className)}\n />\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./OptionRow.module.scss\";\n\nexport type OptionRowProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Applies disabled styling; interaction semantics remain caller-owned. */\n disabled?: boolean;\n};\n\n/** Shared layout and state styling for an option row. */\nexport const OptionRow = forwardRef<HTMLDivElement, OptionRowProps>(\n function OptionRow({ disabled, children, className, ...rest }, ref) {\n const optionRowClass = cx(\n styles[\"option-row\"],\n { [styles[\"disabled\"]]: disabled },\n className,\n );\n return (\n <div ref={ref} {...rest} className={optionRowClass}>\n {children}\n </div>\n );\n },\n);\n\n/** Prevents leading or trailing row content from shrinking. */\nexport const OptionRowSideContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\"> & { children: ReactNode }\n>(function OptionRowSideContent({ children, className, ...rest }, ref) {\n const sideContentClass = cx(styles[\"side-content\"], className);\n return (\n <div ref={ref} {...rest} className={sideContentClass}>\n {children}\n </div>\n );\n});\n","import type { ReactNode } from \"react\";\nimport { Flex } from \"../../components/Flex\";\nimport { Text } from \"../../components/Text\";\nimport { Avatar } from \"../../components/Avatar\";\nimport { Chip } from \"../../components/Chip\";\nimport { Icon } from \"../../components/Icon\";\nimport type { OptionContent } from \"../types/optionContent\";\nimport { OptionRowSideContent } from \"./OptionRow\";\nimport styles from \"./OptionContentArea.module.scss\";\n\nexport type OptionContentAreaProps = {\n /** Fallback title when `content.title` is omitted. */\n label: string;\n /** Optional structured details for the option. */\n content?: OptionContent;\n /** Additional content rendered after the option's details. */\n children?: ReactNode;\n};\n\n/** Arranges an option's avatar, text details, tags, and trailing icon. */\nexport function OptionContentArea({\n label,\n content,\n children,\n}: OptionContentAreaProps) {\n const hasAvatar = !!content?.avatar;\n const hasChips = !!content?.chips?.length;\n const hasIcon = !!content?.icon;\n\n return (\n <>\n {hasAvatar && (\n <OptionRowSideContent aria-hidden=\"true\">\n <Avatar size=\"medium\" {...content!.avatar!} />\n </OptionRowSideContent>\n )}\n <Flex grow={1} shrink={1} direction=\"column\" justifyContent=\"center\">\n <Text size=\"small\" className={styles[\"title\"]}>\n {content?.title ?? label}\n </Text>\n {content?.description && (\n <Text size=\"small\" className={styles[\"description\"]}>\n {content.description}\n </Text>\n )}\n {hasChips && (\n <Flex\n wrap=\"wrap\"\n gap=\"1\"\n className={styles[\"chips-row\"]}\n role=\"group\"\n aria-label=\"Tags\"\n >\n {content!.chips!.map((chip, i) => (\n <Chip key={`${chip.label}-${i}`} size=\"small\" {...chip} />\n ))}\n </Flex>\n )}\n {children}\n </Flex>\n {hasIcon && (\n <OptionRowSideContent>\n <Icon\n size=\"large\"\n svg={content!.icon!.svg}\n color={content!.icon!.color}\n aria-hidden={content!.icon!.label ? undefined : \"true\"}\n aria-label={content!.icon!.label}\n />\n </OptionRowSideContent>\n )}\n </>\n );\n}\n","import {\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\n\nimport {\n autoPlacement,\n autoUpdate,\n computePosition,\n offset,\n size,\n} from \"@floating-ui/react\";\n\nimport cx from \"classnames\";\n\nimport { useOnClickOutside } from \"../../hooks/useOnClickOutside/useOnClickOutside\";\nimport {\n portalScopeClassNames,\n usePortalScopeStyle,\n} from \"../../functions/portalScopeClassNames\";\n\nimport styles from \"./OptionsPopover.module.scss\";\n\nexport type OptionsPopoverProps = {\n id: string;\n children: ReactNode;\n /** Anchor used for positioning and click-outside exclusion. */\n referenceElement: RefObject<HTMLElement>;\n /** Calls `showPopover` when true and `hidePopover` when false. */\n open: boolean;\n /**\n * Click-outside, focus-out, and Escape. Escape restores focus to\n * `referenceElement` first; other paths leave focus where it already moved.\n */\n onClose: () => void;\n /**\n * `\"reference\"` matches the anchor, a number is CSS pixels, a string is a\n * CSS width. Omitted uses intrinsic `max-content` sizing.\n */\n width?: \"reference\" | number | string;\n /** Region below the scrollable body, separated by a top border. */\n footer?: ReactNode;\n};\n\nfunction resolveWidth(\n width: OptionsPopoverProps[\"width\"],\n referenceWidth: number,\n): string | undefined {\n if (width === \"reference\") return `${referenceWidth}px`;\n if (typeof width === \"number\") return `${width}px`;\n if (typeof width === \"string\") return width;\n return undefined;\n}\n\n/** Anchored popover shell for option lists. */\nexport const OptionsPopover = (props: OptionsPopoverProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { id, children, referenceElement, open, onClose, width, footer } =\n props;\n\n // A single click-outside on a focusable element fires both the\n // useOnClickOutside (pointerup) path and the focusout path below. Dedupe\n // so onClose runs at most once per user action.\n const lastCloseRef = useRef(0);\n const safeClose = useCallback(() => {\n const now = Date.now();\n if (now - lastCloseRef.current < 50) return;\n lastCloseRef.current = now;\n onClose();\n }, [onClose]);\n\n useOnClickOutside({\n targets: [ref.current ?? undefined, referenceElement.current ?? undefined],\n onClickOutside: safeClose,\n disable: !open,\n });\n\n useEffect(() => {\n if (open) {\n ref.current?.showPopover();\n } else {\n ref.current?.hidePopover();\n }\n }, [open]);\n\n // Close when focus leaves the popover (and isn't moving to the trigger\n // element, which has its own click/focus handling). This is the keyboard\n // counterpart to useOnClickOutside.\n useEffect(() => {\n if (!open) return;\n const popoverEl = ref.current;\n if (!popoverEl) return;\n const handleFocusOut = (e: FocusEvent) => {\n const next = e.relatedTarget as Node | null;\n if (!next) {\n // Focus moved to nothing tracked (e.g. body). Treat as exit.\n safeClose();\n return;\n }\n if (popoverEl.contains(next)) return;\n const trigger = referenceElement.current;\n if (trigger && trigger.contains(next)) return;\n safeClose();\n };\n popoverEl.addEventListener(\"focusout\", handleFocusOut);\n return () => popoverEl.removeEventListener(\"focusout\", handleFocusOut);\n }, [open, safeClose, referenceElement]);\n\n // Footer and other inner controls have no host Escape hook. Skip when an\n // inner handler already called preventDefault (search / listbox).\n useEffect(() => {\n if (!open) return;\n const popoverEl = ref.current;\n if (!popoverEl) return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\" || e.defaultPrevented) return;\n e.preventDefault();\n referenceElement.current?.focus();\n safeClose();\n };\n popoverEl.addEventListener(\"keydown\", handleKeyDown);\n return () => popoverEl.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, safeClose, referenceElement]);\n\n const updatePosition = useCallback(async () => {\n if (!ref.current || !referenceElement.current) return;\n const position = await computePosition(\n referenceElement.current,\n ref.current,\n {\n placement: \"bottom-start\",\n middleware: [\n offset(8),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"top-start\",\n \"top-end\",\n ],\n padding: 8,\n }),\n size({\n padding: 8,\n apply({ rects, elements, availableHeight, availableWidth }) {\n const resolved = resolveWidth(width, rects.reference.width);\n Object.assign(elements.floating.style, {\n ...(resolved != null && { width: resolved }),\n maxWidth: `${Math.max(0, availableWidth)}px`,\n maxHeight: `${Math.max(0, availableHeight)}px`,\n });\n },\n }),\n ],\n },\n );\n ref.current.style.left = `${position.x}px`;\n ref.current.style.top = `${position.y}px`;\n }, [ref, referenceElement, width]);\n\n useEffect(() => {\n if (!ref.current || !referenceElement.current || !open) return;\n const cleanup = autoUpdate(\n referenceElement.current,\n ref.current,\n updatePosition,\n );\n return () => {\n cleanup();\n };\n }, [referenceElement, ref, updatePosition, open]);\n\n const portalStyle = usePortalScopeStyle();\n\n return (\n <div\n ref={ref}\n id={id}\n className={cx(styles[\"options-popover\"], portalScopeClassNames)}\n style={portalStyle}\n popover=\"manual\"\n data-anv=\"popover-content\"\n data-anv-part=\"popover\"\n >\n <div className={styles[\"options-popover-body\"]}>{children}</div>\n {footer ? (\n <div className={styles[\"options-popover-footer\"]}>{footer}</div>\n ) : null}\n </div>\n );\n};\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { Flex, type FocusableElement, Text } from \"../../..\";\nimport { DialogCancelButton } from \"../../../components/Dialog/DialogCancelButton\";\nimport styles from \"./OptionsDialog.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { DialogContext } from \"../../../components/Dialog/internal/DialogContext\";\nimport { useDialogScrollLock } from \"../..\";\nimport { tabbable } from \"tabbable\";\n\n/**\n * Native modal host for select options. Sizes to the visual viewport.\n */\nexport const OptionsDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n footer,\n}: {\n /** Scroll-lock and dialog identity. */\n id: string;\n /** Calls `showModal` when true and `close` when false. */\n isOpen: boolean;\n /** Escape, the cancel button, and host close paths. */\n onClose: () => void;\n /** Accessible name rendered as the dialog `h1`. */\n title: string;\n /** Optional search/trigger control above the list. */\n field?: React.ReactNode;\n children: React.ReactNode;\n /**\n * Picks initial focus among tabbables. Defaults to the first control that\n * is not the cancel button.\n */\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n /** Optional apply/clear/add-new controls after the list. */\n footer?: React.ReactNode;\n}) => {\n const elRef = useRef<HTMLDialogElement>(null);\n const visualViewportHeightRef = useRef<HTMLDivElement>(null);\n\n useDialogScrollLock({\n open: isOpen,\n id,\n enableScrollChaining: false,\n elementRef: elRef,\n });\n\n const computeFocus = useCallback(\n (focusables: FocusableElement[]) => {\n if (initialFocusResolver) {\n return initialFocusResolver(focusables);\n }\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"dialog-cancel-button\",\n ) || focusables[0]\n );\n },\n [initialFocusResolver],\n );\n\n useEffect(() => {\n if (isOpen) {\n elRef.current?.showModal();\n if (elRef.current) {\n computeFocus(tabbable(elRef.current)).focus();\n }\n } else {\n elRef.current?.close();\n }\n // `computeFocus` is omitted so a resolver identity change does not re-show or close.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\n // Mobile chrome/keyboard shrinks visualViewport without resizing `window`.\n visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;\n visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;\n };\n window.visualViewport?.addEventListener(\"resize\", handleResize);\n return () => {\n window.visualViewport?.removeEventListener(\"resize\", handleResize);\n };\n }\n }, [isOpen]);\n\n return (\n <dialog\n ref={elRef}\n id={id}\n data-anv=\"field-dialog\"\n data-anv-part=\"dialog\"\n className={styles[\"field-dialog\"]}\n onKeyDown={(e) => {\n if (e.code === \"Escape\") {\n // Native dialog would dismiss itself; route close through the host.\n e.preventDefault();\n onClose();\n }\n }}\n >\n <div\n className={styles[\"field-dialog-visual-viewport-height\"]}\n ref={visualViewportHeightRef}\n >\n <Flex direction=\"row\" className={styles[\"header\"]}>\n <Text variant=\"headline\" el=\"h1\">\n {title}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogContext.Provider value={{ close: onClose }}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </DialogContext.Provider>\n </span>\n </Flex>\n {field ? (\n <Flex direction=\"column\" className={styles[\"field\"]}>\n {field}\n </Flex>\n ) : null}\n <Flex direction=\"column\" className={styles[\"content\"]}>\n {children}\n </Flex>\n {footer ? <div className={styles[\"footer\"]}>{footer}</div> : null}\n </div>\n </dialog>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useBreakpoint } from \"../../../hooks\";\n\n/** Layout mode selected by {@link useAdaptiveView}. */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\nexport interface UseAdaptiveViewReturn {\n /** `\"mobile\"` when `isMobile` is true; otherwise `\"desktop\"`. */\n view: AdaptiveView;\n /** True below the `md` breakpoint when the primary pointer is coarse. */\n isMobile: boolean;\n /** Inverse of `isMobile`. */\n isDesktop: boolean;\n}\n\nfunction detectCoarsePointer(): boolean {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return false;\n }\n return window.matchMedia(\"(pointer: coarse)\").matches;\n}\n\n/**\n * Selects mobile mode only when the viewport is below `md` and the primary\n * pointer is coarse. Defaults to desktop when pointer detection is unavailable.\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n const mediaQuery = window.matchMedia(\"(pointer: coarse)\");\n const handleChange = (e: MediaQueryListEvent) => {\n setHasCoarsePointer(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const isSmallScreen = !breakpoint?.md;\n const isMobile = isSmallScreen && hasCoarsePointer;\n\n return {\n view: isMobile ? \"mobile\" : \"desktop\",\n isMobile,\n isDesktop: !isMobile,\n };\n}\n","/**\n * Compares option data deeply while keeping functions and React elements\n * identity-sensitive.\n */\nexport function areOptionsValueEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (typeof a !== typeof b || a === null || b === null) {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => areOptionsValueEqual(item, b[index]));\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n // Treat omitted keys and explicit `undefined` as equivalent.\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const key of keys) {\n if (!areOptionsValueEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n if (typeof (value as { $$typeof?: unknown }).$$typeof === \"symbol\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n","import { useEffect, useRef } from \"react\";\nimport { areOptionsValueEqual } from \"../functions/areOptionsValueEqual\";\n\ntype InvalidatableHandle = {\n invalidate: () => void;\n};\n\n/**\n * Invalidates a select handle only when option contents change, ignoring the\n * initial mount and reference-only changes.\n */\nexport function useInvalidateOnOptionsChange(\n handleRef: { current: InvalidatableHandle | null },\n options: unknown,\n): void {\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (areOptionsValueEqual(prevOptionsRef.current, options)) {\n prevOptionsRef.current = options;\n return;\n }\n\n prevOptionsRef.current = options;\n handleRef.current?.invalidate();\n }, [handleRef, options]);\n}\n"],"names":["CheckboxChecked","CheckboxOutline","CheckboxIndeterminate","styles","OptionRow","OptionRowSideContent","Close"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,WAAc,KAAA,EAAyC;AACrE,EAAA,OACE,OAAO,UAAU,QAAA,IACjB,KAAA,KAAU,QACV,MAAA,IAAU,KAAA,IACV,OAAQ,KAAA,CAAyB,IAAA,KAAS,UAAA;AAE9C;;;;;;;;;;;;;;;ACKA,MAAM,OAAA,GAAU;AAAA,EACd,OAAA,EAASA,WAAA;AAAA,EACT,SAAA,EAAWC,uBAAA;AAAA,EACX,aAAA,EAAeC;AACjB,CAAA;AAGO,SAAS,cAAA,CAAe,EAAE,UAAA,EAAY,SAAA,EAAU,EAAwB;AAC7E,EAAA,IAAI,eAAe,SAAA,EAAW;AAC5B,IAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAGC,SAAO,SAAS,CAAA,EAAG,SAAS,CAAA,EAC9C,8BAAC,OAAA,EAAA,EAAQ,IAAA,EAAK,OAAA,EAAQ,aAAA,EAAY,QAAO,CAAA,EAC3C,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,MAAA;AAAA,MACZ,IAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK,QAAQ,UAAU,CAAA;AAAA,MACvB,SAAA,EAAW,GAAGA,QAAA,CAAO,UAAU,GAAGA,QAAA,CAAO,UAAU,GAAG,SAAS;AAAA;AAAA,GACjE;AAEJ;;;;;;;;;ACzBO,MAAM,SAAA,GAAY,UAAA;AAAA,EACvB,SAASC,WAAU,EAAE,QAAA,EAAU,UAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAClE,IAAA,MAAM,cAAA,GAAiB,EAAA;AAAA,MACrBD,SAAO,YAAY,CAAA;AAAA,MACnB,EAAE,CAACA,QAAA,CAAO,UAAU,CAAC,GAAG,QAAA,EAAS;AAAA,MACjC;AAAA,KACF;AACA,IAAA,2BACG,KAAA,EAAA,EAAI,GAAA,EAAW,GAAG,IAAA,EAAM,SAAA,EAAW,gBACjC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AAGO,MAAM,oBAAA,GAAuB,UAAA,CAGlC,SAASE,qBAAAA,CAAqB,EAAE,UAAU,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AACrE,EAAA,MAAM,gBAAA,GAAmB,EAAA,CAAGF,QAAA,CAAO,cAAc,GAAG,SAAS,CAAA;AAC7D,EAAA,2BACG,KAAA,EAAA,EAAI,GAAA,EAAW,GAAG,IAAA,EAAM,SAAA,EAAW,kBACjC,QAAA,EACH,CAAA;AAEJ,CAAC;;;;;;;;;;ACpBM,SAAS,iBAAA,CAAkB;AAAA,EAChC,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,OAAA,EAAS,MAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,CAAC,CAAC,OAAA,EAAS,KAAA,EAAO,MAAA;AACnC,EAAA,MAAM,OAAA,GAAU,CAAC,CAAC,OAAA,EAAS,IAAA;AAE3B,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,SAAA,oBACC,GAAA,CAAC,oBAAA,EAAA,EAAqB,aAAA,EAAY,MAAA,EAChC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAU,GAAG,OAAA,CAAS,MAAA,EAAS,CAAA,EAC9C,CAAA;AAAA,oBAEF,IAAA,CAAC,QAAK,IAAA,EAAM,CAAA,EAAG,QAAQ,CAAA,EAAG,SAAA,EAAU,QAAA,EAAS,cAAA,EAAe,QAAA,EAC1D,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,MAAK,OAAA,EAAQ,SAAA,EAAWA,SAAO,OAAO,CAAA,EACzC,QAAA,EAAA,OAAA,EAAS,KAAA,IAAS,KAAA,EACrB,CAAA;AAAA,MACC,OAAA,EAAS,WAAA,oBACR,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,SAAA,EAAWA,QAAA,CAAO,aAAa,CAAA,EAC/C,QAAA,EAAA,OAAA,CAAQ,WAAA,EACX,CAAA;AAAA,MAED,QAAA,oBACC,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,GAAA,EAAI,GAAA;AAAA,UACJ,SAAA,EAAWA,SAAO,WAAW,CAAA;AAAA,UAC7B,IAAA,EAAK,OAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UAEV,kBAAS,KAAA,CAAO,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,yBACzB,IAAA,EAAA,EAAgC,IAAA,EAAK,OAAA,EAAS,GAAG,QAAvC,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,CAAC,EAA2B,CACzD;AAAA;AAAA,OACH;AAAA,MAED;AAAA,KAAA,EACH,CAAA;AAAA,IACC,OAAA,wBACE,oBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,GAAA,EAAK,QAAS,IAAA,CAAM,GAAA;AAAA,QACpB,KAAA,EAAO,QAAS,IAAA,CAAM,KAAA;AAAA,QACtB,aAAA,EAAa,OAAA,CAAS,IAAA,CAAM,KAAA,GAAQ,MAAA,GAAY,MAAA;AAAA,QAChD,YAAA,EAAY,QAAS,IAAA,CAAM;AAAA;AAAA,KAC7B,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;;;;;AC1BA,SAAS,YAAA,CACP,OACA,cAAA,EACoB;AACpB,EAAA,IAAI,KAAA,KAAU,WAAA,EAAa,OAAO,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA;AACnD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,GAAG,KAAK,CAAA,EAAA,CAAA;AAC9C,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,OAAO,MAAA;AACT;AAGO,MAAM,cAAA,GAAiB,CAAC,KAAA,KAA+B;AAC5D,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,EAAE,IAAI,QAAA,EAAU,gBAAA,EAAkB,MAAM,OAAA,EAAS,KAAA,EAAO,QAAO,GACnE,KAAA;AAKF,EAAA,MAAM,YAAA,GAAe,OAAO,CAAC,CAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,GAAM,YAAA,CAAa,OAAA,GAAU,EAAA,EAAI;AACrC,IAAA,YAAA,CAAa,OAAA,GAAU,GAAA;AACvB,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,iBAAA,CAAkB;AAAA,IAChB,SAAS,CAAC,GAAA,CAAI,WAAW,MAAA,EAAW,gBAAA,CAAiB,WAAW,MAAS,CAAA;AAAA,IACzE,cAAA,EAAgB,SAAA;AAAA,IAChB,SAAS,CAAC;AAAA,GACX,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,GAAA,CAAI,SAAS,WAAA,EAAY;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,SAAS,WAAA,EAAY;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAKT,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,YAAY,GAAA,CAAI,OAAA;AACtB,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAkB;AACxC,MAAA,MAAM,OAAO,CAAA,CAAE,aAAA;AACf,MAAA,IAAI,CAAC,IAAA,EAAM;AAET,QAAA,SAAA,EAAU;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,EAAG;AAC9B,MAAA,MAAM,UAAU,gBAAA,CAAiB,OAAA;AACjC,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,EAAG;AACvC,MAAA,SAAA,EAAU;AAAA,IACZ,CAAA;AACA,IAAA,SAAA,CAAU,gBAAA,CAAiB,YAAY,cAAc,CAAA;AACrD,IAAA,OAAO,MAAM,SAAA,CAAU,mBAAA,CAAoB,UAAA,EAAY,cAAc,CAAA;AAAA,EACvE,CAAA,EAAG,CAAC,IAAA,EAAM,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAItC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,MAAM,YAAY,GAAA,CAAI,OAAA;AACtB,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAqB;AAC1C,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,IAAY,CAAA,CAAE,gBAAA,EAAkB;AAC9C,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,gBAAA,CAAiB,SAAS,KAAA,EAAM;AAChC,MAAA,SAAA,EAAU;AAAA,IACZ,CAAA;AACA,IAAA,SAAA,CAAU,gBAAA,CAAiB,WAAW,aAAa,CAAA;AACnD,IAAA,OAAO,MAAM,SAAA,CAAU,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EACrE,CAAA,EAAG,CAAC,IAAA,EAAM,SAAA,EAAW,gBAAgB,CAAC,CAAA;AAEtC,EAAA,MAAM,cAAA,GAAiB,YAAY,YAAY;AAC7C,IAAA,IAAI,CAAC,GAAA,CAAI,OAAA,IAAW,CAAC,iBAAiB,OAAA,EAAS;AAC/C,IAAA,MAAM,WAAW,MAAM,eAAA;AAAA,MACrB,gBAAA,CAAiB,OAAA;AAAA,MACjB,GAAA,CAAI,OAAA;AAAA,MACJ;AAAA,QACE,SAAA,EAAW,cAAA;AAAA,QACX,UAAA,EAAY;AAAA,UACV,OAAO,CAAC,CAAA;AAAA,UACR,aAAA,CAAc;AAAA,YACZ,iBAAA,EAAmB;AAAA,cACjB,cAAA;AAAA,cACA,YAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AAAA,UACD,IAAA,CAAK;AAAA,YACH,OAAA,EAAS,CAAA;AAAA,YACT,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,eAAA,EAAiB,gBAAe,EAAG;AAC1D,cAAA,MAAM,QAAA,GAAW,YAAA,CAAa,KAAA,EAAO,KAAA,CAAM,UAAU,KAAK,CAAA;AAC1D,cAAA,MAAA,CAAO,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,KAAA,EAAO;AAAA,gBACrC,GAAI,QAAA,IAAY,IAAA,IAAQ,EAAE,OAAO,QAAA,EAAS;AAAA,gBAC1C,UAAU,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,cAAc,CAAC,CAAA,EAAA,CAAA;AAAA,gBACxC,WAAW,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,eAAe,CAAC,CAAA,EAAA;AAAA,eAC3C,CAAA;AAAA,YACH;AAAA,WACD;AAAA;AACH;AACF,KACF;AACA,IAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,IAAA,GAAO,CAAA,EAAG,SAAS,CAAC,CAAA,EAAA,CAAA;AACtC,IAAA,GAAA,CAAI,OAAA,CAAQ,KAAA,CAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAC,CAAA,EAAA,CAAA;AAAA,EACvC,CAAA,EAAG,CAAC,GAAA,EAAK,gBAAA,EAAkB,KAAK,CAAC,CAAA;AAEjC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,GAAA,CAAI,OAAA,IAAW,CAAC,gBAAA,CAAiB,OAAA,IAAW,CAAC,IAAA,EAAM;AACxD,IAAA,MAAM,OAAA,GAAU,UAAA;AAAA,MACd,gBAAA,CAAiB,OAAA;AAAA,MACjB,GAAA,CAAI,OAAA;AAAA,MACJ;AAAA,KACF;AACA,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,GAAA,EAAK,cAAA,EAAgB,IAAI,CAAC,CAAA;AAEhD,EAAA,MAAM,cAAc,mBAAA,EAAoB;AAExC,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA;AAAA,MACA,SAAA,EAAW,EAAA,CAAGA,QAAA,CAAO,iBAAiB,GAAG,qBAAqB,CAAA;AAAA,MAC9D,KAAA,EAAO,WAAA;AAAA,MACP,OAAA,EAAQ,QAAA;AAAA,MACR,UAAA,EAAS,iBAAA;AAAA,MACT,eAAA,EAAc,SAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWA,QAAA,CAAO,sBAAsB,GAAI,QAAA,EAAS,CAAA;AAAA,QACzD,MAAA,uBACE,KAAA,EAAA,EAAI,SAAA,EAAWA,SAAO,wBAAwB,CAAA,EAAI,kBAAO,CAAA,GACxD;AAAA;AAAA;AAAA,GACN;AAEJ;;;;;;;;;;;;;;;ACrLO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,EAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAA,KAmBM;AACJ,EAAA,MAAM,KAAA,GAAQ,OAA0B,IAAI,CAAA;AAC5C,EAAA,MAAM,uBAAA,GAA0B,OAAuB,IAAI,CAAA;AAE3D,EAAA,mBAAA,CAAoB;AAAA,IAClB,IAAA,EAAM,MAAA;AAAA,IACN,EAAA;AAAA,IACA,oBAAA,EAAsB,KAAA;AAAA,IACtB,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,UAAA,KAAmC;AAClC,MAAA,IAAI,oBAAA,EAAsB;AACxB,QAAA,OAAO,qBAAqB,UAAU,CAAA;AAAA,MACxC;AACA,MAAA,OACE,UAAA,CAAW,IAAA;AAAA,QACT,CAAC,SAAA,KAAc,SAAA,CAAU,OAAA,CAAQ,GAAA,KAAQ;AAAA,OAC3C,IAAK,WAAW,CAAC,CAAA;AAAA,IAErB,CAAA;AAAA,IACA,CAAC,oBAAoB;AAAA,GACvB;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,KAAA,CAAM,SAAS,SAAA,EAAU;AACzB,MAAA,IAAI,MAAM,OAAA,EAAS;AACjB,QAAA,YAAA,CAAa,QAAA,CAAS,KAAA,CAAM,OAAO,CAAC,EAAE,KAAA,EAAM;AAAA,MAC9C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,SAAS,KAAA,EAAM;AAAA,IACvB;AAAA,EAGF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,eAAe,MAAM;AACzB,QAAA,IAAI,CAAC,wBAAwB,OAAA,EAAS;AAEtC,QAAA,uBAAA,CAAwB,QAAQ,KAAA,CAAM,MAAA,GAAS,GAAG,MAAA,CAAO,cAAA,EAAgB,UAAU,CAAC,CAAA,EAAA,CAAA;AACpF,QAAA,uBAAA,CAAwB,QAAQ,KAAA,CAAM,SAAA,GAAY,GAAG,MAAA,CAAO,cAAA,EAAgB,UAAU,CAAC,CAAA,EAAA,CAAA;AAAA,MACzF,CAAA;AACA,MAAA,MAAA,CAAO,cAAA,EAAgB,gBAAA,CAAiB,QAAA,EAAU,YAAY,CAAA;AAC9D,MAAA,OAAO,MAAM;AACX,QAAA,MAAA,CAAO,cAAA,EAAgB,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,MACnE,CAAA;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,KAAA;AAAA,MACL,EAAA;AAAA,MACA,UAAA,EAAS,cAAA;AAAA,MACT,eAAA,EAAc,QAAA;AAAA,MACd,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,MAChC,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,SAAS,QAAA,EAAU;AAEvB,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAA,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,OAAO,qCAAqC,CAAA;AAAA,UACvD,GAAA,EAAK,uBAAA;AAAA,UAEL,QAAA,EAAA;AAAA,4BAAA,IAAA,CAAC,QAAK,SAAA,EAAU,KAAA,EAAM,SAAA,EAAW,MAAA,CAAO,QAAQ,CAAA,EAC9C,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,UAAA,EAAW,EAAA,EAAG,MACzB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,8BACA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,iBAAiB,CAAA,EACvC,QAAA,kBAAA,GAAA,CAAC,aAAA,CAAc,QAAA,EAAd,EAAuB,KAAA,EAAO,EAAE,KAAA,EAAO,SAAQ,EAC9C,QAAA,kBAAA,GAAA;AAAA,gBAAC,kBAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAW,OAAO,cAAc,CAAA;AAAA,kBAChC,IAAA,EAAK,OAAA;AAAA,kBACL,UAAA,EAAW,OAAA;AAAA,kBACX,YAAA,EAAW,cAAA;AAAA,kBACX,IAAA,EAAMG;AAAA;AAAA,iBAEV,CAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,YACC,KAAA,mBACC,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,QAAA,EAAS,WAAW,MAAA,CAAO,OAAO,CAAA,EAC/C,QAAA,EAAA,KAAA,EACH,CAAA,GACE,IAAA;AAAA,4BACJ,GAAA,CAAC,QAAK,SAAA,EAAU,QAAA,EAAS,WAAW,MAAA,CAAO,SAAS,GACjD,QAAA,EACH,CAAA;AAAA,YACC,MAAA,uBAAU,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,QAAQ,CAAA,EAAI,kBAAO,CAAA,GAAS;AAAA;AAAA;AAAA;AAC/D;AAAA,GACF;AAEJ;;AC7HA,SAAS,mBAAA,GAA+B;AACtC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,CAAC,OAAO,UAAA,EAAY;AACvD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA,CAAO,UAAA,CAAW,mBAAmB,CAAA,CAAE,OAAA;AAChD;AAMO,SAAS,eAAA,GAAyC;AACvD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,mBAAmB,CAAA;AAE5E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,mBAAA,CAAoB,qBAAqB,CAAA;AAEzC,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,CAAW,mBAAmB,CAAA;AACxD,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2B;AAC/C,MAAA,mBAAA,CAAoB,EAAE,OAAO,CAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,UAAA,CAAW,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAClD,IAAA,OAAO,MAAM,UAAA,CAAW,mBAAA,CAAoB,QAAA,EAAU,YAAY,CAAA;AAAA,EACpE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgB,CAAC,UAAA,EAAY,EAAA;AACnC,EAAA,MAAM,WAAW,aAAA,IAAiB,gBAAA;AAElC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAW,QAAA,GAAW,SAAA;AAAA,IAC5B,QAAA;AAAA,IACA,WAAW,CAAC;AAAA,GACd;AACF;;AC9CO,SAAS,oBAAA,CAAqB,GAAY,CAAA,EAAqB;AACpE,EAAA,IAAI,MAAA,CAAO,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA,EAAG;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,CAAA,KAAM,OAAO,KAAK,CAAA,KAAM,IAAA,IAAQ,MAAM,IAAA,EAAM;AACrD,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AACpB,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,CAAA,CAAE,MAAA,KAAW,EAAE,MAAA,EAAQ;AAC9C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAA,CAAE,KAAA,CAAM,CAAC,IAAA,EAAM,KAAA,KAAU,qBAAqB,IAAA,EAAM,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AAAA,EACtE;AAEA,EAAA,IAAI,aAAA,CAAc,CAAC,CAAA,IAAK,aAAA,CAAc,CAAC,CAAA,EAAG;AAExC,IAAA,MAAM,IAAA,mBAAO,IAAI,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAC,CAAA;AAC3D,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,MAAA,IAAI,CAAC,qBAAqB,CAAA,CAAE,GAAG,GAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AACzC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,cAAc,KAAA,EAAkD;AACvE,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACvE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAQ,KAAA,CAAiC,QAAA,KAAa,QAAA,EAAU;AAClE,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA;AACzC,EAAA,OAAO,KAAA,KAAU,MAAA,CAAO,SAAA,IAAa,KAAA,KAAU,IAAA;AACjD;;AChCO,SAAS,4BAAA,CACd,WACA,OAAA,EACM;AACN,EAAA,MAAM,cAAA,GAAiB,OAAO,OAAO,CAAA;AAErC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,oBAAA,CAAqB,cAAA,CAAe,OAAA,EAAS,OAAO,CAAA,EAAG;AACzD,MAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,OAAA,GAAU,OAAA;AACzB,IAAA,SAAA,CAAU,SAAS,UAAA,EAAW;AAAA,EAChC,CAAA,EAAG,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA;AACzB;;;;"}
|
|
1
|
+
{"version":3,"file":"useInvalidateOnOptionsChange-ChrPmbtS.js","sources":["../src/internal/functions/isThenable.ts","../src/internal/components/OptionCheckbox.tsx","../src/internal/components/OptionRow.tsx","../src/internal/components/OptionContentArea.tsx","../src/internal/components/OptionsPopover/OptionsPopover.tsx","../src/internal/components/OptionsDialog/OptionsDialog.tsx","../src/beta/hooks/useAdaptiveView/useAdaptiveView.tsx","../src/internal/functions/areOptionsValueEqual.ts","../src/internal/hooks/useInvalidateOnOptionsChange.ts"],"sourcesContent":["/**\n * Detects objects with a callable `then` member.\n */\nexport function isThenable<T>(value: unknown): value is PromiseLike<T> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as PromiseLike<T>).then === \"function\"\n );\n}\n","import cx from \"classnames\";\nimport { Icon } from \"../../components/Icon\";\nimport { Spinner } from \"../../components/Spinner\";\nimport CheckboxOutline from \"@servicetitan/hammer-icon/mdi/round/check_box_outline_blank.svg\";\nimport CheckboxChecked from \"@servicetitan/hammer-icon/mdi/round/check_box.svg\";\nimport CheckboxIndeterminate from \"@servicetitan/hammer-icon/mdi/round/indeterminate_check_box.svg\";\nimport type { CheckState } from \"../../types\";\nimport styles from \"./OptionCheckbox.module.scss\";\n\nexport type OptionCheckboxProps = {\n /** Selects the checkbox glyph, or shows a spinner while loading. */\n checkState: CheckState;\n className?: string;\n};\n\nconst iconMap = {\n checked: CheckboxChecked,\n unchecked: CheckboxOutline,\n indeterminate: CheckboxIndeterminate,\n} as const;\n\n/** Decorative selection-state indicator for a multiple-select option. */\nexport function OptionCheckbox({ checkState, className }: OptionCheckboxProps) {\n if (checkState === \"loading\") {\n return (\n <span className={cx(styles[\"loading\"], className)}>\n <Spinner size=\"small\" aria-hidden=\"true\" />\n </span>\n );\n }\n\n return (\n <Icon\n aria-hidden=\"true\"\n size=\"large\"\n svg={iconMap[checkState]}\n className={cx(styles[\"checkbox\"], styles[checkState], className)}\n />\n );\n}\n","import {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./OptionRow.module.scss\";\n\nexport type OptionRowProps = ComponentPropsWithoutRef<\"div\"> & {\n /** Applies disabled styling; interaction semantics remain caller-owned. */\n disabled?: boolean;\n};\n\n/** Shared layout and state styling for an option row. */\nexport const OptionRow = forwardRef<HTMLDivElement, OptionRowProps>(\n function OptionRow({ disabled, children, className, ...rest }, ref) {\n const optionRowClass = cx(\n styles[\"option-row\"],\n { [styles[\"disabled\"]]: disabled },\n className,\n );\n return (\n <div ref={ref} {...rest} className={optionRowClass}>\n {children}\n </div>\n );\n },\n);\n\n/** Prevents leading or trailing row content from shrinking. */\nexport const OptionRowSideContent = forwardRef<\n HTMLDivElement,\n ComponentPropsWithoutRef<\"div\"> & { children: ReactNode }\n>(function OptionRowSideContent({ children, className, ...rest }, ref) {\n const sideContentClass = cx(styles[\"side-content\"], className);\n return (\n <div ref={ref} {...rest} className={sideContentClass}>\n {children}\n </div>\n );\n});\n","import type { ReactNode } from \"react\";\nimport { Flex } from \"../../components/Flex\";\nimport { Text } from \"../../components/Text\";\nimport { Avatar } from \"../../components/Avatar\";\nimport { Chip } from \"../../components/Chip\";\nimport { Icon } from \"../../components/Icon\";\nimport type { OptionContent } from \"../types/optionContent\";\nimport { OptionRowSideContent } from \"./OptionRow\";\nimport styles from \"./OptionContentArea.module.scss\";\n\nexport type OptionContentAreaProps = {\n /** Fallback title when `content.title` is omitted. */\n label: string;\n /** Optional structured details for the option. */\n content?: OptionContent;\n /** Additional content rendered after the option's details. */\n children?: ReactNode;\n};\n\n/** Arranges an option's avatar, text details, tags, and trailing icon. */\nexport function OptionContentArea({\n label,\n content,\n children,\n}: OptionContentAreaProps) {\n const hasAvatar = !!content?.avatar;\n const hasChips = !!content?.chips?.length;\n const hasIcon = !!content?.icon;\n\n return (\n <>\n {hasAvatar && (\n <OptionRowSideContent aria-hidden=\"true\">\n <Avatar size=\"medium\" {...content!.avatar!} />\n </OptionRowSideContent>\n )}\n <Flex grow={1} shrink={1} direction=\"column\" justifyContent=\"center\">\n <Text size=\"small\" className={styles[\"title\"]}>\n {content?.title ?? label}\n </Text>\n {content?.description && (\n <Text size=\"small\" className={styles[\"description\"]}>\n {content.description}\n </Text>\n )}\n {hasChips && (\n <Flex\n wrap=\"wrap\"\n gap=\"1\"\n className={styles[\"chips-row\"]}\n role=\"group\"\n aria-label=\"Tags\"\n >\n {content!.chips!.map((chip, i) => (\n <Chip key={`${chip.label}-${i}`} size=\"small\" {...chip} />\n ))}\n </Flex>\n )}\n {children}\n </Flex>\n {hasIcon && (\n <OptionRowSideContent>\n <Icon\n size=\"large\"\n svg={content!.icon!.svg}\n color={content!.icon!.color}\n aria-hidden={content!.icon!.label ? undefined : \"true\"}\n aria-label={content!.icon!.label}\n />\n </OptionRowSideContent>\n )}\n </>\n );\n}\n","import {\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\n\nimport {\n autoPlacement,\n autoUpdate,\n computePosition,\n offset,\n size,\n} from \"@floating-ui/react\";\n\nimport cx from \"classnames\";\n\nimport { useOnClickOutside } from \"../../hooks/useOnClickOutside/useOnClickOutside\";\nimport {\n portalScopeClassNames,\n usePortalScopeStyle,\n} from \"../../functions/portalScopeClassNames\";\n\nimport styles from \"./OptionsPopover.module.scss\";\n\nexport type OptionsPopoverProps = {\n id: string;\n children: ReactNode;\n /** Anchor used for positioning and click-outside exclusion. */\n referenceElement: RefObject<HTMLElement>;\n /** Calls `showPopover` when true and `hidePopover` when false. */\n open: boolean;\n /**\n * Click-outside, focus-out, and Escape. Escape restores focus to\n * `referenceElement` first; other paths leave focus where it already moved.\n */\n onClose: () => void;\n /**\n * `\"reference\"` matches the anchor, a number is CSS pixels, a string is a\n * CSS width. Omitted uses intrinsic `max-content` sizing.\n */\n width?: \"reference\" | number | string;\n /** Region below the scrollable body, separated by a top border. */\n footer?: ReactNode;\n};\n\nfunction resolveWidth(\n width: OptionsPopoverProps[\"width\"],\n referenceWidth: number,\n): string | undefined {\n if (width === \"reference\") return `${referenceWidth}px`;\n if (typeof width === \"number\") return `${width}px`;\n if (typeof width === \"string\") return width;\n return undefined;\n}\n\n/** Anchored popover shell for option lists. */\nexport const OptionsPopover = (props: OptionsPopoverProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const { id, children, referenceElement, open, onClose, width, footer } =\n props;\n\n // A single click-outside on a focusable element fires both the\n // useOnClickOutside (pointerup) path and the focusout path below. Dedupe\n // so onClose runs at most once per user action.\n const lastCloseRef = useRef(0);\n const safeClose = useCallback(() => {\n const now = Date.now();\n if (now - lastCloseRef.current < 50) return;\n lastCloseRef.current = now;\n onClose();\n }, [onClose]);\n\n useOnClickOutside({\n targets: [ref.current ?? undefined, referenceElement.current ?? undefined],\n onClickOutside: safeClose,\n disable: !open,\n });\n\n useEffect(() => {\n if (open) {\n ref.current?.showPopover();\n } else {\n ref.current?.hidePopover();\n }\n }, [open]);\n\n // Close when focus leaves the popover (and isn't moving to the trigger\n // element, which has its own click/focus handling). This is the keyboard\n // counterpart to useOnClickOutside.\n useEffect(() => {\n if (!open) return;\n const popoverEl = ref.current;\n if (!popoverEl) return;\n const handleFocusOut = (e: FocusEvent) => {\n const next = e.relatedTarget as Node | null;\n if (!next) {\n // Focus moved to nothing tracked (e.g. body). Treat as exit.\n safeClose();\n return;\n }\n if (popoverEl.contains(next)) return;\n const trigger = referenceElement.current;\n if (trigger && trigger.contains(next)) return;\n safeClose();\n };\n popoverEl.addEventListener(\"focusout\", handleFocusOut);\n return () => popoverEl.removeEventListener(\"focusout\", handleFocusOut);\n }, [open, safeClose, referenceElement]);\n\n // Footer and other inner controls have no host Escape hook. Skip when an\n // inner handler already called preventDefault (search / listbox).\n useEffect(() => {\n if (!open) return;\n const popoverEl = ref.current;\n if (!popoverEl) return;\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\" || e.defaultPrevented) return;\n e.preventDefault();\n referenceElement.current?.focus();\n safeClose();\n };\n popoverEl.addEventListener(\"keydown\", handleKeyDown);\n return () => popoverEl.removeEventListener(\"keydown\", handleKeyDown);\n }, [open, safeClose, referenceElement]);\n\n const updatePosition = useCallback(async () => {\n if (!ref.current || !referenceElement.current) return;\n const position = await computePosition(\n referenceElement.current,\n ref.current,\n {\n placement: \"bottom-start\",\n middleware: [\n offset(8),\n autoPlacement({\n allowedPlacements: [\n \"bottom-start\",\n \"bottom-end\",\n \"top-start\",\n \"top-end\",\n ],\n padding: 8,\n }),\n size({\n padding: 8,\n apply({ rects, elements, availableHeight, availableWidth }) {\n const resolved = resolveWidth(width, rects.reference.width);\n Object.assign(elements.floating.style, {\n ...(resolved != null && { width: resolved }),\n maxWidth: `${Math.max(0, availableWidth)}px`,\n maxHeight: `${Math.max(0, availableHeight)}px`,\n });\n },\n }),\n ],\n },\n );\n ref.current.style.left = `${position.x}px`;\n ref.current.style.top = `${position.y}px`;\n }, [ref, referenceElement, width]);\n\n useEffect(() => {\n if (!ref.current || !referenceElement.current || !open) return;\n const cleanup = autoUpdate(\n referenceElement.current,\n ref.current,\n updatePosition,\n );\n return () => {\n cleanup();\n };\n }, [referenceElement, ref, updatePosition, open]);\n\n const portalStyle = usePortalScopeStyle();\n\n return (\n <div\n ref={ref}\n id={id}\n className={cx(styles[\"options-popover\"], portalScopeClassNames)}\n style={portalStyle}\n popover=\"manual\"\n data-anv=\"popover-content\"\n data-anv-part=\"popover\"\n >\n <div className={styles[\"options-popover-body\"]}>{children}</div>\n {footer ? (\n <div className={styles[\"options-popover-footer\"]}>{footer}</div>\n ) : null}\n </div>\n );\n};\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { Flex, type FocusableElement, Text } from \"../../..\";\nimport { DialogCancelButton } from \"../../../components/Dialog/DialogCancelButton\";\nimport styles from \"./OptionsDialog.module.scss\";\nimport Close from \"@servicetitan/hammer-icon/mdi/round/close.svg\";\nimport { DialogContext } from \"../../../components/Dialog/internal/DialogContext\";\nimport { useDialogScrollLock } from \"../..\";\nimport { tabbable } from \"tabbable\";\n\n/**\n * Native modal host for select options. Sizes to the visual viewport.\n */\nexport const OptionsDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n footer,\n}: {\n /** Scroll-lock and dialog identity. */\n id: string;\n /** Calls `showModal` when true and `close` when false. */\n isOpen: boolean;\n /** Escape, the cancel button, and host close paths. */\n onClose: () => void;\n /** Accessible name rendered as the dialog `h1`. */\n title: string;\n /** Optional search/trigger control above the list. */\n field?: React.ReactNode;\n children: React.ReactNode;\n /**\n * Picks initial focus among tabbables. Defaults to the first control that\n * is not the cancel button.\n */\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n /** Optional apply/clear/add-new controls after the list. */\n footer?: React.ReactNode;\n}) => {\n const elRef = useRef<HTMLDialogElement>(null);\n const visualViewportHeightRef = useRef<HTMLDivElement>(null);\n\n useDialogScrollLock({\n open: isOpen,\n id,\n enableScrollChaining: false,\n elementRef: elRef,\n });\n\n const computeFocus = useCallback(\n (focusables: FocusableElement[]) => {\n if (initialFocusResolver) {\n return initialFocusResolver(focusables);\n }\n return (\n focusables.find(\n (focusable) => focusable.dataset.anv !== \"dialog-cancel-button\",\n ) || focusables[0]\n );\n },\n [initialFocusResolver],\n );\n\n useEffect(() => {\n if (isOpen) {\n elRef.current?.showModal();\n if (elRef.current) {\n computeFocus(tabbable(elRef.current)).focus();\n }\n } else {\n elRef.current?.close();\n }\n // `computeFocus` is omitted so a resolver identity change does not re-show or close.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\n // Mobile chrome/keyboard shrinks visualViewport without resizing `window`.\n visualViewportHeightRef.current.style.height = `${window.visualViewport?.height ?? 0}px`;\n visualViewportHeightRef.current.style.maxHeight = `${window.visualViewport?.height ?? 0}px`;\n };\n window.visualViewport?.addEventListener(\"resize\", handleResize);\n return () => {\n window.visualViewport?.removeEventListener(\"resize\", handleResize);\n };\n }\n }, [isOpen]);\n\n return (\n <dialog\n ref={elRef}\n id={id}\n data-anv=\"field-dialog\"\n data-anv-part=\"dialog\"\n className={styles[\"field-dialog\"]}\n onKeyDown={(e) => {\n if (e.code === \"Escape\") {\n // Native dialog would dismiss itself; route close through the host.\n e.preventDefault();\n onClose();\n }\n }}\n >\n <div\n className={styles[\"field-dialog-visual-viewport-height\"]}\n ref={visualViewportHeightRef}\n >\n <Flex direction=\"row\" className={styles[\"header\"]}>\n <Text variant=\"headline\" el=\"h1\">\n {title}\n </Text>\n <span className={styles[\"close-container\"]}>\n <DialogContext.Provider value={{ close: onClose }}>\n <DialogCancelButton\n className={styles[\"close-button\"]}\n size=\"small\"\n appearance=\"ghost\"\n aria-label=\"Close dialog\"\n icon={Close}\n />\n </DialogContext.Provider>\n </span>\n </Flex>\n {field ? (\n <Flex direction=\"column\" className={styles[\"field\"]}>\n {field}\n </Flex>\n ) : null}\n <Flex direction=\"column\" className={styles[\"content\"]}>\n {children}\n </Flex>\n {footer ? <div className={styles[\"footer\"]}>{footer}</div> : null}\n </div>\n </dialog>\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { useBreakpoint } from \"../../../hooks\";\n\n/** Layout mode selected by {@link useAdaptiveView}. */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\nexport interface UseAdaptiveViewReturn {\n /** `\"mobile\"` when `isMobile` is true; otherwise `\"desktop\"`. */\n view: AdaptiveView;\n /** True below the `md` breakpoint when the primary pointer is coarse. */\n isMobile: boolean;\n /** Inverse of `isMobile`. */\n isDesktop: boolean;\n}\n\nfunction detectCoarsePointer(): boolean {\n if (typeof window === \"undefined\" || !window.matchMedia) {\n return false;\n }\n return window.matchMedia(\"(pointer: coarse)\").matches;\n}\n\n/**\n * Selects mobile mode only when the viewport is below `md` and the primary\n * pointer is coarse. Defaults to desktop when pointer detection is unavailable.\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n const mediaQuery = window.matchMedia(\"(pointer: coarse)\");\n const handleChange = (e: MediaQueryListEvent) => {\n setHasCoarsePointer(e.matches);\n };\n\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n const isSmallScreen = !breakpoint?.md;\n const isMobile = isSmallScreen && hasCoarsePointer;\n\n return {\n view: isMobile ? \"mobile\" : \"desktop\",\n isMobile,\n isDesktop: !isMobile,\n };\n}\n","/**\n * Compares option data deeply while keeping functions and React elements\n * identity-sensitive.\n */\nexport function areOptionsValueEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (typeof a !== typeof b || a === null || b === null) {\n return false;\n }\n\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) {\n return false;\n }\n return a.every((item, index) => areOptionsValueEqual(item, b[index]));\n }\n\n if (isPlainObject(a) && isPlainObject(b)) {\n // Treat omitted keys and explicit `undefined` as equivalent.\n const keys = new Set([...Object.keys(a), ...Object.keys(b)]);\n for (const key of keys) {\n if (!areOptionsValueEqual(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n\n return false;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n if (typeof (value as { $$typeof?: unknown }).$$typeof === \"symbol\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n","import { useEffect, useRef } from \"react\";\nimport { areOptionsValueEqual } from \"../functions/areOptionsValueEqual\";\n\ntype InvalidatableHandle = {\n invalidate: () => void;\n};\n\n/**\n * Invalidates a select handle only when option contents change, ignoring the\n * initial mount and reference-only changes.\n */\nexport function useInvalidateOnOptionsChange(\n handleRef: { current: InvalidatableHandle | null },\n options: unknown,\n): void {\n const prevOptionsRef = useRef(options);\n\n useEffect(() => {\n if (areOptionsValueEqual(prevOptionsRef.current, options)) {\n prevOptionsRef.current = options;\n return;\n }\n\n prevOptionsRef.current = options;\n handleRef.current?.invalidate();\n }, [handleRef, options]);\n}\n"],"names":["CheckboxChecked","CheckboxOutline","CheckboxIndeterminate","styles","OptionRow","OptionRowSideContent","Close"],"mappings":"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"}
|
package/dist/{usePopoverTransitionStates-CDXCdyKa.js → usePopoverTransitionStates-B1opfxxn.js}
RENAMED
|
@@ -68,7 +68,6 @@ const useOpenCloseTransitionStates = (openProp, options = {
|
|
|
68
68
|
* tabbable 6.4.0
|
|
69
69
|
* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE
|
|
70
70
|
*/
|
|
71
|
-
|
|
72
71
|
// NOTE: separate `:not()` selectors has broader browser support than the newer
|
|
73
72
|
// `:not([inert], [inert] *)` (Feb 2023)
|
|
74
73
|
var candidateSelectors = ['input:not([inert]):not([inert] *)', 'select:not([inert]):not([inert] *)', 'textarea:not([inert]):not([inert] *)', 'a[href]:not([inert]):not([inert] *)', 'button:not([inert]):not([inert] *)', '[tabindex]:not(slot):not([inert]):not([inert] *)', 'audio[controls]:not([inert]):not([inert] *)', 'video[controls]:not([inert]):not([inert] *)', '[contenteditable]:not([contenteditable="false"]):not([inert]):not([inert] *)', 'details>summary:first-of-type:not([inert]):not([inert] *)', 'details:not([inert]):not([inert] *)'];
|
|
@@ -682,4 +681,4 @@ const usePopoverTransitionStates = (popover, openProp, options = {}) => {
|
|
|
682
681
|
};
|
|
683
682
|
|
|
684
683
|
export { usePopoverTransitionStates as a, isFocusable as b, index_esm as c, focusable as f, getTabIndex as g, isTabbable as i, tabbable as t, useOpenCloseTransitionStates as u };
|
|
685
|
-
//# sourceMappingURL=usePopoverTransitionStates-
|
|
684
|
+
//# sourceMappingURL=usePopoverTransitionStates-B1opfxxn.js.map
|