@k2b/ui 0.49.0 → 0.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base.css +70 -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/ContextMenu.js +3 -0
- package/dist/browser/actions/ContextMenu.js.map +1 -1
- package/dist/browser/actions/Dropdown.js +43 -10
- package/dist/browser/actions/Dropdown.js.map +1 -1
- package/dist/browser/actions/command-dock.js +47 -0
- package/dist/browser/actions/command-dock.js.map +1 -0
- package/dist/browser/actions/command-items.js +84 -0
- package/dist/browser/actions/command-items.js.map +1 -0
- package/dist/browser/actions/command-messages.js +42 -0
- package/dist/browser/actions/command-messages.js.map +1 -0
- package/dist/browser/actions/index.js +1 -0
- package/dist/browser/actions/index.js.map +1 -1
- package/dist/browser/charts/core/area.js +188 -0
- package/dist/browser/charts/core/area.js.map +1 -0
- package/dist/browser/charts/core/calendar.js +186 -0
- package/dist/browser/charts/core/calendar.js.map +1 -0
- package/dist/browser/charts/core/chart-map-data.js +9 -0
- package/dist/browser/charts/core/chart-map-data.js.map +1 -0
- package/dist/browser/charts/core/chart-messages.js +17 -0
- package/dist/browser/charts/core/chart-messages.js.map +1 -0
- package/dist/browser/charts/core/hbar-layout.js +118 -0
- package/dist/browser/charts/core/hbar-layout.js.map +1 -0
- package/dist/browser/charts/core/hbar.js +39 -0
- package/dist/browser/charts/core/hbar.js.map +1 -0
- package/dist/browser/charts/core/index.js +17 -0
- package/dist/browser/charts/core/index.js.map +1 -0
- package/dist/browser/charts/core/inspection.js +9 -0
- package/dist/browser/charts/core/inspection.js.map +1 -0
- package/dist/browser/charts/core/map.js +116 -0
- package/dist/browser/charts/core/map.js.map +1 -0
- package/dist/browser/charts/core/registry.js +35 -0
- package/dist/browser/charts/core/registry.js.map +1 -0
- package/dist/browser/charts/core/render-size.js +13 -0
- package/dist/browser/charts/core/render-size.js.map +1 -0
- package/dist/browser/charts/core/render.js +113 -0
- package/dist/browser/charts/core/render.js.map +1 -0
- package/dist/browser/charts/core/snapshot.js +65 -0
- package/dist/browser/charts/core/snapshot.js.map +1 -0
- package/dist/browser/charts/core/svg-renderers.js +2406 -0
- package/dist/browser/charts/core/svg-renderers.js.map +1 -0
- package/dist/browser/charts/core/svg.js +21 -0
- package/dist/browser/charts/core/svg.js.map +1 -0
- package/dist/browser/charts/core/termination.test-fixture.js +162 -0
- package/dist/browser/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/browser/charts/core/text.js +13 -0
- package/dist/browser/charts/core/text.js.map +1 -0
- package/dist/browser/charts/core/types.js +6 -0
- package/dist/browser/charts/core/types.js.map +1 -0
- 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 +4 -2
- package/dist/browser/charts.js.map +1 -1
- package/dist/browser/content/BalanceSummary.js +106 -0
- package/dist/browser/content/BalanceSummary.js.map +1 -0
- package/dist/browser/content/Chart.js +21 -616
- package/dist/browser/content/Chart.js.map +1 -1
- package/dist/browser/content/ChartExplorer.js +366 -122
- package/dist/browser/content/ChartExplorer.js.map +1 -1
- package/dist/browser/content/ChartRoot.js +632 -0
- package/dist/browser/content/ChartRoot.js.map +1 -0
- package/dist/browser/content/ChartSnapshotView.js +16 -9
- 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 +676 -293
- package/dist/browser/content/DataTable.js.map +1 -1
- package/dist/browser/content/DataTableTools.js +119 -0
- package/dist/browser/content/DataTableTools.js.map +1 -0
- package/dist/browser/content/FileView.js +111 -61
- package/dist/browser/content/FileView.js.map +1 -1
- package/dist/browser/content/FlowAmount.js +82 -0
- package/dist/browser/content/FlowAmount.js.map +1 -0
- package/dist/browser/content/Lightbox.js +8 -8
- package/dist/browser/content/Lightbox.js.map +1 -1
- package/dist/browser/content/MapView.js +30 -28
- package/dist/browser/content/MapView.js.map +1 -1
- package/dist/browser/content/PdfPreview.js +84 -52
- package/dist/browser/content/PdfPreview.js.map +1 -1
- package/dist/browser/content/PdfViewer.js +588 -0
- package/dist/browser/content/PdfViewer.js.map +1 -0
- package/dist/browser/content/balance-summary-messages.js +26 -0
- package/dist/browser/content/balance-summary-messages.js.map +1 -0
- package/dist/browser/content/chart-bar.js +251 -21
- package/dist/browser/content/chart-bar.js.map +1 -1
- package/dist/browser/content/chart-calendar.js +43 -0
- package/dist/browser/content/chart-calendar.js.map +1 -0
- package/dist/browser/content/chart-inspection-core.js +178 -50
- package/dist/browser/content/chart-inspection-core.js.map +1 -1
- package/dist/browser/content/chart-inspection.js.map +1 -1
- package/dist/browser/content/chart-line-gaps.js +2 -2
- package/dist/browser/content/chart-line-gaps.js.map +1 -1
- package/dist/browser/content/chart-map-viewport.js.map +1 -1
- package/dist/browser/content/chart-message-catalog.js +174 -0
- package/dist/browser/content/chart-message-catalog.js.map +1 -0
- package/dist/browser/content/chart-messages.js +2 -138
- package/dist/browser/content/chart-messages.js.map +1 -1
- package/dist/browser/content/chart-snapshot.js +1 -62
- package/dist/browser/content/chart-snapshot.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 +4 -2
- package/dist/browser/content/chart-svg.js.map +1 -1
- package/dist/browser/content/chart-time-axis.js +139 -0
- package/dist/browser/content/chart-time-axis.js.map +1 -0
- package/dist/browser/content/data-table-columns.js +160 -0
- package/dist/browser/content/data-table-columns.js.map +1 -0
- package/dist/browser/content/data-table-messages.js +38 -2
- package/dist/browser/content/data-table-messages.js.map +1 -1
- package/dist/browser/content/flow-amount-messages.js +26 -0
- package/dist/browser/content/flow-amount-messages.js.map +1 -0
- package/dist/browser/content/index.js +5 -0
- package/dist/browser/content/index.js.map +1 -1
- package/dist/browser/content/pdf-document.js +29 -0
- package/dist/browser/content/pdf-document.js.map +1 -0
- package/dist/browser/content/pdf-limits.js +31 -0
- package/dist/browser/content/pdf-limits.js.map +1 -0
- package/dist/browser/content/pdf-messages.js +34 -2
- package/dist/browser/content/pdf-messages.js.map +1 -1
- package/dist/browser/content/pdf-viewer-engine.js +57 -0
- package/dist/browser/content/pdf-viewer-worker.js +28 -0
- package/dist/browser/inputs/ChoiceInputs.js +94 -51
- package/dist/browser/inputs/ChoiceInputs.js.map +1 -1
- package/dist/browser/inputs/ChoiceSlider.js +75 -58
- package/dist/browser/inputs/ChoiceSlider.js.map +1 -1
- package/dist/browser/inputs/DatePicker.js +118 -102
- 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/SelectChip.js +50 -17
- package/dist/browser/inputs/SelectChip.js.map +1 -1
- package/dist/browser/inputs/date-picker.js +13 -0
- package/dist/browser/inputs/date-picker.js.map +1 -1
- package/dist/browser/inputs/index.js +4 -1
- package/dist/browser/inputs/index.js.map +1 -1
- package/dist/browser/inputs/input-messages.js +8 -2
- package/dist/browser/inputs/input-messages.js.map +1 -1
- package/dist/browser/inputs/markdown/MarkdownEditor.js +14 -10
- package/dist/browser/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/browser/inputs/markdown/SlashCommands.js +402 -0
- package/dist/browser/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/browser/inputs/period-picker-messages.js +71 -0
- package/dist/browser/inputs/period-picker-messages.js.map +1 -0
- package/dist/browser/inputs/period.js +263 -0
- package/dist/browser/inputs/period.js.map +1 -0
- package/dist/browser/intl/Format.js +31 -8
- package/dist/browser/intl/Format.js.map +1 -1
- package/dist/browser/layout/AppWorkspace.js +7 -1
- 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/index.js.map +1 -1
- package/dist/browser/surfaces/BudgetList.js +281 -0
- package/dist/browser/surfaces/BudgetList.js.map +1 -0
- package/dist/browser/surfaces/DescriptionList.js +5 -2
- package/dist/browser/surfaces/DescriptionList.js.map +1 -1
- package/dist/browser/surfaces/ProgressBar.js +134 -21
- package/dist/browser/surfaces/ProgressBar.js.map +1 -1
- package/dist/browser/surfaces/StatCell.js +327 -146
- package/dist/browser/surfaces/StatCell.js.map +1 -1
- package/dist/browser/surfaces/StatGrid.js +75 -57
- package/dist/browser/surfaces/StatGrid.js.map +1 -1
- package/dist/browser/surfaces/budget-messages.js +64 -0
- package/dist/browser/surfaces/budget-messages.js.map +1 -0
- package/dist/browser/surfaces/delta-badge.js +79 -0
- package/dist/browser/surfaces/delta-badge.js.map +1 -0
- package/dist/browser/surfaces/index.js +2 -1
- package/dist/browser/surfaces/index.js.map +1 -1
- package/dist/browser/surfaces/person-color.js +2 -2
- package/dist/browser/surfaces/person-color.js.map +1 -1
- package/dist/browser/surfaces/stat-cell-messages.js +41 -0
- package/dist/browser/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/browser/widgets/Dashboard.js +137 -0
- package/dist/browser/widgets/Dashboard.js.map +1 -0
- package/dist/browser/widgets/DashboardFrame.js +310 -0
- package/dist/browser/widgets/DashboardFrame.js.map +1 -0
- package/dist/browser/widgets/index.js +2 -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/ContextMenu.js +3 -0
- package/dist/ssr/actions/ContextMenu.js.map +1 -1
- package/dist/ssr/actions/Dropdown.js +43 -10
- package/dist/ssr/actions/Dropdown.js.map +1 -1
- package/dist/ssr/actions/command-dock.js +47 -0
- package/dist/ssr/actions/command-dock.js.map +1 -0
- package/dist/ssr/actions/command-items.js +84 -0
- package/dist/ssr/actions/command-items.js.map +1 -0
- package/dist/ssr/actions/command-messages.js +42 -0
- package/dist/ssr/actions/command-messages.js.map +1 -0
- package/dist/ssr/actions/index.js +1 -0
- package/dist/ssr/actions/index.js.map +1 -1
- package/dist/ssr/charts/core/area.js +188 -0
- package/dist/ssr/charts/core/area.js.map +1 -0
- package/dist/ssr/charts/core/calendar.js +186 -0
- package/dist/ssr/charts/core/calendar.js.map +1 -0
- package/dist/ssr/charts/core/chart-map-data.js +9 -0
- package/dist/ssr/charts/core/chart-map-data.js.map +1 -0
- package/dist/ssr/charts/core/chart-messages.js +17 -0
- package/dist/ssr/charts/core/chart-messages.js.map +1 -0
- package/dist/ssr/charts/core/hbar-layout.js +118 -0
- package/dist/ssr/charts/core/hbar-layout.js.map +1 -0
- package/dist/ssr/charts/core/hbar.js +39 -0
- package/dist/ssr/charts/core/hbar.js.map +1 -0
- package/dist/ssr/charts/core/index.js +17 -0
- package/dist/ssr/charts/core/index.js.map +1 -0
- package/dist/ssr/charts/core/inspection.js +9 -0
- package/dist/ssr/charts/core/inspection.js.map +1 -0
- package/dist/ssr/charts/core/map.js +116 -0
- package/dist/ssr/charts/core/map.js.map +1 -0
- package/dist/ssr/charts/core/registry.js +35 -0
- package/dist/ssr/charts/core/registry.js.map +1 -0
- package/dist/ssr/charts/core/render-size.js +13 -0
- package/dist/ssr/charts/core/render-size.js.map +1 -0
- package/dist/ssr/charts/core/render.js +113 -0
- package/dist/ssr/charts/core/render.js.map +1 -0
- package/dist/ssr/charts/core/snapshot.js +65 -0
- package/dist/ssr/charts/core/snapshot.js.map +1 -0
- package/dist/ssr/charts/core/svg-renderers.js +2406 -0
- package/dist/ssr/charts/core/svg-renderers.js.map +1 -0
- package/dist/ssr/charts/core/svg.js +21 -0
- package/dist/ssr/charts/core/svg.js.map +1 -0
- package/dist/ssr/charts/core/termination.test-fixture.js +162 -0
- package/dist/ssr/charts/core/termination.test-fixture.js.map +1 -0
- package/dist/ssr/charts/core/text.js +13 -0
- package/dist/ssr/charts/core/text.js.map +1 -0
- package/dist/ssr/charts/core/types.js +6 -0
- package/dist/ssr/charts/core/types.js.map +1 -0
- 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 +4 -2
- package/dist/ssr/charts.js.map +1 -1
- package/dist/ssr/content/BalanceSummary.js +75 -0
- package/dist/ssr/content/BalanceSummary.js.map +1 -0
- package/dist/ssr/content/Chart.js +21 -483
- package/dist/ssr/content/Chart.js.map +1 -1
- package/dist/ssr/content/ChartExplorer.js +190 -46
- package/dist/ssr/content/ChartExplorer.js.map +1 -1
- package/dist/ssr/content/ChartRoot.js +475 -0
- package/dist/ssr/content/ChartRoot.js.map +1 -0
- package/dist/ssr/content/ChartSnapshotView.js +5 -1
- 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 +287 -78
- package/dist/ssr/content/DataTable.js.map +1 -1
- package/dist/ssr/content/DataTableTools.js +106 -0
- package/dist/ssr/content/DataTableTools.js.map +1 -0
- package/dist/ssr/content/FileView.js +56 -7
- package/dist/ssr/content/FileView.js.map +1 -1
- package/dist/ssr/content/FlowAmount.js +58 -0
- package/dist/ssr/content/FlowAmount.js.map +1 -0
- package/dist/ssr/content/Lightbox.js +8 -8
- package/dist/ssr/content/Lightbox.js.map +1 -1
- package/dist/ssr/content/MapView.js +9 -9
- package/dist/ssr/content/MapView.js.map +1 -1
- package/dist/ssr/content/PdfPreview.js +49 -20
- package/dist/ssr/content/PdfPreview.js.map +1 -1
- package/dist/ssr/content/PdfViewer.js +484 -0
- package/dist/ssr/content/PdfViewer.js.map +1 -0
- package/dist/ssr/content/balance-summary-messages.js +26 -0
- package/dist/ssr/content/balance-summary-messages.js.map +1 -0
- package/dist/ssr/content/chart-bar.js +251 -21
- package/dist/ssr/content/chart-bar.js.map +1 -1
- package/dist/ssr/content/chart-calendar.js +43 -0
- package/dist/ssr/content/chart-calendar.js.map +1 -0
- package/dist/ssr/content/chart-inspection-core.js +178 -50
- package/dist/ssr/content/chart-inspection-core.js.map +1 -1
- package/dist/ssr/content/chart-inspection.js.map +1 -1
- package/dist/ssr/content/chart-line-gaps.js +2 -2
- package/dist/ssr/content/chart-line-gaps.js.map +1 -1
- package/dist/ssr/content/chart-map-viewport.js.map +1 -1
- package/dist/ssr/content/chart-message-catalog.js +174 -0
- package/dist/ssr/content/chart-message-catalog.js.map +1 -0
- package/dist/ssr/content/chart-messages.js +2 -138
- package/dist/ssr/content/chart-messages.js.map +1 -1
- package/dist/ssr/content/chart-snapshot.js +1 -62
- package/dist/ssr/content/chart-snapshot.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 +4 -2
- package/dist/ssr/content/chart-svg.js.map +1 -1
- package/dist/ssr/content/chart-time-axis.js +139 -0
- package/dist/ssr/content/chart-time-axis.js.map +1 -0
- package/dist/ssr/content/data-table-columns.js +160 -0
- package/dist/ssr/content/data-table-columns.js.map +1 -0
- package/dist/ssr/content/data-table-messages.js +38 -2
- package/dist/ssr/content/data-table-messages.js.map +1 -1
- package/dist/ssr/content/flow-amount-messages.js +26 -0
- package/dist/ssr/content/flow-amount-messages.js.map +1 -0
- package/dist/ssr/content/index.js +5 -0
- package/dist/ssr/content/index.js.map +1 -1
- package/dist/ssr/content/pdf-document.js +29 -0
- package/dist/ssr/content/pdf-document.js.map +1 -0
- package/dist/ssr/content/pdf-limits.js +31 -0
- package/dist/ssr/content/pdf-limits.js.map +1 -0
- package/dist/ssr/content/pdf-messages.js +34 -2
- package/dist/ssr/content/pdf-messages.js.map +1 -1
- package/dist/ssr/inputs/ChoiceInputs.js +49 -12
- package/dist/ssr/inputs/ChoiceInputs.js.map +1 -1
- package/dist/ssr/inputs/ChoiceSlider.js +17 -12
- package/dist/ssr/inputs/ChoiceSlider.js.map +1 -1
- package/dist/ssr/inputs/DatePicker.js +19 -13
- 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/SelectChip.js +26 -9
- package/dist/ssr/inputs/SelectChip.js.map +1 -1
- package/dist/ssr/inputs/date-picker.js +13 -0
- package/dist/ssr/inputs/date-picker.js.map +1 -1
- package/dist/ssr/inputs/index.js +4 -1
- package/dist/ssr/inputs/index.js.map +1 -1
- package/dist/ssr/inputs/input-messages.js +8 -2
- package/dist/ssr/inputs/input-messages.js.map +1 -1
- package/dist/ssr/inputs/markdown/MarkdownEditor.js +3 -2
- package/dist/ssr/inputs/markdown/MarkdownEditor.js.map +1 -1
- package/dist/ssr/inputs/markdown/SlashCommands.js +339 -0
- package/dist/ssr/inputs/markdown/SlashCommands.js.map +1 -0
- package/dist/ssr/inputs/period-picker-messages.js +71 -0
- package/dist/ssr/inputs/period-picker-messages.js.map +1 -0
- package/dist/ssr/inputs/period.js +263 -0
- package/dist/ssr/inputs/period.js.map +1 -0
- package/dist/ssr/intl/Format.js +22 -2
- package/dist/ssr/intl/Format.js.map +1 -1
- package/dist/ssr/layout/AppWorkspace.js +7 -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/index.js.map +1 -1
- package/dist/ssr/surfaces/BudgetList.js +170 -0
- package/dist/ssr/surfaces/BudgetList.js.map +1 -0
- package/dist/ssr/surfaces/DescriptionList.js +1 -1
- package/dist/ssr/surfaces/DescriptionList.js.map +1 -1
- package/dist/ssr/surfaces/ProgressBar.js +96 -5
- package/dist/ssr/surfaces/ProgressBar.js.map +1 -1
- package/dist/ssr/surfaces/StatCell.js +157 -52
- package/dist/ssr/surfaces/StatCell.js.map +1 -1
- package/dist/ssr/surfaces/StatGrid.js +24 -35
- package/dist/ssr/surfaces/StatGrid.js.map +1 -1
- package/dist/ssr/surfaces/budget-messages.js +64 -0
- package/dist/ssr/surfaces/budget-messages.js.map +1 -0
- package/dist/ssr/surfaces/delta-badge.js +55 -0
- package/dist/ssr/surfaces/delta-badge.js.map +1 -0
- package/dist/ssr/surfaces/index.js +2 -1
- package/dist/ssr/surfaces/index.js.map +1 -1
- package/dist/ssr/surfaces/person-color.js +2 -2
- package/dist/ssr/surfaces/person-color.js.map +1 -1
- package/dist/ssr/surfaces/stat-cell-messages.js +41 -0
- package/dist/ssr/surfaces/stat-cell-messages.js.map +1 -0
- package/dist/ssr/widgets/Dashboard.js +84 -0
- package/dist/ssr/widgets/Dashboard.js.map +1 -0
- package/dist/ssr/widgets/DashboardFrame.js +200 -0
- package/dist/ssr/widgets/DashboardFrame.js.map +1 -0
- package/dist/ssr/widgets/index.js +2 -0
- package/dist/ssr/widgets/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/actions/Button.d.ts +1 -1
- package/dist/types/actions/CommandList.d.ts +120 -0
- package/dist/types/actions/CommandMenu.d.ts +39 -0
- package/dist/types/actions/Dropdown.d.ts +17 -0
- package/dist/types/actions/command-dock.d.ts +8 -0
- package/dist/types/actions/command-items.d.ts +134 -0
- package/dist/types/actions/command-messages.d.ts +19 -0
- package/dist/types/actions/index.d.ts +3 -0
- package/dist/types/charts/core/area.d.ts +62 -0
- package/dist/types/charts/core/calendar.d.ts +57 -0
- package/dist/types/charts/core/chart-map-data.d.ts +3 -0
- package/dist/types/charts/core/chart-messages.d.ts +5 -0
- package/dist/types/charts/core/hbar-layout.d.ts +74 -0
- package/dist/types/charts/core/hbar.d.ts +13 -0
- package/dist/types/charts/core/index.d.ts +16 -0
- package/dist/types/charts/core/inspection.d.ts +16 -0
- package/dist/types/charts/core/map.d.ts +3 -0
- package/dist/types/charts/core/registry.d.ts +33 -0
- package/dist/types/charts/core/render-size.d.ts +7 -0
- package/dist/types/charts/core/render.d.ts +37 -0
- package/dist/types/charts/core/snapshot.d.ts +27 -0
- package/dist/types/charts/core/svg-renderers.d.ts +722 -0
- package/dist/types/charts/core/svg.d.ts +20 -0
- package/dist/types/charts/core/termination.test-fixture.d.ts +1 -0
- package/dist/types/charts/core/text.d.ts +5 -0
- package/dist/types/charts/core/types.d.ts +20 -0
- package/dist/types/charts/core/waterfall.d.ts +68 -0
- package/dist/types/charts/description.d.ts +226 -0
- package/dist/types/charts.d.ts +5 -2
- package/dist/types/content/BalanceSummary.d.ts +29 -0
- package/dist/types/content/Chart.d.ts +19 -117
- package/dist/types/content/ChartExplorer.d.ts +43 -2
- package/dist/types/content/ChartRoot.d.ts +92 -0
- package/dist/types/content/ChartSnapshotView.d.ts +1 -0
- package/dist/types/content/ChartSparkline.d.ts +5 -0
- package/dist/types/content/DataTable.d.ts +28 -0
- package/dist/types/content/DataTableTools.d.ts +44 -0
- package/dist/types/content/FlowAmount.d.ts +28 -0
- package/dist/types/content/PdfViewer.d.ts +32 -0
- package/dist/types/content/balance-summary-messages.d.ts +11 -0
- package/dist/types/content/chart-bar.d.ts +95 -2
- package/dist/types/content/chart-calendar.d.ts +4 -0
- package/dist/types/content/chart-inspection-core.d.ts +21 -16
- package/dist/types/content/chart-inspection.d.ts +5 -1
- package/dist/types/content/chart-map-viewport.d.ts +1 -1
- package/dist/types/content/chart-message-catalog.d.ts +84 -0
- package/dist/types/content/chart-messages.d.ts +2 -33
- package/dist/types/content/chart-snapshot.d.ts +1 -26
- package/dist/types/content/chart-svg.d.ts +1 -1
- package/dist/types/content/chart-time-axis.d.ts +26 -0
- package/dist/types/content/data-table-columns.d.ts +72 -0
- package/dist/types/content/data-table-messages.d.ts +18 -0
- package/dist/types/content/flow-amount-messages.d.ts +11 -0
- package/dist/types/content/index.d.ts +12 -2
- package/dist/types/content/pdf-document.d.ts +5 -0
- package/dist/types/content/pdf-engine.d.ts +9 -0
- package/dist/types/content/pdf-limits.d.ts +43 -0
- package/dist/types/content/pdf-messages.d.ts +16 -0
- package/dist/types/inputs/ChoiceInputs.d.ts +4 -0
- package/dist/types/inputs/ChoiceSlider.d.ts +12 -0
- package/dist/types/inputs/DatePicker.d.ts +22 -0
- package/dist/types/inputs/PeriodPicker.d.ts +24 -0
- package/dist/types/inputs/SelectChip.d.ts +2 -0
- package/dist/types/inputs/date-picker.d.ts +6 -0
- package/dist/types/inputs/index.d.ts +8 -2
- package/dist/types/inputs/input-messages.d.ts +3 -0
- package/dist/types/inputs/markdown/MarkdownEditor.d.ts +5 -0
- package/dist/types/inputs/markdown/SlashCommands.d.ts +20 -0
- package/dist/types/inputs/period-picker-messages.d.ts +34 -0
- package/dist/types/inputs/period.d.ts +134 -0
- package/dist/types/intl/Format.d.ts +5 -0
- package/dist/types/layout/AppWorkspace.d.ts +5 -0
- package/dist/types/layout/DetailPanel.d.ts +12 -0
- package/dist/types/layout/index.d.ts +1 -1
- package/dist/types/surfaces/BudgetList.d.ts +42 -0
- package/dist/types/surfaces/DescriptionList.d.ts +5 -0
- package/dist/types/surfaces/ProgressBar.d.ts +38 -2
- package/dist/types/surfaces/StatCell.d.ts +40 -2
- package/dist/types/surfaces/StatGrid.d.ts +3 -1
- package/dist/types/surfaces/budget-messages.d.ts +30 -0
- package/dist/types/surfaces/delta-badge.d.ts +10 -0
- package/dist/types/surfaces/index.d.ts +4 -3
- package/dist/types/surfaces/person-color.d.ts +2 -2
- package/dist/types/surfaces/stat-cell-messages.d.ts +19 -0
- package/dist/types/widgets/Dashboard.d.ts +42 -0
- package/dist/types/widgets/DashboardFrame.d.ts +58 -0
- package/dist/types/widgets/index.d.ts +2 -0
- package/package.json +8 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { barSeriesLegend, chartTextWidth, headerHeight, wrapLabel } from "../../content/chart-bar";
|
|
2
|
+
import { chartMessages } from "../../content/chart-message-catalog";
|
|
3
|
+
import { extendDomainToNice, niceStep } from "./svg-renderers";
|
|
4
|
+
/** Stacks start at zero, group headings keep their first-appearance order. */
|
|
5
|
+
export function hbarLayout(spec, size = {
|
|
6
|
+
width: 480,
|
|
7
|
+
height: 280
|
|
8
|
+
}) {
|
|
9
|
+
if (spec.rows.some(row => row.values.length !== spec.series.length || row.values.some(v => v !== null && (!Number.isFinite(v) || v < 0)))) throw new RangeError("Horizontal bars require aligned nonnegative segment values");
|
|
10
|
+
const format = spec.valueFormat ?? String;
|
|
11
|
+
const labels = chartMessages.resolve([spec.locale ?? "en"]).t;
|
|
12
|
+
const groups = [...new Set(spec.rows.map(r => r.group))];
|
|
13
|
+
const totals = spec.rows.map(r => r.values.some(v => v !== null) ? r.values.reduce((sum, v) => sum + (v ?? 0), 0) : null);
|
|
14
|
+
const max = Math.max(0, ...totals.filter(v => v !== null));
|
|
15
|
+
const scale = extendDomainToNice(0, max || 1, niceStep(max || 1, 4));
|
|
16
|
+
const unit = size.width / 296;
|
|
17
|
+
const left = Math.min(104 * unit, size.width * 0.26);
|
|
18
|
+
const right = size.width - Math.max(52 * unit, ...totals.map(v => (chartTextWidth(v === null ? "–" : format(v)) + 8) * unit));
|
|
19
|
+
const legendLayout = barSeriesLegend(spec.series.map((label, i) => ({
|
|
20
|
+
label,
|
|
21
|
+
data: spec.rows.map(r => r.values[i] ?? null)
|
|
22
|
+
})), format, size.width, 296, 70 // One legend budget even when rows grow the initial 280-unit drawing.
|
|
23
|
+
);
|
|
24
|
+
const legend = {
|
|
25
|
+
...legendLayout,
|
|
26
|
+
items: legendLayout.items.map(entry => ({
|
|
27
|
+
...entry,
|
|
28
|
+
valueText: entry.total === null ? "–" : format(entry.total),
|
|
29
|
+
text: wrapLabel(entry.label, entry.labelWidth, 1).lines[0] ?? entry.label
|
|
30
|
+
}))
|
|
31
|
+
};
|
|
32
|
+
const header = headerHeight({
|
|
33
|
+
title: spec.title,
|
|
34
|
+
subtitle: spec.subtitle
|
|
35
|
+
});
|
|
36
|
+
const top = header + (spec.legend === false ? 0 : legend.height);
|
|
37
|
+
const groupHeight = 20;
|
|
38
|
+
const pitch = Math.max(32, (size.height - top - 24 - groups.filter(g => g !== undefined).length * groupHeight) / Math.max(1, spec.rows.length));
|
|
39
|
+
const x = v => left + v / scale.domain[1] * (right - left);
|
|
40
|
+
let y = top;
|
|
41
|
+
const rows = groups.flatMap(group => {
|
|
42
|
+
if (group !== undefined) y += groupHeight;
|
|
43
|
+
let first = true;
|
|
44
|
+
return spec.rows.flatMap((row, index) => {
|
|
45
|
+
if (row.group !== group) return [];
|
|
46
|
+
const groupHeading = first ? group : undefined;
|
|
47
|
+
first = false;
|
|
48
|
+
const center = y + pitch / 2;
|
|
49
|
+
y += pitch;
|
|
50
|
+
let acc = 0;
|
|
51
|
+
const segments = row.values.map((value, seriesIndex) => {
|
|
52
|
+
const start = acc;
|
|
53
|
+
acc += value ?? 0;
|
|
54
|
+
const width = x(acc) - x(start);
|
|
55
|
+
const label = value === null ? "–" : format(value);
|
|
56
|
+
return {
|
|
57
|
+
value,
|
|
58
|
+
seriesIndex,
|
|
59
|
+
x: x(start),
|
|
60
|
+
width,
|
|
61
|
+
label,
|
|
62
|
+
showLabel: width / unit > chartTextWidth(label) + 10
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
const labelLines = wrapLabel(row.label, Math.max(8, left / unit - 8), 2).lines;
|
|
66
|
+
const total = totals[index];
|
|
67
|
+
const valueText = total === null ? "–" : format(total);
|
|
68
|
+
const datum = {
|
|
69
|
+
role: "item",
|
|
70
|
+
index,
|
|
71
|
+
label: [row.label, row.group].filter(Boolean).join(" · "),
|
|
72
|
+
anchor: [x(total ?? 0) + 4, center],
|
|
73
|
+
values: [...row.values.map((v, i) => ({
|
|
74
|
+
key: `series:${i}`,
|
|
75
|
+
value: v ?? "–",
|
|
76
|
+
formatted: v === null ? "–" : format(v)
|
|
77
|
+
})), {
|
|
78
|
+
key: "total",
|
|
79
|
+
value: total ?? "–",
|
|
80
|
+
formatted: valueText
|
|
81
|
+
}]
|
|
82
|
+
};
|
|
83
|
+
const title = [row.label, row.group, ...row.values.map((v, i) => `${spec.series[i]}: ${v === null ? "–" : format(v)}`), `${labels.chartFields({
|
|
84
|
+
key: "total"
|
|
85
|
+
})}: ${valueText}`].filter(Boolean).join(" · ");
|
|
86
|
+
return [{
|
|
87
|
+
...row,
|
|
88
|
+
labelLines,
|
|
89
|
+
groupHeading,
|
|
90
|
+
index,
|
|
91
|
+
center,
|
|
92
|
+
segments,
|
|
93
|
+
total,
|
|
94
|
+
valueText,
|
|
95
|
+
datum,
|
|
96
|
+
title,
|
|
97
|
+
groupY: center - pitch / 2 - groupHeight
|
|
98
|
+
}];
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
return {
|
|
102
|
+
...size,
|
|
103
|
+
header,
|
|
104
|
+
height: Math.max(size.height, y + 24),
|
|
105
|
+
top,
|
|
106
|
+
left,
|
|
107
|
+
right,
|
|
108
|
+
rows,
|
|
109
|
+
groups,
|
|
110
|
+
pitch,
|
|
111
|
+
x,
|
|
112
|
+
scale,
|
|
113
|
+
format,
|
|
114
|
+
unit,
|
|
115
|
+
legend
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=hbar-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/hbar-layout.ts"],"sourcesContent":["import { barSeriesLegend, chartTextWidth, headerHeight, wrapLabel } from \"../../content/chart-bar\";\nimport { chartMessages } from \"../../content/chart-message-catalog\";\nimport { extendDomainToNice, niceStep } from \"./svg-renderers\";\nimport type { ChartDatum } from \"./types\";\n\nexport type HorizontalBarOptions = {\n series: string[];\n rows: { group?: string; label: string; values: (number | null)[] }[];\n valueFormat?: (value: number) => string;\n legend?: boolean;\n title?: string;\n subtitle?: string;\n locale?: string;\n className?: string;\n};\n\n/** Stacks start at zero, group headings keep their first-appearance order. */\nexport function hbarLayout(spec: HorizontalBarOptions, size = { width: 480, height: 280 }) {\n if (\n spec.rows.some(\n (row) => row.values.length !== spec.series.length || row.values.some((v) => v !== null && (!Number.isFinite(v) || v < 0)),\n )\n )\n throw new RangeError(\"Horizontal bars require aligned nonnegative segment values\");\n const format = spec.valueFormat ?? String;\n const labels = chartMessages.resolve([spec.locale ?? \"en\"]).t;\n const groups = [...new Set(spec.rows.map((r) => r.group))];\n const totals = spec.rows.map((r) => (r.values.some((v) => v !== null) ? r.values.reduce<number>((sum, v) => sum + (v ?? 0), 0) : null));\n const max = Math.max(0, ...totals.filter((v): v is number => v !== null));\n const scale = extendDomainToNice(0, max || 1, niceStep(max || 1, 4));\n const unit = size.width / 296;\n const left = Math.min(104 * unit, size.width * 0.26);\n const right = size.width - Math.max(52 * unit, ...totals.map((v) => (chartTextWidth(v === null ? \"–\" : format(v)) + 8) * unit));\n const legendLayout = barSeriesLegend(\n spec.series.map((label, i) => ({ label, data: spec.rows.map((r) => r.values[i] ?? null) })),\n format,\n size.width,\n 296,\n 70, // One legend budget even when rows grow the initial 280-unit drawing.\n );\n const legend = {\n ...legendLayout,\n items: legendLayout.items.map((entry) => ({\n ...entry,\n valueText: entry.total === null ? \"–\" : format(entry.total),\n text: wrapLabel(entry.label, entry.labelWidth, 1).lines[0] ?? entry.label,\n })),\n };\n const header = headerHeight({ title: spec.title, subtitle: spec.subtitle });\n const top = header + (spec.legend === false ? 0 : legend.height);\n const groupHeight = 20;\n const pitch = Math.max(\n 32,\n (size.height - top - 24 - groups.filter((g) => g !== undefined).length * groupHeight) / Math.max(1, spec.rows.length),\n );\n const x = (v: number) => left + (v / scale.domain[1]) * (right - left);\n let y = top;\n const rows = groups.flatMap((group) => {\n if (group !== undefined) y += groupHeight;\n let first = true;\n return spec.rows.flatMap((row, index) => {\n if (row.group !== group) return [];\n const groupHeading = first ? group : undefined;\n first = false;\n const center = y + pitch / 2;\n y += pitch;\n let acc = 0;\n const segments = row.values.map((value, seriesIndex) => {\n const start = acc;\n acc += value ?? 0;\n const width = x(acc) - x(start);\n const label = value === null ? \"–\" : format(value);\n return { value, seriesIndex, x: x(start), width, label, showLabel: width / unit > chartTextWidth(label) + 10 };\n });\n const labelLines = wrapLabel(row.label, Math.max(8, left / unit - 8), 2).lines;\n const total = totals[index]!;\n const valueText = total === null ? \"–\" : format(total);\n const datum: ChartDatum = {\n role: \"item\",\n index,\n label: [row.label, row.group].filter(Boolean).join(\" · \"),\n anchor: [x(total ?? 0) + 4, center],\n values: [\n ...row.values.map((v, i) => ({ key: `series:${i}`, value: v ?? \"–\", formatted: v === null ? \"–\" : format(v) })),\n { key: \"total\", value: total ?? \"–\", formatted: valueText },\n ],\n };\n const title = [\n row.label,\n row.group,\n ...row.values.map((v, i) => `${spec.series[i]}: ${v === null ? \"–\" : format(v)}`),\n `${labels.chartFields({ key: \"total\" })}: ${valueText}`,\n ]\n .filter(Boolean)\n .join(\" · \");\n return [\n {\n ...row,\n labelLines,\n groupHeading,\n index,\n center,\n segments,\n total,\n valueText,\n datum,\n title,\n groupY: center - pitch / 2 - groupHeight,\n },\n ];\n });\n });\n return { ...size, header, height: Math.max(size.height, y + 24), top, left, right, rows, groups, pitch, x, scale, format, unit, legend };\n}\n\nexport type HorizontalBarLayout = ReturnType<typeof hbarLayout>;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { hbarLayout } from "./hbar-layout";
|
|
2
|
+
import { chartDatumSvg, escapeXml, renderHeader, svgRoot } from "./svg-renderers";
|
|
3
|
+
export { hbarLayout } from "./hbar-layout";
|
|
4
|
+
export function renderHbarSvg(spec) {
|
|
5
|
+
return renderHbarLayoutSvg(spec, hbarLayout(spec, spec));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/** Draw an already prepared layout; lazy hosts reuse the geometry reserved before loading. */
|
|
9
|
+
export function renderHbarLayoutSvg(spec, g) {
|
|
10
|
+
const text = (x, y, value, anchor = "start", extra = "", attrs = 'class="stdlib-chart-tick-label"') => `<text ${attrs} x="${x}" y="${y}" text-anchor="${anchor}" ${extra}>${escapeXml(value)}</text>`;
|
|
11
|
+
const parts = [renderHeader(spec.width, spec.title, spec.subtitle).svg];
|
|
12
|
+
const header = g.header;
|
|
13
|
+
if (spec.legend !== false) g.legend.items.forEach((entry, i) => {
|
|
14
|
+
const y = header + entry.y;
|
|
15
|
+
parts.push(`<rect class="stdlib-chart-series-${i % 8}" x="${entry.x}" y="${y - 8}" width="${8 * g.unit}" height="8"/>`, text(entry.x + 14 * g.unit, y, entry.text), text(entry.valueX, y, entry.valueText, "end", `data-chart-legend-value data-field="series:${i}" data-default="${escapeXml(entry.valueText)}"`));
|
|
16
|
+
});
|
|
17
|
+
if (spec.legend !== false && g.legend.hidden) parts.push(text(0, header + g.legend.height - 8, `+${g.legend.hidden}`));
|
|
18
|
+
for (const tick of g.scale.ticks) parts.push(`<line class="stdlib-chart-grid" x1="${g.x(tick)}" x2="${g.x(tick)}" y1="${g.top}" y2="${g.height - 24}"/>`, text(g.x(tick), g.height - 5, g.format(tick), "middle"));
|
|
19
|
+
for (const row of g.rows) {
|
|
20
|
+
if (row.groupHeading !== undefined) {
|
|
21
|
+
parts.push(text(0, row.groupY + 14, row.groupHeading, "start", "", 'class="k2b-chart-group-heading" font-size="11.5" font-weight="600" fill="currentColor"'));
|
|
22
|
+
}
|
|
23
|
+
const height = Math.min(26, g.pitch * 0.74);
|
|
24
|
+
const marks = [`<rect class="k2b-chart-category-band" fill="none" pointer-events="all" x="0" y="${row.center - g.pitch / 2}" width="${spec.width}" height="${g.pitch}" rx="6"/>`];
|
|
25
|
+
for (const segment of row.segments) {
|
|
26
|
+
if (segment.value === null) continue;
|
|
27
|
+
marks.push(`<rect class="stdlib-chart-bar stdlib-chart-series-${segment.seriesIndex % 8}" x="${segment.x}" y="${row.center - height / 2}" width="${Math.max(segment.width / 2, segment.width - 1.5)}" height="${height}" rx="3" stroke="none" stroke-width="0" style="fill:var(--stdlib-chart-c${segment.seriesIndex % 8 + 1},#3b82f6);fill-opacity:.18"/>`);
|
|
28
|
+
if (segment.showLabel) marks.push(text(segment.x + segment.width / 2, row.center + 4, segment.label, "middle", "", 'class="k2b-chart-segment-value" font-size="11" font-weight="500" fill="currentColor"'));
|
|
29
|
+
}
|
|
30
|
+
parts.push(chartDatumSvg(marks.join(""), row.datum, spec.inspect ?? false, row.title));
|
|
31
|
+
row.labelLines.forEach((line, i) => parts.push(text(g.left - 8 * g.unit, row.center + 4 + (row.labelLines.length > 1 ? i === 0 ? -6.5 : 6.5 : 0), line, "end")));
|
|
32
|
+
parts.push(text(g.x(row.total ?? 0) + 6 * g.unit, row.center + 4, row.valueText));
|
|
33
|
+
}
|
|
34
|
+
return svgRoot({
|
|
35
|
+
...spec,
|
|
36
|
+
height: g.height
|
|
37
|
+
}, parts.join("")).replace("<svg ", '<svg data-bar-layout="rows" ');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=hbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/hbar.ts"],"sourcesContent":["import { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout } from \"./hbar-layout\";\nimport { chartDatumSvg, escapeXml, renderHeader, svgRoot } from \"./svg-renderers\";\n\nexport { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout } from \"./hbar-layout\";\n\nexport function renderHbarSvg(spec: HorizontalBarOptions & { width: number; height: number; inspect?: boolean }) {\n return renderHbarLayoutSvg(spec, hbarLayout(spec, spec));\n}\n\n/** Draw an already prepared layout; lazy hosts reuse the geometry reserved before loading. */\nexport function renderHbarLayoutSvg(\n spec: HorizontalBarOptions & { width: number; height: number; inspect?: boolean },\n g: HorizontalBarLayout,\n) {\n const text = (x: number, y: number, value: string, anchor = \"start\", extra = \"\", attrs = 'class=\"stdlib-chart-tick-label\"') =>\n `<text ${attrs} x=\"${x}\" y=\"${y}\" text-anchor=\"${anchor}\" ${extra}>${escapeXml(value)}</text>`;\n const parts: string[] = [renderHeader(spec.width, spec.title, spec.subtitle).svg];\n const header = g.header;\n if (spec.legend !== false)\n g.legend.items.forEach((entry, i) => {\n const y = header + entry.y;\n parts.push(\n `<rect class=\"stdlib-chart-series-${i % 8}\" x=\"${entry.x}\" y=\"${y - 8}\" width=\"${8 * g.unit}\" height=\"8\"/>`,\n text(entry.x + 14 * g.unit, y, entry.text),\n text(\n entry.valueX,\n y,\n entry.valueText,\n \"end\",\n `data-chart-legend-value data-field=\"series:${i}\" data-default=\"${escapeXml(entry.valueText)}\"`,\n ),\n );\n });\n if (spec.legend !== false && g.legend.hidden) parts.push(text(0, header + g.legend.height - 8, `+${g.legend.hidden}`));\n for (const tick of g.scale.ticks)\n parts.push(\n `<line class=\"stdlib-chart-grid\" x1=\"${g.x(tick)}\" x2=\"${g.x(tick)}\" y1=\"${g.top}\" y2=\"${g.height - 24}\"/>`,\n text(g.x(tick), g.height - 5, g.format(tick), \"middle\"),\n );\n for (const row of g.rows) {\n if (row.groupHeading !== undefined) {\n parts.push(\n text(\n 0,\n row.groupY + 14,\n row.groupHeading,\n \"start\",\n \"\",\n 'class=\"k2b-chart-group-heading\" font-size=\"11.5\" font-weight=\"600\" fill=\"currentColor\"',\n ),\n );\n }\n const height = Math.min(26, g.pitch * 0.74);\n const marks = [\n `<rect class=\"k2b-chart-category-band\" fill=\"none\" pointer-events=\"all\" x=\"0\" y=\"${row.center - g.pitch / 2}\" width=\"${spec.width}\" height=\"${g.pitch}\" rx=\"6\"/>`,\n ];\n for (const segment of row.segments) {\n if (segment.value === null) continue;\n marks.push(\n `<rect class=\"stdlib-chart-bar stdlib-chart-series-${segment.seriesIndex % 8}\" x=\"${segment.x}\" y=\"${row.center - height / 2}\" width=\"${Math.max(segment.width / 2, segment.width - 1.5)}\" height=\"${height}\" rx=\"3\" stroke=\"none\" stroke-width=\"0\" style=\"fill:var(--stdlib-chart-c${(segment.seriesIndex % 8) + 1},#3b82f6);fill-opacity:.18\"/>`,\n );\n if (segment.showLabel)\n marks.push(\n text(\n segment.x + segment.width / 2,\n row.center + 4,\n segment.label,\n \"middle\",\n \"\",\n 'class=\"k2b-chart-segment-value\" font-size=\"11\" font-weight=\"500\" fill=\"currentColor\"',\n ),\n );\n }\n parts.push(chartDatumSvg(marks.join(\"\"), row.datum, spec.inspect ?? false, row.title));\n row.labelLines.forEach((line, i) =>\n parts.push(text(g.left - 8 * g.unit, row.center + 4 + (row.labelLines.length > 1 ? (i === 0 ? -6.5 : 6.5) : 0), line, \"end\")),\n );\n parts.push(text(g.x(row.total ?? 0) + 6 * g.unit, row.center + 4, row.valueText));\n }\n return svgRoot({ ...spec, height: g.height }, parts.join(\"\")).replace(\"<svg \", '<svg data-bar-layout=\"rows\" ');\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Portable chart contracts. This entry never imports Solid or browser APIs. */
|
|
2
|
+
|
|
3
|
+
export { barChartLayout, renderBarChartSvg, seriesBarLayout } from "../../content/chart-bar";
|
|
4
|
+
export { renderStateTimelineSvg, stateTimelineDomain, stateTimelineHeight } from "../../content/chart-state-timeline";
|
|
5
|
+
export { areaLayout, renderAreaSvg } from "./area";
|
|
6
|
+
export * from "./calendar";
|
|
7
|
+
export { hbarLayout, renderHbarLayoutSvg, renderHbarSvg } from "./hbar";
|
|
8
|
+
export * from "./inspection";
|
|
9
|
+
export { map } from "./map";
|
|
10
|
+
export * from "./render";
|
|
11
|
+
export { chartRenderHeight, preservesAspectRatio } from "./render-size";
|
|
12
|
+
export * from "./snapshot";
|
|
13
|
+
export { charts } from "./svg";
|
|
14
|
+
export { arcPathD, autoBin, bar, barGauge, boxplot, chartDatumSvg, computeBoxStats, computeDomain, donut, escapeXml, extendDomainToNice, gauge, heatmap, histogram, line, linearRegression, linePathD, mapLog, mapRange, markerPath, niceLogTicks, niceStep, normalizePadding, pie, scatter, smoothPathD, sparkline, stat, stateTimeline, stepPathD, svgRoot } from "./svg-renderers";
|
|
15
|
+
export { chartDatumRoles } from "./types";
|
|
16
|
+
export { renderWaterfallLayoutSvg, renderWaterfallSvg, waterfallLayout } from "./waterfall";
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/index.ts"],"sourcesContent":["/** Portable chart contracts. This entry never imports Solid or browser APIs. */\n\nexport { type BarChartLayout, type BarChartOptions, barChartLayout, renderBarChartSvg, seriesBarLayout } from \"../../content/chart-bar\";\nexport {\n renderStateTimelineSvg,\n type StateTimelineChartOptions,\n type StateTimelineDomain,\n stateTimelineDomain,\n stateTimelineHeight,\n} from \"../../content/chart-state-timeline\";\nexport { type ChartTimeAxis } from \"../../content/chart-time-axis\";\nexport { type AreaOptions, areaLayout, renderAreaSvg } from \"./area\";\nexport * from \"./calendar\";\nexport { type HorizontalBarLayout, type HorizontalBarOptions, hbarLayout, renderHbarLayoutSvg, renderHbarSvg } from \"./hbar\";\nexport * from \"./inspection\";\nexport { map } from \"./map\";\nexport * from \"./render\";\nexport { chartRenderHeight, preservesAspectRatio } from \"./render-size\";\nexport * from \"./snapshot\";\nexport { charts } from \"./svg\";\nexport {\n type AxisOptions,\n arcPathD,\n autoBin,\n type BarItem,\n bar,\n barGauge,\n boxplot,\n type ChartOptions,\n chartDatumSvg,\n computeBoxStats,\n computeDomain,\n donut,\n escapeXml,\n extendDomainToNice,\n gauge,\n heatmap,\n histogram,\n type LineStyle,\n line,\n linearRegression,\n linePathD,\n type MapOptions,\n type MapPoint,\n type MapSeries,\n type MapViewport,\n type MarkerShape,\n mapLog,\n mapRange,\n markerPath,\n niceLogTicks,\n niceStep,\n normalizePadding,\n type Padding,\n type Point,\n pie,\n type ReferenceLine,\n type Series,\n type SliceItem,\n scatter,\n smoothPathD,\n sparkline,\n stat,\n stateTimeline,\n stepPathD,\n svgRoot,\n} from \"./svg-renderers\";\nexport {\n type ChartDateFormat,\n type ChartDatum,\n type ChartDatumRole,\n type ChartFormat,\n type ChartKind,\n type ChartNumberFormat,\n chartDatumRoles,\n} from \"./types\";\n\nexport { renderWaterfallLayoutSvg, renderWaterfallSvg, type WaterfallLayout, type WaterfallOptions, waterfallLayout } from \"./waterfall\";\n"],"mappings":"AAAA;;AAEA,SAAoD,cAAc,EAAE,iBAAiB,EAAE,eAAe,QAAQ,yBAAyB;AACvI,SACE,sBAAsB,EAGtB,mBAAmB,EACnB,mBAAmB,QACd,oCAAoC;AAE3C,SAA2B,UAAU,EAAE,aAAa,QAAQ,QAAQ;AACpE,cAAc,YAAY;AAC1B,SAA8D,UAAU,EAAE,mBAAmB,EAAE,aAAa,QAAQ,QAAQ;AAC5H,cAAc,cAAc;AAC5B,SAAS,GAAG,QAAQ,OAAO;AAC3B,cAAc,UAAU;AACxB,SAAS,iBAAiB,EAAE,oBAAoB,QAAQ,eAAe;AACvE,cAAc,YAAY;AAC1B,SAAS,MAAM,QAAQ,OAAO;AAC9B,SAEE,QAAQ,EACR,OAAO,EAEP,GAAG,EACH,QAAQ,EACR,OAAO,EAEP,aAAa,EACb,eAAe,EACf,aAAa,EACb,KAAK,EACL,SAAS,EACT,kBAAkB,EAClB,KAAK,EACL,OAAO,EACP,SAAS,EAET,IAAI,EACJ,gBAAgB,EAChB,SAAS,EAMT,MAAM,EACN,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAGhB,GAAG,EAIH,OAAO,EACP,WAAW,EACX,SAAS,EACT,IAAI,EACJ,aAAa,EACb,SAAS,EACT,OAAO,QACF,iBAAiB;AACxB,SAOE,eAAe,QACV,SAAS;AAEhB,SAAS,wBAAwB,EAAE,kBAAkB,EAA+C,eAAe,QAAQ,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { chartDatumRoles } from "./types";
|
|
2
|
+
export const sameChartDatum = (a, b) => a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;
|
|
3
|
+
const object = value => typeof value === "object" && value !== null;
|
|
4
|
+
const pair = value => Array.isArray(value) && value.length === 2 && value.every(n => typeof n === "number" && Number.isFinite(n));
|
|
5
|
+
const roles = new Set(chartDatumRoles);
|
|
6
|
+
export function isChartDatum(value) {
|
|
7
|
+
return object(value) && Number.isInteger(value.index) && typeof value.index === "number" && value.index >= 0 && (value.seriesIndex === undefined || typeof value.seriesIndex === "number" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0) && typeof value.role === "string" && roles.has(value.role) && pair(value.anchor) && (value.grid === undefined || pair(value.grid)) && (value.label === undefined || typeof value.label === "string") && Array.isArray(value.values) && value.values.every(field => object(field) && typeof field.key === "string" && (typeof field.value === "string" || typeof field.value === "number" && Number.isFinite(field.value)) && (field.formatted === undefined || typeof field.formatted === "string"));
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=inspection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/inspection.ts"],"sourcesContent":["import { type ChartDatum, type ChartKind, chartDatumRoles } from \"./types\";\n\nexport type ChartDatumRef = Pick<ChartDatum, \"role\" | \"index\" | \"seriesIndex\">;\nexport const sameChartDatum = (a: ChartDatumRef, b: ChartDatumRef) =>\n a.role === b.role && a.index === b.index && a.seriesIndex === b.seriesIndex;\n\nexport type ChartSelection = { kind: ChartKind; datum: ChartDatum };\nexport type ChartTooltip = { title?: string; rows: readonly { label: string; value: string }[] };\nexport type ChartTooltipFormatter = (selection: ChartSelection) => ChartTooltip;\n\nconst object = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null;\nconst pair = (value: unknown): value is [number, number] =>\n Array.isArray(value) && value.length === 2 && value.every((n) => typeof n === \"number\" && Number.isFinite(n));\nconst roles: ReadonlySet<string> = new Set(chartDatumRoles);\nexport function isChartDatum(value: unknown): value is ChartDatum {\n return (\n object(value) &&\n Number.isInteger(value.index) &&\n typeof value.index === \"number\" &&\n value.index >= 0 &&\n (value.seriesIndex === undefined ||\n (typeof value.seriesIndex === \"number\" && Number.isInteger(value.seriesIndex) && value.seriesIndex >= 0)) &&\n typeof value.role === \"string\" &&\n roles.has(value.role) &&\n pair(value.anchor) &&\n (value.grid === undefined || pair(value.grid)) &&\n (value.label === undefined || typeof value.label === \"string\") &&\n Array.isArray(value.values) &&\n value.values.every(\n (field) =>\n object(field) &&\n typeof field.key === \"string\" &&\n (typeof field.value === \"string\" || (typeof field.value === \"number\" && Number.isFinite(field.value))) &&\n (field.formatted === undefined || typeof field.formatted === \"string\"),\n )\n );\n}\n"],"mappings":"AAAA,SAA0C,eAAe,QAAQ,SAAS;AAG1E,OAAO,MAAM,cAAc,GAAG,CAAC,CAAgB,EAAE,CAAgB,KAC/D,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW;AAM7E,MAAM,MAAM,GAAI,KAAc,IAAuC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;AAChH,MAAM,IAAI,GAAI,KAAc,IAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAE,CAAC,IAAK,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/G,MAAM,KAA0B,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC;AAC3D,OAAO,SAAS,YAAY,CAAC,KAAc,EAAuB;EAChE,OACE,MAAM,CAAC,KAAK,CAAC,IACb,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAC7B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAC/B,KAAK,CAAC,KAAK,IAAI,CAAC,KACf,KAAK,CAAC,WAAW,KAAK,SAAS,IAC7B,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,WAAW,IAAI,CAAE,CAAC,IAC3G,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KACjB,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAC7C,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,IAC9D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAC3B,KAAK,CAAC,MAAM,CAAC,KAAK,CACf,KAAK,IACJ,MAAM,CAAC,KAAK,CAAC,IACb,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,KAC5B,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAK,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,KACrG,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,CACzE,CAAC;AAEL","ignoreList":[]}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { WORLD_LAND_PATH, WORLD_MAP_HEIGHT, WORLD_MAP_WIDTH } from "./chart-map-data";
|
|
2
|
+
import { chartDatumSvg, clamp, computePlotArea, escapeXml, fmt, mapRange, measureLegendHeight, normalizePadding, renderHeader, renderLegend, svgRoot } from "./svg-renderers";
|
|
3
|
+
const isMapPoint = point => Number.isFinite(point.latitude) && Number.isFinite(point.longitude) && point.latitude >= -90 && point.latitude <= 90 && point.longitude >= -180 && point.longitude <= 180;
|
|
4
|
+
const MAP_MIN_ZOOM = 0;
|
|
5
|
+
const MAP_MAX_ZOOM = 5;
|
|
6
|
+
const normalizeMapViewport = viewport => {
|
|
7
|
+
const zoom = clamp(viewport && Number.isFinite(viewport.zoom) ? viewport.zoom : MAP_MIN_ZOOM, MAP_MIN_ZOOM, MAP_MAX_ZOOM);
|
|
8
|
+
const zoomScale = 2 ** zoom;
|
|
9
|
+
const latitudeLimit = 90 - 90 / zoomScale;
|
|
10
|
+
const longitudeLimit = 180 - 180 / zoomScale;
|
|
11
|
+
return {
|
|
12
|
+
latitude: clamp(viewport && Number.isFinite(viewport.latitude) ? viewport.latitude : 0, -latitudeLimit, latitudeLimit),
|
|
13
|
+
longitude: clamp(viewport && Number.isFinite(viewport.longitude) ? viewport.longitude : 0, -longitudeLimit, longitudeLimit),
|
|
14
|
+
zoom
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
/** Render geographic point series over a dependency-free world land map. */
|
|
19
|
+
export function map(opts) {
|
|
20
|
+
const width = opts.width ?? 640;
|
|
21
|
+
const height = opts.height ?? 340;
|
|
22
|
+
const padding = normalizePadding(opts.padding ?? {
|
|
23
|
+
top: 12,
|
|
24
|
+
right: 16,
|
|
25
|
+
bottom: 12,
|
|
26
|
+
left: 16
|
|
27
|
+
});
|
|
28
|
+
const header = renderHeader(width, opts.title, opts.subtitle);
|
|
29
|
+
const legendItems = opts.legend ? opts.series.map((series, index) => ({
|
|
30
|
+
label: series.label && series.label.length > 0 ? series.label : `Series ${index + 1}`,
|
|
31
|
+
seriesIndex: index
|
|
32
|
+
})) : [];
|
|
33
|
+
const legendHeight = measureLegendHeight(legendItems, width);
|
|
34
|
+
const area = computePlotArea(width, height, padding, false, false, header.height, legendHeight);
|
|
35
|
+
const availableWidth = Math.max(0, area.x1 - area.x0);
|
|
36
|
+
const availableHeight = Math.max(0, area.y1 - area.y0);
|
|
37
|
+
const scale = Math.max(0, Math.min(availableWidth / WORLD_MAP_WIDTH, availableHeight / WORLD_MAP_HEIGHT));
|
|
38
|
+
const mapWidth = WORLD_MAP_WIDTH * scale;
|
|
39
|
+
const mapHeight = WORLD_MAP_HEIGHT * scale;
|
|
40
|
+
const mapX = area.x0 + (availableWidth - mapWidth) / 2;
|
|
41
|
+
const mapY = area.y0 + (availableHeight - mapHeight) / 2;
|
|
42
|
+
const viewport = normalizeMapViewport(opts.viewport);
|
|
43
|
+
const zoomScale = 2 ** viewport.zoom;
|
|
44
|
+
const projectedScale = scale * zoomScale;
|
|
45
|
+
const centerWorldX = (viewport.longitude + 180) / 360 * WORLD_MAP_WIDTH;
|
|
46
|
+
const centerWorldY = (90 - viewport.latitude) / 180 * WORLD_MAP_HEIGHT;
|
|
47
|
+
const finitePoints = opts.series.flatMap((series, seriesIndex) => series.data.map((point, index) => ({
|
|
48
|
+
point,
|
|
49
|
+
seriesIndex,
|
|
50
|
+
index
|
|
51
|
+
})).filter(({
|
|
52
|
+
point
|
|
53
|
+
}) => isMapPoint(point)));
|
|
54
|
+
let sizeMin = Number.POSITIVE_INFINITY;
|
|
55
|
+
let sizeMax = Number.NEGATIVE_INFINITY;
|
|
56
|
+
for (const {
|
|
57
|
+
point
|
|
58
|
+
} of finitePoints) {
|
|
59
|
+
if (typeof point.size !== "number" || !Number.isFinite(point.size) || point.size < 0) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (point.size < sizeMin) sizeMin = point.size;
|
|
63
|
+
if (point.size > sizeMax) sizeMax = point.size;
|
|
64
|
+
}
|
|
65
|
+
const hasSizes = Number.isFinite(sizeMin) && Number.isFinite(sizeMax);
|
|
66
|
+
const requestedSizeRange = opts.sizeRange ?? [3, 12];
|
|
67
|
+
const firstRadius = Number.isFinite(requestedSizeRange[0]) ? Math.max(0, requestedSizeRange[0]) : 3;
|
|
68
|
+
const secondRadius = Number.isFinite(requestedSizeRange[1]) ? Math.max(0, requestedSizeRange[1]) : 12;
|
|
69
|
+
const radiusRange = firstRadius <= secondRadius ? [firstRadius, secondRadius] : [secondRadius, firstRadius];
|
|
70
|
+
const body = [header.svg];
|
|
71
|
+
if (scale > 0) {
|
|
72
|
+
body.push(`<svg class="stdlib-chart-map-viewport" x="${fmt(mapX)}" y="${fmt(mapY)}" width="${fmt(mapWidth)}" height="${fmt(mapHeight)}" viewBox="0 0 ${fmt(mapWidth)} ${fmt(mapHeight)}" overflow="hidden">`, `<path class="stdlib-chart-map-land" fill-rule="evenodd" transform="translate(${fmt(mapWidth / 2)} ${fmt(mapHeight / 2)}) scale(${fmt(projectedScale)}) translate(${fmt(-centerWorldX)} ${fmt(-centerWorldY)})" d="${WORLD_LAND_PATH}"/>`);
|
|
73
|
+
for (const {
|
|
74
|
+
point,
|
|
75
|
+
seriesIndex,
|
|
76
|
+
index
|
|
77
|
+
} of finitePoints) {
|
|
78
|
+
const pointWorldX = (point.longitude + 180) / 360 * WORLD_MAP_WIDTH;
|
|
79
|
+
const pointWorldY = (90 - point.latitude) / 180 * WORLD_MAP_HEIGHT;
|
|
80
|
+
const x = mapWidth / 2 + (pointWorldX - centerWorldX) * projectedScale;
|
|
81
|
+
const y = mapHeight / 2 + (pointWorldY - centerWorldY) * projectedScale;
|
|
82
|
+
const radius = hasSizes && typeof point.size === "number" && Number.isFinite(point.size) && point.size >= 0 ? sizeMin === sizeMax ? (radiusRange[0] + radiusRange[1]) / 2 : mapRange(point.size, [sizeMin, sizeMax], radiusRange) : 4;
|
|
83
|
+
const title = point.label && point.label.length > 0 ? `<title>${escapeXml(point.label)}</title>` : "";
|
|
84
|
+
body.push(chartDatumSvg(`<circle class="stdlib-chart-map-point stdlib-chart-series-${seriesIndex % 8}" cx="${fmt(x)}" cy="${fmt(y)}" r="${fmt(radius)}">${title}</circle>`, {
|
|
85
|
+
index,
|
|
86
|
+
seriesIndex,
|
|
87
|
+
role: "point",
|
|
88
|
+
label: point.label ?? opts.series[seriesIndex]?.label,
|
|
89
|
+
anchor: [x, y],
|
|
90
|
+
values: [{
|
|
91
|
+
key: "latitude",
|
|
92
|
+
value: point.latitude
|
|
93
|
+
}, {
|
|
94
|
+
key: "longitude",
|
|
95
|
+
value: point.longitude
|
|
96
|
+
}, ...(point.size !== undefined && Number.isFinite(point.size) ? [{
|
|
97
|
+
key: "size",
|
|
98
|
+
value: point.size
|
|
99
|
+
}] : [])]
|
|
100
|
+
}, opts.inspect && x >= 0 && y >= 0 && x <= mapWidth && y <= mapHeight));
|
|
101
|
+
}
|
|
102
|
+
body.push("</svg>");
|
|
103
|
+
}
|
|
104
|
+
if (finitePoints.length === 0) {
|
|
105
|
+
body.push(`<text class="stdlib-chart-map-empty" x="${fmt(area.x0 + availableWidth / 2)}" y="${fmt(area.y0 + availableHeight / 2)}" text-anchor="middle" dominant-baseline="middle">No data</text>`);
|
|
106
|
+
}
|
|
107
|
+
if (legendItems.length > 0) {
|
|
108
|
+
body.push(renderLegend(legendItems, width, height - legendHeight).svg);
|
|
109
|
+
}
|
|
110
|
+
return svgRoot({
|
|
111
|
+
width,
|
|
112
|
+
height,
|
|
113
|
+
className: opts.className
|
|
114
|
+
}, body.join(""));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/map.ts"],"sourcesContent":["import { WORLD_LAND_PATH, WORLD_MAP_HEIGHT, WORLD_MAP_WIDTH } from \"./chart-map-data\";\nimport {\n chartDatumSvg,\n clamp,\n computePlotArea,\n escapeXml,\n fmt,\n type MapOptions,\n type MapPoint,\n type MapViewport,\n mapRange,\n measureLegendHeight,\n normalizePadding,\n renderHeader,\n renderLegend,\n svgRoot,\n} from \"./svg-renderers\";\n\nconst isMapPoint = (point: MapPoint): boolean =>\n Number.isFinite(point.latitude) &&\n Number.isFinite(point.longitude) &&\n point.latitude >= -90 &&\n point.latitude <= 90 &&\n point.longitude >= -180 &&\n point.longitude <= 180;\n\nconst MAP_MIN_ZOOM = 0;\nconst MAP_MAX_ZOOM = 5;\n\nconst normalizeMapViewport = (viewport: MapViewport | undefined): MapViewport => {\n const zoom = clamp(viewport && Number.isFinite(viewport.zoom) ? viewport.zoom : MAP_MIN_ZOOM, MAP_MIN_ZOOM, MAP_MAX_ZOOM);\n const zoomScale = 2 ** zoom;\n const latitudeLimit = 90 - 90 / zoomScale;\n const longitudeLimit = 180 - 180 / zoomScale;\n\n return {\n latitude: clamp(viewport && Number.isFinite(viewport.latitude) ? viewport.latitude : 0, -latitudeLimit, latitudeLimit),\n longitude: clamp(viewport && Number.isFinite(viewport.longitude) ? viewport.longitude : 0, -longitudeLimit, longitudeLimit),\n zoom,\n };\n};\n\n/** Render geographic point series over a dependency-free world land map. */\nexport function map(opts: MapOptions): string {\n const width = opts.width ?? 640;\n const height = opts.height ?? 340;\n const padding = normalizePadding(opts.padding ?? { top: 12, right: 16, bottom: 12, left: 16 });\n const header = renderHeader(width, opts.title, opts.subtitle);\n const legendItems = opts.legend\n ? opts.series.map((series, index) => ({\n label: series.label && series.label.length > 0 ? series.label : `Series ${index + 1}`,\n seriesIndex: index,\n }))\n : [];\n const legendHeight = measureLegendHeight(legendItems, width);\n const area = computePlotArea(width, height, padding, false, false, header.height, legendHeight);\n const availableWidth = Math.max(0, area.x1 - area.x0);\n const availableHeight = Math.max(0, area.y1 - area.y0);\n const scale = Math.max(0, Math.min(availableWidth / WORLD_MAP_WIDTH, availableHeight / WORLD_MAP_HEIGHT));\n const mapWidth = WORLD_MAP_WIDTH * scale;\n const mapHeight = WORLD_MAP_HEIGHT * scale;\n const mapX = area.x0 + (availableWidth - mapWidth) / 2;\n const mapY = area.y0 + (availableHeight - mapHeight) / 2;\n const viewport = normalizeMapViewport(opts.viewport);\n const zoomScale = 2 ** viewport.zoom;\n const projectedScale = scale * zoomScale;\n const centerWorldX = ((viewport.longitude + 180) / 360) * WORLD_MAP_WIDTH;\n const centerWorldY = ((90 - viewport.latitude) / 180) * WORLD_MAP_HEIGHT;\n\n const finitePoints = opts.series.flatMap((series, seriesIndex) =>\n series.data.map((point, index) => ({ point, seriesIndex, index })).filter(({ point }) => isMapPoint(point)),\n );\n\n let sizeMin = Number.POSITIVE_INFINITY;\n let sizeMax = Number.NEGATIVE_INFINITY;\n for (const { point } of finitePoints) {\n if (typeof point.size !== \"number\" || !Number.isFinite(point.size) || point.size < 0) {\n continue;\n }\n if (point.size < sizeMin) sizeMin = point.size;\n if (point.size > sizeMax) sizeMax = point.size;\n }\n const hasSizes = Number.isFinite(sizeMin) && Number.isFinite(sizeMax);\n const requestedSizeRange = opts.sizeRange ?? [3, 12];\n const firstRadius = Number.isFinite(requestedSizeRange[0]) ? Math.max(0, requestedSizeRange[0]) : 3;\n const secondRadius = Number.isFinite(requestedSizeRange[1]) ? Math.max(0, requestedSizeRange[1]) : 12;\n const radiusRange: [number, number] = firstRadius <= secondRadius ? [firstRadius, secondRadius] : [secondRadius, firstRadius];\n\n const body: string[] = [header.svg];\n if (scale > 0) {\n body.push(\n `<svg class=\"stdlib-chart-map-viewport\" x=\"${fmt(mapX)}\" y=\"${fmt(mapY)}\" width=\"${fmt(mapWidth)}\" height=\"${fmt(mapHeight)}\" viewBox=\"0 0 ${fmt(mapWidth)} ${fmt(mapHeight)}\" overflow=\"hidden\">`,\n `<path class=\"stdlib-chart-map-land\" fill-rule=\"evenodd\" transform=\"translate(${fmt(mapWidth / 2)} ${fmt(mapHeight / 2)}) scale(${fmt(projectedScale)}) translate(${fmt(-centerWorldX)} ${fmt(-centerWorldY)})\" d=\"${WORLD_LAND_PATH}\"/>`,\n );\n\n for (const { point, seriesIndex, index } of finitePoints) {\n const pointWorldX = ((point.longitude + 180) / 360) * WORLD_MAP_WIDTH;\n const pointWorldY = ((90 - point.latitude) / 180) * WORLD_MAP_HEIGHT;\n const x = mapWidth / 2 + (pointWorldX - centerWorldX) * projectedScale;\n const y = mapHeight / 2 + (pointWorldY - centerWorldY) * projectedScale;\n const radius =\n hasSizes && typeof point.size === \"number\" && Number.isFinite(point.size) && point.size >= 0\n ? sizeMin === sizeMax\n ? (radiusRange[0] + radiusRange[1]) / 2\n : mapRange(point.size, [sizeMin, sizeMax], radiusRange)\n : 4;\n const title = point.label && point.label.length > 0 ? `<title>${escapeXml(point.label)}</title>` : \"\";\n body.push(\n chartDatumSvg(\n `<circle class=\"stdlib-chart-map-point stdlib-chart-series-${seriesIndex % 8}\" cx=\"${fmt(x)}\" cy=\"${fmt(y)}\" r=\"${fmt(radius)}\">${title}</circle>`,\n {\n index,\n seriesIndex,\n role: \"point\",\n label: point.label ?? opts.series[seriesIndex]?.label,\n anchor: [x, y],\n values: [\n { key: \"latitude\", value: point.latitude },\n { key: \"longitude\", value: point.longitude },\n ...(point.size !== undefined && Number.isFinite(point.size) ? [{ key: \"size\", value: point.size }] : []),\n ],\n },\n opts.inspect && x >= 0 && y >= 0 && x <= mapWidth && y <= mapHeight,\n ),\n );\n }\n body.push(\"</svg>\");\n }\n\n if (finitePoints.length === 0) {\n body.push(\n `<text class=\"stdlib-chart-map-empty\" x=\"${fmt(area.x0 + availableWidth / 2)}\" y=\"${fmt(area.y0 + availableHeight / 2)}\" text-anchor=\"middle\" dominant-baseline=\"middle\">No data</text>`,\n );\n }\n if (legendItems.length > 0) {\n body.push(renderLegend(legendItems, width, height - legendHeight).svg);\n }\n\n return svgRoot({ width, height, className: opts.className }, body.join(\"\"));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { renderBarChartSvg } from "../../content/chart-bar";
|
|
2
|
+
import { renderStateTimelineSvg } from "../../content/chart-state-timeline";
|
|
3
|
+
import { renderAreaSvg } from "./area";
|
|
4
|
+
import { renderHeatmapSvg } from "./calendar";
|
|
5
|
+
import { renderHbarSvg } from "./hbar";
|
|
6
|
+
import { map } from "./map";
|
|
7
|
+
import { barGauge, boxplot, donut, gauge, histogram, line, pie, scatter, sparkline, stat } from "./svg-renderers";
|
|
8
|
+
import { renderWaterfallSvg } from "./waterfall";
|
|
9
|
+
|
|
10
|
+
// Add one renderer here: its key defines the discriminator, ChartKind and the capitalized Chart namespace member.
|
|
11
|
+
// Keep kind-specific adaptations in renderChartSvg and add a fixture to the namespace parity test.
|
|
12
|
+
const createChartRenderers = () => ({
|
|
13
|
+
waterfall: renderWaterfallSvg,
|
|
14
|
+
area: renderAreaSvg,
|
|
15
|
+
line: line,
|
|
16
|
+
bar: renderBarChartSvg,
|
|
17
|
+
hbar: renderHbarSvg,
|
|
18
|
+
pie: pie,
|
|
19
|
+
donut: donut,
|
|
20
|
+
scatter: scatter,
|
|
21
|
+
sparkline: sparkline,
|
|
22
|
+
histogram: histogram,
|
|
23
|
+
boxplot: boxplot,
|
|
24
|
+
gauge: gauge,
|
|
25
|
+
barGauge: barGauge,
|
|
26
|
+
stat: stat,
|
|
27
|
+
heatmap: renderHeatmapSvg,
|
|
28
|
+
map: map,
|
|
29
|
+
stateTimeline: renderStateTimelineSvg
|
|
30
|
+
});
|
|
31
|
+
export const chartRenderers = /* @__PURE__ */createChartRenderers();
|
|
32
|
+
// Object.entries loses literal keys; names are constructed from those same keys here.
|
|
33
|
+
const kinds = () => Object.fromEntries(Object.keys(chartRenderers).map(kind => [kind[0].toUpperCase() + kind.slice(1), kind]));
|
|
34
|
+
export const chartKinds = /* @__PURE__ */kinds();
|
|
35
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/registry.ts"],"sourcesContent":["import { renderBarChartSvg } from \"../../content/chart-bar\";\nimport { renderStateTimelineSvg } from \"../../content/chart-state-timeline\";\nimport { renderAreaSvg } from \"./area\";\nimport { renderHeatmapSvg } from \"./calendar\";\nimport { renderHbarSvg } from \"./hbar\";\nimport { map } from \"./map\";\nimport { barGauge, boxplot, donut, gauge, histogram, line, pie, scatter, sparkline, stat } from \"./svg-renderers\";\nimport { renderWaterfallSvg } from \"./waterfall\";\n\n// Add one renderer here: its key defines the discriminator, ChartKind and the capitalized Chart namespace member.\n// Keep kind-specific adaptations in renderChartSvg and add a fixture to the namespace parity test.\nconst createChartRenderers = () => ({\n waterfall: renderWaterfallSvg,\n area: renderAreaSvg,\n line: line,\n bar: renderBarChartSvg,\n hbar: renderHbarSvg,\n pie: pie,\n donut: donut,\n scatter: scatter,\n sparkline: sparkline,\n histogram: histogram,\n boxplot: boxplot,\n gauge: gauge,\n barGauge: barGauge,\n stat: stat,\n heatmap: renderHeatmapSvg,\n map: map,\n stateTimeline: renderStateTimelineSvg,\n});\nexport const chartRenderers = /* @__PURE__ */ createChartRenderers();\ntype Kind = keyof typeof chartRenderers;\ntype ChartKinds = { [K in Kind as Capitalize<K>]: K };\n// Object.entries loses literal keys; names are constructed from those same keys here.\nconst kinds = () =>\n Object.fromEntries(Object.keys(chartRenderers).map((kind) => [kind[0]!.toUpperCase() + kind.slice(1), kind])) as ChartKinds;\nexport const chartKinds = /* @__PURE__ */ kinds();\n"],"mappings":"AAAA,SAAS,iBAAiB,QAAQ,yBAAyB;AAC3D,SAAS,sBAAsB,QAAQ,oCAAoC;AAC3E,SAAS,aAAa,QAAQ,QAAQ;AACtC,SAAS,gBAAgB,QAAQ,YAAY;AAC7C,SAAS,aAAa,QAAQ,QAAQ;AACtC,SAAS,GAAG,QAAQ,OAAO;AAC3B,SAAS,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,QAAQ,iBAAiB;AACjH,SAAS,kBAAkB,QAAQ,aAAa;;AAEhD;AACA;AACA,MAAM,oBAAoB,GAAG,OAAO;EAClC,SAAS,EAAE,kBAAkB;EAC7B,IAAI,EAAE,aAAa;EACnB,IAAI,EAAE,IAAI;EACV,GAAG,EAAE,iBAAiB;EACtB,IAAI,EAAE,aAAa;EACnB,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,OAAO;EAChB,SAAS,EAAE,SAAS;EACpB,SAAS,EAAE,SAAS;EACpB,OAAO,EAAE,OAAO;EAChB,KAAK,EAAE,KAAK;EACZ,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,IAAI;EACV,OAAO,EAAE,gBAAgB;EACzB,GAAG,EAAE,GAAG;EACR,aAAa,EAAE;AACjB,CAAC,CAAC;AACF,OAAO,MAAM,cAAc,GAAG,eAAgB,oBAAoB,CAAC,CAAC;AAGpE;AACA,MAAM,KAAK,GAAG,MACZ,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAE,IAAI,IAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAe;AAC7H,OAAO,MAAM,UAAU,GAAG,eAAgB,KAAK,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { barChartLayout } from "../../content/chart-bar";
|
|
2
|
+
import { stateTimelineHeight } from "../../content/chart-state-timeline";
|
|
3
|
+
import { hbarLayout } from "./hbar";
|
|
4
|
+
/** Standard logical height, or compact bar-gauge rows for a host without an explicit height. */
|
|
5
|
+
export const chartRenderHeight = (props, sizing = {}) => {
|
|
6
|
+
if (props.kind === "stateTimeline") return stateTimelineHeight(props.rows.length, props.legend !== false);
|
|
7
|
+
if (props.kind === "bar") return barChartLayout(props).height;
|
|
8
|
+
if (props.kind === "hbar") return hbarLayout(props).height;
|
|
9
|
+
if (props.kind === "barGauge") return Math.max(sizing.contentHeight ? 80 : 280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);
|
|
10
|
+
return 280;
|
|
11
|
+
};
|
|
12
|
+
export const preservesAspectRatio = kind => kind === "map" || kind === "pie" || kind === "donut" || kind === "gauge";
|
|
13
|
+
//# sourceMappingURL=render-size.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/render-size.ts"],"sourcesContent":["import { barChartLayout } from \"../../content/chart-bar\";\nimport { stateTimelineHeight } from \"../../content/chart-state-timeline\";\nimport { hbarLayout } from \"./hbar\";\nimport type { ChartRenderOptions } from \"./render\";\nimport type { ChartKind } from \"./types\";\n\n/** Standard logical height, or compact bar-gauge rows for a host without an explicit height. */\nexport const chartRenderHeight = (props: ChartRenderOptions, sizing: { contentHeight?: boolean } = {}): number => {\n if (props.kind === \"stateTimeline\") return stateTimelineHeight(props.rows.length, props.legend !== false);\n if (props.kind === \"bar\") return barChartLayout(props).height;\n if (props.kind === \"hbar\") return hbarLayout(props).height;\n if (props.kind === \"barGauge\")\n return Math.max(sizing.contentHeight ? 80 : 280, (props.title || props.subtitle ? 42 : 16) + props.data.length * 28 + 14);\n return 280;\n};\n\nexport const preservesAspectRatio = (kind: ChartKind) => kind === \"map\" || kind === \"pie\" || kind === \"donut\" || kind === \"gauge\";\n"],"mappings":"AAAA,SAAS,cAAc,QAAQ,yBAAyB;AACxD,SAAS,mBAAmB,QAAQ,oCAAoC;AACxE,SAAS,UAAU,QAAQ,QAAQ;AAInC;AACA,OAAO,MAAM,iBAAiB,GAAG,CAAC,KAAyB,EAAE,MAAmC,GAAG,CAAC,CAAC,KAAa;EAChH,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC;EACzG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,MAAM;EAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM;EAC1D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC;EAC3H,OAAO,GAAG;AACZ,CAAC;AAED,OAAO,MAAM,oBAAoB,GAAI,IAAe,IAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO","ignoreList":[]}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { renderBarChartSvg } from "../../content/chart-bar";
|
|
2
|
+
import { lineGapsSvg } from "../../content/chart-line-gaps";
|
|
3
|
+
import { DEFAULT_MAP_VIEWPORT, normalizeMapViewport } from "../../content/chart-map-viewport";
|
|
4
|
+
import { renderStateTimelineSvg } from "../../content/chart-state-timeline";
|
|
5
|
+
import { responsiveChartSvg, responsiveMapSvg } from "../../content/chart-svg";
|
|
6
|
+
import { timeAxisSvg } from "../../content/chart-time-axis";
|
|
7
|
+
import { renderAreaSvg } from "./area";
|
|
8
|
+
import { renderHbarSvg } from "./hbar";
|
|
9
|
+
import { chartRenderers } from "./registry";
|
|
10
|
+
import { renderWaterfallSvg } from "./waterfall";
|
|
11
|
+
export { chartRenderHeight, preservesAspectRatio } from "./render-size";
|
|
12
|
+
import { preservesAspectRatio } from "./render-size";
|
|
13
|
+
|
|
14
|
+
/** Shared logical SVG renderer; callbacks and browser interaction stay with the Solid host. */
|
|
15
|
+
export const renderChartSvg = (props, width, height, mapViewport, timelineViewport, renderLocale) => {
|
|
16
|
+
if (props.kind === "heatmap" && props.layout === "calendar") return chartRenderers.heatmap({
|
|
17
|
+
...props,
|
|
18
|
+
width,
|
|
19
|
+
height,
|
|
20
|
+
inspect: true
|
|
21
|
+
});
|
|
22
|
+
const {
|
|
23
|
+
kind,
|
|
24
|
+
zoomFocus: _zoomFocus,
|
|
25
|
+
legendPlacement: _legendPlacement,
|
|
26
|
+
timeAxis: _timeAxis,
|
|
27
|
+
...opts
|
|
28
|
+
} = props;
|
|
29
|
+
if (kind === "stateTimeline") {
|
|
30
|
+
return responsiveChartSvg(renderStateTimelineSvg({
|
|
31
|
+
...opts,
|
|
32
|
+
width,
|
|
33
|
+
height,
|
|
34
|
+
viewport: timelineViewport,
|
|
35
|
+
interactive: true
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
if (kind === "hbar") return responsiveChartSvg(renderHbarSvg({
|
|
39
|
+
...opts,
|
|
40
|
+
width,
|
|
41
|
+
height,
|
|
42
|
+
inspect: true
|
|
43
|
+
}));
|
|
44
|
+
if (kind === "waterfall") return responsiveChartSvg(renderWaterfallSvg({
|
|
45
|
+
...opts,
|
|
46
|
+
displayWidth: opts.displayWidth ?? 296,
|
|
47
|
+
locale: opts.locale ?? renderLocale,
|
|
48
|
+
width,
|
|
49
|
+
height,
|
|
50
|
+
inspect: true
|
|
51
|
+
}, true));
|
|
52
|
+
if (kind === "area") return responsiveChartSvg(renderAreaSvg({
|
|
53
|
+
...opts,
|
|
54
|
+
locale: opts.locale ?? renderLocale,
|
|
55
|
+
legend: false,
|
|
56
|
+
width,
|
|
57
|
+
height,
|
|
58
|
+
inspect: true
|
|
59
|
+
}));
|
|
60
|
+
if (kind === "bar") return responsiveChartSvg(renderBarChartSvg({
|
|
61
|
+
...opts,
|
|
62
|
+
width,
|
|
63
|
+
height,
|
|
64
|
+
inspect: true
|
|
65
|
+
}));
|
|
66
|
+
// A time axis needs an explicit X domain: it maps its round ticks onto the axis the renderer drew over it.
|
|
67
|
+
const timeAxis = props.kind === "line" ? props.timeAxis : undefined;
|
|
68
|
+
const timeDomain = timeAxis && props.kind === "line" ? lineTimeDomain(props) : undefined;
|
|
69
|
+
let svg = chartRenderers[kind]({
|
|
70
|
+
...opts,
|
|
71
|
+
...(timeDomain && props.kind === "line" ? {
|
|
72
|
+
xAxis: {
|
|
73
|
+
...props.xAxis,
|
|
74
|
+
domain: timeDomain,
|
|
75
|
+
format: () => ""
|
|
76
|
+
}
|
|
77
|
+
} : {}),
|
|
78
|
+
...(props.kind === "line" && props.legend && props.legendPlacement === "top-start" ? {
|
|
79
|
+
legend: false
|
|
80
|
+
} : {}),
|
|
81
|
+
...(kind === "map" ? {
|
|
82
|
+
viewport: DEFAULT_MAP_VIEWPORT
|
|
83
|
+
} : {}),
|
|
84
|
+
width,
|
|
85
|
+
height,
|
|
86
|
+
inspect: true
|
|
87
|
+
});
|
|
88
|
+
if (props.kind === "line" && props.maxGap !== undefined) {
|
|
89
|
+
if (props.area || props.errorBand) throw new Error("Chart maxGap does not support area or errorBand fills");
|
|
90
|
+
svg = lineGapsSvg(svg, props.maxGap, props);
|
|
91
|
+
}
|
|
92
|
+
if (timeAxis && timeDomain && props.kind === "line") svg = timeAxisSvg(svg, timeDomain, timeAxis, (props.xAxis?.ticks ?? 3) + 2, props.xAxis?.format);
|
|
93
|
+
if (props.kind === "map") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));
|
|
94
|
+
return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/** The given X domain, or the span of the plotted instants. */
|
|
98
|
+
const lineTimeDomain = props => {
|
|
99
|
+
if (props.xAxis?.domain) return props.xAxis.domain;
|
|
100
|
+
const xs = props.series.flatMap(series => series.data.map(point => point.x)).filter(Number.isFinite);
|
|
101
|
+
if (!xs.length) return undefined;
|
|
102
|
+
const lo = Math.min(...xs),
|
|
103
|
+
hi = Math.max(...xs);
|
|
104
|
+
return lo < hi ? [lo, hi] : undefined;
|
|
105
|
+
};
|
|
106
|
+
/** Lay out a chart in a fixed logical coordinate space, without browser measurement. */
|
|
107
|
+
export const layout = (spec, size) => ({
|
|
108
|
+
...size,
|
|
109
|
+
kind: spec.kind,
|
|
110
|
+
svg: renderChartSvg(spec, size.width, size.height)
|
|
111
|
+
});
|
|
112
|
+
export const toSvg = scene => scene.svg;
|
|
113
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["charts/core/render.ts"],"sourcesContent":["import { type BarChartOptions, renderBarChartSvg } from \"../../content/chart-bar\";\nimport { lineGapsSvg } from \"../../content/chart-line-gaps\";\nimport { DEFAULT_MAP_VIEWPORT, normalizeMapViewport } from \"../../content/chart-map-viewport\";\nimport { renderStateTimelineSvg, type StateTimelineChartOptions, type StateTimelineDomain } from \"../../content/chart-state-timeline\";\nimport { responsiveChartSvg, responsiveMapSvg } from \"../../content/chart-svg\";\nimport { type ChartTimeAxis, timeAxisSvg } from \"../../content/chart-time-axis\";\nimport { type AreaOptions, renderAreaSvg } from \"./area\";\nimport { type HorizontalBarOptions, renderHbarSvg } from \"./hbar\";\nimport { chartRenderers } from \"./registry\";\nimport type { MapViewport } from \"./svg\";\nimport type { ChartKind } from \"./types\";\nimport { renderWaterfallSvg, type WaterfallOptions } from \"./waterfall\";\n\ntype DrawingOptions<T> = T extends unknown ? Omit<T, \"width\" | \"height\" | \"inspect\" | \"interactive\"> : never;\ntype RenderOptions<T> = T extends unknown ? Omit<T, \"legendPlacement\"> : never;\n\nexport type ChartDrawingOptions = {\n [K in ChartKind]: { kind: K } & (K extends \"map\"\n ? {\n /** Target when zooming in from the world view. Defaults to Europe (50, 10). */\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n }\n : {}) &\n (K extends \"line\"\n ? {\n /** Largest connected X distance; positive, finite, without area/errorBand fills. */\n maxGap?: number;\n /** Wrap the legend above the plot inside the caller's total chart height. Requires legend=true. */\n legendPlacement?: \"top-start\";\n /** Round ticks for instant X values (Unix ms), in the supplied zone. xAxis.format labels them. */\n timeAxis?: ChartTimeAxis;\n }\n : {}) &\n DrawingOptions<Parameters<(typeof chartRenderers)[K]>[0]>;\n}[ChartKind];\nexport type ChartRenderOptions = RenderOptions<ChartDrawingOptions>;\n\nexport { chartRenderHeight, preservesAspectRatio } from \"./render-size\";\n\nimport { preservesAspectRatio } from \"./render-size\";\n\n/** Shared logical SVG renderer; callbacks and browser interaction stay with the Solid host. */\nexport const renderChartSvg = (\n props: ChartDrawingOptions,\n width: number,\n height: number,\n mapViewport?: MapViewport,\n timelineViewport?: StateTimelineDomain,\n renderLocale?: string,\n): string => {\n if (props.kind === \"heatmap\" && props.layout === \"calendar\") return chartRenderers.heatmap({ ...props, width, height, inspect: true });\n const {\n kind,\n zoomFocus: _zoomFocus,\n legendPlacement: _legendPlacement,\n timeAxis: _timeAxis,\n ...opts\n } = props as ChartDrawingOptions & {\n zoomFocus?: Pick<MapViewport, \"latitude\" | \"longitude\">;\n legendPlacement?: \"top-start\";\n timeAxis?: ChartTimeAxis;\n };\n if (kind === \"stateTimeline\") {\n return responsiveChartSvg(\n renderStateTimelineSvg({\n ...(opts as StateTimelineChartOptions),\n width,\n height,\n viewport: timelineViewport,\n interactive: true,\n }),\n );\n }\n if (kind === \"hbar\") return responsiveChartSvg(renderHbarSvg({ ...(opts as HorizontalBarOptions), width, height, inspect: true }));\n if (kind === \"waterfall\")\n return responsiveChartSvg(\n renderWaterfallSvg(\n {\n ...(opts as WaterfallOptions),\n displayWidth: (opts as WaterfallOptions).displayWidth ?? 296,\n locale: (opts as WaterfallOptions).locale ?? renderLocale,\n width,\n height,\n inspect: true,\n },\n true,\n ),\n );\n if (kind === \"area\")\n return responsiveChartSvg(\n renderAreaSvg({\n ...(opts as AreaOptions),\n locale: (opts as AreaOptions).locale ?? renderLocale,\n legend: false,\n width,\n height,\n inspect: true,\n }),\n );\n if (kind === \"bar\") return responsiveChartSvg(renderBarChartSvg({ ...(opts as BarChartOptions), width, height, inspect: true }));\n // A time axis needs an explicit X domain: it maps its round ticks onto the axis the renderer drew over it.\n const timeAxis = props.kind === \"line\" ? props.timeAxis : undefined;\n const timeDomain = timeAxis && props.kind === \"line\" ? lineTimeDomain(props) : undefined;\n let svg = (chartRenderers[kind] as (o: unknown) => string)({\n ...opts,\n ...(timeDomain && props.kind === \"line\" ? { xAxis: { ...props.xAxis, domain: timeDomain, format: () => \"\" } } : {}),\n ...(props.kind === \"line\" && props.legend && props.legendPlacement === \"top-start\" ? { legend: false } : {}),\n ...(kind === \"map\" ? { viewport: DEFAULT_MAP_VIEWPORT } : {}),\n width,\n height,\n inspect: true,\n });\n if (props.kind === \"line\" && props.maxGap !== undefined) {\n if (props.area || props.errorBand) throw new Error(\"Chart maxGap does not support area or errorBand fills\");\n svg = lineGapsSvg(svg, props.maxGap, props);\n }\n if (timeAxis && timeDomain && props.kind === \"line\")\n svg = timeAxisSvg(svg, timeDomain, timeAxis, (props.xAxis?.ticks ?? 3) + 2, props.xAxis?.format);\n if (props.kind === \"map\") return responsiveMapSvg(svg, width, height, normalizeMapViewport(mapViewport ?? props.viewport));\n return preservesAspectRatio(kind) ? svg : responsiveChartSvg(svg);\n};\n\n/** The given X domain, or the span of the plotted instants. */\nconst lineTimeDomain = (props: Extract<ChartDrawingOptions, { kind: \"line\" }>): [number, number] | undefined => {\n if (props.xAxis?.domain) return props.xAxis.domain;\n const xs = props.series.flatMap((series) => series.data.map((point) => point.x)).filter(Number.isFinite);\n if (!xs.length) return undefined;\n const lo = Math.min(...xs),\n hi = Math.max(...xs);\n return lo < hi ? [lo, hi] : undefined;\n};\n\nexport type ChartSize = { width: number; height: number };\nexport type ChartScene = ChartSize & { kind: ChartKind; svg: string };\n/** Lay out a chart in a fixed logical coordinate space, without browser measurement. */\nexport const layout = (spec: ChartDrawingOptions, size: ChartSize): ChartScene => ({\n ...size,\n kind: spec.kind,\n svg: renderChartSvg(spec, size.width, size.height),\n});\nexport const toSvg = (scene: ChartScene): string => scene.svg;\n"],"mappings":"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","ignoreList":[]}
|