@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
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import { positionTooltipSurface } from "../feedback/tooltip-position";
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
}
|
|
2
|
+
export { isChartDatum, sameChartDatum } from "../charts/core/inspection";
|
|
3
|
+
import { isChartDatum, sameChartDatum } from "../charts/core/inspection";
|
|
4
|
+
|
|
5
|
+
/** Host policy for inspecting an overflowing drawing. */
|
|
9
6
|
|
|
10
7
|
/** Adds or removes only the tooltip id, keeping descriptions the host put on the container. */
|
|
11
8
|
const describe = (container, id, on) => {
|
|
@@ -14,6 +11,14 @@ const describe = (container, id, on) => {
|
|
|
14
11
|
if (ids.length) container.setAttribute("aria-describedby", ids.join(" "));else container.removeAttribute("aria-describedby");
|
|
15
12
|
};
|
|
16
13
|
|
|
14
|
+
/** Mark roles that stand for a whole category: hovering anywhere in its column (or row) inspects it. */
|
|
15
|
+
const rowLayout = container => Boolean(container?.querySelector('svg[data-bar-layout="rows"]'));
|
|
16
|
+
const categoryRoles = {
|
|
17
|
+
bar: "item",
|
|
18
|
+
waterfall: "item",
|
|
19
|
+
histogram: "bin",
|
|
20
|
+
boxplot: "box"
|
|
21
|
+
};
|
|
17
22
|
/** Enhances existing SVG nodes. Pointer/focus changes never rebuild the chart. */
|
|
18
23
|
export function createChartInspector(options) {
|
|
19
24
|
const source = Symbol("chart cursor");
|
|
@@ -58,7 +63,7 @@ export function createChartInspector(options) {
|
|
|
58
63
|
// Read the actual paint before applying inspection styles, including
|
|
59
64
|
// custom series and threshold colors. Invisible points use their line.
|
|
60
65
|
const point = item.element.querySelector(".stdlib-chart-inspection-point");
|
|
61
|
-
const source = point ? options.container()?.querySelector(options.kind() === "line" ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}` : ".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline") : item.element.querySelector(".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value") ?? item.element.querySelector("rect, path, circle");
|
|
66
|
+
const source = point ? options.container()?.querySelector(options.kind() === "line" ? `.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}` : ".stdlib-chart-sparkline, .stdlib-chart-stat-sparkline") : item.element.querySelector(".stdlib-chart-bar-gauge-fill, .stdlib-chart-gauge-fill, .stdlib-chart-stat-value") ?? item.element.querySelector(":is(rect, path, circle):not(.k2b-chart-category-band)");
|
|
62
67
|
const paint = source ? source.ownerDocument.defaultView?.getComputedStyle(source) : undefined;
|
|
63
68
|
const color = (point || item.element.hasAttribute("data-chart-reference") ? paint?.stroke : paint?.fill) || `var(--stdlib-chart-c${(item.datum.seriesIndex ?? 0) % 8 + 1})`;
|
|
64
69
|
return `color-mix(in srgb, ${color} 72%, var(--k2b-chart-highlight-mix))`;
|
|
@@ -107,7 +112,23 @@ export function createChartInspector(options) {
|
|
|
107
112
|
});
|
|
108
113
|
};
|
|
109
114
|
const rawX = entry => entry.datum.values.find(field => field.key === "x")?.value;
|
|
110
|
-
const
|
|
115
|
+
const category = entry => options.kind() === "area" ? entry.datum.index : rawX(entry);
|
|
116
|
+
const groupedSeriesChart = () => options.kind() === "line" || options.kind() === "area";
|
|
117
|
+
const seriesChart = () => groupedSeriesChart() || options.kind() === "sparkline";
|
|
118
|
+
const updateLegend = items => {
|
|
119
|
+
const root = options.legend?.() ?? options.container();
|
|
120
|
+
for (const node of root?.querySelectorAll("[data-chart-legend-value]") ?? []) {
|
|
121
|
+
if (!items) {
|
|
122
|
+
node.textContent = node.getAttribute("data-default") ?? "";
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const series = node.dataset.seriesIndex;
|
|
126
|
+
const field = items.find(item => item.datum.seriesIndex?.toString() === series)?.datum.values.find(field => field.key === node.getAttribute("data-field"));
|
|
127
|
+
node.textContent = field ? field.formatted ?? (typeof field.value === "number" ? new Intl.NumberFormat(options.locale?.() ?? "en", {
|
|
128
|
+
maximumFractionDigits: 6
|
|
129
|
+
}).format(field.value) : field.value) : "—";
|
|
130
|
+
}
|
|
131
|
+
};
|
|
111
132
|
const clearHighlight = () => {
|
|
112
133
|
for (const entry of highlighted) {
|
|
113
134
|
entry.element.removeAttribute("data-inspected");
|
|
@@ -123,11 +144,17 @@ export function createChartInspector(options) {
|
|
|
123
144
|
options.container()?.removeAttribute("data-cursor-source");
|
|
124
145
|
pinned = false;
|
|
125
146
|
active = undefined;
|
|
147
|
+
updateLegend(undefined);
|
|
126
148
|
clearHighlight();
|
|
127
149
|
const container = options.container(),
|
|
128
150
|
id = options.tooltip()?.id;
|
|
129
151
|
if (container && id) describe(container, id, false);
|
|
130
152
|
options.container()?.removeAttribute("data-inspecting");
|
|
153
|
+
const inspected = options.container();
|
|
154
|
+
if (inspected) {
|
|
155
|
+
for (const name of ["left", "top", "width", "height"]) inspected.style.removeProperty(`--k2b-chart-band-${name}`);
|
|
156
|
+
if (!inspected.getAttribute("style")) inspected.removeAttribute("style");
|
|
157
|
+
}
|
|
131
158
|
const tooltip = options.tooltip();
|
|
132
159
|
if (tooltip) {
|
|
133
160
|
try {
|
|
@@ -150,21 +177,25 @@ export function createChartInspector(options) {
|
|
|
150
177
|
byElement.clear();
|
|
151
178
|
receive(options.cursor?.()?.read() ?? null);
|
|
152
179
|
};
|
|
153
|
-
const show = (entry, broadcast = true) => {
|
|
180
|
+
const show = (entry, broadcast = true, hover = false) => {
|
|
154
181
|
const x = rawX(entry);
|
|
155
182
|
if (broadcast && options.kind() === "line" && typeof x === "number") options.cursor?.()?.move(source, x);
|
|
156
183
|
const tooltip = options.tooltip(),
|
|
157
184
|
anchor = options.anchor(),
|
|
158
185
|
container = options.container();
|
|
159
186
|
if (!tooltip || !anchor || !container || !options.enabled()) return;
|
|
160
|
-
if (active === entry && tooltip.matches(":popover-open"))
|
|
187
|
+
if ((active === entry || seriesChart() && active && category(active) === category(entry)) && tooltip.matches(":popover-open")) {
|
|
188
|
+
for (const item of highlighted) item.element.setAttribute("data-inspected", hover ? "hover" : "true");
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
161
191
|
clearHighlight();
|
|
162
192
|
active = entry;
|
|
163
|
-
highlighted =
|
|
193
|
+
highlighted = groupedSeriesChart() ? records().filter(candidate => category(candidate) === category(entry)) : [entry];
|
|
164
194
|
for (const item of highlighted) {
|
|
165
195
|
item.element.style.setProperty("--k2b-chart-inspection-color", highlightColor(item));
|
|
166
|
-
item.element.setAttribute("data-inspected", "true");
|
|
196
|
+
item.element.setAttribute("data-inspected", hover ? "hover" : "true");
|
|
167
197
|
}
|
|
198
|
+
updateLegend(highlighted);
|
|
168
199
|
const document = tooltip.ownerDocument;
|
|
169
200
|
const contents = highlighted.map(item => ({
|
|
170
201
|
item,
|
|
@@ -190,35 +221,32 @@ export function createChartInspector(options) {
|
|
|
190
221
|
}
|
|
191
222
|
contents.sort((a, b) => (a.item.datum.seriesIndex ?? 0) - (b.item.datum.seriesIndex ?? 0));
|
|
192
223
|
}
|
|
224
|
+
if (options.kind() === "area") contents.reverse();
|
|
193
225
|
tooltip.replaceChildren();
|
|
194
226
|
const sharedTitle = typeof x === "number" ? options.cursor?.()?.formatX?.(x) : undefined;
|
|
195
227
|
const commonTitle = sharedTitle ?? (contents.every(({
|
|
196
228
|
content
|
|
197
229
|
}) => content.title === contents[0]?.content.title) ? contents[0]?.content.title : undefined);
|
|
198
|
-
|
|
230
|
+
const appendTitle = text => {
|
|
199
231
|
const title = document.createElement("strong");
|
|
200
232
|
title.className = "k2b-chart__tooltip-title";
|
|
201
|
-
title.textContent =
|
|
233
|
+
title.textContent = text;
|
|
202
234
|
tooltip.append(title);
|
|
203
|
-
}
|
|
235
|
+
};
|
|
236
|
+
if (commonTitle) appendTitle(commonTitle);
|
|
204
237
|
for (const {
|
|
205
238
|
item,
|
|
206
239
|
content,
|
|
207
240
|
missing
|
|
208
241
|
} of contents) {
|
|
209
|
-
if (content.title && !commonTitle)
|
|
210
|
-
const title = document.createElement("strong");
|
|
211
|
-
title.className = "k2b-chart__tooltip-title";
|
|
212
|
-
title.textContent = content.title;
|
|
213
|
-
tooltip.append(title);
|
|
214
|
-
}
|
|
242
|
+
if (content.title && !commonTitle) appendTitle(content.title);
|
|
215
243
|
for (const row of content.rows) {
|
|
216
244
|
const line = document.createElement("span");
|
|
217
245
|
line.className = "k2b-chart__tooltip-row";
|
|
218
|
-
if (
|
|
246
|
+
if (groupedSeriesChart()) {
|
|
219
247
|
const swatch = document.createElement("i");
|
|
220
248
|
swatch.setAttribute("aria-hidden", "true");
|
|
221
|
-
const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}`);
|
|
249
|
+
const series = container.querySelector(`.stdlib-chart-line.stdlib-chart-series-${(item.datum.seriesIndex ?? 0) % 8}, .k2b-area-edge-${(item.datum.seriesIndex ?? 0) % 8}`);
|
|
222
250
|
swatch.style.background = series ? getComputedStyle(series).stroke : `var(--stdlib-chart-c${(item.datum.seriesIndex ?? 0) % 8 + 1})`;
|
|
223
251
|
line.append(swatch);
|
|
224
252
|
}
|
|
@@ -230,13 +258,38 @@ export function createChartInspector(options) {
|
|
|
230
258
|
tooltip.append(line);
|
|
231
259
|
}
|
|
232
260
|
}
|
|
261
|
+
if (options.kind() === "area") {
|
|
262
|
+
const total = entry.datum.values.find(field => field.key === "total");
|
|
263
|
+
const totalLabel = container.querySelector("svg[data-chart-total-label]")?.getAttribute("data-chart-total-label");
|
|
264
|
+
if (total && totalLabel) {
|
|
265
|
+
const line = document.createElement("span");
|
|
266
|
+
line.className = "k2b-chart__tooltip-row";
|
|
267
|
+
const label = document.createElement("span");
|
|
268
|
+
label.textContent = `${totalLabel}: `;
|
|
269
|
+
const value = document.createElement("b");
|
|
270
|
+
value.textContent = total.formatted ?? String(total.value);
|
|
271
|
+
line.append(label, value);
|
|
272
|
+
tooltip.append(line);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
233
275
|
const rect = container.getBoundingClientRect(),
|
|
234
276
|
point = screenPoint(entry);
|
|
235
|
-
|
|
236
|
-
|
|
277
|
+
const slot = categoryBands().find(candidate => candidate.entry === entry);
|
|
278
|
+
// A renderer that draws its own band inside the category's mark keeps it; the overlay only fills the others.
|
|
279
|
+
const band = slot && !entry.element.querySelector(".k2b-chart-category-band") ? slot : undefined;
|
|
280
|
+
const rows = rowLayout(container);
|
|
281
|
+
// A column's tooltip waits at the top of the plot, so it stays put while the pointer moves within the column.
|
|
282
|
+
anchor.style.left = `${(slot && !rows ? (slot.left + slot.right) / 2 : point.x) - rect.left + container.scrollLeft}px`;
|
|
283
|
+
anchor.style.top = `${(slot && !rows ? slot.top : point.y) - rect.top + container.scrollTop}px`;
|
|
237
284
|
updatePlotBounds();
|
|
238
|
-
container.style.setProperty("--k2b-chart-inspection-x", `${point.x - rect.left}px`);
|
|
239
|
-
|
|
285
|
+
container.style.setProperty("--k2b-chart-inspection-x", `${point.x - rect.left + container.scrollLeft}px`);
|
|
286
|
+
if (band) {
|
|
287
|
+
container.style.setProperty("--k2b-chart-band-left", `${band.left - rect.left + container.scrollLeft}px`);
|
|
288
|
+
container.style.setProperty("--k2b-chart-band-top", `${band.top - rect.top + container.scrollTop}px`);
|
|
289
|
+
container.style.setProperty("--k2b-chart-band-width", `${band.right - band.left}px`);
|
|
290
|
+
container.style.setProperty("--k2b-chart-band-height", `${band.bottom - band.top}px`);
|
|
291
|
+
}
|
|
292
|
+
container.setAttribute("data-inspecting", seriesChart() ? "series" : band ? "category" : "datum");
|
|
240
293
|
describe(container, tooltip.id, true);
|
|
241
294
|
try {
|
|
242
295
|
if (!tooltip.matches(":popover-open")) tooltip.showPopover();
|
|
@@ -245,6 +298,50 @@ export function createChartInspector(options) {
|
|
|
245
298
|
/* SVG titles remain available without the Popover API. */
|
|
246
299
|
}
|
|
247
300
|
};
|
|
301
|
+
/**
|
|
302
|
+
* The screen slot of every category, halfway to its neighbours. A light band fills the inspected slot instead of
|
|
303
|
+
* dimming other marks or outlining a bar, and the pointer anywhere in a slot keeps the same category.
|
|
304
|
+
*/
|
|
305
|
+
const categoryBands = () => {
|
|
306
|
+
const role = categoryRoles[options.kind()];
|
|
307
|
+
const container = options.container();
|
|
308
|
+
if (!role || !container) return [];
|
|
309
|
+
const rows = rowLayout(container);
|
|
310
|
+
const slots = records().filter(entry => entry.datum.role === role).map(entry => ({
|
|
311
|
+
entry,
|
|
312
|
+
rect: entry.element.getBoundingClientRect()
|
|
313
|
+
}));
|
|
314
|
+
if (!slots.length) return [];
|
|
315
|
+
const guides = Array.from(container.querySelectorAll(".stdlib-chart-grid, .stdlib-chart-axis")).map(node => node.getBoundingClientRect());
|
|
316
|
+
// The band spans the plot across the categories: grid lines and every mark, so rows without value ticks, whose
|
|
317
|
+
// only guide is one vertical baseline, still get a band from the baseline to the longest bar.
|
|
318
|
+
const spans = [...guides, ...slots.map(slot => slot.rect)];
|
|
319
|
+
const start = Math.min(...spans.map(rect => rows ? rect.left : rect.top));
|
|
320
|
+
const end = Math.max(...spans.map(rect => rows ? rect.right : rect.bottom));
|
|
321
|
+
const center = rect => rows ? rect.top + rect.height / 2 : rect.left + rect.width / 2;
|
|
322
|
+
slots.sort((a, b) => center(a.rect) - center(b.rect));
|
|
323
|
+
return slots.map((slot, index) => {
|
|
324
|
+
const middle = center(slot.rect);
|
|
325
|
+
const previous = slots[index - 1],
|
|
326
|
+
next = slots[index + 1];
|
|
327
|
+
const half = previous || next ? Math.abs(center((next ?? previous).rect) - middle) / 2 : (rows ? slot.rect.height : slot.rect.width) * 0.75;
|
|
328
|
+
const low = previous ? (center(previous.rect) + middle) / 2 : middle - half;
|
|
329
|
+
const high = next ? (center(next.rect) + middle) / 2 : middle + half;
|
|
330
|
+
return rows ? {
|
|
331
|
+
entry: slot.entry,
|
|
332
|
+
left: start,
|
|
333
|
+
right: end,
|
|
334
|
+
top: low,
|
|
335
|
+
bottom: high
|
|
336
|
+
} : {
|
|
337
|
+
entry: slot.entry,
|
|
338
|
+
left: low,
|
|
339
|
+
right: high,
|
|
340
|
+
top: start,
|
|
341
|
+
bottom: end
|
|
342
|
+
};
|
|
343
|
+
});
|
|
344
|
+
};
|
|
248
345
|
const updatePlotBounds = () => {
|
|
249
346
|
const container = options.container();
|
|
250
347
|
if (!container) return;
|
|
@@ -293,6 +390,27 @@ export function createChartInspector(options) {
|
|
|
293
390
|
const direct = target?.closest("[data-chart-datum]");
|
|
294
391
|
const hit = direct ? byElement.get(direct) : undefined;
|
|
295
392
|
if (hit && nodes.includes(hit)) return hit;
|
|
393
|
+
const bands = categoryBands();
|
|
394
|
+
if (bands.length) {
|
|
395
|
+
// Marks of their own inside a category, such as box-plot outliers, keep their forgiving hit radius.
|
|
396
|
+
const role = categoryRoles[options.kind()];
|
|
397
|
+
let loose,
|
|
398
|
+
gap = 24;
|
|
399
|
+
for (const entry of nodes) {
|
|
400
|
+
if (entry.datum.role === role) continue;
|
|
401
|
+
const point = screenPoint(entry);
|
|
402
|
+
const distance = Math.hypot(point.x - x, point.y - y);
|
|
403
|
+
if (distance <= gap) {
|
|
404
|
+
gap = distance;
|
|
405
|
+
loose = entry;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (loose) return loose;
|
|
409
|
+
const rows = rowLayout(options.container());
|
|
410
|
+
const frame = options.container()?.getBoundingClientRect();
|
|
411
|
+
const inside = frame && x >= frame.left && x <= frame.right && y >= frame.top && y <= frame.bottom;
|
|
412
|
+
return inside ? bands.find(band => rows ? y >= band.top && y <= band.bottom : x >= band.left && x <= band.right)?.entry : undefined;
|
|
413
|
+
}
|
|
296
414
|
if (seriesChart()) {
|
|
297
415
|
const plot = updatePlotBounds();
|
|
298
416
|
// SVG transforms and DOM rectangles can round the same painted edge
|
|
@@ -343,7 +461,7 @@ export function createChartInspector(options) {
|
|
|
343
461
|
};
|
|
344
462
|
const move = event => {
|
|
345
463
|
if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
|
|
346
|
-
if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) >
|
|
464
|
+
if (pointerStart && Math.hypot(event.clientX - pointerStart.x, event.clientY - pointerStart.y) > 8) moved = true;
|
|
347
465
|
if (!options.enabled() || pinned || event.pointerType === "touch" || event.buttons) return;
|
|
348
466
|
pending = {
|
|
349
467
|
x: event.clientX,
|
|
@@ -358,7 +476,7 @@ export function createChartInspector(options) {
|
|
|
358
476
|
if (!sample) return;
|
|
359
477
|
const entry = nearest(sample.x, sample.y, sample.target);
|
|
360
478
|
if (entry) {
|
|
361
|
-
show(entry);
|
|
479
|
+
show(entry, true, true);
|
|
362
480
|
if (seriesChart()) {
|
|
363
481
|
const container = options.container();
|
|
364
482
|
container?.setAttribute("data-cursor-source", "true");
|
|
@@ -367,14 +485,20 @@ export function createChartInspector(options) {
|
|
|
367
485
|
} else close();
|
|
368
486
|
});
|
|
369
487
|
};
|
|
488
|
+
let pointerFocusing = false;
|
|
370
489
|
const down = event => {
|
|
490
|
+
pointerFocusing = true;
|
|
371
491
|
pointerStart = {
|
|
372
492
|
x: event.clientX,
|
|
373
493
|
y: event.clientY
|
|
374
494
|
};
|
|
375
495
|
moved = false;
|
|
376
496
|
};
|
|
497
|
+
const up = () => {
|
|
498
|
+
pointerFocusing = false;
|
|
499
|
+
};
|
|
377
500
|
const click = event => {
|
|
501
|
+
pointerFocusing = false;
|
|
378
502
|
if (!options.enabled() || moved || event.target instanceof Element && event.target.closest("button,a")) return;
|
|
379
503
|
const entry = nearest(event.clientX, event.clientY, event.target instanceof Element ? event.target : null);
|
|
380
504
|
if (!entry) {
|
|
@@ -390,8 +514,12 @@ export function createChartInspector(options) {
|
|
|
390
514
|
};
|
|
391
515
|
const focus = event => {
|
|
392
516
|
if (event.target !== options.container() || !options.enabled()) return;
|
|
517
|
+
if (pointerFocusing && options.nav?.()?.pointer === false) {
|
|
518
|
+
pointerFocusing = false;
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
393
521
|
const nodes = visibleRecords();
|
|
394
|
-
const first = options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
|
|
522
|
+
const first = options.nav?.()?.last ? nodes.at(-1) : options.kind() === "line" ? sortedPoints.at(-1) : nodes[0];
|
|
395
523
|
if (first) show(first);
|
|
396
524
|
};
|
|
397
525
|
const key = event => {
|
|
@@ -422,10 +550,10 @@ export function createChartInspector(options) {
|
|
|
422
550
|
if (!["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"].includes(event.key)) return false;
|
|
423
551
|
let nodes = visibleRecords();
|
|
424
552
|
if (seriesChart()) nodes = [...nodes].sort((a, b) => a.datum.anchor[0] - b.datum.anchor[0]);
|
|
425
|
-
if (
|
|
553
|
+
if (groupedSeriesChart()) {
|
|
426
554
|
const seen = new Set();
|
|
427
555
|
nodes = nodes.filter(entry => {
|
|
428
|
-
const x =
|
|
556
|
+
const x = category(entry);
|
|
429
557
|
if (seen.has(x)) return false;
|
|
430
558
|
seen.add(x);
|
|
431
559
|
return true;
|
|
@@ -434,7 +562,7 @@ export function createChartInspector(options) {
|
|
|
434
562
|
if (!nodes.length) return false;
|
|
435
563
|
event.preventDefault();
|
|
436
564
|
pinned = false;
|
|
437
|
-
let index = active ?
|
|
565
|
+
let index = active ? groupedSeriesChart() ? nodes.findIndex(entry => category(entry) === category(active)) : nodes.indexOf(active) : -1;
|
|
438
566
|
if (event.key === "Home") index = 0;else if (event.key === "End") index = nodes.length - 1;else if (active?.datum.grid && ["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(event.key)) {
|
|
439
567
|
const [x, y] = active.datum.grid;
|
|
440
568
|
const dx = event.key === "ArrowLeft" ? -1 : event.key === "ArrowRight" ? 1 : 0;
|
|
@@ -442,7 +570,9 @@ export function createChartInspector(options) {
|
|
|
442
570
|
const next = nodes.filter(entry => entry.datum.grid && (dx ? entry.datum.grid[1] === y && (entry.datum.grid[0] - x) * dx > 0 : entry.datum.grid[0] === x && (entry.datum.grid[1] - y) * dy > 0)).sort((a, b) => Math.abs(a.datum.grid[0] - x) + Math.abs(a.datum.grid[1] - y) - Math.abs(b.datum.grid[0] - x) - Math.abs(b.datum.grid[1] - y))[0];
|
|
443
571
|
if (next) index = nodes.indexOf(next);
|
|
444
572
|
} else index += event.key === "ArrowLeft" || event.key === "ArrowUp" ? -1 : 1;
|
|
445
|
-
|
|
573
|
+
const next = nodes[Math.max(0, Math.min(nodes.length - 1, index))];
|
|
574
|
+
options.nav?.()?.reveal?.(next.element);
|
|
575
|
+
show(next);
|
|
446
576
|
return true;
|
|
447
577
|
};
|
|
448
578
|
return {
|
|
@@ -452,6 +582,7 @@ export function createChartInspector(options) {
|
|
|
452
582
|
destroy: () => close(false),
|
|
453
583
|
move,
|
|
454
584
|
down,
|
|
585
|
+
up,
|
|
455
586
|
click,
|
|
456
587
|
focus,
|
|
457
588
|
key,
|
|
@@ -469,6 +600,7 @@ export function closeChartInspectionOnOutside(options) {
|
|
|
469
600
|
if (event.target instanceof Node && !options.container()?.contains(event.target)) options.close();
|
|
470
601
|
};
|
|
471
602
|
const scroll = event => {
|
|
603
|
+
if (event.target === options.container() && options.keepScroll?.()) return;
|
|
472
604
|
if (event.target instanceof Node && options.tooltip()?.contains(event.target)) return;
|
|
473
605
|
options.close();
|
|
474
606
|
};
|
|
@@ -502,25 +634,27 @@ export function inspectChart(container, options) {
|
|
|
502
634
|
if (addedTabindex) container.setAttribute("tabindex", "0");
|
|
503
635
|
const inspector = createChartInspector({
|
|
504
636
|
container: () => container,
|
|
637
|
+
locale: () => options.locale ?? "en",
|
|
638
|
+
legend: () => options.legend,
|
|
505
639
|
cursor: () => options.cursor,
|
|
506
640
|
tooltip: () => tooltip,
|
|
507
641
|
anchor: () => anchor,
|
|
508
642
|
kind: () => options.kind,
|
|
643
|
+
nav: () => options.nav,
|
|
509
644
|
enabled: () => true,
|
|
510
645
|
format: options.format,
|
|
511
646
|
select: selection => options.select?.(selection)
|
|
512
647
|
});
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
container.addEventListener("focusout", inspector.close);
|
|
519
|
-
container.addEventListener("keydown", inspector.key);
|
|
648
|
+
const listen = (name, listener) => {
|
|
649
|
+
container.addEventListener(name, listener);
|
|
650
|
+
return () => container.removeEventListener(name, listener);
|
|
651
|
+
};
|
|
652
|
+
const removeListeners = [listen("pointerdown", inspector.down), listen("pointerup", inspector.up), listen("pointercancel", inspector.up), listen("pointermove", inspector.move), listen("click", inspector.click), listen("pointerleave", inspector.leave), listen("focusin", inspector.focus), listen("focusout", inspector.close), listen("keydown", inspector.key)];
|
|
520
653
|
const removeOutside = closeChartInspectionOnOutside({
|
|
521
654
|
container: () => container,
|
|
522
655
|
tooltip: () => tooltip,
|
|
523
|
-
close: inspector.close
|
|
656
|
+
close: inspector.close,
|
|
657
|
+
keepScroll: () => options.nav?.keepScroll
|
|
524
658
|
});
|
|
525
659
|
const unlinkCursor = inspector.linkCursor(options.cursor);
|
|
526
660
|
let destroyed = false;
|
|
@@ -534,13 +668,7 @@ export function inspectChart(container, options) {
|
|
|
534
668
|
destroy() {
|
|
535
669
|
if (destroyed) return;
|
|
536
670
|
destroyed = true;
|
|
537
|
-
|
|
538
|
-
container.removeEventListener("pointermove", inspector.move);
|
|
539
|
-
container.removeEventListener("click", inspector.click);
|
|
540
|
-
container.removeEventListener("pointerleave", inspector.leave);
|
|
541
|
-
container.removeEventListener("focusin", inspector.focus);
|
|
542
|
-
container.removeEventListener("focusout", inspector.close);
|
|
543
|
-
container.removeEventListener("keydown", inspector.key);
|
|
671
|
+
for (const remove of removeListeners) remove();
|
|
544
672
|
removeOutside();
|
|
545
673
|
unlinkCursor();
|
|
546
674
|
inspector.destroy();
|