boreal-ui 0.0.68 → 0.0.69

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.
@@ -109,7 +109,7 @@ const SidebarBase = ({
109
109
  id: buttonId,
110
110
  className: classNames.combineClassNames(
111
111
  classMap.link,
112
- (isOpen || containsActiveChild) && classMap.active
112
+ (isActive || isOpen || containsActiveChild) && classMap.active
113
113
  ),
114
114
  onClick: () => toggleItem(label),
115
115
  "aria-expanded": isOpen,
@@ -256,6 +256,12 @@ const classes = {
256
256
  };
257
257
  const normalizePath = (p) => p.endsWith("/") && p.length > 1 ? p.slice(0, -1) : p;
258
258
  const getInitialPath = () => typeof window !== "undefined" ? window.location.pathname || "/" : "/";
259
+ const isDescendantPath = (parentPath, currentPath) => {
260
+ const parent = normalizePath(parentPath);
261
+ const current = normalizePath(currentPath);
262
+ if (parent === "/") return current === "/";
263
+ return current === parent || current.startsWith(`${parent}/`);
264
+ };
259
265
  const isActiveRecursive = (link, matcher) => {
260
266
  var _a;
261
267
  if (matcher(link)) return true;
@@ -263,7 +269,14 @@ const isActiveRecursive = (link, matcher) => {
263
269
  };
264
270
  const Sidebar = (props) => {
265
271
  const [pathname] = React.useState(getInitialPath);
266
- const isLinkActive = (link) => !!link.href && normalizePath(link.href) === normalizePath(pathname);
272
+ const isLinkActive = (link) => {
273
+ var _a;
274
+ if (!link.href) return false;
275
+ if ((_a = link.children) == null ? void 0 : _a.length) {
276
+ return isDescendantPath(link.href, pathname);
277
+ }
278
+ return normalizePath(link.href) === normalizePath(pathname);
279
+ };
267
280
  const hasActiveChild = (link) => {
268
281
  var _a;
269
282
  return !!((_a = link.children) == null ? void 0 : _a.some((child) => isActiveRecursive(child, isLinkActive)));
@@ -280,4 +293,4 @@ const Sidebar = (props) => {
280
293
  };
281
294
  Sidebar.displayName = "Sidebar";
282
295
  exports.Sidebar = Sidebar;
283
- //# sourceMappingURL=Sidebar-DMR5T81x.cjs.map
296
+ //# sourceMappingURL=Sidebar-BbXkPcQP.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar-BbXkPcQP.cjs","sources":["../../src/components/Sidebar/SidebarBase.tsx","../../src/components/Sidebar/core/Sidebar.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport { combineClassNames } from \"@/utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\nimport { ChevronDownIcon } from \"@/Icons\";\r\nimport { BaseSidebarProps, SidebarLink } from \"./Sidebar.types\";\r\n\r\nconst SidebarBase: React.FC<BaseSidebarProps> = ({\r\n links,\r\n classMap,\r\n LinkComponent = \"a\",\r\n isLinkActive,\r\n hasActiveChild,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n showFooter = false,\r\n footerLinks,\r\n footerVersion,\r\n outline = false,\r\n className = \"\",\r\n \"data-testid\": testId = \"sidebar\",\r\n ariaLabel = \"Sidebar navigation\",\r\n ...rest\r\n}) => {\r\n const [openItems, setOpenItems] = useState<Record<string, boolean>>({});\r\n\r\n const idsRef = useRef<Record<string, string>>({});\r\n const seqRef = useRef(0);\r\n\r\n const idFor = (label: string) => {\r\n if (!idsRef.current[label]) {\r\n const slug = label\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")\r\n .replace(/[^a-z0-9_-]/g, \"\");\r\n idsRef.current[label] = `${testId}-section-${slug}-${seqRef.current++}`;\r\n }\r\n return idsRef.current[label];\r\n };\r\n\r\n useEffect(() => {\r\n const next: Record<string, boolean> = {};\r\n\r\n const walk = (nodes: SidebarLink[]): boolean => {\r\n for (const node of nodes) {\r\n if (node.children?.length) {\r\n const childIsActive =\r\n hasActiveChild?.(node) ??\r\n node.children.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (!!child.children?.length && walk(child.children)),\r\n );\r\n\r\n if (childIsActive) {\r\n next[node.label] = true;\r\n }\r\n }\r\n }\r\n\r\n return nodes.some(\r\n (node) =>\r\n (isLinkActive?.(node) ?? false) ||\r\n (!!node.children?.length && walk(node.children)),\r\n );\r\n };\r\n\r\n walk(links);\r\n setOpenItems((prev) => ({ ...prev, ...next }));\r\n }, [links, isLinkActive, hasActiveChild]);\r\n\r\n const toggleItem = (key: string) =>\r\n setOpenItems((prev) => ({ ...prev, [key]: !prev[key] }));\r\n\r\n const containerClasses = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.wrapper,\r\n className,\r\n classMap[theme],\r\n classMap[state],\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n outline && classMap.outline,\r\n ),\r\n [classMap, className, theme, state, outline, rounding, shadow],\r\n );\r\n\r\n const renderLinks = (items: SidebarLink[], isChild = false) => (\r\n <ul\r\n className={combineClassNames(\r\n classMap.list,\r\n isChild && classMap.childList,\r\n )}\r\n data-testid={`${testId}-list`}\r\n >\r\n {items.map(({ label, href, children, icon }, idx) => {\r\n const key = `${label}-${idx}`;\r\n const link: SidebarLink = { label, href, children, icon };\r\n\r\n const isActive = isLinkActive?.(link) ?? false;\r\n const containsActiveChild =\r\n hasActiveChild?.(link) ??\r\n !!children?.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (child.children?.length && (hasActiveChild?.(child) ?? false)),\r\n );\r\n\r\n const isOpen = !!openItems[label];\r\n const sectionId = idFor(label);\r\n const buttonId = `${sectionId}-button`;\r\n const panelId = `${sectionId}-panel`;\r\n\r\n return (\r\n <li\r\n key={key}\r\n className={classMap.item}\r\n data-testid={`${testId}-listItem`}\r\n >\r\n {children && children.length > 0 ? (\r\n <>\r\n <button\r\n type=\"button\"\r\n id={buttonId}\r\n className={combineClassNames(\r\n classMap.link,\r\n (isActive || isOpen || containsActiveChild) &&\r\n classMap.active,\r\n )}\r\n onClick={() => toggleItem(label)}\r\n aria-expanded={isOpen}\r\n aria-controls={panelId}\r\n data-testid={`${testId}-expandItemButton`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n <span data-testid={`${testId}-expandItemLabel`}>{label}</span>\r\n <ChevronDownIcon\r\n className={combineClassNames(\r\n classMap.chevron,\r\n isOpen && classMap.chevronOpen,\r\n )}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n data-testid={`${testId}-expandIcon`}\r\n />\r\n </button>\r\n\r\n <div\r\n id={panelId}\r\n className={combineClassNames(\r\n classMap.submenu,\r\n isOpen && classMap.submenuOpen,\r\n )}\r\n role=\"group\"\r\n aria-labelledby={buttonId}\r\n hidden={!isOpen}\r\n data-testid={`${testId}-subMenu`}\r\n >\r\n {renderLinks(children, true)}\r\n </div>\r\n </>\r\n ) : href ? (\r\n <LinkComponent\r\n href={href}\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n isActive && classMap.active,\r\n )}\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-testid={`${testId}-sidebarLink`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </LinkComponent>\r\n ) : (\r\n <span\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n )}\r\n data-testid={`${testId}-sidebarLabel`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n\r\n return (\r\n <nav\r\n className={containerClasses}\r\n aria-label={ariaLabel}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n <div className={classMap.nav}>{renderLinks(links)}</div>\r\n\r\n {showFooter && (\r\n <footer className={classMap.footer} data-testid={`${testId}-footer`}>\r\n {footerLinks?.map(({ label, href }, i) => (\r\n <LinkComponent\r\n key={`${label}-${i}`}\r\n href={href}\r\n className={classMap.footerLink}\r\n data-testid={`${testId}-footerLink`}\r\n >\r\n {label}\r\n </LinkComponent>\r\n ))}\r\n {footerVersion && (\r\n <span\r\n className={classMap.footerVersion}\r\n data-testid={`${testId}-footerVersion`}\r\n >\r\n {footerVersion}\r\n </span>\r\n )}\r\n </footer>\r\n )}\r\n </nav>\r\n );\r\n};\r\n\r\nSidebarBase.displayName = \"SidebarBase\";\r\nexport default SidebarBase;\r\n","import React, { useState } from \"react\";\r\nimport SidebarBase from \"../SidebarBase\";\r\nimport \"./Sidebar.scss\";\r\nimport { SidebarLink, SidebarProps } from \"../Sidebar.types\";\r\n\r\nconst classes = {\r\n wrapper: \"sidebar\",\r\n nav: \"sidebar_nav\",\r\n list: \"sidebar_list\",\r\n childList: \"sidebar_child_list\",\r\n item: \"sidebar_item\",\r\n link: \"sidebar_link\",\r\n childLink: \"sidebar_child_link\",\r\n active: \"sidebar_active\",\r\n icon: \"sidebar_icon\",\r\n\r\n footer: \"sidebar_footer\",\r\n footerLink: \"sidebar_footer_link\",\r\n footerVersion: \"sidebar_footer_version\",\r\n\r\n chevron: \"sidebar_chevron\",\r\n chevronOpen: \"sidebar_chevron_open\",\r\n\r\n submenu: \"sidebar_submenu\",\r\n submenuOpen: \"sidebar_submenu_open\",\r\n\r\n outline: \"sidebar_outline\",\r\n\r\n primary: \"sidebar_primary\",\r\n secondary: \"sidebar_secondary\",\r\n tertiary: \"sidebar_tertiary\",\r\n quaternary: \"sidebar_quaternary\",\r\n\r\n success: \"sidebar_success\",\r\n error: \"sidebar_error\",\r\n warning: \"sidebar_warning\",\r\n\r\n clear: \"sidebar_clear\",\r\n\r\n shadowNone: \"sidebar_shadow-None\",\r\n shadowLight: \"sidebar_shadow-Light\",\r\n shadowMedium: \"sidebar_shadow-Medium\",\r\n shadowStrong: \"sidebar_shadow-Strong\",\r\n shadowIntense: \"sidebar_shadow-Intense\",\r\n\r\n roundNone: \"sidebar_round-None\",\r\n roundSmall: \"sidebar_round-Small\",\r\n roundMedium: \"sidebar_round-Medium\",\r\n roundLarge: \"sidebar_round-Large\",\r\n};\r\n\r\nconst normalizePath = (p: string) =>\r\n p.endsWith(\"/\") && p.length > 1 ? p.slice(0, -1) : p;\r\n\r\nconst getInitialPath = () =>\r\n typeof window !== \"undefined\" ? window.location.pathname || \"/\" : \"/\";\r\n\r\nconst isDescendantPath = (parentPath: string, currentPath: string): boolean => {\r\n const parent = normalizePath(parentPath);\r\n const current = normalizePath(currentPath);\r\n\r\n if (parent === \"/\") return current === \"/\";\r\n return current === parent || current.startsWith(`${parent}/`);\r\n};\r\n\r\nconst isActiveRecursive = (\r\n link: SidebarLink,\r\n matcher: (link: SidebarLink) => boolean,\r\n): boolean => {\r\n if (matcher(link)) return true;\r\n return !!link.children?.some((child) => isActiveRecursive(child, matcher));\r\n};\r\n\r\nconst Sidebar: React.FC<SidebarProps> = (props) => {\r\n const [pathname] = useState(getInitialPath);\r\n\r\n const isLinkActive = (link: SidebarLink): boolean => {\r\n if (!link.href) return false;\r\n\r\n if (link.children?.length) {\r\n return isDescendantPath(link.href, pathname);\r\n }\r\n\r\n return normalizePath(link.href) === normalizePath(pathname);\r\n };\r\n\r\n const hasActiveChild = (link: SidebarLink): boolean =>\r\n !!link.children?.some((child) => isActiveRecursive(child, isLinkActive));\r\n\r\n return (\r\n <SidebarBase\r\n {...props}\r\n classMap={classes}\r\n isLinkActive={isLinkActive}\r\n hasActiveChild={hasActiveChild}\r\n />\r\n );\r\n};\r\n\r\nSidebar.displayName = \"Sidebar\";\r\nexport default Sidebar;\r\n"],"names":["getDefaultTheme","getDefaultRounding","getDefaultShadow","useState","useRef","useEffect","_a","useMemo","combineClassNames","capitalize","jsx","jsxs","Fragment","ChevronDownIcon"],"mappings":"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"}
@@ -108,7 +108,7 @@ const SidebarBase = ({
108
108
  id: buttonId,
109
109
  className: combineClassNames(
110
110
  classMap.link,
111
- (isOpen || containsActiveChild) && classMap.active
111
+ (isActive || isOpen || containsActiveChild) && classMap.active
112
112
  ),
113
113
  onClick: () => toggleItem(label),
114
114
  "aria-expanded": isOpen,
@@ -255,6 +255,12 @@ const classes = {
255
255
  };
256
256
  const normalizePath = (p) => p.endsWith("/") && p.length > 1 ? p.slice(0, -1) : p;
257
257
  const getInitialPath = () => typeof window !== "undefined" ? window.location.pathname || "/" : "/";
258
+ const isDescendantPath = (parentPath, currentPath) => {
259
+ const parent = normalizePath(parentPath);
260
+ const current = normalizePath(currentPath);
261
+ if (parent === "/") return current === "/";
262
+ return current === parent || current.startsWith(`${parent}/`);
263
+ };
258
264
  const isActiveRecursive = (link, matcher) => {
259
265
  var _a;
260
266
  if (matcher(link)) return true;
@@ -262,7 +268,14 @@ const isActiveRecursive = (link, matcher) => {
262
268
  };
263
269
  const Sidebar = (props) => {
264
270
  const [pathname] = useState(getInitialPath);
265
- const isLinkActive = (link) => !!link.href && normalizePath(link.href) === normalizePath(pathname);
271
+ const isLinkActive = (link) => {
272
+ var _a;
273
+ if (!link.href) return false;
274
+ if ((_a = link.children) == null ? void 0 : _a.length) {
275
+ return isDescendantPath(link.href, pathname);
276
+ }
277
+ return normalizePath(link.href) === normalizePath(pathname);
278
+ };
266
279
  const hasActiveChild = (link) => {
267
280
  var _a;
268
281
  return !!((_a = link.children) == null ? void 0 : _a.some((child) => isActiveRecursive(child, isLinkActive)));
@@ -281,4 +294,4 @@ Sidebar.displayName = "Sidebar";
281
294
  export {
282
295
  Sidebar as S
283
296
  };
284
- //# sourceMappingURL=Sidebar-DiQvQvqa.js.map
297
+ //# sourceMappingURL=Sidebar-C7y6lVhN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar-C7y6lVhN.js","sources":["../../src/components/Sidebar/SidebarBase.tsx","../../src/components/Sidebar/core/Sidebar.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport { combineClassNames } from \"@/utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\nimport { ChevronDownIcon } from \"@/Icons\";\r\nimport { BaseSidebarProps, SidebarLink } from \"./Sidebar.types\";\r\n\r\nconst SidebarBase: React.FC<BaseSidebarProps> = ({\r\n links,\r\n classMap,\r\n LinkComponent = \"a\",\r\n isLinkActive,\r\n hasActiveChild,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n showFooter = false,\r\n footerLinks,\r\n footerVersion,\r\n outline = false,\r\n className = \"\",\r\n \"data-testid\": testId = \"sidebar\",\r\n ariaLabel = \"Sidebar navigation\",\r\n ...rest\r\n}) => {\r\n const [openItems, setOpenItems] = useState<Record<string, boolean>>({});\r\n\r\n const idsRef = useRef<Record<string, string>>({});\r\n const seqRef = useRef(0);\r\n\r\n const idFor = (label: string) => {\r\n if (!idsRef.current[label]) {\r\n const slug = label\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")\r\n .replace(/[^a-z0-9_-]/g, \"\");\r\n idsRef.current[label] = `${testId}-section-${slug}-${seqRef.current++}`;\r\n }\r\n return idsRef.current[label];\r\n };\r\n\r\n useEffect(() => {\r\n const next: Record<string, boolean> = {};\r\n\r\n const walk = (nodes: SidebarLink[]): boolean => {\r\n for (const node of nodes) {\r\n if (node.children?.length) {\r\n const childIsActive =\r\n hasActiveChild?.(node) ??\r\n node.children.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (!!child.children?.length && walk(child.children)),\r\n );\r\n\r\n if (childIsActive) {\r\n next[node.label] = true;\r\n }\r\n }\r\n }\r\n\r\n return nodes.some(\r\n (node) =>\r\n (isLinkActive?.(node) ?? false) ||\r\n (!!node.children?.length && walk(node.children)),\r\n );\r\n };\r\n\r\n walk(links);\r\n setOpenItems((prev) => ({ ...prev, ...next }));\r\n }, [links, isLinkActive, hasActiveChild]);\r\n\r\n const toggleItem = (key: string) =>\r\n setOpenItems((prev) => ({ ...prev, [key]: !prev[key] }));\r\n\r\n const containerClasses = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.wrapper,\r\n className,\r\n classMap[theme],\r\n classMap[state],\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n outline && classMap.outline,\r\n ),\r\n [classMap, className, theme, state, outline, rounding, shadow],\r\n );\r\n\r\n const renderLinks = (items: SidebarLink[], isChild = false) => (\r\n <ul\r\n className={combineClassNames(\r\n classMap.list,\r\n isChild && classMap.childList,\r\n )}\r\n data-testid={`${testId}-list`}\r\n >\r\n {items.map(({ label, href, children, icon }, idx) => {\r\n const key = `${label}-${idx}`;\r\n const link: SidebarLink = { label, href, children, icon };\r\n\r\n const isActive = isLinkActive?.(link) ?? false;\r\n const containsActiveChild =\r\n hasActiveChild?.(link) ??\r\n !!children?.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (child.children?.length && (hasActiveChild?.(child) ?? false)),\r\n );\r\n\r\n const isOpen = !!openItems[label];\r\n const sectionId = idFor(label);\r\n const buttonId = `${sectionId}-button`;\r\n const panelId = `${sectionId}-panel`;\r\n\r\n return (\r\n <li\r\n key={key}\r\n className={classMap.item}\r\n data-testid={`${testId}-listItem`}\r\n >\r\n {children && children.length > 0 ? (\r\n <>\r\n <button\r\n type=\"button\"\r\n id={buttonId}\r\n className={combineClassNames(\r\n classMap.link,\r\n (isActive || isOpen || containsActiveChild) &&\r\n classMap.active,\r\n )}\r\n onClick={() => toggleItem(label)}\r\n aria-expanded={isOpen}\r\n aria-controls={panelId}\r\n data-testid={`${testId}-expandItemButton`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n <span data-testid={`${testId}-expandItemLabel`}>{label}</span>\r\n <ChevronDownIcon\r\n className={combineClassNames(\r\n classMap.chevron,\r\n isOpen && classMap.chevronOpen,\r\n )}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n data-testid={`${testId}-expandIcon`}\r\n />\r\n </button>\r\n\r\n <div\r\n id={panelId}\r\n className={combineClassNames(\r\n classMap.submenu,\r\n isOpen && classMap.submenuOpen,\r\n )}\r\n role=\"group\"\r\n aria-labelledby={buttonId}\r\n hidden={!isOpen}\r\n data-testid={`${testId}-subMenu`}\r\n >\r\n {renderLinks(children, true)}\r\n </div>\r\n </>\r\n ) : href ? (\r\n <LinkComponent\r\n href={href}\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n isActive && classMap.active,\r\n )}\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-testid={`${testId}-sidebarLink`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </LinkComponent>\r\n ) : (\r\n <span\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n )}\r\n data-testid={`${testId}-sidebarLabel`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n\r\n return (\r\n <nav\r\n className={containerClasses}\r\n aria-label={ariaLabel}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n <div className={classMap.nav}>{renderLinks(links)}</div>\r\n\r\n {showFooter && (\r\n <footer className={classMap.footer} data-testid={`${testId}-footer`}>\r\n {footerLinks?.map(({ label, href }, i) => (\r\n <LinkComponent\r\n key={`${label}-${i}`}\r\n href={href}\r\n className={classMap.footerLink}\r\n data-testid={`${testId}-footerLink`}\r\n >\r\n {label}\r\n </LinkComponent>\r\n ))}\r\n {footerVersion && (\r\n <span\r\n className={classMap.footerVersion}\r\n data-testid={`${testId}-footerVersion`}\r\n >\r\n {footerVersion}\r\n </span>\r\n )}\r\n </footer>\r\n )}\r\n </nav>\r\n );\r\n};\r\n\r\nSidebarBase.displayName = \"SidebarBase\";\r\nexport default SidebarBase;\r\n","import React, { useState } from \"react\";\r\nimport SidebarBase from \"../SidebarBase\";\r\nimport \"./Sidebar.scss\";\r\nimport { SidebarLink, SidebarProps } from \"../Sidebar.types\";\r\n\r\nconst classes = {\r\n wrapper: \"sidebar\",\r\n nav: \"sidebar_nav\",\r\n list: \"sidebar_list\",\r\n childList: \"sidebar_child_list\",\r\n item: \"sidebar_item\",\r\n link: \"sidebar_link\",\r\n childLink: \"sidebar_child_link\",\r\n active: \"sidebar_active\",\r\n icon: \"sidebar_icon\",\r\n\r\n footer: \"sidebar_footer\",\r\n footerLink: \"sidebar_footer_link\",\r\n footerVersion: \"sidebar_footer_version\",\r\n\r\n chevron: \"sidebar_chevron\",\r\n chevronOpen: \"sidebar_chevron_open\",\r\n\r\n submenu: \"sidebar_submenu\",\r\n submenuOpen: \"sidebar_submenu_open\",\r\n\r\n outline: \"sidebar_outline\",\r\n\r\n primary: \"sidebar_primary\",\r\n secondary: \"sidebar_secondary\",\r\n tertiary: \"sidebar_tertiary\",\r\n quaternary: \"sidebar_quaternary\",\r\n\r\n success: \"sidebar_success\",\r\n error: \"sidebar_error\",\r\n warning: \"sidebar_warning\",\r\n\r\n clear: \"sidebar_clear\",\r\n\r\n shadowNone: \"sidebar_shadow-None\",\r\n shadowLight: \"sidebar_shadow-Light\",\r\n shadowMedium: \"sidebar_shadow-Medium\",\r\n shadowStrong: \"sidebar_shadow-Strong\",\r\n shadowIntense: \"sidebar_shadow-Intense\",\r\n\r\n roundNone: \"sidebar_round-None\",\r\n roundSmall: \"sidebar_round-Small\",\r\n roundMedium: \"sidebar_round-Medium\",\r\n roundLarge: \"sidebar_round-Large\",\r\n};\r\n\r\nconst normalizePath = (p: string) =>\r\n p.endsWith(\"/\") && p.length > 1 ? p.slice(0, -1) : p;\r\n\r\nconst getInitialPath = () =>\r\n typeof window !== \"undefined\" ? window.location.pathname || \"/\" : \"/\";\r\n\r\nconst isDescendantPath = (parentPath: string, currentPath: string): boolean => {\r\n const parent = normalizePath(parentPath);\r\n const current = normalizePath(currentPath);\r\n\r\n if (parent === \"/\") return current === \"/\";\r\n return current === parent || current.startsWith(`${parent}/`);\r\n};\r\n\r\nconst isActiveRecursive = (\r\n link: SidebarLink,\r\n matcher: (link: SidebarLink) => boolean,\r\n): boolean => {\r\n if (matcher(link)) return true;\r\n return !!link.children?.some((child) => isActiveRecursive(child, matcher));\r\n};\r\n\r\nconst Sidebar: React.FC<SidebarProps> = (props) => {\r\n const [pathname] = useState(getInitialPath);\r\n\r\n const isLinkActive = (link: SidebarLink): boolean => {\r\n if (!link.href) return false;\r\n\r\n if (link.children?.length) {\r\n return isDescendantPath(link.href, pathname);\r\n }\r\n\r\n return normalizePath(link.href) === normalizePath(pathname);\r\n };\r\n\r\n const hasActiveChild = (link: SidebarLink): boolean =>\r\n !!link.children?.some((child) => isActiveRecursive(child, isLinkActive));\r\n\r\n return (\r\n <SidebarBase\r\n {...props}\r\n classMap={classes}\r\n isLinkActive={isLinkActive}\r\n hasActiveChild={hasActiveChild}\r\n />\r\n );\r\n};\r\n\r\nSidebar.displayName = \"Sidebar\";\r\nexport default Sidebar;\r\n"],"names":["_a"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const Sidebar = require("./Sidebar-DMR5T81x.cjs");
2
+ const Sidebar = require("./Sidebar-BbXkPcQP.cjs");
3
3
  module.exports = Sidebar.Sidebar;
4
4
  //# sourceMappingURL=Sidebar.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { S } from "./Sidebar-DiQvQvqa.js";
1
+ import { S } from "./Sidebar-C7y6lVhN.js";
2
2
  export {
3
3
  S as default
4
4
  };
@@ -53,7 +53,7 @@ const MetricBox = require("./MetricBox-DVo4UUQv.cjs");
53
53
  const EmptyState = require("./EmptyState-P-MSItCX.cjs");
54
54
  const CommandPalette = require("./CommandPalette-Cv79G0W9.cjs");
55
55
  const NotificationCenter = require("./NotificationCenter-DfOOEt9N.cjs");
56
- const Sidebar = require("./Sidebar-DMR5T81x.cjs");
56
+ const Sidebar = require("./Sidebar-BbXkPcQP.cjs");
57
57
  const Card = require("./Card-DRM65kM-.cjs");
58
58
  const Avatar = require("./Avatar-DOg8W9yf.cjs");
59
59
  const ChipGroupBase = React.forwardRef(
@@ -52,7 +52,7 @@ import { M as M4 } from "./MetricBox-CPug-nxo.js";
52
52
  import { E } from "./EmptyState-Cp3ocTQX.js";
53
53
  import { C as C4 } from "./CommandPalette-BcPsaNIk.js";
54
54
  import { N as N2 } from "./NotificationCenter-DLCzWNve.js";
55
- import { S as S7 } from "./Sidebar-DiQvQvqa.js";
55
+ import { S as S7 } from "./Sidebar-C7y6lVhN.js";
56
56
  import { C as C5 } from "./Card-BjLC4t0w.js";
57
57
  import { A as A2 } from "./Avatar-BM8AwOB6.js";
58
58
  const ChipGroupBase = forwardRef(
@@ -110,7 +110,7 @@ const SidebarBase = ({
110
110
  id: buttonId,
111
111
  className: combineClassNames(
112
112
  classMap.link,
113
- (isOpen || containsActiveChild) && classMap.active
113
+ (isActive || isOpen || containsActiveChild) && classMap.active
114
114
  ),
115
115
  onClick: () => toggleItem(label),
116
116
  "aria-expanded": isOpen,
@@ -290,6 +290,12 @@ const styles = {
290
290
  footerVersion
291
291
  };
292
292
  const normalizePath = (p) => p.endsWith("/") && p.length > 1 ? p.slice(0, -1) : p;
293
+ const isDescendantPath = (parentPath, currentPath) => {
294
+ const parent = normalizePath(parentPath);
295
+ const current = normalizePath(currentPath);
296
+ if (parent === "/") return current === "/";
297
+ return current === parent || current.startsWith(`${parent}/`);
298
+ };
293
299
  const isActiveRecursive = (link2, matcher) => {
294
300
  var _a;
295
301
  if (matcher(link2)) return true;
@@ -297,7 +303,14 @@ const isActiveRecursive = (link2, matcher) => {
297
303
  };
298
304
  const Sidebar = ({ links, ...rest }) => {
299
305
  const pathname = navigationExports.usePathname() || "/";
300
- const isLinkActive = (link2) => !!link2.href && normalizePath(link2.href) === normalizePath(pathname);
306
+ const isLinkActive = (link2) => {
307
+ var _a;
308
+ if (!link2.href) return false;
309
+ if ((_a = link2.children) == null ? void 0 : _a.length) {
310
+ return isDescendantPath(link2.href, pathname);
311
+ }
312
+ return normalizePath(link2.href) === normalizePath(pathname);
313
+ };
301
314
  const hasActiveChild = (link2) => {
302
315
  var _a;
303
316
  return !!((_a = link2.children) == null ? void 0 : _a.some((child) => isActiveRecursive(child, isLinkActive)));
@@ -318,4 +331,4 @@ Sidebar.displayName = "Sidebar";
318
331
  export {
319
332
  Sidebar as S
320
333
  };
321
- //# sourceMappingURL=Sidebar-HqR8uzt4.js.map
334
+ //# sourceMappingURL=Sidebar-B9myM8yG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar-B9myM8yG.js","sources":["../../src/components/Sidebar/SidebarBase.tsx","../../src/components/Sidebar/next/Sidebar.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport { combineClassNames } from \"@/utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\nimport { ChevronDownIcon } from \"@/Icons\";\r\nimport { BaseSidebarProps, SidebarLink } from \"./Sidebar.types\";\r\n\r\nconst SidebarBase: React.FC<BaseSidebarProps> = ({\r\n links,\r\n classMap,\r\n LinkComponent = \"a\",\r\n isLinkActive,\r\n hasActiveChild,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n showFooter = false,\r\n footerLinks,\r\n footerVersion,\r\n outline = false,\r\n className = \"\",\r\n \"data-testid\": testId = \"sidebar\",\r\n ariaLabel = \"Sidebar navigation\",\r\n ...rest\r\n}) => {\r\n const [openItems, setOpenItems] = useState<Record<string, boolean>>({});\r\n\r\n const idsRef = useRef<Record<string, string>>({});\r\n const seqRef = useRef(0);\r\n\r\n const idFor = (label: string) => {\r\n if (!idsRef.current[label]) {\r\n const slug = label\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")\r\n .replace(/[^a-z0-9_-]/g, \"\");\r\n idsRef.current[label] = `${testId}-section-${slug}-${seqRef.current++}`;\r\n }\r\n return idsRef.current[label];\r\n };\r\n\r\n useEffect(() => {\r\n const next: Record<string, boolean> = {};\r\n\r\n const walk = (nodes: SidebarLink[]): boolean => {\r\n for (const node of nodes) {\r\n if (node.children?.length) {\r\n const childIsActive =\r\n hasActiveChild?.(node) ??\r\n node.children.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (!!child.children?.length && walk(child.children)),\r\n );\r\n\r\n if (childIsActive) {\r\n next[node.label] = true;\r\n }\r\n }\r\n }\r\n\r\n return nodes.some(\r\n (node) =>\r\n (isLinkActive?.(node) ?? false) ||\r\n (!!node.children?.length && walk(node.children)),\r\n );\r\n };\r\n\r\n walk(links);\r\n setOpenItems((prev) => ({ ...prev, ...next }));\r\n }, [links, isLinkActive, hasActiveChild]);\r\n\r\n const toggleItem = (key: string) =>\r\n setOpenItems((prev) => ({ ...prev, [key]: !prev[key] }));\r\n\r\n const containerClasses = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.wrapper,\r\n className,\r\n classMap[theme],\r\n classMap[state],\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n outline && classMap.outline,\r\n ),\r\n [classMap, className, theme, state, outline, rounding, shadow],\r\n );\r\n\r\n const renderLinks = (items: SidebarLink[], isChild = false) => (\r\n <ul\r\n className={combineClassNames(\r\n classMap.list,\r\n isChild && classMap.childList,\r\n )}\r\n data-testid={`${testId}-list`}\r\n >\r\n {items.map(({ label, href, children, icon }, idx) => {\r\n const key = `${label}-${idx}`;\r\n const link: SidebarLink = { label, href, children, icon };\r\n\r\n const isActive = isLinkActive?.(link) ?? false;\r\n const containsActiveChild =\r\n hasActiveChild?.(link) ??\r\n !!children?.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (child.children?.length && (hasActiveChild?.(child) ?? false)),\r\n );\r\n\r\n const isOpen = !!openItems[label];\r\n const sectionId = idFor(label);\r\n const buttonId = `${sectionId}-button`;\r\n const panelId = `${sectionId}-panel`;\r\n\r\n return (\r\n <li\r\n key={key}\r\n className={classMap.item}\r\n data-testid={`${testId}-listItem`}\r\n >\r\n {children && children.length > 0 ? (\r\n <>\r\n <button\r\n type=\"button\"\r\n id={buttonId}\r\n className={combineClassNames(\r\n classMap.link,\r\n (isActive || isOpen || containsActiveChild) &&\r\n classMap.active,\r\n )}\r\n onClick={() => toggleItem(label)}\r\n aria-expanded={isOpen}\r\n aria-controls={panelId}\r\n data-testid={`${testId}-expandItemButton`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n <span data-testid={`${testId}-expandItemLabel`}>{label}</span>\r\n <ChevronDownIcon\r\n className={combineClassNames(\r\n classMap.chevron,\r\n isOpen && classMap.chevronOpen,\r\n )}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n data-testid={`${testId}-expandIcon`}\r\n />\r\n </button>\r\n\r\n <div\r\n id={panelId}\r\n className={combineClassNames(\r\n classMap.submenu,\r\n isOpen && classMap.submenuOpen,\r\n )}\r\n role=\"group\"\r\n aria-labelledby={buttonId}\r\n hidden={!isOpen}\r\n data-testid={`${testId}-subMenu`}\r\n >\r\n {renderLinks(children, true)}\r\n </div>\r\n </>\r\n ) : href ? (\r\n <LinkComponent\r\n href={href}\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n isActive && classMap.active,\r\n )}\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-testid={`${testId}-sidebarLink`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </LinkComponent>\r\n ) : (\r\n <span\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n )}\r\n data-testid={`${testId}-sidebarLabel`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n\r\n return (\r\n <nav\r\n className={containerClasses}\r\n aria-label={ariaLabel}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n <div className={classMap.nav}>{renderLinks(links)}</div>\r\n\r\n {showFooter && (\r\n <footer className={classMap.footer} data-testid={`${testId}-footer`}>\r\n {footerLinks?.map(({ label, href }, i) => (\r\n <LinkComponent\r\n key={`${label}-${i}`}\r\n href={href}\r\n className={classMap.footerLink}\r\n data-testid={`${testId}-footerLink`}\r\n >\r\n {label}\r\n </LinkComponent>\r\n ))}\r\n {footerVersion && (\r\n <span\r\n className={classMap.footerVersion}\r\n data-testid={`${testId}-footerVersion`}\r\n >\r\n {footerVersion}\r\n </span>\r\n )}\r\n </footer>\r\n )}\r\n </nav>\r\n );\r\n};\r\n\r\nSidebarBase.displayName = \"SidebarBase\";\r\nexport default SidebarBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport Link from \"next/link\";\r\nimport { usePathname } from \"next/navigation\";\r\nimport SidebarBase from \"../SidebarBase\";\r\nimport styles from \"./Sidebar.module.scss\";\r\nimport { SidebarLink, SidebarProps } from \"../Sidebar.types\";\r\n\r\nconst normalizePath = (p: string) =>\r\n p.endsWith(\"/\") && p.length > 1 ? p.slice(0, -1) : p;\r\n\r\nconst isDescendantPath = (parentPath: string, currentPath: string): boolean => {\r\n const parent = normalizePath(parentPath);\r\n const current = normalizePath(currentPath);\r\n\r\n if (parent === \"/\") return current === \"/\";\r\n return current === parent || current.startsWith(`${parent}/`);\r\n};\r\n\r\nconst isActiveRecursive = (\r\n link: SidebarLink,\r\n matcher: (link: SidebarLink) => boolean,\r\n): boolean => {\r\n if (matcher(link)) return true;\r\n return !!link.children?.some((child) => isActiveRecursive(child, matcher));\r\n};\r\n\r\nconst Sidebar: React.FC<SidebarProps> = ({ links, ...rest }) => {\r\n const pathname = usePathname() || \"/\";\r\n\r\n const isLinkActive = (link: SidebarLink): boolean => {\r\n if (!link.href) return false;\r\n\r\n if (link.children?.length) {\r\n return isDescendantPath(link.href, pathname);\r\n }\r\n\r\n return normalizePath(link.href) === normalizePath(pathname);\r\n };\r\n\r\n const hasActiveChild = (link: SidebarLink): boolean =>\r\n !!link.children?.some((child) => isActiveRecursive(child, isLinkActive));\r\n\r\n return (\r\n <SidebarBase\r\n links={links}\r\n classMap={styles}\r\n LinkComponent={Link}\r\n isLinkActive={isLinkActive}\r\n hasActiveChild={hasActiveChild}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nSidebar.displayName = \"Sidebar\";\r\nexport default Sidebar;\r\n"],"names":["footerVersion","outline","_a","icon","link","usePathname"],"mappings":"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"}
@@ -111,7 +111,7 @@ const SidebarBase = ({
111
111
  id: buttonId,
112
112
  className: classNames.combineClassNames(
113
113
  classMap.link,
114
- (isOpen || containsActiveChild) && classMap.active
114
+ (isActive || isOpen || containsActiveChild) && classMap.active
115
115
  ),
116
116
  onClick: () => toggleItem(label),
117
117
  "aria-expanded": isOpen,
@@ -291,6 +291,12 @@ const styles = {
291
291
  footerVersion
292
292
  };
293
293
  const normalizePath = (p) => p.endsWith("/") && p.length > 1 ? p.slice(0, -1) : p;
294
+ const isDescendantPath = (parentPath, currentPath) => {
295
+ const parent = normalizePath(parentPath);
296
+ const current = normalizePath(currentPath);
297
+ if (parent === "/") return current === "/";
298
+ return current === parent || current.startsWith(`${parent}/`);
299
+ };
294
300
  const isActiveRecursive = (link2, matcher) => {
295
301
  var _a;
296
302
  if (matcher(link2)) return true;
@@ -298,7 +304,14 @@ const isActiveRecursive = (link2, matcher) => {
298
304
  };
299
305
  const Sidebar = ({ links, ...rest }) => {
300
306
  const pathname = navigation.navigationExports.usePathname() || "/";
301
- const isLinkActive = (link2) => !!link2.href && normalizePath(link2.href) === normalizePath(pathname);
307
+ const isLinkActive = (link2) => {
308
+ var _a;
309
+ if (!link2.href) return false;
310
+ if ((_a = link2.children) == null ? void 0 : _a.length) {
311
+ return isDescendantPath(link2.href, pathname);
312
+ }
313
+ return normalizePath(link2.href) === normalizePath(pathname);
314
+ };
302
315
  const hasActiveChild = (link2) => {
303
316
  var _a;
304
317
  return !!((_a = link2.children) == null ? void 0 : _a.some((child) => isActiveRecursive(child, isLinkActive)));
@@ -317,4 +330,4 @@ const Sidebar = ({ links, ...rest }) => {
317
330
  };
318
331
  Sidebar.displayName = "Sidebar";
319
332
  exports.Sidebar = Sidebar;
320
- //# sourceMappingURL=Sidebar-DbzIKbwL.cjs.map
333
+ //# sourceMappingURL=Sidebar-CNKyWz1w.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar-CNKyWz1w.cjs","sources":["../../src/components/Sidebar/SidebarBase.tsx","../../src/components/Sidebar/next/Sidebar.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useEffect } from \"react\";\r\nimport { combineClassNames } from \"@/utils/classNames\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\nimport { ChevronDownIcon } from \"@/Icons\";\r\nimport { BaseSidebarProps, SidebarLink } from \"./Sidebar.types\";\r\n\r\nconst SidebarBase: React.FC<BaseSidebarProps> = ({\r\n links,\r\n classMap,\r\n LinkComponent = \"a\",\r\n isLinkActive,\r\n hasActiveChild,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n showFooter = false,\r\n footerLinks,\r\n footerVersion,\r\n outline = false,\r\n className = \"\",\r\n \"data-testid\": testId = \"sidebar\",\r\n ariaLabel = \"Sidebar navigation\",\r\n ...rest\r\n}) => {\r\n const [openItems, setOpenItems] = useState<Record<string, boolean>>({});\r\n\r\n const idsRef = useRef<Record<string, string>>({});\r\n const seqRef = useRef(0);\r\n\r\n const idFor = (label: string) => {\r\n if (!idsRef.current[label]) {\r\n const slug = label\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\")\r\n .replace(/[^a-z0-9_-]/g, \"\");\r\n idsRef.current[label] = `${testId}-section-${slug}-${seqRef.current++}`;\r\n }\r\n return idsRef.current[label];\r\n };\r\n\r\n useEffect(() => {\r\n const next: Record<string, boolean> = {};\r\n\r\n const walk = (nodes: SidebarLink[]): boolean => {\r\n for (const node of nodes) {\r\n if (node.children?.length) {\r\n const childIsActive =\r\n hasActiveChild?.(node) ??\r\n node.children.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (!!child.children?.length && walk(child.children)),\r\n );\r\n\r\n if (childIsActive) {\r\n next[node.label] = true;\r\n }\r\n }\r\n }\r\n\r\n return nodes.some(\r\n (node) =>\r\n (isLinkActive?.(node) ?? false) ||\r\n (!!node.children?.length && walk(node.children)),\r\n );\r\n };\r\n\r\n walk(links);\r\n setOpenItems((prev) => ({ ...prev, ...next }));\r\n }, [links, isLinkActive, hasActiveChild]);\r\n\r\n const toggleItem = (key: string) =>\r\n setOpenItems((prev) => ({ ...prev, [key]: !prev[key] }));\r\n\r\n const containerClasses = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.wrapper,\r\n className,\r\n classMap[theme],\r\n classMap[state],\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n outline && classMap.outline,\r\n ),\r\n [classMap, className, theme, state, outline, rounding, shadow],\r\n );\r\n\r\n const renderLinks = (items: SidebarLink[], isChild = false) => (\r\n <ul\r\n className={combineClassNames(\r\n classMap.list,\r\n isChild && classMap.childList,\r\n )}\r\n data-testid={`${testId}-list`}\r\n >\r\n {items.map(({ label, href, children, icon }, idx) => {\r\n const key = `${label}-${idx}`;\r\n const link: SidebarLink = { label, href, children, icon };\r\n\r\n const isActive = isLinkActive?.(link) ?? false;\r\n const containsActiveChild =\r\n hasActiveChild?.(link) ??\r\n !!children?.some(\r\n (child) =>\r\n (isLinkActive?.(child) ?? false) ||\r\n (child.children?.length && (hasActiveChild?.(child) ?? false)),\r\n );\r\n\r\n const isOpen = !!openItems[label];\r\n const sectionId = idFor(label);\r\n const buttonId = `${sectionId}-button`;\r\n const panelId = `${sectionId}-panel`;\r\n\r\n return (\r\n <li\r\n key={key}\r\n className={classMap.item}\r\n data-testid={`${testId}-listItem`}\r\n >\r\n {children && children.length > 0 ? (\r\n <>\r\n <button\r\n type=\"button\"\r\n id={buttonId}\r\n className={combineClassNames(\r\n classMap.link,\r\n (isActive || isOpen || containsActiveChild) &&\r\n classMap.active,\r\n )}\r\n onClick={() => toggleItem(label)}\r\n aria-expanded={isOpen}\r\n aria-controls={panelId}\r\n data-testid={`${testId}-expandItemButton`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n <span data-testid={`${testId}-expandItemLabel`}>{label}</span>\r\n <ChevronDownIcon\r\n className={combineClassNames(\r\n classMap.chevron,\r\n isOpen && classMap.chevronOpen,\r\n )}\r\n aria-hidden=\"true\"\r\n focusable={false}\r\n data-testid={`${testId}-expandIcon`}\r\n />\r\n </button>\r\n\r\n <div\r\n id={panelId}\r\n className={combineClassNames(\r\n classMap.submenu,\r\n isOpen && classMap.submenuOpen,\r\n )}\r\n role=\"group\"\r\n aria-labelledby={buttonId}\r\n hidden={!isOpen}\r\n data-testid={`${testId}-subMenu`}\r\n >\r\n {renderLinks(children, true)}\r\n </div>\r\n </>\r\n ) : href ? (\r\n <LinkComponent\r\n href={href}\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n isActive && classMap.active,\r\n )}\r\n aria-current={isActive ? \"page\" : undefined}\r\n data-testid={`${testId}-sidebarLink`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </LinkComponent>\r\n ) : (\r\n <span\r\n className={combineClassNames(\r\n classMap.link,\r\n isChild && classMap.childLink,\r\n )}\r\n data-testid={`${testId}-sidebarLabel`}\r\n >\r\n {icon && <span className={classMap.icon}>{icon}</span>}\r\n {label}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n );\r\n\r\n return (\r\n <nav\r\n className={containerClasses}\r\n aria-label={ariaLabel}\r\n data-testid={testId}\r\n {...rest}\r\n >\r\n <div className={classMap.nav}>{renderLinks(links)}</div>\r\n\r\n {showFooter && (\r\n <footer className={classMap.footer} data-testid={`${testId}-footer`}>\r\n {footerLinks?.map(({ label, href }, i) => (\r\n <LinkComponent\r\n key={`${label}-${i}`}\r\n href={href}\r\n className={classMap.footerLink}\r\n data-testid={`${testId}-footerLink`}\r\n >\r\n {label}\r\n </LinkComponent>\r\n ))}\r\n {footerVersion && (\r\n <span\r\n className={classMap.footerVersion}\r\n data-testid={`${testId}-footerVersion`}\r\n >\r\n {footerVersion}\r\n </span>\r\n )}\r\n </footer>\r\n )}\r\n </nav>\r\n );\r\n};\r\n\r\nSidebarBase.displayName = \"SidebarBase\";\r\nexport default SidebarBase;\r\n","\"use client\";\r\n\r\nimport React from \"react\";\r\nimport Link from \"next/link\";\r\nimport { usePathname } from \"next/navigation\";\r\nimport SidebarBase from \"../SidebarBase\";\r\nimport styles from \"./Sidebar.module.scss\";\r\nimport { SidebarLink, SidebarProps } from \"../Sidebar.types\";\r\n\r\nconst normalizePath = (p: string) =>\r\n p.endsWith(\"/\") && p.length > 1 ? p.slice(0, -1) : p;\r\n\r\nconst isDescendantPath = (parentPath: string, currentPath: string): boolean => {\r\n const parent = normalizePath(parentPath);\r\n const current = normalizePath(currentPath);\r\n\r\n if (parent === \"/\") return current === \"/\";\r\n return current === parent || current.startsWith(`${parent}/`);\r\n};\r\n\r\nconst isActiveRecursive = (\r\n link: SidebarLink,\r\n matcher: (link: SidebarLink) => boolean,\r\n): boolean => {\r\n if (matcher(link)) return true;\r\n return !!link.children?.some((child) => isActiveRecursive(child, matcher));\r\n};\r\n\r\nconst Sidebar: React.FC<SidebarProps> = ({ links, ...rest }) => {\r\n const pathname = usePathname() || \"/\";\r\n\r\n const isLinkActive = (link: SidebarLink): boolean => {\r\n if (!link.href) return false;\r\n\r\n if (link.children?.length) {\r\n return isDescendantPath(link.href, pathname);\r\n }\r\n\r\n return normalizePath(link.href) === normalizePath(pathname);\r\n };\r\n\r\n const hasActiveChild = (link: SidebarLink): boolean =>\r\n !!link.children?.some((child) => isActiveRecursive(child, isLinkActive));\r\n\r\n return (\r\n <SidebarBase\r\n links={links}\r\n classMap={styles}\r\n LinkComponent={Link}\r\n isLinkActive={isLinkActive}\r\n hasActiveChild={hasActiveChild}\r\n {...rest}\r\n />\r\n );\r\n};\r\n\r\nSidebar.displayName = \"Sidebar\";\r\nexport default Sidebar;\r\n"],"names":["getDefaultTheme","getDefaultRounding","getDefaultShadow","footerVersion","outline","useState","useRef","useEffect","_a","useMemo","combineClassNames","capitalize","jsx","icon","link","jsxs","Fragment","ChevronDownIcon","usePathname","Link"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const Sidebar = require("./Sidebar-DbzIKbwL.cjs");
2
+ const Sidebar = require("./Sidebar-CNKyWz1w.cjs");
3
3
  module.exports = Sidebar.Sidebar;
4
4
  //# sourceMappingURL=Sidebar.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { S } from "./Sidebar-HqR8uzt4.js";
1
+ import { S } from "./Sidebar-B9myM8yG.js";
2
2
  export {
3
3
  S as default
4
4
  };
@@ -53,7 +53,7 @@ const MetricBox = require("./MetricBox-B2-l8cVO.cjs");
53
53
  const EmptyState = require("./EmptyState-DEXnMGP_.cjs");
54
54
  const CommandPalette = require("./CommandPalette-B-qhSIcP.cjs");
55
55
  const NotificationCenter = require("./NotificationCenter-COZtpamq.cjs");
56
- const Sidebar = require("./Sidebar-DbzIKbwL.cjs");
56
+ const Sidebar = require("./Sidebar-CNKyWz1w.cjs");
57
57
  const Card = require("./Card-WoaRWnDq.cjs");
58
58
  const Avatar = require("./Avatar-aNqEuazN.cjs");
59
59
  const ChipGroupBase = React.forwardRef(
@@ -52,7 +52,7 @@ import { M as M4 } from "./MetricBox-CKKlOQGM.js";
52
52
  import { E } from "./EmptyState-C9ZcLwdE.js";
53
53
  import { C as C4 } from "./CommandPalette-CLe5dspX.js";
54
54
  import { N as N2 } from "./NotificationCenter-Bo2NcO55.js";
55
- import { S as S7 } from "./Sidebar-HqR8uzt4.js";
55
+ import { S as S7 } from "./Sidebar-B9myM8yG.js";
56
56
  import { C as C5 } from "./Card-B_J1YknX.js";
57
57
  import { A as A2 } from "./Avatar-D3l1T_H7.js";
58
58
  const ChipGroupBase = forwardRef(