@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,281 @@
|
|
|
1
|
+
import { template as _$template } from "solid-js/web";
|
|
2
|
+
import { setAttribute as _$setAttribute } from "solid-js/web";
|
|
3
|
+
import { memo as _$memo } from "solid-js/web";
|
|
4
|
+
import { className as _$className } from "solid-js/web";
|
|
5
|
+
import { effect as _$effect } from "solid-js/web";
|
|
6
|
+
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
7
|
+
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
8
|
+
import { insert as _$insert } from "solid-js/web";
|
|
9
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
10
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<ul class=k2b-budget__list>`),
|
|
11
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<li><span class=k2b-budget__swatch data-pattern=hatched></span><!$><!/>`),
|
|
12
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<li><span class=k2b-budget__swatch data-pattern=over></span><!$><!/>`),
|
|
13
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<ul class=k2b-budget__legend aria-hidden=true><li><span class=k2b-budget__swatch data-pattern=solid></span><!$><!/></li><!$><!/><!$><!/>`),
|
|
14
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<div>`),
|
|
15
|
+
_tmpl$6 = /*#__PURE__*/_$template(`<p class=k2b-budget__empty>`),
|
|
16
|
+
_tmpl$7 = /*#__PURE__*/_$template(`<span class=k2b-budget__label>`),
|
|
17
|
+
_tmpl$8 = /*#__PURE__*/_$template(`<span class=k2b-budget__amount><!$><!/> <span>`),
|
|
18
|
+
_tmpl$9 = /*#__PURE__*/_$template(`<i aria-hidden=true>`),
|
|
19
|
+
_tmpl$0 = /*#__PURE__*/_$template(`<span class=k2b-budget__hint><!$><!/><!$><!/>`),
|
|
20
|
+
_tmpl$1 = /*#__PURE__*/_$template(`<li class=k2b-budget__row>`),
|
|
21
|
+
_tmpl$10 = /*#__PURE__*/_$template(`<span><!$><!/> <b>`),
|
|
22
|
+
_tmpl$11 = /*#__PURE__*/_$template(`<span class=k2b-budget__tip><b></b><span><!$><!/> <b></b></span><!$><!/><span><!$><!/> <b></b></span><span><!$><!/> <b>`);
|
|
23
|
+
import { For, Show } from "solid-js";
|
|
24
|
+
import { Tooltip } from "../feedback/Tooltip";
|
|
25
|
+
import { useLocale } from "../intl/locale";
|
|
26
|
+
import { useBudgetMessages } from "./budget-messages";
|
|
27
|
+
import { budgetOverrun, budgetRatio, ProgressBar } from "./ProgressBar";
|
|
28
|
+
|
|
29
|
+
/** One budget: `used` is booked, `expected` comes on top; over the budget is `used + expected - limit`. */
|
|
30
|
+
|
|
31
|
+
/** "near" from 80 % of the budget, "over" beyond it. */
|
|
32
|
+
|
|
33
|
+
/** The figures of one budget row; the share counts booked and expected together. */
|
|
34
|
+
export const budgetState = item => {
|
|
35
|
+
const used = Number.isFinite(item.used) ? Math.max(0, item.used) : 0;
|
|
36
|
+
const expected = item.expected !== undefined && Number.isFinite(item.expected) ? Math.max(0, item.expected) : 0;
|
|
37
|
+
const limit = Number.isFinite(item.limit) ? Math.max(0, item.limit) : 0;
|
|
38
|
+
const total = used + expected;
|
|
39
|
+
const over = budgetOverrun(total, limit);
|
|
40
|
+
const ratio = budgetRatio(total, limit);
|
|
41
|
+
// The same float tolerance as the overrun: 0.7 + 0.1 of 1 is exactly 80 %.
|
|
42
|
+
const level = over > 0 ? "over" : ratio >= 0.8 - 1e-9 ? "near" : "ok";
|
|
43
|
+
return {
|
|
44
|
+
used,
|
|
45
|
+
expected,
|
|
46
|
+
limit,
|
|
47
|
+
total,
|
|
48
|
+
over,
|
|
49
|
+
free: over > 0 ? 0 : Math.max(0, limit - total),
|
|
50
|
+
ratio,
|
|
51
|
+
level
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Budgets as rows: label and "spent of budget", a bar with booked (solid), expected (hatched) and over the budget
|
|
57
|
+
* (red, with a mark at the limit), and a hint that turns amber from 80 % and red beyond the budget.
|
|
58
|
+
*/
|
|
59
|
+
export function BudgetList(props) {
|
|
60
|
+
const locale = useLocale();
|
|
61
|
+
const t = useBudgetMessages(() => props.locale);
|
|
62
|
+
const money = value => new Intl.NumberFormat(props.locale ?? locale(), {
|
|
63
|
+
style: "currency",
|
|
64
|
+
currency: props.currency,
|
|
65
|
+
minimumFractionDigits: props.decimals ?? 0,
|
|
66
|
+
maximumFractionDigits: props.decimals ?? 0
|
|
67
|
+
}).format(value);
|
|
68
|
+
const states = () => props.items.map(item => ({
|
|
69
|
+
item,
|
|
70
|
+
state: budgetState(item)
|
|
71
|
+
}));
|
|
72
|
+
const anyExpected = () => states().some(({
|
|
73
|
+
state
|
|
74
|
+
}) => state.expected > 0);
|
|
75
|
+
const anyOver = () => states().some(({
|
|
76
|
+
state
|
|
77
|
+
}) => state.over > 0);
|
|
78
|
+
return (() => {
|
|
79
|
+
var _el$ = _$getNextElement(_tmpl$5);
|
|
80
|
+
_$insert(_el$, _$createComponent(Show, {
|
|
81
|
+
get when() {
|
|
82
|
+
return props.items.length;
|
|
83
|
+
},
|
|
84
|
+
get fallback() {
|
|
85
|
+
return (() => {
|
|
86
|
+
var _el$18 = _$getNextElement(_tmpl$6);
|
|
87
|
+
_$insert(_el$18, () => props.empty);
|
|
88
|
+
return _el$18;
|
|
89
|
+
})();
|
|
90
|
+
},
|
|
91
|
+
get children() {
|
|
92
|
+
return [(() => {
|
|
93
|
+
var _el$2 = _$getNextElement(_tmpl$);
|
|
94
|
+
_$insert(_el$2, _$createComponent(For, {
|
|
95
|
+
get each() {
|
|
96
|
+
return states();
|
|
97
|
+
},
|
|
98
|
+
children: ({
|
|
99
|
+
item,
|
|
100
|
+
state
|
|
101
|
+
}) => (() => {
|
|
102
|
+
var _el$19 = _$getNextElement(_tmpl$1);
|
|
103
|
+
_$insert(_el$19, _$createComponent(Tooltip.Anchor, {
|
|
104
|
+
"class": "k2b-budget__anchor",
|
|
105
|
+
tabIndex: 0,
|
|
106
|
+
get content() {
|
|
107
|
+
return (() => {
|
|
108
|
+
var _el$32 = _$getNextElement(_tmpl$11),
|
|
109
|
+
_el$33 = _el$32.firstChild,
|
|
110
|
+
_el$34 = _el$33.nextSibling,
|
|
111
|
+
_el$37 = _el$34.firstChild,
|
|
112
|
+
[_el$38, _co$9] = _$getNextMarker(_el$37.nextSibling),
|
|
113
|
+
_el$35 = _el$38.nextSibling,
|
|
114
|
+
_el$36 = _el$35.nextSibling,
|
|
115
|
+
_el$54 = _el$34.nextSibling,
|
|
116
|
+
[_el$55, _co$11] = _$getNextMarker(_el$54.nextSibling),
|
|
117
|
+
_el$44 = _el$55.nextSibling,
|
|
118
|
+
_el$47 = _el$44.firstChild,
|
|
119
|
+
[_el$48, _co$1] = _$getNextMarker(_el$47.nextSibling),
|
|
120
|
+
_el$45 = _el$48.nextSibling,
|
|
121
|
+
_el$46 = _el$45.nextSibling,
|
|
122
|
+
_el$49 = _el$44.nextSibling,
|
|
123
|
+
_el$52 = _el$49.firstChild,
|
|
124
|
+
[_el$53, _co$10] = _$getNextMarker(_el$52.nextSibling),
|
|
125
|
+
_el$50 = _el$53.nextSibling,
|
|
126
|
+
_el$51 = _el$50.nextSibling;
|
|
127
|
+
_$insert(_el$33, () => item.label);
|
|
128
|
+
_$insert(_el$34, () => t().used, _el$38, _co$9);
|
|
129
|
+
_$insert(_el$36, () => money(state.used));
|
|
130
|
+
_$insert(_el$32, _$createComponent(Show, {
|
|
131
|
+
get when() {
|
|
132
|
+
return state.expected > 0;
|
|
133
|
+
},
|
|
134
|
+
get children() {
|
|
135
|
+
var _el$39 = _$getNextElement(_tmpl$10),
|
|
136
|
+
_el$42 = _el$39.firstChild,
|
|
137
|
+
[_el$43, _co$0] = _$getNextMarker(_el$42.nextSibling),
|
|
138
|
+
_el$40 = _el$43.nextSibling,
|
|
139
|
+
_el$41 = _el$40.nextSibling;
|
|
140
|
+
_$insert(_el$39, () => t().expected, _el$43, _co$0);
|
|
141
|
+
_$insert(_el$41, () => money(state.expected));
|
|
142
|
+
return _el$39;
|
|
143
|
+
}
|
|
144
|
+
}), _el$55, _co$11);
|
|
145
|
+
_$insert(_el$44, () => t().budget, _el$48, _co$1);
|
|
146
|
+
_$insert(_el$46, () => money(state.limit));
|
|
147
|
+
_$insert(_el$49, (() => {
|
|
148
|
+
var _c$2 = _$memo(() => state.over > 0);
|
|
149
|
+
return () => _c$2() ? t().overBy : t().left;
|
|
150
|
+
})(), _el$53, _co$10);
|
|
151
|
+
_$insert(_el$51, () => money(state.over > 0 ? state.over : state.free));
|
|
152
|
+
return _el$32;
|
|
153
|
+
})();
|
|
154
|
+
},
|
|
155
|
+
get children() {
|
|
156
|
+
return [(() => {
|
|
157
|
+
var _el$20 = _$getNextElement(_tmpl$7);
|
|
158
|
+
_$insert(_el$20, () => item.label);
|
|
159
|
+
return _el$20;
|
|
160
|
+
})(), (() => {
|
|
161
|
+
var _el$21 = _$getNextElement(_tmpl$8),
|
|
162
|
+
_el$24 = _el$21.firstChild,
|
|
163
|
+
[_el$25, _co$6] = _$getNextMarker(_el$24.nextSibling),
|
|
164
|
+
_el$22 = _el$25.nextSibling,
|
|
165
|
+
_el$23 = _el$22.nextSibling;
|
|
166
|
+
_$insert(_el$21, () => money(state.total), _el$25, _co$6);
|
|
167
|
+
_$insert(_el$23, () => t().of({
|
|
168
|
+
limit: money(state.limit)
|
|
169
|
+
}));
|
|
170
|
+
return _el$21;
|
|
171
|
+
})(), _$createComponent(ProgressBar, {
|
|
172
|
+
"class": "k2b-budget__bar",
|
|
173
|
+
size: "sm",
|
|
174
|
+
get label() {
|
|
175
|
+
return item.label;
|
|
176
|
+
},
|
|
177
|
+
get segments() {
|
|
178
|
+
return [{
|
|
179
|
+
value: state.used
|
|
180
|
+
}, {
|
|
181
|
+
value: state.expected,
|
|
182
|
+
pattern: "hatched"
|
|
183
|
+
}];
|
|
184
|
+
},
|
|
185
|
+
get limit() {
|
|
186
|
+
return state.limit;
|
|
187
|
+
},
|
|
188
|
+
get valueText() {
|
|
189
|
+
return t().valueText({
|
|
190
|
+
used: money(state.used),
|
|
191
|
+
expected: state.expected > 0 ? money(state.expected) : undefined,
|
|
192
|
+
limit: money(state.limit)
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}), (() => {
|
|
196
|
+
var _el$26 = _$getNextElement(_tmpl$0),
|
|
197
|
+
_el$28 = _el$26.firstChild,
|
|
198
|
+
[_el$29, _co$7] = _$getNextMarker(_el$28.nextSibling),
|
|
199
|
+
_el$30 = _el$29.nextSibling,
|
|
200
|
+
[_el$31, _co$8] = _$getNextMarker(_el$30.nextSibling);
|
|
201
|
+
_$insert(_el$26, _$createComponent(Show, {
|
|
202
|
+
get when() {
|
|
203
|
+
return state.level !== "ok";
|
|
204
|
+
},
|
|
205
|
+
get children() {
|
|
206
|
+
var _el$27 = _$getNextElement(_tmpl$9);
|
|
207
|
+
_$effect(() => _$className(_el$27, state.level === "over" ? "ti ti-alert-circle" : "ti ti-alert-triangle"));
|
|
208
|
+
return _el$27;
|
|
209
|
+
}
|
|
210
|
+
}), _el$29, _co$7);
|
|
211
|
+
_$insert(_el$26, (() => {
|
|
212
|
+
var _c$ = _$memo(() => state.level === "over");
|
|
213
|
+
return () => _c$() ? t().over({
|
|
214
|
+
amount: money(state.over)
|
|
215
|
+
}) : _$memo(() => state.level === "near")() ? t().near({
|
|
216
|
+
amount: money(state.free)
|
|
217
|
+
}) : t().free({
|
|
218
|
+
amount: money(state.free)
|
|
219
|
+
});
|
|
220
|
+
})(), _el$31, _co$8);
|
|
221
|
+
return _el$26;
|
|
222
|
+
})()];
|
|
223
|
+
}
|
|
224
|
+
}));
|
|
225
|
+
_$effect(() => _$setAttribute(_el$19, "data-level", state.level));
|
|
226
|
+
return _el$19;
|
|
227
|
+
})()
|
|
228
|
+
}));
|
|
229
|
+
return _el$2;
|
|
230
|
+
})(), _$createComponent(Show, {
|
|
231
|
+
get when() {
|
|
232
|
+
return props.legend !== false;
|
|
233
|
+
},
|
|
234
|
+
get children() {
|
|
235
|
+
var _el$3 = _$getNextElement(_tmpl$4),
|
|
236
|
+
_el$4 = _el$3.firstChild,
|
|
237
|
+
_el$5 = _el$4.firstChild,
|
|
238
|
+
_el$6 = _el$5.nextSibling,
|
|
239
|
+
[_el$7, _co$] = _$getNextMarker(_el$6.nextSibling),
|
|
240
|
+
_el$14 = _el$4.nextSibling,
|
|
241
|
+
[_el$15, _co$4] = _$getNextMarker(_el$14.nextSibling),
|
|
242
|
+
_el$16 = _el$15.nextSibling,
|
|
243
|
+
[_el$17, _co$5] = _$getNextMarker(_el$16.nextSibling);
|
|
244
|
+
_$insert(_el$4, () => t().used, _el$7, _co$);
|
|
245
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
246
|
+
get when() {
|
|
247
|
+
return anyExpected();
|
|
248
|
+
},
|
|
249
|
+
get children() {
|
|
250
|
+
var _el$8 = _$getNextElement(_tmpl$2),
|
|
251
|
+
_el$9 = _el$8.firstChild,
|
|
252
|
+
_el$0 = _el$9.nextSibling,
|
|
253
|
+
[_el$1, _co$2] = _$getNextMarker(_el$0.nextSibling);
|
|
254
|
+
_$insert(_el$8, () => t().expected, _el$1, _co$2);
|
|
255
|
+
return _el$8;
|
|
256
|
+
}
|
|
257
|
+
}), _el$15, _co$4);
|
|
258
|
+
_$insert(_el$3, _$createComponent(Show, {
|
|
259
|
+
get when() {
|
|
260
|
+
return anyOver();
|
|
261
|
+
},
|
|
262
|
+
get children() {
|
|
263
|
+
var _el$10 = _$getNextElement(_tmpl$3),
|
|
264
|
+
_el$11 = _el$10.firstChild,
|
|
265
|
+
_el$12 = _el$11.nextSibling,
|
|
266
|
+
[_el$13, _co$3] = _$getNextMarker(_el$12.nextSibling);
|
|
267
|
+
_$insert(_el$10, () => t().overLegend, _el$13, _co$3);
|
|
268
|
+
return _el$10;
|
|
269
|
+
}
|
|
270
|
+
}), _el$17, _co$5);
|
|
271
|
+
return _el$3;
|
|
272
|
+
}
|
|
273
|
+
})];
|
|
274
|
+
}
|
|
275
|
+
}));
|
|
276
|
+
_$effect(() => _$className(_el$, `k2b-budget ${props.class ?? ""}`));
|
|
277
|
+
return _el$;
|
|
278
|
+
})();
|
|
279
|
+
}
|
|
280
|
+
export default BudgetList;
|
|
281
|
+
//# sourceMappingURL=BudgetList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/BudgetList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport { Tooltip } from \"../feedback/Tooltip\";\nimport { useLocale } from \"../intl/locale\";\nimport { useBudgetMessages } from \"./budget-messages\";\nimport { budgetOverrun, budgetRatio, ProgressBar } from \"./ProgressBar\";\n\n/** One budget: `used` is booked, `expected` comes on top; over the budget is `used + expected - limit`. */\nexport type BudgetItem = { id?: string; label: string; used: number; expected?: number; limit: number };\n\nexport type BudgetListProps = {\n items: readonly BudgetItem[];\n /** ISO 4217 currency code, e.g. `\"EUR\"`. */\n currency: string;\n /** Explicit locale override; defaults to the inherited render locale. */\n locale?: string;\n /** Fixed fraction digits. Defaults to 0. */\n decimals?: number;\n /** The sentence shown when there is no budget. */\n empty?: string;\n /** Hides the legend under the rows when the host explains the colours elsewhere. */\n legend?: boolean;\n class?: string;\n};\n\n/** \"near\" from 80 % of the budget, \"over\" beyond it. */\nexport type BudgetLevel = \"ok\" | \"near\" | \"over\";\n\n/** The figures of one budget row; the share counts booked and expected together. */\nexport const budgetState = (item: Pick<BudgetItem, \"used\" | \"expected\" | \"limit\">) => {\n const used = Number.isFinite(item.used) ? Math.max(0, item.used) : 0;\n const expected = item.expected !== undefined && Number.isFinite(item.expected) ? Math.max(0, item.expected) : 0;\n const limit = Number.isFinite(item.limit) ? Math.max(0, item.limit) : 0;\n const total = used + expected;\n const over = budgetOverrun(total, limit);\n const ratio = budgetRatio(total, limit);\n // The same float tolerance as the overrun: 0.7 + 0.1 of 1 is exactly 80 %.\n const level: BudgetLevel = over > 0 ? \"over\" : ratio >= 0.8 - 1e-9 ? \"near\" : \"ok\";\n return { used, expected, limit, total, over, free: over > 0 ? 0 : Math.max(0, limit - total), ratio, level };\n};\n\n/**\n * Budgets as rows: label and \"spent of budget\", a bar with booked (solid), expected (hatched) and over the budget\n * (red, with a mark at the limit), and a hint that turns amber from 80 % and red beyond the budget.\n */\nexport function BudgetList(props: BudgetListProps): JSX.Element {\n const locale = useLocale();\n const t = useBudgetMessages(() => props.locale);\n const money = (value: number) =>\n new Intl.NumberFormat(props.locale ?? locale(), {\n style: \"currency\",\n currency: props.currency,\n minimumFractionDigits: props.decimals ?? 0,\n maximumFractionDigits: props.decimals ?? 0,\n }).format(value);\n const states = () => props.items.map((item) => ({ item, state: budgetState(item) }));\n const anyExpected = () => states().some(({ state }) => state.expected > 0);\n const anyOver = () => states().some(({ state }) => state.over > 0);\n return (\n <div class={`k2b-budget ${props.class ?? \"\"}`}>\n <Show when={props.items.length} fallback={<p class=\"k2b-budget__empty\">{props.empty}</p>}>\n <ul class=\"k2b-budget__list\">\n <For each={states()}>\n {({ item, state }) => (\n <li class=\"k2b-budget__row\" data-level={state.level}>\n <Tooltip.Anchor\n class=\"k2b-budget__anchor\"\n tabIndex={0}\n content={\n <span class=\"k2b-budget__tip\">\n <b>{item.label}</b>\n <span>\n {t().used} <b>{money(state.used)}</b>\n </span>\n <Show when={state.expected > 0}>\n <span>\n {t().expected} <b>{money(state.expected)}</b>\n </span>\n </Show>\n <span>\n {t().budget} <b>{money(state.limit)}</b>\n </span>\n <span>\n {state.over > 0 ? t().overBy : t().left} <b>{money(state.over > 0 ? state.over : state.free)}</b>\n </span>\n </span>\n }\n >\n <span class=\"k2b-budget__label\">{item.label}</span>\n <span class=\"k2b-budget__amount\">\n {money(state.total)} <span>{t().of({ limit: money(state.limit) })}</span>\n </span>\n <ProgressBar\n class=\"k2b-budget__bar\"\n size=\"sm\"\n label={item.label}\n segments={[{ value: state.used }, { value: state.expected, pattern: \"hatched\" }]}\n limit={state.limit}\n valueText={t().valueText({\n used: money(state.used),\n expected: state.expected > 0 ? money(state.expected) : undefined,\n limit: money(state.limit),\n })}\n />\n <span class=\"k2b-budget__hint\">\n <Show when={state.level !== \"ok\"}>\n <i class={state.level === \"over\" ? \"ti ti-alert-circle\" : \"ti ti-alert-triangle\"} aria-hidden=\"true\" />\n </Show>\n {state.level === \"over\"\n ? t().over({ amount: money(state.over) })\n : state.level === \"near\"\n ? t().near({ amount: money(state.free) })\n : t().free({ amount: money(state.free) })}\n </span>\n </Tooltip.Anchor>\n </li>\n )}\n </For>\n </ul>\n <Show when={props.legend !== false}>\n <ul class=\"k2b-budget__legend\" aria-hidden=\"true\">\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"solid\" />\n {t().used}\n </li>\n <Show when={anyExpected()}>\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"hatched\" />\n {t().expected}\n </li>\n </Show>\n <Show when={anyOver()}>\n <li>\n <span class=\"k2b-budget__swatch\" data-pattern=\"over\" />\n {t().overLegend}\n </li>\n </Show>\n </ul>\n </Show>\n </Show>\n </div>\n );\n}\n\nexport default BudgetList;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -45,19 +45,22 @@ export function DescriptionList(props) {
|
|
|
45
45
|
_v$2 = columns(),
|
|
46
46
|
_v$3 = props.layout ?? "grid",
|
|
47
47
|
_v$4 = props.size ?? "md",
|
|
48
|
-
_v$5 = props.actionVisibility ?? "always"
|
|
48
|
+
_v$5 = props.actionVisibility ?? "always",
|
|
49
|
+
_v$6 = props.leader;
|
|
49
50
|
_v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
|
|
50
51
|
_v$2 !== _p$.t && _$setAttribute(_el$, "data-columns", _p$.t = _v$2);
|
|
51
52
|
_v$3 !== _p$.a && _$setAttribute(_el$, "data-layout", _p$.a = _v$3);
|
|
52
53
|
_v$4 !== _p$.o && _$setAttribute(_el$, "data-size", _p$.o = _v$4);
|
|
53
54
|
_v$5 !== _p$.i && _$setAttribute(_el$, "data-action-visibility", _p$.i = _v$5);
|
|
55
|
+
_v$6 !== _p$.n && _$setAttribute(_el$, "data-leader", _p$.n = _v$6);
|
|
54
56
|
return _p$;
|
|
55
57
|
}, {
|
|
56
58
|
e: undefined,
|
|
57
59
|
t: undefined,
|
|
58
60
|
a: undefined,
|
|
59
61
|
o: undefined,
|
|
60
|
-
i: undefined
|
|
62
|
+
i: undefined,
|
|
63
|
+
n: undefined
|
|
61
64
|
});
|
|
62
65
|
return _el$;
|
|
63
66
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/DescriptionList.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\n\nexport type DescriptionListItem = {\n term: JSX.Element;\n description: JSX.Element;\n action?: JSX.Element;\n};\n\nexport type DescriptionListProps = {\n items: readonly DescriptionListItem[];\n columns?: 1 | 2 | 3;\n layout?: \"grid\" | \"rows\" | \"compact\";\n size?: \"sm\" | \"md\";\n actionVisibility?: \"always\" | \"progressive\";\n /**\n * Joins each term to its right-aligned value with a dotted leader, for `rows` or `compact` lists that must span a\n * very wide container. A fallback, never the default: first keep rows within the row measure.\n */\n leader?: \"dotted\";\n class?: string;\n};\n\n/** Semantic key-value content with predictable responsive density. */\nexport function DescriptionList(props: DescriptionListProps): JSX.Element {\n const columns = () => Math.max(1, Math.min(3, props.columns ?? 1));\n return (\n <dl\n class={`k2b-description-list ${props.class ?? \"\"}`}\n data-columns={columns()}\n data-layout={props.layout ?? \"grid\"}\n data-size={props.size ?? \"md\"}\n data-action-visibility={props.actionVisibility ?? \"always\"}\n data-leader={props.leader}\n >\n <For each={props.items}>\n {(item) => (\n <div class=\"k2b-description-list__item\">\n <dt>{item.term}</dt>\n <dd>{item.description}</dd>\n <Show when={item.action}>{(action) => <div class=\"k2b-description-list__action\">{action()}</div>}</Show>\n </div>\n )}\n </For>\n </dl>\n );\n}\n\nexport default DescriptionList;\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,GAAG,EAAY,IAAI,QAAQ,UAAU;AAsB9C;AACA,OAAO,SAAS,eAAe,CAAC,KAA2B,EAAe;EACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;EAClE;IAAA;IAAA,iCASK,GAAG;MAAA,IAAC,IAAI;QAAA,OAAE,KAAK,CAAC,KAAK;MAAA;MAAA,UAClB,IAAI;QAAA;UAAA;UAAA;UAAA;UAAA;QAAA,sBAEG,IAAI,CAAC,IAAI;QAAA,sBACT,IAAI,CAAC,WAAW;QAAA,kCACpB,IAAI;UAAA,IAAC,IAAI;YAAA,OAAE,IAAI,CAAC,MAAM;UAAA;UAAA,UAAI,MAAM;YAAA;YAAA,gBAAgD,MAAM;YAAA;UAAA;QAAS;QAAA;MAAA;IAEnG;IAAA;MAAA,UAdI,wBAAwB,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE;QAAA,OACpC,OAAO,CAAC,CAAC;QAAA,OACV,KAAK,CAAC,MAAM,IAAI,MAAM;QAAA,OACxB,KAAK,CAAC,IAAI,IAAI,IAAI;QAAA,OACL,KAAK,CAAC,gBAAgB,IAAI,QAAQ;QAAA,OAC7C,KAAK,CAAC,MAAM;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;MAAA;MAAA;MAAA;MAAA;MAAA;MAAA;IAAA;IAAA;EAAA;AAa/B;AAEA,eAAe,eAAe","ignoreList":[]}
|
|
@@ -5,43 +5,155 @@ import { className as _$className } from "solid-js/web";
|
|
|
5
5
|
import { effect as _$effect } from "solid-js/web";
|
|
6
6
|
import { getNextElement as _$getNextElement } from "solid-js/web";
|
|
7
7
|
import { getNextMarker as _$getNextMarker } from "solid-js/web";
|
|
8
|
-
import { insert as _$insert } from "solid-js/web";
|
|
9
8
|
import { memo as _$memo } from "solid-js/web";
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
import { insert as _$insert } from "solid-js/web";
|
|
10
|
+
import { createComponent as _$createComponent } from "solid-js/web";
|
|
11
|
+
var _tmpl$ = /*#__PURE__*/_$template(`<div><div class=k2b-progress__track role=progressbar aria-valuemin=0 aria-valuemax=100></div><!$><!/>`),
|
|
12
|
+
_tmpl$2 = /*#__PURE__*/_$template(`<div class=k2b-progress__value>`),
|
|
13
|
+
_tmpl$3 = /*#__PURE__*/_$template(`<span class=k2b-progress__limit aria-hidden=true>`),
|
|
14
|
+
_tmpl$4 = /*#__PURE__*/_$template(`<div class=k2b-progress__segment>`),
|
|
15
|
+
_tmpl$5 = /*#__PURE__*/_$template(`<span class=k2b-progress__percent>`);
|
|
16
|
+
import { For, Show } from "solid-js";
|
|
17
|
+
|
|
18
|
+
/** One part of a segmented bar, in the unit of `limit`. `"hatched"` marks an expected, not yet booked part. */
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Sum minus limit, without float residue: `0.1 + 0.2` against `0.3` is not over. Amounts within a billionth of the
|
|
22
|
+
* larger of both count as equal.
|
|
23
|
+
*/
|
|
24
|
+
export const budgetOverrun = (total, limit) => {
|
|
25
|
+
const over = total - limit;
|
|
26
|
+
return over > Math.max(1, Math.abs(total), Math.abs(limit)) * 1e-9 ? over : 0;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** Sum over limit; an empty budget with spending is infinitely full. */
|
|
30
|
+
export const budgetRatio = (total, limit) => limit > 0 ? total / limit : total > 0 ? Number.POSITIVE_INFINITY : 0;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The drawn parts of a segmented bar, each as a percent of the track. The track spans the larger of the limit and the
|
|
34
|
+
* sum, so an overrun stays visible: segments fill up to the limit in order, the rest is one "over" part, and `mark`
|
|
35
|
+
* places the limit line (only when the sum goes beyond it). Without `limit` the segments fill the track; a limit of 0,
|
|
36
|
+
* below 0 or not finite is an empty budget, so any spending is over it.
|
|
37
|
+
*/
|
|
38
|
+
export const progressBarParts = (segments, limit) => {
|
|
39
|
+
const values = segments.map(segment => ({
|
|
40
|
+
pattern: segment.pattern ?? "solid",
|
|
41
|
+
value: Number.isFinite(segment.value) ? Math.max(0, segment.value) : 0
|
|
42
|
+
}));
|
|
43
|
+
const total = values.reduce((sum, segment) => sum + segment.value, 0);
|
|
44
|
+
const budget = limit === undefined ? total : Number.isFinite(limit) ? Math.max(0, limit) : 0;
|
|
45
|
+
const scale = Math.max(budget, total);
|
|
46
|
+
if (scale <= 0) return {
|
|
47
|
+
parts: [],
|
|
48
|
+
total,
|
|
49
|
+
over: 0,
|
|
50
|
+
mark: null,
|
|
51
|
+
ratio: 0
|
|
52
|
+
};
|
|
53
|
+
const parts = [];
|
|
54
|
+
let filled = 0;
|
|
55
|
+
for (const segment of values) {
|
|
56
|
+
const inside = Math.max(0, Math.min(segment.value, budget - filled));
|
|
57
|
+
if (inside > 0) parts.push({
|
|
58
|
+
pattern: segment.pattern,
|
|
59
|
+
width: inside / scale * 100
|
|
60
|
+
});
|
|
61
|
+
filled += segment.value;
|
|
62
|
+
}
|
|
63
|
+
const over = budgetOverrun(total, budget);
|
|
64
|
+
if (over > 0) parts.push({
|
|
65
|
+
pattern: "over",
|
|
66
|
+
width: over / scale * 100
|
|
67
|
+
});
|
|
68
|
+
return {
|
|
69
|
+
parts,
|
|
70
|
+
total,
|
|
71
|
+
over,
|
|
72
|
+
mark: over > 0 ? budget / scale * 100 : null,
|
|
73
|
+
ratio: budgetRatio(total, budget)
|
|
74
|
+
};
|
|
75
|
+
};
|
|
12
76
|
const clamp = value => Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0;
|
|
13
77
|
export function ProgressBar(props) {
|
|
14
|
-
const
|
|
78
|
+
const segmented = () => props.segments ? progressBarParts(props.segments, props.limit) : null;
|
|
79
|
+
// With segments the share always comes from them; `value` only drives the plain bar.
|
|
80
|
+
const percent = () => {
|
|
81
|
+
const bar = segmented();
|
|
82
|
+
if (!bar) return clamp(props.value ?? 0);
|
|
83
|
+
return Number.isFinite(bar.ratio) ? Math.max(0, Math.round(bar.ratio * 100)) : null;
|
|
84
|
+
};
|
|
85
|
+
const shown = () => percent() ?? 100;
|
|
15
86
|
return (() => {
|
|
16
87
|
var _el$ = _$getNextElement(_tmpl$),
|
|
17
88
|
_el$2 = _el$.firstChild,
|
|
18
|
-
_el$3 = _el$2.
|
|
19
|
-
_el$4 = _el$
|
|
20
|
-
|
|
89
|
+
_el$3 = _el$2.nextSibling,
|
|
90
|
+
[_el$4, _co$] = _$getNextMarker(_el$3.nextSibling);
|
|
91
|
+
_$insert(_el$2, _$createComponent(Show, {
|
|
92
|
+
get when() {
|
|
93
|
+
return segmented();
|
|
94
|
+
},
|
|
95
|
+
get fallback() {
|
|
96
|
+
return (() => {
|
|
97
|
+
var _el$5 = _$getNextElement(_tmpl$2);
|
|
98
|
+
_$effect(_$p => _$style(_el$5, `width: ${shown()}%`, _$p));
|
|
99
|
+
return _el$5;
|
|
100
|
+
})();
|
|
101
|
+
},
|
|
102
|
+
children: bar => [_$createComponent(For, {
|
|
103
|
+
get each() {
|
|
104
|
+
return bar().parts;
|
|
105
|
+
},
|
|
106
|
+
children: part => (() => {
|
|
107
|
+
var _el$7 = _$getNextElement(_tmpl$4);
|
|
108
|
+
_$effect(_p$ => {
|
|
109
|
+
var _v$8 = part.pattern,
|
|
110
|
+
_v$9 = `width: ${part.width.toFixed(3)}%`;
|
|
111
|
+
_v$8 !== _p$.e && _$setAttribute(_el$7, "data-pattern", _p$.e = _v$8);
|
|
112
|
+
_p$.t = _$style(_el$7, _v$9, _p$.t);
|
|
113
|
+
return _p$;
|
|
114
|
+
}, {
|
|
115
|
+
e: undefined,
|
|
116
|
+
t: undefined
|
|
117
|
+
});
|
|
118
|
+
return _el$7;
|
|
119
|
+
})()
|
|
120
|
+
}), _$createComponent(Show, {
|
|
121
|
+
get when() {
|
|
122
|
+
return bar().mark !== null;
|
|
123
|
+
},
|
|
124
|
+
get children() {
|
|
125
|
+
var _el$6 = _$getNextElement(_tmpl$3);
|
|
126
|
+
_$effect(_$p => _$style(_el$6, `left: ${(bar().mark ?? 0).toFixed(3)}%`, _$p));
|
|
127
|
+
return _el$6;
|
|
128
|
+
}
|
|
129
|
+
})]
|
|
130
|
+
}));
|
|
21
131
|
_$insert(_el$, (() => {
|
|
22
132
|
var _c$ = _$memo(() => !!props.showValue);
|
|
23
133
|
return () => _c$() ? (() => {
|
|
24
|
-
var _el$
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return _el$
|
|
134
|
+
var _el$8 = _$getNextElement(_tmpl$5);
|
|
135
|
+
_$insert(_el$8, (() => {
|
|
136
|
+
var _c$2 = _$memo(() => percent() === null);
|
|
137
|
+
return () => _c$2() ? "∞" : `${percent()}%`;
|
|
138
|
+
})());
|
|
139
|
+
return _el$8;
|
|
30
140
|
})() : null;
|
|
31
|
-
})(), _el$
|
|
141
|
+
})(), _el$4, _co$);
|
|
32
142
|
_$effect(_p$ => {
|
|
33
143
|
var _v$ = `k2b-progress ${props.class ?? ""}`,
|
|
34
144
|
_v$2 = props.size ?? "md",
|
|
35
145
|
_v$3 = props.tone ?? "info",
|
|
36
|
-
_v$4 =
|
|
37
|
-
_v$5 =
|
|
38
|
-
_v$6 =
|
|
146
|
+
_v$4 = segmented() ? "" : undefined,
|
|
147
|
+
_v$5 = props.label,
|
|
148
|
+
_v$6 = Math.min(100, shown()),
|
|
149
|
+
_v$7 = props.valueText ?? (segmented() ? percent() === null ? "∞" : `${percent()}%` : undefined);
|
|
39
150
|
_v$ !== _p$.e && _$className(_el$, _p$.e = _v$);
|
|
40
151
|
_v$2 !== _p$.t && _$setAttribute(_el$, "data-size", _p$.t = _v$2);
|
|
41
152
|
_v$3 !== _p$.a && _$setAttribute(_el$, "data-tone", _p$.a = _v$3);
|
|
42
|
-
_v$4 !== _p$.o && _$setAttribute(_el
|
|
43
|
-
_v$5 !== _p$.i && _$setAttribute(_el$2, "aria-
|
|
44
|
-
_p$.n
|
|
153
|
+
_v$4 !== _p$.o && _$setAttribute(_el$, "data-segmented", _p$.o = _v$4);
|
|
154
|
+
_v$5 !== _p$.i && _$setAttribute(_el$2, "aria-label", _p$.i = _v$5);
|
|
155
|
+
_v$6 !== _p$.n && _$setAttribute(_el$2, "aria-valuenow", _p$.n = _v$6);
|
|
156
|
+
_v$7 !== _p$.s && _$setAttribute(_el$2, "aria-valuetext", _p$.s = _v$7);
|
|
45
157
|
return _p$;
|
|
46
158
|
}, {
|
|
47
159
|
e: undefined,
|
|
@@ -49,7 +161,8 @@ export function ProgressBar(props) {
|
|
|
49
161
|
a: undefined,
|
|
50
162
|
o: undefined,
|
|
51
163
|
i: undefined,
|
|
52
|
-
n: undefined
|
|
164
|
+
n: undefined,
|
|
165
|
+
s: undefined
|
|
53
166
|
});
|
|
54
167
|
return _el$;
|
|
55
168
|
})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"names":[],"sources":["surfaces/ProgressBar.tsx"],"sourcesContent":["import { For, type JSX, Show } from \"solid-js\";\nimport type { IntentTone } from \"../semantics\";\n\nexport type ProgressBarTone = Extract<IntentTone, \"info\" | \"success\" | \"warning\" | \"danger\">;\n\n/** One part of a segmented bar, in the unit of `limit`. `\"hatched\"` marks an expected, not yet booked part. */\nexport type ProgressBarSegment = { value: number; pattern?: \"solid\" | \"hatched\" };\n\nexport type ProgressBarProps = {\n /** Percent from 0 to 100. With `segments`, the share of `limit` the segments fill. */\n value?: number;\n size?: \"xs\" | \"sm\" | \"md\";\n tone?: ProgressBarTone;\n showValue?: boolean;\n label: string;\n /** Parts drawn in order, such as booked and expected spending. Negative and non-finite values count as 0. */\n segments?: readonly ProgressBarSegment[];\n /** The budget the segments fill. What goes beyond it is drawn red, with a mark at the limit. */\n limit?: number;\n /** Spoken value, such as \"1,240 € of 1,500 €\"; defaults to the percent. */\n valueText?: string;\n class?: string;\n};\n\nexport type ProgressBarPart = { pattern: \"solid\" | \"hatched\" | \"over\"; width: number };\n\n/**\n * Sum minus limit, without float residue: `0.1 + 0.2` against `0.3` is not over. Amounts within a billionth of the\n * larger of both count as equal.\n */\nexport const budgetOverrun = (total: number, limit: number): number => {\n const over = total - limit;\n return over > Math.max(1, Math.abs(total), Math.abs(limit)) * 1e-9 ? over : 0;\n};\n\n/** Sum over limit; an empty budget with spending is infinitely full. */\nexport const budgetRatio = (total: number, limit: number): number => (limit > 0 ? total / limit : total > 0 ? Number.POSITIVE_INFINITY : 0);\n\n/**\n * The drawn parts of a segmented bar, each as a percent of the track. The track spans the larger of the limit and the\n * sum, so an overrun stays visible: segments fill up to the limit in order, the rest is one \"over\" part, and `mark`\n * places the limit line (only when the sum goes beyond it). Without `limit` the segments fill the track; a limit of 0,\n * below 0 or not finite is an empty budget, so any spending is over it.\n */\nexport const progressBarParts = (\n segments: readonly ProgressBarSegment[],\n limit?: number,\n): { parts: ProgressBarPart[]; total: number; over: number; mark: number | null; ratio: number } => {\n const values = segments.map((segment) => ({\n pattern: segment.pattern ?? \"solid\",\n value: Number.isFinite(segment.value) ? Math.max(0, segment.value) : 0,\n }));\n const total = values.reduce((sum, segment) => sum + segment.value, 0);\n const budget = limit === undefined ? total : Number.isFinite(limit) ? Math.max(0, limit) : 0;\n const scale = Math.max(budget, total);\n if (scale <= 0) return { parts: [], total, over: 0, mark: null, ratio: 0 };\n const parts: ProgressBarPart[] = [];\n let filled = 0;\n for (const segment of values) {\n const inside = Math.max(0, Math.min(segment.value, budget - filled));\n if (inside > 0) parts.push({ pattern: segment.pattern, width: (inside / scale) * 100 });\n filled += segment.value;\n }\n const over = budgetOverrun(total, budget);\n if (over > 0) parts.push({ pattern: \"over\", width: (over / scale) * 100 });\n return { parts, total, over, mark: over > 0 ? (budget / scale) * 100 : null, ratio: budgetRatio(total, budget) };\n};\n\nconst clamp = (value: number) => (Number.isFinite(value) ? Math.max(0, Math.min(100, Math.round(value))) : 0);\n\nexport function ProgressBar(props: ProgressBarProps): JSX.Element {\n const segmented = () => (props.segments ? progressBarParts(props.segments, props.limit) : null);\n // With segments the share always comes from them; `value` only drives the plain bar.\n const percent = () => {\n const bar = segmented();\n if (!bar) return clamp(props.value ?? 0);\n return Number.isFinite(bar.ratio) ? Math.max(0, Math.round(bar.ratio * 100)) : null;\n };\n const shown = () => percent() ?? 100;\n return (\n <div\n class={`k2b-progress ${props.class ?? \"\"}`}\n data-size={props.size ?? \"md\"}\n data-tone={props.tone ?? \"info\"}\n data-segmented={segmented() ? \"\" : undefined}\n >\n <div\n class=\"k2b-progress__track\"\n role=\"progressbar\"\n aria-label={props.label}\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n aria-valuenow={Math.min(100, shown())}\n aria-valuetext={props.valueText ?? (segmented() ? (percent() === null ? \"∞\" : `${percent()}%`) : undefined)}\n >\n <Show when={segmented()} fallback={<div class=\"k2b-progress__value\" style={`width: ${shown()}%`} />}>\n {(bar) => (\n <>\n <For each={bar().parts}>\n {(part) => <div class=\"k2b-progress__segment\" data-pattern={part.pattern} style={`width: ${part.width.toFixed(3)}%`} />}\n </For>\n <Show when={bar().mark !== null}>\n <span class=\"k2b-progress__limit\" aria-hidden=\"true\" style={`left: ${(bar().mark ?? 0).toFixed(3)}%`} />\n </Show>\n </>\n )}\n </Show>\n </div>\n {props.showValue ? <span class=\"k2b-progress__percent\">{percent() === null ? \"∞\" : `${percent()}%`}</span> : null}\n </div>\n );\n}\n\nexport default ProgressBar;\n"],"mappings":"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","ignoreList":[]}
|