@askrjs/themes 0.0.6 → 0.0.8

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 (73) hide show
  1. package/THEMING.md +5 -1
  2. package/dist/components/_internal/box-layout.js.map +1 -1
  3. package/dist/components/_internal/classes.js.map +1 -1
  4. package/dist/components/_internal/jsx.js.map +1 -1
  5. package/dist/components/_internal/layout.js.map +1 -1
  6. package/dist/components/_internal/merge-props.js.map +1 -1
  7. package/dist/components/_internal/pathname.js.map +1 -1
  8. package/dist/components/_internal/style.js.map +1 -1
  9. package/dist/components/alert/alert.js.map +1 -1
  10. package/dist/components/aspect-ratio/aspect-ratio.js.map +1 -1
  11. package/dist/components/badge/badge.js.map +1 -1
  12. package/dist/components/block/block.js.map +1 -1
  13. package/dist/components/box/box.js.map +1 -1
  14. package/dist/components/breadcrumb/breadcrumb.a11y.js.map +1 -1
  15. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  16. package/dist/components/button-group/button-group.js.map +1 -1
  17. package/dist/components/card/card.js.map +1 -1
  18. package/dist/components/close/close.js.map +1 -1
  19. package/dist/components/container/container.js.map +1 -1
  20. package/dist/components/empty-state/empty-state.js.map +1 -1
  21. package/dist/components/field/field.js.map +1 -1
  22. package/dist/components/flex/flex.js.map +1 -1
  23. package/dist/components/header/header.a11y.js.map +1 -1
  24. package/dist/components/header/header.js.map +1 -1
  25. package/dist/components/inline/index.js.map +1 -1
  26. package/dist/components/input-group/input-group.js.map +1 -1
  27. package/dist/components/list-group/list-group.js.map +1 -1
  28. package/dist/components/nav/nav.js.map +1 -1
  29. package/dist/components/navbar/navbar-panel.js +10 -16
  30. package/dist/components/navbar/navbar-panel.js.map +1 -1
  31. package/dist/components/navbar/navbar.context.js.map +1 -1
  32. package/dist/components/navbar/navbar.js.map +1 -1
  33. package/dist/components/navbar/navbar.render.js.map +1 -1
  34. package/dist/components/navbar/navbar.shared.js.map +1 -1
  35. package/dist/components/overlays/dropdown-content.js.map +1 -1
  36. package/dist/components/pagination/pagination.js.map +1 -1
  37. package/dist/components/section/section.js.map +1 -1
  38. package/dist/components/separator/separator.a11y.js.map +1 -1
  39. package/dist/components/separator/separator.js.map +1 -1
  40. package/dist/components/shell/shell-panel.js.map +1 -1
  41. package/dist/components/shell/shell-responsive.js +13 -5
  42. package/dist/components/shell/shell-responsive.js.map +1 -1
  43. package/dist/components/shell/shell.a11y.js.map +1 -1
  44. package/dist/components/shell/shell.js.map +1 -1
  45. package/dist/components/sidebar/sidebar-panel.js +14 -24
  46. package/dist/components/sidebar/sidebar-panel.js.map +1 -1
  47. package/dist/components/sidebar/sidebar-toggle.js.map +1 -1
  48. package/dist/components/sidebar/sidebar.context.js.map +1 -1
  49. package/dist/components/sidebar/sidebar.js.map +1 -1
  50. package/dist/components/sidebar/sidebar.shared.js.map +1 -1
  51. package/dist/components/skeleton/skeleton.js.map +1 -1
  52. package/dist/components/spacer/spacer.js.map +1 -1
  53. package/dist/components/spinner/spinner.js.map +1 -1
  54. package/dist/components/stack/stack.js.map +1 -1
  55. package/dist/components/theme/theme.js +20 -5
  56. package/dist/components/theme/theme.js.map +1 -1
  57. package/dist/controls.d.ts +1 -1
  58. package/dist/feedback.d.ts +1 -1
  59. package/dist/layouts.d.ts +1 -1
  60. package/dist/navs.d.ts +1 -1
  61. package/dist/shells.d.ts +1 -1
  62. package/dist/surfaces.d.ts +1 -1
  63. package/dist/themes/default/index.css +152 -136
  64. package/package.json +14 -12
  65. package/src/components/navbar/navbar-panel.tsx +11 -16
  66. package/src/components/shell/shell-responsive.tsx +57 -23
  67. package/src/components/sidebar/sidebar-panel.tsx +15 -24
  68. package/src/components/theme/theme.tsx +29 -4
  69. package/src/themes/default/index.css +1 -1
  70. package/src/themes/default/styles/actions/button.css +16 -0
  71. package/src/themes/default/styles/base/utilities.css +34 -5
  72. package/templates/theme/index.css +1 -1
  73. package/templates/theme/styles/actions/button.css +16 -0
@@ -1 +1 @@
1
- {"version":3,"file":"nav.js","names":[],"sources":["../../../src/components/nav/nav.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { currentRoute, navigate } from \"@askrjs/askr/router\";\nimport { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport { resolvePathname } from \"../_internal/pathname\";\nimport type {\n NavAsChildProps,\n NavDivProps,\n NavItemAsChildProps,\n NavItemProps,\n NavItemVariant,\n NavLinkProps,\n NavListProps,\n NavNavProps,\n NavProps,\n} from \"./nav.types\";\n\nfunction navItemClasses(variant: NavItemVariant, className: unknown): string | undefined {\n return classes(\n \"nav-item\",\n \"navbar-item\",\n variant === \"icon\" && \"nav-item-icon\",\n variant === \"icon\" && \"navbar-item-icon\",\n className,\n );\n}\n\nfunction normalizePathname(pathname: string): string {\n return pathname.endsWith(\"/\") && pathname !== \"/\" ? pathname.slice(0, -1) : pathname;\n}\n\nfunction getCurrentPathname(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n return normalizePathname(window.location.pathname || \"/\");\n}\n\nfunction getReactiveCurrentPathname(): string | null {\n try {\n return normalizePathname(currentRoute().path || \"/\");\n } catch {\n return getCurrentPathname();\n }\n}\n\nfunction shouldHandleClientNavigation(\n event: MouseEvent,\n target: string | undefined,\n targetPathname: string | null,\n): boolean {\n if (targetPathname === null || target) {\n return false;\n }\n\n return (\n !event.defaultPrevented &&\n (event.button ?? 0) === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey\n );\n}\n\nfunction isActiveNavLink(\n currentPathname: string,\n targetPathname: string,\n match: NavLinkProps[\"match\"] = \"prefix\",\n): boolean {\n if (targetPathname === \"/\") {\n return currentPathname === \"/\";\n }\n\n if (match === \"exact\") {\n return currentPathname === targetPathname;\n }\n\n return currentPathname === targetPathname || currentPathname.startsWith(`${targetPathname}/`);\n}\n\nexport function Nav(props: NavNavProps): JSX.Element;\nexport function Nav(props: NavDivProps): JSX.Element;\nexport function Nav(props: NavListProps): JSX.Element;\nexport function Nav(props: NavAsChildProps): JSX.Element;\nexport function Nav(props: NavProps): JSX.Element {\n const as = \"as\" in props ? props.as : \"nav\";\n const className = \"class\" in props ? props.class : undefined;\n const {\n asChild,\n children,\n orientation = \"horizontal\",\n variant = \"default\",\n ref,\n ...rest\n } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"nav\", className),\n \"data-slot\": \"nav\",\n \"data-orientation\": orientation,\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n if (as === \"div\") {\n return <div {...finalProps}>{children}</div>;\n }\n\n if (as === \"ul\") {\n return <ul {...finalProps}>{children}</ul>;\n }\n\n return <nav {...finalProps}>{children}</nav>;\n}\n\nexport function NavItem(props: NavItemProps): JSX.Element;\nexport function NavItem(props: NavItemAsChildProps): JSX.Element;\nexport function NavItem(props: NavItemProps | NavItemAsChildProps): JSX.Element {\n const {\n asChild,\n children,\n ref,\n class: className,\n match: _match,\n variant = \"default\",\n ...rest\n } = props as (NavItemProps | NavItemAsChildProps) & { match?: unknown };\n void _match;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: navItemClasses(variant, className),\n \"data-slot\": \"nav-item\",\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <a {...finalProps}>{children}</a>;\n}\n\nexport function NavLink(props: NavLinkProps): JSX.Element {\n const {\n children,\n href,\n onClick,\n ref,\n class: className,\n match = \"prefix\",\n target,\n variant = \"default\",\n ...rest\n } = props as NavLinkProps & { onClick?: (event: MouseEvent) => void };\n const currentPathname = getReactiveCurrentPathname();\n const targetPathname = resolvePathname(href);\n const isActive =\n currentPathname !== null &&\n targetPathname !== null &&\n isActiveNavLink(currentPathname, targetPathname, match);\n\n const linkProps = mergeProps(rest, {\n href,\n target,\n ref,\n class: navItemClasses(variant, className),\n \"data-slot\": \"nav-link\",\n \"data-variant\": variant,\n });\n\n const finalProps = isActive\n ? mergeProps(\n {\n \"aria-current\": \"page\",\n \"data-active\": \"true\",\n },\n linkProps,\n )\n : linkProps;\n\n const handleClick = (event: MouseEvent) => {\n onClick?.(event);\n\n if (!shouldHandleClientNavigation(event, target, targetPathname)) {\n return;\n }\n\n event.preventDefault();\n navigate(href);\n };\n\n return (\n <a {...finalProps} onClick={handleClick}>\n {children}\n </a>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"nav.js","names":[],"sources":["../../../src/components/nav/nav.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { currentRoute, navigate } from \"@askrjs/askr/router\";\nimport { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport { resolvePathname } from \"../_internal/pathname\";\nimport type {\n NavAsChildProps,\n NavDivProps,\n NavItemAsChildProps,\n NavItemProps,\n NavItemVariant,\n NavLinkProps,\n NavListProps,\n NavNavProps,\n NavProps,\n} from \"./nav.types\";\n\nfunction navItemClasses(variant: NavItemVariant, className: unknown): string | undefined {\n return classes(\n \"nav-item\",\n \"navbar-item\",\n variant === \"icon\" && \"nav-item-icon\",\n variant === \"icon\" && \"navbar-item-icon\",\n className,\n );\n}\n\nfunction normalizePathname(pathname: string): string {\n return pathname.endsWith(\"/\") && pathname !== \"/\" ? pathname.slice(0, -1) : pathname;\n}\n\nfunction getCurrentPathname(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n return normalizePathname(window.location.pathname || \"/\");\n}\n\nfunction getReactiveCurrentPathname(): string | null {\n try {\n return normalizePathname(currentRoute().path || \"/\");\n } catch {\n return getCurrentPathname();\n }\n}\n\nfunction shouldHandleClientNavigation(\n event: MouseEvent,\n target: string | undefined,\n targetPathname: string | null,\n): boolean {\n if (targetPathname === null || target) {\n return false;\n }\n\n return (\n !event.defaultPrevented &&\n (event.button ?? 0) === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey\n );\n}\n\nfunction isActiveNavLink(\n currentPathname: string,\n targetPathname: string,\n match: NavLinkProps[\"match\"] = \"prefix\",\n): boolean {\n if (targetPathname === \"/\") {\n return currentPathname === \"/\";\n }\n\n if (match === \"exact\") {\n return currentPathname === targetPathname;\n }\n\n return currentPathname === targetPathname || currentPathname.startsWith(`${targetPathname}/`);\n}\n\nexport function Nav(props: NavNavProps): JSX.Element;\nexport function Nav(props: NavDivProps): JSX.Element;\nexport function Nav(props: NavListProps): JSX.Element;\nexport function Nav(props: NavAsChildProps): JSX.Element;\nexport function Nav(props: NavProps): JSX.Element {\n const as = \"as\" in props ? props.as : \"nav\";\n const className = \"class\" in props ? props.class : undefined;\n const {\n asChild,\n children,\n orientation = \"horizontal\",\n variant = \"default\",\n ref,\n ...rest\n } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"nav\", className),\n \"data-slot\": \"nav\",\n \"data-orientation\": orientation,\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n if (as === \"div\") {\n return <div {...finalProps}>{children}</div>;\n }\n\n if (as === \"ul\") {\n return <ul {...finalProps}>{children}</ul>;\n }\n\n return <nav {...finalProps}>{children}</nav>;\n}\n\nexport function NavItem(props: NavItemProps): JSX.Element;\nexport function NavItem(props: NavItemAsChildProps): JSX.Element;\nexport function NavItem(props: NavItemProps | NavItemAsChildProps): JSX.Element {\n const {\n asChild,\n children,\n ref,\n class: className,\n match: _match,\n variant = \"default\",\n ...rest\n } = props as (NavItemProps | NavItemAsChildProps) & { match?: unknown };\n void _match;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: navItemClasses(variant, className),\n \"data-slot\": \"nav-item\",\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <a {...finalProps}>{children}</a>;\n}\n\nexport function NavLink(props: NavLinkProps): JSX.Element {\n const {\n children,\n href,\n onClick,\n ref,\n class: className,\n match = \"prefix\",\n target,\n variant = \"default\",\n ...rest\n } = props as NavLinkProps & { onClick?: (event: MouseEvent) => void };\n const currentPathname = getReactiveCurrentPathname();\n const targetPathname = resolvePathname(href);\n const isActive =\n currentPathname !== null &&\n targetPathname !== null &&\n isActiveNavLink(currentPathname, targetPathname, match);\n\n const linkProps = mergeProps(rest, {\n href,\n target,\n ref,\n class: navItemClasses(variant, className),\n \"data-slot\": \"nav-link\",\n \"data-variant\": variant,\n });\n\n const finalProps = isActive\n ? mergeProps(\n {\n \"aria-current\": \"page\",\n \"data-active\": \"true\",\n },\n linkProps,\n )\n : linkProps;\n\n const handleClick = (event: MouseEvent) => {\n onClick?.(event);\n\n if (!shouldHandleClientNavigation(event, target, targetPathname)) {\n return;\n }\n\n event.preventDefault();\n navigate(href);\n };\n\n return (\n <a {...finalProps} onClick={handleClick}>\n {children}\n </a>\n );\n}\n"],"mappings":"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"}
@@ -2,29 +2,23 @@ import { renderShellPanel } from "../shell/shell-panel.js";
2
2
  import { NavbarResponsiveContext } from "./navbar.context.js";
3
3
  import { readContext } from "@askrjs/askr";
4
4
  //#region src/components/navbar/navbar-panel.tsx
5
+ const DEFAULT_NAVBAR_RESPONSIVE_CONTEXT = {
6
+ active: () => false,
7
+ collapseLabel: () => "Menu",
8
+ closePanel: () => void 0,
9
+ panelId: () => void 0,
10
+ panelOpen: () => false,
11
+ togglePanel: () => void 0
12
+ };
5
13
  function NavbarPanel(props) {
6
14
  const { active: activeProp, brand, children, class: className, collapseLabel: collapseLabelProp, onClose, open: openProp, panelId: panelIdProp, ref, ...rest } = props;
7
15
  const responsive = activeProp === void 0 || collapseLabelProp === void 0 || onClose === void 0 || openProp === void 0 || panelIdProp === void 0 ? (() => {
8
16
  try {
9
17
  return readContext(NavbarResponsiveContext);
10
18
  } catch {
11
- return {
12
- active: () => false,
13
- collapseLabel: () => "Menu",
14
- closePanel: () => void 0,
15
- panelId: () => void 0,
16
- panelOpen: () => false,
17
- togglePanel: () => void 0
18
- };
19
+ return DEFAULT_NAVBAR_RESPONSIVE_CONTEXT;
19
20
  }
20
- })() : {
21
- active: () => false,
22
- collapseLabel: () => "Menu",
23
- closePanel: () => void 0,
24
- panelId: () => void 0,
25
- panelOpen: () => false,
26
- togglePanel: () => void 0
27
- };
21
+ })() : DEFAULT_NAVBAR_RESPONSIVE_CONTEXT;
28
22
  const active = activeProp ?? responsive.active();
