@servicetitan/anvil2 2.7.0 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/{Avatar-CCnbKkCm.js → Avatar-BckUfs1N.js} +48 -46
- package/dist/{Avatar-CCnbKkCm.js.map → Avatar-BckUfs1N.js.map} +1 -1
- package/dist/Avatar-ChybzixS.js +35 -0
- package/dist/Avatar-ChybzixS.js.map +1 -0
- package/dist/Avatar.js +2 -2
- package/dist/Breadcrumbs-C_WK9Yul.js +107 -0
- package/dist/Breadcrumbs-C_WK9Yul.js.map +1 -0
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Calendar-C1U2npPP.js → Calendar-BTStJPV1.js} +2 -2
- package/dist/{Calendar-C1U2npPP.js.map → Calendar-BTStJPV1.js.map} +1 -1
- package/dist/{Calendar-SGlTt-bs.js → Calendar-Frpv5rRY.js} +129 -118
- package/dist/Calendar-Frpv5rRY.js.map +1 -0
- package/dist/Calendar.css +51 -51
- package/dist/Calendar.js +2 -2
- package/dist/Checkbox-CTZdZym4.js +52 -0
- package/dist/Checkbox-CTZdZym4.js.map +1 -0
- package/dist/{Checkbox-CtKUNeyu.js → Checkbox-Drgai_lS.js} +3 -3
- package/dist/{Checkbox-CtKUNeyu.js.map → Checkbox-Drgai_lS.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Chip-DjTAR0va.js → Chip-CVyEctAz.js} +2 -2
- package/dist/{Chip-DjTAR0va.js.map → Chip-CVyEctAz.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-By8-34bw.js → Combobox-BRtfrYyZ.js} +185 -182
- package/dist/{Combobox-By8-34bw.js.map → Combobox-BRtfrYyZ.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-BYOS6icI.js → DataTable-BmVPjMMg.js} +667 -622
- package/dist/DataTable-BmVPjMMg.js.map +1 -0
- package/dist/{DateFieldRange-C8Uzrboc.js → DateFieldRange-D9DtlkSQ.js} +19 -5
- package/dist/DateFieldRange-D9DtlkSQ.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-DrhLIjlK.js → DateFieldSingle-CkdeCUJv.js} +7 -7
- package/dist/{DateFieldSingle-DrhLIjlK.js.map → DateFieldSingle-CkdeCUJv.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-DbivK4Hm.js → DateFieldYearless-b81ZcYdp.js} +3 -3
- package/dist/{DateFieldYearless-DbivK4Hm.js.map → DateFieldYearless-b81ZcYdp.js.map} +1 -1
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange-BEqJe4Uf.js → DateFieldYearlessRange-ClAFzIDD.js} +3 -3
- package/dist/{DateFieldYearlessRange-BEqJe4Uf.js.map → DateFieldYearlessRange-ClAFzIDD.js.map} +1 -1
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-BR32AA32.js → DaysOfTheWeek-2Zeh79oR.js} +3 -3
- package/dist/{DaysOfTheWeek-BR32AA32.js.map → DaysOfTheWeek-2Zeh79oR.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-Dxq_v3Qg.js → Details-CZOIpNP_.js} +8 -8
- package/dist/Details-CZOIpNP_.js.map +1 -0
- package/dist/Details.js +1 -1
- package/dist/{Dialog-CGhwkwvq.js → Dialog-CloZWa1Q.js} +71 -71
- package/dist/Dialog-CloZWa1Q.js.map +1 -0
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-DA4iAgt-.js → Drawer-CfkoH081.js} +84 -84
- package/dist/Drawer-CfkoH081.js.map +1 -0
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{FieldLabel-DbMosKtd.js → FieldLabel-CQ5QGTVq.js} +2 -2
- package/dist/{FieldLabel-DbMosKtd.js.map → FieldLabel-CQ5QGTVq.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/Grid-DeYIx5k4.js +149 -0
- package/dist/Grid-DeYIx5k4.js.map +1 -0
- package/dist/Grid.js +1 -1
- package/dist/{InputMask-HjaNCb73.js → InputMask-CI4Q5UwG.js} +3 -3
- package/dist/{InputMask-HjaNCb73.js.map → InputMask-CI4Q5UwG.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{Layout-VfhlilMG.js → Layout-CISAxILX.js} +34 -33
- package/dist/Layout-CISAxILX.js.map +1 -0
- package/dist/Layout.js +1 -1
- package/dist/List--KhCpjZn.js +103 -0
- package/dist/List--KhCpjZn.js.map +1 -0
- package/dist/List.js +1 -1
- package/dist/{ListView-mujFK6mQ.js → ListView-DAbBuss4.js} +6 -6
- package/dist/ListView-DAbBuss4.js.map +1 -0
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-BtAgBDRS.js → Listbox-D_T55BFX.js} +5 -4
- package/dist/Listbox-D_T55BFX.js.map +1 -0
- package/dist/Listbox.js +1 -1
- package/dist/{Menu-BXsmCP20.js → Menu-CRoJYJ53.js} +366 -365
- package/dist/Menu-CRoJYJ53.js.map +1 -0
- package/dist/Menu.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-DGpGgu8q.js → MultiSelectFieldSync-CSOitvtu.js} +5 -5
- package/dist/{MultiSelectFieldSync-DGpGgu8q.js.map → MultiSelectFieldSync-CSOitvtu.js.map} +1 -1
- package/dist/MultiSelectMenu.js +1 -1
- package/dist/{MultiSelectMenuSync-DiLddJDw.js → MultiSelectMenuSync-62OeGmkz.js} +29 -9
- package/dist/MultiSelectMenuSync-62OeGmkz.js.map +1 -0
- package/dist/{NumberField-svhZp1kB.js → NumberField-CHBXBMSj.js} +2 -2
- package/dist/{NumberField-svhZp1kB.js.map → NumberField-CHBXBMSj.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.css +27 -26
- package/dist/Overflow.js +11 -11
- package/dist/{Page-Be029Dij.js → Page-DtSjnBJL.js} +217 -205
- package/dist/Page-DtSjnBJL.js.map +1 -0
- package/dist/Page.css +78 -76
- package/dist/Page.js +1 -1
- package/dist/{Pagination-BAwqfl_2.js → Pagination-CbBte3GQ.js} +17 -15
- package/dist/Pagination-CbBte3GQ.js.map +1 -0
- package/dist/Pagination.js +1 -1
- package/dist/Popover-CQhLSNYR.js +537 -0
- package/dist/Popover-CQhLSNYR.js.map +1 -0
- package/dist/{Popover-D0qSKZ1J.js → Popover-Rha0q-Pv.js} +354 -354
- package/dist/Popover-Rha0q-Pv.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-JpRDW5vG.js → ProgressBar-DEaMqbM-.js} +2 -2
- package/dist/{ProgressBar-JpRDW5vG.js.map → ProgressBar-DEaMqbM-.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-BQg7exDG.js → Radio-Bw2LDl9G.js} +3 -3
- package/dist/{Radio-BQg7exDG.js.map → Radio-Bw2LDl9G.js.map} +1 -1
- package/dist/Radio-CCvu8mbI.js +60 -0
- package/dist/Radio-CCvu8mbI.js.map +1 -0
- package/dist/Radio.js +1 -1
- package/dist/{SegmentedControl-7fDLhgvh.js → SegmentedControl-BAi4pnFe.js} +79 -75
- package/dist/{SegmentedControl-7fDLhgvh.js.map → SegmentedControl-BAi4pnFe.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/SelectCard-ZaAD0wR1.js +325 -0
- package/dist/SelectCard-ZaAD0wR1.js.map +1 -0
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldLabel-Dr8HeW3N.js → SelectFieldLabel-EJCXA02B.js} +2 -2
- package/dist/{SelectFieldLabel-Dr8HeW3N.js.map → SelectFieldLabel-EJCXA02B.js.map} +1 -1
- package/dist/{SelectFieldSync-CJ2Ie_v1.js → SelectFieldSync-DA54WXOk.js} +4 -4
- package/dist/{SelectFieldSync-CJ2Ie_v1.js.map → SelectFieldSync-DA54WXOk.js.map} +1 -1
- package/dist/SelectMenu.js +1 -1
- package/dist/{SelectMenuSync-CJA_coqD.js → SelectMenuSync-BQaSTcaN.js} +29 -9
- package/dist/SelectMenuSync-BQaSTcaN.js.map +1 -0
- package/dist/{SelectOptions-Bf4xsFek.js → SelectOptions-D-DzWmKE.js} +2 -2
- package/dist/{SelectOptions-Bf4xsFek.js.map → SelectOptions-D-DzWmKE.js.map} +1 -1
- package/dist/{SelectTrigger-ObsnAKNp.js → SelectTrigger-DWyRndmY.js} +3 -3
- package/dist/{SelectTrigger-ObsnAKNp.js.map → SelectTrigger-DWyRndmY.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-DKfOL2RJ.js → SelectTriggerBase-B6aZd2a6.js} +3 -3
- package/dist/{SelectTriggerBase-DKfOL2RJ.js.map → SelectTriggerBase-B6aZd2a6.js.map} +1 -1
- package/dist/{SideNav-KksbSQn7.js → SideNav-CxHemV3H.js} +127 -125
- package/dist/{SideNav-KksbSQn7.js.map → SideNav-CxHemV3H.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/{Stepper-Dt8_ImvJ.js → Stepper-CQUXV6P4.js} +156 -156
- package/dist/{Stepper-Dt8_ImvJ.js.map → Stepper-CQUXV6P4.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Tab-DO7LaUbw.js → Tab-BGGNcz9S.js} +225 -221
- package/dist/Tab-BGGNcz9S.js.map +1 -0
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{TextField-BW8sJAls.js → TextField-CMv9CpBq.js} +2 -2
- package/dist/{TextField-BW8sJAls.js.map → TextField-CMv9CpBq.js.map} +1 -1
- package/dist/{TextField-DeHpgPag.js → TextField-o8zvVFDk.js} +2 -2
- package/dist/{TextField-DeHpgPag.js.map → TextField-o8zvVFDk.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-DyqdMTvQ.js → Textarea-B4bBvO8c.js} +2 -2
- package/dist/{Textarea-DyqdMTvQ.js.map → Textarea-B4bBvO8c.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-Dc0Y1JD-.js → TimeField-BEgnjk4R.js} +4 -4
- package/dist/{TimeField-Dc0Y1JD-.js.map → TimeField-BEgnjk4R.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-b0-Ub3yt.js → Toaster-6_LVKok2.js} +2 -2
- package/dist/{Toaster-b0-Ub3yt.js.map → Toaster-6_LVKok2.js.map} +1 -1
- package/dist/{Toaster-DikGo_hR.js → Toaster-B38WlKC7.js} +2 -2
- package/dist/{Toaster-DikGo_hR.js.map → Toaster-B38WlKC7.js.map} +1 -1
- package/dist/{Toolbar-DAuz4Gs2.js → Toolbar-0EKhrvZN.js} +148 -147
- package/dist/{Toolbar-DAuz4Gs2.js.map → Toolbar-0EKhrvZN.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-Bupqao9B.js → Tooltip-BHwSTwsv.js} +224 -226
- package/dist/Tooltip-BHwSTwsv.js.map +1 -0
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-DFi08TLG.js → YearlessDateInputWithPicker-BC4lRuny.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-DFi08TLG.js.map → YearlessDateInputWithPicker-BC4lRuny.js.map} +1 -1
- package/dist/beta/components/MultiSelectMenu/types.d.ts +15 -0
- package/dist/beta/components/SelectMenu/internal/useMenuInteraction.d.ts +3 -1
- package/dist/beta/components/SelectMenu/types.d.ts +15 -0
- package/dist/beta/components/Table/DataTable/DataTable.d.ts +2 -15
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectAsyncCell.d.ts +35 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableMultiselectCell.d.ts +4 -3
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableSelectAsyncCell.d.ts +7 -0
- package/dist/beta/components/Table/DataTable/internal/editable-cells/useEditableMenuCell.d.ts +34 -0
- package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +2 -4
- package/dist/beta/components/Table/DataTable/types.d.ts +18 -1
- package/dist/beta/components/Table/createColumnHelper.d.ts +23 -68
- package/dist/beta/components/Table/types.d.ts +218 -42
- package/dist/beta/components/Toolbar/Toolbar.d.ts +168 -41
- package/dist/beta.js +9 -9
- package/dist/components/Avatar/Avatar.d.ts +14 -0
- package/dist/components/Calendar/Calendar.d.ts +84 -26
- package/dist/components/Combobox/Combobox.d.ts +172 -1
- package/dist/components/Dialog/Dialog.d.ts +96 -28
- package/dist/components/DrillDown/DrillDown.d.ts +7 -1
- package/dist/components/Layout/Layout.d.ts +52 -44
- package/dist/components/ListView/ListView.d.ts +5 -5
- package/dist/components/Listbox/Listbox.d.ts +5 -23
- package/dist/components/Menu/Menu.d.ts +1 -4
- package/dist/components/Toolbar/Toolbar.d.ts +3 -1
- package/dist/{floating-ui.react-C_s3_nEb.js → floating-ui.react-aKYfs-aw.js} +2 -2
- package/dist/{floating-ui.react-C_s3_nEb.js.map → floating-ui.react-aKYfs-aw.js.map} +1 -1
- package/dist/{index.esm-BZV0wNKZ.js → index.esm-K9kxJhLx.js} +2 -1
- package/dist/{index.esm-BZV0wNKZ.js.map → index.esm-K9kxJhLx.js.map} +1 -1
- package/dist/index.js +126 -126
- package/dist/index.js.map +1 -1
- package/dist/{syncFilterUtils-vt8ldsES.js → syncFilterUtils-B03Pc941.js} +191 -191
- package/dist/{syncFilterUtils-vt8ldsES.js.map → syncFilterUtils-B03Pc941.js.map} +1 -1
- package/dist/{useDrilldown-wwXRpNgb.js → useDrilldown-BW2XkUcK.js} +41 -39
- package/dist/{useDrilldown-wwXRpNgb.js.map → useDrilldown-BW2XkUcK.js.map} +1 -1
- package/dist/{useInitialFocus-CdoVwSbr.js → useInitialFocus-BRRbylek.js} +2 -2
- package/dist/{useInitialFocus-CdoVwSbr.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
- package/dist/{useMenuInteraction-zR_78KQC.js → useMenuInteraction-BwZ2ORo9.js} +8 -3
- package/dist/useMenuInteraction-BwZ2ORo9.js.map +1 -0
- package/dist/{useToggleSelection-BdXW3Zg3.js → useToggleSelection-Dip0eimQ.js} +2 -2
- package/dist/{useToggleSelection-BdXW3Zg3.js.map → useToggleSelection-Dip0eimQ.js.map} +1 -1
- package/package.json +3 -3
- package/dist/Avatar--CnTAnfD.js +0 -35
- package/dist/Avatar--CnTAnfD.js.map +0 -1
- package/dist/Breadcrumbs-3Y7jnj-F.js +0 -105
- package/dist/Breadcrumbs-3Y7jnj-F.js.map +0 -1
- package/dist/Calendar-SGlTt-bs.js.map +0 -1
- package/dist/Checkbox-CjEKa5Iv.js +0 -50
- package/dist/Checkbox-CjEKa5Iv.js.map +0 -1
- package/dist/DataTable-BYOS6icI.js.map +0 -1
- package/dist/DateFieldRange-C8Uzrboc.js.map +0 -1
- package/dist/Details-Dxq_v3Qg.js.map +0 -1
- package/dist/Dialog-CGhwkwvq.js.map +0 -1
- package/dist/Drawer-DA4iAgt-.js.map +0 -1
- package/dist/Grid-ONcUpb__.js +0 -147
- package/dist/Grid-ONcUpb__.js.map +0 -1
- package/dist/Layout-VfhlilMG.js.map +0 -1
- package/dist/List-CJZjElAQ.js +0 -101
- package/dist/List-CJZjElAQ.js.map +0 -1
- package/dist/ListView-mujFK6mQ.js.map +0 -1
- package/dist/Listbox-BtAgBDRS.js.map +0 -1
- package/dist/Menu-BXsmCP20.js.map +0 -1
- package/dist/MultiSelectMenuSync-DiLddJDw.js.map +0 -1
- package/dist/Page-Be029Dij.js.map +0 -1
- package/dist/Pagination-BAwqfl_2.js.map +0 -1
- package/dist/Popover-D0qSKZ1J.js.map +0 -1
- package/dist/Popover-DxZF6lbJ.js +0 -535
- package/dist/Popover-DxZF6lbJ.js.map +0 -1
- package/dist/Radio-BOq9UkpC.js +0 -60
- package/dist/Radio-BOq9UkpC.js.map +0 -1
- package/dist/SelectCard-cu4MBuh8.js +0 -320
- package/dist/SelectCard-cu4MBuh8.js.map +0 -1
- package/dist/SelectMenuSync-CJA_coqD.js.map +0 -1
- package/dist/Tab-DO7LaUbw.js.map +0 -1
- package/dist/Tooltip-Bupqao9B.js.map +0 -1
- package/dist/useMenuInteraction-zR_78KQC.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useState, useRef, useEffect } from 'react';
|
|
2
2
|
import { u as useOpenCloseTransitionStates } from './useOpenCloseTransitionStates-CiTYrLGi.js';
|
|
3
|
-
import { t as tabbable } from './index.esm-
|
|
3
|
+
import { t as tabbable } from './index.esm-K9kxJhLx.js';
|
|
4
4
|
|
|
5
5
|
const useDialogTransitionStates = (ref, openProp, options = {}) => {
|
|
6
6
|
const { onOpenAnimationStart, onCloseAnimationComplete } = options;
|
|
@@ -187,4 +187,4 @@ const useInitialFocus = (dialogRef, { computeFocus }) => {
|
|
|
187
187
|
};
|
|
188
188
|
|
|
189
189
|
export { useDialogTransitionStates as a, useKeyboardFocusables as b, useInitialFocus as c, useDrillDownContextState as u };
|
|
190
|
-
//# sourceMappingURL=useInitialFocus-
|
|
190
|
+
//# sourceMappingURL=useInitialFocus-BRRbylek.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInitialFocus-CdoVwSbr.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 { 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 { RefObject, useEffect, useRef, useState } from \"react\";\nimport { 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 } from \"react\";\nimport { DrillDownContextProps } from \"./DrillDownContext\";\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 // focus ref for the action that called the Drilldown to open\n const triggerFocusRef = useRef<HTMLElement | null>(null);\n\n const restoreFocus = useCallback(() => {\n requestAnimationFrame(() => {\n triggerFocusRef.current?.focus();\n triggerFocusRef.current = null;\n });\n }, [triggerFocusRef]);\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 && triggerFocusRef.current) {\n setDrillDownIndex(undefined);\n restoreFocus();\n return;\n }\n setDrillDownIndex(newIndex);\n }, [setDrillDownIndex, drillDownPath, restoreFocus]);\n\n const next = useCallback(() => {\n if (drillDownIndex == null) {\n // Set focus ref if the Drilldown is opening for the first time\n triggerFocusRef.current = document.activeElement as HTMLElement;\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 restoreFocus();\n return;\n }\n drillDownPath.current.push(drillDownIndex);\n setDrillDownIndex(drillDownIndex + 1);\n }, [\n drillDownIndex,\n setDrillDownIndex,\n defaultDrillDownIndex,\n drillDownPath,\n registeredIndices,\n restoreFocus,\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 restoreFocus();\n return;\n }\n // Update the drilldown path for back navigation\n if (drillDownIndex === undefined) {\n triggerFocusRef.current = document.activeElement as HTMLElement;\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 restoreFocus,\n ],\n );\n\n const setOnCloseForIndex = useCallback(\n (fn: () => void, index: number) => {\n setOnClose((arr) => {\n arr[index] = () => {\n fn();\n setDrillDownIndex(undefined);\n restoreFocus();\n };\n return arr;\n });\n },\n [restoreFocus],\n );\n\n return {\n index: drillDownIndex,\n setIndex: setIndexWithinBounds,\n back,\n next,\n registeredIndices,\n setRegisteredIndices,\n onClose,\n setOnClose: setOnCloseForIndex,\n };\n}\n","import { RefObject, useEffect } from \"react\";\nimport { 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-BRRbylek.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 { 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 { RefObject, useEffect, useRef, useState } from \"react\";\nimport { 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 } from \"react\";\nimport { DrillDownContextProps } from \"./DrillDownContext\";\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 // focus ref for the action that called the Drilldown to open\n const triggerFocusRef = useRef<HTMLElement | null>(null);\n\n const restoreFocus = useCallback(() => {\n requestAnimationFrame(() => {\n triggerFocusRef.current?.focus();\n triggerFocusRef.current = null;\n });\n }, [triggerFocusRef]);\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 && triggerFocusRef.current) {\n setDrillDownIndex(undefined);\n restoreFocus();\n return;\n }\n setDrillDownIndex(newIndex);\n }, [setDrillDownIndex, drillDownPath, restoreFocus]);\n\n const next = useCallback(() => {\n if (drillDownIndex == null) {\n // Set focus ref if the Drilldown is opening for the first time\n triggerFocusRef.current = document.activeElement as HTMLElement;\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 restoreFocus();\n return;\n }\n drillDownPath.current.push(drillDownIndex);\n setDrillDownIndex(drillDownIndex + 1);\n }, [\n drillDownIndex,\n setDrillDownIndex,\n defaultDrillDownIndex,\n drillDownPath,\n registeredIndices,\n restoreFocus,\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 restoreFocus();\n return;\n }\n // Update the drilldown path for back navigation\n if (drillDownIndex === undefined) {\n triggerFocusRef.current = document.activeElement as HTMLElement;\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 restoreFocus,\n ],\n );\n\n const setOnCloseForIndex = useCallback(\n (fn: () => void, index: number) => {\n setOnClose((arr) => {\n arr[index] = () => {\n fn();\n setDrillDownIndex(undefined);\n restoreFocus();\n };\n return arr;\n });\n },\n [restoreFocus],\n );\n\n return {\n index: drillDownIndex,\n setIndex: setIndexWithinBounds,\n back,\n next,\n registeredIndices,\n setRegisteredIndices,\n onClose,\n setOnClose: setOnCloseForIndex,\n };\n}\n","import { RefObject, useEffect } from \"react\";\nimport { 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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"}
|
|
@@ -10,7 +10,9 @@ const useMenuInteraction = ({
|
|
|
10
10
|
disabled = false,
|
|
11
11
|
id,
|
|
12
12
|
triggerRef,
|
|
13
|
-
label
|
|
13
|
+
label,
|
|
14
|
+
onImplicitClose,
|
|
15
|
+
onExplicitClose
|
|
14
16
|
}) => {
|
|
15
17
|
const [isOpen, setIsOpen] = useState(false);
|
|
16
18
|
const [highlightedIndex, setHighlightedIndex] = useState(-1);
|
|
@@ -48,9 +50,12 @@ const useMenuInteraction = ({
|
|
|
48
50
|
setHighlightedIndex(-1);
|
|
49
51
|
if (options?.restoreFocus !== false) {
|
|
50
52
|
triggerRef.current?.focus();
|
|
53
|
+
onExplicitClose?.();
|
|
54
|
+
} else {
|
|
55
|
+
onImplicitClose?.();
|
|
51
56
|
}
|
|
52
57
|
},
|
|
53
|
-
[triggerRef]
|
|
58
|
+
[triggerRef, onImplicitClose, onExplicitClose]
|
|
54
59
|
);
|
|
55
60
|
const getItemId = useCallback(
|
|
56
61
|
(index) => `${menuId}-option-${index}`,
|
|
@@ -246,4 +251,4 @@ const useMenuInteraction = ({
|
|
|
246
251
|
};
|
|
247
252
|
|
|
248
253
|
export { useMenuInteraction as u };
|
|
249
|
-
//# sourceMappingURL=useMenuInteraction-
|
|
254
|
+
//# sourceMappingURL=useMenuInteraction-BwZ2ORo9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMenuInteraction-BwZ2ORo9.js","sources":["../src/beta/components/SelectMenu/internal/useMenuInteraction.ts"],"sourcesContent":["import {\n CSSProperties,\n KeyboardEvent,\n RefObject,\n useCallback,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {\n SelectItem,\n SectionMeta,\n} from \"../../../../internal/types/selectFieldInternalTypes\";\nimport { OptionsPanelHandle } from \"../../../../internal/components/OptionsPanel\";\n\nexport type UseMenuInteractionConfig = {\n items: SelectItem[];\n sectionsMeta: SectionMeta[];\n onItemActivate: (item: SelectItem) => void;\n selectedItemIds: Set<string | number>;\n displayAs: \"popover\" | \"dialog\";\n closeOnActivate: boolean;\n disabled?: boolean;\n id: string;\n triggerRef: RefObject<HTMLButtonElement>;\n label: string;\n onImplicitClose?: () => void;\n onExplicitClose?: () => void;\n};\n\nexport type MenuTriggerProps = {\n ref: RefObject<HTMLButtonElement>;\n onClick: () => void;\n onKeyDown: (e: KeyboardEvent) => void;\n \"aria-haspopup\": \"listbox\";\n \"aria-controls\": string;\n \"aria-expanded\": boolean;\n \"data-state\": \"open\" | \"close\";\n};\n\ntype MenuPropsArg = {\n className?: string;\n style?: CSSProperties;\n};\n\ntype MenuReturnProps = MenuPropsArg & {\n role: \"listbox\";\n id: string;\n \"aria-label\": string;\n \"aria-labelledby\"?: string;\n tabIndex?: number;\n \"aria-activedescendant\"?: string;\n ref: RefObject<HTMLDivElement>;\n onKeyDown: (e: KeyboardEvent) => void;\n};\n\ntype ItemPropsArg = {\n item: SelectItem;\n index: number;\n className?: string;\n \"data-type\"?: string;\n};\n\ntype ItemReturnProps = {\n role: \"option\";\n id: string;\n \"aria-selected\": boolean;\n \"aria-disabled\"?: boolean;\n onClick: () => void;\n onMouseMove: () => void;\n className?: string;\n \"data-type\"?: string;\n};\n\nexport type GetMenuPropsFn = (opts?: MenuPropsArg) => MenuReturnProps;\nexport type GetItemPropsFn = (opts: ItemPropsArg) => ItemReturnProps;\n\nexport const useMenuInteraction = ({\n items,\n sectionsMeta: _sectionsMeta,\n onItemActivate,\n selectedItemIds,\n displayAs: _displayAs,\n closeOnActivate,\n disabled = false,\n id,\n triggerRef,\n label,\n onImplicitClose,\n onExplicitClose,\n}: UseMenuInteractionConfig) => {\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n\n const generatedId = useId();\n const menuId = `${id}-menu-${generatedId}`;\n const menuContainerRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<OptionsPanelHandle>(null);\n\n const isItemDisabled = useCallback(\n (item: SelectItem) => {\n return (disabled || item.disabled) ?? false;\n },\n [disabled],\n );\n\n const findNextEnabledIndex = useCallback(\n (startIndex: number, direction: 1 | -1, wrap = true): number => {\n if (items.length === 0) return -1;\n const len = items.length;\n let index = startIndex;\n for (let i = 0; i < len; i++) {\n index = wrap\n ? (index + direction + len) % len\n : Math.min(Math.max(index + direction, 0), len - 1);\n if (!isItemDisabled(items[index])) return index;\n if (!wrap && (index === 0 || index === len - 1)) return -1;\n }\n return -1;\n },\n [items, isItemDisabled],\n );\n\n const openMenu = useCallback(() => {\n if (disabled) return;\n setIsOpen(true);\n }, [disabled]);\n\n const closeMenu = useCallback(\n (options?: { restoreFocus?: boolean }) => {\n setIsOpen(false);\n setHighlightedIndex(-1);\n if (options?.restoreFocus !== false) {\n triggerRef.current?.focus();\n onExplicitClose?.();\n } else {\n onImplicitClose?.();\n }\n },\n [triggerRef, onImplicitClose, onExplicitClose],\n );\n\n const getItemId = useCallback(\n (index: number) => `${menuId}-option-${index}`,\n [menuId],\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n switch (e.key) {\n case \"ArrowDown\": {\n e.preventDefault();\n const next =\n highlightedIndex < 0\n ? findNextEnabledIndex(-1, 1)\n : findNextEnabledIndex(highlightedIndex, 1);\n if (next >= 0) {\n setHighlightedIndex(next);\n listRef.current?.scrollToIndex(next);\n }\n break;\n }\n case \"ArrowUp\": {\n e.preventDefault();\n const prev =\n highlightedIndex < 0\n ? findNextEnabledIndex(items.length, -1)\n : findNextEnabledIndex(highlightedIndex, -1);\n if (prev >= 0) {\n setHighlightedIndex(prev);\n listRef.current?.scrollToIndex(prev);\n }\n break;\n }\n case \"Home\": {\n e.preventDefault();\n const first = findNextEnabledIndex(-1, 1, false);\n if (first >= 0) {\n setHighlightedIndex(first);\n listRef.current?.scrollToIndex(first);\n }\n break;\n }\n case \"End\": {\n e.preventDefault();\n const last = findNextEnabledIndex(items.length, -1, false);\n if (last >= 0) {\n setHighlightedIndex(last);\n listRef.current?.scrollToIndex(last);\n }\n break;\n }\n case \"Enter\": {\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \" \": {\n // Only activate on Space when the menu container itself has focus.\n // If a search input is focused, Space should type a space character.\n const target = e.target as HTMLElement;\n if (target.tagName === \"INPUT\") break;\n e.preventDefault();\n if (highlightedIndex >= 0 && highlightedIndex < items.length) {\n const item = items[highlightedIndex];\n if (!isItemDisabled(item)) {\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n }\n }\n break;\n }\n case \"Escape\": {\n e.preventDefault();\n closeMenu();\n break;\n }\n case \"Tab\": {\n closeMenu({ restoreFocus: false });\n break;\n }\n }\n },\n [\n isOpen,\n highlightedIndex,\n items,\n findNextEnabledIndex,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n ],\n );\n\n const handleTriggerKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n if (!isOpen) openMenu();\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n }\n },\n [isOpen, openMenu, closeMenu],\n );\n\n const getTriggerProps = useCallback((): MenuTriggerProps => {\n return {\n ref: triggerRef,\n onClick: () => {\n if (isOpen) {\n closeMenu();\n } else {\n openMenu();\n }\n },\n onKeyDown: handleTriggerKeyDown,\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": menuId,\n \"aria-expanded\": isOpen,\n \"data-state\": isOpen ? \"open\" : \"close\",\n };\n }, [isOpen, openMenu, closeMenu, menuId, handleTriggerKeyDown, triggerRef]);\n\n const getMenuProps: GetMenuPropsFn = useCallback(\n (opts?: MenuPropsArg): MenuReturnProps => {\n return {\n role: \"listbox\",\n id: menuId,\n \"aria-label\": label,\n tabIndex: 0,\n \"aria-activedescendant\":\n highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,\n ref: menuContainerRef,\n onKeyDown: handleKeyDown,\n className: opts?.className,\n style: { outline: \"none\", ...opts?.style },\n };\n },\n [menuId, label, highlightedIndex, getItemId, handleKeyDown],\n );\n\n const getItemProps: GetItemPropsFn = useCallback(\n (opts: ItemPropsArg): ItemReturnProps => {\n const { item, index, className, \"data-type\": dataType } = opts;\n return {\n role: \"option\",\n id: getItemId(index),\n \"aria-selected\": selectedItemIds.has(item.original.id),\n \"aria-disabled\": isItemDisabled(item) || undefined,\n onClick: () => {\n if (isItemDisabled(item)) return;\n onItemActivate(item);\n if (closeOnActivate) {\n closeMenu();\n }\n },\n onMouseMove: () => {\n if (highlightedIndex !== index) {\n setHighlightedIndex(index);\n }\n },\n className,\n \"data-type\": dataType,\n };\n },\n [\n getItemId,\n selectedItemIds,\n isItemDisabled,\n onItemActivate,\n closeOnActivate,\n closeMenu,\n highlightedIndex,\n ],\n );\n\n return {\n isOpen,\n openMenu,\n closeMenu,\n highlightedIndex,\n setHighlightedIndex,\n getTriggerProps,\n getMenuProps,\n getItemProps,\n listRef,\n menuContainerRef,\n handleKeyDown,\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef, useMemo, useCallback } from 'react';
|
|
3
|
-
import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-
|
|
3
|
+
import { V as VirtualizedOptionsPanel, O as OptionsPanel } from './syncFilterUtils-B03Pc941.js';
|
|
4
4
|
|
|
5
5
|
const MultiSelectOptions = forwardRef(({ selectedOptions, items, virtualize, ...rest }, ref) => {
|
|
6
6
|
const selectedIds = useMemo(
|
|
@@ -60,4 +60,4 @@ const useToggleSelection = ({
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
export { MultiSelectOptions as M, useToggleSelection as u };
|
|
63
|
-
//# sourceMappingURL=useToggleSelection-
|
|
63
|
+
//# sourceMappingURL=useToggleSelection-Dip0eimQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useToggleSelection-
|
|
1
|
+
{"version":3,"file":"useToggleSelection-Dip0eimQ.js","sources":["../src/internal/components/MultiSelectOptions.tsx","../src/internal/hooks/useToggleSelection.ts"],"sourcesContent":["import { MultiSelectFieldOption } from \"../../beta/components/MultiSelectField/types\";\nimport { CheckState } from \"../../types\";\nimport { CSSProperties, forwardRef, useCallback, useMemo } from \"react\";\nimport { OptionsPanel, OptionsPanelHandle } from \"./OptionsPanel\";\nimport { VirtualizedOptionsPanel } from \"./VirtualizedOptionsPanel\";\nimport {\n GetItemPropsFn,\n GetMenuPropsFn,\n SectionMeta,\n SelectItem,\n} from \"../types/selectFieldInternalTypes\";\n\nexport type MultiSelectOptionsProps = {\n isOpen: boolean;\n items: SelectItem[];\n getMenuProps: GetMenuPropsFn;\n getItemProps: GetItemPropsFn;\n highlightedIndex: number;\n selectedOptions: MultiSelectFieldOption[];\n hasMore: boolean;\n onLoadMore: () => void;\n loading: boolean;\n loadingMore: boolean;\n disableAutoLoadMore?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n sectionsMeta?: SectionMeta[];\n virtualize?: boolean;\n};\n\nexport const MultiSelectOptions = forwardRef<\n OptionsPanelHandle,\n MultiSelectOptionsProps\n>(({ selectedOptions, items, virtualize, ...rest }, ref) => {\n const selectedIds = useMemo(\n () => new Set(selectedOptions.map((opt) => opt.id)),\n [selectedOptions],\n );\n\n const getCheckedState = useCallback(\n (item: SelectItem): CheckState => {\n if (item.type === \"select-all\" || item.type === \"select-filtered\") {\n return item.checkState ?? \"indeterminate\";\n }\n const checkId =\n item.type === \"pinned-option\" ? item.original.id : item.id;\n return selectedIds.has(checkId) ? \"checked\" : \"unchecked\";\n },\n [selectedIds],\n );\n\n const ListComponent = virtualize ? VirtualizedOptionsPanel : OptionsPanel;\n\n return (\n <ListComponent\n {...rest}\n ref={ref}\n items={items}\n selectionType=\"multiple\"\n getCheckedState={getCheckedState}\n />\n );\n});\n\nMultiSelectOptions.displayName = \"MultiSelectOptions\";\n","import { useCallback, useMemo } from \"react\";\nimport { SelectFieldOption } from \"../../beta/components/SelectField/types\";\nimport { NormalizedPinnedSection } from \"./usePinnedOptions\";\n\ntype UseToggleSelectionParams = {\n options: SelectFieldOption[];\n pinnedSections: NormalizedPinnedSection[];\n selectedOptions: SelectFieldOption[];\n onSelectedOptionsChange: (options: SelectFieldOption[]) => void;\n};\n\n/**\n * Shared multi-select toggle logic: computes allPinnedOptions and provides\n * handleItemClick to add/remove an option from the selection.\n * Used by both useComboMultiple and useSelectModeMultiple.\n */\nexport const useToggleSelection = ({\n options,\n pinnedSections,\n selectedOptions,\n onSelectedOptionsChange,\n}: UseToggleSelectionParams) => {\n const allPinnedOptions = useMemo(() => {\n return pinnedSections.flatMap((section) => section.options);\n }, [pinnedSections]);\n\n const handleItemClick = useCallback(\n (option: { id: string | number; label: string }) => {\n const isSelected = selectedOptions.some((opt) => opt.id === option.id);\n if (isSelected) {\n onSelectedOptionsChange(\n selectedOptions.filter((opt) => opt.id !== option.id),\n );\n } else {\n const fullOption =\n options.find((opt) => opt.id === option.id) ||\n allPinnedOptions.find((opt) => opt.id === option.id);\n if (fullOption) {\n onSelectedOptionsChange([...selectedOptions, fullOption]);\n }\n }\n },\n [selectedOptions, onSelectedOptionsChange, options, allPinnedOptions],\n );\n\n return { handleItemClick, allPinnedOptions };\n};\n"],"names":[],"mappings":";;;;AA+BO,MAAM,kBAAA,GAAqB,UAAA,CAGhC,CAAC,EAAE,eAAA,EAAiB,OAAO,UAAA,EAAY,GAAG,IAAA,EAAK,EAAG,GAAA,KAAQ;AAC1D,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,IAAI,GAAA,CAAI,eAAA,CAAgB,IAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,EAAE,CAAC,CAAA;AAAA,IAClD,CAAC,eAAe;AAAA,GAClB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAiC;AAChC,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,YAAA,IAAgB,IAAA,CAAK,SAAS,iBAAA,EAAmB;AACjE,QAAA,OAAO,KAAK,UAAA,IAAc,eAAA;AAAA,MAC5B;AACA,MAAA,MAAM,UACJ,IAAA,CAAK,IAAA,KAAS,kBAAkB,IAAA,CAAK,QAAA,CAAS,KAAK,IAAA,CAAK,EAAA;AAC1D,MAAA,OAAO,WAAA,CAAY,GAAA,CAAI,OAAO,CAAA,GAAI,SAAA,GAAY,WAAA;AAAA,IAChD,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,uBAAA,GAA0B,YAAA;AAE7D,EAAA,uBACE,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACE,GAAG,IAAA;AAAA,MACJ,GAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAc,UAAA;AAAA,MACd;AAAA;AAAA,GACF;AAEJ,CAAC;AAED,kBAAA,CAAmB,WAAA,GAAc,oBAAA;;ACjD1B,MAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAgC;AAC9B,EAAA,MAAM,gBAAA,GAAmB,QAAQ,MAAM;AACrC,IAAA,OAAO,cAAA,CAAe,OAAA,CAAQ,CAAC,OAAA,KAAY,QAAQ,OAAO,CAAA;AAAA,EAC5D,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAEnB,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,MAAA,KAAmD;AAClD,MAAA,MAAM,UAAA,GAAa,gBAAgB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,uBAAA;AAAA,UACE,gBAAgB,MAAA,CAAO,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE;AAAA,SACtD;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,aACJ,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAA,KAAQ,IAAI,EAAA,KAAO,MAAA,CAAO,EAAE,CAAA,IAC1C,iBAAiB,IAAA,CAAK,CAAC,QAAQ,GAAA,CAAI,EAAA,KAAO,OAAO,EAAE,CAAA;AACrD,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,uBAAA,CAAwB,CAAC,GAAG,eAAA,EAAiB,UAAU,CAAC,CAAA;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,eAAA,EAAiB,uBAAA,EAAyB,OAAA,EAAS,gBAAgB;AAAA,GACtE;AAEA,EAAA,OAAO,EAAE,iBAAiB,gBAAA,EAAiB;AAC7C;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/anvil2",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -59,8 +59,8 @@
|
|
|
59
59
|
"tabbable": "^6.2.0",
|
|
60
60
|
"tinycolor2": "^1.6.0",
|
|
61
61
|
"uuid": "^10.0.0",
|
|
62
|
-
"@servicetitan/hammer-
|
|
63
|
-
"@servicetitan/hammer-
|
|
62
|
+
"@servicetitan/hammer-token": "2.5.1",
|
|
63
|
+
"@servicetitan/hammer-icon": "1.2.0"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"@types/react": "^18 || ^19",
|
package/dist/Avatar--CnTAnfD.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { A as AvatarGroup, a as Avatar$1 } from './Avatar-CCnbKkCm.js';
|
|
3
|
-
import { forwardRef } from 'react';
|
|
4
|
-
|
|
5
|
-
const AvatarElement = forwardRef(
|
|
6
|
-
(props, ref) => {
|
|
7
|
-
return /* @__PURE__ */ jsx(Avatar$1, { ref, ...props });
|
|
8
|
-
}
|
|
9
|
-
);
|
|
10
|
-
AvatarElement.displayName = Avatar$1.displayName;
|
|
11
|
-
const Avatar = Object.assign(AvatarElement, {
|
|
12
|
-
/**
|
|
13
|
-
* AvatarGroup component for displaying multiple avatars in a group.
|
|
14
|
-
*
|
|
15
|
-
* Features:
|
|
16
|
-
* - Displays multiple avatars in a stacked layout
|
|
17
|
-
* - Handles overflow with a count indicator
|
|
18
|
-
* - Maintains consistent sizing across all avatars
|
|
19
|
-
* - Supports custom styling and layout
|
|
20
|
-
* - Automatically adjusts z-index for proper stacking
|
|
21
|
-
* - Fully accessible with screen reader support
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* <Avatar.Group max={3}>
|
|
25
|
-
* <Avatar name="John Doe" />
|
|
26
|
-
* <Avatar name="Jane Smith" />
|
|
27
|
-
* <Avatar name="Bob Johnson" />
|
|
28
|
-
* <Avatar name="Alice Brown" />
|
|
29
|
-
* </Avatar.Group>
|
|
30
|
-
*/
|
|
31
|
-
Group: AvatarGroup
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
export { Avatar as A };
|
|
35
|
-
//# sourceMappingURL=Avatar--CnTAnfD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Avatar--CnTAnfD.js","sources":["../src/components/Avatar/Avatar.tsx"],"sourcesContent":["import {\n Avatar as CoreAvatar,\n AvatarProps as CoreAvatarProps,\n} from \"./internal/Avatar\";\nimport { Ref, forwardRef } from \"react\";\nimport { DistributiveOmit } from \"../../types\";\nimport { AvatarGroup } from \"./AvatarGroup\";\n\n/**\n * Props for the Avatar component\n * @property {string} name - Full name used for alt text and screen reader\n * @property {string} [color] - Custom color of the Avatar\n * @property {string} [image] - Image source to be used for Avatar\n * @property {\"small\" | \"medium\" | \"large\"} [size] - Size of the Avatar\n * @property {\"online\" | \"offline\"} [status] - Online status of the Avatar\n * @extends ComponentPropsWithoutRef<\"span\">\n * @extends Omit<AvatarBaseProps, \"initials\">\n * @extends Omit<LayoutUtilProps, \"flex\" | \"flexBasis\" | \"flexGrow\" | \"flexShrink\">\n * @extends DataTrackingId\n */\nexport type AvatarProps = DistributiveOmit<CoreAvatarProps, \"size\"> & {\n size?: Extract<CoreAvatarProps[\"size\"], \"small\" | \"medium\" | \"large\">;\n};\n\n/**\n * Avatar component for displaying user avatars with initials or images.\n *\n * Features:\n * - Displays user initials when no image is provided\n * - Supports custom colors and sizes\n * - Shows online/offline status\n * - Fully accessible with screen reader support\n * - Automatic image fallback handling\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Avatar name=\"John Doe\" size=\"medium\" status=\"online\" />\n */\nconst AvatarElement = forwardRef(\n (props: AvatarProps, ref: Ref<HTMLSpanElement>) => {\n return <CoreAvatar ref={ref} {...props} />;\n },\n);\nAvatarElement.displayName = CoreAvatar.displayName;\n\nexport const Avatar = Object.assign(AvatarElement, {\n /**\n * AvatarGroup component for displaying multiple avatars in a group.\n *\n * Features:\n * - Displays multiple avatars in a stacked layout\n * - Handles overflow with a count indicator\n * - Maintains consistent sizing across all avatars\n * - Supports custom styling and layout\n * - Automatically adjusts z-index for proper stacking\n * - Fully accessible with screen reader support\n *\n * @example\n * <Avatar.Group max={3}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Johnson\" />\n * <Avatar name=\"Alice Brown\" />\n * </Avatar.Group>\n */\n Group: AvatarGroup,\n});\n"],"names":["CoreAvatar"],"mappings":";;;;AAsCA,MAAM,aAAA,GAAgB,UAAA;AAAA,EACpB,CAAC,OAAoB,GAAA,KAA8B;AACjD,IAAA,uBAAO,GAAA,CAACA,QAAA,EAAA,EAAW,GAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAAA,EAC1C;AACF,CAAA;AACA,aAAA,CAAc,cAAcA,QAAA,CAAW,WAAA;AAEhC,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBjD,KAAA,EAAO;AACT,CAAC;;;;"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { forwardRef, Children, cloneElement } from 'react';
|
|
4
|
-
import { c as cx } from './index-De1g9FRV.js';
|
|
5
|
-
import { L as Link } from './Link-jTvzyXca.js';
|
|
6
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-DMDdfIah.js';
|
|
7
|
-
import { T as Text } from './Text-BJo4oMI2.js';
|
|
8
|
-
import { I as Icon } from './Icon-DuIlne4x.js';
|
|
9
|
-
|
|
10
|
-
import './Breadcrumbs.css';const SvgChevronRight = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }));
|
|
11
|
-
|
|
12
|
-
const breadcrumbs = "_breadcrumbs_1c7ez_2";
|
|
13
|
-
const styles = {
|
|
14
|
-
breadcrumbs: breadcrumbs,
|
|
15
|
-
"breadcrumbs-link": "_breadcrumbs-link_1c7ez_18"
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const BreadcrumbsLink = forwardRef((props, ref) => {
|
|
19
|
-
const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
|
|
20
|
-
const { children, className, style, ...rest } = componentProps;
|
|
21
|
-
const classes = cx([styles["breadcrumbs-link"]], className, {});
|
|
22
|
-
const styleCombined = {
|
|
23
|
-
...style,
|
|
24
|
-
...layoutStyles
|
|
25
|
-
};
|
|
26
|
-
return /* @__PURE__ */ jsx(
|
|
27
|
-
Link,
|
|
28
|
-
{
|
|
29
|
-
tabIndex: 0,
|
|
30
|
-
"data-anv": "breadcrumbs-link",
|
|
31
|
-
style: styleCombined,
|
|
32
|
-
appearance: "secondary",
|
|
33
|
-
className: classes,
|
|
34
|
-
...rest,
|
|
35
|
-
ref,
|
|
36
|
-
children: /* @__PURE__ */ jsx(Text, { size: "small", inline: true, children })
|
|
37
|
-
}
|
|
38
|
-
);
|
|
39
|
-
});
|
|
40
|
-
BreadcrumbsLink.displayName = "BreadcrumbsLink";
|
|
41
|
-
|
|
42
|
-
const BreadcrumbsElement = forwardRef(
|
|
43
|
-
(props, ref) => {
|
|
44
|
-
const { layoutStyles, componentProps } = useLayoutPropsUtil(props);
|
|
45
|
-
const { children, className, style, ...rest } = componentProps;
|
|
46
|
-
const classes = cx([styles["breadcrumbs"]], className, {});
|
|
47
|
-
const styleCombined = {
|
|
48
|
-
...style,
|
|
49
|
-
...layoutStyles
|
|
50
|
-
};
|
|
51
|
-
const linkCount = Children.count(children);
|
|
52
|
-
return /* @__PURE__ */ jsx(
|
|
53
|
-
"nav",
|
|
54
|
-
{
|
|
55
|
-
"data-anv": "breadcrumbs",
|
|
56
|
-
style: styleCombined,
|
|
57
|
-
className: classes,
|
|
58
|
-
"aria-label": "Breadcrumb",
|
|
59
|
-
...rest,
|
|
60
|
-
ref,
|
|
61
|
-
children: Children.map(children, (link, i) => {
|
|
62
|
-
if (i + 1 === linkCount) {
|
|
63
|
-
return /* @__PURE__ */ jsx(
|
|
64
|
-
Text,
|
|
65
|
-
{
|
|
66
|
-
inline: true,
|
|
67
|
-
size: "small",
|
|
68
|
-
style: {
|
|
69
|
-
fontWeight: "bold"
|
|
70
|
-
},
|
|
71
|
-
children: link.props.children
|
|
72
|
-
}
|
|
73
|
-
);
|
|
74
|
-
} else {
|
|
75
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
76
|
-
cloneElement(link),
|
|
77
|
-
/* @__PURE__ */ jsx(Icon, { svg: SvgChevronRight, "aria-hidden": "true" })
|
|
78
|
-
] });
|
|
79
|
-
}
|
|
80
|
-
})
|
|
81
|
-
}
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
);
|
|
85
|
-
BreadcrumbsElement.displayName = "Breadcrumbs";
|
|
86
|
-
const Breadcrumbs = Object.assign(BreadcrumbsElement, {
|
|
87
|
-
/**
|
|
88
|
-
* BreadcrumbsLink component for individual breadcrumb navigation items.
|
|
89
|
-
*
|
|
90
|
-
* Features:
|
|
91
|
-
* - Renders as a clickable link with secondary appearance
|
|
92
|
-
* - Supports all standard anchor element props
|
|
93
|
-
* - Includes layout utilities for positioning and spacing
|
|
94
|
-
* - Uses small text size for consistent styling
|
|
95
|
-
* - Fully accessible with proper focus management
|
|
96
|
-
* - Automatically applies secondary link styling
|
|
97
|
-
*
|
|
98
|
-
* @example
|
|
99
|
-
* <Breadcrumbs.Link href="/dashboard">Dashboard</Breadcrumbs.Link>
|
|
100
|
-
*/
|
|
101
|
-
Link: BreadcrumbsLink
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
export { Breadcrumbs as B };
|
|
105
|
-
//# sourceMappingURL=Breadcrumbs-3Y7jnj-F.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Breadcrumbs-3Y7jnj-F.js","sources":["../../hammer-icon/mdi/filled/chevron_right.svg","../src/components/Breadcrumbs/BreadcrumbsLink.tsx","../src/components/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\" }));\nexport default SvgChevronRight;\n","import { ComponentPropsWithoutRef, forwardRef } from \"react\";\nimport cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { Link, Text } from \"../\";\n\nimport styles from \"./Breadcrumbs.module.scss\";\n\n/**\n * Props for the BreadcrumbsLink component\n * @extends ComponentPropsWithoutRef<\"a\">\n * @extends LayoutUtilProps\n */\nexport type BreadcrumbsLinkProps = ComponentPropsWithoutRef<\"a\"> &\n LayoutUtilProps;\n\n/**\n * BreadcrumbsLink component for individual breadcrumb navigation items.\n *\n * Features:\n * - Renders as a clickable link with secondary appearance\n * - Supports all standard anchor element props\n * - Includes layout utilities for positioning and spacing\n * - Uses small text size for consistent styling\n * - Fully accessible with proper focus management\n * - Automatically applies secondary link styling\n *\n * @example\n * <BreadcrumbsLink href=\"/dashboard\">Dashboard</BreadcrumbsLink>\n */\nexport const BreadcrumbsLink = forwardRef<\n HTMLAnchorElement,\n BreadcrumbsLinkProps\n>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n\n const classes = cx([styles[\"breadcrumbs-link\"]], className, {});\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <Link\n tabIndex={0}\n data-anv=\"breadcrumbs-link\"\n style={styleCombined}\n appearance=\"secondary\"\n className={classes}\n {...rest}\n ref={ref}\n >\n <Text size=\"small\" inline>\n {children}\n </Text>\n </Link>\n );\n});\n\nBreadcrumbsLink.displayName = \"BreadcrumbsLink\";\n","import {\n Children,\n ComponentPropsWithoutRef,\n ReactElement,\n cloneElement,\n forwardRef,\n} from \"react\";\nimport cx from \"classnames\";\nimport ChevronRight from \"@servicetitan/hammer-icon/mdi/filled/chevron_right.svg\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { Icon, Text } from \"../\";\n\nimport styles from \"./Breadcrumbs.module.scss\";\nimport { BreadcrumbsLink, BreadcrumbsLinkProps } from \"./BreadcrumbsLink\";\n\n/**\n * Props for the Breadcrumbs component\n * @extends ComponentPropsWithoutRef<\"nav\">\n * @extends LayoutUtilProps\n */\nexport type BreadcrumbsProps = ComponentPropsWithoutRef<\"nav\"> &\n LayoutUtilProps & {\n /**\n * Breadcrumb links to display. The last child will be rendered as non-clickable text.\n */\n children:\n | ReactElement<BreadcrumbsLinkProps>\n | ReactElement<BreadcrumbsLinkProps>[];\n };\n\nconst BreadcrumbsElement = forwardRef<HTMLElement, BreadcrumbsProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n\n const classes = cx([styles[\"breadcrumbs\"]], className, {});\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const linkCount = Children.count(children);\n\n return (\n <nav\n data-anv=\"breadcrumbs\"\n style={styleCombined}\n className={classes}\n aria-label=\"Breadcrumb\"\n {...rest}\n ref={ref}\n >\n {Children.map(children, (link, i) => {\n if (i + 1 === linkCount) {\n return (\n <Text\n inline\n size=\"small\"\n style={{\n fontWeight: \"bold\",\n }}\n >\n {link.props.children}\n </Text>\n );\n } else {\n return (\n <>\n {cloneElement(link as ReactElement)}\n <Icon svg={ChevronRight} aria-hidden=\"true\" />\n </>\n );\n }\n })}\n </nav>\n );\n },\n);\n\nBreadcrumbsElement.displayName = \"Breadcrumbs\";\n\n/**\n * Breadcrumbs component for displaying navigation hierarchy.\n *\n * Features:\n * - Displays a series of navigation links with chevron separators\n * - Automatically renders the last item as non-clickable text\n * - Includes proper ARIA labeling for accessibility\n * - Supports layout utilities for positioning and spacing\n * - Uses chevron icons as visual separators between links\n * - Responsive design with flexbox layout\n *\n * @example\n * <Breadcrumbs>\n * <Breadcrumbs.Link href=\"/home\">Home</Breadcrumbs.Link>\n * <Breadcrumbs.Link href=\"/products\">Products</Breadcrumbs.Link>\n * <Breadcrumbs.Link href=\"/electronics\">Electronics</Breadcrumbs.Link>\n * </Breadcrumbs>\n */\nexport const Breadcrumbs = Object.assign(BreadcrumbsElement, {\n /**\n * BreadcrumbsLink component for individual breadcrumb navigation items.\n *\n * Features:\n * - Renders as a clickable link with secondary appearance\n * - Supports all standard anchor element props\n * - Includes layout utilities for positioning and spacing\n * - Uses small text size for consistent styling\n * - Fully accessible with proper focus management\n * - Automatically applies secondary link styling\n *\n * @example\n * <Breadcrumbs.Link href=\"/dashboard\">Dashboard</Breadcrumbs.Link>\n */\n Link: BreadcrumbsLink,\n});\n"],"names":["ChevronRight"],"mappings":"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"}
|