@k2b/ui 0.50.0 → 0.51.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.
- package/dist/base.css +32 -1
- package/dist/browser/actions/Button.js.map +1 -1
- package/dist/browser/actions/CommandList.js +861 -0
- package/dist/browser/actions/CommandList.js.map +1 -0
- package/dist/browser/actions/CommandMenu.js +237 -0
- package/dist/browser/actions/CommandMenu.js.map +1 -0
- package/dist/browser/actions/Dropdown.js +43 -10
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/command-dock.js +47 -0
- package/dist/browser/actions/command-dock.js.map +1 -0
- package/dist/browser/actions/command-items.js +84 -0
- package/dist/browser/actions/command-items.js.map +1 -0
- package/dist/browser/actions/command-messages.js +42 -0
- package/dist/browser/actions/command-messages.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/charts/core/area.js +3 -5
- package/dist/browser/charts/core/area.js.map +1 -1
- package/dist/browser/charts/core/calendar.js +1 -1
- package/dist/browser/charts/core/calendar.js.map +1 -1
- package/dist/browser/charts/core/chart-messages.js +17 -0
- package/dist/browser/charts/core/chart-messages.js.map +1 -0
- package/dist/browser/charts/core/hbar-layout.js +118 -0
- package/dist/browser/charts/core/hbar-layout.js.map +1 -0
- package/dist/browser/charts/core/hbar.js +39 -0
- package/dist/browser/charts/core/hbar.js.map +1 -0
- package/dist/browser/charts/core/index.js +7 -2
- package/dist/browser/charts/core/index.js.map +1 -1
- package/dist/browser/charts/core/map.js +116 -0
- package/dist/browser/charts/core/map.js.map +1 -0
- package/dist/browser/charts/core/registry.js +22 -15
- package/dist/browser/charts/core/registry.js.map +1 -1
- package/dist/browser/charts/core/render-size.js +13 -0
- package/dist/browser/charts/core/render-size.js.map +1 -0
- package/dist/browser/charts/core/render.js +20 -10
- package/dist/browser/charts/core/render.js.map +1 -1
- package/dist/browser/charts/core/snapshot.js +3 -3
- package/dist/browser/charts/core/snapshot.js.map +1 -1
- package/dist/browser/charts/core/svg-renderers.js +2406 -0
- package/dist/browser/charts/core/svg-renderers.js.map +1 -0
- package/dist/browser/charts/core/svg.js +4 -2525
- package/dist/browser/charts/core/svg.js.map +1 -1
- package/dist/browser/charts/core/types.js +0 -2
- package/dist/browser/charts/core/types.js.map +1 -1
- package/dist/browser/charts/core/waterfall.js +162 -0
- package/dist/browser/charts/core/waterfall.js.map +1 -0
- package/dist/browser/charts/description.js +2 -0
- package/dist/browser/charts/description.js.map +1 -0
- package/dist/browser/charts.js.map +1 -1
- package/dist/browser/content/Chart.js +14 -628
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartRoot.js +632 -0
- package/dist/browser/content/ChartRoot.js.map +1 -0
- package/dist/browser/content/ChartSparkline.js +24 -0
- package/dist/browser/content/ChartSparkline.js.map +1 -0
- package/dist/browser/content/FileView.js +111 -61
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +8 -8
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/MapView.js +30 -28
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +84 -52
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/PdfViewer.js +588 -0
- package/dist/browser/content/PdfViewer.js.map +1 -0
- package/dist/browser/content/chart-bar.js +246 -16
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +22 -21
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +1 -1
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +10 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -1
- package/dist/browser/content/chart-state-timeline.js +1 -1
- package/dist/browser/content/chart-state-timeline.js.map +1 -1
- package/dist/browser/content/chart-svg.js +2 -1
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/index.js +1 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/pdf-document.js +29 -0
- package/dist/browser/content/pdf-document.js.map +1 -0
- package/dist/browser/content/pdf-limits.js +31 -0
- package/dist/browser/content/pdf-limits.js.map +1 -0
- package/dist/browser/content/pdf-messages.js +34 -2
- package/dist/browser/content/pdf-messages.js.map +1 -1
- package/dist/browser/content/pdf-viewer-engine.js +57 -0
- package/dist/browser/content/pdf-viewer-worker.js +28 -0
- package/dist/browser/inputs/ChoiceInputs.js +94 -51
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/ChoiceSlider.js +75 -58
- package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +113 -98
- package/dist/browser/inputs/DatePicker.js.map +1 -1
- package/dist/browser/inputs/PeriodPicker.js +874 -0
- package/dist/browser/inputs/PeriodPicker.js.map +1 -0
- package/dist/browser/inputs/index.js +4 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/input-messages.js +8 -2
- package/dist/browser/inputs/input-messages.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
- package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/browser/inputs/period-picker-messages.js +71 -0
- package/dist/browser/inputs/period-picker-messages.js.map +1 -0
- package/dist/browser/inputs/period.js +263 -0
- package/dist/browser/inputs/period.js.map +1 -0
- package/dist/browser/layout/DetailPanel.js +147 -120
- package/dist/browser/layout/DetailPanel.js.map +1 -1
- package/dist/browser/layout/Discussion.js +101 -108
- package/dist/browser/layout/Discussion.js.map +1 -1
- package/dist/browser/layout/index.js.map +1 -1
- package/dist/browser/surfaces/DescriptionList.js +5 -2
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +19 -14
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/delta-badge.js +16 -2
- package/dist/browser/surfaces/delta-badge.js.map +1 -1
- package/dist/browser/widgets/DashboardFrame.js +310 -0
- package/dist/browser/widgets/DashboardFrame.js.map +1 -0
- package/dist/browser/widgets/index.js +1 -0
- package/dist/browser/widgets/index.js.map +1 -1
- package/dist/licenses/pdfjs-dist.txt +177 -0
- package/dist/ssr/actions/Button.js.map +1 -1
- package/dist/ssr/actions/CommandList.js +638 -0
- package/dist/ssr/actions/CommandList.js.map +1 -0
- package/dist/ssr/actions/CommandMenu.js +197 -0
- package/dist/ssr/actions/CommandMenu.js.map +1 -0
- package/dist/ssr/actions/Dropdown.js +43 -10
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/command-dock.js +47 -0
- package/dist/ssr/actions/command-dock.js.map +1 -0
- package/dist/ssr/actions/command-items.js +84 -0
- package/dist/ssr/actions/command-items.js.map +1 -0
- package/dist/ssr/actions/command-messages.js +42 -0
- package/dist/ssr/actions/command-messages.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/charts/core/area.js +3 -5
- package/dist/ssr/charts/core/area.js.map +1 -1
- package/dist/ssr/charts/core/calendar.js +1 -1
- package/dist/ssr/charts/core/calendar.js.map +1 -1
- package/dist/ssr/charts/core/chart-messages.js +17 -0
- package/dist/ssr/charts/core/chart-messages.js.map +1 -0
- package/dist/ssr/charts/core/hbar-layout.js +118 -0
- package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
- package/dist/ssr/charts/core/hbar.js +39 -0
- package/dist/ssr/charts/core/hbar.js.map +1 -0
- package/dist/ssr/charts/core/index.js +7 -2
- package/dist/ssr/charts/core/index.js.map +1 -1
- package/dist/ssr/charts/core/map.js +116 -0
- package/dist/ssr/charts/core/map.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +22 -15
- package/dist/ssr/charts/core/registry.js.map +1 -1
- package/dist/ssr/charts/core/render-size.js +13 -0
- package/dist/ssr/charts/core/render-size.js.map +1 -0
- package/dist/ssr/charts/core/render.js +20 -10
- package/dist/ssr/charts/core/render.js.map +1 -1
- package/dist/ssr/charts/core/snapshot.js +3 -3
- package/dist/ssr/charts/core/snapshot.js.map +1 -1
- package/dist/ssr/charts/core/svg-renderers.js +2406 -0
- package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
- package/dist/ssr/charts/core/svg.js +4 -2525
- package/dist/ssr/charts/core/svg.js.map +1 -1
- package/dist/ssr/charts/core/types.js +0 -2
- package/dist/ssr/charts/core/types.js.map +1 -1
- package/dist/ssr/charts/core/waterfall.js +162 -0
- package/dist/ssr/charts/core/waterfall.js.map +1 -0
- package/dist/ssr/charts/description.js +2 -0
- package/dist/ssr/charts/description.js.map +1 -0
- package/dist/ssr/charts.js.map +1 -1
- package/dist/ssr/content/Chart.js +14 -471
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartRoot.js +475 -0
- package/dist/ssr/content/ChartRoot.js.map +1 -0
- package/dist/ssr/content/ChartSparkline.js +24 -0
- package/dist/ssr/content/ChartSparkline.js.map +1 -0
- package/dist/ssr/content/FileView.js +56 -7
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +8 -8
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/MapView.js +9 -9
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +49 -20
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/PdfViewer.js +484 -0
- package/dist/ssr/content/PdfViewer.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +246 -16
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +22 -21
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +1 -1
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +10 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -1
- package/dist/ssr/content/chart-state-timeline.js +1 -1
- package/dist/ssr/content/chart-state-timeline.js.map +1 -1
- package/dist/ssr/content/chart-svg.js +2 -1
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/index.js +1 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/pdf-document.js +29 -0
- package/dist/ssr/content/pdf-document.js.map +1 -0
- package/dist/ssr/content/pdf-limits.js +31 -0
- package/dist/ssr/content/pdf-limits.js.map +1 -0
- package/dist/ssr/content/pdf-messages.js +34 -2
- package/dist/ssr/content/pdf-messages.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +49 -12
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/ChoiceSlider.js +17 -12
- package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +14 -9
- package/dist/ssr/inputs/DatePicker.js.map +1 -1
- package/dist/ssr/inputs/PeriodPicker.js +598 -0
- package/dist/ssr/inputs/PeriodPicker.js.map +1 -0
- package/dist/ssr/inputs/index.js +4 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/input-messages.js +8 -2
- package/dist/ssr/inputs/input-messages.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
- package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/ssr/inputs/period-picker-messages.js +71 -0
- package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
- package/dist/ssr/inputs/period.js +263 -0
- package/dist/ssr/inputs/period.js.map +1 -0
- package/dist/ssr/layout/DetailPanel.js +27 -4
- package/dist/ssr/layout/DetailPanel.js.map +1 -1
- package/dist/ssr/layout/Discussion.js +16 -2
- package/dist/ssr/layout/Discussion.js.map +1 -1
- package/dist/ssr/layout/index.js.map +1 -1
- package/dist/ssr/surfaces/DescriptionList.js +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +4 -5
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/delta-badge.js +16 -2
- package/dist/ssr/surfaces/delta-badge.js.map +1 -1
- package/dist/ssr/widgets/DashboardFrame.js +200 -0
- package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
- package/dist/ssr/widgets/index.js +1 -0
- package/dist/ssr/widgets/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Button.d.ts +1 -1
- package/dist/types/actions/CommandList.d.ts +120 -0
- package/dist/types/actions/CommandMenu.d.ts +39 -0
- package/dist/types/actions/Dropdown.d.ts +17 -0
- package/dist/types/actions/command-dock.d.ts +8 -0
- package/dist/types/actions/command-items.d.ts +134 -0
- package/dist/types/actions/command-messages.d.ts +19 -0
- package/dist/types/actions/index.d.ts +3 -0
- package/dist/types/charts/core/calendar.d.ts +1 -1
- package/dist/types/charts/core/chart-messages.d.ts +5 -0
- package/dist/types/charts/core/hbar-layout.d.ts +74 -0
- package/dist/types/charts/core/hbar.d.ts +13 -0
- package/dist/types/charts/core/index.d.ts +7 -2
- package/dist/types/charts/core/map.d.ts +3 -0
- package/dist/types/charts/core/registry.d.ts +17 -11
- package/dist/types/charts/core/render-size.d.ts +7 -0
- package/dist/types/charts/core/render.d.ts +1 -4
- package/dist/types/charts/core/snapshot.d.ts +2 -2
- package/dist/types/charts/core/svg-renderers.d.ts +722 -0
- package/dist/types/charts/core/svg.d.ts +4 -698
- package/dist/types/charts/core/types.d.ts +1 -12
- package/dist/types/charts/core/waterfall.d.ts +68 -0
- package/dist/types/charts/description.d.ts +226 -0
- package/dist/types/charts.d.ts +1 -0
- package/dist/types/content/Chart.d.ts +3 -91
- package/dist/types/content/ChartRoot.d.ts +92 -0
- package/dist/types/content/ChartSparkline.d.ts +5 -0
- package/dist/types/content/PdfViewer.d.ts +32 -0
- package/dist/types/content/chart-bar.d.ts +95 -2
- package/dist/types/content/index.d.ts +2 -0
- package/dist/types/content/pdf-document.d.ts +5 -0
- package/dist/types/content/pdf-engine.d.ts +9 -0
- package/dist/types/content/pdf-limits.d.ts +43 -0
- package/dist/types/content/pdf-messages.d.ts +16 -0
- package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
- package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
- package/dist/types/inputs/DatePicker.d.ts +22 -0
- package/dist/types/inputs/PeriodPicker.d.ts +24 -0
- package/dist/types/inputs/index.d.ts +8 -2
- package/dist/types/inputs/input-messages.d.ts +3 -0
- package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
- package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
- package/dist/types/inputs/period-picker-messages.d.ts +34 -0
- package/dist/types/inputs/period.d.ts +134 -0
- package/dist/types/layout/DetailPanel.d.ts +12 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/surfaces/DescriptionList.d.ts +5 -0
- package/dist/types/surfaces/StatCell.d.ts +6 -1
- package/dist/types/widgets/DashboardFrame.d.ts +58 -0
- package/dist/types/widgets/index.d.ts +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/svg-renderers.ts"],"sourcesContent":["// Ported from @k2b/stdlib 0.30.0 (ISC); retain SVG and numeric algorithms until parity proves changes.\n// ==========================\n// SVG Chart Generation\n// ==========================\n//\n// Pure-native SVG generation for the four basic chart types: scatter, line,\n// bar, and pie/donut. Returns SVG strings — inject directly into the DOM,\n// write to disk, or send over the wire. No peer dependencies.\n//\n// Charts ship with embedded default CSS using semantic class names and CSS\n// custom properties for colors. Consumers override styles via class selectors\n// (their CSS wins on specificity) or CSS variables (`--stdlib-chart-c1` ...\n// `--stdlib-chart-c8`). Axes and labels use `currentColor` so parent `color`\n// drives theming (dark mode \"just works\").\n\nimport type { IntentTone } from \"../../semantics\";\nimport type { ChartDatum } from \"./types\";\n\n// ==========================\n// PUBLIC TYPES\n// ==========================\n\nexport type Point = {\n x: number;\n y: number;\n /** Optional third dimension. Honored by `scatter` (controls dot radius);\n * ignored by `line` and `sparkline`. */\n size?: number;\n /** Symmetric ±error on the y value. Used by error-bar rendering on\n * `scatter` and `line`. Overridden by `errYHigh`/`errYLow` if set. */\n errY?: number;\n /** Asymmetric upper bound on y (relative magnitude added to y). */\n errYHigh?: number;\n /** Asymmetric lower bound on y (relative magnitude subtracted from y). */\n errYLow?: number;\n /** Symmetric ±error on the x value. Renders horizontal error bars. */\n errX?: number;\n /** Asymmetric upper bound on x. */\n errXHigh?: number;\n /** Asymmetric lower bound on x. */\n errXLow?: number;\n};\n\n/** Marker shapes for `scatter` data points. Auto-cycles per series when\n * `autoVariant` is enabled on the chart. */\nexport type MarkerShape = \"circle\" | \"square\" | \"triangle\" | \"diamond\" | \"plus\" | \"cross\";\n\n/** Line dash patterns for `line` series. Auto-cycles per series when\n * `autoVariant` is enabled. */\nexport type LineStyle = \"solid\" | \"dashed\" | \"dotted\" | \"dashdot\";\n\nexport type Series = {\n /** Optional label for this series. Used by `legend` rendering. */\n label?: string;\n data: Point[];\n /** Override the marker shape for this series. Default: `circle`, or\n * cycled from `DEFAULT_MARKERS` when the chart's `autoVariant` is true. */\n marker?: MarkerShape;\n /** Override the line dash pattern for this series. Default: `solid`, or\n * cycled from `DEFAULT_LINE_STYLES` when the chart's `autoVariant` is true. */\n lineStyle?: LineStyle;\n};\n\nexport type MapPoint = {\n /** Latitude in decimal degrees, from -90 to 90. */\n latitude: number;\n /** Longitude in decimal degrees, from -180 to 180. */\n longitude: number;\n /** Optional label emitted as an escaped SVG `<title>`. */\n label?: string;\n /** Optional magnitude used to scale the point radius. */\n size?: number;\n};\n\nexport type MapSeries = {\n /** Optional label used by the legend. */\n label?: string;\n data: MapPoint[];\n};\n\nexport type MapViewport = {\n /** Latitude at the center of the viewport. */\n latitude: number;\n /** Longitude at the center of the viewport. */\n longitude: number;\n /** Zoom level from 0 (full world) to 5. Each level doubles the scale. */\n zoom: number;\n};\n\nexport type MapOptions = ChartOptions & {\n series: MapSeries[];\n /** Deterministic map center and zoom. Values are normalized to the map bounds. */\n viewport?: MapViewport;\n /** Pixel-radius range used when at least one finite `size` exists. */\n sizeRange?: [number, number];\n /** Render a series legend below the map. Default false. */\n legend?: boolean;\n};\n\nexport type BarItem = { label: string; value: number; colorIndex?: number };\n\nexport type SliceItem = { label: string; value: number; colorIndex?: number };\n\nconst itemColorIndex = (item: { colorIndex?: number }, fallback: number): number => {\n const index = item.colorIndex ?? fallback;\n if (!Number.isInteger(index) || index < 0) throw new RangeError(\"Chart colorIndex must be a nonnegative integer\");\n return index % 8;\n};\n\nexport type AxisOptions = {\n /** Exact inclusive bounds for comparisons. Must contain all finite plotted\n * values (including error bounds/baselines); invalid bounds throw RangeError. */\n domain?: [number, number];\n /** Opt in to space beside exact endpoint labels. Numeric X labels align\n * inward; adjacent nice ticks within one interval are omitted. Default false. */\n insetEndpointLabels?: boolean;\n /** Suggested tick count. Actual count may differ to keep ticks \"nice\". */\n ticks?: number;\n /** Format a tick value into a label string. Default: `String(v)`. */\n format?: (value: number) => string;\n /** Optional axis title rendered alongside the axis. */\n label?: string;\n /** Axis scale. `\"linear\"` (default) or `\"log\"`. Log axis requires all\n * data on this axis to be strictly positive; non-positive values are\n * filtered out before domain computation. */\n scale?: \"linear\" | \"log\";\n /** Render small subdivision ticks between major ticks. Default false. */\n minorTicks?: boolean;\n};\n\nexport type Padding = { top: number; right: number; bottom: number; left: number };\n\n/** One selectable datum in an inspected SVG. Indices refer to the source arrays.\n * `anchor` uses the containing SVG coordinate system, including nested map SVGs.\n * Values are raw data; `formatted` contains the renderer's axis/value formatting.\n */\n\n/** Wrap renderer-owned geometry with escaped, inert inspection metadata. */\nexport const chartDatumSvg = (svg: string, datum: ChartDatum, inspect?: boolean, titleText?: string): string => {\n if (!inspect || !datum.anchor.every(Number.isFinite)) return svg;\n const title =\n titleText ??\n [datum.label, ...datum.values.map((field) => `${field.key}: ${field.formatted ?? field.value}`)].filter(Boolean).join(\" · \");\n return `<g data-chart-role=\"${escapeXml(datum.role)}\" data-chart-datum=\"${escapeXml(JSON.stringify(datum))}\"><title>${escapeXml(title)}</title>${svg}</g>`;\n};\n\nconst inspectionPoint = (datum: ChartDatum, inspect?: boolean): string =>\n inspect\n ? chartDatumSvg(\n `<circle class=\"stdlib-chart-inspection-point\" cx=\"${fmt(datum.anchor[0])}\" cy=\"${fmt(datum.anchor[1])}\" r=\"3\" fill=\"transparent\" stroke=\"none\"/>`,\n datum,\n true,\n )\n : \"\";\n\nconst pointValues = (p: Point, xAxis?: AxisOptions, yAxis?: AxisOptions): ChartDatum[\"values\"] => [\n { key: \"x\", value: p.x, formatted: xAxis?.format?.(p.x) },\n { key: \"y\", value: p.y, formatted: yAxis?.format?.(p.y) },\n ...Object.entries(p)\n .filter(([key, value]) => key !== \"x\" && key !== \"y\" && typeof value === \"number\" && Number.isFinite(value))\n .map(([key, value]) => ({ key, value })),\n];\n\nexport type ChartOptions = {\n /** Emit inert datum metadata and SVG titles for progressive inspection. */\n inspect?: boolean;\n /** Default 400. */\n width?: number;\n /** Default 240. */\n height?: number;\n /** Default `{ top: 16, right: 16, bottom: 32, left: 40 }`. A single number\n * is applied to all four sides. */\n padding?: number | Partial<Padding>;\n /** Appended to the root `<svg>`'s class attribute (after `stdlib-chart`). */\n className?: string;\n /** Optional centered title rendered above the plot area. */\n title?: string;\n /** Optional centered subtitle rendered below the title. */\n subtitle?: string;\n};\n\n/**\n * A horizontal or vertical reference line drawn on a cartesian chart, e.g.\n * for thresholds, targets, or averages.\n */\nexport type ReferenceLine = {\n /** Data value at which to draw the line. */\n value: number;\n /** Axis the line is anchored to. `\"y\"` (default) draws a horizontal line\n * at the given y-value; `\"x\"` draws a vertical line at the x-value. */\n axis?: \"x\" | \"y\";\n /** Optional inline label rendered at the end of the line. */\n label?: string;\n /** Omit to retain the existing dashed line. */\n style?: \"solid\" | \"dashed\" | \"dotted\";\n /** Semantic color shared by the line and its label, with standalone SVG fallbacks. */\n tone?: IntentTone;\n};\n\n/** Internal shared attributes for raw cartesian charts and UI bar layouts. */\nexport const referenceLineAttributes = (ref: ReferenceLine, label = false): string => {\n const declarations: string[] = [];\n if (!label && ref.style !== undefined) {\n const styles = { solid: \"none\", dashed: \"4 4\", dotted: \"1 3\" };\n const dash = styles[ref.style];\n if (typeof dash !== \"string\") throw new RangeError(\"Invalid reference line style\");\n declarations.push(`stroke-dasharray:${dash}`);\n if (ref.style === \"dotted\") declarations.push(\"stroke-linecap:round\");\n }\n if (ref.tone !== undefined) {\n const tones: Record<IntentTone, string> = {\n neutral: \"currentColor\",\n info: \"var(--k2b-info-text,#1d4ed8)\",\n success: \"var(--k2b-success-text,#047857)\",\n warning: \"var(--k2b-warning-text,#92400e)\",\n danger: \"var(--k2b-danger-text,#b91c1c)\",\n };\n const color = tones[ref.tone];\n if (typeof color !== \"string\") throw new RangeError(\"Invalid reference line tone\");\n declarations.push(`color:${color}`);\n }\n return declarations.length ? ` style=\"${declarations.join(\";\")}\"` : \"\";\n};\n\n// ==========================\n// CONSTANTS\n// ==========================\n\nconst DEFAULT_WIDTH = 400;\nconst DEFAULT_HEIGHT = 240;\nconst DEFAULT_PADDING: Padding = { top: 16, right: 16, bottom: 32, left: 40 };\nconst DEFAULT_TICKS = 5;\n\nconst DEFAULT_MARKERS: readonly MarkerShape[] = [\"circle\", \"square\", \"triangle\", \"diamond\", \"plus\", \"cross\"];\n\nconst DEFAULT_LINE_STYLES: readonly LineStyle[] = [\"solid\", \"dashed\", \"dotted\", \"dashdot\"];\n\n/** SVG `stroke-dasharray` values per line style. Empty string = no dasharray. */\nconst LINE_DASH_PATTERNS: Record<LineStyle, string> = {\n solid: \"\",\n dashed: \"6 4\",\n dotted: \"2 3\",\n dashdot: \"6 3 2 3\",\n};\n\n// CSS rule order is significant. Series-N rules emit first so shape-specific\n// rules below can override (e.g. line's `fill: none` beats series fill, and\n// slice/point's `stroke: white` beats series stroke).\nconst DEFAULT_STYLES = `\n/* font-family is intentionally not set here so the chart inherits the app's\n font from its surrounding HTML context. For standalone SVG usage, set\n font-family on a wrapping element or override .stdlib-chart in your CSS. */\n.stdlib-chart {\n color: #1f2937;\n --stdlib-chart-c1: #3b82f6; --stdlib-chart-c2: #10b981;\n --stdlib-chart-c3: #f59e0b; --stdlib-chart-c4: #ef4444;\n --stdlib-chart-c5: #8b5cf6; --stdlib-chart-c6: #ec4899;\n --stdlib-chart-c7: #14b8a6; --stdlib-chart-c8: #f97316;\n}\n.stdlib-chart-series-0 { fill: var(--stdlib-chart-c1); stroke: var(--stdlib-chart-c1); }\n.stdlib-chart-series-1 { fill: var(--stdlib-chart-c2); stroke: var(--stdlib-chart-c2); }\n.stdlib-chart-series-2 { fill: var(--stdlib-chart-c3); stroke: var(--stdlib-chart-c3); }\n.stdlib-chart-series-3 { fill: var(--stdlib-chart-c4); stroke: var(--stdlib-chart-c4); }\n.stdlib-chart-series-4 { fill: var(--stdlib-chart-c5); stroke: var(--stdlib-chart-c5); }\n.stdlib-chart-series-5 { fill: var(--stdlib-chart-c6); stroke: var(--stdlib-chart-c6); }\n.stdlib-chart-series-6 { fill: var(--stdlib-chart-c7); stroke: var(--stdlib-chart-c7); }\n.stdlib-chart-series-7 { fill: var(--stdlib-chart-c8); stroke: var(--stdlib-chart-c8); }\n.stdlib-chart-axis { stroke: currentColor; opacity: 0.4; fill: none; }\n.stdlib-chart-tick-label { font-size: 10px; fill: currentColor; opacity: 0.6; }\n.stdlib-chart-axis-label { font-size: 11px; fill: currentColor; opacity: 0.85; }\n.stdlib-chart-grid { stroke: currentColor; opacity: 0.08; stroke-dasharray: 2 2; fill: none; }\n.stdlib-chart-title { font-size: 14px; font-weight: 600; fill: currentColor; }\n.stdlib-chart-subtitle { font-size: 11px; fill: currentColor; opacity: 0.7; }\n.stdlib-chart-reference { stroke: currentColor; opacity: 0.5; stroke-dasharray: 4 4; fill: none; }\n.stdlib-chart-reference-label { font-size: 10px; fill: currentColor; opacity: 0.7; }\n.stdlib-chart-line { fill: none; stroke-width: 2; }\n.stdlib-chart-area { fill-opacity: 0.18; stroke: none; }\n.stdlib-chart-sparkline { fill: none; stroke-width: 1.5; stroke: currentColor; }\n.stdlib-chart-sparkline-area { stroke: none; }\n.stdlib-chart-sparkline-last { fill: currentColor; stroke: none; }\n.stdlib-chart-sparkline-max { fill: #10b981; stroke: none; }\n.stdlib-chart-sparkline-min { fill: #ef4444; stroke: none; }\n.stdlib-chart-point { stroke: white; stroke-width: 1.5; }\n.stdlib-chart-slice { stroke: white; stroke-width: 2; stroke-linejoin: round; }\n.stdlib-chart-label { font-size: 11px; fill: currentColor; }\n.stdlib-chart-bar-value { font-size: 10px; fill: currentColor; opacity: 0.8; }\n.stdlib-chart-errorbar { stroke: currentColor; opacity: 0.55; fill: none; stroke-width: 1; }\n.stdlib-chart-error-band { fill-opacity: 0.15; stroke: none; }\n.stdlib-chart-trendline { stroke: currentColor; opacity: 0.55; stroke-width: 1.5; fill: none; stroke-dasharray: 5 4; }\n.stdlib-chart-minor-tick { stroke: currentColor; opacity: 0.25; }\n.stdlib-chart-box { fill-opacity: 0.4; stroke-width: 1; }\n.stdlib-chart-box-median { stroke: currentColor; stroke-width: 1.5; fill: none; }\n.stdlib-chart-box-whisker { stroke: currentColor; opacity: 0.6; fill: none; }\n.stdlib-chart-box-cap { stroke: currentColor; opacity: 0.6; fill: none; }\n.stdlib-chart-box-outlier { fill: currentColor; opacity: 0.5; stroke: white; stroke-width: 1; }\n.stdlib-chart-legend-swatch { stroke: none; }\n.stdlib-chart-legend-label { font-size: 11px; font-weight: 400; fill: currentColor; stroke: none; }\n.stdlib-chart-empty-text { font-size: 11px; fill: currentColor; opacity: 0.5; }\n.stdlib-chart-gauge-track { stroke: currentColor; stroke-width: 10; opacity: 0.12; fill: none; stroke-linecap: round; }\n.stdlib-chart-gauge-fill { stroke-width: 10; fill: none; stroke-linecap: round; }\n.stdlib-chart-gauge-gradient-segment { stroke-width: 10; fill: none; stroke-linecap: butt; }\n.stdlib-chart-gauge-gradient-scale { opacity: 0.22; }\n.stdlib-chart-gauge-needle { stroke-width: 2; fill: none; stroke-linecap: round; }\n.stdlib-chart-gauge-hub { fill: currentColor; stroke: none; }\n.stdlib-chart-gauge-value { font-size: 28px; font-weight: 700; fill: currentColor; }\n.stdlib-chart-gauge-label { font-size: 12px; fill: currentColor; opacity: 0.72; }\n.stdlib-chart-gauge-unit { font-size: 11px; fill: currentColor; opacity: 0.6; }\n.stdlib-chart-bar-gauge-track { fill: currentColor; opacity: 0.1; }\n.stdlib-chart-bar-gauge-fill { stroke: none; }\n.stdlib-chart-bar-gauge-label { font-size: 11px; fill: currentColor; opacity: 0.75; }\n.stdlib-chart-bar-gauge-value { font-size: 11px; font-weight: 600; fill: currentColor; }\n.stdlib-chart-stat-label { font-size: 12px; fill: currentColor; opacity: 0.72; }\n.stdlib-chart-stat-value { font-size: 30px; font-weight: 700; fill: currentColor; }\n.stdlib-chart-stat-unit { font-size: 14px; font-weight: 600; fill: currentColor; opacity: 0.72; }\n.stdlib-chart-stat-delta { font-size: 12px; font-weight: 600; fill: currentColor; opacity: 0.72; }\n.stdlib-chart-stat-delta-up { fill: #10b981; opacity: 1; }\n.stdlib-chart-stat-delta-down { fill: #ef4444; opacity: 1; }\n.stdlib-chart-stat-sparkline { fill: none; stroke: currentColor; stroke-width: 1.6; opacity: 0.86; }\n.stdlib-chart-stat-sparkline-area { stroke: none; opacity: 0.18; }\n.stdlib-chart-heatmap-cell { stroke: white; stroke-width: 1; }\n.stdlib-chart-heatmap-label { font-size: 10px; fill: currentColor; opacity: 0.68; }\n.stdlib-chart-map-land { fill: currentColor; opacity: var(--stdlib-chart-map-land-opacity, 0.12); stroke: currentColor; stroke-width: 0.5; stroke-linejoin: round; }\n.stdlib-chart-map-point { stroke: var(--stdlib-chart-map-point-stroke, white); stroke-width: 1.5; }\n.stdlib-chart-map-empty { font-size: 11px; fill: currentColor; opacity: 0.55; }\n.stdlib-chart-state-region { stroke: white; stroke-width: 1; }\n.stdlib-chart-state-label { font-size: 11px; fill: currentColor; opacity: 0.75; }\n`.trim();\n\n// ==========================\n// HELPERS (pure)\n// ==========================\n\n/** XML-escape a string for safe inclusion in attribute values or text content. */\nexport const escapeXml = (s: string): string =>\n s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\").replace(/'/g, \"'\");\n\n/** Normalize a `Padding` input (number or partial object) to a full `Padding`. */\nexport const normalizePadding = (p: number | Partial<Padding> | undefined): Padding => {\n if (p === undefined) return { ...DEFAULT_PADDING };\n if (typeof p === \"number\") return { top: p, right: p, bottom: p, left: p };\n return {\n top: p.top ?? DEFAULT_PADDING.top,\n right: p.right ?? DEFAULT_PADDING.right,\n bottom: p.bottom ?? DEFAULT_PADDING.bottom,\n left: p.left ?? DEFAULT_PADDING.left,\n };\n};\n\n/**\n * Compute `[min, max]` from a list of numeric values, ignoring non-finite\n * entries. Returns `[0, 1]` for an empty/all-non-finite list and pads ±1\n * around a single finite value.\n */\nexport const computeDomain = (values: readonly number[]): [number, number] => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (const v of values) {\n if (!Number.isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n if (min === max) return [min - 1, max + 1];\n return [min, max];\n};\n\n/**\n * Pick a \"nice\" axis step (1, 2, 5, 10, 20, 50, ...) that splits `range`\n * into roughly `target` intervals. Avoids ugly tick labels like 0.473.\n */\nexport const niceStep = (range: number, target: number): number => {\n if (range <= 0 || target <= 0) return 1;\n const rough = range / target;\n const mag = Math.pow(10, Math.floor(Math.log10(rough)));\n const norm = rough / mag;\n const nice = norm < 1.5 ? 1 : norm < 3 ? 2 : norm < 7 ? 5 : 10;\n return nice * mag;\n};\n\n/** The most ticks one linear axis counts, the same budget as a time axis; more never fit a readable axis. */\nexport const MAX_AXIS_TICKS = 1_000;\n\n/**\n * Round `min` down and `max` up to the nearest multiples of `step`, so the\n * domain edges fall on tick boundaries. Returns the extended domain plus the\n * tick values within it (inclusive of both ends).\n */\nexport const extendDomainToNice = (min: number, max: number, step: number): { domain: [number, number]; ticks: number[] } => {\n const lo = Math.floor(min / step) * step;\n const hi = Math.ceil(max / step) * step;\n const ticks: number[] = [];\n // Use rounding to avoid floating-point drift at tick positions.\n const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n const round = (v: number): number => Number(v.toFixed(Math.min(decimals + 2, 12)));\n // A step below the float spacing of large values never advances, and a tiny step counts without end: keep the ends.\n const ends = { domain: [lo, hi] as [number, number], ticks: [...new Set([round(lo), round(hi)])] };\n if ((hi - lo) / step > MAX_AXIS_TICKS) return ends;\n for (let v = lo; v <= hi + step / 2; ) {\n ticks.push(round(v));\n const next = v + step;\n if (next <= v) return ends;\n v = next;\n }\n return { domain: [lo, hi], ticks };\n};\n\n/** Linear map of `value` from input domain `[d0, d1]` to output range `[r0, r1]`. */\nexport const mapRange = (value: number, [d0, d1]: readonly [number, number], [r0, r1]: readonly [number, number]): number => {\n if (d1 === d0) return (r0 + r1) / 2;\n return r0 + ((value - d0) / (d1 - d0)) * (r1 - r0);\n};\n\n/**\n * Logarithmic (base-10) map of `value` from input domain `[d0, d1]` to\n * output range `[r0, r1]`. Both domain endpoints must be strictly positive.\n * Non-positive values are clamped to a small epsilon to avoid `-Infinity`.\n */\nexport const mapLog = (value: number, [d0, d1]: readonly [number, number], [r0, r1]: readonly [number, number]): number => {\n if (d0 <= 0 || d1 <= 0) return (r0 + r1) / 2;\n const v = Math.max(value, 1e-300);\n const logD0 = Math.log10(d0);\n const logD1 = Math.log10(d1);\n if (logD0 === logD1) return (r0 + r1) / 2;\n return r0 + ((Math.log10(v) - logD0) / (logD1 - logD0)) * (r1 - r0);\n};\n\n/**\n * Compute logarithmic ticks (powers of 10) within `[min, max]`. The\n * returned array always includes both decade boundaries enclosing the\n * domain so the axis line spans the data.\n */\nexport const niceLogTicks = (min: number, max: number): { domain: [number, number]; ticks: number[] } => {\n const safeMin = Math.max(min, 1e-300);\n const safeMax = Math.max(max, safeMin);\n // Clamp the log-tick range to a finite, SVG-safe span so callers passing\n // Number.MAX_VALUE (or non-finite extremes) don't trigger an infinite loop.\n // 1e-30 .. 1e30 covers every real-world scientific magnitude.\n const MIN_EXP = -30;\n const MAX_EXP = 30;\n const loExp = Math.max(MIN_EXP, Math.floor(Math.log10(safeMin)));\n const hiExp = Math.min(MAX_EXP, Math.ceil(Math.log10(safeMax)));\n const lo = Math.pow(10, loExp);\n const hi = Math.pow(10, Math.max(loExp, hiExp));\n const ticks: number[] = [];\n // Iterate by exponent to avoid floating-point drift at extreme ranges.\n for (let e = loExp; e <= Math.max(loExp, hiExp); e++) {\n ticks.push(Math.pow(10, e));\n }\n return { domain: [lo, hi], ticks };\n};\n\n/**\n * Least-squares linear regression. Returns slope, intercept, and r² for the\n * regression line `y = slope * x + intercept`. Returns null for fewer than\n * two finite points or all-x-equal input.\n */\nexport const linearRegression = (\n points: ReadonlyArray<{ x: number; y: number }>,\n): { slope: number; intercept: number; r2: number } | null => {\n const finite = points.filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y));\n const n = finite.length;\n if (n < 2) return null;\n let sumX = 0;\n let sumY = 0;\n for (const p of finite) {\n sumX += p.x;\n sumY += p.y;\n }\n const meanX = sumX / n;\n const meanY = sumY / n;\n let num = 0;\n let denom = 0;\n let totalSS = 0;\n for (const p of finite) {\n const dx = p.x - meanX;\n const dy = p.y - meanY;\n num += dx * dy;\n denom += dx * dx;\n totalSS += dy * dy;\n }\n if (denom === 0) return null;\n const slope = num / denom;\n const intercept = meanY - slope * meanX;\n // r² via 1 - SSres / SStot\n let resSS = 0;\n for (const p of finite) {\n const predicted = slope * p.x + intercept;\n const resid = p.y - predicted;\n resSS += resid * resid;\n }\n const r2 = totalSS === 0 ? 1 : 1 - resSS / totalSS;\n return { slope, intercept, r2 };\n};\n\n/**\n * Compute box-plot statistics for a set of observations:\n * min/max, quartiles (q1/q2/q3 via R-7 linear interpolation), Tukey whiskers\n * (1.5×IQR rule clamped to data extents), and outliers beyond the whiskers.\n *\n * Returns null for an empty/all-non-finite input.\n */\nexport const computeBoxStats = (\n values: readonly number[],\n): {\n min: number;\n max: number;\n q1: number;\n q2: number;\n q3: number;\n whiskerLow: number;\n whiskerHigh: number;\n outliers: number[];\n} | null => {\n const finite = values.filter((v) => Number.isFinite(v));\n if (finite.length === 0) return null;\n const sorted = [...finite].sort((a, b) => a - b);\n const quantile = (q: number): number => {\n // R-7 (linear interpolation between consecutive order statistics).\n const pos = q * (sorted.length - 1);\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n if (lo === hi) return sorted[lo]!;\n return sorted[lo]! + (pos - lo) * (sorted[hi]! - sorted[lo]!);\n };\n const q1 = quantile(0.25);\n const q2 = quantile(0.5);\n const q3 = quantile(0.75);\n const iqr = q3 - q1;\n const fenceLow = q1 - 1.5 * iqr;\n const fenceHigh = q3 + 1.5 * iqr;\n // Whiskers extend to the most-extreme data point still inside the fences.\n let whiskerLow = q1;\n let whiskerHigh = q3;\n for (const v of sorted) {\n if (v >= fenceLow && v < whiskerLow) whiskerLow = v;\n if (v <= fenceHigh && v > whiskerHigh) whiskerHigh = v;\n }\n const outliers = sorted.filter((v) => v < fenceLow || v > fenceHigh);\n return {\n min: sorted[0]!,\n max: sorted[sorted.length - 1]!,\n q1,\n q2,\n q3,\n whiskerLow,\n whiskerHigh,\n outliers,\n };\n};\n\n/**\n * Bin a numeric dataset into a histogram. `bins` may be:\n * - undefined → Sturges' formula `ceil(log2(n)) + 1`\n * - a number → that many equal-width bins\n * - an array of edges (length k+1 → k bins)\n *\n * Non-finite input values are filtered. Returns bin edges and per-bin counts.\n */\nexport const autoBin = (values: readonly number[], bins?: number | readonly number[]): { edges: number[]; counts: number[] } => {\n const finite = values.filter((v) => Number.isFinite(v));\n if (finite.length === 0) return { edges: [0, 1], counts: [0] };\n\n // Cap bin count so a malicious / mistyped `bins: 1e9` doesn't allocate\n // gigabytes. 1024 is generous: 30 is Sturges' for 1e9 samples.\n const MAX_BINS = 1024;\n\n let edges: number[];\n if (Array.isArray(bins)) {\n const sorted = [...(bins as number[])].filter((e) => Number.isFinite(e)).sort((a, b) => a - b);\n if (sorted.length >= 2) {\n edges = sorted;\n } else {\n // Empty or single-edge input → fall back to a single auto-bin span over\n // the data so we never emit `[undefined, NaN]` edges.\n const dmin = Math.min(...finite);\n const dmax = Math.max(...finite);\n edges = dmin === dmax ? [dmin - 0.5, dmin + 0.5] : [dmin, dmax];\n }\n } else {\n // Single-loop min/max — `Math.min(...arr)` fails with RangeError on huge\n // arrays (call-stack overflow) and is also O(n) anyway.\n let min = Infinity;\n let max = -Infinity;\n for (const v of finite) {\n if (v < min) min = v;\n if (v > max) max = v;\n }\n const range = max - min;\n let k: number;\n if (typeof bins === \"number\" && bins > 0) {\n k = Math.min(MAX_BINS, Math.floor(bins));\n } else {\n k = Math.max(1, Math.min(MAX_BINS, Math.ceil(Math.log2(finite.length)) + 1));\n }\n if (range === 0) {\n edges = [min - 0.5, min + 0.5];\n } else {\n const step = range / k;\n edges = Array.from({ length: k + 1 }, (_, i) => min + i * step);\n }\n }\n\n const counts = new Array(edges.length - 1).fill(0) as number[];\n for (const v of finite) {\n // Right-open intervals [e_i, e_{i+1}); last bin closed-closed.\n let bin = -1;\n for (let i = 0; i < counts.length; i++) {\n const isLast = i === counts.length - 1;\n if (v >= edges[i]! && (isLast ? v <= edges[i + 1]! : v < edges[i + 1]!)) {\n bin = i;\n break;\n }\n }\n if (bin >= 0) counts[bin]! += 1;\n }\n return { edges, counts };\n};\n\n// ==========================\n// SVG SKELETON\n// ==========================\n\nexport type PlotArea = { x0: number; y0: number; x1: number; y1: number };\n\nexport const computePlotArea = (\n width: number,\n height: number,\n padding: Padding,\n hasXAxisLabel: boolean,\n hasYAxisLabel: boolean,\n headerHeight = 0,\n legendHeight = 0,\n): PlotArea => {\n // Reserve extra space when axis labels are present.\n const extraBottom = hasXAxisLabel ? 14 : 0;\n const extraLeft = hasYAxisLabel ? 14 : 0;\n return {\n x0: padding.left + extraLeft,\n y0: padding.top + headerHeight,\n x1: width - padding.right,\n y1: height - padding.bottom - extraBottom - legendHeight,\n };\n};\n\n/**\n * Render an optional centered header (title + subtitle) at the top of an\n * SVG. Returns the SVG fragment plus the pixel height it consumed so the\n * caller can shift the plot area down accordingly.\n */\nexport const renderHeader = (width: number, title: string | undefined, subtitle: string | undefined): { svg: string; height: number } => {\n if (!title && !subtitle) return { svg: \"\", height: 0 };\n const cx = width / 2;\n const parts: string[] = [];\n let y = 16;\n if (title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(cx)}\" y=\"${fmt(y)}\" text-anchor=\"middle\">${escapeXml(title)}</text>`);\n y += 14;\n }\n if (subtitle) {\n parts.push(`<text class=\"stdlib-chart-subtitle\" x=\"${fmt(cx)}\" y=\"${fmt(y)}\" text-anchor=\"middle\">${escapeXml(subtitle)}</text>`);\n y += 6;\n }\n return { svg: parts.join(\"\"), height: y };\n};\n\n/**\n * Render reference lines (horizontal or vertical thresholds) within the plot\n * area. Out-of-domain values are silently skipped. Honors per-axis scale\n * (linear or log).\n */\nconst renderReferenceLines = (\n refs: ReadonlyArray<ReferenceLine>,\n xAxis: { domain: [number, number]; scale: \"linear\" | \"log\" },\n yAxis: { domain: [number, number]; scale: \"linear\" | \"log\" },\n area: PlotArea,\n): string => {\n const xMap = pickMapper(xAxis.scale);\n const yMap = pickMapper(yAxis.scale);\n const parts: string[] = [];\n for (const ref of refs) {\n if (!Number.isFinite(ref.value)) continue;\n const axis = ref.axis ?? \"y\";\n if (axis === \"y\") {\n if (ref.value < yAxis.domain[0] || ref.value > yAxis.domain[1]) continue;\n const y = yMap(ref.value, yAxis.domain, [area.y1, area.y0]);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(area.x0)}\" y1=\"${fmt(y)}\" x2=\"${fmt(area.x1)}\" y2=\"${fmt(y)}\"/>`,\n );\n if (ref.label) {\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(area.x1 - 4)}\" y=\"${fmt(y - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n } else {\n if (ref.value < xAxis.domain[0] || ref.value > xAxis.domain[1]) continue;\n const x = xMap(ref.value, xAxis.domain, [area.x0, area.x1]);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(x)}\" y1=\"${fmt(area.y0)}\" x2=\"${fmt(x)}\" y2=\"${fmt(area.y1)}\"/>`,\n );\n if (ref.label) {\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(x + 4)}\" y=\"${fmt(area.y0 + 12)}\">${escapeXml(ref.label)}</text>`,\n );\n }\n }\n }\n return parts.join(\"\");\n};\n\n/**\n * Resolve a point's effective error extents into `[low, high]` magnitudes\n * (relative deltas, both ≥ 0). Asymmetric `errYHigh`/`errYLow` take precedence\n * over symmetric `errY`. Returns null when no error info is set.\n */\nconst resolveErrorY = (p: Point): [number, number] | null => {\n const high = p.errYHigh ?? p.errY;\n const low = p.errYLow ?? p.errY;\n if (high === undefined && low === undefined) return null;\n return [Number.isFinite(low) ? Math.abs(low!) : 0, Number.isFinite(high) ? Math.abs(high!) : 0];\n};\n\nconst resolveErrorX = (p: Point): [number, number] | null => {\n const high = p.errXHigh ?? p.errX;\n const low = p.errXLow ?? p.errX;\n if (high === undefined && low === undefined) return null;\n return [Number.isFinite(low) ? Math.abs(low!) : 0, Number.isFinite(high) ? Math.abs(high!) : 0];\n};\n\n/** Build the SVG fragment for the per-point error bars across all series. */\nconst renderErrorBars = (series: ReadonlyArray<Series>, xAxis: AxisScale, yAxis: AxisScale, area: PlotArea): string => {\n const xMap = pickMapper(xAxis.scale);\n const yMap = pickMapper(yAxis.scale);\n const CAP = 4; // half-width of error bar caps in pixels\n const parts: string[] = [];\n for (const s of series) {\n for (const p of s.data) {\n if (!Number.isFinite(p.x) || !Number.isFinite(p.y)) continue;\n const cx = xMap(p.x, xAxis.domain, [area.x0, area.x1]);\n const cy = yMap(p.y, yAxis.domain, [area.y1, area.y0]);\n\n const yErr = resolveErrorY(p);\n if (yErr) {\n const [low, high] = yErr;\n const yHi = yMap(p.y + high, yAxis.domain, [area.y1, area.y0]);\n const yLo = yMap(p.y - low, yAxis.domain, [area.y1, area.y0]);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(cx)}\" y1=\"${fmt(yHi)}\" x2=\"${fmt(cx)}\" y2=\"${fmt(yLo)}\"/>`);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(cx - CAP)}\" y1=\"${fmt(yHi)}\" x2=\"${fmt(cx + CAP)}\" y2=\"${fmt(yHi)}\"/>`);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(cx - CAP)}\" y1=\"${fmt(yLo)}\" x2=\"${fmt(cx + CAP)}\" y2=\"${fmt(yLo)}\"/>`);\n // Mark we need cy to match data point — ensure we use it (silences unused warnings if any).\n void cy;\n }\n\n const xErr = resolveErrorX(p);\n if (xErr) {\n const [low, high] = xErr;\n const xHi = xMap(p.x + high, xAxis.domain, [area.x0, area.x1]);\n const xLo = xMap(p.x - low, xAxis.domain, [area.x0, area.x1]);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(xLo)}\" y1=\"${fmt(cy)}\" x2=\"${fmt(xHi)}\" y2=\"${fmt(cy)}\"/>`);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(xLo)}\" y1=\"${fmt(cy - CAP)}\" x2=\"${fmt(xLo)}\" y2=\"${fmt(cy + CAP)}\"/>`);\n parts.push(`<line class=\"stdlib-chart-errorbar\" x1=\"${fmt(xHi)}\" y1=\"${fmt(cy - CAP)}\" x2=\"${fmt(xHi)}\" y2=\"${fmt(cy + CAP)}\"/>`);\n }\n }\n }\n return parts.join(\"\");\n};\n\n/** Collect all values relevant for axis-domain computation, including error\n * extents so error bars don't get clipped. */\nconst collectAxisValues = (series: ReadonlyArray<Series>, axis: \"x\" | \"y\"): number[] => {\n const out: number[] = [];\n for (const s of series) {\n for (const p of s.data) {\n const v = axis === \"x\" ? p.x : p.y;\n if (!Number.isFinite(v)) continue;\n out.push(v);\n const err = axis === \"x\" ? resolveErrorX(p) : resolveErrorY(p);\n if (err) {\n out.push(v - err[0]);\n out.push(v + err[1]);\n }\n }\n }\n return out;\n};\n\n/**\n * Render a single-row centered legend at the bottom of the SVG. Returns the\n * SVG fragment plus the height it consumed so callers can shift the plot\n * area up accordingly. Empty input yields height 0.\n */\nexport const renderLegend = (\n items: ReadonlyArray<{ label: string; seriesIndex: number }>,\n width: number,\n yTop: number,\n): { svg: string; height: number } => {\n if (items.length === 0) return { svg: \"\", height: 0 };\n\n const ROW_HEIGHT = 20;\n const ITEM_GAP = 16;\n const SWATCH = 8;\n const SWATCH_GAP = 4;\n const SIDE_PADDING = 4;\n // Approximate text width per character at 11px — good enough for centering.\n const charWidth = 6.5;\n\n const itemWidths = items.map((it) => SWATCH + SWATCH_GAP + Math.max(it.label.length, 1) * charWidth);\n\n // Greedy line-break: pack items into rows so each row fits inside the\n // available width. Single-row legends (≤ a few short labels) still render\n // on one line — no visual change for the line/scatter/bar callers that\n // typically have only 2-4 series. Pie/donut with long \"Label (XX%)\" entries\n // and 5+ slices wrap to multiple rows instead of overflowing the viewBox.\n const availableWidth = Math.max(40, width - 2 * SIDE_PADDING);\n const rows: { items: typeof items; widths: number[]; totalWidth: number }[] = [];\n let cur: typeof items = [];\n let curW = 0;\n items.forEach((item, i) => {\n const w = itemWidths[i]!;\n const projected = cur.length === 0 ? w : curW + ITEM_GAP + w;\n if (cur.length > 0 && projected > availableWidth) {\n rows.push({\n items: cur,\n widths: cur.map((_, j) => itemWidths[i - cur.length + j]!),\n totalWidth: curW,\n });\n cur = [item];\n curW = w;\n } else {\n cur = [...cur, item];\n curW = projected;\n }\n });\n if (cur.length > 0) {\n rows.push({\n items: cur,\n widths: cur.map((_, j) => itemWidths[items.length - cur.length + j]!),\n totalWidth: curW,\n });\n }\n\n const parts: string[] = [`<g class=\"stdlib-chart-legend\">`];\n rows.forEach((row, rowIdx) => {\n let cursor = Math.max(SIDE_PADDING, (width - row.totalWidth) / 2);\n const baseY = yTop + ROW_HEIGHT / 2 + rowIdx * ROW_HEIGHT;\n row.items.forEach((item, i) => {\n parts.push(`<g class=\"stdlib-chart-legend-item stdlib-chart-series-${item.seriesIndex % 8}\">`);\n parts.push(\n `<rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(cursor)}\" y=\"${fmt(baseY - SWATCH / 2)}\" width=\"${SWATCH}\" height=\"${SWATCH}\" rx=\"1\"/>`,\n );\n parts.push(\n `<text class=\"stdlib-chart-legend-label\" x=\"${fmt(cursor + SWATCH + SWATCH_GAP)}\" y=\"${fmt(baseY)}\" dominant-baseline=\"middle\">${escapeXml(item.label)}</text>`,\n );\n parts.push(`</g>`);\n cursor += row.widths[i]! + ITEM_GAP;\n });\n });\n parts.push(`</g>`);\n return { svg: parts.join(\"\"), height: rows.length * ROW_HEIGHT };\n};\n\n/** Measure the total height a legend with `items` will consume in `width`,\n * without actually rendering. Used by chart functions to reserve vertical\n * space before computing the plot area. */\nexport const measureLegendHeight = (items: ReadonlyArray<{ label: string; seriesIndex: number }>, width: number): number => {\n if (items.length === 0) return 0;\n const ROW_HEIGHT = 20;\n const ITEM_GAP = 16;\n const SWATCH = 8;\n const SWATCH_GAP = 4;\n const charWidth = 6.5;\n const availableWidth = Math.max(40, width - 8);\n let curW = 0;\n let rows = 1;\n items.forEach((it, i) => {\n const w = SWATCH + SWATCH_GAP + Math.max(it.label.length, 1) * charWidth;\n const projected = i === 0 ? w : curW + ITEM_GAP + w;\n if (i > 0 && projected > availableWidth) {\n rows++;\n curW = w;\n } else {\n curW = projected;\n }\n });\n return rows * ROW_HEIGHT;\n};\n\n/** Wrap chart body in a root `<svg>` with embedded default styles. */\nexport const svgRoot = (opts: { width: number; height: number; className?: string }, body: string): string => {\n const cls = opts.className ? `stdlib-chart ${escapeXml(opts.className)}` : \"stdlib-chart\";\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${opts.width} ${opts.height}\" class=\"${cls}\"><style>${DEFAULT_STYLES}</style>${body}</svg>`;\n};\n\n// ==========================\n// GEOMETRY HELPERS\n// ==========================\n\n/** Format an SVG path `d` attribute for a polyline through `points`. */\nexport const linePathD = (points: ReadonlyArray<{ x: number; y: number }>): string => {\n if (points.length === 0) return \"\";\n let d = `M ${fmt(points[0]!.x)} ${fmt(points[0]!.y)}`;\n for (let i = 1; i < points.length; i++) {\n d += ` L ${fmt(points[i]!.x)} ${fmt(points[i]!.y)}`;\n }\n return d;\n};\n\n/**\n * Format an SVG path `d` for a smooth curve through `points` using cubic\n * Bezier segments with Catmull-Rom-derived vertical control points.\n *\n * Vertical control points use neighboring `points[i-1]` and `points[i+2]`\n * (reflecting the end points at boundaries) with the standard Catmull-Rom\n * tension factor of 1/6. Horizontal control points stay at the segment's\n * thirds, so x progresses linearly and never doubles back when point spacing\n * is uneven.\n */\nexport const smoothPathD = (points: ReadonlyArray<{ x: number; y: number }>): string => {\n const n = points.length;\n if (n === 0) return \"\";\n if (n === 1) return `M ${fmt(points[0]!.x)} ${fmt(points[0]!.y)}`;\n if (n === 2) return linePathD(points);\n\n let d = `M ${fmt(points[0]!.x)} ${fmt(points[0]!.y)}`;\n for (let i = 0; i < n - 1; i++) {\n const p0 = i > 0 ? points[i - 1]! : points[i]!;\n const p1 = points[i]!;\n const p2 = points[i + 1]!;\n const p3 = i + 2 < n ? points[i + 2]! : points[i + 1]!;\n const dx = p2.x - p1.x;\n const cp1x = p1.x + dx / 3;\n const cp1y = p1.y + (p2.y - p0.y) / 6;\n const cp2x = p2.x - dx / 3;\n const cp2y = p2.y - (p3.y - p1.y) / 6;\n d += ` C ${fmt(cp1x)} ${fmt(cp1y)} ${fmt(cp2x)} ${fmt(cp2y)} ${fmt(p2.x)} ${fmt(p2.y)}`;\n }\n return d;\n};\n\n/**\n * Build an SVG path `d` attribute for a pie slice (or donut sector).\n *\n * Angles are in radians, measured from the +X axis. Slices grow clockwise,\n * which in SVG's y-down coordinate space means `a1 > a0` produces a clockwise\n * arc when drawn with the large-arc and sweep flags set appropriately.\n *\n * Full-circle (a1 - a0 ≈ 2π) is split into two 180° arcs because a single\n * `A` command can't draw a complete circle unambiguously.\n */\nexport const arcPathD = (cx: number, cy: number, r: number, a0: number, a1: number, innerR = 0): string => {\n const sweep = a1 - a0;\n // Full circle: split into two halves to avoid degenerate `A` command.\n if (sweep >= Math.PI * 2 - 1e-9) {\n const aMid = a0 + Math.PI;\n if (innerR <= 0) {\n const ox0 = cx + r * Math.cos(a0),\n oy0 = cy + r * Math.sin(a0);\n const oxM = cx + r * Math.cos(aMid),\n oyM = cy + r * Math.sin(aMid);\n return `M ${fmt(ox0)} ${fmt(oy0)} A ${fmt(r)} ${fmt(r)} 0 0 1 ${fmt(oxM)} ${fmt(oyM)} A ${fmt(r)} ${fmt(r)} 0 0 1 ${fmt(ox0)} ${fmt(oy0)} Z`;\n }\n const ox0 = cx + r * Math.cos(a0),\n oy0 = cy + r * Math.sin(a0);\n const oxM = cx + r * Math.cos(aMid),\n oyM = cy + r * Math.sin(aMid);\n const ix0 = cx + innerR * Math.cos(a0),\n iy0 = cy + innerR * Math.sin(a0);\n const ixM = cx + innerR * Math.cos(aMid),\n iyM = cy + innerR * Math.sin(aMid);\n // Outer ring CW, inner ring CCW (using even-odd fill rule via SVG default).\n return (\n `M ${fmt(ox0)} ${fmt(oy0)} A ${fmt(r)} ${fmt(r)} 0 0 1 ${fmt(oxM)} ${fmt(oyM)} A ${fmt(r)} ${fmt(r)} 0 0 1 ${fmt(ox0)} ${fmt(oy0)} Z` +\n ` M ${fmt(ix0)} ${fmt(iy0)} A ${fmt(innerR)} ${fmt(innerR)} 0 0 0 ${fmt(ixM)} ${fmt(iyM)} A ${fmt(innerR)} ${fmt(innerR)} 0 0 0 ${fmt(ix0)} ${fmt(iy0)} Z`\n );\n }\n const large = sweep > Math.PI ? 1 : 0;\n const ox0 = cx + r * Math.cos(a0),\n oy0 = cy + r * Math.sin(a0);\n const ox1 = cx + r * Math.cos(a1),\n oy1 = cy + r * Math.sin(a1);\n if (innerR <= 0) {\n return `M ${fmt(cx)} ${fmt(cy)} L ${fmt(ox0)} ${fmt(oy0)} A ${fmt(r)} ${fmt(r)} 0 ${large} 1 ${fmt(ox1)} ${fmt(oy1)} Z`;\n }\n const ix0 = cx + innerR * Math.cos(a0),\n iy0 = cy + innerR * Math.sin(a0);\n const ix1 = cx + innerR * Math.cos(a1),\n iy1 = cy + innerR * Math.sin(a1);\n return `M ${fmt(ox0)} ${fmt(oy0)} A ${fmt(r)} ${fmt(r)} 0 ${large} 1 ${fmt(ox1)} ${fmt(oy1)} L ${fmt(ix1)} ${fmt(iy1)} A ${fmt(innerR)} ${fmt(innerR)} 0 ${large} 0 ${fmt(ix0)} ${fmt(iy0)} Z`;\n};\n\n/**\n * SVG path `d` for a marker shape centered at `(cx, cy)` with circumradius `r`.\n *\n * The shapes are sized so a typical visual radius matches `r`:\n * - circle: full radius\n * - square: side = sqrt(2)·r so the diagonal equals 2·r (visually balanced\n * next to a circle of the same r)\n * - triangle: equilateral pointing up, circumradius r\n * - diamond: square rotated 45°, half-diagonal = r\n * - plus: cross-shape at thickness r·0.5\n * - cross: X-shape at thickness r·0.4\n */\nexport const markerPath = (shape: MarkerShape, cx: number, cy: number, r: number): string => {\n switch (shape) {\n case \"circle\":\n // Single arc command pair to draw a closed circle.\n return `M ${fmt(cx - r)} ${fmt(cy)} A ${fmt(r)} ${fmt(r)} 0 1 0 ${fmt(cx + r)} ${fmt(cy)} A ${fmt(r)} ${fmt(r)} 0 1 0 ${fmt(cx - r)} ${fmt(cy)} Z`;\n case \"square\": {\n const s = (r * Math.SQRT2) / 2; // half-side\n return `M ${fmt(cx - s)} ${fmt(cy - s)} L ${fmt(cx + s)} ${fmt(cy - s)} L ${fmt(cx + s)} ${fmt(cy + s)} L ${fmt(cx - s)} ${fmt(cy + s)} Z`;\n }\n case \"triangle\": {\n // Equilateral pointing up. Circumradius r.\n const h = r * Math.sin(Math.PI / 3) * 1.5; // altitude from base to apex\n return `M ${fmt(cx)} ${fmt(cy - r)} L ${fmt(cx + h * Math.cos(Math.PI / 6))} ${fmt(cy + r * 0.5)} L ${fmt(cx - h * Math.cos(Math.PI / 6))} ${fmt(cy + r * 0.5)} Z`;\n }\n case \"diamond\":\n return `M ${fmt(cx)} ${fmt(cy - r)} L ${fmt(cx + r)} ${fmt(cy)} L ${fmt(cx)} ${fmt(cy + r)} L ${fmt(cx - r)} ${fmt(cy)} Z`;\n case \"plus\": {\n const t = r * 0.32; // half-thickness\n return `M ${fmt(cx - r)} ${fmt(cy - t)} L ${fmt(cx - t)} ${fmt(cy - t)} L ${fmt(cx - t)} ${fmt(cy - r)} L ${fmt(cx + t)} ${fmt(cy - r)} L ${fmt(cx + t)} ${fmt(cy - t)} L ${fmt(cx + r)} ${fmt(cy - t)} L ${fmt(cx + r)} ${fmt(cy + t)} L ${fmt(cx + t)} ${fmt(cy + t)} L ${fmt(cx + t)} ${fmt(cy + r)} L ${fmt(cx - t)} ${fmt(cy + r)} L ${fmt(cx - t)} ${fmt(cy + t)} L ${fmt(cx - r)} ${fmt(cy + t)} Z`;\n }\n case \"cross\": {\n // X shape — same as plus rotated 45°. Build by composing two oriented bars.\n const a = r * 0.7;\n const t = r * 0.28;\n return (\n `M ${fmt(cx - a + t)} ${fmt(cy - a - t)} L ${fmt(cx - a - t)} ${fmt(cy - a + t)} L ${fmt(cx + a - t)} ${fmt(cy + a + t)} L ${fmt(cx + a + t)} ${fmt(cy + a - t)} Z` +\n ` M ${fmt(cx + a - t)} ${fmt(cy - a - t)} L ${fmt(cx + a + t)} ${fmt(cy - a + t)} L ${fmt(cx - a + t)} ${fmt(cy + a + t)} L ${fmt(cx - a - t)} ${fmt(cy + a - t)} Z`\n );\n }\n }\n};\n\n/**\n * SVG path `d` for a step (stair) line. `mode` controls where the vertical\n * step happens relative to the data points:\n * - `before` — vertical step at the new x BEFORE the value updates (state\n * machine \"Mealy\" style: change at input)\n * - `after` — value updates at the data point's x and persists until next x\n * - `middle` — vertical step at the midpoint between consecutive x-values\n */\nexport const stepPathD = (points: ReadonlyArray<{ x: number; y: number }>, mode: \"before\" | \"after\" | \"middle\"): string => {\n if (points.length === 0) return \"\";\n if (points.length === 1) return `M ${fmt(points[0]!.x)} ${fmt(points[0]!.y)}`;\n\n let d = `M ${fmt(points[0]!.x)} ${fmt(points[0]!.y)}`;\n for (let i = 1; i < points.length; i++) {\n const p = points[i]!;\n const prev = points[i - 1]!;\n if (mode === \"before\") {\n // step at next-x: extend horizontally to new x at OLD y, then jump to new y.\n d += ` L ${fmt(p.x)} ${fmt(prev.y)} L ${fmt(p.x)} ${fmt(p.y)}`;\n } else if (mode === \"after\") {\n // step at current-x: jump to new y immediately, persist until next x.\n d += ` L ${fmt(prev.x)} ${fmt(p.y)} L ${fmt(p.x)} ${fmt(p.y)}`;\n } else {\n // middle: step at midpoint of x.\n const mx = (prev.x + p.x) / 2;\n d += ` L ${fmt(mx)} ${fmt(prev.y)} L ${fmt(mx)} ${fmt(p.y)} L ${fmt(p.x)} ${fmt(p.y)}`;\n }\n }\n return d;\n};\n\n/** Format a number for SVG attributes — short, no scientific notation. */\nexport const fmt = (n: number): string => {\n if (!Number.isFinite(n)) return \"0\";\n // 2 decimals is enough for sub-pixel precision at typical sizes.\n const rounded = Math.round(n * 100) / 100;\n return Number.isInteger(rounded) ? `${rounded}` : `${rounded}`;\n};\n\nexport const clamp = (value: number, min: number, max: number): number => Math.max(min, Math.min(max, value));\n\nconst normalizeMinMax = (min: number | undefined, max: number | undefined): [number, number] => {\n const lo = Number.isFinite(min) ? min! : 0;\n const hi = Number.isFinite(max) ? max! : 100;\n return lo === hi ? [lo, lo + 1] : lo < hi ? [lo, hi] : [hi, lo];\n};\n\nconst formatNumberValue = (value: number, format: ((value: number) => string) | undefined, unit = \"\"): string => {\n if (!Number.isFinite(value)) return \"\";\n return `${format ? format(value) : fmt(value)}${unit}`;\n};\n\nconst thresholdFillAttr = (color: string | undefined): string => (color ? ` fill=\"${escapeXml(color)}\"` : \"\");\n\nconst thresholdStrokeAttr = (color: string | undefined): string => (color ? ` stroke=\"${escapeXml(color)}\"` : \"\");\n\nconst polarPoint = (cx: number, cy: number, r: number, angleRad: number) => ({\n x: cx + r * Math.cos(angleRad),\n y: cy + r * Math.sin(angleRad),\n});\n\nconst arcLinePathD = (cx: number, cy: number, r: number, a0: number, a1: number): string => {\n const start = polarPoint(cx, cy, r, a0);\n const end = polarPoint(cx, cy, r, a1);\n const large = Math.abs(a1 - a0) > Math.PI ? 1 : 0;\n const sweep = a1 >= a0 ? 1 : 0;\n return `M ${fmt(start.x)} ${fmt(start.y)} A ${fmt(r)} ${fmt(r)} 0 ${large} ${sweep} ${fmt(end.x)} ${fmt(end.y)}`;\n};\n\nexport type RgbColor = { r: number; g: number; b: number };\n\nconst parseHexColor = (color: string): RgbColor | null => {\n const short = /^#([0-9a-f]{3})$/i.exec(color);\n if (short) {\n const [r, g, b] = short[1]!.split(\"\").map((c) => Number.parseInt(c + c, 16));\n return { r: r!, g: g!, b: b! };\n }\n const long = /^#([0-9a-f]{6})$/i.exec(color);\n if (!long) return null;\n const value = long[1]!;\n return {\n r: Number.parseInt(value.slice(0, 2), 16),\n g: Number.parseInt(value.slice(2, 4), 16),\n b: Number.parseInt(value.slice(4, 6), 16),\n };\n};\n\nconst hexColor = (color: RgbColor): string =>\n `#${[color.r, color.g, color.b].map((value) => clamp(Math.round(value), 0, 255).toString(16).padStart(2, \"0\")).join(\"\")}`;\n\nconst interpolateColor = (from: string, to: string, t: number): string => {\n const a = parseHexColor(from);\n const b = parseHexColor(to);\n if (!a || !b) return t < 0.5 ? from : to;\n return hexColor({\n r: a.r + (b.r - a.r) * t,\n g: a.g + (b.g - a.g) * t,\n b: a.b + (b.b - a.b) * t,\n });\n};\n\nconst gaugeThresholdStops = (\n thresholds: readonly Threshold[] | undefined,\n min: number,\n max: number,\n): Array<{ value: number; color: string }> => {\n if (!thresholds || thresholds.length === 0) return [];\n const sorted = [...thresholds].filter((t) => Number.isFinite(t.value)).sort((a, b) => a.value - b.value);\n if (sorted.length === 0) return [];\n const colorFor = (threshold: Threshold, index: number) => threshold.color ?? `var(--stdlib-chart-c${(index % 8) + 1})`;\n return [\n { value: min, color: colorFor(sorted[0]!, 0) },\n ...sorted.map((threshold, index) => ({\n value: clamp(threshold.value, min, max),\n color: colorFor(threshold, index),\n })),\n ];\n};\n\nconst gaugeColorAt = (stops: readonly { value: number; color: string }[], value: number): string => {\n if (stops.length === 0) return \"currentColor\";\n for (let i = 1; i < stops.length; i++) {\n const prev = stops[i - 1]!;\n const next = stops[i]!;\n if (value <= next.value) {\n const t = next.value === prev.value ? 1 : clamp((value - prev.value) / (next.value - prev.value), 0, 1);\n return interpolateColor(prev.color, next.color, t);\n }\n }\n return stops[stops.length - 1]!.color;\n};\n\nconst renderGaugeGradientSegments = (opts: {\n stops: readonly { value: number; color: string }[];\n min: number;\n max: number;\n cx: number;\n cy: number;\n radius: number;\n startAngle: number;\n endAngle: number;\n progress?: number;\n className: string;\n}): string => {\n if (opts.stops.length === 0) return \"\";\n const segments = 72;\n const maxProgress = opts.progress ?? 100;\n const parts: string[] = [];\n for (let i = 0; i < segments; i++) {\n const p0 = (i / segments) * 100;\n const p1 = Math.min(((i + 1) / segments) * 100, maxProgress);\n if (p0 >= maxProgress || p1 <= p0) break;\n const v0 = mapRange(p0, [0, 100], [opts.min, opts.max]);\n const v1 = mapRange(p1, [0, 100], [opts.min, opts.max]);\n const color = gaugeColorAt(opts.stops, (v0 + v1) / 2);\n const a0 = mapRange(p0, [0, 100], [opts.startAngle, opts.endAngle]);\n const a1 = mapRange(p1, [0, 100], [opts.startAngle, opts.endAngle]);\n parts.push(`<path class=\"${opts.className}\" stroke=\"${escapeXml(color)}\" d=\"${arcLinePathD(opts.cx, opts.cy, opts.radius, a0, a1)}\"/>`);\n }\n return parts.join(\"\");\n};\n\n// ==========================\n// AXIS RENDERERS\n// ==========================\n\nexport type AxisScale = {\n domain: [number, number];\n ticks: number[];\n minorTicks: number[];\n scale: \"linear\" | \"log\";\n};\n\nconst pickMapper = (scale: \"linear\" | \"log\") => (scale === \"log\" ? mapLog : mapRange);\n\n/**\n * Whether a value is renderable on the given axis. Log axes reject zero and\n * negative values (since `log(<=0)` is undefined). Used to filter data\n * points before rendering so we don't emit huge off-plot SVG coordinates.\n */\nconst isOnAxis = (axis: { scale: \"linear\" | \"log\" }, v: number): boolean => Number.isFinite(v) && (axis.scale !== \"log\" || v > 0);\n\n/**\n * Compute the domain, major ticks, and (optional) minor ticks for an axis,\n * choosing linear or log scale per `axisOpts`. Filters non-positive values\n * out under log scale and falls back to `[1, 10]` if none remain.\n */\nconst computeAxisScale = (values: readonly number[], axisOpts: AxisOptions | undefined, fallbackTicks = DEFAULT_TICKS): AxisScale => {\n const scale: \"linear\" | \"log\" = axisOpts?.scale === \"log\" ? \"log\" : \"linear\";\n\n if (axisOpts?.domain) {\n const [lo, hi] = axisOpts.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || !Number.isFinite(hi - lo) || (scale === \"log\" && lo <= 0)) {\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n }\n if (values.some((v) => Number.isFinite(v) && (scale !== \"log\" || v > 0) && (v < lo || v > hi))) {\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n }\n const ticks: number[] = [];\n if (scale === \"log\") {\n for (let exponent = Math.floor(Math.log10(lo)); exponent <= Math.ceil(Math.log10(hi)); exponent++) {\n const value = 10 ** exponent;\n if (value > lo && value < hi) ticks.push(value);\n }\n } else {\n const step = niceStep(hi - lo, axisOpts.ticks ?? fallbackTicks);\n // At extreme magnitudes the step may be smaller than one representable\n // increment. Keep endpoint ticks instead of entering a non-advancing loop.\n if (step > 0 && Number.isFinite(step) && (hi - lo) / step <= MAX_AXIS_TICKS) {\n for (let value = Math.ceil(lo / step) * step; value < hi; ) {\n if (value > lo && (!axisOpts.insetEndpointLabels || (value - lo >= step && hi - value >= step))) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n }\n }\n return { domain: [lo, hi], ticks: [...new Set([lo, ...ticks.filter((v) => v > lo && v < hi), hi])], minorTicks: [], scale };\n }\n\n if (scale === \"log\") {\n const positive = values.filter((v) => Number.isFinite(v) && v > 0);\n if (positive.length === 0) {\n return { domain: [1, 10], ticks: [1, 10], minorTicks: [], scale };\n }\n const min = Math.min(...positive);\n const max = Math.max(...positive);\n const r = niceLogTicks(min, max);\n const minorTicks: number[] = [];\n if (axisOpts?.minorTicks) {\n for (let i = 0; i < r.ticks.length - 1; i++) {\n const decade = r.ticks[i]!;\n for (let m = 2; m <= 9; m++) minorTicks.push(decade * m);\n }\n }\n return { domain: r.domain, ticks: r.ticks, minorTicks, scale };\n }\n\n const [minRaw, maxRaw] = computeDomain(values);\n const step = niceStep(maxRaw - minRaw, axisOpts?.ticks ?? fallbackTicks);\n const r = extendDomainToNice(minRaw, maxRaw, step);\n const minorTicks: number[] = [];\n if (axisOpts?.minorTicks && r.ticks.length > 1) {\n const SUBDIVISIONS = 5;\n for (let i = 0; i < r.ticks.length - 1; i++) {\n const a = r.ticks[i]!;\n const b = r.ticks[i + 1]!;\n const sub = (b - a) / SUBDIVISIONS;\n for (let m = 1; m < SUBDIVISIONS; m++) minorTicks.push(a + sub * m);\n }\n }\n return { domain: r.domain, ticks: r.ticks, minorTicks, scale };\n};\n\nconst renderYAxis = (axis: AxisScale, area: PlotArea, opts: AxisOptions | undefined): string => {\n const format = opts?.format ?? ((v: number) => String(v));\n const map = pickMapper(axis.scale);\n const parts: string[] = [];\n for (const t of axis.ticks) {\n const y = map(t, axis.domain, [area.y1, area.y0]);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(area.x0)}\" y1=\"${fmt(y)}\" x2=\"${fmt(area.x1)}\" y2=\"${fmt(y)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(area.x0 - 6)}\" y=\"${fmt(y + 3)}\" text-anchor=\"end\">${escapeXml(format(t))}</text>`,\n );\n }\n for (const mt of axis.minorTicks) {\n const y = map(mt, axis.domain, [area.y1, area.y0]);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(area.x0 - 3)}\" y1=\"${fmt(y)}\" x2=\"${fmt(area.x0)}\" y2=\"${fmt(y)}\"/>`);\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(area.x0)}\" y1=\"${fmt(area.y0)}\" x2=\"${fmt(area.x0)}\" y2=\"${fmt(area.y1)}\"/>`);\n if (opts?.label) {\n const cx = 12;\n const cy = (area.y0 + area.y1) / 2;\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt(cx)}\" y=\"${fmt(cy)}\" text-anchor=\"middle\" transform=\"rotate(-90 ${fmt(cx)} ${fmt(cy)})\">${escapeXml(opts.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\nconst renderXAxisNumeric = (axis: AxisScale, area: PlotArea, height: number, opts: AxisOptions | undefined): string => {\n const format = opts?.format ?? ((v: number) => String(v));\n const map = pickMapper(axis.scale);\n const parts: string[] = [];\n for (const t of axis.ticks) {\n const x = map(t, axis.domain, [area.x0, area.x1]);\n const anchor =\n opts?.domain && opts.insetEndpointLabels ? (t === axis.domain[0] ? \"start\" : t === axis.domain[1] ? \"end\" : \"middle\") : \"middle\";\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(x)}\" y=\"${fmt(area.y1 + 14)}\" text-anchor=\"${anchor}\">${escapeXml(format(t))}</text>`,\n );\n }\n for (const mt of axis.minorTicks) {\n const x = map(mt, axis.domain, [area.x0, area.x1]);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(x)}\" y1=\"${fmt(area.y1)}\" x2=\"${fmt(x)}\" y2=\"${fmt(area.y1 + 3)}\"/>`);\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(area.x0)}\" y1=\"${fmt(area.y1)}\" x2=\"${fmt(area.x1)}\" y2=\"${fmt(area.y1)}\"/>`);\n if (opts?.label) {\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((area.x0 + area.x1) / 2)}\" y=\"${fmt(height - 4)}\" text-anchor=\"middle\">${escapeXml(opts.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\nconst renderXAxisCategorical = (labels: readonly string[], area: PlotArea, height: number, axisLabel?: string): string => {\n const parts: string[] = [];\n if (labels.length > 0) {\n const step = (area.x1 - area.x0) / labels.length;\n for (let i = 0; i < labels.length; i++) {\n const cx = area.x0 + step * (i + 0.5);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(cx)}\" y=\"${fmt(area.y1 + 14)}\" text-anchor=\"middle\">${escapeXml(labels[i]!)}</text>`,\n );\n }\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(area.x0)}\" y1=\"${fmt(area.y1)}\" x2=\"${fmt(area.x1)}\" y2=\"${fmt(area.y1)}\"/>`);\n if (axisLabel) {\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((area.x0 + area.x1) / 2)}\" y=\"${fmt(height - 4)}\" text-anchor=\"middle\">${escapeXml(axisLabel)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\nconst emptyChart = (width: number, height: number, className: string | undefined, message = \"no data\"): string =>\n svgRoot(\n { width, height, className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(width / 2)}\" y=\"${fmt(height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">${escapeXml(message)}</text>`,\n );\n\n// ==========================\n// CHART FUNCTIONS\n// ==========================\n\nexport type SeriesChartOptions = ChartOptions & {\n series: Series[];\n xAxis?: AxisOptions;\n yAxis?: AxisOptions;\n /** Reference lines (thresholds, targets, averages) drawn on the plot. */\n references?: ReferenceLine[];\n /** Render a single-row legend at the bottom of the chart, listing each\n * series's label with its color swatch. Series without a `label` are\n * shown as `Series N` (1-indexed). Default false. */\n legend?: boolean;\n};\n\nexport type ScatterOptions = SeriesChartOptions & {\n /** Pixel-radius range for the optional `size` dimension on points.\n * Default `[3, 12]`. Only applied when at least one point has a finite\n * `size`; otherwise all points use the default radius (3px). */\n sizeRange?: [number, number];\n /** When true, automatically vary marker shape per series (cycling through\n * `circle, square, triangle, diamond, plus, cross`) so series remain\n * distinguishable in B/W or color-blind contexts. Default false. */\n autoVariant?: boolean;\n /** Overlay a least-squares linear regression line across all data points.\n * Default false. */\n trendline?: boolean;\n};\n\nexport type LineOptions = SeriesChartOptions & {\n /** Render smooth Catmull-Rom curves. Default `true`. Pass `false` for\n * straight segments between points. */\n smooth?: boolean;\n /** Fill the area below each line with the series color (translucent).\n * Renders as a separate path so the line stroke remains crisp. Default false. */\n area?: boolean;\n /** Render a step (stair) line instead of a smooth/straight one. Implies\n * `smooth: false`. */\n step?: \"before\" | \"after\" | \"middle\";\n /** When true, automatically vary line dash pattern per series (cycling\n * through `solid, dashed, dotted, dashdot`). Default false. */\n autoVariant?: boolean;\n /** Render a translucent confidence band between each point's `errYLow` and\n * `errYHigh`. Points without explicit error fields are skipped. Default false. */\n errorBand?: boolean;\n};\n\n/**\n * Render a scatter plot. Each series produces a group of circles, one per\n * data point, classed `stdlib-chart-series-N` so series colors stay\n * consistent across charts.\n *\n * Non-finite x or y values are filtered out. An empty `series` (or one with\n * no finite points) renders an empty-state SVG with a \"no data\" label.\n *\n * @example\n * charts.scatter({ series: [{ data: [{x:1,y:2},{x:2,y:5},{x:3,y:3}] }] });\n *\n * @example\n * charts.scatter({\n * series: [\n * { label: \"Group A\", data: [...] },\n * { label: \"Group B\", data: [...] },\n * ],\n * xAxis: { label: \"Time (s)\" },\n * yAxis: { label: \"Value\", format: v => `${v}k` },\n * });\n */\nexport const scatter = (opts: ScatterOptions): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const padding = normalizePadding(opts.padding);\n const header = renderHeader(width, opts.title, opts.subtitle);\n const legendItems = collectSeriesLegend(opts);\n const legendHeight = legendItems.length > 0 ? 20 : 0;\n\n const finitePoints = opts.series.flatMap((s) => s.data).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y));\n if (finitePoints.length === 0) return emptyChart(width, height, opts.className);\n\n const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, !!opts.yAxis?.label, header.height, legendHeight);\n\n const xAxis = computeAxisScale(collectAxisValues(opts.series, \"x\"), opts.xAxis);\n const yAxis = computeAxisScale(collectAxisValues(opts.series, \"y\"), opts.yAxis);\n const xMap = pickMapper(xAxis.scale);\n const yMap = pickMapper(yAxis.scale);\n\n // Size dimension: if any point has a finite `size`, normalize across all\n // points to the configured pixel range; points without size fall back to\n // the midpoint so they remain visible.\n const sizes = finitePoints.map((p) => p.size).filter((s): s is number => typeof s === \"number\" && Number.isFinite(s));\n const sizeRange = opts.sizeRange ?? [3, 12];\n const useSizes = sizes.length > 0;\n const sizeDomain = useSizes ? computeDomain(sizes) : ([0, 1] as [number, number]);\n const fallbackR = (sizeRange[0] + sizeRange[1]) / 2;\n\n const body: string[] = [];\n body.push(renderYAxis(yAxis, area, opts.yAxis));\n body.push(renderXAxisNumeric(xAxis, area, height - legendHeight, opts.xAxis));\n\n // Error bars render under the points so the points sit on top of the bar\n // intersections — easier to read.\n body.push(renderErrorBars(opts.series, xAxis, yAxis, area));\n\n opts.series.forEach((s, i) => {\n const cls = `stdlib-chart-series-${i % 8}`;\n const shape = s.marker ?? (opts.autoVariant ? DEFAULT_MARKERS[i % DEFAULT_MARKERS.length]! : \"circle\");\n const elements = s.data\n .map((p, index) => ({ p, index }))\n .filter(({ p }) => isOnAxis(xAxis, p.x) && isOnAxis(yAxis, p.y))\n .map(({ p, index }) => {\n const cx = xMap(p.x, xAxis.domain, [area.x0, area.x1]);\n const cy = yMap(p.y, yAxis.domain, [area.y1, area.y0]);\n const r = useSizes\n ? typeof p.size === \"number\" && Number.isFinite(p.size)\n ? mapRange(p.size, sizeDomain, sizeRange)\n : fallbackR\n : 3;\n const datum: ChartDatum = {\n index,\n seriesIndex: i,\n role: \"point\",\n label: s.label,\n anchor: [cx, cy],\n values: pointValues(p, opts.xAxis, opts.yAxis),\n };\n if (shape === \"circle\") {\n return chartDatumSvg(`<circle class=\"stdlib-chart-point\" cx=\"${fmt(cx)}\" cy=\"${fmt(cy)}\" r=\"${fmt(r)}\"/>`, datum, opts.inspect);\n }\n return chartDatumSvg(`<path class=\"stdlib-chart-point\" d=\"${markerPath(shape, cx, cy, r)}\"/>`, datum, opts.inspect);\n })\n .join(\"\");\n if (elements) body.push(`<g class=\"${cls}\">${elements}</g>`);\n });\n\n // Optional trend line (across all series). Renders after data so it's visible.\n if (opts.trendline) {\n const reg = linearRegression(finitePoints);\n if (reg !== null) {\n const x0 = xAxis.domain[0];\n const x1 = xAxis.domain[1];\n const y0 = reg.slope * x0 + reg.intercept;\n const y1 = reg.slope * x1 + reg.intercept;\n // Clip to plot area in pixel space (visible portion of the regression).\n const px0 = xMap(x0, xAxis.domain, [area.x0, area.x1]);\n const px1 = xMap(x1, xAxis.domain, [area.x0, area.x1]);\n const py0 = yMap(y0, yAxis.domain, [area.y1, area.y0]);\n const py1 = yMap(y1, yAxis.domain, [area.y1, area.y0]);\n body.push(`<line class=\"stdlib-chart-trendline\" x1=\"${fmt(px0)}\" y1=\"${fmt(py0)}\" x2=\"${fmt(px1)}\" y2=\"${fmt(py1)}\"/>`);\n }\n }\n\n // References render AFTER data so labels stay on top (z-order matters in SVG).\n if (opts.references && opts.references.length > 0) {\n body.push(renderReferenceLines(opts.references, xAxis, yAxis, area));\n }\n\n const legend = renderLegend(legendItems, width, height - legendHeight);\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\") + legend.svg);\n};\n\nconst collectSeriesLegend = (opts: { series: Series[]; legend?: boolean }): Array<{ label: string; seriesIndex: number }> => {\n if (!opts.legend) return [];\n return opts.series.map((s, i) => ({\n label: s.label && s.label.length > 0 ? s.label : `Series ${i + 1}`,\n seriesIndex: i,\n }));\n};\n\n/**\n * Render a line chart. Each series becomes a `<path class=\"stdlib-chart-line\">`\n * connecting its points (sorted by `x`). Multi-series charts get distinct\n * `stdlib-chart-series-N` classes.\n *\n * Non-finite points are filtered. A series with fewer than 2 finite points\n * is skipped (no path can be drawn). An empty/all-non-finite chart renders\n * an empty-state SVG.\n *\n * @example\n * charts.line({ series: [{ data: [{x:1,y:10},{x:2,y:25},{x:3,y:18}] }] });\n *\n * @example\n * charts.line({\n * series: [\n * { label: \"Revenue\", data: [...] },\n * { label: \"Costs\", data: [...] },\n * ],\n * yAxis: { format: v => `$${v}k` },\n * });\n */\nexport const line = (opts: LineOptions): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const padding = normalizePadding(opts.padding);\n const header = renderHeader(width, opts.title, opts.subtitle);\n const legendItems = collectSeriesLegend(opts);\n const legendHeight = legendItems.length > 0 ? 20 : 0;\n\n const finitePoints = opts.series.flatMap((s) => s.data).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y));\n if (finitePoints.length === 0) return emptyChart(width, height, opts.className);\n\n const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, !!opts.yAxis?.label, header.height, legendHeight);\n const xAxis = computeAxisScale(collectAxisValues(opts.series, \"x\"), opts.xAxis);\n const yAxis = computeAxisScale(collectAxisValues(opts.series, \"y\"), opts.yAxis);\n const xMap = pickMapper(xAxis.scale);\n const yMap = pickMapper(yAxis.scale);\n\n const body: string[] = [];\n body.push(renderYAxis(yAxis, area, opts.yAxis));\n body.push(renderXAxisNumeric(xAxis, area, height - legendHeight, opts.xAxis));\n\n // Compute the area baseline (zero if it's in the y-domain, otherwise the\n // bottom of the plot area). Log axes always start at the bottom.\n const baselineY =\n yAxis.scale === \"linear\" && yAxis.domain[0] <= 0 && yAxis.domain[1] >= 0 ? yMap(0, yAxis.domain, [area.y1, area.y0]) : area.y1;\n\n // Step plot takes precedence over smooth (treppe with curves doesn't make\n // sense). Otherwise smooth is the default; explicit `smooth: false` opts out.\n const pathFn = opts.step\n ? (pts: Array<{ x: number; y: number }>) => stepPathD(pts, opts.step!)\n : opts.smooth === false\n ? linePathD\n : smoothPathD;\n\n opts.series.forEach((s, i) => {\n const finite = s.data.filter((p) => isOnAxis(xAxis, p.x) && isOnAxis(yAxis, p.y));\n if (opts.inspect)\n s.data.forEach((p, index) => {\n if (!isOnAxis(xAxis, p.x) || !isOnAxis(yAxis, p.y)) return;\n body.push(\n inspectionPoint(\n {\n index,\n seriesIndex: i,\n role: \"point\",\n label: s.label,\n anchor: [xMap(p.x, xAxis.domain, [area.x0, area.x1]), yMap(p.y, yAxis.domain, [area.y1, area.y0])],\n values: pointValues(p, opts.xAxis, opts.yAxis),\n },\n opts.inspect,\n ),\n );\n });\n if (finite.length < 2) return;\n const sorted = [...finite].sort((a, b) => a.x - b.x);\n const mapped = sorted.map((p) => ({\n x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),\n y: yMap(p.y, yAxis.domain, [area.y1, area.y0]),\n }));\n const linePath = pathFn(mapped);\n\n // Error band: filled translucent area between errYHigh and errYLow.\n if (opts.errorBand) {\n const upper: Array<{ x: number; y: number }> = [];\n const lower: Array<{ x: number; y: number }> = [];\n for (const p of sorted) {\n const err = resolveErrorY(p);\n if (!err) continue;\n const [low, high] = err;\n upper.push({\n x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),\n y: yMap(p.y + high, yAxis.domain, [area.y1, area.y0]),\n });\n lower.push({\n x: xMap(p.x, xAxis.domain, [area.x0, area.x1]),\n y: yMap(p.y - low, yAxis.domain, [area.y1, area.y0]),\n });\n }\n if (upper.length >= 2) {\n const upperPath = pathFn(upper);\n const lowerReversed = lower.slice().reverse();\n const lowerSegments = lowerReversed.map((pt) => ` L ${fmt(pt.x)} ${fmt(pt.y)}`).join(\"\");\n const bandPath = `${upperPath}${lowerSegments} Z`;\n body.push(`<path class=\"stdlib-chart-error-band stdlib-chart-series-${i % 8}\" d=\"${bandPath}\"/>`);\n }\n }\n\n if (opts.area) {\n const last = mapped[mapped.length - 1]!;\n const first = mapped[0]!;\n const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(baselineY)} L ${fmt(first.x)} ${fmt(baselineY)} Z`;\n body.push(`<path class=\"stdlib-chart-area stdlib-chart-series-${i % 8}\" d=\"${areaPath}\"/>`);\n }\n\n const dashStyle = s.lineStyle ?? (opts.autoVariant ? DEFAULT_LINE_STYLES[i % DEFAULT_LINE_STYLES.length]! : \"solid\");\n const dashAttr = LINE_DASH_PATTERNS[dashStyle];\n const cls = `stdlib-chart-line stdlib-chart-series-${i % 8}`;\n const dashAttrStr = dashAttr ? ` stroke-dasharray=\"${dashAttr}\"` : \"\";\n body.push(`<path class=\"${cls}\" d=\"${linePath}\"${dashAttrStr}/>`);\n });\n\n // Error bars render after lines so caps don't disappear behind the stroke.\n body.push(renderErrorBars(opts.series, xAxis, yAxis, area));\n\n // References render AFTER data so labels stay on top.\n if (opts.references && opts.references.length > 0) {\n body.push(renderReferenceLines(opts.references, xAxis, yAxis, area));\n }\n\n const legend = renderLegend(legendItems, width, height - legendHeight);\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\") + legend.svg);\n};\n\n// ==========================\n// BAR\n// ==========================\n\nexport type BarChartOptions = ChartOptions & {\n data: BarItem[];\n yAxis?: AxisOptions;\n /** When true, each bar gets its own series color (`series-0` ... `series-7`,\n * cyclic). When false (default), all bars share `series-0`. */\n colorByBar?: boolean;\n /** Reference lines on the y-axis (e.g. target threshold). x-axis references\n * are ignored on bar charts since the x-axis is categorical. */\n references?: ReferenceLine[];\n /** Render the formatted value above (positive) or below (negative) each bar.\n * Uses `yAxis.format` if provided, otherwise `String(value)`. Default false. */\n showValues?: boolean;\n /** Render a legend mapping each bar's label to its color. Only meaningful\n * when `colorByBar` is true; ignored otherwise (the default single-color\n * bar chart needs no legend). Default false. */\n legend?: boolean;\n};\n\n/**\n * Render a categorical bar chart. The y-domain always includes zero so bars\n * rest on a visible baseline. Negative values produce bars below the zero\n * line; mixed positive/negative inputs render the zero line as the X axis.\n *\n * Bars use class `stdlib-chart-bar stdlib-chart-series-0` (single-series\n * only in v1 — grouped/stacked bars are out of scope).\n *\n * Non-finite values are filtered. Empty input renders an empty-state SVG.\n *\n * @example\n * charts.bar({ data: [{label:\"Q1\",value:120},{label:\"Q2\",value:180}] });\n *\n * @example\n * charts.bar({\n * data: [{label:\"Profit\",value:50},{label:\"Loss\",value:-20}],\n * yAxis: { format: v => `${v}k` },\n * });\n */\nexport const bar = (opts: BarChartOptions): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const padding = normalizePadding(opts.padding);\n const header = renderHeader(width, opts.title, opts.subtitle);\n\n const sourceIndices = opts.data.flatMap((d, index) => (Number.isFinite(d.value) ? [index] : []));\n const finite = opts.data.filter((d) => Number.isFinite(d.value));\n if (finite.length === 0) return emptyChart(width, height, opts.className);\n\n // Legend only useful when bars have distinct colors. Otherwise it's a\n // redundant single-entry box, so silently drop it.\n const legendItems = opts.legend && opts.colorByBar ? finite.map((d, i) => ({ label: d.label, seriesIndex: itemColorIndex(d, i) })) : [];\n const legendHeight = legendItems.length > 0 ? 20 : 0;\n\n const area = computePlotArea(width, height, padding, false, !!opts.yAxis?.label, header.height, legendHeight);\n const values = finite.map((d) => d.value);\n\n // For linear scale: include zero so bars rest on a baseline.\n // For log scale: zero isn't representable; just use the data extent.\n const yScale = opts.yAxis?.scale === \"log\" ? \"log\" : \"linear\";\n const valuesForDomain = yScale === \"log\" ? values : [...values, 0];\n const yAxis = computeAxisScale(valuesForDomain, opts.yAxis);\n const yMap = pickMapper(yAxis.scale);\n\n const body: string[] = [];\n body.push(renderYAxis(yAxis, area, opts.yAxis));\n body.push(\n renderXAxisCategorical(\n finite.map((d) => d.label),\n area,\n height - legendHeight,\n undefined,\n ),\n );\n\n // If domain spans negative and positive (linear only), draw the zero\n // baseline as a dedicated line on top of the gridlines.\n if (yAxis.scale === \"linear\" && yAxis.domain[0] < 0 && yAxis.domain[1] > 0) {\n const zeroY = yMap(0, yAxis.domain, [area.y1, area.y0]);\n body.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(area.x0)}\" y1=\"${fmt(zeroY)}\" x2=\"${fmt(area.x1)}\" y2=\"${fmt(zeroY)}\"/>`);\n }\n\n const slot = (area.x1 - area.x0) / finite.length;\n const barWidth = slot * 0.8;\n const barOffset = slot * 0.1;\n // Bar baseline: zero on linear scale, bottom of plot for log scale (since\n // log can't represent zero).\n const zeroPx = yAxis.scale === \"log\" ? area.y1 : yMap(0, yAxis.domain, [area.y1, area.y0]);\n const fmtValue = opts.yAxis?.format ?? ((v: number) => String(v));\n\n for (let i = 0; i < finite.length; i++) {\n const d = finite[i]!;\n const x = area.x0 + slot * i + barOffset;\n if (yAxis.scale === \"log\" && d.value <= 0) continue; // log can't render\n const valuePx = yMap(d.value, yAxis.domain, [area.y1, area.y0]);\n const top = Math.min(valuePx, zeroPx);\n const h = Math.abs(valuePx - zeroPx);\n const seriesIdx = opts.colorByBar ? itemColorIndex(d, i) : 0;\n body.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${seriesIdx}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(h)}\"/>`,\n {\n index: sourceIndices[i]!,\n role: \"item\",\n label: d.label,\n anchor: [x + barWidth / 2, top + h / 2],\n values: [{ key: \"value\", value: d.value, formatted: fmtValue(d.value) }],\n },\n opts.inspect,\n ),\n );\n if (opts.showValues) {\n const labelY = d.value < 0 ? top + h + 12 : top - 4;\n const labelX = x + barWidth / 2;\n body.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(labelX)}\" y=\"${fmt(labelY)}\" text-anchor=\"middle\">${escapeXml(fmtValue(d.value))}</text>`,\n );\n }\n }\n\n // y-axis references render AFTER bars so labels stay on top.\n // x-axis refs are ignored on bar (the x-axis is categorical).\n if (opts.references && opts.references.length > 0) {\n const yRefs = opts.references.filter((r) => (r.axis ?? \"y\") === \"y\");\n if (yRefs.length > 0) {\n body.push(renderReferenceLines(yRefs, { domain: [0, 1], scale: \"linear\" }, yAxis, area));\n }\n }\n\n const legend = renderLegend(legendItems, width, height - legendHeight);\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\") + legend.svg);\n};\n\n// ==========================\n// PIE / DONUT\n// ==========================\n\nexport type PieChartOptions = ChartOptions & {\n data: SliceItem[];\n /** Render slice labels with percentages outside the chart area. Default false.\n * Note: for many small slices or one dominant slice, prefer `legend: true`\n * to avoid overlapping labels. */\n showLabels?: boolean;\n /** Render a wrapping legend below the chart with `Label (XX%)` entries.\n * Recommended when slices are many or when one slice dominates — outside\n * labels collide in those cases. Default false. */\n legend?: boolean;\n /** Inner radius as a fraction of outer radius (0..1). 0 = pie, 0.6 = donut.\n * Values outside `[0, 0.95]` are clamped. */\n innerRadius?: number;\n};\n\nconst renderPie = (opts: PieChartOptions, defaultInnerRadius: number): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const header = renderHeader(width, opts.title, opts.subtitle);\n\n const sourceIndices = opts.data.flatMap((d, index) => (Number.isFinite(d.value) && d.value > 0 ? [index] : []));\n const finite = opts.data.filter((d) => Number.isFinite(d.value) && d.value > 0);\n const total = finite.reduce((sum, d) => sum + d.value, 0);\n if (finite.length === 0 || total <= 0) {\n return emptyChart(width, height, opts.className);\n }\n\n // Build legend items up-front (need to measure height before laying out pie).\n const legendItems = opts.legend\n ? finite.map((d, i) => {\n const ratio = d.value / total;\n const pct = (ratio * 100).toFixed(ratio < 0.1 ? 1 : 0);\n return { label: `${d.label} (${pct}%)`, seriesIndex: itemColorIndex(d, i) };\n })\n : [];\n const legendHeight = measureLegendHeight(legendItems, width);\n const LEGEND_GAP = legendHeight > 0 ? 8 : 0;\n\n const innerRatio = Math.max(0, Math.min(0.95, opts.innerRadius ?? defaultInnerRadius));\n // Reserve outer margin for labels if requested.\n const baseMargin = 8;\n const labelMargin = opts.showLabels ? 60 : 0;\n const margin = baseMargin + labelMargin;\n // Center vertically in the space below the header, above the legend.\n const availableHeight = height - header.height - legendHeight - LEGEND_GAP;\n const cx = width / 2;\n const cy = header.height + availableHeight / 2;\n const r = Math.max(0, Math.min(width, availableHeight) / 2 - margin);\n const innerR = r * innerRatio;\n\n const body: string[] = [];\n // Slices clockwise from 12 o'clock (-π/2).\n let a = -Math.PI / 2;\n finite.forEach((d, i) => {\n const sweep = (d.value / total) * Math.PI * 2;\n const a1 = a + sweep;\n const cls = `stdlib-chart-slice stdlib-chart-series-${itemColorIndex(d, i)}`;\n body.push(\n chartDatumSvg(\n `<path class=\"${cls}\" d=\"${arcPathD(cx, cy, r, a, a1, innerR)}\"/>`,\n {\n index: sourceIndices[i]!,\n role: \"item\",\n label: d.label,\n anchor: [cx + ((r + innerR) / 2) * Math.cos(a + sweep / 2), cy + ((r + innerR) / 2) * Math.sin(a + sweep / 2)],\n values: [\n { key: \"value\", value: d.value },\n { key: \"percent\", value: (d.value / total) * 100 },\n { key: \"total\", value: total },\n ],\n },\n opts.inspect,\n ),\n );\n if (opts.showLabels) {\n const mid = a + sweep / 2;\n // Place label slightly outside the outer radius.\n const lr = r + 14;\n const lx = cx + lr * Math.cos(mid);\n const ly = cy + lr * Math.sin(mid);\n const pct = ((d.value / total) * 100).toFixed(d.value / total < 0.1 ? 1 : 0);\n const anchor = Math.cos(mid) > 0.2 ? \"start\" : Math.cos(mid) < -0.2 ? \"end\" : \"middle\";\n body.push(\n `<text class=\"stdlib-chart-label\" x=\"${fmt(lx)}\" y=\"${fmt(ly + 3)}\" text-anchor=\"${anchor}\">${escapeXml(d.label)} (${pct}%)</text>`,\n );\n }\n a = a1;\n });\n\n const legend = renderLegend(legendItems, width, height - legendHeight);\n\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\") + legend.svg);\n};\n\n/**\n * Render a pie chart. Slices are drawn clockwise starting at 12 o'clock,\n * proportional to each item's `value`. Pass `showLabels: true` to render\n * `Label (XX%)` outside each slice, or `legend: true` to render a wrapping\n * legend below the chart.\n *\n * Use `legend` (not `showLabels`) when slices are many or one slice dominates —\n * outside labels collide in those cases.\n *\n * Non-positive and non-finite values are filtered. A 100%-single-slice draws\n * a complete circle. Empty/all-zero input renders an empty-state SVG.\n *\n * @example\n * charts.pie({ data: [{label:\"A\",value:30},{label:\"B\",value:50},{label:\"C\",value:20}] });\n *\n * @example\n * charts.pie({ data: [...], showLabels: true });\n *\n * @example\n * charts.pie({ data: [...], legend: true }); // recommended for many small slices\n */\nexport const pie = (opts: PieChartOptions): string => renderPie(opts, 0);\n\n/**\n * Render a donut chart. Identical to {@link pie} but with a hollow center\n * (default `innerRadius: 0.6`). Override `innerRadius` for a thicker or\n * thinner ring.\n *\n * @example\n * charts.donut({ data: [{label:\"Used\",value:67},{label:\"Free\",value:33}] });\n *\n * @example\n * charts.donut({ data: [...], innerRadius: 0.4, showLabels: true });\n *\n * @example\n * charts.donut({ data: [...], legend: true }); // wrapping legend below the ring\n */\nexport const donut = (opts: PieChartOptions): string => renderPie(opts, 0.6);\n\n// ==========================\n// HISTOGRAM\n// ==========================\n\nexport type HistogramOptions = ChartOptions & {\n /** Raw observations. Non-finite entries are filtered. */\n data: number[];\n /** Bin specification:\n * - undefined → Sturges' formula `ceil(log2(n)) + 1`\n * - number → that many equal-width bins\n * - array of bin edges (length k+1 → k bins) */\n bins?: number | number[];\n yAxis?: AxisOptions;\n xAxis?: AxisOptions;\n references?: ReferenceLine[];\n};\n\n/**\n * Render a histogram (frequency distribution) of the given observations.\n * Uses Sturges' formula by default for bin count, or accepts an explicit\n * count or list of bin edges.\n *\n * Bars are adjacent (no inter-bar gap) since a histogram represents a\n * continuous distribution. The x-axis is numeric (bin edges as ticks).\n *\n * @example\n * charts.histogram({ data: observations, title: \"Reaction times (ms)\" });\n *\n * @example\n * charts.histogram({ data: scores, bins: 20, yAxis: { label: \"Count\" } });\n */\nexport const histogram = (opts: HistogramOptions): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const padding = normalizePadding(opts.padding);\n const header = renderHeader(width, opts.title, opts.subtitle);\n\n const finite = opts.data.filter((v) => Number.isFinite(v));\n if (finite.length === 0) return emptyChart(width, height, opts.className);\n\n const { edges, counts } = autoBin(finite, opts.bins);\n const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, !!opts.yAxis?.label, header.height, 0);\n\n const xAxis = computeAxisScale(edges, opts.xAxis);\n const yAxis = computeAxisScale([0, ...counts], opts.yAxis);\n const xMap = pickMapper(xAxis.scale);\n const yMap = pickMapper(yAxis.scale);\n\n const body: string[] = [];\n body.push(renderYAxis(yAxis, area, opts.yAxis));\n body.push(renderXAxisNumeric(xAxis, area, height, opts.xAxis));\n\n const zeroPx = yAxis.scale === \"log\" ? area.y1 : yMap(0, yAxis.domain, [area.y1, area.y0]);\n for (let i = 0; i < counts.length; i++) {\n const left = xMap(edges[i]!, xAxis.domain, [area.x0, area.x1]);\n const right = xMap(edges[i + 1]!, xAxis.domain, [area.x0, area.x1]);\n const c = counts[i]!;\n if (yAxis.scale === \"log\" && c <= 0) continue;\n const top = yMap(c, yAxis.domain, [area.y1, area.y0]);\n body.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-0\" x=\"${fmt(left)}\" y=\"${fmt(top)}\" width=\"${fmt(right - left)}\" height=\"${fmt(zeroPx - top)}\"/>`,\n {\n index: i,\n role: \"bin\",\n anchor: [(left + right) / 2, (top + zeroPx) / 2],\n values: [\n { key: \"from\", value: edges[i]!, formatted: opts.xAxis?.format?.(edges[i]!) },\n { key: \"to\", value: edges[i + 1]!, formatted: opts.xAxis?.format?.(edges[i + 1]!) },\n { key: \"upperInclusive\", value: i === counts.length - 1 ? \"true\" : \"false\" },\n { key: \"count\", value: c },\n ],\n },\n opts.inspect,\n ),\n );\n }\n\n if (opts.references && opts.references.length > 0) {\n body.push(renderReferenceLines(opts.references, xAxis, yAxis, area));\n }\n\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\"));\n};\n\n// ==========================\n// BOX PLOT\n// ==========================\n\nexport type BoxPlotItem = { label: string; values: number[] };\n\nexport type BoxPlotOptions = ChartOptions & {\n /** Groups of observations, one box per group. */\n groups: BoxPlotItem[];\n yAxis?: AxisOptions;\n /** When true (default), render outliers as individual dots beyond the\n * whiskers (1.5×IQR fences). */\n showOutliers?: boolean;\n references?: ReferenceLine[];\n /** When true, each box gets its own series color. Default false (all use\n * series-0). */\n colorByBox?: boolean;\n};\n\n/**\n * Render a box plot (Tukey style): box for the IQR (Q1-Q3), median line,\n * whiskers extending to 1.5×IQR fences, and individual outlier dots.\n *\n * Useful for comparing distributions across categorical groups (e.g. test\n * scores per class, reaction times per condition).\n *\n * @example\n * charts.boxplot({\n * groups: [\n * { label: \"Class A\", values: scoresA },\n * { label: \"Class B\", values: scoresB },\n * ],\n * yAxis: { label: \"Score\" },\n * });\n */\nexport const boxplot = (opts: BoxPlotOptions): string => {\n const width = opts.width ?? DEFAULT_WIDTH;\n const height = opts.height ?? DEFAULT_HEIGHT;\n const padding = normalizePadding(opts.padding);\n const header = renderHeader(width, opts.title, opts.subtitle);\n\n const showOutliers = opts.showOutliers ?? true;\n\n const stats = opts.groups.map((g, index) => ({\n index,\n count: g.values.filter(Number.isFinite).length,\n label: g.label,\n s: computeBoxStats(g.values),\n }));\n const valid = stats.filter((g) => g.s !== null) as Array<{\n label: string;\n index: number;\n count: number;\n s: NonNullable<ReturnType<typeof computeBoxStats>>;\n }>;\n if (valid.length === 0) return emptyChart(width, height, opts.className);\n\n const area = computePlotArea(width, height, padding, false, !!opts.yAxis?.label, header.height, 0);\n\n // Collect all values relevant for the y-domain: whisker extremes + outliers.\n const axisValues: number[] = [];\n for (const g of valid) {\n axisValues.push(g.s.whiskerLow, g.s.whiskerHigh);\n if (showOutliers) axisValues.push(...g.s.outliers);\n }\n const yAxis = computeAxisScale(axisValues, opts.yAxis);\n const yMap = pickMapper(yAxis.scale);\n\n const body: string[] = [];\n body.push(renderYAxis(yAxis, area, opts.yAxis));\n body.push(\n renderXAxisCategorical(\n valid.map((g) => g.label),\n area,\n height,\n undefined,\n ),\n );\n\n const slot = (area.x1 - area.x0) / valid.length;\n const boxWidth = slot * 0.6;\n const boxOffset = slot * 0.2;\n\n for (let i = 0; i < valid.length; i++) {\n const g = valid[i]!;\n const cx = area.x0 + slot * i + slot / 2;\n const x = area.x0 + slot * i + boxOffset;\n const seriesIdx = opts.colorByBox ? i % 8 : 0;\n const seriesCls = `stdlib-chart-series-${seriesIdx}`;\n const yQ1 = yMap(g.s.q1, yAxis.domain, [area.y1, area.y0]);\n const yQ2 = yMap(g.s.q2, yAxis.domain, [area.y1, area.y0]);\n const yQ3 = yMap(g.s.q3, yAxis.domain, [area.y1, area.y0]);\n const yWhiskerLow = yMap(g.s.whiskerLow, yAxis.domain, [area.y1, area.y0]);\n const yWhiskerHigh = yMap(g.s.whiskerHigh, yAxis.domain, [area.y1, area.y0]);\n\n // Whisker line (vertical) from low whisker to high whisker, behind the box.\n body.push(\n `<line class=\"stdlib-chart-box-whisker\" x1=\"${fmt(cx)}\" y1=\"${fmt(yWhiskerHigh)}\" x2=\"${fmt(cx)}\" y2=\"${fmt(yWhiskerLow)}\"/>`,\n );\n // Whisker caps.\n const capW = boxWidth * 0.4;\n body.push(\n `<line class=\"stdlib-chart-box-cap\" x1=\"${fmt(cx - capW / 2)}\" y1=\"${fmt(yWhiskerHigh)}\" x2=\"${fmt(cx + capW / 2)}\" y2=\"${fmt(yWhiskerHigh)}\"/>`,\n );\n body.push(\n `<line class=\"stdlib-chart-box-cap\" x1=\"${fmt(cx - capW / 2)}\" y1=\"${fmt(yWhiskerLow)}\" x2=\"${fmt(cx + capW / 2)}\" y2=\"${fmt(yWhiskerLow)}\"/>`,\n );\n // Box (Q1 to Q3).\n body.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-box ${seriesCls}\" x=\"${fmt(x)}\" y=\"${fmt(yQ3)}\" width=\"${fmt(boxWidth)}\" height=\"${fmt(yQ1 - yQ3)}\"/>`,\n {\n index: g.index,\n role: \"box\",\n label: g.label,\n anchor: [cx, yQ2],\n values: [\n { key: \"count\", value: g.count },\n ...([\"q1\", \"q2\", \"q3\", \"whiskerLow\", \"whiskerHigh\"] as const)\n .map((key) => ({ key, value: g.s[key] }))\n .map((field) => ({ ...field, formatted: opts.yAxis?.format?.(field.value) })),\n ],\n },\n opts.inspect,\n ),\n );\n // Median line.\n body.push(`<line class=\"stdlib-chart-box-median\" x1=\"${fmt(x)}\" y1=\"${fmt(yQ2)}\" x2=\"${fmt(x + boxWidth)}\" y2=\"${fmt(yQ2)}\"/>`);\n // Outliers.\n if (showOutliers) {\n const sourceIndices = new Map<number, number[]>();\n if (opts.inspect)\n opts.groups[g.index]!.values.forEach((value, index) => {\n const indices = sourceIndices.get(value) ?? [];\n indices.push(index);\n sourceIndices.set(value, indices);\n });\n for (const v of g.s.outliers) {\n const sourceIndex = sourceIndices.get(v)?.shift() ?? 0;\n const oy = yMap(v, yAxis.domain, [area.y1, area.y0]);\n body.push(\n chartDatumSvg(\n `<circle class=\"stdlib-chart-box-outlier ${seriesCls}\" cx=\"${fmt(cx)}\" cy=\"${fmt(oy)}\" r=\"2.5\"/>`,\n {\n index: sourceIndex,\n seriesIndex: g.index,\n role: \"outlier\",\n label: g.label,\n anchor: [cx, oy],\n values: [{ key: \"value\", value: v, formatted: opts.yAxis?.format?.(v) }],\n },\n opts.inspect,\n ),\n );\n }\n }\n }\n\n if (opts.references && opts.references.length > 0) {\n const yRefs = opts.references.filter((r) => (r.axis ?? \"y\") === \"y\");\n if (yRefs.length > 0) {\n body.push(renderReferenceLines(yRefs, { domain: [0, 1], scale: \"linear\" }, yAxis, area));\n }\n }\n\n return svgRoot({ width, height, className: opts.className }, header.svg + body.join(\"\"));\n};\n\n// ==========================\n// DASHBOARD PANELS\n// ==========================\n\nexport type Threshold = {\n /** Inclusive upper bound for this threshold segment. */\n value: number;\n /** Optional label for legends or future consumers. */\n label?: string;\n /** Optional SVG color. When omitted, the series CSS variables are used. */\n color?: string;\n};\n\nexport type GaugeOptions = ChartOptions & {\n value: number;\n min?: number;\n max?: number;\n label?: string;\n unit?: string;\n format?: (value: number) => string;\n thresholds?: Threshold[];\n showNeedle?: boolean;\n};\n\nexport type BarGaugeItem = {\n label: string;\n value: number;\n min?: number;\n max?: number;\n unit?: string;\n};\n\nexport type BarGaugeOptions = ChartOptions & {\n data: BarGaugeItem[];\n min?: number;\n max?: number;\n unit?: string;\n format?: (value: number) => string;\n thresholds?: Threshold[];\n};\n\nexport type StatOptions = ChartOptions & {\n label: string;\n value: number | string;\n unit?: string;\n delta?: number | string;\n deltaFormat?: (value: number) => string;\n trend?: \"up\" | \"down\" | \"neutral\";\n sparkline?: number[] | Point[];\n format?: (value: number) => string;\n};\n\nexport type HeatmapDatum = { x: string; y: string; value: number };\n\nexport type HeatmapOptions = ChartOptions & {\n data: HeatmapDatum[];\n xLabels?: string[];\n yLabels?: string[];\n min?: number;\n max?: number;\n format?: (value: number) => string;\n showValues?: boolean;\n};\n\nexport type StateInterval = {\n from: number;\n to: number;\n state: string;\n label?: string;\n};\n\nexport type StateTimelineRow = {\n label: string;\n intervals: StateInterval[];\n};\n\nexport type StateStyle = {\n state: string;\n label?: string;\n color?: string;\n};\n\nexport type StateTimelineOptions = ChartOptions & {\n rows: StateTimelineRow[];\n states?: StateStyle[];\n xAxis?: Pick<AxisOptions, \"format\" | \"label\">;\n legend?: boolean;\n};\n\nconst thresholdIndexForValue = (value: number, thresholds: readonly Threshold[] | undefined, min: number, max: number): number => {\n if (!thresholds || thresholds.length === 0) return 0;\n const sorted = [...thresholds].filter((t) => Number.isFinite(t.value)).sort((a, b) => a.value - b.value);\n const clamped = clamp(value, min, max);\n const idx = sorted.findIndex((t) => clamped <= t.value);\n return idx >= 0 ? idx : Math.max(0, sorted.length - 1);\n};\n\nconst thresholdForIndex = (thresholds: readonly Threshold[] | undefined, index: number): Threshold | undefined => {\n if (!thresholds || thresholds.length === 0) return undefined;\n const sorted = [...thresholds].filter((t) => Number.isFinite(t.value)).sort((a, b) => a.value - b.value);\n return sorted[index];\n};\n\n/**\n * Render a radial single-value gauge for KPI, quota, saturation, or SLO style\n * dashboard panels.\n */\nexport const gauge = (opts: GaugeOptions): string => {\n const width = opts.width ?? 260;\n const height = opts.height ?? 180;\n const [min, max] = normalizeMinMax(opts.min, opts.max);\n const value = Number.isFinite(opts.value) ? opts.value : min;\n const clamped = clamp(value, min, max);\n const startAngle = (Math.PI * 5) / 6;\n const endAngle = (Math.PI * 13) / 6;\n const valueAngle = mapRange(clamped, [min, max], [startAngle, endAngle]);\n const cx = width / 2;\n const cy = height * 0.64;\n const radius = Math.min(width * 0.34, height * 0.43);\n const startPoint = polarPoint(cx, cy, radius, startAngle);\n const endPoint = polarPoint(cx, cy, radius, endAngle);\n const endpointLabelY = Math.min(height - 10, Math.max(cy + 32, startPoint.y + 16));\n const progress = clamp(mapRange(clamped, [min, max], [0, 100]), 0, 100);\n const gaugePath = arcLinePathD(cx, cy, radius, startAngle, endAngle);\n const gradientStops = gaugeThresholdStops(opts.thresholds, min, max);\n const thresholdIdx = thresholdIndexForValue(clamped, opts.thresholds, min, max);\n const threshold = thresholdForIndex(opts.thresholds, thresholdIdx);\n const thresholdColor = threshold?.color;\n const valueText = formatNumberValue(value, opts.format, opts.unit);\n const label = opts.label ?? opts.title;\n const fillStroke =\n gradientStops.length > 0 ? ` stroke=\"${escapeXml(gaugeColorAt(gradientStops, clamped))}\"` : thresholdStrokeAttr(thresholdColor);\n const fillClass =\n gradientStops.length > 0 || thresholdColor\n ? \"stdlib-chart-gauge-fill\"\n : `stdlib-chart-gauge-fill stdlib-chart-series-${thresholdIdx % 8}`;\n const body: string[] = [];\n\n if (gradientStops.length > 0) {\n body.push(\n renderGaugeGradientSegments({\n stops: gradientStops,\n min,\n max,\n cx,\n cy,\n radius,\n startAngle,\n endAngle,\n className: \"stdlib-chart-gauge-gradient-segment stdlib-chart-gauge-gradient-scale\",\n }),\n );\n body.push(\n renderGaugeGradientSegments({\n stops: gradientStops,\n min,\n max,\n cx,\n cy,\n radius,\n startAngle,\n endAngle,\n progress,\n className: \"stdlib-chart-gauge-gradient-segment\",\n }),\n );\n } else {\n body.push(`<path class=\"stdlib-chart-gauge-track\" d=\"${gaugePath}\"/>`);\n if (progress > 0) {\n body.push(`<path class=\"${fillClass}\"${fillStroke} pathLength=\"100\" stroke-dasharray=\"${fmt(progress)} 100\" d=\"${gaugePath}\"/>`);\n }\n }\n\n if (opts.showNeedle) {\n const tip = polarPoint(cx, cy, radius - 8, valueAngle);\n const needleClass =\n thresholdColor || gradientStops.length > 0\n ? \"stdlib-chart-gauge-needle\"\n : `stdlib-chart-gauge-needle stdlib-chart-series-${thresholdIdx % 8}`;\n body.push(`<line class=\"${needleClass}\"${fillStroke} x1=\"${fmt(cx)}\" y1=\"${fmt(cy)}\" x2=\"${fmt(tip.x)}\" y2=\"${fmt(tip.y)}\"/>`);\n body.push(`<circle class=\"stdlib-chart-gauge-hub\" cx=\"${fmt(cx)}\" cy=\"${fmt(cy)}\" r=\"3\"/>`);\n }\n\n body.push(`<text class=\"stdlib-chart-gauge-value\" x=\"${fmt(cx)}\" y=\"${fmt(cy - 2)}\" text-anchor=\"middle\">${escapeXml(valueText)}</text>`);\n if (label) {\n body.push(`<text class=\"stdlib-chart-gauge-label\" x=\"${fmt(cx)}\" y=\"${fmt(cy + 20)}\" text-anchor=\"middle\">${escapeXml(label)}</text>`);\n }\n body.push(\n `<text class=\"stdlib-chart-gauge-unit\" x=\"${fmt(startPoint.x)}\" y=\"${fmt(endpointLabelY)}\" text-anchor=\"middle\">${escapeXml(formatNumberValue(min, opts.format, opts.unit))}</text>`,\n );\n body.push(\n `<text class=\"stdlib-chart-gauge-unit\" x=\"${fmt(endPoint.x)}\" y=\"${fmt(endpointLabelY)}\" text-anchor=\"middle\">${escapeXml(formatNumberValue(max, opts.format, opts.unit))}</text>`,\n );\n\n return svgRoot(\n { width, height, className: opts.className },\n chartDatumSvg(\n body.join(\"\"),\n {\n index: 0,\n role: \"value\",\n label,\n anchor: [cx, cy],\n values: [\n { key: \"value\", value, formatted: valueText },\n { key: \"min\", value: min },\n { key: \"max\", value: max },\n ...(threshold ? [{ key: \"threshold\", value: threshold.label ?? threshold.value }] : []),\n ],\n },\n opts.inspect,\n ),\n );\n};\n\n/** Render compact horizontal bar gauges for multiple reduced metrics. */\nexport const barGauge = (opts: BarGaugeOptions): string => {\n const width = opts.width ?? 420;\n const rowHeight = 28;\n const top = opts.title || opts.subtitle ? 42 : 16;\n const height = opts.height ?? Math.max(80, top + opts.data.length * rowHeight + 14);\n const header = renderHeader(width, opts.title, opts.subtitle);\n const body: string[] = [header.svg];\n const labelW = Math.min(140, Math.max(74, width * 0.34));\n const valueW = 56;\n const trackX = labelW + 14;\n const trackW = Math.max(24, width - trackX - valueW - 14);\n const trackH = 10;\n const sourceIndices = opts.data.flatMap((d, index) => (Number.isFinite(d.value) ? [index] : []));\n const data = opts.data.filter((d) => Number.isFinite(d.value));\n\n if (data.length === 0) {\n body.push(`<text class=\"stdlib-chart-empty-text\" x=\"${fmt(width / 2)}\" y=\"${fmt(height / 2)}\" text-anchor=\"middle\">No data</text>`);\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n }\n\n data.forEach((d, i) => {\n const [min, max] = normalizeMinMax(d.min ?? opts.min, d.max ?? opts.max);\n const pct = clamp((d.value - min) / (max - min), 0, 1);\n const y = top + i * rowHeight;\n const thresholdIdx = thresholdIndexForValue(d.value, opts.thresholds, min, max);\n const threshold = thresholdForIndex(opts.thresholds, thresholdIdx);\n const thresholdColor = threshold?.color;\n const unit = d.unit ?? opts.unit ?? \"\";\n const start = body.length;\n body.push(\n `<text class=\"stdlib-chart-bar-gauge-label\" x=\"12\" y=\"${fmt(y + 12)}\" dominant-baseline=\"middle\">${escapeXml(d.label)}</text>`,\n );\n body.push(\n `<rect class=\"stdlib-chart-bar-gauge-track\" x=\"${fmt(trackX)}\" y=\"${fmt(y + 7)}\" width=\"${fmt(trackW)}\" height=\"${fmt(trackH)}\" rx=\"2\"/>`,\n );\n body.push(\n `<rect class=\"stdlib-chart-bar-gauge-fill stdlib-chart-series-${thresholdIdx % 8}\"${thresholdFillAttr(thresholdColor)} x=\"${fmt(trackX)}\" y=\"${fmt(y + 7)}\" width=\"${fmt(trackW * pct)}\" height=\"${fmt(trackH)}\" rx=\"2\"/>`,\n );\n body.push(\n `<text class=\"stdlib-chart-bar-gauge-value\" x=\"${fmt(width - 12)}\" y=\"${fmt(y + 12)}\" text-anchor=\"end\" dominant-baseline=\"middle\">${escapeXml(formatNumberValue(d.value, opts.format, unit))}</text>`,\n );\n const shapes = body.splice(start).join(\"\");\n body.push(\n chartDatumSvg(\n shapes,\n {\n index: sourceIndices[i]!,\n role: \"item\",\n label: d.label,\n anchor: [trackX + trackW / 2, y + 12],\n values: [\n { key: \"value\", value: d.value, formatted: formatNumberValue(d.value, opts.format, unit) },\n { key: \"min\", value: min },\n { key: \"max\", value: max },\n ...(threshold ? [{ key: \"threshold\", value: threshold.label ?? threshold.value }] : []),\n ],\n },\n opts.inspect,\n ),\n );\n });\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n\nconst renderInlineSparkline = (\n values: number[] | Point[] | undefined,\n x: number,\n y: number,\n width: number,\n height: number,\n inspect?: boolean,\n): string => {\n if (!values || values.length < 2) return \"\";\n const entries = sparklineEntries(values);\n const points = entries.map((entry) => entry.point);\n if (points.length < 2) return \"\";\n const xs = points.map((p) => p.x);\n const ys = points.map((p) => p.y);\n const xDomain = computeDomain(xs);\n const yDomain = computeDomain(ys);\n const mapped = [...points]\n .sort((a, b) => a.x - b.x)\n .map((p) => ({\n x: mapRange(p.x, xDomain, [x, x + width]),\n y: mapRange(p.y, yDomain, [y + height, y]),\n }));\n const linePath = smoothPathD(mapped);\n const first = mapped[0]!;\n const last = mapped[mapped.length - 1]!;\n const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(y + height)} L ${fmt(first.x)} ${fmt(y + height)} Z`;\n return (\n `<path class=\"stdlib-chart-stat-sparkline-area\" d=\"${areaPath}\"/>` +\n `<path class=\"stdlib-chart-stat-sparkline\" d=\"${linePath}\"/>` +\n (inspect\n ? [...points]\n .sort((a, b) => a.x - b.x)\n .map((p, index) =>\n inspectionPoint(\n { index: entries[index]!.index, role: \"point\", anchor: [mapped[index]!.x, mapped[index]!.y], values: pointValues(p) },\n inspect,\n ),\n )\n .join(\"\")\n : \"\")\n );\n};\n\n/** Render a large value panel with optional delta and inline sparkline. */\nexport const stat = (opts: StatOptions): string => {\n const width = opts.width ?? 260;\n const height = opts.height ?? 150;\n const value = typeof opts.value === \"number\" ? formatNumberValue(opts.value, opts.format, opts.unit) : `${opts.value}${opts.unit ?? \"\"}`;\n const trend = opts.trend ?? (typeof opts.delta === \"number\" ? (opts.delta > 0 ? \"up\" : opts.delta < 0 ? \"down\" : \"neutral\") : \"neutral\");\n const deltaText =\n typeof opts.delta === \"number\"\n ? `${opts.delta > 0 ? \"+\" : \"\"}${opts.deltaFormat ? opts.deltaFormat(opts.delta) : fmt(opts.delta)}`\n : opts.delta;\n const deltaClass = trend === \"up\" ? \" stdlib-chart-stat-delta-up\" : trend === \"down\" ? \" stdlib-chart-stat-delta-down\" : \"\";\n const body: string[] = [];\n body.push(`<text class=\"stdlib-chart-stat-label\" x=\"16\" y=\"24\">${escapeXml(opts.label)}</text>`);\n body.push(`<text class=\"stdlib-chart-stat-value\" x=\"16\" y=\"70\">${escapeXml(value)}</text>`);\n if (deltaText !== undefined) {\n body.push(\n `<text class=\"stdlib-chart-stat-delta${deltaClass}\" x=\"${fmt(width - 16)}\" y=\"70\" text-anchor=\"end\">${escapeXml(String(deltaText))}</text>`,\n );\n }\n const summary = chartDatumSvg(\n (opts.inspect\n ? `<rect x=\"0\" y=\"0\" width=\"${fmt(width)}\" height=\"${fmt(Math.max(80, height - 48))}\" fill=\"transparent\" stroke=\"none\"/>`\n : \"\") + body.join(\"\"),\n {\n index: 0,\n role: \"value\",\n label: opts.label,\n anchor: [width / 2, 50],\n values: [\n { key: \"value\", value: opts.value, formatted: value },\n ...(opts.delta !== undefined ? [{ key: \"delta\", value: opts.delta, formatted: deltaText }] : []),\n ],\n },\n opts.inspect,\n );\n return svgRoot(\n { width, height, className: opts.className },\n summary + renderInlineSparkline(opts.sparkline, 16, height - 42, width - 32, 26, opts.inspect),\n );\n};\n\n/**\n * Render a categorical two-dimensional heatmap. Cell opacity represents value\n * intensity; labels are derived from first occurrence order unless provided.\n */\nexport const heatmap = (opts: HeatmapOptions): string => {\n const width = opts.width ?? 460;\n const height = opts.height ?? 260;\n const padding = normalizePadding(opts.padding ?? { top: 36, right: 16, bottom: 32, left: 54 });\n const header = renderHeader(width, opts.title, opts.subtitle);\n const xLabels = opts.xLabels ?? [...new Set(opts.data.map((d) => d.x))];\n const yLabels = opts.yLabels ?? [...new Set(opts.data.map((d) => d.y))];\n if (xLabels.length === 0 || yLabels.length === 0) {\n return svgRoot(\n { width, height, className: opts.className },\n header.svg + `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(width / 2)}\" y=\"${fmt(height / 2)}\" text-anchor=\"middle\">No data</text>`,\n );\n }\n const area = computePlotArea(width, height, padding, false, false, header.height, 0);\n const values = opts.data.map((d) => d.value).filter(Number.isFinite);\n const [autoMin, autoMax] = computeDomain(values);\n const min = Number.isFinite(opts.min) ? opts.min! : autoMin;\n const max = Number.isFinite(opts.max) ? opts.max! : autoMax;\n const indexMap = new Map(opts.data.map((d, index) => [`${d.x}\\u0000${d.y}`, index]));\n const valueMap = new Map(opts.data.map((d) => [`${d.x}\\u0000${d.y}`, d.value]));\n const cellW = (area.x1 - area.x0) / xLabels.length;\n const cellH = (area.y1 - area.y0) / yLabels.length;\n const body: string[] = [header.svg];\n const format = opts.format ?? ((v: number) => fmt(v));\n\n xLabels.forEach((label, i) => {\n const x = area.x0 + cellW * (i + 0.5);\n body.push(\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x)}\" y=\"${fmt(area.y1 + 14)}\" text-anchor=\"middle\">${escapeXml(label)}</text>`,\n );\n });\n yLabels.forEach((label, i) => {\n const y = area.y0 + cellH * (i + 0.5);\n body.push(\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(area.x0 - 8)}\" y=\"${fmt(y)}\" text-anchor=\"end\" dominant-baseline=\"middle\">${escapeXml(label)}</text>`,\n );\n });\n\n for (let yi = 0; yi < yLabels.length; yi++) {\n for (let xi = 0; xi < xLabels.length; xi++) {\n const valueAtCell = valueMap.get(`${xLabels[xi]}\\u0000${yLabels[yi]}`);\n if (!Number.isFinite(valueAtCell)) continue;\n const intensity = clamp(mapRange(valueAtCell!, [min, max], [0.12, 1]), 0.12, 1);\n const x = area.x0 + xi * cellW;\n const y = area.y0 + yi * cellH;\n body.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-heatmap-cell stdlib-chart-series-0\" x=\"${fmt(x)}\" y=\"${fmt(y)}\" width=\"${fmt(Math.max(0, cellW - 1))}\" height=\"${fmt(Math.max(0, cellH - 1))}\" opacity=\"${fmt(intensity)}\"/>`,\n {\n index: indexMap.get(`${xLabels[xi]}\\u0000${yLabels[yi]}`)!,\n role: \"cell\",\n anchor: [x + cellW / 2, y + cellH / 2],\n grid: [xi, yi],\n values: [\n { key: \"x\", value: xLabels[xi]! },\n { key: \"y\", value: yLabels[yi]! },\n { key: \"value\", value: valueAtCell!, formatted: format(valueAtCell!) },\n ],\n },\n opts.inspect,\n ),\n );\n if (opts.showValues) {\n body.push(\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x + cellW / 2)}\" y=\"${fmt(y + cellH / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">${escapeXml(format(valueAtCell!))}</text>`,\n );\n }\n }\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n\n// ==========================\n// STATE TIMELINE\n// ==========================\n\n/**\n * Render state regions over a numeric timeline for services, jobs, deploys, or\n * health checks.\n */\nexport const stateTimeline = (opts: StateTimelineOptions): string => {\n const width = opts.width ?? 560;\n const rowHeight = 24;\n const legendItems = opts.legend === false ? [] : (opts.states ?? []).map((s, i) => ({ label: s.label ?? s.state, seriesIndex: i }));\n const legendHeight = measureLegendHeight(legendItems, width);\n const height = opts.height ?? Math.max(120, 56 + opts.rows.length * rowHeight + legendHeight);\n const padding = normalizePadding(opts.padding ?? { top: 36, right: 16, bottom: 28, left: 74 });\n const header = renderHeader(width, opts.title, opts.subtitle);\n const allIntervals = opts.rows.flatMap((r) => r.intervals);\n const timeValues = allIntervals.flatMap((i) => [i.from, i.to]).filter(Number.isFinite);\n if (opts.rows.length === 0 || timeValues.length === 0) {\n return svgRoot(\n { width, height, className: opts.className },\n header.svg + `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(width / 2)}\" y=\"${fmt(height / 2)}\" text-anchor=\"middle\">No data</text>`,\n );\n }\n const [minT, maxT] = computeDomain(timeValues);\n const area = computePlotArea(width, height, padding, !!opts.xAxis?.label, false, header.height, legendHeight);\n const stateKeys = opts.states?.map((s) => s.state) ?? [...new Set(allIntervals.map((i) => i.state))];\n const stateStyles = new Map((opts.states ?? []).map((s, i) => [s.state, { ...s, index: i }]));\n const stateIndex = (state: string) => {\n const explicit = stateStyles.get(state)?.index;\n if (explicit !== undefined) return explicit;\n const idx = stateKeys.indexOf(state);\n return idx >= 0 ? idx : 0;\n };\n const body: string[] = [header.svg];\n const format = opts.xAxis?.format ?? ((v: number) => fmt(v));\n const ticks = extendDomainToNice(minT, maxT, niceStep(maxT - minT, 4)).ticks.slice(0, 6);\n\n opts.rows.forEach((row, rowIdx) => {\n const y = area.y0 + rowIdx * rowHeight;\n body.push(\n `<text class=\"stdlib-chart-state-label\" x=\"${fmt(area.x0 - 8)}\" y=\"${fmt(y + rowHeight / 2)}\" text-anchor=\"end\" dominant-baseline=\"middle\">${escapeXml(row.label)}</text>`,\n );\n for (const [index, interval] of row.intervals.entries()) {\n if (!Number.isFinite(interval.from) || !Number.isFinite(interval.to)) continue;\n const from = clamp(Math.min(interval.from, interval.to), minT, maxT);\n const to = clamp(Math.max(interval.from, interval.to), minT, maxT);\n const x = mapRange(from, [minT, maxT], [area.x0, area.x1]);\n const x2 = mapRange(to, [minT, maxT], [area.x0, area.x1]);\n const idx = stateIndex(interval.state);\n const color = stateStyles.get(interval.state)?.color;\n body.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-state-region stdlib-chart-series-${idx % 8}\"${thresholdFillAttr(color)} x=\"${fmt(x)}\" y=\"${fmt(y + 3)}\" width=\"${fmt(Math.max(1, x2 - x))}\" height=\"${fmt(rowHeight - 6)}\" rx=\"2\"/>`,\n {\n index,\n seriesIndex: rowIdx,\n role: \"interval\",\n label: row.label,\n anchor: [(x + x2) / 2, y + rowHeight / 2],\n grid: [index, rowIdx],\n values: [\n { key: \"state\", value: interval.state, formatted: stateStyles.get(interval.state)?.label },\n { key: \"from\", value: from, formatted: format(from) },\n { key: \"to\", value: to, formatted: format(to) },\n { key: \"duration\", value: to - from },\n ],\n },\n opts.inspect,\n ),\n );\n }\n });\n\n for (const tick of ticks) {\n if (tick < minT || tick > maxT) continue;\n const x = mapRange(tick, [minT, maxT], [area.x0, area.x1]);\n body.push(\n `<text class=\"stdlib-chart-heatmap-label\" x=\"${fmt(x)}\" y=\"${fmt(area.y1 + 15)}\" text-anchor=\"middle\">${escapeXml(format(tick))}</text>`,\n );\n }\n if (opts.xAxis?.label) {\n body.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((area.x0 + area.x1) / 2)}\" y=\"${fmt(height - legendHeight - 4)}\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n }\n if (legendItems.length > 0) {\n body.push(renderLegend(legendItems, width, height - legendHeight).svg);\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n\n// ==========================\n// SPARKLINE\n// ==========================\n\nexport type SparklineOptions = {\n inspect?: boolean;\n /** Series of values. Bare numbers auto-x to their array index. */\n data: number[] | Point[];\n /** Default 80. */\n width?: number;\n /** Default 20. */\n height?: number;\n /** Render with smooth Catmull-Rom curves. Default `true`. */\n smooth?: boolean;\n /** Render a small dot at the last data point. Default false. */\n showLast?: boolean;\n /** Render dots at the highest and lowest data points. Skipped when all\n * values are equal. Default false. */\n showMinMax?: boolean;\n /** Render a soft gradient fill below the stroke line, fading from a\n * translucent `currentColor` at the top to fully transparent at the\n * bottom — the classic dashboard-tile look. The stroke line stays\n * visible on top, and dots from `showLast`/`showMinMax` compose over\n * the fill. Default false. */\n area?: boolean;\n /** Appended to the root `<svg>`'s class attribute. */\n className?: string;\n};\n\n// Monotonically incrementing counter for per-instance gradient IDs. Using a\n// module-level counter (vs. random) keeps output stable enough that repeated\n// renders of the same input in a process produce predictable IDs in sequence,\n// while still being unique within a document.\nlet sparklineGradientCounter = 0;\n\nconst sparklineEntries = (data: readonly (number | Point)[]) =>\n data\n .map((value, index) => ({ point: typeof value === \"number\" ? { x: index, y: value } : value, index }))\n .filter(({ point }) => Number.isFinite(point.x) && Number.isFinite(point.y))\n .sort((a, b) => a.point.x - b.point.x);\n\n/**\n * Render a minimalist sparkline — a tiny inline chart with no axes, no\n * labels, and minimal padding. Designed to fit alongside text or in dense\n * tables.\n *\n * Stroke uses `currentColor` by default, so it adopts the surrounding text\n * color. Pass `className` to scope a different color.\n *\n * @example\n * charts.sparkline({ data: [3, 7, 5, 9, 12, 10, 14] });\n *\n * @example\n * charts.sparkline({\n * data: [3, 7, 5, 9, 12, 10, 14],\n * smooth: true,\n * showLast: true,\n * width: 120,\n * });\n *\n * @example\n * // Dashboard-tile look: stroke + soft gradient fill fading to transparent.\n * charts.sparkline({ data: [3, 7, 5, 9, 12, 10, 14], area: true });\n */\nexport const sparkline = (opts: SparklineOptions): string => {\n const width = opts.width ?? 80;\n const height = opts.height ?? 20;\n const entries = sparklineEntries(opts.data);\n const points = entries.map((entry) => entry.point);\n\n if (points.length < 2) {\n // Empty spark — return a same-sized invisible svg so layout stays stable.\n return svgRoot({ width, height, className: opts.className }, \"\");\n }\n\n // Inset reserves space so the stroke and any dots sit fully inside the\n // viewBox. Dots have r=2; without dots the line stroke (1.5px wide) only\n // needs ~0.75px of breathing room.\n const DOT_R = 2;\n const hasDots = !!(opts.showLast || opts.showMinMax);\n const inset = hasDots ? DOT_R + 0.75 : 1.5;\n const xs = points.map((p) => p.x);\n const ys = points.map((p) => p.y);\n const xDomain = computeDomain(xs);\n const yDomain = computeDomain(ys);\n\n const sorted = [...points].sort((a, b) => a.x - b.x);\n const mapped = sorted.map((p) => ({\n x: mapRange(p.x, xDomain, [inset, width - inset]),\n y: mapRange(p.y, yDomain, [height - inset, inset]),\n }));\n\n const pathFn = opts.smooth === false ? linePathD : smoothPathD;\n const linePath = pathFn(mapped);\n const body: string[] = [];\n\n if (opts.area) {\n // Gradient-fill area UNDER the stroke line: fades from a translucent\n // currentColor at the top to fully transparent at the bottom. The fill\n // path extends all the way down to the bottom of the viewBox; the\n // gradient handles the visual fade-out — no need for special bottom\n // padding. Stroke renders on top via the regular `.sparkline` path below.\n const gradId = `stdlib-spark-grad-${++sparklineGradientCounter}`;\n const first = mapped[0]!;\n const last = mapped[mapped.length - 1]!;\n const areaPath = `${linePath} L ${fmt(last.x)} ${fmt(height)} L ${fmt(first.x)} ${fmt(height)} Z`;\n body.push(\n `<defs><linearGradient id=\"${gradId}\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">` +\n `<stop offset=\"0%\" stop-color=\"currentColor\" stop-opacity=\"0.28\"/>` +\n `<stop offset=\"100%\" stop-color=\"currentColor\" stop-opacity=\"0\"/>` +\n `</linearGradient></defs>`,\n );\n body.push(`<path class=\"stdlib-chart-sparkline-area\" fill=\"url(#${gradId})\" d=\"${areaPath}\"/>`);\n }\n body.push(`<path class=\"stdlib-chart-sparkline\" d=\"${linePath}\"/>`);\n\n if (opts.showMinMax) {\n let minIdx = 0;\n let maxIdx = 0;\n let minV = Number.POSITIVE_INFINITY;\n let maxV = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < sorted.length; i++) {\n const v = sorted[i]!.y;\n if (v < minV) {\n minV = v;\n minIdx = i;\n }\n if (v > maxV) {\n maxV = v;\n maxIdx = i;\n }\n }\n if (minV < maxV) {\n const max = mapped[maxIdx]!;\n const min = mapped[minIdx]!;\n body.push(`<circle class=\"stdlib-chart-sparkline-max\" cx=\"${fmt(max.x)}\" cy=\"${fmt(max.y)}\" r=\"2\"/>`);\n body.push(`<circle class=\"stdlib-chart-sparkline-min\" cx=\"${fmt(min.x)}\" cy=\"${fmt(min.y)}\" r=\"2\"/>`);\n }\n }\n\n if (opts.showLast && mapped.length > 0) {\n const last = mapped[mapped.length - 1]!;\n body.push(`<circle class=\"stdlib-chart-sparkline-last\" cx=\"${fmt(last.x)}\" cy=\"${fmt(last.y)}\" r=\"2\"/>`);\n }\n\n if (opts.inspect)\n sorted.forEach((p, index) =>\n body.push(\n inspectionPoint(\n { index: entries[index]!.index, role: \"point\", anchor: [mapped[index]!.x, mapped[index]!.y], values: pointValues(p) },\n opts.inspect,\n ),\n ),\n );\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n};\n"],"mappings":"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","ignoreList":[]}
|