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
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
* />
|
|
31
31
|
*/
|
|
32
32
|
import type { ReactNode } from 'react'
|
|
33
|
+
import type { BasaltProps } from '../common/props'
|
|
34
|
+
import { assertRequiredProps } from '../common/validate'
|
|
33
35
|
import type { EnumField, FieldHandle, StringField } from '../state'
|
|
34
36
|
import { EnumFilter } from './enum-filter'
|
|
35
37
|
|
|
@@ -45,7 +47,7 @@ export type FilterOption = {
|
|
|
45
47
|
readonly disabled?: boolean
|
|
46
48
|
}
|
|
47
49
|
|
|
48
|
-
type SelectFilterCommon = {
|
|
50
|
+
type SelectFilterCommon = BasaltProps & {
|
|
49
51
|
readonly label: string
|
|
50
52
|
readonly icon?: ReactNode
|
|
51
53
|
/** Adds a `Clear` action that writes the field back to its fallback. */
|
|
@@ -78,6 +80,14 @@ export type SelectFilterProps<T extends string> = SelectFilterEnumProps<T> | Sel
|
|
|
78
80
|
export function SelectFilter<T extends string>(props: SelectFilterEnumProps<T>): ReactNode
|
|
79
81
|
export function SelectFilter(props: SelectFilterStringProps): ReactNode
|
|
80
82
|
export function SelectFilter<T extends string>(props: SelectFilterProps<T>): ReactNode {
|
|
83
|
+
// F-ERR-1: without this, a `field` that never arrived surfaces as
|
|
84
|
+
// `undefined is not an object (evaluating 'field.use')` from inside `EnumFilter`, caught by
|
|
85
|
+
// `BasaltErrorBoundary` and rendered as a blank subtree. `field` is not optional in the type, so
|
|
86
|
+
// this only ever fires on untyped JS, a `props` object built at runtime, or a store key that
|
|
87
|
+
// resolved to nothing — all three of which the message now names.
|
|
88
|
+
assertRequiredProps('SelectFilter', props, ['field'], {
|
|
89
|
+
field: 'bind it to a store field (`store.field.<name>`), never a value/onChange pair.',
|
|
90
|
+
})
|
|
81
91
|
const { field, ...rest } = props
|
|
82
92
|
|
|
83
93
|
// Two arms, one body — and they are not the same code to the compiler. `field.kind` is a NESTED
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `SliderControl` — a `field.number` as an inspector row (`docs/ASIDE-SPEC.md` §1 "Inspector", G7).
|
|
3
|
+
* Bound like every other control on this subpath: it takes `field`, never `value`/`onChange`/`size`
|
|
4
|
+
* (C2/C5), and `min`/`max`/`step` come off the HANDLE rather than the call site, so the track's
|
|
5
|
+
* grain is the field's own declaration and not a second copy of it.
|
|
6
|
+
*
|
|
7
|
+
* **It is a ROW on every surface, and that is deliberate.** Unlike the filters it has no pill form:
|
|
8
|
+
* a chip whose label is a number, opening a popover holding a track, is two presses to change a
|
|
9
|
+
* value the row states and edits in place. So it renders {@link PanelRow} regardless of
|
|
10
|
+
* `useFilterSurface()`, and it is not a filter — it registers no `{ isActive, reset }` with a
|
|
11
|
+
* `FilterSet`, never counts toward `Filters (n)`, and never answers `Reset all`. Its home is an
|
|
12
|
+
* aside body or a section body, not a bar row.
|
|
13
|
+
*
|
|
14
|
+
* **The write lands on drag END, not on every frame.** A slider emits a value per pointer move; on
|
|
15
|
+
* the URL lane that is one navigation per pixel. The draft is local while dragging and commits
|
|
16
|
+
* once — the same law `NumberFilter`'s stepper states for keystrokes.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // piCycle: field.number({ fallback: 1, min: 0, max: 2, step: 0.05 })
|
|
20
|
+
* <SliderControl
|
|
21
|
+
* field={weights.field.piCycle}
|
|
22
|
+
* label="Pi Cycle Top"
|
|
23
|
+
* hint="The 111DMA / 350DMA×2 crossover."
|
|
24
|
+
* format={(v) => `${v.toFixed(2)}×`}
|
|
25
|
+
* />
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* // A COMPOSITION row: the readout states the metric's own reading beside the weight, and the
|
|
29
|
+
* // switch that governs the row rides the label line — neither is the field's value, so both are
|
|
30
|
+
* // overrides rather than a `format`.
|
|
31
|
+
* <SliderControl
|
|
32
|
+
* field={weights.field.piCycle}
|
|
33
|
+
* label="Pi Cycle Top"
|
|
34
|
+
* readout="0.35 · ×1.00"
|
|
35
|
+
* end={<Switch checked={on} onChange={toggle} aria-label="Include Pi Cycle Top" />}
|
|
36
|
+
* disabled={!on}
|
|
37
|
+
* />
|
|
38
|
+
*/
|
|
39
|
+
import { Slider } from '@mantine/core'
|
|
40
|
+
import { useEffect, useRef, useState } from 'react'
|
|
41
|
+
import type { ReactNode } from 'react'
|
|
42
|
+
import type { BasaltProps } from '../common/props'
|
|
43
|
+
import { assertRequiredProps } from '../common/validate'
|
|
44
|
+
import type { FieldHandle, NumberField } from '../state'
|
|
45
|
+
import { PanelRow } from './panel-row'
|
|
46
|
+
|
|
47
|
+
export type SliderControlProps = BasaltProps & {
|
|
48
|
+
readonly field: FieldHandle<NumberField>
|
|
49
|
+
/** The row's label, and the thumb's accessible name. */
|
|
50
|
+
readonly label: string
|
|
51
|
+
/** Info glyph + tooltip beside the label — see {@link PanelRow}. */
|
|
52
|
+
readonly hint?: string
|
|
53
|
+
/**
|
|
54
|
+
* The mono readout on the label line. The raw number when omitted, so a unit, a precision or a
|
|
55
|
+
* ratio is one function rather than a second row.
|
|
56
|
+
*
|
|
57
|
+
* @default String(v)
|
|
58
|
+
*/
|
|
59
|
+
readonly format?: (v: number) => string
|
|
60
|
+
/**
|
|
61
|
+
* Replaces the formatted value in the row's readout slot.
|
|
62
|
+
*
|
|
63
|
+
* `format` prints the FIELD; this prints whatever the row is actually about. The composition row
|
|
64
|
+
* that motivated it states a metric's reading beside its weight — `0.35 · ×1.00` — which is one
|
|
65
|
+
* mono string over two numbers, only one of which this control owns. Prefer `format` whenever the
|
|
66
|
+
* readout is the field's own value. A FUNCTION form receives the live drag value, so a composed
|
|
67
|
+
* readout tracks the thumb per frame instead of updating on drag end.
|
|
68
|
+
*/
|
|
69
|
+
readonly readout?: ReactNode | ((value: number) => ReactNode)
|
|
70
|
+
/**
|
|
71
|
+
* A control riding the LABEL line, forwarded to {@link PanelRow.end} — a `Switch` and, by design,
|
|
72
|
+
* almost nothing else. The composition row's use case is enabling the metric the slider weights:
|
|
73
|
+
* the toggle governs the row, so it cannot live inside the track it disables.
|
|
74
|
+
*/
|
|
75
|
+
readonly end?: ReactNode
|
|
76
|
+
readonly disabled?: boolean
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function SliderControl(props: SliderControlProps): ReactNode {
|
|
80
|
+
// F-ERR-1 — without this a missing `field` surfaces as `undefined is not an object
|
|
81
|
+
// (evaluating 'field.use')`, caught by `BasaltErrorBoundary`.
|
|
82
|
+
assertRequiredProps('SliderControl', props, ['field'], {
|
|
83
|
+
field: 'bind it to a store field (`store.field.<name>`), never a value/onChange pair.',
|
|
84
|
+
})
|
|
85
|
+
const { field, label, hint, format, readout, end, disabled, className, style } = props
|
|
86
|
+
const [value, setValue] = field.use()
|
|
87
|
+
const draft = useDraggedNumber(value, setValue)
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<PanelRow
|
|
91
|
+
label={label}
|
|
92
|
+
readout={
|
|
93
|
+
typeof readout === 'function'
|
|
94
|
+
? readout(draft.value)
|
|
95
|
+
: (readout ?? (format ?? String)(draft.value))
|
|
96
|
+
}
|
|
97
|
+
{...(hint !== undefined && { hint })}
|
|
98
|
+
{...(end !== undefined && { end })}
|
|
99
|
+
{...(disabled === true && { disabled: true })}
|
|
100
|
+
{...(className !== undefined && { className })}
|
|
101
|
+
{...(style !== undefined && { style })}
|
|
102
|
+
>
|
|
103
|
+
<Slider
|
|
104
|
+
// The tier, stated by the control the way every control on this subpath does
|
|
105
|
+
// (`docs/CONTROLS-SPEC.md` §3) — `Slider` is deliberately absent from `CTL_THEME`, see
|
|
106
|
+
// `theme/ctl-theme.tsx`'s note, so the row's slot cannot supply it.
|
|
107
|
+
size="ctl"
|
|
108
|
+
// The drag tooltip is off: the row already prints the value, in mono, in a fixed place —
|
|
109
|
+
// a bubble that follows the thumb states the same number twice and jumps while reading.
|
|
110
|
+
label={null}
|
|
111
|
+
thumbLabel={label}
|
|
112
|
+
// The FIELD's declaration, straight off the handle. An undeclared bound leaves Mantine's own
|
|
113
|
+
// default (0..100) rather than passing `undefined` through as a bound.
|
|
114
|
+
{...(field.min !== undefined && { min: field.min })}
|
|
115
|
+
{...(field.max !== undefined && { max: field.max })}
|
|
116
|
+
{...(field.step !== undefined && { step: field.step })}
|
|
117
|
+
{...(disabled === true && { disabled: true })}
|
|
118
|
+
value={draft.value}
|
|
119
|
+
onChange={draft.set}
|
|
120
|
+
onChangeEnd={draft.commit}
|
|
121
|
+
/>
|
|
122
|
+
</PanelRow>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* A local draft that follows the thumb and lands on the field once, on `onChangeEnd` — plus the
|
|
128
|
+
* usual outside-change backstop (`Reset all`, a deep link, a back navigation, the codec's clamp).
|
|
129
|
+
*
|
|
130
|
+
* `seen` is what separates the two directions, exactly as in `SearchFilter`'s debounce and
|
|
131
|
+
* `NumberFilter`'s commit: it holds the last value this hook itself committed, so an incoming change
|
|
132
|
+
* it did not cause is the only thing that overwrites the draft mid-drag.
|
|
133
|
+
*/
|
|
134
|
+
function useDraggedNumber(
|
|
135
|
+
value: number,
|
|
136
|
+
setValue: (next: number) => void,
|
|
137
|
+
): { value: number; set: (next: number) => void; commit: (next: number) => void } {
|
|
138
|
+
const [draft, setDraft] = useState(value)
|
|
139
|
+
const seen = useRef(value)
|
|
140
|
+
const commitRef = useRef(setValue)
|
|
141
|
+
commitRef.current = setValue
|
|
142
|
+
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
if (seen.current === value) return
|
|
145
|
+
seen.current = value
|
|
146
|
+
setDraft(value)
|
|
147
|
+
}, [value])
|
|
148
|
+
|
|
149
|
+
return {
|
|
150
|
+
value: draft,
|
|
151
|
+
set: setDraft,
|
|
152
|
+
commit: (next) => {
|
|
153
|
+
setDraft(next)
|
|
154
|
+
if (next === value) return
|
|
155
|
+
seen.current = next
|
|
156
|
+
commitRef.current(next)
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
}
|
|
@@ -23,10 +23,12 @@
|
|
|
23
23
|
import { ActionIcon, Button, Tooltip } from '@mantine/core'
|
|
24
24
|
import { useEffect, useState } from 'react'
|
|
25
25
|
import type { ReactNode } from 'react'
|
|
26
|
+
import { cx } from '../common/props'
|
|
27
|
+
import type { BasaltProps } from '../common/props'
|
|
26
28
|
import { IconSlot } from '../theme/icon-slot'
|
|
27
29
|
import classes from './sync-button.module.css'
|
|
28
30
|
|
|
29
|
-
export type SyncButtonProps = {
|
|
31
|
+
export type SyncButtonProps = BasaltProps & {
|
|
30
32
|
syncing: boolean
|
|
31
33
|
/** Last successful completion. `undefined`/`null` renders no age at all. */
|
|
32
34
|
lastCompletedAt?: number | Date | null
|
|
@@ -134,6 +136,8 @@ export function SyncButton({
|
|
|
134
136
|
scope,
|
|
135
137
|
label = 'Sync',
|
|
136
138
|
error,
|
|
139
|
+
className,
|
|
140
|
+
style,
|
|
137
141
|
}: SyncButtonProps): ReactNode {
|
|
138
142
|
const age = useRelativeAge(lastCompletedAt)
|
|
139
143
|
// Wherever the label is not painted — every `global` mount, and a `page` mount below `sm` — the
|
|
@@ -172,7 +176,12 @@ export function SyncButton({
|
|
|
172
176
|
withArrow
|
|
173
177
|
>
|
|
174
178
|
{scope === 'global' ? (
|
|
175
|
-
<ActionIcon
|
|
179
|
+
<ActionIcon
|
|
180
|
+
variant="default"
|
|
181
|
+
{...control}
|
|
182
|
+
{...(className !== undefined && { className })}
|
|
183
|
+
{...(style !== undefined && { style })}
|
|
184
|
+
>
|
|
176
185
|
<IconSlot>
|
|
177
186
|
<RefreshGlyph spinning={syncing} />
|
|
178
187
|
</IconSlot>
|
|
@@ -180,7 +189,8 @@ export function SyncButton({
|
|
|
180
189
|
) : (
|
|
181
190
|
<Button
|
|
182
191
|
variant="default"
|
|
183
|
-
className={classes.pageButton}
|
|
192
|
+
className={cx(classes.pageButton, className)}
|
|
193
|
+
{...(style !== undefined && { style })}
|
|
184
194
|
leftSection={
|
|
185
195
|
<IconSlot>
|
|
186
196
|
<RefreshGlyph spinning={syncing} />
|
|
@@ -1,46 +1,64 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `ToggleFilter` — a boolean field as one pill (`docs/CONTROLS-SPEC.md` §3). The only filter whose
|
|
3
3
|
* pill has no popover: there is nothing to choose, so the pill IS the control and a press flips it.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* The sheet form is the panel form (`docs/CONTROLS-SPEC.md` §3: "sheet = panel rows inside a
|
|
5
|
+
* Drawer") — a `PanelRow` whose control rides the label line, the ONE row every panel/sheet surface
|
|
6
|
+
* draws that way (`docs/ASIDE-SPEC.md` §3): a switch is atomic and needs no width, so the
|
|
7
|
+
* label-above law every other row follows would only cost it a second line.
|
|
6
8
|
*
|
|
7
9
|
* @example
|
|
8
10
|
* // errorsOnly: field.boolean(false)
|
|
9
11
|
* <ToggleFilter field={filters.field.errorsOnly} label="Errors only" />
|
|
10
12
|
*/
|
|
11
13
|
import { Switch } from '@mantine/core'
|
|
14
|
+
import { useId } from 'react'
|
|
12
15
|
import type { ReactNode } from 'react'
|
|
16
|
+
import type { BasaltProps } from '../common/props'
|
|
17
|
+
import { assertRequiredProps } from '../common/validate'
|
|
13
18
|
import type { BooleanField, FieldHandle } from '../state'
|
|
14
19
|
import { useFilterRegistration, useFilterSurface } from './filter-context'
|
|
15
20
|
import { FilterPill } from './filter-pill'
|
|
16
|
-
import {
|
|
21
|
+
import { PanelRow } from './panel-row'
|
|
17
22
|
|
|
18
|
-
export type ToggleFilterProps = {
|
|
23
|
+
export type ToggleFilterProps = BasaltProps & {
|
|
19
24
|
readonly field: FieldHandle<BooleanField>
|
|
20
25
|
readonly label: string
|
|
21
26
|
readonly icon?: ReactNode
|
|
22
27
|
}
|
|
23
28
|
|
|
24
|
-
export function ToggleFilter(
|
|
29
|
+
export function ToggleFilter(props: ToggleFilterProps): ReactNode {
|
|
30
|
+
// F-ERR-1 — without this a missing `field` surfaces as `undefined is not an object
|
|
31
|
+
// (evaluating 'field.use')`, caught by `BasaltErrorBoundary`.
|
|
32
|
+
assertRequiredProps('ToggleFilter', props, ['field'], {
|
|
33
|
+
field: 'bind it to a store field (`store.field.<name>`), never a value/onChange pair.',
|
|
34
|
+
})
|
|
35
|
+
const { field, label, icon, className, style } = props
|
|
25
36
|
const [value, setValue] = field.use()
|
|
26
37
|
const surface = useFilterSurface()
|
|
38
|
+
const id = useId()
|
|
27
39
|
useFilterRegistration(!field.isDefault(value), () => {
|
|
28
40
|
field.clear()
|
|
29
41
|
})
|
|
30
42
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
// (C15). A wrapper div would put the height on a non-interactive box instead.
|
|
43
|
+
// The sheet form is the panel form (`docs/CONTROLS-SPEC.md` §3: "sheet = panel rows inside a
|
|
44
|
+
// Drawer") — the switch rides the label line on both surfaces, the one row whose control does.
|
|
45
|
+
if (surface === 'panel' || surface === 'sheet') {
|
|
35
46
|
return (
|
|
36
|
-
<
|
|
37
|
-
classNames={sheetRowClassNames}
|
|
38
|
-
checked={value}
|
|
47
|
+
<PanelRow
|
|
39
48
|
label={label}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
htmlFor={id}
|
|
50
|
+
end={
|
|
51
|
+
<Switch
|
|
52
|
+
id={id}
|
|
53
|
+
aria-label={label}
|
|
54
|
+
checked={value}
|
|
55
|
+
onChange={(event) => {
|
|
56
|
+
setValue(event.currentTarget.checked)
|
|
57
|
+
}}
|
|
58
|
+
/>
|
|
59
|
+
}
|
|
60
|
+
{...(className !== undefined && { className })}
|
|
61
|
+
{...(style !== undefined && { style })}
|
|
44
62
|
/>
|
|
45
63
|
)
|
|
46
64
|
}
|
|
@@ -55,6 +73,8 @@ export function ToggleFilter({ field, label, icon }: ToggleFilterProps): ReactNo
|
|
|
55
73
|
onClick={() => {
|
|
56
74
|
setValue(!value)
|
|
57
75
|
}}
|
|
76
|
+
{...(className !== undefined && { className })}
|
|
77
|
+
{...(style !== undefined && { style })}
|
|
58
78
|
/>
|
|
59
79
|
)
|
|
60
80
|
}
|
|
@@ -6,12 +6,17 @@
|
|
|
6
6
|
* The responsive swap lives HERE, not at the call site (C9), and it is CSS — `visibleFrom` /
|
|
7
7
|
* `hiddenFrom`, one mount each, never a JS media query (which renders differently on the server than
|
|
8
8
|
* on the first client paint). Below `sm` a set of three or fewer stays a full-width
|
|
9
|
-
* `SegmentedControl
|
|
9
|
+
* `SegmentedControl` — PROVIDED every label actually fits it (`panel-row.tsx`'s `useTrackFits`,
|
|
10
|
+
* shared with `PanelChoice` so the two width gates cannot drift); past either gate it becomes a
|
|
10
11
|
* `Select`.
|
|
11
12
|
*
|
|
12
13
|
* `only` is how a tab that exists on ONE viewport is declared instead of hand-rolling a second
|
|
13
14
|
* control: `'sm-up'` keeps it off the phone form, `'sm-down'` keeps it off the desktop form.
|
|
14
15
|
*
|
|
16
|
+
* Inside a `PageAside` it renders as a panel ROW — label above, a full-width track or a `Select`
|
|
17
|
+
* (`docs/ASIDE-SPEC.md` §3). A view switch in a panel is legal; the page bar's tab slot stays its
|
|
18
|
+
* default home, and `only` has no meaning there (the panel is one width).
|
|
19
|
+
*
|
|
15
20
|
* @example
|
|
16
21
|
* <ViewTabs
|
|
17
22
|
* field={strength.field.tab}
|
|
@@ -24,8 +29,14 @@
|
|
|
24
29
|
*/
|
|
25
30
|
import { SegmentedControl, Select } from '@mantine/core'
|
|
26
31
|
import type { ReactNode } from 'react'
|
|
32
|
+
import { cx } from '../common/props'
|
|
33
|
+
import type { BasaltProps } from '../common/props'
|
|
34
|
+
import { assertRequiredProps } from '../common/validate'
|
|
27
35
|
import type { EnumField, FieldHandle } from '../state'
|
|
28
36
|
import classes from './controls.module.css'
|
|
37
|
+
import { useFilterSurface } from './filter-context'
|
|
38
|
+
import { useControlName } from './filter-sheet'
|
|
39
|
+
import { PanelChoice, PanelRow, useTrackFits } from './panel-row'
|
|
29
40
|
|
|
30
41
|
/** Past three options the phone form is a `Select`, not a track. */
|
|
31
42
|
const PHONE_TRACK_MAX = 3
|
|
@@ -37,7 +48,7 @@ export type ViewTabsOption<T extends string> = {
|
|
|
37
48
|
readonly only?: 'sm-up' | 'sm-down'
|
|
38
49
|
}
|
|
39
50
|
|
|
40
|
-
export type ViewTabsProps<T extends string> = {
|
|
51
|
+
export type ViewTabsProps<T extends string> = BasaltProps & {
|
|
41
52
|
readonly field: FieldHandle<EnumField<T>>
|
|
42
53
|
/** Defaults to `field.options` (every declared value, labelled by `store.labels()`). */
|
|
43
54
|
readonly options?: readonly ViewTabsOption<T>[]
|
|
@@ -51,12 +62,17 @@ export type ViewTabsProps<T extends string> = {
|
|
|
51
62
|
readonly label?: string
|
|
52
63
|
}
|
|
53
64
|
|
|
54
|
-
export function ViewTabs<T extends string>({
|
|
55
|
-
field
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
65
|
+
export function ViewTabs<T extends string>(props: ViewTabsProps<T>): ReactNode {
|
|
66
|
+
// F-ERR-1 — without this a missing `field` surfaces as `undefined is not an object
|
|
67
|
+
// (evaluating 'field.use')`, caught by `BasaltErrorBoundary`.
|
|
68
|
+
assertRequiredProps('ViewTabs', props, ['field'], {
|
|
69
|
+
field: 'bind it to a store field (`store.field.<name>`), never a value/onChange pair.',
|
|
70
|
+
})
|
|
71
|
+
const { field, options, label = 'View', className, style } = props
|
|
59
72
|
const [value, setValue] = field.use()
|
|
73
|
+
const surface = useFilterSurface()
|
|
74
|
+
const inPanel = surface === 'panel'
|
|
75
|
+
const { labelId, nameProps } = useControlName(label, inPanel)
|
|
60
76
|
const all: readonly ViewTabsOption<T>[] =
|
|
61
77
|
options ?? field.options.map((option) => ({ value: option.value as T, label: option.label }))
|
|
62
78
|
|
|
@@ -68,6 +84,36 @@ export function ViewTabs<T extends string>({
|
|
|
68
84
|
setValue(next as T)
|
|
69
85
|
}
|
|
70
86
|
|
|
87
|
+
const phoneData = phone.map((option) => ({ value: option.value, label: option.label }))
|
|
88
|
+
const phoneCountFits = phone.length <= PHONE_TRACK_MAX
|
|
89
|
+
// Called UNCONDITIONALLY, even on the panel branch that never renders the phone form — a hook
|
|
90
|
+
// may not sit behind the `if (inPanel) return …` below (`react-hooks/rules-of-hooks`), and
|
|
91
|
+
// `useTrackFits` no-ops cheaply when `countFits` is false or its root never mounts. The same
|
|
92
|
+
// width gate `PanelChoice` runs (`panel-row.tsx`'s `useTrackFits` doc) — the count cap is the
|
|
93
|
+
// cheap first gate, a fit check underneath it is what actually decides.
|
|
94
|
+
const { rootRef: phoneRootRef, fits: phoneFits } = useTrackFits(
|
|
95
|
+
phoneCountFits,
|
|
96
|
+
phoneData.map((d) => d.value).join('|'),
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
// The panel form. `only` is dropped on purpose: it exists to declare a tab that belongs to ONE
|
|
100
|
+
// viewport, and a panel is not a viewport — every declared option is offered.
|
|
101
|
+
if (inPanel) {
|
|
102
|
+
return (
|
|
103
|
+
<PanelRow
|
|
104
|
+
label={label}
|
|
105
|
+
labelId={labelId}
|
|
106
|
+
{...(className !== undefined && { className })}
|
|
107
|
+
{...(style !== undefined && { style })}
|
|
108
|
+
>
|
|
109
|
+
<PanelChoice nameProps={nameProps} value={value} options={all} onChange={commit} />
|
|
110
|
+
</PanelRow>
|
|
111
|
+
)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// No single root: exactly one of the two forms below is visible at once (CSS `visibleFrom`/
|
|
115
|
+
// `hiddenFrom`, law C9), so `className`/`style` land on both — whichever one paints is the one a
|
|
116
|
+
// reader ever sees carrying them.
|
|
71
117
|
return (
|
|
72
118
|
<>
|
|
73
119
|
<SegmentedControl
|
|
@@ -77,16 +123,21 @@ export function ViewTabs<T extends string>({
|
|
|
77
123
|
value={value}
|
|
78
124
|
data={desktop.map((option) => ({ value: option.value, label: option.label }))}
|
|
79
125
|
onChange={commit}
|
|
126
|
+
{...(className !== undefined && { className })}
|
|
127
|
+
{...(style !== undefined && { style })}
|
|
80
128
|
/>
|
|
81
|
-
{
|
|
129
|
+
{phoneFits ? (
|
|
82
130
|
<SegmentedControl
|
|
131
|
+
ref={phoneRootRef}
|
|
83
132
|
aria-label={label}
|
|
84
133
|
hiddenFrom="sm"
|
|
85
134
|
size="ctl"
|
|
86
135
|
fullWidth
|
|
87
136
|
value={value}
|
|
88
|
-
data={
|
|
137
|
+
data={phoneData}
|
|
89
138
|
onChange={commit}
|
|
139
|
+
{...(className !== undefined && { className })}
|
|
140
|
+
{...(style !== undefined && { style })}
|
|
90
141
|
/>
|
|
91
142
|
) : (
|
|
92
143
|
<Select
|
|
@@ -96,10 +147,11 @@ export function ViewTabs<T extends string>({
|
|
|
96
147
|
// BOUNDED, not greedy — see `.phoneSelect`'s comment in `controls.module.css`. This is the
|
|
97
148
|
// control owning its own responsive form (law C9), which is also why it is not a `w` prop
|
|
98
149
|
// at the call site (C5, `basalt/control-size-literal`).
|
|
99
|
-
className={classes.phoneSelect}
|
|
150
|
+
className={cx(classes.phoneSelect, className)}
|
|
151
|
+
{...(style !== undefined && { style })}
|
|
100
152
|
value={value}
|
|
101
153
|
allowDeselect={false}
|
|
102
|
-
data={
|
|
154
|
+
data={phoneData}
|
|
103
155
|
onChange={(next) => {
|
|
104
156
|
if (next !== null) commit(next)
|
|
105
157
|
}}
|
|
@@ -24,9 +24,16 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { DatePicker } from '@mantine/dates'
|
|
26
26
|
import type { ReactNode } from 'react'
|
|
27
|
+
import { assertRequiredProps } from '../common/validate'
|
|
27
28
|
import type { RangeCustomPickerProps } from '../controls/range-filter'
|
|
28
29
|
|
|
29
|
-
export function DateRangePicker(
|
|
30
|
+
export function DateRangePicker(props: RangeCustomPickerProps): ReactNode {
|
|
31
|
+
// F-ERR-1 — without this a missing `value` surfaces as `undefined is not an object
|
|
32
|
+
// (evaluating 'value.from')`, caught by `BasaltErrorBoundary`.
|
|
33
|
+
assertRequiredProps('DateRangePicker', props, ['value'], {
|
|
34
|
+
value: "pass `{ from, to }` — usually injected by `RangeFilter`'s `customPicker`.",
|
|
35
|
+
})
|
|
36
|
+
const { value, onChange } = props
|
|
30
37
|
return (
|
|
31
38
|
<DatePicker
|
|
32
39
|
type="range"
|
|
@@ -1,6 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* DeltaBadge — the KPI trend chip (docs/DESIGN-SPEC.md §5): mono 11.5px weight 600, status-color
|
|
3
|
+
* text on a status-13% tint, control radius, 2px/7px padding, optional ▲/▼ glyph at 9px.
|
|
4
|
+
* `polarity` decides the TONE the sign maps to — `'up-good'` (default) reads a rise as success and
|
|
5
|
+
* a fall as danger; `'up-bad'` inverts that for a metric where a rise is the worse reading (a
|
|
6
|
+
* cycle-top index, latency, error rate); `'neutral'` renders every sign in a faint, non-verdict
|
|
7
|
+
* tint. Zero is always faint with no glyph, under every polarity. The label never carries a
|
|
8
|
+
* leading "+"; pass `format` to control the magnitude string (defaults to a one-decimal percentage
|
|
9
|
+
* of the absolute value). The ▲/▼ glyph is DIRECTION, not verdict, and stays polarity-independent —
|
|
10
|
+
* governed only by `withGlyph` and the sign.
|
|
11
|
+
*
|
|
12
|
+
* Mantine-free (plain `<span>` + this folder's CSS module, docs/CONTROLS-SPEC.md §2.2) so
|
|
13
|
+
* `WidgetHeader` can compose it from inside `charts/` without tripping `basalt/token-layer-
|
|
14
|
+
* boundary` or `check-dist-layering.mjs`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* import { DeltaBadge } from 'basalt-ui'
|
|
18
|
+
*
|
|
19
|
+
* <DeltaBadge value={12.4} /> // ▲ 12.4%, success tint
|
|
20
|
+
* <DeltaBadge value={-3.1} /> // ▼ 3.1%, danger tint
|
|
21
|
+
* <DeltaBadge value={0} /> // 0.0%, neutral faint tint, no glyph
|
|
22
|
+
* <DeltaBadge value={182} format={(v) => `${Math.abs(v)}ms`} withGlyph={false} />
|
|
23
|
+
* <DeltaBadge value={35.9} polarity="up-bad" /> // ▲ 35.9%, danger tint — a rise is bad here
|
|
5
24
|
*/
|
|
6
|
-
|
|
25
|
+
import { alpha, VX } from '../tokens'
|
|
26
|
+
import classes from './widget-header.module.css'
|
|
27
|
+
|
|
28
|
+
export type DeltaPolarity = 'up-good' | 'up-bad' | 'neutral'
|
|
29
|
+
|
|
30
|
+
export type DeltaBadgeProps = {
|
|
31
|
+
/** Signed delta driving tone (positive/negative/zero) and, by default, the label magnitude. */
|
|
32
|
+
value: number
|
|
33
|
+
/** Which sign reads as the good verdict. `'up-good'` (default) is today's behaviour — positive
|
|
34
|
+
* success, negative danger. `'up-bad'` inverts it for a metric where a rise is the worse reading.
|
|
35
|
+
* `'neutral'` renders every sign in the faint tint — a change with no verdict attached. Zero is
|
|
36
|
+
* always faint regardless. */
|
|
37
|
+
polarity?: DeltaPolarity
|
|
38
|
+
/** Formats the value into the label text. Defaults to `${Math.abs(value).toFixed(1)}%`. */
|
|
39
|
+
format?: (value: number) => string
|
|
40
|
+
/** Render the ▲/▼ direction glyph. Defaults to `true`; a zero value never shows a glyph. */
|
|
41
|
+
withGlyph?: boolean
|
|
42
|
+
/** Optional comparison timeframe rendered directly after the value in a dimmer shade of the same
|
|
43
|
+
* tone (e.g. `MoM`, `WoW`, `YTD`) — states what the delta is measured against without a hover. */
|
|
44
|
+
period?: string | undefined
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const defaultFormat = (value: number): string => `${Math.abs(value).toFixed(1)}%`
|
|
48
|
+
|
|
49
|
+
function resolveTone(value: number, polarity: DeltaPolarity): string {
|
|
50
|
+
if (value === 0 || polarity === 'neutral') return VX.faint
|
|
51
|
+
const rose = value > 0
|
|
52
|
+
const good = polarity === 'up-good' ? rose : !rose
|
|
53
|
+
return good ? VX.status.good : VX.status.bad
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function DeltaBadge({
|
|
57
|
+
value,
|
|
58
|
+
polarity = 'up-good',
|
|
59
|
+
format = defaultFormat,
|
|
60
|
+
withGlyph = true,
|
|
61
|
+
period,
|
|
62
|
+
}: DeltaBadgeProps) {
|
|
63
|
+
const tone = resolveTone(value, polarity)
|
|
64
|
+
const glyph = value > 0 ? '▲' : value < 0 ? '▼' : undefined
|
|
65
|
+
const showGlyph = withGlyph && glyph !== undefined
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<span
|
|
69
|
+
className={classes.deltaBadge}
|
|
70
|
+
style={{ backgroundColor: alpha(tone, 0.13), color: tone }}
|
|
71
|
+
>
|
|
72
|
+
{showGlyph && <span className={classes.deltaGlyph}>{glyph}</span>}
|
|
73
|
+
{format(value)}
|
|
74
|
+
{period !== undefined && <span className={classes.deltaPeriod}>{period}</span>}
|
|
75
|
+
</span>
|
|
76
|
+
)
|
|
77
|
+
}
|