basalt-ui 1.27.0 → 1.29.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 +28 -35
- package/CHANGELOG.md +72 -0
- package/MIGRATING.md +759 -22
- package/README.md +56 -69
- package/agent/rules/basalt-batteries.md +60 -168
- package/agent/rules/basalt-charts.md +56 -75
- package/agent/rules/basalt-controls.md +81 -87
- package/agent/rules/basalt-mantine.md +64 -98
- package/agent/rules/basalt-state.md +42 -60
- package/agent/rules/basalt-tokens.md +46 -67
- package/agent/skills/basalt-app/SKILL.md +2 -0
- package/agent/templates/CLAUDE-block.md.tpl +14 -14
- package/configs/oxlint-plugin.js +964 -33
- package/configs/oxlint-plugin.test.ts +902 -2
- package/configs/oxlint.json +6 -0
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +7 -4
- 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/transport.d.ts +13 -2
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.d.ts +12 -1
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +20 -6
- 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/index.d.ts +1 -1
- package/dist/agent-chat/index.d.ts.map +1 -1
- 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 +9 -6
- package/dist/agent-chat/thread-feed-row.d.ts +32 -6
- package/dist/agent-chat/thread-feed-row.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed-row.js +61 -26
- package/dist/agent-chat/thread-feed.d.ts +13 -2
- package/dist/agent-chat/thread-feed.d.ts.map +1 -1
- package/dist/agent-chat/thread-feed.js +16 -7
- 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/agent-chat/virtualize.d.ts +39 -0
- package/dist/agent-chat/virtualize.d.ts.map +1 -1
- package/dist/agent-chat/virtualize.js +15 -0
- package/dist/charts/hooks/useBandPlot.d.ts.map +1 -1
- package/dist/charts/hooks/useBandPlot.js +15 -8
- package/dist/charts/index.d.ts +11 -10
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +53 -9
- 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 +13 -9
- 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 +9 -6
- package/dist/charts/kinds/DualPanel.d.ts.map +1 -1
- package/dist/charts/kinds/DualPanel.js +37 -9
- 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 +13 -11
- 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 +32 -4
- package/dist/charts/primitives/Axes.d.ts.map +1 -1
- package/dist/charts/primitives/Axes.js +49 -7
- 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 +45 -4
- package/dist/charts/primitives/ChartCard.d.ts.map +1 -1
- package/dist/charts/primitives/ChartCard.js +70 -21
- 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 +52 -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 +85 -6
- 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 +7 -4
- package/dist/charts/utils/format.d.ts.map +1 -1
- package/dist/charts/utils/format.js +17 -24
- 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/audit-allows.d.ts +24 -0
- package/dist/cli/audit-allows.d.ts.map +1 -0
- package/dist/cli/audit-allows.js +240 -0
- package/dist/cli/check-theme.d.ts +10 -0
- package/dist/cli/check-theme.d.ts.map +1 -0
- package/dist/cli/check-theme.js +139 -0
- package/dist/cli/doctor.d.ts +47 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +197 -0
- package/dist/cli/guard-hook.d.ts +9 -0
- package/dist/cli/guard-hook.d.ts.map +1 -0
- package/dist/cli/guard-hook.js +93 -0
- package/dist/cli/help.d.ts +9 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +53 -0
- package/dist/cli/index.d.ts +360 -270
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +85 -1901
- package/dist/cli/init.d.ts +4 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +165 -0
- package/dist/cli/sync.d.ts +43 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +206 -0
- package/dist/cli/tokens-css.d.ts +51 -0
- package/dist/cli/tokens-css.d.ts.map +1 -0
- package/dist/cli/tokens-css.js +165 -0
- 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 +12 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -1
- package/dist/commands/overlays-mount.d.ts +16 -11
- package/dist/commands/overlays-mount.d.ts.map +1 -1
- package/dist/commands/overlays-mount.js +23 -14
- package/dist/commands/shell-bridge.d.ts +57 -0
- package/dist/commands/shell-bridge.d.ts.map +1 -0
- package/dist/commands/shell-bridge.js +32 -0
- package/dist/common/errors.d.ts +69 -0
- package/dist/common/errors.d.ts.map +1 -0
- package/dist/common/errors.js +64 -0
- package/dist/common/index.d.ts +17 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +35 -0
- package/dist/common/is-dev.d.ts +3 -0
- package/dist/common/is-dev.d.ts.map +1 -0
- package/dist/common/is-dev.js +6 -0
- package/dist/{motion/index.d.ts → common/motion.d.ts} +1 -1
- package/dist/common/motion.d.ts.map +1 -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/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 +3 -4
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +3 -4
- 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 +50 -7
- 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 +3 -2
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/enum-filter.js +28 -13
- package/dist/controls/filter-context.d.ts +8 -4
- 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 +2 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +4 -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 +122 -20
- package/dist/controls/number-filter.d.ts +7 -5
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +40 -11
- 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 +2 -1
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/range-filter.js +57 -35
- 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 +25 -10
- 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 +28 -11
- 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 +18 -6
- package/dist/dashboard/delta-badge.d.ts.map +1 -1
- package/dist/dashboard/delta-badge.js +33 -1
- package/dist/dashboard/empty-state.d.ts +8 -4
- package/dist/dashboard/empty-state.d.ts.map +1 -1
- package/dist/dashboard/empty-state.js +36 -6
- package/dist/dashboard/index.d.ts +9 -5
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +13 -1
- package/dist/dashboard/query-state.d.ts +39 -27
- package/dist/dashboard/query-state.d.ts.map +1 -1
- package/dist/dashboard/query-state.js +109 -58
- package/dist/dashboard/section.d.ts +58 -0
- package/dist/dashboard/section.d.ts.map +1 -0
- package/dist/dashboard/section.js +118 -0
- package/dist/{section → dashboard}/section.module.css +11 -0
- 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 +75 -26
- package/dist/dashboard/stat-card.d.ts +44 -38
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +56 -43
- package/dist/dashboard/stat-card.module.css +46 -31
- package/dist/dashboard/stat-card.module.css.d.ts +1 -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/dashboard/widget-header.d.ts +132 -0
- package/dist/dashboard/widget-header.d.ts.map +1 -0
- package/dist/{widget-header → dashboard}/widget-header.js +42 -27
- package/dist/{widget-header → dashboard}/widget-header.module.css +72 -7
- 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 +385 -139
- package/dist/data/data-table.module.css +64 -0
- package/dist/data/data-table.module.css.d.ts +11 -0
- 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/table.js +2 -16
- 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 +4 -4
- package/dist/data/virtual.d.ts.map +1 -1
- package/dist/dev-dock.d.ts +28 -0
- package/dist/dev-dock.d.ts.map +1 -0
- package/dist/dev-dock.js +85 -0
- package/dist/format/date.d.ts +62 -0
- package/dist/format/date.d.ts.map +1 -0
- package/dist/format/date.js +106 -0
- package/dist/format/index.d.ts +39 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +54 -0
- package/dist/format/measure.d.ts +15 -0
- package/dist/format/measure.d.ts.map +1 -0
- package/dist/format/measure.js +16 -0
- package/dist/format/number.d.ts +69 -0
- package/dist/format/number.d.ts.map +1 -0
- package/dist/format/number.js +62 -0
- package/dist/format/shared.d.ts +27 -0
- package/dist/format/shared.d.ts.map +1 -0
- package/dist/format/shared.js +29 -0
- 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 +33 -9
- package/dist/forms/field.d.ts.map +1 -1
- package/dist/forms/field.js +7 -6
- 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 -4
- 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 +2 -9
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +38 -28
- package/dist/guard/types.d.ts +8 -10
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +21 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +40 -6
- 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 +11 -7
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +5 -3
- 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/store.d.ts +7 -0
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/provider/connectivity-indicator.d.ts +13 -0
- package/dist/provider/connectivity-indicator.d.ts.map +1 -0
- package/dist/{connectivity → provider}/connectivity-indicator.js +3 -1
- package/dist/{connectivity → provider}/connectivity-provider.d.ts +1 -1
- package/dist/provider/connectivity-provider.d.ts.map +1 -0
- package/dist/{connectivity → provider}/connectivity-provider.js +4 -1
- package/dist/{connectivity/types.d.ts → provider/connectivity-types.d.ts} +3 -3
- package/dist/provider/connectivity-types.d.ts.map +1 -0
- package/dist/provider/error-fallback.module.css +21 -0
- package/dist/provider/error-fallback.module.css.d.ts +9 -0
- package/dist/provider/index.d.ts +29 -13
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +82 -34
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/lab-theme.js +2 -1
- package/dist/provider/use-connectivity.d.ts +3 -0
- package/dist/provider/use-connectivity.d.ts.map +1 -0
- package/dist/query-client.d.ts +63 -0
- package/dist/query-client.d.ts.map +1 -0
- package/dist/query-client.js +33 -0
- package/dist/{query/devtools.d.ts → query-devtools.d.ts} +2 -2
- package/dist/query-devtools.d.ts.map +1 -0
- package/dist/{query/devtools.js → query-devtools.js} +1 -0
- package/dist/register.d.ts +17 -3
- package/dist/register.d.ts.map +1 -1
- package/dist/router-tanstack/index.d.ts +4 -7
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +1 -9
- package/dist/router-tanstack/nav.d.ts +1 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.d.ts +3 -6
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/search-store.js +1 -1
- package/dist/router-tanstack/use-nav.d.ts +1 -1
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +1 -1
- 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 +5 -3
- 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 +118 -0
- package/dist/shell/app-main.module.css.d.ts +11 -0
- package/dist/shell/app-mobile-nav.d.ts +4 -3
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-mobile-nav.js +53 -17
- 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 +10 -4
- package/dist/shell/app-sidebar.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +78 -103
- package/dist/shell/app-sidebar.module.css +63 -96
- package/dist/shell/app-sidebar.module.css.d.ts +0 -5
- package/dist/shell/index.d.ts +24 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +60 -29
- 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 +1 -1
- 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/{nav/types.d.ts → shell/nav-types.d.ts} +16 -7
- package/dist/shell/nav-types.d.ts.map +1 -0
- 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 +175 -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/page-title.d.ts +14 -0
- package/dist/shell/page-title.d.ts.map +1 -0
- package/dist/shell/page-title.js +25 -0
- package/dist/shell/page-title.module.css +33 -0
- package/dist/shell/page-title.module.css.d.ts +11 -0
- package/dist/shell/sidebar-block-model.d.ts +1 -1
- package/dist/shell/sidebar-block-model.d.ts.map +1 -1
- package/dist/shell/sidebar-blocks.d.ts +1 -1
- package/dist/shell/sidebar-blocks.d.ts.map +1 -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/shell/use-breakpoint.d.ts +11 -0
- package/dist/shell/use-breakpoint.d.ts.map +1 -0
- package/dist/shell/use-breakpoint.js +33 -0
- package/dist/state/fields.d.ts +26 -22
- package/dist/state/fields.d.ts.map +1 -1
- package/dist/state/fields.js +19 -18
- 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.d.ts +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +2 -6
- package/dist/styles.css +36 -0
- package/dist/surfaces.d.ts +25 -47
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +72 -55
- 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/theme-toggle.d.ts +9 -0
- package/dist/theme/theme-toggle.d.ts.map +1 -0
- package/dist/{theme-toggle/index.js → theme/theme-toggle.js} +9 -3
- 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/tokens/index.d.ts +43 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +45 -6
- package/dist/tokens/palette.d.ts +57 -25
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +44 -15
- package/dist/tokens.css +5 -5
- package/llms.txt +11 -26
- package/package.json +54 -34
- package/src/agent/ai-sdk-transport.ts +11 -4
- 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/transport.ts +15 -2
- package/src/agent/use-agent-thread-runs.ts +65 -15
- package/src/agent-chat/composer.tsx +124 -103
- package/src/agent-chat/index.ts +6 -4
- package/src/agent-chat/relative-time.ts +2 -1
- package/src/agent-chat/thread-detail-panel.tsx +10 -6
- package/src/agent-chat/thread-feed-row.tsx +117 -34
- package/src/agent-chat/thread-feed.tsx +59 -27
- 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/agent-chat/virtualize.ts +48 -0
- package/src/charts/hooks/useBandPlot.ts +26 -8
- package/src/charts/index.ts +46 -14
- package/src/charts/kinds/BandStrip.tsx +36 -14
- package/src/charts/kinds/Bars.tsx +68 -20
- package/src/charts/kinds/Donut.tsx +30 -3
- package/src/charts/kinds/DualPanel.tsx +60 -13
- 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 +72 -35
- package/src/charts/layout/auto-margin.ts +134 -21
- package/src/charts/layout/log-ticks.ts +90 -0
- package/src/charts/primitives/Axes.tsx +82 -5
- package/src/charts/primitives/CartesianChart.tsx +194 -41
- package/src/charts/primitives/ChartCard.tsx +111 -27
- package/src/charts/primitives/ChartFrame.tsx +111 -26
- package/src/charts/primitives/ChartLegend.tsx +43 -13
- package/src/charts/primitives/ChartPending.tsx +194 -10
- 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 +19 -27
- package/src/charts/utils/ticks.ts +149 -4
- package/src/cli/audit-allows.ts +371 -0
- package/src/cli/check-theme.ts +197 -0
- package/src/cli/doctor.ts +331 -0
- package/src/cli/guard-hook.ts +115 -0
- package/src/cli/help.ts +101 -0
- package/src/cli/index.ts +269 -3434
- package/src/cli/init.ts +247 -0
- package/src/cli/sync.ts +324 -0
- package/src/cli/tokens-css.ts +252 -0
- 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 +22 -1
- package/src/commands/overlays-mount.tsx +63 -31
- package/src/commands/shell-bridge.ts +86 -0
- package/src/common/errors.ts +143 -0
- package/src/common/index.ts +23 -0
- package/src/common/is-dev.ts +4 -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/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 +6 -8
- 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 +90 -10
- 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 +32 -16
- package/src/controls/filter-context.tsx +14 -6
- 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 +7 -0
- package/src/controls/multi-select-filter.tsx +177 -27
- package/src/controls/number-filter.tsx +61 -23
- 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 +76 -39
- package/src/controls/search-filter.tsx +30 -12
- 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 +36 -16
- package/src/controls/view-tabs.tsx +63 -11
- package/src/controls-dates/date-range-picker.tsx +8 -1
- package/src/dashboard/delta-badge.tsx +75 -4
- package/src/dashboard/empty-state.tsx +67 -24
- package/src/dashboard/index.ts +24 -3
- package/src/dashboard/query-state.tsx +142 -85
- package/src/{section → dashboard}/section.module.css +11 -0
- package/src/dashboard/section.tsx +287 -0
- package/src/dashboard/settings-section.tsx +88 -32
- package/src/dashboard/stat-card.module.css +46 -31
- package/src/dashboard/stat-card.module.css.d.ts +1 -0
- package/src/dashboard/stat-card.tsx +186 -128
- 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/{widget-header → dashboard}/widget-header.module.css +72 -7
- package/src/dashboard/widget-header.tsx +292 -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 +921 -348
- package/src/data/query-branch.ts +53 -0
- package/src/data/table.ts +9 -23
- package/src/data/virtual-list.tsx +190 -56
- package/src/data/virtual.ts +8 -4
- package/src/dev-dock.tsx +159 -0
- package/src/format/date.ts +184 -0
- package/src/format/index.ts +69 -0
- package/src/format/measure.ts +31 -0
- package/src/format/number.ts +129 -0
- package/src/format/shared.ts +63 -0
- package/src/forms/FormErrorSummary.tsx +13 -6
- package/src/forms/create-form.ts +2 -2
- package/src/forms/field.ts +42 -13
- 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 +37 -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 +99 -70
- package/src/guard/types.ts +7 -10
- package/src/index.ts +92 -19
- 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 +17 -8
- package/src/notifications/mount-guard.ts +39 -0
- package/src/notifications/notify.tsx +122 -3
- package/src/notifications/store.ts +7 -0
- package/src/{connectivity → provider}/connectivity-indicator.tsx +7 -2
- package/src/{connectivity → provider}/connectivity-provider.tsx +5 -2
- package/src/{connectivity/types.ts → provider/connectivity-types.ts} +5 -2
- package/src/provider/error-fallback.module.css +21 -0
- package/src/provider/error-fallback.module.css.d.ts +9 -0
- package/src/provider/index.tsx +116 -28
- package/src/provider/lab-theme.ts +2 -1
- package/src/{connectivity → provider}/use-connectivity.ts +4 -3
- package/src/query-client.ts +100 -0
- package/src/{query/devtools.tsx → query-devtools.tsx} +6 -4
- package/src/register.ts +20 -4
- package/src/router-tanstack/index.ts +4 -15
- package/src/router-tanstack/nav.ts +1 -1
- package/src/router-tanstack/search-store.ts +6 -14
- package/src/router-tanstack/use-nav.ts +19 -14
- 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 +20 -10
- package/src/shell/app-header.module.css +10 -5
- package/src/shell/app-main.module.css +118 -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 +71 -12
- package/src/shell/app-sidebar-account.tsx +29 -6
- package/src/shell/app-sidebar.module.css +63 -96
- package/src/shell/app-sidebar.module.css.d.ts +0 -5
- package/src/shell/app-sidebar.tsx +61 -105
- package/src/shell/index.tsx +179 -93
- package/src/shell/isomorphic-layout-effect.ts +14 -0
- package/src/shell/mobile-nav-model.ts +67 -11
- package/src/shell/nav-count-badge.tsx +6 -1
- package/src/{nav/types.ts → shell/nav-types.ts} +15 -6
- 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 +327 -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/page-title.module.css +33 -0
- package/src/shell/page-title.module.css.d.ts +11 -0
- package/src/shell/page-title.tsx +57 -0
- package/src/shell/sidebar-block-model.ts +1 -1
- package/src/shell/sidebar-blocks.tsx +1 -1
- package/src/shell/sidebar-search.module.css +1 -1
- package/src/shell/sidebar-search.tsx +13 -4
- package/src/shell/use-breakpoint.ts +73 -0
- package/src/state/fields.ts +50 -53
- package/src/state/persisted-or-local.ts +50 -0
- package/src/state.ts +0 -9
- package/src/styles.css +36 -0
- package/src/surfaces.ts +72 -57
- package/src/theme/ctl-theme.tsx +10 -0
- package/src/theme/index.ts +136 -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-toggle/index.tsx → theme/theme-toggle.tsx} +11 -4
- package/src/theme-lab/boot.ts +140 -0
- package/src/theme-lab/index.tsx +21 -112
- package/src/tokens/index.ts +60 -6
- package/src/tokens/palette.ts +70 -30
- 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/connectivity/connectivity-indicator.d.ts +0 -11
- package/dist/connectivity/connectivity-indicator.d.ts.map +0 -1
- package/dist/connectivity/connectivity-provider.d.ts.map +0 -1
- package/dist/connectivity/index.d.ts +0 -13
- package/dist/connectivity/index.d.ts.map +0 -1
- package/dist/connectivity/index.js +0 -8
- package/dist/connectivity/types.d.ts.map +0 -1
- package/dist/connectivity/use-connectivity.d.ts +0 -3
- package/dist/connectivity/use-connectivity.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/range-filter.type-guard.test.d.ts +0 -2
- package/dist/controls/range-filter.type-guard.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/data/index.d.ts +0 -38
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/index.js +0 -2
- 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/motion/index.d.ts.map +0 -1
- package/dist/nav/types.d.ts.map +0 -1
- package/dist/notifications/overlay.d.ts +0 -20
- package/dist/notifications/overlay.d.ts.map +0 -1
- package/dist/notifications/overlay.js +0 -12
- 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/devtools.d.ts.map +0 -1
- package/dist/query/error-message.d.ts +0 -41
- package/dist/query/error-message.d.ts.map +0 -1
- package/dist/query/error-message.js +0 -30
- package/dist/query/error-message.test.d.ts +0 -2
- package/dist/query/error-message.test.d.ts.map +0 -1
- package/dist/query/index.d.ts +0 -47
- package/dist/query/index.d.ts.map +0 -1
- package/dist/query/index.js +0 -56
- package/dist/router-tanstack/field.d.ts +0 -14
- package/dist/router-tanstack/field.d.ts.map +0 -1
- package/dist/router-tanstack/field.js +0 -4
- package/dist/router-tanstack/multi-search-param-store.d.ts +0 -43
- package/dist/router-tanstack/multi-search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/multi-search-param-store.js +0 -30
- 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.d.ts +0 -42
- package/dist/router-tanstack/search-param-store.d.ts.map +0 -1
- package/dist/router-tanstack/search-param-store.js +0 -25
- 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/index.d.ts +0 -2
- package/dist/section/index.d.ts.map +0 -1
- package/dist/section/index.js +0 -4
- package/dist/section/section.d.ts +0 -24
- package/dist/section/section.d.ts.map +0 -1
- package/dist/section/section.js +0 -126
- 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/state/persisted.test.d.ts +0 -2
- package/dist/state/persisted.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/theme-toggle/index.d.ts +0 -8
- package/dist/theme-toggle/index.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.d.ts +0 -13
- package/dist/widget-header/delta-badge.d.ts.map +0 -1
- package/dist/widget-header/delta-badge.js +0 -29
- 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/index.d.ts +0 -3
- package/dist/widget-header/index.d.ts.map +0 -1
- package/dist/widget-header/index.js +0 -6
- 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.d.ts +0 -67
- package/dist/widget-header/widget-header.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/connectivity/index.ts +0 -18
- 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 -1053
- 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 -137
- package/src/controls/range-filter.type-guard.test.tsx +0 -122
- 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 -385
- package/src/data/data-table.test.tsx +0 -434
- package/src/data/index.ts +0 -41
- package/src/guard/check-source.test.ts +0 -3388
- package/src/guard/grace.test.ts +0 -158
- package/src/guard/guard-hook.test.ts +0 -203
- package/src/notifications/overlay.tsx +0 -64
- 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/query/error-message.ts +0 -70
- package/src/query/index.ts +0 -97
- package/src/router-tanstack/field.ts +0 -35
- package/src/router-tanstack/multi-search-param-store.test.ts +0 -124
- package/src/router-tanstack/multi-search-param-store.ts +0 -106
- 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-param-store.ts +0 -100
- package/src/router-tanstack/search-store.router.test.tsx +0 -882
- package/src/router-tanstack/search-store.test.ts +0 -578
- package/src/router-tanstack/use-nav.test.tsx +0 -187
- package/src/section/index.ts +0 -1
- package/src/section/section.test.tsx +0 -204
- package/src/section/section.tsx +0 -220
- 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 -512
- package/src/state/persisted.test.ts +0 -91
- 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/delta-badge.tsx +0 -57
- package/src/widget-header/index.ts +0 -2
- package/src/widget-header/no-mantine.test.ts +0 -33
- package/src/widget-header/widget-header.test.tsx +0 -187
- package/src/widget-header/widget-header.tsx +0 -213
- /package/dist/{motion/index.js → common/motion.js} +0 -0
- /package/dist/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/dist/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
- /package/dist/{connectivity/types.js → provider/connectivity-types.js} +0 -0
- /package/dist/{connectivity → provider}/use-connectivity.js +0 -0
- /package/dist/{nav/types.js → shell/nav-types.js} +0 -0
- /package/src/{motion/index.ts → common/motion.ts} +0 -0
- /package/src/{section → dashboard}/section.module.css.d.ts +0 -0
- /package/src/{widget-header → dashboard}/widget-header.module.css.d.ts +0 -0
|
@@ -2,6 +2,8 @@ import { Group } from '@visx/group'
|
|
|
2
2
|
import { scaleLinear } from '@visx/scale'
|
|
3
3
|
import { memo, useMemo } from 'react'
|
|
4
4
|
import type { ReactNode } from 'react'
|
|
5
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
6
|
+
import type { BasaltProps } from '../../common/props'
|
|
5
7
|
import { VX, alpha } from '../../tokens'
|
|
6
8
|
import type { ChartMargin } from '../../tokens'
|
|
7
9
|
import type { CursorResolution } from '../cursor/resolve'
|
|
@@ -19,6 +21,7 @@ import {
|
|
|
19
21
|
import { Crosshair } from '../primitives/Crosshair'
|
|
20
22
|
import { HatchPattern, hatchFill, hatchSizeFor } from '../primitives/HatchPattern'
|
|
21
23
|
import { HoverOverlay } from '../primitives/HoverOverlay'
|
|
24
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
22
25
|
import { deriveTooltipRows } from '../series'
|
|
23
26
|
import type { ChartLegendConfig, ChartSeries } from '../series'
|
|
24
27
|
import { fmtAxisDate } from '../utils/format'
|
|
@@ -47,7 +50,7 @@ export type MirroredBarPane = {
|
|
|
47
50
|
format: (v: number) => string
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
export type MirroredBarsProps<T> = {
|
|
53
|
+
export type MirroredBarsProps<T> = BasaltProps & {
|
|
51
54
|
data: readonly T[]
|
|
52
55
|
chartId: string
|
|
53
56
|
/** Extracts the x-domain key — a slot start, hence the `'leading'` cursor default. */
|
|
@@ -92,6 +95,9 @@ export type MirroredBarsProps<T> = {
|
|
|
92
95
|
margin?: Partial<ChartMargin>
|
|
93
96
|
ariaLabel?: string
|
|
94
97
|
isPending?: boolean
|
|
98
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
99
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
100
|
+
state?: ChartState
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
const DEFAULT_UP_FRACTION = 0.35
|
|
@@ -137,7 +143,12 @@ function assertPaneKey<T>(
|
|
|
137
143
|
* `useBandPlot` choreography instead, which is where the sharing actually belongs.
|
|
138
144
|
*/
|
|
139
145
|
function MirroredBarsInner<T>(props: MirroredBarsProps<T>) {
|
|
140
|
-
|
|
146
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
147
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
148
|
+
// swallows into a blank subtree that names nothing.
|
|
149
|
+
assertRequiredProps('MirroredBars', props, ['data', 'getX', 'series', 'up', 'down'])
|
|
150
|
+
const { series, chartId, height, fill, legend, ariaLabel, isPending, state, className, style } =
|
|
151
|
+
props
|
|
141
152
|
|
|
142
153
|
return (
|
|
143
154
|
<ChartFrame
|
|
@@ -147,6 +158,9 @@ function MirroredBarsInner<T>(props: MirroredBarsProps<T>) {
|
|
|
147
158
|
{...(fill !== undefined && { fill })}
|
|
148
159
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
149
160
|
{...(isPending !== undefined && { isPending })}
|
|
161
|
+
{...(state !== undefined && { state })}
|
|
162
|
+
{...(className !== undefined && { className })}
|
|
163
|
+
{...(style !== undefined && { style })}
|
|
150
164
|
legend={resolveLegend(legend)}
|
|
151
165
|
>
|
|
152
166
|
{(plot) => <MirroredBarsPlot {...props} plot={plot} />}
|
|
@@ -488,4 +502,8 @@ function usePaneMax<T>(
|
|
|
488
502
|
* Hand-memoized: React Compiler does not process the shipped dist, so the hot kind is wrapped in
|
|
489
503
|
* `React.memo` to retain the auto-memoization it had as source (parity with `DualPanel`).
|
|
490
504
|
*/
|
|
491
|
-
|
|
505
|
+
const MirroredBarsMemo = memo(MirroredBarsInner)
|
|
506
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
507
|
+
// graph of nine identically-named nodes names nothing.
|
|
508
|
+
MirroredBarsMemo.displayName = 'MirroredBars'
|
|
509
|
+
export const MirroredBars = MirroredBarsMemo as typeof MirroredBarsInner
|
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
1
|
import { LinePath } from '@visx/shape'
|
|
3
2
|
import { memo, useCallback, useMemo } from 'react'
|
|
4
3
|
import type { ReactNode } from 'react'
|
|
4
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
5
|
+
import type { BasaltProps } from '../../common/props'
|
|
5
6
|
import type { CursorResolution } from '../cursor/resolve'
|
|
6
7
|
import type { CartesianTooltipConfig, AxisConfig, PlotContext } from '../primitives/CartesianChart'
|
|
7
8
|
import { CartesianChart } from '../primitives/CartesianChart'
|
|
8
9
|
import type { XZoneSpec } from '../primitives/XZoneRects'
|
|
9
10
|
import type { ZoneSpec } from '../primitives/ZoneRects'
|
|
10
|
-
import {
|
|
11
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
12
|
+
import { curveFor, definedOn, LINE_OVERLAY_STROKE_WIDTH, toPlotPoint } from '../series'
|
|
11
13
|
import type { ChartLegendConfig, ChartSeries } from '../series'
|
|
12
14
|
import { VX } from '../../tokens'
|
|
13
15
|
|
|
14
|
-
export type MultiLineProps<T> = {
|
|
16
|
+
export type MultiLineProps<T> = BasaltProps & {
|
|
15
17
|
data: T[]
|
|
16
18
|
/** Fixed height in pixels, forwarded to `CartesianChart`. Default 240. */
|
|
17
19
|
height?: number
|
|
@@ -42,6 +44,9 @@ export type MultiLineProps<T> = {
|
|
|
42
44
|
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
43
45
|
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
44
46
|
formatX?: (key: string) => string
|
|
47
|
+
/** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
|
|
48
|
+
* see `CartesianChartProps.xLabelRotate`. */
|
|
49
|
+
xLabelRotate?: 0 | 45 | 90
|
|
45
50
|
/**
|
|
46
51
|
* How a sibling chart's broadcast cursor key resolves against this chart's points. Default
|
|
47
52
|
* `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
|
|
@@ -60,6 +65,9 @@ export type MultiLineProps<T> = {
|
|
|
60
65
|
ariaLabel?: string
|
|
61
66
|
/** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
62
67
|
isPending?: boolean
|
|
68
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
69
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
70
|
+
state?: ChartState
|
|
63
71
|
}
|
|
64
72
|
|
|
65
73
|
const STAR_R = 6
|
|
@@ -76,16 +84,17 @@ function starPath(cx: number, cy: number, r: number): string {
|
|
|
76
84
|
return `M${pts.join('L')}Z`
|
|
77
85
|
}
|
|
78
86
|
|
|
79
|
-
type LinePt<T> = { __d: T; __y: number }
|
|
87
|
+
type LinePt<T> = { __d: T; __y: number | null }
|
|
80
88
|
|
|
81
|
-
/**
|
|
89
|
+
/**
|
|
90
|
+
* Every row, in x order, with `__y: null` where the series reports no value. The null row STAYS in
|
|
91
|
+
* the array: `ChartSeries.getValue` documents null as a line GAP, and dropping the row instead
|
|
92
|
+
* makes `LinePath` join straight across a coverage hole — drawing a measurement that was never
|
|
93
|
+
* taken. `defined` on the consuming shape is what turns it back into a gap. Reused by the lines
|
|
94
|
+
* and the markers.
|
|
95
|
+
*/
|
|
82
96
|
function seriesPoints<T>(series: ChartSeries<T>, data: readonly T[]): LinePt<T>[] {
|
|
83
|
-
|
|
84
|
-
for (const d of data) {
|
|
85
|
-
const v = series.getValue(d)
|
|
86
|
-
if (v !== null && v !== undefined && !Number.isNaN(v)) pts.push({ __d: d, __y: v })
|
|
87
|
-
}
|
|
88
|
-
return pts
|
|
97
|
+
return data.map((d) => ({ __d: d, __y: toPlotPoint(series.getValue(d)) }))
|
|
89
98
|
}
|
|
90
99
|
|
|
91
100
|
/**
|
|
@@ -99,9 +108,14 @@ function seriesPoints<T>(series: ChartSeries<T>, data: readonly T[]): LinePt<T>[
|
|
|
99
108
|
* plotted lines, the legend, and the tooltip rows.
|
|
100
109
|
*
|
|
101
110
|
* X-axis is built from the full `data` array so the calendar is preserved even when a series
|
|
102
|
-
* has nulls; each series line
|
|
111
|
+
* has nulls; each series line BREAKS at a null point, leaving a real gap rather than interpolating
|
|
112
|
+
* across it.
|
|
103
113
|
*/
|
|
104
114
|
function MultiLineInner<T>(props: MultiLineProps<T>) {
|
|
115
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
116
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
117
|
+
// swallows into a blank subtree that names nothing.
|
|
118
|
+
assertRequiredProps('MultiLine', props, ['data', 'getX', 'series'])
|
|
105
119
|
const {
|
|
106
120
|
data,
|
|
107
121
|
chartId,
|
|
@@ -115,6 +129,7 @@ function MultiLineInner<T>(props: MultiLineProps<T>) {
|
|
|
115
129
|
xTicks,
|
|
116
130
|
xTickValues,
|
|
117
131
|
formatX,
|
|
132
|
+
xLabelRotate,
|
|
118
133
|
cursorResolution,
|
|
119
134
|
tooltip,
|
|
120
135
|
markerShape = 'circle',
|
|
@@ -122,6 +137,9 @@ function MultiLineInner<T>(props: MultiLineProps<T>) {
|
|
|
122
137
|
legend,
|
|
123
138
|
ariaLabel,
|
|
124
139
|
isPending,
|
|
140
|
+
state,
|
|
141
|
+
className,
|
|
142
|
+
style,
|
|
125
143
|
} = props
|
|
126
144
|
|
|
127
145
|
// Default line overlays to the redesign's 1.9px stroke (docs/DESIGN-SPEC.md §5) — applied once
|
|
@@ -145,12 +163,16 @@ function MultiLineInner<T>(props: MultiLineProps<T>) {
|
|
|
145
163
|
{...(xTicks !== undefined && { xTicks })}
|
|
146
164
|
{...(xTickValues !== undefined && { xTickValues })}
|
|
147
165
|
{...(formatX !== undefined && { formatX })}
|
|
166
|
+
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
148
167
|
{...(cursorResolution !== undefined && { cursorResolution })}
|
|
149
168
|
{...(tooltip !== undefined && { tooltip })}
|
|
150
169
|
{...(height !== undefined && { height })}
|
|
151
170
|
{...(legend !== undefined && { legend })}
|
|
152
171
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
153
172
|
{...(isPending !== undefined && { isPending })}
|
|
173
|
+
{...(state !== undefined && { state })}
|
|
174
|
+
{...(className !== undefined && { className })}
|
|
175
|
+
{...(style !== undefined && { style })}
|
|
154
176
|
>
|
|
155
177
|
{(ctx: PlotContext<T>) => <MultiLineMarks getX={getX} markerShape={markerShape} ctx={ctx} />}
|
|
156
178
|
</CartesianChart>
|
|
@@ -209,10 +231,16 @@ function MultiLineMarks<T>({
|
|
|
209
231
|
const op = dimOpacity(s)
|
|
210
232
|
const markers: ReactNode[] = []
|
|
211
233
|
for (const p of pointsBySeries.get(s.key) ?? []) {
|
|
234
|
+
// A null point is an absence: no dot, no marker — the same claim the line's `defined`
|
|
235
|
+
// makes by breaking there.
|
|
236
|
+
if (p.__y === null) continue
|
|
212
237
|
const m = getMarker(p.__d)
|
|
213
238
|
if (m === null) continue
|
|
214
239
|
const cx = xScale(getX(p.__d)) ?? 0
|
|
215
240
|
const cy = scale(p.__y)
|
|
241
|
+
// A non-positive value on a log axis (or any input a scale can't place) maps to NaN —
|
|
242
|
+
// skip the marker rather than paint one at `cy="NaN"`.
|
|
243
|
+
if (!Number.isFinite(cy)) continue
|
|
216
244
|
const color = m.color ?? s.color
|
|
217
245
|
const r = m.r ?? (markerShape === 'star' ? STAR_R : VX.dotR)
|
|
218
246
|
const ring = m.ring ?? true
|
|
@@ -247,20 +275,31 @@ function MultiLineMarks<T>({
|
|
|
247
275
|
return (
|
|
248
276
|
<>
|
|
249
277
|
{visible.map((s) => {
|
|
250
|
-
const
|
|
251
|
-
|
|
278
|
+
const pts = pointsBySeries.get(s.key) ?? []
|
|
279
|
+
// A series that measured nothing (the legend-only `getValue: () => null` idiom) draws no
|
|
280
|
+
// path at all, rather than an empty one.
|
|
281
|
+
if (!pts.some((p) => p.__y !== null)) return null
|
|
252
282
|
const scale = scaleFor(s)
|
|
253
283
|
return (
|
|
254
284
|
<LinePath<LinePt<T>>
|
|
255
285
|
key={`line-${s.key}`}
|
|
256
|
-
data={
|
|
286
|
+
data={pts}
|
|
257
287
|
x={(p) => xScale(getX(p.__d)) ?? 0}
|
|
258
|
-
|
|
288
|
+
// Never reached with a null `__y`: d3's line generator calls the position accessors
|
|
289
|
+
// only for points `defined` accepted. The `NaN` floor is a type-level one, and it can
|
|
290
|
+
// never paint at zero the way a `?? 0` would.
|
|
291
|
+
y={(p) => scale(p.__y ?? NaN)}
|
|
292
|
+
// Two absences, one guard. A null value is a documented GAP (`ChartSeries.getValue`),
|
|
293
|
+
// and a non-positive value on a log axis maps to NaN via `scale(p.__y)` — `defined`
|
|
294
|
+
// breaks the line at both instead of interpolating across the hole (a coverage hole
|
|
295
|
+
// reading as a measured straight line) or emitting a NaN path command, which per SVG
|
|
296
|
+
// error handling blanks the ENTIRE polyline from that point on.
|
|
297
|
+
defined={definedOn(scale)}
|
|
259
298
|
stroke={s.color}
|
|
260
299
|
strokeWidth={s.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH}
|
|
261
300
|
strokeDasharray={s.dash === 'dashed' ? VX.dashArray : undefined}
|
|
262
301
|
strokeOpacity={dimOpacity(s) * (s.strokeOpacity ?? 1)}
|
|
263
|
-
curve={
|
|
302
|
+
curve={curveFor(s.curve)}
|
|
264
303
|
/>
|
|
265
304
|
)
|
|
266
305
|
})}
|
|
@@ -274,4 +313,8 @@ function MultiLineMarks<T>({
|
|
|
274
313
|
* Hand-memoized: React Compiler does not process the shipped dist, so the hot MultiLine kind is
|
|
275
314
|
* wrapped in `React.memo` to retain the auto-memoization it had as source (parity with ZonedLine).
|
|
276
315
|
*/
|
|
277
|
-
|
|
316
|
+
const MultiLineMemo = memo(MultiLineInner)
|
|
317
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
318
|
+
// graph of nine identically-named nodes names nothing.
|
|
319
|
+
MultiLineMemo.displayName = 'MultiLine'
|
|
320
|
+
export const MultiLine = MultiLineMemo as typeof MultiLineInner
|
|
@@ -1,12 +1,16 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
1
|
import { AreaStack } from '@visx/shape'
|
|
3
2
|
import { memo, useCallback, useMemo } from 'react'
|
|
3
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
4
|
+
import type { BasaltProps } from '../../common/props'
|
|
4
5
|
import type { CursorResolution } from '../cursor/resolve'
|
|
5
6
|
import { CartesianChart } from '../primitives/CartesianChart'
|
|
6
7
|
import type { AxisConfig, PlotContext } from '../primitives/CartesianChart'
|
|
8
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
9
|
+
import { curveFor } from '../series'
|
|
7
10
|
import type { ChartLegendConfig, ChartSeries } from '../series'
|
|
11
|
+
import { isDev } from '../../common/is-dev'
|
|
8
12
|
|
|
9
|
-
export type StackedAreaProps<T> = {
|
|
13
|
+
export type StackedAreaProps<T> = BasaltProps & {
|
|
10
14
|
data: T[]
|
|
11
15
|
/** Fixed height in pixels, forwarded to `CartesianChart`. Default 240. */
|
|
12
16
|
height?: number
|
|
@@ -18,8 +22,9 @@ export type StackedAreaProps<T> = {
|
|
|
18
22
|
/** Axis config for ticks/format/grid. `domain` defaults to the summed per-point stack total
|
|
19
23
|
* (padded ×1.1, or `autoMaxFloor` if higher) rather than a per-series max — the seam a stacked
|
|
20
24
|
* chart needs, since the plotted quantity is the cumulative band top, not any one series' own
|
|
21
|
-
* value. Pass a fixed tuple or your own function to override.
|
|
22
|
-
|
|
25
|
+
* value. Pass a fixed tuple or your own function to override. No `scale` — stacking sums bar
|
|
26
|
+
* heights directly and a log axis has no additive zero to sum from. */
|
|
27
|
+
y?: Omit<AxisConfig<T>, 'scale'>
|
|
23
28
|
/** Exact number of x ticks. Default: as many as fit. Ignored when `xTickValues` is set. */
|
|
24
29
|
xTicks?: number
|
|
25
30
|
/** Which domain keys get a tick, from the full key list and the resolved plot width. Takes
|
|
@@ -28,6 +33,9 @@ export type StackedAreaProps<T> = {
|
|
|
28
33
|
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
29
34
|
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
30
35
|
formatX?: (key: string) => string
|
|
36
|
+
/** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
|
|
37
|
+
* see `CartesianChartProps.xLabelRotate`. */
|
|
38
|
+
xLabelRotate?: 0 | 45 | 90
|
|
31
39
|
/**
|
|
32
40
|
* How a sibling chart's broadcast cursor key resolves against this chart's points. Default
|
|
33
41
|
* `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
|
|
@@ -41,12 +49,32 @@ export type StackedAreaProps<T> = {
|
|
|
41
49
|
ariaLabel?: string
|
|
42
50
|
/** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
43
51
|
isPending?: boolean
|
|
52
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
53
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
54
|
+
state?: ChartState
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* A stack is only as dense as its sparsest band. A band's value is only meaningful as part of a
|
|
59
|
+
* cumulative total, so a row where ANY visible band reports `null` has no total — every band gaps
|
|
60
|
+
* across it. Reading the missing band as `0` instead would be a positive claim the quantity was
|
|
61
|
+
* measured at zero, which is exactly the absence-as-data lie `ChartSeries.getValue`'s null
|
|
62
|
+
* contract exists to prevent.
|
|
63
|
+
*/
|
|
64
|
+
function rowIsDense<T>(d: T, bands: readonly ChartSeries<T>[]): boolean {
|
|
65
|
+
return bands.every((s) => s.getValue(d) !== null)
|
|
44
66
|
}
|
|
45
67
|
|
|
46
68
|
/**
|
|
47
69
|
* Multi-series stacked-area chart with an optional derived legend (default on) and legend-hover
|
|
48
70
|
* dimming. Each band's fillOpacity is dimmed when a different key is highlighted via the legend.
|
|
49
71
|
*
|
|
72
|
+
* **A stack is only as dense as its sparsest series.** A row where any VISIBLE band is null is
|
|
73
|
+
* dropped from the stack entirely — the bands break across that x, the crosshair reports no
|
|
74
|
+
* cumulative value there, and the axis domain ignores it. Toggling the sparse band off in the
|
|
75
|
+
* legend closes the gap, because density is measured against the visible set. A chart that needs
|
|
76
|
+
* a null band to read as zero must say so in its own `getValue`.
|
|
77
|
+
*
|
|
50
78
|
* Composes `CartesianChart` (`docs/CHARTS-SPEC.md` §2) — margin, scale, grid, axes, cursor, and
|
|
51
79
|
* tooltip are the primitive's job. This file draws only the `AreaStack` bands.
|
|
52
80
|
*
|
|
@@ -57,6 +85,10 @@ export type StackedAreaProps<T> = {
|
|
|
57
85
|
* to restore the original bottom-to-top stacking order for `AreaStack`'s `keys`.
|
|
58
86
|
*/
|
|
59
87
|
function StackedAreaInner<T>(props: StackedAreaProps<T>) {
|
|
88
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
89
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
90
|
+
// swallows into a blank subtree that names nothing.
|
|
91
|
+
assertRequiredProps('StackedArea', props, ['data', 'getX', 'series'])
|
|
60
92
|
const {
|
|
61
93
|
data,
|
|
62
94
|
chartId,
|
|
@@ -66,13 +98,26 @@ function StackedAreaInner<T>(props: StackedAreaProps<T>) {
|
|
|
66
98
|
xTicks,
|
|
67
99
|
xTickValues,
|
|
68
100
|
formatX,
|
|
101
|
+
xLabelRotate,
|
|
69
102
|
cursorResolution,
|
|
70
103
|
height,
|
|
71
104
|
legend,
|
|
72
105
|
ariaLabel,
|
|
73
106
|
isPending,
|
|
107
|
+
state,
|
|
108
|
+
className,
|
|
109
|
+
style,
|
|
74
110
|
} = props
|
|
75
111
|
|
|
112
|
+
// The stack sums band heights via `getValue` totals directly — a log axis has no additive zero
|
|
113
|
+
// to sum from (`docs/CHARTS-SPEC.md`'s null-gap + log contract, mirrored from `Bars`' own guard).
|
|
114
|
+
if (isDev() && (y as { scale?: string } | undefined)?.scale === 'log') {
|
|
115
|
+
throw new Error(
|
|
116
|
+
'StackedArea: cannot use a log axis (y.scale: "log") — the stack sums band heights, ' +
|
|
117
|
+
'and a log axis has no additive zero to sum from.',
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
76
121
|
// The plotted quantity is the CUMULATIVE stack top, not any one series' value — the built-in
|
|
77
122
|
// 'auto' domain (per-series max) would clip a multi-band stack. Skipped when the caller already
|
|
78
123
|
// supplies a fixed tuple or their own domain function.
|
|
@@ -87,6 +132,8 @@ function StackedAreaInner<T>(props: StackedAreaProps<T>) {
|
|
|
87
132
|
domain: (rows: readonly T[], visible: readonly ChartSeries<T>[]) => {
|
|
88
133
|
let maxTotal = 0
|
|
89
134
|
for (const d of rows) {
|
|
135
|
+
// A sparse row is not drawn, so it cannot set the axis top either.
|
|
136
|
+
if (!rowIsDense(d, visible)) continue
|
|
90
137
|
let total = 0
|
|
91
138
|
for (const s of visible) total += s.getValue(d) ?? 0
|
|
92
139
|
if (total > maxTotal) maxTotal = total
|
|
@@ -100,6 +147,10 @@ function StackedAreaInner<T>(props: StackedAreaProps<T>) {
|
|
|
100
147
|
// tracking — not at the band's own raw value, which sits somewhere inside the fill.
|
|
101
148
|
const stackedCursorValue = useCallback(
|
|
102
149
|
(d: T, s: ChartSeries<T>, visible: readonly ChartSeries<T>[]): number | null => {
|
|
150
|
+
// No total on a sparse row — the bands gap there, so a dot would sit on nothing. The
|
|
151
|
+
// per-band tooltip rows keep skipping their own nulls (`deriveTooltipRows`), so a row the
|
|
152
|
+
// stack cannot draw never contributes a value anywhere.
|
|
153
|
+
if (!rowIsDense(d, visible)) return null
|
|
103
154
|
let total = 0
|
|
104
155
|
// `visible` arrives top-to-bottom (the `series.toReversed()` handed to the primitive);
|
|
105
156
|
// stacking accumulates bottom-up.
|
|
@@ -128,11 +179,15 @@ function StackedAreaInner<T>(props: StackedAreaProps<T>) {
|
|
|
128
179
|
{...(xTicks !== undefined && { xTicks })}
|
|
129
180
|
{...(xTickValues !== undefined && { xTickValues })}
|
|
130
181
|
{...(formatX !== undefined && { formatX })}
|
|
182
|
+
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
131
183
|
{...(cursorResolution !== undefined && { cursorResolution })}
|
|
132
184
|
{...(height !== undefined && { height })}
|
|
133
185
|
{...(legend !== undefined && { legend })}
|
|
134
186
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
135
187
|
{...(isPending !== undefined && { isPending })}
|
|
188
|
+
{...(state !== undefined && { state })}
|
|
189
|
+
{...(className !== undefined && { className })}
|
|
190
|
+
{...(style !== undefined && { style })}
|
|
136
191
|
>
|
|
137
192
|
{(ctx) => <StackedAreaMarks getX={getX} ctx={ctx} />}
|
|
138
193
|
</CartesianChart>
|
|
@@ -159,6 +214,14 @@ function StackedAreaMarks<T>({ getX, ctx }: { getX: (d: T) => string; ctx: PlotC
|
|
|
159
214
|
// `AreaStack` wants a mutable array; `ctx.data` is readonly. Copy once per data change.
|
|
160
215
|
const rows = useMemo(() => [...ctx.data], [ctx.data])
|
|
161
216
|
|
|
217
|
+
// `AreaStack` draws every band from ONE curve — the bands share their boundaries, so two curves
|
|
218
|
+
// would leave gaps and overlaps between them. `visible` is in `reversedSeries` order (top band
|
|
219
|
+
// first), so this resolves to the TOPMOST VISIBLE band that declares a `curve` — the last such
|
|
220
|
+
// entry in the caller's own `series` array. A band declaring none is skipped rather than read as
|
|
221
|
+
// the monotone default, and a HIDDEN one is never consulted, so a legend toggle can hand the
|
|
222
|
+
// stack to the next declarer down. `series.curve.test.tsx` pins all four halves of that.
|
|
223
|
+
const curve = curveFor(visible.find((s) => s.curve !== undefined)?.curve)
|
|
224
|
+
|
|
162
225
|
return (
|
|
163
226
|
<AreaStack<T, string>
|
|
164
227
|
data={rows}
|
|
@@ -166,8 +229,12 @@ function StackedAreaMarks<T>({ getX, ctx }: { getX: (d: T) => string; ctx: PlotC
|
|
|
166
229
|
x={(d) => xScale(getX(d.data)) ?? 0}
|
|
167
230
|
y0={(d) => yScale(d[0]) ?? 0}
|
|
168
231
|
y1={(d) => yScale(d[1]) ?? 0}
|
|
232
|
+
// d3's stack layout needs a number per cell, so a null still enters the layout as 0 — but
|
|
233
|
+
// `defined` keeps that cell out of every band's PATH, so the zero is never drawn. Without it
|
|
234
|
+
// a missing band reads as a measured zero and the bands above it slide down onto it.
|
|
169
235
|
value={(d, key) => seriesByKey.get(key)?.getValue(d) ?? 0}
|
|
170
|
-
|
|
236
|
+
defined={(d) => rowIsDense(d.data, visible)}
|
|
237
|
+
curve={curve}
|
|
171
238
|
>
|
|
172
239
|
{({ stacks, path }) =>
|
|
173
240
|
stacks.map((stack) => (
|
|
@@ -189,4 +256,8 @@ function StackedAreaMarks<T>({ getX, ctx }: { getX: (d: T) => string; ctx: PlotC
|
|
|
189
256
|
* hot stacked-area kind in `React.memo` to retain the auto-memoization it had as source
|
|
190
257
|
* (parity with ZonedLine / Bars / MultiLine).
|
|
191
258
|
*/
|
|
192
|
-
|
|
259
|
+
const StackedAreaMemo = memo(StackedAreaInner)
|
|
260
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
261
|
+
// graph of nine identically-named nodes names nothing.
|
|
262
|
+
StackedAreaMemo.displayName = 'StackedArea'
|
|
263
|
+
export const StackedArea = StackedAreaMemo as typeof StackedAreaInner
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
1
|
import { AreaClosed, LinePath } from '@visx/shape'
|
|
3
2
|
import { Threshold } from '@visx/threshold'
|
|
4
3
|
import { memo, useMemo } from 'react'
|
|
4
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
5
|
+
import type { BasaltProps } from '../../common/props'
|
|
5
6
|
import type { CursorResolution } from '../cursor/resolve'
|
|
6
7
|
import { AreaGradient, areaFillUrl } from '../primitives/AreaGradient'
|
|
7
8
|
import type { CartesianTooltipConfig, AxisConfig, PlotContext } from '../primitives/CartesianChart'
|
|
8
9
|
import { CartesianChart } from '../primitives/CartesianChart'
|
|
9
10
|
import type { XZoneSpec } from '../primitives/XZoneRects'
|
|
10
11
|
import type { ZoneSpec } from '../primitives/ZoneRects'
|
|
11
|
-
import {
|
|
12
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
13
|
+
import { curveFor, definedOn, LINE_OVERLAY_STROKE_WIDTH, toPlotPoint } from '../series'
|
|
12
14
|
import type { ChartLegendConfig, ChartSeries } from '../series'
|
|
13
15
|
import { VX } from '../../tokens'
|
|
14
16
|
|
|
15
|
-
/** @deprecated Use ZoneSpec from primitives/ZoneRects. Kept as an alias for back-compat. */
|
|
16
|
-
export type ZonedLineZone = ZoneSpec
|
|
17
|
-
|
|
18
17
|
/** Semi-transparent fill above (or below) a threshold value, tracking the line. */
|
|
19
18
|
export type ZonedLineThreshold = {
|
|
20
19
|
value: number
|
|
@@ -30,7 +29,7 @@ export type ZonedLineRefLine = {
|
|
|
30
29
|
dashed?: boolean
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
export type ZonedLineProps<T> = {
|
|
32
|
+
export type ZonedLineProps<T> = BasaltProps & {
|
|
34
33
|
data: T[]
|
|
35
34
|
/** Fixed height in pixels, forwarded to `CartesianChart`. Default 240. */
|
|
36
35
|
height?: number
|
|
@@ -44,7 +43,7 @@ export type ZonedLineProps<T> = {
|
|
|
44
43
|
/** Y-axis. Collapses the old `yDomain` / `yAutoMaxFloor` / `yAutoMinCeil` / `yAutoPad` /
|
|
45
44
|
* `numTicksY` / `formatYTick` prop soup into one object. */
|
|
46
45
|
y?: AxisConfig<T>
|
|
47
|
-
zones?:
|
|
46
|
+
zones?: ZoneSpec[]
|
|
48
47
|
/** Vertical x-range overlays (time windows), rendered behind the line. Bounds are `getX`
|
|
49
48
|
* domain keys. */
|
|
50
49
|
xZones?: XZoneSpec[]
|
|
@@ -58,6 +57,9 @@ export type ZonedLineProps<T> = {
|
|
|
58
57
|
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
59
58
|
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
60
59
|
formatX?: (key: string) => string
|
|
60
|
+
/** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
|
|
61
|
+
* see `CartesianChartProps.xLabelRotate`. */
|
|
62
|
+
xLabelRotate?: 0 | 45 | 90
|
|
61
63
|
/**
|
|
62
64
|
* How a sibling chart's broadcast cursor key resolves against this chart's points. Default
|
|
63
65
|
* `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
|
|
@@ -81,21 +83,22 @@ export type ZonedLineProps<T> = {
|
|
|
81
83
|
ariaLabel?: string
|
|
82
84
|
/** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
83
85
|
isPending?: boolean
|
|
86
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
87
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
88
|
+
state?: ChartState
|
|
84
89
|
}
|
|
85
90
|
|
|
86
|
-
type
|
|
91
|
+
type Pt<T> = T & { __y: number | null }
|
|
87
92
|
|
|
88
|
-
/**
|
|
89
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Every row, in x order, with `__y: null` where the series reports no value. The null row STAYS in
|
|
95
|
+
* the array — see `MultiLine`'s `seriesPoints`: dropping it makes `LinePath`/`AreaClosed`/
|
|
96
|
+
* `Threshold` join straight across a coverage hole, drawing a measurement that was never taken.
|
|
97
|
+
* The shared `defined` guard below is what turns it back into a gap.
|
|
98
|
+
*/
|
|
99
|
+
function linePoints<T>(series: ChartSeries<T> | undefined, data: readonly T[]): Pt<T>[] {
|
|
90
100
|
if (!series) return []
|
|
91
|
-
|
|
92
|
-
for (const d of data) {
|
|
93
|
-
const y = series.getValue(d)
|
|
94
|
-
if (y !== null && y !== undefined && !Number.isNaN(y)) {
|
|
95
|
-
out.push(Object.assign({}, d, { __y: y }) as Valid<T>)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return out
|
|
101
|
+
return data.map((d) => Object.assign({}, d, { __y: toPlotPoint(series.getValue(d)) }) as Pt<T>)
|
|
99
102
|
}
|
|
100
103
|
|
|
101
104
|
/**
|
|
@@ -107,11 +110,15 @@ function validPoints<T>(series: ChartSeries<T> | undefined, data: readonly T[]):
|
|
|
107
110
|
* and the derived tooltip — this kind draws ONLY the marks (thresholds, area fill, and the line).
|
|
108
111
|
* Single-series, so the legend is optional in practice but present by default.
|
|
109
112
|
*
|
|
110
|
-
* X-axis is built from the full `data` array so the calendar is preserved even
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
+
* X-axis is built from the full `data` array so the calendar is preserved even when the series has
|
|
114
|
+
* nulls; the line, the area fill and the threshold fills all BREAK at a null point, leaving a real
|
|
115
|
+
* gap rather than interpolating across it.
|
|
113
116
|
*/
|
|
114
117
|
function ZonedLineInner<T>(props: ZonedLineProps<T>) {
|
|
118
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
119
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
120
|
+
// swallows into a blank subtree that names nothing.
|
|
121
|
+
assertRequiredProps('ZonedLine', props, ['data', 'getX', 'series'])
|
|
115
122
|
const {
|
|
116
123
|
data,
|
|
117
124
|
chartId,
|
|
@@ -125,6 +132,7 @@ function ZonedLineInner<T>(props: ZonedLineProps<T>) {
|
|
|
125
132
|
xTicks,
|
|
126
133
|
xTickValues,
|
|
127
134
|
formatX,
|
|
135
|
+
xLabelRotate,
|
|
128
136
|
cursorResolution,
|
|
129
137
|
tooltip,
|
|
130
138
|
areaFill,
|
|
@@ -132,6 +140,9 @@ function ZonedLineInner<T>(props: ZonedLineProps<T>) {
|
|
|
132
140
|
legend,
|
|
133
141
|
ariaLabel,
|
|
134
142
|
isPending,
|
|
143
|
+
state,
|
|
144
|
+
className,
|
|
145
|
+
style,
|
|
135
146
|
} = props
|
|
136
147
|
|
|
137
148
|
// Default the line overlay to the redesign's 1.9px stroke (docs/DESIGN-SPEC.md §5) — applied
|
|
@@ -158,12 +169,16 @@ function ZonedLineInner<T>(props: ZonedLineProps<T>) {
|
|
|
158
169
|
{...(xTicks !== undefined && { xTicks })}
|
|
159
170
|
{...(xTickValues !== undefined && { xTickValues })}
|
|
160
171
|
{...(formatX !== undefined && { formatX })}
|
|
172
|
+
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
161
173
|
{...(cursorResolution !== undefined && { cursorResolution })}
|
|
162
174
|
{...(tooltip !== undefined && { tooltip })}
|
|
163
175
|
{...(height !== undefined && { height })}
|
|
164
176
|
{...(legend !== undefined && { legend })}
|
|
165
177
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
166
178
|
{...(isPending !== undefined && { isPending })}
|
|
179
|
+
{...(state !== undefined && { state })}
|
|
180
|
+
{...(className !== undefined && { className })}
|
|
181
|
+
{...(style !== undefined && { style })}
|
|
167
182
|
>
|
|
168
183
|
{(ctx: PlotContext<T>) => (
|
|
169
184
|
<ZonedLineMarks
|
|
@@ -197,7 +212,22 @@ function ZonedLineMarks<T>({
|
|
|
197
212
|
const primary = visible[0]
|
|
198
213
|
// Memoized: the shared cursor re-renders every chart on every pointer frame, and this both
|
|
199
214
|
// walks the full series and clones an object per point.
|
|
200
|
-
const
|
|
215
|
+
const pts = useMemo(() => linePoints(primary, data), [primary, data])
|
|
216
|
+
|
|
217
|
+
// ONE guard for all three shapes below, covering two absences. A null value is a documented GAP
|
|
218
|
+
// (`ChartSeries.getValue`), and a non-positive value on a log axis maps to NaN via `yScale` —
|
|
219
|
+
// without `defined` the first is drawn as an interpolated straight line across a coverage hole
|
|
220
|
+
// and the second emits a NaN path command, which per SVG error handling blanks the ENTIRE path
|
|
221
|
+
// from that point on.
|
|
222
|
+
const defined = definedOn(yScale)
|
|
223
|
+
// ONE curve for all three shapes: the threshold band, the area fill and the line are the SAME
|
|
224
|
+
// series drawn three ways, so a step line over a monotone fill would be two different readings
|
|
225
|
+
// of one measurement.
|
|
226
|
+
const curve = curveFor(primary?.curve)
|
|
227
|
+
// Never reached with a null `__y`: d3's line/area generators call the position accessors only
|
|
228
|
+
// for points `defined` accepted. The `NaN` floor is a type-level one, and it can never paint at
|
|
229
|
+
// zero the way a `?? 0` would.
|
|
230
|
+
const yOf = (d: Pt<T>) => yScale(d.__y ?? NaN)
|
|
201
231
|
|
|
202
232
|
// Area is opt-in: pass a color token to get a cohesive single-hue fill under the line.
|
|
203
233
|
// (A neutral fill under the neutral line just reads as grey haze, so there is no default-on.)
|
|
@@ -208,16 +238,17 @@ function ZonedLineMarks<T>({
|
|
|
208
238
|
return (
|
|
209
239
|
<>
|
|
210
240
|
{thresholds.map((t, i) => (
|
|
211
|
-
<Threshold<
|
|
241
|
+
<Threshold<Pt<T>>
|
|
212
242
|
key={`thr-${i}`}
|
|
213
243
|
id={`${chartId}-thr-${i}`}
|
|
214
|
-
data={
|
|
244
|
+
data={pts}
|
|
245
|
+
defined={defined}
|
|
215
246
|
x={(d) => xScale(getX(d)) ?? 0}
|
|
216
247
|
y0={() => yScale(t.value)}
|
|
217
|
-
y1={
|
|
248
|
+
y1={yOf}
|
|
218
249
|
clipAboveTo={0}
|
|
219
250
|
clipBelowTo={yMax}
|
|
220
|
-
curve={
|
|
251
|
+
curve={curve}
|
|
221
252
|
belowAreaProps={{ fill: t.side === 'above' ? t.fill : 'transparent' }}
|
|
222
253
|
aboveAreaProps={{ fill: t.side === 'below' ? t.fill : 'transparent' }}
|
|
223
254
|
/>
|
|
@@ -228,27 +259,29 @@ function ZonedLineMarks<T>({
|
|
|
228
259
|
<defs>
|
|
229
260
|
<AreaGradient id={areaId} color={areaColor} />
|
|
230
261
|
</defs>
|
|
231
|
-
<AreaClosed<
|
|
232
|
-
data={
|
|
262
|
+
<AreaClosed<Pt<T>>
|
|
263
|
+
data={pts}
|
|
264
|
+
defined={defined}
|
|
233
265
|
x={(d) => xScale(getX(d)) ?? 0}
|
|
234
|
-
y={
|
|
266
|
+
y={yOf}
|
|
235
267
|
yScale={yScale}
|
|
236
|
-
curve={
|
|
268
|
+
curve={curve}
|
|
237
269
|
fill={areaFillUrl(areaId)}
|
|
238
270
|
/>
|
|
239
271
|
</>
|
|
240
272
|
)}
|
|
241
273
|
|
|
242
274
|
{primary && (
|
|
243
|
-
<LinePath<
|
|
244
|
-
data={
|
|
275
|
+
<LinePath<Pt<T>>
|
|
276
|
+
data={pts}
|
|
277
|
+
defined={defined}
|
|
245
278
|
x={(d) => xScale(getX(d)) ?? 0}
|
|
246
|
-
y={
|
|
279
|
+
y={yOf}
|
|
247
280
|
stroke={primary.color}
|
|
248
281
|
strokeWidth={primary.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH}
|
|
249
282
|
strokeDasharray={primary.dash === 'dashed' ? VX.dashArray : undefined}
|
|
250
283
|
strokeOpacity={primary.strokeOpacity ?? 1}
|
|
251
|
-
curve={
|
|
284
|
+
curve={curve}
|
|
252
285
|
/>
|
|
253
286
|
)}
|
|
254
287
|
</>
|
|
@@ -259,4 +292,8 @@ function ZonedLineMarks<T>({
|
|
|
259
292
|
* Hand-memoized: React Compiler does not process the shipped dist, so the hot ZonedLine kind is
|
|
260
293
|
* wrapped in `React.memo` to retain the auto-memoization it had as source (parity with Bars).
|
|
261
294
|
*/
|
|
262
|
-
|
|
295
|
+
const ZonedLineMemo = memo(ZonedLineInner)
|
|
296
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
297
|
+
// graph of nine identically-named nodes names nothing.
|
|
298
|
+
ZonedLineMemo.displayName = 'ZonedLine'
|
|
299
|
+
export const ZonedLine = ZonedLineMemo as typeof ZonedLineInner
|