basalt-ui 1.41.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +46 -43
- package/CHANGELOG.md +542 -518
- package/MIGRATING.md +964 -37
- package/README.md +171 -366
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +16 -26
- package/agent/templates/DESIGN.md.tpl +1 -1
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +465 -844
- package/configs/oxlint-plugin.test.ts +661 -709
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +18 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +6 -0
- package/dist/cli/doctor-upgrade.d.ts +43 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +314 -0
- package/dist/cli/doctor.d.ts +14 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +58 -9
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +48 -172
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +39 -132
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -37
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -23
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +80 -173
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +26 -43
- package/src/cli/doctor-upgrade.ts +457 -0
- package/src/cli/doctor.ts +89 -72
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +100 -384
- package/src/cli/init.ts +60 -51
- package/src/cli/sync.ts +13 -68
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +36 -191
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
package/src/charts/series.ts
DELETED
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The series descriptor — single source of truth for color + line-style + label + accessor.
|
|
3
|
-
* Legend + tooltip rows are *derived* from it, never hand-authored in parallel. Mantine-free.
|
|
4
|
-
*
|
|
5
|
-
* Generalizes `MultiLineSeries<T>` (`kinds/MultiLine.tsx`) into the shared spine consumed by
|
|
6
|
-
* every kind. `LegendPlacement` also lives here so `ChartLegend` and the future `ChartFrame`
|
|
7
|
-
* share one definition.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
curveLinear,
|
|
12
|
-
curveMonotoneX,
|
|
13
|
-
curveStep,
|
|
14
|
-
curveStepAfter,
|
|
15
|
-
curveStepBefore,
|
|
16
|
-
} from '@visx/curve'
|
|
17
|
-
import type { LegendEntry } from './primitives/ChartLegend'
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Default stroke width for plotted line overlays in `DualPanel` / `MultiLine` / `ZonedLine` —
|
|
21
|
-
* thinner than the generic `VX.lineWidth` per the 2026-07 modern-zinc redesign
|
|
22
|
-
* (`docs/DESIGN-SPEC.md` §5, "tertiary/line overlay ... at 1.9px stroke"). `VX.lineWidth` itself
|
|
23
|
-
* stays the "one width everywhere" default for `Bars`' line overlays, legend line swatches, and
|
|
24
|
-
* `TooltipRow`'s generic fallback — this constant only overrides the three kinds it's imported by.
|
|
25
|
-
*/
|
|
26
|
-
export const LINE_OVERLAY_STROKE_WIDTH = 1.9
|
|
27
|
-
|
|
28
|
-
/** Governs BOTH the plotted mark and the legend swatch shape. */
|
|
29
|
-
export type SeriesMark = 'line' | 'bar' | 'area'
|
|
30
|
-
|
|
31
|
-
/** Only meaningful for `mark: 'line'`. */
|
|
32
|
-
export type SeriesDash = 'solid' | 'dashed'
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* The interpolation between two plotted points. Named rather than a raw d3 `CurveFactory` so the
|
|
36
|
-
* set is closed, serializable, and identical across every kind — a chart cannot pick a curve the
|
|
37
|
-
* legend swatch and the sibling chart next to it do not also understand.
|
|
38
|
-
*
|
|
39
|
-
* - `monotone` (default, today's behaviour everywhere) — smoothed, overshoot-free.
|
|
40
|
-
* - `linear` — straight segments. The honest choice when the points are samples, not a signal.
|
|
41
|
-
* - `step` / `stepAfter` / `stepBefore` — the value HOLDS between samples and changes at one x.
|
|
42
|
-
* Reach for these when the quantity is piecewise-constant (a price tier, a config value, a
|
|
43
|
-
* discrete state): a smoothed curve through them draws intermediate values that never existed.
|
|
44
|
-
* `stepAfter` holds the value forward from its own x, `stepBefore` holds it back from the next,
|
|
45
|
-
* `step` changes at the midpoint.
|
|
46
|
-
*/
|
|
47
|
-
export type SeriesCurve = 'monotone' | 'linear' | 'step' | 'stepAfter' | 'stepBefore'
|
|
48
|
-
|
|
49
|
-
/** d3's curve-factory shape, taken from a curve we already import rather than from
|
|
50
|
-
* `@visx/vendor/d3-shape` — that package is a transitive of `@visx/curve`, not one of the nine
|
|
51
|
-
* exact-pinned peers, so naming it in an import would add an undeclared dependency. */
|
|
52
|
-
type CurveFactory = typeof curveMonotoneX
|
|
53
|
-
|
|
54
|
-
const CURVES: Record<SeriesCurve, CurveFactory> = {
|
|
55
|
-
monotone: curveMonotoneX,
|
|
56
|
-
linear: curveLinear,
|
|
57
|
-
step: curveStep,
|
|
58
|
-
stepAfter: curveStepAfter,
|
|
59
|
-
stepBefore: curveStepBefore,
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* The d3 curve factory for a {@link SeriesCurve}. `undefined` resolves to `curveMonotoneX` — the
|
|
64
|
-
* value every kind hard-coded before this seam existed, so an omitted `curve` moves nothing.
|
|
65
|
-
* Exported for a hand-composed plot that draws its own `LinePath` from the same `series` array.
|
|
66
|
-
*/
|
|
67
|
-
export function curveFor(curve?: SeriesCurve): CurveFactory {
|
|
68
|
-
return curve === undefined ? curveMonotoneX : CURVES[curve]
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** Drives legend grouping/dividers. */
|
|
72
|
-
export type SeriesRole = 'series' | 'overlay' | 'reference'
|
|
73
|
-
|
|
74
|
-
/** Where the derived legend renders relative to the plot. */
|
|
75
|
-
export type LegendPlacement = 'top' | 'bottom' | 'left' | 'right'
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Consumer-facing legend config exposed by every kind's `legend` prop — the subset of
|
|
79
|
-
* `ChartFrame`'s legend object a consumer may set directly. Deliberately excludes
|
|
80
|
-
* `highlighted`/`onHighlight`, which the kind injects itself (its own hover-dim state).
|
|
81
|
-
* `legend={false}` on a kind disables the legend entirely (the sparkline escape).
|
|
82
|
-
*/
|
|
83
|
-
export type ChartLegendConfig = {
|
|
84
|
-
/** Default 'bottom'. */
|
|
85
|
-
placement?: LegendPlacement
|
|
86
|
-
/** Visually separate role: series | overlay | reference. */
|
|
87
|
-
groups?: boolean
|
|
88
|
-
/**
|
|
89
|
-
* @deprecated Removed in 1.32.0 — the legend fits by measured width and folds overflow into an
|
|
90
|
-
* `All N` disclosure on its own. An explicit value still wins this release (entry count).
|
|
91
|
-
*/
|
|
92
|
-
maxRows?: number
|
|
93
|
-
/** Clicking an entry hides that series. Default: on whenever there is more than one entry. */
|
|
94
|
-
toggle?: boolean
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/** Visual identity of a series — everything the legend + tooltip swatch need. No accessors, no `T`. */
|
|
98
|
-
export type SeriesStyle = {
|
|
99
|
-
key: string
|
|
100
|
-
label: string
|
|
101
|
-
/** A --vx-* ref (VX.series.*), never a raw hex. */
|
|
102
|
-
color: string
|
|
103
|
-
mark: SeriesMark
|
|
104
|
-
/** Default 'solid'. */
|
|
105
|
-
dash?: SeriesDash
|
|
106
|
-
/**
|
|
107
|
-
* Interpolation between points for the line/area shapes this series draws. Default `'monotone'`
|
|
108
|
-
* — today's behaviour, unchanged, everywhere. See {@link SeriesCurve} for when a step curve is
|
|
109
|
-
* the honest one. Silently no-ops on `mark: 'bar'`, which has nothing to interpolate.
|
|
110
|
-
*/
|
|
111
|
-
curve?: SeriesCurve
|
|
112
|
-
/** Default VX.lineWidth (one width, everywhere). */
|
|
113
|
-
strokeWidth?: number
|
|
114
|
-
/** bar/area: the swatch honors this so it cannot lie. */
|
|
115
|
-
fillOpacity?: number
|
|
116
|
-
/**
|
|
117
|
-
* A MARK property — dims the plotted stroke, e.g. a faint moving-average companion line. The
|
|
118
|
-
* legend swatch honors it too (parity with `fillOpacity`, which it already honors — a swatch
|
|
119
|
-
* that lies is the thing the derived-legend rule exists to prevent). The TOOLTIP ROW swatch and
|
|
120
|
-
* the CROSSHAIR DOT deliberately do NOT honor it: those are 12px value-readout chips where a
|
|
121
|
-
* sub-1 opacity reads as a rendering bug, not as data.
|
|
122
|
-
*
|
|
123
|
-
* Applies to STROKES only, so it silently no-ops on a `mark: 'bar'`/`'area'` series — a bar
|
|
124
|
-
* swatch has no stroke to dim. Dim those with `fillOpacity` instead. This bites the
|
|
125
|
-
* zone/reference-legend idiom in particular (`mark: 'bar'`, `getValue: () => null`), where
|
|
126
|
-
* reaching for `strokeOpacity` looks right and does nothing.
|
|
127
|
-
*/
|
|
128
|
-
strokeOpacity?: number
|
|
129
|
-
/** Which y-axis this series is measured against. Default 'left'. `'right'` is what makes a
|
|
130
|
-
* chart dual-axis — `CartesianChart` reads it for the crosshair dots and the tooltip. */
|
|
131
|
-
axis?: 'left' | 'right'
|
|
132
|
-
/** Default 'series'. */
|
|
133
|
-
role?: SeriesRole
|
|
134
|
-
/** Default true; false = companion folded under `parent`. */
|
|
135
|
-
legend?: boolean
|
|
136
|
-
/**
|
|
137
|
-
* Default true; false = drawn and legended, but NEVER listed as a tooltip row. The replacement
|
|
138
|
-
* for the per-kind `hideBarTooltipRows` escape the old layer had: it belongs to the series, not to the kind, so
|
|
139
|
-
* one series can opt out without the kind growing a prop for it.
|
|
140
|
-
*/
|
|
141
|
-
tooltip?: boolean
|
|
142
|
-
/** e.g. an MA line names its parent so hover-dimming keeps the pair. */
|
|
143
|
-
parent?: string
|
|
144
|
-
/** Short qualifier rendered after the label in muted text — e.g. a flat-at-zero series that is
|
|
145
|
-
* invisible in the plot. */
|
|
146
|
-
note?: string
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/** Full descriptor = visual identity + data accessors. Generic over the point type. */
|
|
150
|
-
export type ChartSeries<T> = SeriesStyle & {
|
|
151
|
-
/**
|
|
152
|
-
* null = an ABSENCE, never a zero: a real gap in the line/area (`defined`, not a straight
|
|
153
|
-
* interpolation across the hole) plus a skipped tooltip row and no crosshair dot. In a STACKED
|
|
154
|
-
* kind the absence is contagious — a band with no value leaves no cumulative total, so the whole
|
|
155
|
-
* stack gaps at that x (`StackedArea`'s JSDoc has the accounting).
|
|
156
|
-
*/
|
|
157
|
-
getValue: (d: T) => number | null
|
|
158
|
-
/** Per-series override of the shared tooltip/value formatter. Receives the hovered datum
|
|
159
|
-
* alongside the value so a row can read fields beyond the plotted number (e.g. `97.5 kg (92.5 ×
|
|
160
|
-
* 3)`). */
|
|
161
|
-
formatValue?: (v: number, d: T) => string
|
|
162
|
-
/** PR star / status dot. Return null for no marker at that point. `ring` defaults true (today's
|
|
163
|
-
* punched-out stroke, unchanged); `false` omits the stroke entirely. `fillOpacity` defaults 1. */
|
|
164
|
-
getMarker?: (d: T) => { color?: string; r?: number; fillOpacity?: number; ring?: boolean } | null
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** A single derived tooltip row, ready for `TooltipRow`. */
|
|
168
|
-
export type TooltipRowData = {
|
|
169
|
-
key: string
|
|
170
|
-
label: string
|
|
171
|
-
color: string
|
|
172
|
-
value: string
|
|
173
|
-
shape: 'line' | 'bar'
|
|
174
|
-
dashed: boolean
|
|
175
|
-
strokeWidth?: number
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
const shapeFor = (mark: SeriesMark): 'line' | 'bar' => (mark === 'line' ? 'line' : 'bar')
|
|
179
|
-
|
|
180
|
-
function legendEntryFor(s: SeriesStyle): LegendEntry {
|
|
181
|
-
return {
|
|
182
|
-
key: s.key,
|
|
183
|
-
label: s.label,
|
|
184
|
-
color: s.color,
|
|
185
|
-
shape: shapeFor(s.mark),
|
|
186
|
-
dashed: s.dash === 'dashed',
|
|
187
|
-
...(s.strokeWidth !== undefined && { strokeWidth: s.strokeWidth }),
|
|
188
|
-
...(s.fillOpacity !== undefined && { fillOpacity: s.fillOpacity }),
|
|
189
|
-
...(s.strokeOpacity !== undefined && { strokeOpacity: s.strokeOpacity }),
|
|
190
|
-
...(s.role !== undefined && { role: s.role }),
|
|
191
|
-
...(s.note !== undefined && { note: s.note }),
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* Derive the legend from a series-style array — the enforcement that the legend can never drift
|
|
197
|
-
* from what's plotted. Groups by `role` (series → overlay → reference) via `ChartLegend`'s own
|
|
198
|
-
* `groups` rendering.
|
|
199
|
-
*
|
|
200
|
-
* `legend === false`: dropped entirely, UNLESS `parent` names another series in the array — then
|
|
201
|
-
* it is folded into that parent's `LegendEntry.children` as a subordinate dashed sub-entry (e.g.
|
|
202
|
-
* an MA companion), rather than vanishing. A series with `legend !== false` always renders as a
|
|
203
|
-
* normal top-level entry.
|
|
204
|
-
*/
|
|
205
|
-
export function deriveLegend(series: readonly SeriesStyle[]): LegendEntry[] {
|
|
206
|
-
const entries: LegendEntry[] = []
|
|
207
|
-
const byKey = new Map<string, LegendEntry>()
|
|
208
|
-
|
|
209
|
-
for (const s of series) {
|
|
210
|
-
if (s.legend === false) continue
|
|
211
|
-
const entry = legendEntryFor(s)
|
|
212
|
-
entries.push(entry)
|
|
213
|
-
byKey.set(s.key, entry)
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
for (const s of series) {
|
|
217
|
-
if (s.legend !== false || s.parent === undefined) continue
|
|
218
|
-
const parent = byKey.get(s.parent)
|
|
219
|
-
if (parent === undefined) continue
|
|
220
|
-
parent.children ??= []
|
|
221
|
-
parent.children.push(legendEntryFor(s))
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
return entries
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Derive tooltip rows from a series descriptor array + the hovered datum. Skips rows where
|
|
229
|
-
* `getValue(datum) === null` or `tooltip === false`; honors per-series `formatValue` over the
|
|
230
|
-
* shared `fallbackFormat`.
|
|
231
|
-
* Kinds pass `series.toReversed()` for stacked charts so the tooltip stack matches the visual stack.
|
|
232
|
-
*/
|
|
233
|
-
export function deriveTooltipRows<T>(
|
|
234
|
-
series: readonly ChartSeries<T>[],
|
|
235
|
-
datum: T,
|
|
236
|
-
fallbackFormat: (v: number) => string,
|
|
237
|
-
): TooltipRowData[] {
|
|
238
|
-
const rows: TooltipRowData[] = []
|
|
239
|
-
for (const s of series) {
|
|
240
|
-
if (s.tooltip === false) continue
|
|
241
|
-
const value = s.getValue(datum)
|
|
242
|
-
if (value === null) continue
|
|
243
|
-
const format: (v: number, d: T) => string = s.formatValue ?? fallbackFormat
|
|
244
|
-
rows.push({
|
|
245
|
-
key: s.key,
|
|
246
|
-
label: s.label,
|
|
247
|
-
color: s.color,
|
|
248
|
-
value: format(value, datum),
|
|
249
|
-
shape: shapeFor(s.mark),
|
|
250
|
-
dashed: s.dash === 'dashed',
|
|
251
|
-
...(s.strokeWidth !== undefined && { strokeWidth: s.strokeWidth }),
|
|
252
|
-
})
|
|
253
|
-
}
|
|
254
|
-
return rows
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Coerces a `ChartSeries.getValue` result into what a plotted point stores as its y: `null`,
|
|
259
|
-
* `undefined` and `NaN` all collapse to `null`, which downstream `definedOn` reads as a
|
|
260
|
-
* documented gap rather than a value to plot. Shared by `MultiLine`'s `seriesPoints` and
|
|
261
|
-
* `ZonedLine`'s `linePoints` — both used to reimplement this coercion independently.
|
|
262
|
-
*/
|
|
263
|
-
export function toPlotPoint(v: number | null | undefined): number | null {
|
|
264
|
-
return v === null || v === undefined || Number.isNaN(v) ? null : v
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* A `defined` predicate for `LinePath`/`AreaClosed`/`Threshold`, bound to one y-scale. A null
|
|
269
|
-
* `__y` is a documented gap (`ChartSeries.getValue`), and a non-positive value on a log scale maps
|
|
270
|
-
* to `NaN` via the scale itself — without excluding both, d3's generators either draw an
|
|
271
|
-
* interpolated straight line across the hole or blank the entire path from that point on (SVG's
|
|
272
|
-
* `NaN` path-command handling). Shared by `MultiLine` and `ZonedLine`.
|
|
273
|
-
*/
|
|
274
|
-
export function definedOn(scale: (y: number) => number): (d: { __y: number | null }) => boolean {
|
|
275
|
-
return (d) => d.__y !== null && Number.isFinite(scale(d.__y))
|
|
276
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { scaleLinear } from '@visx/scale'
|
|
2
|
-
import { useMemo } from 'react'
|
|
3
|
-
import type { BasaltProps } from '../../common/props'
|
|
4
|
-
import { VX } from '../../tokens'
|
|
5
|
-
|
|
6
|
-
export type BarSparklineProps = BasaltProps & {
|
|
7
|
-
data: number[]
|
|
8
|
-
width: number
|
|
9
|
-
height: number
|
|
10
|
-
color?: string
|
|
11
|
-
/**
|
|
12
|
-
* Gap between two bars, in px. `1` is the shipped look; `2` at ~10 bars reads as a discrete series
|
|
13
|
-
* rather than a histogram, which is the KPI-card treatment.
|
|
14
|
-
*
|
|
15
|
-
* @default 1
|
|
16
|
-
*/
|
|
17
|
-
barGap?: number
|
|
18
|
-
/**
|
|
19
|
-
* Bar corner radius, in px. `0` is the shipped look.
|
|
20
|
-
*
|
|
21
|
-
* @default 0
|
|
22
|
-
*/
|
|
23
|
-
barRadius?: number
|
|
24
|
-
/**
|
|
25
|
-
* Paints the LAST bar in `emphasisColor` at full opacity — "this is where the series ends", the
|
|
26
|
-
* one reading a trend beside a KPI value is actually for. Off by default: a chart that means
|
|
27
|
-
* something by its final point must say so.
|
|
28
|
-
*
|
|
29
|
-
* @default false
|
|
30
|
-
*/
|
|
31
|
-
emphasizeLast?: boolean
|
|
32
|
-
/** The emphasised bar's fill. @default `VX.accent` */
|
|
33
|
-
emphasisColor?: string
|
|
34
|
-
/** Accessible text alternative, applied as `aria-label` (+ `role="img"`) on the `<svg>`. */
|
|
35
|
-
ariaLabel?: string
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/** Quiet inline bar trend — defaults to `VX.faint`, matching the sparkline family's restrained
|
|
39
|
-
* identity (docs/DESIGN-SPEC.md §5). Every geometry option below defaults to the shipped look, so
|
|
40
|
-
* an existing call site renders byte-identically. */
|
|
41
|
-
export function BarSparkline({
|
|
42
|
-
data,
|
|
43
|
-
width,
|
|
44
|
-
height,
|
|
45
|
-
color,
|
|
46
|
-
barGap = 1,
|
|
47
|
-
barRadius = 0,
|
|
48
|
-
emphasizeLast = false,
|
|
49
|
-
emphasisColor,
|
|
50
|
-
ariaLabel,
|
|
51
|
-
className,
|
|
52
|
-
style,
|
|
53
|
-
}: BarSparklineProps) {
|
|
54
|
-
const fillColor = color ?? VX.faint
|
|
55
|
-
const lastColor = emphasisColor ?? VX.accent
|
|
56
|
-
const a11yProps = ariaLabel !== undefined ? { role: 'img' as const, 'aria-label': ariaLabel } : {}
|
|
57
|
-
|
|
58
|
-
const yScale = useMemo(() => {
|
|
59
|
-
const max = Math.max(...data.filter((v) => isFinite(v)), 1)
|
|
60
|
-
return scaleLinear<number>({ domain: [0, max], range: [0, height] })
|
|
61
|
-
}, [data, height])
|
|
62
|
-
|
|
63
|
-
const rootProps = {
|
|
64
|
-
...(className !== undefined && { className }),
|
|
65
|
-
...(style !== undefined && { style }),
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (!data.length) return <svg width={width} height={height} {...rootProps} {...a11yProps} />
|
|
69
|
-
|
|
70
|
-
const step = width / data.length
|
|
71
|
-
const barWidth = Math.max(step - barGap, 1)
|
|
72
|
-
const lastIndex = data.length - 1
|
|
73
|
-
|
|
74
|
-
return (
|
|
75
|
-
<svg width={width} height={height} {...rootProps} {...a11yProps}>
|
|
76
|
-
{data.map((v, i) => {
|
|
77
|
-
const bh = Math.max(yScale(Math.max(v, 0)), 0)
|
|
78
|
-
const isLast = emphasizeLast && i === lastIndex
|
|
79
|
-
return (
|
|
80
|
-
<rect
|
|
81
|
-
key={i}
|
|
82
|
-
x={i * step}
|
|
83
|
-
y={height - bh}
|
|
84
|
-
width={barWidth}
|
|
85
|
-
height={bh}
|
|
86
|
-
{...(barRadius > 0 && { rx: barRadius })}
|
|
87
|
-
fill={isLast ? lastColor : fillColor}
|
|
88
|
-
fillOpacity={isLast ? 1 : 0.75}
|
|
89
|
-
/>
|
|
90
|
-
)
|
|
91
|
-
})}
|
|
92
|
-
</svg>
|
|
93
|
-
)
|
|
94
|
-
}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { curveMonotoneX } from '@visx/curve'
|
|
2
|
-
import { Group } from '@visx/group'
|
|
3
|
-
import { scaleLinear } from '@visx/scale'
|
|
4
|
-
import { LinePath } from '@visx/shape'
|
|
5
|
-
import { useMemo } from 'react'
|
|
6
|
-
import type { BasaltProps } from '../../common/props'
|
|
7
|
-
import { VX } from '../../tokens'
|
|
8
|
-
|
|
9
|
-
export type LineSparklineProps = BasaltProps & {
|
|
10
|
-
data: number[]
|
|
11
|
-
width: number
|
|
12
|
-
height: number
|
|
13
|
-
color?: string
|
|
14
|
-
/** Accessible text alternative, applied as `aria-label` (+ `role="img"`) on the `<svg>`. */
|
|
15
|
-
ariaLabel?: string
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Quiet single-hue trend line (docs/DESIGN-SPEC.md §5: "single 1.6px faint line, no fill, no
|
|
20
|
-
* axes, no dots"). Sparklines default to `VX.faint`, not the bolder `VX.line` used by full charts.
|
|
21
|
-
*/
|
|
22
|
-
export function LineSparkline({
|
|
23
|
-
data,
|
|
24
|
-
width,
|
|
25
|
-
height,
|
|
26
|
-
color,
|
|
27
|
-
ariaLabel,
|
|
28
|
-
className,
|
|
29
|
-
style,
|
|
30
|
-
}: LineSparklineProps) {
|
|
31
|
-
const strokeColor = color ?? VX.faint
|
|
32
|
-
const a11yProps = ariaLabel !== undefined ? { role: 'img' as const, 'aria-label': ariaLabel } : {}
|
|
33
|
-
|
|
34
|
-
const xScale = useMemo(
|
|
35
|
-
() => scaleLinear<number>({ domain: [0, Math.max(data.length - 1, 1)], range: [0, width] }),
|
|
36
|
-
[data.length, width],
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
const yScale = useMemo(() => {
|
|
40
|
-
const vals = data.filter((v) => isFinite(v))
|
|
41
|
-
if (!vals.length) return scaleLinear<number>({ domain: [0, 1], range: [height, 0] })
|
|
42
|
-
const min = Math.min(...vals)
|
|
43
|
-
const max = Math.max(...vals)
|
|
44
|
-
const pad = (max - min) * 0.1 || 1
|
|
45
|
-
return scaleLinear<number>({ domain: [min - pad, max + pad], range: [height, 0] })
|
|
46
|
-
}, [data, height])
|
|
47
|
-
|
|
48
|
-
const rootProps = {
|
|
49
|
-
...(className !== undefined && { className }),
|
|
50
|
-
...(style !== undefined && { style }),
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (data.length < 2) return <svg width={width} height={height} {...rootProps} {...a11yProps} />
|
|
54
|
-
|
|
55
|
-
const indexed = data.map((v, i) => ({ v, i }))
|
|
56
|
-
|
|
57
|
-
return (
|
|
58
|
-
<svg width={width} height={height} {...rootProps} {...a11yProps}>
|
|
59
|
-
<Group>
|
|
60
|
-
<LinePath<{ v: number; i: number }>
|
|
61
|
-
data={indexed}
|
|
62
|
-
x={(d) => xScale(d.i)}
|
|
63
|
-
y={(d) => yScale(d.v)}
|
|
64
|
-
stroke={strokeColor}
|
|
65
|
-
strokeWidth={1.6}
|
|
66
|
-
curve={curveMonotoneX}
|
|
67
|
-
/>
|
|
68
|
-
</Group>
|
|
69
|
-
</svg>
|
|
70
|
-
)
|
|
71
|
-
}
|
package/src/charts/theme.tsx
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext, useMemo } from 'react'
|
|
2
|
-
import type { ReactNode } from 'react'
|
|
3
|
-
|
|
4
|
-
type ColorScheme = 'light' | 'dark'
|
|
5
|
-
|
|
6
|
-
export type VxTheme = {
|
|
7
|
-
colorScheme: ColorScheme
|
|
8
|
-
line: string
|
|
9
|
-
line2: string
|
|
10
|
-
axis: string
|
|
11
|
-
axisStroke: string
|
|
12
|
-
tooltipBg: string
|
|
13
|
-
tooltipText: string
|
|
14
|
-
tooltipMuted: string
|
|
15
|
-
tooltipBorder: string
|
|
16
|
-
tooltipShadow: string
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Theme-resolved neutrals are now CSS custom properties (see the token layer). They resolve per
|
|
21
|
-
* Mantine color scheme in CSS, so these are static var refs — the provider keeps `colorScheme`
|
|
22
|
-
* only for any non-color branching a chart may need.
|
|
23
|
-
*/
|
|
24
|
-
const REFS = {
|
|
25
|
-
line: 'var(--vx-line)',
|
|
26
|
-
line2: 'var(--vx-line2)',
|
|
27
|
-
axis: 'var(--vx-axis)',
|
|
28
|
-
axisStroke: 'var(--vx-axis-stroke)',
|
|
29
|
-
tooltipBg: 'var(--vx-tooltip-bg)',
|
|
30
|
-
tooltipText: 'var(--vx-tooltip-text)',
|
|
31
|
-
tooltipMuted: 'var(--vx-tooltip-muted)',
|
|
32
|
-
tooltipBorder: 'var(--vx-tooltip-border)',
|
|
33
|
-
tooltipShadow: 'var(--vx-tooltip-shadow)',
|
|
34
|
-
} as const
|
|
35
|
-
|
|
36
|
-
const VxThemeContext = createContext<VxTheme | null>(null)
|
|
37
|
-
|
|
38
|
-
export function VxThemeProvider({
|
|
39
|
-
colorScheme,
|
|
40
|
-
children,
|
|
41
|
-
}: {
|
|
42
|
-
colorScheme: ColorScheme
|
|
43
|
-
children: ReactNode
|
|
44
|
-
}) {
|
|
45
|
-
const value = useMemo<VxTheme>(() => ({ colorScheme, ...REFS }), [colorScheme])
|
|
46
|
-
return <VxThemeContext.Provider value={value}>{children}</VxThemeContext.Provider>
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export function useVxTheme(): VxTheme {
|
|
50
|
-
const ctx = useContext(VxThemeContext)
|
|
51
|
-
if (!ctx) throw new Error('useVxTheme must be used inside <VxThemeProvider>')
|
|
52
|
-
return ctx
|
|
53
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto y-domain lower-bound padding — shared by every `yAutoMinCeil`/`autoMinCeil` idiom across
|
|
3
|
-
* the kinds (MultiLine, ZonedLine, Bars' left/right axes).
|
|
4
|
-
*
|
|
5
|
-
* The lower bound must always pad AWAY from the data (`lower <= candidate`), never toward it —
|
|
6
|
-
* a naive `candidate * pad` clips data whenever `candidate` is positive (padding a positive floor
|
|
7
|
-
* UP moves it toward, and past, the data minimum). This is exactly the `yAutoMinCeil={Infinity}`
|
|
8
|
-
* ("no forced zero baseline") idiom: `candidate` becomes the raw data minimum, which is usually
|
|
9
|
-
* positive (e.g. a body-weight series bottoming out at 78), and the old multiplicative pad shoved
|
|
10
|
-
* the axis floor above it.
|
|
11
|
-
*
|
|
12
|
-
* `candidate` is the caller's `Math.min(dataMin, ceil)` — the ceiling has already been applied.
|
|
13
|
-
* - `candidate === 0` (the common default-zero-baseline case: positive-only data with the
|
|
14
|
-
* default `ceil = 0`) stays exactly 0 — never pushed negative.
|
|
15
|
-
* - `candidate > 0` divides by `pad`, moving the floor DOWN toward (and below) the candidate.
|
|
16
|
-
* - `candidate < 0` multiplies by `pad`, moving the floor further DOWN (more negative) — the
|
|
17
|
-
* pre-existing, still-correct behavior for genuinely negative-swinging metrics.
|
|
18
|
-
*/
|
|
19
|
-
export function padAutoLower(candidate: number, pad: number): number {
|
|
20
|
-
if (candidate === 0) return 0
|
|
21
|
-
return candidate > 0 ? candidate / pad : candidate * pad
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Auto y-domain upper-bound padding — the exact mirror of {@link padAutoLower}, sharing its
|
|
26
|
-
* sign-safety: pad AWAY from zero (`upper >= candidate`), never toward it. `candidate` is the
|
|
27
|
-
* caller's `Math.max(dataMax, floor)` — the `autoMaxFloor` clamp has already been applied, so
|
|
28
|
-
* padding runs AFTER the floor, not before it. Applying the floor post-pad (the pre-existing bug)
|
|
29
|
-
* lands a floored axis top exactly on the floor value with zero headroom — a target line pinned to
|
|
30
|
-
* that floor then sits glued to the plot edge instead of getting the same breathing room every
|
|
31
|
-
* other bound gets.
|
|
32
|
-
*
|
|
33
|
-
* - `candidate === 0` stays exactly 0 — never pushed positive.
|
|
34
|
-
* - `candidate > 0` multiplies by `pad`, moving the ceiling further UP (away from zero).
|
|
35
|
-
* - `candidate < 0` divides by `pad`, moving the ceiling UP toward (and past) zero — the mirror of
|
|
36
|
-
* `padAutoLower`'s `candidate > 0` branch.
|
|
37
|
-
*/
|
|
38
|
-
export function padAutoUpper(candidate: number, pad: number): number {
|
|
39
|
-
if (candidate === 0) return 0
|
|
40
|
-
return candidate > 0 ? candidate * pad : candidate / pad
|
|
41
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Re-export shim. The implementation moved to `basalt-ui/format` (C5 consolidation, so
|
|
3
|
-
* `money`/`percent`/`duration`/`clock`/… and the chart formatters share one implementation
|
|
4
|
-
* instead of two). This file stays so every existing relative import inside `src/charts/**`
|
|
5
|
-
* (`../utils/format`) keeps resolving unchanged.
|
|
6
|
-
*/
|
|
7
|
-
export {
|
|
8
|
-
fmtAxisDate,
|
|
9
|
-
fmtTooltipDate,
|
|
10
|
-
fmtCompact,
|
|
11
|
-
type FmtCompactOptions,
|
|
12
|
-
fmtPercent,
|
|
13
|
-
type FmtPercentOptions,
|
|
14
|
-
fmtCurrency,
|
|
15
|
-
type FmtCurrencyOptions,
|
|
16
|
-
fmtInt,
|
|
17
|
-
formatters,
|
|
18
|
-
NON_FINITE,
|
|
19
|
-
} from '../../format'
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Text measurement for chart layout — the input to {@link autoMargin}.
|
|
3
|
-
*
|
|
4
|
-
* A static margin token cannot know how wide a tick label is, which is why charts used to have to be
|
|
5
|
-
* hand-nudged whenever a label grew (`docs/CHARTS-SPEC.md` §1). This measures the strings that
|
|
6
|
-
* will actually be painted, via an OFFSCREEN canvas 2D context: no element is attached, so there
|
|
7
|
-
* is no layout thrash and no reflow — unlike an SVG `getBBox()` probe.
|
|
8
|
-
*
|
|
9
|
-
* Mantine-free and dependency-free by construction (`charts/**` boundary).
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/** Fallback advance width per character, as a fraction of the font size, when no DOM is
|
|
13
|
-
* available (SSR, `renderToStaticMarkup`). Mono faces sit near 0.6em; being deterministic matters
|
|
14
|
-
* more than being exact, since the measured value is only ever a floor-raiser. */
|
|
15
|
-
const FALLBACK_CHAR_RATIO = 0.6
|
|
16
|
-
|
|
17
|
-
/** Last-resort family when the `--basalt-font-mono` custom property cannot be read. */
|
|
18
|
-
const FALLBACK_MONO = 'ui-monospace, SFMono-Regular, Menlo, monospace'
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Cap on the memo table. Tick labels are low-cardinality per chart, but a long-lived SPA with a
|
|
22
|
-
* live counter or currency axis mints a new string every update, and an unbounded module-level Map
|
|
23
|
-
* would then grow for the life of the tab. On overflow the whole table is dropped rather than
|
|
24
|
-
* evicted one by one: the working set is tiny and re-measuring it costs microseconds, so an LRU's
|
|
25
|
-
* bookkeeping would cost more than the misses it avoids.
|
|
26
|
-
*/
|
|
27
|
-
const CACHE_LIMIT = 2000
|
|
28
|
-
|
|
29
|
-
const cache = new Map<string, number>()
|
|
30
|
-
|
|
31
|
-
let ctx: CanvasRenderingContext2D | null | undefined
|
|
32
|
-
let monoFamily: string | undefined
|
|
33
|
-
|
|
34
|
-
function canvasContext(): CanvasRenderingContext2D | null {
|
|
35
|
-
if (ctx !== undefined) return ctx
|
|
36
|
-
if (typeof document === 'undefined') {
|
|
37
|
-
ctx = null
|
|
38
|
-
return ctx
|
|
39
|
-
}
|
|
40
|
-
ctx = document.createElement('canvas').getContext('2d')
|
|
41
|
-
// Webfonts swap in after first paint; measurements taken against the fallback face would then
|
|
42
|
-
// be stale (usually too narrow). Drop the cache once, when the real faces are ready.
|
|
43
|
-
// `?.` on every hop: a non-browser DOM harness can expose `document` with no `fonts`, or a
|
|
44
|
-
// `fonts` with no `ready` — neither is a reason to fail a measurement.
|
|
45
|
-
document.fonts?.ready?.then?.(() => cache.clear()).catch(() => {})
|
|
46
|
-
return ctx
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The resolved value of `--basalt-font-mono` — canvas needs a concrete family list, it cannot
|
|
51
|
-
* resolve a CSS custom property. Read once from the document element.
|
|
52
|
-
*/
|
|
53
|
-
export function monoFontFamily(): string {
|
|
54
|
-
if (monoFamily !== undefined) return monoFamily
|
|
55
|
-
if (typeof document === 'undefined' || typeof getComputedStyle !== 'function') {
|
|
56
|
-
monoFamily = FALLBACK_MONO
|
|
57
|
-
return monoFamily
|
|
58
|
-
}
|
|
59
|
-
const value = getComputedStyle(document.documentElement)
|
|
60
|
-
.getPropertyValue('--basalt-font-mono')
|
|
61
|
-
.trim()
|
|
62
|
-
monoFamily = value.length > 0 ? value : FALLBACK_MONO
|
|
63
|
-
return monoFamily
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Width in px of `text` at `fontPx` in the chart tick font. Memoized per `font|text` — a chart
|
|
68
|
-
* re-measures the same ~10 tick labels on every resize, and the cache turns that into a Map hit.
|
|
69
|
-
*/
|
|
70
|
-
export function measureText(text: string, fontPx: number, fontFamily?: string): number {
|
|
71
|
-
const family = fontFamily ?? monoFontFamily()
|
|
72
|
-
const font = `${fontPx}px ${family}`
|
|
73
|
-
const key = `${font}|${text}`
|
|
74
|
-
const hit = cache.get(key)
|
|
75
|
-
if (hit !== undefined) return hit
|
|
76
|
-
|
|
77
|
-
const c = canvasContext()
|
|
78
|
-
let width: number
|
|
79
|
-
if (c === null) {
|
|
80
|
-
width = text.length * fontPx * FALLBACK_CHAR_RATIO
|
|
81
|
-
} else {
|
|
82
|
-
c.font = font
|
|
83
|
-
width = c.measureText(text).width
|
|
84
|
-
}
|
|
85
|
-
if (cache.size >= CACHE_LIMIT) cache.clear()
|
|
86
|
-
cache.set(key, width)
|
|
87
|
-
return width
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/** Widest of `texts` at `fontPx`. Returns 0 for an empty list. */
|
|
91
|
-
export function maxTextWidth(
|
|
92
|
-
texts: readonly string[],
|
|
93
|
-
fontPx: number,
|
|
94
|
-
fontFamily?: string,
|
|
95
|
-
): number {
|
|
96
|
-
let max = 0
|
|
97
|
-
for (const text of texts) {
|
|
98
|
-
const width = measureText(text, fontPx, fontFamily)
|
|
99
|
-
if (width > max) max = width
|
|
100
|
-
}
|
|
101
|
-
return max
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Test seam — drops the memo table (and the resolved family) so a test can change fonts. */
|
|
105
|
-
export function resetTextMetrics(): void {
|
|
106
|
-
cache.clear()
|
|
107
|
-
ctx = undefined
|
|
108
|
-
monoFamily = undefined
|
|
109
|
-
}
|