@servicetitan/anvil2 3.13.1 → 3.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/{AiMark-DkHvwBwf.js → AiMark-ByzCOJ1h.js} +5 -5
- package/dist/{AiMark-DkHvwBwf.js.map → AiMark-ByzCOJ1h.js.map} +1 -1
- package/dist/AiMark.js +1 -1
- package/dist/{Alert-C7Y5DG99.js → Alert-DtU9dbmz.js} +2 -2
- package/dist/{Alert-C7Y5DG99.js.map → Alert-DtU9dbmz.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{AnvilProvider-CgYBk3YP.js → AnvilProvider-DMiXqhL4.js} +3 -3
- package/dist/{AnvilProvider-CgYBk3YP.js.map → AnvilProvider-DMiXqhL4.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Breadcrumbs-d1lHjb_U.js → Breadcrumbs-CIKIEq9H.js} +2 -2
- package/dist/{Breadcrumbs-d1lHjb_U.js.map → Breadcrumbs-CIKIEq9H.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-Db-cjtFN.js → Calendar-C0xoZZge.js} +2 -2
- package/dist/{Calendar-Db-cjtFN.js.map → Calendar-C0xoZZge.js.map} +1 -1
- package/dist/{Calendar-DCyfWmSV.js → Calendar-DG0mwBfm.js} +2 -2
- package/dist/{Calendar-DCyfWmSV.js.map → Calendar-DG0mwBfm.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-CHVDkrNO.js → Checkbox-BmMJ1cZX.js} +2 -2
- package/dist/{Checkbox-CHVDkrNO.js.map → Checkbox-BmMJ1cZX.js.map} +1 -1
- package/dist/{Checkbox-BP2sw3SJ.js → Checkbox-DDGDVzsz.js} +3 -3
- package/dist/{Checkbox-BP2sw3SJ.js.map → Checkbox-DDGDVzsz.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-B3pbD3hQ.js → Chip-DR6fqTHq.js} +2 -2
- package/dist/{Chip-B3pbD3hQ.js.map → Chip-DR6fqTHq.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-Cl_sbvzn.js → DataTable-CNhm17Dh.js} +10 -10
- package/dist/{DataTable-Cl_sbvzn.js.map → DataTable-CNhm17Dh.js.map} +1 -1
- package/dist/{DateFieldRange-DCHAzabV.js → DateFieldRange-CTAVMszB.js} +4 -4
- package/dist/{DateFieldRange-DCHAzabV.js.map → DateFieldRange-CTAVMszB.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-TGaSOGki.js → DateFieldSingle-xpye28Jn.js} +4 -4
- package/dist/{DateFieldSingle-TGaSOGki.js.map → DateFieldSingle-xpye28Jn.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-eKv8F4KX.js → DateFieldYearless-CqjxABxj.js} +4 -4
- package/dist/{DateFieldYearless-eKv8F4KX.js.map → DateFieldYearless-CqjxABxj.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-Cl2pWyFn.js → DateFieldYearlessRange-_633hUT2.js} +3 -3
- package/dist/{DateFieldYearlessRange-Cl2pWyFn.js.map → DateFieldYearlessRange-_633hUT2.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-Dbgb0RsL.js → DaysOfTheWeek-BIA6nA6P.js} +3 -3
- package/dist/{DaysOfTheWeek-Dbgb0RsL.js.map → DaysOfTheWeek-BIA6nA6P.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-Clg6Kd96.js → Dialog-JLZ-kN1_.js} +4 -4
- package/dist/{Dialog-Clg6Kd96.js.map → Dialog-JLZ-kN1_.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-Mnne1lfM.js → Drawer-B-98XNZ_.js} +5 -5
- package/dist/{Drawer-Mnne1lfM.js.map → Drawer-B-98XNZ_.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{EditCard-NAN7IqhO.js → EditCard-Bj-HPjfg.js} +2 -2
- package/dist/{EditCard-NAN7IqhO.js.map → EditCard-Bj-HPjfg.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-DpYGFXmG.js → FieldLabel-D45uUkys.js} +3 -3
- package/dist/{FieldLabel-DpYGFXmG.js.map → FieldLabel-D45uUkys.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/{FilterBar-Dhl_hi_5.js → FilterBar-0CarAaah.js} +6 -6
- package/dist/FilterBar-0CarAaah.js.map +1 -0
- package/dist/FilterBar.js +1 -1
- package/dist/{InputMask-DkT6npDV.js → InputMask-D7xKQiKw.js} +3 -3
- package/dist/{InputMask-DkT6npDV.js.map → InputMask-D7xKQiKw.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-DeA9TBIT.js → ListView-DW5wEyR6.js} +2 -2
- package/dist/{ListView-DeA9TBIT.js.map → ListView-DW5wEyR6.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-qjgO_Hoo.js → Listbox-Nwm29Z0z.js} +2 -2
- package/dist/{Listbox-qjgO_Hoo.js.map → Listbox-Nwm29Z0z.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-CM0EndhK.js → Menu-BjPE_ODh.js} +45 -38
- package/dist/Menu-BjPE_ODh.js.map +1 -0
- package/dist/Menu.css +21 -21
- package/dist/Menu.js +1 -1
- package/dist/Menu.module-CMDgSO9k.js +13 -0
- package/dist/Menu.module-CMDgSO9k.js.map +1 -0
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-D_09Osn3.js → MultiSelectFieldSync-KYwyzshU.js} +6 -6
- package/dist/{MultiSelectFieldSync-D_09Osn3.js.map → MultiSelectFieldSync-KYwyzshU.js.map} +1 -1
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-DkXlWa6p.js → MultiSelectMenuSync-DXnRNK14.js} +4 -4
- package/dist/{MultiSelectMenuSync-DkXlWa6p.js.map → MultiSelectMenuSync-DXnRNK14.js.map} +1 -1
- package/dist/{NumberField-BWRgy-Xq.js → NumberField-B_WHisen.js} +3 -3
- package/dist/{NumberField-BWRgy-Xq.js.map → NumberField-B_WHisen.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/{Page-B-Wjr7sP.js → Page-D6U5W_ek.js} +57 -134
- package/dist/Page-D6U5W_ek.js.map +1 -0
- package/dist/Page.css +87 -95
- package/dist/Page.js +1 -1
- package/dist/{Pagination-DRIKAkuE.js → Pagination-8hkJz0QJ.js} +3 -3
- package/dist/{Pagination-DRIKAkuE.js.map → Pagination-8hkJz0QJ.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover-CVroO0T0.js → Popover-BeAE-h5z.js} +4 -4
- package/dist/{Popover-CVroO0T0.js.map → Popover-BeAE-h5z.js.map} +1 -1
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-Cc6JQ2EH.js → ProgressBar-DJNobbcj.js} +2 -2
- package/dist/{ProgressBar-Cc6JQ2EH.js.map → ProgressBar-DJNobbcj.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-BWEUnuHt.js → Radio-DO89Gm9G.js} +3 -3
- package/dist/{Radio-BWEUnuHt.js.map → Radio-DO89Gm9G.js.map} +1 -1
- package/dist/{Radio-CxPskh2k.js → Radio-QIdbcbHE.js} +2 -2
- package/dist/{Radio-CxPskh2k.js.map → Radio-QIdbcbHE.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{RichTextEditor-B_8D0VD3.js → RichTextEditor-BQNdQfGc.js} +9 -9
- package/dist/{RichTextEditor-B_8D0VD3.js.map → RichTextEditor-BQNdQfGc.js.map} +1 -1
- package/dist/RichTextEditor.js +1 -1
- package/dist/{SavedFiltersButton-vZ38Mty8.js → SavedFiltersButton-CXm73nb9.js} +10 -9
- package/dist/SavedFiltersButton-CXm73nb9.js.map +1 -0
- package/dist/SavedFiltersButton.js +1 -1
- package/dist/{SelectCard-CLQ8X_Xv.js → SelectCard-XRdnzJGg.js} +3 -3
- package/dist/{SelectCard-CLQ8X_Xv.js.map → SelectCard-XRdnzJGg.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-LzRCSbOL.js → SelectFieldLabel-DBW3gWNy.js} +2 -2
- package/dist/{SelectFieldLabel-LzRCSbOL.js.map → SelectFieldLabel-DBW3gWNy.js.map} +1 -1
- package/dist/{SelectFieldSync-klbql5_5.js → SelectFieldSync-BRlVLUx1.js} +5 -5
- package/dist/{SelectFieldSync-klbql5_5.js.map → SelectFieldSync-BRlVLUx1.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-Bn_ksCG5.js → SelectMenuSync-B5IcJFmI.js} +4 -4
- package/dist/{SelectMenuSync-Bn_ksCG5.js.map → SelectMenuSync-B5IcJFmI.js.map} +1 -1
- package/dist/{SelectOptions-BjwYqKH3.js → SelectOptions-B8_ulYXi.js} +2 -2
- package/dist/{SelectOptions-BjwYqKH3.js.map → SelectOptions-B8_ulYXi.js.map} +1 -1
- package/dist/{SelectTrigger-BO9QQqxo.js → SelectTrigger-BGeAJOiy.js} +2 -2
- package/dist/{SelectTrigger-BO9QQqxo.js.map → SelectTrigger-BGeAJOiy.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-CeEaDrSV.js → SelectTriggerBase-IsPdL6xK.js} +3 -3
- package/dist/{SelectTriggerBase-CeEaDrSV.js.map → SelectTriggerBase-IsPdL6xK.js.map} +1 -1
- package/dist/{Switch-CZjpzkol.js → Switch-D4LWmhWZ.js} +2 -2
- package/dist/{Switch-CZjpzkol.js.map → Switch-D4LWmhWZ.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-DdNE3hPR.js → Text-BPlp1ja1.js} +2 -2
- package/dist/{Text-DdNE3hPR.js.map → Text-BPlp1ja1.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-DQ0i2nlz.js → TextField-DrifGXan.js} +2 -2
- package/dist/{TextField-DQ0i2nlz.js.map → TextField-DrifGXan.js.map} +1 -1
- package/dist/{TextField-DkM8v9DE.js → TextField-oF-dTYbB.js} +3 -3
- package/dist/{TextField-DkM8v9DE.js.map → TextField-oF-dTYbB.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-Cg5saqcU.js → Textarea-Bq9AK5w9.js} +3 -3
- package/dist/{Textarea-Cg5saqcU.js.map → Textarea-Bq9AK5w9.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-D4dbBfHd.js → ThemeProvider-Cx7wqUQh.js} +2 -2
- package/dist/{ThemeProvider-D4dbBfHd.js.map → ThemeProvider-Cx7wqUQh.js.map} +1 -1
- package/dist/ThemeProvider.css +20 -4
- package/dist/ThemeProvider.js +1 -1
- package/dist/ThemeProvider.module-ByAsjx7c.js +8 -0
- package/dist/ThemeProvider.module-ByAsjx7c.js.map +1 -0
- package/dist/{TimeField-DVYSA-Az.js → TimeField-BW9PKqWA.js} +4 -4
- package/dist/{TimeField-DVYSA-Az.js.map → TimeField-BW9PKqWA.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-D1a3ysMN.js → Toaster-7AYHdH-v.js} +2 -2
- package/dist/{Toaster-D1a3ysMN.js.map → Toaster-7AYHdH-v.js.map} +1 -1
- package/dist/{Toaster-BiPZIPzH.js → Toaster-Bllufg1v.js} +5 -5
- package/dist/{Toaster-BiPZIPzH.js.map → Toaster-Bllufg1v.js.map} +1 -1
- package/dist/{Toolbar-Dw_xAGRP.js → Toolbar-Bapm516g.js} +4 -4
- package/dist/{Toolbar-Dw_xAGRP.js.map → Toolbar-Bapm516g.js.map} +1 -1
- package/dist/{Toolbar-DYu1UIoW.js → Toolbar-D8uWXitV.js} +5 -5
- package/dist/{Toolbar-DYu1UIoW.js.map → Toolbar-D8uWXitV.js.map} +1 -1
- package/dist/Toolbar.js +2 -2
- package/dist/{ToolbarButtonToggle-0A61CKru.js → ToolbarButtonToggle-L-9HgAbf.js} +2 -2
- package/dist/{ToolbarButtonToggle-0A61CKru.js.map → ToolbarButtonToggle-L-9HgAbf.js.map} +1 -1
- package/dist/{Tooltip-hen6P8WV.js → Tooltip-D4sgiNLd.js} +4 -4
- package/dist/{Tooltip-hen6P8WV.js.map → Tooltip-D4sgiNLd.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/TreeSelectField.js +1 -1
- package/dist/{TreeSelectFieldSync-IFAs-lci.js → TreeSelectFieldSync-Bf4GWDGN.js} +5 -5
- package/dist/{TreeSelectFieldSync-IFAs-lci.js.map → TreeSelectFieldSync-Bf4GWDGN.js.map} +1 -1
- package/dist/TreeSelectMenu.js +1 -1
- package/dist/{TreeSelectMenuSync-BATdOysJ.js → TreeSelectMenuSync-CsB30zKZ.js} +3 -3
- package/dist/{TreeSelectMenuSync-BATdOysJ.js.map → TreeSelectMenuSync-CsB30zKZ.js.map} +1 -1
- package/dist/{TypeaheadTextField-BVtaGlCX.js → TypeaheadTextField-ByvfTXI_.js} +4 -4
- package/dist/{TypeaheadTextField-BVtaGlCX.js.map → TypeaheadTextField-ByvfTXI_.js.map} +1 -1
- package/dist/TypeaheadTextField.js +1 -1
- package/dist/{YearlessDateInputWithPicker-Cs2IQ0ma.js → YearlessDateInputWithPicker-BrECzF1z.js} +2 -2
- package/dist/{YearlessDateInputWithPicker-Cs2IQ0ma.js.map → YearlessDateInputWithPicker-BrECzF1z.js.map} +1 -1
- package/dist/beta.js +17 -17
- package/dist/{bulkActionTypes-B683cPWf.js → bulkActionTypes-Cykjdbzi.js} +2 -2
- package/dist/{bulkActionTypes-B683cPWf.js.map → bulkActionTypes-Cykjdbzi.js.map} +1 -1
- package/dist/{filter-state-ClXbmO_I.js → filter-state-BCYYvluK.js} +30 -30
- package/dist/filter-state-BCYYvluK.js.map +1 -0
- package/dist/filter-state.css +27 -14
- package/dist/{floating-ui.react-dom-CyrxPiI-.js → floating-ui.react-dom-BIKT960u.js} +2 -2
- package/dist/{floating-ui.react-dom-CyrxPiI-.js.map → floating-ui.react-dom-BIKT960u.js.map} +1 -1
- package/dist/{index-tWkeAVJW.js → index-BSX9WOFX.js} +2 -2
- package/dist/{index-tWkeAVJW.js.map → index-BSX9WOFX.js.map} +1 -1
- package/dist/index.js +45 -45
- package/dist/{portalScopeClassNames--sU7fdKW.js → portalScopeClassNames-DR6qlli0.js} +2 -2
- package/dist/{portalScopeClassNames--sU7fdKW.js.map → portalScopeClassNames-DR6qlli0.js.map} +1 -1
- package/dist/src/beta/components/FilterBar/FilterDateList.d.ts +4 -2
- package/dist/src/beta/components/FilterBar/index.d.ts +1 -1
- package/dist/src/beta/components/FilterBar/internal/types.d.ts +15 -0
- package/dist/src/beta/components/Page/Page.d.ts +3 -4
- package/dist/src/beta/components/Page/PageContent.d.ts +2 -4
- package/dist/src/beta/components/Page/pageBreakpoint.d.ts +10 -11
- package/dist/src/components/Menu/internal/menuSelectors.d.ts +4 -0
- package/dist/src/components/Menu/types.d.ts +24 -4
- package/dist/src/integration-testing/beta-page-native-scroll.spec.d.ts +1 -0
- package/dist/{stripInlineMarkdown-Dz6vTyS_.js → stripInlineMarkdown-Vq3E88gC.js} +2 -2
- package/dist/{stripInlineMarkdown-Dz6vTyS_.js.map → stripInlineMarkdown-Vq3E88gC.js.map} +1 -1
- package/dist/{syncFilterUtils-BbK2BCsr.js → syncFilterUtils-DITilMLU.js} +3 -3
- package/dist/{syncFilterUtils-BbK2BCsr.js.map → syncFilterUtils-DITilMLU.js.map} +1 -1
- package/dist/token/core/semantic-variables.scss +16 -0
- package/dist/token/core/semantic.d.ts +8 -0
- package/dist/token/core/semantic.js +104 -0
- package/dist/token/core/semantic.scss +8 -0
- package/dist/token.js +112 -0
- package/dist/token.js.map +1 -1
- package/dist/{treeSync-De2jGdy-.js → treeSync-Du7ryXiO.js} +3 -3
- package/dist/{treeSync-De2jGdy-.js.map → treeSync-Du7ryXiO.js.map} +1 -1
- package/dist/{useDrilldown-BDKQkqA_.js → useDrilldown-Cj1GQ-wc.js} +3 -3
- package/dist/{useDrilldown-BDKQkqA_.js.map → useDrilldown-Cj1GQ-wc.js.map} +1 -1
- package/dist/{useInfiniteCombobox-D7saAttF.js → useInfiniteCombobox-NqrF4TiC.js} +4 -4
- package/dist/{useInfiniteCombobox-D7saAttF.js.map → useInfiniteCombobox-NqrF4TiC.js.map} +1 -1
- package/dist/{useInitialFocus-BIvXK1Rp.js → useInitialFocus-BUxEDMEG.js} +2 -2
- package/dist/{useInitialFocus-BIvXK1Rp.js.map → useInitialFocus-BUxEDMEG.js.map} +1 -1
- package/dist/{useInvalidateOnOptionsChange-DcYuWdMC.js → useInvalidateOnOptionsChange-BdWCXlhy.js} +6 -6
- package/dist/{useInvalidateOnOptionsChange-DcYuWdMC.js.map → useInvalidateOnOptionsChange-BdWCXlhy.js.map} +1 -1
- package/dist/{usePopoverTransitionStates-B1opfxxn.js → usePopoverTransitionStates-CDXCdyKa.js} +2 -1
- package/dist/{usePopoverTransitionStates-B1opfxxn.js.map → usePopoverTransitionStates-CDXCdyKa.js.map} +1 -1
- package/package.json +3 -3
- package/dist/FilterBar-Dhl_hi_5.js.map +0 -1
- package/dist/Menu-CM0EndhK.js.map +0 -1
- package/dist/Menu.module-CoyI86tZ.js +0 -13
- package/dist/Menu.module-CoyI86tZ.js.map +0 -1
- package/dist/Page-B-Wjr7sP.js.map +0 -1
- package/dist/SavedFiltersButton-vZ38Mty8.js.map +0 -1
- package/dist/ThemeProvider.module-_7m6Tav-.js +0 -8
- package/dist/ThemeProvider.module-_7m6Tav-.js.map +0 -1
- package/dist/filter-state-ClXbmO_I.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback, useState, useRef, useEffect } from 'react';
|
|
2
|
-
import { u as useOpenCloseTransitionStates, t as tabbable } from './usePopoverTransitionStates-
|
|
2
|
+
import { u as useOpenCloseTransitionStates, t as tabbable } from './usePopoverTransitionStates-CDXCdyKa.js';
|
|
3
3
|
|
|
4
4
|
const useDialogTransitionStates = (ref, openProp, options = {}) => {
|
|
5
5
|
const { onOpenAnimationStart, onCloseAnimationComplete } = options;
|
|
@@ -228,4 +228,4 @@ const useInitialFocus = (dialogRef, { computeFocus }) => {
|
|
|
228
228
|
};
|
|
229
229
|
|
|
230
230
|
export { useDialogTransitionStates as a, useKeyboardFocusables as b, useInitialFocus as c, useDrillDownContextState as u };
|
|
231
|
-
//# sourceMappingURL=useInitialFocus-
|
|
231
|
+
//# sourceMappingURL=useInitialFocus-BUxEDMEG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInitialFocus-BIvXK1Rp.js","sources":["../src/internal/hooks/useDialogTransitionStates/useDialogTransitionStates.ts","../src/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.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 * Effects configuration for dialog transition states\n * @property {() => void} [onOpenAnimationStart] - Callback when opening animation starts\n * @property {() => void} [onCloseAnimationStart] - Callback when closing animation starts\n * @property {() => void} [onOpenAnimationComplete] - Callback when opening animation completes\n * @property {() => void} [onCloseAnimationComplete] - Callback when closing animation completes\n */\n\n/**\n * Custom hook for managing dialog transition states and animations.\n *\n * Features:\n * - Manages dialog open/close transition states\n * - Handles animation timing based on CSS animation duration\n * - Provides callbacks for animation lifecycle events\n * - Supports controlled dialog state management\n * - Automatically handles showModal() and close() calls\n * - Provides utility flags for open/closed states\n *\n * @param ref - The ref to the dialog element\n * @param openProp - The open prop controlling dialog visibility\n * @param options - Additional, optional options including callbacks for animation start, complete, and initialization\n * @returns Object containing dialog state, control functions, and utility flags\n */\n\n/**\n * Effects configuration for dialog transition states\n * @param openProp - The open prop controlling dialog visibility\n * @param options - The effects configuration\n * @returns The dialog transition state\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, useRef, useState } from \"react\";\nimport { type FocusableElement, tabbable } from \"tabbable\";\n\n/**\n * Options for the useKeyboardFocusables hook\n */\ntype OptionProps =\n | {\n /**\n * Disable mutation observer\n */\n observeChange: false;\n }\n | {\n /**\n * Enable mutation observer with optional configuration\n */\n observeChange: true;\n /**\n * Observe attribute changes\n */\n attributes?: boolean;\n /**\n * Observe text content changes\n */\n characterData?: boolean;\n /**\n * Observe child element changes\n */\n childList?: boolean;\n /**\n * Observe descendant changes\n */\n subtree?: boolean;\n };\n\n/**\n * Custom hook for tracking keyboard focusable elements within a container.\n *\n * Features:\n * - Tracks all keyboard focusable elements within a target container\n * - Supports both ref objects and direct element references\n * - Optional mutation observer for real-time updates\n * - Debounced updates to prevent excessive re-renders\n * - Configurable mutation observer options\n * - Manual update function for immediate refresh\n * - Uses tabbable library for accurate focusable detection\n * - Automatically cleans up mutation observer\n *\n * @param element - Target element or ref to monitor for focusable elements\n * @param options - Configuration options for mutation observer behavior\n * @returns Object containing current focusable elements and update function\n */\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 observerRef = useRef<MutationObserver>();\n\n useEffect(() => {\n const target = element instanceof HTMLElement ? element : element?.current;\n if (!target) return;\n if (!options.observeChange && !focusables) {\n setFocusables(tabbable(target as Element));\n return;\n }\n\n const mutationCallback = () => {\n const targetArr = tabbable(target as Element);\n if (targetArr.length === 0) return;\n setFocusables(targetArr);\n };\n\n const observer = new MutationObserver(mutationCallback);\n observerRef.current = observer;\n observer.observe(target, {\n childList: true, // Observe changes to child elements\n subtree: true, // Observe changes to descendants of the target\n attributes: true, // Observe changes to attributes\n characterData: true, // Observe changes to text content\n });\n return () => {\n observer.disconnect();\n };\n }, [element, options, focusables]);\n\n return { focusables };\n};\n","import { useState, useCallback, useRef, type MutableRefObject } from \"react\";\nimport type { DrillDownContextProps } from \"./DrillDownContext\";\n\nconst getActiveHTMLElement = () => {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n};\n\ntype useDrillDownContextStateParams = {\n defaultDrillDownIndex?: number;\n};\n\nexport function useDrillDownContextState({\n defaultDrillDownIndex = 0,\n}: useDrillDownContextStateParams) {\n const [drillDownIndex, setDrillDownIndex] =\n useState<DrillDownContextProps[\"index\"]>(undefined);\n const [registeredIndices, setRegisteredIndices] = useState<\n DrillDownContextProps[\"registeredIndices\"]\n >([]);\n // Track the drilldown path for back navigation\n const drillDownPath = useRef<number[]>([]);\n const [onClose, setOnClose] = useState<(() => void)[]>([]);\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 // Return focus to the trigger element if we're closing the Drilldown\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 // Set focus ref if the Drilldown is opening for the first time\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n setDrillDownIndex(defaultDrillDownIndex);\n return;\n }\n if (registeredIndices && registeredIndices[drillDownIndex + 1] == null) {\n // Closes the Drilldown if there is no next index\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 // Invalid index, close the Drilldown\n if (\n index == null ||\n index < 0 ||\n (registeredIndices && registeredIndices[index] == null)\n ) {\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n return;\n }\n // Update the drilldown path for back navigation\n if (drillDownIndex === undefined) {\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n } else {\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 if (element == null || hostTriggerFocusRef.current != null) return;\n hostTriggerFocusRef.current = element;\n }, []);\n\n const onHostCloseHandler = useCallback(() => {\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 if (drillDownIndex != null) {\n hasActiveDrillDownRef.current = true;\n }\n\n const setOnCloseForIndex = useCallback(\n (fn: () => void, index: number) => {\n setOnClose((arr) => {\n const nextOnClose = [...arr];\n nextOnClose[index] = () => {\n fn();\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n };\n return nextOnClose;\n });\n },\n [restoreNavigationFocus],\n );\n\n return {\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 /**\n * Function to pick the initial focus target, given an array of focusable elements\n */\n computeFocus?: (focusables: FocusableElement[]) => FocusableElement;\n};\n\n/**\n * Hook to set initial focus for a dialog (e.g. Dialog, Drawer) when it is opened.\n * @param dialogRef - Ref to the dialog element\n * @param options - Options for the hook\n * @param options.computeFocus - Function to pick the initial focus target, given an array of focusable elements\n */\nexport const useInitialFocus = (\n /**\n * Ref to the dialog element\n */\n dialogRef: RefObject<HTMLDialogElement>,\n { computeFocus }: InitialFocusOptions,\n) => {\n useEffect(() => {\n if (!dialogRef.current) {\n return () => {};\n }\n // Create a MutationObserver to check if dialogRef.current is open or closed\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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"}
|
|
1
|
+
{"version":3,"file":"useInitialFocus-BUxEDMEG.js","sources":["../src/internal/hooks/useDialogTransitionStates/useDialogTransitionStates.ts","../src/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.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 * Effects configuration for dialog transition states\n * @property {() => void} [onOpenAnimationStart] - Callback when opening animation starts\n * @property {() => void} [onCloseAnimationStart] - Callback when closing animation starts\n * @property {() => void} [onOpenAnimationComplete] - Callback when opening animation completes\n * @property {() => void} [onCloseAnimationComplete] - Callback when closing animation completes\n */\n\n/**\n * Custom hook for managing dialog transition states and animations.\n *\n * Features:\n * - Manages dialog open/close transition states\n * - Handles animation timing based on CSS animation duration\n * - Provides callbacks for animation lifecycle events\n * - Supports controlled dialog state management\n * - Automatically handles showModal() and close() calls\n * - Provides utility flags for open/closed states\n *\n * @param ref - The ref to the dialog element\n * @param openProp - The open prop controlling dialog visibility\n * @param options - Additional, optional options including callbacks for animation start, complete, and initialization\n * @returns Object containing dialog state, control functions, and utility flags\n */\n\n/**\n * Effects configuration for dialog transition states\n * @param openProp - The open prop controlling dialog visibility\n * @param options - The effects configuration\n * @returns The dialog transition state\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, useRef, useState } from \"react\";\nimport { type FocusableElement, tabbable } from \"tabbable\";\n\n/**\n * Options for the useKeyboardFocusables hook\n */\ntype OptionProps =\n | {\n /**\n * Disable mutation observer\n */\n observeChange: false;\n }\n | {\n /**\n * Enable mutation observer with optional configuration\n */\n observeChange: true;\n /**\n * Observe attribute changes\n */\n attributes?: boolean;\n /**\n * Observe text content changes\n */\n characterData?: boolean;\n /**\n * Observe child element changes\n */\n childList?: boolean;\n /**\n * Observe descendant changes\n */\n subtree?: boolean;\n };\n\n/**\n * Custom hook for tracking keyboard focusable elements within a container.\n *\n * Features:\n * - Tracks all keyboard focusable elements within a target container\n * - Supports both ref objects and direct element references\n * - Optional mutation observer for real-time updates\n * - Debounced updates to prevent excessive re-renders\n * - Configurable mutation observer options\n * - Manual update function for immediate refresh\n * - Uses tabbable library for accurate focusable detection\n * - Automatically cleans up mutation observer\n *\n * @param element - Target element or ref to monitor for focusable elements\n * @param options - Configuration options for mutation observer behavior\n * @returns Object containing current focusable elements and update function\n */\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 observerRef = useRef<MutationObserver>();\n\n useEffect(() => {\n const target = element instanceof HTMLElement ? element : element?.current;\n if (!target) return;\n if (!options.observeChange && !focusables) {\n setFocusables(tabbable(target as Element));\n return;\n }\n\n const mutationCallback = () => {\n const targetArr = tabbable(target as Element);\n if (targetArr.length === 0) return;\n setFocusables(targetArr);\n };\n\n const observer = new MutationObserver(mutationCallback);\n observerRef.current = observer;\n observer.observe(target, {\n childList: true, // Observe changes to child elements\n subtree: true, // Observe changes to descendants of the target\n attributes: true, // Observe changes to attributes\n characterData: true, // Observe changes to text content\n });\n return () => {\n observer.disconnect();\n };\n }, [element, options, focusables]);\n\n return { focusables };\n};\n","import { useState, useCallback, useRef, type MutableRefObject } from \"react\";\nimport type { DrillDownContextProps } from \"./DrillDownContext\";\n\nconst getActiveHTMLElement = () => {\n return document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n};\n\ntype useDrillDownContextStateParams = {\n defaultDrillDownIndex?: number;\n};\n\nexport function useDrillDownContextState({\n defaultDrillDownIndex = 0,\n}: useDrillDownContextStateParams) {\n const [drillDownIndex, setDrillDownIndex] =\n useState<DrillDownContextProps[\"index\"]>(undefined);\n const [registeredIndices, setRegisteredIndices] = useState<\n DrillDownContextProps[\"registeredIndices\"]\n >([]);\n // Track the drilldown path for back navigation\n const drillDownPath = useRef<number[]>([]);\n const [onClose, setOnClose] = useState<(() => void)[]>([]);\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 // Return focus to the trigger element if we're closing the Drilldown\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 // Set focus ref if the Drilldown is opening for the first time\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n setDrillDownIndex(defaultDrillDownIndex);\n return;\n }\n if (registeredIndices && registeredIndices[drillDownIndex + 1] == null) {\n // Closes the Drilldown if there is no next index\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 // Invalid index, close the Drilldown\n if (\n index == null ||\n index < 0 ||\n (registeredIndices && registeredIndices[index] == null)\n ) {\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n return;\n }\n // Update the drilldown path for back navigation\n if (drillDownIndex === undefined) {\n navigationTriggerFocusRef.current = getActiveHTMLElement();\n drillDownPath.current = [];\n } else {\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 if (element == null || hostTriggerFocusRef.current != null) return;\n hostTriggerFocusRef.current = element;\n }, []);\n\n const onHostCloseHandler = useCallback(() => {\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 if (drillDownIndex != null) {\n hasActiveDrillDownRef.current = true;\n }\n\n const setOnCloseForIndex = useCallback(\n (fn: () => void, index: number) => {\n setOnClose((arr) => {\n const nextOnClose = [...arr];\n nextOnClose[index] = () => {\n fn();\n setDrillDownIndex(undefined);\n restoreNavigationFocus();\n };\n return nextOnClose;\n });\n },\n [restoreNavigationFocus],\n );\n\n return {\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 /**\n * Function to pick the initial focus target, given an array of focusable elements\n */\n computeFocus?: (focusables: FocusableElement[]) => FocusableElement;\n};\n\n/**\n * Hook to set initial focus for a dialog (e.g. Dialog, Drawer) when it is opened.\n * @param dialogRef - Ref to the dialog element\n * @param options - Options for the hook\n * @param options.computeFocus - Function to pick the initial focus target, given an array of focusable elements\n */\nexport const useInitialFocus = (\n /**\n * Ref to the dialog element\n */\n dialogRef: RefObject<HTMLDialogElement>,\n { computeFocus }: InitialFocusOptions,\n) => {\n useEffect(() => {\n if (!dialogRef.current) {\n return () => {};\n }\n // Create a MutationObserver to check if dialogRef.current is open or closed\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-DcYuWdMC.js → useInvalidateOnOptionsChange-BdWCXlhy.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-BPlp1ja1.js';
|
|
9
9
|
import { A as Avatar } from './Avatar-DXI-w1Vi.js';
|
|
10
|
-
import { C as Chip } from './Chip-
|
|
10
|
+
import { C as Chip } from './Chip-DR6fqTHq.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
|
|
14
|
-
import { c as computePosition, o as offset, h as autoPlacement,
|
|
13
|
+
import { u as usePortalScopeStyle, p as portalScopeClassNames } from './portalScopeClassNames-DR6qlli0.js';
|
|
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-DBL0aKTK.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-CDXCdyKa.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-BdWCXlhy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInvalidateOnOptionsChange-DcYuWdMC.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 * Returns true when `value` looks like a thenable (Promise or Promise-like).\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 checkState: CheckState;\n className?: string;\n};\n\nconst iconMap = {\n checked: CheckboxChecked,\n unchecked: CheckboxOutline,\n indeterminate: CheckboxIndeterminate,\n} as const;\n\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 disabled?: boolean;\n};\n\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\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 label: string;\n content?: OptionContent;\n children?: ReactNode;\n};\n\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 referenceElement: RefObject<HTMLElement>;\n open: boolean;\n /**\n * Fired when the popover should close (click-outside, focus-out, or\n * Escape). On Escape, the popover restores focus to `referenceElement`\n * before invoking this callback; for other paths focus has already moved\n * elsewhere intentionally.\n */\n onClose: () => void;\n /** Controls the popover width strategy.\n * - `\"reference\"` — match the reference element's width\n * - `number` — fixed width in px\n * - `string` — any CSS width value (e.g. `\"20rem\"`)\n * - `undefined` (default) — intrinsic sizing (`max-content`)\n */\n width?: \"reference\" | number | string;\n /**\n * Optional content rendered as a full-bleed footer region inside the popover\n * shell, separated from the body by a top border. The popover suppresses its\n * own bottom padding so the footer can hug the popover's lower edge.\n */\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\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 // Close on Escape from anywhere inside the popover (e.g. when focus is on\n // the footer button, where no host hook is listening). Focus is restored to\n // the reference element before onClose fires so consumers don't need to\n // manage trigger focus themselves. If a downstream handler (search input,\n // listbox) already handled Escape and called preventDefault, defer to it.\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\nexport const OptionsDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n footer,\n}: {\n id: string;\n isOpen: boolean;\n onClose: () => void;\n title: string;\n field?: React.ReactNode;\n children: React.ReactNode;\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n /** Optional content rendered below the dialog body. */\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 // eslint-disable-next-line react-hooks/exhaustive-deps -- Omitting computeFocus because we don't want to show/close the dialog on computeFocus change\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\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 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/**\n * The type of view to render based on device characteristics.\n */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\n/**\n * Return type for the useAdaptiveView hook.\n */\nexport interface UseAdaptiveViewReturn {\n /**\n * The current adaptive view type.\n */\n view: AdaptiveView;\n /**\n * True when the device should use mobile-optimized UI (Dialog).\n */\n isMobile: boolean;\n /**\n * True when the device should use desktop-optimized UI (Popover).\n */\n isDesktop: boolean;\n}\n\n/**\n * Detects whether the primary pointer is coarse (touch) using CSS media query.\n * Returns false during SSR or when matchMedia is unavailable.\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 * Custom hook for detecting whether to use mobile or desktop UI patterns.\n *\n * This hook determines the optimal UI pattern (e.g., Dialog vs Popover) by combining:\n * - Screen size via useBreakpoint (viewport width)\n * - Pointer precision via CSS media query (pointer: coarse)\n *\n * A device is considered \"mobile\" when it has both:\n * - A small screen (below md breakpoint, < 768px)\n * - A coarse pointer (touch-primary input)\n *\n * This approach correctly identifies:\n * - Mobile phones → mobile view (Dialog)\n * - iPads/tablets → desktop view (Popover) due to larger screens\n * - Touch laptops → desktop view (Popover) due to fine pointer primary\n * - Desktop → desktop view (Popover)\n *\n * @returns Object containing view type and boolean flags for mobile/desktop\n *\n * @example\n * const { isMobile } = useAdaptiveView();\n *\n * return isMobile ? (\n * <Dialog>{children}</Dialog>\n * ) : (\n * <Popover>{children}</Popover>\n * );\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n // Listen for pointer capability changes (e.g., connecting/disconnecting a mouse)\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 * Deep value equality for select option lists (and nested tree nodes).\n *\n * Compares arrays and plain objects by contents so a new array/object identity\n * with the same data is treated as unchanged. Functions and React elements are\n * compared by reference.\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 // Missing keys and explicit `undefined` are equal so spreads / defaults\n // like `{ ...option, disabled: undefined }` do not look like a change.\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 // React elements and other exotic objects should not be walked.\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 field/menu when its `options` *contents* change.\n *\n * A new array (or tree) identity with the same data does not invalidate, so\n * consumers can pass inline option literals without triggering a reload.\n *\n * @param handleRef Ref to an imperative handle that exposes `invalidate`\n * @param options The current options value (flat list or tree)\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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"}
|
|
1
|
+
{"version":3,"file":"useInvalidateOnOptionsChange-BdWCXlhy.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 * Returns true when `value` looks like a thenable (Promise or Promise-like).\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 checkState: CheckState;\n className?: string;\n};\n\nconst iconMap = {\n checked: CheckboxChecked,\n unchecked: CheckboxOutline,\n indeterminate: CheckboxIndeterminate,\n} as const;\n\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 disabled?: boolean;\n};\n\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\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 label: string;\n content?: OptionContent;\n children?: ReactNode;\n};\n\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 referenceElement: RefObject<HTMLElement>;\n open: boolean;\n /**\n * Fired when the popover should close (click-outside, focus-out, or\n * Escape). On Escape, the popover restores focus to `referenceElement`\n * before invoking this callback; for other paths focus has already moved\n * elsewhere intentionally.\n */\n onClose: () => void;\n /** Controls the popover width strategy.\n * - `\"reference\"` — match the reference element's width\n * - `number` — fixed width in px\n * - `string` — any CSS width value (e.g. `\"20rem\"`)\n * - `undefined` (default) — intrinsic sizing (`max-content`)\n */\n width?: \"reference\" | number | string;\n /**\n * Optional content rendered as a full-bleed footer region inside the popover\n * shell, separated from the body by a top border. The popover suppresses its\n * own bottom padding so the footer can hug the popover's lower edge.\n */\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\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 // Close on Escape from anywhere inside the popover (e.g. when focus is on\n // the footer button, where no host hook is listening). Focus is restored to\n // the reference element before onClose fires so consumers don't need to\n // manage trigger focus themselves. If a downstream handler (search input,\n // listbox) already handled Escape and called preventDefault, defer to it.\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\nexport const OptionsDialog = ({\n id,\n isOpen,\n onClose,\n field,\n children,\n title,\n initialFocusResolver,\n footer,\n}: {\n id: string;\n isOpen: boolean;\n onClose: () => void;\n title: string;\n field?: React.ReactNode;\n children: React.ReactNode;\n initialFocusResolver?: (focusables: FocusableElement[]) => FocusableElement;\n /** Optional content rendered below the dialog body. */\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 // eslint-disable-next-line react-hooks/exhaustive-deps -- Omitting computeFocus because we don't want to show/close the dialog on computeFocus change\n }, [isOpen]);\n\n useEffect(() => {\n if (isOpen) {\n const handleResize = () => {\n if (!visualViewportHeightRef.current) return;\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 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/**\n * The type of view to render based on device characteristics.\n */\nexport type AdaptiveView = \"mobile\" | \"desktop\";\n\n/**\n * Return type for the useAdaptiveView hook.\n */\nexport interface UseAdaptiveViewReturn {\n /**\n * The current adaptive view type.\n */\n view: AdaptiveView;\n /**\n * True when the device should use mobile-optimized UI (Dialog).\n */\n isMobile: boolean;\n /**\n * True when the device should use desktop-optimized UI (Popover).\n */\n isDesktop: boolean;\n}\n\n/**\n * Detects whether the primary pointer is coarse (touch) using CSS media query.\n * Returns false during SSR or when matchMedia is unavailable.\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 * Custom hook for detecting whether to use mobile or desktop UI patterns.\n *\n * This hook determines the optimal UI pattern (e.g., Dialog vs Popover) by combining:\n * - Screen size via useBreakpoint (viewport width)\n * - Pointer precision via CSS media query (pointer: coarse)\n *\n * A device is considered \"mobile\" when it has both:\n * - A small screen (below md breakpoint, < 768px)\n * - A coarse pointer (touch-primary input)\n *\n * This approach correctly identifies:\n * - Mobile phones → mobile view (Dialog)\n * - iPads/tablets → desktop view (Popover) due to larger screens\n * - Touch laptops → desktop view (Popover) due to fine pointer primary\n * - Desktop → desktop view (Popover)\n *\n * @returns Object containing view type and boolean flags for mobile/desktop\n *\n * @example\n * const { isMobile } = useAdaptiveView();\n *\n * return isMobile ? (\n * <Dialog>{children}</Dialog>\n * ) : (\n * <Popover>{children}</Popover>\n * );\n */\nexport function useAdaptiveView(): UseAdaptiveViewReturn {\n const breakpoint = useBreakpoint();\n const [hasCoarsePointer, setHasCoarsePointer] = useState(detectCoarsePointer);\n\n useEffect(() => {\n setHasCoarsePointer(detectCoarsePointer());\n\n // Listen for pointer capability changes (e.g., connecting/disconnecting a mouse)\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 * Deep value equality for select option lists (and nested tree nodes).\n *\n * Compares arrays and plain objects by contents so a new array/object identity\n * with the same data is treated as unchanged. Functions and React elements are\n * compared by reference.\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 // Missing keys and explicit `undefined` are equal so spreads / defaults\n // like `{ ...option, disabled: undefined }` do not look like a change.\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 // React elements and other exotic objects should not be walked.\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 field/menu when its `options` *contents* change.\n *\n * A new array (or tree) identity with the same data does not invalidate, so\n * consumers can pass inline option literals without triggering a reload.\n *\n * @param handleRef Ref to an imperative handle that exposes `invalidate`\n * @param options The current options value (flat list or tree)\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-B1opfxxn.js → usePopoverTransitionStates-CDXCdyKa.js}
RENAMED
|
@@ -68,6 +68,7 @@ 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
|
+
|
|
71
72
|
// NOTE: separate `:not()` selectors has broader browser support than the newer
|
|
72
73
|
// `:not([inert], [inert] *)` (Feb 2023)
|
|
73
74
|
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] *)'];
|
|
@@ -681,4 +682,4 @@ const usePopoverTransitionStates = (popover, openProp, options = {}) => {
|
|
|
681
682
|
};
|
|
682
683
|
|
|
683
684
|
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 };
|
|
684
|
-
//# sourceMappingURL=usePopoverTransitionStates-
|
|
685
|
+
//# sourceMappingURL=usePopoverTransitionStates-CDXCdyKa.js.map
|