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
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { dirname, relative, resolve } from "node:path";
|
|
4
|
+
import { BASALT_CONFIG_KEYS, RETIRED_CONFIG_KEYS } from "./config.js";
|
|
5
|
+
import { parseJsonc, readIfExists, scannableFiles } from "./index.js";
|
|
6
|
+
const guarded = (id, run) => {
|
|
7
|
+
try {
|
|
8
|
+
return run();
|
|
9
|
+
} catch (error) {
|
|
10
|
+
return { skip: `${id}: cannot run (${error.message}).` };
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const TSCONFIG_PRESET = /(?:^|\/)basalt-ui\/configs\/tsconfig\.(?:base|react-app)\.json$/;
|
|
14
|
+
const TSCONFIG_PRESET_ID = "basalt-ui/configs/tsconfig.react-app.json";
|
|
15
|
+
const TSCONFIG_FIX = `"extends": "${TSCONFIG_PRESET_ID}" (tsconfig.base.json for a package without a DOM)`;
|
|
16
|
+
const MAX_EXTENDS_DEPTH = 8;
|
|
17
|
+
const tsconfigFile = (p) => p.endsWith(".json") ? p : resolve(p, "tsconfig.json");
|
|
18
|
+
function resolveBare(spec, dir) {
|
|
19
|
+
const from = createRequire(resolve(dir, "x.js"));
|
|
20
|
+
for (const candidate of [spec, `${spec}.json`, `${spec}/tsconfig.json`]) {
|
|
21
|
+
try {
|
|
22
|
+
return from.resolve(candidate);
|
|
23
|
+
} catch {
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
function extendsPreset(file, unknown, seen = []) {
|
|
29
|
+
if (seen.includes(file)) return false;
|
|
30
|
+
const text = readIfExists(file);
|
|
31
|
+
const parsed = text === null ? null : parseJsonc(text);
|
|
32
|
+
if (parsed === null) {
|
|
33
|
+
unknown.push(`could not ${text === null ? "read" : "parse"} ${file}`);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const extended = [parsed["extends"]].flat().filter((e) => typeof e === "string");
|
|
37
|
+
if (extended.some((e) => TSCONFIG_PRESET.test(e))) return true;
|
|
38
|
+
if (seen.length >= MAX_EXTENDS_DEPTH) return false;
|
|
39
|
+
const refs = Array.isArray(parsed["references"]) ? parsed["references"] : [];
|
|
40
|
+
const next = [
|
|
41
|
+
...extended.flatMap((e) => {
|
|
42
|
+
if (e.startsWith(".")) return [resolve(dirname(file), e.endsWith(".json") ? e : `${e}.json`)];
|
|
43
|
+
const found = resolveBare(e, dirname(file));
|
|
44
|
+
if (found === null) unknown.push(`cannot resolve extends ${e}`);
|
|
45
|
+
return found === null ? [] : [found];
|
|
46
|
+
}),
|
|
47
|
+
...refs.flatMap((r) => {
|
|
48
|
+
const path = r?.path;
|
|
49
|
+
return typeof path === "string" ? [tsconfigFile(resolve(dirname(file), path))] : [];
|
|
50
|
+
})
|
|
51
|
+
];
|
|
52
|
+
return next.some((f) => extendsPreset(f, unknown, [...seen, file]));
|
|
53
|
+
}
|
|
54
|
+
function tsconfigBaseCheck(cwd) {
|
|
55
|
+
return guarded("tsconfig-base", () => {
|
|
56
|
+
const file = resolve(cwd, "tsconfig.json");
|
|
57
|
+
if (readIfExists(file) === null) {
|
|
58
|
+
return { fail: `tsconfig-base: tsconfig.json missing. Fix: create it with ${TSCONFIG_FIX}.` };
|
|
59
|
+
}
|
|
60
|
+
const unknown = [];
|
|
61
|
+
if (extendsPreset(file, unknown)) return null;
|
|
62
|
+
if (unknown.length > 0) {
|
|
63
|
+
const why = [...new Set(unknown)].join("; ");
|
|
64
|
+
return {
|
|
65
|
+
skip: `tsconfig-base: ${why}, so whether tsconfig.json reaches the preset is unknown.`
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
fail: `tsconfig-base: tsconfig.json (and the configs it references) does not extend the shipped preset \u2014 the 2.0 types assume strict, exactOptionalPropertyTypes and noUncheckedIndexedAccess. Fix: set ${TSCONFIG_FIX}.`
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
const CHARTS_FIX = "charts moved to basalt-ui/charts; basalt/chart-engine-boundary replaces it. Delete the entry";
|
|
74
|
+
const RETIRED_FIX = {
|
|
75
|
+
// The four 2.0 removals go live when #163 adds them to the plugin's RETIRED_RULE_IDS.
|
|
76
|
+
"provider-above-router": "BasaltProvider mounts the router; delete the entry",
|
|
77
|
+
"page-bar-budget": "the PageBarActions/SectionActions tuple types enforce it; delete the entry",
|
|
78
|
+
"agent-resume-guard": "useChat/Chat are banned outright; delete the entry",
|
|
79
|
+
"deprecated-export": "2.0 ships no deprecations; delete the entry",
|
|
80
|
+
...Object.fromEntries(
|
|
81
|
+
[
|
|
82
|
+
"unframed-chart",
|
|
83
|
+
"visx-boundary",
|
|
84
|
+
"visx-tooltip",
|
|
85
|
+
"hand-rolled-plot",
|
|
86
|
+
"chart-legend-literal",
|
|
87
|
+
"raw-visx-axis",
|
|
88
|
+
"chart-missing-aria-label"
|
|
89
|
+
].map((id) => [id, CHARTS_FIX])
|
|
90
|
+
)
|
|
91
|
+
};
|
|
92
|
+
function basaltRuleIds(file, seen = /* @__PURE__ */ new Set()) {
|
|
93
|
+
const text = seen.has(file) ? null : readIfExists(file);
|
|
94
|
+
const parsed = text === null ? null : parseJsonc(text);
|
|
95
|
+
if (parsed === null) return [];
|
|
96
|
+
seen.add(file);
|
|
97
|
+
const overrides = Array.isArray(parsed["overrides"]) ? parsed["overrides"] : [];
|
|
98
|
+
const rules = [parsed["rules"], ...overrides.map((o) => o?.rules)];
|
|
99
|
+
const ids = rules.flatMap(
|
|
100
|
+
(b) => typeof b === "object" && b !== null ? Object.keys(b).filter((k) => k.startsWith("basalt/")) : []
|
|
101
|
+
);
|
|
102
|
+
const local = [parsed["extends"]].flat().filter((e) => typeof e === "string" && e.startsWith(".")).map((e) => resolve(dirname(file), e)).filter((abs) => !abs.includes("node_modules"));
|
|
103
|
+
return [...ids.map((k) => k.slice(7)), ...local.flatMap((abs) => basaltRuleIds(abs, seen))];
|
|
104
|
+
}
|
|
105
|
+
function retiredLintRulesCheck(cwd, install) {
|
|
106
|
+
const id = "retired-lint-rules";
|
|
107
|
+
const dir = install.dir;
|
|
108
|
+
if (dir === null)
|
|
109
|
+
return { skip: `${id}: basalt-ui does not resolve, so its plugin cannot be read.` };
|
|
110
|
+
return guarded(id, () => {
|
|
111
|
+
const ids = [...new Set(basaltRuleIds(resolve(cwd, ".oxlintrc.json")))];
|
|
112
|
+
if (ids.length === 0) return null;
|
|
113
|
+
const pluginPath = resolve(dir, "configs/oxlint-plugin.js");
|
|
114
|
+
const plugin = createRequire(pluginPath)(pluginPath);
|
|
115
|
+
const retired = new Set(plugin.RETIRED_RULE_IDS);
|
|
116
|
+
const registered = new Set(Object.keys(plugin.default?.rules ?? {}));
|
|
117
|
+
if (registered.size === 0) {
|
|
118
|
+
return { skip: `${id}: ${pluginPath} registers no rules, so none can be compared.` };
|
|
119
|
+
}
|
|
120
|
+
const gone = ids.filter((rule) => retired.has(rule) || !registered.has(rule));
|
|
121
|
+
if (gone.length === 0) return null;
|
|
122
|
+
const named = gone.map((r) => `basalt/${r} (${RETIRED_FIX[r] ?? "retired; delete the entry"})`);
|
|
123
|
+
return {
|
|
124
|
+
fail: `${id}: .oxlintrc.json sets rules the installed plugin does not register: ${named.join("; ")}. Fix: delete each entry (MIGRATING.md \xA7 2.0).`
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
const TOKEN = /("(?:\\.|[^"\\\n])*"|'(?:\\.|[^'\\\n])*'|`(?:\\.|[^`\\])*`)|\/\/[^\n]*|\/\*[\s\S]*?\*\//g;
|
|
129
|
+
const SUBPATH_IMPORT = /(?:(?:^|;)[ \t]*(?:(?:import|export)\b[^'"`;]*?\bfrom|import)\s*|(?<![.\w$])(?:import|require)\s*\(\s*)(['"])basalt-ui\/([^'"]+)\1/gm;
|
|
130
|
+
function tokenize(src) {
|
|
131
|
+
const literals = [];
|
|
132
|
+
const code = src.replace(TOKEN, (m, literal, at) => {
|
|
133
|
+
if (literal === void 0) return m.replace(/[^\n]/g, " ");
|
|
134
|
+
if (!literal.startsWith("`")) {
|
|
135
|
+
literals.push([at, at + m.length]);
|
|
136
|
+
return m;
|
|
137
|
+
}
|
|
138
|
+
return m.replace(
|
|
139
|
+
/(\$\{[^}]*\})|[^\n`]/g,
|
|
140
|
+
(c, interpolation) => interpolation ?? " "
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
return { code, inLiteral: (at) => literals.some(([from, to]) => at >= from && at < to) };
|
|
144
|
+
}
|
|
145
|
+
function basaltImports(src) {
|
|
146
|
+
const { code, inLiteral } = tokenize(src);
|
|
147
|
+
return [...code.matchAll(SUBPATH_IMPORT)].filter((m) => !inLiteral(m.index)).map((m) => [m[2], code.slice(0, m.index + m[0].length).split("\n").length]);
|
|
148
|
+
}
|
|
149
|
+
function droppedSubpathsCheck(cwd, cfg, install) {
|
|
150
|
+
const id = "dropped-subpaths";
|
|
151
|
+
const dir = install.dir;
|
|
152
|
+
if (dir === null)
|
|
153
|
+
return { skip: `${id}: basalt-ui does not resolve, so its exports cannot be read.` };
|
|
154
|
+
return guarded(id, () => {
|
|
155
|
+
const pkg = JSON.parse(readFileSync(resolve(dir, "package.json"), "utf8"));
|
|
156
|
+
if (pkg.exports === void 0) return null;
|
|
157
|
+
const keys = Object.keys(pkg.exports);
|
|
158
|
+
const has = (sub) => keys.some(
|
|
159
|
+
(k) => k === `./${sub}` || k.endsWith("*") && `./${sub}`.startsWith(k.slice(0, -1))
|
|
160
|
+
);
|
|
161
|
+
const hits = [];
|
|
162
|
+
for (const rel of scannableFiles(cwd, cfg).filter(
|
|
163
|
+
(f) => /\.(?:[cm]?[jt]sx?|vue|astro)$/.test(f)
|
|
164
|
+
)) {
|
|
165
|
+
for (const [sub, line] of basaltImports(readIfExists(resolve(cwd, rel)) ?? "")) {
|
|
166
|
+
if (!has(sub)) hits.push(`${rel}:${line} imports basalt-ui/${sub}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (hits.length === 0) return null;
|
|
170
|
+
const more = hits.length > 10 ? ` (+${hits.length - 10} more)` : "";
|
|
171
|
+
return {
|
|
172
|
+
fail: `${id}: ${hits.slice(0, 10).join("; ")}${more}. Fix: see MIGRATING.md \xA7 2.0 for each subpath's replacement.`
|
|
173
|
+
};
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
const includesSrc = (config) => [config?.["include"], config?.["files"]].some(
|
|
177
|
+
(list) => Array.isArray(list) && list.some((e) => typeof e === "string" && /^(?:\.\/)?src(?:\/|$)/.test(e))
|
|
178
|
+
);
|
|
179
|
+
function seedTsconfigExtends(cwd) {
|
|
180
|
+
const root = resolve(cwd, "tsconfig.json");
|
|
181
|
+
const rootText = readIfExists(root);
|
|
182
|
+
if (rootText === null || tsconfigBaseCheck(cwd) === null) return null;
|
|
183
|
+
const refs = parseJsonc(rootText)?.["references"];
|
|
184
|
+
const covering = (Array.isArray(refs) ? refs : []).map((r) => r?.path).flatMap((path) => typeof path === "string" ? [tsconfigFile(resolve(cwd, path))] : []).find((f) => includesSrc(parseJsonc(readIfExists(f) ?? "null")));
|
|
185
|
+
const files = parseJsonc(rootText)?.["files"];
|
|
186
|
+
if (covering === void 0 && Array.isArray(refs) && refs.length > 0 && Array.isArray(files) && files.length === 0) {
|
|
187
|
+
return `tsconfig.json is a solution-style config and no referenced config includes src \u2014 set ${TSCONFIG_FIX} in the one that covers src.`;
|
|
188
|
+
}
|
|
189
|
+
const target = covering ?? root;
|
|
190
|
+
const text = readIfExists(target) ?? "";
|
|
191
|
+
const name = relative(cwd, target);
|
|
192
|
+
const parsed = parseJsonc(text);
|
|
193
|
+
if (parsed === null) return `${name} does not parse \u2014 set ${TSCONFIG_FIX} by hand.`;
|
|
194
|
+
if (parsed["extends"] !== void 0) {
|
|
195
|
+
return `${name} already extends something else \u2014 make it also extend ${TSCONFIG_FIX}.`;
|
|
196
|
+
}
|
|
197
|
+
const open = /^(?:\s|\/\/[^\n]*\n|\/\*[\s\S]*?\*\/)*\{/.exec(text);
|
|
198
|
+
if (open === null) return `${name} is not a JSON object \u2014 set ${TSCONFIG_FIX} by hand.`;
|
|
199
|
+
const comma = Object.keys(parsed).length > 0 ? "," : "";
|
|
200
|
+
const at = open[0].length;
|
|
201
|
+
const key = `
|
|
202
|
+
"extends": "${TSCONFIG_PRESET_ID}"${comma}`;
|
|
203
|
+
writeFileSync(target, `${text.slice(0, at)}${key}${text.slice(at)}`);
|
|
204
|
+
return `added "extends": "${TSCONFIG_PRESET_ID}" to ${name}.`;
|
|
205
|
+
}
|
|
206
|
+
const VITE_CONFIGS = ["ts", "mts", "cts", "js", "mjs", "cjs"].map((e) => `vite.config.${e}`);
|
|
207
|
+
const SEED_HINT = "node_modules/basalt-ui/agent/templates/main.tpl";
|
|
208
|
+
const ROUTER_PLUGIN_FIX = "Fix: `bun add -D @tanstack/router-plugin`, add `tanstackRouter({ target: 'react', autoCodeSplitting: true })` from '@tanstack/router-plugin/vite' to `plugins` in vite.config.ts (before react()), then run vite once to generate src/routeTree.gen.ts.";
|
|
209
|
+
function htmlEntry(html) {
|
|
210
|
+
for (const [, attrs = ""] of html.replace(/<!--[\s\S]*?-->/g, "").matchAll(/<script\b([^>]*)>/gi)) {
|
|
211
|
+
const src = /\bsrc\s*=\s*["']?([^"'\s>]+)/i.exec(attrs)?.[1];
|
|
212
|
+
if (/\btype\s*=\s*["']?module\b/i.test(attrs) && src !== void 0 && !/^(?:[a-z][a-z0-9+.-]*:)?\/\//i.test(src)) {
|
|
213
|
+
return src;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
return void 0;
|
|
217
|
+
}
|
|
218
|
+
function registersRouterPlugin(src) {
|
|
219
|
+
const { code, inLiteral } = tokenize(src);
|
|
220
|
+
const pluginsAt = [...code.matchAll(/\bplugins\b/g)].find((m) => !inLiteral(m.index))?.index;
|
|
221
|
+
if (pluginsAt === void 0) return false;
|
|
222
|
+
const imports = code.matchAll(
|
|
223
|
+
/(?:^|;)[ \t]*import\s+(?:type\s+)?([^'"`;]*?)\s*from\s*(['"])@tanstack\/router-plugin(?:\/[^'"]*)?\2/gm
|
|
224
|
+
);
|
|
225
|
+
return [...imports].some((m) => {
|
|
226
|
+
if (inLiteral(m.index)) return false;
|
|
227
|
+
const names = (m[1] ?? "").replace(/[{}]/g, "").split(",").map((part) => part.trim()).filter((part) => part !== "" && !/^type\s/.test(part)).map((part) => part.split(/\s+as\s+/).pop());
|
|
228
|
+
return names.some(
|
|
229
|
+
(name) => [
|
|
230
|
+
...code.matchAll(
|
|
231
|
+
new RegExp(`(?<![.\\w$])${name.replace(/\$/g, "\\$")}(?:\\.\\w+)?\\s*\\(`, "g")
|
|
232
|
+
)
|
|
233
|
+
].some((call) => call.index > pluginsAt && !inLiteral(call.index))
|
|
234
|
+
);
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
function appWiringCheck(cwd) {
|
|
238
|
+
return guarded("app-wiring", () => {
|
|
239
|
+
const entry = (htmlEntry(readIfExists(resolve(cwd, "index.html")) ?? "") ?? "src/main.tsx").replace(/^\//, "");
|
|
240
|
+
const text = readIfExists(resolve(cwd, entry));
|
|
241
|
+
if (text === null) {
|
|
242
|
+
return { fail: `app-wiring: ${entry} does not exist. Fix: make it match ${SEED_HINT}.` };
|
|
243
|
+
}
|
|
244
|
+
const { code, inLiteral } = tokenize(text);
|
|
245
|
+
const used = (name) => [...code.matchAll(new RegExp(`\\b${name}\\b`, "g"))].some((m) => !inLiteral(m.index));
|
|
246
|
+
const missing = ["BasaltProvider", "createBasaltRouter"].filter((name) => !used(name));
|
|
247
|
+
if (missing.length > 0) {
|
|
248
|
+
return {
|
|
249
|
+
fail: `app-wiring: ${entry} does not use ${missing.join(" or ")}. Fix: make it match ${SEED_HINT} (\`init\` seeds it only when the file is absent).`
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const vite = VITE_CONFIGS.map((f) => readIfExists(resolve(cwd, f))).find((t) => t !== null) ?? "";
|
|
253
|
+
const dirs = [.../* @__PURE__ */ new Set([dirname(entry), "src"])];
|
|
254
|
+
const generated = dirs.some(
|
|
255
|
+
(d) => ["ts", "tsx", "js"].some((e) => existsSync(resolve(cwd, d, `routeTree.gen.${e}`)))
|
|
256
|
+
);
|
|
257
|
+
if (generated || registersRouterPlugin(vite)) return null;
|
|
258
|
+
return {
|
|
259
|
+
fail: `app-wiring: no vite.config calls the TanStack router plugin and ${dirs.join(" or ")}/routeTree.gen.ts does not exist. ${ROUTER_PLUGIN_FIX}`
|
|
260
|
+
};
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function unknownConfigKeysCheck(cwd) {
|
|
264
|
+
return guarded("config-keys", () => {
|
|
265
|
+
const raw = readIfExists(resolve(cwd, "package.json"));
|
|
266
|
+
const block = raw === null ? null : JSON.parse(raw).basalt;
|
|
267
|
+
if (typeof block !== "object" || block === null || Array.isArray(block)) return null;
|
|
268
|
+
const known = new Set(BASALT_CONFIG_KEYS);
|
|
269
|
+
const unknown = Object.keys(block).filter((k) => !known.has(k));
|
|
270
|
+
if (unknown.length === 0) return null;
|
|
271
|
+
const named = unknown.map(
|
|
272
|
+
(k) => `basalt.${k} (${RETIRED_CONFIG_KEYS[k] ?? "not a basalt key"})`
|
|
273
|
+
);
|
|
274
|
+
return {
|
|
275
|
+
fail: `config-keys: package.json sets keys basalt-ui does not read: ${named.join("; ")}. Fix: delete each key.`
|
|
276
|
+
};
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
const EXACT_VERSION = /^\d+\.\d+\.\d+$/;
|
|
280
|
+
function installedVersion(cwd, pkg) {
|
|
281
|
+
for (let dir = cwd; ; dir = dirname(dir)) {
|
|
282
|
+
const raw = readIfExists(resolve(dir, "node_modules", pkg, "package.json"));
|
|
283
|
+
if (raw !== null) return JSON.parse(raw).version ?? null;
|
|
284
|
+
if (dirname(dir) === dir) return null;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function exactPeersCheck(cwd, install) {
|
|
288
|
+
const id = "exact-peers";
|
|
289
|
+
if (install.dir === null)
|
|
290
|
+
return { skip: `${id}: basalt-ui does not resolve, so its peers cannot be read.` };
|
|
291
|
+
const dir = install.dir;
|
|
292
|
+
return guarded(id, () => {
|
|
293
|
+
const raw = readIfExists(resolve(dir, "package.json"));
|
|
294
|
+
const peers = (raw === null ? {} : JSON.parse(raw).peerDependencies) ?? {};
|
|
295
|
+
const off = Object.entries(peers).filter(([, range]) => EXACT_VERSION.test(range)).flatMap(([pkg, pin]) => {
|
|
296
|
+
const have = installedVersion(cwd, pkg);
|
|
297
|
+
return have === null || have === pin ? [] : [`${pkg}@${have} (basalt-ui pins ${pin}): \`bun add ${pkg}@${pin}\``];
|
|
298
|
+
});
|
|
299
|
+
if (off.length === 0) return null;
|
|
300
|
+
return {
|
|
301
|
+
fail: `${id}: installed peers differ from basalt-ui's exact pins. Fix: ${off.join("; ")}.`
|
|
302
|
+
};
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
export {
|
|
306
|
+
appWiringCheck,
|
|
307
|
+
droppedSubpathsCheck,
|
|
308
|
+
exactPeersCheck,
|
|
309
|
+
retiredLintRulesCheck,
|
|
310
|
+
seedTsconfigExtends,
|
|
311
|
+
tsconfigBaseCheck,
|
|
312
|
+
tsconfigFile,
|
|
313
|
+
unknownConfigKeysCheck
|
|
314
|
+
};
|
package/dist/cli/doctor.d.ts
CHANGED
|
@@ -12,40 +12,25 @@ export type DoctorResult = {
|
|
|
12
12
|
skipped: number;
|
|
13
13
|
};
|
|
14
14
|
/**
|
|
15
|
-
* Check a consumer repo's basalt integration and print a pass/warn report.
|
|
16
|
-
*
|
|
17
|
-
* Narrowed to what a single-directory-scoped run can actually verify — no workspace-glob walking,
|
|
18
|
-
* no ascend/descend project discovery (see {@link resolveProjectDir}). Seven checks, numbered in
|
|
19
|
-
* the order they run and print:
|
|
15
|
+
* Check a consumer repo's basalt integration and print a pass/warn report. One directory, no
|
|
16
|
+
* workspace walking (see {@link resolveProjectDir}). Checks, in print order:
|
|
20
17
|
*
|
|
21
18
|
* Hard failures (exit non-zero):
|
|
22
|
-
* 1. `.basalt/manifest.json` exists
|
|
23
|
-
* 2. `install-parity`: basalt-ui resolves,
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* minors this way.
|
|
32
|
-
* 7. `ai-major-parity`: within THIS package.json, `dependencies`/`devDependencies`/
|
|
33
|
-
* `peerDependencies` agree on the `ai` package's major — the shape `basalt/ai-sdk-major` (per
|
|
34
|
-
* linted FILE) cannot see. A skew is exempt-able via `basalt.aiMajorSkewReason` (a non-empty
|
|
35
|
-
* reason, not a bare `true`); a declared reason when the majors agree warns it is stale.
|
|
19
|
+
* 1. `.basalt/manifest.json` exists.
|
|
20
|
+
* 2. `install-parity`: basalt-ui resolves, and its version matches the manifest's `basaltVersion`.
|
|
21
|
+
* 3. `guard-scan`: `check-theme` would scan more than zero files (shares `scannableFiles`).
|
|
22
|
+
* 4. `oxlint-preset`: `.oxlintrc.json` extends the shipped preset AND that path resolves.
|
|
23
|
+
* 7. `ai-major-parity`: the `ai` major agrees across this package.json's dependency fields
|
|
24
|
+
* (exempt via `basalt.aiMajorSkewReason`; a stale reason warns).
|
|
25
|
+
* 8-13. `tsconfig-base`, `retired-lint-rules`, `dropped-subpaths`, `app-wiring`, `exact-peers`,
|
|
26
|
+
* `config-keys` (./doctor-upgrade);
|
|
27
|
+
* a check that cannot run is SKIPPED and exits non-zero.
|
|
36
28
|
*
|
|
37
29
|
* Warning (non-fatal):
|
|
38
|
-
* 5. `lefthook-preset
|
|
39
|
-
*
|
|
40
|
-
* does — see {@link inspectLefthookGate}). No lefthook config at all is a pass (a consumer may
|
|
41
|
-
* gate elsewhere); a config that resolves but wires no guard command warns; a config lefthook
|
|
42
|
-
* dump could not read at all (binary missing, or the dump failed) warns and says so, rather
|
|
43
|
-
* than inventing a verdict.
|
|
44
|
-
* 6. `claude-md`: a project-root `CLAUDE.md` that does not import `@AGENTS.md` suppresses
|
|
45
|
-
* `AGENTS.md` (and with it the managed block); one that still carries a basalt block — or a
|
|
46
|
-
* malformed one — says so. A `CLAUDE.md` symlinked to `AGENTS.md` is one file and passes.
|
|
30
|
+
* 5. `lefthook-preset`: a pre-commit command runs `check-theme` (read via `lefthook dump`).
|
|
31
|
+
* 6. `claude-md`: a project-root `CLAUDE.md` that does not import `@AGENTS.md` suppresses it.
|
|
47
32
|
*
|
|
48
|
-
* Returns the exit code: 0 = all good, 1 = one or more hard failures.
|
|
33
|
+
* Returns the exit code: 0 = all good, 1 = one or more hard failures or skipped checks.
|
|
49
34
|
*/
|
|
50
35
|
export declare function doctor(invocationCwd?: string, flags?: string[]): number;
|
|
51
36
|
//# sourceMappingURL=doctor.d.ts.map
|
package/dist/cli/doctor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAuDA,MAAM,MAAM,YAAY,GAAG;IACzB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAA;IACpB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA8CD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,aAAa,GAAE,MAAsB,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,CAsS1F"}
|
package/dist/cli/doctor.js
CHANGED
|
@@ -26,6 +26,14 @@ import {
|
|
|
26
26
|
shippedAssetPath
|
|
27
27
|
} from "./index.js";
|
|
28
28
|
import { resolveRoots } from "./config.js";
|
|
29
|
+
import {
|
|
30
|
+
appWiringCheck,
|
|
31
|
+
droppedSubpathsCheck,
|
|
32
|
+
exactPeersCheck,
|
|
33
|
+
retiredLintRulesCheck,
|
|
34
|
+
tsconfigBaseCheck,
|
|
35
|
+
unknownConfigKeysCheck
|
|
36
|
+
} from "./doctor-upgrade.js";
|
|
29
37
|
import { findManifestAbove, parentInstallAdvice } from "./sync.js";
|
|
30
38
|
function isSameFile(a, b) {
|
|
31
39
|
try {
|
|
@@ -83,6 +91,10 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
83
91
|
lines.push(` \u2716 ${msg}`);
|
|
84
92
|
result.hardFailures++;
|
|
85
93
|
}
|
|
94
|
+
function skip(msg) {
|
|
95
|
+
lines.push(` ? SKIPPED ${msg}`);
|
|
96
|
+
result.skipped++;
|
|
97
|
+
}
|
|
86
98
|
if (project.relocatedFrom !== null) {
|
|
87
99
|
lines.push(` \u2192 BASALT_CWD relocated from ${project.relocatedFrom} to ${cwd}.
|
|
88
100
|
`);
|
|
@@ -112,7 +124,7 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
112
124
|
const at = install.dir === null ? "" : `${relative(cwd, install.dir)} (${install.version})`;
|
|
113
125
|
if (install.dir === null) {
|
|
114
126
|
fail(
|
|
115
|
-
"install-parity: basalt-ui does not resolve here, above, or in a sibling workspace package."
|
|
127
|
+
"install-parity: basalt-ui does not resolve here, above, or in a sibling workspace package. Fix: `bun add basalt-ui`."
|
|
116
128
|
);
|
|
117
129
|
} else if (manifestVersion === void 0 || install.version === manifestVersion) {
|
|
118
130
|
const matches = manifestVersion === void 0 ? "" : " and matches the manifest's basaltVersion";
|
|
@@ -127,7 +139,7 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
127
139
|
pass("guard-scan: n/a \u2014 a tokens-only consumer runs the token lane, not the file walk");
|
|
128
140
|
} else if (scanned === 0) {
|
|
129
141
|
fail(
|
|
130
|
-
|
|
142
|
+
'guard-scan: `check-theme` would scan ZERO files here \u2014 either `basalt.roots` points at paths that do not exist, or this is not the package the config lives in (BASALT_CWD, else the cwd; nothing is inferred). Fix: set `"basalt": { "roots": ["src"] }` in package.json.'
|
|
131
143
|
);
|
|
132
144
|
} else {
|
|
133
145
|
pass(`guard-scan: check-theme covers ${scanned} file(s) under ${resolveRoots(cfg).join(", ")}`);
|
|
@@ -144,14 +156,14 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
144
156
|
const parsed = parseJsonc(oxlintrcRaw);
|
|
145
157
|
if (parsed === null) {
|
|
146
158
|
fail(
|
|
147
|
-
".oxlintrc.json does not parse as JSON/JSONC \u2014 cannot tell whether it extends the preset"
|
|
159
|
+
".oxlintrc.json does not parse as JSON/JSONC \u2014 cannot tell whether it extends the preset. Fix the syntax error, then re-run `basalt-ui doctor`."
|
|
148
160
|
);
|
|
149
161
|
} else {
|
|
150
162
|
const entry = basaltPresetEntry(parsed["extends"]);
|
|
151
163
|
const correct = shippedAssetPath(install, cwd, OXLINT_FILES.preset);
|
|
152
164
|
if (entry === null) {
|
|
153
165
|
fail(
|
|
154
|
-
`.oxlintrc.json does NOT extend the shipped preset \u2014 every basalt/* design rule is off and oxlint reports green without them. Add "extends": ["${correct}"], or re-run \`basalt-ui init
|
|
166
|
+
`.oxlintrc.json does NOT extend the shipped preset \u2014 every basalt/* design rule is off and oxlint reports green without them. Add "extends": ["${correct}"], or re-run \`basalt-ui init\` to splice it in (or add it by hand).`
|
|
155
167
|
);
|
|
156
168
|
} else if (!existsSync(resolve(cwd, entry))) {
|
|
157
169
|
fail(
|
|
@@ -191,7 +203,9 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
191
203
|
if (scan.problem !== null) {
|
|
192
204
|
issues.push(`has a malformed basalt block (${scan.problem}) \u2014 fix it by hand, then \`sync\``);
|
|
193
205
|
} else if (scan.region !== null) {
|
|
194
|
-
issues.push(
|
|
206
|
+
issues.push(
|
|
207
|
+
`still carries a stale basalt block \u2014 delete it by hand; \`sync\` keeps ${AGENTS_MD} current`
|
|
208
|
+
);
|
|
195
209
|
}
|
|
196
210
|
if (!importsAgentsMd(legacy)) {
|
|
197
211
|
issues.push(
|
|
@@ -215,10 +229,12 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
215
229
|
);
|
|
216
230
|
} else if (aiMajorSkewReasonInvalid) {
|
|
217
231
|
fail(
|
|
218
|
-
`ai package major version mismatch within this package.json: ${summary} \u2014 basalt.aiMajorSkewReason is present but is not a non-empty string (a bare \`true\` is not accepted)
|
|
232
|
+
`ai package major version mismatch within this package.json: ${summary} \u2014 basalt.aiMajorSkewReason is present but is not a non-empty string (a bare \`true\` is not accepted). Fix: set it to a non-empty reason string, or align the majors.`
|
|
219
233
|
);
|
|
220
234
|
} else {
|
|
221
|
-
fail(
|
|
235
|
+
fail(
|
|
236
|
+
`ai package major version mismatch within this package.json: ${summary}. Fix: align every field of this package.json on one \`ai\` major.`
|
|
237
|
+
);
|
|
222
238
|
}
|
|
223
239
|
} else {
|
|
224
240
|
const [major] = distinctMajors;
|
|
@@ -233,17 +249,50 @@ basalt-ui doctor \u2014 ${cwd}
|
|
|
233
249
|
} else {
|
|
234
250
|
pass("ai-major-parity: this package.json declares no ai dependency \u2014 nothing to compare");
|
|
235
251
|
}
|
|
252
|
+
if (profile === "tokens-only") {
|
|
253
|
+
pass(
|
|
254
|
+
"tsconfig-base / retired-lint-rules / dropped-subpaths / app-wiring: n/a \u2014 a tokens-only consumer"
|
|
255
|
+
);
|
|
256
|
+
} else {
|
|
257
|
+
const upgrade = [
|
|
258
|
+
["tsconfig-base: tsconfig.json extends the shipped preset", tsconfigBaseCheck(cwd)],
|
|
259
|
+
[
|
|
260
|
+
"retired-lint-rules: .oxlintrc.json sets no retired basalt/* rule",
|
|
261
|
+
retiredLintRulesCheck(cwd, install)
|
|
262
|
+
],
|
|
263
|
+
[
|
|
264
|
+
"dropped-subpaths: no import of a basalt-ui subpath the install lacks",
|
|
265
|
+
droppedSubpathsCheck(cwd, cfg, install)
|
|
266
|
+
],
|
|
267
|
+
[
|
|
268
|
+
"app-wiring: the entry mounts BasaltProvider and the router tree is generated",
|
|
269
|
+
appWiringCheck(cwd)
|
|
270
|
+
],
|
|
271
|
+
["exact-peers: installed exact-pinned peers match basalt-ui", exactPeersCheck(cwd, install)],
|
|
272
|
+
[
|
|
273
|
+
"config-keys: the basalt config block sets only keys basalt-ui reads",
|
|
274
|
+
unknownConfigKeysCheck(cwd)
|
|
275
|
+
]
|
|
276
|
+
];
|
|
277
|
+
for (const [ok, check] of upgrade) {
|
|
278
|
+
if (check === null) pass(ok);
|
|
279
|
+
else if ("fail" in check) fail(check.fail);
|
|
280
|
+
else skip(check.skip);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
236
283
|
lines.push("");
|
|
237
|
-
if (result.hardFailures === 0 && result.warnings === 0) {
|
|
284
|
+
if (result.hardFailures === 0 && result.warnings === 0 && result.skipped === 0) {
|
|
238
285
|
lines.push("All checks passed.");
|
|
239
286
|
} else {
|
|
240
287
|
const parts = [];
|
|
241
288
|
if (result.hardFailures > 0) parts.push(`${result.hardFailures} hard failure(s)`);
|
|
289
|
+
if (result.skipped > 0)
|
|
290
|
+
parts.push(`${result.skipped} SKIPPED (a check that cannot run is not a pass)`);
|
|
242
291
|
parts.push(`${result.warnings} warning(s)`);
|
|
243
292
|
lines.push(`${parts.join(", ")}.`);
|
|
244
293
|
}
|
|
245
294
|
lines.push("");
|
|
246
|
-
if (result.hardFailures > 0) {
|
|
295
|
+
if (result.hardFailures > 0 || result.skipped > 0) {
|
|
247
296
|
console.error(lines.join("\n"));
|
|
248
297
|
return 1;
|
|
249
298
|
}
|
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;CAAE,CAAC,CAgC1F,CAAA;AAED;yCACyC;AACzC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAWhF;AAED,0GAA0G;AAC1G,eAAO,MAAM,KAAK,QAoC0E,CAAA"}
|
package/dist/cli/help.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { parseArgs } from "node:util";
|
|
2
2
|
const COMMAND_OPTIONS = {
|
|
3
3
|
init: {
|
|
4
|
-
"
|
|
5
|
-
"with-query": { type: "boolean" },
|
|
6
|
-
"merge-lint": { type: "boolean" }
|
|
4
|
+
"no-merge-lint": { type: "boolean" }
|
|
7
5
|
},
|
|
8
6
|
sync: {
|
|
9
7
|
force: { type: "boolean" },
|
|
@@ -46,7 +44,7 @@ function unknownFlag(cmd, flags) {
|
|
|
46
44
|
return match?.[1] ?? flags.find((f) => f.startsWith("-")) ?? flags[0] ?? null;
|
|
47
45
|
}
|
|
48
46
|
}
|
|
49
|
-
const USAGE = "Usage: basalt-ui <--version | init [--
|
|
47
|
+
const USAGE = "Usage: basalt-ui <--version | init [--no-merge-lint] |\n sync [--force] [--check] [--verbose] [--tokens-only|--framework] |\n check-theme [--audit-allows] |\n doctor [--tokens-only|--framework] | guard-hook | tokens:css | fonts:css | help>\n\ncheck-theme [--tokens-only|--framework] [--audit-allows]\n --audit-allows reports instead of scanning: every `theme-allow` annotation and every\n `basalt.exemptRules` entry, with what each one still suppresses \u2014 proved by re-running the\n guard with that one waiver neutralized, not by reading its text. Exits 1 on a waiver that\n suppresses nothing (dead), which is what makes it usable as a CI gate.\n\ntokens:css [--out <path>] [--check] [--selector-attribute <attr> | --selector-class <class>]\n [--light-class <class>] [--dark-value <v>] [--light-value <v>]\n [--default-scheme <dark|light|none>] [--media-fallback] [--only <core|all>]\n [--no-legacy-aliases]\n Emit the --vx-* stylesheet (stdout unless --out). Defaults reproduce basalt-ui/tokens.css.\n --selector-class emits `:root.dark` instead of an attribute selector (the Tailwind convention).\n --check writes nothing and exits 1 when --out differs from what would be emitted (a CI gate).\n --no-legacy-aliases drops the deprecated camelCase spellings (--vx-accentFill and friends),\n which are emitted by default as aliases of the canonical kebab-case names.\n\nfonts:css [--out <path>] [--check]\n Emit the shipped --basalt-font-* stacks as plain CSS \u2014 the typeface half of the token layer,\n otherwise reachable only by importing styles.css.\n\ndoctor [--tokens-only|--framework]\n Checks THIS project only: the manifest exists, the oxlint preset is wired, the pre-commit\n hook runs check-theme (via `lefthook dump`), and the ai package major is consistent within\n this package.json. Profile is DECLARED, same as check-theme \u2014 never inferred.\n\nsync [--force] [--check] [--verbose] [--tokens-only|--framework]\n Refreshes an EXISTING install; it never creates one (that is init). A tokens-only consumer\n has no scaffold to reconcile, so sync reports n/a and exits 0 there \u2014 as doctor does.\n --check prints the permanent placement skips as a COUNT; --verbose spells them out again.\n\ncheck-theme / doctor / sync all resolve their project the same way: BASALT_CWD, else the\ninvocation cwd \u2014 nothing inferred, nothing ascended or descended into.\n--tokens-only and --framework are alternatives; passing both is an error.\n\nEvery subcommand accepts --help / -h to print this message and exit without running.\n--version / -v prints the resolved package version and exits 0 \u2014 the one command that proves\nWHICH basalt-ui ran, which a `bunx` cache can otherwise make a lie. An unknown command or an\nunrecognized flag exits 1 and names what it did not understand; neither is ever ignored.";
|
|
50
48
|
export {
|
|
51
49
|
COMMAND_OPTIONS,
|
|
52
50
|
USAGE,
|