basalt-ui 1.41.0 → 2.0.1
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 +46 -43
- package/CHANGELOG.md +542 -518
- package/MIGRATING.md +964 -37
- package/README.md +171 -366
- 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 +16 -26
- package/agent/templates/DESIGN.md.tpl +1 -1
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +465 -844
- package/configs/oxlint-plugin.test.ts +661 -709
- 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/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 +18 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +6 -0
- package/dist/cli/doctor-upgrade.d.ts +43 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +314 -0
- package/dist/cli/doctor.d.ts +14 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +58 -9
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +48 -172
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +39 -132
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -37
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -23
- 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/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 +80 -173
- 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/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 +26 -43
- package/src/cli/doctor-upgrade.ts +457 -0
- package/src/cli/doctor.ts +89 -72
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +100 -384
- package/src/cli/init.ts +60 -51
- package/src/cli/sync.ts +13 -68
- 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/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 +36 -191
- 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/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
package/src/cli/init.ts
CHANGED
|
@@ -6,15 +6,16 @@
|
|
|
6
6
|
import { existsSync } from 'node:fs'
|
|
7
7
|
import { resolve } from 'node:path'
|
|
8
8
|
|
|
9
|
-
import { deriveSpacing } from '../tokens'
|
|
9
|
+
import { deriveSpacing } from '../tokens/core'
|
|
10
10
|
import type { MergeLintResult, ScaffoldFlags } from './index'
|
|
11
11
|
import {
|
|
12
12
|
MANIFEST_PATH,
|
|
13
|
-
|
|
13
|
+
declaredProfile,
|
|
14
|
+
readBasaltConfig,
|
|
15
|
+
ROUTER_SEED_DESTS,
|
|
14
16
|
findBasaltInstall,
|
|
15
17
|
managedFiles,
|
|
16
18
|
mergeOxlintExtends,
|
|
17
|
-
migrateBlockToAgentsMd,
|
|
18
19
|
normalizeForLedger,
|
|
19
20
|
patchPackageJson,
|
|
20
21
|
placementNotices,
|
|
@@ -22,9 +23,7 @@ import {
|
|
|
22
23
|
readManifest,
|
|
23
24
|
reconcileRoots,
|
|
24
25
|
renderContext,
|
|
25
|
-
reportBlockMigration,
|
|
26
26
|
reportPrune,
|
|
27
|
-
resolvePeerFlags,
|
|
28
27
|
resolvePlacement,
|
|
29
28
|
rootsNotices,
|
|
30
29
|
sha256,
|
|
@@ -32,6 +31,7 @@ import {
|
|
|
32
31
|
writeFileEnsuringDir,
|
|
33
32
|
writeUnit,
|
|
34
33
|
} from './index'
|
|
34
|
+
import { seedTsconfigExtends } from './doctor-upgrade'
|
|
35
35
|
import { readOxlintPresetPlugins } from './sync'
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -40,28 +40,35 @@ import { readOxlintPresetPlugins } from './sync'
|
|
|
40
40
|
* whole lint half stays off, and every gate downstream reports green over it.
|
|
41
41
|
*/
|
|
42
42
|
const KEPT_FILE_COST: Record<string, string> = {
|
|
43
|
-
'.oxlintrc.json':
|
|
44
|
-
'the shipped oxlint preset (the basalt/* design rules AND the jsx-a11y / import / promise / ' +
|
|
45
|
-
'unicorn plugins) is NOT active — nothing else turns it on, and every gate stays green ' +
|
|
46
|
-
'without it. Re-run with `--merge-lint` to splice the extends in, or add it by hand.',
|
|
47
43
|
'lefthook.yml':
|
|
48
44
|
'the pre-commit oxlint / oxfmt / check-theme jobs are not wired — add `extends: ' +
|
|
49
45
|
'[<preset>]` to your own file.',
|
|
50
46
|
'.github/workflows/check.yml':
|
|
51
47
|
'CI does not run check-theme or the sync drift gate — copy those steps into your own workflow.',
|
|
48
|
+
'src/main.tsx':
|
|
49
|
+
'change it to match node_modules/basalt-ui/agent/templates/main.tpl: import ' +
|
|
50
|
+
"'basalt-ui/styles.css'; `const router = createBasaltRouter({ routeTree })`; declare " +
|
|
51
|
+
"`interface Register { router: typeof router }` in module '@tanstack/react-router'; render " +
|
|
52
|
+
'`<BasaltProvider router={router} />`. Without them the seeded src/lib/nav.tsx fails tsc.',
|
|
52
53
|
'.oxfmtrc.json': 'your existing formatter config stands; basalt formats nothing on its own.',
|
|
53
54
|
'DESIGN.md': 'the design brief Claude reads is yours, not the seeded one.',
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
/**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (blockProblem !== null) {
|
|
61
|
-
console.error(`✖ basalt-ui init: ${blockProblem}`)
|
|
62
|
-
return 1
|
|
57
|
+
/** What happened to a kept `.oxlintrc.json`, by the merge result (null: `--no-merge-lint`). */
|
|
58
|
+
function oxlintrcCost(merge: MergeLintResult | null): string {
|
|
59
|
+
if (merge === 'added' || merge === 'already') {
|
|
60
|
+
return 'now extends the shipped preset: the basalt/* design rules and the jsx-a11y / import / promise / unicorn plugins are on.'
|
|
63
61
|
}
|
|
62
|
+
const why =
|
|
63
|
+
merge === null ? 'init ran with --no-merge-lint' : 'init could not splice the extends in'
|
|
64
|
+
return (
|
|
65
|
+
`the shipped oxlint preset (the basalt/* rules, jsx-a11y, import, promise, unicorn) is NOT active: ${why}, ` +
|
|
66
|
+
'nothing else turns it on, and every gate stays green without it. Add the `extends` by hand.'
|
|
67
|
+
)
|
|
68
|
+
}
|
|
64
69
|
|
|
70
|
+
/** Scaffold all managed files into the consumer repo, then write the manifest. Idempotent. Returns 0. */
|
|
71
|
+
export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags = {}): number {
|
|
65
72
|
// ── Describe the repo BEFORE rendering anything ───────────────────────────
|
|
66
73
|
// Every roots-derived seed (the CI oxfmt globs, DESIGN.md's series path, the default scan
|
|
67
74
|
// exemption) renders from `basalt.roots`, so the key has to exist first. Writing it is what
|
|
@@ -91,13 +98,30 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
|
|
|
91
98
|
return true
|
|
92
99
|
})
|
|
93
100
|
|
|
101
|
+
// create-vite's `tsc -b && vite build` fails on a fresh app: vite generates routeTree.gen.ts.
|
|
102
|
+
// The stock script is reordered; any other script that runs tsc gets one line of advice.
|
|
103
|
+
let buildNote: string | null = null
|
|
104
|
+
patchPackageJson(cwd, (pkg) => {
|
|
105
|
+
const scripts = (pkg['scripts'] ?? {}) as Record<string, unknown>
|
|
106
|
+
const build = scripts['build']
|
|
107
|
+
if (typeof build !== 'string' || !/\btsc\b/.test(build) || build.startsWith('vite build')) {
|
|
108
|
+
return false
|
|
109
|
+
}
|
|
110
|
+
if (build !== 'tsc -b && vite build') {
|
|
111
|
+
buildNote = `"build" (${build}) left as is: run \`vite build\` before \`tsc\` (vite generates routeTree.gen.ts).`
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
114
|
+
pkg['scripts'] = { ...scripts, build: 'vite build && tsc -b' }
|
|
115
|
+
buildNote = 'rewrote "build" to `vite build && tsc -b` (vite generates routeTree.gen.ts).'
|
|
116
|
+
return true
|
|
117
|
+
})
|
|
118
|
+
|
|
94
119
|
const manifest = readManifest(cwd)
|
|
95
|
-
const peers = resolvePeerFlags(cwd, scaffoldFlags)
|
|
96
120
|
const placement = resolvePlacement(cwd)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const
|
|
121
|
+
// A tokens-only consumer has no use for the Mantine/React scaffolds (doctor skips them there too).
|
|
122
|
+
const tokensOnly = declaredProfile(readBasaltConfig(cwd), []) === 'tokens-only'
|
|
123
|
+
const routerSeeds: string[] = Object.values(ROUTER_SEED_DESTS)
|
|
124
|
+
const files = managedFiles(placement).filter((f) => !(tokensOnly && routerSeeds.includes(f.dest)))
|
|
101
125
|
|
|
102
126
|
const writtenFiles: string[] = []
|
|
103
127
|
const keptFiles: string[] = []
|
|
@@ -134,7 +158,7 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
|
|
|
134
158
|
const pruned = pruneRetiredManagedFiles(cwd, manifest, files)
|
|
135
159
|
|
|
136
160
|
const mergeLint: MergeLintResult | null =
|
|
137
|
-
scaffoldFlags.
|
|
161
|
+
scaffoldFlags.noMergeLint === true ? null : mergeOxlintExtends(cwd, ctx.vars.OXLINT_PRESET_PATH)
|
|
138
162
|
|
|
139
163
|
manifest.basaltVersion = ctx.vars.BASALT_VERSION
|
|
140
164
|
manifest.spacingScale = { ...deriveSpacing(0).scale }
|
|
@@ -144,7 +168,6 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
|
|
|
144
168
|
`basalt-ui init: ${writtenFiles.length} written, ${keptFiles.length} kept, manifest at ${MANIFEST_PATH}`,
|
|
145
169
|
)
|
|
146
170
|
reportPrune(pruned)
|
|
147
|
-
reportBlockMigration(migration, 'init')
|
|
148
171
|
if (missingSources.length > 0) {
|
|
149
172
|
console.log(
|
|
150
173
|
`basalt-ui init: ${missingSources.length} shipped asset(s) not present, skipped: ${missingSources.join(', ')}`,
|
|
@@ -156,48 +179,34 @@ export function init(cwd: string = process.cwd(), scaffoldFlags: ScaffoldFlags =
|
|
|
156
179
|
if (keptFiles.length > 0) {
|
|
157
180
|
console.log(`\nKept (already present — basalt did not touch them):`)
|
|
158
181
|
for (const dest of keptFiles) {
|
|
159
|
-
const cost = KEPT_FILE_COST[dest]
|
|
182
|
+
const cost = dest === '.oxlintrc.json' ? oxlintrcCost(mergeLint) : KEPT_FILE_COST[dest]
|
|
160
183
|
console.log(cost === undefined ? ` · ${dest}` : ` · ${dest} — ${cost}`)
|
|
161
184
|
}
|
|
162
185
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
'has-comments':
|
|
171
|
-
'.oxlintrc.json carries comments; rewriting it would delete them (usually the reason each ' +
|
|
172
|
-
`rule is off). Add "extends": ["${ctx.vars.OXLINT_PRESET_PATH}"] as the first entry by hand.`,
|
|
173
|
-
}
|
|
174
|
-
console.log(`basalt-ui init: --merge-lint — ${mergeMessage[mergeLint]}`)
|
|
186
|
+
// `already` / `absent` need no words: the preset is on, or the seeded config just made it so.
|
|
187
|
+
const mergeMessage: Partial<Record<MergeLintResult, string>> = {
|
|
188
|
+
added: `spliced "${ctx.vars.OXLINT_PRESET_PATH}" into the existing .oxlintrc.json extends`,
|
|
189
|
+
unreadable: '.oxlintrc.json is not valid JSON — merge the extends entry by hand',
|
|
190
|
+
'has-comments':
|
|
191
|
+
'.oxlintrc.json carries comments; rewriting it would delete them (usually the reason each ' +
|
|
192
|
+
`rule is off). Add "extends": ["${ctx.vars.OXLINT_PRESET_PATH}"] as the first entry by hand.`,
|
|
175
193
|
}
|
|
194
|
+
const mergeLine = mergeLint === null ? undefined : mergeMessage[mergeLint]
|
|
195
|
+
if (mergeLine !== undefined) console.log(`basalt-ui init: oxlint — ${mergeLine}`)
|
|
196
|
+
const tsconfigLine = tokensOnly ? null : seedTsconfigExtends(cwd)
|
|
197
|
+
if (tsconfigLine !== null) console.log(`basalt-ui init: ${tsconfigLine}`)
|
|
198
|
+
if (buildNote !== null) console.log(`basalt-ui init: ${buildNote}`)
|
|
176
199
|
const rootsMessages = rootsNotices(rootsState)
|
|
177
200
|
for (const line of rootsMessages.log) console.log(`basalt-ui init: ${line}`)
|
|
178
201
|
for (const line of rootsMessages.error) console.error(`⚠ basalt-ui init: ${line}`)
|
|
179
202
|
if (seededLintScript) {
|
|
180
203
|
console.log(`basalt-ui init: added the "lint:basalt" script (${lintScript}) to package.json.`)
|
|
181
204
|
}
|
|
182
|
-
// The permanent placement skips (repo-root-shaped tooling
|
|
205
|
+
// The permanent placement skips (repo-root-shaped tooling) — one text,
|
|
183
206
|
// shared with `sync`. See {@link placementNotices}.
|
|
184
207
|
for (const line of placementNotices(cwd, placement)) {
|
|
185
208
|
console.log(`basalt-ui init: ${line}`)
|
|
186
209
|
}
|
|
187
|
-
// query-client.ts / __root.tsx reference the optional TanStack peers directly — seeding them
|
|
188
|
-
// without the peer installed would ship an unresolved import. Hint how to opt in instead.
|
|
189
|
-
if (!peers.hasQuery) {
|
|
190
|
-
console.log(
|
|
191
|
-
'basalt-ui init: skipped src/query-client.ts (no @tanstack/react-query dependency detected) — ' +
|
|
192
|
-
'install it, or re-run with --with-query, to scaffold it.',
|
|
193
|
-
)
|
|
194
|
-
}
|
|
195
|
-
if (!peers.hasRouter || !peers.hasQuery) {
|
|
196
|
-
console.log(
|
|
197
|
-
'basalt-ui init: skipped src/routes/__root.tsx (needs both @tanstack/react-router and ' +
|
|
198
|
-
'@tanstack/react-query) — install both, or re-run with --with-router --with-query, to scaffold it.',
|
|
199
|
-
)
|
|
200
|
-
}
|
|
201
210
|
// The guard-hook PreToolUse registration is NOT written automatically — add it manually to
|
|
202
211
|
// .claude/settings.json so every Write/Edit/MultiEdit goes through the theme guard.
|
|
203
212
|
console.log(
|
package/src/cli/sync.ts
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `sync` — split out of `src/cli/index.ts` (C2) so the dispatcher file holds routing only. Imports
|
|
3
|
-
* the managed-file manifest engine (`managedFiles`, `readManifest`, `writeUnit`, `reconcileRoots`,
|
|
4
|
-
* …), the toolchain-seam inspectors (`inspectLefthookGate`, `basaltPresetEntry`), and project
|
|
5
|
-
* resolution back from `./index`, this package's shared CLI helpers.
|
|
6
|
-
*/
|
|
1
|
+
/** `sync` — split out of `src/cli/index.ts` (C2); shared plumbing is imported back from `./index`. */
|
|
7
2
|
import { existsSync } from 'node:fs'
|
|
8
3
|
import { resolve } from 'node:path'
|
|
9
4
|
|
|
10
|
-
import { deriveSpacing } from '../tokens'
|
|
5
|
+
import { deriveSpacing } from '../tokens/core'
|
|
11
6
|
import {
|
|
12
7
|
MANIFEST_PATH,
|
|
13
8
|
basaltPresetEntry,
|
|
@@ -17,12 +12,8 @@ import {
|
|
|
17
12
|
diffSummary,
|
|
18
13
|
findBasaltInstall,
|
|
19
14
|
inspectLefthookGate,
|
|
20
|
-
AGENTS_MD,
|
|
21
|
-
blockMigrationProblem,
|
|
22
15
|
isStringArray,
|
|
23
|
-
LEGACY_BLOCK_HOST,
|
|
24
16
|
managedFiles,
|
|
25
|
-
migrateBlockToAgentsMd,
|
|
26
17
|
normalizeForLedger,
|
|
27
18
|
noteRelocation,
|
|
28
19
|
OXLINT_FILES,
|
|
@@ -36,9 +27,7 @@ import {
|
|
|
36
27
|
reconcileRoots,
|
|
37
28
|
relativePosix,
|
|
38
29
|
renderContext,
|
|
39
|
-
reportBlockMigration,
|
|
40
30
|
reportPrune,
|
|
41
|
-
resolvePeerFlags,
|
|
42
31
|
resolvePlacement,
|
|
43
32
|
resolveProjectDir,
|
|
44
33
|
rootsNotices,
|
|
@@ -63,22 +52,8 @@ export type SyncOptions = {
|
|
|
63
52
|
}
|
|
64
53
|
|
|
65
54
|
/**
|
|
66
|
-
* The
|
|
67
|
-
*
|
|
68
|
-
* `resolveProjectDir` resolves to exactly one directory — `BASALT_CWD` when set, else the
|
|
69
|
-
* invocation cwd — and never walks. The shape that produced this function is the one that resolver
|
|
70
|
-
* doesn't cover: a consumer standing in `apps/dashboard`, the package that actually depends on
|
|
71
|
-
* basalt-ui, whose install lives at the repo root above it. With nothing walking up, `sync` read
|
|
72
|
-
* "no manifest here" as "nothing scaffolded yet" and wrote a complete second consumer beside the
|
|
73
|
-
* real one.
|
|
74
|
-
*/
|
|
75
|
-
/**
|
|
76
|
-
* The sentence `sync` prints when the cwd carries no install but an ancestor does.
|
|
77
|
-
*
|
|
78
|
-
* Shared with `doctor` deliberately. The two commands already share `resolveProjectDir`, but not
|
|
79
|
-
* the ADVICE: `sync` named the parent install (1.22.0's "stop scaffolding a second consumer" fix)
|
|
80
|
-
* while `doctor`, in the same directory, kept prescribing `basalt-ui init` — so following doctor
|
|
81
|
-
* literally performed the exact mistake that fix exists to prevent. One function, one sentence.
|
|
55
|
+
* The sentence `sync` and `doctor` both print when the cwd carries no install but an ancestor does
|
|
56
|
+
* (a package under a configured repo); one text, so neither prescribes a second `init`.
|
|
82
57
|
*/
|
|
83
58
|
export function parentInstallAdvice(cwd: string, parent: string, verb: string): string {
|
|
84
59
|
return (
|
|
@@ -87,6 +62,7 @@ export function parentInstallAdvice(cwd: string, parent: string, verb: string):
|
|
|
87
62
|
)
|
|
88
63
|
}
|
|
89
64
|
|
|
65
|
+
/** The nearest ANCESTOR of `dir` (exclusive) carrying a basalt manifest, or null. */
|
|
90
66
|
export function findManifestAbove(dir: string): string | null {
|
|
91
67
|
let current = resolve(dir, '..')
|
|
92
68
|
for (;;) {
|
|
@@ -104,11 +80,8 @@ export function findManifestAbove(dir: string): string | null {
|
|
|
104
80
|
* (a CI freshness gate), exit 0 when all current.
|
|
105
81
|
* - `--force` overwrites locally-drifted files instead of skipping them.
|
|
106
82
|
*
|
|
107
|
-
* Runs against `resolveProjectDir(cwd)
|
|
108
|
-
*
|
|
109
|
-
* {@link findManifestAbove} for the failure that bought this: `sync` is the drift refresh and
|
|
110
|
-
* `init` is the scaffold, so placing twenty files on a cwd that was never a consumer is a decision
|
|
111
|
-
* `sync` does not get to make silently.
|
|
83
|
+
* Runs against `resolveProjectDir(cwd)` and REFUSES rather than scaffolding when that project has no
|
|
84
|
+
* manifest: `sync` refreshes, `init` scaffolds.
|
|
112
85
|
*/
|
|
113
86
|
export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd()): number {
|
|
114
87
|
const syncFlags = opts.flags ?? []
|
|
@@ -117,15 +90,8 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
|
|
|
117
90
|
const cwd = project.dir
|
|
118
91
|
noteRelocation('sync', project)
|
|
119
92
|
|
|
120
|
-
// Profile before the refusal
|
|
121
|
-
//
|
|
122
|
-
// in so many words that init is NOT the fix there — it places a Mantine doctrine the consumer
|
|
123
|
-
// has no use for. Mirrors doctor's manifest row verbatim, and exits 0 so `sync --check` is
|
|
124
|
-
// wirable into a tokens-only repo's CI (the one drift gate every other consumer runs).
|
|
125
|
-
//
|
|
126
|
-
// DECLARED, never inferred — the same asymmetry check-theme applies, for the same reason: the
|
|
127
|
-
// answer SILENCES the whole reconciliation, and inferring it from a missing @mantine/core would
|
|
128
|
-
// turn a framework consumer that keeps Mantine in a sibling package into a silent no-op.
|
|
93
|
+
// Profile before the refusal: init is NOT the fix for a tokens-only consumer. Declared, never
|
|
94
|
+
// inferred (the answer silences the whole reconciliation); exits 0 so `sync --check` is wirable.
|
|
129
95
|
if (declaredProfile(readBasaltConfig(cwd), syncFlags) === 'tokens-only') {
|
|
130
96
|
console.log(
|
|
131
97
|
`basalt-ui sync: ${MANIFEST_PATH}: n/a — a tokens-only consumer has no scaffold to ` +
|
|
@@ -135,12 +101,10 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
|
|
|
135
101
|
return 0
|
|
136
102
|
}
|
|
137
103
|
|
|
138
|
-
//
|
|
139
|
-
// key is half the damage: a second `basalt` block means check-theme scans a different tree
|
|
140
|
-
// depending on which directory it was invoked from.
|
|
104
|
+
// Refuse BEFORE reconcileRoots, which writes `basalt.roots` into package.json.
|
|
141
105
|
if (!existsSync(resolve(cwd, MANIFEST_PATH))) {
|
|
142
106
|
const elsewhere = findManifestAbove(cwd)
|
|
143
|
-
const wouldWrite = managedFiles(
|
|
107
|
+
const wouldWrite = managedFiles(resolvePlacement(cwd)).length
|
|
144
108
|
console.error(
|
|
145
109
|
`✖ basalt-ui sync: no ${MANIFEST_PATH} at ${cwd} — refusing to scaffold. ` +
|
|
146
110
|
`\`sync\` refreshes an EXISTING basalt install; creating one is \`basalt-ui init\`'s ` +
|
|
@@ -154,24 +118,12 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
|
|
|
154
118
|
return 1
|
|
155
119
|
}
|
|
156
120
|
|
|
157
|
-
// A block that cannot be moved safely refuses the whole run BEFORE reconcileRoots writes anything.
|
|
158
|
-
const blockProblem = blockMigrationProblem(cwd)
|
|
159
|
-
if (blockProblem !== null) {
|
|
160
|
-
console.error(`✖ basalt-ui sync: ${blockProblem}`)
|
|
161
|
-
return 1
|
|
162
|
-
}
|
|
163
|
-
|
|
164
121
|
// Before renderContext, which reads `basalt.roots` for the roots-derived template variables.
|
|
165
122
|
const rootsState = reconcileRoots(cwd, { write: opts.check !== true })
|
|
166
123
|
const ctx = renderContext(cwd)
|
|
167
124
|
const manifest = readManifest(cwd)
|
|
168
|
-
const peers = resolvePeerFlags(cwd, {})
|
|
169
125
|
const placement = resolvePlacement(cwd)
|
|
170
|
-
const files = managedFiles(
|
|
171
|
-
|
|
172
|
-
// Before the loop: the block moved from CLAUDE.md to AGENTS.md, and the loop reads AGENTS.md.
|
|
173
|
-
// `--check` only reports it (and stays red until a real sync moves it).
|
|
174
|
-
const migration = migrateBlockToAgentsMd(cwd, manifest, { dryRun: opts.check === true })
|
|
126
|
+
const files = managedFiles(placement)
|
|
175
127
|
|
|
176
128
|
let updated = 0
|
|
177
129
|
// `created` and `recreated` were one counter, and `0 updated, 20 recreated` is what a full
|
|
@@ -288,16 +240,10 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
|
|
|
288
240
|
`${retired.join(', ')} — run \`basalt-ui sync\`.`,
|
|
289
241
|
)
|
|
290
242
|
}
|
|
291
|
-
if (migration.pending) {
|
|
292
|
-
console.error(
|
|
293
|
-
`basalt-ui sync --check: the basalt block is still in ${LEGACY_BLOCK_HOST} — it now ` +
|
|
294
|
-
`lives in ${AGENTS_MD}. Run \`basalt-ui sync\` to move it.`,
|
|
295
|
-
)
|
|
296
|
-
}
|
|
297
243
|
if (staleForCheck > 0) {
|
|
298
244
|
console.error(`basalt-ui sync --check: ${staleForCheck} managed file(s) out of date.`)
|
|
299
245
|
}
|
|
300
|
-
if (staleForCheck > 0
|
|
246
|
+
if (staleForCheck > 0) return 1
|
|
301
247
|
const n = placementSkips.length
|
|
302
248
|
const skips = n === 0 ? '' : ` (${n} permanent placement skip(s) — --verbose for detail)`
|
|
303
249
|
console.log(`✓ basalt-ui sync --check: all managed files current.${skips}`)
|
|
@@ -313,7 +259,6 @@ export function sync(opts: SyncOptions = {}, invocationCwd: string = process.cwd
|
|
|
313
259
|
`${skippedDrift} skipped (drift), ${pruned.removed.length} retired.`,
|
|
314
260
|
)
|
|
315
261
|
reportPrune(pruned)
|
|
316
|
-
reportBlockMigration(migration, 'sync')
|
|
317
262
|
if (driftLines.length > 0) {
|
|
318
263
|
console.log('Locally-edited files were skipped (run with --force to overwrite):')
|
|
319
264
|
for (const l of driftLines) console.log(l)
|
package/src/cli/tokens-css.ts
CHANGED
|
@@ -34,21 +34,9 @@ function generatedHeader(version: string, command: string, flags: string[]): str
|
|
|
34
34
|
|
|
35
35
|
/**
|
|
36
36
|
* Space- and number-normalize the argument list of a legacy color function so the emitted file
|
|
37
|
-
* survives a
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* `buildPaletteCss` returned": `rgba(255,255,255,0.6)` and `rgba(255, 255, 255, 0.6)` are the same
|
|
41
|
-
* colour, the shipped palette emits the first form on the dark side and the second on the light
|
|
42
|
-
* side, and a consumer committing the output ate a lint-ignore entry for the difference. The token
|
|
43
|
-
* VALUES are untouched — nothing here can change what basalt's tokens are.
|
|
44
|
-
*
|
|
45
|
-
* Trailing zeros go the same way and for the same reason: prettier rewrites `0.10` → `0.1`, so the
|
|
46
|
-
* two `rgba(28, 25, 23, 0.10)` alphas in the light shadow tokens were the whole reason the one
|
|
47
|
-
* framework-free consumer still could not lint its committed sheet — `--fix` and `tokens:css
|
|
48
|
-
* --check` disagreed forever, and the lint-ignore entry survived two releases. Only a bare decimal
|
|
49
|
-
* literal is touched (never a `%`, a `var()` or a unit), and `0.10`/`0.1` are the same number.
|
|
50
|
-
*
|
|
51
|
-
* Exported for tests, so the expectation can be computed rather than restated.
|
|
37
|
+
* survives a repo's formatter (`rgba(255,255,255,0.6)` and `rgba(255, 255, 255, 0.6)` are the same
|
|
38
|
+
* colour; `0.10` becomes `0.1`). FORMATTING ONLY: token values are untouched, and only a bare decimal
|
|
39
|
+
* literal is touched (never a `%`, a `var()` or a unit). Exported for tests.
|
|
52
40
|
*/
|
|
53
41
|
export function normalizeColorFunctions(css: string): string {
|
|
54
42
|
return css.replace(/\b(rgba?|hsla?)\(([^()]*)\)/g, (_match, fn: string, args: string) => {
|
|
@@ -116,19 +104,10 @@ function emitGeneratedCss(content: string, flags: string[], cwd: string, command
|
|
|
116
104
|
}
|
|
117
105
|
|
|
118
106
|
/**
|
|
119
|
-
* tokens:css — emit the `--vx-*` stylesheet, optionally retargeted
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* system as plain CSS, with no package in its dependency tree at all. `basalt-ui/tokens.css` is the
|
|
124
|
-
* same artifact for a consumer that does install; this command exists for the ones that shouldn't
|
|
125
|
-
* have to just to change a selector.
|
|
126
|
-
*
|
|
127
|
-
* It parses flags and calls `buildPaletteCss` for the token VALUES — the CLI and the API must not
|
|
128
|
-
* be able to disagree about what basalt's tokens are. What it adds is strictly file framing for an
|
|
129
|
-
* artifact a consumer COMMITS: the `@generated` header (the guard's skip marker), a trailing
|
|
130
|
-
* newline, and `rgba()` argument spacing. All three were reported by the one framework-free
|
|
131
|
-
* consumer as the reasons the output could not simply be committed.
|
|
107
|
+
* tokens:css — emit the `--vx-*` stylesheet, optionally retargeted, for a static site that installs
|
|
108
|
+
* nothing (`bunx basalt-ui tokens:css --selector-attribute data-theme --out src/tokens.css`). Token
|
|
109
|
+
* VALUES come from `buildPaletteCss`, so the CLI and the API cannot disagree; the CLI adds only file
|
|
110
|
+
* framing for a committed artifact: the `@generated` header, a trailing newline, `rgba()` spacing.
|
|
132
111
|
*/
|
|
133
112
|
export function tokensCss(flags: string[], cwd: string = process.cwd()): number {
|
|
134
113
|
const attribute = flagValue(flags, '--selector-attribute')
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
* ShortcutsHelp — renders a keyboard shortcut reference list grouped by command group.
|
|
3
3
|
*
|
|
4
4
|
* Reads from the active command registry at render time via `toShortcutList()`. The same
|
|
5
|
-
* Command.shortcut field also drives live key binding
|
|
5
|
+
* Command.shortcut field also drives live key binding in `BasaltProvider`.
|
|
6
6
|
*
|
|
7
7
|
* Platform-aware label: 'Mod' → '⌘' on mac, 'Ctrl' elsewhere.
|
|
8
|
-
* Platform detection
|
|
9
|
-
*
|
|
8
|
+
* Platform detection reads through `useSyncExternalStore` with a non-mac server snapshot, so SSR and
|
|
9
|
+
* the hydrating render agree and the client updates right after.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* import { ShortcutsHelp } from 'basalt-ui/commands'
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* // With a custom title and max width:
|
|
18
18
|
* <ShortcutsHelp title="Keyboard shortcuts" maw={480} />
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
20
|
+
import { useSyncExternalStore } from 'react'
|
|
21
21
|
import { Box, Group, Kbd, Stack, Text, Title } from '@mantine/core'
|
|
22
22
|
import type { BasaltProps } from '../common/props'
|
|
23
23
|
import { cx } from '../common/props'
|
|
@@ -25,6 +25,8 @@ import { toShortcutList } from './projectors'
|
|
|
25
25
|
import { detectMac, parseShortcut } from './shortcut-format'
|
|
26
26
|
import { VX } from '../tokens'
|
|
27
27
|
|
|
28
|
+
const subscribeNever = (): (() => void) => () => {}
|
|
29
|
+
|
|
28
30
|
// ── ShortcutsHelpProps ────────────────────────────────────────────────────────
|
|
29
31
|
|
|
30
32
|
export type ShortcutsHelpProps = BasaltProps & {
|
|
@@ -78,11 +80,8 @@ export function ShortcutsHelp({
|
|
|
78
80
|
style,
|
|
79
81
|
}: ShortcutsHelpProps) {
|
|
80
82
|
// Default false — SSR and first client render produce non-mac glyphs (no hydration mismatch).
|
|
81
|
-
//
|
|
82
|
-
const
|
|
83
|
-
useEffect(() => {
|
|
84
|
-
setIsMac(detectMac())
|
|
85
|
-
}, [])
|
|
83
|
+
// The client snapshot (`detectMac`) takes over right after hydration, in a single re-render.
|
|
84
|
+
const isMac = useSyncExternalStore(subscribeNever, detectMac, () => false)
|
|
86
85
|
|
|
87
86
|
const shortcuts = toShortcutList()
|
|
88
87
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* define-commands — const-generic factory for typed command registries.
|
|
3
3
|
*
|
|
4
|
-
* Consumer defines their commands with defineCommands
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Consumer defines their commands with defineCommands and augments BasaltRegister.commands.
|
|
5
|
+
* `BasaltProvider` reads the module-level stash for its Spotlight actions and hotkeys (type
|
|
6
|
+
* augmentation is erased at runtime; the stash is the live source).
|
|
7
7
|
*
|
|
8
8
|
* @example
|
|
9
9
|
* // commands.ts (app-side)
|
|
@@ -16,12 +16,8 @@
|
|
|
16
16
|
* declare module 'basalt-ui' {
|
|
17
17
|
* interface BasaltRegister { commands: typeof COMMANDS }
|
|
18
18
|
* }
|
|
19
|
-
*
|
|
20
|
-
* // usage.ts
|
|
21
|
-
* import { runCommand } from 'basalt-ui/commands'
|
|
22
|
-
* runCommand('file:save') // ✓ typed
|
|
23
|
-
* runCommand('nonexistent') // ✗ tsc error
|
|
24
19
|
*/
|
|
20
|
+
import type { Hotkey } from '@tanstack/react-hotkeys'
|
|
25
21
|
import type { ReactNode } from 'react'
|
|
26
22
|
import type { Slot } from '../register'
|
|
27
23
|
|
|
@@ -36,7 +32,7 @@ import type { Slot } from '../register'
|
|
|
36
32
|
* })
|
|
37
33
|
*/
|
|
38
34
|
export type CommandRunContext = {
|
|
39
|
-
/** Close the command palette (if open) before executing. Injected by
|
|
35
|
+
/** Close the command palette (if open) before executing. Injected by the palette. */
|
|
40
36
|
close?: () => void
|
|
41
37
|
}
|
|
42
38
|
|
|
@@ -62,11 +58,12 @@ export type Command = {
|
|
|
62
58
|
/** Optional icon (ReactNode — no @tabler/icons dependency per house rules). */
|
|
63
59
|
icon?: ReactNode
|
|
64
60
|
/**
|
|
65
|
-
* Optional keyboard shortcut
|
|
66
|
-
*
|
|
67
|
-
*
|
|
61
|
+
* Optional keyboard shortcut, typed as the peer's `Hotkey` so a typo (`'Cmd+B'`) is a compile
|
|
62
|
+
* error. Drives BOTH the ShortcutsHelp display AND live key
|
|
63
|
+
* binding by `BasaltProvider` (through the @tanstack/react-hotkeys optional peer).
|
|
64
|
+
* Convention: 'Mod+S' (Mod = Cmd on mac, Ctrl elsewhere), 'Mod+Shift+P', etc.
|
|
68
65
|
*/
|
|
69
|
-
shortcut?:
|
|
66
|
+
shortcut?: Hotkey
|
|
70
67
|
/**
|
|
71
68
|
* Optional predicate — when() returning false hides the command from the palette.
|
|
72
69
|
* Useful for context-sensitive commands (e.g. "save" only when a form is dirty).
|
|
@@ -109,7 +106,7 @@ export type CommandId = Extract<keyof Commands, string>
|
|
|
109
106
|
/**
|
|
110
107
|
* Module-level runtime registry. The BasaltRegister type-slot gives the compile-time id union,
|
|
111
108
|
* but the augmentation is erased at runtime — so defineCommands also stashes the runtime map here
|
|
112
|
-
* for
|
|
109
|
+
* for the provider and the projectors to resolve Command objects. Call defineCommands once (the
|
|
113
110
|
* app's single command registry); the last call wins.
|
|
114
111
|
*/
|
|
115
112
|
let activeCommands: CommandMap = {}
|
|
@@ -118,10 +115,10 @@ let activeCommands: CommandMap = {}
|
|
|
118
115
|
|
|
119
116
|
/**
|
|
120
117
|
* Define a typed command map. Const-generic identity passthrough — preserves the exact literal
|
|
121
|
-
* keys so
|
|
118
|
+
* keys so the id union is exact after augmenting BasaltRegister.
|
|
122
119
|
*
|
|
123
|
-
* Stashes the runtime map so
|
|
124
|
-
*
|
|
120
|
+
* Stashes the runtime map so the provider resolves commands at runtime (type augmentation is
|
|
121
|
+
* erased; the stash is the live source).
|
|
125
122
|
*
|
|
126
123
|
* @example
|
|
127
124
|
* export const COMMANDS = defineCommands({
|
|
@@ -144,7 +141,7 @@ export function defineCommands<const T extends CommandMap>(spec: T): T {
|
|
|
144
141
|
*
|
|
145
142
|
* WARNING: defineCommand only TYPES a command — it does NOT register it into the runtime stash.
|
|
146
143
|
* Only defineCommands(map) registers commands. Calling defineCommand alone means the command will
|
|
147
|
-
* never appear in the palette or
|
|
144
|
+
* never appear in the palette or bind its shortcut.
|
|
148
145
|
*
|
|
149
146
|
* @example
|
|
150
147
|
* const saveCmd = defineCommand({ label: 'Save', shortcut: 'Mod+S', run: () => save() })
|
|
@@ -154,31 +151,7 @@ export function defineCommand(cmd: Command): Command {
|
|
|
154
151
|
return cmd
|
|
155
152
|
}
|
|
156
153
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Run a registered command by id. The id must be a key of the consumer's registered
|
|
161
|
-
* `BasaltRegister.commands` map — any other string is a tsc error.
|
|
162
|
-
*
|
|
163
|
-
* Resolves the command's run function from the runtime stash (NOT from the type slot — that is
|
|
164
|
-
* erased). Un-augmented (Commands = {}): CommandId = never → `runCommand` is effectively
|
|
165
|
-
* uncallable. Augmented: only the registered keys are accepted.
|
|
166
|
-
*
|
|
167
|
-
* @example
|
|
168
|
-
* runCommand('file:save')
|
|
169
|
-
* await runCommand('data:sync', { close: () => closeModal() })
|
|
170
|
-
*/
|
|
171
|
-
export function runCommand(id: CommandId, ctx?: CommandRunContext): void | Promise<void> {
|
|
172
|
-
const cmd = activeCommands[id as string]
|
|
173
|
-
if (cmd === undefined) {
|
|
174
|
-
if (process.env.NODE_ENV !== 'production')
|
|
175
|
-
console.warn(`[basalt] runCommand: no command registered for "${id}"`)
|
|
176
|
-
return
|
|
177
|
-
}
|
|
178
|
-
return cmd.run(ctx)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/** @internal — exposed for projectors.ts to iterate the runtime stash. Returns a readonly view. */
|
|
154
|
+
/** @internal — exposed to the provider and projectors.ts to iterate the runtime stash. Returns a readonly view. */
|
|
182
155
|
export function getActiveCommands(): Readonly<CommandMap> {
|
|
183
156
|
return activeCommands
|
|
184
157
|
}
|