@servicetitan/anvil2 1.49.5 → 1.49.6

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.
Files changed (150) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{Breadcrumbs-DjR-2OEH.js → Breadcrumbs-Y6IaMoi5.js} +2 -2
  3. package/dist/{Breadcrumbs-DjR-2OEH.js.map → Breadcrumbs-Y6IaMoi5.js.map} +1 -1
  4. package/dist/Breadcrumbs.js +1 -1
  5. package/dist/{Calendar-BP6r1sP9.js → Calendar-B5Ednjem.js} +2 -2
  6. package/dist/{Calendar-BP6r1sP9.js.map → Calendar-B5Ednjem.js.map} +1 -1
  7. package/dist/{Calendar-CLSm88D2.js → Calendar-Ce08LvdP.js} +2 -2
  8. package/dist/{Calendar-CLSm88D2.js.map → Calendar-Ce08LvdP.js.map} +1 -1
  9. package/dist/Calendar.js +2 -2
  10. package/dist/{Checkbox-PkAk1Saq.js → Checkbox-ByaZv8wu.js} +2 -2
  11. package/dist/{Checkbox-PkAk1Saq.js.map → Checkbox-ByaZv8wu.js.map} +1 -1
  12. package/dist/{Checkbox-DwuDx-t4.js → Checkbox-nE-_tWmc.js} +2 -2
  13. package/dist/{Checkbox-DwuDx-t4.js.map → Checkbox-nE-_tWmc.js.map} +1 -1
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/{Chip-X2EwdZ97.js → Chip-UqdorCE2.js} +23 -17
  16. package/dist/Chip-UqdorCE2.js.map +1 -0
  17. package/dist/Chip.js +1 -1
  18. package/dist/{Combobox-DNCq-jkq.js → Combobox-Dy4IZDg1.js} +4 -4
  19. package/dist/{Combobox-DNCq-jkq.js.map → Combobox-Dy4IZDg1.js.map} +1 -1
  20. package/dist/Combobox.js +1 -1
  21. package/dist/{DataTable-BIhmpU0v.js → DataTable-D6MmOQF2.js} +5 -5
  22. package/dist/{DataTable-BIhmpU0v.js.map → DataTable-D6MmOQF2.js.map} +1 -1
  23. package/dist/{DateField-DsGHTMZ1.js → DateField-BxS9LZG7.js} +4 -4
  24. package/dist/{DateField-DsGHTMZ1.js.map → DateField-BxS9LZG7.js.map} +1 -1
  25. package/dist/DateField.js +1 -1
  26. package/dist/{DateFieldRange-Ct979nxF.js → DateFieldRange-BdDiHUfv.js} +4 -4
  27. package/dist/{DateFieldRange-Ct979nxF.js.map → DateFieldRange-BdDiHUfv.js.map} +1 -1
  28. package/dist/DateFieldRange.js +1 -1
  29. package/dist/{DateFieldSingle-frMHnRSg.js → DateFieldSingle-CuQO3LH9.js} +4 -4
  30. package/dist/{DateFieldSingle-frMHnRSg.js.map → DateFieldSingle-CuQO3LH9.js.map} +1 -1
  31. package/dist/DateFieldSingle.js +1 -1
  32. package/dist/{DateFieldYearless-po9ieLod.js → DateFieldYearless-2YhZmNYg.js} +2 -2
  33. package/dist/{DateFieldYearless-po9ieLod.js.map → DateFieldYearless-2YhZmNYg.js.map} +1 -1
  34. package/dist/DateFieldYearless.js +1 -1
  35. package/dist/{DateFieldYearlessRange-Dy8a8O1n.js → DateFieldYearlessRange-CgCmvHLs.js} +2 -2
  36. package/dist/{DateFieldYearlessRange-Dy8a8O1n.js.map → DateFieldYearlessRange-CgCmvHLs.js.map} +1 -1
  37. package/dist/DateFieldYearlessRange.js +1 -1
  38. package/dist/{DaysOfTheWeek-2_k3T4n4.js → DaysOfTheWeek-DlIka9b_.js} +3 -3
  39. package/dist/{DaysOfTheWeek-2_k3T4n4.js.map → DaysOfTheWeek-DlIka9b_.js.map} +1 -1
  40. package/dist/DaysOfTheWeek.js +1 -1
  41. package/dist/{Dialog-BT7a5KNT.js → Dialog-DSwvbfdW.js} +2 -2
  42. package/dist/{Dialog-BT7a5KNT.js.map → Dialog-DSwvbfdW.js.map} +1 -1
  43. package/dist/Dialog.js +1 -1
  44. package/dist/{Drawer-scQFylHI.js → Drawer-CGYcEj6d.js} +2 -2
  45. package/dist/{Drawer-scQFylHI.js.map → Drawer-CGYcEj6d.js.map} +1 -1
  46. package/dist/Drawer.js +1 -1
  47. package/dist/{FieldLabel-BIStrC2x.js → FieldLabel-jqlQ1Ldh.js} +2 -2
  48. package/dist/{FieldLabel-BIStrC2x.js.map → FieldLabel-jqlQ1Ldh.js.map} +1 -1
  49. package/dist/FieldLabel.js +1 -1
  50. package/dist/{InputMask-A5LDdyxL.js → InputMask-DaN_Adz6.js} +2 -2
  51. package/dist/{InputMask-A5LDdyxL.js.map → InputMask-DaN_Adz6.js.map} +1 -1
  52. package/dist/InputMask.js +1 -1
  53. package/dist/{Link-DuYh7Xl2.js → Link-DqZxs0kQ.js} +13 -4
  54. package/dist/Link-DqZxs0kQ.js.map +1 -0
  55. package/dist/Link.css +27 -19
  56. package/dist/Link.js +1 -1
  57. package/dist/Link.module-CjeOl2NH.js +14 -0
  58. package/dist/Link.module-CjeOl2NH.js.map +1 -0
  59. package/dist/{LinkButton-pIUNATNE.js → LinkButton-jb2Gc3hC.js} +5 -2
  60. package/dist/LinkButton-jb2Gc3hC.js.map +1 -0
  61. package/dist/LinkButton.js +1 -1
  62. package/dist/{ListView-5cRssdYI.js → ListView-B1I7Ii3g.js} +2 -2
  63. package/dist/{ListView-5cRssdYI.js.map → ListView-B1I7Ii3g.js.map} +1 -1
  64. package/dist/ListView.js +1 -1
  65. package/dist/{NumberField-BUFymKV3.js → NumberField-BdK4U9mW.js} +2 -2
  66. package/dist/{NumberField-BUFymKV3.js.map → NumberField-BdK4U9mW.js.map} +1 -1
  67. package/dist/NumberField.js +1 -1
  68. package/dist/{Page-Dgpz2WD7.js → Page-C-yMjgoO.js} +5 -5
  69. package/dist/{Page-Dgpz2WD7.js.map → Page-C-yMjgoO.js.map} +1 -1
  70. package/dist/Page.js +1 -1
  71. package/dist/{ProgressBar-R_UjSR4o.js → ProgressBar-CufkbVu5.js} +2 -2
  72. package/dist/{ProgressBar-R_UjSR4o.js.map → ProgressBar-CufkbVu5.js.map} +1 -1
  73. package/dist/ProgressBar.js +1 -1
  74. package/dist/{Radio-CLR1m8N9.js → Radio-BeBG7Ksw.js} +2 -2
  75. package/dist/{Radio-CLR1m8N9.js.map → Radio-BeBG7Ksw.js.map} +1 -1
  76. package/dist/Radio.js +2 -2
  77. package/dist/{RadioGroup-m46C69uO.js → RadioGroup-BAjpkCjp.js} +2 -2
  78. package/dist/{RadioGroup-m46C69uO.js.map → RadioGroup-BAjpkCjp.js.map} +1 -1
  79. package/dist/{SearchField-DrgNbG3I.js → SearchField-D6bICv4b.js} +36 -7
  80. package/dist/SearchField-D6bICv4b.js.map +1 -0
  81. package/dist/SearchField.css +13 -8
  82. package/dist/SearchField.js +1 -1
  83. package/dist/{SelectCard-DViLgRGh.js → SelectCard-DDN7qqHv.js} +3 -3
  84. package/dist/{SelectCard-DViLgRGh.js.map → SelectCard-DDN7qqHv.js.map} +1 -1
  85. package/dist/SelectCard.js +1 -1
  86. package/dist/SelectField.js +1 -1
  87. package/dist/{SelectFieldSync-DF05HvD4.js → SelectFieldSync-DQm3_D0v.js} +132 -19
  88. package/dist/SelectFieldSync-DQm3_D0v.js.map +1 -0
  89. package/dist/{SelectTrigger-BSzOoRsu.js → SelectTrigger-CNEhRluU.js} +2 -2
  90. package/dist/{SelectTrigger-BSzOoRsu.js.map → SelectTrigger-CNEhRluU.js.map} +1 -1
  91. package/dist/SelectTrigger.js +1 -1
  92. package/dist/{SelectTriggerBase-CfmRIFRs.js → SelectTriggerBase-Cv6hGsrC.js} +4 -4
  93. package/dist/{SelectTriggerBase-CfmRIFRs.js.map → SelectTriggerBase-Cv6hGsrC.js.map} +1 -1
  94. package/dist/SelectTriggerBase.css +59 -59
  95. package/dist/SelectTriggerBase.module-Ce49lamD.js +35 -0
  96. package/dist/SelectTriggerBase.module-Ce49lamD.js.map +1 -0
  97. package/dist/Table.js +1 -1
  98. package/dist/{TextField-D29fTRGR.js → TextField--y8q4R2H.js} +2 -2
  99. package/dist/{TextField-D29fTRGR.js.map → TextField--y8q4R2H.js.map} +1 -1
  100. package/dist/{TextField-B08U4_rt.js → TextField-aMwSN1iP.js} +2 -2
  101. package/dist/{TextField-B08U4_rt.js.map → TextField-aMwSN1iP.js.map} +1 -1
  102. package/dist/TextField.js +1 -1
  103. package/dist/{Textarea-Dl4w2-t0.js → Textarea-D1zwX2h6.js} +2 -2
  104. package/dist/{Textarea-Dl4w2-t0.js.map → Textarea-D1zwX2h6.js.map} +1 -1
  105. package/dist/Textarea.js +1 -1
  106. package/dist/{TimeField-Dpi3fMsn.js → TimeField-BHxXbOfe.js} +2 -2
  107. package/dist/{TimeField-Dpi3fMsn.js.map → TimeField-BHxXbOfe.js.map} +1 -1
  108. package/dist/TimeField.js +1 -1
  109. package/dist/Toast.js +2 -2
  110. package/dist/{Toaster-CRNOANCk.js → Toaster-CRp3nf4U.js} +2 -2
  111. package/dist/{Toaster-CRNOANCk.js.map → Toaster-CRp3nf4U.js.map} +1 -1
  112. package/dist/{Toaster-B0ogInIl.js → Toaster-qPt6zb6F.js} +2 -2
  113. package/dist/{Toaster-B0ogInIl.js.map → Toaster-qPt6zb6F.js.map} +1 -1
  114. package/dist/{Toolbar-CPldWSNJ.js → Toolbar-XJrmS4v4.js} +12 -12
  115. package/dist/{Toolbar-CPldWSNJ.js.map → Toolbar-XJrmS4v4.js.map} +1 -1
  116. package/dist/Toolbar.js +1 -1
  117. package/dist/{Tooltip-BbfLb3pI.js → Tooltip-CBy7srE2.js} +2 -2
  118. package/dist/Tooltip-CBy7srE2.js.map +1 -0
  119. package/dist/Tooltip.js +1 -1
  120. package/dist/beta/components/SelectField/internal/SelectFieldInput.d.ts +14 -3
  121. package/dist/beta/components/SelectField/internal/SelectFieldLabel.d.ts +12 -1
  122. package/dist/beta/components/SelectField/internal/useCombo.d.ts +2 -1
  123. package/dist/beta/components/SelectField/types.d.ts +43 -0
  124. package/dist/beta.js +5 -5
  125. package/dist/components/Chip/Chip.d.ts +2 -1
  126. package/dist/components/Chip/internal/Chip.d.ts +2 -1
  127. package/dist/components/DateFieldRange/internal/MaskedDateRangeInput.d.ts +1 -1
  128. package/dist/components/DateFieldSingle/internal/MaskedDateInput.d.ts +1 -1
  129. package/dist/components/Link/internal/Link.d.ts +21 -2
  130. package/dist/components/Link/useLinkStyles.d.ts +1 -1
  131. package/dist/components/LinkButton/LinkButton.d.ts +13 -1
  132. package/dist/components/SearchField/SearchField.d.ts +6 -3
  133. package/dist/components/Stepper/Stepper.d.ts +1 -1
  134. package/dist/components/Stepper/StepperStep.d.ts +1 -1
  135. package/dist/components/Tab/Tab.d.ts +1 -1
  136. package/dist/components/Tab/TabButton.d.ts +1 -1
  137. package/dist/index.js +34 -34
  138. package/dist/{utils-CeT0omsG.js → utils-C-hkPwMi.js} +2 -2
  139. package/dist/{utils-CeT0omsG.js.map → utils-C-hkPwMi.js.map} +1 -1
  140. package/package.json +1 -1
  141. package/dist/Chip-X2EwdZ97.js.map +0 -1
  142. package/dist/Link-DuYh7Xl2.js.map +0 -1
  143. package/dist/Link.module-Cf17JWod.js +0 -12
  144. package/dist/Link.module-Cf17JWod.js.map +0 -1
  145. package/dist/LinkButton-pIUNATNE.js.map +0 -1
  146. package/dist/SearchField-DrgNbG3I.js.map +0 -1
  147. package/dist/SelectFieldSync-DF05HvD4.js.map +0 -1
  148. package/dist/SelectTriggerBase.module-DUhQNr6j.js +0 -33
  149. package/dist/SelectTriggerBase.module-DUhQNr6j.js.map +0 -1
  150. package/dist/Tooltip-BbfLb3pI.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Page-Dgpz2WD7.js","sources":["../../hammer-icon/mdi/round/segment.svg","../../hammer-icon/mdi/round/chevron_left.svg","../src/components/Page/PageSidebarContext.ts","../src/components/Page/PageContext.ts","../src/components/Page/PageSidebar.tsx","../src/components/Page/PageSidebarHeader.tsx","../../hammer-icon/mdi/round/settings.svg","../src/components/Page/PageHeader.tsx","../src/components/Page/PageContent.tsx","../src/components/Page/PagePanel.tsx","../src/components/Page/PageFooter.tsx","../src/components/Page/Page.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSegment = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10 18h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 7c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm7 6h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1z\" }));\nexport default SvgSegment;\n","import * as React from \"react\";\nconst SvgChevronLeft = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.71 6.71a.996.996 0 0 0-1.41 0L8.71 11.3a.996.996 0 0 0 0 1.41l4.59 4.59a.996.996 0 1 0 1.41-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z\" }));\nexport default SvgChevronLeft;\n","import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n pageWidth?: number;\n};\n","import { Popover, Button, Icon, Flex, Tooltip } from \"../\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId } from \"../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\n\n/**\n * Props for the PageSidebar component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Key for storing sidebar collapsed state in localStorage\n * @default \"sidebar-collapsed\"\n */\n localStorageKey?: string;\n /**\n * Custom tracking ID for analytics\n */\n [\"data-tracking-id\"]?: string;\n /**\n * Title to display in the adaptive trigger button\n */\n currentPageTitle?: string;\n};\n\n/**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const [isMobile, setIsMobile] = useState<boolean>();\n\n useLayoutEffect(() => {\n const breakpointWidth = +(\n core.primitive?.BreakpointLg?.value.replace(\"px\", \"\") ?? 0\n );\n const innerWidth = pageWidth ?? 0;\n setIsMobile(innerWidth < breakpointWidth);\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n // getting stored value\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (typeof isMobile !== \"undefined\" && isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding disableCaret>\n <Popover.Trigger>\n {(props) => {\n if (typeof document !== \"undefined\") {\n if (props[\"data-state\"] === \"open\") {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={\n props[\"data-state\"] === \"open\" ? RespClose : RespOpen\n }\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <Flex\n direction=\"column\"\n className={styles[\"sidebar-adaptive\"]}\n ref={ref}\n >\n {children}\n </Flex>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/**\n * Props for the PageSidebarHeader component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import * as React from \"react\";\nconst SvgSettings = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.5 12c0-.23-.01-.45-.03-.68l1.86-1.41c.4-.3.51-.86.26-1.3l-1.87-3.23a.987.987 0 0 0-1.25-.42l-2.15.91c-.37-.26-.76-.49-1.17-.68l-.29-2.31c-.06-.5-.49-.88-.99-.88h-3.73c-.51 0-.94.38-1 .88l-.29 2.31c-.41.19-.8.42-1.17.68l-2.15-.91c-.46-.2-1-.02-1.25.42L2.41 8.62c-.25.44-.14.99.26 1.3l1.86 1.41a7.343 7.343 0 0 0 0 1.35l-1.86 1.41c-.4.3-.51.86-.26 1.3l1.87 3.23c.25.44.79.62 1.25.42l2.15-.91c.37.26.76.49 1.17.68l.29 2.31c.06.5.49.88.99.88h3.73c.5 0 .93-.38.99-.88l.29-2.31c.41-.19.8-.42 1.17-.68l2.15.91c.46.2 1 .02 1.25-.42l1.87-3.23c.25-.44.14-.99-.26-1.3l-1.86-1.41c.03-.23.04-.45.04-.68zm-7.46 3.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" }));\nexport default SvgSettings;\n","import {\n ButtonProps,\n ButtonLinkProps,\n BreadcrumbsLinkProps,\n ChipProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n} from \"../\";\nimport {\n ComponentPropsWithoutRef,\n ReactNode,\n forwardRef,\n Ref,\n RefObject,\n} from \"react\";\nimport Layout, { LayoutProps } from \"../Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\n\n/**\n * Props for page header action buttons\n */\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /**\n * Label text for the action button\n */\n label: string;\n};\n\n/**\n * Props for page header actions configuration\n */\ntype PageHeaderActionsProps = {\n /**\n * Primary action button\n */\n primary?: PageHeaderActionProps;\n /**\n * Array of secondary action buttons\n */\n secondary?: PageHeaderActionProps[];\n};\n\n/**\n * Base props for preference actions\n */\ntype BasePreferenceProps = {\n /**\n * Accessible label for the preference action\n */\n \"aria-label\": string;\n};\n\n/**\n * Props for preference button actions\n */\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for preference link actions\n */\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for the PageHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type PageHeaderProps = ComponentPropsWithoutRef<\"header\"> & {\n /**\n * Main title of the page\n */\n title: string;\n /**\n * Breadcrumb navigation links\n */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /**\n * Status chips to display\n */\n chips?: ChipProps[];\n /**\n * Description text or content below the title\n */\n description?: ReactNode;\n /**\n * Primary and secondary action buttons\n */\n actions?: PageHeaderActionsProps;\n /**\n * Preference action button or link\n */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Layout configuration for the header\n */\n layout?: LayoutProps;\n};\n\n/**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {/* Only primary action */}\n {actions.primary &&\n (!actions.secondary || actions.secondary.length === 0) && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n\n {/* Only secondary actions (1-2 buttons) */}\n {!!actions.secondary?.length &&\n actions.secondary.length < 3 &&\n !actions.primary &&\n actions.secondary.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))}\n\n {/* 1 secondary action + primary action */}\n {actions.primary &&\n !!actions.secondary?.length &&\n actions.secondary.length === 1 && (\n <>\n <Button appearance=\"secondary\" {...actions.secondary[0]}>\n {actions.secondary[0].label}\n </Button>\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n </>\n )}\n\n {/* Multiple secondary actions (3+) with optional primary */}\n {!!actions.secondary?.length &&\n (actions.secondary.length >= 3 ||\n (actions.secondary.length >= 2 && actions.primary)) && (\n <>\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger\n ref={ref as unknown as RefObject<HTMLDivElement>}\n >\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {actions.secondary.map((action, index) => (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n />\n ))}\n </Menu>\n {actions.primary && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n </>\n )}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item md={actionItems ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title}\n </Text>\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && <Layout.Item md={6}>{actionItems}</Layout.Item>}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useEffect,\n useRef,\n useState,\n UIEvent,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { useMergeRefs } from \"../../hooks\";\n\n/**\n * Props for the PageContent component\n * @extends ComponentPropsWithoutRef<\"main\">\n */\nexport type PageContentProps = ComponentPropsWithoutRef<\"main\">;\n\n/**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Semantic main element for page content\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Accessibility support with proper main landmark\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLAreaElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const mainRef = useRef<HTMLAreaElement>(null);\n const virtualScrollRef = useRef<HTMLDivElement>(null);\n const blocker = useRef(true);\n const [leftOffset, setLeftOffset] = useState(\n (mainRef.current?.offsetLeft ?? 0) +\n (mainRef.current?.offsetWidth ?? 0) -\n 9,\n );\n const [contentHeight, setContentHeight] = useState(\n mainRef.current?.offsetHeight,\n );\n\n // Updates scroll position\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!blocker.current) return;\n function updatePosition() {\n const newValue = window.scrollY;\n\n virtualScrollRef.current?.scrollTo(0, newValue ?? 0);\n }\n window?.addEventListener(\"scroll\", updatePosition, { passive: true });\n\n return () => {\n window?.removeEventListener(\"scroll\", updatePosition);\n };\n }, []);\n\n // Updates virtual scroll properties when main resizes\n useEffect(() => {\n if (mainRef.current) {\n const observer = new ResizeObserver(() => {\n if (!mainRef.current) return;\n setLeftOffset(\n mainRef.current.offsetLeft + mainRef.current.offsetWidth - 9,\n );\n setContentHeight(mainRef.current.offsetHeight);\n });\n\n observer.observe(mainRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n function scrollBody(e: UIEvent<HTMLElement>) {\n if (typeof window === \"undefined\") return;\n if (blocker.current) return;\n window.scrollTo(0, (e.target as HTMLDivElement).scrollTop);\n }\n\n return (\n <main className={classNames} ref={useMergeRefs([mainRef, ref])} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n <div\n className={styles[\"virtual-scroll-container\"]}\n ref={virtualScrollRef}\n style={{\n left: leftOffset,\n }}\n onScrollCapture={scrollBody}\n onMouseEnter={() => {\n blocker.current = false;\n }}\n onMouseLeave={() => {\n blocker.current = true;\n }}\n >\n <div style={{ width: 1, height: contentHeight }} />\n </div>\n </main>\n );\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useLayoutEffect,\n useState,\n} from \"react\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../Dialog\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\n\n/**\n * Props for the PagePanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Whether the panel is open\n * @default true\n */\n open?: boolean;\n /**\n * Size of the panel\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Whether to remove default padding from the panel\n * @default false\n */\n noPadding?: boolean;\n};\n\n/**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\nexport const PagePanel = forwardRef(\n (props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n ...rest\n } = props;\n const classNames = cx([styles[\"panel\"]], [styles[size]], className, {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n });\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useLayoutEffect(() => {\n const breakpointWidth = +(\n core.primitive?.BreakpointLg?.value.replace(\"px\", \"\") ?? 0\n );\n const innerWidth = pageWidth ?? 0;\n setIsMobile(innerWidth < breakpointWidth);\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog open={open}>\n <Dialog.Content>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <div\n className={styles[\"panel-inner\"]}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={typeof open !== \"undefined\" && open ? 0 : -1}\n style={style}\n >\n <div>{children}</div>\n </div>\n </div>\n );\n },\n);\nPagePanel.displayName = \"PagePanel\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref } from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\n\n/**\n * Props for the PageFooter component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n return (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n ComponentPropsWithoutRef,\n Ref,\n forwardRef,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\n//--- Start Page Element ---//\n/**\n * Props for the Page component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\nconst PageElement = forwardRef((props: PageProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n return () => {\n if (element) {\n resizeObserver.unobserve(element);\n resizeObserver.disconnect();\n }\n };\n }, [elRef]);\n\n return (\n <PageContext.Provider value={{ pageWidth }}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>{children}</div>\n </div>\n </PageContext.Provider>\n );\n});\n\nPageElement.displayName = \"Page\";\n\n/**\n * Page component for creating full-page layouts with navigation and content areas.\n *\n * Features:\n * - Container for complete page layouts\n * - Supports sidebar navigation with collapsible state\n * - Header with breadcrumbs, chips, and action buttons\n * - Main content area with virtual scrolling\n * - Optional slide-out panels with responsive dialog fallback\n * - Footer with layout utilities\n * - Responsive design with mobile adaptations\n * - Accessibility support with proper landmarks\n * - Automatic tracking ID generation for analytics\n * - Local storage persistence for sidebar state\n *\n * @example\n * <Page>\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Navigation</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[{ href: \"/\", children: \"Home\" }]}\n * actions={{ primary: { label: \"Save\", onClick: handleSave } }}\n * />\n * <Page.Content>\n * <Text>Main content</Text>\n * </Page.Content>\n * <Page.Panel open={isPanelOpen} size=\"medium\">\n * <Text>Panel content</Text>\n * </Page.Panel>\n * <Page.Footer>\n * <Text>Footer content</Text>\n * </Page.Footer>\n * </Page>\n */\nexport const Page = Object.assign(PageElement, {\n /**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\n Sidebar: PageSidebar,\n /**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\n SidebarHeader: PageSidebarHeader,\n /**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\n Header: PageHeader,\n /**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Semantic main element for page content\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Accessibility support with proper main landmark\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\n Content: PageContent,\n /**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\n Panel: PagePanel,\n /**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\n Footer: PageFooter,\n});\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","LocalSettings","ref","rest","MoreVert"],"mappings":"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"}
