basalt-ui 1.41.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +46 -43
- package/CHANGELOG.md +535 -518
- package/MIGRATING.md +945 -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 +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +51 -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 +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +81 -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/format/number.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Number formatting — `Intl.NumberFormat` with the arguments already decided, so a caller states
|
|
3
|
-
* WHAT a number is rather than how to punctuate it.
|
|
4
|
-
*
|
|
5
|
-
* one implementation.
|
|
3
|
+
* WHAT a number is rather than how to punctuate it. One implementation: the chart layer imports
|
|
4
|
+
* `fmtCompact` from here for its default axis format.
|
|
6
5
|
*
|
|
7
6
|
* `money`/`percent`/`integer`/`compact`/`deltaPct` are the argo-facing names (seeded from
|
|
8
7
|
* `features/*\/{formatters,formulas}.ts`); `fmtCurrency`/`fmtPercent`/`fmtInt`/`fmtCompact` are the
|
|
9
|
-
* original chart-formatter names,
|
|
8
|
+
* original chart-formatter names, internal since 2.0 and delegated to by the public names.
|
|
10
9
|
*/
|
|
11
10
|
import { NON_FINITE, numberFormat } from './shared'
|
|
12
11
|
import type { LocaleOption } from './shared'
|
|
@@ -43,9 +42,6 @@ export function fmtCompact(value: number, options: FmtCompactOptions = {}): stri
|
|
|
43
42
|
.replace(COMPACT_K, '$1k')
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
/** `compact` — the `basalt-ui/format` name for {@link fmtCompact}. */
|
|
47
|
-
export const compact = fmtCompact
|
|
48
|
-
|
|
49
45
|
export type FmtPercentOptions = LocaleOption & {
|
|
50
46
|
/** Fraction digits. Default 0 (`42%`). */
|
|
51
47
|
digits?: number
|
|
@@ -71,25 +67,6 @@ export function fmtPercent(value: number, options: FmtPercentOptions = {}): stri
|
|
|
71
67
|
/** `percent` — the `basalt-ui/format` name for {@link fmtPercent}. */
|
|
72
68
|
export const percent = fmtPercent
|
|
73
69
|
|
|
74
|
-
export type DeltaPctOptions = FmtPercentOptions
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* A signed percentage delta: `+4%`, `-12%`, `0%` — argo's `walking-pad/formatters.ts#formatPct`
|
|
78
|
-
* (a `+`-prefixed ratio) generalized onto `Intl`'s own `signDisplay: 'exceptZero'`, which adds the
|
|
79
|
-
* `+`/`-` sign the same way `Intl`'s own minus sign already does, and adds nothing for zero. A
|
|
80
|
-
* non-finite value prints {@link NON_FINITE}.
|
|
81
|
-
*/
|
|
82
|
-
export function deltaPct(value: number, options: DeltaPctOptions = {}): string {
|
|
83
|
-
if (!Number.isFinite(value)) return NON_FINITE
|
|
84
|
-
const { digits = 0, input = 'ratio', locale } = options
|
|
85
|
-
return numberFormat(locale, {
|
|
86
|
-
style: 'percent',
|
|
87
|
-
signDisplay: 'exceptZero',
|
|
88
|
-
minimumFractionDigits: digits,
|
|
89
|
-
maximumFractionDigits: digits,
|
|
90
|
-
}).format(input === 'percent' ? value / 100 : value)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
70
|
export type FmtCurrencyOptions = LocaleOption & {
|
|
94
71
|
/** ISO 4217 code — required. There is no default currency. */
|
|
95
72
|
currency: string
|
package/src/format/shared.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared low-level pieces of `basalt-ui/format` — the em-dash sentinel and the memoized
|
|
3
3
|
* `Intl.NumberFormat` cache every number formatter in this module reuses. Moved here (out of
|
|
4
|
-
* `src/charts/utils/format.ts`, C5 consolidation) so the subpath is the single implementation
|
|
5
|
-
*
|
|
6
|
-
* chart callers, but the code lives here now).
|
|
4
|
+
* `src/charts/utils/format.ts`, C5 consolidation) so the subpath is the single implementation;
|
|
5
|
+
* 2.0's chart layer imports it directly (`docs/V2-SPEC.md` § 9).
|
|
7
6
|
*/
|
|
8
7
|
|
|
9
8
|
/**
|
package/src/forms/index.ts
CHANGED
|
@@ -15,28 +15,5 @@
|
|
|
15
15
|
* Optional peer: @mantine/form ^9.3.0 — install with: bun add @mantine/form
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
-
// ── useBasaltForm ─────────────────────────────────────────────────────────────
|
|
19
18
|
export { useBasaltForm } from './create-form'
|
|
20
|
-
export type { UseBasaltFormOptions } from './create-form'
|
|
21
|
-
|
|
22
|
-
// ── inputProps ────────────────────────────────────────────────────────────────
|
|
23
|
-
// Two calls, never one object: `key` inside a spread is a React 19 warning. See field.ts.
|
|
24
19
|
export { inputProps, fieldKey } from './field'
|
|
25
|
-
|
|
26
|
-
// ── submit lifecycle ──────────────────────────────────────────────────────────
|
|
27
|
-
export { useFormSubmit, isFieldErrorEnvelope } from './use-form-submit'
|
|
28
|
-
export type { FormFieldErrors, UseFormSubmitOptions, UseFormSubmitReturn } from './use-form-submit'
|
|
29
|
-
export { FormStateProvider, useFormState } from './form-state'
|
|
30
|
-
export type { FormState, FormStateProviderProps } from './form-state'
|
|
31
|
-
|
|
32
|
-
// ── array fields ──────────────────────────────────────────────────────────────
|
|
33
|
-
export { useFieldArray } from './use-field-array'
|
|
34
|
-
export type { UseFieldArrayReturn } from './use-field-array'
|
|
35
|
-
|
|
36
|
-
// ── FormErrorSummary ──────────────────────────────────────────────────────────
|
|
37
|
-
export { FormErrorSummary } from './FormErrorSummary'
|
|
38
|
-
export type { FormErrorSummaryProps } from './FormErrorSummary'
|
|
39
|
-
|
|
40
|
-
// ── useFormDraft ──────────────────────────────────────────────────────────────
|
|
41
|
-
export { useFormDraft, DEFAULT_AUTOSAVE_DEBOUNCE_MS } from './use-form-draft'
|
|
42
|
-
export type { UseFormDraftOptions, UseFormDraftReturn } from './use-form-draft'
|
package/src/guard/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ./guard — headless policy core. Mantine-free, dependency-free.
|
|
3
3
|
*
|
|
4
|
-
* GUARD_RULES: the closed registry of all
|
|
4
|
+
* GUARD_RULES: the closed registry of all 26 violation kinds.
|
|
5
5
|
* checkSource: pure (text, relPath, cfg) → Finding[]. No FS, no walk, no console.
|
|
6
6
|
*/
|
|
7
7
|
import type { Finding, GuardConfig, GuardKind, GuardSeverity } from './types'
|
|
@@ -277,7 +277,7 @@ const INLINE_FONT_SIZE =
|
|
|
277
277
|
// A `Card` / `Paper` opening tag carrying `withBorder`. Card depth is `--vx-shadow-card`, whose 1px
|
|
278
278
|
// ring lives INSIDE the shadow value; `withBorder` therefore adds a SECOND, real `border` property
|
|
279
279
|
// on top of it (the theme's `styles.root` pins bg/shadow/radius but never clears `border`), and the
|
|
280
|
-
// card reads heavy/boxed. Bounded full-text tag scan, same shape as
|
|
280
|
+
// card reads heavy/boxed. Bounded full-text tag scan, same shape as RAW_FORM_CONTROL_TAG below,
|
|
281
281
|
// so a multi-line-formatted tag still resolves to one match.
|
|
282
282
|
//
|
|
283
283
|
// Two deliberate non-matches:
|
|
@@ -570,10 +570,6 @@ function isSubScaleCssSpacing(line: string, matchIndex: number): boolean {
|
|
|
570
570
|
// display:flex/grid/inline-flex/inline-grid in an inline style.
|
|
571
571
|
const INLINE_DISPLAY = /\bdisplay\s*:\s*['"](?:inline-)?(?:flex|grid)['"]/g
|
|
572
572
|
|
|
573
|
-
// Raw visx axis JSX — only inside chart files, not in the Axes.tsx wrapper.
|
|
574
|
-
const RAW_VISX_AXIS = /<Axis(?:Left|Bottom|Right)\b/g
|
|
575
|
-
const AXIS_WRAPPER_FILE = /(?:^|\/)Axes\.tsx$/
|
|
576
|
-
|
|
577
573
|
// radius prop with a numeric literal (module-level so it is not re-created per call).
|
|
578
574
|
const RADIUS_PROP_RE = /\bradius=(?:\{[0-9]+\}|"[0-9]+")/g
|
|
579
575
|
|
|
@@ -583,107 +579,17 @@ const MOTION_TRANSITION_NUMERIC =
|
|
|
583
579
|
/\btransition\s*=\s*\{\{[^}]*\b(?:duration|stiffness|damping|mass)\s*:\s*-?\d/g
|
|
584
580
|
const MOTION_TRANSITION_EASE_ARRAY = /\btransition\s*=\s*\{\{[^}]*\bease\s*:\s*\[/g
|
|
585
581
|
|
|
586
|
-
//
|
|
587
|
-
// optional explicit JSX generic argument (`<MultiLine<Point>`); the rest of the tag (up to its
|
|
588
|
-
// closing `>`) is resolved by `scanChartTagClose` below, brace-depth aware, so it survives every
|
|
589
|
-
// `>`-shaped decoy inside a prop expression — arrow functions (`=>`), comparisons (`>=`, `<=`),
|
|
590
|
-
// shifts (`>>`) — without needing to enumerate them: a `>` only closes the tag outside every `{…}`.
|
|
591
|
-
const CHART_ENTRY_POINT_TAG_START =
|
|
592
|
-
/<(MultiLine|Bars|BandStrip|Donut|DualPanel|Heatmap|MirroredBars|ZonedLine|StackedArea|LineSparkline|BarSparkline)\b(?:<[^<>]*>)?/g
|
|
593
|
-
const HAS_ARIA_LABEL_PROP = /\bariaLabel\s*=/
|
|
594
|
-
|
|
595
|
-
/**
|
|
596
|
-
* Scans forward from `start` (immediately after a chart tag's name/generic-args) for the `>` that
|
|
597
|
-
* closes the JSX tag. Curly-brace depth aware: a `>` only closes the tag at depth 0, so anything
|
|
598
|
-
* living inside a `{…}` prop expression — `=>`, `>=`, `<=`, `>>`, a nested JSX child's own `>` —
|
|
599
|
-
* never ends the tag early. String/template literals are skipped verbatim so a quoted `>`
|
|
600
|
-
* cannot perturb the depth count either. Returns the index of the closing `>`, or -1 if the tag
|
|
601
|
-
* never closes (malformed/truncated source — the caller treats that as no match).
|
|
602
|
-
*/
|
|
603
|
-
function scanChartTagClose(codeText: string, start: number): number {
|
|
604
|
-
let depth = 0
|
|
605
|
-
let i = start
|
|
606
|
-
while (i < codeText.length) {
|
|
607
|
-
const ch = codeText[i]
|
|
608
|
-
if (ch === '"' || ch === "'" || ch === '`') {
|
|
609
|
-
const quote = ch
|
|
610
|
-
i++
|
|
611
|
-
while (i < codeText.length && codeText[i] !== quote) {
|
|
612
|
-
i += codeText[i] === '\\' ? 2 : 1
|
|
613
|
-
}
|
|
614
|
-
i++
|
|
615
|
-
continue
|
|
616
|
-
}
|
|
617
|
-
if (ch === '{') {
|
|
618
|
-
depth++
|
|
619
|
-
} else if (ch === '}') {
|
|
620
|
-
depth = Math.max(0, depth - 1)
|
|
621
|
-
} else if (ch === '>' && depth === 0) {
|
|
622
|
-
return i
|
|
623
|
-
}
|
|
624
|
-
i++
|
|
625
|
-
}
|
|
626
|
-
return -1
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
// ── Tag provenance, shared by chart-missing-aria-label ────────────────────────────────────────────
|
|
630
|
-
//
|
|
631
|
-
// `chart-missing-aria-label` keys on a JSX tag NAME, which is the whole of its signal — so a
|
|
632
|
-
// consumer's OWN component that merely shares a shipped kind's name collected the finding too.
|
|
633
|
-
// Reported by a consumer on 1.23.0: a hand-composed local `<MirroredBars>` was
|
|
634
|
-
// told to pass an `ariaLabel` prop it does not accept, by a rule that presents as a correctness
|
|
635
|
-
// finding rather than as a naming one. `shadow-basalt-export` / `ai-sdk-major` scope through
|
|
636
|
-
// `isBasaltScopedFile` (package-level); the analogous file-level signal here is where the name in
|
|
637
|
-
// THIS file came from.
|
|
638
|
-
//
|
|
639
|
-
// The gate is deliberately a one-directional NARROWING: a tag is skipped only when the file DEFINES
|
|
640
|
-
// a component of that name and does not also import it from basalt-ui. Everything else still fires
|
|
641
|
-
// — a tag imported from basalt-ui, one imported from a consumer barrel that re-exports it (`import
|
|
642
|
-
// { MultiLine } from '../charts'`, the shape a downstream component library uses), and one the scan
|
|
643
|
-
// cannot attribute at all. Requiring a POSITIVE basalt import instead would have silently switched
|
|
644
|
-
// both rules off for every barrel-wrapping consumer and for every file with no import statements —
|
|
645
|
-
// a far bigger hole than the false positive it closes.
|
|
646
|
-
const LOCAL_COMPONENT_DEF =
|
|
647
|
-
/(?:^|[\n;}])\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?(?:function|class|const|let|var)\s+([A-Z]\w*)/g
|
|
648
|
-
// `from 'basalt-ui'` and every subpath (`basalt-ui/charts`, `basalt-ui/tokens`, …).
|
|
649
|
-
const BASALT_NAMED_IMPORT =
|
|
650
|
-
/import\s+(?:type\s+)?\{([^}]*)\}\s+from\s+['"]basalt-ui(?:\/[^'"]*)?['"]/g
|
|
651
|
-
|
|
652
|
-
/** Component-shaped names DEFINED in this file — the provable "not the shipped kind" signal. */
|
|
653
|
-
function localComponentNames(codeText: string): ReadonlySet<string> {
|
|
654
|
-
const out = new Set<string>()
|
|
655
|
-
for (const m of codeText.matchAll(LOCAL_COMPONENT_DEF)) out.add(m[1] as string)
|
|
656
|
-
return out
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
/** Names bound in this file by a named import from `basalt-ui` — the local binding, so
|
|
660
|
-
* `{ Bars as BasaltBars }` records `BasaltBars`, which is the name the JSX tag will use. */
|
|
661
|
-
function basaltImportedNames(codeText: string): ReadonlySet<string> {
|
|
662
|
-
const out = new Set<string>()
|
|
663
|
-
for (const m of codeText.matchAll(BASALT_NAMED_IMPORT)) {
|
|
664
|
-
for (const raw of (m[1] as string).split(',')) {
|
|
665
|
-
const spec = raw.trim().replace(/^type\s+/, '')
|
|
666
|
-
if (spec.length === 0) continue
|
|
667
|
-
const parts = spec.split(/\s+as\s+/)
|
|
668
|
-
const bound = (parts[parts.length - 1] as string).trim()
|
|
669
|
-
if (bound.length > 0) out.add(bound)
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
return out
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
// Raw lowercase form-control element — line-scoped, same shape as RAW_VISX_AXIS. `\b` after the
|
|
582
|
+
// Raw lowercase form-control element — line-scoped. `\b` after the
|
|
676
583
|
// tag name rejects a same-prefixed custom component (`<inputRef`, `<selectAll`).
|
|
677
584
|
const RAW_FORM_CONTROL = /<(?:input|select|textarea)\b/g
|
|
678
585
|
|
|
679
|
-
// A raw form-control's own opening tag — bounded full-text scan (same shape as CARD_SURFACE_TAG
|
|
680
|
-
//
|
|
681
|
-
// for a sub-floor fontSize.
|
|
586
|
+
// A raw form-control's own opening tag — bounded full-text scan (same shape as CARD_SURFACE_TAG),
|
|
587
|
+
// used ONLY by sub-16-input-font to search the tag's own inline `style` for a sub-floor fontSize.
|
|
682
588
|
const RAW_FORM_CONTROL_TAG = /<(?:input|select|textarea)\b(?:=>|[^>])*?>/g
|
|
683
589
|
|
|
684
590
|
// ── Control-home patterns (docs/CONTROLS-SPEC.md §6 — the text lane of laws C1/C8) ──────────────
|
|
685
591
|
//
|
|
686
|
-
// Bounded full-text tag scans, the CARD_SURFACE_TAG
|
|
592
|
+
// Bounded full-text tag scans, the CARD_SURFACE_TAG shape: a `<Title>` and a
|
|
687
593
|
// `<Select>` are both routinely formatted across lines, so a per-line regex would see neither.
|
|
688
594
|
|
|
689
595
|
/** A `<Title …>` opening tag, however it is wrapped. `order` is judged separately, on the tag text. */
|
|
@@ -872,9 +778,7 @@ export const DEFAULT_GUARD_CONFIG: GuardConfig = {
|
|
|
872
778
|
rawHtmlLayout: true,
|
|
873
779
|
inlineSpacing: true,
|
|
874
780
|
inlineDisplay: true,
|
|
875
|
-
rawVisxAxis: true,
|
|
876
781
|
rawMotionValue: true,
|
|
877
|
-
chartMissingAriaLabel: true,
|
|
878
782
|
rawFormControl: true,
|
|
879
783
|
sub16InputFont: true,
|
|
880
784
|
allowComment: 'theme-allow',
|
|
@@ -957,7 +861,7 @@ function textForFinding(sourceLine: string | undefined, fallbackToken: string):
|
|
|
957
861
|
// ── Path predicate ────────────────────────────────────────────────────────────────────────────────
|
|
958
862
|
|
|
959
863
|
function isChartFile(relPath: string): boolean {
|
|
960
|
-
return relPath.includes('/charts/')
|
|
864
|
+
return relPath.includes('/charts/')
|
|
961
865
|
}
|
|
962
866
|
|
|
963
867
|
/**
|
|
@@ -1093,8 +997,6 @@ export const PLUGIN_RULE_IDS: ReadonlySet<string> = new Set([
|
|
|
1093
997
|
'raw-size-literal',
|
|
1094
998
|
'card-inset',
|
|
1095
999
|
'chart-in-raw-surface',
|
|
1096
|
-
'hand-rolled-plot',
|
|
1097
|
-
'chart-legend-literal',
|
|
1098
1000
|
'hand-rolled-shell',
|
|
1099
1001
|
'shadow-basalt-export',
|
|
1100
1002
|
'raw-scroll-container',
|
|
@@ -1104,40 +1006,47 @@ export const PLUGIN_RULE_IDS: ReadonlySet<string> = new Set([
|
|
|
1104
1006
|
// and the ancestry, which a 12-line regex window has neither of. See the rule's own JSDoc.
|
|
1105
1007
|
'bound-control-outside-home',
|
|
1106
1008
|
'control-size-literal',
|
|
1107
|
-
'page-bar-budget',
|
|
1108
1009
|
'responsive-twin',
|
|
1109
1010
|
'search-literal-link',
|
|
1110
1011
|
'use-search-from-literal',
|
|
1111
|
-
// The
|
|
1012
|
+
// The remaining F5 rules — all AST-only, all outside
|
|
1112
1013
|
// `checkSource`'s reach: provenance here is an import graph and a JSX ancestry, neither of which
|
|
1113
1014
|
// a 12-line regex window has. Same reason `bound-control-outside-home` has no text-lane twin.
|
|
1114
|
-
'provider-above-router',
|
|
1115
1015
|
'query-fn-unwrap',
|
|
1116
|
-
'deprecated-export',
|
|
1117
1016
|
// Same lane: `{...inputProps(…)}` without a sibling `key` is a JSX-ancestry claim (does this
|
|
1118
1017
|
// ELEMENT carry a `key` attribute?) over an import-resolved callee — neither is text.
|
|
1119
1018
|
'forms-field-key',
|
|
1120
1019
|
// `in-body-page-title` is deliberately ABSENT: it is a plugin rule AND a guard kind under one id
|
|
1121
1020
|
// (one law, two lanes, one annotation), and this set is the ids OUTSIDE `checkSource`'s reach.
|
|
1122
1021
|
// `check-source.test.ts` asserts the two registries stay disjoint.
|
|
1123
|
-
'
|
|
1124
|
-
'
|
|
1022
|
+
'chart-engine-boundary',
|
|
1023
|
+
'chart-host-single',
|
|
1125
1024
|
'token-layer-boundary',
|
|
1126
1025
|
'no-import-meta-env',
|
|
1127
1026
|
// AST-only, same reason as `bound-control-outside-home`: a responsive-object prop, a shell-home
|
|
1128
1027
|
// exemption and a hook import all need the import graph and JSX ancestry, neither of which a
|
|
1129
1028
|
// 12-line text window has. `raw-media-query` is its CSS-text twin and lives in `GUARD_RULES`.
|
|
1130
1029
|
'raw-breakpoint',
|
|
1131
|
-
|
|
1030
|
+
'no-dev-helper',
|
|
1031
|
+
// AST-only: a `<ViewTransition>` ancestor of `<Outlet>` is a JSX-ancestry claim over two import-resolved names.
|
|
1032
|
+
'route-view-transition',
|
|
1033
|
+
// These two honour `basalt-agent-allow`, never `theme-allow` — but they are still REAL ids, so
|
|
1132
1034
|
// a `theme-allow ai-sdk-major` must parse as a (useless) scoped annotation rather than as prose.
|
|
1133
|
-
'agent-resume-guard',
|
|
1134
1035
|
'agent-no-raw-usechat',
|
|
1135
1036
|
'ai-sdk-major',
|
|
1136
|
-
// Retired guard kinds — `unframed-chart`'s only case (
|
|
1137
|
-
//
|
|
1037
|
+
// Retired guard kinds — `unframed-chart`'s only case (a hand-written legend array) died with
|
|
1038
|
+
// the public legend component (2.0). Kept here (mirrored by the plugin's own
|
|
1138
1039
|
// `RETIRED_RULE_IDS`) so an existing `theme-allow unframed-chart` reads as a dead waiver via
|
|
1139
1040
|
// `--audit-allows`, never as an unknown-id typo.
|
|
1140
1041
|
'unframed-chart',
|
|
1042
|
+
// Retired in 2.0 (V2-SPEC § 9.8): the visx lint/guard layer. Mirrored by the plugin's own
|
|
1043
|
+
// `RETIRED_RULE_IDS`.
|
|
1044
|
+
'visx-boundary',
|
|
1045
|
+
'visx-tooltip',
|
|
1046
|
+
'hand-rolled-plot',
|
|
1047
|
+
'chart-legend-literal',
|
|
1048
|
+
'raw-visx-axis',
|
|
1049
|
+
'chart-missing-aria-label',
|
|
1141
1050
|
// Retired plugin rule — `<BasaltNotifications />` mounted beside `<BasaltOverlays
|
|
1142
1051
|
// notifications>` is unreachable now that `BasaltNotifications` no longer exists as a
|
|
1143
1052
|
// standalone export. Mirrored by the plugin's own `RETIRED_RULE_IDS`.
|
|
@@ -1146,6 +1055,12 @@ export const PLUGIN_RULE_IDS: ReadonlySet<string> = new Set([
|
|
|
1146
1055
|
// `basalt-ui/query`) is unreachable now that C1 (1.29.0) dropped the `./query` subpath.
|
|
1147
1056
|
// Mirrored by the plugin's own `RETIRED_RULE_IDS`.
|
|
1148
1057
|
'query-dual-import',
|
|
1058
|
+
// Retired in 2.0 (V2-SPEC § 3): the concern is unrepresentable. Mirrored by the plugin's
|
|
1059
|
+
// `RETIRED_RULE_IDS`.
|
|
1060
|
+
'provider-above-router',
|
|
1061
|
+
'page-bar-budget',
|
|
1062
|
+
'agent-resume-guard',
|
|
1063
|
+
'deprecated-export',
|
|
1149
1064
|
])
|
|
1150
1065
|
|
|
1151
1066
|
/**
|
|
@@ -1787,9 +1702,7 @@ export const TOKENS_ONLY_DISABLED_KINDS: ReadonlySet<GuardKind> = new Set([
|
|
|
1787
1702
|
'hidden-inline-style',
|
|
1788
1703
|
'inline-spacing',
|
|
1789
1704
|
'inline-display',
|
|
1790
|
-
'raw-visx-axis',
|
|
1791
1705
|
'raw-motion-value',
|
|
1792
|
-
'chart-missing-aria-label',
|
|
1793
1706
|
'raw-form-control',
|
|
1794
1707
|
'sub-16-input-font',
|
|
1795
1708
|
// Both wave-6 control kinds: `<Title>` is a Mantine component and the remedy for either one is a
|
|
@@ -2008,7 +1921,7 @@ type GuardRule = {
|
|
|
2008
1921
|
readonly kind: GuardKind
|
|
2009
1922
|
/** Static regex, or a builder over cfg for the 3 dynamic kinds (forbiddenAccent/spacing/radius). */
|
|
2010
1923
|
readonly pattern: RegExp | ((cfg: GuardConfig) => RegExp)
|
|
2011
|
-
/** Path-applicability:
|
|
1924
|
+
/** Path-applicability: a kind that only fires in some files. */
|
|
2012
1925
|
readonly appliesTo?: (relPath: string) => boolean
|
|
2013
1926
|
/** Knob gating; always-on kinds omit this. */
|
|
2014
1927
|
readonly enabled?: (cfg: GuardConfig) => boolean
|
|
@@ -2017,7 +1930,7 @@ type GuardRule = {
|
|
|
2017
1930
|
}
|
|
2018
1931
|
|
|
2019
1932
|
/**
|
|
2020
|
-
* The closed registry of all
|
|
1933
|
+
* The closed registry of all 26 guard kinds. The triad test asserts
|
|
2021
1934
|
* `surface.guardKinds ⊆ keyof GUARD_RULES` at runtime.
|
|
2022
1935
|
*
|
|
2023
1936
|
* raw-surface, raw-html-layout, and sub-16-input-font are handled inline in checkSource
|
|
@@ -2027,9 +1940,8 @@ type GuardRule = {
|
|
|
2027
1940
|
* This file and `src/cli/index.ts` are `exempt` in the package's own `basalt` config, and must
|
|
2028
1941
|
* stay that way: a rule's `pattern` and its `message` both spell the anti-pattern out literally
|
|
2029
1942
|
* (`'Raw <input>/<select>/<textarea> …'`), so the guard flags its own definitions when the package
|
|
2030
|
-
* self-scans. Any kind matching a literal tag hits this
|
|
2031
|
-
*
|
|
2032
|
-
* covered by the scanner's own `SKIP` (`*.test.ts`), for the same reason.
|
|
1943
|
+
* self-scans. Any kind matching a literal tag hits this. Fixture files are already covered by the
|
|
1944
|
+
* scanner's own `SKIP` (`*.test.ts`), for the same reason.
|
|
2033
1945
|
*/
|
|
2034
1946
|
export const GUARD_RULES = {
|
|
2035
1947
|
'raw-hex': {
|
|
@@ -2150,16 +2062,6 @@ export const GUARD_RULES = {
|
|
|
2150
2062
|
appliesTo: (relPath) => !isChartFile(relPath) && !relPath.endsWith('.css'),
|
|
2151
2063
|
message: 'Use <Flex>/<Grid>/<Group> instead of an inline display:flex/grid.',
|
|
2152
2064
|
},
|
|
2153
|
-
'raw-visx-axis': {
|
|
2154
|
-
kind: 'raw-visx-axis',
|
|
2155
|
-
pattern: RAW_VISX_AXIS,
|
|
2156
|
-
enabled: (cfg: GuardConfig) => cfg.rawVisxAxis,
|
|
2157
|
-
// Compose the existing chart-file scope with the CSS gate — a chart-file CSS module (none
|
|
2158
|
-
// exist today, but the boundary should hold regardless) still can't carry a JSX axis tag.
|
|
2159
|
-
appliesTo: (relPath) => isChartFile(relPath) && !relPath.endsWith('.css'),
|
|
2160
|
-
message:
|
|
2161
|
-
'Raw <AxisLeft>/<AxisBottom>/<AxisRight> in a chart file — use AxisLeftNumeric / AxisBottomDate / AxisRightNumeric.',
|
|
2162
|
-
},
|
|
2163
2065
|
'raw-motion-value': {
|
|
2164
2066
|
kind: 'raw-motion-value',
|
|
2165
2067
|
pattern: MOTION_TRANSITION_NUMERIC, // handled inline (2-regex kind); entry keeps registry complete
|
|
@@ -2170,15 +2072,6 @@ export const GUARD_RULES = {
|
|
|
2170
2072
|
message:
|
|
2171
2073
|
'Route animation timing through MOTION_DURATION / MOTION_SPRING / MOTION_EASE_STANDARD (basalt-ui motion tokens) instead of a hardcoded duration/spring/ease.',
|
|
2172
2074
|
},
|
|
2173
|
-
'chart-missing-aria-label': {
|
|
2174
|
-
kind: 'chart-missing-aria-label',
|
|
2175
|
-
pattern: CHART_ENTRY_POINT_TAG_START, // handled inline (full-text tag-scoped scan); entry keeps registry complete
|
|
2176
|
-
enabled: (cfg: GuardConfig) => cfg.chartMissingAriaLabel,
|
|
2177
|
-
// JSX-tag-shaped (`<MultiLine …>`) — never appears in CSS text.
|
|
2178
|
-
appliesTo: (relPath) => !relPath.endsWith('.css'),
|
|
2179
|
-
message:
|
|
2180
|
-
'Chart has no accessible text alternative — pass ariaLabel="…" so screen readers get more than an unlabeled graphic.',
|
|
2181
|
-
},
|
|
2182
2075
|
'raw-form-control': {
|
|
2183
2076
|
kind: 'raw-form-control',
|
|
2184
2077
|
pattern: RAW_FORM_CONTROL,
|
|
@@ -2219,7 +2112,7 @@ export const GUARD_RULES = {
|
|
|
2219
2112
|
// The kebab dialect only exists in CSS text; the camelCase half is `raw-surface`.
|
|
2220
2113
|
appliesTo: (relPath) => relPath.endsWith('.css'),
|
|
2221
2114
|
message:
|
|
2222
|
-
'Surface literal in CSS — use var(--vx-radius-card|--vx-radius-
|
|
2115
|
+
'Surface literal in CSS — use var(--vx-radius-card|--vx-radius-ctrl) for a corner and var(--vx-shadow-card) for depth, the same tokens the TSX side is held to.',
|
|
2223
2116
|
},
|
|
2224
2117
|
'hidden-inline-style': {
|
|
2225
2118
|
kind: 'hidden-inline-style',
|
|
@@ -2235,7 +2128,7 @@ export const GUARD_RULES = {
|
|
|
2235
2128
|
// JSX-tag-shaped (`<Title order={1}>`) — never appears in CSS text.
|
|
2236
2129
|
appliesTo: (relPath) => !relPath.endsWith('.css'),
|
|
2237
2130
|
message:
|
|
2238
|
-
'In-body page title — a page is named ONCE: by the breadcrumb (
|
|
2131
|
+
'In-body page title — a page is named ONCE: by the breadcrumb (the nav item label), by PageBar.title, or by <PageTitle> on a shell-less surface (a route error, an auth gate, a standalone screen). Every section/card/table title is a WidgetHeader (docs/CONTROLS-SPEC.md law C8). An <Title order={1|2}> spelling a name out in the body is a second name for the same page, and it drifts. A Title rendering a VALUE — {doc.title}, {RANK_LABEL[rank]} — never reports: that is data, not a name. Prose / ArticleLayout / an overlay and anything under a content/ path never report either. Same law the oxlint plugin enforces as basalt/in-body-page-title — one id, two lanes, so one theme-allow covers both.',
|
|
2239
2132
|
},
|
|
2240
2133
|
'raw-selection-control': {
|
|
2241
2134
|
kind: 'raw-selection-control',
|
|
@@ -2622,17 +2515,6 @@ export function checkSource(text: string, relPath: string, cfg: GuardConfig): Fi
|
|
|
2622
2515
|
}
|
|
2623
2516
|
}
|
|
2624
2517
|
|
|
2625
|
-
// raw-visx-axis — pattern + gating + path applicability (chart-file scope AND CSS gate,
|
|
2626
|
-
// composed on the registry's own appliesTo) from GUARD_RULES.
|
|
2627
|
-
if (
|
|
2628
|
-
GUARD_RULES['raw-visx-axis'].enabled!(cfg) &&
|
|
2629
|
-
GUARD_RULES['raw-visx-axis'].appliesTo!(relPath)
|
|
2630
|
-
) {
|
|
2631
|
-
for (const m of line.matchAll(GUARD_RULES['raw-visx-axis'].pattern as RegExp)) {
|
|
2632
|
-
push('raw-visx-axis', i + 1, m[0])
|
|
2633
|
-
}
|
|
2634
|
-
}
|
|
2635
|
-
|
|
2636
2518
|
// raw-motion-value: 2 separate regex checks, one kind — gated via GUARD_RULES entry.
|
|
2637
2519
|
if (GUARD_RULES['raw-motion-value'].enabled!(cfg) && ruleApplies('raw-motion-value', relPath)) {
|
|
2638
2520
|
for (const m of line.matchAll(MOTION_TRANSITION_NUMERIC))
|
|
@@ -2679,43 +2561,6 @@ export function checkSource(text: string, relPath: string, cfg: GuardConfig): Fi
|
|
|
2679
2561
|
}
|
|
2680
2562
|
}
|
|
2681
2563
|
|
|
2682
|
-
// The aria-label tag rule below gates on tag PROVENANCE (see the block above LOCAL_COMPONENT_DEF).
|
|
2683
|
-
// Computed once, and only if the rule actually runs.
|
|
2684
|
-
const ariaLabelRuns =
|
|
2685
|
-
GUARD_RULES['chart-missing-aria-label'].enabled!(cfg) &&
|
|
2686
|
-
ruleApplies('chart-missing-aria-label', relPath)
|
|
2687
|
-
const localNames = ariaLabelRuns ? localComponentNames(codeText) : new Set<string>()
|
|
2688
|
-
const basaltNames = ariaLabelRuns ? basaltImportedNames(codeText) : new Set<string>()
|
|
2689
|
-
const isShippedTag = (tag: string): boolean => basaltNames.has(tag) || !localNames.has(tag)
|
|
2690
|
-
|
|
2691
|
-
// chart-missing-aria-label — full-text tag-scoped scan.
|
|
2692
|
-
// A tag is a violation only when its own (possibly multi-line) prop list has no `ariaLabel=`.
|
|
2693
|
-
// Reports at the tag's OPENING line, like card-with-border below and unlike the end-of-match
|
|
2694
|
-
// arithmetic this used to do: on a multi-line-formatted chart the end lands on the closing `/>`,
|
|
2695
|
-
// which is what `Finding.text` would then quote back — the closing bracket rather than the tag
|
|
2696
|
-
// that is missing the prop. The allow-comment is honored anywhere in the tag's span, so a
|
|
2697
|
-
// `theme-allow` that used to sit on the closing line keeps working.
|
|
2698
|
-
if (ariaLabelRuns) {
|
|
2699
|
-
for (const m of codeText.matchAll(CHART_ENTRY_POINT_TAG_START)) {
|
|
2700
|
-
const matchStart = m.index ?? 0
|
|
2701
|
-
// A tag this file defines itself is not the shipped kind — it does not take `ariaLabel`.
|
|
2702
|
-
if (!isShippedTag(m[1] as string)) continue
|
|
2703
|
-
const closeIdx = scanChartTagClose(codeText, matchStart + m[0].length)
|
|
2704
|
-
if (closeIdx === -1) continue
|
|
2705
|
-
const tagText = codeText.slice(matchStart, closeIdx + 1)
|
|
2706
|
-
if (HAS_ARIA_LABEL_PROP.test(tagText)) continue
|
|
2707
|
-
const startLine = codeText.slice(0, matchStart).split('\n').length
|
|
2708
|
-
const endLine = startLine + (tagText.split('\n').length - 1)
|
|
2709
|
-
if (isAllowedInRange(startLine, endLine, 'chart-missing-aria-label')) continue
|
|
2710
|
-
findings.push({
|
|
2711
|
-
relPath,
|
|
2712
|
-
line: startLine,
|
|
2713
|
-
token: tagText.slice(0, 40),
|
|
2714
|
-
kind: 'chart-missing-aria-label',
|
|
2715
|
-
})
|
|
2716
|
-
}
|
|
2717
|
-
}
|
|
2718
|
-
|
|
2719
2564
|
// card-with-border — full-text tag-scoped scan (same shape as the two above). Reports at the line
|
|
2720
2565
|
// of the `withBorder` token itself (not the end of the tag) so a multi-line-formatted Card points
|
|
2721
2566
|
// the fix at the prop to delete.
|
package/src/guard/types.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Guard types — Mantine-free, dependency-free (zero imports beyond TS types).
|
|
3
3
|
*
|
|
4
|
-
* GuardKind is the closed set of
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* recognized id in `PLUGIN_RULE_IDS`/`KNOWN_RULE_IDS` so an existing `theme-allow unframed-chart`
|
|
9
|
-
* reads as a dead waiver, not a typo.
|
|
4
|
+
* GuardKind is the closed set of 26 violation kinds the theme guard can emit. Retired kinds
|
|
5
|
+
* (`unframed-chart`, `raw-visx-axis`, `chart-missing-aria-label`) stay recognized ids in
|
|
6
|
+
* `PLUGIN_RULE_IDS`/`KNOWN_RULE_IDS` so an existing `theme-allow <id>` reads as a dead waiver, not
|
|
7
|
+
* a typo.
|
|
10
8
|
* Finding is the structured result per violation, replacing the old `Violation` shape.
|
|
11
9
|
* GuardConfig is the per-run configuration that drives checkSource.
|
|
12
10
|
*/
|
|
13
11
|
|
|
14
|
-
/** The
|
|
12
|
+
/** The 26 theme-guard violation kinds. */
|
|
15
13
|
export type GuardKind =
|
|
16
14
|
| 'raw-hex'
|
|
17
15
|
| 'raw-color-fn'
|
|
@@ -26,9 +24,7 @@ export type GuardKind =
|
|
|
26
24
|
| 'raw-html-layout'
|
|
27
25
|
| 'inline-spacing'
|
|
28
26
|
| 'inline-display'
|
|
29
|
-
| 'raw-visx-axis'
|
|
30
27
|
| 'raw-motion-value'
|
|
31
|
-
| 'chart-missing-aria-label'
|
|
32
28
|
| 'raw-form-control'
|
|
33
29
|
| 'sub-16-input-font'
|
|
34
30
|
| 'raw-font-family'
|
|
@@ -129,17 +125,8 @@ export type GuardConfig = {
|
|
|
129
125
|
readonly inlineSpacing: boolean
|
|
130
126
|
/** Flag display:flex|grid|inline-flex|inline-grid in an inline style={{}}. Default true. */
|
|
131
127
|
readonly inlineDisplay: boolean
|
|
132
|
-
/** Flag raw <AxisLeft>/<AxisBottom>/<AxisRight> JSX inside chart files. Default true. */
|
|
133
|
-
readonly rawVisxAxis: boolean
|
|
134
128
|
/** Flag a hardcoded duration/spring/ease literal in a `transition={{...}}` prop. Default true. */
|
|
135
129
|
readonly rawMotionValue: boolean
|
|
136
|
-
/**
|
|
137
|
-
* Flag a chart-kind JSX usage (`<MultiLine>`, `<Bars>`, `<Donut>`, `<DualPanel>`, `<Heatmap>`,
|
|
138
|
-
* `<ZonedLine>`, `<StackedArea>`, `<LineSparkline>`, `<BarSparkline>`) missing an `ariaLabel`
|
|
139
|
-
* prop — screen readers otherwise get an unlabeled empty graphic. Default `true` (ON). Set
|
|
140
|
-
* `false` to disable the `chart-missing-aria-label` check.
|
|
141
|
-
*/
|
|
142
|
-
readonly chartMissingAriaLabel: boolean
|
|
143
130
|
/**
|
|
144
131
|
* Flag a raw lowercase `<input>` / `<select>` / `<textarea>` JSX element — it bypasses the
|
|
145
132
|
* ENTIRE theme (no field surface, no `shadow-card` depth, no focus ring, no `--input-*` vars),
|
|
@@ -184,7 +171,7 @@ export type GuardConfig = {
|
|
|
184
171
|
/**
|
|
185
172
|
* Per-rule, per-path exemptions — complements whole-file `exempt` (BasaltConfig, which skips
|
|
186
173
|
* ALL rules for a file) and code-level `appliesTo` (hardcoded per-kind path scoping, e.g.
|
|
187
|
-
* raw-
|
|
174
|
+
* raw-html-layout → non-chart files). This is the config-driven counterpart: a consumer can say
|
|
188
175
|
* "kind K does not apply under path P" without exempting the whole file or forking the rule.
|
|
189
176
|
*
|
|
190
177
|
* Each value is a list of path-segment patterns matched against a finding's `relPath`. A pattern
|