basalt-ui 1.26.0 → 1.28.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/AGENTS.md +23 -23
- package/CHANGELOG.md +67 -0
- package/MIGRATING.md +896 -37
- package/README.md +33 -3
- package/agent/rules/basalt-batteries.md +25 -10
- package/agent/rules/basalt-controls.md +73 -43
- package/agent/rules/basalt-mantine.md +17 -6
- package/agent/rules/basalt-state.md +5 -0
- package/agent/rules/basalt-tokens.md +1 -1
- package/configs/oxlint-plugin.js +1286 -73
- package/configs/oxlint-plugin.test.ts +1338 -29
- package/configs/oxlint.json +12 -5
- package/dist/agent/coalesce.d.ts.map +1 -1
- package/dist/agent/coalesce.js +2 -1
- package/dist/agent/merge.d.ts.map +1 -1
- package/dist/agent/merge.js +2 -1
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/part-list.js +2 -0
- package/dist/agent/stick-to-bottom.d.ts +3 -6
- package/dist/agent/stick-to-bottom.d.ts.map +1 -1
- package/dist/agent/stick-to-bottom.js +6 -3
- package/dist/agent-chat/composer.d.ts +6 -2
- package/dist/agent-chat/composer.d.ts.map +1 -1
- package/dist/agent-chat/composer.js +49 -33
- package/dist/agent-chat/relative-time.d.ts +0 -9
- package/dist/agent-chat/relative-time.d.ts.map +1 -1
- package/dist/agent-chat/relative-time.js +2 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +3 -2
- package/dist/agent-chat/thread-detail-panel.d.ts.map +1 -1
- package/dist/agent-chat/thread-detail-panel.js +8 -5
- package/dist/agent-chat/thread-feed-row.d.ts +2 -1
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +92 -92
- package/dist/agent-chat/thread-feed.d.ts +3 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +8 -3
- package/dist/agent-chat/thread-message.d.ts +4 -3
- package/dist/agent-chat/thread-message.d.ts.map +1 -1
- package/dist/agent-chat/thread-message.js +70 -31
- package/dist/agent-chat/thread-outcome-card.d.ts +3 -2
- package/dist/agent-chat/thread-outcome-card.d.ts.map +1 -1
- package/dist/agent-chat/thread-outcome-card.js +9 -2
- package/dist/agent-chat/thread-workspace.d.ts +7 -2
- package/dist/agent-chat/thread-workspace.d.ts.map +1 -1
- package/dist/agent-chat/thread-workspace.js +62 -29
- package/dist/agent-chat/tool-chip.d.ts +3 -2
- package/dist/agent-chat/tool-chip.d.ts.map +1 -1
- package/dist/agent-chat/tool-chip.js +7 -2
- package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +8 -7
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +45 -5
- package/dist/charts/kinds/BandStrip.d.ts +10 -7
- package/dist/charts/kinds/BandStrip.d.ts.map +1 -1
- package/dist/charts/kinds/BandStrip.js +12 -7
- package/dist/charts/kinds/Bars.d.ts +12 -6
- package/dist/charts/kinds/Bars.d.ts.map +1 -1
- package/dist/charts/kinds/Bars.js +37 -11
- package/dist/charts/kinds/Donut.d.ts +6 -5
- package/dist/charts/kinds/Donut.d.ts.map +1 -1
- package/dist/charts/kinds/Donut.js +19 -2
- package/dist/charts/kinds/DualPanel.d.ts +6 -5
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +36 -8
- package/dist/charts/kinds/Heatmap.d.ts +10 -6
- package/dist/charts/kinds/Heatmap.d.ts.map +1 -1
- package/dist/charts/kinds/Heatmap.js +58 -31
- package/dist/charts/kinds/MirroredBars.d.ts +6 -5
- package/dist/charts/kinds/MirroredBars.d.ts.map +1 -1
- package/dist/charts/kinds/MirroredBars.js +9 -2
- package/dist/charts/kinds/MultiLine.d.ts +11 -6
- package/dist/charts/kinds/MultiLine.d.ts.map +1 -1
- package/dist/charts/kinds/MultiLine.js +24 -15
- package/dist/charts/kinds/StackedArea.d.ts +18 -8
- package/dist/charts/kinds/StackedArea.d.ts.map +1 -1
- package/dist/charts/kinds/StackedArea.js +29 -4
- package/dist/charts/kinds/ZonedLine.d.ts +12 -8
- package/dist/charts/kinds/ZonedLine.d.ts.map +1 -1
- package/dist/charts/kinds/ZonedLine.js +33 -23
- package/dist/charts/layout/auto-margin.d.ts +65 -8
- package/dist/charts/layout/auto-margin.d.ts.map +1 -1
- package/dist/charts/layout/auto-margin.js +45 -10
- package/dist/charts/layout/log-ticks.d.ts +27 -0
- package/dist/charts/layout/log-ticks.d.ts.map +1 -0
- package/dist/charts/layout/log-ticks.js +42 -0
- package/dist/charts/primitives/Axes.d.ts +11 -2
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +15 -5
- package/dist/charts/primitives/CartesianChart.d.ts +45 -7
- package/dist/charts/primitives/CartesianChart.d.ts.map +1 -1
- package/dist/charts/primitives/CartesianChart.js +86 -28
- package/dist/charts/primitives/ChartCard.d.ts +27 -2
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +37 -17
- package/dist/charts/primitives/ChartFrame.d.ts +30 -4
- package/dist/charts/primitives/ChartFrame.d.ts.map +1 -1
- package/dist/charts/primitives/ChartFrame.js +45 -15
- package/dist/charts/primitives/ChartLegend.d.ts +13 -2
- package/dist/charts/primitives/ChartLegend.d.ts.map +1 -1
- package/dist/charts/primitives/ChartLegend.js +33 -13
- package/dist/charts/primitives/ChartPending.d.ts +77 -4
- package/dist/charts/primitives/ChartPending.d.ts.map +1 -1
- package/dist/charts/primitives/ChartPending.js +100 -6
- package/dist/charts/primitives/ChartTooltip.d.ts +7 -0
- package/dist/charts/primitives/ChartTooltip.d.ts.map +1 -1
- package/dist/charts/primitives/ChartTooltip.js +18 -5
- package/dist/charts/primitives/Crosshair.d.ts +3 -0
- package/dist/charts/primitives/Crosshair.d.ts.map +1 -1
- package/dist/charts/primitives/Crosshair.js +3 -1
- package/dist/charts/primitives/chart-frame-layout.d.ts +95 -0
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +1 -0
- package/dist/charts/primitives/chart-frame-layout.js +89 -0
- package/dist/charts/primitives/chart-tier.d.ts +16 -0
- package/dist/charts/primitives/chart-tier.d.ts.map +1 -0
- package/dist/charts/primitives/chart-tier.js +20 -0
- package/dist/charts/series.d.ts +55 -1
- package/dist/charts/series.d.ts.map +1 -1
- package/dist/charts/series.js +27 -1
- package/dist/charts/sparklines/BarSparkline.d.ts +3 -3
- package/dist/charts/sparklines/BarSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/BarSparkline.js +9 -3
- package/dist/charts/sparklines/LineSparkline.d.ts +3 -3
- package/dist/charts/sparklines/LineSparkline.d.ts.map +1 -1
- package/dist/charts/sparklines/LineSparkline.js +15 -3
- package/dist/charts/sparklines/index.d.ts +2 -2
- package/dist/charts/sparklines/index.d.ts.map +1 -1
- package/dist/charts/utils/format.d.ts +92 -2
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +64 -1
- package/dist/charts/utils/ticks.d.ts +81 -2
- package/dist/charts/utils/ticks.d.ts.map +1 -1
- package/dist/charts/utils/ticks.js +54 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/commands/ShortcutsHelp.d.ts +3 -2
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +8 -2
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +2 -2
- package/dist/commands/define-overlays.d.ts +102 -0
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +102 -2
- package/dist/commands/index.d.ts +10 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -1
- package/dist/commands/overlays-mount.d.ts +13 -6
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/common/errors.d.ts +34 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +36 -0
- package/dist/common/index.d.ts +15 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +29 -0
- package/dist/common/props.d.ts +63 -0
- package/dist/common/props.d.ts.map +1 -0
- package/dist/common/props.js +6 -0
- package/dist/common/query-state-like.d.ts +43 -0
- package/dist/common/query-state-like.d.ts.map +1 -0
- package/dist/common/query-state-like.js +20 -0
- package/dist/common/refs.d.ts +29 -0
- package/dist/common/refs.d.ts.map +1 -0
- package/dist/common/refs.js +29 -0
- package/dist/common/scroll-parent.d.ts +23 -0
- package/dist/common/scroll-parent.d.ts.map +1 -0
- package/dist/common/scroll-parent.js +21 -0
- package/dist/common/validate.d.ts +38 -0
- package/dist/common/validate.d.ts.map +1 -0
- package/dist/common/validate.js +36 -0
- package/dist/connectivity/connectivity-indicator.d.ts +3 -1
- package/dist/connectivity/connectivity-indicator.d.ts.map +1 -1
- package/dist/connectivity/connectivity-indicator.js +3 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +1 -1
- package/dist/connectivity/connectivity-provider.js +4 -1
- package/dist/connectivity/index.d.ts +1 -0
- package/dist/connectivity/index.d.ts.map +1 -1
- package/dist/connectivity/types.d.ts +2 -2
- package/dist/connectivity/types.d.ts.map +1 -1
- package/dist/connectivity/use-connectivity.d.ts.map +1 -1
- package/dist/content/article-layout.module.css +11 -4
- package/dist/content/callout.d.ts +8 -4
- package/dist/content/callout.d.ts.map +1 -1
- package/dist/content/callout.js +15 -8
- package/dist/content/guide.d.ts +5 -4
- package/dist/content/guide.d.ts.map +1 -1
- package/dist/content/guide.js +13 -4
- package/dist/content/heading-anchor.d.ts +24 -2
- package/dist/content/heading-anchor.d.ts.map +1 -1
- package/dist/content/heading-anchor.js +23 -9
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +2 -0
- package/dist/content/prose.module.css +9 -7
- package/dist/content/reading-progress.d.ts +10 -4
- package/dist/content/reading-progress.d.ts.map +1 -1
- package/dist/content/reading-progress.js +26 -10
- package/dist/content/slug.d.ts +4 -0
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/toc.d.ts +11 -0
- package/dist/content/toc.d.ts.map +1 -1
- package/dist/content/toc.js +23 -10
- package/dist/controls/actions.d.ts +49 -6
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/actions.js +39 -8
- package/dist/controls/compare-filter.d.ts +3 -2
- package/dist/controls/compare-filter.d.ts.map +1 -1
- package/dist/controls/compare-filter.js +17 -2
- package/dist/controls/control-group.d.ts +3 -3
- package/dist/controls/control-group.d.ts.map +1 -1
- package/dist/controls/control-group.js +9 -2
- package/dist/controls/controls.module.css +169 -186
- package/dist/controls/controls.module.css.d.ts +9 -11
- package/dist/controls/enum-filter.d.ts +13 -3
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +32 -15
- package/dist/controls/filter-context.d.ts +15 -6
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-pill.d.ts +3 -3
- package/dist/controls/filter-pill.d.ts.map +1 -1
- package/dist/controls/filter-pill.js +4 -1
- package/dist/controls/filter-set.d.ts +3 -2
- package/dist/controls/filter-set.d.ts.map +1 -1
- package/dist/controls/filter-set.js +66 -41
- package/dist/controls/filter-sheet.d.ts +20 -80
- package/dist/controls/filter-sheet.d.ts.map +1 -1
- package/dist/controls/filter-sheet.js +9 -95
- package/dist/controls/index.d.ts +3 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +6 -0
- package/dist/controls/multi-select-filter.d.ts +18 -2
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/multi-select-filter.js +124 -22
- package/dist/controls/number-filter.d.ts +28 -0
- package/dist/controls/number-filter.d.ts.map +1 -0
- package/dist/controls/number-filter.js +172 -0
- package/dist/controls/panel-row.d.ts +132 -0
- package/dist/controls/panel-row.d.ts.map +1 -0
- package/dist/controls/panel-row.js +173 -0
- package/dist/controls/panel-row.module.css +86 -0
- package/dist/controls/panel-row.module.css.d.ts +13 -0
- package/dist/controls/range-filter.d.ts +20 -5
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +75 -38
- package/dist/controls/search-filter.d.ts +3 -2
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +26 -11
- package/dist/controls/select-filter.d.ts +2 -1
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/select-filter.js +4 -0
- package/dist/controls/slider-control.d.ts +36 -0
- package/dist/controls/slider-control.d.ts.map +1 -0
- package/dist/controls/slider-control.js +64 -0
- package/dist/controls/sync-button.d.ts +3 -2
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +16 -3
- package/dist/controls/toggle-filter.d.ts +3 -2
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/toggle-filter.js +29 -12
- package/dist/controls/view-tabs.d.ts +3 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls/view-tabs.js +43 -11
- package/dist/controls-dates/date-range-picker.d.ts +1 -1
- package/dist/controls-dates/date-range-picker.d.ts.map +1 -1
- package/dist/controls-dates/date-range-picker.js +6 -1
- package/dist/dashboard/delta-badge.d.ts +5 -1
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/empty-state.d.ts +10 -3
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +37 -6
- package/dist/dashboard/index.d.ts +6 -4
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +10 -2
- package/dist/dashboard/query-state.d.ts +48 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +111 -57
- package/dist/dashboard/settings-section.d.ts +19 -9
- package/dist/dashboard/settings-section.d.ts.map +1 -1
- package/dist/dashboard/settings-section.js +74 -25
- package/dist/dashboard/stat-card.d.ts +76 -19
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +78 -38
- package/dist/dashboard/stat-card.module.css +112 -26
- package/dist/dashboard/stat-card.module.css.d.ts +5 -0
- package/dist/dashboard/stat-group.d.ts +41 -0
- package/dist/dashboard/stat-group.d.ts.map +1 -0
- package/dist/dashboard/stat-group.js +30 -0
- package/dist/dashboard/stat-group.module.css +66 -0
- package/dist/dashboard/stat-group.module.css.d.ts +8 -0
- package/dist/dashboard/widget-grid.d.ts +27 -0
- package/dist/dashboard/widget-grid.d.ts.map +1 -0
- package/dist/dashboard/widget-grid.js +41 -0
- package/dist/dashboard/widget-grid.module.css +53 -0
- package/dist/dashboard/widget-grid.module.css.d.ts +9 -0
- package/dist/data/data-table.d.ts +151 -12
- package/dist/data/data-table.d.ts.map +1 -1
- package/dist/data/data-table.js +392 -138
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- package/dist/data/index.d.ts +2 -2
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +24 -2
- package/dist/data/query-branch.d.ts +28 -0
- package/dist/data/query-branch.d.ts.map +1 -0
- package/dist/data/query-branch.js +10 -0
- package/dist/data/table.d.ts +2 -2
- package/dist/data/table.d.ts.map +1 -1
- package/dist/data/virtual-list.d.ts +65 -6
- package/dist/data/virtual-list.d.ts.map +1 -1
- package/dist/data/virtual-list.js +89 -38
- package/dist/data/virtual.d.ts +1 -1
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.d.ts +4 -3
- package/dist/forms/FormErrorSummary.d.ts.map +1 -1
- package/dist/forms/FormErrorSummary.js +6 -4
- package/dist/forms/create-form.d.ts +2 -2
- package/dist/forms/field.d.ts +46 -6
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +10 -5
- package/dist/forms/form-layout.d.ts +142 -0
- package/dist/forms/form-layout.d.ts.map +1 -0
- package/dist/forms/form-layout.js +110 -0
- package/dist/forms/form-layout.module.css +145 -0
- package/dist/forms/form-layout.module.css.d.ts +20 -0
- package/dist/forms/form-state.d.ts +42 -0
- package/dist/forms/form-state.d.ts.map +1 -0
- package/dist/forms/form-state.js +26 -0
- package/dist/forms/index.d.ts +22 -6
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +19 -3
- package/dist/forms/use-field-array.d.ts +60 -0
- package/dist/forms/use-field-array.d.ts.map +1 -0
- package/dist/forms/use-field-array.js +20 -0
- package/dist/forms/use-form-draft.d.ts +25 -10
- package/dist/forms/use-form-draft.d.ts.map +1 -1
- package/dist/forms/use-form-draft.js +55 -18
- package/dist/forms/use-form-submit.d.ts +88 -0
- package/dist/forms/use-form-submit.d.ts.map +1 -0
- package/dist/forms/use-form-submit.js +63 -0
- package/dist/guard/index.d.ts +1 -1
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -11
- package/dist/index.d.ts +10 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -4
- package/dist/nav/types.d.ts +15 -6
- package/dist/nav/types.d.ts.map +1 -1
- package/dist/notifications/bell.d.ts +3 -2
- package/dist/notifications/bell.d.ts.map +1 -1
- package/dist/notifications/bell.js +73 -56
- package/dist/notifications/center.d.ts +15 -4
- package/dist/notifications/center.d.ts.map +1 -1
- package/dist/notifications/center.js +5 -2
- package/dist/notifications/define-notifications.d.ts +56 -14
- package/dist/notifications/define-notifications.d.ts.map +1 -1
- package/dist/notifications/define-notifications.js +2 -1
- package/dist/notifications/index.d.ts +6 -2
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -1
- package/dist/notifications/mount-guard.d.ts +8 -0
- package/dist/notifications/mount-guard.d.ts.map +1 -0
- package/dist/notifications/mount-guard.js +19 -0
- package/dist/notifications/notify.d.ts +58 -1
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/notify.js +46 -2
- package/dist/notifications/overlay.d.ts.map +1 -1
- package/dist/notifications/overlay.js +2 -0
- package/dist/notifications/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/index.d.ts +37 -5
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +66 -28
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/query/devtools.d.ts.map +1 -1
- package/dist/query/devtools.js +1 -0
- package/dist/router-tanstack/field.d.ts +1 -1
- package/dist/router-tanstack/field.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +1 -1
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +4 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +92 -8
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- package/dist/section/index.d.ts +1 -1
- package/dist/section/index.d.ts.map +1 -1
- package/dist/section/section.d.ts +36 -2
- package/dist/section/section.d.ts.map +1 -1
- package/dist/section/section.js +49 -57
- package/dist/section/section.module.css +11 -0
- package/dist/shell/account-types.d.ts +5 -2
- package/dist/shell/account-types.d.ts.map +1 -1
- package/dist/shell/app-brand.d.ts +13 -0
- package/dist/shell/app-brand.d.ts.map +1 -0
- package/dist/shell/app-brand.js +94 -0
- package/dist/shell/app-brand.module.css +109 -0
- package/dist/shell/app-brand.module.css.d.ts +14 -0
- package/dist/shell/app-breadcrumbs.d.ts +4 -2
- package/dist/shell/app-breadcrumbs.d.ts.map +1 -1
- package/dist/shell/app-breadcrumbs.js +33 -22
- package/dist/shell/app-header.module.css +10 -5
- package/dist/shell/app-main.module.css +107 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +3 -2
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +29 -15
- package/dist/shell/app-mobile-nav.module.css +48 -27
- package/dist/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/dist/shell/app-sidebar-account.d.ts +2 -1
- package/dist/shell/app-sidebar-account.d.ts.map +1 -1
- package/dist/shell/app-sidebar-account.js +57 -22
- package/dist/shell/app-sidebar.d.ts +9 -3
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +55 -109
- package/dist/shell/app-sidebar.module.css +53 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +14 -6
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +47 -12
- package/dist/shell/isomorphic-layout-effect.d.ts +14 -0
- package/dist/shell/isomorphic-layout-effect.d.ts.map +1 -0
- package/dist/shell/isomorphic-layout-effect.js +5 -0
- package/dist/shell/mobile-nav-model.d.ts.map +1 -1
- package/dist/shell/mobile-nav-model.js +27 -6
- package/dist/shell/nav-count-badge.d.ts +5 -3
- package/dist/shell/nav-count-badge.d.ts.map +1 -1
- package/dist/shell/nav-count-badge.js +3 -1
- package/dist/shell/page-aside.d.ts +43 -0
- package/dist/shell/page-aside.d.ts.map +1 -0
- package/dist/shell/page-aside.js +202 -0
- package/dist/shell/page-aside.module.css +174 -0
- package/dist/shell/page-aside.module.css.d.ts +14 -0
- package/dist/shell/page-bar.d.ts +55 -15
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +130 -41
- package/dist/shell/page-bar.module.css +107 -13
- package/dist/shell/page-bar.module.css.d.ts +4 -1
- package/dist/shell/sidebar-search.d.ts +4 -2
- package/dist/shell/sidebar-search.d.ts.map +1 -1
- package/dist/shell/sidebar-search.js +9 -4
- package/dist/shell/sidebar-search.module.css +1 -1
- package/dist/state/fields.d.ts +227 -34
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +77 -30
- package/dist/state/persisted-or-local.d.ts +9 -0
- package/dist/state/persisted-or-local.d.ts.map +1 -0
- package/dist/state/persisted-or-local.js +24 -0
- package/dist/state/persisted.d.ts +12 -0
- package/dist/state/persisted.d.ts.map +1 -1
- package/dist/state/persisted.js +36 -18
- package/dist/state.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/surfaces.d.ts +12 -11
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +43 -12
- package/dist/theme/ctl-theme.d.ts.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +102 -17
- package/dist/theme/nav-link.module.css +37 -26
- package/dist/theme/segmented-control.module.css +22 -0
- package/dist/theme/segmented-control.module.css.d.ts +1 -0
- package/dist/theme-lab/boot.d.ts +66 -0
- package/dist/theme-lab/boot.d.ts.map +1 -0
- package/dist/theme-lab/boot.js +82 -0
- package/dist/theme-lab/index.d.ts +4 -43
- package/dist/theme-lab/index.d.ts.map +1 -1
- package/dist/theme-lab/index.js +9 -69
- package/dist/theme-toggle/index.d.ts +3 -2
- package/dist/theme-toggle/index.d.ts.map +1 -1
- package/dist/theme-toggle/index.js +8 -2
- package/dist/tokens/index.d.ts +42 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +35 -6
- package/dist/tokens/palette.d.ts +45 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +31 -14
- package/dist/tokens.css +4 -5
- package/dist/utils/is-dev.d.ts +3 -0
- package/dist/utils/is-dev.d.ts.map +1 -0
- package/dist/utils/is-dev.js +6 -0
- package/dist/widget-header/delta-badge.d.ts +7 -1
- package/dist/widget-header/delta-badge.d.ts.map +1 -1
- package/dist/widget-header/delta-badge.js +8 -1
- package/dist/widget-header/index.d.ts +2 -2
- package/dist/widget-header/index.d.ts.map +1 -1
- package/dist/widget-header/index.js +3 -1
- package/dist/widget-header/widget-header.d.ts +99 -4
- package/dist/widget-header/widget-header.d.ts.map +1 -1
- package/dist/widget-header/widget-header.js +45 -18
- package/dist/widget-header/widget-header.module.css +87 -7
- package/dist/widget-header/widget-header.module.css.d.ts +1 -0
- package/llms.txt +6 -6
- package/package.json +49 -25
- package/src/agent/coalesce.ts +2 -1
- package/src/agent/merge.ts +2 -1
- package/src/agent/part-list.tsx +2 -0
- package/src/agent/stick-to-bottom.tsx +9 -11
- package/src/agent-chat/composer.tsx +124 -103
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +9 -5
- package/src/agent-chat/thread-feed-row.tsx +17 -9
- package/src/agent-chat/thread-feed.tsx +9 -3
- package/src/agent-chat/thread-message.tsx +48 -13
- package/src/agent-chat/thread-outcome-card.tsx +9 -1
- package/src/agent-chat/thread-workspace.tsx +72 -33
- package/src/agent-chat/tool-chip.tsx +8 -2
- package/src/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +39 -4
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +67 -16
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +56 -10
- package/src/charts/kinds/Heatmap.tsx +90 -33
- package/src/charts/kinds/MirroredBars.tsx +21 -3
- package/src/charts/kinds/MultiLine.tsx +61 -18
- package/src/charts/kinds/StackedArea.tsx +77 -6
- package/src/charts/kinds/ZonedLine.tsx +71 -31
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +33 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +66 -25
- package/src/charts/primitives/ChartFrame.tsx +107 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +185 -7
- package/src/charts/primitives/ChartTooltip.tsx +37 -5
- package/src/charts/primitives/Crosshair.tsx +6 -3
- package/src/charts/primitives/chart-frame-layout.ts +212 -0
- package/src/charts/primitives/chart-tier.tsx +37 -0
- package/src/charts/series.ts +77 -1
- package/src/charts/sparklines/BarSparkline.tsx +11 -3
- package/src/charts/sparklines/LineSparkline.tsx +18 -4
- package/src/charts/sparklines/index.ts +2 -2
- package/src/charts/utils/format.ts +163 -2
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/index.ts +8 -3
- package/src/commands/ShortcutsHelp.tsx +10 -3
- package/src/commands/define-commands.ts +2 -2
- package/src/commands/define-overlays.ts +216 -1
- package/src/commands/index.ts +12 -0
- package/src/commands/overlays-mount.tsx +60 -26
- package/src/common/errors.ts +73 -0
- package/src/common/index.ts +21 -0
- package/src/common/props.ts +71 -0
- package/src/common/query-state-like.ts +64 -0
- package/src/common/refs.ts +58 -0
- package/src/common/scroll-parent.ts +42 -0
- package/src/common/validate.ts +94 -0
- package/src/connectivity/connectivity-indicator.tsx +6 -1
- package/src/connectivity/connectivity-provider.tsx +4 -1
- package/src/connectivity/index.ts +1 -0
- package/src/connectivity/types.ts +5 -2
- package/src/connectivity/use-connectivity.ts +3 -2
- package/src/content/article-layout.module.css +11 -4
- package/src/content/callout.tsx +13 -7
- package/src/content/guide.tsx +14 -4
- package/src/content/heading-anchor.tsx +14 -3
- package/src/content/index.ts +2 -0
- package/src/content/markdown.tsx +2 -0
- package/src/content/prose.module.css +9 -7
- package/src/content/reading-progress.tsx +40 -15
- package/src/content/slug.ts +4 -0
- package/src/content/toc.tsx +47 -10
- package/src/controls/actions.tsx +89 -9
- package/src/controls/compare-filter.tsx +20 -3
- package/src/controls/control-group.tsx +11 -4
- package/src/controls/controls.module.css +169 -186
- package/src/controls/controls.module.css.d.ts +9 -11
- package/src/controls/enum-filter.tsx +46 -19
- package/src/controls/filter-context.tsx +21 -8
- package/src/controls/filter-pill.tsx +6 -3
- package/src/controls/filter-set.tsx +32 -13
- package/src/controls/filter-sheet.tsx +44 -194
- package/src/controls/index.ts +8 -0
- package/src/controls/multi-select-filter.tsx +179 -29
- package/src/controls/number-filter.tsx +329 -0
- package/src/controls/panel-row.module.css +86 -0
- package/src/controls/panel-row.module.css.d.ts +13 -0
- package/src/controls/panel-row.tsx +392 -0
- package/src/controls/range-filter.tsx +133 -43
- package/src/controls/search-filter.tsx +31 -13
- package/src/controls/select-filter.tsx +11 -1
- package/src/controls/slider-control.tsx +159 -0
- package/src/controls/sync-button.tsx +13 -3
- package/src/controls/toggle-filter.tsx +37 -17
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +5 -1
- package/src/dashboard/empty-state.tsx +72 -25
- package/src/dashboard/index.ts +19 -2
- package/src/dashboard/query-state.tsx +154 -84
- package/src/dashboard/settings-section.tsx +87 -31
- package/src/dashboard/stat-card.module.css +112 -26
- package/src/dashboard/stat-card.module.css.d.ts +5 -0
- package/src/dashboard/stat-card.tsx +207 -68
- package/src/dashboard/stat-group.module.css +66 -0
- package/src/dashboard/stat-group.module.css.d.ts +8 -0
- package/src/dashboard/stat-group.tsx +74 -0
- package/src/dashboard/widget-grid.module.css +53 -0
- package/src/dashboard/widget-grid.module.css.d.ts +9 -0
- package/src/dashboard/widget-grid.tsx +127 -0
- package/src/data/data-table.module.css +64 -0
- package/src/data/data-table.module.css.d.ts +11 -0
- package/src/data/data-table.tsx +927 -346
- package/src/data/index.ts +30 -2
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +5 -0
- package/src/data/virtual-list.tsx +189 -55
- package/src/data/virtual.ts +5 -1
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +60 -11
- package/src/forms/form-layout.module.css +145 -0
- package/src/forms/form-layout.module.css.d.ts +20 -0
- package/src/forms/form-layout.tsx +305 -0
- package/src/forms/form-state.tsx +94 -0
- package/src/forms/index.ts +38 -7
- package/src/forms/use-field-array.ts +94 -0
- package/src/forms/use-form-draft.ts +145 -53
- package/src/forms/use-form-submit.ts +199 -0
- package/src/guard/index.ts +91 -23
- package/src/index.ts +79 -10
- package/src/nav/types.ts +15 -6
- package/src/notifications/bell.tsx +18 -4
- package/src/notifications/center.tsx +18 -5
- package/src/notifications/define-notifications.ts +64 -18
- package/src/notifications/index.ts +12 -1
- package/src/notifications/mount-guard.ts +41 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/overlay.tsx +2 -0
- package/src/notifications/store.ts +7 -0
- package/src/provider/index.tsx +101 -13
- package/src/provider/lab-theme.ts +2 -1
- package/src/query/devtools.tsx +1 -0
- package/src/router-tanstack/field.ts +5 -0
- package/src/router-tanstack/index.ts +4 -0
- package/src/router-tanstack/search-store.ts +171 -12
- package/src/router-tanstack/use-nav.ts +18 -13
- package/src/section/index.ts +1 -1
- package/src/section/section.module.css +11 -0
- package/src/section/section.tsx +163 -96
- package/src/shell/account-types.ts +5 -2
- package/src/shell/app-brand.module.css +109 -0
- package/src/shell/app-brand.module.css.d.ts +14 -0
- package/src/shell/app-brand.tsx +140 -0
- package/src/shell/app-breadcrumbs.tsx +19 -9
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +107 -0
- package/src/shell/app-main.module.css.d.ts +11 -0
- package/src/shell/app-mobile-nav.module.css +48 -27
- package/src/shell/app-mobile-nav.module.css.d.ts +0 -1
- package/src/shell/app-mobile-nav.tsx +43 -11
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +53 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +40 -113
- package/src/shell/index.tsx +156 -65
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +66 -10
- package/src/shell/nav-count-badge.tsx +6 -1
- package/src/shell/page-aside.module.css +174 -0
- package/src/shell/page-aside.module.css.d.ts +14 -0
- package/src/shell/page-aside.tsx +377 -0
- package/src/shell/page-bar.module.css +107 -13
- package/src/shell/page-bar.module.css.d.ts +4 -1
- package/src/shell/page-bar.tsx +294 -94
- package/src/shell/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/state/fields.ts +360 -69
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state/persisted.ts +76 -26
- package/src/state.ts +4 -7
- package/src/surfaces.ts +43 -12
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +129 -16
- package/src/theme/nav-link.module.css +37 -26
- package/src/theme/segmented-control.module.css +22 -0
- package/src/theme/segmented-control.module.css.d.ts +1 -0
- package/src/theme-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/theme-toggle/index.tsx +10 -3
- package/src/tokens/index.ts +50 -6
- package/src/tokens/palette.ts +58 -30
- package/src/utils/is-dev.ts +4 -0
- package/src/widget-header/delta-badge.tsx +25 -5
- package/src/widget-header/index.ts +10 -2
- package/src/widget-header/widget-header.module.css +87 -7
- package/src/widget-header/widget-header.module.css.d.ts +1 -0
- package/src/widget-header/widget-header.tsx +166 -42
- package/dist/agent/adapter.test.d.ts +0 -2
- package/dist/agent/adapter.test.d.ts.map +0 -1
- package/dist/agent/ai-sdk-transport.test.d.ts +0 -2
- package/dist/agent/ai-sdk-transport.test.d.ts.map +0 -1
- package/dist/agent/coalesce.test.d.ts +0 -2
- package/dist/agent/coalesce.test.d.ts.map +0 -1
- package/dist/agent/foreign.test.d.ts +0 -2
- package/dist/agent/foreign.test.d.ts.map +0 -1
- package/dist/agent/id.test.d.ts +0 -2
- package/dist/agent/id.test.d.ts.map +0 -1
- package/dist/agent/merge.test.d.ts +0 -2
- package/dist/agent/merge.test.d.ts.map +0 -1
- package/dist/agent/part-list.test.d.ts +0 -2
- package/dist/agent/part-list.test.d.ts.map +0 -1
- package/dist/agent/parts.test.d.ts +0 -2
- package/dist/agent/parts.test.d.ts.map +0 -1
- package/dist/agent/thread.test.d.ts +0 -2
- package/dist/agent/thread.test.d.ts.map +0 -1
- package/dist/agent/transport.test.d.ts +0 -2
- package/dist/agent/transport.test.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.test.d.ts +0 -2
- package/dist/agent/use-agent-stream.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.foreign.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.resume.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.test.d.ts.map +0 -1
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts +0 -2
- package/dist/agent/use-agent-thread-runs.wedge.test.d.ts.map +0 -1
- package/dist/agent-chat/composer.test.d.ts +0 -2
- package/dist/agent-chat/composer.test.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.test.d.ts +0 -2
- package/dist/agent-chat/relative-time.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed-row.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed-row.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.test.d.ts +0 -2
- package/dist/agent-chat/thread-feed.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.test.d.ts +0 -2
- package/dist/agent-chat/thread-message.test.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.test.d.ts +0 -2
- package/dist/agent-chat/thread-workspace.test.d.ts.map +0 -1
- package/dist/agent-chat/tool-chip.test.d.ts +0 -2
- package/dist/agent-chat/tool-chip.test.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.type-guard.test.d.ts +0 -2
- package/dist/agent-chat/virtualize.type-guard.test.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.test.d.ts +0 -2
- package/dist/charts/cursor/resolve.test.d.ts.map +0 -1
- package/dist/charts/cursor/store.test.d.ts +0 -2
- package/dist/charts/cursor/store.test.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.test.d.ts +0 -2
- package/dist/charts/kinds/BandStrip.test.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.test.d.ts +0 -2
- package/dist/charts/kinds/Bars.test.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.test.d.ts +0 -2
- package/dist/charts/kinds/DualPanel.test.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.test.d.ts +0 -2
- package/dist/charts/kinds/MirroredBars.test.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.test.d.ts +0 -2
- package/dist/charts/kinds/MultiLine.test.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.test.d.ts +0 -2
- package/dist/charts/kinds/StackedArea.test.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.test.d.ts +0 -2
- package/dist/charts/kinds/ZonedLine.test.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.test.d.ts +0 -2
- package/dist/charts/layout/auto-margin.test.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.test.d.ts +0 -2
- package/dist/charts/primitives/CartesianChart.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.test.d.ts +0 -2
- package/dist/charts/primitives/ChartCard.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.test.d.ts +0 -2
- package/dist/charts/primitives/ChartFrame.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.test.d.ts +0 -2
- package/dist/charts/primitives/ChartLegend.test.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.test.d.ts +0 -2
- package/dist/charts/primitives/ChartTooltip.test.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.test.d.ts +0 -2
- package/dist/charts/primitives/XZoneRects.test.d.ts.map +0 -1
- package/dist/charts/series.test.d.ts +0 -2
- package/dist/charts/series.test.d.ts.map +0 -1
- package/dist/charts/utils/domain.test.d.ts +0 -2
- package/dist/charts/utils/domain.test.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.test.d.ts +0 -2
- package/dist/charts/utils/measure-text.test.d.ts.map +0 -1
- package/dist/cli/check-coverage.test.d.ts +0 -2
- package/dist/cli/check-coverage.test.d.ts.map +0 -1
- package/dist/cli/check-theme.test.d.ts +0 -2
- package/dist/cli/check-theme.test.d.ts.map +0 -1
- package/dist/cli/help.test.d.ts +0 -2
- package/dist/cli/help.test.d.ts.map +0 -1
- package/dist/cli/init-sync.test.d.ts +0 -2
- package/dist/cli/init-sync.test.d.ts.map +0 -1
- package/dist/cli/placement-engine.test.d.ts +0 -2
- package/dist/cli/placement-engine.test.d.ts.map +0 -1
- package/dist/cli/shipped-versions.test.d.ts +0 -2
- package/dist/cli/shipped-versions.test.d.ts.map +0 -1
- package/dist/cli/tarball-parity.test.d.ts +0 -2
- package/dist/cli/tarball-parity.test.d.ts.map +0 -1
- package/dist/cli/template-format.test.d.ts +0 -2
- package/dist/cli/template-format.test.d.ts.map +0 -1
- package/dist/cli/template-ledger.test.d.ts +0 -2
- package/dist/cli/template-ledger.test.d.ts.map +0 -1
- package/dist/cli/tokens-css.test.d.ts +0 -2
- package/dist/cli/tokens-css.test.d.ts.map +0 -1
- package/dist/cli/toolchain-wiring.test.d.ts +0 -2
- package/dist/cli/toolchain-wiring.test.d.ts.map +0 -1
- package/dist/cli/waiver-audit.test.d.ts +0 -2
- package/dist/cli/waiver-audit.test.d.ts.map +0 -1
- package/dist/content/article-actions.test.d.ts +0 -2
- package/dist/content/article-actions.test.d.ts.map +0 -1
- package/dist/content/article-model.test.d.ts +0 -2
- package/dist/content/article-model.test.d.ts.map +0 -1
- package/dist/content/block-split.test.d.ts +0 -2
- package/dist/content/block-split.test.d.ts.map +0 -1
- package/dist/content/heading-components.test.d.ts +0 -2
- package/dist/content/heading-components.test.d.ts.map +0 -1
- package/dist/content/markdown.test.d.ts +0 -2
- package/dist/content/markdown.test.d.ts.map +0 -1
- package/dist/content/prose.module.css.test.d.ts +0 -2
- package/dist/content/prose.module.css.test.d.ts.map +0 -1
- package/dist/content/sanitize.test.d.ts +0 -2
- package/dist/content/sanitize.test.d.ts.map +0 -1
- package/dist/content/slug.test.d.ts +0 -2
- package/dist/content/slug.test.d.ts.map +0 -1
- package/dist/controls/actions.test.d.ts +0 -2
- package/dist/controls/actions.test.d.ts.map +0 -1
- package/dist/controls/actions.type-guard.test.d.ts +0 -2
- package/dist/controls/actions.type-guard.test.d.ts.map +0 -1
- package/dist/controls/control-group.test.d.ts +0 -2
- package/dist/controls/control-group.test.d.ts.map +0 -1
- package/dist/controls/controls.router.test.d.ts +0 -2
- package/dist/controls/controls.router.test.d.ts.map +0 -1
- package/dist/controls/filter-set.test.d.ts +0 -2
- package/dist/controls/filter-set.test.d.ts.map +0 -1
- package/dist/controls/peer-boundary.test.d.ts +0 -2
- package/dist/controls/peer-boundary.test.d.ts.map +0 -1
- package/dist/controls/props-contract.test.d.ts +0 -2
- package/dist/controls/props-contract.test.d.ts.map +0 -1
- package/dist/controls/sync-button.test.d.ts +0 -2
- package/dist/controls/sync-button.test.d.ts.map +0 -1
- package/dist/dashboard/query-state.test.d.ts +0 -2
- package/dist/dashboard/query-state.test.d.ts.map +0 -1
- package/dist/dashboard/settings-section.test.d.ts +0 -2
- package/dist/dashboard/settings-section.test.d.ts.map +0 -1
- package/dist/dashboard/stat-card.test.d.ts +0 -2
- package/dist/dashboard/stat-card.test.d.ts.map +0 -1
- package/dist/data/data-table.test.d.ts +0 -2
- package/dist/data/data-table.test.d.ts.map +0 -1
- package/dist/guard/check-source.test.d.ts +0 -2
- package/dist/guard/check-source.test.d.ts.map +0 -1
- package/dist/guard/grace.test.d.ts +0 -20
- package/dist/guard/grace.test.d.ts.map +0 -1
- package/dist/guard/guard-hook.test.d.ts +0 -2
- package/dist/guard/guard-hook.test.d.ts.map +0 -1
- package/dist/provider/index.test.d.ts +0 -2
- package/dist/provider/index.test.d.ts.map +0 -1
- package/dist/provider/lab-theme.test.d.ts +0 -2
- package/dist/provider/lab-theme.test.d.ts.map +0 -1
- package/dist/query/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/multi-search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/nav.test.d.ts +0 -2
- package/dist/router-tanstack/nav.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-param-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.router.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.router.test.d.ts.map +0 -1
- package/dist/router-tanstack/search-store.test.d.ts +0 -2
- package/dist/router-tanstack/search-store.test.d.ts.map +0 -1
- package/dist/router-tanstack/use-nav.test.d.ts +0 -2
- package/dist/router-tanstack/use-nav.test.d.ts.map +0 -1
- package/dist/section/section.test.d.ts +0 -2
- package/dist/section/section.test.d.ts.map +0 -1
- package/dist/shell/app-mobile-nav.test.d.ts +0 -2
- package/dist/shell/app-mobile-nav.test.d.ts.map +0 -1
- package/dist/shell/app-sidebar.test.d.ts +0 -2
- package/dist/shell/app-sidebar.test.d.ts.map +0 -1
- package/dist/shell/index.test.d.ts +0 -2
- package/dist/shell/index.test.d.ts.map +0 -1
- package/dist/shell/mobile-nav-model.test.d.ts +0 -2
- package/dist/shell/mobile-nav-model.test.d.ts.map +0 -1
- package/dist/shell/page-bar.test.d.ts +0 -2
- package/dist/shell/page-bar.test.d.ts.map +0 -1
- package/dist/state/fields.test.d.ts +0 -2
- package/dist/state/fields.test.d.ts.map +0 -1
- package/dist/styles.floor.test.d.ts +0 -2
- package/dist/styles.floor.test.d.ts.map +0 -1
- package/dist/theme/border-coverage.test.d.ts +0 -18
- package/dist/theme/border-coverage.test.d.ts.map +0 -1
- package/dist/theme/contrast.test.d.ts +0 -2
- package/dist/theme/contrast.test.d.ts.map +0 -1
- package/dist/theme/ctl-theme.test.d.ts +0 -2
- package/dist/theme/ctl-theme.test.d.ts.map +0 -1
- package/dist/theme/ctl-tier-coverage.test.d.ts +0 -2
- package/dist/theme/ctl-tier-coverage.test.d.ts.map +0 -1
- package/dist/theme/density-option.test.d.ts +0 -2
- package/dist/theme/density-option.test.d.ts.map +0 -1
- package/dist/theme/density-relations.test.d.ts +0 -2
- package/dist/theme/density-relations.test.d.ts.map +0 -1
- package/dist/theme/derive-theme.test.d.ts +0 -2
- package/dist/theme/derive-theme.test.d.ts.map +0 -1
- package/dist/theme/divider-law.test.d.ts +0 -2
- package/dist/theme/divider-law.test.d.ts.map +0 -1
- package/dist/theme/fonts-option.test.d.ts +0 -2
- package/dist/theme/fonts-option.test.d.ts.map +0 -1
- package/dist/theme/icon-slot.test.d.ts +0 -2
- package/dist/theme/icon-slot.test.d.ts.map +0 -1
- package/dist/theme/layout-rhythm-css.test.d.ts +0 -2
- package/dist/theme/layout-rhythm-css.test.d.ts.map +0 -1
- package/dist/theme/radius-option.test.d.ts +0 -2
- package/dist/theme/radius-option.test.d.ts.map +0 -1
- package/dist/theme/radius.test.d.ts +0 -2
- package/dist/theme/radius.test.d.ts.map +0 -1
- package/dist/theme/shadow-surfaces.test.d.ts +0 -26
- package/dist/theme/shadow-surfaces.test.d.ts.map +0 -1
- package/dist/theme/spacing.test.d.ts +0 -2
- package/dist/theme/spacing.test.d.ts.map +0 -1
- package/dist/theme/use-basalt-spacing.test.d.ts +0 -2
- package/dist/theme/use-basalt-spacing.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-controls.test.d.ts +0 -2
- package/dist/theme-lab/derive-controls.test.d.ts.map +0 -1
- package/dist/theme-lab/derive-state.test.d.ts +0 -2
- package/dist/theme-lab/derive-state.test.d.ts.map +0 -1
- package/dist/theme-lab/theme-lab.test.d.ts +0 -2
- package/dist/theme-lab/theme-lab.test.d.ts.map +0 -1
- package/dist/tokens/build-fonts-css.test.d.ts +0 -2
- package/dist/tokens/build-fonts-css.test.d.ts.map +0 -1
- package/dist/tokens/build-radius-css.test.d.ts +0 -2
- package/dist/tokens/build-radius-css.test.d.ts.map +0 -1
- package/dist/tokens/chart-margin.test.d.ts +0 -2
- package/dist/tokens/chart-margin.test.d.ts.map +0 -1
- package/dist/tokens/density.test.d.ts +0 -2
- package/dist/tokens/density.test.d.ts.map +0 -1
- package/dist/tokens/derive-radius.test.d.ts +0 -2
- package/dist/tokens/derive-radius.test.d.ts.map +0 -1
- package/dist/tokens/derive.test.d.ts +0 -2
- package/dist/tokens/derive.test.d.ts.map +0 -1
- package/dist/tokens/palette.test.d.ts +0 -2
- package/dist/tokens/palette.test.d.ts.map +0 -1
- package/dist/tokens/text-scale.test.d.ts +0 -2
- package/dist/tokens/text-scale.test.d.ts.map +0 -1
- package/dist/vite-color-mix.test.d.ts +0 -2
- package/dist/vite-color-mix.test.d.ts.map +0 -1
- package/dist/vite.test.d.ts +0 -2
- package/dist/vite.test.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.test.d.ts +0 -2
- package/dist/widget-header/delta-badge.test.d.ts.map +0 -1
- package/dist/widget-header/no-mantine.test.d.ts +0 -2
- package/dist/widget-header/no-mantine.test.d.ts.map +0 -1
- package/dist/widget-header/widget-header.test.d.ts +0 -2
- package/dist/widget-header/widget-header.test.d.ts.map +0 -1
- package/src/agent/adapter.test.ts +0 -1640
- package/src/agent/ai-sdk-transport.test.ts +0 -658
- package/src/agent/coalesce.test.ts +0 -387
- package/src/agent/foreign.test.ts +0 -51
- package/src/agent/id.test.ts +0 -169
- package/src/agent/merge.test.ts +0 -206
- package/src/agent/part-list.test.tsx +0 -112
- package/src/agent/parts.test.ts +0 -720
- package/src/agent/thread.test.ts +0 -220
- package/src/agent/transport.test.ts +0 -70
- package/src/agent/use-agent-stream.test.tsx +0 -287
- package/src/agent/use-agent-thread-runs.foreign.test.tsx +0 -138
- package/src/agent/use-agent-thread-runs.resume.test.tsx +0 -294
- package/src/agent/use-agent-thread-runs.test.tsx +0 -1120
- package/src/agent/use-agent-thread-runs.wedge.test.tsx +0 -387
- package/src/agent-chat/composer.test.tsx +0 -924
- package/src/agent-chat/relative-time.test.ts +0 -95
- package/src/agent-chat/thread-feed-row.test.tsx +0 -510
- package/src/agent-chat/thread-feed.test.tsx +0 -241
- package/src/agent-chat/thread-message.test.tsx +0 -1285
- package/src/agent-chat/thread-workspace.test.tsx +0 -169
- package/src/agent-chat/tool-chip.test.tsx +0 -139
- package/src/agent-chat/virtualize.type-guard.test.ts +0 -49
- package/src/charts/cursor/resolve.test.ts +0 -151
- package/src/charts/cursor/store.test.ts +0 -64
- package/src/charts/kinds/BandStrip.test.tsx +0 -282
- package/src/charts/kinds/Bars.test.tsx +0 -183
- package/src/charts/kinds/DualPanel.test.tsx +0 -527
- package/src/charts/kinds/MirroredBars.test.tsx +0 -232
- package/src/charts/kinds/MultiLine.test.tsx +0 -218
- package/src/charts/kinds/StackedArea.test.tsx +0 -114
- package/src/charts/kinds/ZonedLine.test.tsx +0 -147
- package/src/charts/layout/auto-margin.test.ts +0 -42
- package/src/charts/primitives/CartesianChart.test.tsx +0 -647
- package/src/charts/primitives/ChartCard.test.tsx +0 -66
- package/src/charts/primitives/ChartFrame.test.tsx +0 -142
- package/src/charts/primitives/ChartLegend.test.tsx +0 -78
- package/src/charts/primitives/ChartTooltip.test.tsx +0 -44
- package/src/charts/primitives/XZoneRects.test.tsx +0 -123
- package/src/charts/series.test.ts +0 -112
- package/src/charts/utils/domain.test.ts +0 -54
- package/src/charts/utils/measure-text.test.ts +0 -36
- package/src/cli/check-coverage.test.ts +0 -297
- package/src/cli/check-theme.test.ts +0 -837
- package/src/cli/help.test.ts +0 -170
- package/src/cli/init-sync.test.ts +0 -343
- package/src/cli/placement-engine.test.ts +0 -298
- package/src/cli/shipped-versions.test.ts +0 -83
- package/src/cli/tarball-parity.test.ts +0 -44
- package/src/cli/template-format.test.ts +0 -64
- package/src/cli/template-ledger.test.ts +0 -219
- package/src/cli/tokens-css.test.ts +0 -249
- package/src/cli/toolchain-wiring.test.ts +0 -1358
- package/src/cli/waiver-audit.test.ts +0 -215
- package/src/content/article-actions.test.ts +0 -78
- package/src/content/article-model.test.ts +0 -119
- package/src/content/block-split.test.ts +0 -75
- package/src/content/heading-components.test.tsx +0 -65
- package/src/content/markdown.test.tsx +0 -603
- package/src/content/prose.module.css.test.ts +0 -39
- package/src/content/sanitize.test.ts +0 -659
- package/src/content/slug.test.ts +0 -62
- package/src/controls/actions.test.tsx +0 -252
- package/src/controls/actions.type-guard.test.ts +0 -63
- package/src/controls/control-group.test.tsx +0 -229
- package/src/controls/controls.router.test.tsx +0 -637
- package/src/controls/filter-set.test.tsx +0 -472
- package/src/controls/peer-boundary.test.ts +0 -85
- package/src/controls/props-contract.test.tsx +0 -106
- package/src/controls/sync-button.test.tsx +0 -183
- package/src/dashboard/query-state.test.tsx +0 -152
- package/src/dashboard/settings-section.test.tsx +0 -56
- package/src/dashboard/stat-card.test.tsx +0 -154
- package/src/data/data-table.test.tsx +0 -434
- package/src/guard/check-source.test.ts +0 -3355
- package/src/guard/grace.test.ts +0 -149
- package/src/guard/guard-hook.test.ts +0 -203
- package/src/provider/index.test.tsx +0 -101
- package/src/provider/lab-theme.test.ts +0 -147
- package/src/query/error-message.test.ts +0 -67
- package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
- package/src/router-tanstack/nav.test.ts +0 -111
- package/src/router-tanstack/search-param-store.test.ts +0 -135
- package/src/router-tanstack/search-store.router.test.tsx +0 -661
- package/src/router-tanstack/search-store.test.ts +0 -418
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/section.test.tsx +0 -204
- package/src/shell/app-mobile-nav.test.tsx +0 -403
- package/src/shell/app-sidebar.test.tsx +0 -509
- package/src/shell/index.test.tsx +0 -428
- package/src/shell/mobile-nav-model.test.ts +0 -517
- package/src/shell/page-bar.test.tsx +0 -316
- package/src/state/fields.test.tsx +0 -258
- package/src/styles.floor.test.ts +0 -36
- package/src/theme/border-coverage.test.ts +0 -272
- package/src/theme/contrast.test.ts +0 -354
- package/src/theme/ctl-theme.test.tsx +0 -275
- package/src/theme/ctl-tier-coverage.test.ts +0 -170
- package/src/theme/density-option.test.ts +0 -96
- package/src/theme/density-relations.test.ts +0 -506
- package/src/theme/derive-theme.test.ts +0 -101
- package/src/theme/divider-law.test.ts +0 -259
- package/src/theme/fonts-option.test.ts +0 -75
- package/src/theme/icon-slot.test.tsx +0 -275
- package/src/theme/layout-rhythm-css.test.ts +0 -72
- package/src/theme/radius-option.test.ts +0 -86
- package/src/theme/radius.test.ts +0 -142
- package/src/theme/shadow-surfaces.test.ts +0 -488
- package/src/theme/spacing.test.ts +0 -495
- package/src/theme/use-basalt-spacing.test.tsx +0 -55
- package/src/theme-lab/derive-controls.test.ts +0 -94
- package/src/theme-lab/derive-state.test.ts +0 -71
- package/src/theme-lab/theme-lab.test.ts +0 -46
- package/src/tokens/build-fonts-css.test.ts +0 -52
- package/src/tokens/build-radius-css.test.ts +0 -25
- package/src/tokens/chart-margin.test.ts +0 -39
- package/src/tokens/density.test.ts +0 -259
- package/src/tokens/derive-radius.test.ts +0 -62
- package/src/tokens/derive.test.ts +0 -30
- package/src/tokens/palette.test.ts +0 -114
- package/src/tokens/text-scale.test.ts +0 -51
- package/src/vite-color-mix.test.ts +0 -46
- package/src/vite.test.ts +0 -423
- package/src/widget-header/delta-badge.test.tsx +0 -60
- package/src/widget-header/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import { GridRows } from '@visx/grid'
|
|
2
2
|
import { Group } from '@visx/group'
|
|
3
|
-
import { scaleLinear, scalePoint } from '@visx/scale'
|
|
3
|
+
import { scaleLinear, scaleLog, scalePoint } from '@visx/scale'
|
|
4
4
|
import { useMemo, useRef, useState } from 'react'
|
|
5
5
|
import type { ReactNode } from 'react'
|
|
6
|
+
import type { BasaltProps } from '../../common/props'
|
|
6
7
|
import { VX } from '../../tokens'
|
|
7
8
|
import type { ChartMargin } from '../../tokens'
|
|
8
9
|
import type { CursorResolution } from '../cursor/resolve'
|
|
9
10
|
import { useChartCursor } from '../hooks/useChartCursor'
|
|
10
11
|
import { autoMargin, probeAxisLabels } from '../layout/auto-margin'
|
|
11
|
-
import {
|
|
12
|
+
import { logTickValues, niceLogDomain } from '../layout/log-ticks'
|
|
13
|
+
import { deriveLegend, deriveTooltipRows } from '../series'
|
|
12
14
|
import type { ChartLegendConfig, ChartSeries } from '../series'
|
|
13
15
|
import { padAutoLower, padAutoUpper } from '../utils/domain'
|
|
14
16
|
import { fmtAxisDate } from '../utils/format'
|
|
15
|
-
import { smartTicks, smartTicksEvery } from '../utils/ticks'
|
|
17
|
+
import { autoXLabelRotate, smartTicks, smartTicksEvery, xLabelPxFor } from '../utils/ticks'
|
|
16
18
|
import { AxisBottomDate, AxisLeftNumeric, AxisRightNumeric } from './Axes'
|
|
17
19
|
import { ChartFrame, resolveLegend } from './ChartFrame'
|
|
20
|
+
import { useChartTierMetrics } from './chart-tier'
|
|
21
|
+
import type { ChartState } from './ChartPending'
|
|
18
22
|
import { ChartTooltipFloat, TooltipBody, TooltipHeader, TooltipRow } from './ChartTooltip'
|
|
19
23
|
import { Crosshair, SeriesDot } from './Crosshair'
|
|
20
24
|
import { HoverOverlay } from './HoverOverlay'
|
|
@@ -23,7 +27,11 @@ import type { XZoneSpec } from './XZoneRects'
|
|
|
23
27
|
import { ZoneRects } from './ZoneRects'
|
|
24
28
|
import type { ZoneSpec } from './ZoneRects'
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
/** Either axis kind a `y`/`y2` can resolve to. Widened from a bare `scaleLinear` return type so a
|
|
31
|
+
* log axis's `scaleLog` scale keeps assigning into `PlotContext.yScale`/`y2Scale` and into every
|
|
32
|
+
* mark renderer (`ZoneRects`, `refLines`, `Crosshair`/`SeriesDot`) that only ever calls `scale(v)`
|
|
33
|
+
* or reads `scale.domain()` — both interfaces share that shape via d3's `ScaleContinuousNumeric`. */
|
|
34
|
+
type ContinuousScale = ReturnType<typeof scaleLinear<number>> | ReturnType<typeof scaleLog<number>>
|
|
27
35
|
type PointScale = ReturnType<typeof scalePoint<string>>
|
|
28
36
|
|
|
29
37
|
const DEFAULT_TICKS = 5
|
|
@@ -49,7 +57,8 @@ export type AxisConfig<T> = {
|
|
|
49
57
|
*/
|
|
50
58
|
autoMaxFloor?: number
|
|
51
59
|
/** When 'auto': the lower bound is at most this. Default 0 (forced zero baseline). `Infinity`
|
|
52
|
-
* pads down from the raw data minimum instead.
|
|
60
|
+
* pads down from the raw data minimum instead. Ignored when `scale: 'log'` — a log axis has no
|
|
61
|
+
* zero baseline, so its floor is always the smallest positive visible value. */
|
|
53
62
|
autoMinCeil?: number
|
|
54
63
|
/** When 'auto': padding multiplier applied away from the data. Default 1.1. */
|
|
55
64
|
autoPad?: number
|
|
@@ -67,6 +76,15 @@ export type AxisConfig<T> = {
|
|
|
67
76
|
* already-migrated chart. Opt in per axis.
|
|
68
77
|
*/
|
|
69
78
|
nice?: boolean
|
|
79
|
+
/**
|
|
80
|
+
* `'linear'` (default) or `'log'`. On `'log'` the domain floor is the smallest positive VISIBLE
|
|
81
|
+
* value — `autoMinCeil` is ignored (documented there, not thrown on): a log axis has no zero
|
|
82
|
+
* baseline. `autoPad` still pads multiplicatively and `nice` still snaps to round bounds (decade
|
|
83
|
+
* powers instead of d3's linear-nice steps). Ticks are the 1-2-5 set from `logTickValues`
|
|
84
|
+
* (`$10,000 · $20,000 · $50,000 · $100,000`, never d3's own log ticks), and `format` is applied
|
|
85
|
+
* to those values — d3's `scale.tickFormat` is never used on a log axis.
|
|
86
|
+
*/
|
|
87
|
+
scale?: 'linear' | 'log'
|
|
70
88
|
}
|
|
71
89
|
|
|
72
90
|
/** Handed to `prependRows`/`extraRows` alongside the hovered datum — the same `visible`/`hidden`
|
|
@@ -127,9 +145,9 @@ export type PlotContext<T> = {
|
|
|
127
145
|
visible: ChartSeries<T>[]
|
|
128
146
|
hidden: ReadonlySet<string>
|
|
129
147
|
xScale: PointScale
|
|
130
|
-
yScale:
|
|
148
|
+
yScale: ContinuousScale
|
|
131
149
|
/** Present only when a `y2` axis is configured. */
|
|
132
|
-
y2Scale:
|
|
150
|
+
y2Scale: ContinuousScale | null
|
|
133
151
|
xMax: number
|
|
134
152
|
yMax: number
|
|
135
153
|
margin: ChartMargin
|
|
@@ -139,7 +157,7 @@ export type PlotContext<T> = {
|
|
|
139
157
|
highlighted: string | null
|
|
140
158
|
}
|
|
141
159
|
|
|
142
|
-
export type CartesianChartProps<T> = {
|
|
160
|
+
export type CartesianChartProps<T> = BasaltProps & {
|
|
143
161
|
data: T[]
|
|
144
162
|
/** Stable id — identifies this chart as the cursor's source. */
|
|
145
163
|
chartId: string
|
|
@@ -171,6 +189,21 @@ export type CartesianChartProps<T> = {
|
|
|
171
189
|
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
172
190
|
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
173
191
|
formatX?: (key: string) => string
|
|
192
|
+
/**
|
|
193
|
+
* Tilt the x tick labels by 45° or 90° (counter-clockwise, anchored at their right edge). The
|
|
194
|
+
* bottom gutter deepens by the rotated label's projected height, measured like every other side
|
|
195
|
+
* (`docs/CHARTS-SPEC.md` §1), so nothing clips.
|
|
196
|
+
*
|
|
197
|
+
* This is the phone answer to a label too wide to repeat horizontally: rotating keeps every tick
|
|
198
|
+
* the axis would otherwise have to thin away — which is why, LEFT UNSET, it is now the phone
|
|
199
|
+
* tier's DEFAULT: below `VX.phoneChartWidth`, labels too wide to fit three ticks side by side
|
|
200
|
+
* auto-rotate to 45 (`autoXLabelRotate`). Nothing changes at desktop width, and nothing changes
|
|
201
|
+
* for a chart that already passes a value.
|
|
202
|
+
*
|
|
203
|
+
* **`0` is the opt-out** — "never rotate, thin the axis instead" — and is the only way to get
|
|
204
|
+
* the pre-tier behaviour back on a phone-width chart with very wide labels.
|
|
205
|
+
*/
|
|
206
|
+
xLabelRotate?: 0 | 45 | 90
|
|
174
207
|
/** Value-range bands on the left scale, drawn behind the marks. */
|
|
175
208
|
zones?: ZoneSpec[]
|
|
176
209
|
/** X-range bands (time windows), drawn behind the marks. */
|
|
@@ -205,6 +238,13 @@ export type CartesianChartProps<T> = {
|
|
|
205
238
|
cursorResolution?: CursorResolution
|
|
206
239
|
ariaLabel?: string
|
|
207
240
|
isPending?: boolean
|
|
241
|
+
/**
|
|
242
|
+
* The three "nothing to draw" states in one prop, forwarded to `ChartFrame` — pending → error →
|
|
243
|
+
* empty, resolved by `resolveChartState`. The Mantine-free answer to `dashboard/QueryState`,
|
|
244
|
+
* which `./charts` cannot import; `isPending` remains a supported alias for
|
|
245
|
+
* `state={{ pending: true }}`.
|
|
246
|
+
*/
|
|
247
|
+
state?: ChartState
|
|
208
248
|
/** Draw ONLY the marks. Everything around them is the primitive's job. */
|
|
209
249
|
children: (ctx: PlotContext<T>) => ReactNode
|
|
210
250
|
}
|
|
@@ -231,24 +271,40 @@ export function resolveAxisDomain<T>(
|
|
|
231
271
|
if (Array.isArray(domain)) return domain
|
|
232
272
|
if (typeof domain === 'function') return domain(data, series)
|
|
233
273
|
|
|
274
|
+
const isLog = cfg?.scale === 'log'
|
|
234
275
|
let min = Infinity
|
|
235
276
|
let max = -Infinity
|
|
236
277
|
for (const d of data) {
|
|
237
278
|
for (const s of series) {
|
|
238
279
|
const v = s.getValue(d)
|
|
239
280
|
if (v === null) continue
|
|
281
|
+
// A log axis has no zero and no negative half — a non-positive value can't sit on it, so it
|
|
282
|
+
// drops out of the domain instead of pulling the floor to (or past) zero.
|
|
283
|
+
if (isLog && v <= 0) continue
|
|
240
284
|
if (v < min) min = v
|
|
241
285
|
if (v > max) max = v
|
|
242
286
|
}
|
|
243
287
|
}
|
|
244
288
|
for (const v of extraBounds) {
|
|
245
289
|
if (!Number.isFinite(v)) continue
|
|
290
|
+
if (isLog && v <= 0) continue
|
|
246
291
|
if (v < min) min = v
|
|
247
292
|
if (v > max) max = v
|
|
248
293
|
}
|
|
249
|
-
if (min === Infinity) return [0, cfg?.autoMaxFloor ?? 1]
|
|
250
294
|
|
|
251
295
|
const pad = cfg?.autoPad ?? DEFAULT_AUTO_PAD
|
|
296
|
+
|
|
297
|
+
if (isLog) {
|
|
298
|
+
// No zero baseline on a log axis: the floor is the smallest positive visible value, padded
|
|
299
|
+
// down with no `autoMinCeil` clamp (documented as ignored on `AxisConfig.autoMinCeil`).
|
|
300
|
+
if (min === Infinity) return [1, 10]
|
|
301
|
+
if (min === max) return [min / pad, max * pad]
|
|
302
|
+
const upper = padAutoUpper(Math.max(max, cfg?.autoMaxFloor ?? -Infinity), pad)
|
|
303
|
+
return [min / pad, upper]
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (min === Infinity) return [0, cfg?.autoMaxFloor ?? 1]
|
|
307
|
+
|
|
252
308
|
const ceil = cfg?.autoMinCeil ?? 0
|
|
253
309
|
// Symmetric with the lower bound: clamp the RAW value against the floor/ceiling first, then pad
|
|
254
310
|
// once, away from zero. Padding before the clamp (the old law) lands a floored axis top exactly
|
|
@@ -262,6 +318,39 @@ export function resolveAxisDomain<T>(
|
|
|
262
318
|
return [lower, upper]
|
|
263
319
|
}
|
|
264
320
|
|
|
321
|
+
/**
|
|
322
|
+
* One y-axis' real scale, built from its resolved domain — shared by the left and right axis so
|
|
323
|
+
* the log branch (`scaleLog` + `nice` + the 1-2-5 tick override) is written and commented exactly
|
|
324
|
+
* once instead of as two independently-maintained twins.
|
|
325
|
+
*/
|
|
326
|
+
function buildYScale<T>(
|
|
327
|
+
cfg: AxisConfig<T> | undefined,
|
|
328
|
+
domain: [number, number],
|
|
329
|
+
yMax: number,
|
|
330
|
+
ticks: number,
|
|
331
|
+
): ContinuousScale {
|
|
332
|
+
if (cfg?.scale === 'log') {
|
|
333
|
+
const scale = scaleLog<number>({
|
|
334
|
+
domain,
|
|
335
|
+
range: [yMax, 0],
|
|
336
|
+
...(cfg.nice === true && { nice: true }),
|
|
337
|
+
})
|
|
338
|
+
// Paint the 1-2-5 tick law instead of d3's own log ticks: `AxisLeftNumeric`/`GridRows` resolve
|
|
339
|
+
// ticks through visx's `getTicks(scale, numTicks)` -> `scale.ticks(numTicks)`, so overriding
|
|
340
|
+
// the method on this instance is the one seam that reaches both without a raw `<AxisLeft>`
|
|
341
|
+
// escape hatch. Nothing else calls `.ticks()` on the real scale (only `probeAxisLabels`' own
|
|
342
|
+
// throwaway probe does, and that stays untouched).
|
|
343
|
+
const tickDomain = cfg.nice === true ? niceLogDomain(domain) : domain
|
|
344
|
+
scale.ticks = () => logTickValues(tickDomain, ticks)
|
|
345
|
+
return scale
|
|
346
|
+
}
|
|
347
|
+
return scaleLinear<number>({
|
|
348
|
+
domain,
|
|
349
|
+
range: [yMax, 0],
|
|
350
|
+
...(cfg?.nice === true && { nice: true }),
|
|
351
|
+
})
|
|
352
|
+
}
|
|
353
|
+
|
|
265
354
|
/**
|
|
266
355
|
* The cartesian chart primitive — the rung that was missing between `ChartFrame` and raw visx
|
|
267
356
|
* (`docs/CHARTS-SPEC.md` §2).
|
|
@@ -285,6 +374,7 @@ export function CartesianChart<T>({
|
|
|
285
374
|
xTicks,
|
|
286
375
|
xTickValues,
|
|
287
376
|
formatX = fmtAxisDate,
|
|
377
|
+
xLabelRotate,
|
|
288
378
|
zones,
|
|
289
379
|
xZones,
|
|
290
380
|
refLines,
|
|
@@ -298,6 +388,9 @@ export function CartesianChart<T>({
|
|
|
298
388
|
cursorResolution,
|
|
299
389
|
ariaLabel,
|
|
300
390
|
isPending,
|
|
391
|
+
state,
|
|
392
|
+
className,
|
|
393
|
+
style,
|
|
301
394
|
children,
|
|
302
395
|
}: CartesianChartProps<T>): ReactNode {
|
|
303
396
|
const [highlighted, setHighlighted] = useState<string | null>(null)
|
|
@@ -311,7 +404,14 @@ export function CartesianChart<T>({
|
|
|
311
404
|
{...(fill !== undefined && { fill })}
|
|
312
405
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
313
406
|
{...(isPending !== undefined && { isPending })}
|
|
314
|
-
|
|
407
|
+
{...(state !== undefined && { state })}
|
|
408
|
+
{...(className !== undefined && { className })}
|
|
409
|
+
{...(style !== undefined && { style })}
|
|
410
|
+
legend={resolveLegend(
|
|
411
|
+
legend,
|
|
412
|
+
{ highlighted, onHighlight: setHighlighted },
|
|
413
|
+
deriveLegend(series).length,
|
|
414
|
+
)}
|
|
315
415
|
>
|
|
316
416
|
{(plot) => (
|
|
317
417
|
<CartesianPlot
|
|
@@ -324,6 +424,7 @@ export function CartesianChart<T>({
|
|
|
324
424
|
{...(xTicks !== undefined && { xTicks })}
|
|
325
425
|
{...(xTickValues !== undefined && { xTickValues })}
|
|
326
426
|
formatX={formatX}
|
|
427
|
+
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
327
428
|
{...(zones !== undefined && { zones })}
|
|
328
429
|
{...(xZones !== undefined && { xZones })}
|
|
329
430
|
{...(refLines !== undefined && { refLines })}
|
|
@@ -344,7 +445,15 @@ export function CartesianChart<T>({
|
|
|
344
445
|
|
|
345
446
|
type CartesianPlotProps<T> = Omit<
|
|
346
447
|
CartesianChartProps<T>,
|
|
347
|
-
|
|
448
|
+
| 'height'
|
|
449
|
+
| 'aspectRatio'
|
|
450
|
+
| 'fill'
|
|
451
|
+
| 'legend'
|
|
452
|
+
| 'isPending'
|
|
453
|
+
| 'state'
|
|
454
|
+
| 'margin'
|
|
455
|
+
| 'className'
|
|
456
|
+
| 'style'
|
|
348
457
|
> & {
|
|
349
458
|
plot: { width: number; height: number; hidden: ReadonlySet<string> }
|
|
350
459
|
highlighted: string | null
|
|
@@ -363,6 +472,7 @@ function CartesianPlot<T>({
|
|
|
363
472
|
xTicks,
|
|
364
473
|
xTickValues,
|
|
365
474
|
formatX = fmtAxisDate,
|
|
475
|
+
xLabelRotate,
|
|
366
476
|
zones,
|
|
367
477
|
xZones,
|
|
368
478
|
refLines,
|
|
@@ -376,6 +486,10 @@ function CartesianPlot<T>({
|
|
|
376
486
|
children,
|
|
377
487
|
}: CartesianPlotProps<T>): ReactNode {
|
|
378
488
|
const { hidden } = plot
|
|
489
|
+
// The tier `ChartFrame` resolved from its own MEASURED width. Everything sized by it here is
|
|
490
|
+
// the half a hook cannot reach: the tick font the margins are MEASURED at, and the margin
|
|
491
|
+
// floors themselves (`docs/CHARTS-SPEC.md` §8).
|
|
492
|
+
const tier = useChartTierMetrics()
|
|
379
493
|
|
|
380
494
|
const visible = useMemo(() => series.filter((s) => !hidden.has(s.key)), [series, hidden])
|
|
381
495
|
const leftSeries = useMemo(() => visible.filter((s) => s.axis !== 'right'), [visible])
|
|
@@ -418,9 +532,10 @@ function CartesianPlot<T>({
|
|
|
418
532
|
domain: leftDomain,
|
|
419
533
|
ticks: leftTicks,
|
|
420
534
|
nice: y?.nice ?? false,
|
|
535
|
+
...(y?.scale !== undefined && { scale: y.scale }),
|
|
421
536
|
...(y?.format !== undefined && { format: y.format }),
|
|
422
537
|
}),
|
|
423
|
-
[leftDomain, leftTicks, y?.format, y?.nice],
|
|
538
|
+
[leftDomain, leftTicks, y?.format, y?.nice, y?.scale],
|
|
424
539
|
)
|
|
425
540
|
|
|
426
541
|
const { labels: rightLabels, format: rightFormat } = useMemo(
|
|
@@ -431,22 +546,64 @@ function CartesianPlot<T>({
|
|
|
431
546
|
domain: rightDomain,
|
|
432
547
|
ticks: rightTicks,
|
|
433
548
|
nice: y2?.nice ?? false,
|
|
549
|
+
...(y2?.scale !== undefined && { scale: y2.scale }),
|
|
434
550
|
...(y2?.format !== undefined && { format: y2.format }),
|
|
435
551
|
}),
|
|
436
|
-
[rightDomain, rightTicks, y2?.format, y2?.nice],
|
|
552
|
+
[rightDomain, rightTicks, y2?.format, y2?.nice, y2?.scale],
|
|
437
553
|
)
|
|
438
554
|
|
|
439
555
|
const xLabels = useMemo(() => keys.map(formatX), [keys, formatX])
|
|
440
556
|
|
|
557
|
+
/** The horizontal room one x tick label needs: the widest string that could be painted, plus
|
|
558
|
+
* breathing space to its neighbour. Feeds `smartTicks`, which otherwise thinned the axis by a
|
|
559
|
+
* constant that knew nothing about the label. Measured at the tick font the axis will actually
|
|
560
|
+
* paint, which the tier moves (`docs/CHARTS-SPEC.md` §8). */
|
|
561
|
+
const xLabelPx = useMemo(() => xLabelPxFor(xLabels, tier.axisFont), [xLabels, tier.axisFont])
|
|
562
|
+
|
|
563
|
+
/** Everything `autoMargin` measures except the rotation — shared by all three passes below so a
|
|
564
|
+
* measured label can never differ between the one that DECIDES and the one that PAINTS. */
|
|
565
|
+
const marginInput = useMemo(
|
|
566
|
+
() => ({
|
|
567
|
+
left: leftLabels,
|
|
568
|
+
right: rightLabels,
|
|
569
|
+
bottom: xLabels,
|
|
570
|
+
fontPx: tier.axisFont,
|
|
571
|
+
floor: tier.margin,
|
|
572
|
+
...(marginOverride !== undefined && { override: marginOverride }),
|
|
573
|
+
}),
|
|
574
|
+
[leftLabels, rightLabels, xLabels, tier.axisFont, tier.margin, marginOverride],
|
|
575
|
+
)
|
|
576
|
+
|
|
577
|
+
/** The margin an UNROTATED axis resolves to. It is the final margin in every case except an
|
|
578
|
+
* auto-rotated phone axis, and it is what the rotation decision itself is measured against —
|
|
579
|
+
* deciding needs an `xMax`, and `xMax` needs a margin, so the unrotated pass breaks the loop. */
|
|
580
|
+
const flatMargin = useMemo(() => autoMargin(marginInput), [marginInput])
|
|
581
|
+
|
|
582
|
+
/** And the margin a 45° axis would resolve to — the OTHER half of the decision. A rotated label
|
|
583
|
+
* reaches into the left gutter, so rotating spends plot width; `autoXLabelRotate` refuses the
|
|
584
|
+
* trade when what is left cannot hold three labels at their projected pitch, which is how block
|
|
585
|
+
* (f1) at 320 used to rotate itself into a clipped axis (§8). */
|
|
586
|
+
const rotated45Margin = useMemo(() => autoMargin({ ...marginInput, rotate: 45 }), [marginInput])
|
|
587
|
+
|
|
588
|
+
// An explicit `xLabelRotate` always wins — including `0`, which is the documented "never rotate"
|
|
589
|
+
// opt-out. Only an unset one falls through to the phone tier's own default.
|
|
590
|
+
const rotate =
|
|
591
|
+
xLabelRotate ??
|
|
592
|
+
autoXLabelRotate({
|
|
593
|
+
tier: tier.tier,
|
|
594
|
+
xMax: Math.max(plot.width - flatMargin.left - flatMargin.right, 0),
|
|
595
|
+
labelPx: xLabelPx,
|
|
596
|
+
rotatedXMax: Math.max(plot.width - rotated45Margin.left - rotated45Margin.right, 0),
|
|
597
|
+
})
|
|
598
|
+
|
|
441
599
|
const margin = useMemo(
|
|
442
600
|
() =>
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
[leftLabels, rightLabels, xLabels, marginOverride],
|
|
601
|
+
rotate === 0
|
|
602
|
+
? flatMargin
|
|
603
|
+
: rotate === 45
|
|
604
|
+
? rotated45Margin
|
|
605
|
+
: autoMargin({ ...marginInput, rotate }),
|
|
606
|
+
[flatMargin, rotated45Margin, marginInput, rotate],
|
|
450
607
|
)
|
|
451
608
|
|
|
452
609
|
// ── Pass 2: the real scales, now that the plot rect is known ────────────────────────────────
|
|
@@ -458,24 +615,12 @@ function CartesianPlot<T>({
|
|
|
458
615
|
[keys, xMax],
|
|
459
616
|
)
|
|
460
617
|
const yScale = useMemo(
|
|
461
|
-
() =>
|
|
462
|
-
|
|
463
|
-
domain: leftDomain,
|
|
464
|
-
range: [yMax, 0],
|
|
465
|
-
...(y?.nice === true && { nice: true }),
|
|
466
|
-
}),
|
|
467
|
-
[leftDomain, yMax, y?.nice],
|
|
618
|
+
() => buildYScale(y, leftDomain, yMax, leftTicks),
|
|
619
|
+
[y, leftDomain, yMax, leftTicks],
|
|
468
620
|
)
|
|
469
621
|
const y2Scale = useMemo(
|
|
470
|
-
() =>
|
|
471
|
-
|
|
472
|
-
? null
|
|
473
|
-
: scaleLinear<number>({
|
|
474
|
-
domain: rightDomain,
|
|
475
|
-
range: [yMax, 0],
|
|
476
|
-
...(y2?.nice === true && { nice: true }),
|
|
477
|
-
}),
|
|
478
|
-
[rightDomain, yMax, y2?.nice],
|
|
622
|
+
() => (rightDomain === null ? null : buildYScale(y2, rightDomain, yMax, rightTicks)),
|
|
623
|
+
[y2, rightDomain, yMax, rightTicks],
|
|
479
624
|
)
|
|
480
625
|
|
|
481
626
|
// Resolution order: explicit VALUES win, then an explicit COUNT, then as many as fit.
|
|
@@ -484,9 +629,11 @@ function CartesianPlot<T>({
|
|
|
484
629
|
xTickValues !== undefined
|
|
485
630
|
? [...xTickValues(keys, xMax)]
|
|
486
631
|
: xTicks === undefined
|
|
487
|
-
?
|
|
632
|
+
? // A rotated label stacks diagonally instead of beside its neighbour, so its WIDTH no
|
|
633
|
+
// longer governs tick spacing — the constant floor takes over, exactly as before.
|
|
634
|
+
smartTicks(keys, xMax, rotate === 0 ? xLabelPx : undefined)
|
|
488
635
|
: smartTicksEvery(keys, xTicks),
|
|
489
|
-
[keys, xMax, xTicks, xTickValues],
|
|
636
|
+
[keys, xMax, xTicks, xTickValues, xLabelPx, rotate],
|
|
490
637
|
)
|
|
491
638
|
|
|
492
639
|
const cursor = useChartCursor<T>({
|
|
@@ -566,11 +713,11 @@ function CartesianPlot<T>({
|
|
|
566
713
|
|
|
567
714
|
{children(ctx)}
|
|
568
715
|
|
|
569
|
-
{refLines?.map((line) => {
|
|
716
|
+
{refLines?.map((line, i) => {
|
|
570
717
|
const scale = line.axis === 'right' && y2Scale !== null ? y2Scale : yScale
|
|
571
718
|
return (
|
|
572
719
|
<line
|
|
573
|
-
key={`${line.axis ?? 'left'}-${line.value}`}
|
|
720
|
+
key={`${line.axis ?? 'left'}-${line.value}-${i}`}
|
|
574
721
|
x1={0}
|
|
575
722
|
x2={xMax}
|
|
576
723
|
y1={scale(line.value)}
|
|
@@ -593,12 +740,17 @@ function CartesianPlot<T>({
|
|
|
593
740
|
cursorValue === undefined ? s.getValue(point) : cursorValue(point, s, visible)
|
|
594
741
|
if (value === null) return null
|
|
595
742
|
const scale = s.axis === 'right' && y2Scale !== null ? y2Scale : yScale
|
|
743
|
+
const cy = scale(value)
|
|
744
|
+
// A non-positive value on a log axis (or any other input a scale can't place)
|
|
745
|
+
// maps to NaN — the same guard the mark layer applies (`MultiLine`'s `LinePath
|
|
746
|
+
// defined`), so a stray crosshair dot never paints at `cy="NaN"`.
|
|
747
|
+
if (!Number.isFinite(cy)) return null
|
|
596
748
|
const marker = s.getMarker?.(point)
|
|
597
749
|
return (
|
|
598
750
|
<SeriesDot
|
|
599
751
|
key={s.key}
|
|
600
752
|
cx={cursorX}
|
|
601
|
-
cy={
|
|
753
|
+
cy={cy}
|
|
602
754
|
color={marker?.color ?? s.color}
|
|
603
755
|
{...(marker?.r !== undefined && { r: marker.r })}
|
|
604
756
|
/>
|
|
@@ -625,6 +777,7 @@ function CartesianPlot<T>({
|
|
|
625
777
|
scale={xScale}
|
|
626
778
|
tickValues={tickValues}
|
|
627
779
|
tickFormat={(v) => formatX(String(v))}
|
|
780
|
+
{...(rotate !== 0 && { rotate })}
|
|
628
781
|
/>
|
|
629
782
|
|
|
630
783
|
<HoverOverlay
|
|
@@ -13,8 +13,11 @@
|
|
|
13
13
|
* the `''`-as-hidden-header sentinel a consumer used to reach for otherwise.
|
|
14
14
|
*/
|
|
15
15
|
import type { CSSProperties, ReactNode } from 'react'
|
|
16
|
+
import { cx } from '../../common/props'
|
|
17
|
+
import type { BasaltProps, SlotStylesProps } from '../../common/props'
|
|
16
18
|
import { VX } from '../../tokens'
|
|
17
19
|
import { WidgetHeader } from '../../widget-header'
|
|
20
|
+
import type { DeltaPolarity } from '../../widget-header'
|
|
18
21
|
|
|
19
22
|
// Surfaces resolve per theme via CSS vars, so the styles are static (no useMemo/isDark).
|
|
20
23
|
// Depth = `shadow-card` (a whisper shadow + a 1px ring baked into the same value), never a
|
|
@@ -51,28 +54,53 @@ const headerWrapStyle: CSSProperties = {
|
|
|
51
54
|
padding: 'var(--mantine-spacing-xs, 0.6875rem) var(--mantine-spacing-sm, 0.8125rem) 4px',
|
|
52
55
|
}
|
|
53
56
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
57
|
+
/**
|
|
58
|
+
* The three boxes a `ChartCard` paints, and therefore the slot set a consumer may class
|
|
59
|
+
* (`SlotStylesProps`). `root` is the card itself (shadow, radius, panel background), `header` the
|
|
60
|
+
* unclipped title band, `body` the clipped chart well. There is deliberately no slot for
|
|
61
|
+
* `WidgetHeader`'s own internals — that component owns its own contract.
|
|
62
|
+
*/
|
|
63
|
+
export type ChartCardSlot = 'root' | 'header' | 'body'
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* The props below are a HAND-CUT subset of `WidgetHeaderProps`, and that is the open half of audit
|
|
67
|
+
* B #2: `widget-header` now publishes named slices (`WidgetHeaderTitleProps`,
|
|
68
|
+
* `WidgetHeaderMetricProps`, `WidgetHeaderDeltaProps`) precisely so a composer's omissions are
|
|
69
|
+
* declared rather than accidental, and `StatCard`/`SettingsSection` already compose them.
|
|
70
|
+
*
|
|
71
|
+
* `ChartCard` cannot yet: it lives inside the Mantine-free `charts/` boundary, and every prop here
|
|
72
|
+
* is spelled out so a `./charts`-only consumer reads the whole contract without following a type
|
|
73
|
+
* into another module. What that costs is visible in the omissions — no `unit`, no `deltaFormat`,
|
|
74
|
+
* no `deltaGlyph`, no `sparkline` — so a KPI moved from a `StatCard` into a `ChartCard` loses them
|
|
75
|
+
* silently. Compose the slices here next time this file is open; the ledger of which composer takes
|
|
76
|
+
* which is `docs/CONTROLS-SPEC.md` §2.2.
|
|
77
|
+
*/
|
|
78
|
+
export type ChartCardProps = BasaltProps &
|
|
79
|
+
SlotStylesProps<ChartCardSlot> & {
|
|
80
|
+
/** Optional — the header renders only when this or one of info/value/actions/icon/count is set. */
|
|
81
|
+
title?: string
|
|
82
|
+
/** Optional leading icon, forwarded to `WidgetHeader`. */
|
|
83
|
+
icon?: ReactNode
|
|
84
|
+
/** Optional muted line rendered below the title row — does NOT by itself trigger the header. */
|
|
85
|
+
subtitle?: string
|
|
86
|
+
/** Renders `WidgetHeader`'s info glyph beside the title — a `More information` button whose
|
|
87
|
+
* bubble opens on hover, focus and click. Never part of the heading's accessible name. */
|
|
88
|
+
info?: string
|
|
89
|
+
/** Pre-formatted metric value, on the hero-metric row with `delta`. */
|
|
90
|
+
value?: string
|
|
91
|
+
/** Signed delta rendered via `DeltaBadge`, alongside `value`. */
|
|
92
|
+
delta?: number
|
|
93
|
+
/** Comparison timeframe forwarded to `DeltaBadge` (e.g. `MoM`). */
|
|
94
|
+
deltaPeriod?: string
|
|
95
|
+
/** Which sign reads as the good verdict on the delta chip — forwarded to `DeltaBadge`'s
|
|
96
|
+
* `polarity`. Defaults to `'up-good'` (today's behaviour). */
|
|
97
|
+
deltaPolarity?: DeltaPolarity
|
|
98
|
+
/** Mono count tag after the title. */
|
|
99
|
+
count?: number
|
|
100
|
+
/** Right-aligned slot — carries `data-basalt-tier="widget"` (no `CtlSlot`; see module doc). */
|
|
101
|
+
actions?: ReactNode
|
|
102
|
+
children: ReactNode
|
|
103
|
+
}
|
|
76
104
|
|
|
77
105
|
export function ChartCard({
|
|
78
106
|
title,
|
|
@@ -82,8 +110,12 @@ export function ChartCard({
|
|
|
82
110
|
value,
|
|
83
111
|
delta,
|
|
84
112
|
deltaPeriod,
|
|
113
|
+
deltaPolarity,
|
|
85
114
|
count,
|
|
86
115
|
actions,
|
|
116
|
+
className,
|
|
117
|
+
classNames,
|
|
118
|
+
style,
|
|
87
119
|
children,
|
|
88
120
|
}: ChartCardProps) {
|
|
89
121
|
const hasHeader =
|
|
@@ -95,9 +127,12 @@ export function ChartCard({
|
|
|
95
127
|
count !== undefined
|
|
96
128
|
|
|
97
129
|
return (
|
|
98
|
-
<div style={cardStyle}>
|
|
130
|
+
<div className={cx(classNames?.root, className)} style={{ ...cardStyle, ...style }}>
|
|
99
131
|
{hasHeader && (
|
|
100
|
-
<div
|
|
132
|
+
<div
|
|
133
|
+
{...(classNames?.header !== undefined && { className: classNames.header })}
|
|
134
|
+
style={headerWrapStyle}
|
|
135
|
+
>
|
|
101
136
|
<WidgetHeader
|
|
102
137
|
tier="widget"
|
|
103
138
|
title={title ?? ''}
|
|
@@ -107,6 +142,7 @@ export function ChartCard({
|
|
|
107
142
|
{...(value !== undefined && { value })}
|
|
108
143
|
{...(delta !== undefined && { delta })}
|
|
109
144
|
{...(deltaPeriod !== undefined && { deltaPeriod })}
|
|
145
|
+
{...(deltaPolarity !== undefined && { deltaPolarity })}
|
|
110
146
|
{...(count !== undefined && { count })}
|
|
111
147
|
{...(actions !== undefined && {
|
|
112
148
|
actions: <span data-basalt-tier="widget">{actions}</span>,
|
|
@@ -114,7 +150,12 @@ export function ChartCard({
|
|
|
114
150
|
/>
|
|
115
151
|
</div>
|
|
116
152
|
)}
|
|
117
|
-
<div
|
|
153
|
+
<div
|
|
154
|
+
{...(classNames?.body !== undefined && { className: classNames.body })}
|
|
155
|
+
style={bodyClipStyle}
|
|
156
|
+
>
|
|
157
|
+
{children}
|
|
158
|
+
</div>
|
|
118
159
|
</div>
|
|
119
160
|
)
|
|
120
161
|
}
|