1
+ {"version":3,"file":"Page-C-yMjgoO.js","sources":["../../hammer-icon/mdi/round/segment.svg","../../hammer-icon/mdi/round/chevron_left.svg","../src/components/Page/PageSidebarContext.ts","../src/components/Page/PageContext.ts","../src/components/Page/PageSidebar.tsx","../src/components/Page/PageSidebarHeader.tsx","../../hammer-icon/mdi/round/settings.svg","../src/components/Page/PageHeader.tsx","../src/components/Page/PageContent.tsx","../src/components/Page/PagePanel.tsx","../src/components/Page/PageFooter.tsx","../src/components/Page/Page.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgSegment = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M10 18h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1zM3 7c0 .55.45 1 1 1h16c.55 0 1-.45 1-1s-.45-1-1-1H4c-.55 0-1 .45-1 1zm7 6h10c.55 0 1-.45 1-1s-.45-1-1-1H10c-.55 0-1 .45-1 1s.45 1 1 1z\" }));\nexport default SvgSegment;\n","import * as React from \"react\";\nconst SvgChevronLeft = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.71 6.71a.996.996 0 0 0-1.41 0L8.71 11.3a.996.996 0 0 0 0 1.41l4.59 4.59a.996.996 0 1 0 1.41-1.41L10.83 12l3.88-3.88c.39-.39.38-1.03 0-1.41z\" }));\nexport default SvgChevronLeft;\n","import { createContext } from \"react\";\n\ntype PageSideBarContextProps = {\n collapsed: boolean;\n};\n\nexport const PageSideBarContext = createContext<PageSideBarContextProps | null>(\n null,\n);\n","import { createContext } from \"react\";\n\nexport const PageContext = createContext<PageContextProps>({});\n\nexport type PageContextProps = {\n pageWidth?: number;\n};\n","import { Popover, Button, Icon, Flex, Tooltip } from \"../\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useState,\n useLayoutEffect,\n} from \"react\";\nimport { useTrackingId } from \"../../hooks\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport SegmentSVG from \"@servicetitan/hammer-icon/mdi/round/segment.svg\";\nimport RespOpen from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_down.svg\";\nimport RespClose from \"@servicetitan/hammer-icon/mdi/round/keyboard_arrow_up.svg\";\nimport OpenSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_right.svg\";\nimport CloseSVG from \"@servicetitan/hammer-icon/mdi/round/chevron_left.svg\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\n\n/**\n * Props for the PageSidebar component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Key for storing sidebar collapsed state in localStorage\n * @default \"sidebar-collapsed\"\n */\n localStorageKey?: string;\n /**\n * Custom tracking ID for analytics\n */\n [\"data-tracking-id\"]?: string;\n /**\n * Title to display in the adaptive trigger button\n */\n currentPageTitle?: string;\n};\n\n/**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\nexport const PageSidebar = forwardRef(\n (props: PageSidebarProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n className,\n currentPageTitle,\n localStorageKey = \"sidebar-collapsed\",\n ...rest\n } = props;\n\n const data = {\n localStorageKey,\n };\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n const [isMobile, setIsMobile] = useState<boolean>();\n\n useLayoutEffect(() => {\n const breakpointWidth = +(\n core.primitive?.BreakpointLg?.value.replace(\"px\", \"\") ?? 0\n );\n const innerWidth = pageWidth ?? 0;\n setIsMobile(innerWidth < breakpointWidth);\n }, [pageWidth]);\n\n const trackingId = useTrackingId({\n name: \"PageSidebarButton\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n\n const [collapsed, setCollapsed] = useState<boolean>(() => {\n // getting stored value\n const sidebarState = localStorage.getItem(localStorageKey);\n return sidebarState ? JSON.parse(sidebarState) : false;\n });\n const classNames = cx([styles[\"sidebar\"]], className, {\n [styles[\"collapsed\"]]: collapsed,\n });\n const onToggleButtonClick = () => {\n setCollapsed((prev) => {\n localStorage.setItem(localStorageKey, JSON.stringify(!prev));\n return !prev;\n });\n };\n\n if (typeof isMobile !== \"undefined\" && isMobile) {\n return (\n <Popover fillAvailableHeight matchReferenceWidth noPadding disableCaret>\n <Popover.Trigger>\n {(props) => {\n if (typeof document !== \"undefined\") {\n if (props[\"data-state\"] === \"open\") {\n document.body.style.overflow = \"hidden\";\n } else {\n document.body.style.overflow = \"auto\";\n }\n }\n return (\n <div className={styles[\"sidebar-adaptive-trigger-container\"]}>\n <Button\n className={styles[\"sidebar-adaptive-trigger\"]}\n icon={SegmentSVG}\n appearance=\"ghost\"\n {...props}\n >\n {!currentPageTitle ? \"Menu\" : currentPageTitle}\n <Icon\n className={styles[\"sidebar-adaptive-trigger-icon\"]}\n justifyContent=\"end\"\n svg={\n props[\"data-state\"] === \"open\" ? RespClose : RespOpen\n }\n />\n </Button>\n </div>\n );\n }}\n </Popover.Trigger>\n <Popover.Content className={styles[\"sidebar-adaptive-container\"]}>\n <Flex\n direction=\"column\"\n className={styles[\"sidebar-adaptive\"]}\n ref={ref}\n >\n {children}\n </Flex>\n </Popover.Content>\n </Popover>\n );\n }\n\n return (\n <PageSideBarContext.Provider value={{ collapsed }}>\n <div className={classNames} ref={ref} {...rest}>\n <div className={styles[\"sidebar-inner\"]} aria-hidden={collapsed}>\n <div>{children}</div>\n </div>\n <div className={styles[\"toggle-button-wrapper\"]}>\n <Tooltip placement=\"right\">\n <Tooltip.Trigger className={styles[\"toggle-button-tooltip\"]}>\n <Button\n size=\"small\"\n onClick={onToggleButtonClick}\n className={styles[\"toggle-button\"]}\n aria-label={collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n data-tracking-id={trackingId}\n icon={collapsed ? OpenSVG : CloseSVG}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>\n {collapsed ? \"Open Sidebar\" : \"Close Sidebar\"}\n </Tooltip.Content>\n </Tooltip>\n </div>\n </div>\n </PageSideBarContext.Provider>\n );\n },\n);\n\nPageSidebar.displayName = \"Page.Sidebar\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref, useContext } from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSideBarContext } from \"./PageSidebarContext\";\n\n/**\n * Props for the PageSidebarHeader component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageSidebarHeaderProps = ComponentPropsWithoutRef<\"div\">;\n\n/**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\nexport const PageSidebarHeader = forwardRef(\n (props: PageSidebarHeaderProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const context = useContext(PageSideBarContext);\n const classNames = cx([styles[\"sidebar-header\"]], className);\n\n return (\n <div className={classNames} ref={ref} {...rest}>\n <div\n className={styles[\"header-content\"]}\n aria-hidden={context?.collapsed}\n >\n {children}\n </div>\n </div>\n );\n },\n);\n\nPageSidebarHeader.displayName = \"Page.SidebarHeader\";\n","import * as React from \"react\";\nconst SvgSettings = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M19.5 12c0-.23-.01-.45-.03-.68l1.86-1.41c.4-.3.51-.86.26-1.3l-1.87-3.23a.987.987 0 0 0-1.25-.42l-2.15.91c-.37-.26-.76-.49-1.17-.68l-.29-2.31c-.06-.5-.49-.88-.99-.88h-3.73c-.51 0-.94.38-1 .88l-.29 2.31c-.41.19-.8.42-1.17.68l-2.15-.91c-.46-.2-1-.02-1.25.42L2.41 8.62c-.25.44-.14.99.26 1.3l1.86 1.41a7.343 7.343 0 0 0 0 1.35l-1.86 1.41c-.4.3-.51.86-.26 1.3l1.87 3.23c.25.44.79.62 1.25.42l2.15-.91c.37.26.76.49 1.17.68l.29 2.31c.06.5.49.88.99.88h3.73c.5 0 .93-.38.99-.88l.29-2.31c.41-.19.8-.42 1.17-.68l2.15.91c.46.2 1 .02 1.25-.42l1.87-3.23c.25-.44.14-.99-.26-1.3l-1.86-1.41c.03-.23.04-.45.04-.68zm-7.46 3.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\" }));\nexport default SvgSettings;\n","import {\n ButtonProps,\n ButtonLinkProps,\n BreadcrumbsLinkProps,\n ChipProps,\n Tooltip,\n ButtonLink,\n Button,\n Flex,\n Menu,\n Breadcrumbs,\n Chip,\n Text,\n} from \"../\";\nimport {\n ComponentPropsWithoutRef,\n ReactNode,\n forwardRef,\n Ref,\n RefObject,\n} from \"react\";\nimport Layout, { LayoutProps } from \"../Layout\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport LocalSettings from \"@servicetitan/hammer-icon/mdi/round/settings.svg\";\nimport MoreVert from \"@servicetitan/hammer-icon/mdi/round/more_vert.svg\";\n\n/**\n * Props for page header action buttons\n */\ntype PageHeaderActionProps = Omit<ButtonProps, \"appearance\"> & {\n /**\n * Label text for the action button\n */\n label: string;\n};\n\n/**\n * Props for page header actions configuration\n */\ntype PageHeaderActionsProps = {\n /**\n * Primary action button\n */\n primary?: PageHeaderActionProps;\n /**\n * Array of secondary action buttons\n */\n secondary?: PageHeaderActionProps[];\n};\n\n/**\n * Base props for preference actions\n */\ntype BasePreferenceProps = {\n /**\n * Accessible label for the preference action\n */\n \"aria-label\": string;\n};\n\n/**\n * Props for preference button actions\n */\ntype PreferenceButtonProps = Omit<\n ButtonProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for preference link actions\n */\ntype PreferenceLinkProps = Omit<\n ButtonLinkProps,\n \"aria-label\" | \"icon\" | \"appearance\" | \"size\" | \"className\"\n> &\n BasePreferenceProps;\n\n/**\n * Props for the PageHeader component\n * @extends ComponentPropsWithoutRef<\"header\">\n */\nexport type PageHeaderProps = ComponentPropsWithoutRef<\"header\"> & {\n /**\n * Main title of the page\n */\n title: string;\n /**\n * Breadcrumb navigation links\n */\n breadcrumbs?: BreadcrumbsLinkProps[];\n /**\n * Status chips to display\n */\n chips?: ChipProps[];\n /**\n * Description text or content below the title\n */\n description?: ReactNode;\n /**\n * Primary and secondary action buttons\n */\n actions?: PageHeaderActionsProps;\n /**\n * Preference action button or link\n */\n preferenceAction?: PreferenceButtonProps | PreferenceLinkProps;\n /**\n * Layout configuration for the header\n */\n layout?: LayoutProps;\n};\n\n/**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\nexport const PageHeader = forwardRef(\n (props: PageHeaderProps, ref: Ref<HTMLHeadElement>) => {\n const {\n title,\n breadcrumbs,\n chips,\n description,\n actions,\n preferenceAction,\n layout,\n className,\n ...rest\n } = props;\n\n const { fluid, variant } = layout || {};\n\n const preferenceItem =\n preferenceAction &&\n (\"href\" in preferenceAction ? (\n <Tooltip>\n <Tooltip.Trigger>\n <ButtonLink\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceLinkProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ) : (\n <Tooltip>\n <Tooltip.Trigger>\n <Button\n appearance=\"ghost\"\n icon={LocalSettings}\n size=\"small\"\n className={styles[\"preference-action\"]}\n {...(preferenceAction as PreferenceButtonProps)}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>{preferenceAction[\"aria-label\"]}</Tooltip.Content>\n </Tooltip>\n ));\n\n const actionItems = actions && (\n <Flex justifyContent=\"flex-end\" className={styles.actions}>\n {/* Only primary action */}\n {actions.primary &&\n (!actions.secondary || actions.secondary.length === 0) && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n\n {/* Only secondary actions (1-2 buttons) */}\n {!!actions.secondary?.length &&\n actions.secondary.length < 3 &&\n !actions.primary &&\n actions.secondary.map((action, index) => (\n <Button key={index} appearance=\"secondary\" {...action}>\n {action.label}\n </Button>\n ))}\n\n {/* 1 secondary action + primary action */}\n {actions.primary &&\n !!actions.secondary?.length &&\n actions.secondary.length === 1 && (\n <>\n <Button appearance=\"secondary\" {...actions.secondary[0]}>\n {actions.secondary[0].label}\n </Button>\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n </>\n )}\n\n {/* Multiple secondary actions (3+) with optional primary */}\n {!!actions.secondary?.length &&\n (actions.secondary.length >= 3 ||\n (actions.secondary.length >= 2 && actions.primary)) && (\n <>\n <Menu\n trigger={({ ref, ...rest }) => (\n <Tooltip>\n <Tooltip.Trigger\n ref={ref as unknown as RefObject<HTMLDivElement>}\n >\n <Button\n appearance=\"secondary\"\n icon={MoreVert}\n aria-label=\"More actions\"\n {...rest}\n />\n </Tooltip.Trigger>\n <Tooltip.Content>More actions</Tooltip.Content>\n </Tooltip>\n )}\n >\n {actions.secondary.map((action, index) => (\n <Menu.Item\n key={index}\n label={action.label}\n onClick={action.onClick}\n disabled={action.disabled}\n />\n ))}\n </Menu>\n {actions.primary && (\n <Button appearance=\"primary\" {...actions.primary}>\n {actions.primary.label}\n </Button>\n )}\n </>\n )}\n </Flex>\n );\n\n const headerClassName = cx(styles.content, styles.header, className);\n\n const headerContentClassName = cx(\n styles[\"content-inner\"],\n styles[\"content-header-inner\"],\n );\n\n return (\n <header ref={ref} className={headerClassName} {...rest}>\n <div className={headerContentClassName}>\n <Layout fluid={fluid} variant={variant} className={styles[\"layout\"]}>\n {breadcrumbs && (\n <Layout.Item>\n <Breadcrumbs>\n {breadcrumbs.map((breadcrumb, index) => (\n <Breadcrumbs.Link key={index} {...breadcrumb} />\n ))}\n </Breadcrumbs>\n </Layout.Item>\n )}\n\n <Layout.Item md={actionItems ? 6 : 12}>\n <div className={styles[\"title-wrapper\"]}>\n <Text\n variant=\"headline\"\n size=\"large\"\n el=\"h1\"\n className={styles.title}\n >\n {title}\n </Text>\n\n {preferenceItem}\n </div>\n\n {chips && (\n <Flex className={styles.chips}>\n {chips.map((chip, index) => (\n <Chip key={index} {...chip} />\n ))}\n </Flex>\n )}\n </Layout.Item>\n\n {actions && <Layout.Item md={6}>{actionItems}</Layout.Item>}\n\n {description && (\n <Layout.Item md={12} className={styles.description}>\n {description}\n </Layout.Item>\n )}\n </Layout>\n </div>\n </header>\n );\n },\n);\n\nPageHeader.displayName = \"Page.Header\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useEffect,\n useRef,\n useState,\n UIEvent,\n} from \"react\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { useMergeRefs } from \"../../hooks\";\n\n/**\n * Props for the PageContent component\n * @extends ComponentPropsWithoutRef<\"main\">\n */\nexport type PageContentProps = ComponentPropsWithoutRef<\"main\">;\n\n/**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Semantic main element for page content\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Accessibility support with proper main landmark\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\nexport const PageContent = forwardRef(\n (props: PageContentProps, ref: Ref<HTMLAreaElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx([styles[\"content\"]], className);\n const mainRef = useRef<HTMLAreaElement>(null);\n const virtualScrollRef = useRef<HTMLDivElement>(null);\n const blocker = useRef(true);\n const [leftOffset, setLeftOffset] = useState(\n (mainRef.current?.offsetLeft ?? 0) +\n (mainRef.current?.offsetWidth ?? 0) -\n 9,\n );\n const [contentHeight, setContentHeight] = useState(\n mainRef.current?.offsetHeight,\n );\n\n // Updates scroll position\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n if (!blocker.current) return;\n function updatePosition() {\n const newValue = window.scrollY;\n\n virtualScrollRef.current?.scrollTo(0, newValue ?? 0);\n }\n window?.addEventListener(\"scroll\", updatePosition, { passive: true });\n\n return () => {\n window?.removeEventListener(\"scroll\", updatePosition);\n };\n }, []);\n\n // Updates virtual scroll properties when main resizes\n useEffect(() => {\n if (mainRef.current) {\n const observer = new ResizeObserver(() => {\n if (!mainRef.current) return;\n setLeftOffset(\n mainRef.current.offsetLeft + mainRef.current.offsetWidth - 9,\n );\n setContentHeight(mainRef.current.offsetHeight);\n });\n\n observer.observe(mainRef.current);\n\n // Cleanup function\n return () => {\n observer.disconnect();\n };\n }\n }, []);\n\n function scrollBody(e: UIEvent<HTMLElement>) {\n if (typeof window === \"undefined\") return;\n if (blocker.current) return;\n window.scrollTo(0, (e.target as HTMLDivElement).scrollTop);\n }\n\n return (\n <main className={classNames} ref={useMergeRefs([mainRef, ref])} {...rest}>\n <div className={styles[\"content-inner\"]}>{children}</div>\n <div\n className={styles[\"virtual-scroll-container\"]}\n ref={virtualScrollRef}\n style={{\n left: leftOffset,\n }}\n onScrollCapture={scrollBody}\n onMouseEnter={() => {\n blocker.current = false;\n }}\n onMouseLeave={() => {\n blocker.current = true;\n }}\n >\n <div style={{ width: 1, height: contentHeight }} />\n </div>\n </main>\n );\n },\n);\n\nPageContent.displayName = \"PageContent\";\n","import {\n ComponentPropsWithoutRef,\n forwardRef,\n Ref,\n useContext,\n useLayoutEffect,\n useState,\n} from \"react\";\nimport { core } from \"@servicetitan/hammer-token\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport Dialog from \"../Dialog\";\nimport { PageContext, PageContextProps } from \"./PageContext\";\n\n/**\n * Props for the PagePanel component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PagePanelProps = ComponentPropsWithoutRef<\"div\"> & {\n /**\n * Whether the panel is open\n * @default true\n */\n open?: boolean;\n /**\n * Size of the panel\n * @default \"medium\"\n */\n size?: \"small\" | \"medium\" | \"large\";\n /**\n * Whether to remove default padding from the panel\n * @default false\n */\n noPadding?: boolean;\n};\n\n/**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\nexport const PagePanel = forwardRef(\n (props: PagePanelProps, ref: Ref<HTMLDivElement>) => {\n const {\n children,\n open,\n size = \"medium\",\n noPadding,\n style,\n className,\n ...rest\n } = props;\n const classNames = cx([styles[\"panel\"]], [styles[size]], className, {\n [styles[\"open\"]]: typeof open === \"undefined\" ? true : open,\n [styles[\"persistent\"]]: typeof open === \"undefined\",\n [styles[\"noPadding\"]]: noPadding,\n });\n\n const { pageWidth } = useContext<PageContextProps>(PageContext);\n\n const [isMobile, setIsMobile] = useState<boolean>(false);\n\n useLayoutEffect(() => {\n const breakpointWidth = +(\n core.primitive?.BreakpointLg?.value.replace(\"px\", \"\") ?? 0\n );\n const innerWidth = pageWidth ?? 0;\n setIsMobile(innerWidth < breakpointWidth);\n }, [pageWidth]);\n\n if (typeof open !== \"undefined\" && isMobile) {\n return (\n <Dialog open={open}>\n <Dialog.Content>\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </Dialog.Content>\n </Dialog>\n );\n }\n return (\n <div\n className={classNames}\n aria-hidden={!open}\n aria-disabled={!open}\n ref={ref}\n {...rest}\n >\n <div\n className={styles[\"panel-inner\"]}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */\n tabIndex={typeof open !== \"undefined\" && open ? 0 : -1}\n style={style}\n >\n <div>{children}</div>\n </div>\n </div>\n );\n },\n);\nPagePanel.displayName = \"PagePanel\";\n","import { ComponentPropsWithoutRef, forwardRef, Ref } from \"react\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { LayoutUtilProps } from \"../../types\";\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\n\n/**\n * Props for the PageFooter component\n * @extends ComponentPropsWithoutRef<\"div\">\n * @extends LayoutUtilProps\n */\nexport type PageFooterProps = ComponentPropsWithoutRef<\"div\"> & LayoutUtilProps;\n\n/**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\nexport const PageFooter = forwardRef(\n (props: PageFooterProps, ref: Ref<HTMLDivElement>) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const { children, className, style, ...rest } = componentProps;\n\n const classNames = cx([styles[\"content-footer\"]], className);\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n return (\n <footer className={classNames} ref={ref} style={styleCombined} {...rest}>\n {children}\n </footer>\n );\n },\n);\nPageFooter.displayName = \"PageFooter\";\n","import {\n ComponentPropsWithoutRef,\n Ref,\n forwardRef,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport cx from \"classnames\";\nimport styles from \"./Page.module.scss\";\nimport { PageSidebar } from \"./PageSidebar\";\nimport { PageSidebarHeader } from \"./PageSidebarHeader\";\nimport { PageHeader } from \"./PageHeader\";\nimport { PageContent } from \"./PageContent\";\nimport { PagePanel } from \"./PagePanel\";\nimport { PageFooter } from \"./PageFooter\";\nimport { PageContext } from \"./PageContext\";\nimport { useMergeRefs } from \"../../hooks\";\n\n//--- Start Page Element ---//\n/**\n * Props for the Page component\n * @extends ComponentPropsWithoutRef<\"div\">\n */\nexport type PageProps = ComponentPropsWithoutRef<\"div\">;\n\nconst PageElement = forwardRef((props: PageProps, ref: Ref<HTMLDivElement>) => {\n const { children, className, ...rest } = props;\n const classNames = cx(styles[\"page\"], className);\n const elRef = useRef<HTMLDivElement>(null);\n const combinedRef = useMergeRefs([elRef, ref]);\n\n const [pageWidth, setPageWidth] = useState<number>(0);\n\n useLayoutEffect(() => {\n const element = elRef.current;\n const resizeObserver = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n setPageWidth(entry.contentRect.width);\n }\n });\n if (element) {\n resizeObserver.observe(element);\n }\n return () => {\n if (element) {\n resizeObserver.unobserve(element);\n resizeObserver.disconnect();\n }\n };\n }, [elRef]);\n\n return (\n <PageContext.Provider value={{ pageWidth }}>\n <div className={classNames} data-anv=\"Page\" ref={combinedRef} {...rest}>\n <div className={styles[\"container\"]}>{children}</div>\n </div>\n </PageContext.Provider>\n );\n});\n\nPageElement.displayName = \"Page\";\n\n/**\n * Page component for creating full-page layouts with navigation and content areas.\n *\n * Features:\n * - Container for complete page layouts\n * - Supports sidebar navigation with collapsible state\n * - Header with breadcrumbs, chips, and action buttons\n * - Main content area with virtual scrolling\n * - Optional slide-out panels with responsive dialog fallback\n * - Footer with layout utilities\n * - Responsive design with mobile adaptations\n * - Accessibility support with proper landmarks\n * - Automatic tracking ID generation for analytics\n * - Local storage persistence for sidebar state\n *\n * @example\n * <Page>\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Navigation</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[{ href: \"/\", children: \"Home\" }]}\n * actions={{ primary: { label: \"Save\", onClick: handleSave } }}\n * />\n * <Page.Content>\n * <Text>Main content</Text>\n * </Page.Content>\n * <Page.Panel open={isPanelOpen} size=\"medium\">\n * <Text>Panel content</Text>\n * </Page.Panel>\n * <Page.Footer>\n * <Text>Footer content</Text>\n * </Page.Footer>\n * </Page>\n */\nexport const Page = Object.assign(PageElement, {\n /**\n * PageSidebar component for creating collapsible navigation sidebars.\n *\n * Features:\n * - Collapsible sidebar with localStorage persistence\n * - Responsive design with adaptive popover on mobile\n * - Automatic tracking ID generation for analytics\n * - Keyboard navigation and accessibility support\n * - Toggle button with tooltip\n * - Context provider for sidebar state\n * - Mobile-friendly popover navigation\n *\n * @example\n * <Page.Sidebar currentPageTitle=\"Navigation\">\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\">Sidebar Title</Text>\n * </Page.SidebarHeader>\n * <SideNav>\n * <SideNavLink pathname=\"/\">Home</SideNavLink>\n * </SideNav>\n * </Page.Sidebar>\n */\n Sidebar: PageSidebar,\n /**\n * PageSidebarHeader component for creating header sections within sidebars.\n *\n * Features:\n * - Container for sidebar header content\n * - Automatic visibility handling based on sidebar collapsed state\n * - Supports all standard div props\n * - Context-aware styling\n *\n * @example\n * <Page.SidebarHeader>\n * <Text variant=\"headline\" el=\"h2\" size=\"medium\">\n * Sidebar Title\n * </Text>\n * </Page.SidebarHeader>\n */\n SidebarHeader: PageSidebarHeader,\n /**\n * PageHeader component for creating page headers with navigation and actions.\n *\n * Features:\n * - Page title with semantic heading\n * - Breadcrumb navigation support\n * - Status chips display\n * - Primary and secondary action buttons\n * - Preference action button/link\n * - Responsive layout with fluid grid\n * - Accessibility support with proper ARIA labels\n * - Flexible layout configuration\n * - Description content support\n *\n * @example\n * <Page.Header\n * title=\"Page Title\"\n * breadcrumbs={[\n * { href: \"/\", children: \"Home\" },\n * { children: \"Current Page\" }\n * ]}\n * chips={[{ label: \"Status\" }]}\n * actions={{\n * primary: { label: \"Save\", onClick: handleSave },\n * secondary: [{ label: \"Cancel\", onClick: handleCancel }]\n * }}\n * />\n */\n Header: PageHeader,\n /**\n * PageContent component for the main content area of a page.\n *\n * Features:\n * - Semantic main element for page content\n * - Virtual scrolling support for long content\n * - Automatic scroll synchronization\n * - Responsive design\n * - Accessibility support with proper main landmark\n * - Scroll position management\n *\n * @example\n * <Page.Content>\n * <Text>Main page content goes here</Text>\n * <Button>Action Button</Button>\n * </Page.Content>\n */\n Content: PageContent,\n /**\n * PagePanel component for creating slide-out panels or dialogs.\n *\n * Features:\n * - Responsive design with dialog fallback on mobile\n * - Multiple size variants (small, medium, large)\n * - Optional padding control\n * - Persistent or controlled open state\n * - Automatic mobile dialog conversion\n * - Keyboard navigation and accessibility support\n * - Smooth animations and transitions\n *\n * @example\n * <Page.Panel open={isOpen} size=\"medium\">\n * <Text variant=\"headline\" el=\"h3\">Panel Content</Text>\n * <Button onClick={() => setIsOpen(false)}>Close</Button>\n * </Page.Panel>\n */\n Panel: PagePanel,\n /**\n * PageFooter component for creating page footers with layout utilities.\n *\n * Features:\n * - Semantic footer element\n * - Layout utility props support\n * - Responsive design\n * - Accessibility support with proper footer landmark\n * - Flexible content positioning\n *\n * @example\n * <Page.Footer>\n * <Text>Footer content with layout utilities</Text>\n * </Page.Footer>\n */\n Footer: PageFooter,\n});\n"],"names":["core.primitive?.BreakpointLg","props","SegmentSVG","RespClose","RespOpen","OpenSVG","CloseSVG","LocalSettings","ref","rest","MoreVert"],"mappings":"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"}
package/dist/Page.js CHANGED
@@ -1,2 +1,2 @@
1
- export { P as Page, P as default } from './Page-Dgpz2WD7.js';
1
+ export { P as Page, P as default } from './Page-C-yMjgoO.js';
2
2
  //# sourceMappingURL=Page.js.map
