@k2b/ui 0.3.0 → 0.4.0

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 (115) hide show
  1. package/dist/browser/actions/index.js +2 -2
  2. package/dist/browser/actions/index.js.map +1 -1
  3. package/dist/browser/chat/ChatComposer.js +1 -1
  4. package/dist/browser/chat/ChatComposer.js.map +1 -1
  5. package/dist/browser/chat/ChatContextPopup.js.map +1 -1
  6. package/dist/browser/chat/ChatPrimitives.js +2 -2
  7. package/dist/browser/chat/ChatPrimitives.js.map +1 -1
  8. package/dist/browser/chat/ChatTasks.js +1 -1
  9. package/dist/browser/chat/ChatTasks.js.map +1 -1
  10. package/dist/browser/chat/ChatTimeline.js +1 -1
  11. package/dist/browser/chat/ChatTimeline.js.map +1 -1
  12. package/dist/browser/chat/composer-document.js.map +1 -1
  13. package/dist/browser/chat/index.js.map +1 -1
  14. package/dist/browser/content/Chart.js +3 -3
  15. package/dist/browser/content/Chart.js.map +1 -1
  16. package/dist/browser/content/ChartExplorer.js +4 -4
  17. package/dist/browser/content/ChartExplorer.js.map +1 -1
  18. package/dist/browser/content/ChartExplorerControls.js +1 -1
  19. package/dist/browser/content/ChartExplorerControls.js.map +1 -1
  20. package/dist/browser/content/ChartFilterControls.js +2 -2
  21. package/dist/browser/content/ChartFilterControls.js.map +1 -1
  22. package/dist/browser/content/ChartSnapshotView.js +2 -1
  23. package/dist/browser/content/ChartSnapshotView.js.map +1 -1
  24. package/dist/browser/content/FileView.js +7 -3
  25. package/dist/browser/content/FileView.js.map +1 -1
  26. package/dist/browser/content/MarkdownView.js.map +1 -1
  27. package/dist/browser/content/Pagination.js.map +1 -1
  28. package/dist/browser/content/chart-explorer.js.map +1 -1
  29. package/dist/browser/content/chart-inspection.js.map +1 -1
  30. package/dist/browser/content/chart-line-gaps.js.map +1 -1
  31. package/dist/browser/content/chart-snapshot.js.map +1 -1
  32. package/dist/browser/content/file-view-preview.js.map +1 -1
  33. package/dist/browser/content/index.js +9 -9
  34. package/dist/browser/content/index.js.map +1 -1
  35. package/dist/browser/feedback/toast.js.map +1 -1
  36. package/dist/browser/inputs/ChoiceGroups.js.map +1 -1
  37. package/dist/browser/inputs/Select.js.map +1 -1
  38. package/dist/browser/inputs/markdown/behaviors.js +1 -1
  39. package/dist/browser/inputs/markdown/behaviors.js.map +1 -1
  40. package/dist/browser/layout/AppWorkspace.js +3 -3
  41. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  42. package/dist/browser/layout/DetailPanel.js +1 -1
  43. package/dist/browser/layout/DetailPanel.js.map +1 -1
  44. package/dist/browser/layout/ScrollArea.js.map +1 -1
  45. package/dist/browser/layout/SidebarItemPreview.js +1 -1
  46. package/dist/browser/layout/SidebarItemPreview.js.map +1 -1
  47. package/dist/browser/layout/app-workspace-controller.js +1 -1
  48. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  49. package/dist/browser/layout/app-workspace-state.js.map +1 -1
  50. package/dist/browser/layout/index.js +3 -3
  51. package/dist/browser/layout/index.js.map +1 -1
  52. package/dist/ssr/actions/index.js +2 -2
  53. package/dist/ssr/actions/index.js.map +1 -1
  54. package/dist/ssr/chat/ChatComposer.js +1 -1
  55. package/dist/ssr/chat/ChatComposer.js.map +1 -1
  56. package/dist/ssr/chat/ChatContextPopup.js.map +1 -1
  57. package/dist/ssr/chat/ChatPrimitives.js +2 -2
  58. package/dist/ssr/chat/ChatPrimitives.js.map +1 -1
  59. package/dist/ssr/chat/ChatTasks.js +1 -1
  60. package/dist/ssr/chat/ChatTasks.js.map +1 -1
  61. package/dist/ssr/chat/ChatTimeline.js +1 -1
  62. package/dist/ssr/chat/ChatTimeline.js.map +1 -1
  63. package/dist/ssr/chat/composer-document.js.map +1 -1
  64. package/dist/ssr/chat/index.js.map +1 -1
  65. package/dist/ssr/content/Chart.js +3 -3
  66. package/dist/ssr/content/Chart.js.map +1 -1
  67. package/dist/ssr/content/ChartExplorer.js +4 -4
  68. package/dist/ssr/content/ChartExplorer.js.map +1 -1
  69. package/dist/ssr/content/ChartExplorerControls.js +1 -1
  70. package/dist/ssr/content/ChartExplorerControls.js.map +1 -1
  71. package/dist/ssr/content/ChartFilterControls.js +2 -2
  72. package/dist/ssr/content/ChartFilterControls.js.map +1 -1
  73. package/dist/ssr/content/ChartSnapshotView.js +2 -1
  74. package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
  75. package/dist/ssr/content/FileView.js +7 -3
  76. package/dist/ssr/content/FileView.js.map +1 -1
  77. package/dist/ssr/content/MarkdownView.js.map +1 -1
  78. package/dist/ssr/content/Pagination.js.map +1 -1
  79. package/dist/ssr/content/chart-explorer.js.map +1 -1
  80. package/dist/ssr/content/chart-inspection.js.map +1 -1
  81. package/dist/ssr/content/chart-line-gaps.js.map +1 -1
  82. package/dist/ssr/content/chart-snapshot.js.map +1 -1
  83. package/dist/ssr/content/file-view-preview.js.map +1 -1
  84. package/dist/ssr/content/index.js +9 -9
  85. package/dist/ssr/content/index.js.map +1 -1
  86. package/dist/ssr/feedback/toast.js.map +1 -1
  87. package/dist/ssr/inputs/ChoiceGroups.js.map +1 -1
  88. package/dist/ssr/inputs/Select.js.map +1 -1
  89. package/dist/ssr/inputs/markdown/behaviors.js +1 -1
  90. package/dist/ssr/inputs/markdown/behaviors.js.map +1 -1
  91. package/dist/ssr/layout/AppWorkspace.js +3 -3
  92. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  93. package/dist/ssr/layout/DetailPanel.js +1 -1
  94. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  95. package/dist/ssr/layout/ScrollArea.js.map +1 -1
  96. package/dist/ssr/layout/SidebarItemPreview.js +1 -1
  97. package/dist/ssr/layout/SidebarItemPreview.js.map +1 -1
  98. package/dist/ssr/layout/app-workspace-controller.js +1 -1
  99. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  100. package/dist/ssr/layout/app-workspace-state.js.map +1 -1
  101. package/dist/ssr/layout/index.js +3 -3
  102. package/dist/ssr/layout/index.js.map +1 -1
  103. package/dist/types/actions/index.d.ts +4 -4
  104. package/dist/types/chat/ChatComposer.d.ts +1 -1
  105. package/dist/types/chat/index.d.ts +1 -1
  106. package/dist/types/content/Chart.d.ts +2 -2
  107. package/dist/types/content/ChartExplorer.d.ts +2 -2
  108. package/dist/types/content/ChartExplorerControls.d.ts +1 -1
  109. package/dist/types/content/ChartSnapshotView.d.ts +1 -1
  110. package/dist/types/content/chart-inspection.d.ts +1 -1
  111. package/dist/types/content/index.d.ts +15 -15
  112. package/dist/types/layout/AppWorkspace.d.ts +1 -1
  113. package/dist/types/layout/SidebarItemPreview.d.ts +1 -1
  114. package/dist/types/layout/index.d.ts +3 -3
  115. package/package.json +1 -3
