@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,469 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ssrStyle as _$ssrStyle } from "solid-js/web";
|
|
3
|
-
import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
|
|
4
|
-
import { createComponent as _$createComponent } from "solid-js/web";
|
|
5
|
-
import { ssr as _$ssr } from "solid-js/web";
|
|
6
|
-
import { escape as _$escape } from "solid-js/web";
|
|
7
|
-
var _tmpl$ = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
|
|
8
|
-
_tmpl$2 = ["<div class=\"k2b-chart__legend\" role=\"group\"", " tabindex=\"0\">", "</div>"],
|
|
9
|
-
_tmpl$3 = ["<div class=\"k2b-chart__controls\">", "", "", "</div>"],
|
|
10
|
-
_tmpl$4 = ["<div class=\"", "\"", " data-interactive=\"true\" style=\"", "\" role=\"group\"", " tabindex=\"0\">", "<div class=\"k2b-chart__svg\"", " style=\"", "\">", "</div><span class=\"k2b-chart__anchor\" aria-hidden=\"true\"></span><span", " role=\"tooltip\" popover=\"manual\" data-instant=\"true\" class=\"k2b-tooltip k2b-chart__tooltip\"></span>", "</div>"],
|
|
11
|
-
_tmpl$5 = ["<div class=\"", "\" style=\"", "\">", "</div>"],
|
|
12
|
-
_tmpl$6 = ["<b data-chart-legend-value", ">", "</b>"],
|
|
13
|
-
_tmpl$7 = ["<span class=\"k2b-chart__legend-item\"><svg class=\"", "\" viewBox=\"0 0 10 10\" width=\"10\" height=\"10\" aria-hidden=\"true\"><rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" rx=\"2\" class=\"", "\" fill=\"", "\" stroke=\"none\"></rect></svg><span>", "</span>", "</span>"];
|
|
14
|
-
import { createEffect, createMemo, createSignal, createUniqueId, For, mergeProps, onCleanup, onMount, Show, splitProps, untrack } from "solid-js";
|
|
15
|
-
import { isServer } from "solid-js/web";
|
|
16
|
-
import { IconButton } from "../actions/Button";
|
|
17
|
-
import { calendarLayout } from "../charts/core/calendar";
|
|
1
|
+
import { mergeProps } from "solid-js";
|
|
18
2
|
import { chartKinds } from "../charts/core/registry";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { useLocale } from "../intl/locale";
|
|
22
|
-
import { useUiMessages } from "../intl/messages";
|
|
23
|
-
import { calendarInspectionNavigation, mountCalendarScroll } from "./chart-calendar";
|
|
24
|
-
import { createChartInspection } from "./chart-inspection";
|
|
25
|
-
import { closeChartInspectionOnOutside } from "./chart-inspection-core";
|
|
26
|
-
import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from "./chart-map-viewport";
|
|
27
|
-
import { resolveChartMessages, useChartMessages } from "./chart-messages";
|
|
28
|
-
import { panStateTimelineViewport, stateTimelineDomain, stateTimelineHeight, zoomStateTimelineViewport } from "./chart-state-timeline";
|
|
29
|
-
import { selectedChartSvg } from "./chart-svg";
|
|
30
|
-
import { useViewportMessages } from "./viewport-messages";
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Chart — Solid interaction and sizing around the portable UI chart core.
|
|
34
|
-
*
|
|
35
|
-
* **Live-update story.** `charts.<kind>(opts)` returns an SVG string;
|
|
36
|
-
* Solid's `innerHTML` is reactive, so any time a prop (signal, store
|
|
37
|
-
* slice, derived value) changes, the SVG re-renders. No manual
|
|
38
|
-
* subscription, no imperative DOM patching. Trade-off: every change
|
|
39
|
-
* is a full SVG re-build, not a diff — fine for dashboard cadences
|
|
40
|
-
* (poll, websocket, store updates). Don't use this for 60fps streaming.
|
|
41
|
-
*
|
|
42
|
-
* **Sizing.** The server and browser render the same logical viewBox. CSS
|
|
43
|
-
* fits Cartesian plots to the container and preserves text/marker sizes;
|
|
44
|
-
* maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain
|
|
45
|
-
* their aspect ratio. No measurement
|
|
46
|
-
* or hydration redraw is needed. The caller sizes the wrapper, for example
|
|
47
|
-
* `style={{ height: "14rem" }}`. State timelines derive their default height
|
|
48
|
-
* from the row count and legend via `stateTimelineHeight()`.
|
|
49
|
-
*
|
|
50
|
-
* **Why so thin.** The props are a discriminated union over each
|
|
51
|
-
* registered core chart renderer — `kind: "line"` brings in exactly the params
|
|
52
|
-
* `charts.line` expects, `kind: "bar"` brings in `charts.bar`'s, etc.
|
|
53
|
-
* Options stay aligned with the core renderer without renaming. Every chart provides
|
|
54
|
-
* renderer-owned inspection, tooltips and optional selection by default.
|
|
55
|
-
* `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.
|
|
56
|
-
* When a core renderer gains an option, it is automatically available at every
|
|
57
|
-
* callsite.
|
|
58
|
-
*
|
|
59
|
-
* **Theming.** The core renderers use `currentColor` for axes / ticks /
|
|
60
|
-
* tick labels — set the wrapping element's `color` and everything
|
|
61
|
-
* inherits. Series colors come from `--stdlib-chart-c1..c8` CSS
|
|
62
|
-
* custom properties; override on the parent for per-chart palettes.
|
|
63
|
-
*
|
|
64
|
-
* ```tsx
|
|
65
|
-
* <Chart kind="line" style={{ height: "12rem" }}
|
|
66
|
-
* series={[{ data: points() }]}
|
|
67
|
-
* yAxis={{ format: v => `€${v}k` }} />
|
|
68
|
-
*
|
|
69
|
-
* <Chart kind="donut" style={{ height: "12rem" }} data={slices()} />
|
|
70
|
-
*
|
|
71
|
-
* <Chart kind="sparkline" style={{ width: "6rem", height: "1.5rem" }} data={trend()} />
|
|
72
|
-
*
|
|
73
|
-
* <Chart kind="map" style={{ height: "16rem" }} series={locations()} interactive />
|
|
74
|
-
* ```
|
|
75
|
-
*/
|
|
76
|
-
|
|
77
|
-
/** All registered chart kinds. */
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Per-kind props: `kind` discriminator + the exact options that
|
|
81
|
-
* `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper
|
|
82
|
-
* owns those — CSS fits a stable coordinate space to the box). Solid's
|
|
83
|
-
* component model handles discriminated unions natively, so callsites
|
|
84
|
-
* get full type safety.
|
|
85
|
-
*/
|
|
86
|
-
|
|
3
|
+
import { renderChartSvg } from "../charts/core/render";
|
|
4
|
+
import { renderChartRoot } from "./ChartRoot";
|
|
87
5
|
export { chartRenderHeight, renderChartSvg } from "../charts/core/render";
|
|
88
|
-
|
|
89
|
-
/** Empty-data short-circuit. Kept per-kind because each renderer's payload
|
|
90
|
-
* key differs (series vs data vs groups). We're conservative: only
|
|
91
|
-
* block on truly empty inputs; partially-filled series get rendered
|
|
92
|
-
* as-is and the core handles the gaps. */
|
|
93
|
-
const isEmpty = props => {
|
|
94
|
-
if (props.kind === "area") return !props.x.length || !props.series.length || props.x.every((_, i) => props.series.some(s => s.data[i] === null) || props.normalize && props.series.every(s => s.data[i] === 0));
|
|
95
|
-
if (props.kind === "line" || props.kind === "scatter") {
|
|
96
|
-
return !props.series?.length || props.series.every(s => !s.data.length);
|
|
97
|
-
}
|
|
98
|
-
if (props.kind === "bar" || props.kind === "donut" || props.kind === "pie") {
|
|
99
|
-
return !props.data?.length;
|
|
100
|
-
}
|
|
101
|
-
if (props.kind === "histogram" || props.kind === "sparkline") {
|
|
102
|
-
return !props.data?.length;
|
|
103
|
-
}
|
|
104
|
-
if (props.kind === "boxplot") {
|
|
105
|
-
return !props.groups?.length;
|
|
106
|
-
}
|
|
107
|
-
if (props.kind === "stateTimeline") {
|
|
108
|
-
return !props.rows?.length || props.rows.every(row => !row.intervals.length);
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
};
|
|
112
|
-
const ChartRoot = props => {
|
|
113
|
-
const [, drawingProps] = splitProps(props, ["class", "style", "labels", "interactive", "selected", "onSelect", "tooltip", "cursor"]);
|
|
114
|
-
const messages = useUiMessages();
|
|
115
|
-
const chartMessages = useChartMessages();
|
|
116
|
-
const viewportMessages = useViewportMessages();
|
|
117
|
-
const locale = useLocale();
|
|
118
|
-
let containerRef;
|
|
119
|
-
let chartTooltipRef;
|
|
120
|
-
let lineAnchorRef;
|
|
121
|
-
// One deterministic coordinate space on the server and client. CSS fits the
|
|
122
|
-
// SVG to its box; hydration must never replace it with measured geometry.
|
|
123
|
-
const calendar = () => props.kind === "heatmap" && props.layout === "calendar" ? calendarLayout({
|
|
124
|
-
...props,
|
|
125
|
-
locale: props.locale ?? locale()
|
|
126
|
-
}) : undefined;
|
|
127
|
-
const size = () => ({
|
|
128
|
-
width: calendar()?.width ?? 480,
|
|
129
|
-
height: chartRenderHeight(props)
|
|
130
|
-
});
|
|
131
|
-
const topLegend = () => props.kind === "area" ? props.legend !== false : props.kind === "line" && props.legend === true && props.legendPlacement === "top-start";
|
|
132
|
-
const legendSeries = () => props.kind === "line" || props.kind === "area" ? props.series : [];
|
|
133
|
-
const legendValue = index => {
|
|
134
|
-
if (props.kind !== "area") return "";
|
|
135
|
-
const last = props.x.length - 1;
|
|
136
|
-
const amount = props.series[index]?.data[last];
|
|
137
|
-
const values = props.series.map(s => s.data[last]);
|
|
138
|
-
const total = values.reduce((sum, value) => sum + (value ?? 0), 0);
|
|
139
|
-
if (amount == null || values.some(v => v == null) || props.normalize && total === 0) return "—";
|
|
140
|
-
return props.normalize ? new Intl.NumberFormat(locale(), {
|
|
141
|
-
style: "percent",
|
|
142
|
-
minimumFractionDigits: 1,
|
|
143
|
-
maximumFractionDigits: 1
|
|
144
|
-
}).format(amount / total) : props.format?.(amount) ?? new Intl.NumberFormat(locale(), {
|
|
145
|
-
maximumFractionDigits: 2
|
|
146
|
-
}).format(amount);
|
|
147
|
-
};
|
|
148
|
-
const dimensions = () => containerRef?.getBoundingClientRect() ?? size();
|
|
149
|
-
const initialMapViewport = props.kind === "map" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;
|
|
150
|
-
const [mapViewport, setMapViewport] = createSignal(initialMapViewport);
|
|
151
|
-
const initialTimelineViewport = props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
|
|
152
|
-
const [timelineViewport, setTimelineViewport] = createSignal(initialTimelineViewport);
|
|
153
|
-
const [dragging, setDragging] = createSignal(false);
|
|
154
|
-
const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;
|
|
155
|
-
let timelineViewportLocallyChanged = false;
|
|
156
|
-
let drag;
|
|
157
|
-
let timelineDrag;
|
|
158
|
-
let pointerFrame;
|
|
159
|
-
let pendingPointer;
|
|
160
|
-
const interactiveMap = () => props.kind === "map" && props.interactive === true;
|
|
161
|
-
const interactiveTimeline = () => props.kind === "stateTimeline" && props.interactive === true;
|
|
162
|
-
const draggable = () => interactiveMap() || interactiveTimeline();
|
|
163
|
-
const labels = () => props.labels ?? {};
|
|
164
|
-
const accessibleName = () => {
|
|
165
|
-
const override = props.kind === "map" ? labels().interactiveMap : props.kind === "stateTimeline" ? labels().interactiveTimeline : props.kind === "line" ? labels().interactiveLine : labels().interactiveChart;
|
|
166
|
-
const title = "title" in props && typeof props.title === "string" && props.title.trim() ? props.title : undefined;
|
|
167
|
-
const valueLabel = (props.kind === "stat" || props.kind === "gauge") && props.label?.trim() ? props.label : undefined;
|
|
168
|
-
const fallback = props.kind === "map" ? chartMessages().interactiveMap : props.kind === "stateTimeline" ? chartMessages().interactiveTimeline : props.kind === "line" ? chartMessages().interactiveLineChart : chartMessages().interactiveChart;
|
|
169
|
-
return override ?? title ?? valueLabel ?? fallback;
|
|
170
|
-
};
|
|
171
|
-
const timelineFullDomain = () => props.kind === "stateTimeline" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];
|
|
172
|
-
createEffect(() => {
|
|
173
|
-
if (props.kind === "map") {
|
|
174
|
-
setMapViewport(normalizeMapViewport(props.viewport));
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
createEffect(() => {
|
|
178
|
-
if (props.kind === "stateTimeline" && !timelineViewportLocallyChanged) {
|
|
179
|
-
setTimelineViewport(timelineFullDomain());
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
const updateTimelineViewport = update => {
|
|
183
|
-
timelineViewportLocallyChanged = true;
|
|
184
|
-
setTimelineViewport(update);
|
|
185
|
-
};
|
|
186
|
-
const mapDimensions = () => {
|
|
187
|
-
const viewportElement = containerRef?.querySelector(".stdlib-chart-map-viewport");
|
|
188
|
-
const matrix = viewportElement?.getScreenCTM?.();
|
|
189
|
-
const box = viewportElement?.viewBox?.baseVal;
|
|
190
|
-
if (matrix && box?.width && box.height) {
|
|
191
|
-
return {
|
|
192
|
-
width: box.width * Math.hypot(matrix.a, matrix.b),
|
|
193
|
-
height: box.height * Math.hypot(matrix.c, matrix.d)
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
const rect = viewportElement?.getBoundingClientRect();
|
|
197
|
-
if (rect && rect.width > 0 && rect.height > 0) {
|
|
198
|
-
return {
|
|
199
|
-
width: rect.width,
|
|
200
|
-
height: rect.height
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
return dimensions();
|
|
204
|
-
};
|
|
205
|
-
const zoom = delta => {
|
|
206
|
-
closeChartTooltip();
|
|
207
|
-
if (interactiveMap()) {
|
|
208
|
-
setMapViewport(current => zoomMapViewport(current, delta, props.kind === "map" ? props.zoomFocus : undefined));
|
|
209
|
-
} else if (interactiveTimeline()) {
|
|
210
|
-
updateTimelineViewport(current => zoomStateTimelineViewport(current, timelineFullDomain(), delta));
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
const reset = () => {
|
|
214
|
-
closeChartTooltip();
|
|
215
|
-
if (interactiveMap() && props.kind === "map") {
|
|
216
|
-
setMapViewport(normalizeMapViewport(props.viewport));
|
|
217
|
-
}
|
|
218
|
-
if (interactiveTimeline()) {
|
|
219
|
-
timelineViewportLocallyChanged = false;
|
|
220
|
-
setTimelineViewport(timelineFullDomain());
|
|
221
|
-
}
|
|
222
|
-
};
|
|
223
|
-
const handlePointerDown = event => {
|
|
224
|
-
inspection.down(event);
|
|
225
|
-
if (!draggable() || event.button !== 0 || event.target.closest("button, a")) {
|
|
226
|
-
return;
|
|
227
|
-
}
|
|
228
|
-
closeChartTooltip();
|
|
229
|
-
// The pointer's own pointerup or pointercancel ends the hold.
|
|
230
|
-
suppressTextSelection(event.pointerId);
|
|
231
|
-
if (interactiveTimeline()) {
|
|
232
|
-
timelineDrag = {
|
|
233
|
-
pointerId: event.pointerId,
|
|
234
|
-
x: event.clientX,
|
|
235
|
-
width: Math.max(1, event.currentTarget.getBoundingClientRect().width),
|
|
236
|
-
viewport: timelineViewport()
|
|
237
|
-
};
|
|
238
|
-
event.currentTarget.setPointerCapture(event.pointerId);
|
|
239
|
-
setDragging(true);
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
const dimensions = mapDimensions();
|
|
243
|
-
drag = {
|
|
244
|
-
pointerId: event.pointerId,
|
|
245
|
-
x: event.clientX,
|
|
246
|
-
y: event.clientY,
|
|
247
|
-
width: dimensions.width,
|
|
248
|
-
height: dimensions.height,
|
|
249
|
-
viewport: mapViewport()
|
|
250
|
-
};
|
|
251
|
-
event.currentTarget.setPointerCapture(event.pointerId);
|
|
252
|
-
setDragging(true);
|
|
253
|
-
};
|
|
254
|
-
const flushPointerMove = () => {
|
|
255
|
-
if (pointerFrame !== undefined) {
|
|
256
|
-
cancelAnimationFrame(pointerFrame);
|
|
257
|
-
pointerFrame = undefined;
|
|
258
|
-
}
|
|
259
|
-
const sample = pendingPointer;
|
|
260
|
-
pendingPointer = undefined;
|
|
261
|
-
if (!sample) return;
|
|
262
|
-
const start = timelineDrag ?? drag;
|
|
263
|
-
if (start && Math.hypot(sample.clientX - start.x, sample.clientY - ("y" in start ? start.y : sample.clientY)) <= 6) return;
|
|
264
|
-
const activeTimelineDrag = timelineDrag;
|
|
265
|
-
if (activeTimelineDrag?.pointerId === sample.pointerId) {
|
|
266
|
-
updateTimelineViewport(() => panStateTimelineViewport(activeTimelineDrag.viewport, timelineFullDomain(), sample.clientX - activeTimelineDrag.x, activeTimelineDrag.width));
|
|
267
|
-
return;
|
|
268
|
-
}
|
|
269
|
-
if (!drag || drag.pointerId !== sample.pointerId) return;
|
|
270
|
-
setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));
|
|
271
|
-
};
|
|
272
|
-
const handlePointerMove = event => {
|
|
273
|
-
inspection.move(event);
|
|
274
|
-
if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;
|
|
275
|
-
pendingPointer = {
|
|
276
|
-
pointerId: event.pointerId,
|
|
277
|
-
clientX: event.clientX,
|
|
278
|
-
clientY: event.clientY
|
|
279
|
-
};
|
|
280
|
-
if (pointerFrame !== undefined) return;
|
|
281
|
-
pointerFrame = requestAnimationFrame(flushPointerMove);
|
|
282
|
-
};
|
|
283
|
-
const stopDragging = event => {
|
|
284
|
-
inspection.up();
|
|
285
|
-
if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();
|
|
286
|
-
if (timelineDrag?.pointerId === event.pointerId) {
|
|
287
|
-
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
288
|
-
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
289
|
-
}
|
|
290
|
-
timelineDrag = undefined;
|
|
291
|
-
setDragging(false);
|
|
292
|
-
return;
|
|
293
|
-
}
|
|
294
|
-
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
295
|
-
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
296
|
-
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
297
|
-
}
|
|
298
|
-
drag = undefined;
|
|
299
|
-
setDragging(false);
|
|
300
|
-
};
|
|
301
|
-
const handleWheel = event => {
|
|
302
|
-
if (interactiveMap() && (event.ctrlKey || event.metaKey)) {
|
|
303
|
-
event.preventDefault();
|
|
304
|
-
zoom(event.deltaY < 0 ? 1 : -1);
|
|
305
|
-
return;
|
|
306
|
-
}
|
|
307
|
-
if (!interactiveTimeline()) return;
|
|
308
|
-
if (event.ctrlKey || event.metaKey) {
|
|
309
|
-
event.preventDefault();
|
|
310
|
-
const rect = event.currentTarget.getBoundingClientRect();
|
|
311
|
-
const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;
|
|
312
|
-
updateTimelineViewport(current => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));
|
|
313
|
-
} else if (event.shiftKey) {
|
|
314
|
-
event.preventDefault();
|
|
315
|
-
updateTimelineViewport(current => panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width));
|
|
316
|
-
}
|
|
317
|
-
};
|
|
318
|
-
const handleKeyDown = event => {
|
|
319
|
-
if (inspection.key(event)) return;
|
|
320
|
-
if (!draggable() || event.target !== containerRef) return;
|
|
321
|
-
if (event.key === "+" || event.key === "=") {
|
|
322
|
-
event.preventDefault();
|
|
323
|
-
zoom(1);
|
|
324
|
-
return;
|
|
325
|
-
}
|
|
326
|
-
if (event.key === "-" || event.key === "_") {
|
|
327
|
-
event.preventDefault();
|
|
328
|
-
zoom(-1);
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
if (event.key === "0" || event.key === "Home") {
|
|
332
|
-
event.preventDefault();
|
|
333
|
-
reset();
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
if (interactiveTimeline() && (event.key === "ArrowLeft" || event.key === "ArrowRight")) {
|
|
337
|
-
event.preventDefault();
|
|
338
|
-
updateTimelineViewport(current => panStateTimelineViewport(current, timelineFullDomain(), event.key === "ArrowLeft" ? 80 : -80, event.currentTarget.getBoundingClientRect().width));
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
const delta = {
|
|
342
|
-
ArrowLeft: [40, 0],
|
|
343
|
-
ArrowRight: [-40, 0],
|
|
344
|
-
ArrowUp: [0, 40],
|
|
345
|
-
ArrowDown: [0, -40]
|
|
346
|
-
}[event.key];
|
|
347
|
-
if (!delta) return;
|
|
348
|
-
event.preventDefault();
|
|
349
|
-
const dimensions = mapDimensions();
|
|
350
|
-
setMapViewport(current => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));
|
|
351
|
-
};
|
|
352
|
-
const inspection = createChartInspection({
|
|
353
|
-
container: () => containerRef,
|
|
354
|
-
locale,
|
|
355
|
-
cursor: () => props.cursor,
|
|
356
|
-
tooltip: () => chartTooltipRef,
|
|
357
|
-
anchor: () => lineAnchorRef,
|
|
358
|
-
kind: () => props.kind,
|
|
359
|
-
nav: () => props.kind === "heatmap" && props.layout === "calendar" ? calendarInspectionNavigation : undefined,
|
|
360
|
-
enabled: () => !isEmpty(props),
|
|
361
|
-
select: selection => props.onSelect?.(selection),
|
|
362
|
-
format: selection => {
|
|
363
|
-
if (props.tooltip) return props.tooltip(selection);
|
|
364
|
-
const fields = props.kind === "heatmap" && props.layout === "calendar" ? resolveChartMessages(props.locale ?? locale()).chartFields : chartMessages().chartFields;
|
|
365
|
-
if (selection.kind === "area" && props.kind === "area") {
|
|
366
|
-
const amount = selection.datum.values.find(f => f.key === "value");
|
|
367
|
-
const share = selection.datum.values.find(f => f.key === "percent");
|
|
368
|
-
return {
|
|
369
|
-
title: selection.datum.values.find(f => f.key === "x")?.formatted ?? "",
|
|
370
|
-
rows: [{
|
|
371
|
-
label: selection.datum.label ?? chartMessages().series,
|
|
372
|
-
value: `${share ? `${share.formatted} · ` : ""}${amount.formatted}`
|
|
373
|
-
}]
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
const format = new Intl.NumberFormat(locale(), {
|
|
377
|
-
maximumFractionDigits: 6
|
|
378
|
-
});
|
|
379
|
-
return {
|
|
380
|
-
title: selection.datum.label ?? (selection.datum.seriesIndex !== undefined ? `${labels().series ?? chartMessages().series} ${selection.datum.seriesIndex + 1}` : undefined),
|
|
381
|
-
rows: selection.datum.values.map(field => ({
|
|
382
|
-
label: props.kind === "heatmap" && props.layout === "calendar" && field.key === "value" && props.label ? props.label : selection.kind === "line" && field.key === "y" ? selection.datum.label ?? labels().series ?? chartMessages().series : fields({
|
|
383
|
-
key: field.key
|
|
384
|
-
}),
|
|
385
|
-
value: field.formatted ?? (field.key === "upperInclusive" ? field.value === "true" ? messages().yes : messages().no : typeof field.value === "number" ? `${format.format(field.value)}${field.key === "percent" ? "%" : ""}` : field.value)
|
|
386
|
-
}))
|
|
387
|
-
};
|
|
388
|
-
}
|
|
389
|
-
});
|
|
390
|
-
const closeChartTooltip = () => inspection.close();
|
|
391
|
-
const svgMarkup = createMemo(() => renderChartSvg(props.kind === "heatmap" && props.layout === "calendar" ? {
|
|
392
|
-
...props,
|
|
393
|
-
locale: props.locale ?? locale()
|
|
394
|
-
} : drawingProps, size().width, size().height, interactiveMap() ? mapViewport() : undefined, interactiveTimeline() ? timelineViewport() : undefined, locale()));
|
|
395
|
-
createEffect(() => {
|
|
396
|
-
svgMarkup();
|
|
397
|
-
inspection.invalidate();
|
|
398
|
-
untrack(() => inspection.selectDatum(props.selected));
|
|
399
|
-
});
|
|
400
|
-
createEffect(() => inspection.selectDatum(props.selected));
|
|
401
|
-
onCleanup(() => {
|
|
402
|
-
inspection.close();
|
|
403
|
-
if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);
|
|
404
|
-
pointerFrame = undefined;
|
|
405
|
-
pendingPointer = undefined;
|
|
406
|
-
});
|
|
407
|
-
onMount(() => {
|
|
408
|
-
if (!containerRef) return;
|
|
409
|
-
if (props.kind === "heatmap" && props.layout === "calendar") onCleanup(mountCalendarScroll(containerRef));
|
|
410
|
-
onCleanup(closeChartInspectionOnOutside({
|
|
411
|
-
container: () => containerRef,
|
|
412
|
-
tooltip: () => chartTooltipRef,
|
|
413
|
-
close: closeChartTooltip,
|
|
414
|
-
keepScroll: () => props.kind === "heatmap" && props.layout === "calendar"
|
|
415
|
-
}));
|
|
416
|
-
});
|
|
417
|
-
const chartStyle = () => props.style ?? (props.kind === "stateTimeline" ? {
|
|
418
|
-
height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`
|
|
419
|
-
} : undefined);
|
|
420
|
-
const control = (label, shortcut, icon, action) => _$createComponent(IconButton, {
|
|
421
|
-
variant: "secondary",
|
|
422
|
-
label: label,
|
|
423
|
-
tooltip: `${label} (${shortcut})`,
|
|
424
|
-
onClick: action,
|
|
425
|
-
get children() {
|
|
426
|
-
return _$ssr(_tmpl$, `ti ${_$escape(icon, true)}`);
|
|
427
|
-
}
|
|
428
|
-
});
|
|
429
|
-
return _$createComponent(Show, {
|
|
430
|
-
get when() {
|
|
431
|
-
return !isEmpty(props);
|
|
432
|
-
},
|
|
433
|
-
get fallback() {
|
|
434
|
-
return _$ssr(_tmpl$5, `k2b-chart k2b-chart__empty ${_$escape(props.class ?? "", true)}`, _$ssrStyle(chartStyle()), _$escape(labels().empty ?? messages().noData));
|
|
435
|
-
},
|
|
436
|
-
get children() {
|
|
437
|
-
return _$ssr(_tmpl$4, `k2b-chart ${_$escape(props.class ?? "", true)}`, _$ssrAttribute("data-chart-kind", _$escape(props.kind, true), false) + _$ssrAttribute("data-legend-placement", topLegend() ? "top-start" : _$escape(undefined, true), false) + _$ssrAttribute("data-drag", draggable() ? dragging() ? "active" : "idle" : _$escape(undefined, true), false) + _$ssrAttribute("data-crosshair", !draggable() && props.kind === "line" ? "true" : _$escape(undefined, true), false), _$ssrStyle(chartStyle()), _$ssrAttribute("aria-label", _$escape(accessibleName(), true), false) + _$ssrAttribute("aria-description", accessibleName() !== chartMessages().interactiveChart ? _$escape(chartMessages().interactiveChart, true) : _$escape(undefined, true), false), _$escape(_$createComponent(Show, {
|
|
438
|
-
get when() {
|
|
439
|
-
return topLegend();
|
|
440
|
-
},
|
|
441
|
-
get children() {
|
|
442
|
-
return _$ssr(_tmpl$2, _$ssrAttribute("aria-label", _$escape(chartMessages().chartLegend, true), false), _$escape(_$createComponent(For, {
|
|
443
|
-
get each() {
|
|
444
|
-
return legendSeries();
|
|
445
|
-
},
|
|
446
|
-
children: (series, index) => _$ssr(_tmpl$7, `stdlib-chart k2b-chart__legend-swatch ${props.kind === "line" ? _$escape(props.className ?? "", true) : ""}`, `stdlib-chart-series-${_$escape(index(), true) % 8}`, `var(--stdlib-chart-c${_$escape(index(), true) % 8 + 1}, ${_$escape(["#2563eb", "#16a34a", "#d97706", "#dc2626", "#a855f7", "#0891b2", "#db2777", "#65a30d"][index() % 8], true)})`, series.label && series.label.length > 0 ? _$escape(series.label) : `${_$escape(chartMessages().series)} ${_$escape(index()) + 1}`, _$escape(_$createComponent(Show, {
|
|
447
|
-
get when() {
|
|
448
|
-
return props.kind === "area";
|
|
449
|
-
},
|
|
450
|
-
get children() {
|
|
451
|
-
return _$ssr(_tmpl$6, _$ssrAttribute("data-series-index", _$escape(index(), true), false) + _$ssrAttribute("data-field", props.kind === "area" && props.normalize ? "percent" : "value", false) + _$ssrAttribute("data-default", _$escape(legendValue(index()), true), false), _$escape(legendValue(index())));
|
|
452
|
-
}
|
|
453
|
-
})))
|
|
454
|
-
})));
|
|
455
|
-
}
|
|
456
|
-
})), _$ssrAttribute("data-stretch", !calendar() && !preservesAspectRatio(props.kind) ? "true" : _$escape(undefined, true), false), _$ssrStyleProperty("min-width:", calendar() ? `${_$escape(calendar().minWidth, true)}px` : _$escape(undefined, true)) + _$ssrStyleProperty(";--k2b-chart-width:", `${_$escape(size().width, true)}px`) + _$ssrStyleProperty(";--k2b-chart-height:", `${_$escape(size().height, true)}px`) + _$ssrStyleProperty(";aspect-ratio:", `${_$escape(size().width, true)} / ${_$escape(size().height, true)}`), isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup(), _$ssrAttribute("id", _$escape(chartTooltipId, true), false), _$escape(_$createComponent(Show, {
|
|
457
|
-
get when() {
|
|
458
|
-
return draggable();
|
|
459
|
-
},
|
|
460
|
-
get children() {
|
|
461
|
-
return _$ssr(_tmpl$3, _$escape(control(labels().zoomIn ?? viewportMessages().zoomIn, "+", "ti-plus", () => zoom(1))), _$escape(control(labels().zoomOut ?? viewportMessages().zoomOut, "-", "ti-minus", () => zoom(-1))), _$escape(control(interactiveMap() ? labels().resetMap ?? chartMessages().resetMapView : labels().resetTimeline ?? chartMessages().resetTimelineView, "0", "ti-focus-centered", reset)));
|
|
462
|
-
}
|
|
463
|
-
})));
|
|
464
|
-
}
|
|
465
|
-
});
|
|
466
|
-
};
|
|
6
|
+
const ChartRoot = props => renderChartRoot(props, renderChartSvg);
|
|
467
7
|
// Add a renderer to charts/core/registry.ts; its key defines the namespace member and discriminator.
|
|
468
8
|
// Both entry styles share ChartRoot, preserving the same owner, markup and reactive props.
|
|
469
9
|
const chartComponent = kind => props =>
|
|
@@ -471,12 +11,15 @@ const chartComponent = kind => props =>
|
|
|
471
11
|
ChartRoot(mergeProps(props, {
|
|
472
12
|
kind
|
|
473
13
|
}));
|
|
474
|
-
const
|
|
475
|
-
const
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
})
|
|
14
|
+
const createChart = () => {
|
|
15
|
+
const components = Object.fromEntries(Object.entries(chartKinds).map(([name, kind]) => [name, chartComponent(kind)]));
|
|
16
|
+
return Object.assign(ChartRoot, components, {
|
|
17
|
+
Calendar: props => ChartRoot(mergeProps(props, {
|
|
18
|
+
kind: "heatmap",
|
|
19
|
+
layout: "calendar"
|
|
20
|
+
}))
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
const Chart = /* @__PURE__ */createChart();
|
|
481
24
|
export default Chart;
|
|
482
25
|
//# sourceMappingURL=Chart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["content/Chart.tsx"],"sourcesContent":["import type { JSX } from \"solid-js\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n untrack,\n} from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { IconButton } from \"../actions/Button\";\nimport type { MapViewport } from \"../charts/core\";\nimport { calendarLayout } from \"../charts/core/calendar\";\nimport { chartKinds } from \"../charts/core/registry\";\nimport { type ChartDrawingOptions, chartRenderHeight, preservesAspectRatio, renderChartSvg } from \"../charts/core/render\";\nimport { suppressTextSelection } from \"../internal/text-selection\";\nimport { useLocale } from \"../intl/locale\";\nimport { useUiMessages } from \"../intl/messages\";\nimport { calendarInspectionNavigation, mountCalendarScroll } from \"./chart-calendar\";\nimport type { ChartCursor } from \"./chart-cursor\";\nimport { createChartInspection } from \"./chart-inspection\";\nimport {\n type ChartDatumRef,\n type ChartKind,\n type ChartSelection,\n type ChartTooltipFormatter,\n closeChartInspectionOnOutside,\n} from \"./chart-inspection-core\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport, panMapViewport, zoomMapViewport } from \"./chart-map-viewport\";\nimport { resolveChartMessages, useChartMessages } from \"./chart-messages\";\nimport {\n panStateTimelineViewport,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n zoomStateTimelineViewport,\n} from \"./chart-state-timeline\";\nimport { selectedChartSvg } from \"./chart-svg\";\nimport { useViewportMessages } from \"./viewport-messages\";\n\n/**\n * Chart — Solid interaction and sizing around the portable UI chart core.\n *\n * **Live-update story.** `charts.<kind>(opts)` returns an SVG string;\n * Solid's `innerHTML` is reactive, so any time a prop (signal, store\n * slice, derived value) changes, the SVG re-renders. No manual\n * subscription, no imperative DOM patching. Trade-off: every change\n * is a full SVG re-build, not a diff — fine for dashboard cadences\n * (poll, websocket, store updates). Don't use this for 60fps streaming.\n *\n * **Sizing.** The server and browser render the same logical viewBox. CSS\n * fits Cartesian plots to the container and preserves text/marker sizes;\n * maps fit the whole world and zoom uniformly across the full plot; pies, donuts and gauges retain\n * their aspect ratio. No measurement\n * or hydration redraw is needed. The caller sizes the wrapper, for example\n * `style={{ height: \"14rem\" }}`. State timelines derive their default height\n * from the row count and legend via `stateTimelineHeight()`.\n *\n * **Why so thin.** The props are a discriminated union over each\n * registered core chart renderer — `kind: \"line\"` brings in exactly the params\n * `charts.line` expects, `kind: \"bar\"` brings in `charts.bar`'s, etc.\n * Options stay aligned with the core renderer without renaming. Every chart provides\n * renderer-owned inspection, tooltips and optional selection by default.\n * `interactive` adds bounded pan / zoom and reset controls to maps and state timelines.\n * When a core renderer gains an option, it is automatically available at every\n * callsite.\n *\n * **Theming.** The core renderers use `currentColor` for axes / ticks /\n * tick labels — set the wrapping element's `color` and everything\n * inherits. Series colors come from `--stdlib-chart-c1..c8` CSS\n * custom properties; override on the parent for per-chart palettes.\n *\n * ```tsx\n * <Chart kind=\"line\" style={{ height: \"12rem\" }}\n * series={[{ data: points() }]}\n * yAxis={{ format: v => `€${v}k` }} />\n *\n * <Chart kind=\"donut\" style={{ height: \"12rem\" }} data={slices()} />\n *\n * <Chart kind=\"sparkline\" style={{ width: \"6rem\", height: \"1.5rem\" }} data={trend()} />\n *\n * <Chart kind=\"map\" style={{ height: \"16rem\" }} series={locations()} interactive />\n * ```\n */\n\n/** All registered chart kinds. */\nexport type { ChartKind } from \"./chart-inspection-core\";\n\nexport type ChartLabels = Partial<{\n empty: string;\n series: string;\n interactiveMap: string;\n interactiveTimeline: string;\n interactiveLine: string;\n interactiveChart: string;\n zoomIn: string;\n zoomOut: string;\n resetMap: string;\n resetTimeline: string;\n}>;\n\n/**\n * Per-kind props: `kind` discriminator + the exact options that\n * `charts.<kind>` accepts, **minus** `width` / `height` (the wrapper\n * owns those — CSS fits a stable coordinate space to the box). Solid's\n * component model handles discriminated unions natively, so callsites\n * get full type safety.\n */\nexport type ChartProps = {\n [K in ChartKind]: Extract<ChartDrawingOptions, { kind: K }> & {\n class?: string;\n style?: JSX.CSSProperties | string;\n labels?: ChartLabels;\n /**\n * Navigation for maps and state timelines: pan, zoom and reset controls.\n * Arrows pan; Alt+arrows inspect. Every chart shows tooltips and keyboard\n * inspection without this prop.\n */\n interactive?: boolean;\n onSelect?: (selection: ChartSelection) => void;\n /** Controlled highlight; indices belong to this exact input snapshot. */\n selected?: ChartDatumRef | null;\n /** Customize the always-on tooltip with a title and labeled text rows. */\n tooltip?: ChartTooltipFormatter;\n /** Optional shared X cursor for line charts. */\n cursor?: ChartCursor;\n };\n}[ChartKind];\nexport { type ChartRenderOptions, chartRenderHeight, renderChartSvg } from \"../charts/core/render\";\n\n/** Empty-data short-circuit. Kept per-kind because each renderer's payload\n * key differs (series vs data vs groups). We're conservative: only\n * block on truly empty inputs; partially-filled series get rendered\n * as-is and the core handles the gaps. */\nconst isEmpty = (props: ChartProps): boolean => {\n if (props.kind === \"area\")\n return (\n !props.x.length ||\n !props.series.length ||\n props.x.every(\n (_, i) => props.series.some((s) => s.data[i] === null) || (props.normalize && props.series.every((s) => s.data[i] === 0)),\n )\n );\n if (props.kind === \"line\" || props.kind === \"scatter\") {\n return !props.series?.length || props.series.every((s) => !s.data.length);\n }\n if (props.kind === \"bar\" || props.kind === \"donut\" || props.kind === \"pie\") {\n return !props.data?.length;\n }\n if (props.kind === \"histogram\" || props.kind === \"sparkline\") {\n return !props.data?.length;\n }\n if (props.kind === \"boxplot\") {\n return !props.groups?.length;\n }\n if (props.kind === \"stateTimeline\") {\n return !props.rows?.length || props.rows.every((row) => !row.intervals.length);\n }\n return false;\n};\n\nconst ChartRoot = (props: ChartProps): JSX.Element => {\n const [, drawingProps] = splitProps(props, [\"class\", \"style\", \"labels\", \"interactive\", \"selected\", \"onSelect\", \"tooltip\", \"cursor\"]);\n const messages = useUiMessages();\n const chartMessages = useChartMessages();\n const viewportMessages = useViewportMessages();\n const locale = useLocale();\n let containerRef: HTMLDivElement | undefined;\n let chartTooltipRef: HTMLSpanElement | undefined;\n let lineAnchorRef: HTMLSpanElement | undefined;\n // One deterministic coordinate space on the server and client. CSS fits the\n // SVG to its box; hydration must never replace it with measured geometry.\n const calendar = () =>\n props.kind === \"heatmap\" && props.layout === \"calendar\" ? calendarLayout({ ...props, locale: props.locale ?? locale() }) : undefined;\n const size = () => ({\n width: calendar()?.width ?? 480,\n height: chartRenderHeight(props),\n });\n const topLegend = () =>\n props.kind === \"area\"\n ? props.legend !== false\n : props.kind === \"line\" && props.legend === true && props.legendPlacement === \"top-start\";\n const legendSeries = () => (props.kind === \"line\" || props.kind === \"area\" ? props.series : []);\n const legendValue = (index: number) => {\n if (props.kind !== \"area\") return \"\";\n const last = props.x.length - 1;\n const amount = props.series[index]?.data[last];\n const values = props.series.map((s) => s.data[last]);\n const total = values.reduce<number>((sum, value) => sum + (value ?? 0), 0);\n if (amount == null || values.some((v) => v == null) || (props.normalize && total === 0)) return \"—\";\n return props.normalize\n ? new Intl.NumberFormat(locale(), { style: \"percent\", minimumFractionDigits: 1, maximumFractionDigits: 1 }).format(amount / total)\n : (props.format?.(amount) ?? new Intl.NumberFormat(locale(), { maximumFractionDigits: 2 }).format(amount));\n };\n const dimensions = () => containerRef?.getBoundingClientRect() ?? size();\n const initialMapViewport = props.kind === \"map\" ? normalizeMapViewport(props.viewport) : DEFAULT_MAP_VIEWPORT;\n const [mapViewport, setMapViewport] = createSignal<MapViewport>(initialMapViewport);\n const initialTimelineViewport =\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : ([0, 1] as StateTimelineDomain);\n const [timelineViewport, setTimelineViewport] = createSignal<StateTimelineDomain>(initialTimelineViewport);\n const [dragging, setDragging] = createSignal(false);\n const chartTooltipId = `k2b-chart-tooltip-${createUniqueId()}`;\n let timelineViewportLocallyChanged = false;\n let drag:\n | {\n pointerId: number;\n x: number;\n y: number;\n width: number;\n height: number;\n viewport: MapViewport;\n }\n | undefined;\n let timelineDrag:\n | {\n pointerId: number;\n x: number;\n width: number;\n viewport: StateTimelineDomain;\n }\n | undefined;\n let pointerFrame: number | undefined;\n let pendingPointer: { pointerId: number; clientX: number; clientY: number } | undefined;\n\n const interactiveMap = () => props.kind === \"map\" && props.interactive === true;\n const interactiveTimeline = () => props.kind === \"stateTimeline\" && props.interactive === true;\n const draggable = () => interactiveMap() || interactiveTimeline();\n const labels = () => props.labels ?? {};\n const accessibleName = () => {\n const override =\n props.kind === \"map\"\n ? labels().interactiveMap\n : props.kind === \"stateTimeline\"\n ? labels().interactiveTimeline\n : props.kind === \"line\"\n ? labels().interactiveLine\n : labels().interactiveChart;\n const title = \"title\" in props && typeof props.title === \"string\" && props.title.trim() ? props.title : undefined;\n const valueLabel = (props.kind === \"stat\" || props.kind === \"gauge\") && props.label?.trim() ? props.label : undefined;\n const fallback =\n props.kind === \"map\"\n ? chartMessages().interactiveMap\n : props.kind === \"stateTimeline\"\n ? chartMessages().interactiveTimeline\n : props.kind === \"line\"\n ? chartMessages().interactiveLineChart\n : chartMessages().interactiveChart;\n return override ?? title ?? valueLabel ?? fallback;\n };\n const timelineFullDomain = (): StateTimelineDomain =>\n props.kind === \"stateTimeline\" ? stateTimelineDomain(props.rows, props.domain) : [0, 1];\n\n createEffect(() => {\n if (props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n });\n\n createEffect(() => {\n if (props.kind === \"stateTimeline\" && !timelineViewportLocallyChanged) {\n setTimelineViewport(timelineFullDomain());\n }\n });\n\n const updateTimelineViewport = (update: (current: StateTimelineDomain) => StateTimelineDomain) => {\n timelineViewportLocallyChanged = true;\n setTimelineViewport(update);\n };\n\n const mapDimensions = () => {\n const viewportElement = containerRef?.querySelector<SVGSVGElement>(\".stdlib-chart-map-viewport\");\n const matrix = viewportElement?.getScreenCTM?.();\n const box = viewportElement?.viewBox?.baseVal;\n if (matrix && box?.width && box.height) {\n return { width: box.width * Math.hypot(matrix.a, matrix.b), height: box.height * Math.hypot(matrix.c, matrix.d) };\n }\n const rect = viewportElement?.getBoundingClientRect();\n if (rect && rect.width > 0 && rect.height > 0) {\n return { width: rect.width, height: rect.height };\n }\n return dimensions();\n };\n\n const zoom = (delta: number) => {\n closeChartTooltip();\n if (interactiveMap()) {\n setMapViewport((current) => zoomMapViewport(current, delta, props.kind === \"map\" ? props.zoomFocus : undefined));\n } else if (interactiveTimeline()) {\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), delta));\n }\n };\n\n const reset = () => {\n closeChartTooltip();\n if (interactiveMap() && props.kind === \"map\") {\n setMapViewport(normalizeMapViewport(props.viewport));\n }\n if (interactiveTimeline()) {\n timelineViewportLocallyChanged = false;\n setTimelineViewport(timelineFullDomain());\n }\n };\n\n const handlePointerDown: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.down(event);\n if (!draggable() || event.button !== 0 || (event.target as Element).closest(\"button, a\")) {\n return;\n }\n closeChartTooltip();\n // The pointer's own pointerup or pointercancel ends the hold.\n suppressTextSelection(event.pointerId);\n if (interactiveTimeline()) {\n timelineDrag = {\n pointerId: event.pointerId,\n x: event.clientX,\n width: Math.max(1, event.currentTarget.getBoundingClientRect().width),\n viewport: timelineViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n return;\n }\n const dimensions = mapDimensions();\n drag = {\n pointerId: event.pointerId,\n x: event.clientX,\n y: event.clientY,\n width: dimensions.width,\n height: dimensions.height,\n viewport: mapViewport(),\n };\n event.currentTarget.setPointerCapture(event.pointerId);\n setDragging(true);\n };\n\n const flushPointerMove = () => {\n if (pointerFrame !== undefined) {\n cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n }\n const sample = pendingPointer;\n pendingPointer = undefined;\n if (!sample) return;\n const start = timelineDrag ?? drag;\n if (start && Math.hypot(sample.clientX - start.x, sample.clientY - (\"y\" in start ? start.y : sample.clientY)) <= 6) return;\n const activeTimelineDrag = timelineDrag;\n if (activeTimelineDrag?.pointerId === sample.pointerId) {\n updateTimelineViewport(() =>\n panStateTimelineViewport(\n activeTimelineDrag.viewport,\n timelineFullDomain(),\n sample.clientX - activeTimelineDrag.x,\n activeTimelineDrag.width,\n ),\n );\n return;\n }\n if (!drag || drag.pointerId !== sample.pointerId) return;\n setMapViewport(panMapViewport(drag.viewport, sample.clientX - drag.x, sample.clientY - drag.y, drag.width, drag.height));\n };\n\n const handlePointerMove: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.move(event);\n if (timelineDrag?.pointerId !== event.pointerId && drag?.pointerId !== event.pointerId) return;\n pendingPointer = { pointerId: event.pointerId, clientX: event.clientX, clientY: event.clientY };\n if (pointerFrame !== undefined) return;\n pointerFrame = requestAnimationFrame(flushPointerMove);\n };\n\n const stopDragging: JSX.EventHandlerUnion<HTMLDivElement, PointerEvent> = (event) => {\n inspection.up();\n if (pendingPointer?.pointerId === event.pointerId) flushPointerMove();\n if (timelineDrag?.pointerId === event.pointerId) {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n timelineDrag = undefined;\n setDragging(false);\n return;\n }\n if (!drag || drag.pointerId !== event.pointerId) return;\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId);\n }\n drag = undefined;\n setDragging(false);\n };\n\n const handleWheel: JSX.EventHandlerUnion<HTMLDivElement, WheelEvent> = (event) => {\n if (interactiveMap() && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n zoom(event.deltaY < 0 ? 1 : -1);\n return;\n }\n if (!interactiveTimeline()) return;\n if (event.ctrlKey || event.metaKey) {\n event.preventDefault();\n const rect = event.currentTarget.getBoundingClientRect();\n const anchor = rect.width > 0 ? (event.clientX - rect.left) / rect.width : 0.5;\n updateTimelineViewport((current) => zoomStateTimelineViewport(current, timelineFullDomain(), event.deltaY < 0 ? 1 : -1, anchor));\n } else if (event.shiftKey) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(current, timelineFullDomain(), -event.deltaY, event.currentTarget.getBoundingClientRect().width),\n );\n }\n };\n\n const handleKeyDown: JSX.EventHandlerUnion<HTMLDivElement, KeyboardEvent> = (event) => {\n if (inspection.key(event)) return;\n if (!draggable() || event.target !== containerRef) return;\n if (event.key === \"+\" || event.key === \"=\") {\n event.preventDefault();\n zoom(1);\n return;\n }\n if (event.key === \"-\" || event.key === \"_\") {\n event.preventDefault();\n zoom(-1);\n return;\n }\n if (event.key === \"0\" || event.key === \"Home\") {\n event.preventDefault();\n reset();\n return;\n }\n if (interactiveTimeline() && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\")) {\n event.preventDefault();\n updateTimelineViewport((current) =>\n panStateTimelineViewport(\n current,\n timelineFullDomain(),\n event.key === \"ArrowLeft\" ? 80 : -80,\n event.currentTarget.getBoundingClientRect().width,\n ),\n );\n return;\n }\n const delta: readonly [number, number] | undefined = {\n ArrowLeft: [40, 0],\n ArrowRight: [-40, 0],\n ArrowUp: [0, 40],\n ArrowDown: [0, -40],\n }[event.key] as readonly [number, number] | undefined;\n if (!delta) return;\n event.preventDefault();\n const dimensions = mapDimensions();\n setMapViewport((current) => panMapViewport(current, delta[0], delta[1], dimensions.width, dimensions.height));\n };\n\n const inspection = createChartInspection({\n container: () => containerRef,\n locale,\n cursor: () => props.cursor,\n tooltip: () => chartTooltipRef,\n anchor: () => lineAnchorRef,\n kind: () => props.kind,\n nav: () => (props.kind === \"heatmap\" && props.layout === \"calendar\" ? calendarInspectionNavigation : undefined),\n enabled: () => !isEmpty(props),\n select: (selection) => props.onSelect?.(selection),\n format: (selection) => {\n if (props.tooltip) return props.tooltip(selection);\n const fields =\n props.kind === \"heatmap\" && props.layout === \"calendar\"\n ? resolveChartMessages(props.locale ?? locale()).chartFields\n : chartMessages().chartFields;\n if (selection.kind === \"area\" && props.kind === \"area\") {\n const amount = selection.datum.values.find((f) => f.key === \"value\")!;\n const share = selection.datum.values.find((f) => f.key === \"percent\");\n return {\n title: selection.datum.values.find((f) => f.key === \"x\")?.formatted ?? \"\",\n rows: [\n { label: selection.datum.label ?? chartMessages().series, value: `${share ? `${share.formatted} · ` : \"\"}${amount.formatted}` },\n ],\n };\n }\n const format = new Intl.NumberFormat(locale(), { maximumFractionDigits: 6 });\n return {\n title:\n selection.datum.label ??\n (selection.datum.seriesIndex !== undefined\n ? `${labels().series ?? chartMessages().series} ${selection.datum.seriesIndex + 1}`\n : undefined),\n rows: selection.datum.values.map((field) => ({\n label:\n props.kind === \"heatmap\" && props.layout === \"calendar\" && field.key === \"value\" && props.label\n ? props.label\n : selection.kind === \"line\" && field.key === \"y\"\n ? (selection.datum.label ?? labels().series ?? chartMessages().series)\n : fields({ key: field.key }),\n value:\n field.formatted ??\n (field.key === \"upperInclusive\"\n ? field.value === \"true\"\n ? messages().yes\n : messages().no\n : typeof field.value === \"number\"\n ? `${format.format(field.value)}${field.key === \"percent\" ? \"%\" : \"\"}`\n : field.value),\n })),\n };\n },\n });\n const closeChartTooltip = () => inspection.close();\n const svgMarkup = createMemo(() =>\n renderChartSvg(\n props.kind === \"heatmap\" && props.layout === \"calendar\" ? { ...props, locale: props.locale ?? locale() } : drawingProps,\n size().width,\n size().height,\n interactiveMap() ? mapViewport() : undefined,\n interactiveTimeline() ? timelineViewport() : undefined,\n locale(),\n ),\n );\n createEffect(() => {\n svgMarkup();\n inspection.invalidate();\n untrack(() => inspection.selectDatum(props.selected));\n });\n\n createEffect(() => inspection.selectDatum(props.selected));\n\n onCleanup(() => {\n inspection.close();\n if (pointerFrame !== undefined) cancelAnimationFrame(pointerFrame);\n pointerFrame = undefined;\n pendingPointer = undefined;\n });\n\n onMount(() => {\n if (!containerRef) return;\n if (props.kind === \"heatmap\" && props.layout === \"calendar\") onCleanup(mountCalendarScroll(containerRef));\n onCleanup(\n closeChartInspectionOnOutside({\n container: () => containerRef,\n tooltip: () => chartTooltipRef,\n close: closeChartTooltip,\n keepScroll: () => props.kind === \"heatmap\" && props.layout === \"calendar\",\n }),\n );\n });\n\n const chartStyle = () =>\n props.style ??\n (props.kind === \"stateTimeline\"\n ? {\n height: `${stateTimelineHeight(props.rows.length, props.legend !== false)}px`,\n }\n : undefined);\n\n const control = (label: string, shortcut: string, icon: string, action: () => void) => (\n <IconButton variant=\"secondary\" label={label} tooltip={`${label} (${shortcut})`} onClick={action}>\n <i class={`ti ${icon}`} aria-hidden=\"true\" />\n </IconButton>\n );\n\n return (\n <Show\n when={!isEmpty(props)}\n fallback={\n <div ref={containerRef} class={`k2b-chart k2b-chart__empty ${props.class ?? \"\"}`} style={chartStyle()}>\n {labels().empty ?? messages().noData}\n </div>\n }\n >\n {/* CSS fits the server-rendered SVG to the caller's box. Only changes\n to chart data/options rebuild the SVG; resizing does not. */}\n <div\n ref={containerRef}\n class={`k2b-chart ${props.class ?? \"\"}`}\n data-chart-kind={props.kind}\n data-legend-placement={topLegend() ? \"top-start\" : undefined}\n data-drag={draggable() ? (dragging() ? \"active\" : \"idle\") : undefined}\n data-crosshair={!draggable() && props.kind === \"line\" ? \"true\" : undefined}\n data-interactive=\"true\"\n style={chartStyle()}\n role=\"group\"\n aria-label={accessibleName()}\n aria-description={accessibleName() !== chartMessages().interactiveChart ? chartMessages().interactiveChart : undefined}\n tabIndex={0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={stopDragging}\n onPointerCancel={stopDragging}\n onClick={inspection.click}\n onPointerLeave={inspection.leave}\n onFocusIn={inspection.focus}\n onFocusOut={closeChartTooltip}\n onWheel={handleWheel}\n onKeyDown={handleKeyDown}\n >\n <Show when={topLegend()}>\n <div class=\"k2b-chart__legend\" role=\"group\" aria-label={chartMessages().chartLegend} tabIndex={0}>\n <For each={legendSeries()}>\n {(series, index) => (\n <span class=\"k2b-chart__legend-item\">\n {/* Use the renderer's actual series classes/defaults, including consumer palette overrides. */}\n <svg\n class={`stdlib-chart k2b-chart__legend-swatch ${props.kind === \"line\" ? (props.className ?? \"\") : \"\"}`}\n viewBox=\"0 0 10 10\"\n width=\"10\"\n height=\"10\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"1\"\n y=\"1\"\n width=\"8\"\n height=\"8\"\n rx=\"2\"\n class={`stdlib-chart-series-${index() % 8}`}\n fill={`var(--stdlib-chart-c${(index() % 8) + 1}, ${[\"#2563eb\", \"#16a34a\", \"#d97706\", \"#dc2626\", \"#a855f7\", \"#0891b2\", \"#db2777\", \"#65a30d\"][index() % 8]})`}\n stroke=\"none\"\n />\n </svg>\n <span>{series.label && series.label.length > 0 ? series.label : `${chartMessages().series} ${index() + 1}`}</span>\n <Show when={props.kind === \"area\"}>\n <b\n data-chart-legend-value\n data-series-index={index()}\n data-field={props.kind === \"area\" && props.normalize ? \"percent\" : \"value\"}\n data-default={legendValue(index())}\n >\n {legendValue(index())}\n </b>\n </Show>\n </span>\n )}\n </For>\n </div>\n </Show>\n <div\n class=\"k2b-chart__svg\"\n data-stretch={!calendar() && !preservesAspectRatio(props.kind) ? \"true\" : undefined}\n style={{\n \"min-width\": calendar() ? `${calendar()!.minWidth}px` : undefined,\n \"--k2b-chart-width\": `${size().width}px`,\n \"--k2b-chart-height\": `${size().height}px`,\n \"aspect-ratio\": `${size().width} / ${size().height}`,\n }}\n innerHTML={isServer ? selectedChartSvg(svgMarkup(), props.selected) : svgMarkup()}\n />\n <span ref={lineAnchorRef} class=\"k2b-chart__anchor\" aria-hidden=\"true\" />\n <span\n id={chartTooltipId}\n ref={chartTooltipRef}\n role=\"tooltip\"\n popover=\"manual\"\n data-instant=\"true\"\n class=\"k2b-tooltip k2b-chart__tooltip\"\n />\n <Show when={draggable()}>\n <div class=\"k2b-chart__controls\">\n {control(labels().zoomIn ?? viewportMessages().zoomIn, \"+\", \"ti-plus\", () => zoom(1))}\n {control(labels().zoomOut ?? viewportMessages().zoomOut, \"-\", \"ti-minus\", () => zoom(-1))}\n {control(\n interactiveMap()\n ? (labels().resetMap ?? chartMessages().resetMapView)\n : (labels().resetTimeline ?? chartMessages().resetTimelineView),\n \"0\",\n \"ti-focus-centered\",\n reset,\n )}\n </div>\n </Show>\n </div>\n </Show>\n );\n};\n\ntype KindProps<T> = T extends unknown ? Omit<T, \"kind\"> : never;\nexport type ChartKindProps<K extends ChartKind> = KindProps<Extract<ChartProps, { kind: K }>>;\n\ntype ChartComponents = {\n [Name in keyof typeof chartKinds]: (props: ChartKindProps<(typeof chartKinds)[Name]>) => JSX.Element;\n};\n\n// Add a renderer to charts/core/registry.ts; its key defines the namespace member and discriminator.\n// Both entry styles share ChartRoot, preserving the same owner, markup and reactive props.\nconst chartComponent =\n (kind: ChartKind) =>\n (props: Omit<ChartProps, \"kind\">): JSX.Element =>\n // Public namespace types correlate each discriminator with its options.\n ChartRoot(mergeProps(props, { kind }) as ChartProps);\nconst components = Object.fromEntries(\n Object.entries(chartKinds).map(([name, kind]) => [name, chartComponent(kind)]),\n) as unknown as ChartComponents;\nconst Chart = Object.assign(ChartRoot, components, {\n Calendar: (props: Omit<Extract<ChartProps, { kind: \"heatmap\"; layout: \"calendar\" }>, \"kind\" | \"layout\">) =>\n ChartRoot(mergeProps(props, { kind: \"heatmap\" as const, layout: \"calendar\" as const })),\n});\nexport default Chart;\n"],"mappings":";;;;;;;;;;;;;AACA,SACE,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,GAAG,EACH,UAAU,EACV,SAAS,EACT,OAAO,EACP,IAAI,EACJ,UAAU,EACV,OAAO,QACF,UAAU;AACjB,SAAS,QAAQ,QAAQ,cAAc;AACvC,SAAS,UAAU,QAAQ,mBAAmB;AAE9C,SAAS,cAAc,QAAQ,yBAAyB;AACxD,SAAS,UAAU,QAAQ,yBAAyB;AACpD,SAAmC,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,QAAQ,uBAAuB;AACzH,SAAS,qBAAqB,QAAQ,4BAA4B;AAClE,SAAS,SAAS,QAAQ,gBAAgB;AAC1C,SAAS,aAAa,QAAQ,kBAAkB;AAChD,SAAS,4BAA4B,EAAE,mBAAmB,QAAQ,kBAAkB;AAEpF,SAAS,qBAAqB,QAAQ,oBAAoB;AAC1D,SAKE,6BAA6B,QACxB,yBAAyB;AAChC,SAAS,oBAAoB,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,QAAQ,sBAAsB;AAClH,SAAS,oBAAoB,EAAE,gBAAgB,QAAQ,kBAAkB;AACzE,SACE,wBAAwB,EAExB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,QACpB,wBAAwB;AAC/B,SAAS,gBAAgB,QAAQ,aAAa;AAC9C,SAAS,mBAAmB,QAAQ,qBAAqB;;AAEzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;;AAqBA,SAAkC,iBAAiB,EAAE,cAAc,QAAQ,uBAAuB;;AAElG;AACA;AACA;AACA;AACA,MAAM,OAAO,GAAI,KAAiB,IAAc;EAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EACvB,OACE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IACf,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IACpB,KAAK,CAAC,CAAC,CAAC,KAAK,CACX,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAK,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CACzH,CAAC;EAEL,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;IACrD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAE,CAAC,IAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;EAC3E;EACA,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;IAC1E,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM;EAC5B;EACA,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;IAC5D,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM;EAC5B;EACA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM;EAC9B;EACA,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE;IAClC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAE,GAAG,IAAK,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC;EAChF;EACA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,SAAS,GAAI,KAAiB,IAAkB;EACpD,MAAM,GAAG,YAAY,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;EACpI,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC;EAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC;EACxC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC;EAC1B,IAAI,YAAwC;EAC5C,IAAI,eAA4C;EAChD,IAAI,aAA0C;EAC9C;EACA;EACA,MAAM,QAAQ,GAAG,MACf,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,GAAG,cAAc,CAAC;IAAE,GAAG,KAAK;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;EAAE,CAAC,CAAC,GAAG,SAAS;EACtI,MAAM,IAAI,GAAG,OAAO;IAClB,KAAK,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG;IAC/B,MAAM,EAAE,iBAAiB,CAAC,KAAK;EACjC,CAAC,CAAC;EACF,MAAM,SAAS,GAAG,MAChB,KAAK,CAAC,IAAI,KAAK,MAAM,GACjB,KAAK,CAAC,MAAM,KAAK,KAAK,GACtB,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,eAAe,KAAK,WAAW;EAC7F,MAAM,YAAY,GAAG,MAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAG;EAC/F,MAAM,WAAW,GAAI,KAAa,IAAK;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,OAAO,EAAE;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC,IAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAS,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,IAAI,IAAI,CAAC,IAAK,KAAK,CAAC,SAAS,IAAI,KAAK,KAAK,CAAE,EAAE,OAAO,GAAG;IACnG,OAAO,KAAK,CAAC,SAAS,GAClB,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;MAAE,KAAK,EAAE,SAAS;MAAE,qBAAqB,EAAE,CAAC;MAAE,qBAAqB,EAAE;IAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,GAC/H,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;MAAE,qBAAqB,EAAE;IAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAE;EAC9G,CAAC;EACD,MAAM,UAAU,GAAG,MAAM,YAAY,EAAE,qBAAqB,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;EACxE,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,oBAAoB;EAC7G,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,YAAY,CAAc,kBAAkB,CAAC;EACnF,MAAM,uBAAuB,GAC3B,KAAK,CAAC,IAAI,KAAK,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAI,CAAC,CAAC,EAAE,CAAC,CAAyB;EAClH,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,YAAY,CAAsB,uBAAuB,CAAC;EAC1G,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;EACnD,MAAM,cAAc,GAAG,qBAAqB,cAAc,CAAC,CAAC,EAAE;EAC9D,IAAI,8BAA8B,GAAG,KAAK;EAC1C,IAAI,IASS;EACb,IAAI,YAOS;EACb,IAAI,YAAgC;EACpC,IAAI,cAAmF;EAEvF,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;EAC/E,MAAM,mBAAmB,GAAG,MAAM,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;EAC9F,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC;EACjE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;EACvC,MAAM,cAAc,GAAG,MAAM;IAC3B,MAAM,QAAQ,GACZ,KAAK,CAAC,IAAI,KAAK,KAAK,GAChB,MAAM,CAAC,CAAC,CAAC,cAAc,GACvB,KAAK,CAAC,IAAI,KAAK,eAAe,GAC5B,MAAM,CAAC,CAAC,CAAC,mBAAmB,GAC5B,KAAK,CAAC,IAAI,KAAK,MAAM,GACnB,MAAM,CAAC,CAAC,CAAC,eAAe,GACxB,MAAM,CAAC,CAAC,CAAC,gBAAgB;IACnC,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS;IACjH,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS;IACrH,MAAM,QAAQ,GACZ,KAAK,CAAC,IAAI,KAAK,KAAK,GAChB,aAAa,CAAC,CAAC,CAAC,cAAc,GAC9B,KAAK,CAAC,IAAI,KAAK,eAAe,GAC5B,aAAa,CAAC,CAAC,CAAC,mBAAmB,GACnC,KAAK,CAAC,IAAI,KAAK,MAAM,GACnB,aAAa,CAAC,CAAC,CAAC,oBAAoB,GACpC,aAAa,CAAC,CAAC,CAAC,gBAAgB;IAC1C,OAAO,QAAQ,IAAI,KAAK,IAAI,UAAU,IAAI,QAAQ;EACpD,CAAC;EACD,MAAM,kBAAkB,GAAG,MACzB,KAAK,CAAC,IAAI,KAAK,eAAe,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;EAEzF,YAAY,CAAC,MAAM;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;MACxB,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtD;EACF,CAAC,CAAC;EAEF,YAAY,CAAC,MAAM;IACjB,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,8BAA8B,EAAE;MACrE,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3C;EACF,CAAC,CAAC;EAEF,MAAM,sBAAsB,GAAI,MAA6D,IAAK;IAChG,8BAA8B,GAAG,IAAI;IACrC,mBAAmB,CAAC,MAAM,CAAC;EAC7B,CAAC;EAED,MAAM,aAAa,GAAG,MAAM;IAC1B,MAAM,eAAe,GAAG,YAAY,EAAE,aAAa,CAAgB,4BAA4B,CAAC;IAChG,MAAM,MAAM,GAAG,eAAe,EAAE,YAAY,GAAG,CAAC;IAChD,MAAM,GAAG,GAAG,eAAe,EAAE,OAAO,EAAE,OAAO;IAC7C,IAAI,MAAM,IAAI,GAAG,EAAE,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE;MACtC,OAAO;QAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;MAAE,CAAC;IACnH;IACA,MAAM,IAAI,GAAG,eAAe,EAAE,qBAAqB,CAAC,CAAC;IACrD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;MAC7C,OAAO;QAAE,KAAK,EAAE,IAAI,CAAC,KAAK;QAAE,MAAM,EAAE,IAAI,CAAC;MAAO,CAAC;IACnD;IACA,OAAO,UAAU,CAAC,CAAC;EACrB,CAAC;EAED,MAAM,IAAI,GAAI,KAAa,IAAK;IAC9B,iBAAiB,CAAC,CAAC;IACnB,IAAI,cAAc,CAAC,CAAC,EAAE;MACpB,cAAc,CAAE,OAAO,IAAK,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAClH,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAC,EAAE;MAChC,sBAAsB,CAAE,OAAO,IAAK,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtG;EACF,CAAC;EAED,MAAM,KAAK,GAAG,MAAM;IAClB,iBAAiB,CAAC,CAAC;IACnB,IAAI,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE;MAC5C,cAAc,CAAC,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtD;IACA,IAAI,mBAAmB,CAAC,CAAC,EAAE;MACzB,8BAA8B,GAAG,KAAK;MACtC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC3C;EACF,CAAC;EAED,MAAM,iBAAsE,GAAI,KAAK,IAAK;IACxF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAK,KAAK,CAAC,MAAM,CAAa,OAAO,CAAC,WAAW,CAAC,EAAE;MACxF;IACF;IACA,iBAAiB,CAAC,CAAC;IACnB;IACA,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IACtC,IAAI,mBAAmB,CAAC,CAAC,EAAE;MACzB,YAAY,GAAG;QACb,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,CAAC,EAAE,KAAK,CAAC,OAAO;QAChB,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,QAAQ,EAAE,gBAAgB,CAAC;MAC7B,CAAC;MACD,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;MACtD,WAAW,CAAC,IAAI,CAAC;MACjB;IACF;IACA,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC;IAClC,IAAI,GAAG;MACL,SAAS,EAAE,KAAK,CAAC,SAAS;MAC1B,CAAC,EAAE,KAAK,CAAC,OAAO;MAChB,CAAC,EAAE,KAAK,CAAC,OAAO;MAChB,KAAK,EAAE,UAAU,CAAC,KAAK;MACvB,MAAM,EAAE,UAAU,CAAC,MAAM;MACzB,QAAQ,EAAE,WAAW,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC;IACtD,WAAW,CAAC,IAAI,CAAC;EACnB,CAAC;EAED,MAAM,gBAAgB,GAAG,MAAM;IAC7B,IAAI,YAAY,KAAK,SAAS,EAAE;MAC9B,oBAAoB,CAAC,YAAY,CAAC;MAClC,YAAY,GAAG,SAAS;IAC1B;IACA,MAAM,MAAM,GAAG,cAAc;IAC7B,cAAc,GAAG,SAAS;IAC1B,IAAI,CAAC,MAAM,EAAE;IACb,MAAM,KAAK,GAAG,YAAY,IAAI,IAAI;IAClC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,IAAI,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;IACpH,MAAM,kBAAkB,GAAG,YAAY;IACvC,IAAI,kBAAkB,EAAE,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;MACtD,sBAAsB,CAAC,MACrB,wBAAwB,CACtB,kBAAkB,CAAC,QAAQ,EAC3B,kBAAkB,CAAC,CAAC,EACpB,MAAM,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC,EACrC,kBAAkB,CAAC,KACrB,CACF,CAAC;MACD;IACF;IACA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;IAClD,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EAC1H,CAAC;EAED,MAAM,iBAAsE,GAAI,KAAK,IAAK;IACxF,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB,IAAI,YAAY,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE;IACxF,cAAc,GAAG;MAAE,SAAS,EAAE,KAAK,CAAC,SAAS;MAAE,OAAO,EAAE,KAAK,CAAC,OAAO;MAAE,OAAO,EAAE,KAAK,CAAC;IAAQ,CAAC;IAC/F,IAAI,YAAY,KAAK,SAAS,EAAE;IAChC,YAAY,GAAG,qBAAqB,CAAC,gBAAgB,CAAC;EACxD,CAAC;EAED,MAAM,YAAiE,GAAI,KAAK,IAAK;IACnF,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,IAAI,cAAc,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE;MAC/C,IAAI,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAC1D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;MAC5D;MACA,YAAY,GAAG,SAAS;MACxB,WAAW,CAAC,KAAK,CAAC;MAClB;IACF;IACA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,EAAE;IACjD,IAAI,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;MAC1D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5D;IACA,IAAI,GAAG,SAAS;IAChB,WAAW,CAAC,KAAK,CAAC;EACpB,CAAC;EAED,MAAM,WAA8D,GAAI,KAAK,IAAK;IAChF,IAAI,cAAc,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE;MACxD,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;MAC/B;IACF;IACA,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE;IAC5B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;MAClC,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;MACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG;MAC9E,sBAAsB,CAAE,OAAO,IAAK,yBAAyB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAClI,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;MACzB,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,sBAAsB,CAAE,OAAO,IAC7B,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAC1H,CAAC;IACH;EACF,CAAC;EAED,MAAM,aAAmE,GAAI,KAAK,IAAK;IACrF,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;IAC3B,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE;IACnD,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;MAC1C,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,CAAC,CAAC;MACP;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;MAC1C,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,IAAI,CAAC,CAAC,CAAC,CAAC;MACR;IACF;IACA,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE;MAC7C,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,KAAK,CAAC,CAAC;MACP;IACF;IACA,IAAI,mBAAmB,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,EAAE;MACtF,KAAK,CAAC,cAAc,CAAC,CAAC;MACtB,sBAAsB,CAAE,OAAO,IAC7B,wBAAwB,CACtB,OAAO,EACP,kBAAkB,CAAC,CAAC,EACpB,KAAK,CAAC,GAAG,KAAK,WAAW,GAAG,EAAE,GAAG,CAAC,EAAE,EACpC,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAC9C,CACF,CAAC;MACD;IACF;IACA,MAAM,KAA4C,GAAG;MACnD,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;MAClB,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;MACpB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;MAChB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;IACpB,CAAC,CAAC,KAAK,CAAC,GAAG,CAA0C;IACrD,IAAI,CAAC,KAAK,EAAE;IACZ,KAAK,CAAC,cAAc,CAAC,CAAC;IACtB,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC;IAClC,cAAc,CAAE,OAAO,IAAK,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;EAC/G,CAAC;EAED,MAAM,UAAU,GAAG,qBAAqB,CAAC;IACvC,SAAS,EAAE,MAAM,YAAY;IAC7B,MAAM;IACN,MAAM,EAAE,MAAM,KAAK,CAAC,MAAM;IAC1B,OAAO,EAAE,MAAM,eAAe;IAC9B,MAAM,EAAE,MAAM,aAAa;IAC3B,IAAI,EAAE,MAAM,KAAK,CAAC,IAAI;IACtB,GAAG,EAAE,MAAO,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,GAAG,4BAA4B,GAAG,SAAU;IAC/G,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9B,MAAM,EAAG,SAAS,IAAK,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC;IAClD,MAAM,EAAG,SAAS,IAAK;MACrB,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;MAClD,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,GACnD,oBAAoB,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,GAC1D,aAAa,CAAC,CAAC,CAAC,WAAW;MACjC,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACtD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,GAAG,KAAK,OAAO,CAAE;QACrE,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC;QACrE,OAAO;UACL,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAE,CAAC,IAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,SAAS,IAAI,EAAE;UACzE,IAAI,EAAE,CACJ;YAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM;YAAE,KAAK,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,CAAC,SAAS,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS;UAAG,CAAC;QAEnI,CAAC;MACH;MACA,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE;QAAE,qBAAqB,EAAE;MAAE,CAAC,CAAC;MAC5E,OAAO;QACL,KAAK,EACH,SAAS,CAAC,KAAK,CAAC,KAAK,KACpB,SAAS,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,GACtC,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,EAAE,GACjF,SAAS,CAAC;QAChB,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAE,KAAK,KAAM;UAC3C,KAAK,EACH,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,GAC3F,KAAK,CAAC,KAAK,GACX,SAAS,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,GAC3C,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,MAAM,GACnE,MAAM,CAAC;YAAE,GAAG,EAAE,KAAK,CAAC;UAAI,CAAC,CAAC;UAClC,KAAK,EACH,KAAK,CAAC,SAAS,KACd,KAAK,CAAC,GAAG,KAAK,gBAAgB,GAC3B,KAAK,CAAC,KAAK,KAAK,MAAM,GACpB,QAAQ,CAAC,CAAC,CAAC,GAAG,GACd,QAAQ,CAAC,CAAC,CAAC,EAAE,GACf,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,GAC7B,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,EAAE,EAAE,GACpE,KAAK,CAAC,KAAK;QACrB,CAAC,CAAC;MACJ,CAAC;IACH;EACF,CAAC,CAAC;EACF,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;EAClD,MAAM,SAAS,GAAG,UAAU,CAAC,MAC3B,cAAc,CACZ,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,GAAG;IAAE,GAAG,KAAK;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC;EAAE,CAAC,GAAG,YAAY,EACvH,IAAI,CAAC,CAAC,CAAC,KAAK,EACZ,IAAI,CAAC,CAAC,CAAC,MAAM,EACb,cAAc,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,SAAS,EAC5C,mBAAmB,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,SAAS,EACtD,MAAM,CAAC,CACT,CACF,CAAC;EACD,YAAY,CAAC,MAAM;IACjB,SAAS,CAAC,CAAC;IACX,UAAU,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EACvD,CAAC,CAAC;EAEF,YAAY,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;EAE1D,SAAS,CAAC,MAAM;IACd,UAAU,CAAC,KAAK,CAAC,CAAC;IAClB,IAAI,YAAY,KAAK,SAAS,EAAE,oBAAoB,CAAC,YAAY,CAAC;IAClE,YAAY,GAAG,SAAS;IACxB,cAAc,GAAG,SAAS;EAC5B,CAAC,CAAC;EAEF,OAAO,CAAC,MAAM;IACZ,IAAI,CAAC,YAAY,EAAE;IACnB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,SAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACzG,SAAS,CACP,6BAA6B,CAAC;MAC5B,SAAS,EAAE,MAAM,YAAY;MAC7B,OAAO,EAAE,MAAM,eAAe;MAC9B,KAAK,EAAE,iBAAiB;MACxB,UAAU,EAAE,MAAM,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK;IACjE,CAAC,CACH,CAAC;EACH,CAAC,CAAC;EAEF,MAAM,UAAU,GAAG,MACjB,KAAK,CAAC,KAAK,KACV,KAAK,CAAC,IAAI,KAAK,eAAe,GAC3B;IACE,MAAM,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;EAC3E,CAAC,GACD,SAAS,CAAC;EAEhB,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,QAAgB,EAAE,IAAY,EAAE,MAAkB,uBAC/E,UAAU;IAAC,OAAO;IAAa,KAAK,EAAE,KAAK;IAAE,OAAO,EAAE,GAAG,KAAK,KAAK,QAAQ,GAAG;IAAE,OAAO,EAAE,MAAM;IAAA;MAAA,qBACpF,eAAM,IAAI,SAAE;IAAA;EAAA,EAEzB;EAED,yBACG,IAAI;IAAA,IACH,IAAI;MAAA,OAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAAA;IAAA,IACrB,QAAQ;MAAA,sBACyB,uCAA8B,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,aAAS,UAAU,CAAC,CAAC,YAClG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM;IAAA;IAAA;MAAA,sBAQ/B,sBAAa,KAAK,CAAC,KAAK,IAAI,EAAE,SAAE,6CACtB,KAAK,CAAC,IAAI,0DACJ,SAAS,CAAC,CAAC,GAAG,WAAW,YAAG,SAAS,8CACjD,SAAS,CAAC,CAAC,GAAI,QAAQ,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,YAAI,SAAS,mDACrD,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,MAAM,YAAG,SAAS,4BAEnE,UAAU,CAAC,CAAC,yCAEP,cAAc,CAAC,CAAC,qDACV,cAAc,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,YAAG,aAAa,CAAC,CAAC,CAAC,gBAAgB,mBAAG,SAAS,4CAarH,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,SAAS,CAAC,CAAC;QAAA;QAAA;UAAA,4DACmC,aAAa,CAAC,CAAC,CAAC,WAAW,4CAChF,GAAG;YAAA,IAAC,IAAI;cAAA,OAAE,YAAY,CAAC,CAAC;YAAA;YAAA,UACtB,CAAC,MAAM,EAAE,KAAK,oBAIF,yCAAyC,KAAK,CAAC,IAAI,KAAK,MAAM,YAAI,KAAK,CAAC,SAAS,IAAI,EAAE,UAAI,EAAE,EAAE,EAY7F,uBAAuB,cAAK,CAAC,CAAC,UAAG,CAAC,EAAE,EACrC,uBAAwB,cAAK,CAAC,CAAC,UAAG,CAAC,GAAI,CAAC,cAAK,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,UAAG,EAIxJ,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,YAAG,MAAM,CAAC,KAAK,IAAG,YAAG,aAAa,CAAC,CAAC,CAAC,MAAM,KAAI,cAAK,CAAC,CAAC,IAAG,CAAC,EAAE,6BACzG,IAAI;cAAA,IAAC,IAAI;gBAAA,OAAE,KAAK,CAAC,IAAI,KAAK,MAAM;cAAA;cAAA;gBAAA,mEAGV,KAAK,CAAC,CAAC,+CACd,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS,GAAG,OAAO,mDAC5D,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,0BAEjC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;cAAA;YAAA;UAI5B;QAAA;MAAA,oCAMS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,YAAG,SAAS,kDAEpE,QAAQ,CAAC,CAAC,GAAG,YAAG,QAAQ,CAAC,CAAC,CAAE,QAAQ,WAAI,YAAG,SAAS,qDAC5C,YAAG,IAAI,CAAC,CAAC,CAAC,KAAK,WAAI,+CAClB,YAAG,IAAI,CAAC,CAAC,CAAC,MAAM,WAAI,yCAC1B,YAAG,IAAI,CAAC,CAAC,CAAC,KAAK,sBAAM,IAAI,CAAC,CAAC,CAAC,MAAM,SAAE,GAE3C,QAAQ,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,gCAI7E,cAAc,4CAOnB,IAAI;QAAA,IAAC,IAAI;UAAA,OAAE,SAAS,CAAC,CAAC;QAAA;QAAA;UAAA,+BAElB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,YACpF,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YACxF,OAAO,CACN,cAAc,CAAC,CAAC,GACX,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,YAAY,GACjD,MAAM,CAAC,CAAC,CAAC,aAAa,IAAI,aAAa,CAAC,CAAC,CAAC,iBAAkB,EACjE,GAAG,EACH,mBAAmB,EACnB,KACF,CAAC;QAAA;MAAA;IAAA;EAAA;AAMb,CAAC;AASD;AACA;AACA,MAAM,cAAc,GACjB,IAAe,IACf,KAA+B;AAC9B;AACA,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;EAAE;AAAK,CAAC,CAAe,CAAC;AACxD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAC/E,CAA+B;AAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;EACjD,QAAQ,EAAG,KAA4F,IACrG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,SAAkB;IAAE,MAAM,EAAE;EAAoB,CAAC,CAAC;AAC1F,CAAC,CAAC;AACF,eAAe,KAAK","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["content/Chart.tsx"],"sourcesContent":["import { type JSX, mergeProps } from \"solid-js\";\nimport { chartKinds } from \"../charts/core/registry\";\nimport { renderChartSvg } from \"../charts/core/render\";\nimport { type ChartKind, type ChartProps, renderChartRoot } from \"./ChartRoot\";\n\nexport { type ChartRenderOptions, chartRenderHeight, renderChartSvg } from \"../charts/core/render\";\nexport type { ChartKind, ChartLabels, ChartProps } from \"./ChartRoot\";\n\nconst ChartRoot = (props: ChartProps) => renderChartRoot(props, renderChartSvg);\n\ntype KindProps<T> = T extends unknown ? Omit<T, \"kind\"> : never;\nexport type ChartKindProps<K extends ChartKind> = KindProps<Extract<ChartProps, { kind: K }>>;\n\ntype ChartComponents = {\n [Name in keyof typeof chartKinds]: (props: ChartKindProps<(typeof chartKinds)[Name]>) => JSX.Element;\n};\n\n// Add a renderer to charts/core/registry.ts; its key defines the namespace member and discriminator.\n// Both entry styles share ChartRoot, preserving the same owner, markup and reactive props.\nconst chartComponent =\n (kind: ChartKind) =>\n (props: Omit<ChartProps, \"kind\">): JSX.Element =>\n // Public namespace types correlate each discriminator with its options.\n ChartRoot(mergeProps(props, { kind }) as ChartProps);\nconst createChart = () => {\n const components = Object.fromEntries(\n Object.entries(chartKinds).map(([name, kind]) => [name, chartComponent(kind)]),\n ) as unknown as ChartComponents;\n return Object.assign(ChartRoot, components, {\n Calendar: (props: Omit<Extract<ChartProps, { kind: \"heatmap\"; layout: \"calendar\" }>, \"kind\" | \"layout\">) =>\n ChartRoot(mergeProps(props, { kind: \"heatmap\" as const, layout: \"calendar\" as const })),\n });\n};\nconst Chart = /* @__PURE__ */ createChart();\nexport default Chart;\n"],"mappings":"AAAA,SAAmB,UAAU,QAAQ,UAAU;AAC/C,SAAS,UAAU,QAAQ,yBAAyB;AACpD,SAAS,cAAc,QAAQ,uBAAuB;AACtD,SAA0C,eAAe,QAAQ,aAAa;AAE9E,SAAkC,iBAAiB,EAAE,cAAc,QAAQ,uBAAuB;AAGlG,MAAM,SAAS,GAAI,KAAiB,IAAK,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC;AAS/E;AACA;AACA,MAAM,cAAc,GACjB,IAAe,IACf,KAA+B;AAC9B;AACA,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;EAAE;AAAK,CAAC,CAAe,CAAC;AACxD,MAAM,WAAW,GAAG,MAAM;EACxB,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAC/E,CAA+B;EAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;IAC1C,QAAQ,EAAG,KAA4F,IACrG,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE;MAAE,IAAI,EAAE,SAAkB;MAAE,MAAM,EAAE;IAAoB,CAAC,CAAC;EAC1F,CAAC,CAAC;AACJ,CAAC;AACD,MAAM,KAAK,GAAG,eAAgB,WAAW,CAAC,CAAC;AAC3C,eAAe,KAAK","ignoreList":[]}
|