basalt-ui 1.40.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +50 -45
- package/CHANGELOG.md +543 -513
- package/MIGRATING.md +969 -37
- package/README.md +172 -367
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +30 -0
- package/agent/templates/DESIGN.md.tpl +2 -2
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/check.yml +1 -1
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +468 -847
- package/configs/oxlint-plugin.test.ts +662 -710
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/foreign.d.ts +3 -2
- package/dist/agent/foreign.d.ts.map +1 -1
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -26
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +79 -8
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +68 -135
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +89 -76
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -27
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -6
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/copy-action.d.ts +1 -1
- package/dist/content/glyphs.d.ts +1 -1
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/foreign.ts +3 -2
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +120 -68
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +161 -276
- package/src/cli/init.ts +60 -37
- package/src/cli/sync.ts +13 -45
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/copy-action.tsx +1 -1
- package/src/content/glyphs.tsx +1 -1
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +37 -192
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/CLAUDE-block.md.tpl +0 -40
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* toArticleActions — projects an article list into Mantine Spotlight actions
|
|
3
|
-
* (docs/CONTENT-SPEC.md). A pure in-memory PROJECTOR into the already-shipped Spotlight surface —
|
|
4
|
-
* the same tier as `toRouteActions` (`basalt-ui/commands`). It does not tokenize, rank, index, or
|
|
5
|
-
* persist; an app that outgrows substring matching brings its own index.
|
|
6
|
-
*
|
|
7
|
-
* `SpotlightActionData` is imported TYPE-ONLY — it erases at build, so `./content` stays a types-
|
|
8
|
-
* only optional peer of `@mantine/spotlight` and adds no runtime edge. The consumer merges the
|
|
9
|
-
* result into its own `<Spotlight>`/`toSpotlightActions()` action array.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* const articleActions = toArticleActions(ARTICLES, {
|
|
13
|
-
* onNavigate: (href) => router.navigate({ to: href as never }),
|
|
14
|
-
* href: (article) => (article.slug === 'reading-dashboards' ? '/content' : '#'),
|
|
15
|
-
* group: 'Guides',
|
|
16
|
-
* })
|
|
17
|
-
*/
|
|
18
|
-
import type { SpotlightActionData } from '@mantine/spotlight'
|
|
19
|
-
import type { ReactNode } from 'react'
|
|
20
|
-
import type { Article } from './article-model'
|
|
21
|
-
|
|
22
|
-
export type ToArticleActionsOptions = {
|
|
23
|
-
/** Navigate to an article's href — e.g. `(href) => router.navigate({ to: href })`. */
|
|
24
|
-
onNavigate: (href: string) => void
|
|
25
|
-
/** Consumer owns routing — maps an article to its destination href. */
|
|
26
|
-
href: (article: Article) => string
|
|
27
|
-
/** Prefix for generated action ids so they never collide with route/command ids. Default 'article:'. */
|
|
28
|
-
idPrefix?: string
|
|
29
|
-
/** Spotlight group for every produced action (e.g. 'Guides'). Omit for an ungrouped, flat list. */
|
|
30
|
-
group?: string
|
|
31
|
-
/** Node rendered on the right of every action — e.g. a kind badge (`<Badge>Guide</Badge>`). */
|
|
32
|
-
rightSection?: ReactNode
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Project an article list into Mantine Spotlight actions. `keywords` joins title, description,
|
|
37
|
-
* category, tags, and slug — this is why tags/category live on the model, they make an article
|
|
38
|
-
* findable by topic even when the title itself doesn't mention it.
|
|
39
|
-
*/
|
|
40
|
-
export function toArticleActions(
|
|
41
|
-
articles: readonly Article[],
|
|
42
|
-
options: ToArticleActionsOptions,
|
|
43
|
-
): SpotlightActionData[] {
|
|
44
|
-
const { onNavigate, href, idPrefix = 'article:', group, rightSection } = options
|
|
45
|
-
const actions: SpotlightActionData[] = []
|
|
46
|
-
|
|
47
|
-
for (const article of articles) {
|
|
48
|
-
const target = href(article)
|
|
49
|
-
const keywords = [
|
|
50
|
-
article.title,
|
|
51
|
-
article.description,
|
|
52
|
-
article.category,
|
|
53
|
-
...(article.tags ?? []),
|
|
54
|
-
article.slug,
|
|
55
|
-
]
|
|
56
|
-
.filter((part): part is string => part !== undefined)
|
|
57
|
-
.join(' ')
|
|
58
|
-
|
|
59
|
-
const action: SpotlightActionData = {
|
|
60
|
-
id: `${idPrefix}${target}`,
|
|
61
|
-
label: article.title,
|
|
62
|
-
keywords,
|
|
63
|
-
onClick: () => onNavigate(target),
|
|
64
|
-
}
|
|
65
|
-
if (article.description !== undefined) action.description = article.description
|
|
66
|
-
if (group !== undefined) action.group = group
|
|
67
|
-
if (rightSection !== undefined) action.rightSection = rightSection
|
|
68
|
-
actions.push(action)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return actions
|
|
72
|
-
}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ArticleCard — the docs-landing overview building block (docs/CONTENT-SPEC.md §3/§7): panel bg +
|
|
3
|
-
* shadow-card + card-radius (inherited from the shipped `Card` theme, same as StatCard/
|
|
4
|
-
* SettingsSection), a clickable whole-card affordance when `href`/`onClick` is given.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
.card {
|
|
8
|
-
display: flex;
|
|
9
|
-
flex-direction: column;
|
|
10
|
-
gap: var(--vx-space-stack-sm);
|
|
11
|
-
text-decoration: none;
|
|
12
|
-
color: inherit;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/* The `renderLink` router bridge renders a consumer anchor around the card — neutralize the
|
|
16
|
-
* browser anchor defaults it brings, and keep the grid cell's full height flowing through. */
|
|
17
|
-
.linkWrap {
|
|
18
|
-
display: block;
|
|
19
|
-
height: 100%;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
.linkWrap a {
|
|
23
|
-
display: block;
|
|
24
|
-
height: 100%;
|
|
25
|
-
text-decoration: none;
|
|
26
|
-
color: inherit;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.clickable {
|
|
30
|
-
cursor: pointer;
|
|
31
|
-
transition: background-color 120ms ease;
|
|
32
|
-
/* Native-`<button>` reset — ArticleCard's `onClick`-only variant renders `Card component="button"`
|
|
33
|
-
* for real keyboard/AT semantics. The browser's UA-origin button chrome (border, font, text-align)
|
|
34
|
-
* always loses to Card's own authored background/shadow/radius, but these three properties are
|
|
35
|
-
* NOT set by Card itself, so the button's UA defaults would otherwise leak through. */
|
|
36
|
-
width: 100%;
|
|
37
|
-
border: none;
|
|
38
|
-
font: inherit;
|
|
39
|
-
text-align: inherit;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
.clickable:hover,
|
|
43
|
-
.clickable:focus-visible {
|
|
44
|
-
background-color: var(--vx-surface-panel-hover);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.clickable:hover .title,
|
|
48
|
-
.clickable:focus-visible .title {
|
|
49
|
-
color: var(--vx-accent);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.clickable:focus-visible {
|
|
53
|
-
/* Focus-ring width/offset — paired with (and sized off) the outline's own 2px stroke, not a
|
|
54
|
-
* spacing gap; out of scope like a border-shorthand width. */
|
|
55
|
-
outline: 2px solid var(--vx-accent);
|
|
56
|
-
outline-offset: 2px;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
.icon {
|
|
60
|
-
display: flex;
|
|
61
|
-
color: var(--vx-muted);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.title {
|
|
65
|
-
font-family: var(--basalt-font-head);
|
|
66
|
-
font-stretch: 88%;
|
|
67
|
-
font-weight: 550;
|
|
68
|
-
font-size: var(--vx-text-md);
|
|
69
|
-
color: var(--vx-ink);
|
|
70
|
-
transition: color 120ms ease;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
.description {
|
|
74
|
-
font-size: var(--vx-text-sm);
|
|
75
|
-
color: var(--vx-ink2);
|
|
76
|
-
display: -webkit-box;
|
|
77
|
-
-webkit-line-clamp: 2;
|
|
78
|
-
-webkit-box-orient: vertical;
|
|
79
|
-
overflow: hidden;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/* Quiet — a data label, not a status. Muted text on a faint ink tint, same recipe as the code
|
|
83
|
-
* block/callout/prose surfaces (`color-mix(in srgb, var(--vx-ink) 6%, transparent)`); no accent,
|
|
84
|
-
* no status color. */
|
|
85
|
-
.tags {
|
|
86
|
-
display: flex;
|
|
87
|
-
flex-wrap: wrap;
|
|
88
|
-
gap: var(--vx-space-article-card-tags-gap);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
.tag {
|
|
92
|
-
padding: var(--vx-space-article-card-tag-inset-y) var(--vx-space-article-card-tag-inset-x);
|
|
93
|
-
border-radius: var(--vx-radius-fine);
|
|
94
|
-
background-color: color-mix(in srgb, var(--vx-ink) 6%, transparent);
|
|
95
|
-
color: var(--vx-muted);
|
|
96
|
-
font-size: var(--vx-text-micro);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/* Pinned to the card's floor, not floated up behind a short description: the grid stretches every
|
|
100
|
-
* card in a row to one height, so a content-following meta line lands at a different y in each
|
|
101
|
-
* card and the row reads ragged. `margin-top: auto` in the card's flex column gives the row one
|
|
102
|
-
* meta baseline regardless of how many lines each description clamps to. */
|
|
103
|
-
.meta {
|
|
104
|
-
margin-top: auto;
|
|
105
|
-
padding-top: var(--vx-space-article-card-meta-gap-top);
|
|
106
|
-
font-family: var(--basalt-font-mono);
|
|
107
|
-
font-size: var(--vx-text-micro);
|
|
108
|
-
letter-spacing: 0.06em;
|
|
109
|
-
text-transform: uppercase;
|
|
110
|
-
color: var(--vx-faint);
|
|
111
|
-
}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ArticleCard / ArticleGrid — the docs-landing overview building blocks (docs/CONTENT-SPEC.md
|
|
3
|
-
* §3/§7): an icon/title/description/meta card over the shipped `Card` chrome, and the responsive
|
|
4
|
-
* grid that lays a set of them out.
|
|
5
|
-
*
|
|
6
|
-
* `ArticleCard` is clickable three ways — pick whichever fits: `href` alone renders the `Card`
|
|
7
|
-
* itself as an anchor; `href` + `renderLink` hands the card to a router bridge (e.g. TanStack
|
|
8
|
-
* `Link`); `onClick` alone renders a keyboard-operable button-role card. Omit all three for a
|
|
9
|
-
* static, non-interactive card.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* import { ArticleCard, ArticleGrid } from 'basalt-ui/content'
|
|
13
|
-
* import { Link } from '@tanstack/react-router'
|
|
14
|
-
*
|
|
15
|
-
* <ArticleGrid>
|
|
16
|
-
* <ArticleCard
|
|
17
|
-
* title="Reading dashboards"
|
|
18
|
-
* description="Why most internal dashboards fail the five-second glance test."
|
|
19
|
-
* date="2026-07-16"
|
|
20
|
-
* readingTime={6}
|
|
21
|
-
* category="guide"
|
|
22
|
-
* tags={['dashboards', 'ux']}
|
|
23
|
-
* href="/content"
|
|
24
|
-
* renderLink={(target, node) => <Link to={target.href}>{node}</Link>}
|
|
25
|
-
* />
|
|
26
|
-
* </ArticleGrid>
|
|
27
|
-
*/
|
|
28
|
-
import type { CSSProperties, ReactNode } from 'react'
|
|
29
|
-
import { Card, SimpleGrid } from '@mantine/core'
|
|
30
|
-
import classes from './article-card.module.css'
|
|
31
|
-
import { formatArticleDate } from './article-model'
|
|
32
|
-
import type { ArticleNavTarget } from './article-layout'
|
|
33
|
-
|
|
34
|
-
export type ArticleCardProps = {
|
|
35
|
-
readonly title: string
|
|
36
|
-
readonly description?: string
|
|
37
|
-
readonly icon?: ReactNode
|
|
38
|
-
/** ISO 8601 — rendered via `formatArticleDate`. */
|
|
39
|
-
readonly date?: string
|
|
40
|
-
readonly category?: string
|
|
41
|
-
readonly tags?: readonly string[]
|
|
42
|
-
/** Minutes; rendered as `"N min read"`. */
|
|
43
|
-
readonly readingTime?: number
|
|
44
|
-
/** Locale passed to `formatArticleDate`. Default `'en-US'` — see its JSDoc for why this is
|
|
45
|
-
* pinned rather than defaulting to the runtime locale. */
|
|
46
|
-
readonly locale?: string
|
|
47
|
-
readonly href?: string
|
|
48
|
-
/** Router bridge — when given alongside `href`, the card is handed to it instead of rendering a
|
|
49
|
-
* plain anchor itself. */
|
|
50
|
-
readonly renderLink?: (target: ArticleNavTarget, node: ReactNode) => ReactNode
|
|
51
|
-
readonly onClick?: () => void
|
|
52
|
-
readonly className?: string
|
|
53
|
-
readonly style?: CSSProperties
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const CARD_STYLE: CSSProperties = {
|
|
57
|
-
padding: 'var(--mantine-spacing-xs) var(--mantine-spacing-sm)',
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function ArticleCard({
|
|
61
|
-
title,
|
|
62
|
-
description,
|
|
63
|
-
icon,
|
|
64
|
-
date,
|
|
65
|
-
category,
|
|
66
|
-
tags,
|
|
67
|
-
readingTime,
|
|
68
|
-
locale = 'en-US',
|
|
69
|
-
href,
|
|
70
|
-
renderLink,
|
|
71
|
-
onClick,
|
|
72
|
-
className,
|
|
73
|
-
style,
|
|
74
|
-
}: ArticleCardProps) {
|
|
75
|
-
const cardClass = [
|
|
76
|
-
classes.card,
|
|
77
|
-
(href !== undefined || onClick !== undefined) && classes.clickable,
|
|
78
|
-
className,
|
|
79
|
-
]
|
|
80
|
-
.filter(Boolean)
|
|
81
|
-
.join(' ')
|
|
82
|
-
const mergedStyle: CSSProperties = { ...CARD_STYLE, ...style }
|
|
83
|
-
|
|
84
|
-
// Derived, not passed in — the card owns the meta line's shape so callers hand it structured
|
|
85
|
-
// fields instead of a preformatted string.
|
|
86
|
-
const meta = [
|
|
87
|
-
date !== undefined ? formatArticleDate(date, locale) : undefined,
|
|
88
|
-
readingTime !== undefined ? `${readingTime} min read` : undefined,
|
|
89
|
-
category,
|
|
90
|
-
]
|
|
91
|
-
.filter((part) => part !== undefined)
|
|
92
|
-
.join(' · ')
|
|
93
|
-
|
|
94
|
-
const body = (
|
|
95
|
-
<>
|
|
96
|
-
{icon !== undefined && <span className={classes.icon}>{icon}</span>}
|
|
97
|
-
<span className={classes.title}>{title}</span>
|
|
98
|
-
{description !== undefined && <span className={classes.description}>{description}</span>}
|
|
99
|
-
{tags !== undefined && tags.length > 0 && (
|
|
100
|
-
<span className={classes.tags}>
|
|
101
|
-
{tags.map((tag) => (
|
|
102
|
-
<span key={tag} className={classes.tag}>
|
|
103
|
-
{tag}
|
|
104
|
-
</span>
|
|
105
|
-
))}
|
|
106
|
-
</span>
|
|
107
|
-
)}
|
|
108
|
-
{meta !== '' && <span className={classes.meta}>{meta}</span>}
|
|
109
|
-
</>
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
if (href !== undefined && renderLink !== undefined) {
|
|
113
|
-
const target: ArticleNavTarget = {
|
|
114
|
-
label: title,
|
|
115
|
-
href,
|
|
116
|
-
...(description !== undefined && { description }),
|
|
117
|
-
}
|
|
118
|
-
// The router bridge renders its own anchor around the card — the wrapper class neutralizes
|
|
119
|
-
// browser anchor defaults (underline, link color) the library can't reach from inside.
|
|
120
|
-
return (
|
|
121
|
-
<span className={classes.linkWrap}>
|
|
122
|
-
{renderLink(
|
|
123
|
-
target,
|
|
124
|
-
<Card className={cardClass} style={mergedStyle}>
|
|
125
|
-
{body}
|
|
126
|
-
</Card>,
|
|
127
|
-
)}
|
|
128
|
-
</span>
|
|
129
|
-
)
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (href !== undefined) {
|
|
133
|
-
return (
|
|
134
|
-
<Card component="a" href={href} className={cardClass} style={mergedStyle}>
|
|
135
|
-
{body}
|
|
136
|
-
</Card>
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (onClick !== undefined) {
|
|
141
|
-
return (
|
|
142
|
-
<Card
|
|
143
|
-
component="button"
|
|
144
|
-
type="button"
|
|
145
|
-
onClick={onClick}
|
|
146
|
-
className={cardClass}
|
|
147
|
-
style={mergedStyle}
|
|
148
|
-
>
|
|
149
|
-
{body}
|
|
150
|
-
</Card>
|
|
151
|
-
)
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return (
|
|
155
|
-
<Card className={cardClass} style={mergedStyle}>
|
|
156
|
-
{body}
|
|
157
|
-
</Card>
|
|
158
|
-
)
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export type ArticleGridProps = {
|
|
162
|
-
readonly children: ReactNode
|
|
163
|
-
/** Columns at the `lg` breakpoint. Default `3`. */
|
|
164
|
-
readonly cols?: number
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export function ArticleGrid({ children, cols = 3 }: ArticleGridProps) {
|
|
168
|
-
return (
|
|
169
|
-
// theme-allow raw-breakpoint — `cols` is documented per viewport `lg`; container keys would re-flow every consumer's grid, so that move ships opt-in
|
|
170
|
-
<SimpleGrid cols={{ base: 1, sm: 2, lg: cols }} spacing="sm">
|
|
171
|
-
{children}
|
|
172
|
-
</SimpleGrid>
|
|
173
|
-
)
|
|
174
|
-
}
|
package/src/content/mdx.tsx
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* mdxComponents / createMdxComponents — the element map for MDX runtimes (docs/CONTENT-SPEC.md
|
|
3
|
-
* §2 decision 7 / §3). Wires an MDX pipeline's compiled output (`@content-collections/mdx/react`'s
|
|
4
|
-
* `MDXContent components={...}`, or any `useMDXComponents`) onto the SAME basalt primitives
|
|
5
|
-
* `Markdown` uses: slugged + anchored headings (`./heading-components`, shared — not duplicated),
|
|
6
|
-
* `CodeBlock`/`MermaidDiagram` fenced code, and GFM-alert-aware `Callout` blockquotes
|
|
7
|
-
* (`./callout-alert`, also shared).
|
|
8
|
-
*
|
|
9
|
-
* Unlike `Markdown`, links/images are NOT hardened here — MDX is authored content compiled at
|
|
10
|
-
* build time, not untrusted streamed text, so `a` only gets the external-link `target`/`rel`
|
|
11
|
-
* treatment. `img`, `table`, and every other tag pass through untouched (`Prose`'s CSS already
|
|
12
|
-
* styles them).
|
|
13
|
-
*
|
|
14
|
-
* MDX compiles a fenced code block to `<pre><code className="language-x">…</code></pre>` — there
|
|
15
|
-
* is no hast `node` prop available here the way react-markdown provides one (`./markdown-hast`),
|
|
16
|
-
* so extraction reads the compiled `code` element's `className`/`children` directly instead. A
|
|
17
|
-
* consequence: unlike `Markdown`, an MDX fence's ` ```ts title="…" ` meta string is NOT recovered
|
|
18
|
-
* (MDX's own compiler drops it without an extra rehype plugin) — only the language is.
|
|
19
|
-
*
|
|
20
|
-
* MDX pages must be wrapped in `<Prose>` by the consumer, or via `ArticleLayout` (the docs-page
|
|
21
|
-
* frame) — this module ships element overrides only, not a layout.
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* import { mdxComponents } from 'basalt-ui/content'
|
|
25
|
-
* import { MDXContent } from '@content-collections/mdx/react'
|
|
26
|
-
*
|
|
27
|
-
* <Prose><MDXContent code={article.mdx} components={mdxComponents} /></Prose>
|
|
28
|
-
*/
|
|
29
|
-
import type { JSX, ReactNode } from 'react'
|
|
30
|
-
import { isValidElement } from 'react'
|
|
31
|
-
import type { Components, ExtraProps } from 'react-markdown'
|
|
32
|
-
import { ALERT_CALLOUT_KIND, ALERT_TITLE, detectAlert, stripAlertMarker } from './callout-alert'
|
|
33
|
-
import { Callout } from './callout'
|
|
34
|
-
import { CodeBlock } from './code-block'
|
|
35
|
-
import { createHeadingComponents } from './heading-components'
|
|
36
|
-
import { MermaidDiagram } from './mermaid'
|
|
37
|
-
import { SlugTracker } from './slug'
|
|
38
|
-
|
|
39
|
-
type MdxPreProps = JSX.IntrinsicElements['pre'] & ExtraProps
|
|
40
|
-
type MdxBlockquoteProps = JSX.IntrinsicElements['blockquote'] & ExtraProps
|
|
41
|
-
type MdxLinkProps = JSX.IntrinsicElements['a'] & ExtraProps
|
|
42
|
-
type MdxCodeProps = { className?: string; children?: ReactNode }
|
|
43
|
-
|
|
44
|
-
function nodeToText(node: ReactNode): string {
|
|
45
|
-
if (typeof node === 'string') return node
|
|
46
|
-
if (typeof node === 'number') return String(node)
|
|
47
|
-
if (Array.isArray(node)) return node.map(nodeToText).join('')
|
|
48
|
-
if (isValidElement(node)) return nodeToText((node.props as { children?: ReactNode }).children)
|
|
49
|
-
return ''
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
type MdxFence = { readonly code: string; readonly language?: string }
|
|
53
|
-
|
|
54
|
-
function extractMdxFence(preChildren: ReactNode): MdxFence | undefined {
|
|
55
|
-
const codeElement = Array.isArray(preChildren) ? preChildren[0] : preChildren
|
|
56
|
-
if (!isValidElement(codeElement)) return undefined
|
|
57
|
-
|
|
58
|
-
const props = codeElement.props as MdxCodeProps
|
|
59
|
-
const language = props.className
|
|
60
|
-
?.split(/\s+/)
|
|
61
|
-
.find((name) => name.startsWith('language-'))
|
|
62
|
-
?.slice('language-'.length)
|
|
63
|
-
|
|
64
|
-
return { code: nodeToText(props.children), ...(language !== undefined && { language }) }
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function MdxPre({ children }: MdxPreProps) {
|
|
68
|
-
const fence = extractMdxFence(children)
|
|
69
|
-
if (!fence) return <pre>{children}</pre>
|
|
70
|
-
if (fence.language === 'mermaid') return <MermaidDiagram code={fence.code} />
|
|
71
|
-
return (
|
|
72
|
-
<CodeBlock
|
|
73
|
-
code={fence.code}
|
|
74
|
-
{...(fence.language !== undefined && { language: fence.language })}
|
|
75
|
-
/>
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function MdxBlockquote({ children }: MdxBlockquoteProps) {
|
|
80
|
-
const alert = detectAlert(children)
|
|
81
|
-
if (!alert) return <blockquote>{children}</blockquote>
|
|
82
|
-
return (
|
|
83
|
-
<Callout kind={ALERT_CALLOUT_KIND[alert.kind]} title={ALERT_TITLE[alert.kind]}>
|
|
84
|
-
{stripAlertMarker(children, alert.marker)}
|
|
85
|
-
</Callout>
|
|
86
|
-
)
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
function MdxLink({ href, children }: MdxLinkProps) {
|
|
90
|
-
const external = href !== undefined && /^https?:\/\//.test(href)
|
|
91
|
-
return (
|
|
92
|
-
<a
|
|
93
|
-
{...(href !== undefined && { href })}
|
|
94
|
-
{...(external && { target: '_blank', rel: 'noreferrer noopener' })}
|
|
95
|
-
>
|
|
96
|
-
{children}
|
|
97
|
-
</a>
|
|
98
|
-
)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export type CreateMdxComponentsOptions = {
|
|
102
|
-
/** Reuse an existing tracker — e.g. to share heading ids with a `TableOfContents` collecting
|
|
103
|
-
* over the same rendered document. Omit for a fresh, page-scoped tracker. */
|
|
104
|
-
readonly slugTracker?: SlugTracker
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Builds the MDX element map (slugged/anchored headings, code/mermaid fences, alert-aware
|
|
108
|
-
* blockquotes, external-link treatment). Pass `slugTracker` to share ids across components
|
|
109
|
-
* rendering the same document; omit it to get a fresh tracker per call. */
|
|
110
|
-
export function createMdxComponents(options: CreateMdxComponentsOptions = {}): Components {
|
|
111
|
-
const tracker = options.slugTracker ?? new SlugTracker()
|
|
112
|
-
return {
|
|
113
|
-
...createHeadingComponents(tracker),
|
|
114
|
-
pre: MdxPre,
|
|
115
|
-
blockquote: MdxBlockquote,
|
|
116
|
-
a: MdxLink,
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* A ready-to-use element map for simple cases. Built ONCE at module scope with its own
|
|
122
|
-
* `SlugTracker` — every consumer of this constant shares that single tracker for the lifetime of
|
|
123
|
-
* the app, so a heading text repeated across two DIFFERENT MDX documents will get a `-1`-suffixed
|
|
124
|
-
* id on the second document, not a fresh `overview` on both. Reach for `createMdxComponents()`
|
|
125
|
-
* (called per document/render) instead when that matters — e.g. a multi-document docs site.
|
|
126
|
-
*/
|
|
127
|
-
export const mdxComponents: Components = createMdxComponents()
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `CompareFilter` — the period-comparison enum every dashboard grows
|
|
3
|
-
* (`docs/CONTROLS-SPEC.md` §3). A `SelectFilter` narrowed to the three values basalt names, so the
|
|
4
|
-
* label, the option order and the fallback are the same on every page instead of three per app.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* // compare: field.enum(['none', 'previous', 'year'], 'none')
|
|
8
|
-
* <CompareFilter field={analytics.field.compare} />
|
|
9
|
-
*/
|
|
10
|
-
import type { ReactNode } from 'react'
|
|
11
|
-
import type { BasaltProps } from '../common/props'
|
|
12
|
-
import { assertRequiredProps } from '../common/validate'
|
|
13
|
-
import type { EnumField, FieldHandle } from '../state'
|
|
14
|
-
import { EnumFilter } from './enum-filter'
|
|
15
|
-
import { SwapGlyph } from './glyphs'
|
|
16
|
-
|
|
17
|
-
/** The three comparison bases — declare the field as `field.enum(COMPARE_VALUES, 'none')`. */
|
|
18
|
-
export type CompareValue = 'none' | 'previous' | 'year'
|
|
19
|
-
|
|
20
|
-
/** The declared value order, so a consumer's `field.enum` and this control cannot disagree. */
|
|
21
|
-
export const COMPARE_VALUES: readonly CompareValue[] = ['none', 'previous', 'year']
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The three option labels basalt names — the other half of "the same on every page instead of three
|
|
25
|
-
* per app", which this control promised and did not deliver.
|
|
26
|
-
*
|
|
27
|
-
* `field.enum` labels an option with the raw VALUE until a consumer calls `store.labels()`, so a
|
|
28
|
-
* `CompareFilter` over an unlabelled field printed `none` / `previous` / `year` in its popover and,
|
|
29
|
-
* now that the pill reads the value (see `EnumFilter`'s doc), in the bar too. Every app then wrote
|
|
30
|
-
* the same three strings into its own `labels()` call, which is three chances to disagree about what
|
|
31
|
-
* `year` means.
|
|
32
|
-
*
|
|
33
|
-
* These are DEFAULTS, not overrides: a field whose label differs from its value has been labelled
|
|
34
|
-
* deliberately, and that label wins. Detecting it as `label !== value` is exactly the signal
|
|
35
|
-
* `optionsFor` leaves behind (`state/fields.ts` — `label: map?.[value] ?? value`), so nothing new
|
|
36
|
-
* has to be threaded through the store to ask the question.
|
|
37
|
-
*/
|
|
38
|
-
export const COMPARE_LABELS: Readonly<Record<CompareValue, string>> = {
|
|
39
|
-
none: 'No comparison',
|
|
40
|
-
previous: 'Previous period',
|
|
41
|
-
year: 'Same period last year',
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export type CompareFilterProps = BasaltProps & {
|
|
45
|
-
readonly field: FieldHandle<EnumField<CompareValue>>
|
|
46
|
-
/** @default 'Compare' */
|
|
47
|
-
readonly label?: string
|
|
48
|
-
/** Leading pill icon. Defaults to an arrows-swap glyph — like `RangeFilter`'s calendar, the mark
|
|
49
|
-
* is part of what makes the pill legible as a period comparison. */
|
|
50
|
-
readonly icon?: ReactNode
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export function CompareFilter(props: CompareFilterProps): ReactNode {
|
|
54
|
-
// F-ERR-1 — without this a missing `field` surfaces from inside `EnumFilter` as
|
|
55
|
-
// `undefined is not an object (evaluating 'field.use')`, caught by `BasaltErrorBoundary`.
|
|
56
|
-
assertRequiredProps('CompareFilter', props, ['field'], {
|
|
57
|
-
field: 'bind it to a store field (`store.field.<name>`), never a value/onChange pair.',
|
|
58
|
-
})
|
|
59
|
-
const { field, label = 'Compare', icon, className, style } = props
|
|
60
|
-
// Read through the handle's own options so a consumer's `labels()` and its option ORDER both
|
|
61
|
-
// survive; only an UNLABELLED row (label === value) takes basalt's default string.
|
|
62
|
-
const options = field.options.map((option) =>
|
|
63
|
-
option.label === option.value && isCompareValue(option.value)
|
|
64
|
-
? { value: option.value, label: COMPARE_LABELS[option.value] }
|
|
65
|
-
: option,
|
|
66
|
-
)
|
|
67
|
-
return (
|
|
68
|
-
<EnumFilter
|
|
69
|
-
field={field}
|
|
70
|
-
label={label}
|
|
71
|
-
icon={icon ?? <SwapGlyph />}
|
|
72
|
-
options={options}
|
|
73
|
-
{...(className !== undefined && { className })}
|
|
74
|
-
{...(style !== undefined && { style })}
|
|
75
|
-
/>
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function isCompareValue(value: string): value is CompareValue {
|
|
80
|
-
return (COMPARE_VALUES as readonly string[]).includes(value)
|
|
81
|
-
}
|