@@ -1 +1 @@
1
- {"version":3,"names":["lineGapsSvg","charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","splitProps","untrack","createChartInspection","useLocale","useUiMessages","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","isServer","responsiveChartSvg","responsiveMapSvg","selectedChartSvg","chartRenderHeight","props","kind","rows","length","legend","Math","max","title","subtitle","data","renderChartSvg","width","height","mapViewport","timelineViewport","class","_class","style","_style","labels","_labels","interactive","_interactive","onSelect","_onSelect","selected","_selected","tooltip","_tooltip","cursor","_cursor","zoomFocus","_zoomFocus","opts","viewport","svg","inspect","maxGap","undefined","area","errorBand","Error","preservesAspectRatio","isEmpty","series","every","s","groups","row","intervals","Chart","drawingProps","messages","locale","containerRef","chartTooltipRef","lineAnchorRef","size","dimensions","getBoundingClientRect","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","matrix","getScreenCTM","box","viewBox","baseVal","hypot","a","b","c","d","rect","zoom","delta","closeChartTooltip","current","reset","handlePointerDown","event","inspection","down","button","target","closest","pointerId","x","clientX","currentTarget","setPointerCapture","y","clientY","flushPointerMove","cancelAnimationFrame","sample","start","activeTimelineDrag","handlePointerMove","move","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","key","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","container","enabled","select","selection","format","fields","chartFields","Intl","NumberFormat","maximumFractionDigits","datum","label","seriesIndex","values","map","field","value","formatted","yes","no","close","svgMarkup","invalidate","selectDatum","outside","Node","contains","window","addEventListener","scroll","removeEventListener","chartStyle","_$createComponent","when","fallback","_$ssr","_tmpl$5","_$escape","_$ssrStyle","empty","noData","children","_tmpl$4","_$ssrAttribute","interactiveLineChart","interactiveChart","_$ssrStyleProperty","_tmpl$","_tmpl$2","_tmpl$3","zoomIn","zoomOut","resetMap","resetMapView","resetTimeline","resetTimelineView"],"sources":["content/Chart.tsx"],"sourcesContent":["import { lineGapsSvg } from \"./chart-line-gaps\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { createChartInspection, type ChartSelection, type ChartTooltipFormatter, type ChartDatumRef } from \"./chart-inspection\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { isServer } from \"solid-js/web\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["charts","createEffect","createMemo","createSignal","createUniqueId","onCleanup","onMount","Show","splitProps","untrack","isServer","useLocale","useUiMessages","createChartInspection","lineGapsSvg","DEFAULT_MAP_VIEWPORT","normalizeMapViewport","panMapViewport","zoomMapViewport","panStateTimelineViewport","renderStateTimelineSvg","stateTimelineDomain","stateTimelineHeight","zoomStateTimelineViewport","responsiveChartSvg","responsiveMapSvg","selectedChartSvg","chartRenderHeight","props","kind","rows","length","legend","Math","max","title","subtitle","data","renderChartSvg","width","height","mapViewport","timelineViewport","class","_class","style","_style","labels","_labels","interactive","_interactive","onSelect","_onSelect","selected","_selected","tooltip","_tooltip","cursor","_cursor","zoomFocus","_zoomFocus","opts","viewport","svg","inspect","maxGap","undefined","area","errorBand","Error","preservesAspectRatio","isEmpty","series","every","s","groups","row","intervals","Chart","drawingProps","messages","locale","containerRef","chartTooltipRef","lineAnchorRef","size","dimensions","getBoundingClientRect","initialMapViewport","setMapViewport","initialTimelineViewport","domain","setTimelineViewport","dragging","setDragging","chartTooltipId","timelineViewportLocallyChanged","drag","timelineDrag","pointerFrame","pendingPointer","interactiveMap","interactiveTimeline","interactiveLine","draggable","timelineFullDomain","updateTimelineViewport","update","mapDimensions","viewportElement","querySelector","matrix","getScreenCTM","box","viewBox","baseVal","hypot","a","b","c","d","rect","zoom","delta","closeChartTooltip","current","reset","handlePointerDown","event","inspection","down","button","target","closest","pointerId","x","clientX","currentTarget","setPointerCapture","y","clientY","flushPointerMove","cancelAnimationFrame","sample","start","activeTimelineDrag","handlePointerMove","move","requestAnimationFrame","stopDragging","hasPointerCapture","releasePointerCapture","handleWheel","ctrlKey","metaKey","preventDefault","deltaY","anchor","left","shiftKey","handleKeyDown","key","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","container","enabled","select","selection","format","fields","chartFields","Intl","NumberFormat","maximumFractionDigits","datum","label","seriesIndex","values","map","field","value","formatted","yes","no","close","svgMarkup","invalidate","selectDatum","outside","Node","contains","window","addEventListener","scroll","removeEventListener","chartStyle","_$createComponent","when","fallback","_$ssr","_tmpl$5","_$escape","_$ssrStyle","empty","noData","children","_tmpl$4","_$ssrAttribute","interactiveLineChart","interactiveChart","_$ssrStyleProperty","_tmpl$","_tmpl$2","_tmpl$3","zoomIn","zoomOut","resetMap","resetMapView","resetTimeline","resetTimelineView"],"sources":["content/Chart.tsx"],"sourcesContent":["import type { MapViewport } from \"@k2b/stdlib\";\nimport { charts } from \"@k2b/stdlib\";\nimport type { JSX } from \"solid-js\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, onMount, Show, splitProps, untrack } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartDatumRef, type ChartSelection, type ChartTooltipFormatter, createChartInspection } from \"./chart-inspection\";\nimport { lineGapsSvg } from \"./chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport {\n panStateTimelineViewport,\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg, selectedChartSvg } from \"./chart-svg\";\n\n/**\n * Chart — minimal Solid wrapper around `stdlib.charts`.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * stdlib chart function — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with stdlib without renaming. Shared interactive\n * layers add bounded pan / zoom controls to maps and state timelines, plus\n * renderer-owned inspection, tooltips and optional selection for all chart kinds.\n * If stdlib gains a new option, it's automatically available at every\n * callsite.\n *\n * **Theming.** stdlib charts use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All chart kinds shipped by `stdlib.charts`. */\nexport type ChartKind = keyof typeof charts;\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: {\n kind: K;\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\" ? { /** Largest connected X distance; positive, finite, without area/errorBand fills. */ maxGap?: number } : {}) &\n (K extends \"stateTimeline\" ? StateTimelineChartOptions : Omit<Parameters<(typeof charts)[K]>[0], \"width\" | \"height\" | \"inspect\">);\n}[ChartKind];\n\n/** Pure renderer options: component layout, events and inspection are configured elsewhere. */\nexport type ChartRenderOptions = {\n [K in ChartKind]: Omit<\n Extract<ChartProps, { kind: K }>,\n \"class\" | \"style\" | \"labels\" | \"interactive\" | \"onSelect\" | \"selected\" | \"tooltip\" | \"cursor\"\n >;\n}[ChartKind];\n\n/** Keep the fixed 28-unit bar-gauge rows inside the shared SSR/browser coordinate space. */\nexport const chartRenderHeight = (props: ChartRenderOptions): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"barGauge\") return Math.max(280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\n/**\n * Internal — strips wrapper-only keys from props and forwards the\n * rest (plus logical size) to `charts[kind]`. The `any` is the\n * price for dispatching one function call across 14 different option\n * types; an explicit per-kind switch would type it but balloon the\n * component for no runtime benefit.\n */\nexport const renderChartSvg = (\n props: ChartProps,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n): string => {\n const {\n kind,\n class: _class,\n style: _style,\n labels: _labels,\n interactive: _interactive,\n onSelect: _onSelect,\n selected: _selected,\n tooltip: _tooltip,\n cursor: _cursor,\n zoomFocus: _zoomFocus,\n ...opts\n } = props as ChartProps & { interactive?: boolean; zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\"> };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: props.interactive,\n }),\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let svg = (charts[kind] as (o: unknown) => string)({\n ...(opts as any),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: props.interactive === true || (props.kind === \"line\" && props.maxGap !== undefined),\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\nconst preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n\n/** Empty-data short-circuit. Kept per-kind because stdlib's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and stdlib handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst Chart = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const size = () => ({\n width: 480,\n height: chartRenderHeight(props),\n });\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const interactiveLine = () => props.kind === \"line\" && props.interactive === true;\n const interactive = () => props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n enabled: interactive,\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields = messages().chartFields;\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? messages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? messages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n const outside = (event: PointerEvent) => {\n if (event.target instanceof Node && !containerRef?.contains(event.target)) closeChartTooltip();\n };\n window.addEventListener(\"pointerdown\", outside);\n const scroll = (event: Event) => {\n if (event.target instanceof Node && chartTooltipRef?.contains(event.target)) return;\n closeChartTooltip();\n };\n window.addEventListener(\"scroll\", scroll, true);\n window.addEventListener(\"resize\", closeChartTooltip);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", scroll, true);\n window.removeEventListener(\"resize\", closeChartTooltip);\n });\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && interactiveLine() ? \"true\" : undefined}\n data-interactive={interactive() ? \"true\" : undefined}\n style={chartStyle()}\n role=\"group\"\n aria-label={\n interactiveMap()\n ? (labels().interactiveMap ?? messages().interactiveMap)\n : interactiveTimeline()\n ? (labels().interactiveTimeline ?? messages().interactiveTimeline)\n : interactiveLine()\n ? (labels().interactiveLine ?? messages().interactiveLineChart)\n : interactive()\n ? (labels().interactiveChart ?? messages().interactiveChart)\n : undefined\n }\n aria-description={interactive() ? messages().interactiveChart : undefined}\n tabIndex={interactive() ? 0 : undefined}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <Show when={interactive()}>\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n </Show>\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomIn ?? messages().zoomIn}\n title={`${labels().zoomIn ?? messages().zoomIn} (+)`}\n onClick={() => zoom(1)}\n >\n <i class=\"ti ti-plus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={labels().zoomOut ?? messages().zoomOut}\n title={`${labels().zoomOut ?? messages().zoomOut} (-)`}\n onClick={() => zoom(-1)}\n >\n <i class=\"ti ti-minus\" aria-hidden=\"true\" />\n </button>\n <button\n type=\"button\"\n class=\"k2b-button k2b-icon-button\"\n data-variant=\"secondary\"\n aria-label={\n interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)\n }\n title={`${interactiveMap() ? (labels().resetMap ?? messages().resetMapView) : (labels().resetTimeline ?? messages().resetTimelineView)} (0)`}\n onClick={reset}\n >\n <i class=\"ti ti-focus-centered\" aria-hidden=\"true\" />\n </button>\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\nexport default Chart;\n"],"mappings":"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","ignoreList":[]}
@@ -14,14 +14,14 @@ var _tmpl$ = ["<div>", "</div>"],
14
14
  import { createEffect, createMemo, createSignal, createUniqueId, Show } from "solid-js";