29
23
  const open = openProp ?? responsive.panelOpen();
30
24
  const panelId = panelIdProp ?? responsive.panelId();
@@ -1 +1 @@
1
- {"version":3,"file":"navbar-panel.js","names":[],"sources":["../../../src/components/navbar/navbar-panel.tsx"],"sourcesContent":["import { readContext } from \"@askrjs/askr\";\nimport { renderShellPanel } from \"../shell/shell-panel\";\nimport { NavbarResponsiveContext } from \"./navbar.context\";\nimport type { NavbarPanelProps } from \"./navbar.types\";\n\nexport function NavbarPanel(props: NavbarPanelProps): JSX.Element | null {\n const {\n active: activeProp,\n brand,\n children,\n class: className,\n collapseLabel: collapseLabelProp,\n onClose,\n open: openProp,\n panelId: panelIdProp,\n ref,\n ...rest\n } = props;\n const needsResponsiveContext =\n activeProp === undefined ||\n collapseLabelProp === undefined ||\n onClose === undefined ||\n openProp === undefined ||\n panelIdProp === undefined;\n const responsive = needsResponsiveContext\n ? (() => {\n try {\n return readContext(NavbarResponsiveContext);\n } catch {\n return {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n };\n }\n })()\n : {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n };\n const active = activeProp ?? responsive.active();\n const open = openProp ?? responsive.panelOpen();\n const panelId = panelIdProp ?? responsive.panelId();\n const collapseLabel = collapseLabelProp ?? responsive.collapseLabel();\n const closePanel = onClose ?? responsive.closePanel;\n\n return renderShellPanel({\n active,\n brand,\n children,\n className,\n collapseLabel,\n onClose: closePanel,\n open,\n panelId,\n prefix: \"navbar\",\n ref,\n rest,\n });\n}\n"],"mappings":";;;;AAKA,SAAgB,YAAY,OAA6C;CACvE,MAAM,EACJ,QAAQ,YACR,OACA,UACA,OAAO,WACP,eAAe,mBACf,SACA,MAAM,UACN,SAAS,aACT,KACA,GAAG,SACD;CAOJ,MAAM,aALJ,eAAe,KAAA,KACf,sBAAsB,KAAA,KACtB,YAAY,KAAA,KACZ,aAAa,KAAA,KACb,gBAAgB,KAAA,WAEP;EACL,IAAI;GACF,OAAO,YAAY,wBAAwB;UACrC;GACN,OAAO;IACL,cAAc;IACd,qBAAqB;IACrB,kBAAkB,KAAA;IAClB,eAAe,KAAA;IACf,iBAAiB;IACjB,mBAAmB,KAAA;IACpB;;KAED,GACJ;EACE,cAAc;EACd,qBAAqB;EACrB,kBAAkB,KAAA;EAClB,eAAe,KAAA;EACf,iBAAiB;EACjB,mBAAmB,KAAA;EACpB;CACL,MAAM,SAAS,cAAc,WAAW,QAAQ;CAChD,MAAM,OAAO,YAAY,WAAW,WAAW;CAC/C,MAAM,UAAU,eAAe,WAAW,SAAS;CAInD,OAAO,iBAAiB;EACtB;EACA;EACA;EACA;EACA,eARoB,qBAAqB,WAAW,eAAe;EASnE,SARiB,WAAW,WAAW;EASvC;EACA;EACA,QAAQ;EACR;EACA;EACD,CAAC"}
1
+ {"version":3,"file":"navbar-panel.js","names":[],"sources":["../../../src/components/navbar/navbar-panel.tsx"],"sourcesContent":["import { readContext } from \"@askrjs/askr\";\nimport { renderShellPanel } from \"../shell/shell-panel\";\nimport { NavbarResponsiveContext } from \"./navbar.context\";\nimport type { NavbarPanelProps } from \"./navbar.types\";\n\nconst DEFAULT_NAVBAR_RESPONSIVE_CONTEXT = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n};\n\nexport function NavbarPanel(props: NavbarPanelProps): JSX.Element | null {\n const {\n active: activeProp,\n brand,\n children,\n class: className,\n collapseLabel: collapseLabelProp,\n onClose,\n open: openProp,\n panelId: panelIdProp,\n ref,\n ...rest\n } = props;\n const needsResponsiveContext =\n activeProp === undefined ||\n collapseLabelProp === undefined ||\n onClose === undefined ||\n openProp === undefined ||\n panelIdProp === undefined;\n const responsive = needsResponsiveContext\n ? (() => {\n try {\n return readContext(NavbarResponsiveContext);\n } catch {\n return DEFAULT_NAVBAR_RESPONSIVE_CONTEXT;\n }\n })()\n : DEFAULT_NAVBAR_RESPONSIVE_CONTEXT;\n const active = activeProp ?? responsive.active();\n const open = openProp ?? responsive.panelOpen();\n const panelId = panelIdProp ?? responsive.panelId();\n const collapseLabel = collapseLabelProp ?? responsive.collapseLabel();\n const closePanel = onClose ?? responsive.closePanel;\n\n return renderShellPanel({\n active,\n brand,\n children,\n className,\n collapseLabel,\n onClose: closePanel,\n open,\n panelId,\n prefix: \"navbar\",\n ref,\n rest,\n });\n}\n"],"mappings":";;;;AAKA,MAAM,oCAAoC;CACxC,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;AACrB;AAEA,SAAgB,YAAY,OAA6C;CACvE,MAAM,EACJ,QAAQ,YACR,OACA,UACA,OAAO,WACP,eAAe,mBACf,SACA,MAAM,UACN,SAAS,aACT,KACA,GAAG,SACD;CAOJ,MAAM,aALJ,eAAe,KAAA,KACf,sBAAsB,KAAA,KACtB,YAAY,KAAA,KACZ,aAAa,KAAA,KACb,gBAAgB,KAAA,WAEP;EACL,IAAI;GACF,OAAO,YAAY,uBAAuB;EAC5C,QAAQ;GACN,OAAO;EACT;CACF,EAAA,CAAG,IACH;CACJ,MAAM,SAAS,cAAc,WAAW,OAAO;CAC/C,MAAM,OAAO,YAAY,WAAW,UAAU;CAC9C,MAAM,UAAU,eAAe,WAAW,QAAQ;CAIlD,OAAO,iBAAiB;EACtB;EACA;EACA;EACA;EACA,eARoB,qBAAqB,WAAW,cAAc;EASlE,SARiB,WAAW,WAAW;EASvC;EACA;EACA,QAAQ;EACR;EACA;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.context.js","names":[],"sources":["../../../src/components/navbar/navbar.context.ts"],"sourcesContent":["import { defineContext } from \"@askrjs/askr\";\n\nexport type NavbarResponsiveContextValue = {\n active: () => boolean;\n collapseLabel: () => string;\n closePanel: () => void;\n panelId: () => string | undefined;\n panelOpen: () => boolean;\n togglePanel: () => void;\n};\n\nconst defaultResponsiveContext: NavbarResponsiveContextValue = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n};\n\nexport const NavbarResponsiveContext =\n defineContext<NavbarResponsiveContextValue>(defaultResponsiveContext);\n"],"mappings":";AAoBA,MAAa,0BACX,cAA4C;CAT5C,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;CAIyB,CAAyB"}
1
+ {"version":3,"file":"navbar.context.js","names":[],"sources":["../../../src/components/navbar/navbar.context.ts"],"sourcesContent":["import { defineContext } from \"@askrjs/askr\";\n\nexport type NavbarResponsiveContextValue = {\n active: () => boolean;\n collapseLabel: () => string;\n closePanel: () => void;\n panelId: () => string | undefined;\n panelOpen: () => boolean;\n togglePanel: () => void;\n};\n\nconst defaultResponsiveContext: NavbarResponsiveContextValue = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n};\n\nexport const NavbarResponsiveContext =\n defineContext<NavbarResponsiveContextValue>(defaultResponsiveContext);\n"],"mappings":";AAoBA,MAAa,0BACX,cAA4C;CAT5C,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;AAIyB,CAAwB"}
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.js","names":[],"sources":["../../../src/components/navbar/navbar.tsx"],"sourcesContent":["import { state } from \"@askrjs/askr\";\nimport { classes } from \"../_internal/classes\";\nimport { isJsxElement, toChildArray } from \"../_internal/jsx\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport {\n renderKeyedShellChildren,\n ShellPanelWatcher,\n ShellResponsiveWatcher,\n} from \"../shell/shell-responsive\";\nimport { renderNavbarCollapseContents } from \"./navbar.render\";\nimport { NavbarPanel } from \"./navbar-panel\";\nimport { NavbarResponsiveContext } from \"./navbar.context\";\nimport { isNavbarCollapsed, resolveNavGroupAlign } from \"./navbar.shared\";\nimport type { NavBrandProps, NavGroupProps, NavToggleProps, NavbarProps } from \"./navbar.types\";\n\n/**\n * Extracts the first NavBrand child to display in the mobile panel.\n * NavBrand should be the first child of Navbar for it to appear in the mobile menu.\n */\nfunction findNavbarBrand(children: unknown): unknown {\n return toChildArray(children).find((child) => isJsxElement(child) && child.type === NavBrand);\n}\n\nfunction withoutNavbarBrand(children: unknown): unknown[] {\n return toChildArray(children).filter(\n (child) => !(isJsxElement(child) && child.type === NavBrand),\n );\n}\n\n/**\n * Responsive mobile-first navbar component.\n *\n * Composition: Navbar should contain NavBrand (extracted to mobile panel), NavGroup items with optional align,\n * and NavLink children. Brand must be first child to appear in mobile menu.\n *\n * @example\n * <Navbar breakpoint=\"md\" aria-label=\"Main navigation\">\n * <NavBrand><a href=\"/\">Logo</a></NavBrand>\n * <NavGroup align=\"center\">\n * <NavLink href=\"/docs\">Docs</NavLink>\n * </NavGroup>\n * <NavGroup align=\"end\">\n * <NavLink href=\"/settings\">Settings</NavLink>\n * </NavGroup>\n * </Navbar>\n */\nexport function Navbar(props: NavbarProps): JSX.Element {\n const {\n children,\n breakpoint,\n collapseIcon,\n collapseIconPlacement = \"start\",\n collapseLabel,\n ref,\n class: className,\n id,\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const effectiveCollapseLabel = collapseLabel ?? \"Menu\";\n const responsiveChildren = toChildArray(children);\n const desktopChildren = renderKeyedShellChildren(responsiveChildren, \"navbar-desktop\");\n const panelChildren = renderKeyedShellChildren(\n withoutNavbarBrand(responsiveChildren),\n \"navbar-panel\",\n );\n // Extract brand to display in mobile panel header\n const responsiveCollapsedState =\n breakpoint !== undefined ? state(isNavbarCollapsed(breakpoint)) : undefined;\n const mobileMenuState = state(false);\n const mobileMenuOpen = mobileMenuState();\n const panelId = typeof id === \"string\" ? `${id}-panel` : undefined;\n const responsiveCollapsed = breakpoint !== undefined ? responsiveCollapsedState?.() : false;\n const panelOpen = Boolean(responsiveCollapsed && mobileMenuOpen);\n const closePanel = () => mobileMenuState.set(false);\n const closePanelOnNavActivation = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Element)) {\n return;\n }\n\n if (target.closest('a[data-slot=\"nav-link\"], a[data-slot=\"nav-item\"], a.navbar-item')) {\n closePanel();\n }\n };\n const togglePanel = () => {\n mobileMenuState.set(!mobileMenuState());\n };\n const contextValue = {\n active: () => breakpoint !== undefined,\n collapseLabel: () => effectiveCollapseLabel,\n closePanel,\n panelId: () => panelId,\n panelOpen: () => Boolean(responsiveCollapsedState?.() && mobileMenuOpen),\n togglePanel,\n };\n const panelBrand = findNavbarBrand(responsiveChildren);\n const finalProps = mergeProps(rest, {\n \"aria-label\": ariaLabel,\n ref,\n class: classes(\"navbar\", className),\n \"data-collapse-below\": breakpoint,\n \"data-responsive-collapsed\": responsiveCollapsed ? \"true\" : \"false\",\n \"data-slot\": \"navbar\",\n });\n\n return (\n <NavbarResponsiveContext.Scope value={contextValue}>\n <nav {...finalProps}>\n {breakpoint !== undefined ? (\n <div class=\"navbar-mobile\" data-slot=\"navbar-mobile\">\n <NavToggle\n active={breakpoint !== undefined}\n aria-controls={panelId}\n aria-label={effectiveCollapseLabel}\n icon={collapseIcon}\n iconPlacement={collapseIconPlacement}\n label={effectiveCollapseLabel}\n onToggle={togglePanel}\n open={panelOpen}\n panelId={panelId}\n />\n </div>\n ) : null}\n\n <div class=\"navbar-shell\" data-slot=\"navbar-shell\">\n {desktopChildren}\n </div>\n\n {breakpoint !== undefined ? (\n <NavbarPanel\n active={breakpoint !== undefined}\n brand={panelBrand}\n collapseLabel={effectiveCollapseLabel}\n onClose={closePanel}\n onClick={closePanelOnNavActivation}\n open={panelOpen}\n panelId={panelId}\n >\n {panelChildren}\n </NavbarPanel>\n ) : null}\n\n {responsiveCollapsed && mobileMenuOpen ? (\n <button\n aria-label={`Close ${effectiveCollapseLabel}`}\n class=\"navbar-backdrop\"\n data-slot=\"navbar-backdrop\"\n data-state=\"open\"\n tabIndex={-1}\n type=\"button\"\n onClick={closePanel}\n />\n ) : null}\n\n {breakpoint !== undefined ? (\n <ShellResponsiveWatcher\n breakpoint={breakpoint}\n isCollapsed={isNavbarCollapsed}\n onResize={(nextCollapsed) => {\n responsiveCollapsedState?.set(nextCollapsed);\n }}\n onExpand={() => {\n mobileMenuState?.set(false);\n }}\n />\n ) : null}\n\n <ShellPanelWatcher\n contentId={panelId}\n open={panelOpen}\n panelSlot=\"navbar-panel\"\n onClose={closePanel}\n />\n </nav>\n </NavbarResponsiveContext.Scope>\n );\n}\n\n/**\n * Menu toggle button for responsive navbar collapse.\n * Auto-renders when navbar is responsive (collapseBelow set).\n */\nexport function NavToggle(props: NavToggleProps): JSX.Element | null {\n const {\n children,\n class: className,\n active,\n icon,\n iconPlacement = \"start\",\n label = \"Menu\",\n ref,\n onToggle,\n open,\n panelId,\n ...rest\n } = props;\n\n if (active === false) {\n return null;\n }\n\n const isOpen = open === true;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"navbar-toggle\", className),\n \"aria-controls\": panelId,\n \"aria-expanded\": isOpen ? \"true\" : \"false\",\n \"aria-label\": label,\n \"data-slot\": \"navbar-toggle\",\n \"data-state\": isOpen ? \"open\" : \"closed\",\n type: \"button\",\n onClick: () => onToggle?.(),\n });\n\n return (\n <button {...finalProps}>\n {children ?? renderNavbarCollapseContents(label, icon, iconPlacement)}\n </button>\n );\n}\n\n/**\n * Brand/logo container displayed in navbar and mobile panel header.\n */\nexport function NavBrand(props: NavBrandProps): JSX.Element {\n const { children, ref, class: className, ...rest } = props;\n\n return (\n <div {...rest} ref={ref} class={classes(\"navbar-brand\", className)} data-slot=\"navbar-brand\">\n {children}\n </div>\n );\n}\n\n/**\n * Navigation group for organizing related nav items.\n *\n * @param align - Alignment: \"start\" (default), \"center\", or \"end\". Using align=\"end\" automatically right-aligns the group.\n * @param label - Optional accessible label for grouped items.\n *\n * @example\n * <NavGroup align=\"center\">\n * <NavLink href=\"/docs\">Docs</NavLink>\n * </NavGroup>\n */\nexport function NavGroup(props: NavGroupProps): JSX.Element {\n const { children, id, ref, class: className, label, ...rest } = props;\n const rawAlign = (rest as Record<string, unknown>)[\"data-align\"];\n const align =\n props.align ??\n (rawAlign === \"start\" || rawAlign === \"center\" || rawAlign === \"end\"\n ? (rawAlign as NavGroupProps[\"align\"])\n : undefined);\n const hasLabel = label !== undefined && label !== null;\n const labelId = hasLabel && id ? `${id}-label` : undefined;\n const accessibleLabel = typeof label === \"string\" ? label : undefined;\n\n return (\n <div\n {...rest}\n id={id}\n ref={ref}\n class={classes(\"navbar-group\", className)}\n aria-label={labelId ? undefined : accessibleLabel}\n aria-labelledby={labelId}\n role={hasLabel ? \"group\" : rest.role}\n data-align={resolveNavGroupAlign(align)}\n data-has-label={hasLabel ? \"true\" : undefined}\n data-slot=\"navbar-group\"\n >\n {hasLabel ? (\n <>\n <div id={labelId} class=\"navbar-group-label\" data-slot=\"navbar-group-label\">\n {label}\n </div>\n <div class=\"navbar-group-body\" data-slot=\"navbar-group-body\">\n {children}\n </div>\n </>\n ) : (\n children\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"navbar.js","names":[],"sources":["../../../src/components/navbar/navbar.tsx"],"sourcesContent":["import { state } from \"@askrjs/askr\";\nimport { classes } from \"../_internal/classes\";\nimport { isJsxElement, toChildArray } from \"../_internal/jsx\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport {\n renderKeyedShellChildren,\n ShellPanelWatcher,\n ShellResponsiveWatcher,\n} from \"../shell/shell-responsive\";\nimport { renderNavbarCollapseContents } from \"./navbar.render\";\nimport { NavbarPanel } from \"./navbar-panel\";\nimport { NavbarResponsiveContext } from \"./navbar.context\";\nimport { isNavbarCollapsed, resolveNavGroupAlign } from \"./navbar.shared\";\nimport type { NavBrandProps, NavGroupProps, NavToggleProps, NavbarProps } from \"./navbar.types\";\n\n/**\n * Extracts the first NavBrand child to display in the mobile panel.\n * NavBrand should be the first child of Navbar for it to appear in the mobile menu.\n */\nfunction findNavbarBrand(children: unknown): unknown {\n return toChildArray(children).find((child) => isJsxElement(child) && child.type === NavBrand);\n}\n\nfunction withoutNavbarBrand(children: unknown): unknown[] {\n return toChildArray(children).filter(\n (child) => !(isJsxElement(child) && child.type === NavBrand),\n );\n}\n\n/**\n * Responsive mobile-first navbar component.\n *\n * Composition: Navbar should contain NavBrand (extracted to mobile panel), NavGroup items with optional align,\n * and NavLink children. Brand must be first child to appear in mobile menu.\n *\n * @example\n * <Navbar breakpoint=\"md\" aria-label=\"Main navigation\">\n * <NavBrand><a href=\"/\">Logo</a></NavBrand>\n * <NavGroup align=\"center\">\n * <NavLink href=\"/docs\">Docs</NavLink>\n * </NavGroup>\n * <NavGroup align=\"end\">\n * <NavLink href=\"/settings\">Settings</NavLink>\n * </NavGroup>\n * </Navbar>\n */\nexport function Navbar(props: NavbarProps): JSX.Element {\n const {\n children,\n breakpoint,\n collapseIcon,\n collapseIconPlacement = \"start\",\n collapseLabel,\n ref,\n class: className,\n id,\n \"aria-label\": ariaLabel,\n ...rest\n } = props;\n const effectiveCollapseLabel = collapseLabel ?? \"Menu\";\n const responsiveChildren = toChildArray(children);\n const desktopChildren = renderKeyedShellChildren(responsiveChildren, \"navbar-desktop\");\n const panelChildren = renderKeyedShellChildren(\n withoutNavbarBrand(responsiveChildren),\n \"navbar-panel\",\n );\n // Extract brand to display in mobile panel header\n const responsiveCollapsedState =\n breakpoint !== undefined ? state(isNavbarCollapsed(breakpoint)) : undefined;\n const mobileMenuState = state(false);\n const mobileMenuOpen = mobileMenuState();\n const panelId = typeof id === \"string\" ? `${id}-panel` : undefined;\n const responsiveCollapsed = breakpoint !== undefined ? responsiveCollapsedState?.() : false;\n const panelOpen = Boolean(responsiveCollapsed && mobileMenuOpen);\n const closePanel = () => mobileMenuState.set(false);\n const closePanelOnNavActivation = (event: MouseEvent) => {\n const target = event.target;\n\n if (!(target instanceof Element)) {\n return;\n }\n\n if (target.closest('a[data-slot=\"nav-link\"], a[data-slot=\"nav-item\"], a.navbar-item')) {\n closePanel();\n }\n };\n const togglePanel = () => {\n mobileMenuState.set(!mobileMenuState());\n };\n const contextValue = {\n active: () => breakpoint !== undefined,\n collapseLabel: () => effectiveCollapseLabel,\n closePanel,\n panelId: () => panelId,\n panelOpen: () => Boolean(responsiveCollapsedState?.() && mobileMenuOpen),\n togglePanel,\n };\n const panelBrand = findNavbarBrand(responsiveChildren);\n const finalProps = mergeProps(rest, {\n \"aria-label\": ariaLabel,\n ref,\n class: classes(\"navbar\", className),\n \"data-collapse-below\": breakpoint,\n \"data-responsive-collapsed\": responsiveCollapsed ? \"true\" : \"false\",\n \"data-slot\": \"navbar\",\n });\n\n return (\n <NavbarResponsiveContext.Scope value={contextValue}>\n <nav {...finalProps}>\n {breakpoint !== undefined ? (\n <div class=\"navbar-mobile\" data-slot=\"navbar-mobile\">\n <NavToggle\n active={breakpoint !== undefined}\n aria-controls={panelId}\n aria-label={effectiveCollapseLabel}\n icon={collapseIcon}\n iconPlacement={collapseIconPlacement}\n label={effectiveCollapseLabel}\n onToggle={togglePanel}\n open={panelOpen}\n panelId={panelId}\n />\n </div>\n ) : null}\n\n <div class=\"navbar-shell\" data-slot=\"navbar-shell\">\n {desktopChildren}\n </div>\n\n {breakpoint !== undefined ? (\n <NavbarPanel\n active={breakpoint !== undefined}\n brand={panelBrand}\n collapseLabel={effectiveCollapseLabel}\n onClose={closePanel}\n onClick={closePanelOnNavActivation}\n open={panelOpen}\n panelId={panelId}\n >\n {panelChildren}\n </NavbarPanel>\n ) : null}\n\n {responsiveCollapsed && mobileMenuOpen ? (\n <button\n aria-label={`Close ${effectiveCollapseLabel}`}\n class=\"navbar-backdrop\"\n data-slot=\"navbar-backdrop\"\n data-state=\"open\"\n tabIndex={-1}\n type=\"button\"\n onClick={closePanel}\n />\n ) : null}\n\n {breakpoint !== undefined ? (\n <ShellResponsiveWatcher\n breakpoint={breakpoint}\n isCollapsed={isNavbarCollapsed}\n onResize={(nextCollapsed) => {\n responsiveCollapsedState?.set(nextCollapsed);\n }}\n onExpand={() => {\n mobileMenuState?.set(false);\n }}\n />\n ) : null}\n\n <ShellPanelWatcher\n contentId={panelId}\n open={panelOpen}\n panelSlot=\"navbar-panel\"\n onClose={closePanel}\n />\n </nav>\n </NavbarResponsiveContext.Scope>\n );\n}\n\n/**\n * Menu toggle button for responsive navbar collapse.\n * Auto-renders when navbar is responsive (collapseBelow set).\n */\nexport function NavToggle(props: NavToggleProps): JSX.Element | null {\n const {\n children,\n class: className,\n active,\n icon,\n iconPlacement = \"start\",\n label = \"Menu\",\n ref,\n onToggle,\n open,\n panelId,\n ...rest\n } = props;\n\n if (active === false) {\n return null;\n }\n\n const isOpen = open === true;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"navbar-toggle\", className),\n \"aria-controls\": panelId,\n \"aria-expanded\": isOpen ? \"true\" : \"false\",\n \"aria-label\": label,\n \"data-slot\": \"navbar-toggle\",\n \"data-state\": isOpen ? \"open\" : \"closed\",\n type: \"button\",\n onClick: () => onToggle?.(),\n });\n\n return (\n <button {...finalProps}>\n {children ?? renderNavbarCollapseContents(label, icon, iconPlacement)}\n </button>\n );\n}\n\n/**\n * Brand/logo container displayed in navbar and mobile panel header.\n */\nexport function NavBrand(props: NavBrandProps): JSX.Element {\n const { children, ref, class: className, ...rest } = props;\n\n return (\n <div {...rest} ref={ref} class={classes(\"navbar-brand\", className)} data-slot=\"navbar-brand\">\n {children}\n </div>\n );\n}\n\n/**\n * Navigation group for organizing related nav items.\n *\n * @param align - Alignment: \"start\" (default), \"center\", or \"end\". Using align=\"end\" automatically right-aligns the group.\n * @param label - Optional accessible label for grouped items.\n *\n * @example\n * <NavGroup align=\"center\">\n * <NavLink href=\"/docs\">Docs</NavLink>\n * </NavGroup>\n */\nexport function NavGroup(props: NavGroupProps): JSX.Element {\n const { children, id, ref, class: className, label, ...rest } = props;\n const rawAlign = (rest as Record<string, unknown>)[\"data-align\"];\n const align =\n props.align ??\n (rawAlign === \"start\" || rawAlign === \"center\" || rawAlign === \"end\"\n ? (rawAlign as NavGroupProps[\"align\"])\n : undefined);\n const hasLabel = label !== undefined && label !== null;\n const labelId = hasLabel && id ? `${id}-label` : undefined;\n const accessibleLabel = typeof label === \"string\" ? label : undefined;\n\n return (\n <div\n {...rest}\n id={id}\n ref={ref}\n class={classes(\"navbar-group\", className)}\n aria-label={labelId ? undefined : accessibleLabel}\n aria-labelledby={labelId}\n role={hasLabel ? \"group\" : rest.role}\n data-align={resolveNavGroupAlign(align)}\n data-has-label={hasLabel ? \"true\" : undefined}\n data-slot=\"navbar-group\"\n >\n {hasLabel ? (\n <>\n <div id={labelId} class=\"navbar-group-label\" data-slot=\"navbar-group-label\">\n {label}\n </div>\n <div class=\"navbar-group-body\" data-slot=\"navbar-group-body\">\n {children}\n </div>\n </>\n ) : (\n children\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.render.js","names":[],"sources":["../../../src/components/navbar/navbar.render.tsx"],"sourcesContent":["import type { CollapseIconPlacement } from \"../shell/shell-nav.types\";\n\nexport function renderNavbarCollapseContents(\n collapseLabel: string,\n collapseIcon: unknown,\n collapseIconPlacement: CollapseIconPlacement,\n): unknown {\n const icon = (\n <span data-slot=\"navbar-toggle-icon\" aria-hidden=\"true\">\n {collapseIcon ?? (\n <span class=\"navbar-toggle-glyph\" data-slot=\"navbar-toggle-glyph\">\n <span />\n <span />\n <span />\n </span>\n )}\n </span>\n );\n const label = <span data-slot=\"navbar-toggle-label\">{collapseLabel}</span>;\n\n return collapseIconPlacement === \"end\" ? (\n <>\n {label}\n {icon}\n </>\n ) : (\n <>\n {icon}\n {label}\n </>\n );\n}\n"],"mappings":";;AAEA,SAAgB,6BACd,eACA,cACA,uBACS;CACT,MAAM,OACJ,oBAAC,QAAD;EAAM,aAAU;EAAqB,eAAY;YAC9C,gBACC,qBAAC,QAAD;GAAM,OAAM;GAAsB,aAAU;aAA5C;IACE,oBAAC,QAAD,EAAQ,CAAA;IACR,oBAAC,QAAD,EAAQ,CAAA;IACR,oBAAC,QAAD,EAAQ,CAAA;IACH;;EAEJ,CAAA;CAET,MAAM,QAAQ,oBAAC,QAAD;EAAM,aAAU;YAAuB;EAAqB,CAAA;CAE1E,OAAO,0BAA0B,QAC/B,qBAAA,UAAA,EAAA,UAAA,CACG,OACA,KACA,EAAA,CAAA,GAEH,qBAAA,UAAA,EAAA,UAAA,CACG,MACA,MACA,EAAA,CAAA"}
1
+ {"version":3,"file":"navbar.render.js","names":[],"sources":["../../../src/components/navbar/navbar.render.tsx"],"sourcesContent":["import type { CollapseIconPlacement } from \"../shell/shell-nav.types\";\n\nexport function renderNavbarCollapseContents(\n collapseLabel: string,\n collapseIcon: unknown,\n collapseIconPlacement: CollapseIconPlacement,\n): unknown {\n const icon = (\n <span data-slot=\"navbar-toggle-icon\" aria-hidden=\"true\">\n {collapseIcon ?? (\n <span class=\"navbar-toggle-glyph\" data-slot=\"navbar-toggle-glyph\">\n <span />\n <span />\n <span />\n </span>\n )}\n </span>\n );\n const label = <span data-slot=\"navbar-toggle-label\">{collapseLabel}</span>;\n\n return collapseIconPlacement === \"end\" ? (\n <>\n {label}\n {icon}\n </>\n ) : (\n <>\n {icon}\n {label}\n </>\n );\n}\n"],"mappings":";;AAEA,SAAgB,6BACd,eACA,cACA,uBACS;CACT,MAAM,OACJ,oBAAC,QAAD;EAAM,aAAU;EAAqB,eAAY;YAC9C,gBACC,qBAAC,QAAD;GAAM,OAAM;GAAsB,aAAU;aAA5C;IACE,oBAAC,QAAD,CAAO,CAAA;IACP,oBAAC,QAAD,CAAO,CAAA;IACP,oBAAC,QAAD,CAAO,CAAA;GACH;;CAEJ,CAAA;CAER,MAAM,QAAQ,oBAAC,QAAD;EAAM,aAAU;YAAuB;CAAoB,CAAA;CAEzE,OAAO,0BAA0B,QAC/B,qBAAA,UAAA,EAAA,UAAA,CACG,OACA,IACD,EAAA,CAAA,IAEF,qBAAA,UAAA,EAAA,UAAA,CACG,MACA,KACD,EAAA,CAAA;AAEN"}
@@ -1 +1 @@
1
- {"version":3,"file":"navbar.shared.js","names":[],"sources":["../../../src/components/navbar/navbar.shared.ts"],"sourcesContent":["import type { CollapseBreakpoint } from \"../shell/shell-nav.types\";\nimport type { NavGroupAlign } from \"./navbar.types\";\n\nexport const NAVBAR_COLLAPSE_BREAKPOINTS: Record<CollapseBreakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n};\n\nexport function resolveNavGroupAlign(align: NavGroupAlign | undefined): string | undefined {\n return align === \"start\" ? undefined : align;\n}\n\nexport function isNavbarCollapsed(collapseBelow: CollapseBreakpoint): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n return window.innerWidth < NAVBAR_COLLAPSE_BREAKPOINTS[collapseBelow];\n}\n"],"mappings":";AAGA,MAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACL;AAED,SAAgB,qBAAqB,OAAsD;CACzF,OAAO,UAAU,UAAU,KAAA,IAAY;;AAGzC,SAAgB,kBAAkB,eAA4C;CAC5E,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OAAO,OAAO,aAAa,4BAA4B"}
1
+ {"version":3,"file":"navbar.shared.js","names":[],"sources":["../../../src/components/navbar/navbar.shared.ts"],"sourcesContent":["import type { CollapseBreakpoint } from \"../shell/shell-nav.types\";\nimport type { NavGroupAlign } from \"./navbar.types\";\n\nexport const NAVBAR_COLLAPSE_BREAKPOINTS: Record<CollapseBreakpoint, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n};\n\nexport function resolveNavGroupAlign(align: NavGroupAlign | undefined): string | undefined {\n return align === \"start\" ? undefined : align;\n}\n\nexport function isNavbarCollapsed(collapseBelow: CollapseBreakpoint): boolean {\n if (typeof window === \"undefined\") {\n return false;\n }\n\n return window.innerWidth < NAVBAR_COLLAPSE_BREAKPOINTS[collapseBelow];\n}\n"],"mappings":";AAGA,MAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,qBAAqB,OAAsD;CACzF,OAAO,UAAU,UAAU,KAAA,IAAY;AACzC;AAEA,SAAgB,kBAAkB,eAA4C;CAC5E,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,OAAO,OAAO,aAAa,4BAA4B;AACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-content.js","names":["DropdownContent","UiDropdownContent"],"sources":["../../../src/components/overlays/dropdown-content.tsx"],"sourcesContent":["import { DropdownContent as UiDropdownContent } from \"@askrjs/ui\";\nimport type { DropdownContentAsChildProps, DropdownContentProps } from \"@askrjs/ui\";\n\ntype DropdownContentBodyProps = {\n render: () => unknown;\n};\n\nfunction DropdownContentBody(props: DropdownContentBodyProps): JSX.Element {\n return <>{props.render()}</>;\n}\n\nexport function DropdownContent(props: DropdownContentProps): JSX.Element | null;\nexport function DropdownContent(props: DropdownContentAsChildProps): JSX.Element | null;\nexport function DropdownContent(\n props: DropdownContentProps | DropdownContentAsChildProps,\n): JSX.Element | null {\n if (\"asChild\" in props && props.asChild) {\n return <UiDropdownContent {...props} />;\n }\n\n const { children, ...rest } = props as DropdownContentProps;\n\n return (\n <UiDropdownContent {...rest}>\n <DropdownContentBody render={() => children} />\n </UiDropdownContent>\n );\n}\n"],"mappings":";;;AAOA,SAAS,oBAAoB,OAA8C;CACzE,OAAO,oBAAA,UAAA,EAAA,UAAG,MAAM,QAAQ,EAAI,CAAA;;AAK9B,SAAgBA,kBACd,OACoB;CACpB,IAAI,aAAa,SAAS,MAAM,SAC9B,OAAO,oBAACC,iBAAD,EAAmB,GAAI,OAAS,CAAA;CAGzC,MAAM,EAAE,UAAU,GAAG,SAAS;CAE9B,OACE,oBAACA,iBAAD;EAAmB,GAAI;YACrB,oBAAC,qBAAD,EAAqB,cAAc,UAAY,CAAA;EAC7B,CAAA"}
1
+ {"version":3,"file":"dropdown-content.js","names":["DropdownContent","UiDropdownContent"],"sources":["../../../src/components/overlays/dropdown-content.tsx"],"sourcesContent":["import { DropdownContent as UiDropdownContent } from \"@askrjs/ui\";\nimport type { DropdownContentAsChildProps, DropdownContentProps } from \"@askrjs/ui\";\n\ntype DropdownContentBodyProps = {\n render: () => unknown;\n};\n\nfunction DropdownContentBody(props: DropdownContentBodyProps): JSX.Element {\n return <>{props.render()}</>;\n}\n\nexport function DropdownContent(props: DropdownContentProps): JSX.Element | null;\nexport function DropdownContent(props: DropdownContentAsChildProps): JSX.Element | null;\nexport function DropdownContent(\n props: DropdownContentProps | DropdownContentAsChildProps,\n): JSX.Element | null {\n if (\"asChild\" in props && props.asChild) {\n return <UiDropdownContent {...props} />;\n }\n\n const { children, ...rest } = props as DropdownContentProps;\n\n return (\n <UiDropdownContent {...rest}>\n <DropdownContentBody render={() => children} />\n </UiDropdownContent>\n );\n}\n"],"mappings":";;;AAOA,SAAS,oBAAoB,OAA8C;CACzE,OAAO,oBAAA,UAAA,EAAA,UAAG,MAAM,OAAO,EAAI,CAAA;AAC7B;AAIA,SAAgBA,kBACd,OACoB;CACpB,IAAI,aAAa,SAAS,MAAM,SAC9B,OAAO,oBAACC,iBAAD,EAAmB,GAAI,MAAQ,CAAA;CAGxC,MAAM,EAAE,UAAU,GAAG,SAAS;CAE9B,OACE,oBAACA,iBAAD;EAAmB,GAAI;YACrB,oBAAC,qBAAD,EAAqB,cAAc,SAAW,CAAA;CAC7B,CAAA;AAEvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","names":[],"sources":["../../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { navigate } from \"@askrjs/askr/router\";\nimport { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"@askrjs/askr/foundations/utilities\";\nimport { classes } from \"../_internal/classes\";\nimport { resolvePathname } from \"../_internal/pathname\";\nimport type {\n PaginationEllipsisProps,\n PaginationItemAsChildProps,\n PaginationItemProps,\n PaginationLinkProps,\n PaginationProps,\n} from \"./pagination.types\";\n\nfunction shouldHandleClientNavigation(\n event: MouseEvent,\n target: string | undefined,\n targetPathname: string | null,\n): boolean {\n if (targetPathname === null || target) {\n return false;\n }\n\n return (\n !event.defaultPrevented &&\n (event.button ?? 0) === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey\n );\n}\n\nexport function Pagination(props: PaginationProps): JSX.Element {\n const { children, class: className, label = \"Pagination\", ref, ...rest } = props;\n\n return (\n <nav\n {...rest}\n ref={ref}\n class={classes(\"pagination\", className)}\n aria-label={label}\n data-slot=\"pagination\"\n >\n <ul class=\"pagination-list\" data-slot=\"pagination-list\">\n {children}\n </ul>\n </nav>\n );\n}\n\nexport function PaginationItem(props: PaginationItemProps): JSX.Element;\nexport function PaginationItem(props: PaginationItemAsChildProps): JSX.Element;\nexport function PaginationItem(\n props: PaginationItemProps | PaginationItemAsChildProps,\n): JSX.Element {\n const {\n active = false,\n asChild,\n children,\n disabled = false,\n ref,\n class: className,\n ...rest\n } = props;\n const finalProps = mergeProps(rest, {\n class: classes(\n \"page-item\",\n active ? \"active\" : undefined,\n disabled ? \"disabled\" : undefined,\n className,\n ),\n ref,\n \"aria-current\": active ? \"page\" : undefined,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"data-active\": active ? \"true\" : undefined,\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-slot\": \"pagination-item\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <li {...finalProps}>{children}</li>;\n}\n\nexport function PaginationLink(props: PaginationLinkProps): JSX.Element {\n const {\n active = false,\n children,\n class: className,\n disabled = false,\n href,\n onClick,\n ref,\n target,\n ...rest\n } = props as PaginationLinkProps & { onClick?: (event: MouseEvent) => void };\n const hrefValue = href as string;\n const targetValue = target as string | undefined;\n const targetPathname = resolvePathname(hrefValue);\n const isActive = active;\n\n const linkProps = mergeProps(rest, {\n href,\n target: targetValue,\n ref,\n class: classes(\n \"page-link\",\n active ? \"active\" : undefined,\n disabled ? \"disabled\" : undefined,\n className,\n ),\n \"aria-current\": isActive ? \"page\" : undefined,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"data-active\": isActive ? \"true\" : undefined,\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-slot\": \"pagination-link\",\n tabIndex: disabled ? -1 : undefined,\n });\n\n const handleClick = (event: MouseEvent) => {\n onClick?.(event);\n\n if (disabled || !shouldHandleClientNavigation(event, targetValue, targetPathname)) {\n if (disabled) {\n event.preventDefault();\n }\n\n return;\n }\n\n event.preventDefault();\n navigate(hrefValue);\n };\n\n return (\n <a {...linkProps} onClick={handleClick}>\n {children}\n </a>\n );\n}\n\nexport function PaginationEllipsis(props: PaginationEllipsisProps): JSX.Element {\n const { children, class: className, ref, ...rest } = props;\n\n return (\n <span\n {...rest}\n ref={ref}\n class={classes(\"pagination-ellipsis\", className)}\n aria-hidden=\"true\"\n data-slot=\"pagination-ellipsis\"\n >\n {children ?? \"...\"}\n </span>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAS,6BACP,OACA,QACA,gBACS;CACT,IAAI,mBAAmB,QAAQ,QAC7B,OAAO;CAGT,OACE,CAAC,MAAM,qBACN,MAAM,UAAU,OAAO,KACxB,CAAC,MAAM,UACP,CAAC,MAAM,WACP,CAAC,MAAM,WACP,CAAC,MAAM;;AAIX,SAAgB,WAAW,OAAqC;CAC9D,MAAM,EAAE,UAAU,OAAO,WAAW,QAAQ,cAAc,KAAK,GAAG,SAAS;CAE3E,OACE,oBAAC,OAAD;EACE,GAAI;EACC;EACL,OAAO,QAAQ,cAAc,UAAU;EACvC,cAAY;EACZ,aAAU;YAEV,oBAAC,MAAD;GAAI,OAAM;GAAkB,aAAU;GACnC;GACE,CAAA;EACD,CAAA;;AAMV,SAAgB,eACd,OACa;CACb,MAAM,EACJ,SAAS,OACT,SACA,UACA,WAAW,OACX,KACA,OAAO,WACP,GAAG,SACD;CACJ,MAAM,aAAa,WAAW,MAAM;EAClC,OAAO,QACL,aACA,SAAS,WAAW,KAAA,GACpB,WAAW,aAAa,KAAA,GACxB,UACD;EACD;EACA,gBAAgB,SAAS,SAAS,KAAA;EAClC,iBAAiB,WAAW,SAAS,KAAA;EACrC,eAAe,SAAS,SAAS,KAAA;EACjC,iBAAiB,WAAW,SAAS,KAAA;EACrC,aAAa;EACd,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAAY,CAAA;CAG7D,OAAO,oBAAC,MAAD;EAAI,GAAI;EAAa;EAAc,CAAA;;AAG5C,SAAgB,eAAe,OAAyC;CACtE,MAAM,EACJ,SAAS,OACT,UACA,OAAO,WACP,WAAW,OACX,MACA,SACA,KACA,QACA,GAAG,SACD;CACJ,MAAM,YAAY;CAClB,MAAM,cAAc;CACpB,MAAM,iBAAiB,gBAAgB,UAAU;CACjD,MAAM,WAAW;CAEjB,MAAM,YAAY,WAAW,MAAM;EACjC;EACA,QAAQ;EACR;EACA,OAAO,QACL,aACA,SAAS,WAAW,KAAA,GACpB,WAAW,aAAa,KAAA,GACxB,UACD;EACD,gBAAgB,WAAW,SAAS,KAAA;EACpC,iBAAiB,WAAW,SAAS,KAAA;EACrC,eAAe,WAAW,SAAS,KAAA;EACnC,iBAAiB,WAAW,SAAS,KAAA;EACrC,aAAa;EACb,UAAU,WAAW,KAAK,KAAA;EAC3B,CAAC;CAEF,MAAM,eAAe,UAAsB;EACzC,UAAU,MAAM;EAEhB,IAAI,YAAY,CAAC,6BAA6B,OAAO,aAAa,eAAe,EAAE;GACjF,IAAI,UACF,MAAM,gBAAgB;GAGxB;;EAGF,MAAM,gBAAgB;EACtB,SAAS,UAAU;;CAGrB,OACE,oBAAC,KAAD;EAAG,GAAI;EAAW,SAAS;EACxB;EACC,CAAA;;AAIR,SAAgB,mBAAmB,OAA6C;CAC9E,MAAM,EAAE,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAErD,OACE,oBAAC,QAAD;EACE,GAAI;EACC;EACL,OAAO,QAAQ,uBAAuB,UAAU;EAChD,eAAY;EACZ,aAAU;YAET,YAAY;EACR,CAAA"}
1
+ {"version":3,"file":"pagination.js","names":[],"sources":["../../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { navigate } from \"@askrjs/askr/router\";\nimport { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"@askrjs/askr/foundations/utilities\";\nimport { classes } from \"../_internal/classes\";\nimport { resolvePathname } from \"../_internal/pathname\";\nimport type {\n PaginationEllipsisProps,\n PaginationItemAsChildProps,\n PaginationItemProps,\n PaginationLinkProps,\n PaginationProps,\n} from \"./pagination.types\";\n\nfunction shouldHandleClientNavigation(\n event: MouseEvent,\n target: string | undefined,\n targetPathname: string | null,\n): boolean {\n if (targetPathname === null || target) {\n return false;\n }\n\n return (\n !event.defaultPrevented &&\n (event.button ?? 0) === 0 &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.shiftKey\n );\n}\n\nexport function Pagination(props: PaginationProps): JSX.Element {\n const { children, class: className, label = \"Pagination\", ref, ...rest } = props;\n\n return (\n <nav\n {...rest}\n ref={ref}\n class={classes(\"pagination\", className)}\n aria-label={label}\n data-slot=\"pagination\"\n >\n <ul class=\"pagination-list\" data-slot=\"pagination-list\">\n {children}\n </ul>\n </nav>\n );\n}\n\nexport function PaginationItem(props: PaginationItemProps): JSX.Element;\nexport function PaginationItem(props: PaginationItemAsChildProps): JSX.Element;\nexport function PaginationItem(\n props: PaginationItemProps | PaginationItemAsChildProps,\n): JSX.Element {\n const {\n active = false,\n asChild,\n children,\n disabled = false,\n ref,\n class: className,\n ...rest\n } = props;\n const finalProps = mergeProps(rest, {\n class: classes(\n \"page-item\",\n active ? \"active\" : undefined,\n disabled ? \"disabled\" : undefined,\n className,\n ),\n ref,\n \"aria-current\": active ? \"page\" : undefined,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"data-active\": active ? \"true\" : undefined,\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-slot\": \"pagination-item\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <li {...finalProps}>{children}</li>;\n}\n\nexport function PaginationLink(props: PaginationLinkProps): JSX.Element {\n const {\n active = false,\n children,\n class: className,\n disabled = false,\n href,\n onClick,\n ref,\n target,\n ...rest\n } = props as PaginationLinkProps & { onClick?: (event: MouseEvent) => void };\n const hrefValue = href as string;\n const targetValue = target as string | undefined;\n const targetPathname = resolvePathname(hrefValue);\n const isActive = active;\n\n const linkProps = mergeProps(rest, {\n href,\n target: targetValue,\n ref,\n class: classes(\n \"page-link\",\n active ? \"active\" : undefined,\n disabled ? \"disabled\" : undefined,\n className,\n ),\n \"aria-current\": isActive ? \"page\" : undefined,\n \"aria-disabled\": disabled ? \"true\" : undefined,\n \"data-active\": isActive ? \"true\" : undefined,\n \"data-disabled\": disabled ? \"true\" : undefined,\n \"data-slot\": \"pagination-link\",\n tabIndex: disabled ? -1 : undefined,\n });\n\n const handleClick = (event: MouseEvent) => {\n onClick?.(event);\n\n if (disabled || !shouldHandleClientNavigation(event, targetValue, targetPathname)) {\n if (disabled) {\n event.preventDefault();\n }\n\n return;\n }\n\n event.preventDefault();\n navigate(hrefValue);\n };\n\n return (\n <a {...linkProps} onClick={handleClick}>\n {children}\n </a>\n );\n}\n\nexport function PaginationEllipsis(props: PaginationEllipsisProps): JSX.Element {\n const { children, class: className, ref, ...rest } = props;\n\n return (\n <span\n {...rest}\n ref={ref}\n class={classes(\"pagination-ellipsis\", className)}\n aria-hidden=\"true\"\n data-slot=\"pagination-ellipsis\"\n >\n {children ?? \"...\"}\n </span>\n );\n}\n"],"mappings":";;;;;;;AAaA,SAAS,6BACP,OACA,QACA,gBACS;CACT,IAAI,mBAAmB,QAAQ,QAC7B,OAAO;CAGT,OACE,CAAC,MAAM,qBACN,MAAM,UAAU,OAAO,KACxB,CAAC,MAAM,UACP,CAAC,MAAM,WACP,CAAC,MAAM,WACP,CAAC,MAAM;AAEX;AAEA,SAAgB,WAAW,OAAqC;CAC9D,MAAM,EAAE,UAAU,OAAO,WAAW,QAAQ,cAAc,KAAK,GAAG,SAAS;CAE3E,OACE,oBAAC,OAAD;EACE,GAAI;EACC;EACL,OAAO,QAAQ,cAAc,SAAS;EACtC,cAAY;EACZ,aAAU;YAEV,oBAAC,MAAD;GAAI,OAAM;GAAkB,aAAU;GACnC;EACC,CAAA;CACD,CAAA;AAET;AAIA,SAAgB,eACd,OACa;CACb,MAAM,EACJ,SAAS,OACT,SACA,UACA,WAAW,OACX,KACA,OAAO,WACP,GAAG,SACD;CACJ,MAAM,aAAa,WAAW,MAAM;EAClC,OAAO,QACL,aACA,SAAS,WAAW,KAAA,GACpB,WAAW,aAAa,KAAA,GACxB,SACF;EACA;EACA,gBAAgB,SAAS,SAAS,KAAA;EAClC,iBAAiB,WAAW,SAAS,KAAA;EACrC,eAAe,SAAS,SAAS,KAAA;EACjC,iBAAiB,WAAW,SAAS,KAAA;EACrC,aAAa;CACf,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAAW,CAAA;CAG5D,OAAO,oBAAC,MAAD;EAAI,GAAI;EAAa;CAAa,CAAA;AAC3C;AAEA,SAAgB,eAAe,OAAyC;CACtE,MAAM,EACJ,SAAS,OACT,UACA,OAAO,WACP,WAAW,OACX,MACA,SACA,KACA,QACA,GAAG,SACD;CACJ,MAAM,YAAY;CAClB,MAAM,cAAc;CACpB,MAAM,iBAAiB,gBAAgB,SAAS;CAChD,MAAM,WAAW;CAEjB,MAAM,YAAY,WAAW,MAAM;EACjC;EACA,QAAQ;EACR;EACA,OAAO,QACL,aACA,SAAS,WAAW,KAAA,GACpB,WAAW,aAAa,KAAA,GACxB,SACF;EACA,gBAAgB,WAAW,SAAS,KAAA;EACpC,iBAAiB,WAAW,SAAS,KAAA;EACrC,eAAe,WAAW,SAAS,KAAA;EACnC,iBAAiB,WAAW,SAAS,KAAA;EACrC,aAAa;EACb,UAAU,WAAW,KAAK,KAAA;CAC5B,CAAC;CAED,MAAM,eAAe,UAAsB;EACzC,UAAU,KAAK;EAEf,IAAI,YAAY,CAAC,6BAA6B,OAAO,aAAa,cAAc,GAAG;GACjF,IAAI,UACF,MAAM,eAAe;GAGvB;EACF;EAEA,MAAM,eAAe;EACrB,SAAS,SAAS;CACpB;CAEA,OACE,oBAAC,KAAD;EAAG,GAAI;EAAW,SAAS;EACxB;CACA,CAAA;AAEP;AAEA,SAAgB,mBAAmB,OAA6C;CAC9E,MAAM,EAAE,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAErD,OACE,oBAAC,QAAD;EACE,GAAI;EACC;EACL,OAAO,QAAQ,uBAAuB,SAAS;EAC/C,eAAY;EACZ,aAAU;YAET,YAAY;CACT,CAAA;AAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","names":[],"sources":["../../../src/components/section/section.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport {\n applyBoxLayoutStyles,\n splitBoxLayoutProps,\n withBoxLayoutClass,\n} from \"../_internal/box-layout\";\nimport { serializeResponsiveValueIf } from \"../_internal/layout\";\nimport type { SectionAsChildProps, SectionElementProps } from \"./section.types\";\n\nfunction isSectionSizeToken(value: unknown): value is string {\n return typeof value === \"string\" && [\"1\", \"2\", \"3\", \"4\"].includes(value.trim());\n}\n\nexport function Section(props: SectionElementProps): JSX.Element;\nexport function Section(props: SectionAsChildProps): JSX.Element;\nexport function Section(props: SectionElementProps | SectionAsChildProps) {\n const { asChild, children, size = \"3\", ref, style: userStyle, ...rest } = props;\n\n const { boxProps, rest: passthroughProps } = splitBoxLayoutProps(rest);\n const layoutStyle: Record<string, string | number> = {};\n applyBoxLayoutStyles(layoutStyle, boxProps);\n const layoutClass = withBoxLayoutClass(layoutStyle, userStyle);\n\n const finalProps = mergeProps(passthroughProps, {\n ref,\n \"data-slot\": \"section\",\n \"data-ak-layout\": \"true\",\n \"data-size\": serializeResponsiveValueIf(size, isSectionSizeToken),\n ...(layoutClass ? { class: layoutClass } : {}),\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <section {...finalProps}>{children}</section>;\n}\n"],"mappings":";;;;;;AAUA,SAAS,mBAAmB,OAAiC;CAC3D,OAAO,OAAO,UAAU,YAAY;EAAC;EAAK;EAAK;EAAK;EAAI,CAAC,SAAS,MAAM,MAAM,CAAC;;AAKjF,SAAgB,QAAQ,OAAkD;CACxE,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,KAAK,OAAO,WAAW,GAAG,SAAS;CAE1E,MAAM,EAAE,UAAU,MAAM,qBAAqB,oBAAoB,KAAK;CACtE,MAAM,cAA+C,EAAE;CACvD,qBAAqB,aAAa,SAAS;CAC3C,MAAM,cAAc,mBAAmB,aAAa,UAAU;CAE9D,MAAM,aAAa,WAAW,kBAAkB;EAC9C;EACA,aAAa;EACb,kBAAkB;EAClB,aAAa,2BAA2B,MAAM,mBAAmB;EACjE,GAAI,cAAc,EAAE,OAAO,aAAa,GAAG,EAAE;EAC9C,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAAY,CAAA;CAG7D,OAAO,oBAAC,WAAD;EAAS,GAAI;EAAa;EAAmB,CAAA"}
1
+ {"version":3,"file":"section.js","names":[],"sources":["../../../src/components/section/section.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport {\n applyBoxLayoutStyles,\n splitBoxLayoutProps,\n withBoxLayoutClass,\n} from \"../_internal/box-layout\";\nimport { serializeResponsiveValueIf } from \"../_internal/layout\";\nimport type { SectionAsChildProps, SectionElementProps } from \"./section.types\";\n\nfunction isSectionSizeToken(value: unknown): value is string {\n return typeof value === \"string\" && [\"1\", \"2\", \"3\", \"4\"].includes(value.trim());\n}\n\nexport function Section(props: SectionElementProps): JSX.Element;\nexport function Section(props: SectionAsChildProps): JSX.Element;\nexport function Section(props: SectionElementProps | SectionAsChildProps) {\n const { asChild, children, size = \"3\", ref, style: userStyle, ...rest } = props;\n\n const { boxProps, rest: passthroughProps } = splitBoxLayoutProps(rest);\n const layoutStyle: Record<string, string | number> = {};\n applyBoxLayoutStyles(layoutStyle, boxProps);\n const layoutClass = withBoxLayoutClass(layoutStyle, userStyle);\n\n const finalProps = mergeProps(passthroughProps, {\n ref,\n \"data-slot\": \"section\",\n \"data-ak-layout\": \"true\",\n \"data-size\": serializeResponsiveValueIf(size, isSectionSizeToken),\n ...(layoutClass ? { class: layoutClass } : {}),\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <section {...finalProps}>{children}</section>;\n}\n"],"mappings":";;;;;;AAUA,SAAS,mBAAmB,OAAiC;CAC3D,OAAO,OAAO,UAAU,YAAY;EAAC;EAAK;EAAK;EAAK;CAAG,CAAC,CAAC,SAAS,MAAM,KAAK,CAAC;AAChF;AAIA,SAAgB,QAAQ,OAAkD;CACxE,MAAM,EAAE,SAAS,UAAU,OAAO,KAAK,KAAK,OAAO,WAAW,GAAG,SAAS;CAE1E,MAAM,EAAE,UAAU,MAAM,qBAAqB,oBAAoB,IAAI;CACrE,MAAM,cAA+C,CAAC;CACtD,qBAAqB,aAAa,QAAQ;CAC1C,MAAM,cAAc,mBAAmB,aAAa,SAAS;CAE7D,MAAM,aAAa,WAAW,kBAAkB;EAC9C;EACA,aAAa;EACb,kBAAkB;EAClB,aAAa,2BAA2B,MAAM,kBAAkB;EAChE,GAAI,cAAc,EAAE,OAAO,YAAY,IAAI,CAAC;CAC9C,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAAW,CAAA;CAG5D,OAAO,oBAAC,WAAD;EAAS,GAAI;EAAa;CAAkB,CAAA;AACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator.a11y.js","names":[],"sources":["../../../src/components/separator/separator.a11y.ts"],"sourcesContent":["/**\n * WAI-ARIA Separator Pattern.\n */\n\nexport const SEPARATOR_A11Y_CONTRACT = {\n ROLE: \"separator\" as const,\n DECORATIVE_ROLE: \"presentation\" as const,\n ORIENTATION_ATTRIBUTE: \"aria-orientation\" as const,\n DATA_ATTRIBUTES: {\n orientation: \"data-orientation\" as const,\n },\n DEFAULT_ORIENTATION: \"horizontal\" as const,\n} as const;\n\nexport type SeparatorA11yContract = typeof SEPARATOR_A11Y_CONTRACT;\n"],"mappings":";;;;AAIA,MAAa,0BAA0B;CACrC,MAAM;CACN,iBAAiB;CACjB,uBAAuB;CACvB,iBAAiB,EACf,aAAa,oBACd;CACD,qBAAqB;CACtB"}
1
+ {"version":3,"file":"separator.a11y.js","names":[],"sources":["../../../src/components/separator/separator.a11y.ts"],"sourcesContent":["/**\n * WAI-ARIA Separator Pattern.\n */\n\nexport const SEPARATOR_A11Y_CONTRACT = {\n ROLE: \"separator\" as const,\n DECORATIVE_ROLE: \"presentation\" as const,\n ORIENTATION_ATTRIBUTE: \"aria-orientation\" as const,\n DATA_ATTRIBUTES: {\n orientation: \"data-orientation\" as const,\n },\n DEFAULT_ORIENTATION: \"horizontal\" as const,\n} as const;\n\nexport type SeparatorA11yContract = typeof SEPARATOR_A11Y_CONTRACT;\n"],"mappings":";;;;AAIA,MAAa,0BAA0B;CACrC,MAAM;CACN,iBAAiB;CACjB,uBAAuB;CACvB,iBAAiB,EACf,aAAa,mBACf;CACA,qBAAqB;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"separator.js","names":[],"sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport type { SeparatorAsChildProps, SeparatorNativeProps } from \"./separator.types\";\n\nexport function Separator(props: SeparatorNativeProps): JSX.Element;\nexport function Separator(props: SeparatorAsChildProps): JSX.Element;\nexport function Separator(props: SeparatorNativeProps | SeparatorAsChildProps) {\n const { asChild, children, decorative = false, orientation = \"horizontal\", ref, ...rest } = props;\n\n const finalProps = mergeProps(rest, {\n ref,\n \"data-slot\": \"separator\",\n \"data-orientation\": orientation,\n role: decorative ? \"presentation\" : \"separator\",\n \"aria-orientation\": decorative ? undefined : orientation,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n"],"mappings":";;;;AAMA,SAAgB,UAAU,OAAqD;CAC7E,MAAM,EAAE,SAAS,UAAU,aAAa,OAAO,cAAc,cAAc,KAAK,GAAG,SAAS;CAE5F,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,aAAa;EACb,oBAAoB;EACpB,MAAM,aAAa,iBAAiB;EACpC,oBAAoB,aAAa,KAAA,IAAY;EAC9C,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAAY,CAAA;CAG7D,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;EAAe,CAAA"}
1
+ {"version":3,"file":"separator.js","names":[],"sources":["../../../src/components/separator/separator.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport type { SeparatorAsChildProps, SeparatorNativeProps } from \"./separator.types\";\n\nexport function Separator(props: SeparatorNativeProps): JSX.Element;\nexport function Separator(props: SeparatorAsChildProps): JSX.Element;\nexport function Separator(props: SeparatorNativeProps | SeparatorAsChildProps) {\n const { asChild, children, decorative = false, orientation = \"horizontal\", ref, ...rest } = props;\n\n const finalProps = mergeProps(rest, {\n ref,\n \"data-slot\": \"separator\",\n \"data-orientation\": orientation,\n role: decorative ? \"presentation\" : \"separator\",\n \"aria-orientation\": decorative ? undefined : orientation,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n"],"mappings":";;;;AAMA,SAAgB,UAAU,OAAqD;CAC7E,MAAM,EAAE,SAAS,UAAU,aAAa,OAAO,cAAc,cAAc,KAAK,GAAG,SAAS;CAE5F,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,aAAa;EACb,oBAAoB;EACpB,MAAM,aAAa,iBAAiB;EACpC,oBAAoB,aAAa,KAAA,IAAY;CAC/C,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAAW,CAAA;CAG5D,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;CAAc,CAAA;AAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-panel.js","names":[],"sources":["../../../src/components/shell/shell-panel.tsx"],"sourcesContent":["import { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\n\nexport type ShellPanelRenderProps = {\n active: boolean;\n brand?: unknown;\n children?: unknown;\n className?: unknown;\n collapseLabel: string;\n dataOrientation?: string;\n onClose: () => void;\n open: boolean;\n panelId?: string;\n prefix: \"navbar\" | \"sidebar\";\n ref?: unknown;\n rest: Record<string, unknown>;\n};\n\nexport function renderShellPanel(props: ShellPanelRenderProps): JSX.Element | null {\n const {\n active,\n brand,\n children,\n className,\n collapseLabel,\n dataOrientation,\n onClose,\n open,\n panelId,\n prefix,\n ref,\n rest,\n } = props;\n\n if (active && !open) {\n return null;\n }\n\n const panelClass = `${prefix}-panel`;\n const headerClass = `${prefix}-panel-header`;\n const closeClass = `${prefix}-panel-close`;\n const headerSlot = `${prefix}-panel-header`;\n const closeSlot = `${prefix}-panel-close`;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(panelClass, className),\n \"aria-label\": active ? collapseLabel : rest[\"aria-label\"],\n \"aria-modal\": active ? \"true\" : rest[\"aria-modal\"],\n \"data-slot\": panelClass,\n \"data-state\": active ? (open ? \"open\" : \"closed\") : \"open\",\n id: panelId,\n role: rest.role,\n tabIndex: active ? -1 : rest.tabIndex,\n ...(dataOrientation !== undefined ? { \"data-orientation\": dataOrientation } : {}),\n }) as Record<string, unknown>;\n\n if (active) {\n finalProps.role = \"dialog\";\n finalProps[\"aria-modal\"] = \"true\";\n finalProps[\"aria-label\"] = collapseLabel;\n finalProps.tabIndex = -1;\n finalProps.id = panelId;\n }\n\n return (\n <div {...finalProps}>\n {active ? (\n <div class={headerClass} data-slot={headerSlot}>\n {brand}\n <button\n aria-label={`Close ${collapseLabel}`}\n class={closeClass}\n data-slot={closeSlot}\n type=\"button\"\n onClick={() => onClose()}\n >\n <span aria-hidden=\"true\">x</span>\n </button>\n </div>\n ) : null}\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAkBA,SAAgB,iBAAiB,OAAkD;CACjF,MAAM,EACJ,QACA,OACA,UACA,WACA,eACA,iBACA,SACA,MACA,SACA,QACA,KACA,SACE;CAEJ,IAAI,UAAU,CAAC,MACb,OAAO;CAGT,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,cAAc,GAAG,OAAO;CAC9B,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,YAAY,GAAG,OAAO;CAE5B,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,YAAY,UAAU;EACrC,cAAc,SAAS,gBAAgB,KAAK;EAC5C,cAAc,SAAS,SAAS,KAAK;EACrC,aAAa;EACb,cAAc,SAAU,OAAO,SAAS,WAAY;EACpD,IAAI;EACJ,MAAM,KAAK;EACX,UAAU,SAAS,KAAK,KAAK;EAC7B,GAAI,oBAAoB,KAAA,IAAY,EAAE,oBAAoB,iBAAiB,GAAG,EAAE;EACjF,CAAC;CAEF,IAAI,QAAQ;EACV,WAAW,OAAO;EAClB,WAAW,gBAAgB;EAC3B,WAAW,gBAAgB;EAC3B,WAAW,WAAW;EACtB,WAAW,KAAK;;CAGlB,OACE,qBAAC,OAAD;EAAK,GAAI;YAAT,CACG,SACC,qBAAC,OAAD;GAAK,OAAO;GAAa,aAAW;aAApC,CACG,OACD,oBAAC,UAAD;IACE,cAAY,SAAS;IACrB,OAAO;IACP,aAAW;IACX,MAAK;IACL,eAAe,SAAS;cAExB,oBAAC,QAAD;KAAM,eAAY;eAAO;KAAQ,CAAA;IAC1B,CAAA,CACL;OACJ,MACH,SACG"}
1
+ {"version":3,"file":"shell-panel.js","names":[],"sources":["../../../src/components/shell/shell-panel.tsx"],"sourcesContent":["import { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\n\nexport type ShellPanelRenderProps = {\n active: boolean;\n brand?: unknown;\n children?: unknown;\n className?: unknown;\n collapseLabel: string;\n dataOrientation?: string;\n onClose: () => void;\n open: boolean;\n panelId?: string;\n prefix: \"navbar\" | \"sidebar\";\n ref?: unknown;\n rest: Record<string, unknown>;\n};\n\nexport function renderShellPanel(props: ShellPanelRenderProps): JSX.Element | null {\n const {\n active,\n brand,\n children,\n className,\n collapseLabel,\n dataOrientation,\n onClose,\n open,\n panelId,\n prefix,\n ref,\n rest,\n } = props;\n\n if (active && !open) {\n return null;\n }\n\n const panelClass = `${prefix}-panel`;\n const headerClass = `${prefix}-panel-header`;\n const closeClass = `${prefix}-panel-close`;\n const headerSlot = `${prefix}-panel-header`;\n const closeSlot = `${prefix}-panel-close`;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(panelClass, className),\n \"aria-label\": active ? collapseLabel : rest[\"aria-label\"],\n \"aria-modal\": active ? \"true\" : rest[\"aria-modal\"],\n \"data-slot\": panelClass,\n \"data-state\": active ? (open ? \"open\" : \"closed\") : \"open\",\n id: panelId,\n role: rest.role,\n tabIndex: active ? -1 : rest.tabIndex,\n ...(dataOrientation !== undefined ? { \"data-orientation\": dataOrientation } : {}),\n }) as Record<string, unknown>;\n\n if (active) {\n finalProps.role = \"dialog\";\n finalProps[\"aria-modal\"] = \"true\";\n finalProps[\"aria-label\"] = collapseLabel;\n finalProps.tabIndex = -1;\n finalProps.id = panelId;\n }\n\n return (\n <div {...finalProps}>\n {active ? (\n <div class={headerClass} data-slot={headerSlot}>\n {brand}\n <button\n aria-label={`Close ${collapseLabel}`}\n class={closeClass}\n data-slot={closeSlot}\n type=\"button\"\n onClick={() => onClose()}\n >\n <span aria-hidden=\"true\">x</span>\n </button>\n </div>\n ) : null}\n {children}\n </div>\n );\n}\n"],"mappings":";;;;AAkBA,SAAgB,iBAAiB,OAAkD;CACjF,MAAM,EACJ,QACA,OACA,UACA,WACA,eACA,iBACA,SACA,MACA,SACA,QACA,KACA,SACE;CAEJ,IAAI,UAAU,CAAC,MACb,OAAO;CAGT,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,cAAc,GAAG,OAAO;CAC9B,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,YAAY,GAAG,OAAO;CAE5B,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,YAAY,SAAS;EACpC,cAAc,SAAS,gBAAgB,KAAK;EAC5C,cAAc,SAAS,SAAS,KAAK;EACrC,aAAa;EACb,cAAc,SAAU,OAAO,SAAS,WAAY;EACpD,IAAI;EACJ,MAAM,KAAK;EACX,UAAU,SAAS,KAAK,KAAK;EAC7B,GAAI,oBAAoB,KAAA,IAAY,EAAE,oBAAoB,gBAAgB,IAAI,CAAC;CACjF,CAAC;CAED,IAAI,QAAQ;EACV,WAAW,OAAO;EAClB,WAAW,gBAAgB;EAC3B,WAAW,gBAAgB;EAC3B,WAAW,WAAW;EACtB,WAAW,KAAK;CAClB;CAEA,OACE,qBAAC,OAAD;EAAK,GAAI;YAAT,CACG,SACC,qBAAC,OAAD;GAAK,OAAO;GAAa,aAAW;aAApC,CACG,OACD,oBAAC,UAAD;IACE,cAAY,SAAS;IACrB,OAAO;IACP,aAAW;IACX,MAAK;IACL,eAAe,QAAQ;cAEvB,oBAAC,QAAD;KAAM,eAAY;eAAO;IAAO,CAAA;GAC1B,CAAA,CACL;OACH,MACH,QACE;;AAET"}
@@ -25,13 +25,14 @@ function isShellPanelChild(child, panelComponent) {
25
25
  return isJsxElement(child) && child.type === panelComponent;
26
26
  }
27
27
  function renderKeyedShellChildren(children, keyPrefix) {
28
- const keyedChildren = toChildArray(children).map((child, index) => {
28
+ const childList = toChildArray(children);
29
+ const keyedChildren = childList.some((child) => isJsxElement(child) && child.key == null) ? childList.map((child, index) => {
29
30
  if (!isJsxElement(child) || child.key != null) return child;
30
31
  return {
31
32
  ...child,
32
33
  key: `${keyPrefix}-${index}`
33
34
  };
34
- });
35
+ }) : childList;
35
36
  return /* @__PURE__ */ jsx(For, {
36
37
  each: () => keyedChildren,
37
38
  by: (child, index) => isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`,
@@ -39,13 +40,20 @@ function renderKeyedShellChildren(children, keyPrefix) {
39
40
  });
40
41
  }
41
42
  function renderKeyedShellPanelChildren(children, keyPrefix, panelProps) {
42
- const keyedChildren = toChildArray(children).map((child, index) => {
43
+ const childList = toChildArray(children);
44
+ const keyedChildren = childList.some((child) => {
45
+ if (!isJsxElement(child)) return false;
46
+ const props = child.props;
47
+ return props?.active !== panelProps.active || props?.collapseLabel !== panelProps.collapseLabel || props?.onClose !== panelProps.onClose || props?.open !== panelProps.open || props?.panelId !== panelProps.panelId;
48
+ }) ? childList.map((child, index) => {
43
49
  if (!isJsxElement(child)) return child;
50
+ const props = child.props;
51
+ if (props?.active === panelProps.active && props?.collapseLabel === panelProps.collapseLabel && props?.onClose === panelProps.onClose && props?.open === panelProps.open && props?.panelId === panelProps.panelId) return child;
44
52
  return {
45
53
  ...child,
46
54
  key: child.key != null ? child.key : `${keyPrefix}-${index}`,
47
55
  props: {
48
- ...child.props,
56
+ ...props,
49
57
  active: panelProps.active,
50
58
  collapseLabel: panelProps.collapseLabel,
51
59
  onClose: panelProps.onClose,
@@ -53,7 +61,7 @@ function renderKeyedShellPanelChildren(children, keyPrefix, panelProps) {
53
61
  panelId: panelProps.panelId
54
62
  }
55
63
  };
56
- });
64
+ }) : childList;
57
65
  return /* @__PURE__ */ jsx(For, {
58
66
  each: () => keyedChildren,
59
67
  by: (child, index) => isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`,
@@ -1 +1 @@
1
- {"version":3,"file":"shell-responsive.js","names":[],"sources":["../../../src/components/shell/shell-responsive.tsx"],"sourcesContent":["import { For } from \"@askrjs/askr/control\";\nimport { resource } from \"@askrjs/askr/resources\";\nimport type { JSXElement } from \"@askrjs/askr/foundations\";\nimport { isJsxElement, toChildArray } from \"../_internal/jsx\";\n\nexport type ShellResponsivePanelProps = {\n active: boolean;\n collapseLabel: string;\n onClose: () => void;\n open: boolean;\n panelId?: string;\n};\n\nlet shellScrollLockCount = 0;\nlet shellScrollLockPreviousValue: string | null = null;\n\nfunction acquireShellScrollLock(): void {\n if (typeof document === \"undefined\") return;\n\n const body = document.body;\n if (shellScrollLockCount === 0) {\n shellScrollLockPreviousValue = body.getAttribute(\"data-shell-scroll-lock\");\n }\n\n shellScrollLockCount += 1;\n body.setAttribute(\"data-shell-scroll-lock\", \"true\");\n}\n\nfunction releaseShellScrollLock(): void {\n if (typeof document === \"undefined\" || shellScrollLockCount === 0) return;\n\n shellScrollLockCount -= 1;\n if (shellScrollLockCount > 0) return;\n\n const body = document.body;\n if (shellScrollLockPreviousValue === null) {\n body.removeAttribute(\"data-shell-scroll-lock\");\n } else {\n body.setAttribute(\"data-shell-scroll-lock\", shellScrollLockPreviousValue);\n }\n\n shellScrollLockPreviousValue = null;\n}\n\nexport function isShellPanelChild(child: unknown, panelComponent: unknown): child is JSXElement {\n return isJsxElement(child) && child.type === panelComponent;\n}\n\nexport function renderKeyedShellChildren(children: unknown, keyPrefix: string): JSX.Element {\n const keyedChildren = toChildArray(children).map((child, index) => {\n if (!isJsxElement(child) || child.key != null) {\n return child;\n }\n\n return {\n ...child,\n key: `${keyPrefix}-${index}`,\n };\n });\n\n return (\n <For\n each={() => keyedChildren}\n by={(child, index) =>\n isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`\n }\n >\n {(child) => child as never}\n </For>\n );\n}\n\nexport function renderKeyedShellPanelChildren(\n children: unknown,\n keyPrefix: string,\n panelProps: ShellResponsivePanelProps,\n): JSX.Element {\n const keyedChildren = toChildArray(children).map((child, index) => {\n if (!isJsxElement(child)) {\n return child;\n }\n\n return {\n ...child,\n key: child.key != null ? child.key : `${keyPrefix}-${index}`,\n props: {\n ...child.props,\n active: panelProps.active,\n collapseLabel: panelProps.collapseLabel,\n onClose: panelProps.onClose,\n open: panelProps.open,\n panelId: panelProps.panelId,\n },\n };\n });\n\n return (\n <For\n each={() => keyedChildren}\n by={(child, index) =>\n isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`\n }\n >\n {(child) => child as never}\n </For>\n );\n}\n\nexport function ShellResponsiveWatcher<TBreakpoint extends string>(props: {\n breakpoint: TBreakpoint;\n isCollapsed: (breakpoint: TBreakpoint) => boolean;\n onExpand: () => void;\n onResize: (nextCollapsed: boolean) => void;\n}): JSX.Element | null {\n const { breakpoint, isCollapsed, onExpand, onResize } = props;\n\n resource(\n ({ signal }: { signal: AbortSignal }) => {\n const updateCollapsedState = () => {\n const nextCollapsed = isCollapsed(breakpoint);\n onResize(nextCollapsed);\n\n if (!nextCollapsed) {\n onExpand();\n }\n };\n\n updateCollapsedState();\n\n if (typeof window === \"undefined\") {\n return null;\n }\n\n window.addEventListener(\"resize\", updateCollapsedState);\n signal.addEventListener(\n \"abort\",\n () => {\n window.removeEventListener(\"resize\", updateCollapsedState);\n },\n { once: true },\n );\n\n return null;\n },\n [breakpoint],\n );\n\n return null;\n}\n\nexport function ShellPanelWatcher(props: {\n contentId?: string;\n onClose: () => void;\n open: boolean;\n panelSlot: string;\n}): JSX.Element | null {\n const { contentId, onClose, open, panelSlot } = props;\n\n resource(\n ({ signal }: { signal: AbortSignal }) => {\n if (!open || typeof window === \"undefined\") {\n releaseShellScrollLock();\n return null;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return;\n }\n\n event.preventDefault();\n onClose();\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n const focusFrame =\n typeof window.requestAnimationFrame === \"function\"\n ? window.requestAnimationFrame(() => {\n const content =\n (typeof contentId === \"string\" ? document.getElementById(contentId) : null) ??\n document.querySelector<HTMLElement>(\n `[data-slot=\"${panelSlot}\"][data-state=\"open\"]`,\n );\n\n content?.focus({ preventScroll: true });\n })\n : undefined;\n\n acquireShellScrollLock();\n\n signal.addEventListener(\n \"abort\",\n () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n\n if (focusFrame !== undefined && typeof window.cancelAnimationFrame === \"function\") {\n window.cancelAnimationFrame(focusFrame);\n }\n\n releaseShellScrollLock();\n },\n { once: true },\n );\n\n return null;\n },\n [open],\n );\n\n return null;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"shell-responsive.js","names":[],"sources":["../../../src/components/shell/shell-responsive.tsx"],"sourcesContent":["import { For } from \"@askrjs/askr/control\";\nimport { resource } from \"@askrjs/askr/resources\";\nimport type { JSXElement } from \"@askrjs/askr/foundations\";\nimport { isJsxElement, toChildArray } from \"../_internal/jsx\";\n\nexport type ShellResponsivePanelProps = {\n active: boolean;\n collapseLabel: string;\n onClose: () => void;\n open: boolean;\n panelId?: string;\n};\n\nlet shellScrollLockCount = 0;\nlet shellScrollLockPreviousValue: string | null = null;\n\nfunction acquireShellScrollLock(): void {\n if (typeof document === \"undefined\") return;\n\n const body = document.body;\n if (shellScrollLockCount === 0) {\n shellScrollLockPreviousValue = body.getAttribute(\"data-shell-scroll-lock\");\n }\n\n shellScrollLockCount += 1;\n body.setAttribute(\"data-shell-scroll-lock\", \"true\");\n}\n\nfunction releaseShellScrollLock(): void {\n if (typeof document === \"undefined\" || shellScrollLockCount === 0) return;\n\n shellScrollLockCount -= 1;\n if (shellScrollLockCount > 0) return;\n\n const body = document.body;\n if (shellScrollLockPreviousValue === null) {\n body.removeAttribute(\"data-shell-scroll-lock\");\n } else {\n body.setAttribute(\"data-shell-scroll-lock\", shellScrollLockPreviousValue);\n }\n\n shellScrollLockPreviousValue = null;\n}\n\nexport function isShellPanelChild(child: unknown, panelComponent: unknown): child is JSXElement {\n return isJsxElement(child) && child.type === panelComponent;\n}\n\nexport function renderKeyedShellChildren(children: unknown, keyPrefix: string): JSX.Element {\n const childList = toChildArray(children);\n const needsKeying = childList.some((child) => isJsxElement(child) && child.key == null);\n const keyedChildren = needsKeying\n ? childList.map((child, index) => {\n if (!isJsxElement(child) || child.key != null) {\n return child;\n }\n\n return {\n ...child,\n key: `${keyPrefix}-${index}`,\n };\n })\n : childList;\n\n return (\n <For\n each={() => keyedChildren}\n by={(child, index) =>\n isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`\n }\n >\n {(child) => child as never}\n </For>\n );\n}\n\nexport function renderKeyedShellPanelChildren(\n children: unknown,\n keyPrefix: string,\n panelProps: ShellResponsivePanelProps,\n): JSX.Element {\n const childList = toChildArray(children);\n const needsPanelProps = childList.some((child) => {\n if (!isJsxElement(child)) {\n return false;\n }\n\n const props = child.props as Record<string, unknown> | undefined;\n\n return (\n props?.active !== panelProps.active ||\n props?.collapseLabel !== panelProps.collapseLabel ||\n props?.onClose !== panelProps.onClose ||\n props?.open !== panelProps.open ||\n props?.panelId !== panelProps.panelId\n );\n });\n const keyedChildren = needsPanelProps\n ? childList.map((child, index) => {\n if (!isJsxElement(child)) {\n return child;\n }\n\n const props = child.props as Record<string, unknown> | undefined;\n\n if (\n props?.active === panelProps.active &&\n props?.collapseLabel === panelProps.collapseLabel &&\n props?.onClose === panelProps.onClose &&\n props?.open === panelProps.open &&\n props?.panelId === panelProps.panelId\n ) {\n return child;\n }\n\n return {\n ...child,\n key: child.key != null ? child.key : `${keyPrefix}-${index}`,\n props: {\n ...props,\n active: panelProps.active,\n collapseLabel: panelProps.collapseLabel,\n onClose: panelProps.onClose,\n open: panelProps.open,\n panelId: panelProps.panelId,\n },\n };\n })\n : childList;\n\n return (\n <For\n each={() => keyedChildren}\n by={(child, index) =>\n isJsxElement(child) && child.key != null ? String(child.key) : `${keyPrefix}-${index}`\n }\n >\n {(child) => child as never}\n </For>\n );\n}\n\nexport function ShellResponsiveWatcher<TBreakpoint extends string>(props: {\n breakpoint: TBreakpoint;\n isCollapsed: (breakpoint: TBreakpoint) => boolean;\n onExpand: () => void;\n onResize: (nextCollapsed: boolean) => void;\n}): JSX.Element | null {\n const { breakpoint, isCollapsed, onExpand, onResize } = props;\n\n resource(\n ({ signal }: { signal: AbortSignal }) => {\n const updateCollapsedState = () => {\n const nextCollapsed = isCollapsed(breakpoint);\n onResize(nextCollapsed);\n\n if (!nextCollapsed) {\n onExpand();\n }\n };\n\n updateCollapsedState();\n\n if (typeof window === \"undefined\") {\n return null;\n }\n\n window.addEventListener(\"resize\", updateCollapsedState);\n signal.addEventListener(\n \"abort\",\n () => {\n window.removeEventListener(\"resize\", updateCollapsedState);\n },\n { once: true },\n );\n\n return null;\n },\n [breakpoint],\n );\n\n return null;\n}\n\nexport function ShellPanelWatcher(props: {\n contentId?: string;\n onClose: () => void;\n open: boolean;\n panelSlot: string;\n}): JSX.Element | null {\n const { contentId, onClose, open, panelSlot } = props;\n\n resource(\n ({ signal }: { signal: AbortSignal }) => {\n if (!open || typeof window === \"undefined\") {\n releaseShellScrollLock();\n return null;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return;\n }\n\n event.preventDefault();\n onClose();\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n\n const focusFrame =\n typeof window.requestAnimationFrame === \"function\"\n ? window.requestAnimationFrame(() => {\n const content =\n (typeof contentId === \"string\" ? document.getElementById(contentId) : null) ??\n document.querySelector<HTMLElement>(\n `[data-slot=\"${panelSlot}\"][data-state=\"open\"]`,\n );\n\n content?.focus({ preventScroll: true });\n })\n : undefined;\n\n acquireShellScrollLock();\n\n signal.addEventListener(\n \"abort\",\n () => {\n window.removeEventListener(\"keydown\", onKeyDown);\n\n if (focusFrame !== undefined && typeof window.cancelAnimationFrame === \"function\") {\n window.cancelAnimationFrame(focusFrame);\n }\n\n releaseShellScrollLock();\n },\n { once: true },\n );\n\n return null;\n },\n [open],\n );\n\n return null;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.a11y.js","names":[],"sources":["../../../src/components/shell/shell.a11y.ts"],"sourcesContent":["export const SHELL_A11Y_CONTRACT = {\n DATA_ATTRIBUTES: {\n slot: \"data-slot\" as const,\n layout: \"data-ak-layout\" as const,\n variant: \"data-variant\" as const,\n gap: \"data-gap\" as const,\n },\n SLOT_VALUES: {\n root: \"shell\" as const,\n nav: \"shell-nav\" as const,\n main: \"shell-main\" as const,\n },\n VARIANT_VALUES: {\n sidebar: \"sidebar\" as const,\n topbar: \"topbar\" as const,\n rail: \"rail\" as const,\n },\n} as const;\n\nexport type ShellA11yContract = typeof SHELL_A11Y_CONTRACT;\n"],"mappings":";AAAA,MAAa,sBAAsB;CACjC,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;EACN;CACD,aAAa;EACX,MAAM;EACN,KAAK;EACL,MAAM;EACP;CACD,gBAAgB;EACd,SAAS;EACT,QAAQ;EACR,MAAM;EACP;CACF"}
1
+ {"version":3,"file":"shell.a11y.js","names":[],"sources":["../../../src/components/shell/shell.a11y.ts"],"sourcesContent":["export const SHELL_A11Y_CONTRACT = {\n DATA_ATTRIBUTES: {\n slot: \"data-slot\" as const,\n layout: \"data-ak-layout\" as const,\n variant: \"data-variant\" as const,\n gap: \"data-gap\" as const,\n },\n SLOT_VALUES: {\n root: \"shell\" as const,\n nav: \"shell-nav\" as const,\n main: \"shell-main\" as const,\n },\n VARIANT_VALUES: {\n sidebar: \"sidebar\" as const,\n topbar: \"topbar\" as const,\n rail: \"rail\" as const,\n },\n} as const;\n\nexport type ShellA11yContract = typeof SHELL_A11Y_CONTRACT;\n"],"mappings":";AAAA,MAAa,sBAAsB;CACjC,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,KAAK;CACP;CACA,aAAa;EACX,MAAM;EACN,KAAK;EACL,MAAM;CACR;CACA,gBAAgB;EACd,SAAS;EACT,QAAQ;EACR,MAAM;CACR;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell.js","names":[],"sources":["../../../src/components/shell/shell.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport type {\n ShellAsChildProps,\n ShellDivProps,\n ShellMainAsChildProps,\n ShellMainDivProps,\n ShellMainMainProps,\n ShellNavAsChildProps,\n ShellNavDivProps,\n} from \"./shell.types\";\n\nexport function Shell(props: ShellDivProps): JSX.Element;\nexport function Shell(props: ShellAsChildProps): JSX.Element;\nexport function Shell(props: ShellDivProps | ShellAsChildProps) {\n const { asChild, children, class: className, variant = \"sidebar\", ref, ...rest } = props;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell\", className),\n \"data-slot\": \"shell\",\n \"data-ak-layout\": \"true\",\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n\nexport function ShellNav(props: ShellNavDivProps): JSX.Element;\nexport function ShellNav(props: ShellNavAsChildProps): JSX.Element;\nexport function ShellNav(props: ShellNavDivProps | ShellNavAsChildProps) {\n const { asChild, children, class: className, ref, ...rest } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell-nav\", className),\n \"data-slot\": \"shell-nav\",\n \"data-ak-layout\": \"true\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n\nexport function ShellMain(props: ShellMainMainProps): JSX.Element;\nexport function ShellMain(props: ShellMainDivProps): JSX.Element;\nexport function ShellMain(props: ShellMainAsChildProps): JSX.Element;\nexport function ShellMain(props: ShellMainMainProps | ShellMainDivProps | ShellMainAsChildProps) {\n const as = \"as\" in props ? props.as : \"main\";\n const { asChild, children, class: className, ref, ...rest } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell-main\", className),\n \"data-slot\": \"shell-main\",\n \"data-ak-layout\": \"true\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n if (as === \"div\") {\n return <div {...finalProps}>{children}</div>;\n }\n\n return <main {...finalProps}>{children}</main>;\n}\n"],"mappings":";;;;;AAeA,SAAgB,MAAM,OAA0C;CAC9D,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,UAAU,WAAW,KAAK,GAAG,SAAS;CAEnF,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,SAAS,UAAU;EAClC,aAAa;EACb,kBAAkB;EAClB,gBAAgB;EACjB,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAA2B,CAAA;CAG5E,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;EAAe,CAAA;;AAK9C,SAAgB,SAAS,OAAgD;CACvE,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAC9D,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,aAAa,UAAU;EACtC,aAAa;EACb,kBAAkB;EACnB,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAA2B,CAAA;CAG5E,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;EAAe,CAAA;;AAM9C,SAAgB,UAAU,OAAuE;CAC/F,MAAM,KAAK,QAAQ,QAAQ,MAAM,KAAK;CACtC,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAC9D,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,cAAc,UAAU;EACvC,aAAa;EACb,kBAAkB;EACnB,CAAC;CAEF,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;EAA2B,CAAA;CAG5E,IAAI,OAAO,OACT,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;EAAe,CAAA;CAG9C,OAAO,oBAAC,QAAD;EAAM,GAAI;EAAa;EAAgB,CAAA"}
1
+ {"version":3,"file":"shell.js","names":[],"sources":["../../../src/components/shell/shell.tsx"],"sourcesContent":["import { Slot } from \"@askrjs/askr/foundations\";\nimport { classes } from \"../_internal/classes\";\nimport { mergeProps } from \"../_internal/merge-props\";\nimport type {\n ShellAsChildProps,\n ShellDivProps,\n ShellMainAsChildProps,\n ShellMainDivProps,\n ShellMainMainProps,\n ShellNavAsChildProps,\n ShellNavDivProps,\n} from \"./shell.types\";\n\nexport function Shell(props: ShellDivProps): JSX.Element;\nexport function Shell(props: ShellAsChildProps): JSX.Element;\nexport function Shell(props: ShellDivProps | ShellAsChildProps) {\n const { asChild, children, class: className, variant = \"sidebar\", ref, ...rest } = props;\n\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell\", className),\n \"data-slot\": \"shell\",\n \"data-ak-layout\": \"true\",\n \"data-variant\": variant,\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n\nexport function ShellNav(props: ShellNavDivProps): JSX.Element;\nexport function ShellNav(props: ShellNavAsChildProps): JSX.Element;\nexport function ShellNav(props: ShellNavDivProps | ShellNavAsChildProps) {\n const { asChild, children, class: className, ref, ...rest } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell-nav\", className),\n \"data-slot\": \"shell-nav\",\n \"data-ak-layout\": \"true\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n return <div {...finalProps}>{children}</div>;\n}\n\nexport function ShellMain(props: ShellMainMainProps): JSX.Element;\nexport function ShellMain(props: ShellMainDivProps): JSX.Element;\nexport function ShellMain(props: ShellMainAsChildProps): JSX.Element;\nexport function ShellMain(props: ShellMainMainProps | ShellMainDivProps | ShellMainAsChildProps) {\n const as = \"as\" in props ? props.as : \"main\";\n const { asChild, children, class: className, ref, ...rest } = props;\n const finalProps = mergeProps(rest, {\n ref,\n class: classes(\"shell-main\", className),\n \"data-slot\": \"shell-main\",\n \"data-ak-layout\": \"true\",\n });\n\n if (asChild) {\n return <Slot asChild {...finalProps} children={children as JSX.Element} />;\n }\n\n if (as === \"div\") {\n return <div {...finalProps}>{children}</div>;\n }\n\n return <main {...finalProps}>{children}</main>;\n}\n"],"mappings":";;;;;AAeA,SAAgB,MAAM,OAA0C;CAC9D,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,UAAU,WAAW,KAAK,GAAG,SAAS;CAEnF,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,SAAS,SAAS;EACjC,aAAa;EACb,kBAAkB;EAClB,gBAAgB;CAClB,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAA0B,CAAA;CAG3E,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;CAAc,CAAA;AAC7C;AAIA,SAAgB,SAAS,OAAgD;CACvE,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAC9D,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,aAAa,SAAS;EACrC,aAAa;EACb,kBAAkB;CACpB,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAA0B,CAAA;CAG3E,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;CAAc,CAAA;AAC7C;AAKA,SAAgB,UAAU,OAAuE;CAC/F,MAAM,KAAK,QAAQ,QAAQ,MAAM,KAAK;CACtC,MAAM,EAAE,SAAS,UAAU,OAAO,WAAW,KAAK,GAAG,SAAS;CAC9D,MAAM,aAAa,WAAW,MAAM;EAClC;EACA,OAAO,QAAQ,cAAc,SAAS;EACtC,aAAa;EACb,kBAAkB;CACpB,CAAC;CAED,IAAI,SACF,OAAO,oBAAC,MAAD;EAAM,SAAA;EAAQ,GAAI;EAAsB;CAA0B,CAAA;CAG3E,IAAI,OAAO,OACT,OAAO,oBAAC,OAAD;EAAK,GAAI;EAAa;CAAc,CAAA;CAG7C,OAAO,oBAAC,QAAD;EAAM,GAAI;EAAa;CAAe,CAAA;AAC/C"}
@@ -2,37 +2,27 @@ import { renderShellPanel } from "../shell/shell-panel.js";
2
2
  import { SidebarResponsiveContext } from "./sidebar.context.js";
3
3
  import { readContext } from "@askrjs/askr";
4
4
  //#region src/components/sidebar/sidebar-panel.tsx
5
+ const DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT = {
6
+ active: () => false,
7
+ collapseLabel: () => "Menu",
8
+ closePanel: () => void 0,
9
+ iconCollapsed: () => false,
10
+ isRailCollapsible: () => false,
11
+ orientation: () => "vertical",
12
+ panelId: () => void 0,
13
+ panelOpen: () => false,
14
+ togglePanel: () => void 0,
15
+ toggleRail: () => void 0
16
+ };
5
17
  function SidebarPanel(props) {
6
18
  const { active: activeProp, brand, children, class: className, collapseLabel: collapseLabelProp, onClose, open: openProp, panelId: panelIdProp, ref, ...rest } = props;
7
19
  const responsive = activeProp === void 0 || collapseLabelProp === void 0 || onClose === void 0 || openProp === void 0 || panelIdProp === void 0 ? (() => {
8
20
  try {
9
21
  return readContext(SidebarResponsiveContext);
10
22
  } catch {
11
- return {
12
- active: () => false,
13
- collapseLabel: () => "Menu",
14
- closePanel: () => void 0,
15
- iconCollapsed: () => false,
16
- isRailCollapsible: () => false,
17
- orientation: () => "vertical",
18
- panelId: () => void 0,
19
- panelOpen: () => false,
20
- togglePanel: () => void 0,
21
- toggleRail: () => void 0
22
- };
23
+ return DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT;
23
24
  }
24
- })() : {
25
- active: () => false,
26
- collapseLabel: () => "Menu",
27
- closePanel: () => void 0,
28
- iconCollapsed: () => false,
29
- isRailCollapsible: () => false,
30
- orientation: () => "vertical",
31
- panelId: () => void 0,
32
- panelOpen: () => false,
33
- togglePanel: () => void 0,
34
- toggleRail: () => void 0
35
- };
25
+ })() : DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT;
36
26
  const active = activeProp ?? responsive.active();
37
27
  const open = openProp ?? responsive.panelOpen();
38
28
  const panelId = panelIdProp ?? responsive.panelId();
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-panel.js","names":[],"sources":["../../../src/components/sidebar/sidebar-panel.tsx"],"sourcesContent":["import { readContext } from \"@askrjs/askr\";\nimport { renderShellPanel } from \"../shell/shell-panel\";\nimport { SidebarResponsiveContext } from \"./sidebar.context\";\nimport type { SidebarPanelProps } from \"./sidebar.types\";\n\nexport function SidebarPanel(props: SidebarPanelProps): JSX.Element | null {\n const {\n active: activeProp,\n brand,\n children,\n class: className,\n collapseLabel: collapseLabelProp,\n onClose,\n open: openProp,\n panelId: panelIdProp,\n ref,\n ...rest\n } = props;\n const needsResponsiveContext =\n activeProp === undefined ||\n collapseLabelProp === undefined ||\n onClose === undefined ||\n openProp === undefined ||\n panelIdProp === undefined;\n const responsive = needsResponsiveContext\n ? (() => {\n try {\n return readContext(SidebarResponsiveContext);\n } catch {\n return {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n iconCollapsed: () => false,\n isRailCollapsible: () => false,\n orientation: () => \"vertical\" as const,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n toggleRail: () => undefined,\n };\n }\n })()\n : {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n iconCollapsed: () => false,\n isRailCollapsible: () => false,\n orientation: () => \"vertical\" as const,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n toggleRail: () => undefined,\n };\n const active = activeProp ?? responsive.active();\n const open = openProp ?? responsive.panelOpen();\n const panelId = panelIdProp ?? responsive.panelId();\n const collapseLabel = collapseLabelProp ?? responsive.collapseLabel();\n const closePanel = onClose ?? responsive.closePanel;\n\n return renderShellPanel({\n active,\n brand,\n children,\n className,\n collapseLabel,\n dataOrientation: responsive.orientation(),\n onClose: closePanel,\n open,\n panelId,\n prefix: \"sidebar\",\n ref,\n rest,\n });\n}\n"],"mappings":";;;;AAKA,SAAgB,aAAa,OAA8C;CACzE,MAAM,EACJ,QAAQ,YACR,OACA,UACA,OAAO,WACP,eAAe,mBACf,SACA,MAAM,UACN,SAAS,aACT,KACA,GAAG,SACD;CAOJ,MAAM,aALJ,eAAe,KAAA,KACf,sBAAsB,KAAA,KACtB,YAAY,KAAA,KACZ,aAAa,KAAA,KACb,gBAAgB,KAAA,WAEP;EACL,IAAI;GACF,OAAO,YAAY,yBAAyB;UACtC;GACN,OAAO;IACL,cAAc;IACd,qBAAqB;IACrB,kBAAkB,KAAA;IAClB,qBAAqB;IACrB,yBAAyB;IACzB,mBAAmB;IACnB,eAAe,KAAA;IACf,iBAAiB;IACjB,mBAAmB,KAAA;IACnB,kBAAkB,KAAA;IACnB;;KAED,GACJ;EACE,cAAc;EACd,qBAAqB;EACrB,kBAAkB,KAAA;EAClB,qBAAqB;EACrB,yBAAyB;EACzB,mBAAmB;EACnB,eAAe,KAAA;EACf,iBAAiB;EACjB,mBAAmB,KAAA;EACnB,kBAAkB,KAAA;EACnB;CACL,MAAM,SAAS,cAAc,WAAW,QAAQ;CAChD,MAAM,OAAO,YAAY,WAAW,WAAW;CAC/C,MAAM,UAAU,eAAe,WAAW,SAAS;CACnD,MAAM,gBAAgB,qBAAqB,WAAW,eAAe;CACrE,MAAM,aAAa,WAAW,WAAW;CAEzC,OAAO,iBAAiB;EACtB;EACA;EACA;EACA;EACA;EACA,iBAAiB,WAAW,aAAa;EACzC,SAAS;EACT;EACA;EACA,QAAQ;EACR;EACA;EACD,CAAC"}
1
+ {"version":3,"file":"sidebar-panel.js","names":[],"sources":["../../../src/components/sidebar/sidebar-panel.tsx"],"sourcesContent":["import { readContext } from \"@askrjs/askr\";\nimport { renderShellPanel } from \"../shell/shell-panel\";\nimport { SidebarResponsiveContext } from \"./sidebar.context\";\nimport type { SidebarPanelProps } from \"./sidebar.types\";\n\nconst DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n iconCollapsed: () => false,\n isRailCollapsible: () => false,\n orientation: () => \"vertical\" as const,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n toggleRail: () => undefined,\n};\n\nexport function SidebarPanel(props: SidebarPanelProps): JSX.Element | null {\n const {\n active: activeProp,\n brand,\n children,\n class: className,\n collapseLabel: collapseLabelProp,\n onClose,\n open: openProp,\n panelId: panelIdProp,\n ref,\n ...rest\n } = props;\n const needsResponsiveContext =\n activeProp === undefined ||\n collapseLabelProp === undefined ||\n onClose === undefined ||\n openProp === undefined ||\n panelIdProp === undefined;\n const responsive = needsResponsiveContext\n ? (() => {\n try {\n return readContext(SidebarResponsiveContext);\n } catch {\n return DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT;\n }\n })()\n : DEFAULT_SIDEBAR_RESPONSIVE_CONTEXT;\n const active = activeProp ?? responsive.active();\n const open = openProp ?? responsive.panelOpen();\n const panelId = panelIdProp ?? responsive.panelId();\n const collapseLabel = collapseLabelProp ?? responsive.collapseLabel();\n const closePanel = onClose ?? responsive.closePanel;\n\n return renderShellPanel({\n active,\n brand,\n children,\n className,\n collapseLabel,\n dataOrientation: responsive.orientation(),\n onClose: closePanel,\n open,\n panelId,\n prefix: \"sidebar\",\n ref,\n rest,\n });\n}\n"],"mappings":";;;;AAKA,MAAM,qCAAqC;CACzC,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,qBAAqB;CACrB,yBAAyB;CACzB,mBAAmB;CACnB,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;CACnB,kBAAkB,KAAA;AACpB;AAEA,SAAgB,aAAa,OAA8C;CACzE,MAAM,EACJ,QAAQ,YACR,OACA,UACA,OAAO,WACP,eAAe,mBACf,SACA,MAAM,UACN,SAAS,aACT,KACA,GAAG,SACD;CAOJ,MAAM,aALJ,eAAe,KAAA,KACf,sBAAsB,KAAA,KACtB,YAAY,KAAA,KACZ,aAAa,KAAA,KACb,gBAAgB,KAAA,WAEP;EACL,IAAI;GACF,OAAO,YAAY,wBAAwB;EAC7C,QAAQ;GACN,OAAO;EACT;CACF,EAAA,CAAG,IACH;CACJ,MAAM,SAAS,cAAc,WAAW,OAAO;CAC/C,MAAM,OAAO,YAAY,WAAW,UAAU;CAC9C,MAAM,UAAU,eAAe,WAAW,QAAQ;CAClD,MAAM,gBAAgB,qBAAqB,WAAW,cAAc;CACpE,MAAM,aAAa,WAAW,WAAW;CAEzC,OAAO,iBAAiB;EACtB;EACA;EACA;EACA;EACA;EACA,iBAAiB,WAAW,YAAY;EACxC,SAAS;EACT;EACA;EACA,QAAQ;EACR;EACA;CACF,CAAC;AACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-toggle.js","names":[],"sources":["../../../src/components/sidebar/sidebar-toggle.tsx"],"sourcesContent":["import type { SidebarToggleProps } from \"./sidebar.types\";\n\nexport function SidebarToggle(_props: SidebarToggleProps): null {\n return null;\n}\n"],"mappings":";AAEA,SAAgB,cAAc,QAAkC;CAC9D,OAAO"}
1
+ {"version":3,"file":"sidebar-toggle.js","names":[],"sources":["../../../src/components/sidebar/sidebar-toggle.tsx"],"sourcesContent":["import type { SidebarToggleProps } from \"./sidebar.types\";\n\nexport function SidebarToggle(_props: SidebarToggleProps): null {\n return null;\n}\n"],"mappings":";AAEA,SAAgB,cAAc,QAAkC;CAC9D,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.context.js","names":[],"sources":["../../../src/components/sidebar/sidebar.context.ts"],"sourcesContent":["import { defineContext } from \"@askrjs/askr\";\n\nexport type SidebarContextValue = {\n orientation: () => \"vertical\";\n};\n\nexport type SidebarResponsiveContextValue = {\n active: () => boolean;\n collapseLabel: () => string;\n closePanel: () => void;\n iconCollapsed: () => boolean;\n isRailCollapsible: () => boolean;\n orientation: () => \"vertical\";\n panelId: () => string | undefined;\n panelOpen: () => boolean;\n togglePanel: () => void;\n toggleRail: () => void;\n};\n\nconst defaultOrientation = () => \"vertical\" as const;\n\nconst defaultResponsiveContext: SidebarResponsiveContextValue = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n iconCollapsed: () => false,\n isRailCollapsible: () => false,\n orientation: defaultOrientation,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n toggleRail: () => undefined,\n};\n\nexport const SidebarContext = defineContext<SidebarContextValue>({\n orientation: defaultOrientation,\n});\n\nexport const SidebarResponsiveContext =\n defineContext<SidebarResponsiveContextValue>(defaultResponsiveContext);\n"],"mappings":";;AAmBA,MAAM,2BAA2B;AAEjC,MAAM,2BAA0D;CAC9D,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,qBAAqB;CACrB,yBAAyB;CACzB,aAAa;CACb,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;CACnB,kBAAkB,KAAA;CACnB;AAED,MAAa,iBAAiB,cAAmC,EAC/D,aAAa,oBACd,CAAC;AAEF,MAAa,2BACX,cAA6C,yBAAyB"}
1
+ {"version":3,"file":"sidebar.context.js","names":[],"sources":["../../../src/components/sidebar/sidebar.context.ts"],"sourcesContent":["import { defineContext } from \"@askrjs/askr\";\n\nexport type SidebarContextValue = {\n orientation: () => \"vertical\";\n};\n\nexport type SidebarResponsiveContextValue = {\n active: () => boolean;\n collapseLabel: () => string;\n closePanel: () => void;\n iconCollapsed: () => boolean;\n isRailCollapsible: () => boolean;\n orientation: () => \"vertical\";\n panelId: () => string | undefined;\n panelOpen: () => boolean;\n togglePanel: () => void;\n toggleRail: () => void;\n};\n\nconst defaultOrientation = () => \"vertical\" as const;\n\nconst defaultResponsiveContext: SidebarResponsiveContextValue = {\n active: () => false,\n collapseLabel: () => \"Menu\",\n closePanel: () => undefined,\n iconCollapsed: () => false,\n isRailCollapsible: () => false,\n orientation: defaultOrientation,\n panelId: () => undefined,\n panelOpen: () => false,\n togglePanel: () => undefined,\n toggleRail: () => undefined,\n};\n\nexport const SidebarContext = defineContext<SidebarContextValue>({\n orientation: defaultOrientation,\n});\n\nexport const SidebarResponsiveContext =\n defineContext<SidebarResponsiveContextValue>(defaultResponsiveContext);\n"],"mappings":";;AAmBA,MAAM,2BAA2B;AAEjC,MAAM,2BAA0D;CAC9D,cAAc;CACd,qBAAqB;CACrB,kBAAkB,KAAA;CAClB,qBAAqB;CACrB,yBAAyB;CACzB,aAAa;CACb,eAAe,KAAA;CACf,iBAAiB;CACjB,mBAAmB,KAAA;CACnB,kBAAkB,KAAA;AACpB;AAEA,MAAa,iBAAiB,cAAmC,EAC/D,aAAa,mBACf,CAAC;AAED,MAAa,2BACX,cAA6C,wBAAwB"}