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
|
@@ -25,6 +25,8 @@ import {
|
|
|
25
25
|
Stack,
|
|
26
26
|
Text,
|
|
27
27
|
} from '@mantine/core'
|
|
28
|
+
import type { BasaltProps } from '../common/props'
|
|
29
|
+
import { cx } from '../common/props'
|
|
28
30
|
import { VX } from '../tokens'
|
|
29
31
|
import { resolveAction } from './define-notifications'
|
|
30
32
|
import { useNotificationHistory } from './store'
|
|
@@ -64,6 +66,11 @@ const INTENT_STATUS: Record<NotificationIntent, string> = {
|
|
|
64
66
|
|
|
65
67
|
type CenterView = 'inbox' | 'all'
|
|
66
68
|
|
|
69
|
+
/** The popover width `NotificationBell` fixes at the `Popover` level (see `NotificationCenter`'s
|
|
70
|
+
* own doc for why WIDTH lives there and not on this component). Shared so the two call sites and
|
|
71
|
+
* this doc's example never drift apart. */
|
|
72
|
+
export const NOTIFICATION_POPOVER_WIDTH = 320
|
|
73
|
+
|
|
67
74
|
// ── NotificationItem ──────────────────────────────────────────────────────────
|
|
68
75
|
|
|
69
76
|
function NotificationItem({
|
|
@@ -150,7 +157,7 @@ function NotificationItem({
|
|
|
150
157
|
|
|
151
158
|
// ── NotificationCenter ────────────────────────────────────────────────────────
|
|
152
159
|
|
|
153
|
-
export type NotificationCenterProps = {
|
|
160
|
+
export type NotificationCenterProps = BasaltProps & {
|
|
154
161
|
/** Maximum height of the scrollable list. Default: 320px. */
|
|
155
162
|
maxHeight?: number | string
|
|
156
163
|
}
|
|
@@ -160,16 +167,22 @@ export type NotificationCenterProps = {
|
|
|
160
167
|
* registry-resolved action buttons. Designed to be mounted inside a Popover or Drawer (e.g.
|
|
161
168
|
* NotificationBell).
|
|
162
169
|
*
|
|
170
|
+
* Sizes to its host's full width (`width: 100%`) rather than a fixed px — a popover default that
|
|
171
|
+
* overflowed any inline mount. `NotificationBell` fixes the WIDTH at the Popover level instead
|
|
172
|
+
* (`<Popover width={NOTIFICATION_POPOVER_WIDTH}>`), which is the correct home for a
|
|
173
|
+
* popover-specific dimension; a consumer mounting this directly controls the same thing through
|
|
174
|
+
* its own container.
|
|
175
|
+
*
|
|
163
176
|
* @example
|
|
164
|
-
* import { NotificationCenter } from 'basalt-ui/notifications'
|
|
177
|
+
* import { NOTIFICATION_POPOVER_WIDTH, NotificationCenter } from 'basalt-ui/notifications'
|
|
165
178
|
*
|
|
166
|
-
* <Popover>
|
|
179
|
+
* <Popover width={NOTIFICATION_POPOVER_WIDTH}>
|
|
167
180
|
* <Popover.Dropdown>
|
|
168
181
|
* <NotificationCenter />
|
|
169
182
|
* </Popover.Dropdown>
|
|
170
183
|
* </Popover>
|
|
171
184
|
*/
|
|
172
|
-
export function NotificationCenter({ maxHeight = 320 }: NotificationCenterProps) {
|
|
185
|
+
export function NotificationCenter({ maxHeight = 320, className, style }: NotificationCenterProps) {
|
|
173
186
|
const { items, inbox, unreadCount, markRead, markAllRead, dismiss, dismissAll, remove, clear } =
|
|
174
187
|
useNotificationHistory()
|
|
175
188
|
const [view, setView] = useState<CenterView>('inbox')
|
|
@@ -178,7 +191,7 @@ export function NotificationCenter({ maxHeight = 320 }: NotificationCenterProps)
|
|
|
178
191
|
const emptyLabel = view === 'inbox' ? "You're all caught up" : 'No notifications yet'
|
|
179
192
|
|
|
180
193
|
return (
|
|
181
|
-
<Stack gap="xs" style={{ width:
|
|
194
|
+
<Stack className={cx(className)} gap="xs" style={{ width: '100%', ...style }}>
|
|
182
195
|
{/* Header: title + a single mark-all-read affordance (only when there's something unread) */}
|
|
183
196
|
<Group justify="space-between" align="center" wrap="nowrap">
|
|
184
197
|
<Text size="sm" fw={600}>
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* Consumer augments BasaltRegister.notifications with the spec map type, then uses the typed
|
|
6
6
|
* `emit` helper which resolves the registered kind at compile-time. An unknown kind is a tsc error.
|
|
7
7
|
*
|
|
8
|
+
* A kind's payload type is INFERRED, the same way `defineOverlays` infers an overlay's props from
|
|
9
|
+
* `render` — annotate `toMessage` (or `action.run`) with the payload shape and `emit` picks it up:
|
|
10
|
+
* `emit('saved', { id })` then requires that shape and a wrong one is a tsc error. A kind that never
|
|
11
|
+
* annotates either function keeps today's `payload?: unknown` — additive, no existing call breaks.
|
|
12
|
+
*
|
|
8
13
|
* @example
|
|
9
14
|
* // notifications.ts (app-side)
|
|
10
15
|
* import { defineNotifications } from 'basalt-ui/notifications'
|
|
@@ -18,8 +23,9 @@
|
|
|
18
23
|
*
|
|
19
24
|
* // usage.ts
|
|
20
25
|
* import { emit } from 'basalt-ui/notifications'
|
|
21
|
-
* emit('upload:success', { name: 'photo.jpg' }) // ✓ typed
|
|
22
|
-
* emit('
|
|
26
|
+
* emit('upload:success', { name: 'photo.jpg' }) // ✓ typed, and the payload shape is checked
|
|
27
|
+
* emit('upload:success', 'nope') // ✗ tsc error — wrong payload shape
|
|
28
|
+
* emit('nonexistent', {}) // ✗ tsc error — unregistered kind
|
|
23
29
|
*/
|
|
24
30
|
import type { ReactNode } from 'react'
|
|
25
31
|
import type { Slot } from '../register'
|
|
@@ -36,23 +42,33 @@ export type { NotificationIntent }
|
|
|
36
42
|
* registry (code, app-scoped) — only a serializable `{ kind, payload }` ref is persisted — so an
|
|
37
43
|
* actionable notification keeps working after a reload. The handler can do anything (navigate, open
|
|
38
44
|
* a modal, retry a request); it receives the same payload that was passed to `emit`.
|
|
45
|
+
*
|
|
46
|
+
* The payload type P is the consumer's own payload — same generic shape as `Overlay<P>` in
|
|
47
|
+
* ./define-overlays, inferred from `run`'s parameter, not a separate declared field.
|
|
39
48
|
*/
|
|
40
|
-
export type NotificationAction = {
|
|
49
|
+
export type NotificationAction<P = unknown> = {
|
|
41
50
|
label: string
|
|
42
|
-
run: (payload:
|
|
51
|
+
run: (payload: P) => void
|
|
43
52
|
}
|
|
44
53
|
|
|
45
54
|
// ── NotificationSpecMap ───────────────────────────────────────────────────────
|
|
46
55
|
|
|
47
|
-
/**
|
|
48
|
-
|
|
56
|
+
/**
|
|
57
|
+
* A single notification kind spec — intent + optional payload→message renderer + optional action.
|
|
58
|
+
*
|
|
59
|
+
* The payload type P is INFERRED from `toMessage`/`action.run`'s parameter, the same mechanism
|
|
60
|
+
* `defineOverlays`' `Overlay<P>` uses for `render`. Default `unknown` — a kind that annotates
|
|
61
|
+
* neither function keeps taking any payload, unchanged.
|
|
62
|
+
*/
|
|
63
|
+
export type NotificationSpec<P = unknown> = {
|
|
49
64
|
intent?: NotificationIntent
|
|
50
|
-
toMessage?: (payload:
|
|
51
|
-
action?: NotificationAction
|
|
65
|
+
toMessage?: (payload: P) => ReactNode
|
|
66
|
+
action?: NotificationAction<P>
|
|
52
67
|
}
|
|
53
68
|
|
|
54
69
|
/** The map of kind → spec that a consumer registers. */
|
|
55
|
-
|
|
70
|
+
// oxlint-disable-next-line typescript/no-explicit-any -- load-bearing contravariant spec map, mirrors OverlayMap
|
|
71
|
+
export type NotificationSpecMap = Record<string, NotificationSpec<any>>
|
|
56
72
|
|
|
57
73
|
// ── Slot extraction (mirror of SeriesKey pattern in register.ts) ──────────────
|
|
58
74
|
|
|
@@ -66,11 +82,33 @@ type Notifications = Slot<'notifications', NotificationSpecMap>
|
|
|
66
82
|
*/
|
|
67
83
|
export type NotificationKind = Extract<keyof Notifications, string>
|
|
68
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Extract the inferred payload type for a registered notification kind — mirrors `OverlayProps` in
|
|
87
|
+
* ./define-overlays (same `infer` over the generic spec type, not a separate declared field).
|
|
88
|
+
*
|
|
89
|
+
* Resolves to `unknown` for a kind whose spec never annotates `toMessage`/`action.run` with a
|
|
90
|
+
* payload shape — that is the additive fallback, not a failure to infer.
|
|
91
|
+
*/
|
|
92
|
+
type NotificationPayload<K extends NotificationKind> = Notifications extends {
|
|
93
|
+
[_K in K]: NotificationSpec<infer V>
|
|
94
|
+
}
|
|
95
|
+
? V
|
|
96
|
+
: unknown
|
|
97
|
+
|
|
69
98
|
// ── defineNotification (singular) ────────────────────────────────────────────
|
|
70
99
|
|
|
71
100
|
/**
|
|
72
|
-
* Type a single notification spec without registering it.
|
|
73
|
-
*
|
|
101
|
+
* Type a single notification spec without registering it. Identity passthrough — the payload type
|
|
102
|
+
* `P` is INFERRED from `toMessage`/`action.run`'s parameter, exactly as it is inside
|
|
103
|
+
* `defineNotifications`, so a spec typed here and a spec written inline behave identically.
|
|
104
|
+
*
|
|
105
|
+
* **It is `NotificationSpec<P>`, NOT `<const T extends NotificationSpec>(spec: T): T`** — the
|
|
106
|
+
* const-generic shape every other `defineX` factory takes. Under `strictFunctionTypes` that
|
|
107
|
+
* constraint rejects the example below outright: `T` must extend `NotificationSpec<unknown>`, and a
|
|
108
|
+
* `toMessage: (p: { name: string }) => …` is not assignable to `(payload: unknown) => …`
|
|
109
|
+
* (parameters are contravariant). The factory's own documented usage did not compile. Inferring `P`
|
|
110
|
+
* instead is what makes an annotated payload the point of this file rather than a type error.
|
|
111
|
+
* `.type-guard.test.ts` pins both halves.
|
|
74
112
|
*
|
|
75
113
|
* **WARNING:** this does NOT register the spec in the runtime registry and does NOT
|
|
76
114
|
* augment BasaltRegister. Use `defineNotifications` (plural) to register a full spec
|
|
@@ -85,7 +123,7 @@ export type NotificationKind = Extract<keyof Notifications, string>
|
|
|
85
123
|
* // Merge into the full registry before passing to defineNotifications:
|
|
86
124
|
* const NOTIFICATIONS = defineNotifications({ 'upload:success': uploadSuccess })
|
|
87
125
|
*/
|
|
88
|
-
export function defineNotification<
|
|
126
|
+
export function defineNotification<P = unknown>(spec: NotificationSpec<P>): NotificationSpec<P> {
|
|
89
127
|
return spec
|
|
90
128
|
}
|
|
91
129
|
|
|
@@ -116,6 +154,16 @@ export function defineNotifications<const T extends NotificationSpecMap>(spec: T
|
|
|
116
154
|
|
|
117
155
|
// ── emit ──────────────────────────────────────────────────────────────────────
|
|
118
156
|
|
|
157
|
+
/**
|
|
158
|
+
* The rest-args tuple for `emit`'s payload + opts. A kind whose spec declared a payload shape
|
|
159
|
+
* (`NotificationPayload<K>` is narrower than `unknown`) requires that shape as a real argument; a
|
|
160
|
+
* kind that never declared one keeps `payload?: unknown` — the pre-existing, backward-compatible
|
|
161
|
+
* shape.
|
|
162
|
+
*/
|
|
163
|
+
type EmitArgs<K extends NotificationKind> = [unknown] extends [NotificationPayload<K>]
|
|
164
|
+
? [payload?: unknown, opts?: Omit<NotifyOptions, 'intent' | 'message'>]
|
|
165
|
+
: [payload: NotificationPayload<K>, opts?: Omit<NotifyOptions, 'intent' | 'message'>]
|
|
166
|
+
|
|
119
167
|
/**
|
|
120
168
|
* Emit a registered notification kind. The kind must be a key of the consumer's registered
|
|
121
169
|
* `BasaltRegister.notifications` map — any other string is a tsc error.
|
|
@@ -123,17 +171,15 @@ export function defineNotifications<const T extends NotificationSpecMap>(spec: T
|
|
|
123
171
|
* Resolves the spec's intent + toMessage, then calls notify(). Extra opts override spec defaults.
|
|
124
172
|
*
|
|
125
173
|
* Un-augmented (Notifications = {}): NotificationKind = never → `emit` is effectively uncallable.
|
|
126
|
-
* Augmented: only the registered keys are accepted
|
|
174
|
+
* Augmented: only the registered keys are accepted, and a kind whose spec annotated
|
|
175
|
+
* `toMessage`/`action.run` with a payload shape requires that shape — see {@link NotificationPayload}.
|
|
127
176
|
*
|
|
128
177
|
* @example
|
|
129
178
|
* emit('upload:success', { name: 'photo.jpg' })
|
|
130
179
|
* emit('upload:error', null, { title: 'Storage full' })
|
|
131
180
|
*/
|
|
132
|
-
export function emit(
|
|
133
|
-
|
|
134
|
-
payload?: unknown,
|
|
135
|
-
opts?: Omit<NotifyOptions, 'intent' | 'message'>,
|
|
136
|
-
): string {
|
|
181
|
+
export function emit<K extends NotificationKind>(kind: K, ...args: EmitArgs<K>): string {
|
|
182
|
+
const [payload, opts] = args
|
|
137
183
|
// The kind's compile-time validity comes from the BasaltRegister slot; the runtime spec
|
|
138
184
|
// (intent/toMessage/action) comes from the registry stashed by defineNotifications.
|
|
139
185
|
const spec: NotificationSpec | undefined = activeRegistry[kind]
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
* ./notifications — Mantine notification adapter battery.
|
|
3
3
|
*
|
|
4
4
|
* Provides notify helpers, a typed registry, a persisted history store, and a bell/center
|
|
5
|
-
*
|
|
5
|
+
* component on top of @mantine/notifications. The overlay mount is `<BasaltOverlays notifications
|
|
6
|
+
* />` (`basalt-ui/commands`) — this subpath no longer ships one of its own (C1 consolidation:
|
|
7
|
+
* `BasaltNotifications` was superseded and is removed).
|
|
6
8
|
*
|
|
7
9
|
* Optional peer: @mantine/notifications ^9.3.0.
|
|
8
10
|
*
|
|
@@ -10,8 +12,8 @@
|
|
|
10
12
|
*
|
|
11
13
|
* @example
|
|
12
14
|
* // main.tsx — mount the overlay:
|
|
13
|
-
* import {
|
|
14
|
-
* <BasaltProvider><
|
|
15
|
+
* import { BasaltOverlays } from 'basalt-ui/commands'
|
|
16
|
+
* <BasaltProvider><BasaltOverlays><App /></BasaltOverlays></BasaltProvider>
|
|
15
17
|
*
|
|
16
18
|
* // Usage:
|
|
17
19
|
* import { notifySuccess, notifyError, notifyPromise, NotificationBell } from 'basalt-ui/notifications'
|
|
@@ -19,6 +21,10 @@
|
|
|
19
21
|
* notifyError('Failed', { title: 'Upload error' })
|
|
20
22
|
* notifyPromise(save(), { loading: 'Saving…', success: 'Saved', error: 'Failed' })
|
|
21
23
|
*
|
|
24
|
+
* // Optimistic mutation with an undo window (the toast's autoClose IS the window):
|
|
25
|
+
* import { notifyUndo } from 'basalt-ui/notifications'
|
|
26
|
+
* notifyUndo({ message: 'Item deleted', onUndo: () => restore(), onExpire: () => api.delete(id) })
|
|
27
|
+
*
|
|
22
28
|
* // Shell bell (globalActions slot):
|
|
23
29
|
* <BasaltShell globalActions={[{ key: 'notifications', node: <NotificationBell />, mobile: 'bar' }]} ... />
|
|
24
30
|
*/
|
|
@@ -31,8 +37,15 @@ export {
|
|
|
31
37
|
notifyWarning,
|
|
32
38
|
notifyInfo,
|
|
33
39
|
notifyPromise,
|
|
40
|
+
notifyUndo,
|
|
41
|
+
notifyUndoable,
|
|
42
|
+
} from './notify'
|
|
43
|
+
export type {
|
|
44
|
+
NotifyOptions,
|
|
45
|
+
NotifyPromiseMessages,
|
|
46
|
+
NotifyUndoOptions,
|
|
47
|
+
NotifyUndoHandle,
|
|
34
48
|
} from './notify'
|
|
35
|
-
export type { NotifyOptions, NotifyPromiseMessages } from './notify'
|
|
36
49
|
|
|
37
50
|
// ── defineNotification + defineNotifications + typed emit ─────────────────────
|
|
38
51
|
export {
|
|
@@ -73,7 +86,3 @@ export type { NotificationBellProps } from './bell'
|
|
|
73
86
|
// ── NotificationCenter ────────────────────────────────────────────────────────
|
|
74
87
|
export { NotificationCenter } from './center'
|
|
75
88
|
export type { NotificationCenterProps } from './center'
|
|
76
|
-
|
|
77
|
-
// ── BasaltNotifications overlay ───────────────────────────────────────────────
|
|
78
|
-
export { BasaltNotifications } from './overlay'
|
|
79
|
-
export type { BasaltNotificationsProps } from './overlay'
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Duplicate-Notifications-mount guard (F15) — a shared module-level counter, not a per-caller ref,
|
|
3
|
+
* because the whole point is detecting a SECOND, unrelated caller mounting `<BasaltOverlays
|
|
4
|
+
* notifications />` (`commands/overlays-mount.tsx`) at once — nested/duplicate mounts double-render
|
|
5
|
+
* Mantine's `<Notifications />` and neither instance can see the other.
|
|
6
|
+
*
|
|
7
|
+
* Lives here (`./notifications`), not `./commands`, so `commands` is the one importing a shared util
|
|
8
|
+
* rather than the reverse — `./notifications` never depends on `./commands`. Zero `@mantine/*`
|
|
9
|
+
* import, so pulling it into `commands` does not eagerly load `@mantine/notifications`.
|
|
10
|
+
*
|
|
11
|
+
* Not exported from the `./notifications` public barrel (`index.ts`) — internal wiring only, same
|
|
12
|
+
* as `provider/lab-theme.ts`.
|
|
13
|
+
*/
|
|
14
|
+
import { useEffect } from 'react'
|
|
15
|
+
import { isDev } from '../common/is-dev'
|
|
16
|
+
|
|
17
|
+
let mountedNotificationsCount = 0
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Call from any component that renders a `<Notifications />` overlay. Warns in dev when a second
|
|
21
|
+
* caller is mounted at the same time. Not a false positive under React 18 StrictMode's double-invoke
|
|
22
|
+
* (that mounts/unmounts the SAME instance in sequence, so the count returns to 0 before a genuine
|
|
23
|
+
* second instance could exist).
|
|
24
|
+
*/
|
|
25
|
+
export function useNotificationsMountGuard(): void {
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
mountedNotificationsCount++
|
|
28
|
+
if (mountedNotificationsCount > 1 && isDev()) {
|
|
29
|
+
console.warn(
|
|
30
|
+
'[basalt] more than one Notifications overlay is mounted at once — mount exactly ONE ' +
|
|
31
|
+
"<BasaltOverlays notifications /> (they all render Mantine's <Notifications />, so " +
|
|
32
|
+
'toasts would double-fire).',
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
return () => {
|
|
36
|
+
mountedNotificationsCount--
|
|
37
|
+
}
|
|
38
|
+
}, [])
|
|
39
|
+
}
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* 2. dedupKey window — module-level Map prevents duplicate keys within 1500ms
|
|
8
8
|
*
|
|
9
9
|
* For loading→success/error transitions use notifyPromise — it calls notifications.update
|
|
10
|
-
* (never show()) so the loading state is replaced correctly.
|
|
10
|
+
* (never show()) so the loading state is replaced correctly. For an optimistic mutation with a
|
|
11
|
+
* grace period use notifyUndo — one number is both the Undo affordance and the commit delay.
|
|
11
12
|
*
|
|
12
13
|
* @example
|
|
13
14
|
* notify({ intent: 'success', message: 'Saved' })
|
|
@@ -15,6 +16,7 @@
|
|
|
15
16
|
* notifyPromise(apiCall(), { loading: 'Saving…', success: 'Saved', error: 'Failed' })
|
|
16
17
|
*/
|
|
17
18
|
import type { ReactNode } from 'react'
|
|
19
|
+
import { Button, Group, Text } from '@mantine/core'
|
|
18
20
|
import { notifications } from '@mantine/notifications'
|
|
19
21
|
import { add } from './store'
|
|
20
22
|
import type { NotificationIntent, NotificationActionRef } from './store'
|
|
@@ -85,6 +87,12 @@ export type NotifyOptions = {
|
|
|
85
87
|
* only when calling `notify()` for an action registered in the notifications registry.
|
|
86
88
|
*/
|
|
87
89
|
action?: NotificationActionRef
|
|
90
|
+
/**
|
|
91
|
+
* What the persisted history records instead of `String(message)`. Only needed when `message` is
|
|
92
|
+
* a composed ReactNode the store cannot stringify — `String(<Group/>)` is `[object Object]`.
|
|
93
|
+
* `notifyUndo` passes its plain text here because its toast body carries the Undo button.
|
|
94
|
+
*/
|
|
95
|
+
historyMessage?: string
|
|
88
96
|
}
|
|
89
97
|
|
|
90
98
|
// ── notify ────────────────────────────────────────────────────────────────────
|
|
@@ -98,7 +106,17 @@ export type NotifyOptions = {
|
|
|
98
106
|
* const id = notify({ intent: 'error', message: <b>Failed</b>, autoClose: false })
|
|
99
107
|
*/
|
|
100
108
|
export function notify(opts: NotifyOptions): string {
|
|
101
|
-
const {
|
|
109
|
+
const {
|
|
110
|
+
intent = 'info',
|
|
111
|
+
message,
|
|
112
|
+
title,
|
|
113
|
+
icon,
|
|
114
|
+
autoClose,
|
|
115
|
+
id,
|
|
116
|
+
dedupKey,
|
|
117
|
+
action,
|
|
118
|
+
historyMessage,
|
|
119
|
+
} = opts
|
|
102
120
|
|
|
103
121
|
// Two-layer dedup: dedupKey window guard
|
|
104
122
|
if (dedupKey !== undefined && isDuplicateKey(dedupKey)) return id ?? nextId()
|
|
@@ -123,7 +141,7 @@ export function notify(opts: NotifyOptions): string {
|
|
|
123
141
|
id: resolvedId,
|
|
124
142
|
intent,
|
|
125
143
|
...(title !== undefined && { title: String(title) }),
|
|
126
|
-
message: String(message),
|
|
144
|
+
message: historyMessage ?? String(message),
|
|
127
145
|
createdAt: Date.now(),
|
|
128
146
|
...(action !== undefined && { action }),
|
|
129
147
|
})
|
|
@@ -186,6 +204,107 @@ export function notifyInfo(
|
|
|
186
204
|
return notify({ ...opts, intent: 'info', message })
|
|
187
205
|
}
|
|
188
206
|
|
|
207
|
+
// ── notifyUndo ────────────────────────────────────────────────────────────────
|
|
208
|
+
|
|
209
|
+
/** Default undo window (ms) — the toast's autoClose and the grace period are the same number. */
|
|
210
|
+
const UNDO_WINDOW_MS = 6000
|
|
211
|
+
|
|
212
|
+
export type NotifyUndoOptions = {
|
|
213
|
+
/** The toast text, left of the Undo button. Also what the history records. */
|
|
214
|
+
message: ReactNode
|
|
215
|
+
/** Revert the optimistic change. Runs once, on click; `onExpire` then never runs. */
|
|
216
|
+
onUndo: () => void
|
|
217
|
+
/** How long the Undo button stays offered, in ms. Also the toast's autoClose. Default: 6000. */
|
|
218
|
+
window?: number
|
|
219
|
+
/**
|
|
220
|
+
* The window elapsed with no undo — the place to COMMIT the optimistic mutation. Runs at most
|
|
221
|
+
* once, and never after `onUndo`.
|
|
222
|
+
*/
|
|
223
|
+
onExpire?: () => void
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export type NotifyUndoHandle = {
|
|
227
|
+
/** The toast id — the same id in Mantine and in the notification history. */
|
|
228
|
+
id: string
|
|
229
|
+
/**
|
|
230
|
+
* Close the toast early and settle the window NOW: `onExpire` runs (unless undo already did), so
|
|
231
|
+
* a dismissed toast can never strand an uncommitted mutation. Idempotent.
|
|
232
|
+
*/
|
|
233
|
+
dismiss: () => void
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Show a toast offering an Undo for `window` ms, then commit.
|
|
238
|
+
*
|
|
239
|
+
* The affordance and the grace period are ONE number: `autoClose === window`, so the button is on
|
|
240
|
+
* screen for exactly as long as undoing still does something. Exactly one of `onUndo` / `onExpire`
|
|
241
|
+
* runs, exactly once — clicking Undo cancels the timer, and letting it elapse (or calling
|
|
242
|
+
* `dismiss()`) commits.
|
|
243
|
+
*
|
|
244
|
+
* Built on `notify`, so the toast is recorded to the notification history like any other.
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* // Optimistic delete: the row is already gone from the UI; commit when the window closes.
|
|
248
|
+
* setRows((rows) => rows.filter((r) => r.id !== id))
|
|
249
|
+
* notifyUndo({
|
|
250
|
+
* message: 'Item deleted',
|
|
251
|
+
* onUndo: () => setRows(before),
|
|
252
|
+
* onExpire: () => api.delete(id),
|
|
253
|
+
* })
|
|
254
|
+
*/
|
|
255
|
+
export function notifyUndo(opts: NotifyUndoOptions): NotifyUndoHandle {
|
|
256
|
+
const { message, onUndo, window: undoWindow = UNDO_WINDOW_MS, onExpire } = opts
|
|
257
|
+
const id = nextId()
|
|
258
|
+
|
|
259
|
+
let settled = false
|
|
260
|
+
let timer: ReturnType<typeof setTimeout> | undefined
|
|
261
|
+
|
|
262
|
+
const settle = (undone: boolean): void => {
|
|
263
|
+
if (settled) return
|
|
264
|
+
settled = true
|
|
265
|
+
if (timer !== undefined) clearTimeout(timer)
|
|
266
|
+
notifications.hide(id)
|
|
267
|
+
if (undone) onUndo()
|
|
268
|
+
else onExpire?.()
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
timer = setTimeout(() => settle(false), undoWindow)
|
|
272
|
+
|
|
273
|
+
notify({
|
|
274
|
+
intent: 'info',
|
|
275
|
+
id,
|
|
276
|
+
autoClose: undoWindow,
|
|
277
|
+
historyMessage: String(message),
|
|
278
|
+
message: (
|
|
279
|
+
<Group justify="space-between" wrap="nowrap" gap="sm">
|
|
280
|
+
<Text span size="sm">
|
|
281
|
+
{message}
|
|
282
|
+
</Text>
|
|
283
|
+
<Button variant="subtle" size="compact-xs" onClick={() => settle(true)}>
|
|
284
|
+
Undo
|
|
285
|
+
</Button>
|
|
286
|
+
</Group>
|
|
287
|
+
),
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
return { id, dismiss: () => settle(false) }
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* `notifyUndo` for the common optimistic shape: the UI already changed, `undo` puts it back, and
|
|
295
|
+
* `mutate` is what actually commits when the window closes.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* notifyUndoable(() => api.delete(id), () => setRows(before), { message: 'Item deleted' })
|
|
299
|
+
*/
|
|
300
|
+
export function notifyUndoable(
|
|
301
|
+
mutate: () => void,
|
|
302
|
+
undo: () => void,
|
|
303
|
+
opts: Omit<NotifyUndoOptions, 'onUndo' | 'onExpire'>,
|
|
304
|
+
): NotifyUndoHandle {
|
|
305
|
+
return notifyUndo({ ...opts, onUndo: undo, onExpire: mutate })
|
|
306
|
+
}
|
|
307
|
+
|
|
189
308
|
// ── notifyPromise ─────────────────────────────────────────────────────────────
|
|
190
309
|
|
|
191
310
|
export type NotifyPromiseMessages = {
|
|
@@ -21,6 +21,13 @@ import { useSyncExternalStore } from 'react'
|
|
|
21
21
|
|
|
22
22
|
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Mantine's own notification vocabulary — kept as its own type rather than aliased to
|
|
26
|
+
* `common/props.ts`'s `Tone` (`'good' | 'warn' | 'bad'`) because `@mantine/notifications` and
|
|
27
|
+
* `INTENT_COLOR`/`INTENT_ROLE` key off exactly these four strings. Roughly:
|
|
28
|
+
* `success` ~ `Tone.good`, `error`/`warning` ~ `Tone.bad`/`Tone.warn`, `info` has no `Tone`
|
|
29
|
+
* equivalent (`ToneWithNeutral`'s `'neutral'` is the nearest fit).
|
|
30
|
+
*/
|
|
24
31
|
export type NotificationIntent = 'success' | 'error' | 'warning' | 'info'
|
|
25
32
|
|
|
26
33
|
/**
|
|
@@ -16,9 +16,12 @@
|
|
|
16
16
|
import { ActionIcon, Badge, Divider, Group, Popover, Stack, Text } from '@mantine/core'
|
|
17
17
|
import { useDisclosure } from '@mantine/hooks'
|
|
18
18
|
import { useRef } from 'react'
|
|
19
|
+
import type { BasaltProps } from '../common/props'
|
|
19
20
|
import { alpha, VX } from '../tokens'
|
|
20
21
|
import { useConnectivity } from './use-connectivity'
|
|
21
|
-
import type { ConnectivityStatus } from './types'
|
|
22
|
+
import type { ConnectivityStatus } from './connectivity-types'
|
|
23
|
+
|
|
24
|
+
export type ConnectivityIndicatorProps = BasaltProps
|
|
22
25
|
|
|
23
26
|
const HOVER_OPEN_DELAY = 150
|
|
24
27
|
const HOVER_CLOSE_DELAY = 200
|
|
@@ -180,7 +183,7 @@ const ICON_COLOR: Record<ConnectivityStatus, string> = {
|
|
|
180
183
|
* {...rest}
|
|
181
184
|
* />
|
|
182
185
|
*/
|
|
183
|
-
export function ConnectivityIndicator() {
|
|
186
|
+
export function ConnectivityIndicator({ className, style }: ConnectivityIndicatorProps = {}) {
|
|
184
187
|
const [opened, { open, toggle, close }] = useDisclosure(false)
|
|
185
188
|
const { status, details } = useConnectivity()
|
|
186
189
|
const statusCfg = STATUS_CONFIG[status]
|
|
@@ -215,6 +218,8 @@ export function ConnectivityIndicator() {
|
|
|
215
218
|
aria-label={statusCfg.label}
|
|
216
219
|
aria-expanded={opened}
|
|
217
220
|
aria-haspopup="dialog"
|
|
221
|
+
{...(className !== undefined && { className })}
|
|
222
|
+
{...(style !== undefined && { style })}
|
|
218
223
|
>
|
|
219
224
|
<WifiIcon />
|
|
220
225
|
</ActionIcon>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { createContext, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
|
9
9
|
import type { ReactNode } from 'react'
|
|
10
10
|
import { onlineManager } from '@tanstack/react-query'
|
|
11
|
-
import type { ConnectivitySnapshot, ConnectivityProviderProps } from './types'
|
|
11
|
+
import type { ConnectivitySnapshot, ConnectivityProviderProps } from './connectivity-types'
|
|
12
12
|
|
|
13
13
|
// ── SSR-safe default ────────────────────────────────────────────────────────────────────────────────
|
|
14
14
|
|
|
@@ -16,7 +16,10 @@ const SSR_SNAPSHOT: ConnectivitySnapshot = {
|
|
|
16
16
|
status: 'online',
|
|
17
17
|
details: {
|
|
18
18
|
browserOnline: true,
|
|
19
|
-
|
|
19
|
+
// Optimistic `true`, matching `browserOnline` — `onlineManager` is a module singleton so it is
|
|
20
|
+
// always readable, this is the same pre-hydration default as every other signal, never the
|
|
21
|
+
// "not mounted" case (see `ConnectivitySnapshot['details']['queryOnline']`'s JSDoc).
|
|
22
|
+
queryOnline: true,
|
|
20
23
|
sseOpen: null,
|
|
21
24
|
healthPassing: null,
|
|
22
25
|
},
|
|
@@ -13,7 +13,10 @@ export type ConnectivitySnapshot = {
|
|
|
13
13
|
/** Per-signal breakdown for debugging / detailed indicators */
|
|
14
14
|
details: {
|
|
15
15
|
browserOnline: boolean // navigator.onLine
|
|
16
|
-
|
|
16
|
+
// React Query onlineManager — a module-level singleton, so it is always readable regardless of
|
|
17
|
+
// whether a QueryClient is mounted; never null on the client (the pre-hydration SSR snapshot
|
|
18
|
+
// reports an optimistic `true`, matching `browserOnline`, rather than an "unknown" null).
|
|
19
|
+
queryOnline: boolean
|
|
17
20
|
sseOpen: boolean | null // EventSource readyState === OPEN — null when no sseUrl configured
|
|
18
21
|
healthPassing: boolean | null // /health ping succeeded — null when no healthUrl configured
|
|
19
22
|
}
|
|
@@ -21,7 +24,7 @@ export type ConnectivitySnapshot = {
|
|
|
21
24
|
|
|
22
25
|
export type ConnectivityOverride = {
|
|
23
26
|
browserOnline?: boolean
|
|
24
|
-
queryOnline?: boolean
|
|
27
|
+
queryOnline?: boolean
|
|
25
28
|
sseOpen?: boolean | null
|
|
26
29
|
healthPassing?: boolean | null
|
|
27
30
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* The boundary renders ABOVE MantineProvider, so its fallback is plain HTML styled here — no
|
|
2
|
+
Mantine primitive, no inline style object (hidden-inline-style). Tokens only. */
|
|
3
|
+
.root {
|
|
4
|
+
max-width: 32rem;
|
|
5
|
+
margin: 0 auto;
|
|
6
|
+
padding: var(--vx-space-stack-xl);
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
gap: var(--vx-space-stack-md);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.reload {
|
|
13
|
+
align-self: flex-start;
|
|
14
|
+
font: inherit;
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
padding: var(--vx-space-stack-xs) var(--vx-space-stack-md);
|
|
17
|
+
border: 1px solid var(--vx-divider);
|
|
18
|
+
border-radius: var(--vx-radius-ctrl);
|
|
19
|
+
background: transparent;
|
|
20
|
+
color: inherit;
|
|
21
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed CSS-module declaration (the S4 CSS-modules path). Named string props — not an index
|
|
3
|
+
* signature — so dot access stays verbatim under the package's strict flags.
|
|
4
|
+
*/
|
|
5
|
+
declare const classes: {
|
|
6
|
+
readonly root: string
|
|
7
|
+
readonly reload: string
|
|
8
|
+
}
|
|
9
|
+
export default classes
|