@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
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One entry of a command list: the slash menu of `MarkdownEditor` and `CommandMenu` read the same entries, so a
|
|
3
|
+
* composer's `/`, its "+" button, and a chip offer one list.
|
|
4
|
+
*/
|
|
5
|
+
/** Where a slash at `start` stands in `value`: the text before it and whether only whitespace precedes it, overall or on its line. */
|
|
6
|
+
export const commandPlace = (value, start, end) => {
|
|
7
|
+
const before = value.slice(0, start);
|
|
8
|
+
return {
|
|
9
|
+
text: before + value.slice(end),
|
|
10
|
+
before,
|
|
11
|
+
atStart: before.trim() === "",
|
|
12
|
+
lineStart: before.slice(before.lastIndexOf("\n") + 1).trim() === ""
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Where a command list is and what it acts on: one context for the entries of every level and for `onSelect`. In
|
|
18
|
+
* `SlashCommands` the text is the editor's, without the typed `/query`; in `CommandMenu` it is the text of its `target`
|
|
19
|
+
* field, or empty without one.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The entries of a list: a list, or a function of the context that decides which entries there are in this place, at
|
|
24
|
+
* once or as a promise, such as templates only at the start of the text or people from a server search. Either way the
|
|
25
|
+
* list filters them by the query; give server matches the words they matched on as `keywords`.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** A further list in the same place, as deep as needed. Escape, or Backspace on an empty query, goes back. */
|
|
29
|
+
|
|
30
|
+
const marks = /\p{M}/gu;
|
|
31
|
+
const fold = text => text.normalize("NFD").replace(marks, "").toLowerCase().replace(/ß/g, "ss");
|
|
32
|
+
// German writes ä as ae where umlauts are missing, so "zustaendig" finds "zuständig" as well as "zustandig" does.
|
|
33
|
+
const spellOut = text => text.normalize("NFC").toLowerCase().replace(/ä/g, "ae").replace(/ö/g, "oe").replace(/ü/g, "ue");
|
|
34
|
+
|
|
35
|
+
// Built on every search, not cached by entry: an application may change an entry in place, such as its label.
|
|
36
|
+
const haystackOf = item => {
|
|
37
|
+
const text = [item.label, item.description, item.hint?.replace(/^\//, ""), ...(item.keywords ?? [])].filter(Boolean).join(" ");
|
|
38
|
+
return `${fold(text)} ${fold(spellOut(text))}`;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The entries whose label, hint, or keywords contain every word of the query, ignoring case and accents, in their
|
|
43
|
+
* order. A blank query keeps all.
|
|
44
|
+
*/
|
|
45
|
+
export const filterCommandItems = (items, query) => {
|
|
46
|
+
const words = fold(query).trim().split(/\s+/).filter(Boolean);
|
|
47
|
+
if (words.length === 0) return items;
|
|
48
|
+
return items.filter(item => {
|
|
49
|
+
const haystack = haystackOf(item);
|
|
50
|
+
return words.every(word => haystack.includes(word));
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** The entries of a source in a context, filtered by its query; a promise resolves to the filtered entries. */
|
|
55
|
+
export const resolveCommandSource = (source, context) => {
|
|
56
|
+
const result = typeof source === "function" ? source(context) : source;
|
|
57
|
+
return result instanceof Promise ? result.then(items => filterCommandItems(items, context.query)) : filterCommandItems(result, context.query);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/** Groups in the order they first appear; `index` is the entry's place in the order the list shows. */
|
|
61
|
+
export const groupCommandItems = items => {
|
|
62
|
+
const groups = [];
|
|
63
|
+
const byLabel = new Map();
|
|
64
|
+
for (const item of items) {
|
|
65
|
+
let group = byLabel.get(item.group);
|
|
66
|
+
if (!group) {
|
|
67
|
+
group = {
|
|
68
|
+
label: item.group,
|
|
69
|
+
entries: []
|
|
70
|
+
};
|
|
71
|
+
byLabel.set(item.group, group);
|
|
72
|
+
groups.push(group);
|
|
73
|
+
}
|
|
74
|
+
group.entries.push({
|
|
75
|
+
item,
|
|
76
|
+
index: 0
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
let index = 0;
|
|
80
|
+
for (const group of groups) for (const entry of group.entries) entry.index = index++;
|
|
81
|
+
return groups;
|
|
82
|
+
};
|
|
83
|
+
export const commandKey = item => item.id ?? `${item.group ?? ""}\u0000${item.label}`;
|
|
84
|
+
//# sourceMappingURL=command-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/command-items.ts"],"sourcesContent":["import type { JSX } from \"solid-js\";\n\n/**\n * One entry of a command list: the slash menu of `MarkdownEditor` and `CommandMenu` read the same entries, so a\n * composer's `/`, its \"+\" button, and a chip offer one list.\n */\n/** Where a slash at `start` stands in `value`: the text before it and whether only whitespace precedes it, overall or on its line. */\nexport const commandPlace = (value: string, start: number, end: number) => {\n const before = value.slice(0, start);\n return {\n text: before + value.slice(end),\n before,\n atStart: before.trim() === \"\",\n lineStart: before.slice(before.lastIndexOf(\"\\n\") + 1).trim() === \"\",\n };\n};\n\nexport type CommandItem = {\n label: string;\n /** Heading above the entry. Entries of one group stand together, in the order the groups first appear. */\n group?: string;\n /** One quiet line of what the entry does, after the label on the same line, such as \"Preis aus dem Text prüfen\". */\n description?: string;\n /** Quiet text at the end of the row, such as what a person can type: `/telefonat`. It is searched, too. */\n hint?: string;\n /** Tabler icon class, such as `ti ti-phone`. */\n icon?: string;\n /**\n * An image at icon size in place of the icon, such as a service's logo: a URL, or one for each theme when the logo\n * needs a light variant on dark surfaces. It is decorative; the label names the entry.\n */\n image?: string | { light: string; dark: string };\n /**\n * Renders the start of the row in place of the icon, such as an avatar or a tag's color. A function, so each row\n * gets its own element.\n */\n leading?: () => JSX.Element;\n /** Further words that find the entry, such as \"anruf\" for \"Phone call\". */\n keywords?: readonly string[];\n /** Unavailable now: the entry stays in the list, greyed, with this one-line reason, and cannot be chosen. */\n disabled?: string;\n /** Stable key, when two entries share group and label. */\n id?: string;\n} & (\n | {\n /**\n * Runs when the entry is chosen, with the text it acts on. In the editor, the typed `/query` has left the text\n * first. A returned promise keeps the list open with the entry busy; any other result counts as done; a rejection shows its message on the entry,\n * which can then run again, and Escape aborts `context.signal`.\n */\n onSelect: (context: CommandContext) => unknown;\n text?: never;\n next?: never;\n }\n | {\n /** Text that takes the place of the typed `/query`; `CommandMenu` hands it to `onInsert`. */\n text: string;\n onSelect?: never;\n next?: never;\n }\n | {\n /** A second list in the same popover, such as people to assign. */\n next: CommandStep;\n onSelect?: never;\n text?: never;\n }\n);\n\n/**\n * Where a command list is and what it acts on: one context for the entries of every level and for `onSelect`. In\n * `SlashCommands` the text is the editor's, without the typed `/query`; in `CommandMenu` it is the text of its `target`\n * field, or empty without one.\n */\nexport type CommandContext = {\n /** What the person typed after `/`, or into the menu's search field. */\n query: string;\n /** The whole text without the typed `/query`. */\n text: string;\n /** The text before the slash, or before the caret in `CommandMenu`. */\n before: string;\n /** Whether the slash is the first character of the text, leading whitespace aside. */\n atStart: boolean;\n /** Whether the slash starts a line, leading whitespace aside. */\n lineStart: boolean;\n /** The selection in `text`; `start === end` is the caret. */\n selection: { start: number; end: number };\n /** The entries chosen so far on the way to this level, such as `[assign, person]` on the third. */\n path: readonly CommandItem[];\n /**\n * Puts text at the caret in place of the selection, as typing would, so undo keeps working. Without a `target`,\n * `CommandMenu` hands it to `onInsert`. Meant for `onSelect`.\n */\n insert: (text: string) => void;\n /**\n * Reports what a command did, such as \"Valentin Brandt zugewiesen\": after the command finished, the list gives way to\n * a short confirmation in the same place. Meant for `onSelect`; an entry source has its own loading and failure.\n */\n success: (message: string) => void;\n /**\n * Reports why a command could not do it, such as \"Keine Artikelnummer im Text\"; it stays until the person types on\n * or presses Escape. A command that throws or rejects reports its error itself, with a way to try again.\n */\n error: (message: string) => void;\n /**\n * Aborts when the result is no longer wanted: a new query replaces a pending list, or the person closes the list\n * with Escape before a command's promise settled.\n */\n signal: AbortSignal;\n};\n\n/**\n * The entries of a list: a list, or a function of the context that decides which entries there are in this place, at\n * once or as a promise, such as templates only at the start of the text or people from a server search. Either way the\n * list filters them by the query; give server matches the words they matched on as `keywords`.\n */\nexport type CommandSource =\n | readonly CommandItem[]\n | ((context: CommandContext) => readonly CommandItem[] | Promise<readonly CommandItem[]>);\n\n/** A further list in the same place, as deep as needed. Escape, or Backspace on an empty query, goes back. */\nexport type CommandStep = {\n /** Names the list and is the search hint, such as \"Search person\". */\n label: string;\n items: CommandSource;\n};\n\nexport type CommandGroup = { label?: string; entries: { item: CommandItem; index: number }[] };\n\nconst marks = /\\p{M}/gu;\nconst fold = (text: string) => text.normalize(\"NFD\").replace(marks, \"\").toLowerCase().replace(/ß/g, \"ss\");\n// German writes ä as ae where umlauts are missing, so \"zustaendig\" finds \"zuständig\" as well as \"zustandig\" does.\nconst spellOut = (text: string) => text.normalize(\"NFC\").toLowerCase().replace(/ä/g, \"ae\").replace(/ö/g, \"oe\").replace(/ü/g, \"ue\");\n\n// Built on every search, not cached by entry: an application may change an entry in place, such as its label.\nconst haystackOf = (item: CommandItem): string => {\n const text = [item.label, item.description, item.hint?.replace(/^\\//, \"\"), ...(item.keywords ?? [])].filter(Boolean).join(\" \");\n return `${fold(text)} ${fold(spellOut(text))}`;\n};\n\n/**\n * The entries whose label, hint, or keywords contain every word of the query, ignoring case and accents, in their\n * order. A blank query keeps all.\n */\nexport const filterCommandItems = (items: readonly CommandItem[], query: string): readonly CommandItem[] => {\n const words = fold(query).trim().split(/\\s+/).filter(Boolean);\n if (words.length === 0) return items;\n return items.filter((item) => {\n const haystack = haystackOf(item);\n return words.every((word) => haystack.includes(word));\n });\n};\n\n/** The entries of a source in a context, filtered by its query; a promise resolves to the filtered entries. */\nexport const resolveCommandSource = (\n source: CommandSource,\n context: CommandContext,\n): readonly CommandItem[] | Promise<readonly CommandItem[]> => {\n const result = typeof source === \"function\" ? source(context) : source;\n return result instanceof Promise\n ? result.then((items) => filterCommandItems(items, context.query))\n : filterCommandItems(result, context.query);\n};\n\n/** Groups in the order they first appear; `index` is the entry's place in the order the list shows. */\nexport const groupCommandItems = (items: readonly CommandItem[]): CommandGroup[] => {\n const groups: CommandGroup[] = [];\n const byLabel = new Map<string | undefined, CommandGroup>();\n for (const item of items) {\n let group = byLabel.get(item.group);\n if (!group) {\n group = { label: item.group, entries: [] };\n byLabel.set(item.group, group);\n groups.push(group);\n }\n group.entries.push({ item, index: 0 });\n }\n let index = 0;\n for (const group of groups) for (const entry of group.entries) entry.index = index++;\n return groups;\n};\n\nexport const commandKey = (item: CommandItem): string => item.id ?? `${item.group ?? \"\"}\\u0000${item.label}`;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { i18n } from "@k2b/stdlib";
|
|
2
|
+
import { useLocale } from "../intl/locale";
|
|
3
|
+
const commandMessages = i18n.define({
|
|
4
|
+
baseLocale: "en",
|
|
5
|
+
messages: {
|
|
6
|
+
en: {
|
|
7
|
+
commands: "Commands",
|
|
8
|
+
back: ({
|
|
9
|
+
label
|
|
10
|
+
}) => `Back from ${label}`,
|
|
11
|
+
running: ({
|
|
12
|
+
label
|
|
13
|
+
}) => `${label} is running`,
|
|
14
|
+
failed: "That did not work.",
|
|
15
|
+
loading: "Loading",
|
|
16
|
+
loadingChoice: "Loading, then the first match",
|
|
17
|
+
loadFailed: "The entries could not load.",
|
|
18
|
+
done: "Done."
|
|
19
|
+
},
|
|
20
|
+
de: {
|
|
21
|
+
commands: "Befehle",
|
|
22
|
+
back: ({
|
|
23
|
+
label
|
|
24
|
+
}) => `Zurück aus ${label}`,
|
|
25
|
+
running: ({
|
|
26
|
+
label
|
|
27
|
+
}) => `${label} läuft`,
|
|
28
|
+
failed: "Das hat nicht geklappt.",
|
|
29
|
+
loading: "Wird geladen",
|
|
30
|
+
loadingChoice: "Lädt, dann der erste Treffer",
|
|
31
|
+
loadFailed: "Die Einträge konnten nicht geladen werden.",
|
|
32
|
+
done: "Erledigt."
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
/** Resolved from the inherited render locale. */
|
|
37
|
+
export const useCommandMessages = () => {
|
|
38
|
+
const locale = useLocale();
|
|
39
|
+
return () => commandMessages.resolve([locale()]).t;
|
|
40
|
+
};
|
|
41
|
+
export const checkCommandMessages = () => commandMessages.check();
|
|
42
|
+
//# sourceMappingURL=command-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/command-messages.ts"],"sourcesContent":["import { i18n } from \"@k2b/stdlib\";\nimport { useLocale } from \"../intl/locale\";\n\nconst commandMessages = i18n.define({\n baseLocale: \"en\",\n messages: {\n en: {\n commands: \"Commands\",\n back: ({ label }: { label: string }) => `Back from ${label}`,\n running: ({ label }: { label: string }) => `${label} is running`,\n failed: \"That did not work.\",\n loading: \"Loading\",\n loadingChoice: \"Loading, then the first match\",\n loadFailed: \"The entries could not load.\",\n done: \"Done.\",\n },\n de: {\n commands: \"Befehle\",\n back: ({ label }: { label: string }) => `Zurück aus ${label}`,\n running: ({ label }: { label: string }) => `${label} läuft`,\n failed: \"Das hat nicht geklappt.\",\n loading: \"Wird geladen\",\n loadingChoice: \"Lädt, dann der erste Treffer\",\n loadFailed: \"Die Einträge konnten nicht geladen werden.\",\n done: \"Erledigt.\",\n },\n },\n});\n\nexport type CommandMessages = ReturnType<(typeof commandMessages)[\"resolve\"]>[\"t\"];\n\n/** Resolved from the inherited render locale. */\nexport const useCommandMessages = (): (() => CommandMessages) => {\n const locale = useLocale();\n return () => commandMessages.resolve([locale()]).t;\n};\n\nexport const checkCommandMessages = () => commandMessages.check();\n"],"mappings":"AAAA,SAAS,IAAI,QAAQ,aAAa;AAClC,SAAS,SAAS,QAAQ,gBAAgB;AAE1C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;EAClC,UAAU,EAAE,IAAI;EAChB,QAAQ,EAAE;IACR,EAAE,EAAE;MACF,QAAQ,EAAE,UAAU;MACpB,IAAI,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,aAAa,KAAK,EAAE;MAC5D,OAAO,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,aAAa;MAChE,MAAM,EAAE,oBAAoB;MAC5B,OAAO,EAAE,SAAS;MAClB,aAAa,EAAE,+BAA+B;MAC9C,UAAU,EAAE,6BAA6B;MACzC,IAAI,EAAE;IACR,CAAC;IACD,EAAE,EAAE;MACF,QAAQ,EAAE,SAAS;MACnB,IAAI,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,cAAc,KAAK,EAAE;MAC7D,OAAO,EAAE,CAAC;QAAE;MAAyB,CAAC,KAAK,GAAG,KAAK,QAAQ;MAC3D,MAAM,EAAE,yBAAyB;MACjC,OAAO,EAAE,cAAc;MACvB,aAAa,EAAE,8BAA8B;MAC7C,UAAU,EAAE,4CAA4C;MACxD,IAAI,EAAE;IACR;EACF;AACF,CAAC,CAAC;AAIF;AACA,OAAO,MAAM,kBAAkB,GAAG,MAA+B;EAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,OAAO,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED,OAAO,MAAM,oBAAoB,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonAlign, ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type { DragPayload, DragSourceProps, DropTargetProps } from \"./DragAndDrop\";\nexport { activeDrag, DragSource, DropTarget, useKeyboardDrag } from \"./DragAndDrop\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownAnchor,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownReturnFocus,\n DropdownSearch,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection, FilterToggleProps } from \"./FilterChip\";\nexport { FilterChip, FilterToggle } from \"./FilterChip\";\nexport type { GestureKind, GestureMenuAction, GestureMenuItem, GestureMenuProps, GestureMenuSection } from \"./GestureMenu\";\nexport { GestureMenu } from \"./GestureMenu\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SelectionToolbarProps } from \"./SelectionToolbar\";\nexport { SelectionToolbar } from \"./SelectionToolbar\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarActionProps, ToolbarGroupProps, ToolbarLabelProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\nexport type { ViewTab, ViewTabsProps } from \"./ViewTabs\";\nexport { ViewTabs } from \"./ViewTabs\";\n"],"mappings":"AACA,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,QAAQ,UAAU;AAEzE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,UAAU,QAAQ,cAAc;
|
|
1
|
+
{"version":3,"names":[],"sources":["actions/index.ts"],"sourcesContent":["export type { ButtonAlign, ButtonLinkProps, ButtonProps, ButtonSize, ButtonVariant, IconButtonLinkProps, IconButtonProps } from \"./Button\";\nexport { Button, ButtonLink, IconButton, IconButtonLink } from \"./Button\";\nexport type { CommandMenuProps } from \"./CommandMenu\";\nexport { CommandMenu } from \"./CommandMenu\";\nexport type { ContextMenuProps } from \"./ContextMenu\";\nexport { ContextMenu } from \"./ContextMenu\";\nexport type { CopyButtonProps, CopyButtonValue } from \"./CopyButton\";\nexport { CopyButton } from \"./CopyButton\";\nexport type { CommandContext, CommandItem, CommandSource, CommandStep } from \"./command-items\";\nexport type { DisclosureProps } from \"./Disclosure\";\nexport { Disclosure } from \"./Disclosure\";\nexport type { DragPayload, DragSourceProps, DropTargetProps } from \"./DragAndDrop\";\nexport { activeDrag, DragSource, DropTarget, useKeyboardDrag } from \"./DragAndDrop\";\nexport type {\n DropdownAction,\n DropdownActionBase,\n DropdownAnchor,\n DropdownChoice,\n DropdownItemProps,\n DropdownPosition,\n DropdownProps,\n DropdownReturnFocus,\n DropdownSearch,\n DropdownSection,\n DropdownTriggerProps,\n} from \"./Dropdown\";\nexport { Dropdown, DropdownItem, dropdownPosition } from \"./Dropdown\";\nexport type { FilterChipOption, FilterChipProps, FilterChipSection, FilterToggleProps } from \"./FilterChip\";\nexport { FilterChip, FilterToggle } from \"./FilterChip\";\nexport type { GestureKind, GestureMenuAction, GestureMenuItem, GestureMenuProps, GestureMenuSection } from \"./GestureMenu\";\nexport { GestureMenu } from \"./GestureMenu\";\nexport type { RemoveButtonProps } from \"./RemoveButton\";\nexport { RemoveButton } from \"./RemoveButton\";\nexport type { SegmentedControlProps, SegmentOption } from \"./SegmentedControl\";\nexport { SegmentedControl } from \"./SegmentedControl\";\nexport type { SelectionToolbarProps } from \"./SelectionToolbar\";\nexport { SelectionToolbar } from \"./SelectionToolbar\";\nexport type { SplitButtonProps } from \"./SplitButton\";\nexport { SplitButton } from \"./SplitButton\";\nexport type {\n SpotlightButtonProps,\n SpotlightButtonVariant,\n SpotlightSearchOptions,\n SpotlightSearchResolver,\n} from \"./SpotlightSearch\";\nexport {\n openSpotlightSearch,\n SpotlightButton,\n} from \"./SpotlightSearch\";\nexport type { TabOption, TabsItemProps, TabsProps } from \"./Tabs\";\nexport { Tabs } from \"./Tabs\";\nexport type { ToolbarActionProps, ToolbarGroupProps, ToolbarLabelProps, ToolbarProps, ToolbarSeparatorProps } from \"./Toolbar\";\nexport { Toolbar } from \"./Toolbar\";\nexport type { ViewTab, ViewTabsProps } from \"./ViewTabs\";\nexport { ViewTabs } from \"./ViewTabs\";\n"],"mappings":"AACA,SAAS,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,QAAQ,UAAU;AAEzE,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,UAAU,QAAQ,cAAc;AAGzC,SAAS,UAAU,QAAQ,cAAc;AAEzC,SAAS,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,QAAQ,eAAe;AAcnF,SAAS,QAAQ,EAAE,YAAY,EAAE,gBAAgB,QAAQ,YAAY;AAErE,SAAS,UAAU,EAAE,YAAY,QAAQ,cAAc;AAEvD,SAAS,WAAW,QAAQ,eAAe;AAE3C,SAAS,YAAY,QAAQ,gBAAgB;AAE7C,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,gBAAgB,QAAQ,oBAAoB;AAErD,SAAS,WAAW,QAAQ,eAAe;AAO3C,SACE,mBAAmB,EACnB,eAAe,QACV,mBAAmB;AAE1B,SAAS,IAAI,QAAQ,QAAQ;AAE7B,SAAS,OAAO,QAAQ,WAAW;AAEnC,SAAS,QAAQ,QAAQ,YAAY","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { chartDatumSvg, escapeXml, niceStep } from "./svg";
|
|
1
|
+
import { coreChartMessages } from "./chart-messages";
|
|
2
|
+
import { chartDatumSvg, escapeXml, niceStep } from "./svg-renderers";
|
|
3
3
|
/** Missing observations interrupt the entire stack; zero-sum columns are gaps only in normalized mode. */
|
|
4
4
|
export function areaLayout(spec, size) {
|
|
5
5
|
if (![size.width, size.height].every(v => Number.isFinite(v) && v > 0)) throw new RangeError("Invalid area size");
|
|
@@ -182,9 +182,7 @@ export function renderAreaSvg(spec) {
|
|
|
182
182
|
const label = g.xFormat(value);
|
|
183
183
|
parts.push(text(g.projectX(i), g.bottom + 20, label.length > 24 ? label.slice(0, 23) + "…" : label, i === 0 ? "start" : i === spec.x.length - 1 ? "end" : "middle", 'class="stdlib-chart-tick-label"'));
|
|
184
184
|
});
|
|
185
|
-
const totalLabel =
|
|
186
|
-
key: "areaTotal"
|
|
187
|
-
});
|
|
185
|
+
const totalLabel = coreChartMessages.resolve([spec.locale ?? "en"]).t.areaTotal;
|
|
188
186
|
return `<svg data-chart-total-label="${escapeXml(totalLabel)}" xmlns="http://www.w3.org/2000/svg" class="stdlib-chart k2b-area ${escapeXml(spec.className ?? "")}" width="${spec.width}" height="${spec.height}" viewBox="0 0 ${spec.width} ${spec.height}" aria-hidden="true" focusable="false">${parts.join("")}</svg>`;
|
|
189
187
|
}
|
|
190
188
|
//# sourceMappingURL=area.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["charts/core/area.ts"],"sourcesContent":["import { chartMessages } from \"../../content/chart-message-catalog\";\nimport { chartDatumSvg, escapeXml, niceStep } from \"./svg\";\n\nexport type AreaOptions = {\n layout: \"stacked\";\n normalize?: boolean;\n x: (string | number)[];\n series: { label: string; data: (number | null)[] }[];\n title?: string;\n subtitle?: string;\n className?: string;\n legend?: boolean;\n format?: (value: number) => string;\n locale?: string;\n /** Narrowest displayed width in CSS pixels; measured hosts pass their actual width. */\n displayWidth?: number;\n};\nexport type AreaPoint = { index: number; amount: number; share: number; lower: number; upper: number };\n\n/** Missing observations interrupt the entire stack; zero-sum columns are gaps only in normalized mode. */\nexport function areaLayout(spec: AreaOptions, size: { width: number; height: number }) {\n if (![size.width, size.height].every((v) => Number.isFinite(v) && v > 0)) throw new RangeError(\"Invalid area size\");\n if (spec.x.some((x) => typeof x === \"number\" && !Number.isFinite(x))) throw new RangeError(\"Area X values must be finite\");\n if (spec.series.some((s) => s.data.length !== spec.x.length)) throw new RangeError(\"Area series must match x length\");\n const totals = spec.x.map((_, i) => {\n let total = 0,\n missing = false;\n for (const series of spec.series) {\n const value = series.data[i];\n if (value === null) {\n missing = true;\n continue;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0)\n throw new RangeError(\"Area values must be nonnegative finite numbers or null\");\n total += value;\n }\n if (!Number.isFinite(total)) throw new RangeError(\"Area totals must be finite\");\n return missing || (spec.normalize && total === 0) ? null : total;\n });\n const layers: (AreaPoint | null)[][] = spec.series.map(() => []);\n totals.forEach((total, index) => {\n let lower = 0;\n spec.series.forEach((series, s) => {\n const amount = series.data[index];\n if (total === null || amount === null || amount === undefined) {\n layers[s]!.push(null);\n return;\n }\n const share = total === 0 ? 0 : amount / total;\n const upper = lower + (spec.normalize ? share : amount);\n layers[s]!.push({ index, amount, share, lower, upper });\n lower = upper;\n });\n });\n let rawMax = 0;\n for (const total of totals) if (total !== null) rawMax = Math.max(rawMax, total);\n const step = spec.normalize ? 0.25 : niceStep(rawMax || 1, 5);\n const max = spec.normalize ? 1 : Math.ceil((rawMax || 1) / step) * step;\n if (!(step > 0) || !Number.isFinite(max)) throw new RangeError(\"Area values cannot form a finite axis; rescale them first\");\n const ticks = Array.from({ length: Math.round(max / step) + 1 }, (_, i) => i * step);\n const format = spec.format ?? new Intl.NumberFormat(spec.locale ?? \"en\", { maximumFractionDigits: 2 }).format;\n const percent = new Intl.NumberFormat(spec.locale ?? \"en\", { style: \"percent\", minimumFractionDigits: 1, maximumFractionDigits: 1 })\n .format;\n const axisFormat = spec.normalize\n ? new Intl.NumberFormat(spec.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 0 }).format\n : format;\n const numericX = new Intl.NumberFormat(spec.locale ?? \"en\", { useGrouping: \"min2\", maximumFractionDigits: 6 }).format;\n const xFormat = (value: string | number) => (typeof value === \"number\" ? numericX(value) : value);\n const displayWidth = spec.displayWidth ?? 296;\n if (!Number.isFinite(displayWidth) || displayWidth <= 0) throw new RangeError(\"Invalid area display width\");\n const ratio = size.width / displayWidth;\n const left = Math.min(size.width * 0.6, Math.max(44, ...ticks.map((v) => axisFormat(v).length * 7 + 12)) * ratio);\n const right = size.width - 12,\n top = (spec.title || spec.subtitle ? 50 : 16) + (spec.legend === false ? 0 : spec.series.length <= 2 ? 20 : 40);\n const bottom = Math.max(top + 1, size.height - 30);\n const projectX = (index: number) => (spec.x.length < 2 ? (left + right) / 2 : left + (index / (spec.x.length - 1)) * (right - left));\n const projectY = (value: number) => bottom - (value / max) * (bottom - top);\n return { layers, totals, max, ticks, format, percent, axisFormat, xFormat, ratio, left, right, top, bottom, projectX, projectY };\n}\nconst f = (value: number) => String(Math.round(value * 100) / 100);\nconst text = (x: number, y: number, label: string, anchor = \"middle\", extra = \"\") =>\n `<text x=\"${f(x)}\" y=\"${f(y)}\" text-anchor=\"${anchor}\" fill=\"currentColor\" stroke=\"none\" font-family=\"var(--k2b-font-sans, sans-serif)\" font-size=\"11\" ${extra}>${escapeXml(label)}</text>`;\n\nexport function renderAreaSvg(spec: AreaOptions & { width: number; height: number; inspect?: boolean }): string {\n const g = areaLayout(spec, spec),\n parts: string[] = [];\n if (spec.title) parts.push(text(spec.width / 2, 16, spec.title));\n if (spec.subtitle) parts.push(text(spec.width / 2, spec.title ? 32 : 16, spec.subtitle));\n for (const tick of g.ticks) {\n const y = g.projectY(tick);\n parts.push(\n `<line x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(y)}\" y2=\"${f(y)}\" stroke=\"currentColor\" stroke-opacity=\"${tick === 0 ? 0.25 : 0.09}\"/>`,\n text(g.left - 8, y + 4, g.axisFormat(tick), \"end\", 'class=\"stdlib-chart-tick-label\"'),\n );\n }\n parts.push(\n `<line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(g.bottom)}\" y2=\"${f(g.bottom)}\" stroke=\"none\"/><line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.left)}\" y1=\"${f(g.top)}\" y2=\"${f(g.bottom)}\" stroke=\"none\"/>`,\n );\n const palette = [\"#2563eb\", \"#16a34a\", \"#d97706\", \"#dc2626\", \"#a855f7\", \"#0891b2\", \"#db2777\", \"#65a30d\"];\n if (spec.legend !== false) {\n const entries = spec.series.slice(0, 4);\n const columns = 2;\n const cell = spec.width / columns;\n entries.forEach((series, i) => {\n const x = (i % columns) * cell + 4,\n y = g.top - (entries.length <= 2 ? 11 : 28) + Math.floor(i / columns) * 17;\n const color =\n i === 3 && spec.series.length > 4 ? \"var(--k2b-text-muted, #8b8b93)\" : `var(--stdlib-chart-c${(i % 8) + 1}, ${palette[i % 8]})`;\n const point = g.layers[i]?.at(-1);\n const value = point ? (spec.normalize ? g.percent(point.share) : g.format(point.amount)) : \"—\";\n const room = Math.floor((cell * (1 / g.ratio)) / 6) - 4;\n const showValue = value.length + 3 < room;\n const maxChars = Math.max(1, room - (showValue ? value.length + 1 : 0));\n const label = series.label.length > maxChars ? series.label.slice(0, maxChars - 1) + \"…\" : series.label;\n const full =\n i === 3 && spec.series.length > 4\n ? spec.series\n .slice(3)\n .map((s) => s.label)\n .join(\", \")\n : series.label;\n const shown =\n i === 3 && spec.series.length > 4 ? `+${new Intl.NumberFormat(spec.locale ?? \"en\").format(spec.series.length - 3)}` : label;\n const valueSvg =\n showValue && !(i === 3 && spec.series.length > 4)\n ? `<tspan dx=\"6\" font-weight=\"600\" data-chart-legend-value data-series-index=\"${i}\" data-field=\"${spec.normalize ? \"percent\" : \"value\"}\" data-default=\"${escapeXml(value)}\">${escapeXml(value)}</tspan>`\n : \"\";\n const labelSvg = text(x + 12, y, shown, \"start\").replace(\"</text>\", `${valueSvg}</text>`);\n parts.push(\n `<g><title>${escapeXml(full)}</title><rect x=\"${f(x)}\" y=\"${f(y - 8)}\" width=\"8\" height=\"8\" rx=\"2\" fill=\"${color}\" stroke=\"none\"/>${labelSvg}</g>`,\n );\n });\n }\n g.layers.forEach((layer, s) => {\n const color = `var(--stdlib-chart-c${(s % 8) + 1}, ${palette[s % 8]})`;\n let run: AreaPoint[] = [];\n const flush = () => {\n if (!run.length) return;\n const halfSlot = Math.min(10 * g.ratio, (g.right - g.left) / Math.max(2, spec.x.length * 2));\n const upper =\n run.length === 1\n ? [\n [Math.max(g.left, g.projectX(run[0]!.index) - halfSlot), g.projectY(run[0]!.upper)],\n [Math.min(g.right, g.projectX(run[0]!.index) + halfSlot), g.projectY(run[0]!.upper)],\n ]\n : run.map((p) => [g.projectX(p.index), g.projectY(p.upper)]);\n const lower =\n run.length === 1\n ? [\n [upper[1]![0]!, g.projectY(run[0]!.lower)],\n [upper[0]![0]!, g.projectY(run[0]!.lower)],\n ]\n : run.toReversed().map((p) => [g.projectX(p.index), g.projectY(p.lower)]);\n const points = [...upper, ...lower].map(([x, y]) => `${f(x!)},${f(y!)}`);\n parts.push(\n `<polygon class=\"k2b-area-layer\" points=\"${points.join(\" \")}\" fill=\"color-mix(in srgb, ${color} 55%, var(--k2b-surface, #ffffff))\" stroke=\"none\"/>`,\n `<polyline class=\"k2b-area-edge k2b-area-edge-${s % 8}\" points=\"${upper.map(([x, y]) => `${f(x!)},${f(y!)}`).join(\" \")}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"1.5\"/>`,\n );\n run = [];\n };\n for (const point of layer) {\n if (point) run.push(point);\n else flush();\n }\n flush();\n layer.forEach((point) => {\n if (!point) return;\n const x = g.projectX(point.index),\n y = g.projectY((point.lower + point.upper) / 2);\n const circle = `<circle class=\"k2b-area-inspection-point\" cx=\"${f(x)}\" cy=\"${f(y)}\" r=\"3\" fill=\"${color}\" opacity=\"0\" stroke=\"none\"/>`;\n parts.push(\n chartDatumSvg(\n circle,\n {\n role: \"point\",\n index: point.index,\n seriesIndex: s,\n label: spec.series[s]!.label,\n anchor: [x, g.top],\n values: [\n {\n key: \"x\",\n value: spec.x[point.index]!,\n formatted: g.xFormat(spec.x[point.index]!),\n },\n { key: \"value\", value: point.amount, formatted: g.format(point.amount) },\n { key: \"total\", value: g.totals[point.index]!, formatted: g.format(g.totals[point.index]!) },\n ...(spec.normalize ? [{ key: \"percent\", value: point.share * 100, formatted: g.percent(point.share) }] : []),\n ],\n },\n spec.inspect ?? false,\n ),\n );\n });\n });\n const slot = ((g.right - g.left) / Math.max(1, spec.x.length)) * (1 / g.ratio);\n const labelWidth = Math.max(1, ...spec.x.map((x) => Math.min(24, String(x).length))) * 6;\n const stride = Math.max(1, Math.ceil(labelWidth / Math.max(1, slot)));\n spec.x.forEach((value, i) => {\n if (i % stride !== 0) return;\n const label = g.xFormat(value);\n parts.push(\n text(\n g.projectX(i),\n g.bottom + 20,\n label.length > 24 ? label.slice(0, 23) + \"…\" : label,\n i === 0 ? \"start\" : i === spec.x.length - 1 ? \"end\" : \"middle\",\n 'class=\"stdlib-chart-tick-label\"',\n ),\n );\n });\n const totalLabel = chartMessages.resolve([spec.locale ?? \"en\"]).t.chartFields({ key: \"areaTotal\" });\n return `<svg data-chart-total-label=\"${escapeXml(totalLabel)}\" xmlns=\"http://www.w3.org/2000/svg\" class=\"stdlib-chart k2b-area ${escapeXml(spec.className ?? \"\")}\" width=\"${spec.width}\" height=\"${spec.height}\" viewBox=\"0 0 ${spec.width} ${spec.height}\" aria-hidden=\"true\" focusable=\"false\">${parts.join(\"\")}</svg>`;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/area.ts"],"sourcesContent":["import { coreChartMessages } from \"./chart-messages\";\nimport { chartDatumSvg, escapeXml, niceStep } from \"./svg-renderers\";\n\nexport type AreaOptions = {\n layout: \"stacked\";\n normalize?: boolean;\n x: (string | number)[];\n series: { label: string; data: (number | null)[] }[];\n title?: string;\n subtitle?: string;\n className?: string;\n legend?: boolean;\n format?: (value: number) => string;\n locale?: string;\n /** Narrowest displayed width in CSS pixels; measured hosts pass their actual width. */\n displayWidth?: number;\n};\nexport type AreaPoint = { index: number; amount: number; share: number; lower: number; upper: number };\n\n/** Missing observations interrupt the entire stack; zero-sum columns are gaps only in normalized mode. */\nexport function areaLayout(spec: AreaOptions, size: { width: number; height: number }) {\n if (![size.width, size.height].every((v) => Number.isFinite(v) && v > 0)) throw new RangeError(\"Invalid area size\");\n if (spec.x.some((x) => typeof x === \"number\" && !Number.isFinite(x))) throw new RangeError(\"Area X values must be finite\");\n if (spec.series.some((s) => s.data.length !== spec.x.length)) throw new RangeError(\"Area series must match x length\");\n const totals = spec.x.map((_, i) => {\n let total = 0,\n missing = false;\n for (const series of spec.series) {\n const value = series.data[i];\n if (value === null) {\n missing = true;\n continue;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0)\n throw new RangeError(\"Area values must be nonnegative finite numbers or null\");\n total += value;\n }\n if (!Number.isFinite(total)) throw new RangeError(\"Area totals must be finite\");\n return missing || (spec.normalize && total === 0) ? null : total;\n });\n const layers: (AreaPoint | null)[][] = spec.series.map(() => []);\n totals.forEach((total, index) => {\n let lower = 0;\n spec.series.forEach((series, s) => {\n const amount = series.data[index];\n if (total === null || amount === null || amount === undefined) {\n layers[s]!.push(null);\n return;\n }\n const share = total === 0 ? 0 : amount / total;\n const upper = lower + (spec.normalize ? share : amount);\n layers[s]!.push({ index, amount, share, lower, upper });\n lower = upper;\n });\n });\n let rawMax = 0;\n for (const total of totals) if (total !== null) rawMax = Math.max(rawMax, total);\n const step = spec.normalize ? 0.25 : niceStep(rawMax || 1, 5);\n const max = spec.normalize ? 1 : Math.ceil((rawMax || 1) / step) * step;\n if (!(step > 0) || !Number.isFinite(max)) throw new RangeError(\"Area values cannot form a finite axis; rescale them first\");\n const ticks = Array.from({ length: Math.round(max / step) + 1 }, (_, i) => i * step);\n const format = spec.format ?? new Intl.NumberFormat(spec.locale ?? \"en\", { maximumFractionDigits: 2 }).format;\n const percent = new Intl.NumberFormat(spec.locale ?? \"en\", { style: \"percent\", minimumFractionDigits: 1, maximumFractionDigits: 1 })\n .format;\n const axisFormat = spec.normalize\n ? new Intl.NumberFormat(spec.locale ?? \"en\", { style: \"percent\", maximumFractionDigits: 0 }).format\n : format;\n const numericX = new Intl.NumberFormat(spec.locale ?? \"en\", { useGrouping: \"min2\", maximumFractionDigits: 6 }).format;\n const xFormat = (value: string | number) => (typeof value === \"number\" ? numericX(value) : value);\n const displayWidth = spec.displayWidth ?? 296;\n if (!Number.isFinite(displayWidth) || displayWidth <= 0) throw new RangeError(\"Invalid area display width\");\n const ratio = size.width / displayWidth;\n const left = Math.min(size.width * 0.6, Math.max(44, ...ticks.map((v) => axisFormat(v).length * 7 + 12)) * ratio);\n const right = size.width - 12,\n top = (spec.title || spec.subtitle ? 50 : 16) + (spec.legend === false ? 0 : spec.series.length <= 2 ? 20 : 40);\n const bottom = Math.max(top + 1, size.height - 30);\n const projectX = (index: number) => (spec.x.length < 2 ? (left + right) / 2 : left + (index / (spec.x.length - 1)) * (right - left));\n const projectY = (value: number) => bottom - (value / max) * (bottom - top);\n return { layers, totals, max, ticks, format, percent, axisFormat, xFormat, ratio, left, right, top, bottom, projectX, projectY };\n}\nconst f = (value: number) => String(Math.round(value * 100) / 100);\nconst text = (x: number, y: number, label: string, anchor = \"middle\", extra = \"\") =>\n `<text x=\"${f(x)}\" y=\"${f(y)}\" text-anchor=\"${anchor}\" fill=\"currentColor\" stroke=\"none\" font-family=\"var(--k2b-font-sans, sans-serif)\" font-size=\"11\" ${extra}>${escapeXml(label)}</text>`;\n\nexport function renderAreaSvg(spec: AreaOptions & { width: number; height: number; inspect?: boolean }): string {\n const g = areaLayout(spec, spec),\n parts: string[] = [];\n if (spec.title) parts.push(text(spec.width / 2, 16, spec.title));\n if (spec.subtitle) parts.push(text(spec.width / 2, spec.title ? 32 : 16, spec.subtitle));\n for (const tick of g.ticks) {\n const y = g.projectY(tick);\n parts.push(\n `<line x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(y)}\" y2=\"${f(y)}\" stroke=\"currentColor\" stroke-opacity=\"${tick === 0 ? 0.25 : 0.09}\"/>`,\n text(g.left - 8, y + 4, g.axisFormat(tick), \"end\", 'class=\"stdlib-chart-tick-label\"'),\n );\n }\n parts.push(\n `<line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.right)}\" y1=\"${f(g.bottom)}\" y2=\"${f(g.bottom)}\" stroke=\"none\"/><line class=\"stdlib-chart-axis\" x1=\"${f(g.left)}\" x2=\"${f(g.left)}\" y1=\"${f(g.top)}\" y2=\"${f(g.bottom)}\" stroke=\"none\"/>`,\n );\n const palette = [\"#2563eb\", \"#16a34a\", \"#d97706\", \"#dc2626\", \"#a855f7\", \"#0891b2\", \"#db2777\", \"#65a30d\"];\n if (spec.legend !== false) {\n const entries = spec.series.slice(0, 4);\n const columns = 2;\n const cell = spec.width / columns;\n entries.forEach((series, i) => {\n const x = (i % columns) * cell + 4,\n y = g.top - (entries.length <= 2 ? 11 : 28) + Math.floor(i / columns) * 17;\n const color =\n i === 3 && spec.series.length > 4 ? \"var(--k2b-text-muted, #8b8b93)\" : `var(--stdlib-chart-c${(i % 8) + 1}, ${palette[i % 8]})`;\n const point = g.layers[i]?.at(-1);\n const value = point ? (spec.normalize ? g.percent(point.share) : g.format(point.amount)) : \"—\";\n const room = Math.floor((cell * (1 / g.ratio)) / 6) - 4;\n const showValue = value.length + 3 < room;\n const maxChars = Math.max(1, room - (showValue ? value.length + 1 : 0));\n const label = series.label.length > maxChars ? series.label.slice(0, maxChars - 1) + \"…\" : series.label;\n const full =\n i === 3 && spec.series.length > 4\n ? spec.series\n .slice(3)\n .map((s) => s.label)\n .join(\", \")\n : series.label;\n const shown =\n i === 3 && spec.series.length > 4 ? `+${new Intl.NumberFormat(spec.locale ?? \"en\").format(spec.series.length - 3)}` : label;\n const valueSvg =\n showValue && !(i === 3 && spec.series.length > 4)\n ? `<tspan dx=\"6\" font-weight=\"600\" data-chart-legend-value data-series-index=\"${i}\" data-field=\"${spec.normalize ? \"percent\" : \"value\"}\" data-default=\"${escapeXml(value)}\">${escapeXml(value)}</tspan>`\n : \"\";\n const labelSvg = text(x + 12, y, shown, \"start\").replace(\"</text>\", `${valueSvg}</text>`);\n parts.push(\n `<g><title>${escapeXml(full)}</title><rect x=\"${f(x)}\" y=\"${f(y - 8)}\" width=\"8\" height=\"8\" rx=\"2\" fill=\"${color}\" stroke=\"none\"/>${labelSvg}</g>`,\n );\n });\n }\n g.layers.forEach((layer, s) => {\n const color = `var(--stdlib-chart-c${(s % 8) + 1}, ${palette[s % 8]})`;\n let run: AreaPoint[] = [];\n const flush = () => {\n if (!run.length) return;\n const halfSlot = Math.min(10 * g.ratio, (g.right - g.left) / Math.max(2, spec.x.length * 2));\n const upper =\n run.length === 1\n ? [\n [Math.max(g.left, g.projectX(run[0]!.index) - halfSlot), g.projectY(run[0]!.upper)],\n [Math.min(g.right, g.projectX(run[0]!.index) + halfSlot), g.projectY(run[0]!.upper)],\n ]\n : run.map((p) => [g.projectX(p.index), g.projectY(p.upper)]);\n const lower =\n run.length === 1\n ? [\n [upper[1]![0]!, g.projectY(run[0]!.lower)],\n [upper[0]![0]!, g.projectY(run[0]!.lower)],\n ]\n : run.toReversed().map((p) => [g.projectX(p.index), g.projectY(p.lower)]);\n const points = [...upper, ...lower].map(([x, y]) => `${f(x!)},${f(y!)}`);\n parts.push(\n `<polygon class=\"k2b-area-layer\" points=\"${points.join(\" \")}\" fill=\"color-mix(in srgb, ${color} 55%, var(--k2b-surface, #ffffff))\" stroke=\"none\"/>`,\n `<polyline class=\"k2b-area-edge k2b-area-edge-${s % 8}\" points=\"${upper.map(([x, y]) => `${f(x!)},${f(y!)}`).join(\" \")}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"1.5\"/>`,\n );\n run = [];\n };\n for (const point of layer) {\n if (point) run.push(point);\n else flush();\n }\n flush();\n layer.forEach((point) => {\n if (!point) return;\n const x = g.projectX(point.index),\n y = g.projectY((point.lower + point.upper) / 2);\n const circle = `<circle class=\"k2b-area-inspection-point\" cx=\"${f(x)}\" cy=\"${f(y)}\" r=\"3\" fill=\"${color}\" opacity=\"0\" stroke=\"none\"/>`;\n parts.push(\n chartDatumSvg(\n circle,\n {\n role: \"point\",\n index: point.index,\n seriesIndex: s,\n label: spec.series[s]!.label,\n anchor: [x, g.top],\n values: [\n {\n key: \"x\",\n value: spec.x[point.index]!,\n formatted: g.xFormat(spec.x[point.index]!),\n },\n { key: \"value\", value: point.amount, formatted: g.format(point.amount) },\n { key: \"total\", value: g.totals[point.index]!, formatted: g.format(g.totals[point.index]!) },\n ...(spec.normalize ? [{ key: \"percent\", value: point.share * 100, formatted: g.percent(point.share) }] : []),\n ],\n },\n spec.inspect ?? false,\n ),\n );\n });\n });\n const slot = ((g.right - g.left) / Math.max(1, spec.x.length)) * (1 / g.ratio);\n const labelWidth = Math.max(1, ...spec.x.map((x) => Math.min(24, String(x).length))) * 6;\n const stride = Math.max(1, Math.ceil(labelWidth / Math.max(1, slot)));\n spec.x.forEach((value, i) => {\n if (i % stride !== 0) return;\n const label = g.xFormat(value);\n parts.push(\n text(\n g.projectX(i),\n g.bottom + 20,\n label.length > 24 ? label.slice(0, 23) + \"…\" : label,\n i === 0 ? \"start\" : i === spec.x.length - 1 ? \"end\" : \"middle\",\n 'class=\"stdlib-chart-tick-label\"',\n ),\n );\n });\n const totalLabel = coreChartMessages.resolve([spec.locale ?? \"en\"]).t.areaTotal;\n return `<svg data-chart-total-label=\"${escapeXml(totalLabel)}\" xmlns=\"http://www.w3.org/2000/svg\" class=\"stdlib-chart k2b-area ${escapeXml(spec.className ?? \"\")}\" width=\"${spec.width}\" height=\"${spec.height}\" viewBox=\"0 0 ${spec.width} ${spec.height}\" aria-hidden=\"true\" focusable=\"false\">${parts.join(\"\")}</svg>`;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/bar-labels.ts"],"sourcesContent":["export const barPercent = (locale = \"en\") => new Intl.NumberFormat(locale, { style: \"percent\", maximumFractionDigits: 1 });\n"],"mappings":"AAAA,OAAO,MAAM,UAAU,GAAG,CAAC,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;EAAE,KAAK,EAAE,SAAS;EAAE,qBAAqB,EAAE;AAAE,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { chartDatumSvg, escapeXml, renderHeader, svgRoot } from "./svg";
|
|
2
|
+
const palette = ["#3b82f6", "#10b981", "#f59e0b", "#8b5cf6", "#ec4899", "#06b6d4", "#84cc16", "#f97316"];
|
|
3
|
+
const color = index => `var(--stdlib-chart-c${index % 8 + 1},${palette[index % 8]})`;
|
|
4
|
+
export function bubbleLayout(spec, size = {
|
|
5
|
+
width: spec.width ?? 480,
|
|
6
|
+
height: spec.height ?? 280
|
|
7
|
+
}) {
|
|
8
|
+
for (const p of spec.data) {
|
|
9
|
+
if (![p.x, p.y].every(Number.isFinite) || p.size !== undefined && (!Number.isFinite(p.size) || p.size < 0)) throw new RangeError("Bubble coordinates must be finite and sizes nonnegative.");
|
|
10
|
+
if (!spec.groups.includes(p.group)) throw new RangeError("Bubble groups must contain every point group.");
|
|
11
|
+
}
|
|
12
|
+
const width = spec.displayWidth ?? size.width,
|
|
13
|
+
height = size.height;
|
|
14
|
+
const header = renderHeader(width, spec.title, spec.subtitle);
|
|
15
|
+
const legend = [];
|
|
16
|
+
let lx = 0,
|
|
17
|
+
row = 0;
|
|
18
|
+
if (spec.legend !== false) spec.groups.forEach((label, index) => {
|
|
19
|
+
const space = Math.min(width, label.length * 12 + 28);
|
|
20
|
+
if (lx && lx + space > width) {
|
|
21
|
+
lx = 0;
|
|
22
|
+
row++;
|
|
23
|
+
}
|
|
24
|
+
legend.push({
|
|
25
|
+
label,
|
|
26
|
+
index,
|
|
27
|
+
x: lx,
|
|
28
|
+
row
|
|
29
|
+
});
|
|
30
|
+
lx += space;
|
|
31
|
+
});
|
|
32
|
+
const left = 48,
|
|
33
|
+
right = width - 24,
|
|
34
|
+
top = header.height + (spec.averages ? 72 : 20);
|
|
35
|
+
const bottom = height - 36 - (legend.length ? (row + 1) * 20 : 0);
|
|
36
|
+
const domain = values => {
|
|
37
|
+
let lo = Math.min(0, ...values),
|
|
38
|
+
hi = Math.max(0, ...values);
|
|
39
|
+
if (!Number.isFinite(hi - lo)) throw new RangeError("Bubble coordinate ranges must be finite.");
|
|
40
|
+
if (lo === hi) {
|
|
41
|
+
lo = -1;
|
|
42
|
+
hi = 1;
|
|
43
|
+
}
|
|
44
|
+
return [lo, hi];
|
|
45
|
+
};
|
|
46
|
+
const xd = domain(spec.data.map(p => p.x)),
|
|
47
|
+
yd = domain(spec.data.map(p => p.y));
|
|
48
|
+
const physicalWidth = spec.displayWidth ?? Math.min(296, width),
|
|
49
|
+
inverseX = width / physicalWidth;
|
|
50
|
+
const maxRadius = Math.max(0, Math.min(21, physicalWidth / 20, (bottom - top - 4) / 2)),
|
|
51
|
+
maxSize = Math.max(0, ...spec.data.map(p => p.size ?? 0));
|
|
52
|
+
const padding = Math.max(4.5, maxRadius) * inverseX + 2;
|
|
53
|
+
const x = value => left + padding + (value - xd[0]) / (xd[1] - xd[0]) * Math.max(0, right - left - padding * 2);
|
|
54
|
+
const y = value => bottom - maxRadius - 2 - (value - yd[0]) / (yd[1] - yd[0]) * Math.max(0, bottom - top - maxRadius * 2 - 4);
|
|
55
|
+
const meanX = spec.data.reduce((sum, p) => sum + p.x / Math.max(1, spec.data.length), 0);
|
|
56
|
+
const meanY = spec.data.reduce((sum, p) => sum + p.y / Math.max(1, spec.data.length), 0);
|
|
57
|
+
const points = spec.data.map((p, index) => ({
|
|
58
|
+
...p,
|
|
59
|
+
index,
|
|
60
|
+
cx: x(p.x),
|
|
61
|
+
cy: y(p.y),
|
|
62
|
+
radius: p.size === undefined ? 4.5 : maxSize ? Math.sqrt(p.size / maxSize) * maxRadius : 0,
|
|
63
|
+
labelBox: undefined
|
|
64
|
+
}));
|
|
65
|
+
const placed = [];
|
|
66
|
+
const overlap = (a, b) => a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;
|
|
67
|
+
const boxes = points.map(p => ({
|
|
68
|
+
x: p.cx - p.radius * inverseX,
|
|
69
|
+
y: p.cy - p.radius,
|
|
70
|
+
width: p.radius * 2 * inverseX,
|
|
71
|
+
height: p.radius * 2
|
|
72
|
+
}));
|
|
73
|
+
for (const p of [...points].sort((a, b) => b.radius - a.radius || a.index - b.index)) {
|
|
74
|
+
const box = {
|
|
75
|
+
x: p.cx + (p.radius + 4) * inverseX,
|
|
76
|
+
y: p.cy - 9,
|
|
77
|
+
width: p.label.length * 12 * inverseX,
|
|
78
|
+
height: 14
|
|
79
|
+
};
|
|
80
|
+
if (box.x + box.width > right || box.y < top || box.y + box.height > bottom || boxes.some((b, index) => index !== p.index && overlap(box, b)) || placed.some(b => overlap(box, b))) continue;
|
|
81
|
+
p.labelBox = box;
|
|
82
|
+
placed.push(box);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
width,
|
|
86
|
+
height,
|
|
87
|
+
header,
|
|
88
|
+
left,
|
|
89
|
+
right,
|
|
90
|
+
top,
|
|
91
|
+
bottom,
|
|
92
|
+
xd,
|
|
93
|
+
yd,
|
|
94
|
+
x,
|
|
95
|
+
y,
|
|
96
|
+
points,
|
|
97
|
+
meanX,
|
|
98
|
+
meanY,
|
|
99
|
+
legend
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function renderBubbleSvg(spec) {
|
|
103
|
+
const s = bubbleLayout(spec),
|
|
104
|
+
locale = spec.locale ?? "en";
|
|
105
|
+
const number = new Intl.NumberFormat(locale, {
|
|
106
|
+
maximumSignificantDigits: 15
|
|
107
|
+
}).format;
|
|
108
|
+
const xf = spec.xFormat ?? number,
|
|
109
|
+
yf = spec.yFormat ?? number,
|
|
110
|
+
sf = spec.sizeFormat ?? number;
|
|
111
|
+
const compact = new Intl.NumberFormat(locale, {
|
|
112
|
+
notation: "compact",
|
|
113
|
+
maximumSignificantDigits: 3
|
|
114
|
+
}).format;
|
|
115
|
+
const scientific = new Intl.NumberFormat(locale, {
|
|
116
|
+
notation: "scientific",
|
|
117
|
+
maximumSignificantDigits: 3
|
|
118
|
+
}).format;
|
|
119
|
+
const tick = v => v && (Math.abs(v) >= 1e12 || Math.abs(v) < 1e-6) ? scientific(v) : compact(v);
|
|
120
|
+
const xt = spec.xFormat ?? tick,
|
|
121
|
+
yt = spec.yFormat ?? tick;
|
|
122
|
+
const text = "var(--k2b-text-muted,#45454e)",
|
|
123
|
+
border = "var(--k2b-border,#e4e4e7)";
|
|
124
|
+
const body = [s.header.svg.replace(/<text class="stdlib-chart-title"/g, '<text fill="var(--k2b-text,#27272a)" font-size="14" class="stdlib-chart-title"').replace(/<text class="stdlib-chart-subtitle"/g, '<text fill="var(--k2b-text-muted,#45454e)" font-size="11" class="stdlib-chart-subtitle"')];
|
|
125
|
+
for (let i = 0; i <= 4; i++) {
|
|
126
|
+
const xv = s.xd[0] + (s.xd[1] - s.xd[0]) * (i / 4),
|
|
127
|
+
yv = s.yd[0] + (s.yd[1] - s.yd[0]) * (i / 4);
|
|
128
|
+
body.push(`<line x1="${s.left}" x2="${s.right}" y1="${s.y(yv)}" y2="${s.y(yv)}" stroke="${border}"/><text x="${s.left - 7}" y="${s.y(yv) + 4}" text-anchor="end" font-size="10" fill="${text}">${escapeXml(yt(yv))}</text><text x="${s.x(xv)}" y="${s.bottom + 16}" text-anchor="middle" font-size="10" fill="${text}">${escapeXml(xt(xv))}</text>`);
|
|
129
|
+
}
|
|
130
|
+
body.push(`<line class="stdlib-chart-axis" x1="${s.left}" x2="${s.left}" y1="${s.top}" y2="${s.bottom}" stroke="${border}"/><line class="stdlib-chart-axis" x1="${s.left}" x2="${s.right}" y1="${s.bottom}" y2="${s.bottom}" stroke="${border}"/><text x="${s.right}" y="${s.bottom + 30}" class="k2b-chart-bubble-x-title" text-anchor="end" font-size="11" fill="${text}">${escapeXml(spec.xLabel)} →</text><text x="${s.left}" y="${s.top - 7}" class="k2b-chart-bubble-y-title" font-size="11" fill="${text}">↑ ${escapeXml(spec.yLabel)}</text>`);
|
|
131
|
+
if (spec.averages) {
|
|
132
|
+
const label = locale.startsWith("de") ? "Ungewichteter Durchschnitt" : "Unweighted average";
|
|
133
|
+
body.push(`<line class="k2b-chart-average" x1="${s.x(s.meanX)}" x2="${s.x(s.meanX)}" y1="${s.top}" y2="${s.bottom}" stroke="${text}" stroke-dasharray="4 4"/><line class="k2b-chart-average" x1="${s.left}" x2="${s.right}" y1="${s.y(s.meanY)}" y2="${s.y(s.meanY)}" stroke="${text}" stroke-dasharray="4 4"/><text x="${s.left}" y="${s.header.height + 11}" class="k2b-chart-bubble-average-label" font-size="11" fill="${text}">${label}<title>X: ${escapeXml(xf(s.meanX))} · Y: ${escapeXml(yf(s.meanY))}</title></text><text x="${s.left}" y="${s.header.height + 29}" class="k2b-chart-bubble-average-value" font-size="11" fill="${text}">X: ${escapeXml(xf(s.meanX))} · Y: ${escapeXml(yf(s.meanY))}</text>`);
|
|
134
|
+
}
|
|
135
|
+
for (const p of [...s.points].sort((a, b) => b.radius - a.radius || a.index - b.index)) {
|
|
136
|
+
const paint = color(spec.groups.indexOf(p.group));
|
|
137
|
+
body.push(chartDatumSvg(`<circle cx="${p.cx}" cy="${p.cy}" r="${p.radius}" fill="${paint}" fill-opacity="0.62" stroke="${paint}" stroke-width="1.2"/>${p.labelBox ? `<text class="k2b-chart-bubble-label" x="${p.labelBox.x}" y="${p.cy + 4}" font-size="11.5" fill="${text}" pointer-events="none">${escapeXml(p.label)}</text>` : ""}`, {
|
|
138
|
+
role: "point",
|
|
139
|
+
index: p.index,
|
|
140
|
+
label: p.label,
|
|
141
|
+
anchor: [p.cx, p.cy],
|
|
142
|
+
values: [{
|
|
143
|
+
key: "group",
|
|
144
|
+
value: p.group
|
|
145
|
+
}, {
|
|
146
|
+
key: "x",
|
|
147
|
+
value: p.x,
|
|
148
|
+
formatted: xf(p.x)
|
|
149
|
+
}, {
|
|
150
|
+
key: "y",
|
|
151
|
+
value: p.y,
|
|
152
|
+
formatted: yf(p.y)
|
|
153
|
+
}, ...(p.size === undefined ? [] : [{
|
|
154
|
+
key: "size",
|
|
155
|
+
value: p.size,
|
|
156
|
+
formatted: sf(p.size)
|
|
157
|
+
}])]
|
|
158
|
+
}, spec.inspect));
|
|
159
|
+
}
|
|
160
|
+
for (const item of s.legend) body.push(`<rect x="${item.x}" y="${s.height - (s.legend.at(-1).row - item.row) * 20 - 14}" width="8" height="8" rx="2" fill="${color(item.index)}"/><text x="${item.x + 13}" y="${s.height - (s.legend.at(-1).row - item.row) * 20 - 6}" font-size="11" fill="${text}">${escapeXml(item.label.slice(0, Math.floor((s.width - 28) / 12)))}</text>`);
|
|
161
|
+
return svgRoot({
|
|
162
|
+
...s,
|
|
163
|
+
className: spec.className
|
|
164
|
+
}, body.join(""));
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=bubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/bubble.ts"],"sourcesContent":["import { type ChartOptions, chartDatumSvg, escapeXml, renderHeader, svgRoot } from \"./svg\";\n\nexport type BubbleOptions = ChartOptions & {\n groups: string[];\n data: { label: string; group: string; x: number; y: number; size?: number }[];\n xLabel: string;\n yLabel: string;\n sizeLabel?: string;\n averages?: boolean;\n legend?: boolean;\n locale?: string;\n xFormat?: (value: number) => string;\n yFormat?: (value: number) => string;\n sizeFormat?: (value: number) => string;\n displayWidth?: number;\n};\nconst palette = [\"#3b82f6\", \"#10b981\", \"#f59e0b\", \"#8b5cf6\", \"#ec4899\", \"#06b6d4\", \"#84cc16\", \"#f97316\"];\nconst color = (index: number) => `var(--stdlib-chart-c${(index % 8) + 1},${palette[index % 8]})`;\n\nexport function bubbleLayout(spec: BubbleOptions, size = { width: spec.width ?? 480, height: spec.height ?? 280 }) {\n for (const p of spec.data) {\n if (![p.x, p.y].every(Number.isFinite) || (p.size !== undefined && (!Number.isFinite(p.size) || p.size < 0)))\n throw new RangeError(\"Bubble coordinates must be finite and sizes nonnegative.\");\n if (!spec.groups.includes(p.group)) throw new RangeError(\"Bubble groups must contain every point group.\");\n }\n const width = spec.displayWidth ?? size.width,\n height = size.height;\n const header = renderHeader(width, spec.title, spec.subtitle);\n const legend: { label: string; index: number; x: number; row: number }[] = [];\n let lx = 0,\n row = 0;\n if (spec.legend !== false)\n spec.groups.forEach((label, index) => {\n const space = Math.min(width, label.length * 12 + 28);\n if (lx && lx + space > width) {\n lx = 0;\n row++;\n }\n legend.push({ label, index, x: lx, row });\n lx += space;\n });\n const left = 48,\n right = width - 24,\n top = header.height + (spec.averages ? 72 : 20);\n const bottom = height - 36 - (legend.length ? (row + 1) * 20 : 0);\n const domain = (values: number[]) => {\n let lo = Math.min(0, ...values),\n hi = Math.max(0, ...values);\n if (!Number.isFinite(hi - lo)) throw new RangeError(\"Bubble coordinate ranges must be finite.\");\n if (lo === hi) {\n lo = -1;\n hi = 1;\n }\n return [lo, hi] as const;\n };\n const xd = domain(spec.data.map((p) => p.x)),\n yd = domain(spec.data.map((p) => p.y));\n const physicalWidth = spec.displayWidth ?? Math.min(296, width),\n inverseX = width / physicalWidth;\n const maxRadius = Math.max(0, Math.min(21, physicalWidth / 20, (bottom - top - 4) / 2)),\n maxSize = Math.max(0, ...spec.data.map((p) => p.size ?? 0));\n const padding = Math.max(4.5, maxRadius) * inverseX + 2;\n const x = (value: number) => left + padding + ((value - xd[0]) / (xd[1] - xd[0])) * Math.max(0, right - left - padding * 2);\n const y = (value: number) => bottom - maxRadius - 2 - ((value - yd[0]) / (yd[1] - yd[0])) * Math.max(0, bottom - top - maxRadius * 2 - 4);\n const meanX = spec.data.reduce((sum, p) => sum + p.x / Math.max(1, spec.data.length), 0);\n const meanY = spec.data.reduce((sum, p) => sum + p.y / Math.max(1, spec.data.length), 0);\n const points = spec.data.map((p, index) => ({\n ...p,\n index,\n cx: x(p.x),\n cy: y(p.y),\n radius: p.size === undefined ? 4.5 : maxSize ? Math.sqrt(p.size / maxSize) * maxRadius : 0,\n labelBox: undefined as { x: number; y: number; width: number; height: number } | undefined,\n }));\n const placed: { x: number; y: number; width: number; height: number }[] = [];\n const overlap = (a: (typeof placed)[number], b: (typeof placed)[number]) =>\n a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y;\n const boxes = points.map((p) => ({\n x: p.cx - p.radius * inverseX,\n y: p.cy - p.radius,\n width: p.radius * 2 * inverseX,\n height: p.radius * 2,\n }));\n for (const p of [...points].sort((a, b) => b.radius - a.radius || a.index - b.index)) {\n const box = { x: p.cx + (p.radius + 4) * inverseX, y: p.cy - 9, width: p.label.length * 12 * inverseX, height: 14 };\n if (\n box.x + box.width > right ||\n box.y < top ||\n box.y + box.height > bottom ||\n boxes.some((b, index) => index !== p.index && overlap(box, b)) ||\n placed.some((b) => overlap(box, b))\n )\n continue;\n p.labelBox = box;\n placed.push(box);\n }\n return { width, height, header, left, right, top, bottom, xd, yd, x, y, points, meanX, meanY, legend };\n}\n\nexport function renderBubbleSvg(spec: BubbleOptions): string {\n const s = bubbleLayout(spec),\n locale = spec.locale ?? \"en\";\n const number = new Intl.NumberFormat(locale, { maximumSignificantDigits: 15 }).format;\n const xf = spec.xFormat ?? number,\n yf = spec.yFormat ?? number,\n sf = spec.sizeFormat ?? number;\n const compact = new Intl.NumberFormat(locale, { notation: \"compact\", maximumSignificantDigits: 3 }).format;\n const scientific = new Intl.NumberFormat(locale, { notation: \"scientific\", maximumSignificantDigits: 3 }).format;\n const tick = (v: number) => (v && (Math.abs(v) >= 1e12 || Math.abs(v) < 1e-6) ? scientific(v) : compact(v));\n const xt = spec.xFormat ?? tick,\n yt = spec.yFormat ?? tick;\n const text = \"var(--k2b-text-muted,#45454e)\",\n border = \"var(--k2b-border,#e4e4e7)\";\n const body = [\n s.header.svg\n .replace(/<text class=\"stdlib-chart-title\"/g, '<text fill=\"var(--k2b-text,#27272a)\" font-size=\"14\" class=\"stdlib-chart-title\"')\n .replace(\n /<text class=\"stdlib-chart-subtitle\"/g,\n '<text fill=\"var(--k2b-text-muted,#45454e)\" font-size=\"11\" class=\"stdlib-chart-subtitle\"',\n ),\n ];\n for (let i = 0; i <= 4; i++) {\n const xv = s.xd[0] + (s.xd[1] - s.xd[0]) * (i / 4),\n yv = s.yd[0] + (s.yd[1] - s.yd[0]) * (i / 4);\n body.push(\n `<line x1=\"${s.left}\" x2=\"${s.right}\" y1=\"${s.y(yv)}\" y2=\"${s.y(yv)}\" stroke=\"${border}\"/><text x=\"${s.left - 7}\" y=\"${s.y(yv) + 4}\" text-anchor=\"end\" font-size=\"10\" fill=\"${text}\">${escapeXml(yt(yv))}</text><text x=\"${s.x(xv)}\" y=\"${s.bottom + 16}\" text-anchor=\"middle\" font-size=\"10\" fill=\"${text}\">${escapeXml(xt(xv))}</text>`,\n );\n }\n body.push(\n `<line class=\"stdlib-chart-axis\" x1=\"${s.left}\" x2=\"${s.left}\" y1=\"${s.top}\" y2=\"${s.bottom}\" stroke=\"${border}\"/><line class=\"stdlib-chart-axis\" x1=\"${s.left}\" x2=\"${s.right}\" y1=\"${s.bottom}\" y2=\"${s.bottom}\" stroke=\"${border}\"/><text x=\"${s.right}\" y=\"${s.bottom + 30}\" class=\"k2b-chart-bubble-x-title\" text-anchor=\"end\" font-size=\"11\" fill=\"${text}\">${escapeXml(spec.xLabel)} →</text><text x=\"${s.left}\" y=\"${s.top - 7}\" class=\"k2b-chart-bubble-y-title\" font-size=\"11\" fill=\"${text}\">↑ ${escapeXml(spec.yLabel)}</text>`,\n );\n if (spec.averages) {\n const label = locale.startsWith(\"de\") ? \"Ungewichteter Durchschnitt\" : \"Unweighted average\";\n body.push(\n `<line class=\"k2b-chart-average\" x1=\"${s.x(s.meanX)}\" x2=\"${s.x(s.meanX)}\" y1=\"${s.top}\" y2=\"${s.bottom}\" stroke=\"${text}\" stroke-dasharray=\"4 4\"/><line class=\"k2b-chart-average\" x1=\"${s.left}\" x2=\"${s.right}\" y1=\"${s.y(s.meanY)}\" y2=\"${s.y(s.meanY)}\" stroke=\"${text}\" stroke-dasharray=\"4 4\"/><text x=\"${s.left}\" y=\"${s.header.height + 11}\" class=\"k2b-chart-bubble-average-label\" font-size=\"11\" fill=\"${text}\">${label}<title>X: ${escapeXml(xf(s.meanX))} · Y: ${escapeXml(yf(s.meanY))}</title></text><text x=\"${s.left}\" y=\"${s.header.height + 29}\" class=\"k2b-chart-bubble-average-value\" font-size=\"11\" fill=\"${text}\">X: ${escapeXml(xf(s.meanX))} · Y: ${escapeXml(yf(s.meanY))}</text>`,\n );\n }\n for (const p of [...s.points].sort((a, b) => b.radius - a.radius || a.index - b.index)) {\n const paint = color(spec.groups.indexOf(p.group));\n body.push(\n chartDatumSvg(\n `<circle cx=\"${p.cx}\" cy=\"${p.cy}\" r=\"${p.radius}\" fill=\"${paint}\" fill-opacity=\"0.62\" stroke=\"${paint}\" stroke-width=\"1.2\"/>${p.labelBox ? `<text class=\"k2b-chart-bubble-label\" x=\"${p.labelBox.x}\" y=\"${p.cy + 4}\" font-size=\"11.5\" fill=\"${text}\" pointer-events=\"none\">${escapeXml(p.label)}</text>` : \"\"}`,\n {\n role: \"point\",\n index: p.index,\n label: p.label,\n anchor: [p.cx, p.cy],\n values: [\n { key: \"group\", value: p.group },\n { key: \"x\", value: p.x, formatted: xf(p.x) },\n { key: \"y\", value: p.y, formatted: yf(p.y) },\n ...(p.size === undefined ? [] : [{ key: \"size\", value: p.size, formatted: sf(p.size) }]),\n ],\n },\n spec.inspect,\n ),\n );\n }\n for (const item of s.legend)\n body.push(\n `<rect x=\"${item.x}\" y=\"${s.height - (s.legend.at(-1)!.row - item.row) * 20 - 14}\" width=\"8\" height=\"8\" rx=\"2\" fill=\"${color(item.index)}\"/><text x=\"${item.x + 13}\" y=\"${s.height - (s.legend.at(-1)!.row - item.row) * 20 - 6}\" font-size=\"11\" fill=\"${text}\">${escapeXml(item.label.slice(0, Math.floor((s.width - 28) / 12)))}</text>`,\n );\n return svgRoot({ ...s, className: spec.className }, body.join(\"\"));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { chartDatumSvg, escapeXml, heatmap, renderHeader, svgRoot } from "./svg";
|
|
1
|
+
import { chartDatumSvg, escapeXml, heatmap, renderHeader, svgRoot } from "./svg-renderers";
|
|
2
2
|
import { chartTextWidth } from "./text";
|
|
3
3
|
const DAY = 86400000;
|
|
4
4
|
/** Bound sparse inputs too: three leap years of daily observations. */
|