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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./table — BasaltDataTable: a sortable data table over @tanstack/react-table v9, rendered with
|
|
3
|
+
* Mantine primitives. Opt-in chrome: a search/facet toolbar, a pagination bar (client-side or
|
|
4
|
+
* server-driven) and sticky column pinning. `createColumnHelper` is basalt's own, bound to the
|
|
5
|
+
* table's feature set — no TanStack hook, feature or row-model symbol leaves this subpath.
|
|
6
|
+
*
|
|
7
|
+
* Optional peer: @tanstack/react-table 9.2.8 (exact).
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* import { BasaltDataTable, createColumnHelper } from 'basalt-ui/table'
|
|
11
|
+
* type Row = { name: string; score: number }
|
|
12
|
+
* const col = createColumnHelper<Row>()
|
|
13
|
+
* const columns = [col.accessor('name', { header: 'Name' }), col.accessor('score', { header: 'Score' })]
|
|
14
|
+
* <BasaltDataTable data={rows} columns={columns} enableGlobalFilter enablePagination />
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export { BasaltDataTable } from './data-table'
|
|
18
|
+
export { createColumnHelper } from './table-features'
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE module-scope Table v9 feature set `BasaltDataTable` runs on, and the basalt-owned
|
|
3
|
+
* `createColumnHelper` bound to it. Nothing here but `createColumnHelper` leaves `./table`: the
|
|
4
|
+
* feature set, `useTable` and the row-model factories are implementation, and a consumer never
|
|
5
|
+
* spells `<TFeatures, TData>` (`docs/V2-SPEC.md` § 8).
|
|
6
|
+
*/
|
|
7
|
+
import {
|
|
8
|
+
columnFilteringFeature,
|
|
9
|
+
columnPinningFeature,
|
|
10
|
+
columnSizingFeature,
|
|
11
|
+
columnVisibilityFeature,
|
|
12
|
+
createColumnHelper as tanstackColumnHelper,
|
|
13
|
+
createFilteredRowModel,
|
|
14
|
+
createPaginatedRowModel,
|
|
15
|
+
createSortedRowModel,
|
|
16
|
+
filterFn_includesString,
|
|
17
|
+
globalFilteringFeature,
|
|
18
|
+
metaHelper,
|
|
19
|
+
rowPaginationFeature,
|
|
20
|
+
rowSelectionFeature,
|
|
21
|
+
rowSortingFeature,
|
|
22
|
+
sortFn_alphanumeric,
|
|
23
|
+
sortFn_basic,
|
|
24
|
+
sortFn_datetime,
|
|
25
|
+
sortFn_text,
|
|
26
|
+
tableFeatures,
|
|
27
|
+
} from '@tanstack/react-table'
|
|
28
|
+
import type { ColumnDef, ColumnHelper, RowData } from '@tanstack/react-table'
|
|
29
|
+
|
|
30
|
+
/** Horizontal alignment of a column's header AND its cells. */
|
|
31
|
+
export type DataTableAlign = 'left' | 'center' | 'right'
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* What a column def's `meta` may carry. Registered per table through `columnMeta: metaHelper<…>()`
|
|
35
|
+
* rather than a global `declare module '@tanstack/react-table'`, so `meta: { aling: 'right' }` is a
|
|
36
|
+
* compile error (excess-property check on the literal) and nothing leaks into a consumer's own
|
|
37
|
+
* TanStack types. A wrong align VALUE that reaches runtime still throws at render.
|
|
38
|
+
*/
|
|
39
|
+
export type BasaltColumnMeta = {
|
|
40
|
+
align?: DataTableAlign
|
|
41
|
+
/**
|
|
42
|
+
* Opt OUT of the automatic mono-numeral cell style. The table applies it whenever the cell's
|
|
43
|
+
* raw value is a number — which is right for a plain figure and wrong for a numeric accessor
|
|
44
|
+
* whose `cell` renders its own chrome (a coloured `Text`, a `Badge`, a sparkline), because the
|
|
45
|
+
* `<td>`'s mono font then overrides what the cell asked for.
|
|
46
|
+
*/
|
|
47
|
+
numeral?: boolean
|
|
48
|
+
/**
|
|
49
|
+
* Fold priority for the measured column fold (`docs/CONTROLS-SPEC.md` §2): once the
|
|
50
|
+
* table no longer fits its wrapper, the HIGHEST-numbered priority column folds first, moving
|
|
51
|
+
* into a per-row disclosure instead of forcing the table into horizontal scroll. Unset columns
|
|
52
|
+
* fall back to their declared position, so a bare `<BasaltDataTable data columns />` folds its
|
|
53
|
+
* LAST column first — nothing regresses with no `meta.priority` set anywhere. See `foldOrder`.
|
|
54
|
+
*/
|
|
55
|
+
priority?: number
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Every row model is registered (v9 has no per-render `getXRowModel` switch); the table bypasses the
|
|
60
|
+
* ones a prop turns off through TanStack's `manual*` flags. `sortFns` is load-bearing: v9 falls back
|
|
61
|
+
* to `basic` for an unregistered sort function with only a dev warning, which sorts `Project 10`
|
|
62
|
+
* before `Project 2`. `columnSizingFeature` is too — `column.getStart`/`getAfter` live there, and
|
|
63
|
+
* sticky pinning reads them.
|
|
64
|
+
*/
|
|
65
|
+
export const basaltTableFeatures = tableFeatures({
|
|
66
|
+
rowSortingFeature,
|
|
67
|
+
columnFilteringFeature,
|
|
68
|
+
globalFilteringFeature,
|
|
69
|
+
rowPaginationFeature,
|
|
70
|
+
rowSelectionFeature,
|
|
71
|
+
columnSizingFeature,
|
|
72
|
+
columnPinningFeature,
|
|
73
|
+
columnVisibilityFeature,
|
|
74
|
+
sortedRowModel: createSortedRowModel(),
|
|
75
|
+
filteredRowModel: createFilteredRowModel(),
|
|
76
|
+
paginatedRowModel: createPaginatedRowModel(),
|
|
77
|
+
sortFns: {
|
|
78
|
+
alphanumeric: sortFn_alphanumeric,
|
|
79
|
+
text: sortFn_text,
|
|
80
|
+
datetime: sortFn_datetime,
|
|
81
|
+
basic: sortFn_basic,
|
|
82
|
+
},
|
|
83
|
+
filterFns: { includesString: filterFn_includesString },
|
|
84
|
+
columnMeta: metaHelper<BasaltColumnMeta>(),
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
export type BasaltTableFeatures = typeof basaltTableFeatures
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* A column def of `BasaltDataTable`'s feature set; the cell value varies per column, hence the `any`.
|
|
91
|
+
* Build columns with `createColumnHelper` below — hand-typing this is not the supported path.
|
|
92
|
+
*/
|
|
93
|
+
// oxlint-disable-next-line typescript/no-explicit-any -- TanStack-idiomatic heterogeneous column array
|
|
94
|
+
export type BasaltColumnDef<T extends RowData> = ColumnDef<BasaltTableFeatures, T, any>
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Typed accessor builder for `BasaltDataTable` columns: `col.accessor('field', …)` columns sort by
|
|
98
|
+
* value. One generic, the row type — the feature set is basalt's.
|
|
99
|
+
*/
|
|
100
|
+
export function createColumnHelper<T extends RowData>(): ColumnHelper<BasaltTableFeatures, T> {
|
|
101
|
+
return tanstackColumnHelper<BasaltTableFeatures, T>()
|
|
102
|
+
}
|
package/src/telemetry.ts
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The telemetry seam (V2-SPEC § 7). Basalt emits typed events through one sink,
|
|
3
|
+
* `BasaltProvider telemetry`, and has no OTel dependency; the consumer maps events to its own SDK.
|
|
4
|
+
*
|
|
5
|
+
* Events carry ids, hashes, counts and durations only — never an error object, message, stack,
|
|
6
|
+
* search param or query data. A `failed: true` event additionally carries `exception.type` and
|
|
7
|
+
* `basalt.error.kind`; a `failed: false` event carries neither, and the types enforce both ways.
|
|
8
|
+
*/
|
|
9
|
+
import { createContext } from 'react'
|
|
10
|
+
import type { ThreadStatus } from './agent/thread'
|
|
11
|
+
|
|
12
|
+
/** Epoch ms (`performance.timeOrigin + performance.now()`). */
|
|
13
|
+
type At = { start: number }
|
|
14
|
+
/** `start` plus a duration in ms. */
|
|
15
|
+
type Span = At & { duration: number }
|
|
16
|
+
|
|
17
|
+
/** The error family, or an `AgentError` kind (W8) — closed. */
|
|
18
|
+
type ErrorKind =
|
|
19
|
+
| 'route'
|
|
20
|
+
| 'query'
|
|
21
|
+
| 'mutation'
|
|
22
|
+
| 'render'
|
|
23
|
+
| 'window'
|
|
24
|
+
| 'unhandledrejection'
|
|
25
|
+
| 'http'
|
|
26
|
+
| 'stream'
|
|
27
|
+
| 'server'
|
|
28
|
+
| 'aborted'
|
|
29
|
+
|
|
30
|
+
type Failure = { 'exception.type': string; 'basalt.error.kind': ErrorKind }
|
|
31
|
+
type Ok<T, A> = Span & { type: T; failed: false; attributes: A }
|
|
32
|
+
type Err<T, A, S = At> = S & { type: T; failed: true; attributes: A & Failure }
|
|
33
|
+
|
|
34
|
+
type RouteAttrs = {
|
|
35
|
+
'basalt.route.id': string
|
|
36
|
+
'basalt.route.from': string
|
|
37
|
+
/** Pathname, never search. */
|
|
38
|
+
'url.path': string
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
type ChatAttrs = {
|
|
42
|
+
'basalt.chat.thread_id': string
|
|
43
|
+
'basalt.chat.ttft_ms': number
|
|
44
|
+
'basalt.chat.parts': number
|
|
45
|
+
'basalt.chat.status': ThreadStatus
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Closed union: switch on `type`/`failed` and end with `default: return event satisfies never`.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* export function telemetry(e: BasaltEvent): void {
|
|
53
|
+
* const span = tracer.startSpan(e.type, { startTime: e.start, attributes: { ...e.attributes } })
|
|
54
|
+
* if (e.failed) span.setStatus({ code: SpanStatusCode.ERROR })
|
|
55
|
+
* span.end('duration' in e ? e.start + e.duration : e.start)
|
|
56
|
+
* }
|
|
57
|
+
*/
|
|
58
|
+
export type BasaltEvent =
|
|
59
|
+
| Ok<'route.navigate', RouteAttrs>
|
|
60
|
+
| Err<'route.error', { 'basalt.route.id': string }>
|
|
61
|
+
| Err<'query.error', { 'basalt.query.hash': string; 'basalt.query.failure_count': number }>
|
|
62
|
+
| Err<'mutation.error', { 'basalt.mutation.key': string }>
|
|
63
|
+
| Err<'render.error', { 'basalt.error.boundary': 'root' }>
|
|
64
|
+
| Err<'window.error', { 'basalt.error.source': 'error' | 'unhandledrejection' }>
|
|
65
|
+
| Ok<'chat.turn', ChatAttrs>
|
|
66
|
+
| Err<'chat.turn', ChatAttrs, Span>
|
|
67
|
+
|
|
68
|
+
export type Telemetry = (event: BasaltEvent) => void
|
|
69
|
+
|
|
70
|
+
export const now = (): number => performance.timeOrigin + performance.now()
|
|
71
|
+
|
|
72
|
+
/** `error.name`, `'Error'` for a non-`Error` throw. */
|
|
73
|
+
export const errorName = (error: unknown): string => (error instanceof Error ? error.name : 'Error')
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Wrap a sink so it is called synchronously and a throwing sink never breaks a render. No sink, no
|
|
77
|
+
* events.
|
|
78
|
+
*/
|
|
79
|
+
export function createEmitter(sink: Telemetry | undefined): Telemetry {
|
|
80
|
+
if (sink === undefined) return noop
|
|
81
|
+
return (event) => {
|
|
82
|
+
try {
|
|
83
|
+
sink(event)
|
|
84
|
+
} catch {
|
|
85
|
+
// a throwing sink must never break the app (§ 7 delivery rules)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function noop(): void {}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The provider's wrapped emitter, for hooks that emit their own events (`useAgentThreadRuns`'
|
|
94
|
+
* `chat.turn`). `undefined` outside a `BasaltProvider`, where such a hook emits nothing.
|
|
95
|
+
*/
|
|
96
|
+
export const TelemetryContext = createContext<Telemetry | undefined>(undefined)
|
|
97
|
+
|
|
98
|
+
/** The event sink of the provider mounted on a router, read by `createBasaltRouter`'s `onCatch`. */
|
|
99
|
+
const routerSinks = new WeakMap<object, Telemetry>()
|
|
100
|
+
|
|
101
|
+
export function bindRouterTelemetry(router: object, emit: Telemetry): () => void {
|
|
102
|
+
routerSinks.set(router, emit)
|
|
103
|
+
return () => {
|
|
104
|
+
if (routerSinks.get(router) === emit) routerSinks.delete(router)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function routerTelemetry(router: object): Telemetry {
|
|
109
|
+
return routerSinks.get(router) ?? noop
|
|
110
|
+
}
|
package/src/theme/index.ts
CHANGED
|
@@ -81,9 +81,9 @@ import {
|
|
|
81
81
|
import type { PaletteData, RadiusValues, SpaceValues } from '../tokens/palette'
|
|
82
82
|
import { DEFAULT_DERIVE_CONFIG, isDefaultDeriveConfig, resolveDeriveConfig } from '../tokens/derive'
|
|
83
83
|
import type { DeriveConfig } from '../tokens/derive'
|
|
84
|
-
import { pxRem, VX } from '../tokens'
|
|
84
|
+
import { pxRem, VX } from '../tokens/core'
|
|
85
85
|
import { SIZE_CLASS_BREAKPOINTS } from '../tokens/size-classes'
|
|
86
|
-
import type { BasaltFontsConfig } from '../tokens'
|
|
86
|
+
import type { BasaltFontsConfig } from '../tokens/core'
|
|
87
87
|
import controlsClasses from './controls.module.css'
|
|
88
88
|
import floatingClasses from './floating.module.css'
|
|
89
89
|
import navLinkClasses from './nav-link.module.css'
|
|
@@ -92,12 +92,12 @@ import timelineClasses from './timeline.module.css'
|
|
|
92
92
|
import { HIT_ATTR } from './ctl-theme'
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* The `fonts` option's resolved shape — defined in
|
|
96
|
-
*
|
|
95
|
+
* The `fonts` option's resolved shape — defined in `../tokens/core` (`BasaltFontsConfig`, paired
|
|
96
|
+
* with its pure builder `buildFontsCss` there, internal to the package); re-exported here since
|
|
97
97
|
* `CreateBasaltThemeOptions.fonts` below is its primary production entry point. See
|
|
98
98
|
* {@link CreateBasaltThemeOptions.fonts}.
|
|
99
99
|
*/
|
|
100
|
-
export type { BasaltFontsConfig } from '../tokens'
|
|
100
|
+
export type { BasaltFontsConfig } from '../tokens/core'
|
|
101
101
|
|
|
102
102
|
// The active resolved SpaceValues off the running theme (as opposed to the static level-0
|
|
103
103
|
// snapshot) — see its own doc comment for why it lives here rather than in `tokens/`.
|
|
@@ -110,11 +110,10 @@ export { useBasaltSpacing } from './use-basalt-spacing'
|
|
|
110
110
|
export { CTL_THEME, CtlSlot, type CtlSlotProps } from './ctl-theme'
|
|
111
111
|
|
|
112
112
|
// `ThemeToggle` moved into this directory (C1 consolidation, merging the former `theme-toggle/`
|
|
113
|
-
// dir)
|
|
114
|
-
//
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// `./theme/theme-toggle`, unchanged from before the merge.
|
|
113
|
+
// dir) and is deliberately NOT re-exported from this barrel: the root barrel (`src/index.ts`) imports
|
|
114
|
+
// it straight from `./theme/theme-toggle`, which keeps it out of the `./controls` graph (this file
|
|
115
|
+
// resolves from `./controls` via `CtlSlot`). It no longer imports `motion/react` (V2-SPEC § 5), so
|
|
116
|
+
// that is no longer a peer concern, only a graph-size one.
|
|
118
117
|
|
|
119
118
|
// Typed `theme.other.basaltDerive` / `theme.other.basaltFonts` / `theme.other.basaltRadius` /
|
|
120
119
|
// `theme.other.basaltDensity` reads (Mantine's `MantineThemeOther` ships an index signature, so
|
|
@@ -447,6 +446,8 @@ function buildTheme(data: PaletteData, options: BuildThemeOptions = {}): Mantine
|
|
|
447
446
|
// Mantine's dark `--mantine-color-{c}-text`, which is hardcoded to shade 4 = `ACCENT.accent.dark`.
|
|
448
447
|
primaryShade: 6,
|
|
449
448
|
autoContrast: true,
|
|
449
|
+
// V2-SPEC § 5: Mantine's own transitions (modal, drawer, popover, menu) follow the OS setting.
|
|
450
|
+
respectReducedMotion: true,
|
|
450
451
|
luminanceThreshold: 0.45,
|
|
451
452
|
// Force the `light` variant to a faint, AA-legible tint in both schemes (see resolver above).
|
|
452
453
|
variantColorResolver: basaltVariantColorResolver,
|
|
@@ -1433,6 +1434,12 @@ function ctlSizeVars(): Record<string, string> {
|
|
|
1433
1434
|
}
|
|
1434
1435
|
}
|
|
1435
1436
|
|
|
1437
|
+
/** `radius` knob: an integer level, so an out-of-range value is a tsc error (V2-SPEC §3). */
|
|
1438
|
+
export type BasaltRadiusLevel = -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5
|
|
1439
|
+
|
|
1440
|
+
/** `density` knob: an integer level, so an out-of-range value is a tsc error (V2-SPEC §3). */
|
|
1441
|
+
export type BasaltDensityLevel = -3 | -2 | -1 | 0 | 1 | 2 | 3
|
|
1442
|
+
|
|
1436
1443
|
/**
|
|
1437
1444
|
* Build the `cssVariablesResolver` bound to a given palette `data` — the derive-config-dependent
|
|
1438
1445
|
* half of the fallback hexes below (see `buildTheme` above for the same split on `theme.colors`).
|
|
@@ -1444,9 +1451,9 @@ function ctlSizeVars(): Record<string, string> {
|
|
|
1444
1451
|
* `BasaltBridge`'s injected `<style>` (the palette CSS built from the SAME resolved config, keyed
|
|
1445
1452
|
* by `theme.other.basaltDerive`), which wins the cascade over the resolver's inline fallback hexes.
|
|
1446
1453
|
* Limitation: `injectPalette={false}` combined with a custom `derive` therefore leaves the
|
|
1447
|
-
* resolver's fallback hexes at the shipped defaults
|
|
1448
|
-
*
|
|
1449
|
-
*
|
|
1454
|
+
* resolver's fallback hexes at the shipped defaults, silently mismatching the intended identity.
|
|
1455
|
+
* `buildPaletteData` is not public, so a consumer with a non-default derive config keeps
|
|
1456
|
+
* `injectPalette` on.
|
|
1450
1457
|
*/
|
|
1451
1458
|
function buildCssVariablesResolver(data: PaletteData): CSSVariablesResolver {
|
|
1452
1459
|
const { INK, NEUTRAL, SURFACE } = data
|
|
@@ -1575,7 +1582,7 @@ export type CreateBasaltThemeOptions = {
|
|
|
1575
1582
|
* @example
|
|
1576
1583
|
* createBasaltTheme(undefined, { radius: 2 })
|
|
1577
1584
|
*/
|
|
1578
|
-
radius?:
|
|
1585
|
+
radius?: BasaltRadiusLevel
|
|
1579
1586
|
|
|
1580
1587
|
/**
|
|
1581
1588
|
* Retune spacing DENSITY from a single integer level in `[-3, 3]` (default `0` = the shipped
|
|
@@ -1598,23 +1605,7 @@ export type CreateBasaltThemeOptions = {
|
|
|
1598
1605
|
* @example
|
|
1599
1606
|
* createBasaltTheme(undefined, { density: -2 })
|
|
1600
1607
|
*/
|
|
1601
|
-
density?:
|
|
1602
|
-
|
|
1603
|
-
/**
|
|
1604
|
-
* Input sizing for the platform the app runs on. `'touch'` (default) keeps the shipped identity:
|
|
1605
|
-
* `md` inputs (42px) with the 16px font floor that stops iOS Safari's focus-zoom. `'desktop'` is
|
|
1606
|
-
* for an app that never runs in a mobile browser (a Tauri/Electron shell): the Input family
|
|
1607
|
-
* (`TextInput`, `NumberInput`, `PasswordInput`, `Select`, `Textarea`, `Input`) defaults to
|
|
1608
|
-
* Mantine's `sm` (36px, `--vx-text-sm` font) and the provider drops the 16px floor, so every
|
|
1609
|
-
* input Mantine ships — `MultiSelect`/`TagsInput`/pills included, they already default to `sm` —
|
|
1610
|
-
* renders at its own size. An explicit `size` prop still wins. Stashed on
|
|
1611
|
-
* `theme.other.basaltInputs` (only when non-default); `BasaltProvider` emits the floor override,
|
|
1612
|
-
* so `injectPalette={false}` also opts it out.
|
|
1613
|
-
*
|
|
1614
|
-
* @example
|
|
1615
|
-
* createBasaltTheme(undefined, { inputs: 'desktop' })
|
|
1616
|
-
*/
|
|
1617
|
-
inputs?: 'touch' | 'desktop'
|
|
1608
|
+
density?: BasaltDensityLevel
|
|
1618
1609
|
}
|
|
1619
1610
|
|
|
1620
1611
|
/**
|
|
@@ -1627,20 +1618,6 @@ function hasFontsConfig(fonts: BasaltFontsConfig | undefined): fonts is BasaltFo
|
|
|
1627
1618
|
return fonts !== undefined && Object.values(fonts).some((value) => value !== undefined)
|
|
1628
1619
|
}
|
|
1629
1620
|
|
|
1630
|
-
/** `{ inputs: 'desktop' }` — see {@link CreateBasaltThemeOptions.inputs}. Merged AFTER the base
|
|
1631
|
-
* theme, so `defaultProps.size: 'sm'` replaces the base's `'md'` and `other` deep-merges. */
|
|
1632
|
-
const DESKTOP_INPUTS_THEME: MantineThemeOverride = {
|
|
1633
|
-
components: {
|
|
1634
|
-
Input: Input.extend({ defaultProps: { size: 'sm' } }),
|
|
1635
|
-
TextInput: TextInput.extend({ defaultProps: { size: 'sm' } }),
|
|
1636
|
-
NumberInput: NumberInput.extend({ defaultProps: { size: 'sm' } }),
|
|
1637
|
-
PasswordInput: PasswordInput.extend({ defaultProps: { size: 'sm' } }),
|
|
1638
|
-
Select: Select.extend({ defaultProps: { size: 'sm' } }),
|
|
1639
|
-
Textarea: Textarea.extend({ defaultProps: { size: 'sm' } }),
|
|
1640
|
-
},
|
|
1641
|
-
other: { basaltInputs: 'desktop' },
|
|
1642
|
-
}
|
|
1643
|
-
|
|
1644
1621
|
/**
|
|
1645
1622
|
* Build the Basalt theme, optionally merged with consumer overrides. Overrides win on conflict
|
|
1646
1623
|
* (Mantine `mergeThemeOverrides` is last-wins), so a consumer can retune any field without
|
|
@@ -1677,7 +1654,6 @@ export function createBasaltTheme(
|
|
|
1677
1654
|
const spaceValues = deriveSpacing(densityLevel)
|
|
1678
1655
|
const isDefaultDensity = densityLevel === 0
|
|
1679
1656
|
const isDefaultDerive = isDefaultDeriveConfig(resolvedConfig)
|
|
1680
|
-
const desktopInputs = options?.inputs === 'desktop'
|
|
1681
1657
|
|
|
1682
1658
|
let theme: MantineThemeOverride
|
|
1683
1659
|
if (isDefaultDerive && isDefaultRadius && isDefaultDensity) {
|
|
@@ -1699,7 +1675,6 @@ export function createBasaltTheme(
|
|
|
1699
1675
|
if (hasFontsConfig(fontsConfig)) {
|
|
1700
1676
|
theme = mergeThemeOverrides(theme, { other: { basaltFonts: fontsConfig } })
|
|
1701
1677
|
}
|
|
1702
|
-
if (desktopInputs) theme = mergeThemeOverrides(theme, DESKTOP_INPUTS_THEME)
|
|
1703
1678
|
if (!overrides) return theme
|
|
1704
1679
|
// `theme.breakpoints` is derived from `SIZE_CLASSES` — a JS caller's override is dropped.
|
|
1705
1680
|
return { ...mergeThemeOverrides(theme, overrides), breakpoints: SIZE_CLASS_BREAKPOINTS }
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The sun/moon glyph: both icons stacked in one grid cell, the inactive one faded, shrunk and
|
|
3
|
+
* rotated away. A CSS transition, not `motion` (V2-SPEC § 5); reduced motion swaps instantly.
|
|
4
|
+
*/
|
|
5
|
+
.glyph {
|
|
6
|
+
display: inline-grid;
|
|
7
|
+
place-items: center;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.sun,
|
|
11
|
+
.moon {
|
|
12
|
+
grid-area: 1 / 1;
|
|
13
|
+
display: inline-flex;
|
|
14
|
+
transition:
|
|
15
|
+
opacity 150ms ease,
|
|
16
|
+
transform 250ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.glyph[data-dark='true'] .sun,
|
|
20
|
+
.glyph[data-dark='false'] .moon {
|
|
21
|
+
opacity: 0;
|
|
22
|
+
transform: scale(0.6) rotate(30deg);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (prefers-reduced-motion: reduce) {
|
|
26
|
+
.sun,
|
|
27
|
+
.moon {
|
|
28
|
+
transition: none;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed CSS-module declaration (the S4 CSS-modules path). Named string props — not an index
|
|
3
|
+
* signature — so dot access stays verbatim under the package's strict flags.
|
|
4
|
+
*/
|
|
5
|
+
declare const classes: {
|
|
6
|
+
readonly glyph: string
|
|
7
|
+
readonly sun: string
|
|
8
|
+
readonly moon: string
|
|
9
|
+
}
|
|
10
|
+
export default classes
|
|
@@ -8,23 +8,20 @@
|
|
|
8
8
|
*
|
|
9
9
|
* The glyph is a single animated sun/moon (never a third "computer" icon) reflecting the
|
|
10
10
|
* *resolved* appearance (`useComputedColorScheme`) — no extra chrome for system mode; the tooltip
|
|
11
|
-
* ("System (dark)") and the popover's selected option carry that state instead. Animated
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* ("System (dark)") and the popover's selected option carry that state instead. Animated by a CSS
|
|
12
|
+
* transition (`theme-toggle.module.css`), which drops to an instant swap under
|
|
13
|
+
* `prefers-reduced-motion: reduce`.
|
|
14
14
|
*/
|
|
15
15
|
import {
|
|
16
16
|
ActionIcon,
|
|
17
|
-
Center,
|
|
18
17
|
Popover,
|
|
19
18
|
SegmentedControl,
|
|
20
19
|
useComputedColorScheme,
|
|
21
20
|
useMantineColorScheme,
|
|
22
21
|
} from '@mantine/core'
|
|
23
|
-
import { useReducedMotion } from '@mantine/hooks'
|
|
24
|
-
import { AnimatePresence, motion } from 'motion/react'
|
|
25
22
|
import { useRef, useState } from 'react'
|
|
26
|
-
import { MOTION_SPRING } from '../common/motion'
|
|
27
23
|
import type { BasaltProps } from '../common/props'
|
|
24
|
+
import classes from './theme-toggle.module.css'
|
|
28
25
|
|
|
29
26
|
type Scheme = 'light' | 'dark' | 'auto'
|
|
30
27
|
|
|
@@ -71,41 +68,17 @@ function MoonGlyph() {
|
|
|
71
68
|
)
|
|
72
69
|
}
|
|
73
70
|
|
|
74
|
-
/** The
|
|
75
|
-
function SchemeGlyph({ dark
|
|
76
|
-
if (reduceMotion) {
|
|
77
|
-
return (
|
|
78
|
-
<Center component="span" inline>
|
|
79
|
-
{dark ? <MoonGlyph /> : <SunGlyph />}
|
|
80
|
-
</Center>
|
|
81
|
-
)
|
|
82
|
-
}
|
|
71
|
+
/** The sun/moon glyph — both mounted, crossfaded and rotated by CSS on scheme change. */
|
|
72
|
+
function SchemeGlyph({ dark }: { dark: boolean }) {
|
|
83
73
|
return (
|
|
84
|
-
<
|
|
85
|
-
{
|
|
86
|
-
<
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
transition={MOTION_SPRING}
|
|
93
|
-
>
|
|
94
|
-
<MoonGlyph />
|
|
95
|
-
</motion.span>
|
|
96
|
-
) : (
|
|
97
|
-
<motion.span
|
|
98
|
-
key="sun"
|
|
99
|
-
style={{ display: 'inline-flex' }} // theme-allow inline-display — a framer-motion glyph wrapper, not a Mantine layout node
|
|
100
|
-
initial={{ opacity: 0, scale: 0.6, rotate: -30 }}
|
|
101
|
-
animate={{ opacity: 1, scale: 1, rotate: 0 }}
|
|
102
|
-
exit={{ opacity: 0, scale: 0.6, rotate: 30 }}
|
|
103
|
-
transition={MOTION_SPRING}
|
|
104
|
-
>
|
|
105
|
-
<SunGlyph />
|
|
106
|
-
</motion.span>
|
|
107
|
-
)}
|
|
108
|
-
</AnimatePresence>
|
|
74
|
+
<span className={classes.glyph} data-dark={dark}>
|
|
75
|
+
<span className={classes.sun}>
|
|
76
|
+
<SunGlyph />
|
|
77
|
+
</span>
|
|
78
|
+
<span className={classes.moon}>
|
|
79
|
+
<MoonGlyph />
|
|
80
|
+
</span>
|
|
81
|
+
</span>
|
|
109
82
|
)
|
|
110
83
|
}
|
|
111
84
|
|
|
@@ -129,7 +102,6 @@ export function ThemeToggle({
|
|
|
129
102
|
}: ThemeToggleProps = {}) {
|
|
130
103
|
const { colorScheme, setColorScheme } = useMantineColorScheme()
|
|
131
104
|
const resolved = useComputedColorScheme('dark')
|
|
132
|
-
const reduceMotion = useReducedMotion()
|
|
133
105
|
const [opened, setOpened] = useState(false)
|
|
134
106
|
const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined)
|
|
135
107
|
|
|
@@ -166,7 +138,7 @@ export function ThemeToggle({
|
|
|
166
138
|
onFocus={scheduleOpen}
|
|
167
139
|
onBlur={scheduleClose}
|
|
168
140
|
>
|
|
169
|
-
<SchemeGlyph dark={dark}
|
|
141
|
+
<SchemeGlyph dark={dark} />
|
|
170
142
|
</ActionIcon>
|
|
171
143
|
</Popover.Target>
|
|
172
144
|
<Popover.Dropdown
|
|
@@ -61,7 +61,7 @@ import {
|
|
|
61
61
|
} from '@mantine/core'
|
|
62
62
|
import { useEffect, useState } from 'react'
|
|
63
63
|
import type { ReactNode } from 'react'
|
|
64
|
-
import { buildDensityCss, buildPaletteCss, buildRadiusCss } from '../tokens'
|
|
64
|
+
import { buildDensityCss, buildPaletteCss, buildRadiusCss } from '../tokens/core'
|
|
65
65
|
import type { DeriveConfig } from '../tokens/derive'
|
|
66
66
|
import { buildPaletteData, deriveRadius, deriveSpacing } from '../tokens/palette'
|
|
67
67
|
import {
|
|
@@ -145,9 +145,11 @@ export function DeriveControls({ resetIcon }: DeriveControlsProps) {
|
|
|
145
145
|
// persisted/derived config once it matches a full hex; an invalid in-progress value keeps the
|
|
146
146
|
// last valid accent applied.
|
|
147
147
|
const [accentDraft, setAccentDraft] = useState(state.accent)
|
|
148
|
-
|
|
148
|
+
const [draftSource, setDraftSource] = useState(state.accent)
|
|
149
|
+
if (draftSource !== state.accent) {
|
|
150
|
+
setDraftSource(state.accent)
|
|
149
151
|
setAccentDraft(state.accent)
|
|
150
|
-
}
|
|
152
|
+
}
|
|
151
153
|
|
|
152
154
|
const handleAccentChange = (value: string) => {
|
|
153
155
|
setAccentDraft(value)
|
|
@@ -14,7 +14,8 @@
|
|
|
14
14
|
* whole dev-tool UI (Slider/ColorInput/SegmentedControl) along with the six lines of state it
|
|
15
15
|
* actually needs. This module has zero `@mantine/*` and zero JSX for exactly that reason.
|
|
16
16
|
*/
|
|
17
|
-
import { createPersistedState
|
|
17
|
+
import { createPersistedState } from '../state'
|
|
18
|
+
import { readPersistedValue } from '../state/persisted'
|
|
18
19
|
import { DEFAULT_DERIVE_CONFIG, resolveDeriveConfig } from '../tokens/derive'
|
|
19
20
|
import type { DeriveConfig } from '../tokens/derive'
|
|
20
21
|
|