@@ -2,7 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { forwardRef, useId } from 'react';
3
3
  import { c as cx } from './index-tZvMCc77.js';
4
4
  import { a as SvgCheckCircle, S as SvgError } from './check_circle-Dja-C2lM.js';
5
- import { F as FieldLabel } from './FieldLabel-BIStrC2x.js';
5
+ import { F as FieldLabel } from './FieldLabel-jqlQ1Ldh.js';
6
6
  import { F as Flex } from './Flex-CjPHUTeq.js';
7
7
  import { I as Icon } from './Icon-BSuTVNaa.js';
8
8
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
@@ -127,4 +127,4 @@ const ProgressBar = forwardRef(
127
127
  ProgressBar.displayName = "ProgressBar";
128
128
 
129
129
  export { ProgressBar as P };
130
- //# sourceMappingURL=ProgressBar-R_UjSR4o.js.map
130
+ //# sourceMappingURL=ProgressBar-CufkbVu5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProgressBar-R_UjSR4o.js","sources":["../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import {\n forwardRef,\n ComponentPropsWithoutRef,\n useId,\n AriaAttributes,\n ReactElement,\n} from \"react\";\nimport cx from \"classnames\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check_circle.svg\";\nimport Error from \"@servicetitan/hammer-icon/mdi/round/error.svg\";\n\nimport { FieldLabel, FieldLabelProps } from \"../FieldLabel\";\nimport { Flex } from \"../Flex\";\nimport { Helper, HelperProps } from \"../../internal/components\";\nimport { Icon } from \"../Icon\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./ProgressBar.module.scss\";\n\n/**\n * Props for the ProgressBar component\n * @extends Omit<ComponentPropsWithoutRef<\"progress\">, \"value\">\n * @extends LayoutUtilProps\n */\nexport type ProgressBarProps = Omit<\n ComponentPropsWithoutRef<\"progress\">,\n \"value\"\n> &\n LayoutUtilProps & {\n /**\n * Error state or error message to display\n * @default false\n */\n error?: ReactElement | string | boolean;\n /**\n * ARIA live region setting for error announcements\n */\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n /**\n * Description text to display below the progress bar\n */\n description?: HelperProps[\"description\"];\n } & (\n | {\n /**\n * Label text for the progress bar\n */\n label: FieldLabelProps[\"children\"];\n /**\n * Additional props for the label component\n */\n labelProps?: Omit<FieldLabelProps, \"children\" | \"id\" | \"required\">;\n }\n | {\n label?: never;\n labelProps?: never;\n /**\n * Accessible label for the progress bar (alternative to label)\n */\n [\"aria-label\"]: Exclude<AriaAttributes[\"aria-label\"], undefined>;\n }\n | {\n label?: never;\n labelProps?: never;\n /**\n * ID of element that labels the progress bar (alternative to label)\n */\n [\"aria-labelledby\"]: Exclude<\n AriaAttributes[\"aria-labelledby\"],\n undefined\n >;\n }\n ) &\n (\n | {\n /**\n * Current progress value (0-100 or 0-max)\n */\n value: `${number}` | number;\n /**\n * Whether the progress bar is in indeterminate state\n * @default false\n */\n indeterminate?: false;\n }\n | {\n value?: never;\n /**\n * Whether the progress bar is in indeterminate state\n */\n indeterminate: true;\n }\n );\n\n/**\n * ProgressBar component for displaying progress indicators.\n *\n * Features:\n * - Supports both determinate and indeterminate progress states\n * - Optional label with customizable label props\n * - Error state with error message display\n * - Success state with check icon when value equals max\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Flexible labeling options (label, aria-label, aria-labelledby)\n * - Error and success visual indicators\n *\n * @example\n * <ProgressBar\n * label=\"Upload Progress\"\n * value={75}\n * max={100}\n * description=\"Uploading files...\"\n * />\n *\n * @example\n * <ProgressBar\n * label=\"Processing\"\n * indeterminate\n * description=\"Please wait...\"\n * />\n *\n * @example\n * <ProgressBar\n * aria-label=\"Download progress\"\n * value={50}\n * error=\"Download failed\"\n * />\n */\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n style,\n value,\n children,\n indeterminate,\n errorAriaLive,\n description,\n error = false,\n max = 100,\n ...mainProps\n } = componentProps;\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n const labelUid = useId();\n const isSuccess = typeof value !== \"undefined\" && +value >= +max;\n\n if (\"label\" in props && !!props.label) {\n const { label, labelProps, ...rest } = mainProps;\n\n const ProgressBarClassNames = cx(\n [styles[\"progress-bar\"]],\n\n className,\n {\n [styles[`error`]]: error,\n [styles[`success`]]: isSuccess,\n },\n );\n\n return (\n <div\n className={ProgressBarClassNames}\n data-anv=\"progress-bar\"\n style={styleCombined}\n ref={ref}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <FieldLabel id={labelUid} {...labelProps}>\n {label}\n </FieldLabel>\n {isSuccess && !error ? (\n <Icon className={styles[\"check-icon\"]} svg={Check} />\n ) : null}\n {error ? (\n <Icon className={styles[\"error-icon\"]} svg={Error} />\n ) : null}\n </Flex>\n <div className={styles[\"bar-container\"]}>\n <progress\n aria-labelledby={labelUid}\n className={styles[\"bar\"]}\n value={value}\n max={max}\n {...rest}\n />\n </div>\n {errorMessage || description ? (\n <Helper\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n }\n\n const ProgressBarClassNames = cx([styles[\"progress-bar\"]], className, {\n [styles[`error`]]: error,\n [styles[`success`]]: isSuccess,\n });\n\n return (\n <div\n className={ProgressBarClassNames}\n data-anv=\"progress-bar\"\n style={styleCombined}\n ref={ref}\n >\n <div className={styles[\"bar-container\"]}>\n <progress\n className={styles[\"bar\"]}\n max={max}\n value={value}\n {...mainProps}\n />\n </div>\n {errorMessage || description ? (\n <Helper\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n },\n);\n\nProgressBar.displayName = \"ProgressBar\";\n"],"names":["ProgressBarClassNames","Check","Error"],"mappings":"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"}
1
+ {"version":3,"file":"ProgressBar-CufkbVu5.js","sources":["../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import {\n forwardRef,\n ComponentPropsWithoutRef,\n useId,\n AriaAttributes,\n ReactElement,\n} from \"react\";\nimport cx from \"classnames\";\nimport Check from \"@servicetitan/hammer-icon/mdi/round/check_circle.svg\";\nimport Error from \"@servicetitan/hammer-icon/mdi/round/error.svg\";\n\nimport { FieldLabel, FieldLabelProps } from \"../FieldLabel\";\nimport { Flex } from \"../Flex\";\nimport { Helper, HelperProps } from \"../../internal/components\";\nimport { Icon } from \"../Icon\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\n\nimport styles from \"./ProgressBar.module.scss\";\n\n/**\n * Props for the ProgressBar component\n * @extends Omit<ComponentPropsWithoutRef<\"progress\">, \"value\">\n * @extends LayoutUtilProps\n */\nexport type ProgressBarProps = Omit<\n ComponentPropsWithoutRef<\"progress\">,\n \"value\"\n> &\n LayoutUtilProps & {\n /**\n * Error state or error message to display\n * @default false\n */\n error?: ReactElement | string | boolean;\n /**\n * ARIA live region setting for error announcements\n */\n errorAriaLive?: HelperProps[\"errorAriaLive\"];\n /**\n * Description text to display below the progress bar\n */\n description?: HelperProps[\"description\"];\n } & (\n | {\n /**\n * Label text for the progress bar\n */\n label: FieldLabelProps[\"children\"];\n /**\n * Additional props for the label component\n */\n labelProps?: Omit<FieldLabelProps, \"children\" | \"id\" | \"required\">;\n }\n | {\n label?: never;\n labelProps?: never;\n /**\n * Accessible label for the progress bar (alternative to label)\n */\n [\"aria-label\"]: Exclude<AriaAttributes[\"aria-label\"], undefined>;\n }\n | {\n label?: never;\n labelProps?: never;\n /**\n * ID of element that labels the progress bar (alternative to label)\n */\n [\"aria-labelledby\"]: Exclude<\n AriaAttributes[\"aria-labelledby\"],\n undefined\n >;\n }\n ) &\n (\n | {\n /**\n * Current progress value (0-100 or 0-max)\n */\n value: `${number}` | number;\n /**\n * Whether the progress bar is in indeterminate state\n * @default false\n */\n indeterminate?: false;\n }\n | {\n value?: never;\n /**\n * Whether the progress bar is in indeterminate state\n */\n indeterminate: true;\n }\n );\n\n/**\n * ProgressBar component for displaying progress indicators.\n *\n * Features:\n * - Supports both determinate and indeterminate progress states\n * - Optional label with customizable label props\n * - Error state with error message display\n * - Success state with check icon when value equals max\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Flexible labeling options (label, aria-label, aria-labelledby)\n * - Error and success visual indicators\n *\n * @example\n * <ProgressBar\n * label=\"Upload Progress\"\n * value={75}\n * max={100}\n * description=\"Uploading files...\"\n * />\n *\n * @example\n * <ProgressBar\n * label=\"Processing\"\n * indeterminate\n * description=\"Please wait...\"\n * />\n *\n * @example\n * <ProgressBar\n * aria-label=\"Download progress\"\n * value={50}\n * error=\"Download failed\"\n * />\n */\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n style,\n value,\n children,\n indeterminate,\n errorAriaLive,\n description,\n error = false,\n max = 100,\n ...mainProps\n } = componentProps;\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n const errorMessage = typeof error !== \"boolean\" ? error : undefined;\n const labelUid = useId();\n const isSuccess = typeof value !== \"undefined\" && +value >= +max;\n\n if (\"label\" in props && !!props.label) {\n const { label, labelProps, ...rest } = mainProps;\n\n const ProgressBarClassNames = cx(\n [styles[\"progress-bar\"]],\n\n className,\n {\n [styles[`error`]]: error,\n [styles[`success`]]: isSuccess,\n },\n );\n\n return (\n <div\n className={ProgressBarClassNames}\n data-anv=\"progress-bar\"\n style={styleCombined}\n ref={ref}\n >\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <FieldLabel id={labelUid} {...labelProps}>\n {label}\n </FieldLabel>\n {isSuccess && !error ? (\n <Icon className={styles[\"check-icon\"]} svg={Check} />\n ) : null}\n {error ? (\n <Icon className={styles[\"error-icon\"]} svg={Error} />\n ) : null}\n </Flex>\n <div className={styles[\"bar-container\"]}>\n <progress\n aria-labelledby={labelUid}\n className={styles[\"bar\"]}\n value={value}\n max={max}\n {...rest}\n />\n </div>\n {errorMessage || description ? (\n <Helper\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n }\n\n const ProgressBarClassNames = cx([styles[\"progress-bar\"]], className, {\n [styles[`error`]]: error,\n [styles[`success`]]: isSuccess,\n });\n\n return (\n <div\n className={ProgressBarClassNames}\n data-anv=\"progress-bar\"\n style={styleCombined}\n ref={ref}\n >\n <div className={styles[\"bar-container\"]}>\n <progress\n className={styles[\"bar\"]}\n max={max}\n value={value}\n {...mainProps}\n />\n </div>\n {errorMessage || description ? (\n <Helper\n errorMessage={errorMessage}\n errorAriaLive={errorAriaLive}\n description={description}\n />\n ) : null}\n </div>\n );\n },\n);\n\nProgressBar.displayName = \"ProgressBar\";\n"],"names":["ProgressBarClassNames","Check","Error"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { P as ProgressBar, P as default } from './ProgressBar-R_UjSR4o.js';
1
+ export { P as ProgressBar, P as default } from './ProgressBar-CufkbVu5.js';
2
2
  //# sourceMappingURL=ProgressBar.js.map
@@ -1,6 +1,6 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { forwardRef } from 'react';
3
- import { R as RadioGroup, a as Radio$1 } from './RadioGroup-m46C69uO.js';
3
+ import { R as RadioGroup, a as Radio$1 } from './RadioGroup-BAjpkCjp.js';
4
4
  import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
5
5
  import { useTrackingId } from './useTrackingId.js';
6
6
 
@@ -57,4 +57,4 @@ const Radio = Object.assign(RadioElement, {
57
57
  });
58
58
 
59
59
  export { Radio as R };
60
- //# sourceMappingURL=Radio-CLR1m8N9.js.map
60
+ //# sourceMappingURL=Radio-BeBG7Ksw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Radio-CLR1m8N9.js","sources":["../src/components/Radio/Radio.tsx"],"sourcesContent":["import { Ref, forwardRef } from \"react\";\nimport {\n RadioProps as CoreRadioProps,\n Radio as CoreRadio,\n} from \"./internal/Radio\";\nimport { RadioGroup } from \"./RadioGroup\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\n\n/**\n * Props for the Radio component\n * @property {boolean} [checked] - Controlled state\n * @property {boolean} [defaultChecked] - Uncontrolled state\n * @property {Function} [onChange] - Callback when radio is changed\n * @property {ReactElement | string} [label] - Label for Radio\n * @property {boolean} [error] - Error state for the radio\n * @property {object} [icons] - Icon overrides for checked and unchecked states\n * @property {string} [description] - Description text to display below the radio\n * @property {string} [aria-label] - Accessible label for the radio\n * @property {string} [aria-labelledby] - ID of element that labels the radio\n * @property {string} [name] - Name attribute for the radio\n * @property {string} [data-tracking-id] - Custom tracking ID for analytics\n * @extends DataTrackingId\n */\nexport type RadioProps = Omit<CoreRadioProps, \"hideRadio\"> & DataTrackingId;\n\nconst RadioElement = forwardRef(\n (props: RadioProps, ref: Ref<HTMLInputElement>) => {\n const data = {\n label: childrenToString(props.label),\n ariaLabel: props[\"aria-label\"],\n ariaLabelledBy: props[\"aria-labelledby\"],\n name: props.name,\n value: props.value,\n };\n\n const trackingId = useTrackingId({\n name: \"Radio\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n return <CoreRadio ref={ref} data-tracking-id={trackingId} {...props} />;\n },\n);\n\nRadioElement.displayName = CoreRadio.displayName;\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Flexible labeling options\n * - Group support via Radio.Group\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = Object.assign(RadioElement, {\n /**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\n Group: RadioGroup,\n});\n"],"names":["CoreRadio"],"mappings":";;;;;;AA2BA,MAAM,YAAA,GAAe,UAAA;AAAA,EACnB,CAAC,OAAmB,GAAA,KAA+B;AACjD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,KAAA,EAAO,gBAAA,CAAiB,KAAA,CAAM,KAAK,CAAA;AAAA,MACnC,SAAA,EAAW,MAAM,YAAY,CAAA;AAAA,MAC7B,cAAA,EAAgB,MAAM,iBAAiB,CAAA;AAAA,MACvC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM;AAAA,KACf;AAEA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,IAAA,EAAM,OAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,KACxC,CAAA;AACD,IAAA,2BAAQA,OAAA,EAAA,EAAU,GAAA,EAAU,kBAAA,EAAkB,UAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AAAA,EACvE;AACF,CAAA;AAEA,YAAA,CAAa,cAAcA,OAAA,CAAU,WAAA;AA0C9B,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+B/C,KAAA,EAAO;AACT,CAAC;;;;"}
1
+ {"version":3,"file":"Radio-BeBG7Ksw.js","sources":["../src/components/Radio/Radio.tsx"],"sourcesContent":["import { Ref, forwardRef } from \"react\";\nimport {\n RadioProps as CoreRadioProps,\n Radio as CoreRadio,\n} from \"./internal/Radio\";\nimport { RadioGroup } from \"./RadioGroup\";\nimport { useTrackingId } from \"../../hooks\";\nimport { DataTrackingId } from \"../../types\";\nimport { childrenToString } from \"../../internal/functions\";\n\n/**\n * Props for the Radio component\n * @property {boolean} [checked] - Controlled state\n * @property {boolean} [defaultChecked] - Uncontrolled state\n * @property {Function} [onChange] - Callback when radio is changed\n * @property {ReactElement | string} [label] - Label for Radio\n * @property {boolean} [error] - Error state for the radio\n * @property {object} [icons] - Icon overrides for checked and unchecked states\n * @property {string} [description] - Description text to display below the radio\n * @property {string} [aria-label] - Accessible label for the radio\n * @property {string} [aria-labelledby] - ID of element that labels the radio\n * @property {string} [name] - Name attribute for the radio\n * @property {string} [data-tracking-id] - Custom tracking ID for analytics\n * @extends DataTrackingId\n */\nexport type RadioProps = Omit<CoreRadioProps, \"hideRadio\"> & DataTrackingId;\n\nconst RadioElement = forwardRef(\n (props: RadioProps, ref: Ref<HTMLInputElement>) => {\n const data = {\n label: childrenToString(props.label),\n ariaLabel: props[\"aria-label\"],\n ariaLabelledBy: props[\"aria-labelledby\"],\n name: props.name,\n value: props.value,\n };\n\n const trackingId = useTrackingId({\n name: \"Radio\",\n data,\n hasOverride: !!props[\"data-tracking-id\"],\n });\n return <CoreRadio ref={ref} data-tracking-id={trackingId} {...props} />;\n },\n);\n\nRadioElement.displayName = CoreRadio.displayName;\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Flexible labeling options\n * - Group support via Radio.Group\n * - Automatic tracking ID generation for analytics\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = Object.assign(RadioElement, {\n /**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\n Group: RadioGroup,\n});\n"],"names":["CoreRadio"],"mappings":";;;;;;AA2BA,MAAM,YAAA,GAAe,UAAA;AAAA,EACnB,CAAC,OAAmB,GAAA,KAA+B;AACjD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,KAAA,EAAO,gBAAA,CAAiB,KAAA,CAAM,KAAK,CAAA;AAAA,MACnC,SAAA,EAAW,MAAM,YAAY,CAAA;AAAA,MAC7B,cAAA,EAAgB,MAAM,iBAAiB,CAAA;AAAA,MACvC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM;AAAA,KACf;AAEA,IAAA,MAAM,aAAa,aAAA,CAAc;AAAA,MAC/B,IAAA,EAAM,OAAA;AAAA,MACN,IAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAC,KAAA,CAAM,kBAAkB;AAAA,KACxC,CAAA;AACD,IAAA,2BAAQA,OAAA,EAAA,EAAU,GAAA,EAAU,kBAAA,EAAkB,UAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AAAA,EACvE;AACF,CAAA;AAEA,YAAA,CAAa,cAAcA,OAAA,CAAU,WAAA;AA0C9B,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,YAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+B/C,KAAA,EAAO;AACT,CAAC;;;;"}
package/dist/Radio.js CHANGED
@@ -1,3 +1,3 @@
1
- export { R as Radio, R as default } from './Radio-CLR1m8N9.js';
2
- export { R as RadioGroup } from './RadioGroup-m46C69uO.js';
1
+ export { R as Radio, R as default } from './Radio-BeBG7Ksw.js';
2
+ export { R as RadioGroup } from './RadioGroup-BAjpkCjp.js';
3
3
  //# sourceMappingURL=Radio.js.map
@@ -6,7 +6,7 @@ import { I as Icon } from './Icon-BSuTVNaa.js';
6
6
  import { H as Helper } from './Helper-DjWotFtO.js';
7
7
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-BlIWftBb.js';
8
8
  import { S as SrOnly } from './SrOnly-CTsYSuby.js';
9
- import { F as FieldLabel } from './FieldLabel-BIStrC2x.js';
9
+ import { F as FieldLabel } from './FieldLabel-jqlQ1Ldh.js';
10
10
 
11
11
  import './RadioGroup.css';const SvgRadioButtonUnchecked = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z" }));
12
12
 
@@ -194,4 +194,4 @@ const RadioGroup = forwardRef(
194
194
  RadioGroup.displayName = "RadioGroup";
195
195
 
196
196
  export { RadioGroup as R, Radio as a };
197
- //# sourceMappingURL=RadioGroup-m46C69uO.js.map
197
+ //# sourceMappingURL=RadioGroup-BAjpkCjp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RadioGroup-m46C69uO.js","sources":["../../hammer-icon/mdi/two-tone/radio_button_unchecked.svg","../../hammer-icon/mdi/two-tone/radio_button_checked.svg","../src/components/Radio/internal/Radio.tsx","../src/components/Radio/RadioGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgRadioButtonUnchecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }));\nexport default SvgRadioButtonUnchecked;\n","import * as React from \"react\";\nconst SvgRadioButtonChecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }), /* @__PURE__ */ React.createElement(\"circle\", { cx: 12, cy: 12, r: 5 }));\nexport default SvgRadioButtonChecked;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ChangeEvent,\n ReactElement,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\nimport Radio_outline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport Radio_checked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\nimport styles from \"../Radio.module.scss\";\nimport { LayoutUtilProps, Svg } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { RadioState } from \"../types\";\n\n/**\n * Props for the Radio component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\">\n * @extends LayoutUtilProps\n */\nexport type RadioProps = Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\"> &\n LayoutUtilProps & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Callback when radio is changed\n */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;\n\n /**\n * Label for Radio\n * @remarks This should either be a string or have text content inside for accessibility\n */\n label?: ReactElement | string;\n\n /**\n * Error state for the radio\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides for checked and unchecked states\n */\n icons?: {\n /**\n * Icon to display when radio is checked\n */\n checked?: Svg;\n /**\n * Icon to display when radio is unchecked\n */\n unchecked?: Svg;\n };\n\n /**\n * Description text to display below the radio\n */\n description?: HelperProps[\"description\"];\n\n /**\n * When true, hides the radio for visual users\n * @default false\n */\n hideRadio?: boolean;\n };\n\nconst RadioElement = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n checked,\n defaultChecked,\n value,\n icons,\n error,\n label,\n onChange,\n style,\n description,\n hideRadio = false,\n ...rest\n } = componentProps;\n const {\n checked: checkedIcon = Radio_checked,\n unchecked: uncheckedIcon = Radio_outline,\n } = { ...icons };\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: e.target.checked });\n };\n\n const helperUid = useId();\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideRadio },\n className,\n );\n\n const radioClassNames = cx(styles[\"radio\"], {\n [styles[\"error\"]]: error,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div className={wrapperClassNames} style={styleCombined} data-anv=\"radio\">\n <label className={radioClassNames}>\n <input\n type=\"radio\"\n aria-checked={checked ?? defaultChecked}\n checked={checked}\n defaultChecked={defaultChecked}\n value={value}\n onChange={onChangeHandler}\n aria-describedby={description ? helperUid : undefined}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideRadio,\n })}\n >\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={cx([styles[\"icon-unchecked\"]])}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={cx([styles[\"icon-checked\"]])}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideRadio })}>\n {label}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n});\n\nRadioElement.displayName = \"RadioElement\";\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Optional radio hiding for visual users\n * - Flexible labeling options\n * - Group support via Radio.Group\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = RadioElement;\n","import {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n forwardRef,\n ReactElement,\n useState,\n} from \"react\";\nimport styles from \"./Radio.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelProps } from \"../../internal/types\";\n\n/**\n * Props for the RadioGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type RadioGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * Required flag for label\n * @remarks This does not enforce error when nothing is selected\n */\n required?: boolean;\n\n /**\n * Legend for the fieldset\n */\n legend?: string | ReactElement;\n };\n\n/**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n children,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const RadioGroupClassNames = cx(styles[\"radio-group\"], className);\n const [openInfo, setOpenInfo] = useState<boolean>(false);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"center\" : undefined),\n };\n\n const focusHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n };\n\n const blurHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n };\n\n return (\n <fieldset\n role=\"radiogroup\"\n data-anv=\"radio-group\"\n className={RadioGroupClassNames}\n aria-required={required}\n style={styleCombined}\n ref={ref}\n onFocus={focusHandler}\n onBlur={blurHandler}\n {...rest}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n {moreInfo && <SrOnly>{moreInfo}</SrOnly>}\n </legend>\n <FieldLabel\n aria-hidden\n moreInfo={moreInfo}\n required={required}\n openMoreInfo={openInfo}\n >\n {legend}\n </FieldLabel>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </fieldset>\n );\n },\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n"],"names":["Radio_checked","Radio_outline"],"mappings":"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"}
1
+ {"version":3,"file":"RadioGroup-BAjpkCjp.js","sources":["../../hammer-icon/mdi/two-tone/radio_button_unchecked.svg","../../hammer-icon/mdi/two-tone/radio_button_checked.svg","../src/components/Radio/internal/Radio.tsx","../src/components/Radio/RadioGroup.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgRadioButtonUnchecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }));\nexport default SvgRadioButtonUnchecked;\n","import * as React from \"react\";\nconst SvgRadioButtonChecked = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: \"1em\", height: \"1em\", viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\" }), /* @__PURE__ */ React.createElement(\"circle\", { cx: 12, cy: 12, r: 5 }));\nexport default SvgRadioButtonChecked;\n","import {\n forwardRef,\n ComponentPropsWithoutRef,\n ChangeEvent,\n ReactElement,\n useId,\n} from \"react\";\nimport cx from \"classnames\";\nimport { Icon } from \"../../Icon\";\nimport Radio_outline from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_unchecked.svg\";\nimport Radio_checked from \"@servicetitan/hammer-icon/mdi/two-tone/radio_button_checked.svg\";\nimport styles from \"../Radio.module.scss\";\nimport { LayoutUtilProps, Svg } from \"../../../types\";\nimport { useLayoutPropsUtil } from \"../../../internal/hooks\";\nimport { Helper, HelperProps } from \"../../../internal/components\";\nimport { RadioState } from \"../types\";\n\n/**\n * Props for the Radio component\n * @extends Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\">\n * @extends LayoutUtilProps\n */\nexport type RadioProps = Omit<ComponentPropsWithoutRef<\"input\">, \"onChange\"> &\n LayoutUtilProps & {\n /**\n * Controlled state\n * @default false\n */\n checked?: boolean;\n\n /**\n * Uncontrolled state\n * @default false\n */\n defaultChecked?: boolean;\n\n /**\n * Callback when radio is changed\n */\n onChange?: (e?: ChangeEvent<HTMLInputElement>, state?: RadioState) => void;\n\n /**\n * Label for Radio\n * @remarks This should either be a string or have text content inside for accessibility\n */\n label?: ReactElement | string;\n\n /**\n * Error state for the radio\n * @default false\n */\n error?: boolean;\n\n /**\n * Icon overrides for checked and unchecked states\n */\n icons?: {\n /**\n * Icon to display when radio is checked\n */\n checked?: Svg;\n /**\n * Icon to display when radio is unchecked\n */\n unchecked?: Svg;\n };\n\n /**\n * Description text to display below the radio\n */\n description?: HelperProps[\"description\"];\n\n /**\n * When true, hides the radio for visual users\n * @default false\n */\n hideRadio?: boolean;\n };\n\nconst RadioElement = forwardRef<HTMLInputElement, RadioProps>((props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n checked,\n defaultChecked,\n value,\n icons,\n error,\n label,\n onChange,\n style,\n description,\n hideRadio = false,\n ...rest\n } = componentProps;\n const {\n checked: checkedIcon = Radio_checked,\n unchecked: uncheckedIcon = Radio_outline,\n } = { ...icons };\n\n const onChangeHandler = (e: ChangeEvent<HTMLInputElement>) => {\n onChange?.(e, { value, checked: e.target.checked });\n };\n\n const helperUid = useId();\n\n const wrapperClassNames = cx(\n styles[\"wrapper\"],\n { [styles[\"focus\"]]: hideRadio },\n className,\n );\n\n const radioClassNames = cx(styles[\"radio\"], {\n [styles[\"error\"]]: error,\n });\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n };\n\n return (\n <div className={wrapperClassNames} style={styleCombined} data-anv=\"radio\">\n <label className={radioClassNames}>\n <input\n type=\"radio\"\n aria-checked={checked ?? defaultChecked}\n checked={checked}\n defaultChecked={defaultChecked}\n value={value}\n onChange={onChangeHandler}\n aria-describedby={description ? helperUid : undefined}\n ref={ref}\n {...rest}\n />\n\n <span\n className={cx(styles[\"icon-wrapper\"], {\n [styles[\"sr-only\"]]: hideRadio,\n })}\n >\n <Icon\n size=\"large\"\n svg={uncheckedIcon}\n className={cx([styles[\"icon-unchecked\"]])}\n />\n\n <Icon\n size=\"large\"\n svg={checkedIcon}\n className={cx([styles[\"icon-checked\"]])}\n />\n </span>\n\n <span className={cx({ [styles[\"focus-label\"]]: hideRadio })}>\n {label}\n </span>\n </label>\n\n {description ? (\n <div className={styles[\"helper-wrapper\"]}>\n <Helper id={helperUid} description={description} />\n </div>\n ) : null}\n </div>\n );\n});\n\nRadioElement.displayName = \"RadioElement\";\n\n/**\n * Radio component for single selection from a group of options.\n *\n * Features:\n * - Supports both controlled and uncontrolled modes\n * - Customizable icons for checked and unchecked states\n * - Error state with visual indicators\n * - Description text support\n * - Accessibility support with proper ARIA attributes\n * - Layout utility props for positioning and spacing\n * - Optional radio hiding for visual users\n * - Flexible labeling options\n * - Group support via Radio.Group\n *\n * @example\n * <Radio\n * label=\"Option 1\"\n * value=\"option1\"\n * checked={selectedValue === \"option1\"}\n * onChange={(e, state) => setSelectedValue(state?.value)}\n * />\n *\n * @example\n * <Radio\n * label=\"Custom styled option\"\n * value=\"custom\"\n * icons={{\n * checked: CustomCheckedIcon,\n * unchecked: CustomUncheckedIcon\n * }}\n * description=\"This option has custom styling\"\n * />\n *\n * @example\n * <Radio.Group legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </Radio.Group>\n */\nexport const Radio = RadioElement;\n","import {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n forwardRef,\n ReactElement,\n useState,\n} from \"react\";\nimport styles from \"./Radio.module.scss\";\nimport cx from \"classnames\";\nimport { LayoutUtilProps } from \"../../types\";\nimport { useLayoutPropsUtil } from \"../../internal/hooks\";\nimport { SrOnly } from \"../SrOnly\";\nimport { FieldLabel } from \"../FieldLabel\";\nimport { FieldLabelProps } from \"../../internal/types\";\n\n/**\n * Props for the RadioGroup component\n * @extends ComponentPropsWithoutRef<\"fieldset\">\n * @extends LayoutUtilProps\n * @extends Omit<FieldLabelProps, \"labelProps\">\n */\nexport type RadioGroupProps = ComponentPropsWithoutRef<\"fieldset\"> &\n LayoutUtilProps &\n Omit<FieldLabelProps, \"labelProps\"> & {\n /**\n * Required flag for label\n * @remarks This does not enforce error when nothing is selected\n */\n required?: boolean;\n\n /**\n * Legend for the fieldset\n */\n legend?: string | ReactElement;\n };\n\n/**\n * RadioGroup component for grouping related radio options.\n *\n * Features:\n * - Groups multiple radio options together\n * - Legend support for group labeling\n * - Required field indication\n * - Accessibility support with proper fieldset semantics\n * - Layout utility props for positioning and spacing\n * - Focus and blur event handling\n * - More info support for additional context\n * - Automatic alignment based on flex direction\n *\n * @example\n * <RadioGroup legend=\"Choose your preference\" required>\n * <Radio label=\"Option A\" value=\"a\" />\n * <Radio label=\"Option B\" value=\"b\" />\n * <Radio label=\"Option C\" value=\"c\" />\n * </RadioGroup>\n *\n * @example\n * <RadioGroup\n * legend=\"Horizontal layout\"\n * flexDirection=\"row\"\n * gap=\"4\"\n * >\n * <Radio label=\"Yes\" value=\"yes\" />\n * <Radio label=\"No\" value=\"no\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (props, ref) => {\n const { layoutStyles, componentProps } = useLayoutPropsUtil(props);\n const {\n className,\n children,\n legend,\n moreInfo,\n onBlur,\n onFocus,\n required,\n style,\n ...rest\n } = componentProps;\n\n const RadioGroupClassNames = cx(styles[\"radio-group\"], className);\n const [openInfo, setOpenInfo] = useState<boolean>(false);\n\n const styleCombined = {\n ...style,\n ...layoutStyles,\n alignItems:\n layoutStyles?.alignItems ??\n (layoutStyles?.flexDirection === \"row\" ? \"center\" : undefined),\n };\n\n const focusHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onFocus?.(e);\n setOpenInfo(true);\n };\n\n const blurHandler: FocusEventHandler<HTMLFieldSetElement> = (e) => {\n onBlur?.(e);\n setOpenInfo(false);\n };\n\n return (\n <fieldset\n role=\"radiogroup\"\n data-anv=\"radio-group\"\n className={RadioGroupClassNames}\n aria-required={required}\n style={styleCombined}\n ref={ref}\n onFocus={focusHandler}\n onBlur={blurHandler}\n {...rest}\n >\n <legend className={styles[\"legend\"]}>\n {legend}\n {required && \", required\"}\n {moreInfo && <SrOnly>{moreInfo}</SrOnly>}\n </legend>\n <FieldLabel\n aria-hidden\n moreInfo={moreInfo}\n required={required}\n openMoreInfo={openInfo}\n >\n {legend}\n </FieldLabel>\n <div\n className={styles[\"children\"]}\n style={{\n flexDirection: layoutStyles?.flexDirection,\n gap: layoutStyles?.gap,\n }}\n >\n {children}\n </div>\n </fieldset>\n );\n },\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n"],"names":["Radio_checked","Radio_outline"],"mappings":"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"}
@@ -12,12 +12,15 @@ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
12
12
 
13
13
  import './SearchField.css';const SvgSearch = (props) => /* @__PURE__ */ React.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "1em", height: "1em", viewBox: "0 0 24 24", ...props }, /* @__PURE__ */ React.createElement("path", { d: "M15.5 14h-.79l-.28-.27a6.5 6.5 0 0 0 1.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 0 0-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 0 0 5.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z" }));
14
14
 
15
- const searchfield = "_searchfield_1s8tg_2";
16
- const clear = "_clear_1s8tg_10";
15
+ const searchfield = "_searchfield_44tin_2";
16
+ const clear = "_clear_44tin_10";
17
+ const input = "_input_44tin_7";
17
18
  const styles = {
18
19
  searchfield: searchfield,
19
- "input-wrapper": "_input-wrapper_1s8tg_7",
20
- clear: clear};
20
+ "input-wrapper": "_input-wrapper_44tin_7",
21
+ clear: clear,
22
+ input: input
23
+ };
21
24
 
22
25
  const SearchField = forwardRef(
23
26
  function SearchField2(props, ref) {
@@ -62,6 +65,7 @@ const SearchField = forwardRef(
62
65
  if (disabled || rest.readOnly) return;
63
66
  onClear?.();
64
67
  if (value) {
68
+ inputRef.current.focus();
65
69
  return;
66
70
  }
67
71
  const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
@@ -71,6 +75,28 @@ const SearchField = forwardRef(
71
75
  nativeInputValueSetter?.call(inputRef.current, "");
72
76
  inputRef.current.dispatchEvent(new Event("input", { bubbles: true }));
73
77
  setHasValue(false);
78
+ inputRef.current.focus();
79
+ };
80
+ const handleClearKeyDown = (e) => {
81
+ if (e.code === "Enter" || e.code === "Space") {
82
+ e.preventDefault();
83
+ handleClear();
84
+ } else if (e.code === "ArrowLeft") {
85
+ e.preventDefault();
86
+ inputRef.current?.focus();
87
+ }
88
+ };
89
+ const handleInputKeyDown = (e) => {
90
+ if (e.code === "ArrowRight" && hasValue) {
91
+ const input = e.currentTarget;
92
+ if (input.selectionStart === input.value.length) {
93
+ e.preventDefault();
94
+ const clearButton = input.parentElement?.querySelector(
95
+ '[role="button"]'
96
+ );
97
+ clearButton?.focus();
98
+ }
99
+ }
74
100
  };
75
101
  const data = {
76
102
  value: props.value,
@@ -113,9 +139,10 @@ const SearchField = forwardRef(
113
139
  /* @__PURE__ */ jsx(
114
140
  "input",
115
141
  {
116
- className: cx(textFieldStyles["input"]),
142
+ className: cx(textFieldStyles["input"], styles["input"]),
117
143
  ref: useMergeRefs([ref, inputRef]),
118
144
  onChange: handleOnChange,
145
+ onKeyDown: handleInputKeyDown,
119
146
  placeholder,
120
147
  value,
121
148
  type: "search",
@@ -129,10 +156,12 @@ const SearchField = forwardRef(
129
156
  /* @__PURE__ */ jsx(
130
157
  Icon,
131
158
  {
132
- "aria-label": "cancel",
159
+ "aria-label": "Clear search",
133
160
  svg: SvgClose,
134
161
  role: "button",
135
162
  onClick: handleClear,
163
+ onKeyDown: handleClearKeyDown,
164
+ tabIndex: -1,
136
165
  className: styles["clear"],
137
166
  "aria-disabled": disabled,
138
167
  style: {
@@ -151,4 +180,4 @@ const SearchField = forwardRef(
151
180
  );
152
181
 
153
182
  export { SearchField as S, SvgSearch as a };
154
- //# sourceMappingURL=SearchField-DrgNbG3I.js.map
183
+ //# sourceMappingURL=SearchField-D6bICv4b.js.map