@k2b/ui 0.50.0 → 0.52.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 +35 -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/Toolbar.js +8 -2
- package/dist/browser/actions/Toolbar.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/bar-labels.js +5 -0
- package/dist/browser/charts/core/bar-labels.js.map +1 -0
- package/dist/browser/charts/core/bubble.js +166 -0
- package/dist/browser/charts/core/bubble.js.map +1 -0
- 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/default-styles.js +83 -0
- package/dist/browser/charts/core/default-styles.js.map +1 -0
- package/dist/browser/charts/core/funnel-layout.js +79 -0
- package/dist/browser/charts/core/funnel-layout.js.map +1 -0
- package/dist/browser/charts/core/funnel.js +27 -0
- package/dist/browser/charts/core/funnel.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 +12 -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/pareto.js +120 -0
- package/dist/browser/charts/core/pareto.js.map +1 -0
- package/dist/browser/charts/core/radar.js +101 -0
- package/dist/browser/charts/core/radar.js.map +1 -0
- package/dist/browser/charts/core/registry.js +33 -16
- package/dist/browser/charts/core/registry.js.map +1 -1
- package/dist/browser/charts/core/render-size.js +15 -0
- package/dist/browser/charts/core/render-size.js.map +1 -0
- package/dist/browser/charts/core/render.js +39 -10
- package/dist/browser/charts/core/render.js.map +1 -1
- package/dist/browser/charts/core/snapshot.js +4 -4
- package/dist/browser/charts/core/snapshot.js.map +1 -1
- package/dist/browser/charts/core/svg-barGauge.js +67 -0
- package/dist/browser/charts/core/svg-barGauge.js.map +1 -0
- package/dist/browser/charts/core/svg-boxplot.js +127 -0
- package/dist/browser/charts/core/svg-boxplot.js.map +1 -0
- package/dist/browser/charts/core/svg-common.js +1065 -0
- package/dist/browser/charts/core/svg-common.js.map +1 -0
- package/dist/browser/charts/core/svg-gauge.js +185 -0
- package/dist/browser/charts/core/svg-gauge.js.map +1 -0
- package/dist/browser/charts/core/svg-heatmap.js +80 -0
- package/dist/browser/charts/core/svg-heatmap.js.map +1 -0
- package/dist/browser/charts/core/svg-histogram.js +73 -0
- package/dist/browser/charts/core/svg-histogram.js.map +1 -0
- package/dist/browser/charts/core/svg-renderers.js +638 -0
- package/dist/browser/charts/core/svg-renderers.js.map +1 -0
- package/dist/browser/charts/core/svg-scatter.js +114 -0
- package/dist/browser/charts/core/svg-scatter.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/treemap.js +138 -0
- package/dist/browser/charts/core/treemap.js.map +1 -0
- 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 +646 -0
- package/dist/browser/content/ChartRoot.js.map +1 -0
- package/dist/browser/content/ChartSnapshotView.js +4 -1
- package/dist/browser/content/ChartSnapshotView.js.map +1 -1
- package/dist/browser/content/ChartSparkline.js +24 -0
- package/dist/browser/content/ChartSparkline.js.map +1 -0
- package/dist/browser/content/DataTable.js +186 -193
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/FileView.js +111 -61
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/Lightbox.js +62 -30
- 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/ThumbnailStrip.js +174 -0
- package/dist/browser/content/ThumbnailStrip.js.map +1 -0
- package/dist/browser/content/chart-bar.js +344 -16
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-inspection-core.js +50 -29
- 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 +28 -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 +2 -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/content/thumbnail-strip-messages.js +24 -0
- package/dist/browser/content/thumbnail-strip-messages.js.map +1 -0
- package/dist/browser/inputs/ChoiceInputs.js +150 -76
- 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 +5 -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/MarkdownSelectionToolbar.js +330 -0
- package/dist/browser/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
- 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/internal/field.js +96 -77
- package/dist/browser/internal/field.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +7 -5
- package/dist/browser/layout/AppWorkspace.js.map +1 -1
- 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/PanelDialog.js +92 -68
- package/dist/browser/layout/PanelDialog.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 +95 -78
- 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/surfaces/stat-cell-messages.js +4 -2
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -1
- package/dist/browser/widgets/DashboardFrame.js +315 -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/Toolbar.js +8 -2
- package/dist/ssr/actions/Toolbar.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/bar-labels.js +5 -0
- package/dist/ssr/charts/core/bar-labels.js.map +1 -0
- package/dist/ssr/charts/core/bubble.js +166 -0
- package/dist/ssr/charts/core/bubble.js.map +1 -0
- 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/default-styles.js +83 -0
- package/dist/ssr/charts/core/default-styles.js.map +1 -0
- package/dist/ssr/charts/core/funnel-layout.js +79 -0
- package/dist/ssr/charts/core/funnel-layout.js.map +1 -0
- package/dist/ssr/charts/core/funnel.js +27 -0
- package/dist/ssr/charts/core/funnel.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 +12 -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/pareto.js +120 -0
- package/dist/ssr/charts/core/pareto.js.map +1 -0
- package/dist/ssr/charts/core/radar.js +101 -0
- package/dist/ssr/charts/core/radar.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +33 -16
- package/dist/ssr/charts/core/registry.js.map +1 -1
- package/dist/ssr/charts/core/render-size.js +15 -0
- package/dist/ssr/charts/core/render-size.js.map +1 -0
- package/dist/ssr/charts/core/render.js +39 -10
- package/dist/ssr/charts/core/render.js.map +1 -1
- package/dist/ssr/charts/core/snapshot.js +4 -4
- package/dist/ssr/charts/core/snapshot.js.map +1 -1
- package/dist/ssr/charts/core/svg-barGauge.js +67 -0
- package/dist/ssr/charts/core/svg-barGauge.js.map +1 -0
- package/dist/ssr/charts/core/svg-boxplot.js +127 -0
- package/dist/ssr/charts/core/svg-boxplot.js.map +1 -0
- package/dist/ssr/charts/core/svg-common.js +1065 -0
- package/dist/ssr/charts/core/svg-common.js.map +1 -0
- package/dist/ssr/charts/core/svg-gauge.js +185 -0
- package/dist/ssr/charts/core/svg-gauge.js.map +1 -0
- package/dist/ssr/charts/core/svg-heatmap.js +80 -0
- package/dist/ssr/charts/core/svg-heatmap.js.map +1 -0
- package/dist/ssr/charts/core/svg-histogram.js +73 -0
- package/dist/ssr/charts/core/svg-histogram.js.map +1 -0
- package/dist/ssr/charts/core/svg-renderers.js +638 -0
- package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
- package/dist/ssr/charts/core/svg-scatter.js +114 -0
- package/dist/ssr/charts/core/svg-scatter.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/treemap.js +138 -0
- package/dist/ssr/charts/core/treemap.js.map +1 -0
- 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 +489 -0
- package/dist/ssr/content/ChartRoot.js.map +1 -0
- package/dist/ssr/content/ChartSnapshotView.js +1 -0
- package/dist/ssr/content/ChartSnapshotView.js.map +1 -1
- package/dist/ssr/content/ChartSparkline.js +24 -0
- package/dist/ssr/content/ChartSparkline.js.map +1 -0
- package/dist/ssr/content/DataTable.js +12 -16
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/FileView.js +56 -7
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/Lightbox.js +39 -10
- 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/ThumbnailStrip.js +103 -0
- package/dist/ssr/content/ThumbnailStrip.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +344 -16
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-inspection-core.js +50 -29
- 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 +28 -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 +2 -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/content/thumbnail-strip-messages.js +24 -0
- package/dist/ssr/content/thumbnail-strip-messages.js.map +1 -0
- package/dist/ssr/inputs/ChoiceInputs.js +69 -17
- 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 +5 -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/MarkdownSelectionToolbar.js +293 -0
- package/dist/ssr/inputs/markdown/MarkdownSelectionToolbar.js.map +1 -0
- 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/internal/field.js +36 -24
- package/dist/ssr/internal/field.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +5 -1
- package/dist/ssr/layout/AppWorkspace.js.map +1 -1
- 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/PanelDialog.js +40 -26
- package/dist/ssr/layout/PanelDialog.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 +31 -21
- 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/surfaces/stat-cell-messages.js +4 -2
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -1
- package/dist/ssr/widgets/DashboardFrame.js +195 -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/Toolbar.d.ts +2 -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/bar-labels.d.ts +1 -0
- package/dist/types/charts/core/bubble.d.ts +66 -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/default-styles.d.ts +1 -0
- package/dist/types/charts/core/funnel-layout.d.ts +43 -0
- package/dist/types/charts/core/funnel.d.ts +13 -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 +12 -2
- package/dist/types/charts/core/map.d.ts +3 -0
- package/dist/types/charts/core/pareto.d.ts +40 -0
- package/dist/types/charts/core/radar.d.ts +47 -0
- package/dist/types/charts/core/registry.d.ts +27 -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-barGauge.d.ts +3 -0
- package/dist/types/charts/core/svg-boxplot.d.ts +18 -0
- package/dist/types/charts/core/svg-common.d.ts +612 -0
- package/dist/types/charts/core/svg-gauge.d.ts +6 -0
- package/dist/types/charts/core/svg-heatmap.d.ts +6 -0
- package/dist/types/charts/core/svg-histogram.d.ts +16 -0
- package/dist/types/charts/core/svg-renderers.d.ts +118 -0
- package/dist/types/charts/core/svg-scatter.d.ts +23 -0
- package/dist/types/charts/core/svg.d.ts +4 -698
- package/dist/types/charts/core/treemap.d.ts +45 -0
- 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 +289 -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/Lightbox.d.ts +2 -0
- package/dist/types/content/PdfViewer.d.ts +32 -0
- package/dist/types/content/ThumbnailStrip.d.ts +29 -0
- package/dist/types/content/chart-bar.d.ts +131 -2
- package/dist/types/content/chart-inspection-core.d.ts +7 -0
- package/dist/types/content/chart-inspection.d.ts +1 -0
- package/dist/types/content/chart-message-catalog.d.ts +8 -0
- package/dist/types/content/index.d.ts +3 -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/content/thumbnail-strip-messages.d.ts +10 -0
- package/dist/types/inputs/ChoiceInputs.d.ts +6 -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 +10 -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/MarkdownSelectionToolbar.d.ts +19 -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/internal/field.d.ts +2 -0
- package/dist/types/layout/DetailPanel.d.ts +12 -0
- package/dist/types/layout/PanelDialog.d.ts +5 -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/surfaces/stat-cell-messages.d.ts +1 -0
- package/dist/types/widgets/DashboardFrame.d.ts +61 -0
- package/dist/types/widgets/index.d.ts +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/chart-bar.ts"],"sourcesContent":["import {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data: BarItem[];\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nconst wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\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) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nconst headerHeight = (opts: BarChartOptions) => (opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0);\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data);\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.xAxis?.ordered || columnsFit(opts, finite, width)) return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: 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\nconst renderHeader = (opts: BarChartOptions, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const labelPx = Math.max(...finite.map(({ item }) => chartTextWidth(item.label))) + GAP_PX;\n const labelStep = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (position: number) => {\n const half = (chartTextWidth(finite[position]!.item.label) / 2) * units;\n const center = g.x0 + slot * (position + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const firstLabel = Math.max(\n 0,\n finite.findIndex((_, position) => inside(position)),\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (position >= firstLabel && (position - firstLabel) % labelStep === 0 && inside(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/chart-bar.ts"],"sourcesContent":["import { barPercent } from \"../charts/core/bar-labels\";\nimport {\n type AxisOptions,\n type BarItem,\n chartDatumSvg,\n computeDomain,\n escapeXml,\n extendDomainToNice,\n MAX_AXIS_TICKS,\n mapLog,\n mapRange,\n niceLogTicks,\n niceStep,\n type ReferenceLine,\n referenceLineAttributes,\n svgRoot,\n} from \"../charts/core/svg-renderers\";\nimport { chartMessages } from \"./chart-message-catalog\";\n\n/**\n * Bar chart options: stdlib's `charts.bar` options plus a title for the category axis and a separate value format.\n * The wrapper owns size and inspection.\n */\nexport type BarChartOptions = {\n data?: BarItem[];\n /** Aligned categories and series. Null observations are gaps. */\n x?: string[];\n series?: { label: string; data: (number | null)[] }[];\n layout?: \"columns\" | \"rows\" | \"grouped\" | \"stacked\";\n normalize?: boolean;\n /** Explicit rows form a ranked list; shares include every source item, including the remainder. */\n share?: boolean;\n limit?: number;\n tone?: \"in\" | \"out\";\n\n locale?: string;\n compare?: { label: string; data: (number | null)[] };\n\n /** Value axis. `label` titles it, `format` writes its ticks and, without `valueFormat`, the printed values. */\n yAxis?: AxisOptions;\n /**\n * Category axis. `label` titles it. `ordered` marks categories that follow each other, such as days or steps: they\n * stay columns, and only every n-th label shows when they would not fit, as on a time axis. Unordered categories each\n * keep their label and turn into rows instead.\n */\n xAxis?: { label?: string; ordered?: boolean };\n /** Writes printed values and tooltip values. Defaults to `yAxis.format`. */\n valueFormat?: (value: number) => string;\n colorByBar?: boolean;\n references?: ReferenceLine[];\n /** Print every value at its bar. Default: whenever the values stay readable; rows always print them. */\n showValues?: boolean;\n /** A legend of the bar colors; used only with `colorByBar` in columns, where labels sit below the plot. */\n legend?: boolean;\n className?: string;\n title?: string;\n subtitle?: string;\n /**\n * The narrowest width in CSS pixels at which the drawing is shown; labels are laid out to fit it. Defaults to a\n * 320px phone column. A host that draws at its measured width passes that width.\n */\n displayWidth?: number;\n /** Logical insets of the column layout. Rows place their labels and values themselves. */\n padding?: number | { top?: number; right?: number; bottom?: number; left?: number };\n};\n\nexport type BarChartLayout = \"columns\" | \"rows\";\n\n/**\n * Text keeps its pixel size while the drawing stretches to its box, and the drawing is never measured. Labels are\n * laid out for the narrowest chart, a 320px phone column, so they fit in every wider one.\n */\nconst NARROW_PX = 296;\n/** Tick, category and value labels are 11px (see the `.k2b-chart` rules). */\nconst FONT_PX = 11;\n/** A label column takes at most this share of the narrowest chart; longer labels wrap to a second line. */\nconst LABEL_SHARE = 0.4;\nconst ROW_MIN = 22;\nconst ROW_TWO_LINES = 32;\nconst ROW_MAX = 36;\n/** Rows aim for the height of the other Cartesian charts before they grow. */\nconst ROWS_TARGET_HEIGHT = 280;\nconst BAR_MAX = 20;\nconst COLUMN_MAX = 40;\nconst GAP_PX = 6;\nconst LEGEND_ROW = 20;\n/** Rows keep at least this share of the narrowest chart for their bars; wider values go to the tooltip and table. */\nconst MIN_PLOT_SHARE = 0.3;\n\nconst narrow = (opts: BarChartOptions) => opts.displayWidth ?? NARROW_PX;\nconst fmt = (value: number) => (Number.isFinite(value) ? `${Math.round(value * 100) / 100}` : \"0\");\n\n/** Estimated width of `text` at `size` pixels in the UI sans font with tabular figures; a little wide on purpose. */\nexport const chartTextWidth = (text: string, size = FONT_PX): number => {\n let em = 0;\n for (const char of text) {\n if (/[\\s.,:;!|'’ilIjft()[\\]-]/.test(char)) em += 0.34;\n else if (/[MWmw@%]/.test(char)) em += 0.86;\n else if (/[A-Z0-9#$€&]/.test(char)) em += 0.66;\n else if (char.codePointAt(0)! > 0x2e80) em += 1;\n else em += 0.56;\n }\n return em * size;\n};\n\n/** Split a label into at most `lines` lines of `maxPx`; the last line ends with an ellipsis when the label is longer. */\nexport const wrapLabel = (label: string, maxPx: number, lines: number): { lines: string[]; truncated: boolean } => {\n const words = label.trim().split(/\\s+/);\n const result: string[] = [];\n let current = \"\";\n const breakWord = (word: string) => {\n // A word wider than a line breaks inside the word.\n let part = \"\";\n for (const char of word) {\n if (part && chartTextWidth(part + char) > maxPx) {\n result.push(part);\n part = \"\";\n }\n part += char;\n }\n return part;\n };\n for (const word of words) {\n const candidate = current ? `${current} ${word}` : word;\n if (chartTextWidth(candidate) <= maxPx) current = candidate;\n else {\n if (current) result.push(current);\n current = chartTextWidth(word) > maxPx ? breakWord(word) : word;\n }\n }\n if (current) result.push(current);\n if (result.length <= lines) return { lines: result, truncated: false };\n let last = result[lines - 1]!;\n while (last && chartTextWidth(`${last}…`) > maxPx) last = last.slice(0, -1).trimEnd();\n return { lines: [...result.slice(0, lines - 1), `${last}…`], truncated: true };\n};\n\ntype Scale = { domain: [number, number]; ticks: number[]; log: boolean };\n\n/** The value scale of stdlib's bar chart: nice linear ticks including zero, or decades on a log axis. */\nconst valueScale = (values: number[], axis: AxisOptions | undefined, nice: boolean): Scale => {\n const log = axis?.scale === \"log\";\n if (axis?.domain) {\n const [lo, hi] = axis.domain;\n if (!Number.isFinite(lo) || !Number.isFinite(hi) || lo >= hi || (log && lo <= 0))\n throw new RangeError(\"Chart axis domain must have finite increasing bounds (positive for log scales)\");\n // Bars rest on zero, so a linear domain must contain it like every value.\n if ((log ? values : [...values, 0]).some((value) => (!log || value > 0) && (value < lo || value > hi)))\n throw new RangeError(\"Chart axis domain must contain all plotted values and bounds\");\n if (log) return { domain: [lo, hi], ticks: niceLogTicks(lo, hi).ticks.filter((tick) => tick >= lo && tick <= hi), log };\n const step = niceStep(hi - lo, axis.ticks ?? 5);\n const ticks = [lo];\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) ticks.push(value);\n const next = value + step;\n if (next <= value) break;\n value = next;\n }\n return { domain: [lo, hi], ticks: [...ticks, hi], log };\n }\n if (log) {\n const positive = values.filter((value) => value > 0);\n if (!positive.length) return { domain: [1, 10], ticks: [1, 10], log };\n return { ...niceLogTicks(Math.min(...positive), Math.max(...positive)), log };\n }\n const [min, max] = computeDomain([...values, 0]);\n if (!nice) return { domain: [min, max], ticks: [], log };\n return { ...extendDomainToNice(min, max, niceStep(max - min, axis?.ticks ?? 5)), log };\n};\n\nconst project = (scale: Scale, value: number, range: [number, number]) => (scale.log ? mapLog : mapRange)(value, scale.domain, range);\n\ntype Plan = {\n layout: BarChartLayout;\n height: number;\n finite: { item: BarItem; index: number }[];\n header: number;\n};\n\nconst finiteItems = (data: BarItem[]) => data.flatMap((item, index) => (Number.isFinite(item.value) ? [{ item, index }] : []));\nexport const headerHeight = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">) =>\n opts.title || opts.subtitle ? (opts.title ? 14 : 0) + (opts.subtitle ? 6 : 0) + 16 : 0;\nconst valueFormat = (opts: BarChartOptions) => opts.valueFormat ?? opts.yAxis?.format ?? ((value: number) => String(value));\nconst tickFormat = (opts: BarChartOptions) => opts.yAxis?.format ?? ((value: number) => String(value));\n\n/** Columns, when every category label fits below its column on the narrowest chart; rows otherwise. */\nconst columnsFit = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const columns = columnGeometry(opts, finite, width, 280);\n const slotPx = (columns.x1 - columns.x0) / finite.length / units;\n if (finite.some(({ item }) => chartTextWidth(item.label) + GAP_PX > slotPx)) return false;\n // Asked-for values must stay readable too; rows always have room for them.\n return opts.showValues !== true || columns.valuesFit;\n};\n\n/** The renderer's plan for a chart: its layout and logical height at `width`, derived from the data alone. */\nconst barChartPlan = (opts: BarChartOptions, width = 480): Plan => {\n const finite = finiteItems(opts.data ?? []);\n if (opts.layout === \"rows\" && !opts.series)\n return { layout: \"rows\", height: rankedBarLayout(opts, { width, height: 280 }).height, finite, header: headerHeight(opts) };\n if (opts.series) return { layout: \"columns\", height: 280, finite, header: headerHeight(opts) };\n const header = headerHeight(opts);\n if (!finite.length) return { layout: \"columns\", height: 280, finite, header };\n if (opts.layout === \"columns\" || (opts.layout !== \"rows\" && (opts.xAxis?.ordered || columnsFit(opts, finite, width))))\n return { layout: \"columns\", height: 280, finite, header };\n const rows = rowGeometry(opts, finite, width, header);\n return { layout: \"rows\", height: rows.height, finite, header };\n};\n\n/** The layout a bar chart takes and its logical height, so server and browser reserve the same box. */\nexport const barChartLayout = (opts: BarChartOptions, width = 480): { layout: BarChartLayout; height: number } => {\n const { layout, height } = barChartPlan(opts, width);\n return { layout, height };\n};\n\nconst columnGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, height: number) => {\n const units = width / narrow(opts);\n const given =\n typeof opts.padding === \"number\" ? { top: opts.padding, right: opts.padding, bottom: opts.padding, left: opts.padding } : opts.padding;\n const values = finite.map(({ item }) => item.value);\n const scale = valueScale(values, opts.yAxis, true);\n const ticks = tickFormat(opts);\n const longestTick = Math.max(0, ...scale.ticks.map((tick) => chartTextWidth(ticks(tick))));\n const legendRows = opts.colorByBar && opts.legend ? legendLayout(opts, finite, width).rows : 0;\n const header = headerHeight(opts);\n const x0 = given?.left ?? Math.max(40, Math.ceil((longestTick + GAP_PX + 2) * units));\n const x1 = width - (given?.right ?? 16);\n const y0 = header + (given?.top ?? 16) + (opts.yAxis?.label ? 16 : 0);\n const y1 = height - (given?.bottom ?? 22) - (opts.xAxis?.label ? 16 : 0) - legendRows * LEGEND_ROW;\n const slotPx = (x1 - x0) / Math.max(1, finite.length) / units;\n const format = valueFormat(opts);\n const valuesFit = finite.every(({ item }) => chartTextWidth(format(item.value)) + 2 <= slotPx);\n const printValues = opts.showValues ?? valuesFit;\n // A printed negative value hangs below its bar: the plot ends a line above the category labels.\n const plotBottom = y1 - (printValues && values.some((value) => value < 0) ? 14 : 0);\n return { x0, x1, y0, y1, plotBottom, scale, valuesFit, printValues, legendRows };\n};\n\nconst rowGeometry = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number) => {\n const printed = rowGeometryWith(opts, finite, width, header, opts.showValues !== false);\n // Values too wide to leave the bars room stay in the tooltip and table; a value axis replaces them.\n if (printed.showValues && (printed.x1 - printed.x0) / (width / narrow(opts)) < narrow(opts) * MIN_PLOT_SHARE)\n return rowGeometryWith(opts, finite, width, header, false);\n return printed;\n};\n\nconst rowGeometryWith = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number, header: number, showValues: boolean) => {\n const units = width / narrow(opts);\n const maxLabelPx = narrow(opts) * LABEL_SHARE;\n const labels = finite.map(({ item }) => wrapLabel(item.label, maxLabelPx, 2));\n const twoLines = labels.some((label) => label.lines.length > 1);\n const labelPx = Math.min(maxLabelPx, Math.max(0, ...labels.flatMap((label) => label.lines.map((line) => chartTextWidth(line)))));\n const format = valueFormat(opts);\n const positivePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value >= 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const negativePx = showValues\n ? Math.max(0, ...finite.filter(({ item }) => item.value < 0).map(({ item }) => chartTextWidth(format(item.value))))\n : 0;\n const refLabels = (opts.references ?? []).some((ref) => (ref.axis ?? \"y\") === \"y\" && ref.label);\n const titled = !!(opts.xAxis?.label || opts.yAxis?.label || refLabels);\n const top = header + (titled ? 20 : 4);\n const bottom = showValues ? 4 : 24;\n const minimum = twoLines ? ROW_TWO_LINES : ROW_MIN;\n const pitch = Math.min(ROW_MAX, Math.max(minimum, (ROWS_TARGET_HEIGHT - top - bottom) / finite.length));\n const labelEnd = Math.ceil(labelPx * units);\n const x0 = labelEnd + GAP_PX * units + (negativePx ? (negativePx + GAP_PX) * units : 0);\n const x1 = width - (positivePx ? (positivePx + GAP_PX) * units : 8 * units);\n return { labels, labelEnd, x0, x1, top, pitch, twoLines, showValues, height: Math.ceil(top + pitch * finite.length + bottom) };\n};\n\nconst legendLayout = (opts: BarChartOptions, finite: Plan[\"finite\"], width: number) => {\n const units = width / narrow(opts);\n const rows: { label: string; color: number; x: number }[][] = [[]];\n let cursor = 0;\n finite.forEach(({ item }, index) => {\n const itemWidth = (8 + 4 + chartTextWidth(item.label)) * units;\n if (cursor > 0 && cursor + 12 * units + itemWidth > width) {\n rows.push([]);\n cursor = 0;\n }\n const x = cursor ? cursor + 12 * units : 0;\n rows.at(-1)!.push({ label: item.label, color: colorIndex(item, index), x });\n cursor = x + itemWidth;\n });\n return { rows: rows.length, items: rows };\n};\n\nconst colorIndex = (item: BarItem, fallback: 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 const renderHeader = (opts: Pick<BarChartOptions, \"title\" | \"subtitle\">, width: number) => {\n const parts: string[] = [];\n let y = 16;\n if (opts.title) {\n parts.push(`<text class=\"stdlib-chart-title\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.title)}</text>`);\n y += 14;\n }\n if (opts.subtitle)\n parts.push(\n `<text class=\"stdlib-chart-subtitle\" x=\"${fmt(width / 2)}\" y=\"${y}\" text-anchor=\"middle\">${escapeXml(opts.subtitle)}</text>`,\n );\n return parts.join(\"\");\n};\n\nconst datum = (item: BarItem, index: number, anchor: [number, number], format: (value: number) => string) => ({\n index,\n role: \"item\" as const,\n label: item.label,\n anchor,\n values: [{ key: \"value\", value: item.value, formatted: format(item.value) }],\n});\n\nconst renderColumns = (opts: BarChartOptions, plan: Plan, width: number, height: number, inspect: boolean) => {\n const { finite } = plan;\n const units = width / narrow(opts);\n const g = columnGeometry(opts, finite, width, height);\n const ticks = tickFormat(opts);\n const format = valueFormat(opts);\n const showValues = g.printValues;\n const parts: string[] = [renderHeader(opts, width)];\n const y = (value: number) => project(g.scale, value, [g.plotBottom, g.y0]);\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.y0 - 8)}\" text-anchor=\"start\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n for (const tick of g.scale.ticks) {\n const ty = y(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ty)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(g.x0 - GAP_PX * units)}\" y=\"${fmt(ty)}\" dy=\"4\" text-anchor=\"end\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n if (opts.yAxis?.minorTicks && !g.scale.log)\n g.scale.ticks.slice(1).forEach((tick, index) => {\n const previous = g.scale.ticks[index]!;\n for (let step = 1; step < 5; step++) {\n const ty = y(previous + ((tick - previous) * step) / 5);\n parts.push(`<line class=\"stdlib-chart-minor-tick\" x1=\"${fmt(g.x0 - 3)}\" y1=\"${fmt(ty)}\" x2=\"${fmt(g.x0)}\" y2=\"${fmt(ty)}\"/>`);\n }\n });\n const baseline = g.scale.log ? g.plotBottom : y(0);\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(g.x0)}\" y1=\"${fmt(baseline)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(baseline)}\"/>`);\n const slot = (g.x1 - g.x0) / finite.length;\n const barWidth = Math.min(slot * 0.8, COLUMN_MAX);\n // Text keeps its pixel size around its x/y anchor (`.k2b-chart` CSS), and so does a `dy` offset: labels anchored on\n // the plot's bottom edge stay clear of the axis in a box shorter than the drawing.\n const labelY = g.y1;\n // Unordered columns fit every label (see columnsFit); ordered ones label every n-th column that leaves room, from\n // the first column whose label stays inside the drawing.\n const visibleLabels = visibleCategoryLabels(\n finite.map(({ item }) => item.label),\n g.x0,\n slot,\n width,\n units,\n );\n finite.forEach(({ item, index }, position) => {\n const center = g.x0 + slot * (position + 0.5);\n if (visibleLabels.has(position))\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(center)}\" y=\"${fmt(labelY)}\" dy=\"16\" text-anchor=\"middle\">${escapeXml(item.label)}</text>`,\n );\n if (g.scale.log && item.value <= 0) return;\n const valueY = y(item.value);\n const top = Math.min(valueY, baseline);\n const barHeight = Math.abs(valueY - baseline);\n const x = center - barWidth / 2;\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(x)}\" y=\"${fmt(top)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(barHeight)}\"/>`,\n datum(item, index, [center, top + barHeight / 2], format),\n inspect,\n ),\n );\n if (showValues)\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(center)}\" y=\"${fmt(item.value < 0 ? top + barHeight + 13 : top - 4)}\" text-anchor=\"middle\">${escapeXml(format(item.value))}</text>`,\n );\n });\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < g.scale.domain[0] || ref.value > g.scale.domain[1])\n continue;\n const ry = y(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(g.x0)}\" y1=\"${fmt(ry)}\" x2=\"${fmt(g.x1)}\" y2=\"${fmt(ry)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(g.x1 - 4)}\" y=\"${fmt(ry - 4)}\" text-anchor=\"end\">${escapeXml(ref.label)}</text>`,\n );\n }\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${fmt((g.x0 + g.x1) / 2)}\" y=\"${fmt(labelY)}\" dy=\"34\" text-anchor=\"middle\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (g.legendRows) {\n const legend = legendLayout(opts, finite, width);\n const top = height - g.legendRows * LEGEND_ROW;\n parts.push('<g class=\"stdlib-chart-legend\">');\n legend.items.forEach((row, rowIndex) => {\n const middle = top + rowIndex * LEGEND_ROW + LEGEND_ROW / 2;\n for (const entry of row)\n parts.push(\n `<g class=\"stdlib-chart-legend-item stdlib-chart-series-${entry.color}\"><rect class=\"stdlib-chart-legend-swatch\" x=\"${fmt(entry.x)}\" y=\"${fmt(middle - 4)}\" width=\"${fmt(8 * units)}\" height=\"8\" rx=\"1\"/><text class=\"stdlib-chart-legend-label\" x=\"${fmt(entry.x + 12 * units)}\" y=\"${fmt(middle + 4)}\">${escapeXml(entry.label)}</text></g>`,\n );\n });\n parts.push(\"</g>\");\n }\n return parts.join(\"\");\n};\n\nconst renderRows = (opts: BarChartOptions, plan: Plan, width: number, inspect: boolean) => {\n const { finite, header } = plan;\n const units = width / narrow(opts);\n const g = rowGeometry(opts, finite, width, header);\n const format = valueFormat(opts);\n const scale = valueScale(\n finite.map(({ item }) => item.value),\n opts.yAxis,\n !g.showValues,\n );\n const x = (value: number) => project(scale, value, [g.x0, g.x1]);\n const baseline = scale.log ? g.x0 : x(0);\n const plotBottom = g.top + g.pitch * finite.length;\n const thickness = Math.min(BAR_MAX, g.pitch - (g.twoLines ? 14 : 8));\n const parts: string[] = [renderHeader(opts, width)];\n if (opts.xAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"0\" y=\"${fmt(g.top - 8)}\" text-anchor=\"start\">${escapeXml(opts.xAxis.label)}</text>`,\n );\n if (opts.yAxis?.label)\n parts.push(\n `<text class=\"stdlib-chart-axis-label\" x=\"${width}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"end\">${escapeXml(opts.yAxis.label)}</text>`,\n );\n if (!g.showValues) {\n const ticks = tickFormat(opts);\n for (const tick of scale.ticks) {\n const tx = x(tick);\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${fmt(tx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(tx)}\" y2=\"${fmt(plotBottom)}\"/>`);\n parts.push(\n `<text class=\"stdlib-chart-tick-label\" x=\"${fmt(tx)}\" y=\"${fmt(plotBottom + 16)}\" text-anchor=\"middle\">${escapeXml(ticks(tick))}</text>`,\n );\n }\n }\n finite.forEach(({ item, index }, position) => {\n const rowTop = g.top + g.pitch * position;\n const middle = rowTop + g.pitch / 2;\n const label = g.labels[position]!;\n const title = label.truncated ? `<title>${escapeXml(item.label)}</title>` : \"\";\n label.lines.forEach((line, lineIndex) => {\n const lineY = middle + 4 + (label.lines.length > 1 ? (lineIndex === 0 ? -6.5 : 6.5) : 0);\n parts.push(\n `<text class=\"stdlib-chart-tick-label stdlib-chart-category-label\" x=\"${fmt(g.labelEnd)}\" y=\"${fmt(lineY)}\" text-anchor=\"end\">${title}${escapeXml(line)}</text>`,\n );\n });\n if (scale.log && item.value <= 0) return;\n const valueX = x(item.value);\n const left = Math.min(valueX, baseline);\n const barWidth = Math.abs(valueX - baseline);\n const series = opts.colorByBar ? colorIndex(item, position) : 0;\n parts.push(\n chartDatumSvg(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${series}\" x=\"${fmt(left)}\" y=\"${fmt(middle - thickness / 2)}\" width=\"${fmt(barWidth)}\" height=\"${fmt(thickness)}\"/>`,\n datum(item, index, [left + barWidth / 2, middle], format),\n inspect,\n ),\n );\n if (g.showValues) {\n const negative = item.value < 0;\n parts.push(\n `<text class=\"stdlib-chart-bar-value\" x=\"${fmt(valueX + (negative ? -GAP_PX : GAP_PX) * units)}\" y=\"${fmt(middle + 4)}\" text-anchor=\"${negative ? \"end\" : \"start\"}\">${escapeXml(format(item.value))}</text>`,\n );\n }\n });\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${fmt(baseline)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(baseline)}\" y2=\"${fmt(plotBottom)}\"/>`);\n for (const ref of opts.references ?? []) {\n if ((ref.axis ?? \"y\") !== \"y\" || !Number.isFinite(ref.value) || ref.value < scale.domain[0] || ref.value > scale.domain[1]) continue;\n const rx = x(ref.value);\n parts.push(\n `<line class=\"stdlib-chart-reference\"${referenceLineAttributes(ref)} x1=\"${fmt(rx)}\" y1=\"${fmt(g.top)}\" x2=\"${fmt(rx)}\" y2=\"${fmt(plotBottom)}\"/>`,\n );\n if (ref.label)\n parts.push(\n `<text class=\"stdlib-chart-reference-label\"${referenceLineAttributes(ref, true)} x=\"${fmt(rx)}\" y=\"${fmt(g.top - 8)}\" text-anchor=\"middle\">${escapeXml(ref.label)}</text>`,\n );\n }\n return parts.join(\"\");\n};\n\n/**\n * Render a bar chart in which every category has its label. Few short labels stand below vertical columns; otherwise\n * each category becomes a horizontal row with its label left of the bar and its value at the bar's end. Rows grow the\n * drawing instead of dropping labels: use {@link barChartLayout} for its logical height.\n */\nexport const renderBarChartSvg = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }): string => {\n if (opts.series) return renderSeriesBars(opts);\n if (opts.layout === \"rows\") return renderRankedBars(opts);\n const plan = barChartPlan(opts, opts.width);\n // The empty drawing of stdlib's bar chart, written here so bundles leave out stdlib's whole bar renderer.\n if (!plan.finite.length)\n return svgRoot(\n { width: opts.width, height: opts.height, className: opts.className },\n `<text class=\"stdlib-chart-empty-text\" x=\"${fmt(opts.width / 2)}\" y=\"${fmt(opts.height / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">no data</text>`,\n );\n const body =\n plan.layout === \"rows\"\n ? renderRows(opts, plan, opts.width, opts.inspect ?? false)\n : renderColumns(opts, plan, opts.width, opts.height, opts.inspect ?? false);\n return svgRoot({ width: opts.width, height: opts.height, className: opts.className }, body).replace(\n \"<svg \",\n `<svg data-bar-layout=\"${plan.layout}\" `,\n );\n};\n\n/** Stable wrapping legend slots reserve the widest total or category value before interaction. */\nexport function barSeriesLegend(\n entries: { label: string; data: (number | null)[] }[],\n format: (v: number) => string,\n width = 480,\n displayWidth = 296,\n maxHeight = Infinity,\n) {\n const unit = width / displayWidth;\n let x = 0,\n row = 0;\n const items = entries.map((entry) => {\n const finite = entry.data.filter((v): v is number => v !== null && Number.isFinite(v));\n const total = finite.length ? finite.reduce((sum, v) => sum + v, 0) : null;\n const valueWidth = Math.max(\n chartTextWidth(total === null ? \"–\" : format(total)),\n ...entry.data.filter((v): v is number => v !== null && Number.isFinite(v)).map((v) => chartTextWidth(format(v))),\n );\n const labelWidth = Math.max(8, Math.min(96, displayWidth - valueWidth - 32, chartTextWidth(entry.label)));\n const slot = Math.min(width, (14 + labelWidth + 6 + valueWidth + 16) * unit);\n if (x && x + slot > width) {\n x = 0;\n row++;\n }\n const item = { ...entry, total, x, y: row * 20 + 12, labelWidth, valueX: x + slot - 16 * unit };\n x += slot;\n return item;\n });\n const rows = Math.max(1, Math.floor(maxHeight / 20));\n const overflow = row + 1 > rows;\n const visible = overflow ? items.filter((item) => item.y <= (rows - 1) * 20) : items;\n return { items: visible, hidden: items.length - visible.length, height: entries.length ? Math.min(row + 1, rows) * 20 : 0 };\n}\n\n/** Category geometry shared by SVG, server snapshots and browser inspection. */\nexport function seriesBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n const categories = opts.x ?? [];\n const series = opts.series ?? [];\n if (series.some((s) => s.data.length !== categories.length) || (opts.compare && opts.compare.data.length !== categories.length))\n throw new RangeError(\"Bar series must have the same length as x\");\n if (opts.compare && series.length !== 1) throw new RangeError(\"Bar comparison needs exactly one current series\");\n if (opts.normalize && opts.layout !== \"stacked\") throw new RangeError(\"Normalized bars must be stacked\");\n if (opts.layout === \"stacked\" && opts.yAxis?.scale === \"log\") throw new RangeError(\"Stacked bars need a linear axis\");\n if (opts.layout === \"stacked\" && series.some((s) => s.data.some((v) => v !== null && v < 0)))\n throw new RangeError(\"Stacked bars require nonnegative values\");\n const totals = categories.map((_, i) =>\n series.some((s) => Number.isFinite(s.data[i]))\n ? series.reduce((sum, s) => sum + (Number.isFinite(s.data[i]) ? s.data[i]! : 0), 0)\n : null,\n );\n const values =\n opts.layout === \"stacked\"\n ? totals.filter((v): v is number => v !== null)\n : series.flatMap((s) => s.data.filter((v): v is number => v !== null));\n const scale = valueScale(\n opts.normalize ? [0, 1] : [...values, ...(opts.compare?.data.filter((v): v is number => v !== null) ?? [])],\n opts.yAxis,\n true,\n );\n const format = valueFormat(opts);\n const units = size.width / narrow(opts);\n const legend = opts.legend !== false;\n // Keep the legend within one quarter of the frame, leaving room for the plot.\n const entries = [...series, ...(opts.compare ? [opts.compare] : [])];\n const legendLayout = barSeriesLegend(entries, format, size.width, narrow(opts), size.height * 0.25);\n const top = headerHeight(opts) + 8 + (legend ? legendLayout.height : 0) + (opts.yAxis?.label ? 16 : 0);\n const left = Math.max(\n 40,\n ...scale.ticks.map((v) => (chartTextWidth(opts.normalize ? `${Math.round(v * 100)}%` : tickFormat(opts)(v)) + 8) * units),\n );\n const right = size.width - 4;\n const bottom = size.height - 24 - (opts.xAxis?.label ? 18 : 0);\n const slot = (right - left) / Math.max(1, categories.length);\n const y = (value: number) => project(scale, value, [bottom, top]);\n const columns = categories.map((label, index) => {\n const center = left + slot * (index + 0.5);\n let acc = 0;\n const current = series.map((s, seriesIndex) => {\n const raw = s.data[index];\n const value =\n raw === null || !Number.isFinite(raw) || (opts.normalize && totals[index] === 0)\n ? null\n : opts.normalize\n ? raw! / totals[index]!\n : raw!;\n const base = opts.layout === \"stacked\" ? acc : 0;\n if (value !== null && opts.layout === \"stacked\") acc += value;\n return { seriesIndex, raw, value, base };\n });\n return { label, index, center, current, total: totals[index]!, previous: opts.compare?.data[index] };\n });\n const barWidthPx =\n (opts.compare\n ? Math.min(slot * 0.32, 26)\n : Math.min(slot * (opts.layout === \"stacked\" ? 0.56 : 0.8 / Math.max(1, entries.length)), opts.layout === \"stacked\" ? 40 : 22)) /\n units;\n return { ...size, columns, totals, scale, left, right, top, bottom, slot, y, format, units, entries, legend, legendLayout, barWidthPx };\n}\n\nconst renderSeriesBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = seriesBarLayout(opts, opts);\n const parts = [renderHeader(opts, opts.width)];\n const labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const change = new Intl.NumberFormat(opts.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 1, signDisplay: \"exceptZero\" });\n const text = (x: number, y: number, value: string, cls = \"stdlib-chart-tick-label\", anchor = \"start\", extra = \"\") =>\n `<text class=\"${cls}\" x=\"${fmt(x)}\" y=\"${fmt(y)}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n if (g.legend)\n g.legendLayout.items.forEach((entry, i) => {\n const y = headerHeight(opts) + entry.y;\n const x = entry.x;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i < (opts.series?.length ?? 0) ? i % 8 : 0}\" x=\"${x}\" y=\"${y - 8}\" width=\"${8 * g.units}\" height=\"8\" ${i >= (opts.series?.length ?? 0) ? 'style=\"fill:none;stroke:var(--stdlib-chart-c1);\"' : \"\"}/>`,\n );\n if (i >= (opts.series?.length ?? 0))\n parts.push(\n `<path d=\"M ${x} ${y - 4} l ${4 * g.units} -4 M ${x + 2 * g.units} ${y} l ${6 * g.units} -6 M ${x + 6 * g.units} ${y} l ${2 * g.units} -2\" fill=\"none\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>`,\n );\n const label = wrapLabel(entry.label, Math.max(8, entry.labelWidth), 1).lines[0] ?? entry.label;\n const value = escapeXml(entry.total === null ? \"–\" : g.format(entry.total));\n // One text run keeps the value six CSS pixels after its label even when the SVG stretches.\n parts.push(\n `<text x=\"${fmt(x + 14 * g.units)}\" y=\"${fmt(y)}\"><tspan class=\"stdlib-chart-tick-label\">${escapeXml(label)}</tspan><tspan class=\"stdlib-chart-bar-value\" dx=\"6\" data-chart-legend-value data-field=\"${i < (opts.series?.length ?? 0) ? `series:${i}` : \"previous\"}\" data-default=\"${value}\">${value}</tspan></text>`,\n );\n });\n if (g.legend && g.legendLayout.hidden)\n parts.push(text(0, headerHeight(opts) + g.legendLayout.height - 8, `+${g.legendLayout.hidden}`, \"stdlib-chart-tick-label\"));\n if (opts.yAxis?.label) parts.push(text(0, g.top - 6, opts.yAxis.label, \"stdlib-chart-axis-label\"));\n for (const tick of g.scale.ticks) {\n parts.push(`<line class=\"stdlib-chart-grid\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(tick)}\" y2=\"${g.y(tick)}\"/>`);\n parts.push(\n text(g.left - 6 * g.units, g.y(tick) + 4, opts.normalize ? `${Math.round(tick * 100)}%` : tickFormat(opts)(tick), undefined, \"end\"),\n );\n }\n parts.push(`<line class=\"stdlib-chart-axis\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.bottom}\" y2=\"${g.bottom}\"/>`);\n const visibleLabels = visibleCategoryLabels(\n g.columns.map((c) => c.label),\n g.left,\n g.slot,\n opts.width,\n g.units,\n );\n for (const column of g.columns) {\n const fields = column.current.map((v, i) => ({\n key: `series:${i}`,\n value: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : v.raw!,\n formatted: v.raw === null || !Number.isFinite(v.raw) ? \"–\" : g.format(v.raw!),\n }));\n if (opts.compare) {\n const previous = column.previous;\n fields.push({\n key: \"previous\",\n value: previous ?? \"–\",\n formatted: previous === null || !Number.isFinite(previous) ? \"–\" : g.format(previous!),\n });\n const current = column.current[0]?.raw;\n const delta =\n current == null || previous == null || !Number.isFinite(current) || !Number.isFinite(previous) ? null : current - previous;\n fields.push({\n key: \"delta\",\n value: delta ?? \"–\",\n formatted: delta === null || previous === 0 ? \"–\" : change.format(delta / Math.abs(previous!)),\n });\n } else if (opts.layout === \"stacked\") {\n fields.reverse();\n fields.push({ key: \"total\", value: column.total ?? \"–\", formatted: column.total === null ? \"–\" : g.format(column.total) });\n }\n let marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"${column.center - g.slot / 2}\" y=\"${g.top}\" width=\"${g.slot}\" height=\"${Math.max(0, g.bottom - g.top)}\" rx=\"6\"/>`;\n const bar = (value: number, base: number, x: number, width: number, color: number, previous = false) => {\n const y0 = g.y(g.scale.log ? g.scale.domain[0] : base),\n y1 = g.y(base + value);\n const rect = `<rect class=\"stdlib-chart-bar stdlib-chart-series-${color % 8}\" x=\"${fmt(x)}\" y=\"${fmt(Math.min(y0, y1))}\" width=\"${fmt(Math.max(0, width))}\" height=\"${fmt(Math.abs(y0 - y1))}\" rx=\"3\"/>`;\n if (!previous) return rect;\n // Inline strokes avoid document-global SVG pattern IDs, including duplicate charts during SSR.\n const lines: string[] = [];\n for (let d = -Math.abs(y0 - y1); d < width; d += 6) {\n const lo = Math.max(0, -d),\n hi = Math.min(Math.abs(y0 - y1), width - d);\n if (hi > lo)\n lines.push(\n `<line x1=\"${x + d + lo}\" y1=\"${Math.max(y0, y1) - lo}\" x2=\"${x + d + hi}\" y2=\"${Math.max(y0, y1) - hi}\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1.5\"/>`,\n );\n }\n return `<g class=\"k2b-chart-previous\">${rect.replace(\"/>\", ' style=\"fill:var(--stdlib-chart-c1,#3b82f6);fill-opacity:.14\" stroke=\"var(--stdlib-chart-c1,#3b82f6)\" stroke-width=\"1\"/>')}${lines.join(\"\")}</g>`;\n };\n if (opts.compare) {\n const bw = Math.min(g.slot * 0.32, 26);\n const gap = Math.min(1.5, g.slot * 0.08);\n if (column.previous !== null && Number.isFinite(column.previous) && (!g.scale.log || column.previous! > 0))\n marks += bar(column.previous!, 0, column.center - bw - gap, bw, 0, true);\n const value = column.current[0]?.value;\n if (value != null && (!g.scale.log || value > 0)) marks += bar(value, 0, column.center + gap, bw, 0);\n } else\n column.current.forEach((v) => {\n if (v.value === null || (g.scale.log && v.value <= 0)) return;\n const stacked = opts.layout === \"stacked\";\n const bw = stacked ? Math.min(g.slot * 0.56, 40) : Math.min((g.slot * 0.8) / g.entries.length, 22);\n const gap = bw / g.units > 4 ? 2 : 0;\n const x = stacked ? column.center - bw / 2 : column.center - (g.entries.length * bw) / 2 + v.seriesIndex * bw + gap / 2;\n const segment = bar(v.value, v.base, x, stacked ? bw : bw - gap, v.seriesIndex);\n if (\n stacked &&\n v.value > 0 &&\n column.current.some((next) => next.seriesIndex > v.seriesIndex && next.value !== null && next.value > 0)\n ) {\n const fullHeight = Math.abs(g.y(v.base) - g.y(v.base + v.value));\n const gap = Math.min(1.5, fullHeight / 2);\n marks += segment\n .replace(/y=\"[^\"]*\"/, `y=\"${g.y(v.base + v.value) + gap}\"`)\n .replace(/height=\"[^\"]*\"/, `height=\"${fullHeight - gap}\"`);\n } else marks += segment;\n });\n parts.push(\n chartDatumSvg(\n marks,\n { role: \"item\", index: column.index, label: column.label, anchor: [column.center, g.top], values: fields },\n opts.inspect ?? false,\n [\n column.label,\n ...fields.map(\n (field) =>\n `${field.key.startsWith(\"series:\") ? opts.series![Number(field.key.slice(7))]!.label : field.key === \"previous\" ? opts.compare!.label : field.key === \"delta\" ? labels.chartFields({ key: \"delta\" }) : labels.chartFields({ key: \"total\" })}: ${field.formatted}`,\n ),\n ].join(\" · \"),\n ),\n );\n if (visibleLabels.has(column.index))\n parts.push(text(column.center, g.bottom, column.label, \"stdlib-chart-tick-label stdlib-chart-category-label\", \"middle\", 'dy=\"16\"'));\n }\n for (const ref of opts.references ?? [])\n if ((ref.axis ?? \"y\") === \"y\" && Number.isFinite(ref.value) && ref.value >= g.scale.domain[0] && ref.value <= g.scale.domain[1]) {\n parts.push(`<line class=\"stdlib-chart-reference\" x1=\"${g.left}\" x2=\"${g.right}\" y1=\"${g.y(ref.value)}\" y2=\"${g.y(ref.value)}\"/>`);\n if (ref.label) parts.push(text(g.right, g.y(ref.value) - 4, ref.label, \"stdlib-chart-reference-label\", \"end\"));\n }\n if (opts.xAxis?.label) parts.push(text((g.left + g.right) / 2, opts.height - 2, opts.xAxis.label, \"stdlib-chart-axis-label\", \"middle\"));\n return svgRoot(opts, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"columns\" ');\n};\n\nconst visibleCategoryLabels = (labels: string[], left: number, slot: number, width: number, units: number) => {\n const labelPx = Math.max(0, ...labels.map((label) => chartTextWidth(label))) + GAP_PX;\n const step = Math.max(1, Math.ceil(labelPx / (slot / units)));\n const inside = (i: number) => {\n const half = (chartTextWidth(labels[i]!) * units) / 2,\n center = left + slot * (i + 0.5);\n return center - half >= 0 && center + half <= width;\n };\n const first = Math.max(\n 0,\n labels.findIndex((_, i) => inside(i)),\n );\n return new Set(labels.flatMap((_, i) => (i >= first && (i - first) % step === 0 && inside(i) ? [i] : [])));\n};\n\n/** Ranked rows retain original indices. A limit changes the drawing, never the denominator or source data. */\nexport function rankedBarLayout(opts: BarChartOptions, size = { width: 480, height: 280 }) {\n if (opts.limit !== undefined && (!Number.isInteger(opts.limit) || opts.limit < 1))\n throw new RangeError(\"Bar list limit must be a positive integer\");\n if (opts.data?.some((d) => Number.isFinite(d.value) && d.value < 0)) throw new RangeError(\"Ranked bar lists require nonnegative values\");\n const sorted = (opts.data ?? [])\n .map((item, index) => ({ ...item, index }))\n .sort((a, b) => (Number.isFinite(b.value) ? b.value : -Infinity) - (Number.isFinite(a.value) ? a.value : -Infinity));\n const total = sorted.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0);\n const shown = sorted.slice(0, opts.limit),\n rest = sorted.slice(shown.length);\n const top = headerHeight(opts),\n unit = size.width / narrow(opts),\n format = opts.valueFormat ?? opts.yAxis?.format ?? ((v: number) => new Intl.NumberFormat(opts.locale ?? \"en\").format(v)),\n percent = barPercent(opts.locale);\n const shareWidth = opts.share ? 48 * unit : 0;\n const valueWidth = Math.max(20, ...shown.map((d) => chartTextWidth(Number.isFinite(d.value) ? format(d.value) : \"–\"))) * unit;\n const labelWidth = Math.max(8, (size.width - shareWidth - valueWidth - 36 * unit) / unit);\n const max = Math.max(0, ...sorted.map((d) => (Number.isFinite(d.value) ? d.value : 0)));\n const rows = shown.map((d, rank) => ({\n ...d,\n rank: rank + 1,\n y: top + rank * 36,\n width: Number.isFinite(d.value) && max > 0 ? (d.value / max) * size.width : 0,\n share: Number.isFinite(d.value) && total > 0 ? d.value / total : null,\n }));\n return {\n ...size,\n height: Math.max(size.height, top + rows.length * 36 + (rest.length ? 24 : 0)),\n rows,\n total,\n rest,\n restValue: rest.some((d) => Number.isFinite(d.value))\n ? rest.reduce((sum, d) => sum + (Number.isFinite(d.value) ? d.value : 0), 0)\n : null,\n top,\n unit,\n format,\n percent,\n shareWidth,\n labelWidth,\n };\n}\n\nconst renderRankedBars = (opts: BarChartOptions & { width: number; height: number; inspect?: boolean }) => {\n const g = rankedBarLayout(opts, opts),\n labels = chartMessages.resolve([opts.locale ?? \"en\"]).t;\n const parts = [renderHeader(opts, opts.width)];\n const color = opts.tone ? `var(--k2b-flow-${opts.tone}-mark,var(--stdlib-chart-c1,#3b82f6))` : \"var(--stdlib-chart-c1,#3b82f6)\";\n const text = (x: number, y: number, value: string, anchor = \"start\", cls = \"stdlib-chart-tick-label\") =>\n `<text class=\"${cls}\" x=\"${x}\" y=\"${y}\" text-anchor=\"${anchor}\">${escapeXml(value)}</text>`;\n for (const row of g.rows) {\n const value = Number.isFinite(row.value) ? row.value : null,\n written = value === null ? \"–\" : g.format(value);\n const share = row.share === null ? \"–\" : g.percent.format(row.share);\n const label = wrapLabel(row.label, (g.labelWidth * 11) / 13, 1).lines[0] ?? row.label;\n const marks = `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"0\" y=\"${row.y}\" width=\"${g.width}\" height=\"32\" rx=\"6\"/><rect x=\"0\" y=\"${row.y}\" width=\"${row.width}\" height=\"32\" rx=\"6\" style=\"fill:${color};fill-opacity:.16;pointer-events:none\"/>${text(10 * g.unit, row.y + 20, label)}${text(g.width - 10 * g.unit - g.shareWidth, row.y + 20, written, \"end\", \"stdlib-chart-bar-value\")}${opts.share ? text(g.width - 10 * g.unit, row.y + 20, share, \"end\") : \"\"}`;\n parts.push(\n chartDatumSvg(\n marks,\n {\n role: \"item\",\n index: row.index,\n label: row.label,\n anchor: [g.width / 2, row.y],\n values: [\n { key: \"value\", value: value ?? \"–\", formatted: written },\n { key: \"percent\", value: row.share === null ? \"–\" : row.share * 100, formatted: share },\n { key: \"rank\", value: row.rank },\n ],\n },\n opts.inspect ?? false,\n `${row.label} · ${written} · ${share} · ${labels.chartFields({ key: \"rank\" })}: ${row.rank}`,\n ),\n );\n }\n if (g.rest.length)\n parts.push(\n text(\n 10 * g.unit,\n g.top + g.rows.length * 36 + 16,\n `${labels.chartBarMore({ n: g.rest.length })} · ${g.restValue === null ? \"–\" : g.format(g.restValue)}`,\n ),\n );\n return svgRoot({ ...opts, height: g.height, className: [opts.className, \"k2b-chart-ranked\"].filter(Boolean).join(\" \") }, parts.join(\"\"))\n .replace(\"</style>\", \".k2b-chart-ranked :is(.stdlib-chart-tick-label,.stdlib-chart-bar-value){font-size:13px}</style>\")\n .replace(\"<svg \", '<svg data-bar-layout=\"rows\" ');\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -15,9 +15,13 @@ const describe = (container, id, on) => {
|
|
|
15
15
|
const rowLayout = container => Boolean(container?.querySelector('svg[data-bar-layout="rows"]'));
|
|
16
16
|
const categoryRoles = {
|
|
17
17
|
bar: "item",
|
|
18
|
+
waterfall: "item",
|
|
18
19
|
histogram: "bin",
|
|
19
20
|
boxplot: "box"
|
|
20
21
|
};
|
|
22
|
+
/** An element's box on screen; one name for the many reads below keeps the framework-free entry small. */
|
|
23
|
+
const box = element => element.getBoundingClientRect();
|
|
24
|
+
|
|
21
25
|
/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
|
|
22
26
|
export function createChartInspector(options) {
|
|
23
27
|
const source = Symbol("chart cursor");
|
|
@@ -81,7 +85,7 @@ export function createChartInspector(options) {
|
|
|
81
85
|
x: matrix.a * x + matrix.c * y + matrix.e,
|
|
82
86
|
y: matrix.b * x + matrix.d * y + matrix.f
|
|
83
87
|
};
|
|
84
|
-
const rect = entry.element
|
|
88
|
+
const rect = box(entry.element);
|
|
85
89
|
return {
|
|
86
90
|
x: rect.x + rect.width / 2,
|
|
87
91
|
y: rect.y + rect.height / 2
|
|
@@ -112,7 +116,8 @@ export function createChartInspector(options) {
|
|
|
112
116
|
};
|
|
113
117
|
const rawX = entry => entry.datum.values.find(field => field.key === "x")?.value;
|
|
114
118
|
const category = entry => options.kind() === "area" ? entry.datum.index : rawX(entry);
|
|
115
|
-
const
|
|
119
|
+
const groupedSeriesChart = () => options.kind() === "line" || options.kind() === "area";
|
|
120
|
+
const seriesChart = () => groupedSeriesChart() || options.kind() === "sparkline";
|
|
116
121
|
const updateLegend = items => {
|
|
117
122
|
const root = options.legend?.() ?? options.container();
|
|
118
123
|
for (const node of root?.querySelectorAll("[data-chart-legend-value]") ?? []) {
|
|
@@ -120,8 +125,8 @@ export function createChartInspector(options) {
|
|
|
120
125
|
node.textContent = node.getAttribute("data-default") ?? "";
|
|
121
126
|
continue;
|
|
122
127
|
}
|
|
123
|
-
const series =
|
|
124
|
-
const field = items.find(item => item.datum.seriesIndex === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
|
|
128
|
+
const series = node.dataset.seriesIndex;
|
|
129
|
+
const field = items.find(item => item.datum.seriesIndex?.toString() === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
|
|
125
130
|
node.textContent = field ? field.formatted ?? (typeof field.value === "number" ? new Intl.NumberFormat(options.locale?.() ?? "en", {
|
|
126
131
|
maximumFractionDigits: 6
|
|
127
132
|
}).format(field.value) : field.value) : "—";
|
|
@@ -135,6 +140,8 @@ export function createChartInspector(options) {
|
|
|
135
140
|
}
|
|
136
141
|
highlighted = [];
|
|
137
142
|
};
|
|
143
|
+
/** The open tooltip came from keyboard focus or keys, not from a pointer: it follows its mark when the page scrolls. */
|
|
144
|
+
let byKeyboard = false;
|
|
138
145
|
const close = (broadcast = true, cancelPending = true) => {
|
|
139
146
|
const state = linkedCursor?.read();
|
|
140
147
|
if (broadcast && state && state.source !== source) return;
|
|
@@ -175,20 +182,23 @@ export function createChartInspector(options) {
|
|
|
175
182
|
byElement.clear();
|
|
176
183
|
receive(options.cursor?.()?.read() ?? null);
|
|
177
184
|
};
|
|
178
|
-
const show = (entry, broadcast = true) => {
|
|
185
|
+
const show = (entry, broadcast = true, hover = false) => {
|
|
179
186
|
const x = rawX(entry);
|
|
180
187
|
if (broadcast && options.kind() === "line" && typeof x === "number") options.cursor?.()?.move(source, x);
|
|
181
188
|
const tooltip = options.tooltip(),
|
|
182
189
|
anchor = options.anchor(),
|
|
183
190
|
container = options.container();
|
|
184
191
|
if (!tooltip || !anchor || !container || !options.enabled()) return;
|
|
185
|
-
if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open"))
|
|
192
|
+
if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) {
|
|
193
|
+
for (const item of highlighted) item.element.setAttribute("data-inspected", hover ? "hover" : "true");
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
186
196
|
clearHighlight();
|
|
187
197
|
active = entry;
|
|
188
|
-
highlighted =
|
|
198
|
+
highlighted = groupedSeriesChart() ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
|
|
189
199
|
for (const item of highlighted) {
|
|
190
200
|
item.element.style.setProperty("--k2b-chart-inspection-color", highlightColor(item));
|
|
191
|
-
item.element.setAttribute("data-inspected", "true");
|
|
201
|
+
item.element.setAttribute("data-inspected", hover ? "hover" : "true");
|
|
192
202
|
}
|
|
193
203
|
updateLegend(highlighted);
|
|
194
204
|
const document = tooltip.ownerDocument;
|
|
@@ -222,27 +232,23 @@ export function createChartInspector(options) {
|
|
|
222
232
|
const commonTitle = sharedTitle ?? (contents.every(({
|
|
223
233
|
content
|
|
224
234
|
}) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);
|
|
225
|
-
|
|
235
|
+
const appendTitle = text => {
|
|
226
236
|
const title = document.createElement("strong");
|
|
227
237
|
title.className = "k2b-chart__tooltip-title";
|
|
228
|
-
title.textContent =
|
|
238
|
+
title.textContent = text;
|
|
229
239
|
tooltip.append(title);
|
|
230
|
-
}
|
|
240
|
+
};
|
|
241
|
+
if (commonTitle) appendTitle(commonTitle);
|
|
231
242
|
for (const {
|
|
232
243
|
item,
|
|
233
244
|
content,
|
|
234
245
|
missing
|
|
235
246
|
} of contents) {
|
|
236
|
-
if (content.title && !commonTitle)
|
|
237
|
-
const title = document.createElement("strong");
|
|
238
|
-
title.className = "k2b-chart__tooltip-title";
|
|
239
|
-
title.textContent = content.title;
|
|
240
|
-
tooltip.append(title);
|
|
241
|
-
}
|
|
247
|
+
if (content.title && !commonTitle) appendTitle(content.title);
|
|
242
248
|
for (const row of content.rows) {
|
|
243
249
|
const line = document.createElement("span");
|
|
244
250
|
line.className = "k2b-chart__tooltip-row";
|
|
245
|
-
if (
|
|
251
|
+
if (groupedSeriesChart()) {
|
|
246
252
|
const swatch = document.createElement("i");
|
|
247
253
|
swatch.setAttribute("aria-hidden", "true");
|
|
248
254
|
const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`);
|
|
@@ -271,7 +277,7 @@ export function createChartInspector(options) {
|
|
|
271
277
|
tooltip.append(line);
|
|
272
278
|
}
|
|
273
279
|
}
|
|
274
|
-
const rect = container
|
|
280
|
+
const rect = box(container),
|
|
275
281
|
point = screenPoint(entry);
|
|
276
282
|
const slot = categoryBands().find(candidate => candidate.entry === entry);
|
|
277
283
|
// A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.
|
|
@@ -308,10 +314,10 @@ export function createChartInspector(options) {
|
|
|
308
314
|
const rows = rowLayout(container);
|
|
309
315
|
const slots = records().filter(entry => entry.datum.role === role).map(entry => ({
|
|
310
316
|
entry,
|
|
311
|
-
rect: entry.element
|
|
317
|
+
rect: box(entry.element)
|
|
312
318
|
}));
|
|
313
319
|
if (!slots.length) return [];
|
|
314
|
-
const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => node
|
|
320
|
+
const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => box(node));
|
|
315
321
|
// The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose
|
|
316
322
|
// only guide is one vertical baseline, still get a band from the baseline to the longest bar.
|
|
317
323
|
const spans = [...guides, ...slots.map(slot => slot.rect)];
|
|
@@ -344,14 +350,14 @@ export function createChartInspector(options) {
|
|
|
344
350
|
const updatePlotBounds = () => {
|
|
345
351
|
const container = options.container();
|
|
346
352
|
if (!container) return;
|
|
347
|
-
const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(
|
|
353
|
+
const axes = Array.from(container.querySelectorAll(".stdlib-chart-axis")).map(box);
|
|
348
354
|
if (axes.length < 2) return;
|
|
349
355
|
const left = Math.min(...axes.map(a => a.left)),
|
|
350
356
|
right = Math.max(...axes.map(a => a.right));
|
|
351
357
|
const top = Math.min(...axes.map(a => a.top)),
|
|
352
358
|
bottom = Math.max(...axes.map(a => a.bottom));
|
|
353
359
|
if (right <= left || bottom <= top) return;
|
|
354
|
-
const rect = container
|
|
360
|
+
const rect = box(container);
|
|
355
361
|
for (const [name, value] of Object.entries({
|
|
356
362
|
left: left - rect.left,
|
|
357
363
|
right: rect.right - right,
|
|
@@ -460,7 +466,7 @@ export function createChartInspector(options) {
|
|
|
460
466
|
};
|
|
461
467
|
const move = event => {
|
|
462
468
|
if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
|
|
463
|
-
if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) >
|
|
469
|
+
if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;
|
|
464
470
|
if (!options.enabled() || pinned || event.pointerType === "touch" || event.buttons) return;
|
|
465
471
|
pending = {
|
|
466
472
|
x: event.clientX,
|
|
@@ -475,11 +481,12 @@ export function createChartInspector(options) {
|
|
|
475
481
|
if (!sample) return;
|
|
476
482
|
const entry = nearest(sample.x, sample.y, sample.target);
|
|
477
483
|
if (entry) {
|
|
478
|
-
|
|
484
|
+
byKeyboard = false;
|
|
485
|
+
show(entry, true, true);
|
|
479
486
|
if (seriesChart()) {
|
|
480
487
|
const container = options.container();
|
|
481
488
|
container?.setAttribute("data-cursor-source", "true");
|
|
482
|
-
container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - container
|
|
489
|
+
container?.style.setProperty("--k2b-chart-inspection-y", `${sample.y - box(container).top}px`);
|
|
483
490
|
}
|
|
484
491
|
} else close();
|
|
485
492
|
});
|
|
@@ -487,6 +494,7 @@ export function createChartInspector(options) {
|
|
|
487
494
|
let pointerFocusing = false;
|
|
488
495
|
const down = event => {
|
|
489
496
|
pointerFocusing = true;
|
|
497
|
+
byKeyboard = false;
|
|
490
498
|
pointerStart = {
|
|
491
499
|
x: event.clientX,
|
|
492
500
|
y: event.clientY
|
|
@@ -517,6 +525,7 @@ export function createChartInspector(options) {
|
|
|
517
525
|
pointerFocusing = false;
|
|
518
526
|
return;
|
|
519
527
|
}
|
|
528
|
+
byKeyboard = !pointerFocusing;
|
|
520
529
|
const nodes = visibleRecords();
|
|
521
530
|
const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
|
|
522
531
|
if (first) show(first);
|
|
@@ -549,7 +558,7 @@ export function createChartInspector(options) {
|
|
|
549
558
|
if (!["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return false;
|
|
550
559
|
let nodes = visibleRecords();
|
|
551
560
|
if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);
|
|
552
|
-
if (
|
|
561
|
+
if (groupedSeriesChart()) {
|
|
553
562
|
const seen = new Set();
|
|
554
563
|
nodes = nodes.filter(entry => {
|
|
555
564
|
const x = category(entry);
|
|
@@ -561,7 +570,7 @@ export function createChartInspector(options) {
|
|
|
561
570
|
if (!nodes.length) return false;
|
|
562
571
|
event.preventDefault();
|
|
563
572
|
pinned = false;
|
|
564
|
-
let index = active ?
|
|
573
|
+
let index = active ? groupedSeriesChart() ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
|
|
565
574
|
if (event.key === "Home") index = 0;else if (event.key === "End") index = nodes.length - 1;else if (active?.datum.grid && ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)) {
|
|
566
575
|
const [x, y] = active.datum.grid;
|
|
567
576
|
const dx = event.key === "ArrowLeft" ? -1 : event.key === "ArrowRight" ? 1 : 0;
|
|
@@ -572,6 +581,7 @@ export function createChartInspector(options) {
|
|
|
572
581
|
const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))];
|
|
573
582
|
options.nav?.()?.reveal?.(next.element);
|
|
574
583
|
show(next);
|
|
584
|
+
byKeyboard = true;
|
|
575
585
|
return true;
|
|
576
586
|
};
|
|
577
587
|
return {
|
|
@@ -585,6 +595,17 @@ export function createChartInspector(options) {
|
|
|
585
595
|
click,
|
|
586
596
|
focus,
|
|
587
597
|
key,
|
|
598
|
+
/**
|
|
599
|
+
* The page scrolled: a keyboard tooltip, or one a linked chart keeps open, follows its mark; others close. A
|
|
600
|
+
* focused chart scrolled into view would otherwise close the tooltip its focus just opened.
|
|
601
|
+
*/
|
|
602
|
+
scroll: () => {
|
|
603
|
+
if (!byKeyboard) close();
|
|
604
|
+
// Still open (keyboard, or a linked chart keeps it): show the same mark again at its new place.
|
|
605
|
+
const entry = active;
|
|
606
|
+
active = undefined;
|
|
607
|
+
if (entry) show(entry, false);
|
|
608
|
+
},
|
|
588
609
|
close: () => close(),
|
|
589
610
|
invalidate,
|
|
590
611
|
leave: () => {
|
|
@@ -601,7 +622,7 @@ export function closeChartInspectionOnOutside(options) {
|
|
|
601
622
|
const scroll = event => {
|
|
602
623
|
if (event.target === options.container() && options.keepScroll?.()) return;
|
|
603
624
|
if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
|
|
604
|
-
options.close();
|
|
625
|
+
(options.scroll ?? options.close)();
|
|
605
626
|
};
|
|
606
627
|
window.addEventListener("pointerdown", outside);
|
|
607
628
|
window.addEventListener("scroll", scroll, true);
|