basalt-ui 1.40.3 → 2.0.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 +50 -45
- package/CHANGELOG.md +543 -513
- package/MIGRATING.md +969 -37
- package/README.md +172 -367
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +30 -0
- package/agent/templates/DESIGN.md.tpl +2 -2
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/check.yml +1 -1
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +468 -847
- package/configs/oxlint-plugin.test.ts +662 -710
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/foreign.d.ts +3 -2
- package/dist/agent/foreign.d.ts.map +1 -1
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -26
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +79 -8
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +68 -135
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +89 -76
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -27
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -6
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/copy-action.d.ts +1 -1
- package/dist/content/glyphs.d.ts +1 -1
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/foreign.ts +3 -2
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +120 -68
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +161 -276
- package/src/cli/init.ts +60 -37
- package/src/cli/sync.ts +13 -45
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/copy-action.tsx +1 -1
- package/src/content/glyphs.tsx +1 -1
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +37 -192
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/CLAUDE-block.md.tpl +0 -40
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -44,6 +44,7 @@ import { useMemo } from 'react'
|
|
|
44
44
|
import { useDeriveControlsState, toDeriveOverride } from '../theme-lab/derive-state'
|
|
45
45
|
import type { DeriveOverride } from '../theme-lab/derive-state'
|
|
46
46
|
import { baseTheme, createBasaltTheme } from '../theme'
|
|
47
|
+
import type { BasaltDensityLevel, BasaltRadiusLevel } from '../theme'
|
|
47
48
|
|
|
48
49
|
type Plain = Record<string, unknown>
|
|
49
50
|
|
|
@@ -115,8 +116,8 @@ export function applyLabOverride(
|
|
|
115
116
|
if (override === null) return theme
|
|
116
117
|
const labTheme = createBasaltTheme(undefined, {
|
|
117
118
|
derive: override.config,
|
|
118
|
-
radius: override.radiusLevel,
|
|
119
|
-
density: override.densityLevel,
|
|
119
|
+
radius: override.radiusLevel as BasaltRadiusLevel,
|
|
120
|
+
density: override.densityLevel as BasaltDensityLevel,
|
|
120
121
|
})
|
|
121
122
|
// An all-defaults override resolves back to `baseTheme` itself, so the delta is empty and this
|
|
122
123
|
// merge is a no-op — the "Apply" switch on at level 0 changes nothing, as it should.
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Route view transitions (V2-SPEC § 5): the direction of a navigation, read off `BasaltShell` nav
|
|
3
|
+
* order, plus the guard that keeps the router's discarded `ViewTransition` promises quiet.
|
|
4
|
+
*
|
|
5
|
+
* The router owns the call (`router-core` `startViewTransition`, router.js:490-508): it passes
|
|
6
|
+
* `{ update, types }` to `document.startViewTransition` when the browser supports
|
|
7
|
+
* `:active-view-transition-type()`, a bare callback otherwise, and returns only `updateCallbackDone`,
|
|
8
|
+
* so `ready` and `finished` are dropped on the floor.
|
|
9
|
+
*/
|
|
10
|
+
import type { AnyRouter } from '@tanstack/react-router'
|
|
11
|
+
import { flattenNav, getActiveNav } from '../router-tanstack/nav'
|
|
12
|
+
|
|
13
|
+
/** The three `:active-view-transition-type()` names `styles.css` animates. Namespaced: a consumer's own cannot collide. */
|
|
14
|
+
export const ROUTE_TRANSITION_TYPES = {
|
|
15
|
+
forward: 'basalt-forward',
|
|
16
|
+
back: 'basalt-back',
|
|
17
|
+
sibling: 'basalt-sibling',
|
|
18
|
+
} as const
|
|
19
|
+
|
|
20
|
+
/** The argument of the router's `types` callback, derived from its own option type. */
|
|
21
|
+
type RouterLocationChange = Parameters<
|
|
22
|
+
Extract<
|
|
23
|
+
Extract<AnyRouter['options']['defaultViewTransition'], object>['types'],
|
|
24
|
+
(...args: never[]) => unknown
|
|
25
|
+
>
|
|
26
|
+
>[0]
|
|
27
|
+
|
|
28
|
+
/** The part of it the direction reads: two pathnames and whether the path changed. */
|
|
29
|
+
type LocationChange = Pick<RouterLocationChange, 'pathChanged'> & {
|
|
30
|
+
fromLocation?: Pick<NonNullable<RouterLocationChange['fromLocation']>, 'pathname'>
|
|
31
|
+
toLocation: Pick<RouterLocationChange['toLocation'], 'pathname'>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type ActiveNav = NonNullable<ReturnType<typeof getActiveNav>>
|
|
35
|
+
type NavItem = ReturnType<typeof flattenNav>[number]
|
|
36
|
+
|
|
37
|
+
const trimTrailingSlash = (path: string): string =>
|
|
38
|
+
path.length > 1 && path.endsWith('/') ? path.slice(0, -1) : path
|
|
39
|
+
|
|
40
|
+
const segmentsOf = (path: string): string[] => path.split('/').filter(Boolean)
|
|
41
|
+
|
|
42
|
+
/** A pattern segment: a path literal (case-insensitive), a given param value (case-sensitive), or a wildcard. */
|
|
43
|
+
type Part = { kind: 'literal' | 'value'; text: string } | { kind: 'param' | 'optional' | 'splat' }
|
|
44
|
+
|
|
45
|
+
/** `to` as parts, with the item's own `params` interpolated; the unspecified stay wildcards. */
|
|
46
|
+
function patternOf(item: NavItem): Part[] {
|
|
47
|
+
const params: unknown = item.link.params
|
|
48
|
+
const given = (typeof params === 'object' && params !== null ? params : {}) as Record<
|
|
49
|
+
string,
|
|
50
|
+
unknown
|
|
51
|
+
>
|
|
52
|
+
return segmentsOf(item.link.to).map((segment): Part => {
|
|
53
|
+
if (segment === '$') return { kind: 'splat' }
|
|
54
|
+
const param = /^\{?(-?)\$([\w-]+)\}?$/.exec(segment)
|
|
55
|
+
if (param === null) return { kind: 'literal', text: segment.toLowerCase() }
|
|
56
|
+
const value = given[param[2] ?? '']
|
|
57
|
+
if (value !== undefined) return { kind: 'value', text: String(value) }
|
|
58
|
+
return { kind: param[1] === '-' ? 'optional' : 'param' }
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** The path, once: each segment as written and lower-cased. */
|
|
63
|
+
type PathSegment = { raw: string; lower: string }
|
|
64
|
+
|
|
65
|
+
function matchParts(parts: Part[], path: PathSegment[], at: number, fuzzy: boolean): boolean {
|
|
66
|
+
const [part, ...rest] = parts
|
|
67
|
+
if (part === undefined) return fuzzy || at === path.length
|
|
68
|
+
if (part.kind === 'splat') return true
|
|
69
|
+
if (part.kind === 'optional' && matchParts(rest, path, at, fuzzy)) return true
|
|
70
|
+
const actual = path[at]
|
|
71
|
+
if (actual === undefined) return false
|
|
72
|
+
if (part.kind === 'literal' && part.text !== actual.lower) return false
|
|
73
|
+
if (part.kind === 'value' && part.text !== actual.raw) return false
|
|
74
|
+
return matchParts(rest, path, at + 1, fuzzy)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Whether the path is on `item`: the sidebar's rule (`use-nav.ts` `matchOf`: `matchRoute` with
|
|
79
|
+
* `fuzzy: exact !== true && to !== '/'`, the item's `params` applied, case-insensitive) as a pure
|
|
80
|
+
* string match, because the router's own matcher only answers for its current location.
|
|
81
|
+
*/
|
|
82
|
+
function onItem(item: NavItem, path: PathSegment[]): boolean {
|
|
83
|
+
const fuzzy = item.exact !== true && item.link.to !== '/'
|
|
84
|
+
return matchParts(patternOf(item), path, 0, fuzzy)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The flattened-nav index of the item that owns `pathname`, picked as the sidebar picks its active
|
|
89
|
+
* item: of the matches, the most specific (most non-empty segments in `link.to`) wins and the first
|
|
90
|
+
* in definition order takes a tie. `-1` when nothing matches.
|
|
91
|
+
*
|
|
92
|
+
* @internal exported for the corpus test against the router's real `matchRoute`.
|
|
93
|
+
*/
|
|
94
|
+
export function navIndexOf(flat: ReadonlyArray<NavItem>, pathname: string): number {
|
|
95
|
+
const path = segmentsOf(trimTrailingSlash(pathname)).map((raw) => ({
|
|
96
|
+
raw,
|
|
97
|
+
lower: raw.toLowerCase(),
|
|
98
|
+
}))
|
|
99
|
+
let winner = -1
|
|
100
|
+
let winnerSpecificity = -1
|
|
101
|
+
for (const [index, item] of flat.entries()) {
|
|
102
|
+
const specificity = segmentsOf(item.link.to).length
|
|
103
|
+
if (specificity > winnerSpecificity && onItem(item, path)) {
|
|
104
|
+
winner = index
|
|
105
|
+
winnerSpecificity = specificity
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return winner
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The `types` callback for the router's `defaultViewTransition`. Pure: the nav is a parameter.
|
|
113
|
+
*
|
|
114
|
+
* - No `fromLocation`: the first load. The router also runs it through `startViewTransition`
|
|
115
|
+
* (load-client.js:916), but there is no previous page to animate from, so `false`.
|
|
116
|
+
* - Same path (search or hash only): `false`, the page does not change.
|
|
117
|
+
* - A later nav item than the one you left: `forward`; an earlier one: `back`.
|
|
118
|
+
* - Same item (a detail beneath it), or either side outside the nav: `sibling`, a plain crossfade.
|
|
119
|
+
*/
|
|
120
|
+
export function routeTransitionTypes(
|
|
121
|
+
{ fromLocation, toLocation, pathChanged }: LocationChange,
|
|
122
|
+
nav: ActiveNav | undefined,
|
|
123
|
+
): string[] | false {
|
|
124
|
+
if (!fromLocation || !pathChanged) return false
|
|
125
|
+
const flat = nav ? flattenNav(nav) : []
|
|
126
|
+
const fromIndex = navIndexOf(flat, fromLocation.pathname)
|
|
127
|
+
const toIndex = navIndexOf(flat, toLocation.pathname)
|
|
128
|
+
if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex)
|
|
129
|
+
return [ROUTE_TRANSITION_TYPES.sibling]
|
|
130
|
+
return [toIndex > fromIndex ? ROUTE_TRANSITION_TYPES.forward : ROUTE_TRANSITION_TYPES.back]
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The router's own gate for passing `types` (router.js:495): without it the callback is never
|
|
135
|
+
* called and every navigation, first load and filter changes included, gets the UA's full-page
|
|
136
|
+
* crossfade. So below this support line there is no route transition at all. Server: none.
|
|
137
|
+
*/
|
|
138
|
+
export function supportsViewTransitionTypes(): boolean {
|
|
139
|
+
if (typeof window === 'undefined') return false
|
|
140
|
+
const css: { supports?: (condition: string) => boolean } | undefined = window.CSS
|
|
141
|
+
return css?.supports?.('selector(:active-view-transition-type(a))') === true
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** What `createBasaltRouter` hands the router as `defaultViewTransition`. */
|
|
145
|
+
export const routeViewTransition = {
|
|
146
|
+
types: (change: LocationChange) => routeTransitionTypes(change, getActiveNav()),
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// ── rejection guard ──────────────────────────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
/** The three ways a transition ends early: superseded (`AbortError`), document hidden/detached, timed out. */
|
|
152
|
+
const SKIP_NAMES = new Set(['AbortError', 'InvalidStateError', 'TimeoutError'])
|
|
153
|
+
|
|
154
|
+
const isTransitionSkip = (reason: unknown): boolean =>
|
|
155
|
+
reason instanceof DOMException && SKIP_NAMES.has(reason.name)
|
|
156
|
+
|
|
157
|
+
/** Hands a non-skip to the page's error handlers once (`window` `error`, which `BasaltProvider` forwards). */
|
|
158
|
+
const reportOnce = (reason: unknown): void => {
|
|
159
|
+
if (isTransitionSkip(reason)) return
|
|
160
|
+
if (typeof reportError === 'function') reportError(reason)
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** `finished` repeats whatever `ready` or `updateCallbackDone` already reported; never report it twice. */
|
|
164
|
+
const ignore = (): void => {}
|
|
165
|
+
|
|
166
|
+
const guarded = new WeakSet<object>()
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Attaches a catch to `ready` and `finished` of every `document.startViewTransition` call, once per
|
|
170
|
+
* installed function (idempotent across routers). Router-core drops both (it returns only
|
|
171
|
+
* `updateCallbackDone`), and a superseded transition rejects them with `AbortError: Transition was
|
|
172
|
+
* skipped` (router discussion #7733), which `window` `unhandledrejection` — and so basalt's
|
|
173
|
+
* telemetry sink — would report.
|
|
174
|
+
*
|
|
175
|
+
* - `ready`: a skip is swallowed; any other reason goes to `reportError`, so it surfaces once, there
|
|
176
|
+
* (a throwing handler would create a second, unowned rejection).
|
|
177
|
+
* - `finished`: always swallowed. A non-skip reason is the update callback's error, which `ready`
|
|
178
|
+
* (and, for the router, its own `await updateCallbackDone`) already carries.
|
|
179
|
+
* - `updateCallbackDone` is left alone: the router awaits it, and a catch here would re-raise a
|
|
180
|
+
* real error from a derived promise nobody owns.
|
|
181
|
+
*
|
|
182
|
+
* Chosen over an `unhandledrejection` filter because it removes the rejection at its source: it
|
|
183
|
+
* never becomes unhandled, so no listener (basalt's, a consumer's, devtools) sees it, and
|
|
184
|
+
* `preventDefault()` on a shared event would hide real rejections from the others. The wrapper
|
|
185
|
+
* returns the original `ViewTransition`. A no-op where the API is absent, and on the server.
|
|
186
|
+
*/
|
|
187
|
+
export function guardViewTransitionRejections(): void {
|
|
188
|
+
if (typeof document === 'undefined' || typeof document.startViewTransition !== 'function') return
|
|
189
|
+
if (guarded.has(document.startViewTransition)) return
|
|
190
|
+
const original = document.startViewTransition.bind(document)
|
|
191
|
+
const wrapped: Document['startViewTransition'] = (...args) => {
|
|
192
|
+
const transition = original(...args)
|
|
193
|
+
transition.ready.catch(reportOnce)
|
|
194
|
+
transition.finished.catch(ignore)
|
|
195
|
+
return transition
|
|
196
|
+
}
|
|
197
|
+
guarded.add(wrapped)
|
|
198
|
+
document.startViewTransition = wrapped
|
|
199
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The provider's Spotlight list: the `defineCommands` registry, then the `defineNav` destinations
|
|
3
|
+
* (via `flattenNav`), then the three dev-dock commands in dev. A snapshot rebuilt each time Spotlight
|
|
4
|
+
* opens, so a command's `when()` is current. Not for use during render (`detectMac` reads `navigator`).
|
|
5
|
+
*/
|
|
6
|
+
import type { SpotlightActionData } from '@mantine/spotlight'
|
|
7
|
+
import type { AnyRouter } from '@tanstack/react-router'
|
|
8
|
+
import { getActiveCommands } from '../commands/define-commands'
|
|
9
|
+
import { detectMac, formatShortcutDisplay } from '../commands/shortcut-format'
|
|
10
|
+
import { flattenNav, getActiveNav } from '../router-tanstack/nav'
|
|
11
|
+
import type { BasaltDevDockTool } from '../dev-dock'
|
|
12
|
+
import { runCommandSafely } from './hotkeys'
|
|
13
|
+
|
|
14
|
+
const DEV_TOOLS: ReadonlyArray<{ tool: BasaltDevDockTool; label: string }> = [
|
|
15
|
+
{ tool: 'router', label: 'Router devtools' },
|
|
16
|
+
{ tool: 'query', label: 'Query devtools' },
|
|
17
|
+
{ tool: 'theme', label: 'Theme lab' },
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
export function buildSpotlightActions(
|
|
21
|
+
router: AnyRouter,
|
|
22
|
+
openDevTool: (tool: BasaltDevDockTool) => void,
|
|
23
|
+
): SpotlightActionData[] {
|
|
24
|
+
const actions: SpotlightActionData[] = []
|
|
25
|
+
|
|
26
|
+
for (const [id, cmd] of Object.entries(getActiveCommands())) {
|
|
27
|
+
if (cmd.when !== undefined && !cmd.when()) continue
|
|
28
|
+
actions.push({
|
|
29
|
+
id,
|
|
30
|
+
label: cmd.label,
|
|
31
|
+
leftSection: cmd.icon,
|
|
32
|
+
keywords: [cmd.group ?? '', id].join(' ').trim(),
|
|
33
|
+
...(cmd.group !== undefined && { group: cmd.group }),
|
|
34
|
+
...(cmd.shortcut !== undefined && {
|
|
35
|
+
description: formatShortcutDisplay(cmd.shortcut, detectMac()),
|
|
36
|
+
}),
|
|
37
|
+
onClick: () => runCommandSafely(cmd),
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const nav = getActiveNav()
|
|
42
|
+
if (nav !== undefined) {
|
|
43
|
+
for (const item of flattenNav(nav)) {
|
|
44
|
+
if (item.disabled === true) continue
|
|
45
|
+
actions.push({
|
|
46
|
+
id: `nav.${item.id}`,
|
|
47
|
+
label: item.label,
|
|
48
|
+
group: item.groupLabel,
|
|
49
|
+
leftSection: item.icon,
|
|
50
|
+
// `link` is the destination's own `linkOptions`, so a store-backed `search` thunk restores
|
|
51
|
+
// the last selection exactly as the sidebar link does.
|
|
52
|
+
onClick: () => void router.navigate(item.link as never),
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
58
|
+
for (const { tool, label } of DEV_TOOLS) {
|
|
59
|
+
actions.push({
|
|
60
|
+
id: `dev.${tool}`,
|
|
61
|
+
label,
|
|
62
|
+
group: 'Dev',
|
|
63
|
+
onClick: () => openDevTool(tool),
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return actions
|
|
69
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test helper — a real `createBasaltRouter` over a one-component root route plus an `/other` leaf,
|
|
3
|
+
* so provider tests mount the actual tree (QueryClient in context, RouterProvider, overlays).
|
|
4
|
+
*/
|
|
5
|
+
import { Outlet, createRootRoute, createRoute } from '@tanstack/react-router'
|
|
6
|
+
import type { AnyRouter } from '@tanstack/react-router'
|
|
7
|
+
import { createBasaltRouter } from './create-router'
|
|
8
|
+
import type { BasaltRouterContext } from './create-router'
|
|
9
|
+
|
|
10
|
+
/** The router's QueryClient — a plain root route declares no context type, so read it untyped. */
|
|
11
|
+
export const queryClientOf = (router: AnyRouter): BasaltRouterContext['queryClient'] =>
|
|
12
|
+
(router.options.context as BasaltRouterContext).queryClient
|
|
13
|
+
|
|
14
|
+
export function testRouter(text = 'content') {
|
|
15
|
+
const root = createRootRoute({
|
|
16
|
+
component: () => (
|
|
17
|
+
<>
|
|
18
|
+
<div>{text}</div>
|
|
19
|
+
<Outlet />
|
|
20
|
+
</>
|
|
21
|
+
),
|
|
22
|
+
})
|
|
23
|
+
const other = createRoute({ getParentRoute: () => root, path: '/other', component: () => null })
|
|
24
|
+
return createBasaltRouter({ routeTree: root.addChildren([other]) })
|
|
25
|
+
}
|
package/src/query-client.ts
CHANGED
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `
|
|
3
|
-
*
|
|
4
|
-
* requires `@tanstack/react-query` as a peer, so a dedicated Mantine-free subpath bought nothing —
|
|
5
|
-
* and it re-exported 10 raw TanStack symbols no consumer imported through it.
|
|
6
|
-
* Optional peer: @tanstack/react-query.
|
|
2
|
+
* `unwrap` plus the QueryClient factory `createBasaltRouter` owns (V2-SPEC § 2): one client per
|
|
3
|
+
* router, so an SSR entry gets one per request. Optional peer: @tanstack/react-query.
|
|
7
4
|
*/
|
|
8
5
|
import { QueryClient } from '@tanstack/react-query'
|
|
9
6
|
import type { QueryClientConfig } from '@tanstack/react-query'
|
|
10
7
|
|
|
11
|
-
// ── createBasaltQueryClient ───────────────────────────────────────────────────────────────────────
|
|
12
|
-
|
|
13
8
|
const BASALT_QUERY_DEFAULTS = {
|
|
14
9
|
staleTime: 30_000,
|
|
15
10
|
gcTime: 5 * 60 * 1000,
|
|
@@ -17,21 +12,8 @@ const BASALT_QUERY_DEFAULTS = {
|
|
|
17
12
|
refetchOnWindowFocus: false,
|
|
18
13
|
} as const
|
|
19
14
|
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
* overrides win per-query, framework defaults are the fallback.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* import { createBasaltQueryClient } from 'basalt-ui'
|
|
26
|
-
* import { QueryClientProvider } from '@tanstack/react-query'
|
|
27
|
-
* import { useState } from 'react'
|
|
28
|
-
*
|
|
29
|
-
* function Root({ children }: { children: React.ReactNode }) {
|
|
30
|
-
* const [client] = useState(() => createBasaltQueryClient())
|
|
31
|
-
* return <QueryClientProvider client={client}>{children}</QueryClientProvider>
|
|
32
|
-
* }
|
|
33
|
-
*/
|
|
34
|
-
export function createBasaltQueryClient(config?: QueryClientConfig): QueryClient {
|
|
15
|
+
/** QueryClient with the basalt dashboard defaults; consumer `config` wins per-query. */
|
|
16
|
+
export function makeQueryClient(config?: QueryClientConfig): QueryClient {
|
|
35
17
|
return new QueryClient({
|
|
36
18
|
...config,
|
|
37
19
|
defaultOptions: {
|
|
@@ -1,62 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ./router-tanstack — headless TanStack Router bridge
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* `createSearchStore` + the `field.*` vocabulary — no Mantine, no JSX.
|
|
2
|
+
* ./router-tanstack — headless TanStack Router bridge. The nav half (`defineNav`, `navGroup`,
|
|
3
|
+
* `navTarget`, `flattenNav`, `useBasaltNav`, `NavItemId`) moves to the root barrel in 2.0 and the
|
|
4
|
+
* store half (`createSearchStore`) to `./state`, which re-exports it from `./search-store` directly.
|
|
5
|
+
* The shell's active-state resolver lives in `use-nav.ts` and is not a public export.
|
|
6
|
+
* Optional peer: @tanstack/react-router. No Mantine, no JSX.
|
|
8
7
|
*/
|
|
8
|
+
import type { ReactNode } from 'react'
|
|
9
|
+
import { useLocation } from '@tanstack/react-router'
|
|
9
10
|
|
|
10
|
-
export { createSearchStore, type CreateSearchStoreOptions, type SearchStore } from './search-store'
|
|
11
|
-
export { field } from '../state'
|
|
12
|
-
export type {
|
|
13
|
-
AnyField,
|
|
14
|
-
BooleanField,
|
|
15
|
-
EnumField,
|
|
16
|
-
FieldFallback,
|
|
17
|
-
FieldHandle,
|
|
18
|
-
FieldLane,
|
|
19
|
-
FieldOption,
|
|
20
|
-
FieldSetOptions,
|
|
21
|
-
FieldValue,
|
|
22
|
-
MultiField,
|
|
23
|
-
NumberField,
|
|
24
|
-
RangeField,
|
|
25
|
-
RangeParams,
|
|
26
|
-
RangePresets,
|
|
27
|
-
RangeValue,
|
|
28
|
-
RangeWindow,
|
|
29
|
-
RangeWindows,
|
|
30
|
-
ResolvedLane,
|
|
31
|
-
SearchValues,
|
|
32
|
-
StoredValues,
|
|
33
|
-
StringField,
|
|
34
|
-
} from '../state'
|
|
35
11
|
export { defineNav, navGroup, navTarget, flattenNav } from './nav'
|
|
36
|
-
export type {
|
|
37
|
-
NavItemMeta,
|
|
38
|
-
NavGroupMeta,
|
|
39
|
-
AnyNavItem,
|
|
40
|
-
AnyNavGroup,
|
|
41
|
-
AnyNavLink,
|
|
42
|
-
FlatNavItem,
|
|
43
|
-
NavConfig,
|
|
44
|
-
NavItemId,
|
|
45
|
-
NavGroupId,
|
|
46
|
-
NavTabId,
|
|
47
|
-
NavIndex,
|
|
48
|
-
} from './nav'
|
|
49
|
-
export { useNav } from './use-nav'
|
|
50
|
-
export type { UseNavOptions, NavBinding } from './use-nav'
|
|
51
|
-
export type { NavAnchor, NavAnchorProps, NavMobilePlacement } from '../shell/nav-types'
|
|
52
|
-
import type { ReactNode } from 'react'
|
|
53
|
-
import { useLocation, useMatches } from '@tanstack/react-router'
|
|
12
|
+
export type { NavItemId } from './nav'
|
|
54
13
|
|
|
55
14
|
// ── StaticDataRouteOption augmentation ───────────────────────────────────────────────────────────
|
|
56
15
|
|
|
57
16
|
declare module '@tanstack/react-router' {
|
|
58
17
|
interface StaticDataRouteOption {
|
|
59
|
-
/** Page/section title
|
|
18
|
+
/** Page/section title. */
|
|
60
19
|
title?: string
|
|
61
20
|
/** Nav icon — ReactNode passed through to the shell SidebarItem. */
|
|
62
21
|
icon?: ReactNode
|
|
@@ -67,33 +26,19 @@ declare module '@tanstack/react-router' {
|
|
|
67
26
|
|
|
68
27
|
// ── useBasaltNav ──────────────────────────────────────────────────────────────────────────────────
|
|
69
28
|
|
|
70
|
-
/** Reactive nav-active state derived from the current TanStack Router location. */
|
|
71
|
-
export type BasaltNav = {
|
|
72
|
-
/** Current pathname (reactive, updates on every navigation). */
|
|
73
|
-
currentPath: string
|
|
74
|
-
/**
|
|
75
|
-
* True when `href` matches the current route.
|
|
76
|
-
* Default: prefix match so a parent nav item stays active on child routes.
|
|
77
|
-
* Pass `{ exact: true }` for exact-only matching.
|
|
78
|
-
* The root `'/'` always matches exactly regardless of the option.
|
|
79
|
-
*/
|
|
80
|
-
isActive: (href: string, opts?: { exact?: boolean }) => boolean
|
|
81
|
-
}
|
|
82
|
-
|
|
83
29
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
30
|
+
* The current path and an `isActive` predicate for nav highlighting. `isActive(href)` is a prefix
|
|
31
|
+
* match so a parent stays active on child routes; `{ exact: true }` matches exactly, and `'/'` is
|
|
32
|
+
* always exact. Reads only `useLocation` — navigation stays with TanStack's own `<Link>`.
|
|
87
33
|
*
|
|
88
34
|
* @example
|
|
89
|
-
*
|
|
90
|
-
*
|
|
91
|
-
* function NavItem({ href, label }: { href: string; label: string }) {
|
|
92
|
-
* const { isActive } = useBasaltNav()
|
|
93
|
-
* return <NavLink href={href} active={isActive(href)}>{label}</NavLink>
|
|
94
|
-
* }
|
|
35
|
+
* const { isActive } = useBasaltNav()
|
|
36
|
+
* <NavLink href={href} active={isActive(href)}>{label}</NavLink>
|
|
95
37
|
*/
|
|
96
|
-
export function useBasaltNav():
|
|
38
|
+
export function useBasaltNav(): {
|
|
39
|
+
currentPath: string
|
|
40
|
+
isActive: (href: string, opts?: { exact?: boolean }) => boolean
|
|
41
|
+
} {
|
|
97
42
|
const currentPath = useLocation({ select: (l) => l.pathname })
|
|
98
43
|
|
|
99
44
|
const isActive = (href: string, opts?: { exact?: boolean }): boolean => {
|
|
@@ -104,42 +49,3 @@ export function useBasaltNav(): BasaltNav {
|
|
|
104
49
|
|
|
105
50
|
return { currentPath, isActive }
|
|
106
51
|
}
|
|
107
|
-
|
|
108
|
-
// ── useRouterBreadcrumbs ──────────────────────────────────────────────────────────────────────────
|
|
109
|
-
|
|
110
|
-
/** A single breadcrumb entry projected from route staticData. */
|
|
111
|
-
export type BasaltBreadcrumb = {
|
|
112
|
-
/** The route's `staticData.title`. */
|
|
113
|
-
title: string
|
|
114
|
-
/** The matched pathname for this ancestor (usable as `<Link to={href}>` target). */
|
|
115
|
-
href: string
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Returns the ancestor→deepest breadcrumb trail derived from `staticData.title` on each match.
|
|
120
|
-
* Routes without a `staticData.title` are silently omitted.
|
|
121
|
-
* Uses the `select` form of `useMatches` for re-render gating — only re-renders when the
|
|
122
|
-
* projected breadcrumb array actually changes shape.
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* import { useRouterBreadcrumbs } from 'basalt-ui/router-tanstack'
|
|
126
|
-
*
|
|
127
|
-
* function AppBreadcrumbs() {
|
|
128
|
-
* const crumbs = useRouterBreadcrumbs()
|
|
129
|
-
* return (
|
|
130
|
-
* <nav aria-label="breadcrumb">
|
|
131
|
-
* {crumbs.map((c) => <a key={c.href} href={c.href}>{c.title}</a>)}
|
|
132
|
-
* </nav>
|
|
133
|
-
* )
|
|
134
|
-
* }
|
|
135
|
-
*/
|
|
136
|
-
export function useRouterBreadcrumbs(): BasaltBreadcrumb[] {
|
|
137
|
-
return useMatches({
|
|
138
|
-
select: (matches) =>
|
|
139
|
-
matches.flatMap((m) =>
|
|
140
|
-
typeof m.staticData?.title === 'string'
|
|
141
|
-
? [{ title: m.staticData.title, href: m.pathname }]
|
|
142
|
-
: [],
|
|
143
|
-
),
|
|
144
|
-
})
|
|
145
|
-
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* No JSX and no Mantine in this module — `./router-tanstack` is a headless barrel by contract.
|
|
13
13
|
*/
|
|
14
|
+
import type { RegisteredRouter } from '@tanstack/react-router'
|
|
14
15
|
import type { ReactNode } from 'react'
|
|
15
16
|
import type { NavMobilePlacement, NavSectionMobile } from '../shell/nav-types'
|
|
16
17
|
|
|
@@ -154,8 +155,33 @@ export function navGroup<const M extends NavGroupMeta, const T extends ReadonlyA
|
|
|
154
155
|
export function defineNav<
|
|
155
156
|
const G extends ReadonlyArray<AnyNavGroup>,
|
|
156
157
|
const T extends ReadonlyArray<NavTabId<G>>,
|
|
157
|
-
>(config: NavConfig<G, T
|
|
158
|
-
|
|
158
|
+
>(config: RegisteredOr<NavConfig<G, T>>): NavConfig<G, T> {
|
|
159
|
+
const nav = config as unknown as NavConfig<G, T>
|
|
160
|
+
activeNav = nav
|
|
161
|
+
return nav
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Without the `Register` augmentation `RegisteredRouter` is `AnyRouter`, every `to` widens to
|
|
166
|
+
* `string` and the definition validates nothing — so the parameter becomes an unsatisfiable string
|
|
167
|
+
* literal whose text is the fix (V2-SPEC § 3).
|
|
168
|
+
*/
|
|
169
|
+
type RegisteredOr<T> = 0 extends 1 & RegisteredRouter['routeTree']
|
|
170
|
+
? 'basalt: declare Register { router }'
|
|
171
|
+
: T
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The runtime stash `defineNav` fills (the last call wins, like `defineCommands`), read by
|
|
175
|
+
* `BasaltProvider` to project the nav into Spotlight. Type augmentation is erased, so this is the
|
|
176
|
+
* live source.
|
|
177
|
+
*
|
|
178
|
+
* @internal
|
|
179
|
+
*/
|
|
180
|
+
let activeNav: { groups: ReadonlyArray<AnyNavGroup> } | undefined
|
|
181
|
+
|
|
182
|
+
/** @internal */
|
|
183
|
+
export function getActiveNav(): { groups: ReadonlyArray<AnyNavGroup> } | undefined {
|
|
184
|
+
return activeNav
|
|
159
185
|
}
|
|
160
186
|
|
|
161
187
|
// ── readers ──────────────────────────────────────────────────────────────────────────────────────
|
|
@@ -31,8 +31,15 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import { useNavigate, useSearch } from '@tanstack/react-router'
|
|
33
33
|
import { createStoreCore } from '../state/fields'
|
|
34
|
-
import type {
|
|
35
|
-
|
|
34
|
+
import type {
|
|
35
|
+
AnyField,
|
|
36
|
+
FieldHandle,
|
|
37
|
+
FieldSetOptions,
|
|
38
|
+
FieldWrite,
|
|
39
|
+
SearchValues,
|
|
40
|
+
StoreEntry,
|
|
41
|
+
StoredValues,
|
|
42
|
+
} from '../state/fields'
|
|
36
43
|
|
|
37
44
|
// ── Types ──────────────────────────────────────────────────────────────────
|
|
38
45
|
|