@logicplanes/kaeso-ui 0.4.5 → 0.4.7

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 (56) hide show
  1. package/ai/component-guides.md +1 -1
  2. package/ai/component-registry.json +1 -1
  3. package/ai/component-registry.md +1 -1
  4. package/ai/icons.md +1 -1
  5. package/ai/tokens.md +1 -1
  6. package/dist/blocks/pages.js +2 -2
  7. package/dist/blocks/resource-list.js +1 -1
  8. package/dist/chunks/{app-frame-DysOel2X.js → app-frame-CfJ7s3Q0.js} +2 -2
  9. package/dist/chunks/{app-frame-DysOel2X.js.map → app-frame-CfJ7s3Q0.js.map} +1 -1
  10. package/dist/chunks/{core-CmK-8ObW.js → core-B0bULn-t.js} +9 -8
  11. package/dist/chunks/core-B0bULn-t.js.map +1 -0
  12. package/dist/chunks/data-table-z7z6DqMJ.js +602 -0
  13. package/dist/chunks/data-table-z7z6DqMJ.js.map +1 -0
  14. package/dist/chunks/{domain-obd_w9xk.js → domain-BsM9UmAg.js} +2 -2
  15. package/dist/chunks/{domain-obd_w9xk.js.map → domain-BsM9UmAg.js.map} +1 -1
  16. package/dist/chunks/{identity-3Foi5F8w.js → identity-BQoh-UpW.js} +7 -3
  17. package/dist/chunks/identity-BQoh-UpW.js.map +1 -0
  18. package/dist/chunks/{list-B4G-sWwV.js → list-CU_AoVY3.js} +115 -92
  19. package/dist/chunks/list-CU_AoVY3.js.map +1 -0
  20. package/dist/chunks/{page-header-kS5tdmvb.js → page-header-BQijP6Rp.js} +2 -2
  21. package/dist/chunks/{page-header-kS5tdmvb.js.map → page-header-BQijP6Rp.js.map} +1 -1
  22. package/dist/chunks/{theme-provider-DJhORMlc.js → theme-provider-BjXTggqM.js} +6 -2
  23. package/dist/chunks/theme-provider-BjXTggqM.js.map +1 -0
  24. package/dist/chunks/{timeseries-Ck-q0wWn.js → timeseries-nDviPxvQ.js} +3 -3
  25. package/dist/chunks/{timeseries-Ck-q0wWn.js.map → timeseries-nDviPxvQ.js.map} +1 -1
  26. package/dist/components/app-frame.js +1 -1
  27. package/dist/components/charts/bar.js +2 -2
  28. package/dist/components/charts/donut.js +1 -1
  29. package/dist/components/charts/gauge.js +1 -1
  30. package/dist/components/charts/heatmap.js +1 -1
  31. package/dist/components/charts/sankey.js +2 -2
  32. package/dist/components/charts/timeseries.js +1 -1
  33. package/dist/components/charts.js +2 -2
  34. package/dist/components/data-table.js +1 -1
  35. package/dist/components/kaeso/identity.js +1 -1
  36. package/dist/components/kaeso/usage.js +1 -1
  37. package/dist/components/kaeso.js +3 -3
  38. package/dist/components/kaeso.js.map +1 -1
  39. package/dist/components/list.js +1 -1
  40. package/dist/components/page-header.js +1 -1
  41. package/dist/components/playground.js +1 -1
  42. package/dist/components/theme-menu.js +1 -1
  43. package/dist/components/theme-select.js +1 -1
  44. package/dist/components/toast.js +40 -38
  45. package/dist/components/toast.js.map +1 -1
  46. package/dist/index.js +8 -8
  47. package/dist/kaeso.css +8 -0
  48. package/dist/styles.css +1 -1
  49. package/dist/theme.js +1 -1
  50. package/package.json +2 -2
  51. package/dist/chunks/core-CmK-8ObW.js.map +0 -1
  52. package/dist/chunks/data-table-CqY8_6IS.js +0 -581
  53. package/dist/chunks/data-table-CqY8_6IS.js.map +0 -1
  54. package/dist/chunks/identity-3Foi5F8w.js.map +0 -1
  55. package/dist/chunks/list-B4G-sWwV.js.map +0 -1
  56. package/dist/chunks/theme-provider-DJhORMlc.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component guides
2
2
 
3
- Version 0.4.5. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
3
+ Version 0.4.7. Generated from the showcase's demo modules (apps/showcase/src/demos); do not edit. For each component: what it is for, its import, keyboard, accessibility, do and don't, and every example's code. Props and variants: `component-registry.md`.
4
4
 
