@servicetitan/anvil2 1.48.1 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/dist/{Alert-Cz_w_cw0.js → Alert-aGBkujwE.js} +4 -4
- package/dist/{Alert-Cz_w_cw0.js.map → Alert-aGBkujwE.js.map} +1 -1
- package/dist/Alert.js +1 -1
- package/dist/{Announcement-C1xSJkl0.js → Announcement-BPwFNhYe.js} +4 -4
- package/dist/{Announcement-C1xSJkl0.js.map → Announcement-BPwFNhYe.js.map} +1 -1
- package/dist/Announcement.js +1 -1
- package/dist/{AnvilProvider-DDo8ZcIA.js → AnvilProvider-DBYMPYAO.js} +3 -3
- package/dist/{AnvilProvider-DDo8ZcIA.js.map → AnvilProvider-DBYMPYAO.js.map} +1 -1
- package/dist/AnvilProvider.js +1 -1
- package/dist/{Avatar-VQrimv28.js → Avatar-DeEV-v-b.js} +2 -2
- package/dist/{Avatar-VQrimv28.js.map → Avatar-DeEV-v-b.js.map} +1 -1
- package/dist/{Avatar-Bbwk2MCy.js → Avatar-gtxslf5v.js} +2 -2
- package/dist/{Avatar-Bbwk2MCy.js.map → Avatar-gtxslf5v.js.map} +1 -1
- package/dist/Avatar.js +2 -2
- package/dist/{Badge-DOnID5l5.js → Badge-DY5xJkqi.js} +2 -2
- package/dist/{Badge-DOnID5l5.js.map → Badge-DY5xJkqi.js.map} +1 -1
- package/dist/Badge.js +1 -1
- package/dist/{Breadcrumbs-DKqd8VRz.js → Breadcrumbs-DjR-2OEH.js} +5 -5
- package/dist/{Breadcrumbs-DKqd8VRz.js.map → Breadcrumbs-DjR-2OEH.js.map} +1 -1
- package/dist/Breadcrumbs.js +1 -1
- package/dist/{Button-DzcOa6iJ.js → Button-92_FKAyV.js} +3 -3
- package/dist/{Button-DzcOa6iJ.js.map → Button-92_FKAyV.js.map} +1 -1
- package/dist/Button.js +1 -1
- package/dist/{ButtonCompound-Dvr3Fres.js → ButtonCompound-COdSELhh.js} +2 -2
- package/dist/{ButtonCompound-Dvr3Fres.js.map → ButtonCompound-COdSELhh.js.map} +1 -1
- package/dist/ButtonCompound.js +1 -1
- package/dist/{ButtonLink-DGIRpyK6.js → ButtonLink-C0zR7Wnb.js} +3 -3
- package/dist/{ButtonLink-DGIRpyK6.js.map → ButtonLink-C0zR7Wnb.js.map} +1 -1
- package/dist/ButtonLink.js +1 -1
- package/dist/{ButtonToggle-Dv6VAm4W.js → ButtonToggle--sKvhBoA.js} +3 -3
- package/dist/{ButtonToggle-Dv6VAm4W.js.map → ButtonToggle--sKvhBoA.js.map} +1 -1
- package/dist/ButtonToggle.js +1 -1
- package/dist/{Calendar-8bP4LsQV.js → Calendar-1MhJ03iy.js} +2 -2
- package/dist/{Calendar-8bP4LsQV.js.map → Calendar-1MhJ03iy.js.map} +1 -1
- package/dist/{Calendar-NDOcurOz.js → Calendar-B7ypKGUn.js} +5 -5
- package/dist/{Calendar-NDOcurOz.js.map → Calendar-B7ypKGUn.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Card-Cyoz-LaD.js → Card-Ch3sMUo5.js} +2 -2
- package/dist/{Card-Cyoz-LaD.js.map → Card-Ch3sMUo5.js.map} +1 -1
- package/dist/Card.js +1 -1
- package/dist/{Checkbox-Bsa1FgoI.js → Checkbox-Bhjj-jM4.js} +5 -5
- package/dist/{Checkbox-Bsa1FgoI.js.map → Checkbox-Bhjj-jM4.js.map} +1 -1
- package/dist/{Checkbox-BJnt8TFk.js → Checkbox-C5Qjq_tU.js} +2 -2
- package/dist/{Checkbox-BJnt8TFk.js.map → Checkbox-C5Qjq_tU.js.map} +1 -1
- package/dist/Checkbox.js +2 -2
- package/dist/{Chip-BGa1Inb8.js → Chip-X2EwdZ97.js} +4 -4
- package/dist/{Chip-BGa1Inb8.js.map → Chip-X2EwdZ97.js.map} +1 -1
- package/dist/Chip.js +1 -1
- package/dist/{Combobox-BfqKpX1v.js → Combobox-C4COM7BZ.js} +13 -13
- package/dist/{Combobox-BfqKpX1v.js.map → Combobox-C4COM7BZ.js.map} +1 -1
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-xUON92DR.js → DataTable-BkNCMaVu.js} +93 -89
- package/dist/DataTable-BkNCMaVu.js.map +1 -0
- package/dist/{DateField-Cm0FIG3Y.js → DateField-C5rA3USK.js} +6 -6
- package/dist/{DateField-Cm0FIG3Y.js.map → DateField-C5rA3USK.js.map} +1 -1
- package/dist/DateField.js +1 -1
- package/dist/{DateFieldRange-CGGqW_cg.js → DateFieldRange-BLfEH-oC.js} +7 -7
- package/dist/{DateFieldRange-CGGqW_cg.js.map → DateFieldRange-BLfEH-oC.js.map} +1 -1
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-BYWuJ3IL.js → DateFieldSingle-7Cx_FMtb.js} +7 -7
- package/dist/{DateFieldSingle-BYWuJ3IL.js.map → DateFieldSingle-7Cx_FMtb.js.map} +1 -1
- package/dist/DateFieldSingle.js +1 -1
- package/dist/DateFieldYearless-D2uo-uqE.js +132 -0
- package/dist/DateFieldYearless-D2uo-uqE.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/DateFieldYearlessRange-BivGidsU.js +178 -0
- package/dist/DateFieldYearlessRange-BivGidsU.js.map +1 -0
- package/dist/DateFieldYearlessRange.css +36 -0
- package/dist/DateFieldYearlessRange.d.ts +2 -0
- package/dist/DateFieldYearlessRange.js +2 -0
- package/dist/DateFieldYearlessRange.js.map +1 -0
- package/dist/{DaysOfTheWeek-BIi9dyJP.js → DaysOfTheWeek-Dn6zHxpt.js} +6 -6
- package/dist/{DaysOfTheWeek-BIi9dyJP.js.map → DaysOfTheWeek-Dn6zHxpt.js.map} +1 -1
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Details-Bg7QzlOm.js → Details-CkaKTRvc.js} +3 -3
- package/dist/{Details-Bg7QzlOm.js.map → Details-CkaKTRvc.js.map} +1 -1
- package/dist/Details.js +1 -1
- package/dist/{Dialog-fJClGTI6.js → Dialog-CxH4Vnbb.js} +4 -4
- package/dist/{Dialog-fJClGTI6.js.map → Dialog-CxH4Vnbb.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Divider-DYZFKug1.js → Divider-Olv8yWXD.js} +2 -2
- package/dist/{Divider-DYZFKug1.js.map → Divider-Olv8yWXD.js.map} +1 -1
- package/dist/Divider.js +1 -1
- package/dist/Dnd.js +1 -1
- package/dist/DndSort.js +5 -5
- package/dist/{Drawer-DyHDRTR-.js → Drawer-BLfDJU-e.js} +4 -4
- package/dist/{Drawer-DyHDRTR-.js.map → Drawer-BLfDJU-e.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/{EditCard-LdyduHqX.js → EditCard-Ds1UXJIS.js} +6 -6
- package/dist/{EditCard-LdyduHqX.js.map → EditCard-Ds1UXJIS.js.map} +1 -1
- package/dist/EditCard.js +1 -1
- package/dist/{FieldLabel-DIlzcPIQ.js → FieldLabel-CHMCV9wX.js} +38 -19
- package/dist/FieldLabel-CHMCV9wX.js.map +1 -0
- package/dist/FieldLabel.css +22 -7
- package/dist/FieldLabel.js +1 -1
- package/dist/{FieldMessage-BbARBii0.js → FieldMessage-DWONT3dr.js} +2 -2
- package/dist/{FieldMessage-BbARBii0.js.map → FieldMessage-DWONT3dr.js.map} +1 -1
- package/dist/FieldMessage.js +1 -1
- package/dist/{Flex-GLF5XRJg.js → Flex-CjPHUTeq.js} +2 -2
- package/dist/{Flex-GLF5XRJg.js.map → Flex-CjPHUTeq.js.map} +1 -1
- package/dist/Flex.js +1 -1
- package/dist/{Grid-BpAt2zA7.js → Grid-DW2cAuHi.js} +2 -2
- package/dist/{Grid-BpAt2zA7.js.map → Grid-DW2cAuHi.js.map} +1 -1
- package/dist/Grid.js +1 -1
- package/dist/{Helper-DHoKHqxV.js → Helper-DjWotFtO.js} +2 -2
- package/dist/{Helper-DHoKHqxV.js.map → Helper-DjWotFtO.js.map} +1 -1
- package/dist/{Icon-TcJbUdTz.js → Icon-BSuTVNaa.js} +2 -2
- package/dist/{Icon-TcJbUdTz.js.map → Icon-BSuTVNaa.js.map} +1 -1
- package/dist/Icon.js +1 -1
- package/dist/{InputMask-B6oJlChY.js → InputMask-fS5nqXdI.js} +2 -2
- package/dist/{InputMask-B6oJlChY.js.map → InputMask-fS5nqXdI.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{Link-Br_AJ7Af.js → Link-DuYh7Xl2.js} +3 -3
- package/dist/{Link-Br_AJ7Af.js.map → Link-DuYh7Xl2.js.map} +1 -1
- package/dist/Link.js +1 -1
- package/dist/{LinkButton-CwiVzaro.js → LinkButton-pIUNATNE.js} +2 -2
- package/dist/{LinkButton-CwiVzaro.js.map → LinkButton-pIUNATNE.js.map} +1 -1
- package/dist/LinkButton.js +1 -1
- package/dist/{ListView-fBFSagWO.js → ListView-CZ5T8bR1.js} +3 -3
- package/dist/{ListView-fBFSagWO.js.map → ListView-CZ5T8bR1.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/{Listbox-gtZ2Ao_I.js → Listbox-C-n4IVVj.js} +5 -5
- package/dist/{Listbox-gtZ2Ao_I.js.map → Listbox-C-n4IVVj.js.map} +1 -1
- package/dist/Listbox.js +1 -1
- package/dist/{LocalizationProvider-Cqattc3O.js → LocalizationProvider-u6xdKCBi.js} +2 -2
- package/dist/{LocalizationProvider-Cqattc3O.js.map → LocalizationProvider-u6xdKCBi.js.map} +1 -1
- package/dist/LocalizationProvider.js +1 -1
- package/dist/{Menu-CBbUK_sX.js → Menu-DUAfSImY.js} +4 -4
- package/dist/{Menu-CBbUK_sX.js.map → Menu-DUAfSImY.js.map} +1 -1
- package/dist/Menu.js +1 -1
- package/dist/{NumberField-CNskrtsN.js → NumberField-C62E56_v.js} +7 -7
- package/dist/{NumberField-CNskrtsN.js.map → NumberField-C62E56_v.js.map} +1 -1
- package/dist/NumberField.js +1 -1
- package/dist/Overflow.js +2 -3
- package/dist/Overflow.js.map +1 -1
- package/dist/{Page-4VdFrCjy.js → Page-CGZQ-nsg.js} +15 -15
- package/dist/Page-CGZQ-nsg.js.map +1 -0
- package/dist/Page.js +1 -1
- package/dist/{Pagination-CQjNN1yN.js → Pagination-BHEEnNas.js} +6 -6
- package/dist/{Pagination-CQjNN1yN.js.map → Pagination-BHEEnNas.js.map} +1 -1
- package/dist/Pagination.js +1 -1
- package/dist/{Popover--c9PXAVi.js → Popover-CIPg_ZgX.js} +5 -4
- package/dist/Popover-CIPg_ZgX.js.map +1 -0
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-CXMuhBQV.js → ProgressBar-CUpF9fFW.js} +6 -6
- package/dist/{ProgressBar-CXMuhBQV.js.map → ProgressBar-CUpF9fFW.js.map} +1 -1
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-CTYs8JpI.js → Radio-CyCFna1X.js} +2 -2
- package/dist/{Radio-CTYs8JpI.js.map → Radio-CyCFna1X.js.map} +1 -1
- package/dist/Radio.js +2 -2
- package/dist/{RadioGroup-BVGnsTuG.js → RadioGroup-DRS2EjVH.js} +5 -5
- package/dist/{RadioGroup-BVGnsTuG.js.map → RadioGroup-DRS2EjVH.js.map} +1 -1
- package/dist/{SearchField-DLqva3o3.js → SearchField-DrgNbG3I.js} +3 -3
- package/dist/{SearchField-DLqva3o3.js.map → SearchField-DrgNbG3I.js.map} +1 -1
- package/dist/SearchField.js +1 -1
- package/dist/{SegmentedControl-1OzOQmCp.js → SegmentedControl-C-QOwO7q.js} +2 -2
- package/dist/{SegmentedControl-1OzOQmCp.js.map → SegmentedControl-C-QOwO7q.js.map} +1 -1
- package/dist/SegmentedControl.js +1 -1
- package/dist/{SelectCard-Dw7zW0UN.js → SelectCard-lBcnP5j5.js} +4 -4
- package/dist/{SelectCard-Dw7zW0UN.js.map → SelectCard-lBcnP5j5.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/{SelectTrigger-BQNqyG3M.js → SelectTrigger-qvoGCkb1.js} +5 -5
- package/dist/{SelectTrigger-BQNqyG3M.js.map → SelectTrigger-qvoGCkb1.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-B-fxog4U.js → SelectTriggerBase-C4gebtca.js} +6 -6
- package/dist/{SelectTriggerBase-B-fxog4U.js.map → SelectTriggerBase-C4gebtca.js.map} +1 -1
- package/dist/{SideNav-COiPAIph.js → SideNav-B1sH17Uc.js} +3 -3
- package/dist/{SideNav-COiPAIph.js.map → SideNav-B1sH17Uc.js.map} +1 -1
- package/dist/SideNav.js +1 -1
- package/dist/Skeleton.js +1 -1
- package/dist/{Stepper-xcgOQzru.js → Stepper-B0U_YrbZ.js} +4 -4
- package/dist/{Stepper-xcgOQzru.js.map → Stepper-B0U_YrbZ.js.map} +1 -1
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-mhyHJeex.js → Switch-DjL2CsQi.js} +5 -5
- package/dist/{Switch-mhyHJeex.js.map → Switch-DjL2CsQi.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/{Tab-BISlFW_i.js → Tab-6UavokJJ.js} +3 -3
- package/dist/{Tab-BISlFW_i.js.map → Tab-6UavokJJ.js.map} +1 -1
- package/dist/Tab.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{Text-CDzLZl1O.js → Text-kPA-VzsB.js} +2 -2
- package/dist/{Text-CDzLZl1O.js.map → Text-kPA-VzsB.js.map} +1 -1
- package/dist/Text.js +1 -1
- package/dist/{TextField-CUrYEZR4.js → TextField-DOSwy_gm.js} +2 -2
- package/dist/{TextField-CUrYEZR4.js.map → TextField-DOSwy_gm.js.map} +1 -1
- package/dist/{TextField-DPTJjF8V.js → TextField-DcyjojNg.js} +4 -4
- package/dist/{TextField-DPTJjF8V.js.map → TextField-DcyjojNg.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-f0jAKcvn.js → Textarea-DacevzmW.js} +4 -4
- package/dist/{Textarea-f0jAKcvn.js.map → Textarea-DacevzmW.js.map} +1 -1
- package/dist/Textarea.js +1 -1
- package/dist/{ThemeProvider-CUiXHn4p.js → ThemeProvider-Bmsz__5N.js} +2 -2
- package/dist/{ThemeProvider-CUiXHn4p.js.map → ThemeProvider-Bmsz__5N.js.map} +1 -1
- package/dist/ThemeProvider.js +1 -1
- package/dist/{TimeField-CGSwrpl0.js → TimeField-C4s8fjDG.js} +7 -7
- package/dist/{TimeField-CGSwrpl0.js.map → TimeField-C4s8fjDG.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-C6iB4h0P.js → Toaster-BxbR-XcR.js} +2 -2
- package/dist/{Toaster-C6iB4h0P.js.map → Toaster-BxbR-XcR.js.map} +1 -1
- package/dist/{Toaster-D72xHdfH.js → Toaster-Dg7M4W4U.js} +4 -4
- package/dist/{Toaster-D72xHdfH.js.map → Toaster-Dg7M4W4U.js.map} +1 -1
- package/dist/{Toolbar-CcJa_YpH.js → Toolbar-BvFwcXOk.js} +20 -20
- package/dist/{Toolbar-CcJa_YpH.js.map → Toolbar-BvFwcXOk.js.map} +1 -1
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-BOfdwyTv.js → Tooltip-CZsoFe6C.js} +2 -2
- package/dist/{Tooltip-BOfdwyTv.js.map → Tooltip-CZsoFe6C.js.map} +1 -1
- package/dist/Tooltip.js +1 -1
- package/dist/YearlessDateInputWithPicker-MHLlAdrH.js +949 -0
- package/dist/YearlessDateInputWithPicker-MHLlAdrH.js.map +1 -0
- package/dist/YearlessDateInputWithPicker.css +199 -0
- package/dist/beta/components/Table/DataTable/DataTable.d.ts +4 -4
- package/dist/beta/components/Table/DataTable/internal/useAsyncData.d.ts +5 -0
- package/dist/beta.js +4 -4
- package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +57 -3
- package/dist/components/DateFieldYearless/internal/PickerList.d.ts +61 -0
- package/dist/components/DateFieldYearless/internal/PickerListOption.d.ts +61 -0
- package/dist/components/DateFieldYearless/internal/YearlessDateInput.d.ts +51 -0
- package/dist/components/DateFieldYearless/internal/YearlessDateInputWithPicker.d.ts +134 -0
- package/dist/components/DateFieldYearless/internal/YearlessDateSelectionPopover.d.ts +27 -0
- package/dist/components/DateFieldYearless/internal/maskito/yearlessDatePlaceholderMask.d.ts +3 -1
- package/dist/components/DateFieldYearless/internal/maskito/yearlessDateSegmentsStepping.d.ts +12 -0
- package/dist/components/DateFieldYearless/internal/utils.d.ts +50 -1
- package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +59 -0
- package/dist/components/DateFieldYearlessRange/index.d.ts +1 -0
- package/dist/components/FieldLabel/FieldLabel.d.ts +9 -48
- package/dist/components/FieldLabel/internal/FieldLabelMoreInfoIcon.d.ts +3 -1
- package/dist/components/Popover/Popover.d.ts +1 -0
- package/dist/components/Popover/PopoverContent.d.ts +8 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/{index-CUVkL0hr.js → index-B25zeBIC.js} +3 -3
- package/dist/{index-CUVkL0hr.js.map → index-B25zeBIC.js.map} +1 -1
- package/dist/{index.esm-BwMVvxTV.js → index.esm-C2ZhC_8d.js} +2 -2
- package/dist/{index.esm-BwMVvxTV.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
- package/dist/index.js +68 -67
- package/dist/index.js.map +1 -1
- package/dist/{useLayoutPropsUtil-C7FVYB8F.js → useLayoutPropsUtil-BlIWftBb.js} +2 -2
- package/dist/{useLayoutPropsUtil-C7FVYB8F.js.map → useLayoutPropsUtil-BlIWftBb.js.map} +1 -1
- package/dist/{utils-CyPyKUVh.js → utils-B8bmyfFR.js} +2 -2
- package/dist/{utils-CyPyKUVh.js.map → utils-B8bmyfFR.js.map} +1 -1
- package/package.json +2 -1
- package/dist/DataTable-xUON92DR.js.map +0 -1
- package/dist/DateFieldYearless-BXRgNWzy.js +0 -266
- package/dist/DateFieldYearless-BXRgNWzy.js.map +0 -1
- package/dist/FieldLabel-DIlzcPIQ.js.map +0 -1
- package/dist/Page-4VdFrCjy.js.map +0 -1
- package/dist/Popover--c9PXAVi.js.map +0 -1
- package/dist/components/DateFieldYearless/internal/MaskedYearlessDateInput.d.ts +0 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SideNav-COiPAIph.js","sources":["../src/components/SideNav/internal/utils.ts","../src/components/SideNav/SideNavContext.tsx","../src/components/SideNav/useSideNav.tsx","../src/components/SideNav/internal/SideNavLink.tsx","../src/components/SideNav/internal/SideNavContext.tsx","../src/components/SideNav/SideNavLink.tsx","../src/components/SideNav/SideNavCollapsible.tsx","../src/components/SideNav/SideNavGroup.tsx","../src/components/SideNav/internal/SideNavProvider.tsx","../src/components/SideNav/SideNav.tsx"],"sourcesContent":["import { KeyboardEvent, RefObject } from \"react\";\nimport { SideNavContextProps } from \"../SideNavContext\";\n\n/**\n * Handles keyboard navigation for SideNav components using arrow keys.\n *\n * This function manages focus movement between navigable elements in a SideNav,\n * providing circular navigation (wrapping from last to first and vice versa).\n * It updates tabindex attributes to maintain proper focus management and\n * prevents default browser behavior for arrow key navigation.\n *\n * @param e - The keyboard event that triggered the navigation\n * @param links - NodeList of all navigable elements in the SideNav\n * @param current - Ref object pointing to the currently focused element\n * @returns void\n */\nexport const sideNavKeyboardNavigation = (\n e: KeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n links: SideNavContextProps[\"links\"],\n current: RefObject<HTMLAnchorElement | HTMLButtonElement>,\n) => {\n const currentIndex = Array.prototype.indexOf.call(links, current.current);\n\n switch (e.key) {\n case \"ArrowDown\":\n if (!links) return;\n e.preventDefault();\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === links.length - 1) {\n links[0].setAttribute(\"tabindex\", \"0\");\n (links[0] as HTMLAnchorElement | HTMLButtonElement).focus();\n break;\n }\n links[currentIndex + 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex + 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!links) return;\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === 0) {\n links[links.length - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[links.length - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n }\n links[currentIndex - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n default:\n break;\n }\n};\n","import { createContext } from \"react\";\n\n/**\n * Context props for the SideNav component\n */\nexport type SideNavContextProps = {\n /**\n * List of navigable elements in the side navigation\n */\n links: NodeListOf<Element> | undefined;\n /**\n * Function to recalculate the list of navigable links\n */\n reCalculateLinks: () => void;\n /**\n * Set of currently active link IDs\n */\n activeIds: Set<string>;\n /**\n * Function to add an ID to the active set\n */\n addActiveId: (id: string) => void;\n /**\n * Function to remove an ID from the active set\n */\n removeActiveId: (id: string) => void;\n};\n\nexport const SideNavContext = createContext<SideNavContextProps | null>(null);\n","import { useContext } from \"react\";\nimport { SideNavContext } from \"./SideNavContext\";\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with links, activeIds, and utility functions\n * @throws Error if used outside of a SideNav component\n */\nexport const useSideNav = () => {\n const context = useContext(SideNavContext);\n\n if (context == null) {\n throw new Error(\"useSideNav must be wrapped in <SideNav />\");\n }\n\n return context;\n};\n","import {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n forwardRef,\n useRef,\n useEffect,\n} from \"react\";\nimport styles from \"../SideNav.module.scss\";\nimport { sideNavKeyboardNavigation } from \"./utils\";\nimport { useSideNav } from \"../useSideNav\";\n\n/**\n * Props for the SideNavLink component\n * @extends Omit<ComponentPropsWithoutRef<\"a\">, \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\">\n */\nexport type SideNavLinkProps = Omit<\n ComponentPropsWithoutRef<\"a\">,\n \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\"\n> & {\n /**\n * Unique identifier for the navigation link\n */\n id: string;\n /**\n * When true, marks the link as the current active page\n */\n active?: boolean;\n /**\n * When true, disables the link and prevents interaction\n */\n disabled?: boolean;\n /**\n * Function called when the link is clicked\n */\n onClick?: (\n e: MouseEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is pressed down on the link\n */\n onKeyDown?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is released on the link\n */\n onKeyUp?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n};\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef<HTMLLIElement, SideNavLinkProps>(\n (props, ref) => {\n const {\n className,\n children,\n href,\n id,\n active,\n onClick,\n onKeyDown,\n onKeyUp,\n style,\n disabled,\n ...rest\n } = props;\n const { links } = useSideNav();\n\n const linkRef = useRef<HTMLAnchorElement>(null);\n const { activeIds, addActiveId, removeActiveId } = useSideNav();\n\n useEffect(() => {\n if (!activeIds.has(id) && active) {\n addActiveId(id);\n return;\n }\n if (activeIds.has(id) && !active) {\n removeActiveId(id);\n }\n }, [active, activeIds, addActiveId, removeActiveId, id]);\n\n function onKeyDownHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n sideNavKeyboardNavigation(e, links, linkRef);\n onKeyDown?.(e, id);\n }\n\n function onKeyUpHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n if (disabled) return;\n if (e.code === \"Space\" || e.code === \"Enter\") {\n e.preventDefault();\n if (onClick) {\n e.currentTarget.click();\n }\n }\n\n onKeyUp?.(e, id);\n }\n\n function onClickHandler(e: MouseEvent<HTMLAnchorElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n linkRef.current?.setAttribute(\"tabindex\", \"0\");\n linkRef.current?.focus();\n\n onClick?.(e, id);\n }\n\n return (\n <li className={className} data-anv=\"sidenav-link\" style={style} ref={ref}>\n <a\n className={styles[\"sidenav-link\"]}\n aria-current={active ? \"page\" : undefined}\n href={href}\n ref={linkRef}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n onKeyUp={onKeyUpHandler}\n id={id}\n aria-disabled={disabled}\n tabIndex={active ? 0 : -1}\n {...rest}\n >\n {children}\n </a>\n </li>\n );\n },\n);\n\nSideNavLink.displayName = \"SideNavLink\";\n","import { createContext, useContext } from \"react\";\n\n/**\n * Interface for the side navigation context\n */\ninterface ISideNavContext {\n /**\n * Current location pathname for routing\n */\n location: string;\n /**\n * Function to update the current location\n */\n setLocation: (location: string) => void;\n}\n\nconst defaultContext = {\n location: \"\",\n setLocation: (_location: string) => {},\n};\n\nexport const SideNavContext: React.Context<ISideNavContext> =\n createContext(defaultContext);\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with location and setLocation\n */\n\nexport const useSideNavContext = () => useContext(SideNavContext);\n","import {\n SideNavLinkProps as CoreSideNavLinkProps,\n SideNavLink as CoreSideNavLink,\n} from \"./internal/SideNavLink\";\nimport { Ref, forwardRef, useCallback } from \"react\";\nimport { useSideNavContext } from \"./internal/SideNavContext\";\n\n/**\n * Props for SideNavLink with routing support\n * @property {string} [href] - URL for the link (used when pathname is not provided)\n * @property {string} pathname - Pathname for client-side routing\n * @property {string} [search] - Optional search parameters for the URL\n * @property {boolean} [active] - When true, marks the link as the current active page\n * @property {boolean} [disabled] - When true, disables the link and prevents interaction\n * @extends CoreSideNavLinkProps\n */\ntype SideNavLinkWithRoutingProps = CoreSideNavLinkProps & {\n /**\n * Pathname for client-side routing\n */\n pathname: string;\n /**\n * Optional search parameters for the URL\n */\n search?: string;\n};\n\n/**\n * SideNavLink component with routing support\n */\nconst SideNavLinkWithRouting = forwardRef(\n (\n { href, pathname, search, onClick, ...rest }: SideNavLinkWithRoutingProps,\n ref: Ref<HTMLLIElement>,\n ) => {\n const { location, setLocation } = useSideNavContext();\n const to = pathname + (search ?? \"\");\n\n const handleClick = useCallback(\n (...args: Parameters<NonNullable<CoreSideNavLinkProps[\"onClick\"]>>) => {\n args[0].preventDefault();\n history.pushState(null, \"\", to);\n setLocation(to);\n return onClick?.(...args);\n },\n [onClick, to, setLocation],\n );\n\n return (\n <CoreSideNavLink\n href={pathname != null ? to : href}\n active={pathname === location}\n onClick={pathname != null ? handleClick : onClick}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nSideNavLinkWithRouting.displayName = CoreSideNavLink.displayName;\n\nexport type SideNavLinkProps =\n | CoreSideNavLinkProps\n | SideNavLinkWithRoutingProps;\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n * - Client-side routing support with pathname prop\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n *\n * <SideNav.Link id=\"intro\" pathname=\"/intro\" active>\n * Introduction (with routing)\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef(\n (rest: SideNavLinkProps, ref: Ref<HTMLLIElement>) => {\n if (\"pathname\" in rest) {\n return <SideNavLinkWithRouting ref={ref} {...rest} />;\n } else {\n return <CoreSideNavLink ref={ref} {...rest} />;\n }\n },\n);\nSideNavLink.displayName = CoreSideNavLink.displayName;\n","import cx from \"classnames\";\nimport {\n Children,\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n forwardRef,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport ArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport { Icon } from \"../Icon\";\nimport { sideNavKeyboardNavigation } from \"./internal/utils\";\nimport { useSideNav } from \"./useSideNav\";\n\n/**\n * Props for the SideNavCollapsible component\n * @extends Omit<ComponentPropsWithoutRef<\"li\">, \"onClick\">\n */\nexport type SideNavCollapsibleProps = Omit<\n ComponentPropsWithoutRef<\"li\">,\n \"onClick\"\n> & {\n /**\n * The label text displayed for the collapsible section\n */\n label: string;\n /**\n * Function called when the collapsible button is clicked\n */\n onClick?: ComponentPropsWithoutRef<\"button\">[\"onClick\"];\n /**\n * Function called when a key is pressed on the collapsible button\n */\n onKeyDown?: ComponentPropsWithoutRef<\"button\">[\"onKeyDown\"];\n /**\n * Initial expansion state for uncontrolled usage\n * @default false\n */\n defaultExpanded?: boolean;\n /**\n * Controlled expansion state\n */\n expanded?: boolean;\n};\n\n/**\n * SideNavCollapsible component for expandable navigation sections within a SideNav.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n * - Integration with SideNav keyboard navigation\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\nexport const SideNavCollapsible = forwardRef<\n HTMLLIElement,\n SideNavCollapsibleProps\n>((props, ref) => {\n const {\n className,\n children,\n label,\n onClick,\n onKeyDown,\n defaultExpanded = false,\n expanded: expandedControlled,\n ...rest\n } = props;\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n const [hasSelected, setHasSelected] = useState<boolean>(false);\n const sideNavGroupLabelRef = useRef<HTMLButtonElement>(null);\n const groupRef = useRef<HTMLUListElement>(null);\n const sideNavGroupClassNames = cx(styles[\"sidenav-collapsible\"], className);\n const { links, reCalculateLinks } = useSideNav();\n const groupId = useId();\n\n const setExpandedUncontrolled = (newState?: boolean) => {\n if (expandedControlled === undefined)\n setExpanded((prev) => {\n if (newState !== undefined) return newState;\n return !prev;\n });\n };\n\n useEffect(() => {\n if (expandedControlled !== undefined) {\n setExpanded(expandedControlled);\n }\n }, [expandedControlled]);\n const { activeIds } = useSideNav();\n\n const childIds: string[] = useMemo(\n () =>\n Children.map(children, (child) => (child as ReactElement).props)?.map(\n (item) => item.id,\n ) || [],\n [children],\n );\n\n function handleOnClick(e: MouseEvent<HTMLButtonElement>) {\n setExpandedUncontrolled();\n setTimeout(() => reCalculateLinks(), 0);\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n sideNavGroupLabelRef.current?.setAttribute(\"tabindex\", \"0\");\n sideNavGroupLabelRef.current?.focus();\n onClick?.(e);\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n sideNavKeyboardNavigation(e, links, sideNavGroupLabelRef);\n switch (e.key) {\n case \"ArrowRight\":\n setExpanded(true);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n case \"ArrowLeft\":\n setExpanded(false);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n\n default:\n break;\n }\n onKeyDown?.(e);\n }\n\n useLayoutEffect(() => {\n const hasActiveChildren = childIds.some((id) => activeIds.has(id));\n if (hasActiveChildren) {\n setExpandedUncontrolled(true);\n setHasSelected(true);\n setTimeout(() => {\n const selectedChild =\n groupRef.current?.querySelector(`[active='true']`);\n selectedChild?.setAttribute(\"tabindex\", \"0\");\n reCalculateLinks();\n }, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!activeIds.size || !childIds.some((id) => activeIds.has(id))) {\n setHasSelected(false);\n return;\n }\n setHasSelected(true);\n }, [activeIds, childIds]);\n\n return (\n <li\n ref={ref}\n data-anv=\"sidenav-collapsible\"\n {...rest}\n className={sideNavGroupClassNames}\n >\n <button\n aria-expanded={expanded}\n aria-controls={groupId}\n type=\"button\"\n tabIndex={-1}\n onClick={handleOnClick}\n ref={sideNavGroupLabelRef}\n className={cx(styles[\"sidenav-link\"], {\n [styles[\"has-indicator\"]]: hasSelected && !expanded,\n })}\n onKeyDown={handleKeyDown}\n >\n {label}\n <Icon className={styles[\"arrow\"]} inherit svg={ArrowDown} aria-hidden />\n </button>\n <ul\n id={groupId}\n ref={groupRef}\n className={cx(styles[\"group\"], !expanded && styles.hidden)}\n >\n {children}\n </ul>\n </li>\n );\n});\n\nSideNavCollapsible.displayName = \"SideNavCollapsible\";\n","import { ComponentPropsWithoutRef, forwardRef, useId } from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the SideNavGroup component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type SideNavGroupProps = ComponentPropsWithoutRef<\"li\"> & {\n /**\n * The label text displayed for the navigation group\n */\n label: string;\n};\n\n/**\n * SideNavGroup component for grouping related navigation links within a SideNav.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n * - Unique ID generation for accessibility\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\nexport const SideNavGroup = forwardRef<HTMLLIElement, SideNavGroupProps>(\n (props, ref) => {\n const { children, label, ...rest } = props;\n\n const sideNavGroupClassNames = cx(styles[\"sidenav-group\"]);\n\n const groupLabelId = useId();\n return (\n <li ref={ref} data-anv=\"sidenav-group\" {...rest}>\n <label id={groupLabelId} className={styles[\"group-label\"]}>\n {label}\n </label>\n <ul aria-labelledby={groupLabelId} className={sideNavGroupClassNames}>\n {children}\n </ul>\n </li>\n );\n },\n);\n\nSideNavGroup.displayName = \"SideNavGroup\";\n","import { PropsWithChildren, useState } from \"react\";\nimport { SideNavContext } from \"./SideNavContext\";\n\n/**\n * SideNavProvider component for managing routing state in SideNav components.\n *\n * Features:\n * - Provides routing context for SideNav components\n * - Manages current location state\n * - Enables client-side routing without page reloads\n * - Integrates with browser history API\n * - Context provider for child components\n *\n * @example\n * <SideNavProvider>\n * <SideNav>\n * <SideNav.Link pathname=\"/intro\">Introduction</SideNav.Link>\n * </SideNav>\n * </SideNavProvider>\n */\nexport const SideNavProvider = ({ children }: PropsWithChildren) => {\n const [location, setLocation] = useState(window?.location.pathname);\n\n const sideNavContext = {\n location,\n setLocation,\n };\n\n return (\n <SideNavContext.Provider value={sideNavContext}>\n {children}\n </SideNavContext.Provider>\n );\n};\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport styles from \"./SideNav.module.scss\";\nimport { SideNavLink } from \"./SideNavLink\";\nimport { SideNavCollapsible } from \"./SideNavCollapsible\";\nimport { SideNavGroup } from \"./SideNavGroup\";\nimport { SideNavProvider } from \"./internal/SideNavProvider\";\nimport { DataTrackingId } from \"../../types\";\nimport { SideNavContext, SideNavContextProps } from \"./SideNavContext\";\n\n/**\n * Props for the SideNav component\n * @extends ComponentPropsWithoutRef<\"nav\">\n * @extends LayoutUtilProps\n */\nexport type SideNavProps = ComponentPropsWithoutRef<\"nav\"> &\n LayoutUtilProps &\n DataTrackingId;\n\nconst SideNavElement = forwardRef<HTMLElement, SideNavProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const [activeIds, setActiveIds] = useState<Set<string>>(new Set());\n const { className, children, style, ...rest } = componentProps;\n\n const addActiveId = useCallback(\n (id: string) => {\n if (activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.add(id);\n setActiveIds(newIds);\n },\n [activeIds],\n );\n\n const removeActiveId = useCallback(\n (id: string) => {\n if (!activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.delete(id);\n setActiveIds(newIds);\n },\n [activeIds],\n );\n\n const sideNavRef = useRef<HTMLElement>(null);\n const [links, setLinks] = useState<SideNavContextProps[\"links\"]>();\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const reCalculateLinks = useCallback(() => {\n if (sideNavRef.current) {\n const items = sideNavRef.current.querySelectorAll(\n \"li[data-anv='sidenav-link'] a:not([aria-disabled='true']), li[data-anv='sidenav-collapsible'] button[aria-expanded]:not([aria-disabled='true'])\",\n );\n setLinks(items);\n }\n }, [sideNavRef]);\n\n useEffect(() => {\n reCalculateLinks();\n }, [reCalculateLinks]);\n\n const sidenavClassNames = cx([styles[\"sidenav\"]], className);\n\n const value = useMemo(\n () => ({\n links,\n reCalculateLinks,\n activeIds,\n addActiveId,\n removeActiveId,\n }),\n [links, activeIds, addActiveId, removeActiveId, reCalculateLinks],\n );\n\n return (\n <SideNavProvider>\n <SideNavContext.Provider value={value}>\n <nav\n ref={useMergeRefs([sideNavRef, ref])}\n className={sidenavClassNames}\n style={styleCombined}\n data-anv=\"sidenav\"\n {...rest}\n >\n <ul className={styles[\"root\"]}>{children}</ul>\n </nav>\n </SideNavContext.Provider>\n </SideNavProvider>\n );\n});\n\nSideNavElement.displayName = \"SideNav\";\n\n/**\n * SideNav component for creating hierarchical navigation menus.\n *\n * Features:\n * - Hierarchical navigation structure with links, groups, and collapsible sections\n * - Keyboard navigation support with arrow keys and focus management\n * - Active state tracking for current page/section\n * - Accessible with proper ARIA roles and labels\n * - Automatic link recalculation for dynamic content\n * - Context provider for child components\n * - Layout utility props for positioning and spacing\n *\n * @example\n * <SideNav>\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n * </SideNav>\n */\nexport const SideNav = Object.assign(SideNavElement, {\n /**\n * SideNavLink component for individual navigation links.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\n Link: SideNavLink,\n /**\n * SideNavCollapsible component for expandable navigation sections.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\n Collapsible: SideNavCollapsible,\n /**\n * SideNavGroup component for grouping related navigation links.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\n Group: SideNavGroup,\n});\n"],"names":["SideNavContext","SideNavLink","CoreSideNavLink","ArrowDown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SideNav-B1sH17Uc.js","sources":["../src/components/SideNav/internal/utils.ts","../src/components/SideNav/SideNavContext.tsx","../src/components/SideNav/useSideNav.tsx","../src/components/SideNav/internal/SideNavLink.tsx","../src/components/SideNav/internal/SideNavContext.tsx","../src/components/SideNav/SideNavLink.tsx","../src/components/SideNav/SideNavCollapsible.tsx","../src/components/SideNav/SideNavGroup.tsx","../src/components/SideNav/internal/SideNavProvider.tsx","../src/components/SideNav/SideNav.tsx"],"sourcesContent":["import { KeyboardEvent, RefObject } from \"react\";\nimport { SideNavContextProps } from \"../SideNavContext\";\n\n/**\n * Handles keyboard navigation for SideNav components using arrow keys.\n *\n * This function manages focus movement between navigable elements in a SideNav,\n * providing circular navigation (wrapping from last to first and vice versa).\n * It updates tabindex attributes to maintain proper focus management and\n * prevents default browser behavior for arrow key navigation.\n *\n * @param e - The keyboard event that triggered the navigation\n * @param links - NodeList of all navigable elements in the SideNav\n * @param current - Ref object pointing to the currently focused element\n * @returns void\n */\nexport const sideNavKeyboardNavigation = (\n e: KeyboardEvent<HTMLAnchorElement | HTMLButtonElement>,\n links: SideNavContextProps[\"links\"],\n current: RefObject<HTMLAnchorElement | HTMLButtonElement>,\n) => {\n const currentIndex = Array.prototype.indexOf.call(links, current.current);\n\n switch (e.key) {\n case \"ArrowDown\":\n if (!links) return;\n e.preventDefault();\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === links.length - 1) {\n links[0].setAttribute(\"tabindex\", \"0\");\n (links[0] as HTMLAnchorElement | HTMLButtonElement).focus();\n break;\n }\n links[currentIndex + 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex + 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!links) return;\n links[currentIndex].setAttribute(\"tabindex\", \"-1\");\n if (currentIndex === 0) {\n links[links.length - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[links.length - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n }\n links[currentIndex - 1].setAttribute(\"tabindex\", \"0\");\n (\n links[currentIndex - 1] as HTMLAnchorElement | HTMLButtonElement\n ).focus();\n break;\n default:\n break;\n }\n};\n","import { createContext } from \"react\";\n\n/**\n * Context props for the SideNav component\n */\nexport type SideNavContextProps = {\n /**\n * List of navigable elements in the side navigation\n */\n links: NodeListOf<Element> | undefined;\n /**\n * Function to recalculate the list of navigable links\n */\n reCalculateLinks: () => void;\n /**\n * Set of currently active link IDs\n */\n activeIds: Set<string>;\n /**\n * Function to add an ID to the active set\n */\n addActiveId: (id: string) => void;\n /**\n * Function to remove an ID from the active set\n */\n removeActiveId: (id: string) => void;\n};\n\nexport const SideNavContext = createContext<SideNavContextProps | null>(null);\n","import { useContext } from \"react\";\nimport { SideNavContext } from \"./SideNavContext\";\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with links, activeIds, and utility functions\n * @throws Error if used outside of a SideNav component\n */\nexport const useSideNav = () => {\n const context = useContext(SideNavContext);\n\n if (context == null) {\n throw new Error(\"useSideNav must be wrapped in <SideNav />\");\n }\n\n return context;\n};\n","import {\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n forwardRef,\n useRef,\n useEffect,\n} from \"react\";\nimport styles from \"../SideNav.module.scss\";\nimport { sideNavKeyboardNavigation } from \"./utils\";\nimport { useSideNav } from \"../useSideNav\";\n\n/**\n * Props for the SideNavLink component\n * @extends Omit<ComponentPropsWithoutRef<\"a\">, \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\">\n */\nexport type SideNavLinkProps = Omit<\n ComponentPropsWithoutRef<\"a\">,\n \"id\" | \"onClick\" | \"onKeyDown\" | \"onKeyUp\"\n> & {\n /**\n * Unique identifier for the navigation link\n */\n id: string;\n /**\n * When true, marks the link as the current active page\n */\n active?: boolean;\n /**\n * When true, disables the link and prevents interaction\n */\n disabled?: boolean;\n /**\n * Function called when the link is clicked\n */\n onClick?: (\n e: MouseEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is pressed down on the link\n */\n onKeyDown?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n /**\n * Function called when a key is released on the link\n */\n onKeyUp?: (\n e: KeyboardEvent<HTMLAnchorElement>,\n id: SideNavLinkProps[\"id\"],\n ) => void;\n};\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef<HTMLLIElement, SideNavLinkProps>(\n (props, ref) => {\n const {\n className,\n children,\n href,\n id,\n active,\n onClick,\n onKeyDown,\n onKeyUp,\n style,\n disabled,\n ...rest\n } = props;\n const { links } = useSideNav();\n\n const linkRef = useRef<HTMLAnchorElement>(null);\n const { activeIds, addActiveId, removeActiveId } = useSideNav();\n\n useEffect(() => {\n if (!activeIds.has(id) && active) {\n addActiveId(id);\n return;\n }\n if (activeIds.has(id) && !active) {\n removeActiveId(id);\n }\n }, [active, activeIds, addActiveId, removeActiveId, id]);\n\n function onKeyDownHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n sideNavKeyboardNavigation(e, links, linkRef);\n onKeyDown?.(e, id);\n }\n\n function onKeyUpHandler(e: KeyboardEvent<HTMLAnchorElement>) {\n if (disabled) return;\n if (e.code === \"Space\" || e.code === \"Enter\") {\n e.preventDefault();\n if (onClick) {\n e.currentTarget.click();\n }\n }\n\n onKeyUp?.(e, id);\n }\n\n function onClickHandler(e: MouseEvent<HTMLAnchorElement>) {\n if (disabled) {\n e.preventDefault();\n return;\n }\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n linkRef.current?.setAttribute(\"tabindex\", \"0\");\n linkRef.current?.focus();\n\n onClick?.(e, id);\n }\n\n return (\n <li className={className} data-anv=\"sidenav-link\" style={style} ref={ref}>\n <a\n className={styles[\"sidenav-link\"]}\n aria-current={active ? \"page\" : undefined}\n href={href}\n ref={linkRef}\n onClick={onClickHandler}\n onKeyDown={onKeyDownHandler}\n onKeyUp={onKeyUpHandler}\n id={id}\n aria-disabled={disabled}\n tabIndex={active ? 0 : -1}\n {...rest}\n >\n {children}\n </a>\n </li>\n );\n },\n);\n\nSideNavLink.displayName = \"SideNavLink\";\n","import { createContext, useContext } from \"react\";\n\n/**\n * Interface for the side navigation context\n */\ninterface ISideNavContext {\n /**\n * Current location pathname for routing\n */\n location: string;\n /**\n * Function to update the current location\n */\n setLocation: (location: string) => void;\n}\n\nconst defaultContext = {\n location: \"\",\n setLocation: (_location: string) => {},\n};\n\nexport const SideNavContext: React.Context<ISideNavContext> =\n createContext(defaultContext);\n\n/**\n * Custom hook for accessing the SideNav context.\n * @returns The SideNav context with location and setLocation\n */\n\nexport const useSideNavContext = () => useContext(SideNavContext);\n","import {\n SideNavLinkProps as CoreSideNavLinkProps,\n SideNavLink as CoreSideNavLink,\n} from \"./internal/SideNavLink\";\nimport { Ref, forwardRef, useCallback } from \"react\";\nimport { useSideNavContext } from \"./internal/SideNavContext\";\n\n/**\n * Props for SideNavLink with routing support\n * @property {string} [href] - URL for the link (used when pathname is not provided)\n * @property {string} pathname - Pathname for client-side routing\n * @property {string} [search] - Optional search parameters for the URL\n * @property {boolean} [active] - When true, marks the link as the current active page\n * @property {boolean} [disabled] - When true, disables the link and prevents interaction\n * @extends CoreSideNavLinkProps\n */\ntype SideNavLinkWithRoutingProps = CoreSideNavLinkProps & {\n /**\n * Pathname for client-side routing\n */\n pathname: string;\n /**\n * Optional search parameters for the URL\n */\n search?: string;\n};\n\n/**\n * SideNavLink component with routing support\n */\nconst SideNavLinkWithRouting = forwardRef(\n (\n { href, pathname, search, onClick, ...rest }: SideNavLinkWithRoutingProps,\n ref: Ref<HTMLLIElement>,\n ) => {\n const { location, setLocation } = useSideNavContext();\n const to = pathname + (search ?? \"\");\n\n const handleClick = useCallback(\n (...args: Parameters<NonNullable<CoreSideNavLinkProps[\"onClick\"]>>) => {\n args[0].preventDefault();\n history.pushState(null, \"\", to);\n setLocation(to);\n return onClick?.(...args);\n },\n [onClick, to, setLocation],\n );\n\n return (\n <CoreSideNavLink\n href={pathname != null ? to : href}\n active={pathname === location}\n onClick={pathname != null ? handleClick : onClick}\n ref={ref}\n {...rest}\n />\n );\n },\n);\nSideNavLinkWithRouting.displayName = CoreSideNavLink.displayName;\n\nexport type SideNavLinkProps =\n | CoreSideNavLinkProps\n | SideNavLinkWithRoutingProps;\n\n/**\n * SideNavLink component for individual navigation links within a SideNav.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n * - Automatic active state tracking through context\n * - Client-side routing support with pathname prop\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n *\n * <SideNav.Link id=\"intro\" pathname=\"/intro\" active>\n * Introduction (with routing)\n * </SideNav.Link>\n */\nexport const SideNavLink = forwardRef(\n (rest: SideNavLinkProps, ref: Ref<HTMLLIElement>) => {\n if (\"pathname\" in rest) {\n return <SideNavLinkWithRouting ref={ref} {...rest} />;\n } else {\n return <CoreSideNavLink ref={ref} {...rest} />;\n }\n },\n);\nSideNavLink.displayName = CoreSideNavLink.displayName;\n","import cx from \"classnames\";\nimport {\n Children,\n ComponentPropsWithoutRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n forwardRef,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport ArrowDown from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport { Icon } from \"../Icon\";\nimport { sideNavKeyboardNavigation } from \"./internal/utils\";\nimport { useSideNav } from \"./useSideNav\";\n\n/**\n * Props for the SideNavCollapsible component\n * @extends Omit<ComponentPropsWithoutRef<\"li\">, \"onClick\">\n */\nexport type SideNavCollapsibleProps = Omit<\n ComponentPropsWithoutRef<\"li\">,\n \"onClick\"\n> & {\n /**\n * The label text displayed for the collapsible section\n */\n label: string;\n /**\n * Function called when the collapsible button is clicked\n */\n onClick?: ComponentPropsWithoutRef<\"button\">[\"onClick\"];\n /**\n * Function called when a key is pressed on the collapsible button\n */\n onKeyDown?: ComponentPropsWithoutRef<\"button\">[\"onKeyDown\"];\n /**\n * Initial expansion state for uncontrolled usage\n * @default false\n */\n defaultExpanded?: boolean;\n /**\n * Controlled expansion state\n */\n expanded?: boolean;\n};\n\n/**\n * SideNavCollapsible component for expandable navigation sections within a SideNav.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n * - Integration with SideNav keyboard navigation\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\nexport const SideNavCollapsible = forwardRef<\n HTMLLIElement,\n SideNavCollapsibleProps\n>((props, ref) => {\n const {\n className,\n children,\n label,\n onClick,\n onKeyDown,\n defaultExpanded = false,\n expanded: expandedControlled,\n ...rest\n } = props;\n const [expanded, setExpanded] = useState<boolean>(defaultExpanded);\n const [hasSelected, setHasSelected] = useState<boolean>(false);\n const sideNavGroupLabelRef = useRef<HTMLButtonElement>(null);\n const groupRef = useRef<HTMLUListElement>(null);\n const sideNavGroupClassNames = cx(styles[\"sidenav-collapsible\"], className);\n const { links, reCalculateLinks } = useSideNav();\n const groupId = useId();\n\n const setExpandedUncontrolled = (newState?: boolean) => {\n if (expandedControlled === undefined)\n setExpanded((prev) => {\n if (newState !== undefined) return newState;\n return !prev;\n });\n };\n\n useEffect(() => {\n if (expandedControlled !== undefined) {\n setExpanded(expandedControlled);\n }\n }, [expandedControlled]);\n const { activeIds } = useSideNav();\n\n const childIds: string[] = useMemo(\n () =>\n Children.map(children, (child) => (child as ReactElement).props)?.map(\n (item) => item.id,\n ) || [],\n [children],\n );\n\n function handleOnClick(e: MouseEvent<HTMLButtonElement>) {\n setExpandedUncontrolled();\n setTimeout(() => reCalculateLinks(), 0);\n\n // find current item that has tabindex 0\n const current = Array.prototype.slice\n .call(links)\n .filter((child) => (child as HTMLElement).tabIndex === 0)[0];\n\n // remove above from tabbable\n if (current) current.setAttribute(\"tabindex\", \"-1\");\n\n // make label button tabbable\n sideNavGroupLabelRef.current?.setAttribute(\"tabindex\", \"0\");\n sideNavGroupLabelRef.current?.focus();\n onClick?.(e);\n }\n\n function handleKeyDown(e: KeyboardEvent<HTMLButtonElement>) {\n sideNavKeyboardNavigation(e, links, sideNavGroupLabelRef);\n switch (e.key) {\n case \"ArrowRight\":\n setExpanded(true);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n case \"ArrowLeft\":\n setExpanded(false);\n setTimeout(() => reCalculateLinks(), 0);\n break;\n\n default:\n break;\n }\n onKeyDown?.(e);\n }\n\n useLayoutEffect(() => {\n const hasActiveChildren = childIds.some((id) => activeIds.has(id));\n if (hasActiveChildren) {\n setExpandedUncontrolled(true);\n setHasSelected(true);\n setTimeout(() => {\n const selectedChild =\n groupRef.current?.querySelector(`[active='true']`);\n selectedChild?.setAttribute(\"tabindex\", \"0\");\n reCalculateLinks();\n }, 0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!activeIds.size || !childIds.some((id) => activeIds.has(id))) {\n setHasSelected(false);\n return;\n }\n setHasSelected(true);\n }, [activeIds, childIds]);\n\n return (\n <li\n ref={ref}\n data-anv=\"sidenav-collapsible\"\n {...rest}\n className={sideNavGroupClassNames}\n >\n <button\n aria-expanded={expanded}\n aria-controls={groupId}\n type=\"button\"\n tabIndex={-1}\n onClick={handleOnClick}\n ref={sideNavGroupLabelRef}\n className={cx(styles[\"sidenav-link\"], {\n [styles[\"has-indicator\"]]: hasSelected && !expanded,\n })}\n onKeyDown={handleKeyDown}\n >\n {label}\n <Icon className={styles[\"arrow\"]} inherit svg={ArrowDown} aria-hidden />\n </button>\n <ul\n id={groupId}\n ref={groupRef}\n className={cx(styles[\"group\"], !expanded && styles.hidden)}\n >\n {children}\n </ul>\n </li>\n );\n});\n\nSideNavCollapsible.displayName = \"SideNavCollapsible\";\n","import { ComponentPropsWithoutRef, forwardRef, useId } from \"react\";\nimport styles from \"./SideNav.module.scss\";\nimport cx from \"classnames\";\n\n/**\n * Props for the SideNavGroup component\n * @extends ComponentPropsWithoutRef<\"li\">\n */\nexport type SideNavGroupProps = ComponentPropsWithoutRef<\"li\"> & {\n /**\n * The label text displayed for the navigation group\n */\n label: string;\n};\n\n/**\n * SideNavGroup component for grouping related navigation links within a SideNav.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n * - Unique ID generation for accessibility\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\nexport const SideNavGroup = forwardRef<HTMLLIElement, SideNavGroupProps>(\n (props, ref) => {\n const { children, label, ...rest } = props;\n\n const sideNavGroupClassNames = cx(styles[\"sidenav-group\"]);\n\n const groupLabelId = useId();\n return (\n <li ref={ref} data-anv=\"sidenav-group\" {...rest}>\n <label id={groupLabelId} className={styles[\"group-label\"]}>\n {label}\n </label>\n <ul aria-labelledby={groupLabelId} className={sideNavGroupClassNames}>\n {children}\n </ul>\n </li>\n );\n },\n);\n\nSideNavGroup.displayName = \"SideNavGroup\";\n","import { PropsWithChildren, useState } from \"react\";\nimport { SideNavContext } from \"./SideNavContext\";\n\n/**\n * SideNavProvider component for managing routing state in SideNav components.\n *\n * Features:\n * - Provides routing context for SideNav components\n * - Manages current location state\n * - Enables client-side routing without page reloads\n * - Integrates with browser history API\n * - Context provider for child components\n *\n * @example\n * <SideNavProvider>\n * <SideNav>\n * <SideNav.Link pathname=\"/intro\">Introduction</SideNav.Link>\n * </SideNav>\n * </SideNavProvider>\n */\nexport const SideNavProvider = ({ children }: PropsWithChildren) => {\n const [location, setLocation] = useState(window?.location.pathname);\n\n const sideNavContext = {\n location,\n setLocation,\n };\n\n return (\n <SideNavContext.Provider value={sideNavContext}>\n {children}\n </SideNavContext.Provider>\n );\n};\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useMergeRefs } from \"../../hooks\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport styles from \"./SideNav.module.scss\";\nimport { SideNavLink } from \"./SideNavLink\";\nimport { SideNavCollapsible } from \"./SideNavCollapsible\";\nimport { SideNavGroup } from \"./SideNavGroup\";\nimport { SideNavProvider } from \"./internal/SideNavProvider\";\nimport { DataTrackingId } from \"../../types\";\nimport { SideNavContext, SideNavContextProps } from \"./SideNavContext\";\n\n/**\n * Props for the SideNav component\n * @extends ComponentPropsWithoutRef<\"nav\">\n * @extends LayoutUtilProps\n */\nexport type SideNavProps = ComponentPropsWithoutRef<\"nav\"> &\n LayoutUtilProps &\n DataTrackingId;\n\nconst SideNavElement = forwardRef<HTMLElement, SideNavProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const [activeIds, setActiveIds] = useState<Set<string>>(new Set());\n const { className, children, style, ...rest } = componentProps;\n\n const addActiveId = useCallback(\n (id: string) => {\n if (activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.add(id);\n setActiveIds(newIds);\n },\n [activeIds],\n );\n\n const removeActiveId = useCallback(\n (id: string) => {\n if (!activeIds.has(id)) return;\n const newIds = new Set(activeIds);\n newIds.delete(id);\n setActiveIds(newIds);\n },\n [activeIds],\n );\n\n const sideNavRef = useRef<HTMLElement>(null);\n const [links, setLinks] = useState<SideNavContextProps[\"links\"]>();\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const reCalculateLinks = useCallback(() => {\n if (sideNavRef.current) {\n const items = sideNavRef.current.querySelectorAll(\n \"li[data-anv='sidenav-link'] a:not([aria-disabled='true']), li[data-anv='sidenav-collapsible'] button[aria-expanded]:not([aria-disabled='true'])\",\n );\n setLinks(items);\n }\n }, [sideNavRef]);\n\n useEffect(() => {\n reCalculateLinks();\n }, [reCalculateLinks]);\n\n const sidenavClassNames = cx([styles[\"sidenav\"]], className);\n\n const value = useMemo(\n () => ({\n links,\n reCalculateLinks,\n activeIds,\n addActiveId,\n removeActiveId,\n }),\n [links, activeIds, addActiveId, removeActiveId, reCalculateLinks],\n );\n\n return (\n <SideNavProvider>\n <SideNavContext.Provider value={value}>\n <nav\n ref={useMergeRefs([sideNavRef, ref])}\n className={sidenavClassNames}\n style={styleCombined}\n data-anv=\"sidenav\"\n {...rest}\n >\n <ul className={styles[\"root\"]}>{children}</ul>\n </nav>\n </SideNavContext.Provider>\n </SideNavProvider>\n );\n});\n\nSideNavElement.displayName = \"SideNav\";\n\n/**\n * SideNav component for creating hierarchical navigation menus.\n *\n * Features:\n * - Hierarchical navigation structure with links, groups, and collapsible sections\n * - Keyboard navigation support with arrow keys and focus management\n * - Active state tracking for current page/section\n * - Accessible with proper ARIA roles and labels\n * - Automatic link recalculation for dynamic content\n * - Context provider for child components\n * - Layout utility props for positioning and spacing\n *\n * @example\n * <SideNav>\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n * </SideNav>\n */\nexport const SideNav = Object.assign(SideNavElement, {\n /**\n * SideNavLink component for individual navigation links.\n *\n * Features:\n * - Individual navigation links with active state support\n * - Keyboard navigation integration with arrow keys\n * - Focus management and tabindex handling\n * - Accessible with proper ARIA attributes\n * - Click and keyboard event handling\n * - Disabled state support\n *\n * @example\n * <SideNav.Link id=\"intro\" href=\"/intro\" active>\n * Introduction\n * </SideNav.Link>\n */\n Link: SideNavLink,\n /**\n * SideNavCollapsible component for expandable navigation sections.\n *\n * Features:\n * - Expandable/collapsible navigation sections\n * - Controlled and uncontrolled expansion states\n * - Keyboard navigation with arrow keys for expansion\n * - Automatic expansion when child links are active\n * - Accessible with proper ARIA expanded states\n * - Visual indicators for active children\n *\n * @example\n * <SideNav.Collapsible label=\"Components\">\n * <SideNav.Link id=\"button\" href=\"/components/button\">\n * Button\n * </SideNav.Link>\n * <SideNav.Link id=\"input\" href=\"/components/input\">\n * Input\n * </SideNav.Link>\n * </SideNav.Collapsible>\n */\n Collapsible: SideNavCollapsible,\n /**\n * SideNavGroup component for grouping related navigation links.\n *\n * Features:\n * - Groups related navigation links with labels\n * - Accessible with proper ARIA labeling\n * - Semantic grouping for screen readers\n * - Consistent styling and spacing\n *\n * @example\n * <SideNav.Group label=\"Getting Started\">\n * <SideNav.Link id=\"intro\" href=\"/intro\">\n * Introduction\n * </SideNav.Link>\n * <SideNav.Link id=\"installation\" href=\"/installation\">\n * Installation\n * </SideNav.Link>\n * </SideNav.Group>\n */\n Group: SideNavGroup,\n});\n"],"names":["SideNavContext","SideNavLink","CoreSideNavLink","ArrowDown"],"mappings":"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"}
|
package/dist/SideNav.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as SideNav, b as SideNavCollapsible, c as SideNavGroup, a as SideNavLink, S as default } from './SideNav-
|
|
1
|
+
export { S as SideNav, b as SideNavCollapsible, c as SideNavGroup, a as SideNavLink, S as default } from './SideNav-B1sH17Uc.js';
|
|
2
2
|
//# sourceMappingURL=SideNav.js.map
|
package/dist/Skeleton.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
3
|
import { c as cx } from './index-tZvMCc77.js';
|
|
4
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
4
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
|
|
5
5
|
|
|
6
6
|
import './Skeleton.css';const skeleton = "_skeleton_unbyv_2";
|
|
7
7
|
const shade = "_shade_unbyv_17";
|
|
@@ -2,13 +2,13 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { createContext, forwardRef, useContext, useRef, useState, useEffect, useMemo } from 'react';
|
|
3
3
|
import { c as cx } from './index-tZvMCc77.js';
|
|
4
4
|
import { S as SvgCheck } from './check-Cf67OWrZ.js';
|
|
5
|
-
import { I as Icon } from './Icon-
|
|
5
|
+
import { I as Icon } from './Icon-BSuTVNaa.js';
|
|
6
6
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
7
7
|
import { e as DurationSlow } from './primitive-BByug0kD.js';
|
|
8
8
|
import { Overflow } from './Overflow.js';
|
|
9
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
9
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
|
|
10
10
|
import { m as motion } from './proxy-BbFHSE6L.js';
|
|
11
|
-
import { B as Button } from './Button-
|
|
11
|
+
import { B as Button } from './Button-92_FKAyV.js';
|
|
12
12
|
import { useTrackingId } from './useTrackingId.js';
|
|
13
13
|
|
|
14
14
|
import './Stepper.css';const StepperContext = createContext({
|
|
@@ -615,4 +615,4 @@ const Stepper = Object.assign(StepperElement, {
|
|
|
615
615
|
});
|
|
616
616
|
|
|
617
617
|
export { Stepper as S, StepperFinalPanel as a, StepperList as b, StepperNextButton as c, StepperPanel as d, StepperPrevButton as e, StepperStep as f };
|
|
618
|
-
//# sourceMappingURL=Stepper-
|
|
618
|
+
//# sourceMappingURL=Stepper-B0U_YrbZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper-xcgOQzru.js","sources":["../src/components/Stepper/internal/StepperContext.ts","../src/components/Stepper/StepperList.tsx","../src/components/Stepper/StepperStep.tsx","../src/components/Stepper/StepperPanel.tsx","../src/components/Stepper/StepperFinalPanel.tsx","../src/components/Stepper/StepperNextButton.tsx","../src/components/Stepper/StepperPrevButton.tsx","../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import { Dispatch, SetStateAction, createContext } from \"react\";\n\nexport type StepperContextProps = {\n current: number;\n setCurrent: Dispatch<SetStateAction<number>>;\n currentId: string;\n setCurrentId: Dispatch<SetStateAction<string>>;\n focus: number;\n setFocus: Dispatch<SetStateAction<number>>;\n onComplete?: () => void;\n items?: NodeListOf<HTMLElement>;\n allCompleted?: boolean;\n setAllCompleted?: Dispatch<SetStateAction<boolean>>;\n allowNavigateToPrevStep?: boolean;\n};\n\nexport const StepperContext = createContext<StepperContextProps>({\n current: 0,\n currentId: \"\",\n focus: 0,\n setFocus: () => undefined,\n setCurrent: () => undefined,\n setCurrentId: () => undefined,\n});\n","import { ComponentPropsWithoutRef, forwardRef, useContext } from \"react\";\nimport cx from \"classnames\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./StepperList.module.scss\";\n\n/**\n * Props for the StepperList component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type StepperListProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Container component for organizing and displaying stepper steps.\n *\n * Features:\n * - Groups multiple stepper steps together\n * - Displays current step label\n * - Responsive design with mobile-friendly layout\n * - Accessible with proper ARIA roles\n * - Automatic step organization\n * - Visual step indicators\n * - Context-based current step display\n * - Flexible layout with CSS Grid/Flexbox\n * - Container queries for responsive behavior\n *\n * @example\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n */\nexport const StepperList = forwardRef<HTMLDivElement, StepperListProps>(\n (props, ref) => {\n const { className, children, onKeyDown, ...rest } = props;\n const { current, items } = useContext(StepperContext);\n\n const tabListClassNames = cx(styles[\"stepper-list\"], className);\n const currentLabel =\n items?.[current].querySelectorAll(\"span\")[1].textContent;\n\n return (\n <div\n {...rest}\n className={tabListClassNames}\n data-anv=\"stepper-list\"\n ref={ref}\n role=\"tablist\"\n >\n <div className={styles[\"stepper-steps\"]}>{children}</div>\n <span className={styles.label}>{currentLabel}</span>\n </div>\n );\n },\n);\n\nStepperList.displayName = \"StepperList\";\n","import {\n forwardRef,\n useContext,\n MouseEvent,\n useRef,\n ComponentPropsWithoutRef,\n useEffect,\n useState,\n KeyboardEvent,\n} from \"react\";\nimport cx from \"classnames\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\n\nimport { Icon } from \"../Icon\";\nimport { StepperContext } from \"./internal/StepperContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\nimport styles from \"./StepperStep.module.scss\";\n\n/**\n * Props for the StepperStep component\n * @extends ComponentPropsWithoutRef<\"button\">\n */\nexport type StepperStepProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"onClick\" | \"disabled\"\n> & {\n /**\n * ID of the panel that this step is controlling.\n * Must match the id prop of the corresponding Stepper.Panel.\n */\n controls: string;\n\n /**\n * Called when the step is clicked.\n * @param e Mouse event object\n * @param index Index of the step in the stepper\n */\n onClick?: (e: MouseEvent<HTMLButtonElement>, index?: number) => void;\n};\n\n/**\n * Individual step component for the Stepper.\n *\n * Features:\n * - Visual progress indicator with animated bar\n * - Check icon for completed steps\n * - Keyboard navigation support\n * - Accessible with proper ARIA attributes\n * - Click handling for step navigation\n * - Visual states for current, completed, and future steps\n * - Responsive design with mobile-friendly layout\n * - Focus management for keyboard users\n * - Custom styling support\n *\n * @example\n * <Stepper.Step controls=\"step1\">\n * Personal Information\n * </Stepper.Step>\n *\n * @example\n * <Stepper.Step\n * controls=\"step2\"\n * onClick={(e, index) => console.log(`Clicked step ${index}`)}\n * >\n * Contact Details\n * </Stepper.Step>\n */\nexport const StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(\n (props, ref) => {\n const stepRef = useRef<HTMLButtonElement>(null);\n const {\n current,\n items,\n setCurrent,\n focus,\n setFocus,\n allCompleted,\n allowNavigateToPrevStep,\n } = useContext(StepperContext);\n const {\n onClick,\n children,\n onFocus,\n onKeyDown,\n controls,\n className,\n ...rest\n } = props;\n\n const index = useRef<number>();\n const [selected, setSelected] = useState(false);\n const [completed, setCompleted] = useState(\n // Below is to be used for custom overriding\n // completed state for a step\n // Check Stepper.stories.tsx#103 for the use case\n stepRef.current?.getAttribute(\"data-completed\") === \"true\"\n ? true\n : undefined,\n );\n\n useEffect(() => {\n if (!items) return;\n index.current = Array.prototype.indexOf.call(items, stepRef.current);\n\n setCompleted(index.current < current);\n setSelected(index.current === current);\n }, [current, items]);\n\n const stepClassNames = cx(styles[\"stepper-step\"], className, {\n [styles[\"can-navigate\"]]: allowNavigateToPrevStep,\n [styles[\"all-completed\"]]: allCompleted,\n });\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e, index.current);\n if (\n !allowNavigateToPrevStep ||\n selected ||\n index.current === undefined ||\n !items ||\n index.current > current\n ) {\n return;\n }\n setCurrent(index.current ?? 0);\n setFocus(index.current);\n items[index.current].focus();\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n const focusableItems = Array.prototype.filter.call(\n items,\n (item) =>\n item.getAttribute(\"data-completed\") === \"true\" ||\n item.getAttribute(\"aria-selected\") === \"true\",\n );\n const prevFocus = focus - 1;\n const nextFocus = focus + 1;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n e.preventDefault();\n setCurrent(focus);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (nextFocus === focusableItems.length) {\n setFocus(0);\n focusableItems[0].focus();\n focusableItems[0].setAttribute(\"tabindex\", \"0\");\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n return;\n }\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n setFocus(nextFocus);\n focusableItems[nextFocus].focus();\n focusableItems[nextFocus].setAttribute(\"tabindex\", \"0\");\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n if (focus === 0) {\n const lastItemIndex = focusableItems.length - 1;\n setFocus(lastItemIndex);\n focusableItems[lastItemIndex].focus();\n focusableItems[lastItemIndex].setAttribute(\"tabindex\", \"0\");\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n return;\n }\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n setFocus(prevFocus);\n focusableItems[prevFocus].focus();\n focusableItems[prevFocus].setAttribute(\"tabindex\", \"0\");\n break;\n }\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n data-anv=\"stepper-step\"\n className={stepClassNames}\n aria-selected={selected}\n aria-controls={controls}\n tabIndex={allowNavigateToPrevStep && selected ? 0 : -1}\n data-completed={completed}\n onClick={onClickHandler}\n onKeyDown={allowNavigateToPrevStep ? onKeyDownHandler : onKeyDown}\n {...rest}\n ref={useMergeRefs([stepRef, ref])}\n >\n <span className={styles.bar} />\n <span className={styles.label}>\n <span className={styles.circle}>\n <Icon svg={Check} inherit aria-hidden />\n </span>\n\n {children}\n </span>\n </button>\n );\n },\n);\n\nStepperStep.displayName = \"StepperStep\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { motion } from \"motion/react\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { Overflow } from \"../Overflow\";\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./StepperPanel.module.scss\";\n\n/**\n * Props for the StepperPanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperPanelProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> &\n LayoutUtilProps & {\n /**\n * Unique identifier for the panel.\n * Must match the controls prop of the corresponding Stepper.Step.\n */\n id: string;\n };\n\n/**\n * Content panel component for displaying step content in the Stepper.\n *\n * Features:\n * - Displays content for the current step only\n * - Smooth fade-in/fade-out animations\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.Panel id=\"step1\">\n * <h2>Personal Information</h2>\n * <form>\n * <label htmlFor=\"name\">Name:</label>\n * <input id=\"name\" type=\"text\" />\n * </form>\n * </Stepper.Panel>\n *\n * @example\n * <Stepper.Panel id=\"step2\" className=\"custom-panel\">\n * <div className=\"step-content\">\n * <h2>Contact Details</h2>\n * <p>Please provide your contact information.</p>\n * </div>\n * </Stepper.Panel>\n */\nexport const StepperPanel = forwardRef<HTMLDivElement, StepperPanelProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { id, className, style, children, ...rest } = componentProps;\n const { current, items, allCompleted, setCurrentId } =\n useContext(StepperContext);\n\n const currentId = items?.[current].getAttribute(\"aria-controls\");\n const isCurrent = currentId === id;\n\n useEffect(() => {\n if (isCurrent && !allCompleted) {\n setCurrentId(currentId ?? \"\");\n }\n }, [allCompleted, isCurrent, currentId, setCurrentId]);\n\n const tabPanelClassNames = cx(styles[\"stepper-panel\"], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n if (isCurrent && !allCompleted) {\n return (\n <motion.div\n style={styleCombined}\n className={tabPanelClassNames}\n transition={{\n opacity: {\n duration:\n +core.primitive.DurationSlow.value.replace(\"ms\", \"\") / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n layout\n {...rest}\n role=\"tabpanel\"\n data-anv=\"stepper-panel\"\n id={id}\n ref={ref}\n >\n <Overflow flexGrow={1}>{children}</Overflow>\n </motion.div>\n );\n }\n return <></>;\n },\n);\n\nStepperPanel.displayName = \"StepperPanel\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { motion } from \"motion/react\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { Overflow } from \"../Overflow\";\nimport { StepperContext } from \"./internal/StepperContext\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./StepperPanel.module.scss\";\n\n/**\n * Props for the StepperFinalPanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperFinalPanelProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> &\n LayoutUtilProps;\n\n/**\n * Final panel component displayed when all stepper steps are completed.\n *\n * Features:\n * - Displays only when all steps are completed\n * - Smooth fade-in animation on completion\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.FinalPanel>\n * <h2>Congratulations!</h2>\n * <p>You have successfully completed all steps.</p>\n * <Button onClick={handleSubmit}>Submit</Button>\n * </Stepper.FinalPanel>\n */\nexport const StepperFinalPanel = forwardRef<\n HTMLDivElement,\n StepperFinalPanelProps\n>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { id, className, style, children, ...rest } = componentProps;\n const { allCompleted, setCurrentId } = useContext(StepperContext);\n\n useEffect(() => {\n if (allCompleted) {\n setCurrentId(\"final-panel\");\n }\n }, [allCompleted, setCurrentId]);\n\n const tabPanelClassNames = cx(styles[\"stepper-panel\"], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n if (allCompleted) {\n return (\n <motion.div\n style={styleCombined}\n className={tabPanelClassNames}\n transition={{\n opacity: {\n duration:\n +core.primitive.DurationSlow.value.replace(\"ms\", \"\") / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n layout\n {...rest}\n role=\"tabpanel\"\n data-anv=\"stepper-final-panel\"\n tabIndex={0}\n ref={ref}\n >\n <Overflow>{children}</Overflow>\n </motion.div>\n );\n }\n return null;\n});\n\nStepperFinalPanel.displayName = \"StepperFinalPanel\";\n","import { forwardRef, useContext, MouseEvent } from \"react\";\n\nimport { Button, ButtonProps } from \"../Button\";\nimport { DataTrackingId } from \"../../types\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\n/**\n * Props for the StepperNextButton component\n * @extends ButtonProps\n */\nexport type StepperNextButtonProps = Omit<ButtonProps, \"children\"> & {\n /**\n * Label for the next button.\n * @default \"Next\"\n */\n nextLabel?: string;\n\n /**\n * Label for the complete button (shown on the last step).\n * @default \"Complete\"\n */\n completeLabel?: string;\n\n /**\n * Called when the \"Next\" button is clicked.\n * @param e MouseEvent<HTMLButtonElement>\n * @returns If the function returns `false`, or a Promise that resolves to `false`, the next step will not be executed.\n */\n onClick?: (\n e: MouseEvent<HTMLButtonElement>,\n ) => void | boolean | Promise<boolean>;\n} & DataTrackingId;\n\n/**\n * Next button component for navigating to the next step in the Stepper.\n *\n * Features:\n * - Automatically advances to the next step\n * - Changes label to \"Complete\" on the final step\n * - Supports async validation with Promise return\n * - Prevents navigation when validation fails\n * - Hides when all steps are completed\n * - Accessible with proper button semantics\n * - Customizable appearance and styling\n * - Integration with stepper context\n * - Automatic completion handling\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Stepper.NextButton\n * nextLabel=\"Continue\"\n * completeLabel=\"Finish\"\n * />\n *\n * @example\n * <Stepper.NextButton\n * onClick={async (e) => {\n * const isValid = await validateForm();\n * return isValid;\n * }}\n * appearance=\"primary\"\n * />\n */\nexport const StepperNextButton = forwardRef<\n HTMLButtonElement,\n StepperNextButtonProps\n>((props, ref) => {\n const {\n setAllCompleted,\n onComplete,\n setCurrent,\n setFocus,\n items,\n current,\n allCompleted,\n } = useContext(StepperContext);\n const {\n onClick,\n onFocus,\n nextLabel = \"Next\",\n completeLabel = \"Complete\",\n appearance = \"primary\",\n ...rest\n } = props;\n\n const proceedToNextStep = () => {\n if (items && current === items.length - 1) {\n items.forEach((item) => item.setAttribute(\"tabindex\", \"-1\"));\n setAllCompleted?.(true);\n onComplete?.();\n return;\n }\n setCurrent(current + 1);\n setFocus(current + 1);\n };\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n const onClickResult = onClick?.(e);\n\n // check if onClick returns a Promise\n if (\n onClickResult !== undefined &&\n !!onClickResult &&\n (onClickResult as unknown) instanceof Promise\n ) {\n (onClickResult as unknown as Promise<boolean>).then((result) => {\n if (result === false) return;\n proceedToNextStep();\n });\n\n // otherwise, onClick returns a boolean or void\n } else {\n if ((onClickResult as void | boolean) === false) return;\n proceedToNextStep();\n }\n };\n\n const data = {\n nextLabel: props.nextLabel,\n completeLabel: props.completeLabel,\n };\n\n const trackingId = useTrackingId({\n name: \"StepperNextButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return allCompleted ? null : (\n <Button\n data-anv=\"stepper-next-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n appearance={appearance}\n ref={ref}\n {...rest}\n >\n {items && current === items.length - 1 ? completeLabel : nextLabel}\n </Button>\n );\n});\n\nStepperNextButton.displayName = \"StepperNextButton\";\n","import { forwardRef, useContext, MouseEvent } from \"react\";\n\nimport { DataTrackingId } from \"../../types\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\n/**\n * Props for the StepperPrevButton component\n * @extends ButtonProps\n */\nexport type StepperPrevButtonProps = Omit<ButtonProps, \"children\"> & {\n /**\n * Label for the previous button.\n * @default \"Previous\"\n */\n label?: string;\n} & DataTrackingId;\n\n/**\n * Previous button component for navigating to the previous step in the Stepper.\n *\n * Features:\n * - Navigates to the previous step when available\n * - Hides when on the first step\n * - Restores navigation when returning from completion\n * - Accessible with proper button semantics\n * - Customizable label and styling\n * - Integration with stepper context\n * - Automatic focus management\n * - Support for completion state handling\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Stepper.PrevButton label=\"Go Back\" />\n *\n * @example\n * <Stepper.PrevButton\n * label=\"Previous Step\"\n * appearance=\"secondary\"\n * onClick={(e) => console.log('Going back')}\n * />\n */\nexport const StepperPrevButton = forwardRef<\n HTMLButtonElement,\n StepperPrevButtonProps\n>((props, ref) => {\n const {\n setCurrent,\n setFocus,\n allCompleted,\n setAllCompleted,\n items,\n current,\n allowNavigateToPrevStep,\n } = useContext(StepperContext);\n const { onClick, label = \"Previous\", onFocus, ...rest } = props;\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n if (allCompleted) {\n setAllCompleted?.(false);\n if (allowNavigateToPrevStep) {\n items?.[current].setAttribute(\"tabindex\", \"0\");\n }\n } else {\n setCurrent(current - 1);\n setFocus(current - 1);\n }\n\n onClick?.(e);\n };\n\n const data = {\n label: props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"StepperPrevButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return current === 0 ? null : (\n <Button\n data-anv=\"stepper-prev-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n ref={ref}\n {...rest}\n >\n {label}\n </Button>\n );\n});\n\nStepperPrevButton.displayName = \"StepperPrevButton\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\nimport { motion } from \"motion/react\";\n\nimport { useMergeRefs } from \"../../hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport { StepperList } from \"./StepperList\";\nimport { StepperStep } from \"./StepperStep\";\nimport { StepperPanel } from \"./StepperPanel\";\nimport { StepperFinalPanel } from \"./StepperFinalPanel\";\nimport { StepperNextButton } from \"./StepperNextButton\";\nimport { StepperPrevButton } from \"./StepperPrevButton\";\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./Stepper.module.scss\";\n\n/**\n * Props for the Stepper component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\"\n> &\n LayoutUtilProps & {\n /**\n * Default step to start on.\n * @default undefined\n */\n defaultIndex?: number;\n\n /**\n * Allows users to navigate to previous steps.\n * @default undefined\n */\n allowNavigateToPrevStep?: boolean;\n\n /**\n * Returns current step data when step changes.\n * @param data Object containing currentStepId and currentStepIndex\n * @param data.currentStepId ID given to Stepper.Panel, or \"final-panel\"\n * @param data.currentStepIndex Index of current step, or undefined on final panel\n */\n onChange?: (data: {\n currentStepId: string | \"final-panel\";\n currentStepIndex?: number;\n }) => void;\n\n /**\n * Called when all steps are completed.\n */\n onComplete?: () => void;\n };\n\nconst StepperElement = forwardRef<HTMLDivElement, StepperProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n defaultIndex,\n className,\n allowNavigateToPrevStep,\n children,\n onChange,\n onComplete,\n style,\n ...rest\n } = componentProps;\n const tabRef = useRef<HTMLDivElement>(null);\n const [items, setItems] = useState<NodeListOf<HTMLElement>>();\n const [allCompleted, setAllCompleted] = useState(false);\n const [current, setCurrent] = useState<number>(defaultIndex ?? 0);\n const [currentId, setCurrentId] = useState<string>(\"\");\n const [focus, setFocus] = useState<number>(defaultIndex ?? 0);\n const stepperClassNames = cx(styles[\"stepper\"], className);\n\n useEffect(() => {\n setItems(tabRef.current?.querySelectorAll(\"[role=tab]:not([disabled])\"));\n }, []);\n\n useEffect(() => {\n onChange?.({\n currentStepId: currentId,\n currentStepIndex: allCompleted ? undefined : current,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allCompleted, currentId, onChange]);\n\n const styleCombined = { ...style, ...layoutStyles };\n\n const value = useMemo(\n () => ({\n current,\n setCurrent,\n currentId,\n setCurrentId,\n focus,\n setFocus,\n onComplete,\n items,\n allCompleted,\n setAllCompleted,\n allowNavigateToPrevStep,\n }),\n [\n current,\n currentId,\n focus,\n onComplete,\n items,\n allCompleted,\n setAllCompleted,\n allowNavigateToPrevStep,\n ],\n );\n\n return (\n <StepperContext.Provider value={value}>\n <motion.div\n transition={{ duration: 0 }}\n layout\n className={stepperClassNames}\n data-anv=\"stepper\"\n style={styleCombined}\n {...rest}\n ref={useMergeRefs([tabRef, ref])}\n >\n {children}\n </motion.div>\n </StepperContext.Provider>\n );\n },\n);\n\nStepperElement.displayName = \"Stepper\";\n\n/**\n * Stepper component for creating multi-step workflows and forms.\n *\n * Features:\n * - Multi-step navigation with visual progress indicators\n * - Keyboard navigation support with arrow keys\n * - Optional navigation to previous steps\n * - Smooth animations and transitions\n * - Accessible with proper ARIA roles and attributes\n * - Customizable step labels and content\n * - Completion state handling\n * - Layout utilities for positioning and spacing\n * - Motion animations for step transitions\n * - Context-based state management\n *\n * @example\n * <Stepper defaultIndex={0} allowNavigateToPrevStep>\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n *\n * <Stepper.Panel id=\"step1\">\n * <h2>Step 1 Content</h2>\n * <p>This is the first step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.Panel id=\"step2\">\n * <h2>Step 2 Content</h2>\n * <p>This is the second step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.Panel id=\"step3\">\n * <h2>Step 3 Content</h2>\n * <p>This is the final step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.FinalPanel>\n * <h2>Completed!</h2>\n * <p>All steps have been completed successfully.</p>\n * </Stepper.FinalPanel>\n *\n * <Stepper.PrevButton />\n * <Stepper.NextButton />\n * </Stepper>\n */\nexport const Stepper = Object.assign(StepperElement, {\n /**\n * Individual step component for the Stepper.\n *\n * Features:\n * - Visual progress indicator with animated bar\n * - Check icon for completed steps\n * - Keyboard navigation support\n * - Accessible with proper ARIA attributes\n * - Click handling for step navigation\n * - Visual states for current, completed, and future steps\n * - Responsive design with mobile-friendly layout\n * - Focus management for keyboard users\n * - Custom styling support\n *\n * @example\n * <Stepper.Step controls=\"step1\">\n * Personal Information\n * </Stepper.Step>\n *\n * @example\n * <Stepper.Step\n * controls=\"step2\"\n * onClick={(e, index) => console.log(`Clicked step ${index}`)}\n * >\n * Contact Details\n * </Stepper.Step>\n */\n Step: StepperStep,\n\n /**\n * Container component for organizing and displaying stepper steps.\n *\n * Features:\n * - Groups multiple stepper steps together\n * - Displays current step label\n * - Responsive design with mobile-friendly layout\n * - Accessible with proper ARIA roles\n * - Automatic step organization\n * - Visual step indicators\n * - Context-based current step display\n * - Flexible layout with CSS Grid/Flexbox\n * - Container queries for responsive behavior\n *\n * @example\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n */\n List: StepperList,\n\n /**\n * Content panel component for displaying step content in the Stepper.\n *\n * Features:\n * - Displays content for the current step only\n * - Smooth fade-in/fade-out animations\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.Panel id=\"step1\">\n * <h2>Personal Information</h2>\n * <form>\n * <label htmlFor=\"name\">Name:</label>\n * <input id=\"name\" type=\"text\" />\n * </form>\n * </Stepper.Panel>\n */\n Panel: StepperPanel,\n\n /**\n * Next button component for navigating to the next step in the Stepper.\n *\n * Features:\n * - Automatically advances to the next step\n * - Changes label to \"Complete\" on the final step\n * - Supports async validation with Promise return\n * - Prevents navigation when validation fails\n * - Hides when all steps are completed\n * - Accessible with proper button semantics\n * - Customizable appearance and styling\n * - Integration with stepper context\n * - Automatic completion handling\n *\n * @example\n * <Stepper.NextButton\n * nextLabel=\"Continue\"\n * completeLabel=\"Finish\"\n * />\n *\n * @example\n * <Stepper.NextButton\n * onClick={async (e) => {\n * const isValid = await validateForm();\n * return isValid;\n * }}\n * appearance=\"primary\"\n * />\n */\n NextButton: StepperNextButton,\n\n /**\n * Previous button component for navigating to the previous step in the Stepper.\n *\n * Features:\n * - Navigates to the previous step when available\n * - Hides when on the first step\n * - Restores navigation when returning from completion\n * - Accessible with proper button semantics\n * - Customizable label and styling\n * - Integration with stepper context\n * - Automatic focus management\n * - Support for completion state handling\n *\n * @example\n * <Stepper.PrevButton label=\"Go Back\" />\n *\n * @example\n * <Stepper.PrevButton\n * label=\"Previous Step\"\n * appearance=\"secondary\"\n * onClick={(e) => console.log('Going back')}\n * />\n */\n PrevButton: StepperPrevButton,\n\n /**\n * Final panel component displayed when all stepper steps are completed.\n *\n * Features:\n * - Displays only when all steps are completed\n * - Smooth fade-in animation on completion\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.FinalPanel>\n * <h2>Congratulations!</h2>\n * <p>You have successfully completed all steps.</p>\n * <Button onClick={handleSubmit}>Submit</Button>\n * </Stepper.FinalPanel>\n */\n FinalPanel: StepperFinalPanel,\n});\n"],"names":["styles","Check","core.primitive.DurationSlow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Stepper-B0U_YrbZ.js","sources":["../src/components/Stepper/internal/StepperContext.ts","../src/components/Stepper/StepperList.tsx","../src/components/Stepper/StepperStep.tsx","../src/components/Stepper/StepperPanel.tsx","../src/components/Stepper/StepperFinalPanel.tsx","../src/components/Stepper/StepperNextButton.tsx","../src/components/Stepper/StepperPrevButton.tsx","../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import { Dispatch, SetStateAction, createContext } from \"react\";\n\nexport type StepperContextProps = {\n current: number;\n setCurrent: Dispatch<SetStateAction<number>>;\n currentId: string;\n setCurrentId: Dispatch<SetStateAction<string>>;\n focus: number;\n setFocus: Dispatch<SetStateAction<number>>;\n onComplete?: () => void;\n items?: NodeListOf<HTMLElement>;\n allCompleted?: boolean;\n setAllCompleted?: Dispatch<SetStateAction<boolean>>;\n allowNavigateToPrevStep?: boolean;\n};\n\nexport const StepperContext = createContext<StepperContextProps>({\n current: 0,\n currentId: \"\",\n focus: 0,\n setFocus: () => undefined,\n setCurrent: () => undefined,\n setCurrentId: () => undefined,\n});\n","import { ComponentPropsWithoutRef, forwardRef, useContext } from \"react\";\nimport cx from \"classnames\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./StepperList.module.scss\";\n\n/**\n * Props for the StepperList component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type StepperListProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * Container component for organizing and displaying stepper steps.\n *\n * Features:\n * - Groups multiple stepper steps together\n * - Displays current step label\n * - Responsive design with mobile-friendly layout\n * - Accessible with proper ARIA roles\n * - Automatic step organization\n * - Visual step indicators\n * - Context-based current step display\n * - Flexible layout with CSS Grid/Flexbox\n * - Container queries for responsive behavior\n *\n * @example\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n */\nexport const StepperList = forwardRef<HTMLDivElement, StepperListProps>(\n (props, ref) => {\n const { className, children, onKeyDown, ...rest } = props;\n const { current, items } = useContext(StepperContext);\n\n const tabListClassNames = cx(styles[\"stepper-list\"], className);\n const currentLabel =\n items?.[current].querySelectorAll(\"span\")[1].textContent;\n\n return (\n <div\n {...rest}\n className={tabListClassNames}\n data-anv=\"stepper-list\"\n ref={ref}\n role=\"tablist\"\n >\n <div className={styles[\"stepper-steps\"]}>{children}</div>\n <span className={styles.label}>{currentLabel}</span>\n </div>\n );\n },\n);\n\nStepperList.displayName = \"StepperList\";\n","import {\n forwardRef,\n useContext,\n MouseEvent,\n useRef,\n ComponentPropsWithoutRef,\n useEffect,\n useState,\n KeyboardEvent,\n} from \"react\";\nimport cx from \"classnames\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\n\nimport { Icon } from \"../Icon\";\nimport { StepperContext } from \"./internal/StepperContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\nimport styles from \"./StepperStep.module.scss\";\n\n/**\n * Props for the StepperStep component\n * @extends ComponentPropsWithoutRef<\"button\">\n */\nexport type StepperStepProps = Omit<\n ComponentPropsWithoutRef<\"button\">,\n \"onClick\" | \"disabled\"\n> & {\n /**\n * ID of the panel that this step is controlling.\n * Must match the id prop of the corresponding Stepper.Panel.\n */\n controls: string;\n\n /**\n * Called when the step is clicked.\n * @param e Mouse event object\n * @param index Index of the step in the stepper\n */\n onClick?: (e: MouseEvent<HTMLButtonElement>, index?: number) => void;\n};\n\n/**\n * Individual step component for the Stepper.\n *\n * Features:\n * - Visual progress indicator with animated bar\n * - Check icon for completed steps\n * - Keyboard navigation support\n * - Accessible with proper ARIA attributes\n * - Click handling for step navigation\n * - Visual states for current, completed, and future steps\n * - Responsive design with mobile-friendly layout\n * - Focus management for keyboard users\n * - Custom styling support\n *\n * @example\n * <Stepper.Step controls=\"step1\">\n * Personal Information\n * </Stepper.Step>\n *\n * @example\n * <Stepper.Step\n * controls=\"step2\"\n * onClick={(e, index) => console.log(`Clicked step ${index}`)}\n * >\n * Contact Details\n * </Stepper.Step>\n */\nexport const StepperStep = forwardRef<HTMLButtonElement, StepperStepProps>(\n (props, ref) => {\n const stepRef = useRef<HTMLButtonElement>(null);\n const {\n current,\n items,\n setCurrent,\n focus,\n setFocus,\n allCompleted,\n allowNavigateToPrevStep,\n } = useContext(StepperContext);\n const {\n onClick,\n children,\n onFocus,\n onKeyDown,\n controls,\n className,\n ...rest\n } = props;\n\n const index = useRef<number>();\n const [selected, setSelected] = useState(false);\n const [completed, setCompleted] = useState(\n // Below is to be used for custom overriding\n // completed state for a step\n // Check Stepper.stories.tsx#103 for the use case\n stepRef.current?.getAttribute(\"data-completed\") === \"true\"\n ? true\n : undefined,\n );\n\n useEffect(() => {\n if (!items) return;\n index.current = Array.prototype.indexOf.call(items, stepRef.current);\n\n setCompleted(index.current < current);\n setSelected(index.current === current);\n }, [current, items]);\n\n const stepClassNames = cx(styles[\"stepper-step\"], className, {\n [styles[\"can-navigate\"]]: allowNavigateToPrevStep,\n [styles[\"all-completed\"]]: allCompleted,\n });\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n onClick?.(e, index.current);\n if (\n !allowNavigateToPrevStep ||\n selected ||\n index.current === undefined ||\n !items ||\n index.current > current\n ) {\n return;\n }\n setCurrent(index.current ?? 0);\n setFocus(index.current);\n items[index.current].focus();\n };\n\n const onKeyDownHandler = (e: KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(e);\n const focusableItems = Array.prototype.filter.call(\n items,\n (item) =>\n item.getAttribute(\"data-completed\") === \"true\" ||\n item.getAttribute(\"aria-selected\") === \"true\",\n );\n const prevFocus = focus - 1;\n const nextFocus = focus + 1;\n switch (e.code) {\n case \"Enter\":\n case \"Space\":\n e.preventDefault();\n setCurrent(focus);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (nextFocus === focusableItems.length) {\n setFocus(0);\n focusableItems[0].focus();\n focusableItems[0].setAttribute(\"tabindex\", \"0\");\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n return;\n }\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n setFocus(nextFocus);\n focusableItems[nextFocus].focus();\n focusableItems[nextFocus].setAttribute(\"tabindex\", \"0\");\n break;\n case \"ArrowLeft\":\n e.preventDefault();\n if (focus === 0) {\n const lastItemIndex = focusableItems.length - 1;\n setFocus(lastItemIndex);\n focusableItems[lastItemIndex].focus();\n focusableItems[lastItemIndex].setAttribute(\"tabindex\", \"0\");\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n return;\n }\n stepRef.current?.setAttribute(\"tabindex\", \"-1\");\n setFocus(prevFocus);\n focusableItems[prevFocus].focus();\n focusableItems[prevFocus].setAttribute(\"tabindex\", \"0\");\n break;\n }\n };\n\n return (\n <button\n type=\"button\"\n role=\"tab\"\n data-anv=\"stepper-step\"\n className={stepClassNames}\n aria-selected={selected}\n aria-controls={controls}\n tabIndex={allowNavigateToPrevStep && selected ? 0 : -1}\n data-completed={completed}\n onClick={onClickHandler}\n onKeyDown={allowNavigateToPrevStep ? onKeyDownHandler : onKeyDown}\n {...rest}\n ref={useMergeRefs([stepRef, ref])}\n >\n <span className={styles.bar} />\n <span className={styles.label}>\n <span className={styles.circle}>\n <Icon svg={Check} inherit aria-hidden />\n </span>\n\n {children}\n </span>\n </button>\n );\n },\n);\n\nStepperStep.displayName = \"StepperStep\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { motion } from \"motion/react\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { Overflow } from \"../Overflow\";\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./StepperPanel.module.scss\";\n\n/**\n * Props for the StepperPanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperPanelProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> &\n LayoutUtilProps & {\n /**\n * Unique identifier for the panel.\n * Must match the controls prop of the corresponding Stepper.Step.\n */\n id: string;\n };\n\n/**\n * Content panel component for displaying step content in the Stepper.\n *\n * Features:\n * - Displays content for the current step only\n * - Smooth fade-in/fade-out animations\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.Panel id=\"step1\">\n * <h2>Personal Information</h2>\n * <form>\n * <label htmlFor=\"name\">Name:</label>\n * <input id=\"name\" type=\"text\" />\n * </form>\n * </Stepper.Panel>\n *\n * @example\n * <Stepper.Panel id=\"step2\" className=\"custom-panel\">\n * <div className=\"step-content\">\n * <h2>Contact Details</h2>\n * <p>Please provide your contact information.</p>\n * </div>\n * </Stepper.Panel>\n */\nexport const StepperPanel = forwardRef<HTMLDivElement, StepperPanelProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { id, className, style, children, ...rest } = componentProps;\n const { current, items, allCompleted, setCurrentId } =\n useContext(StepperContext);\n\n const currentId = items?.[current].getAttribute(\"aria-controls\");\n const isCurrent = currentId === id;\n\n useEffect(() => {\n if (isCurrent && !allCompleted) {\n setCurrentId(currentId ?? \"\");\n }\n }, [allCompleted, isCurrent, currentId, setCurrentId]);\n\n const tabPanelClassNames = cx(styles[\"stepper-panel\"], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n if (isCurrent && !allCompleted) {\n return (\n <motion.div\n style={styleCombined}\n className={tabPanelClassNames}\n transition={{\n opacity: {\n duration:\n +core.primitive.DurationSlow.value.replace(\"ms\", \"\") / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n layout\n {...rest}\n role=\"tabpanel\"\n data-anv=\"stepper-panel\"\n id={id}\n ref={ref}\n >\n <Overflow flexGrow={1}>{children}</Overflow>\n </motion.div>\n );\n }\n return <></>;\n },\n);\n\nStepperPanel.displayName = \"StepperPanel\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useContext,\n useEffect,\n} from \"react\";\nimport cx from \"classnames\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport { motion } from \"motion/react\";\n\nimport { LayoutUtilProps } from \"../../types\";\nimport { Overflow } from \"../Overflow\";\nimport { StepperContext } from \"./internal/StepperContext\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./StepperPanel.module.scss\";\n\n/**\n * Props for the StepperFinalPanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperFinalPanelProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\"\n> &\n LayoutUtilProps;\n\n/**\n * Final panel component displayed when all stepper steps are completed.\n *\n * Features:\n * - Displays only when all steps are completed\n * - Smooth fade-in animation on completion\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.FinalPanel>\n * <h2>Congratulations!</h2>\n * <p>You have successfully completed all steps.</p>\n * <Button onClick={handleSubmit}>Submit</Button>\n * </Stepper.FinalPanel>\n */\nexport const StepperFinalPanel = forwardRef<\n HTMLDivElement,\n StepperFinalPanelProps\n>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { id, className, style, children, ...rest } = componentProps;\n const { allCompleted, setCurrentId } = useContext(StepperContext);\n\n useEffect(() => {\n if (allCompleted) {\n setCurrentId(\"final-panel\");\n }\n }, [allCompleted, setCurrentId]);\n\n const tabPanelClassNames = cx(styles[\"stepper-panel\"], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n if (allCompleted) {\n return (\n <motion.div\n style={styleCombined}\n className={tabPanelClassNames}\n transition={{\n opacity: {\n duration:\n +core.primitive.DurationSlow.value.replace(\"ms\", \"\") / 1000,\n },\n }}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n layout\n {...rest}\n role=\"tabpanel\"\n data-anv=\"stepper-final-panel\"\n tabIndex={0}\n ref={ref}\n >\n <Overflow>{children}</Overflow>\n </motion.div>\n );\n }\n return null;\n});\n\nStepperFinalPanel.displayName = \"StepperFinalPanel\";\n","import { forwardRef, useContext, MouseEvent } from \"react\";\n\nimport { Button, ButtonProps } from \"../Button\";\nimport { DataTrackingId } from \"../../types\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\n/**\n * Props for the StepperNextButton component\n * @extends ButtonProps\n */\nexport type StepperNextButtonProps = Omit<ButtonProps, \"children\"> & {\n /**\n * Label for the next button.\n * @default \"Next\"\n */\n nextLabel?: string;\n\n /**\n * Label for the complete button (shown on the last step).\n * @default \"Complete\"\n */\n completeLabel?: string;\n\n /**\n * Called when the \"Next\" button is clicked.\n * @param e MouseEvent<HTMLButtonElement>\n * @returns If the function returns `false`, or a Promise that resolves to `false`, the next step will not be executed.\n */\n onClick?: (\n e: MouseEvent<HTMLButtonElement>,\n ) => void | boolean | Promise<boolean>;\n} & DataTrackingId;\n\n/**\n * Next button component for navigating to the next step in the Stepper.\n *\n * Features:\n * - Automatically advances to the next step\n * - Changes label to \"Complete\" on the final step\n * - Supports async validation with Promise return\n * - Prevents navigation when validation fails\n * - Hides when all steps are completed\n * - Accessible with proper button semantics\n * - Customizable appearance and styling\n * - Integration with stepper context\n * - Automatic completion handling\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Stepper.NextButton\n * nextLabel=\"Continue\"\n * completeLabel=\"Finish\"\n * />\n *\n * @example\n * <Stepper.NextButton\n * onClick={async (e) => {\n * const isValid = await validateForm();\n * return isValid;\n * }}\n * appearance=\"primary\"\n * />\n */\nexport const StepperNextButton = forwardRef<\n HTMLButtonElement,\n StepperNextButtonProps\n>((props, ref) => {\n const {\n setAllCompleted,\n onComplete,\n setCurrent,\n setFocus,\n items,\n current,\n allCompleted,\n } = useContext(StepperContext);\n const {\n onClick,\n onFocus,\n nextLabel = \"Next\",\n completeLabel = \"Complete\",\n appearance = \"primary\",\n ...rest\n } = props;\n\n const proceedToNextStep = () => {\n if (items && current === items.length - 1) {\n items.forEach((item) => item.setAttribute(\"tabindex\", \"-1\"));\n setAllCompleted?.(true);\n onComplete?.();\n return;\n }\n setCurrent(current + 1);\n setFocus(current + 1);\n };\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n const onClickResult = onClick?.(e);\n\n // check if onClick returns a Promise\n if (\n onClickResult !== undefined &&\n !!onClickResult &&\n (onClickResult as unknown) instanceof Promise\n ) {\n (onClickResult as unknown as Promise<boolean>).then((result) => {\n if (result === false) return;\n proceedToNextStep();\n });\n\n // otherwise, onClick returns a boolean or void\n } else {\n if ((onClickResult as void | boolean) === false) return;\n proceedToNextStep();\n }\n };\n\n const data = {\n nextLabel: props.nextLabel,\n completeLabel: props.completeLabel,\n };\n\n const trackingId = useTrackingId({\n name: \"StepperNextButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return allCompleted ? null : (\n <Button\n data-anv=\"stepper-next-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n appearance={appearance}\n ref={ref}\n {...rest}\n >\n {items && current === items.length - 1 ? completeLabel : nextLabel}\n </Button>\n );\n});\n\nStepperNextButton.displayName = \"StepperNextButton\";\n","import { forwardRef, useContext, MouseEvent } from \"react\";\n\nimport { DataTrackingId } from \"../../types\";\nimport { Button, ButtonProps } from \"../Button\";\nimport { useTrackingId } from \"../../hooks\";\n\nimport { StepperContext } from \"./internal/StepperContext\";\n\n/**\n * Props for the StepperPrevButton component\n * @extends ButtonProps\n */\nexport type StepperPrevButtonProps = Omit<ButtonProps, \"children\"> & {\n /**\n * Label for the previous button.\n * @default \"Previous\"\n */\n label?: string;\n} & DataTrackingId;\n\n/**\n * Previous button component for navigating to the previous step in the Stepper.\n *\n * Features:\n * - Navigates to the previous step when available\n * - Hides when on the first step\n * - Restores navigation when returning from completion\n * - Accessible with proper button semantics\n * - Customizable label and styling\n * - Integration with stepper context\n * - Automatic focus management\n * - Support for completion state handling\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Stepper.PrevButton label=\"Go Back\" />\n *\n * @example\n * <Stepper.PrevButton\n * label=\"Previous Step\"\n * appearance=\"secondary\"\n * onClick={(e) => console.log('Going back')}\n * />\n */\nexport const StepperPrevButton = forwardRef<\n HTMLButtonElement,\n StepperPrevButtonProps\n>((props, ref) => {\n const {\n setCurrent,\n setFocus,\n allCompleted,\n setAllCompleted,\n items,\n current,\n allowNavigateToPrevStep,\n } = useContext(StepperContext);\n const { onClick, label = \"Previous\", onFocus, ...rest } = props;\n\n const onClickHandler = (e: MouseEvent<HTMLButtonElement>) => {\n if (allCompleted) {\n setAllCompleted?.(false);\n if (allowNavigateToPrevStep) {\n items?.[current].setAttribute(\"tabindex\", \"0\");\n }\n } else {\n setCurrent(current - 1);\n setFocus(current - 1);\n }\n\n onClick?.(e);\n };\n\n const data = {\n label: props.label,\n };\n\n const trackingId = useTrackingId({\n name: \"StepperPrevButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n return current === 0 ? null : (\n <Button\n data-anv=\"stepper-prev-button\"\n data-tracking-id={trackingId}\n onClick={onClickHandler}\n ref={ref}\n {...rest}\n >\n {label}\n </Button>\n );\n});\n\nStepperPrevButton.displayName = \"StepperPrevButton\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport cx from \"classnames\";\nimport { motion } from \"motion/react\";\n\nimport { useMergeRefs } from \"../../hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport { StepperList } from \"./StepperList\";\nimport { StepperStep } from \"./StepperStep\";\nimport { StepperPanel } from \"./StepperPanel\";\nimport { StepperFinalPanel } from \"./StepperFinalPanel\";\nimport { StepperNextButton } from \"./StepperNextButton\";\nimport { StepperPrevButton } from \"./StepperPrevButton\";\nimport { StepperContext } from \"./internal/StepperContext\";\n\nimport styles from \"./Stepper.module.scss\";\n\n/**\n * Props for the Stepper component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type StepperProps = Omit<\n ComponentPropsWithoutRef<\"div\">,\n \"onAnimationStart\" | \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"onChange\"\n> &\n LayoutUtilProps & {\n /**\n * Default step to start on.\n * @default undefined\n */\n defaultIndex?: number;\n\n /**\n * Allows users to navigate to previous steps.\n * @default undefined\n */\n allowNavigateToPrevStep?: boolean;\n\n /**\n * Returns current step data when step changes.\n * @param data Object containing currentStepId and currentStepIndex\n * @param data.currentStepId ID given to Stepper.Panel, or \"final-panel\"\n * @param data.currentStepIndex Index of current step, or undefined on final panel\n */\n onChange?: (data: {\n currentStepId: string | \"final-panel\";\n currentStepIndex?: number;\n }) => void;\n\n /**\n * Called when all steps are completed.\n */\n onComplete?: () => void;\n };\n\nconst StepperElement = forwardRef<HTMLDivElement, StepperProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n defaultIndex,\n className,\n allowNavigateToPrevStep,\n children,\n onChange,\n onComplete,\n style,\n ...rest\n } = componentProps;\n const tabRef = useRef<HTMLDivElement>(null);\n const [items, setItems] = useState<NodeListOf<HTMLElement>>();\n const [allCompleted, setAllCompleted] = useState(false);\n const [current, setCurrent] = useState<number>(defaultIndex ?? 0);\n const [currentId, setCurrentId] = useState<string>(\"\");\n const [focus, setFocus] = useState<number>(defaultIndex ?? 0);\n const stepperClassNames = cx(styles[\"stepper\"], className);\n\n useEffect(() => {\n setItems(tabRef.current?.querySelectorAll(\"[role=tab]:not([disabled])\"));\n }, []);\n\n useEffect(() => {\n onChange?.({\n currentStepId: currentId,\n currentStepIndex: allCompleted ? undefined : current,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allCompleted, currentId, onChange]);\n\n const styleCombined = { ...style, ...layoutStyles };\n\n const value = useMemo(\n () => ({\n current,\n setCurrent,\n currentId,\n setCurrentId,\n focus,\n setFocus,\n onComplete,\n items,\n allCompleted,\n setAllCompleted,\n allowNavigateToPrevStep,\n }),\n [\n current,\n currentId,\n focus,\n onComplete,\n items,\n allCompleted,\n setAllCompleted,\n allowNavigateToPrevStep,\n ],\n );\n\n return (\n <StepperContext.Provider value={value}>\n <motion.div\n transition={{ duration: 0 }}\n layout\n className={stepperClassNames}\n data-anv=\"stepper\"\n style={styleCombined}\n {...rest}\n ref={useMergeRefs([tabRef, ref])}\n >\n {children}\n </motion.div>\n </StepperContext.Provider>\n );\n },\n);\n\nStepperElement.displayName = \"Stepper\";\n\n/**\n * Stepper component for creating multi-step workflows and forms.\n *\n * Features:\n * - Multi-step navigation with visual progress indicators\n * - Keyboard navigation support with arrow keys\n * - Optional navigation to previous steps\n * - Smooth animations and transitions\n * - Accessible with proper ARIA roles and attributes\n * - Customizable step labels and content\n * - Completion state handling\n * - Layout utilities for positioning and spacing\n * - Motion animations for step transitions\n * - Context-based state management\n *\n * @example\n * <Stepper defaultIndex={0} allowNavigateToPrevStep>\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n *\n * <Stepper.Panel id=\"step1\">\n * <h2>Step 1 Content</h2>\n * <p>This is the first step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.Panel id=\"step2\">\n * <h2>Step 2 Content</h2>\n * <p>This is the second step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.Panel id=\"step3\">\n * <h2>Step 3 Content</h2>\n * <p>This is the final step content.</p>\n * </Stepper.Panel>\n *\n * <Stepper.FinalPanel>\n * <h2>Completed!</h2>\n * <p>All steps have been completed successfully.</p>\n * </Stepper.FinalPanel>\n *\n * <Stepper.PrevButton />\n * <Stepper.NextButton />\n * </Stepper>\n */\nexport const Stepper = Object.assign(StepperElement, {\n /**\n * Individual step component for the Stepper.\n *\n * Features:\n * - Visual progress indicator with animated bar\n * - Check icon for completed steps\n * - Keyboard navigation support\n * - Accessible with proper ARIA attributes\n * - Click handling for step navigation\n * - Visual states for current, completed, and future steps\n * - Responsive design with mobile-friendly layout\n * - Focus management for keyboard users\n * - Custom styling support\n *\n * @example\n * <Stepper.Step controls=\"step1\">\n * Personal Information\n * </Stepper.Step>\n *\n * @example\n * <Stepper.Step\n * controls=\"step2\"\n * onClick={(e, index) => console.log(`Clicked step ${index}`)}\n * >\n * Contact Details\n * </Stepper.Step>\n */\n Step: StepperStep,\n\n /**\n * Container component for organizing and displaying stepper steps.\n *\n * Features:\n * - Groups multiple stepper steps together\n * - Displays current step label\n * - Responsive design with mobile-friendly layout\n * - Accessible with proper ARIA roles\n * - Automatic step organization\n * - Visual step indicators\n * - Context-based current step display\n * - Flexible layout with CSS Grid/Flexbox\n * - Container queries for responsive behavior\n *\n * @example\n * <Stepper.List>\n * <Stepper.Step controls=\"step1\">Step 1</Stepper.Step>\n * <Stepper.Step controls=\"step2\">Step 2</Stepper.Step>\n * <Stepper.Step controls=\"step3\">Step 3</Stepper.Step>\n * </Stepper.List>\n */\n List: StepperList,\n\n /**\n * Content panel component for displaying step content in the Stepper.\n *\n * Features:\n * - Displays content for the current step only\n * - Smooth fade-in/fade-out animations\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.Panel id=\"step1\">\n * <h2>Personal Information</h2>\n * <form>\n * <label htmlFor=\"name\">Name:</label>\n * <input id=\"name\" type=\"text\" />\n * </form>\n * </Stepper.Panel>\n */\n Panel: StepperPanel,\n\n /**\n * Next button component for navigating to the next step in the Stepper.\n *\n * Features:\n * - Automatically advances to the next step\n * - Changes label to \"Complete\" on the final step\n * - Supports async validation with Promise return\n * - Prevents navigation when validation fails\n * - Hides when all steps are completed\n * - Accessible with proper button semantics\n * - Customizable appearance and styling\n * - Integration with stepper context\n * - Automatic completion handling\n *\n * @example\n * <Stepper.NextButton\n * nextLabel=\"Continue\"\n * completeLabel=\"Finish\"\n * />\n *\n * @example\n * <Stepper.NextButton\n * onClick={async (e) => {\n * const isValid = await validateForm();\n * return isValid;\n * }}\n * appearance=\"primary\"\n * />\n */\n NextButton: StepperNextButton,\n\n /**\n * Previous button component for navigating to the previous step in the Stepper.\n *\n * Features:\n * - Navigates to the previous step when available\n * - Hides when on the first step\n * - Restores navigation when returning from completion\n * - Accessible with proper button semantics\n * - Customizable label and styling\n * - Integration with stepper context\n * - Automatic focus management\n * - Support for completion state handling\n *\n * @example\n * <Stepper.PrevButton label=\"Go Back\" />\n *\n * @example\n * <Stepper.PrevButton\n * label=\"Previous Step\"\n * appearance=\"secondary\"\n * onClick={(e) => console.log('Going back')}\n * />\n */\n PrevButton: StepperPrevButton,\n\n /**\n * Final panel component displayed when all stepper steps are completed.\n *\n * Features:\n * - Displays only when all steps are completed\n * - Smooth fade-in animation on completion\n * - Automatic overflow handling with scroll support\n * - Accessible with proper ARIA roles\n * - Layout utilities for positioning and spacing\n * - Motion animations for smooth transitions\n * - Focus management for keyboard navigation\n * - Responsive design with flexible layout\n * - Context-based visibility control\n *\n * @example\n * <Stepper.FinalPanel>\n * <h2>Congratulations!</h2>\n * <p>You have successfully completed all steps.</p>\n * <Button onClick={handleSubmit}>Submit</Button>\n * </Stepper.FinalPanel>\n */\n FinalPanel: StepperFinalPanel,\n});\n"],"names":["styles","Check","core.primitive.DurationSlow"],"mappings":"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"}
|
package/dist/Stepper.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as Stepper, a as StepperFinalPanel, b as StepperList, c as StepperNextButton, d as StepperPanel, e as StepperPrevButton, f as StepperStep, S as default } from './Stepper-
|
|
1
|
+
export { S as Stepper, a as StepperFinalPanel, b as StepperList, c as StepperNextButton, d as StepperPanel, e as StepperPrevButton, f as StepperStep, S as default } from './Stepper-B0U_YrbZ.js';
|
|
2
2
|
//# sourceMappingURL=Stepper.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef, useId } from 'react';
|
|
3
3
|
import { S as SvgCheck } from './check-Cf67OWrZ.js';
|
|
4
|
-
import { I as Icon } from './Icon-
|
|
5
|
-
import { F as Flex } from './Flex-
|
|
4
|
+
import { I as Icon } from './Icon-BSuTVNaa.js';
|
|
5
|
+
import { F as Flex } from './Flex-CjPHUTeq.js';
|
|
6
6
|
import { c as cx } from './index-tZvMCc77.js';
|
|
7
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
7
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
|
|
8
8
|
import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
|
|
9
9
|
import { useTrackingId } from './useTrackingId.js';
|
|
10
|
-
import { H as Helper } from './Helper-
|
|
10
|
+
import { H as Helper } from './Helper-DjWotFtO.js';
|
|
11
11
|
|
|
12
12
|
import './Switch.css';const toggle = "_toggle_142h4_23";
|
|
13
13
|
const indicator = "_indicator_142h4_37";
|
|
@@ -82,4 +82,4 @@ const Switch = forwardRef(
|
|
|
82
82
|
Switch.displayName = "Switch";
|
|
83
83
|
|
|
84
84
|
export { Switch as S };
|
|
85
|
-
//# sourceMappingURL=Switch-
|
|
85
|
+
//# sourceMappingURL=Switch-DjL2CsQi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch-
|
|
1
|
+
{"version":3,"file":"Switch-DjL2CsQi.js","sources":["../src/components/Switch/Switch.tsx"],"sourcesContent":["import {\n ChangeEvent,\n ComponentPropsWithoutRef,\n ReactElement,\n Ref,\n forwardRef,\n useId,\n} from \"react\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId, LayoutUtilProps } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check.svg\";\nimport Icon from \"../Icon\";\nimport Flex from \"../Flex\";\nimport { Helper } from \"../../internal/components\";\n\nimport cx from \"classnames\";\nimport styles from \"./Switch.module.scss\";\n\n/**\n * State object returned by the Switch onChange callback\n */\nexport type SwitchState = {\n /**\n * Whether the switch is currently checked\n */\n checked: boolean;\n /**\n * The value of the switch input\n */\n value?: string | number | readonly string[];\n};\n\n/**\n * Props for the Switch component\n * @extends ComponentPropsWithoutRef<\"input\">\n * @extends LayoutUtilProps\n */\nexport type SwitchProps = Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\"> &\n LayoutUtilProps & {\n /**\n * Callback when switch is changed.\n * @param e Change event object\n * @param state Current switch state with checked status and value\n */\n onChange?: (e: ChangeEvent<HTMLInputElement>, state: SwitchState) => void;\n\n /**\n * Label for the switch.\n * @remarks This should either be a string or have text content inside for accessibility\n */\n label?: ReactElement | string;\n\n /**\n * Description text to display below the label\n */\n description?: string;\n } & DataTrackingId;\n\n/**\n * Switch component for toggling between on/off states.\n *\n * Features:\n * - Toggle switch with smooth animations\n * - Check icon indicator when active\n * - Accessible with proper ARIA roles and attributes\n * - Keyboard navigation support (Space/Enter)\n * - Controlled and uncontrolled state management\n * - Customizable label and styling\n * - Layout utilities for positioning and spacing\n * - Focus management with visible focus indicators\n * - Hover states and visual feedback\n * - Disabled state support\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Switch\n * label=\"Enable notifications\"\n * onChange={(e, state) => console.log('Switch toggled:', state.checked)}\n * />\n */\nexport const Switch = forwardRef(\n (props: SwitchProps, ref: Ref<HTMLInputElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n label,\n description,\n className,\n onChange,\n checked,\n defaultChecked,\n value,\n style,\n ...rest\n } = componentProps;\n\n const helperUid = useId();\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: e.target.checked });\n };\n\n const data = {\n label: childrenToString(label),\n ariaLabel: rest[\"aria-label\"],\n ariaLabelledBy: rest[\"aria-labelledby\"],\n value,\n };\n\n const trackingId = useTrackingId({\n name: \"Switch\",\n data,\n hasOverride: !!rest[\"data-tracking-id\"],\n });\n\n const switchClassNames = cx(styles[\"switch\"], className);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems: description ? \"flex-start\" : \"center\",\n };\n\n return (\n <label className={switchClassNames} style={styleCombined}>\n <input\n data-tracking-id={trackingId}\n data-anv=\"switch\"\n ref={ref}\n type=\"checkbox\"\n role=\"switch\"\n value={value}\n aria-checked={checked ?? defaultChecked}\n checked={checked}\n defaultChecked={defaultChecked}\n onChange={onChangeHandler}\n {...rest}\n />\n <span aria-hidden className={styles[\"toggle\"]}>\n <span className={styles[\"indicator\"]}>\n <Icon svg={Check} className={styles[\"check\"]} />\n </span>\n </span>\n {label || description ? (\n <Flex direction=\"column\" gap={1}>\n {label && label}\n {description && <Helper id={helperUid} description={description} />}\n </Flex>\n ) : null}\n </label>\n );\n },\n);\n\nSwitch.displayName = \"Switch\";\n"],"names":["Check"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkFO,MAAM,MAAA,GAAS,UAAA;AAAA,EACpB,CAAC,OAAoB,GAAA,KAA+B;AAClD,IAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,mBAAmB,KAAK,CAAA;AACjE,IAAA,MAAM;AAAA,MACJ,KAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,cAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,cAAA;AAEJ,IAAA,MAAM,YAAY,KAAA,EAAM;AAExB,IAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAqC;AAC5D,MAAA,QAAA,GAAW,GAAG,EAAE,KAAA,EAAO,SAAS,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA;AAAA,IACpD,CAAA;AAEA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,KAAA,EAAO,iBAAiB,KAAK,CAAA;AAAA,MAC7B,SAAA,EAAW,KAAK,YAAY,CAAA;AAAA,MAC5B,cAAA,EAAgB,KAAK,iBAAiB,CAAA;AAAA,MACtC;AAAA,KACF;AAEA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,IAAA,EAAM,QAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAC,IAAA,CAAK,kBAAkB;AAAA,KACvC,CAAA;AAED,IAAA,MAAM,gBAAA,GAAmB,EAAA,CAAG,MAAA,CAAO,QAAQ,GAAG,SAAS,CAAA;AAEvD,IAAA,MAAM,aAAA,GAAgB;AAAA,MACpB,GAAG,KAAA;AAAA,MACH,GAAG,YAAA;AAAA,MACH,UAAA,EAAY,cAAc,YAAA,GAAe;AAAA,KAC3C;AAEA,IAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,gBAAA,EAAkB,OAAO,aAAA,EACzC,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,kBAAA,EAAkB,UAAA;AAAA,UAClB,UAAA,EAAS,QAAA;AAAA,UACT,GAAA;AAAA,UACA,IAAA,EAAK,UAAA;AAAA,UACL,IAAA,EAAK,QAAA;AAAA,UACL,KAAA;AAAA,UACA,gBAAc,OAAA,IAAW,cAAA;AAAA,UACzB,OAAA;AAAA,UACA,cAAA;AAAA,UACA,QAAA,EAAU,eAAA;AAAA,UACT,GAAG;AAAA;AAAA,OACN;AAAA,sBACA,GAAA,CAAC,UAAK,aAAA,EAAW,IAAA,EAAC,WAAW,MAAA,CAAO,QAAQ,CAAA,EAC1C,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,OAAO,WAAW,CAAA,EACjC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,GAAA,EAAKA,QAAA,EAAO,WAAW,MAAA,CAAO,OAAO,CAAA,EAAG,CAAA,EAChD,CAAA,EACF,CAAA;AAAA,MACC,SAAS,WAAA,mBACR,IAAA,CAAC,QAAK,SAAA,EAAU,QAAA,EAAS,KAAK,CAAA,EAC3B,QAAA,EAAA;AAAA,QAAA,KAAA,IAAS,KAAA;AAAA,QACT,WAAA,oBAAe,GAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,WAAW,WAAA,EAA0B;AAAA,OAAA,EACnE,CAAA,GACE;AAAA,KAAA,EACN,CAAA;AAAA,EAEJ;AACF;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;;;;"}
|
package/dist/Switch.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as Switch, S as default } from './Switch-
|
|
1
|
+
export { S as Switch, S as default } from './Switch-DjL2CsQi.js';
|
|
2
2
|
//# sourceMappingURL=Switch.js.map
|
|
@@ -7,8 +7,8 @@ import { u as useReducedMotion } from './use-reduced-motion-DSpxmqyT.js';
|
|
|
7
7
|
import { useTrackingId } from './useTrackingId.js';
|
|
8
8
|
import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
|
|
9
9
|
import { M as MotionConfigContext, a as isHTMLElement, u as useConstant, P as PresenceContext, b as usePresence, c as useIsomorphicLayoutEffect, L as LayoutGroupContext, m as motion } from './proxy-BbFHSE6L.js';
|
|
10
|
-
import { I as Icon } from './Icon-
|
|
11
|
-
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-
|
|
10
|
+
import { I as Icon } from './Icon-BSuTVNaa.js';
|
|
11
|
+
import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
|
|
12
12
|
|
|
13
13
|
import './Tab.css';/**
|
|
14
14
|
* Measurement functionality has to be within a separate component
|
|
@@ -759,4 +759,4 @@ const Tab = Object.assign(TabElement, {
|
|
|
759
759
|
});
|
|
760
760
|
|
|
761
761
|
export { Tab as T, TabButton as a, TabList as b, TabPanel as c };
|
|
762
|
-
//# sourceMappingURL=Tab-
|
|
762
|
+
//# sourceMappingURL=Tab-6UavokJJ.js.map
|