15
15
  import { Button } from "../actions/Button";
16
16
  import { CopyButton } from "../actions/CopyButton";
17
- import { Paper } from "../surfaces/Paper";
18
- import { DescriptionList } from "../surfaces/DescriptionList";
19
17
  import { SelectChip } from "../inputs/SelectChip";
20
- import { useUiMessages } from "../intl/messages";
21
18
  import { useLocale } from "../intl/locale";
22
- import DataTable from "./DataTable";
19
+ import { useUiMessages } from "../intl/messages";
20
+ import { DescriptionList } from "../surfaces/DescriptionList";
21
+ import { Paper } from "../surfaces/Paper";
23
22
  import { ChartSnapshotView } from "./ChartSnapshotView";
24
23
  import { validateChartExplorerData } from "./chart-explorer";
24
+ import DataTable from "./DataTable";
25
25
  const tsvCell = value => /[\t\r\n"]/.test(value) ? `"${value.replaceAll('"', '""')}"` : value;
26
26
  export function ChartExplorer(props) {
27
27
  const messages = useUiMessages();
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createMemo","createSignal","createUniqueId","Show","Button","CopyButton","Paper","DescriptionList","SelectChip","useUiMessages","useLocale","DataTable","ChartSnapshotView","validateChartExplorerData","tsvCell","value","test","replaceAll","ChartExplorer","props","messages","locale","id","data","copyFailed","setCopyFailed","localSelection","setLocalSelection","localView","setLocalView","defaultView","localSort","setLocalSort","defaultSort","view","sort","undefined","setView","onViewChange","setSort","onSortChange","rowsByKey","Map","rows","map","row","key","rawSelected","selectedKey","selected","has","selectedRow","get","select","onSelectedKeyChange","columns","length","some","column","Set","size","Error","result","order","find","c","sortValue","collator","Intl","Collator","numeric","a","b","av","bv","comparison","compare","String","direction","copyText","label","join","_$ssr","_tmpl$4","_$escape","class","_$ssrAttribute","title","_$createComponent","when","description","children","_tmpl$","text","chartCopyData","iconOnly","variant","disabled","onCopyError","onCopied","onValueChange","aria-label","chartView","options","chartDiagram","chartData","_tmpl$2","chartCopyFailed","_$ssrStyleProperty","height","fallback","_tmpl$5","noData","header","align","sortable","Boolean","ariaLabelledBy","getRowId","selectedRowId","fillHeight","surface","onRowClick","renderCell","col","render","custom","cell","onClick","renderHeader","_tmpl$6","cursor","snapshot","chart","onSelect","style","renderDetails","_tmpl$3","_tmpl$8","chartSelectedDatum","clearSelection","_tmpl$7","items","term"],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import type { ChartCursor } from \"./chart-cursor\";\nimport { createEffect, createMemo, createSignal, createUniqueId, Show, type JSX } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { useLocale } from \"../intl/locale\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport { validateChartExplorerData, type ChartExplorerData, type ChartExplorerRow } from \"./chart-explorer\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createMemo","createSignal","createUniqueId","Show","Button","CopyButton","SelectChip","useLocale","useUiMessages","DescriptionList","Paper","ChartSnapshotView","validateChartExplorerData","DataTable","tsvCell","value","test","replaceAll","ChartExplorer","props","messages","locale","id","data","copyFailed","setCopyFailed","localSelection","setLocalSelection","localView","setLocalView","defaultView","localSort","setLocalSort","defaultSort","view","sort","undefined","setView","onViewChange","setSort","onSortChange","rowsByKey","Map","rows","map","row","key","rawSelected","selectedKey","selected","has","selectedRow","get","select","onSelectedKeyChange","columns","length","some","column","Set","size","Error","result","order","find","c","sortValue","collator","Intl","Collator","numeric","a","b","av","bv","comparison","compare","String","direction","copyText","label","join","_$ssr","_tmpl$4","_$escape","class","_$ssrAttribute","title","_$createComponent","when","description","children","_tmpl$","text","chartCopyData","iconOnly","variant","disabled","onCopyError","onCopied","onValueChange","aria-label","chartView","options","chartDiagram","chartData","_tmpl$2","chartCopyFailed","_$ssrStyleProperty","height","fallback","_tmpl$5","noData","header","align","sortable","Boolean","ariaLabelledBy","getRowId","selectedRowId","fillHeight","surface","onRowClick","renderCell","col","render","custom","cell","onClick","renderHeader","_tmpl$6","cursor","snapshot","chart","onSelect","style","renderDetails","_tmpl$3","_tmpl$8","chartSelectedDatum","clearSelection","_tmpl$7","items","term"],"sources":["content/ChartExplorer.tsx"],"sourcesContent":["import { createEffect, createMemo, createSignal, createUniqueId, type JSX, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { CopyButton } from \"../actions/CopyButton\";\nimport { SelectChip } from \"../inputs/SelectChip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { DescriptionList } from \"../surfaces/DescriptionList\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { ChartSnapshotView } from \"./ChartSnapshotView\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { type ChartExplorerData, type ChartExplorerRow, validateChartExplorerData } from \"./chart-explorer\";\nimport DataTable, { type DataTableSort } from \"./DataTable\";\n\nexport type ChartExplorerColumn<T> = {\n id: string;\n label: string;\n value: (row: T) => string;\n /** Optional table cell presentation; value remains the plain text used for copy/details. */\n render?: (row: T) => JSX.Element;\n /** Explicit comparable value. Omit to leave the column unsortable. */\n sortValue?: (row: T) => string | number | null;\n align?: \"left\" | \"center\" | \"right\";\n};\nexport type ChartExplorerProps<T extends ChartExplorerRow> = {\n cursor?: ChartCursor;\n title: string;\n description?: JSX.Element;\n data: ChartExplorerData<T>;\n columns: readonly ChartExplorerColumn<T>[];\n view?: \"chart\" | \"table\";\n defaultView?: \"chart\" | \"table\";\n onViewChange?: (view: \"chart\" | \"table\") => void;\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n selectedKey?: string | null;\n onSelectedKeyChange?: (key: string | null) => void;\n /** false hides the complete local detail area for a shared selection panel. */\n renderDetails?: false | ((row: T) => JSX.Element);\n height?: string;\n class?: string;\n};\n\nconst tsvCell = (value: string) => (/[\\t\\r\\n\"]/.test(value) ? `\"${value.replaceAll('\"', '\"\"')}\"` : value);\n\nexport function ChartExplorer<T extends ChartExplorerRow>(props: ChartExplorerProps<T>) {\n const messages = useUiMessages();\n const locale = useLocale();\n const id = `k2b-chart-explorer-${createUniqueId()}`;\n const data = () => props.data;\n const [copyFailed, setCopyFailed] = createSignal(false);\n const [localSelection, setLocalSelection] = createSignal<string | null>(null);\n const [localView, setLocalView] = createSignal(props.defaultView ?? \"chart\");\n const [localSort, setLocalSort] = createSignal<DataTableSort | null>(props.defaultSort ?? null);\n const view = () => props.view ?? localView();\n const sort = () => (props.sort === undefined ? localSort() : props.sort);\n const setView = (value: \"chart\" | \"table\") => {\n if (props.view === undefined) setLocalView(value);\n props.onViewChange?.(value);\n };\n const setSort = (value: DataTableSort | null) => {\n if (props.sort === undefined) setLocalSort(value);\n props.onSortChange?.(value);\n };\n const rowsByKey = createMemo(() => new Map(data().rows.map((row) => [row.key, row])));\n const rawSelected = () => (props.selectedKey !== undefined ? props.selectedKey : localSelection());\n const selected = () => (rowsByKey().has(rawSelected() ?? \"\") ? rawSelected() : null);\n const selectedRow = () => rowsByKey().get(selected() ?? \"\");\n const select = (key: string | null) => {\n if (key !== null && !rowsByKey().has(key)) return;\n setLocalSelection(key);\n props.onSelectedKeyChange?.(key);\n };\n if (\n !props.columns.length ||\n props.columns.some((column) => !column.id) ||\n new Set(props.columns.map((column) => column.id)).size !== props.columns.length\n ) {\n throw new Error(\"Chart columns require unique nonempty IDs and at least one column\");\n }\n validateChartExplorerData(data());\n createEffect(() => validateChartExplorerData(data()));\n createEffect(() => {\n if (props.selectedKey === undefined && rawSelected() !== null && selected() === null) select(null);\n });\n const rows = createMemo(() => {\n const result = [...data().rows];\n const order = sort();\n const column = props.columns.find((c) => c.id === order?.key);\n const value = column?.sortValue;\n if (!order || !value) return result;\n const collator = new Intl.Collator(locale(), { numeric: true });\n return result.sort((a, b) => {\n const av = value(a),\n bv = value(b);\n if (av === null) return bv === null ? 0 : 1;\n if (bv === null) return -1;\n const comparison = typeof av === \"number\" && typeof bv === \"number\" ? av - bv : collator.compare(String(av), String(bv));\n return order.direction === \"asc\" ? comparison : -comparison;\n });\n });\n const copyText = () =>\n [\n props.columns.map((c) => tsvCell(c.label)).join(\"\\t\"),\n ...rows().map((row) => props.columns.map((c) => tsvCell(c.value(row))).join(\"\\t\")),\n ].join(\"\\n\");\n return (\n <section class={`k2b-chart-explorer ${props.class ?? \"\"}`} aria-labelledby={id}>\n <header class=\"k2b-chart-explorer__header\">\n <div>\n <h3 id={id}>{props.title}</h3>\n <Show when={props.description}>\n <div>{props.description}</div>\n </Show>\n </div>\n <div class=\"k2b-chart-explorer__actions\">\n <CopyButton\n text={copyText()}\n label={messages().chartCopyData}\n iconOnly\n size=\"sm\"\n variant=\"ghost\"\n disabled={!rows().length}\n onCopyError={() => setCopyFailed(true)}\n onCopied={() => setCopyFailed(false)}\n />\n <SelectChip<\"chart\" | \"table\">\n value={view()}\n onValueChange={setView}\n aria-label={messages().chartView}\n options={[\n { value: \"chart\", label: messages().chartDiagram },\n { value: \"table\", label: messages().chartData },\n ]}\n />\n </div>\n </header>\n <Show when={copyFailed()}>\n <span role=\"alert\">{messages().chartCopyFailed}</span>\n </Show>\n <div class=\"k2b-chart-explorer__viewport\" style={{ height: props.height ?? \"18rem\" }}>\n <Show when={data().rows.length > 0} fallback={<div class=\"k2b-chart__empty\">{messages().noData}</div>}>\n <Show\n when={view() === \"chart\"}\n fallback={\n <DataTable\n rows={rows()}\n columns={props.columns.map((column) => ({\n id: column.id,\n header: column.label,\n value: column.value,\n align: column.align,\n sortable: Boolean(column.sortValue),\n }))}\n ariaLabelledBy={id}\n getRowId={(row) => row.key}\n selectedRowId={selected()}\n sort={sort()}\n fillHeight\n surface=\"paper\"\n onRowClick={(row) => select(row.key)}\n renderCell={({ row, col, value, render }) => {\n const custom = props.columns.find((column) => column.id === col.id)?.render;\n const cell = () => (custom ? custom(row) : render(value));\n return col.id === props.columns[0]?.id ? (\n <Button variant=\"text\" size=\"sm\" onClick={() => select(row.key)}>\n {cell()}\n </Button>\n ) : (\n cell()\n );\n }}\n renderHeader={({ col, render }) =>\n col.sortable ? (\n <Button\n variant=\"text\"\n size=\"sm\"\n onClick={() =>\n setSort({\n key: col.id,\n direction: sort()?.key === col.id && sort()?.direction === \"asc\" ? \"desc\" : \"asc\",\n })\n }\n >\n {props.columns.find((column) => column.id === col.id)?.label}{\" \"}\n <span class=\"k2b-chart-explorer__sort-icon\" aria-hidden=\"true\">\n {sort()?.key === col.id ? (sort()?.direction === \"asc\" ? \"↑\" : \"↓\") : \"↕\"}\n </span>\n </Button>\n ) : (\n render()\n )\n }\n />\n }\n >\n <ChartSnapshotView\n cursor={props.cursor}\n snapshot={data().chart}\n selectedKey={selected()}\n onSelect={select}\n style={{ height: \"100%\" }}\n />\n </Show>\n </Show>\n </div>\n <Show when={props.renderDetails !== false}>\n <div class=\"k2b-chart-explorer__details\" aria-live=\"polite\">\n <Show when={selectedRow()}>\n {(row) => (\n <Paper class=\"k2b-chart-explorer__detail-paper\">\n <div class=\"k2b-chart-explorer__detail-header\">\n <span>{messages().chartSelectedDatum}</span>\n <Button\n variant=\"text\"\n size=\"sm\"\n aria-label={messages().clearSelection}\n title={messages().clearSelection}\n onClick={() => select(null)}\n >\n <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n </div>\n {props.renderDetails ? (\n props.renderDetails(row())\n ) : (\n <DescriptionList\n columns={3}\n size=\"sm\"\n items={props.columns.map((column) => ({\n term: column.label,\n description: column.value(row()),\n }))}\n />\n )}\n </Paper>\n )}\n </Show>\n </div>\n </Show>\n </section>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -11,9 +11,9 @@ var _tmpl$ = "<i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\"></i>",
11
11
  _tmpl$7 = "<span aria-hidden=\"true\">\u25CB</span>";
12
12
  import { Show } from "solid-js";
13
13
  import { Button } from "../actions/Button";
14
+ import { useUiMessages } from "../intl/messages";
14
15
  import { Paper } from "../surfaces/Paper";
15
16
  import { StatusBadge } from "../surfaces/StatusBadge";
16
- import { useUiMessages } from "../intl/messages";
17
17
  import { ChartFilterControls } from "./ChartFilterControls";
18
18
  export function ChartExplorerControls(props) {
19
19
  const messages = useUiMessages();
@@ -1 +1 @@
1
- {"version":3,"names":["Show","Button","Paper","StatusBadge","useUiMessages","ChartFilterControls","ChartExplorerControls","props","messages","label","key","steps","find","step","_$createComponent","children","_$ssr","_tmpl$3","_$escape","title","_$ssrAttribute","explorer","loading","undefined","chartPreviousData","snapshot","request","when","_tmpl$","_tmpl$2","length","desired","referenceStep","reference","size","variant","onClick","clearReference","aria-label","chartRemoveComparison","chartReference","_tmpl$4","disabled","error","pinReference","chartPinReference","displayedRequest","series","dimensionLabel","failed","onRequest","setRequest","onRetry","retry","_tmpl$5","tone","icon","_tmpl$6","chartCurrent","_tmpl$7"],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerController, ChartExplorerCharts } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Show","Button","useUiMessages","Paper","StatusBadge","ChartFilterControls","ChartExplorerControls","props","messages","label","key","steps","find","step","_$createComponent","children","_$ssr","_tmpl$3","_$escape","title","_$ssrAttribute","explorer","loading","undefined","chartPreviousData","snapshot","request","when","_tmpl$","_tmpl$2","length","desired","referenceStep","reference","size","variant","onClick","clearReference","aria-label","chartRemoveComparison","chartReference","_tmpl$4","disabled","error","pinReference","chartPinReference","displayedRequest","series","dimensionLabel","failed","onRequest","setRequest","onRetry","retry","_tmpl$5","tone","icon","_tmpl$6","chartCurrent","_tmpl$7"],"sources":["content/ChartExplorerControls.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { Paper } from \"../surfaces/Paper\";\nimport { StatusBadge } from \"../surfaces/StatusBadge\";\nimport { ChartFilterControls, type ChartFilterControlsProps } from \"./ChartFilterControls\";\nimport type { ChartExplorerCharts, ChartExplorerController } from \"./chart-explorer\";\n\nexport type ChartExplorerControlsProps<C extends ChartExplorerCharts> = {\n explorer: ChartExplorerController<C>;\n title: string;\n steps?: ChartFilterControlsProps[\"steps\"];\n series?: ChartFilterControlsProps[\"series\"];\n dimensionLabel?: string;\n};\n\nexport function ChartExplorerControls<C extends ChartExplorerCharts>(props: ChartExplorerControlsProps<C>) {\n const messages = useUiMessages();\n const label = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <Paper class=\"k2b-chart-group-controls\">\n <div class=\"k2b-chart-explorer__header\">\n <strong>{props.title}</strong>\n <div class=\"k2b-chart-explorer__actions\">\n <span\n class=\"k2b-chart-group-controls__loading\"\n data-loading={props.explorer.loading() || undefined}\n role=\"status\"\n title={\n props.explorer.loading()\n ? `${messages().loading} · ${messages().chartPreviousData}: ${label(props.explorer.snapshot().request.step)}`\n : undefined\n }\n >\n <Show when={props.explorer.loading()}>\n <i class=\"ti ti-loader-2 k2b-spin\" aria-hidden=\"true\" />\n <span class=\"k2b-sr-only\">\n {messages().loading} · {messages().chartPreviousData}: {label(props.explorer.snapshot().request.step)}\n </span>\n </Show>\n </span>\n <Show when={props.steps?.length && props.explorer.snapshot().request.step !== undefined}>\n <Show when={props.explorer.desired().referenceStep}>\n {(reference) => (\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => void props.explorer.clearReference()}\n aria-label={`${messages().chartRemoveComparison}: ${label(reference())}`}\n >\n {messages().chartReference}: {label(reference())} <i class=\"ti ti-x\" aria-hidden=\"true\" />\n </Button>\n )}\n </Show>\n <Button\n size=\"sm\"\n variant=\"secondary\"\n disabled={\n props.explorer.loading() ||\n props.explorer.error() !== null ||\n props.explorer.desired().referenceStep === props.explorer.snapshot().request.step\n }\n onClick={() => void props.explorer.pinReference()}\n >\n {messages().chartPinReference}\n </Button>\n </Show>\n </div>\n </div>\n <ChartFilterControls\n request={props.explorer.desired()}\n displayedRequest={props.explorer.snapshot().request}\n steps={props.steps}\n series={props.series}\n dimensionLabel={props.dimensionLabel}\n failed={props.explorer.error() !== null}\n onRequest={(request) => void props.explorer.setRequest(request)}\n onRetry={() => void props.explorer.retry()}\n />\n <Show when={props.explorer.snapshot().request.referenceStep}>\n {(reference) => (\n <div class=\"k2b-chart-explorer__actions\" aria-live=\"polite\">\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">●</span> {messages().chartCurrent}: {label(props.explorer.snapshot().request.step)}\n </>\n }\n />\n <StatusBadge\n tone=\"neutral\"\n icon={null}\n label={\n <>\n <span aria-hidden=\"true\">○</span> {messages().chartReference}: {label(reference())}\n </>\n }\n />\n </div>\n )}\n </Show>\n </Paper>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,9 +6,9 @@ var _tmpl$ = ["<div class=\"k2b-chart-explorer__dimension\" role=\"group\"", ">"
6
6
  _tmpl$2 = ["<div class=\"k2b-chart-explorer__legend\">", "<div class=\"k2b-chart-explorer__status\" role=\"status\">", "", "</div></div>"],
7
7
  _tmpl$3 = ["<span", ">", "</span>"];
8
8
  import { createEffect, createSignal, createUniqueId, For, Show } from "solid-js";
9
- import { Slider } from "../inputs/ChoiceInputs";
10
- import { FilterChip } from "../actions/FilterChip";
11
9
  import { Button } from "../actions/Button";
10
+ import { FilterChip } from "../actions/FilterChip";
11
+ import { Slider } from "../inputs/ChoiceInputs";
12
12
  import { useUiMessages } from "../intl/messages";
13
13
  /** Shared controls for a standalone explorer or an atomic group of charts. */
14
14
  export function ChartFilterControls(props) {
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createSignal","createUniqueId","For","Show","Slider","FilterChip","Button","useUiMessages","ChartFilterControls","props","validateOptions","items","steps","series","keys","map","item","key","some","Set","size","length","Error","messages","id","keyboardSteps","setKeyboardSteps","pointerFocus","stepLabel","find","step","label","_$createComponent","when","children","_$ssr","_tmpl$","_$ssrAttribute","_$escape","dimensionLabel","range","undefined","showValue","min","max","Math","value","findIndex","request","disabled","formatValue","index","aria-valuetext","onValueChange","onRequest","each","_tmpl$3","_tmpl$2","chartSeries","icon","visibleKeys","defaultValue","isActive","options","multiple","color","failed","couldNotLoadData","variant","onClick","onRetry","retry","chartPreviousData","displayedRequest"],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Button } from \"../actions/Button\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createSignal","createUniqueId","For","Show","Button","FilterChip","Slider","useUiMessages","ChartFilterControls","props","validateOptions","items","steps","series","keys","map","item","key","some","Set","size","length","Error","messages","id","keyboardSteps","setKeyboardSteps","pointerFocus","stepLabel","find","step","label","_$createComponent","when","children","_$ssr","_tmpl$","_$ssrAttribute","_$escape","dimensionLabel","range","undefined","showValue","min","max","Math","value","findIndex","request","disabled","formatValue","index","aria-valuetext","onValueChange","onRequest","each","_tmpl$3","_tmpl$2","chartSeries","icon","visibleKeys","defaultValue","isActive","options","multiple","color","failed","couldNotLoadData","variant","onClick","onRetry","retry","chartPreviousData","displayedRequest"],"sources":["content/ChartFilterControls.tsx"],"sourcesContent":["import { createEffect, createSignal, createUniqueId, For, Show } from \"solid-js\";\nimport { Button } from \"../actions/Button\";\nimport { FilterChip } from \"../actions/FilterChip\";\nimport { Slider } from \"../inputs/ChoiceInputs\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartExplorerRequest } from \"./chart-explorer\";\n\nexport type ChartFilterControlsProps = {\n request: ChartExplorerRequest;\n displayedRequest: ChartExplorerRequest;\n steps?: readonly { key: string; label: string }[];\n series?: readonly { key: string; label: string; color: string }[];\n dimensionLabel?: string;\n disabled?: boolean;\n failed?: boolean;\n onRequest: (request: ChartExplorerRequest) => void;\n onRetry?: () => void;\n};\n\n/** Shared controls for a standalone explorer or an atomic group of charts. */\nexport function ChartFilterControls(props: ChartFilterControlsProps) {\n const validateOptions = () => {\n for (const items of [props.steps, props.series]) {\n const keys = items?.map((item) => item.key) ?? [];\n if (keys.some((key) => !key) || new Set(keys).size !== keys.length)\n throw new Error(\"Chart control options require nonempty unique keys\");\n }\n };\n validateOptions();\n createEffect(validateOptions);\n const messages = useUiMessages();\n const id = `k2b-chart-controls-${createUniqueId()}`;\n const [keyboardSteps, setKeyboardSteps] = createSignal(false);\n let pointerFocus = false;\n const stepLabel = (key: string | undefined) => props.steps?.find((step) => step.key === key)?.label ?? key ?? \"\";\n return (\n <>\n <Show when={props.steps?.length}>\n <div\n class=\"k2b-chart-explorer__dimension\"\n role=\"group\"\n aria-label={props.dimensionLabel ?? messages().range}\n data-keyboard={keyboardSteps() ? \"true\" : undefined}\n onPointerDown={() => {\n pointerFocus = true;\n setKeyboardSteps(false);\n }}\n onKeyDown={() => {\n pointerFocus = false;\n setKeyboardSteps(true);\n }}\n onFocusIn={(event) => {\n if (!pointerFocus && event.target.matches(\":focus-visible\")) setKeyboardSteps(true);\n }}\n onFocusOut={() => {\n pointerFocus = false;\n setKeyboardSteps(false);\n }}\n >\n <Slider\n id={`${id}-dimension`}\n showValue={false}\n aria-describedby={`${id}-steps`}\n label={props.dimensionLabel ?? messages().range}\n min={0}\n max={Math.max(0, (props.steps?.length ?? 1) - 1)}\n step={1}\n value={Math.max(0, props.steps?.findIndex((step) => step.key === props.request.step) ?? 0)}\n disabled={props.disabled || (props.steps?.length ?? 0) < 2}\n formatValue={(index) => props.steps?.[index]?.label ?? \"\"}\n aria-valuetext={stepLabel(props.request.step)}\n onValueChange={(index) => {\n const step = props.steps?.[index];\n if (step) props.onRequest({ ...props.request, step: step.key });\n }}\n />\n <output class=\"k2b-chart-explorer__dimension-value\" for={`${id}-dimension`}>\n {stepLabel(props.request.step)}\n </output>\n <div id={`${id}-steps`} class=\"k2b-chart-explorer__steps\">\n <For each={props.steps}>\n {(step) => <span data-current={step.key === props.request.step ? \"true\" : undefined}>{step.label}</span>}\n </For>\n </div>\n </div>\n </Show>\n <div class=\"k2b-chart-explorer__legend\">\n <Show when={props.series?.length}>\n <FilterChip\n label={messages().chartSeries}\n icon=\"ti ti-chart-dots\"\n disabled={props.disabled}\n value={props.request.visibleKeys ?? props.series?.map((item) => item.key) ?? []}\n defaultValue={props.series?.map((item) => item.key) ?? []}\n isActive={props.request.visibleKeys !== undefined && props.request.visibleKeys.length !== props.series?.length}\n options={[\n { multiple: true, options: (props.series ?? []).map((item) => ({ value: item.key, label: item.label, color: item.color })) },\n ]}\n onValueChange={(visibleKeys) => props.onRequest({ ...props.request, visibleKeys })}\n />\n </Show>\n <div class=\"k2b-chart-explorer__status\" role=\"status\">\n <Show when={props.failed}>\n {messages().couldNotLoadData}{\" \"}\n <Button variant=\"text\" size=\"sm\" onClick={props.onRetry}>\n {messages().retry}\n </Button>\n </Show>\n <Show when={props.failed}>\n · {messages().chartPreviousData}\n <Show when={props.steps?.length}>: {stepLabel(props.displayedRequest.step)}</Show>\n </Show>\n </div>\n </div>\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,9 +6,10 @@ import { escape as _$escape } from "solid-js/web";
6
6
  var _tmpl$ = ["<div class=\"k2b-chart\"", " data-interactive=\"true\" style=\"", "\" role=\"group\"", " tabindex=\"0\"><div class=\"k2b-chart__svg\"", " style=\"", "\">", "</div><span class=\"k2b-chart__anchor\" aria-hidden=\"true\"></span><span", " class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\"></span></div>"];
7
7
  import { createEffect, createUniqueId, onCleanup, onMount } from "solid-js";
8
8
  import { isServer } from "solid-js/web";
9
- import { selectedChartSvg } from "./chart-svg";
10
9
  import { useUiMessages } from "../intl/messages";
11
10
  import { createChartInspection, sameChartDatum } from "./chart-inspection";
11
+ import { selectedChartSvg } from "./chart-svg";
12
+
12
13
  /** Internal display for server-prepared geometry. Viewports are snapshot-owned. */
13
14
  export function ChartSnapshotView(props) {
14
15
  const messages = useUiMessages();
@@ -1 +1 @@
1
- {"version":3,"names":["createEffect","createUniqueId","onCleanup","onMount","isServer","selectedChartSvg","useUiMessages","createChartInspection","sameChartDatum","ChartSnapshotView","props","messages","container","tooltip","anchor","id","inspection","cursor","kind","snapshot","enabled","format","datum","marks","find","m","rows","select","mark","onSelect","rowKey","invalidate","selectData","filter","selectedKey","map","outside","event","target","Node","contains","close","window","addEventListener","removeEventListener","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_$ssrStyle","style","interactiveChart","stretch","undefined","_$ssrStyleProperty","width","height","svg"],"sources":["content/ChartSnapshotView.tsx"],"sourcesContent":["import type { ChartCursor } from \"./chart-cursor\";\nimport { createEffect, createUniqueId, onCleanup, onMount, type JSX } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { selectedChartSvg } from \"./chart-svg\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { createChartInspection, sameChartDatum } from \"./chart-inspection\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\n\n/** Internal display for server-prepared geometry. Viewports are snapshot-owned. */\nexport function ChartSnapshotView(props: {\n snapshot: ChartSnapshot;\n cursor?: ChartCursor;\n selectedKey: string | null;\n onSelect: (key: string) => void;\n style?: JSX.CSSProperties;\n}) {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let tooltip: HTMLSpanElement | undefined;\n let anchor: HTMLSpanElement | undefined;\n const id = `k2b-chart-tooltip-${createUniqueId()}`;\n const inspection = createChartInspection({\n container: () => container,\n cursor: () => props.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => props.snapshot.kind,\n enabled: () => true,\n format: ({ datum }) => props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum))?.tooltip ?? { rows: [] },\n select: ({ datum }) => {\n const mark = props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum));\n if (mark) props.onSelect(mark.rowKey);\n },\n });\n createEffect(() => {\n props.snapshot;\n inspection.invalidate();\n });\n createEffect(() => inspection.selectData(props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum)));\n onMount(() => {\n const outside = (event: Event) => {\n if (event.target instanceof Node && !container?.contains(event.target)) inspection.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", inspection.close, true);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", inspection.close, true);\n });\n });\n onCleanup(inspection.close);\n return (\n <div\n ref={container}\n class=\"k2b-chart\"\n data-chart-kind={props.snapshot.kind}\n data-interactive=\"true\"\n style={props.style}\n role=\"group\"\n aria-label={messages().interactiveChart}\n tabIndex={0}\n onPointerDown={inspection.down}\n onPointerMove={inspection.move}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={inspection.close}\n onKeyDown={inspection.key}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={props.snapshot.stretch ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${props.snapshot.width}px`,\n \"--k2b-chart-height\": `${props.snapshot.height}px`,\n \"aspect-ratio\": `${props.snapshot.width}/${props.snapshot.height}`,\n }}\n innerHTML={\n isServer\n ? selectedChartSvg(\n props.snapshot.svg,\n props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum),\n )\n : props.snapshot.svg\n }\n />\n <span ref={anchor} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span ref={tooltip} id={id} class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\" />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createEffect","createUniqueId","onCleanup","onMount","isServer","useUiMessages","createChartInspection","sameChartDatum","selectedChartSvg","ChartSnapshotView","props","messages","container","tooltip","anchor","id","inspection","cursor","kind","snapshot","enabled","format","datum","marks","find","m","rows","select","mark","onSelect","rowKey","invalidate","selectData","filter","selectedKey","map","outside","event","target","Node","contains","close","window","addEventListener","removeEventListener","_$ssr","_tmpl$","_$ssrAttribute","_$escape","_$ssrStyle","style","interactiveChart","stretch","undefined","_$ssrStyleProperty","width","height","svg"],"sources":["content/ChartSnapshotView.tsx"],"sourcesContent":["import { createEffect, createUniqueId, type JSX, onCleanup, onMount } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { useUiMessages } from \"../intl/messages\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { createChartInspection, sameChartDatum } from \"./chart-inspection\";\nimport type { ChartSnapshot } from \"./chart-snapshot\";\nimport { selectedChartSvg } from \"./chart-svg\";\n\n/** Internal display for server-prepared geometry. Viewports are snapshot-owned. */\nexport function ChartSnapshotView(props: {\n snapshot: ChartSnapshot;\n cursor?: ChartCursor;\n selectedKey: string | null;\n onSelect: (key: string) => void;\n style?: JSX.CSSProperties;\n}) {\n const messages = useUiMessages();\n let container: HTMLDivElement | undefined;\n let tooltip: HTMLSpanElement | undefined;\n let anchor: HTMLSpanElement | undefined;\n const id = `k2b-chart-tooltip-${createUniqueId()}`;\n const inspection = createChartInspection({\n container: () => container,\n cursor: () => props.cursor,\n tooltip: () => tooltip,\n anchor: () => anchor,\n kind: () => props.snapshot.kind,\n enabled: () => true,\n format: ({ datum }) => props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum))?.tooltip ?? { rows: [] },\n select: ({ datum }) => {\n const mark = props.snapshot.marks.find((m) => sameChartDatum(m.datum, datum));\n if (mark) props.onSelect(mark.rowKey);\n },\n });\n createEffect(() => {\n props.snapshot;\n inspection.invalidate();\n });\n createEffect(() => inspection.selectData(props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum)));\n onMount(() => {\n const outside = (event: Event) => {\n if (event.target instanceof Node && !container?.contains(event.target)) inspection.close();\n };\n window.addEventListener(\"pointerdown\", outside);\n window.addEventListener(\"scroll\", inspection.close, true);\n onCleanup(() => {\n window.removeEventListener(\"pointerdown\", outside);\n window.removeEventListener(\"scroll\", inspection.close, true);\n });\n });\n onCleanup(inspection.close);\n return (\n <div\n ref={container}\n class=\"k2b-chart\"\n data-chart-kind={props.snapshot.kind}\n data-interactive=\"true\"\n style={props.style}\n role=\"group\"\n aria-label={messages().interactiveChart}\n tabIndex={0}\n onPointerDown={inspection.down}\n onPointerMove={inspection.move}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={inspection.close}\n onKeyDown={inspection.key}\n >\n <div\n class=\"k2b-chart__svg\"\n data-stretch={props.snapshot.stretch ? \"true\" : undefined}\n style={{\n \"--k2b-chart-width\": `${props.snapshot.width}px`,\n \"--k2b-chart-height\": `${props.snapshot.height}px`,\n \"aspect-ratio\": `${props.snapshot.width}/${props.snapshot.height}`,\n }}\n innerHTML={\n isServer\n ? selectedChartSvg(\n props.snapshot.svg,\n props.snapshot.marks.filter((m) => m.rowKey === props.selectedKey).map((m) => m.datum),\n )\n : props.snapshot.svg\n }\n />\n <span ref={anchor} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span ref={tooltip} id={id} class=\"k2b-chart__tooltip k2b-tooltip\" role=\"tooltip\" popover=\"manual\" data-instant=\"true\" />\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}