5
5
  ## AgentAttribution
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "package": "@logicplanes/kaeso-ui",
3
- "version": "0.4.5",
3
+ "version": "0.4.7",
4
4
  "components": [
5
5
  {
6
6
  "entry": "agent-avatar",
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui component registry
2
2
 
3
- Version 0.4.5. Generated from the component types, their descriptions and variants; do not edit.
3
+ Version 0.4.7. Generated from the component types, their descriptions and variants; do not edit.
4
4
 
5
5
  ## agent-avatar
6
6
 
package/ai/icons.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Icon vocabulary
2
2
 
3
- Version 0.4.5. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
3
+ Version 0.4.7. Generated from `src/icons/vocabulary.ts`; do not edit. Use the name, never an icon picked by look: `icons.key` always means a key. Hugeicons, Stroke Rounded. Rules: `foundations/icons.md`.
4
4
 
5
5
  ## Kaeso objects
6
6
 
package/ai/tokens.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @logicplanes/kaeso-ui tokens
2
2
 
3
- Version 0.4.5. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
3
+ Version 0.4.7. Generated from `@logicplanes/kaeso-tokens`; do not edit. Components use these through role names (`bg-panel`, `text-fg-secondary`, `h-36`, `rounded-pill`); a raw value never appears in a component. How to use them: `foundations/*.md`.
4
4
 
5
5
  ## Neutrals
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/app-frame-DysOel2X.js";
3
- import { r as t } from "../chunks/page-header-kS5tdmvb.js";
2
+ import { t as e } from "../chunks/app-frame-CfJ7s3Q0.js";
3
+ import { r as t } from "../chunks/page-header-BQijP6Rp.js";
4
4
  import { t as n } from "../chunks/empty-BpiUgGzm.js";
5
5
  import { a as r, t as i } from "../chunks/section-CFBYhsUi.js";
6
6
  import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
@@ -4,7 +4,7 @@ import { n } from "../chunks/button-IblhXUyZ.js";
4
4
  import { o as r } from "../chunks/input-Bo5-UZg2.js";
5
5
  import { r as i } from "../chunks/toolbar-u0Gm7Q7-.js";
6
6
  import { t as a } from "../chunks/empty-BpiUgGzm.js";
7
- import { i as o, o as s } from "../chunks/list-B4G-sWwV.js";
7
+ import { i as o, o as s } from "../chunks/list-CU_AoVY3.js";
8
8
  import { forwardRef as c, useMemo as l, useState as u } from "react";
9
9
  import { jsx as d, jsxs as f } from "react/jsx-runtime";
10
10
  //#region src/blocks/resource-list/resource-list.tsx
@@ -195,7 +195,7 @@ var V = /* @__PURE__ */ p(function({ title: t, description: i, actions: a, class
195
195
  ref: l,
196
196
  className: "relative",
197
197
  children: [/* @__PURE__ */ S(L, { className: "absolute top-10 left-24 z-10" }), /* @__PURE__ */ C("div", {
198
- className: e("mx-auto w-full max-w-settings px-24 pt-16 pb-96 lg:pt-64", o),
198
+ className: e("w-full px-24 pt-16 pb-96 lg:mx-auto lg:max-w-settings lg:pt-64", o),
199
199
  ...c,
200
200
  children: [/* @__PURE__ */ C("header", {
201
201
  className: "flex flex-wrap items-start justify-between gap-x-16 gap-y-8",
@@ -229,4 +229,4 @@ var H = /* @__PURE__ */ Object.assign(k, {
229
229
  //#endregion
230
230
  export { T as a, E as i, z as n, M as o, R as r, O as s, H as t };
231
231
 
232
- //# sourceMappingURL=app-frame-DysOel2X.js.map
232
+ //# sourceMappingURL=app-frame-CfJ7s3Q0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-frame-DysOel2X.js","names":["__icon_SidebarLeftIcon","cn","GutterContent","useLazyModule","lazyModule","buttonClasses","IconButton","BrandWordmark","whenIdle","KAESO_APP_FRAME_VARIANTS","KAESO_APP_FRAME_DEFAULT_VARIANTS","Ctx","useAppFrame","useContext","Root","navOpen","setNavOpen","useState","toggle","useRef","sheetReady","mainId","useId","Main","fill","frame","useMemo","sheet","FrameSheet","sidebar","className","SkipLink","PhoneBar","brandHref","brandLabel","phoneActions","o","corner","PortalContainer","t","useUiText","target","main","Bar","banner","actions","toggleRef","SidebarLeftIcon","open","onToggle","PEEK_DELAY","PEEK_LEAVE","navSheet","n","useSidebar","idle","setIdle","dismiss","useCallback","setPeeking","NavSheet","peeking","pending","useLayoutEffect","usePendingDismiss","doc","onKeyDown","onPointerDown","MenuButton","intent","wide","collapsed","shortcut","setCollapsed","openNav","KAESO_APP_FRAME_BODY_VARIANTS","KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS","Body","props","padding","Settings","title","description","InsetContent","AppFrame"],"sources":["../../src/components/app-frame/app-frame.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SidebarLeftIcon as __icon_SidebarLeftIcon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { buttonClasses } from \"../button/button.js\";\nimport { useSidebar, BrandWordmark } from \"../sidebar/sidebar.js\";\nimport { PortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_APP_FRAME_VARIANTS = {\n fill: {\n screen: { classes: \"h-dvh\" },\n parent: { classes: \"h-full\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_DEFAULT_VARIANTS = { fill: \"screen\" } as const;\n\nconst Ctx = /* @__PURE__ */ createContext<{ openNav: () => void; embedded: boolean; sheetReady: RefObject<boolean> }>({\n openNav: () => undefined,\n embedded: false,\n sheetReady: { current: false },\n});\nexport const useAppFrame = () => useContext(Ctx);\n\nexport interface AppFrameProps {\n sidebar: ReactNode;\n children: ReactNode;\n corner?: ReactNode | undefined;\n fill?: keyof typeof KAESO_APP_FRAME_VARIANTS.fill | undefined;\n brandHref?: string | undefined;\n brandLabel?: string | undefined;\n phoneActions?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameProps>(function AppFrame(\n { sidebar, children, corner, fill = \"screen\", brandHref, brandLabel, phoneActions, className },\n ref,\n) {\n const [navOpen, setNavOpen] = useState(false);\n const toggle = useRef<HTMLButtonElement | null>(null);\n const sheetReady = useRef(false);\n const mainId = `k-main-${useId().replace(/[^\\w-]/g, \"\")}`;\n const Main = fill === \"screen\" ? \"main\" : \"div\";\n const frame = useMemo(() => ({ openNav: () => setNavOpen(true), embedded: fill === \"parent\", sheetReady }), [fill]);\n const sheet = (\n <FrameSheet navOpen={navOpen} setNavOpen={setNavOpen} toggle={toggle} ready={sheetReady}>\n {sidebar}\n </FrameSheet>\n );\n return (\n <Ctx.Provider value={frame}>\n <div\n ref={ref}\n data-app-frame={fill}\n className={cn(\n \"relative isolate flex w-full flex-col overflow-hidden bg-chrome text-fg lg:flex-row\",\n KAESO_APP_FRAME_VARIANTS.fill[fill].classes,\n className,\n )}\n >\n <SkipLink target={mainId} />\n <div className=\"hidden h-full lg:flex\">{sidebar}</div>\n <PhoneBar\n banner={fill === \"screen\"}\n href={brandHref}\n label={brandLabel}\n actions={phoneActions}\n open={navOpen}\n onToggle={() => setNavOpen((o) => !o)}\n toggleRef={toggle}\n />\n <Main\n id={mainId}\n className=\"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-panel outline-none safe-area-panel lg:my-8 lg:mr-8 lg:rounded-panel lg:shadow-panel\"\n >\n {children}\n </Main>\n {corner && <div className={cn(fill === \"parent\" ? \"absolute\" : \"fixed\", \"right-16 bottom-16 z-10 flex items-center gap-8\")}>{corner}</div>}\n {fill === \"parent\" ? <PortalContainer className=\"contents\">{sheet}</PortalContainer> : sheet}\n </div>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"AppFrame\";\n\nfunction SkipLink({ target }: { target: string }) {\n const t = useUiText();\n return (\n <a\n href={`#${target}`}\n onClick={(e) => {\n const main = document.getElementById(target);\n if (!main) return;\n e.preventDefault();\n main.setAttribute(\"tabindex\", \"-1\");\n main.addEventListener(\"blur\", () => main.removeAttribute(\"tabindex\"), { once: true });\n main.focus();\n }}\n className={cn(buttonClasses({ size: \"sm\" }), \"absolute top-16 left-16 z-50 not-focus:sr-only\")}\n >\n {t(\"appFrame.skipToContent\", \"Skip to content\")}\n </a>\n );\n}\nif (process.env.NODE_ENV !== \"production\") SkipLink.displayName = \"AppFrame.SkipLink\";\n\nfunction PhoneBar({\n banner,\n href,\n label,\n actions,\n open,\n onToggle,\n toggleRef,\n}: {\n banner: boolean;\n href: string | undefined;\n label: string | undefined;\n actions: ReactNode;\n open: boolean;\n onToggle: () => void;\n toggleRef: RefObject<HTMLButtonElement | null>;\n}) {\n const Bar = banner ? \"header\" : \"div\";\n const t = useUiText();\n return (\n <Bar data-phone-bar=\"\" className=\"shrink-0 bg-panel safe-area-bar lg:hidden\">\n <div className=\"mt-8 flex h-52 items-center justify-between px-24\">\n <BrandWordmark href={href} label={label} />\n <span className=\"flex items-center\">\n {actions}\n <IconButton\n ref={toggleRef}\n icon={__icon_SidebarLeftIcon}\n aria-label={t(\"appFrame.openNavigation\", \"Open navigation\")}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n tooltip={false}\n onClick={onToggle}\n />\n </span>\n </div>\n </Bar>\n );\n}\nif (process.env.NODE_ENV !== \"production\") PhoneBar.displayName = \"AppFrame.PhoneBar\";\n\nexport const PEEK_DELAY = 750;\nconst PEEK_LEAVE = 160;\n\nconst navSheet = /* @__PURE__ */ lazyModule(() => import(\"./nav-sheet.js\"), { base: () => import.meta.url });\n\nfunction FrameSheet({\n navOpen,\n setNavOpen,\n toggle,\n ready,\n children,\n}: {\n navOpen: boolean;\n setNavOpen: (o: boolean) => void;\n toggle: RefObject<HTMLElement | null>;\n ready: RefObject<boolean>;\n children: ReactNode;\n}) {\n const { peeking, setPeeking } = useSidebar();\n const [idle, setIdle] = useState(false);\n useEffect(() => whenIdle(() => setIdle(true)), []);\n const dismiss = useCallback(() => {\n setNavOpen(false);\n setPeeking(false);\n }, [setNavOpen, setPeeking]);\n const NavSheet = useLazyModule(navSheet, idle || navOpen || peeking, () => {\n setIdle(false);\n dismiss();\n })?.NavSheet;\n const pending = (navOpen || peeking) && !NavSheet;\n useLayoutEffect(() => {\n ready.current = !!NavSheet;\n });\n usePendingDismiss(pending, toggle, dismiss);\n if (!NavSheet) return null;\n return (\n <NavSheet\n open={navOpen || peeking}\n peek={peeking && !navOpen}\n {...(navOpen ? { returnFocus: toggle } : {})}\n onOpenChange={(o) => {\n if (!o) dismiss();\n }}\n >\n {children}\n </NavSheet>\n );\n}\n\nfunction usePendingDismiss(pending: boolean, toggle: RefObject<HTMLElement | null>, dismiss: () => void) {\n useEffect(() => {\n if (!pending) return;\n const doc = toggle.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n dismiss();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!toggle.current?.contains(e.target as Node)) dismiss();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, toggle, dismiss]);\n}\n\nconst MenuButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, { className?: string | undefined }>(function AppFrameMenuButton({ className }, ref) {\n const { openNav, sheetReady } = useAppFrame();\n const { collapsed, setCollapsed, peeking, setPeeking, shortcut } = useSidebar();\n const intent = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(intent.current), []);\n const t = useUiText();\n const wide = () => typeof window !== \"undefined\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n return (\n <IconButton\n ref={ref}\n onPointerEnter={() => {\n clearTimeout(intent.current);\n if (collapsed && wide() && !peeking) intent.current = setTimeout(() => setPeeking(true), PEEK_DELAY);\n }}\n onPointerLeave={(e) => {\n clearTimeout(intent.current);\n if (!sheetReady.current || !peeking) return setPeeking(false);\n const doc = e.currentTarget.ownerDocument;\n intent.current = setTimeout(() => {\n if (!doc.querySelector(\"[data-nav-sheet]\")?.matches(\":hover\")) setPeeking(false);\n }, PEEK_LEAVE);\n }}\n icon={__icon_SidebarLeftIcon}\n data-sidebar-expand=\"\"\n aria-label={collapsed ? t(\"appFrame.expandSidebar\", \"Expand sidebar\") : t(\"appFrame.openNavigation\", \"Open navigation\")}\n shortcut={collapsed && shortcut ? [\"[\"] : undefined}\n onClick={() => {\n clearTimeout(intent.current);\n if (collapsed && wide()) setCollapsed(false);\n else openNav();\n }}\n className={cn(\"hidden\", collapsed && \"lg:inline-flex\", className)}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") MenuButton.displayName = \"AppFrame.MenuButton\";\n\nexport const KAESO_APP_FRAME_BODY_VARIANTS = {\n padding: {\n none: { classes: \"\" },\n list: { classes: \"pt-8 pb-24\" },\n page: { classes: \"px-24 pt-16 pb-48\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS = { padding: \"none\" } as const;\n\nexport interface AppFrameBodyProps extends HTMLAttributes<HTMLDivElement> {\n padding?: keyof typeof KAESO_APP_FRAME_BODY_VARIANTS.padding | undefined;\n}\n\nconst Body = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameBodyProps>(function AppFrameBody({ className, padding = \"none\", children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"min-h-0 flex-1 overflow-y-auto overscroll-contain scrollbar-quiet\", KAESO_APP_FRAME_BODY_VARIANTS.padding[padding].classes, className)}\n {...props}\n >\n <GutterContent padded={padding === \"page\"}>{children}</GutterContent>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Body.displayName = \"AppFrame.Body\";\n\nexport interface SettingsPageProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n}\n\nconst Settings = /* @__PURE__ */ forwardRef<HTMLDivElement, SettingsPageProps>(function AppFrameSettings({ title, description, actions, className, children, ...props }, ref) {\n return (\n <Body ref={ref} className=\"relative\">\n <MenuButton className=\"absolute top-10 left-24 z-10\" />\n <div className={cn(\"mx-auto w-full max-w-settings px-24 pt-16 pb-96 lg:pt-64\", className)} {...props}>\n <header className=\"flex flex-wrap items-start justify-between gap-x-16 gap-y-8\">\n <h1 className=\"min-w-0 text-title-lg font-semibold text-fg text-balance\">{title}</h1>\n {actions && <div className=\"order-last flex h-34 shrink-0 items-center gap-8 sm:order-none sm:ml-auto\">{actions}</div>}\n {description && <p className=\"basis-full text-body-lg font-regular text-fg-secondary\">{description}</p>}\n </header>\n <div className=\"mt-8\">\n <InsetContent>\n <GutterContent>{children}</GutterContent>\n </InsetContent>\n </div>\n </div>\n </Body>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Settings.displayName = \"AppFrame.Settings\";\n\nexport const AppFrame = /* @__PURE__ */ Object.assign(Root, { MenuButton, Body, Settings });\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-frame-CfJ7s3Q0.js","names":["__icon_SidebarLeftIcon","cn","GutterContent","useLazyModule","lazyModule","buttonClasses","IconButton","BrandWordmark","whenIdle","KAESO_APP_FRAME_VARIANTS","KAESO_APP_FRAME_DEFAULT_VARIANTS","Ctx","useAppFrame","useContext","Root","navOpen","setNavOpen","useState","toggle","useRef","sheetReady","mainId","useId","Main","fill","frame","useMemo","sheet","FrameSheet","sidebar","className","SkipLink","PhoneBar","brandHref","brandLabel","phoneActions","o","corner","PortalContainer","t","useUiText","target","main","Bar","banner","actions","toggleRef","SidebarLeftIcon","open","onToggle","PEEK_DELAY","PEEK_LEAVE","navSheet","n","useSidebar","idle","setIdle","dismiss","useCallback","setPeeking","NavSheet","peeking","pending","useLayoutEffect","usePendingDismiss","doc","onKeyDown","onPointerDown","MenuButton","intent","wide","collapsed","shortcut","setCollapsed","openNav","KAESO_APP_FRAME_BODY_VARIANTS","KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS","Body","props","padding","Settings","title","description","InsetContent","AppFrame"],"sources":["../../src/components/app-frame/app-frame.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { GutterContent, InsetContent } from \"../../utils/inset.js\";\nimport { cn } from \"../../utils/cn.js\";\nimport { SidebarLeftIcon as __icon_SidebarLeftIcon } from \"@hugeicons/core-free-icons\";\nimport { IconButton } from \"../icon-button/icon-button.js\";\nimport { buttonClasses } from \"../button/button.js\";\nimport { useSidebar, BrandWordmark } from \"../sidebar/sidebar.js\";\nimport { PortalContainer } from \"../../utils/portal-context.js\";\nimport { lazyModule, useLazyModule } from \"../../utils/lazy-module.js\";\nimport { whenIdle } from \"../../utils/when-idle.js\";\nimport { useUiText } from \"../../i18n/context.js\";\n\nexport const KAESO_APP_FRAME_VARIANTS = {\n fill: {\n screen: { classes: \"h-dvh\" },\n parent: { classes: \"h-full\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_DEFAULT_VARIANTS = { fill: \"screen\" } as const;\n\nconst Ctx = /* @__PURE__ */ createContext<{ openNav: () => void; embedded: boolean; sheetReady: RefObject<boolean> }>({\n openNav: () => undefined,\n embedded: false,\n sheetReady: { current: false },\n});\nexport const useAppFrame = () => useContext(Ctx);\n\nexport interface AppFrameProps {\n sidebar: ReactNode;\n children: ReactNode;\n corner?: ReactNode | undefined;\n fill?: keyof typeof KAESO_APP_FRAME_VARIANTS.fill | undefined;\n brandHref?: string | undefined;\n brandLabel?: string | undefined;\n phoneActions?: ReactNode | undefined;\n className?: string | undefined;\n}\n\nconst Root = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameProps>(function AppFrame(\n { sidebar, children, corner, fill = \"screen\", brandHref, brandLabel, phoneActions, className },\n ref,\n) {\n const [navOpen, setNavOpen] = useState(false);\n const toggle = useRef<HTMLButtonElement | null>(null);\n const sheetReady = useRef(false);\n const mainId = `k-main-${useId().replace(/[^\\w-]/g, \"\")}`;\n const Main = fill === \"screen\" ? \"main\" : \"div\";\n const frame = useMemo(() => ({ openNav: () => setNavOpen(true), embedded: fill === \"parent\", sheetReady }), [fill]);\n const sheet = (\n <FrameSheet navOpen={navOpen} setNavOpen={setNavOpen} toggle={toggle} ready={sheetReady}>\n {sidebar}\n </FrameSheet>\n );\n return (\n <Ctx.Provider value={frame}>\n <div\n ref={ref}\n data-app-frame={fill}\n className={cn(\n \"relative isolate flex w-full flex-col overflow-hidden bg-chrome text-fg lg:flex-row\",\n KAESO_APP_FRAME_VARIANTS.fill[fill].classes,\n className,\n )}\n >\n <SkipLink target={mainId} />\n <div className=\"hidden h-full lg:flex\">{sidebar}</div>\n <PhoneBar\n banner={fill === \"screen\"}\n href={brandHref}\n label={brandLabel}\n actions={phoneActions}\n open={navOpen}\n onToggle={() => setNavOpen((o) => !o)}\n toggleRef={toggle}\n />\n <Main\n id={mainId}\n className=\"relative flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-panel outline-none safe-area-panel lg:my-8 lg:mr-8 lg:rounded-panel lg:shadow-panel\"\n >\n {children}\n </Main>\n {corner && <div className={cn(fill === \"parent\" ? \"absolute\" : \"fixed\", \"right-16 bottom-16 z-10 flex items-center gap-8\")}>{corner}</div>}\n {fill === \"parent\" ? <PortalContainer className=\"contents\">{sheet}</PortalContainer> : sheet}\n </div>\n </Ctx.Provider>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Root.displayName = \"AppFrame\";\n\nfunction SkipLink({ target }: { target: string }) {\n const t = useUiText();\n return (\n <a\n href={`#${target}`}\n onClick={(e) => {\n const main = document.getElementById(target);\n if (!main) return;\n e.preventDefault();\n main.setAttribute(\"tabindex\", \"-1\");\n main.addEventListener(\"blur\", () => main.removeAttribute(\"tabindex\"), { once: true });\n main.focus();\n }}\n className={cn(buttonClasses({ size: \"sm\" }), \"absolute top-16 left-16 z-50 not-focus:sr-only\")}\n >\n {t(\"appFrame.skipToContent\", \"Skip to content\")}\n </a>\n );\n}\nif (process.env.NODE_ENV !== \"production\") SkipLink.displayName = \"AppFrame.SkipLink\";\n\nfunction PhoneBar({\n banner,\n href,\n label,\n actions,\n open,\n onToggle,\n toggleRef,\n}: {\n banner: boolean;\n href: string | undefined;\n label: string | undefined;\n actions: ReactNode;\n open: boolean;\n onToggle: () => void;\n toggleRef: RefObject<HTMLButtonElement | null>;\n}) {\n const Bar = banner ? \"header\" : \"div\";\n const t = useUiText();\n return (\n <Bar data-phone-bar=\"\" className=\"shrink-0 bg-panel safe-area-bar lg:hidden\">\n <div className=\"mt-8 flex h-52 items-center justify-between px-24\">\n <BrandWordmark href={href} label={label} />\n <span className=\"flex items-center\">\n {actions}\n <IconButton\n ref={toggleRef}\n icon={__icon_SidebarLeftIcon}\n aria-label={t(\"appFrame.openNavigation\", \"Open navigation\")}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n tooltip={false}\n onClick={onToggle}\n />\n </span>\n </div>\n </Bar>\n );\n}\nif (process.env.NODE_ENV !== \"production\") PhoneBar.displayName = \"AppFrame.PhoneBar\";\n\nexport const PEEK_DELAY = 750;\nconst PEEK_LEAVE = 160;\n\nconst navSheet = /* @__PURE__ */ lazyModule(() => import(\"./nav-sheet.js\"), { base: () => import.meta.url });\n\nfunction FrameSheet({\n navOpen,\n setNavOpen,\n toggle,\n ready,\n children,\n}: {\n navOpen: boolean;\n setNavOpen: (o: boolean) => void;\n toggle: RefObject<HTMLElement | null>;\n ready: RefObject<boolean>;\n children: ReactNode;\n}) {\n const { peeking, setPeeking } = useSidebar();\n const [idle, setIdle] = useState(false);\n useEffect(() => whenIdle(() => setIdle(true)), []);\n const dismiss = useCallback(() => {\n setNavOpen(false);\n setPeeking(false);\n }, [setNavOpen, setPeeking]);\n const NavSheet = useLazyModule(navSheet, idle || navOpen || peeking, () => {\n setIdle(false);\n dismiss();\n })?.NavSheet;\n const pending = (navOpen || peeking) && !NavSheet;\n useLayoutEffect(() => {\n ready.current = !!NavSheet;\n });\n usePendingDismiss(pending, toggle, dismiss);\n if (!NavSheet) return null;\n return (\n <NavSheet\n open={navOpen || peeking}\n peek={peeking && !navOpen}\n {...(navOpen ? { returnFocus: toggle } : {})}\n onOpenChange={(o) => {\n if (!o) dismiss();\n }}\n >\n {children}\n </NavSheet>\n );\n}\n\nfunction usePendingDismiss(pending: boolean, toggle: RefObject<HTMLElement | null>, dismiss: () => void) {\n useEffect(() => {\n if (!pending) return;\n const doc = toggle.current?.ownerDocument ?? document;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopPropagation();\n dismiss();\n };\n const onPointerDown = (e: PointerEvent) => {\n if (!toggle.current?.contains(e.target as Node)) dismiss();\n };\n doc.addEventListener(\"keydown\", onKeyDown, true);\n doc.addEventListener(\"pointerdown\", onPointerDown, true);\n return () => {\n doc.removeEventListener(\"keydown\", onKeyDown, true);\n doc.removeEventListener(\"pointerdown\", onPointerDown, true);\n };\n }, [pending, toggle, dismiss]);\n}\n\nconst MenuButton = /* @__PURE__ */ forwardRef<HTMLButtonElement, { className?: string | undefined }>(function AppFrameMenuButton({ className }, ref) {\n const { openNav, sheetReady } = useAppFrame();\n const { collapsed, setCollapsed, peeking, setPeeking, shortcut } = useSidebar();\n const intent = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(intent.current), []);\n const t = useUiText();\n const wide = () => typeof window !== \"undefined\" && window.matchMedia(\"(min-width: 1024px)\").matches;\n return (\n <IconButton\n ref={ref}\n onPointerEnter={() => {\n clearTimeout(intent.current);\n if (collapsed && wide() && !peeking) intent.current = setTimeout(() => setPeeking(true), PEEK_DELAY);\n }}\n onPointerLeave={(e) => {\n clearTimeout(intent.current);\n if (!sheetReady.current || !peeking) return setPeeking(false);\n const doc = e.currentTarget.ownerDocument;\n intent.current = setTimeout(() => {\n if (!doc.querySelector(\"[data-nav-sheet]\")?.matches(\":hover\")) setPeeking(false);\n }, PEEK_LEAVE);\n }}\n icon={__icon_SidebarLeftIcon}\n data-sidebar-expand=\"\"\n aria-label={collapsed ? t(\"appFrame.expandSidebar\", \"Expand sidebar\") : t(\"appFrame.openNavigation\", \"Open navigation\")}\n shortcut={collapsed && shortcut ? [\"[\"] : undefined}\n onClick={() => {\n clearTimeout(intent.current);\n if (collapsed && wide()) setCollapsed(false);\n else openNav();\n }}\n className={cn(\"hidden\", collapsed && \"lg:inline-flex\", className)}\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") MenuButton.displayName = \"AppFrame.MenuButton\";\n\nexport const KAESO_APP_FRAME_BODY_VARIANTS = {\n padding: {\n none: { classes: \"\" },\n list: { classes: \"pt-8 pb-24\" },\n page: { classes: \"px-24 pt-16 pb-48\" },\n },\n} as const;\nexport const KAESO_APP_FRAME_BODY_DEFAULT_VARIANTS = { padding: \"none\" } as const;\n\nexport interface AppFrameBodyProps extends HTMLAttributes<HTMLDivElement> {\n padding?: keyof typeof KAESO_APP_FRAME_BODY_VARIANTS.padding | undefined;\n}\n\nconst Body = /* @__PURE__ */ forwardRef<HTMLDivElement, AppFrameBodyProps>(function AppFrameBody({ className, padding = \"none\", children, ...props }, ref) {\n return (\n <div\n ref={ref}\n className={cn(\"min-h-0 flex-1 overflow-y-auto overscroll-contain scrollbar-quiet\", KAESO_APP_FRAME_BODY_VARIANTS.padding[padding].classes, className)}\n {...props}\n >\n <GutterContent padded={padding === \"page\"}>{children}</GutterContent>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Body.displayName = \"AppFrame.Body\";\n\nexport interface SettingsPageProps extends Omit<HTMLAttributes<HTMLDivElement>, \"title\"> {\n title: ReactNode;\n description?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n}\n\nconst Settings = /* @__PURE__ */ forwardRef<HTMLDivElement, SettingsPageProps>(function AppFrameSettings({ title, description, actions, className, children, ...props }, ref) {\n return (\n <Body ref={ref} className=\"relative\">\n <MenuButton className=\"absolute top-10 left-24 z-10\" />\n <div className={cn(\"w-full px-24 pt-16 pb-96 lg:mx-auto lg:max-w-settings lg:pt-64\", className)} {...props}>\n <header className=\"flex flex-wrap items-start justify-between gap-x-16 gap-y-8\">\n <h1 className=\"min-w-0 text-title-lg font-semibold text-fg text-balance\">{title}</h1>\n {actions && <div className=\"order-last flex h-34 shrink-0 items-center gap-8 sm:order-none sm:ml-auto\">{actions}</div>}\n {description && <p className=\"basis-full text-body-lg font-regular text-fg-secondary\">{description}</p>}\n </header>\n <div className=\"mt-8\">\n <InsetContent>\n <GutterContent>{children}</GutterContent>\n </InsetContent>\n </div>\n </div>\n </Body>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Settings.displayName = \"AppFrame.Settings\";\n\nexport const AppFrame = /* @__PURE__ */ Object.assign(Root, { MenuButton, Body, Settings });\n"],"mappings":";;;;;;;;;;;;;;AA0BA,IAAaS,IAA2B,EACtC,MAAM;CACJ,QAAQ,EAAE,SAAS,QAAQ;CAC3B,QAAQ,EAAE,SAAS,SAAS;AAC9B,EACF,GACaC,IAAmC,EAAE,MAAM,SAAS,GAE3DC,IAAsB,kBAA0F;CACpH,eAAe,KAAA;CACf,UAAU;CACV,YAAY,EAAE,SAAS,GAAM;AAC/B,CAAC,GACYC,UAAoBC,EAAWF,CAAG,GAazCG,IAAuB,kBAA0C,SACrE,EAAE,YAAS,aAAU,WAAQ,UAAO,UAAU,cAAW,eAAY,iBAAc,gBACnF,GACA;CACA,IAAM,CAACC,GAASC,KAAcC,EAAS,EAAK,GACtCC,IAASC,EAAiC,IAAI,GAC9CC,IAAaD,EAAO,EAAK,GACzBE,IAAS,UAAUC,EAAM,CAAC,CAAC,QAAQ,WAAW,EAAE,KAChDC,IAAOC,MAAS,WAAW,SAAS,OACpCC,IAAQC,SAAe;EAAE,eAAeV,EAAW,EAAI;EAAG,UAAUQ,MAAS;EAAU;CAAW,IAAI,CAACA,CAAI,CAAC,GAC5GG,IACJ,kBAACC,GAAD;EAAqB;EAAqB;EAAoB;EAAQ,OAAOR;EAC1E,UAAAS;CACS,CAAA;CAEd,OACE,kBAAClB,EAAI,UAAL;EAAc,OAAOc;EACnB,UAAA,kBAAC,OAAD;GACO;GACL,kBAAgBD;GAChB,WAAWvB,EACT,uFACAQ,EAAyB,KAAKe,EAAK,CAAC,SACpCM,CACF;GAPF,UAAA;IASE,kBAACC,GAAD,EAAU,QAAQV,EAAS,CAAA;IAC3B,kBAAC,OAAD;KAAK,WAAU;KAAyB,UAAAQ;IAAa,CAAA;IACrD,kBAACG,GAAD;KACE,QAAQR,MAAS;KACjB,MAAMS;KACN,OAAOC;KACP,SAASC;KACT,MAAMpB;KACN,gBAAgBC,GAAY,MAAM,CAACoB,CAAC;KACpC,WAAWlB;IACZ,CAAA;IACD,kBAACK,GAAD;KACE,IAAIF;KACJ,WAAU;KAET;IACG,CAAA;IACLgB,KAAU,kBAAC,OAAD;KAAK,WAAWpC,EAAGuB,MAAS,WAAW,aAAa,SAAS,iDAAiD;KAAI,UAAAa;IAAY,CAAA;IACxIb,MAAS,WAAW,kBAACc,GAAD;KAAiB,WAAU;KAAY,UAAAX;IAAuB,CAAA,IAAIA;GACpF;;CACO,CAAA;AAElB,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAK,cAAc;AAE9D,SAASI,EAAS,EAAE,aAA8B;CAChD,IAAMQ,IAAIC,EAAU;CACpB,OACE,kBAAC,KAAD;EACE,MAAM,IAAIC;EACV,UAAU,MAAM;GACd,IAAMC,IAAO,SAAS,eAAeD,CAAM;GAC3C,AAAKC,MACL,EAAE,eAAe,GACjBA,EAAK,aAAa,YAAY,IAAI,GAClCA,EAAK,iBAAiB,cAAcA,EAAK,gBAAgB,UAAU,GAAG,EAAE,MAAM,GAAK,CAAC,GACpFA,EAAK,MAAM;EACb;EACA,WAAWzC,EAAGI,EAAc,EAAE,MAAM,KAAK,CAAC,GAAG,gDAAgD;EAE5F,UAAAkC,EAAE,0BAA0B,iBAAiB;CAC7C,CAAA;AAEP;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc;AAElE,SAASP,EAAS,EAChB,WACA,SACA,UACA,YACA,SACA,aACA,gBASC;CACD,IAAMW,IAAMC,IAAS,WAAW,OAC1BL,IAAIC,EAAU;CACpB,OACE,kBAACG,GAAD;EAAK,kBAAe;EAAG,WAAU;EAC/B,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,kBAACpC,GAAD;IAAqB;IAAa;GAAQ,CAAA,GAC1C,kBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACGsC,GACD,kBAACvC,GAAD;KACE,KAAKwC;KACL,MAAM9C;KACN,cAAYuC,EAAE,2BAA2B,iBAAiB;KAC1D,iBAAc;KACd,iBAAeS;KACf,SAAS;KACT,SAASC;IACV,CAAA,CACG;GACH,CAAA,CAAA;;CACF,CAAA;AAET;AACA,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc;AAElE,IAAaC,IAAa,KACpBC,IAAa,KAEbC,IAA2B,wBAAiB,OAAO,0BAAA,CAAA,MAAA,MAAAC,EAAA,CAAA,GAAmB,EAAE,YAAY,YAAY,IAAI,CAAC;AAE3G,SAASzB,EAAW,EAClB,YACA,eACA,WACA,UACA,eAOC;CACD,IAAM,EAAE,YAAS,kBAAe0B,EAAW,GACrC,CAACC,GAAMC,KAAWvC,EAAS,EAAK;CACtC,QAAgBT,QAAegD,EAAQ,EAAI,CAAC,GAAG,CAAC,CAAC;CACjD,IAAMC,IAAUC,QAAkB;EAEhC,AADA1C,EAAW,EAAK,GAChB2C,EAAW,EAAK;CAClB,GAAG,CAAC3C,GAAY2C,CAAU,CAAC,GACrBC,IAAWzD,EAAciD,GAAUG,KAAQxC,KAAW8C,SAAe;EAEzE,AADAL,EAAQ,EAAK,GACbC,EAAQ;CACV,CAAC,CAAC,EAAE,UACEK,KAAW/C,KAAW8C,MAAY,CAACD;CAMzC,OALAG,QAAsB;EACpB,EAAM,UAAU,CAAC,CAACH;CACpB,CAAC,GACDI,EAAkBF,GAAS5C,GAAQuC,CAAO,GACrCG,IAEH,kBAACA,GAAD;EACE,MAAM7C,KAAW8C;EACjB,MAAMA,KAAW,CAAC9C;EAClB,GAAKA,IAAU,EAAE,aAAaG,EAAO,IAAI,CAAC;EAC1C,eAAe,MAAM;GACnB,AAAKkB,KAAGqB,EAAQ;EAClB;EAEC;CACO,CAAA,IAXU;AAaxB;AAEA,SAASO,EAAkB,GAAkB,GAAuC,GAAqB;CACvG,QAAgB;EACd,IAAI,CAACF,GAAS;EACd,IAAMG,IAAM/C,EAAO,SAAS,iBAAiB,UACvCgD,KAAa,MAAqB;GACtC,AAAI,EAAE,QAAQ,aACd,EAAE,gBAAgB,GAClBT,EAAQ;EACV,GACMU,KAAiB,MAAoB;GACzC,AAAKjD,EAAO,SAAS,SAAS,EAAE,MAAc,KAAGuC,EAAQ;EAC3D;EAGA,OAFAQ,EAAI,iBAAiB,WAAWC,GAAW,EAAI,GAC/CD,EAAI,iBAAiB,eAAeE,GAAe,EAAI,SAC1C;GAEX,AADAF,EAAI,oBAAoB,WAAWC,GAAW,EAAI,GAClDD,EAAI,oBAAoB,eAAeE,GAAe,EAAI;EAC5D;CACF,GAAG;EAACL;EAAS5C;EAAQuC;CAAO,CAAC;AAC/B;AAEA,IAAMW,IAA6B,kBAAkE,SAA4B,EAAE,gBAAa,GAAK;CACnJ,IAAM,EAAE,YAAS,kBAAexD,EAAY,GACtC,EAAE,cAAW,iBAAc,YAAS,eAAY,gBAAa0C,EAAW,GACxEe,IAASlD,EAAkD,KAAA,CAAS;CAC1E,cAAsB,aAAakD,EAAO,OAAO,GAAG,CAAC,CAAC;CACtD,IAAM9B,IAAIC,EAAU,GACd8B,UAAa,OAAO,SAAW,OAAe,OAAO,WAAW,qBAAqB,CAAC,CAAC;CAC7F,OACE,kBAAChE,GAAD;EACO;EACL,sBAAsB;GAEpB,AADA,aAAa+D,EAAO,OAAO,GACvBE,KAAaD,EAAK,KAAK,CAACT,MAAS,EAAO,UAAU,iBAAiBF,EAAW,EAAI,GAAA,GAAa;EACrG;EACA,iBAAiB,MAAM;GAErB,IADA,aAAaU,EAAO,OAAO,GACvB,CAACjD,EAAW,WAAW,CAACyC,GAAS,OAAOF,EAAW,EAAK;GAC5D,IAAMM,IAAM,EAAE,cAAc;GAC5B,EAAO,UAAU,iBAAiB;IAChC,AAAKA,EAAI,cAAc,kBAAkB,CAAC,EAAE,QAAQ,QAAQ,KAAGN,EAAW,EAAK;GACjF,GAAGR,CAAU;EACf;EACA,MAAMnD;EACN,uBAAoB;EACpB,cAAYuE,IAAYhC,EAAE,0BAA0B,gBAAgB,IAAIA,EAAE,2BAA2B,iBAAiB;EACtH,UAAUgC,KAAaC,IAAW,CAAC,GAAG,IAAI,KAAA;EAC1C,eAAe;GAEb,AADA,aAAaH,EAAO,OAAO,GACvBE,KAAaD,EAAK,IAAGG,EAAa,EAAK,IACtCC,EAAQ;EACf;EACA,WAAWzE,EAAG,UAAUsE,KAAa,kBAAkBzC,CAAS;CACjE,CAAA;AAEL,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAW,cAAc;AAEpE,IAAa6C,IAAgC,EAC3C,SAAS;CACP,MAAM,EAAE,SAAS,GAAG;CACpB,MAAM,EAAE,SAAS,aAAa;CAC9B,MAAM,EAAE,SAAS,oBAAoB;AACvC,EACF,GACaC,IAAwC,EAAE,SAAS,OAAO,GAMjEC,IAAuB,kBAA8C,SAAsB,EAAE,cAAW,aAAU,QAAQ,aAAU,GAAGC,KAAS,GAAK;CACzJ,OACE,kBAAC,OAAD;EACO;EACL,WAAW7E,EAAG,qEAAqE0E,EAA8B,QAAQI,EAAQ,CAAC,SAASjD,CAAS;EACpJ,GAAIgD;EAEJ,UAAA,kBAAC5E,GAAD;GAAe,QAAQ6E,MAAY;GAAS;EAAwB,CAAA;CACjE,CAAA;AAET,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAK,cAAc;AAQ9D,IAAMC,IAA2B,kBAA8C,SAA0B,EAAE,UAAO,gBAAa,YAAS,cAAW,aAAU,GAAGF,KAAS,GAAK;CAC5K,OACE,kBAACD,GAAD;EAAW;EAAK,WAAU;EAA1B,UAAA,CACE,kBAACT,GAAD,EAAY,WAAU,+BAAgC,CAAA,GACtD,kBAAC,OAAD;GAAK,WAAWnE,EAAG,kEAAkE6B,CAAS;GAAG,GAAIgD;GAArG,UAAA,CACE,kBAAC,UAAD;IAAQ,WAAU;IAAlB,UAAA;KACE,kBAAC,MAAD;MAAI,WAAU;MAA4D,UAAAG;KAAU,CAAA;KACnFpC,KAAW,kBAAC,OAAD;MAAK,WAAU;MAA6E,UAAAA;KAAa,CAAA;KACpHqC,KAAe,kBAAC,KAAD;MAAG,WAAU;MAA0D,UAAAA;KAAe,CAAA;IAChG;GACR,CAAA,GAAA,kBAAC,OAAD;IAAK,WAAU;IACb,UAAA,kBAACC,GAAD,EAAA,UACE,kBAACjF,GAAD,EAAgB,YAAwB,CAAA,EAC5B,CAAA;GACX,CAAA,CACF;EACD,CAAA,CAAA;;AAEV,CAAC;AACD,QAAA,IAAA,aAA6B,iBAAc,EAAS,cAAc;AAElE,IAAakF,IAA2B,uBAAO,OAAOtE,GAAM;CAAE;CAAY;CAAM;AAAS,CAAC"}
@@ -216,11 +216,12 @@ var I = /* @__PURE__ */ l(function({ label: n, height: r, children: i, table: c,
216
216
  })
217
217
  })]
218
218
  }),
219
- c && !S && /* @__PURE__ */ h("div", {
219
+ c && !S && !b && /* @__PURE__ */ h("div", {
220
220
  className: "sr-only",
221
221
  children: /* @__PURE__ */ h(L, {
222
222
  table: c,
223
- caption: n
223
+ caption: n,
224
+ hidden: !0
224
225
  })
225
226
  })
226
227
  ]
@@ -228,20 +229,20 @@ var I = /* @__PURE__ */ l(function({ label: n, height: r, children: i, table: c,
228
229
  });
229
230
  process.env.NODE_ENV !== "production" && (I.displayName = "ChartFrame");
230
231
  var ie = /^[^\p{L}]*\d[^\p{L}]*\p{L}{0,3}$/u;
231
- function L({ table: t, caption: n, sticky: r }) {
232
- let i = t.columns.map((e, n) => n > 0 && t.rows.every((e) => typeof e[n] == "number" || ie.test(String(e[n] ?? "").trim()) || e[n] === "–"));
233
- return /* @__PURE__ */ g(c, { children: [
232
+ function L({ table: t, caption: n, sticky: r, hidden: i }) {
233
+ let a = t.columns.map((e, n) => n > 0 && t.rows.every((e) => typeof e[n] == "number" || ie.test(String(e[n] ?? "").trim()) || e[n] === "–"));
234
+ return /* @__PURE__ */ g(i ? "table" : c, { children: [
234
235
  n && /* @__PURE__ */ h("caption", {
235
236
  className: "sr-only",
236
237
  children: n
237
238
  }),
238
239
  /* @__PURE__ */ h(c.Head, { children: /* @__PURE__ */ h(c.Row, { children: t.columns.map((t, n) => /* @__PURE__ */ h(c.HeaderCell, {
239
- align: i[n] ? "end" : "start",
240
+ align: a[n] ? "end" : "start",
240
241
  className: e(r && "sticky top-0 z-10 bg-panel"),
241
242
  children: t
242
243
  }, t)) }) }),
243
244
  /* @__PURE__ */ h(c.Body, { children: t.rows.map((e, t) => /* @__PURE__ */ h(c.Row, { children: e.map((e, t) => /* @__PURE__ */ h(c.Cell, {
244
- align: i[t] ? "end" : "start",
245
+ align: a[t] ? "end" : "start",
245
246
  children: e
246
247
  }, t)) }, t)) })
247
248
  ] });
@@ -502,4 +503,4 @@ var ce = (e, t, r = n) => r("chart.liveLine", "{heading}: {values}", {
502
503
  //#endregion
503
504
  export { x as A, ee as C, A as D, se as E, b as M, F as O, z as S, P as T, q as _, oe as a, O as b, R as c, C as d, D as f, ce as g, G as h, X as i, U as j, re as k, te as l, Q as m, I as n, ae as o, J as p, $ as r, Y as s, Z as t, S as u, B as v, ne as w, E as x, k as y };
504
505
 
505
- //# sourceMappingURL=core-CmK-8ObW.js.map
506
+ //# sourceMappingURL=core-B0bULn-t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-B0bULn-t.js","names":["cn","useUiText","mergeRefs","observeResize","SwapText","Button","Skeleton","Table","edgeColor","soft","color","wholeTicks","values","ticks","VIZ","VIZ_THIN","hash","h","i","s","NEAR","seriesIndex","id","assignSeries","out","ids","used","clash","k","keys","seriesColors","thin","seriesColor","tokenKindColor","tokenKindTint","tokenKindSeries","TOKEN_KIND_ORDER","tokenKindLabel","englishText","kind","useSize","el","setEl","useState","size","setSize","useLayoutEffect","set","ease","t","reducedMotion","mix","to","from","v","tweens","useTweened","key","tween","setTween","current","still","drawn","running","useEffect","start","raf","step","motion","useTweenedScale","any","top","ChartFrame","asTable","setAsTable","failed","state","blank","showTable","table","toTable","toChart","className","label","DataTablePlain","legend","toggle","NUMERIC","end","j","r","hidden","caption","sticky","c","Swatch","edge","off","shape","tickLabel","format","readableTicks","n","count","scale","lo","hi","dayNumber","d","m","yearOfDay","yearStarts","days","dates","prev","WIDE","labelWidth","em","ch","AXIS","LABEL_GAP","placeTimeLabels","placed","width","anchor","right","x","left","clear","a","b","kept","l","axisLabelIndexes","labels","fits","edges","room","every","starts","stride","score","p","best","Legend","onToggle","items","it","onHover","ChartTooltip","useRef","root","useMemo","ref","own","setOwn","node","next","heading","rows","visible","flip","wanted","xLeft","y","KAESO_CHARTS_VARIANTS","KAESO_CHARTS_DEFAULT_VARIANTS","chartKeyIndex","back","vertical","forward","index","useChartKeys","setIndex","options","keyboard","e","ChartLive","liveLine"],"sources":["../../src/components/charts/marks.ts","../../src/components/charts/core.tsx"],"sourcesContent":["export function edgeColor(color: string): string | undefined {\n const soft = /^var\\(--k-viz-(\\d)-soft\\)$/.exec(color);\n return soft ? `var(--k-viz-${soft[1]})` : undefined;\n}\n","import type * as React from \"react\";\nimport { forwardRef, useEffect, useLayoutEffect, useMemo, useRef, useState, type ReactNode } from \"react\";\nimport { cn } from \"../../utils/cn.js\";\nimport { observeResize } from \"../../utils/observe-resize.js\";\nimport { mergeRefs } from \"../../utils/merge-refs.js\";\nimport { motion, tokenKindSeries, tokenKindTint } from \"@logicplanes/kaeso-tokens\";\nimport { Skeleton } from \"../skeleton/skeleton.js\";\nimport { Button } from \"../button/button.js\";\nimport { SwapText } from \"../swap-text/swap-text.js\";\nimport { Table } from \"../table/table.js\";\nimport { edgeColor } from \"./marks.js\";\nimport { englishText, useUiText, type UiText } from \"../../i18n/context.js\";\n\nexport function wholeTicks(ticks: number[], values: number[]): number[] {\n return values.every(Number.isInteger) ? ticks.filter(Number.isInteger) : ticks;\n}\nexport const VIZ = [\n \"var(--k-viz-1)\",\n \"var(--k-viz-2)\",\n \"var(--k-viz-3)\",\n \"var(--k-viz-4)\",\n \"var(--k-viz-5)\",\n \"var(--k-viz-6)\",\n \"var(--k-viz-7)\",\n \"var(--k-viz-8)\",\n] as const;\nexport const VIZ_THIN = [\n \"var(--k-viz-thin-1)\",\n \"var(--k-viz-thin-2)\",\n \"var(--k-viz-thin-3)\",\n \"var(--k-viz-thin-4)\",\n \"var(--k-viz-thin-5)\",\n \"var(--k-viz-thin-6)\",\n \"var(--k-viz-thin-7)\",\n \"var(--k-viz-thin-8)\",\n] as const;\n\nfunction hash(s: string) {\n let h = 2166136261;\n for (let i = 0; i < s.length; i++) h = Math.imul(h ^ s.charCodeAt(i), 16777619);\n return Math.abs(h);\n}\nconst NEAR: Record<number, number> = { 1: 6, 6: 1, 2: 5, 5: 2, 3: 7, 7: 3 };\n\nexport function seriesIndex(id: string): number {\n return hash(id) % VIZ.length;\n}\n\nexport function assignSeries(ids: string[]): Map<string, number> {\n const out = new Map<string, number>();\n if (new Set(ids).size === 1) return new Map([[ids[0]!, 0]]);\n const used = new Set<number>();\n const clash = (k: number) => used.has(k) || (NEAR[k] !== undefined && used.has(NEAR[k]!));\n for (const id of ids) {\n if (out.has(id)) continue;\n let i = seriesIndex(id);\n if (clash(i)) {\n const keys = [...VIZ.keys()];\n i = keys.find((k) => !clash(k)) ?? keys.find((k) => !used.has(k)) ?? i;\n }\n used.add(i);\n out.set(id, i);\n }\n return out;\n}\n\nexport function seriesColors(ids: string[], thin = false): Map<string, string> {\n return new Map([...assignSeries(ids)].map(([id, i]) => [id, (thin ? VIZ_THIN : VIZ)[i]!]));\n}\n\nexport const seriesColor = (id: string, thin = false) => (thin ? VIZ_THIN : VIZ)[seriesIndex(id)]!;\n\nexport type TokenKind = keyof typeof tokenKindSeries;\nexport const tokenKindColor = (k: TokenKind, thin = false) => {\n if (tokenKindTint[k]) return \"var(--k-viz-1-soft)\";\n return (thin ? VIZ_THIN : VIZ)[tokenKindSeries[k] - 1]!;\n};\nexport const TOKEN_KIND_ORDER: TokenKind[] = [\"input\", \"cacheRead\", \"cacheWrite\", \"output\", \"reasoning\"];\nexport function tokenKindLabel(kind: TokenKind, t: UiText = englishText): string {\n switch (kind) {\n case \"input\":\n return t(\"tokenKind.input\", \"Input\");\n case \"output\":\n return t(\"tokenKind.output\", \"Output\");\n case \"cacheRead\":\n return t(\"tokenKind.cacheRead\", \"Cache read\");\n case \"cacheWrite\":\n return t(\"tokenKind.cacheWrite\", \"Cache write\");\n case \"reasoning\":\n return t(\"tokenKind.reasoning\", \"Reasoning\");\n }\n}\n\nexport function useSize<T extends HTMLElement>(): [(el: T | null) => void, { width: number; height: number }] {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState({ width: 0, height: 0 });\n useLayoutEffect(() => {\n if (!el) return;\n const set = () => setSize({ width: Math.round(el.clientWidth), height: Math.round(el.clientHeight) });\n set();\n return observeResize([el], set);\n }, [el]);\n return [setEl, size];\n}\n\nconst ease = (t: number) => 1 - Math.pow(1 - t, 3);\nconst reducedMotion = () => typeof matchMedia !== \"undefined\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\nconst mix = (from: number[], to: number[], t: number) => (t >= 1 ? to : to.map((v, i) => (from[i] ?? v) + (v - (from[i] ?? v)) * ease(t)));\n\nexport function tweens(from: number[], to: number[]): boolean {\n return from.length === to.length && from.some((v) => v !== 0) && to.some((v) => v !== 0) && from.some((v, i) => v !== to[i]) && !reducedMotion();\n}\n\nexport function useTweened(values: number[], still = false): number[] {\n const key = values.join(\",\");\n const [tween, setTween] = useState({ key, from: values, to: values, t: 1, still });\n let current = tween;\n if (tween.key !== key || tween.still !== still) {\n const drawn = mix(tween.from, tween.to, tween.t);\n const animate = !still && !tween.still && tweens(drawn, values);\n current = animate ? { key, from: drawn, to: values, t: 0, still } : { key, from: values, to: values, t: 1, still };\n setTween(current);\n }\n const running = current.t < 1;\n useEffect(() => {\n if (!running) return;\n const start = performance.now();\n let raf = 0;\n const step = () => {\n const t = Math.max(0, Math.min(1, (performance.now() - start) / motion.duration.chart));\n setTween((s) => (s.key === key ? { ...s, t } : s));\n if (t < 1) raf = requestAnimationFrame(step);\n };\n raf = requestAnimationFrame(step);\n return () => cancelAnimationFrame(raf);\n }, [key, running]);\n return mix(current.from, current.to, current.t);\n}\n\nexport function useTweenedScale(values: number[], top: number, still = false): { values: number[]; top: number } {\n const any = values.some((v) => v !== 0);\n const drawn = useTweened(any ? [...values, top] : values, still);\n return any ? { values: drawn.slice(0, -1), top: drawn[drawn.length - 1] ?? top } : { values: drawn, top };\n}\n\nexport interface ChartState {\n loading?: boolean | undefined;\n error?: ReactNode | undefined;\n onRetry?: (() => void) | undefined;\n empty?: boolean | undefined;\n emptyText?: ReactNode | undefined;\n}\n\nexport interface TableData {\n columns: string[];\n rows: (string | number)[][];\n}\n\nexport interface ChartFrameProps {\n label: string;\n height: number;\n children: ReactNode;\n table?: TableData | undefined;\n legend?: ReactNode | undefined;\n state?: ChartState | undefined;\n className?: string | undefined;\n toggle?: boolean | undefined;\n}\n\nexport const ChartFrame = /* @__PURE__ */ forwardRef<HTMLElement, ChartFrameProps>(function ChartFrame(\n { label, height, children, table, legend, state = {}, className, toggle = true },\n ref,\n) {\n const [asTable, setAsTable] = useState(false);\n const t = useUiText();\n const failed = !!state.error;\n const blank = !!state.empty;\n const showTable = asTable && !!table && !failed && !blank;\n const toTable = t(\"chartFrame.viewAsTable\", \"View as table\");\n const toChart = t(\"chartFrame.viewAsChart\", \"View as chart\");\n return (\n <figure\n ref={ref}\n className={cn(\"@container flex w-full min-w-0 flex-col gap-12\", className)}\n aria-label={label}\n {...(state.loading ? { \"aria-busy\": true } : {})}\n >\n {failed ? (\n <div className=\"flex flex-col items-center justify-center gap-12 px-24 text-center\" style={{ height }}>\n <p role=\"alert\" className=\"text-body text-pretty text-fg-secondary\">\n {state.onRetry\n ? t(\"chartFrame.loadFailed\", \"Couldn't load this chart\")\n : t(\"chartFrame.loadFailedReload\", \"Couldn't load this chart. Reload the page to try again.\")}\n </p>\n {state.onRetry && (\n <Button size=\"sm\" variant=\"secondary\" onClick={state.onRetry}>\n {t(\"chartFrame.tryAgain\", \"Try again\")}\n </Button>\n )}\n </div>\n ) : showTable ? (\n <div style={{ height }}>\n <div\n role=\"region\"\n tabIndex={0}\n aria-label={t(\"chartFrame.tableLabel\", \"{label}, table\", { label })}\n className=\"h-full overflow-auto overscroll-contain scrollbar-quiet focus-ring-inset\"\n >\n <DataTablePlain table={table} sticky />\n </div>\n </div>\n ) : (\n <div className=\"relative\" style={{ height }}>\n {state.loading && state.empty ? (\n <Skeleton className=\"absolute inset-0\" />\n ) : (\n <div className={cn(\"absolute inset-0\", state.loading && \"opacity-40\")}>\n <div className={cn(\"absolute inset-0\", state.loading && \"animate-pulse-quiet\")}>{children}</div>\n </div>\n )}\n {state.empty && !state.loading && (\n <div className=\"pointer-events-none absolute inset-0 flex items-center justify-center px-24 text-center text-body text-pretty text-fg-secondary\">\n {state.emptyText ?? t(\"chartFrame.noData\", \"No data for this period\")}\n </div>\n )}\n </div>\n )}\n {!failed && (legend || (toggle && table && !blank)) && (\n <div className=\"flex flex-col gap-8 @chart-legend:flex-row @chart-legend:gap-12\">\n {!showTable && legend && <div className=\"min-w-0 @chart-legend:flex-1\">{legend}</div>}\n {toggle && table && !blank && (\n <button\n type=\"button\"\n onClick={() => setAsTable((v) => !v)}\n className=\"relative ml-auto inline-flex h-28 shrink-0 cursor-pointer items-center self-end rounded-pill px-10 text-small font-medium text-fg-secondary transition-control hover:bg-fill-1 hover:text-fg focus-ring tap-target\"\n >\n <SwapText reserve={[toTable, toChart]}>{showTable ? toChart : toTable}</SwapText>\n </button>\n )}\n </div>\n )}\n {table && !showTable && !failed && (\n <div className=\"sr-only\">\n <DataTablePlain table={table} caption={label} hidden />\n </div>\n )}\n </figure>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ChartFrame.displayName = \"ChartFrame\";\n\nconst NUMERIC = /^[^\\p{L}]*\\d[^\\p{L}]*\\p{L}{0,3}$/u;\n\n// The screen-reader copy is a bare <table>: inside sr-only's 1px box a Table always overflows,\n// and its scroller would become a tab stop nobody can see.\nfunction DataTablePlain({\n table,\n caption,\n sticky,\n hidden,\n}: {\n table: TableData;\n caption?: string | undefined;\n sticky?: boolean | undefined;\n hidden?: boolean | undefined;\n}) {\n const end = table.columns.map(\n (_, j) => j > 0 && table.rows.every((r) => typeof r[j] === \"number\" || NUMERIC.test(String(r[j] ?? \"\").trim()) || r[j] === \"–\"),\n );\n const Shell = hidden ? \"table\" : Table;\n return (\n <Shell>\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <Table.Head>\n <Table.Row>\n {table.columns.map((c, i) => (\n <Table.HeaderCell key={c} align={end[i] ? \"end\" : \"start\"} className={cn(sticky && \"sticky top-0 z-10 bg-panel\")}>\n {c}\n </Table.HeaderCell>\n ))}\n </Table.Row>\n </Table.Head>\n <Table.Body>\n {table.rows.map((r, i) => (\n <Table.Row key={i}>\n {r.map((v, j) => (\n <Table.Cell key={j} align={end[j] ? \"end\" : \"start\"}>\n {v}\n </Table.Cell>\n ))}\n </Table.Row>\n ))}\n </Table.Body>\n </Shell>\n );\n}\n\nexport interface LegendItem {\n id: string;\n label: ReactNode;\n color: string;\n value?: ReactNode | undefined;\n}\n\nexport interface SwatchProps {\n color: string;\n shape?: \"square\" | \"line\" | undefined;\n off?: boolean | undefined;\n}\n\nexport const Swatch = /* @__PURE__ */ forwardRef<HTMLSpanElement, SwatchProps>(function Swatch({ color, shape = \"square\", off }, ref) {\n const edge = edgeColor(color);\n return (\n <span\n ref={ref}\n aria-hidden\n data-off={off ? \"\" : undefined}\n className={cn(\"shrink-0 data-mark transition-control\", shape === \"line\" ? \"h-2 w-12 rounded-pill\" : \"size-10 rounded-bar\")}\n style={\n off\n ? shape === \"line\"\n ? { outline: `1px solid ${edge ?? color}`, outlineOffset: 1 }\n : { boxShadow: `inset 0 0 0 1px ${edge ?? color}` }\n : { background: color, ...(edge && shape === \"square\" ? { boxShadow: `inset 0 0 0 1px ${edge}` } : {}) }\n }\n />\n );\n});\nif (process.env.NODE_ENV !== \"production\") Swatch.displayName = \"Swatch\";\n\nexport const tickLabel = (format: (v: number) => string) => (v: number) => format(v).replace(/[.,]00(?=\\D*$)/, \"\");\n\nexport function readableTicks(scale: { ticks: (count: number) => number[]; domain: () => number[] }, label: (v: number) => string, count = 4): number[] {\n for (let n = count; n >= 1; n--) {\n const ticks = scale.ticks(n);\n if (new Set(ticks.map(label)).size === ticks.length) return ticks;\n }\n const [lo = 0, hi = 0] = scale.domain();\n return label(lo) === label(hi) ? [lo] : [lo, hi];\n}\n\nexport type AxisDate = Date | string;\n\nfunction dayNumber(d: AxisDate): number {\n if (d instanceof Date) return Number.isNaN(d.getTime()) ? NaN : Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()) / 86_400_000;\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(d);\n return m ? Date.UTC(Number(m[1]), Number(m[2]) - 1, Number(m[3])) / 86_400_000 : NaN;\n}\nconst yearOfDay = (n: number) => new Date(n * 86_400_000).getUTCFullYear();\n\nexport function yearStarts(dates: readonly AxisDate[]): number[] {\n const days = dates.map(dayNumber);\n const out: number[] = [];\n days.forEach((d, i) => {\n const prev = i > 0 ? days[i - 1]! : days.length > 1 ? 2 * d - days[1]! : NaN;\n if (Number.isFinite(d) && Number.isFinite(prev) && yearOfDay(d) !== yearOfDay(prev)) out.push(i);\n });\n return out;\n}\n\nconst WIDE = /[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}\\p{Script=Hangul}\\u3000-\\u303f\\uff00-\\uffef]/u;\n\nexport function labelWidth(label: string): number {\n let em = 0;\n for (const ch of label) em += WIDE.test(ch) ? 1 : /\\p{Lu}/u.test(ch) ? 0.8 : /\\p{Ll}/u.test(ch) ? 0.6 : /\\p{Nd}/u.test(ch) ? 0.66 : /\\s/.test(ch) ? 0.3 : 0.4;\n return em * AXIS.label.fontSize;\n}\n\nconst LABEL_GAP = 8;\n\nexport function placeTimeLabels(\n ticks: { key: number; at: number; label: string }[],\n right: number,\n): { key: number; x: number; anchor: \"start\" | \"middle\" | \"end\"; label: string }[] {\n const placed = ticks.map((t) => {\n const width = labelWidth(t.label);\n const anchor: \"start\" | \"middle\" | \"end\" = t.at - width / 2 < 0 ? \"start\" : t.at + width / 2 > right ? \"end\" : \"middle\";\n const x = anchor === \"start\" ? Math.max(t.at, 0) : t.at;\n const left = anchor === \"start\" ? x : anchor === \"end\" ? x - width : x - width / 2;\n return { key: t.key, x, anchor, label: t.label, left, right: left + width };\n });\n const clear = (a: { right: number } | undefined, b: { left: number } | undefined) => !a || !b || a.right + LABEL_GAP <= b.left;\n if (placed.length > 2 && !clear(placed[0], placed[1])) placed.splice(1, 1);\n if (placed.length > 2 && !clear(placed[placed.length - 2], placed[placed.length - 1])) placed.splice(placed.length - 2, 1);\n const kept: typeof placed = [];\n for (const l of placed) if (clear(kept[kept.length - 1], l)) kept.push(l);\n return kept.map(({ key, x, anchor, label }) => ({ key, x, anchor, label }));\n}\n\nexport function axisLabelIndexes(\n labels: string[],\n step: number,\n edges: { start: number; end: number } = { start: Infinity, end: Infinity },\n dates?: readonly AxisDate[] | undefined,\n): number[] {\n const n = labels.length;\n if (n === 0) return [];\n const fits = (i: number) => labelWidth(labels[i]!) / 2 <= Math.min(edges.start + i * step, edges.end + (n - 1 - i) * step) + 1e-6;\n const room = Math.max(48, Math.max(...labels.map(labelWidth)) + 16);\n const every = step > 0 ? Math.max(1, Math.ceil(room / step - 1e-6)) : n;\n const starts = dates && dates.length === n ? yearStarts(dates) : [];\n let stride = every;\n for (let s = every; every > 1 && s <= every * 2; s++) {\n if (starts.every((i) => (i - starts[0]!) % s === 0)) {\n stride = s;\n break;\n }\n }\n const score = (p: number) => [\n starts.filter((i) => i % stride === p && fits(i)).length,\n (n - 1) % stride === p && fits(n - 1) ? 1 : 0,\n p === 0 && fits(0) ? 1 : 0,\n n - 1 - ((n - 1 - p) % stride),\n ];\n let best = 0;\n for (let p = 1; p < Math.min(stride, n); p++) {\n const a = score(p);\n const b = score(best);\n const k = a.findIndex((v, j) => v !== b[j]);\n if (k >= 0 && a[k]! > b[k]!) best = p;\n }\n const out: number[] = [];\n for (let i = best; i < n; i += stride) if (fits(i)) out.push(i);\n return out;\n}\n\nexport interface LegendProps {\n items: LegendItem[];\n hidden?: Set<string> | undefined;\n onToggle?: ((id: string) => void) | undefined;\n onHover?: ((id: string | null) => void) | undefined;\n shape?: \"square\" | \"line\" | undefined;\n}\n\nexport const Legend = /* @__PURE__ */ forwardRef<HTMLUListElement, LegendProps>(function Legend({ items, hidden, onToggle, onHover, shape = \"square\" }, ref) {\n const t = useUiText();\n return (\n <ul ref={ref} className={cn(\"flex flex-wrap items-center\", onToggle ? \"gap-4\" : \"gap-x-16 gap-y-4\")} aria-label={t(\"chartLegend.label\", \"Legend\")}>\n {items.map((it) => {\n const off = hidden?.has(it.id);\n const Comp = onToggle ? \"button\" : \"span\";\n return (\n <li key={it.id}>\n <Comp\n {...(onToggle ? { type: \"button\" as const, \"aria-pressed\": !off, onClick: () => onToggle(it.id) } : {})}\n onMouseEnter={() => onHover?.(it.id)}\n onMouseLeave={() => onHover?.(null)}\n onFocus={() => onHover?.(it.id)}\n onBlur={() => onHover?.(null)}\n className={cn(\n \"inline-flex h-28 items-center gap-8 text-small font-medium transition-control\",\n onToggle && \"relative cursor-pointer rounded-pill px-10 hover:bg-fill-1 focus-ring tap-target\",\n off ? \"text-fg-tertiary\" : \"text-fg\",\n )}\n >\n <Swatch color={it.color} shape={shape} off={off} />\n {it.label}\n {it.value !== undefined && <span className=\"text-fg-secondary tabular\">{it.value}</span>}\n </Comp>\n </li>\n );\n })}\n </ul>\n );\n});\nif (process.env.NODE_ENV !== \"production\") Legend.displayName = \"Legend\";\n\nexport interface TooltipRow {\n id: string;\n label: ReactNode;\n color: string;\n value: ReactNode;\n share?: ReactNode | undefined;\n}\n\nexport interface ChartTooltipProps {\n x: number;\n xLeft?: number | undefined;\n y: number;\n width: number;\n heading: ReactNode;\n rows: TooltipRow[];\n visible: boolean;\n}\n\nexport const ChartTooltip = /* @__PURE__ */ forwardRef<HTMLDivElement, ChartTooltipProps>(function ChartTooltip({ x, xLeft = x, y, width, heading, rows, visible }, ref) {\n const el = useRef<HTMLDivElement | null>(null);\n const root = useMemo(() => mergeRefs(el, ref), [ref]);\n const [own, setOwn] = useState({ w: 0, h: 0, room: Infinity });\n useLayoutEffect(() => {\n const node = el.current;\n const next = { w: node?.offsetWidth ?? 0, h: node?.offsetHeight ?? 0, room: (node?.offsetParent as HTMLElement | null)?.clientHeight ?? Infinity };\n if (next.w !== own.w || next.h !== own.h || next.room !== own.room) setOwn(next);\n }, [own, heading, rows, visible]);\n const flip = x > width / 2;\n const wanted = flip ? xLeft - 16 - own.w : x + 16;\n const left = own.w ? Math.round(Math.max(0, Math.min(wanted, width - own.w))) : undefined;\n const top = Math.round(Math.max(0, Math.min(y - 24, own.room - own.h)));\n return (\n <div\n ref={root}\n role=\"presentation\"\n aria-hidden\n className={cn(\n \"pointer-events-none absolute z-10 w-max min-w-160 max-w-360 rounded-tooltip bg-raised p-10 text-small shadow-raised opacity-motion @chart-legend:min-w-200\",\n visible && own.w ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n ...(left !== undefined ? { left } : flip ? { right: Math.round(width - xLeft + 16) } : { left: Math.round(x + 16) }),\n top,\n }}\n >\n <div className=\"mb-6 text-caption font-medium text-fg tabular\">{heading}</div>\n <div className=\"flex flex-col gap-4\">\n {rows.map((r) => (\n <div key={r.id} className=\"flex items-center gap-8\">\n <Swatch color={r.color} />\n <span className=\"min-w-0 flex-1 truncate pr-12 text-fg-secondary\">{r.label}</span>\n <span className=\"font-medium text-fg tabular\">{r.value}</span>\n {r.share !== undefined && <span className=\"w-40 text-right text-fg-tertiary tabular\">{r.share}</span>}\n </div>\n ))}\n </div>\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ChartTooltip.displayName = \"ChartTooltip\";\n\nexport const AXIS = {\n grid: { stroke: \"var(--k-line)\", strokeDasharray: \"3 3\", strokeWidth: 1 },\n baseline: { stroke: \"var(--k-line-strong)\", strokeWidth: 1 },\n label: { fill: \"var(--k-text-tertiary)\", fontSize: 12, fontWeight: 500, style: { fontVariantNumeric: \"tabular-nums\" as const } },\n};\n\nexport const KAESO_CHARTS_VARIANTS = {\n chrome: { default: { classes: \"\" } },\n} as const;\nexport const KAESO_CHARTS_DEFAULT_VARIANTS = { chrome: \"default\" } as const;\n\nexport function chartKeyIndex(\n key: string,\n index: number | null,\n count: number,\n { vertical = false, start = count - 1 }: { vertical?: boolean | undefined; start?: number | undefined } = {},\n): number | null | undefined {\n if (count <= 0) return undefined;\n const back = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const forward = vertical ? \"ArrowDown\" : \"ArrowRight\";\n if (key === back) return index === null ? start : Math.max(0, index - 1);\n if (key === forward) return index === null ? start : Math.min(count - 1, index + 1);\n if (key === \"Home\") return 0;\n if (key === \"End\") return count - 1;\n if (key === \"Escape\") return index === null ? undefined : null;\n return undefined;\n}\n\nexport function useChartKeys(count: number, options: { vertical?: boolean | undefined; start?: number | undefined } = {}) {\n const [index, setIndex] = useState<number | null>(null);\n const start = options.start ?? count - 1;\n const props = {\n tabIndex: count > 0 ? 0 : -1,\n onFocus: (e: React.FocusEvent<HTMLElement>) => {\n if (e.target !== e.currentTarget) return;\n let keyboard = true;\n try {\n keyboard = e.currentTarget.matches(\":focus-visible\");\n } catch {}\n if (keyboard && !document.documentElement.hasAttribute(\"data-k-pointer\")) setIndex(Math.max(0, start));\n },\n onBlur: () => setIndex(null),\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => {\n const next = chartKeyIndex(e.key, index, count, { vertical: !!options.vertical, start });\n if (next === undefined) return;\n e.preventDefault();\n if (next === null) e.stopPropagation();\n setIndex(next);\n },\n };\n return { index: index !== null && index < count ? index : null, props };\n}\n\nexport interface ChartLiveProps {\n children?: ReactNode | undefined;\n}\n\nexport const ChartLive = /* @__PURE__ */ forwardRef<HTMLDivElement, ChartLiveProps>(function ChartLive({ children }, ref) {\n return (\n <div ref={ref} className=\"sr-only\" aria-live=\"polite\" aria-atomic>\n {children}\n </div>\n );\n});\nif (process.env.NODE_ENV !== \"production\") ChartLive.displayName = \"ChartLive\";\n\nexport const liveLine = (heading: ReactNode, rows: { label: ReactNode; value: ReactNode }[], t: UiText = englishText) =>\n t(\"chart.liveLine\", \"{heading}: {values}\", {\n heading: String(heading),\n values: rows.map((r) => t(\"chart.liveValue\", \"{label} {value}\", { label: String(r.label), value: String(r.value) })).join(t(\"chart.listSeparator\", \", \")),\n });\n"],"mappings":"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"}