@logicplanes/kaeso-ui 0.4.6 → 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
package/dist/theme.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export { t as THEME_STORAGE_KEY, n as ThemeProvider, r as installFocusModality, i as themeScript, a as useTheme } from "./chunks/theme-provider-DJhORMlc.js";
2
+ export { t as THEME_STORAGE_KEY, n as ThemeProvider, r as installFocusModality, i as themeScript, a as useTheme } from "./chunks/theme-provider-BjXTggqM.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@logicplanes/kaeso-ui",
3
- "version": "0.4.6",
3
+ "version": "0.4.7",
4
4
  "description": "Kaeso's UI library: React components on Base UI, Tailwind CSS v4 and the Kaeso tokens.",
5
5
  "license": "MIT",
6
6
  "author": "Devin Oldenburg",
@@ -102,7 +102,7 @@
102
102
  "shiki": "4.5.0",
103
103
  "tailwind-merge": "3.7.0",
104
104
  "uqr": "0.1.3",
105
- "@logicplanes/kaeso-tokens": "0.4.6"
105
+ "@logicplanes/kaeso-tokens": "0.4.7"
106
106
  },
107
107
  "devDependencies": {
108
108
  "@hugeicons/core-free-icons": "4.3.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"core-CmK-8ObW.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","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","hidden","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 && (\n <div className=\"sr-only\">\n <DataTablePlain table={table} caption={label} />\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\nfunction DataTablePlain({ table, caption, sticky }: { table: TableData; caption?: string | undefined; sticky?: boolean | undefined }) {\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 return (\n <Table>\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 </Table>\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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"}