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
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
1
|
import { LinePath } from '@visx/shape'
|
|
3
2
|
import { memo, 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 { VX } from '../../tokens'
|
|
6
7
|
import type { ChartMargin } from '../../tokens'
|
|
7
8
|
import { CartesianChart } from '../primitives/CartesianChart'
|
|
8
9
|
import type { AxisConfig, CartesianTooltipConfig, PlotContext } from '../primitives/CartesianChart'
|
|
9
10
|
import type { ZoneSpec } from '../primitives/ZoneRects'
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
11
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
12
|
+
import { curveFor, LINE_OVERLAY_STROKE_WIDTH } from '../series'
|
|
13
|
+
import type { ChartLegendConfig, ChartSeries, SeriesCurve } from '../series'
|
|
12
14
|
import { padAutoLower } from '../utils/domain'
|
|
15
|
+
import { isDev } from '../../common/is-dev'
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* `T = unknown` is load-bearing, not a shortcut: it keeps a consumer's existing
|
|
@@ -48,11 +51,10 @@ export type BarsLine<T = unknown> = {
|
|
|
48
51
|
tooltip?: boolean
|
|
49
52
|
/** Dims the plotted stroke AND the legend swatch, never the tooltip row (`SeriesStyle.strokeOpacity`). */
|
|
50
53
|
strokeOpacity?: number
|
|
54
|
+
/** Interpolation for this overlay. Default `'monotone'` — see `SeriesCurve`. */
|
|
55
|
+
curve?: SeriesCurve
|
|
51
56
|
}
|
|
52
57
|
|
|
53
|
-
/** @deprecated Use ZoneSpec from primitives/ZoneRects. Kept as an alias. */
|
|
54
|
-
export type BarsZone = ZoneSpec
|
|
55
|
-
|
|
56
58
|
export type BarsRefLine = {
|
|
57
59
|
value: number
|
|
58
60
|
color: string
|
|
@@ -61,7 +63,7 @@ export type BarsRefLine = {
|
|
|
61
63
|
axisSide?: 'left' | 'right'
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
export type BarsProps<T> = {
|
|
66
|
+
export type BarsProps<T> = BasaltProps & {
|
|
65
67
|
data: T[]
|
|
66
68
|
/** Fixed height in pixels, forwarded to `CartesianChart`. Default 240. */
|
|
67
69
|
height?: number
|
|
@@ -79,7 +81,7 @@ export type BarsProps<T> = {
|
|
|
79
81
|
lines?: BarsLine<T>[]
|
|
80
82
|
|
|
81
83
|
/** Horizontal value-range overlays (target zones, optimal bands). */
|
|
82
|
-
zones?:
|
|
84
|
+
zones?: ZoneSpec[]
|
|
83
85
|
/** Dashed/solid horizontal reference lines. */
|
|
84
86
|
refLines?: BarsRefLine[]
|
|
85
87
|
|
|
@@ -115,6 +117,9 @@ export type BarsProps<T> = {
|
|
|
115
117
|
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
116
118
|
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
117
119
|
formatX?: (key: string) => string
|
|
120
|
+
/** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
|
|
121
|
+
* see `CartesianChartProps.xLabelRotate`. */
|
|
122
|
+
xLabelRotate?: 0 | 45 | 90
|
|
118
123
|
/**
|
|
119
124
|
* How a sibling chart's broadcast cursor key resolves against this chart's points. Default
|
|
120
125
|
* `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
|
|
@@ -133,6 +138,9 @@ export type BarsProps<T> = {
|
|
|
133
138
|
ariaLabel?: string
|
|
134
139
|
/** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
135
140
|
isPending?: boolean
|
|
141
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
142
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
143
|
+
state?: ChartState
|
|
136
144
|
}
|
|
137
145
|
|
|
138
146
|
/**
|
|
@@ -148,6 +156,10 @@ export type BarsProps<T> = {
|
|
|
148
156
|
* with per-bar nulls (nulls become visual gaps, not domain holes).
|
|
149
157
|
*/
|
|
150
158
|
function BarsInner<T>(props: BarsProps<T>) {
|
|
159
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
160
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
161
|
+
// swallows into a blank subtree that names nothing.
|
|
162
|
+
assertRequiredProps('Bars', props, ['data', 'getX', 'getValue', 'positiveBars'])
|
|
151
163
|
const {
|
|
152
164
|
data,
|
|
153
165
|
height,
|
|
@@ -167,14 +179,28 @@ function BarsInner<T>(props: BarsProps<T>) {
|
|
|
167
179
|
xTicks,
|
|
168
180
|
xTickValues,
|
|
169
181
|
formatX,
|
|
182
|
+
xLabelRotate,
|
|
170
183
|
cursorResolution,
|
|
171
184
|
tooltip,
|
|
172
185
|
margin,
|
|
173
186
|
legend,
|
|
174
187
|
ariaLabel,
|
|
175
188
|
isPending,
|
|
189
|
+
state,
|
|
190
|
+
className,
|
|
191
|
+
style,
|
|
176
192
|
} = props
|
|
177
193
|
|
|
194
|
+
// Stacking sums bar heights via `posOffset`/`negOffset` in yScale units directly — a log axis
|
|
195
|
+
// has no additive zero, so a stacked total is meaningless on it (`docs/CHARTS-SPEC.md`'s null-gap
|
|
196
|
+
// + log contract). `grouped` bars only ever read one bar's own scaled value, so they're unaffected.
|
|
197
|
+
if (isDev() && barLayout === 'stacked' && y?.scale === 'log') {
|
|
198
|
+
throw new Error(
|
|
199
|
+
'Bars: stacked bars cannot use a log axis (y.scale: "log") — the stack sums bar heights, ' +
|
|
200
|
+
"and a log axis has no additive zero to sum from. Use barLayout: 'grouped' instead.",
|
|
201
|
+
)
|
|
202
|
+
}
|
|
203
|
+
|
|
178
204
|
const barSeries = useMemo<ChartSeries<T>[]>(
|
|
179
205
|
() =>
|
|
180
206
|
[...positiveBars, ...negativeBars].map((b) => ({
|
|
@@ -287,6 +313,7 @@ function BarsInner<T>(props: BarsProps<T>) {
|
|
|
287
313
|
{...(xTicks !== undefined && { xTicks })}
|
|
288
314
|
{...(xTickValues !== undefined && { xTickValues })}
|
|
289
315
|
{...(formatX !== undefined && { formatX })}
|
|
316
|
+
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
290
317
|
{...(cursorResolution !== undefined && { cursorResolution })}
|
|
291
318
|
{...(zones !== undefined && { zones })}
|
|
292
319
|
{...(mappedRefLines !== undefined && { refLines: mappedRefLines })}
|
|
@@ -296,6 +323,9 @@ function BarsInner<T>(props: BarsProps<T>) {
|
|
|
296
323
|
{...(margin !== undefined && { margin })}
|
|
297
324
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
298
325
|
{...(isPending !== undefined && { isPending })}
|
|
326
|
+
{...(state !== undefined && { state })}
|
|
327
|
+
{...(className !== undefined && { className })}
|
|
328
|
+
{...(style !== undefined && { style })}
|
|
299
329
|
>
|
|
300
330
|
{(ctx) => (
|
|
301
331
|
<BarsMarks
|
|
@@ -368,14 +398,27 @@ function BarsMarks<T>({
|
|
|
368
398
|
const scaleForSide = (side: 'left' | 'right' | undefined) =>
|
|
369
399
|
side === 'right' && y2Scale ? y2Scale : yScale
|
|
370
400
|
const dim = (key: string) => (highlighted === null || highlighted === key ? 1 : 0.15)
|
|
401
|
+
// The y a bar grows FROM. `scale(0)` is `-Infinity` on a log axis — which has no zero — so
|
|
402
|
+
// every grouped bar's height came out NaN and the bars silently vanished; the fallback is the
|
|
403
|
+
// axis' own domain floor, which the log-domain law keeps positive. On a linear axis the same
|
|
404
|
+
// expression still resolves to `scale(0)` for any domain reaching zero, and pins the bar to
|
|
405
|
+
// the visible floor rather than to a zero drawn off the bottom of the plot when it does not.
|
|
406
|
+
const baselineFor = (scale: typeof yScale) => {
|
|
407
|
+
const floor = scale.domain()[0] ?? 0
|
|
408
|
+
const at = scale(Math.max(floor, 0))
|
|
409
|
+
return Number.isFinite(at) ? at : scale(floor)
|
|
410
|
+
}
|
|
371
411
|
|
|
372
412
|
const groupWidth = Math.max((xMax / Math.max(rows.length, 1)) * barWidthRatio, 2)
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
413
|
+
// Tiled across the bars that are actually DRAWN. Derived from the full `positiveBars` instead,
|
|
414
|
+
// a legend toggle left a hole in the slot where the hidden bar used to sit and never re-tiled
|
|
415
|
+
// the survivors across the same width.
|
|
416
|
+
const groupedBars =
|
|
417
|
+
barLayout === 'grouped' ? positiveBars.filter((b) => !hidden.has(b.key)) : []
|
|
418
|
+
const totalWeight = groupedBars.reduce((s, b) => s + (b.weight ?? 1), 0) || 1
|
|
419
|
+
const groupedBarWidths = groupedBars.map((b) =>
|
|
420
|
+
Math.max(groupWidth * ((b.weight ?? 1) / totalWeight), 1),
|
|
421
|
+
)
|
|
379
422
|
const groupedBarOffsets: number[] = []
|
|
380
423
|
let cursor = 0
|
|
381
424
|
for (const w of groupedBarWidths) {
|
|
@@ -428,19 +471,20 @@ function BarsMarks<T>({
|
|
|
428
471
|
negOffset = top
|
|
429
472
|
}
|
|
430
473
|
} else {
|
|
431
|
-
|
|
432
|
-
if (hidden.has(b.key)) return
|
|
474
|
+
groupedBars.forEach((b, i) => {
|
|
433
475
|
const v = getValue(d, b.key)
|
|
434
476
|
if (v === null || Number.isNaN(v) || v <= 0) return
|
|
435
477
|
const scale = scaleForSide(b.axisSide)
|
|
436
478
|
const yTop = scale(v)
|
|
437
|
-
const yBottom = scale
|
|
479
|
+
const yBottom = baselineFor(scale)
|
|
438
480
|
rects.push({
|
|
439
481
|
key: `${getX(d)}-${b.key}`,
|
|
440
482
|
x: groupLeft + (groupedBarOffsets[i] ?? 0),
|
|
441
483
|
y: yTop,
|
|
442
484
|
width: groupedBarWidths[i] ?? 0,
|
|
443
|
-
|
|
485
|
+
// A value below a caller-pinned domain floor sits under the baseline; SVG rejects a
|
|
486
|
+
// negative height outright, so it clamps to nothing drawn.
|
|
487
|
+
height: Math.max(yBottom - yTop, 0),
|
|
444
488
|
fill: b.color,
|
|
445
489
|
fillOpacity: (barOpacity?.(d, b.key) ?? 0.85) * dim(b.key),
|
|
446
490
|
})
|
|
@@ -521,7 +565,7 @@ function BarsMarks<T>({
|
|
|
521
565
|
strokeWidth={ln.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH}
|
|
522
566
|
strokeDasharray={ln.dashed ? VX.dashArray : undefined}
|
|
523
567
|
strokeOpacity={dim(ln.key) * (ln.strokeOpacity ?? 1)}
|
|
524
|
-
curve={
|
|
568
|
+
curve={curveFor(ln.curve)}
|
|
525
569
|
/>
|
|
526
570
|
)
|
|
527
571
|
})}
|
|
@@ -537,4 +581,8 @@ function BarsMarks<T>({
|
|
|
537
581
|
* Hand-memoized: React Compiler does not process the shipped dist, so we wrap the
|
|
538
582
|
* hot bars kind in `React.memo` to retain the auto-memoization it had as source.
|
|
539
583
|
*/
|
|
540
|
-
|
|
584
|
+
const BarsMemo = memo(BarsInner)
|
|
585
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
586
|
+
// graph of nine identically-named nodes names nothing.
|
|
587
|
+
BarsMemo.displayName = 'Bars'
|
|
588
|
+
export const Bars = BarsMemo as typeof BarsInner
|
|
@@ -2,8 +2,11 @@ import { Group } from '@visx/group'
|
|
|
2
2
|
import { Pie } from '@visx/shape'
|
|
3
3
|
import { memo, useMemo, useState } from 'react'
|
|
4
4
|
import type { PointerEvent, ReactNode } from 'react'
|
|
5
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
6
|
+
import type { BasaltProps } from '../../common/props'
|
|
5
7
|
import { ChartTooltipFloat, TooltipBody, TooltipRow } from '../primitives/ChartTooltip'
|
|
6
8
|
import { ChartFrame } from '../primitives/ChartFrame'
|
|
9
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
7
10
|
import { VX } from '../../tokens'
|
|
8
11
|
import type { SeriesStyle } from '../series'
|
|
9
12
|
import type { SeriesKey } from '../../register'
|
|
@@ -15,7 +18,7 @@ import type { SeriesKey } from '../../register'
|
|
|
15
18
|
*/
|
|
16
19
|
export type DonutDatum<K extends string = SeriesKey> = { key: K; value: number }
|
|
17
20
|
|
|
18
|
-
export type DonutProps<K extends string = SeriesKey> = {
|
|
21
|
+
export type DonutProps<K extends string = SeriesKey> = BasaltProps & {
|
|
19
22
|
data: DonutDatum<K>[]
|
|
20
23
|
/** Fixed height in pixels, forwarded to the internal `ChartFrame`. Default 240. */
|
|
21
24
|
height?: number
|
|
@@ -54,6 +57,9 @@ export type DonutProps<K extends string = SeriesKey> = {
|
|
|
54
57
|
ariaLabel?: string
|
|
55
58
|
/** Forwarded to `ChartFrame` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
56
59
|
isPending?: boolean
|
|
60
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
61
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
62
|
+
state?: ChartState
|
|
57
63
|
}
|
|
58
64
|
|
|
59
65
|
/**
|
|
@@ -66,7 +72,21 @@ export type DonutProps<K extends string = SeriesKey> = {
|
|
|
66
72
|
* category sync (donut ↔ bar, via a generalized key) is a distinct, deliberately deferred feature.
|
|
67
73
|
*/
|
|
68
74
|
function DonutInner<K extends string = SeriesKey>(props: DonutProps<K>) {
|
|
69
|
-
|
|
75
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
76
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
77
|
+
// swallows into a blank subtree that names nothing.
|
|
78
|
+
assertRequiredProps('Donut', props, ['data', 'colorForKey'])
|
|
79
|
+
const {
|
|
80
|
+
data,
|
|
81
|
+
height,
|
|
82
|
+
colorForKey,
|
|
83
|
+
seriesLabel = (k) => k,
|
|
84
|
+
ariaLabel,
|
|
85
|
+
isPending,
|
|
86
|
+
state,
|
|
87
|
+
className,
|
|
88
|
+
style,
|
|
89
|
+
} = props
|
|
70
90
|
|
|
71
91
|
const series: SeriesStyle[] = data.map((d) => ({
|
|
72
92
|
key: d.key,
|
|
@@ -81,6 +101,9 @@ function DonutInner<K extends string = SeriesKey>(props: DonutProps<K>) {
|
|
|
81
101
|
{...(height !== undefined && { height })}
|
|
82
102
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
83
103
|
{...(isPending !== undefined && { isPending })}
|
|
104
|
+
{...(state !== undefined && { state })}
|
|
105
|
+
{...(className !== undefined && { className })}
|
|
106
|
+
{...(style !== undefined && { style })}
|
|
84
107
|
>
|
|
85
108
|
{(plot) => <DonutPlot {...props} plot={plot} />}
|
|
86
109
|
</ChartFrame>
|
|
@@ -245,4 +268,8 @@ function DonutPlot<K extends string = SeriesKey>(props: DonutPlotProps<K>) {
|
|
|
245
268
|
* Hand-memoized: React Compiler does not process the shipped dist, so we wrap the
|
|
246
269
|
* hot donut kind in `React.memo` to retain the auto-memoization it had as source.
|
|
247
270
|
*/
|
|
248
|
-
|
|
271
|
+
const DonutMemo = memo(DonutInner)
|
|
272
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
273
|
+
// graph of nine identically-named nodes names nothing.
|
|
274
|
+
DonutMemo.displayName = 'Donut'
|
|
275
|
+
export const Donut = DonutMemo as typeof DonutInner
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
1
|
import { GridRows } from '@visx/grid'
|
|
3
2
|
import { Group } from '@visx/group'
|
|
4
3
|
import { scaleLinear, scalePoint } from '@visx/scale'
|
|
@@ -6,6 +5,8 @@ import { Bar, LinePath } from '@visx/shape'
|
|
|
6
5
|
import { Threshold } from '@visx/threshold'
|
|
7
6
|
import { memo, useMemo, useRef } from 'react'
|
|
8
7
|
import type { ReactNode } from 'react'
|
|
8
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
9
|
+
import type { BasaltProps } from '../../common/props'
|
|
9
10
|
import { AxisBottomDate, AxisLeftNumeric } from '../primitives/Axes'
|
|
10
11
|
import {
|
|
11
12
|
ChartTooltipFloat,
|
|
@@ -18,16 +19,17 @@ import { Crosshair, SeriesDot } from '../primitives/Crosshair'
|
|
|
18
19
|
import { HoverOverlay } from '../primitives/HoverOverlay'
|
|
19
20
|
import { ZoneRects } from '../primitives/ZoneRects'
|
|
20
21
|
import type { ZoneSpec } from '../primitives/ZoneRects'
|
|
22
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
21
23
|
import type { CursorResolution } from '../cursor/resolve'
|
|
22
24
|
import { useChartCursor } from '../hooks/useChartCursor'
|
|
23
25
|
import { autoMargin, probeAxisLabels } from '../layout/auto-margin'
|
|
24
|
-
import { deriveTooltipRows, LINE_OVERLAY_STROKE_WIDTH } from '../series'
|
|
26
|
+
import { curveFor, deriveTooltipRows, LINE_OVERLAY_STROKE_WIDTH } from '../series'
|
|
25
27
|
import type { ChartLegendConfig, ChartSeries, SeriesStyle } from '../series'
|
|
26
28
|
import { VX } from '../../tokens'
|
|
27
29
|
import { fmtAxisDate } from '../utils/format'
|
|
28
|
-
import { smartTicks } from '../utils/ticks'
|
|
30
|
+
import { smartTicks, xLabelPxFor } from '../utils/ticks'
|
|
29
31
|
|
|
30
|
-
export type DualPanelProps<T> = {
|
|
32
|
+
export type DualPanelProps<T> = BasaltProps & {
|
|
31
33
|
data: T[]
|
|
32
34
|
/** Fixed height in pixels, forwarded to the internal `ChartFrame`. Default 240. */
|
|
33
35
|
height?: number
|
|
@@ -47,8 +49,9 @@ export type DualPanelProps<T> = {
|
|
|
47
49
|
series: ChartSeries<T>[]
|
|
48
50
|
/** Top-pane y-domain. Default 'auto' (computed from all top lines, padded). */
|
|
49
51
|
topYDomain?: [number, number] | 'auto'
|
|
50
|
-
/** Shade the band between two top lines (by key)
|
|
51
|
-
|
|
52
|
+
/** Shade the band between two top lines (by key). `aboveFill` colors the side where `to` runs
|
|
53
|
+
* above `from` (e.g. a "bad" red) — omitted, both sides share `fill` (today's behaviour). */
|
|
54
|
+
fillBetween?: { from: string; to: string; fill: string; aboveFill?: string }
|
|
52
55
|
/** Horizontal reference lines on the top pane. Solid by default; set dashed: true for a dashed line. */
|
|
53
56
|
topRefLines?: { value: number; color: string; dashed?: boolean }[]
|
|
54
57
|
/** Horizontal value-range bands on the top pane. */
|
|
@@ -98,6 +101,9 @@ export type DualPanelProps<T> = {
|
|
|
98
101
|
ariaLabel?: string
|
|
99
102
|
/** Forwarded to `ChartFrame` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
100
103
|
isPending?: boolean
|
|
104
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
105
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
106
|
+
state?: ChartState
|
|
101
107
|
}
|
|
102
108
|
|
|
103
109
|
const PANE_GAP = 12
|
|
@@ -115,8 +121,23 @@ const PANE_GAP = 12
|
|
|
115
121
|
* when a series has nulls; lines/bars skip null points (visual gaps).
|
|
116
122
|
*/
|
|
117
123
|
function DualPanelInner<T>(props: DualPanelProps<T>) {
|
|
118
|
-
|
|
119
|
-
|
|
124
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
125
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
126
|
+
// swallows into a blank subtree that names nothing.
|
|
127
|
+
assertRequiredProps('DualPanel', props, ['data', 'getX', 'series', 'getBar'])
|
|
128
|
+
const {
|
|
129
|
+
series,
|
|
130
|
+
chartId,
|
|
131
|
+
height,
|
|
132
|
+
barLabel,
|
|
133
|
+
barColorPositive,
|
|
134
|
+
legend,
|
|
135
|
+
ariaLabel,
|
|
136
|
+
isPending,
|
|
137
|
+
state,
|
|
138
|
+
className,
|
|
139
|
+
style,
|
|
140
|
+
} = props
|
|
120
141
|
|
|
121
142
|
// Default the top-pane line overlays to the redesign's 1.9px stroke (docs/DESIGN-SPEC.md §5) —
|
|
122
143
|
// applied once here so the plotted line, the derived legend swatch, and the derived tooltip row
|
|
@@ -144,6 +165,9 @@ function DualPanelInner<T>(props: DualPanelProps<T>) {
|
|
|
144
165
|
{...(height !== undefined && { height })}
|
|
145
166
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
146
167
|
{...(isPending !== undefined && { isPending })}
|
|
168
|
+
{...(state !== undefined && { state })}
|
|
169
|
+
{...(className !== undefined && { className })}
|
|
170
|
+
{...(style !== undefined && { style })}
|
|
147
171
|
legend={resolveLegend(legend)}
|
|
148
172
|
>
|
|
149
173
|
{(plot) => <DualPanelPlot {...props} series={styledSeries} plot={plot} />}
|
|
@@ -319,7 +343,15 @@ function DualPanelPlot<T>(props: DualPanelPlotProps<T>) {
|
|
|
319
343
|
...(cursorResolution !== undefined && { resolution: cursorResolution }),
|
|
320
344
|
})
|
|
321
345
|
|
|
322
|
-
|
|
346
|
+
// The horizontal room one x tick label needs, from the SAME formatted set `xLabelsAll` measured
|
|
347
|
+
// for the bottom gutter — same measured-spacing law `CartesianChart` applies
|
|
348
|
+
// (`docs/CHARTS-SPEC.md` §1).
|
|
349
|
+
const xLabelPx = useMemo(() => xLabelPxFor(xLabelsAll), [xLabelsAll])
|
|
350
|
+
|
|
351
|
+
const tickValues = useMemo(
|
|
352
|
+
() => smartTicks(data.map(getX), xMax, xLabelPx),
|
|
353
|
+
[data, xMax, getX, xLabelPx],
|
|
354
|
+
)
|
|
323
355
|
|
|
324
356
|
const barWidth = data.length > 0 ? Math.max((xMax / data.length) * 0.6, 2) : 2
|
|
325
357
|
|
|
@@ -383,6 +415,17 @@ function DualPanelPlot<T>(props: DualPanelPlotProps<T>) {
|
|
|
383
415
|
return out
|
|
384
416
|
}, [data, fillBetween, visibleSeries])
|
|
385
417
|
|
|
418
|
+
// The fill reads the FROM line's curve — same law as ZonedLine's "one curve for all shapes
|
|
419
|
+
// drawn from one series", extended to the two lines a fill spans: the band takes its shape from
|
|
420
|
+
// the line it hugs on the low side.
|
|
421
|
+
const fillCurve = useMemo(
|
|
422
|
+
() =>
|
|
423
|
+
curveFor(
|
|
424
|
+
fillBetween ? visibleSeries.find((s) => s.key === fillBetween.from)?.curve : undefined,
|
|
425
|
+
),
|
|
426
|
+
[fillBetween, visibleSeries],
|
|
427
|
+
)
|
|
428
|
+
|
|
386
429
|
type LinePt = { __d: T; __y: number }
|
|
387
430
|
// Per-line valid points, computed once per (data, visibleSeries) — not re-walked inside the
|
|
388
431
|
// render map every paint (parity with MultiLine's seriesPts).
|
|
@@ -468,9 +511,9 @@ function DualPanelPlot<T>(props: DualPanelPlotProps<T>) {
|
|
|
468
511
|
y1={(p) => topYScale(p.__to)}
|
|
469
512
|
clipAboveTo={0}
|
|
470
513
|
clipBelowTo={topH}
|
|
471
|
-
curve={
|
|
514
|
+
curve={fillCurve}
|
|
472
515
|
belowAreaProps={{ fill: fillBetween.fill }}
|
|
473
|
-
aboveAreaProps={{ fill: fillBetween.fill }}
|
|
516
|
+
aboveAreaProps={{ fill: fillBetween.aboveFill ?? fillBetween.fill }}
|
|
474
517
|
/>
|
|
475
518
|
)}
|
|
476
519
|
|
|
@@ -499,7 +542,7 @@ function DualPanelPlot<T>(props: DualPanelPlotProps<T>) {
|
|
|
499
542
|
strokeWidth={s.strokeWidth ?? VX.lineWidth}
|
|
500
543
|
strokeDasharray={s.dash === 'dashed' ? VX.dashArray : undefined}
|
|
501
544
|
strokeOpacity={s.strokeOpacity ?? 1}
|
|
502
|
-
curve={
|
|
545
|
+
curve={curveFor(s.curve)}
|
|
503
546
|
/>
|
|
504
547
|
)
|
|
505
548
|
})}
|
|
@@ -665,4 +708,8 @@ function DualPanelPlot<T>(props: DualPanelPlotProps<T>) {
|
|
|
665
708
|
* Hand-memoized: React Compiler does not process the shipped dist, so the hot DualPanel kind is
|
|
666
709
|
* wrapped in `React.memo` to retain the auto-memoization it had as source (parity with ZonedLine).
|
|
667
710
|
*/
|
|
668
|
-
|
|
711
|
+
const DualPanelMemo = memo(DualPanelInner)
|
|
712
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
713
|
+
// graph of nine identically-named nodes names nothing.
|
|
714
|
+
DualPanelMemo.displayName = 'DualPanel'
|
|
715
|
+
export const DualPanel = DualPanelMemo as typeof DualPanelInner
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Group } from '@visx/group'
|
|
2
2
|
import type { PointerEvent, ReactNode } from 'react'
|
|
3
3
|
import { memo, useMemo, useState } from 'react'
|
|
4
|
+
import { assertRequiredProps } from '../../common/validate'
|
|
5
|
+
import type { BasaltProps } from '../../common/props'
|
|
4
6
|
import {
|
|
5
7
|
ChartTooltipFloat,
|
|
6
8
|
TooltipBody,
|
|
@@ -8,6 +10,10 @@ import {
|
|
|
8
10
|
TooltipRow,
|
|
9
11
|
} from '../primitives/ChartTooltip'
|
|
10
12
|
import { ChartFrame } from '../primitives/ChartFrame'
|
|
13
|
+
import { useChartTierMetrics } from '../primitives/chart-tier'
|
|
14
|
+
import type { ChartState } from '../primitives/ChartPending'
|
|
15
|
+
import { maxTextWidth } from '../utils/measure-text'
|
|
16
|
+
import { thinLabels, xLabelPxFor } from '../utils/ticks'
|
|
11
17
|
import { VX, alpha } from '../../tokens'
|
|
12
18
|
|
|
13
19
|
/** A single resolved heatmap cell — the unit the tooltip and hover operate on. */
|
|
@@ -16,7 +22,7 @@ type HeatmapCell = { row: string; col: string; value: number }
|
|
|
16
22
|
/** A hovered cell plus the viewport anchor `ChartTooltipFloat` positions against. */
|
|
17
23
|
type HeatmapTip = HeatmapCell & { anchor: { x: number; y: number } }
|
|
18
24
|
|
|
19
|
-
export type HeatmapProps<T> = {
|
|
25
|
+
export type HeatmapProps<T> = BasaltProps & {
|
|
20
26
|
data: T[]
|
|
21
27
|
/** Fixed height in pixels. Used when neither `aspectRatio` nor `fill` is set. Default 240. */
|
|
22
28
|
height?: number
|
|
@@ -57,6 +63,9 @@ export type HeatmapProps<T> = {
|
|
|
57
63
|
ariaLabel?: string
|
|
58
64
|
/** Forwarded to `ChartFrame` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
59
65
|
isPending?: boolean
|
|
66
|
+
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
67
|
+
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
68
|
+
state?: ChartState
|
|
60
69
|
}
|
|
61
70
|
|
|
62
71
|
/** Build a first-seen-ordered list of unique keys from data via an accessor. */
|
|
@@ -85,6 +94,10 @@ const LABEL_FONT_FAMILY = 'var(--basalt-font-mono)'
|
|
|
85
94
|
const PAD_LEFT = 44
|
|
86
95
|
const PAD_BOTTOM = 24
|
|
87
96
|
const PAD_TOP = 8
|
|
97
|
+
|
|
98
|
+
/** Line box of one category label at `fontPx` — the vertical room a row label needs, and so the
|
|
99
|
+
* pitch below which the row labels thin (`thinLabels`). Same 1.35em line box `autoMargin` uses. */
|
|
100
|
+
const labelLineHeight = (fontPx: number): number => Math.ceil(fontPx * 1.35)
|
|
88
101
|
// Height of the optional gradient legend strip (+ its label line).
|
|
89
102
|
const LEGEND_H = 8
|
|
90
103
|
const LEGEND_LABEL_H = 16
|
|
@@ -94,14 +107,22 @@ const LEGEND_LABEL_H = 16
|
|
|
94
107
|
* color at an opacity derived from its value; empty cells stay a faint neutral track.
|
|
95
108
|
* Generalizes argo's day-of-week × hour-of-day heatmap. Categorical axes are rendered as
|
|
96
109
|
* plain themed `<text>` (cells are not date-categorical, so there's no shared cursor here) —
|
|
97
|
-
* per-cell hover drives the local tooltip directly.
|
|
110
|
+
* per-cell hover drives the local tooltip directly. Painting them outside the `Axis*` primitives
|
|
111
|
+
* does NOT exempt them from §1's measured law: both runs thin through {@link thinLabels} and the
|
|
112
|
+
* right gutter reserves half the widest column label, so no two painted labels overlap and the
|
|
113
|
+
* last one cannot clip.
|
|
98
114
|
*
|
|
99
115
|
* Composes `ChartFrame` purely for measuring (`height`/`aspectRatio`/`fill`, the same three
|
|
100
116
|
* sizing modes every other kind exposes) — `legend={false}` and an empty `series` opt out of
|
|
101
117
|
* `ChartFrame`'s own derived legend, since Heatmap already ships its own gradient strip.
|
|
102
118
|
*/
|
|
103
119
|
function HeatmapInner<T>(props: HeatmapProps<T>) {
|
|
104
|
-
|
|
120
|
+
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
121
|
+
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
122
|
+
// swallows into a blank subtree that names nothing.
|
|
123
|
+
assertRequiredProps('Heatmap', props, ['data', 'getRow', 'getCol', 'getValue'])
|
|
124
|
+
const { chartId, height, aspectRatio, fill, ariaLabel, isPending, state, className, style } =
|
|
125
|
+
props
|
|
105
126
|
|
|
106
127
|
return (
|
|
107
128
|
<ChartFrame
|
|
@@ -113,6 +134,9 @@ function HeatmapInner<T>(props: HeatmapProps<T>) {
|
|
|
113
134
|
{...(fill !== undefined && { fill })}
|
|
114
135
|
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
115
136
|
{...(isPending !== undefined && { isPending })}
|
|
137
|
+
{...(state !== undefined && { state })}
|
|
138
|
+
{...(className !== undefined && { className })}
|
|
139
|
+
{...(style !== undefined && { style })}
|
|
116
140
|
>
|
|
117
141
|
{(plot) => <HeatmapPlot {...props} plot={plot} />}
|
|
118
142
|
</ChartFrame>
|
|
@@ -147,6 +171,11 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
147
171
|
} = props
|
|
148
172
|
const { width, height } = plot
|
|
149
173
|
|
|
174
|
+
// The row/column labels and the gradient legend's endpoints read like axis ticks, so they take
|
|
175
|
+
// the tier's tick font for the same reason `Axes.tsx` does — a 360px heatmap that painted its
|
|
176
|
+
// categories at the desktop size would be the one chart still ignoring §8.
|
|
177
|
+
const { axisFont } = useChartTierMetrics()
|
|
178
|
+
|
|
150
179
|
const [tip, setTip] = useState<HeatmapTip | null>(null)
|
|
151
180
|
|
|
152
181
|
const rows = useMemo(() => rowsProp ?? firstSeen(data, getRow), [rowsProp, data, getRow])
|
|
@@ -164,13 +193,33 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
164
193
|
return { lookup: map, max: m }
|
|
165
194
|
}, [data, getRow, getCol, getValue])
|
|
166
195
|
|
|
196
|
+
const rowLabels = useMemo(() => rows.map(rowLabel), [rows, rowLabel])
|
|
197
|
+
const colLabels = useMemo(() => cols.map(colLabel), [cols, colLabel])
|
|
198
|
+
|
|
167
199
|
const legendH = legend ? LEGEND_H + LEGEND_LABEL_H : 0
|
|
168
|
-
|
|
200
|
+
// The last column label is CENTRED on the last cell, so half of it hangs past the grid — the
|
|
201
|
+
// same reason `autoMargin` reserves half the widest x label on the right. Measured, not a
|
|
202
|
+
// constant: at 390px `19:00` used to print straight off the SVG's own clip edge.
|
|
203
|
+
const padRight = Math.ceil(maxTextWidth(colLabels, axisFont) / 2)
|
|
204
|
+
const gridW = Math.max(0, width - PAD_LEFT - padRight)
|
|
169
205
|
const gridH = Math.max(0, height - PAD_TOP - PAD_BOTTOM - legendH)
|
|
170
206
|
const cellW = cols.length > 0 ? gridW / cols.length : 0
|
|
171
207
|
const cellH = rows.length > 0 ? gridH / rows.length : 0
|
|
172
208
|
const legendGradientId = `${chartId}-heat-legend`
|
|
173
209
|
|
|
210
|
+
// §1's measured law, applied to the one kind that paints its labels as plain `<text>` rather
|
|
211
|
+
// than through the `Axis*` primitives: a label every `ceil(labelPx / cellPitch)` bands, so two
|
|
212
|
+
// painted neighbours can never overlap. Columns thin horizontally by the widest label, rows
|
|
213
|
+
// vertically by the line box.
|
|
214
|
+
const keptCols = useMemo(
|
|
215
|
+
() => thinLabels(colLabels, cellW, xLabelPxFor(colLabels, axisFont)),
|
|
216
|
+
[colLabels, cellW, axisFont],
|
|
217
|
+
)
|
|
218
|
+
const keptRows = useMemo(
|
|
219
|
+
() => thinLabels(rowLabels, cellH, labelLineHeight(axisFont)),
|
|
220
|
+
[rowLabels, cellH, axisFont],
|
|
221
|
+
)
|
|
222
|
+
|
|
174
223
|
const show = (row: string, col: string, value: number, event: PointerEvent<SVGRectElement>) => {
|
|
175
224
|
setTip({ row, col, value, anchor: { x: event.clientX, y: event.clientY } })
|
|
176
225
|
}
|
|
@@ -206,36 +255,40 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
206
255
|
|
|
207
256
|
{/* Row labels (left). */}
|
|
208
257
|
<Group left={0} top={PAD_TOP}>
|
|
209
|
-
{rows.map((row, ri) =>
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
258
|
+
{rows.map((row, ri) =>
|
|
259
|
+
keptRows.has(ri) ? (
|
|
260
|
+
<text
|
|
261
|
+
key={row}
|
|
262
|
+
x={PAD_LEFT - 6}
|
|
263
|
+
y={ri * cellH + cellH / 2 + 4}
|
|
264
|
+
textAnchor="end"
|
|
265
|
+
fontSize={axisFont}
|
|
266
|
+
fontFamily={LABEL_FONT_FAMILY}
|
|
267
|
+
fill={VX.faint}
|
|
268
|
+
>
|
|
269
|
+
{rowLabels[ri]}
|
|
270
|
+
</text>
|
|
271
|
+
) : null,
|
|
272
|
+
)}
|
|
222
273
|
</Group>
|
|
223
274
|
|
|
224
275
|
{/* Column labels (bottom). */}
|
|
225
276
|
<Group left={PAD_LEFT} top={PAD_TOP + gridH}>
|
|
226
|
-
{cols.map((col, ci) =>
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
277
|
+
{cols.map((col, ci) =>
|
|
278
|
+
keptCols.has(ci) ? (
|
|
279
|
+
<text
|
|
280
|
+
key={col}
|
|
281
|
+
x={ci * cellW + cellW / 2}
|
|
282
|
+
y={16}
|
|
283
|
+
textAnchor="middle"
|
|
284
|
+
fontSize={axisFont}
|
|
285
|
+
fontFamily={LABEL_FONT_FAMILY}
|
|
286
|
+
fill={VX.faint}
|
|
287
|
+
>
|
|
288
|
+
{colLabels[ci]}
|
|
289
|
+
</text>
|
|
290
|
+
) : null,
|
|
291
|
+
)}
|
|
239
292
|
</Group>
|
|
240
293
|
|
|
241
294
|
{/* Optional gradient legend strip below the grid. */}
|
|
@@ -252,7 +305,7 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
252
305
|
x={0}
|
|
253
306
|
y={LEGEND_H + 12}
|
|
254
307
|
textAnchor="start"
|
|
255
|
-
fontSize={
|
|
308
|
+
fontSize={axisFont}
|
|
256
309
|
fontFamily={LABEL_FONT_FAMILY}
|
|
257
310
|
fill={VX.faint}
|
|
258
311
|
>
|
|
@@ -262,7 +315,7 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
262
315
|
x={gridW}
|
|
263
316
|
y={LEGEND_H + 12}
|
|
264
317
|
textAnchor="end"
|
|
265
|
-
fontSize={
|
|
318
|
+
fontSize={axisFont}
|
|
266
319
|
fontFamily={LABEL_FONT_FAMILY}
|
|
267
320
|
fill={VX.faint}
|
|
268
321
|
>
|
|
@@ -294,4 +347,8 @@ function HeatmapPlot<T>(props: HeatmapPlotProps<T>) {
|
|
|
294
347
|
* Hand-memoized: React Compiler does not process the shipped dist, so the hot Heatmap kind is
|
|
295
348
|
* wrapped in `React.memo` to retain auto-memoization (parity with ZonedLine / Bars).
|
|
296
349
|
*/
|
|
297
|
-
|
|
350
|
+
const HeatmapMemo = memo(HeatmapInner)
|
|
351
|
+
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
352
|
+
// graph of nine identically-named nodes names nothing.
|
|
353
|
+
HeatmapMemo.displayName = 'Heatmap'
|
|
354
|
+
export const Heatmap = HeatmapMemo as typeof HeatmapInner
|