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
|
@@ -1,589 +0,0 @@
|
|
|
1
|
-
import { LinePath } from '@visx/shape'
|
|
2
|
-
import { memo, useMemo } from 'react'
|
|
3
|
-
import { assertRequiredProps } from '../../common/validate'
|
|
4
|
-
import type { BasaltProps } from '../../common/props'
|
|
5
|
-
import type { CursorResolution } from '../cursor/resolve'
|
|
6
|
-
import { VX } from '../../tokens'
|
|
7
|
-
import type { ChartMargin } from '../../tokens'
|
|
8
|
-
import { CartesianChart } from '../primitives/CartesianChart'
|
|
9
|
-
import type { AxisConfig, CartesianTooltipConfig, PlotContext } from '../primitives/CartesianChart'
|
|
10
|
-
import type { ResponsiveChartHeight } from '../primitives/ChartFrame'
|
|
11
|
-
import type { ZoneSpec } from '../primitives/ZoneRects'
|
|
12
|
-
import type { ChartState } from '../primitives/ChartPending'
|
|
13
|
-
import { curveFor, LINE_OVERLAY_STROKE_WIDTH } from '../series'
|
|
14
|
-
import type { ChartLegendConfig, ChartSeries, SeriesCurve } from '../series'
|
|
15
|
-
import { padAutoLower } from '../utils/domain'
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* `T = unknown` is load-bearing, not a shortcut: it keeps a consumer's existing
|
|
19
|
-
* `const bars: BarsBar[] = [...]` compiling (and still assignable to `BarsBar<Row>[]`,
|
|
20
|
-
* contravariantly) even though the type is now generic over the datum.
|
|
21
|
-
*/
|
|
22
|
-
export type BarsBar<T = unknown> = {
|
|
23
|
-
/** Field key — `getValue(d, key)` extracts the number (null = skip this slot, not domain hole). */
|
|
24
|
-
key: string
|
|
25
|
-
/** Tooltip + legend label. */
|
|
26
|
-
label: string
|
|
27
|
-
/** Fill color (a resolved CSS color / token ref). Per `docs/DESIGN-SPEC.md` §5, the primary bar
|
|
28
|
-
* series should typically resolve to `VX.accent`, a secondary companion to `VX.faint`. */
|
|
29
|
-
color: string
|
|
30
|
-
/** Per-series tooltip value formatter — overrides the left/right axis's own format. Receives the
|
|
31
|
-
* hovered datum alongside the value. */
|
|
32
|
-
formatValue?: (v: number, d: T) => string
|
|
33
|
-
/** Y axis to plot against. Honored only in grouped layout. Default 'left'. */
|
|
34
|
-
axisSide?: 'left' | 'right'
|
|
35
|
-
/** Relative width within the group (only honored in grouped layout). Default 1 — all bars equal. */
|
|
36
|
-
weight?: number
|
|
37
|
-
/** Default true; false = drawn and legended, but never listed as a tooltip row — threads
|
|
38
|
-
* `SeriesStyle.tooltip` through `Bars`, replacing the removed per-kind `hideBarTooltipRows`. */
|
|
39
|
-
tooltip?: boolean
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export type BarsLine<T = unknown> = {
|
|
43
|
-
key: string
|
|
44
|
-
label: string
|
|
45
|
-
color: string
|
|
46
|
-
axisSide?: 'left' | 'right'
|
|
47
|
-
strokeWidth?: number
|
|
48
|
-
dashed?: boolean
|
|
49
|
-
formatValue?: (v: number, d: T) => string
|
|
50
|
-
/** Default true; false = drawn and legended, but never listed as a tooltip row. */
|
|
51
|
-
tooltip?: boolean
|
|
52
|
-
/** Dims the plotted stroke AND the legend swatch, never the tooltip row (`SeriesStyle.strokeOpacity`). */
|
|
53
|
-
strokeOpacity?: number
|
|
54
|
-
/** Interpolation for this overlay. Default `'monotone'` — see `SeriesCurve`. */
|
|
55
|
-
curve?: SeriesCurve
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export type BarsRefLine = {
|
|
59
|
-
value: number
|
|
60
|
-
color: string
|
|
61
|
-
/** Solid by default; set true for a dashed line. */
|
|
62
|
-
dashed?: boolean
|
|
63
|
-
axisSide?: 'left' | 'right'
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export type BarsProps<T> = BasaltProps & {
|
|
67
|
-
data: T[]
|
|
68
|
-
/** Height in px, or one per size step (`{ base, sm?, md?, lg? }`). Default 240. Forwarded
|
|
69
|
-
* unchanged; `ChartFrameProps.height` owns the law — steps resolve off the MEASURED width. */
|
|
70
|
-
height?: number | ResponsiveChartHeight
|
|
71
|
-
chartId: string
|
|
72
|
-
getX: (d: T) => string
|
|
73
|
-
/** Generic value accessor — given a data point and a bar/line key, returns the value or null. */
|
|
74
|
-
getValue: (d: T, key: string) => number | null
|
|
75
|
-
|
|
76
|
-
/** 1+ bar series, stacked when ≥2, plotted above baseline (y >= 0). */
|
|
77
|
-
positiveBars: BarsBar<T>[]
|
|
78
|
-
/** Optional bar series stacked below baseline (rendered as flipped negatives). */
|
|
79
|
-
negativeBars?: BarsBar<T>[]
|
|
80
|
-
|
|
81
|
-
/** 0–2 line overlays, each on left or right axis. */
|
|
82
|
-
lines?: BarsLine<T>[]
|
|
83
|
-
|
|
84
|
-
/** Horizontal value-range overlays (target zones, optimal bands). */
|
|
85
|
-
zones?: ZoneSpec[]
|
|
86
|
-
/** Dashed/solid horizontal reference lines. */
|
|
87
|
-
refLines?: BarsRefLine[]
|
|
88
|
-
|
|
89
|
-
/** Left axis config — bars always live here. In `barLayout: 'stacked'` (the default), `domain`
|
|
90
|
-
* defaults to the summed per-point stack total (bars + any left-axis lines), not a per-series
|
|
91
|
-
* max — the same function-domain seam `StackedArea` uses — unless overridden with a fixed tuple
|
|
92
|
-
* or a custom function. Optional, like every other kind's — omit it for a plain auto domain. */
|
|
93
|
-
y?: AxisConfig<T>
|
|
94
|
-
/** Right axis config. Passing it is what makes the chart dual-axis: it draws the right axis and
|
|
95
|
-
* widens the right margin by measurement. Line overlays (and grouped-layout bars) opt in with
|
|
96
|
-
* `axisSide: 'right'`. */
|
|
97
|
-
y2?: AxisConfig<T>
|
|
98
|
-
|
|
99
|
-
/** Bar width as fraction of slot width. Default 0.6. */
|
|
100
|
-
barWidthRatio?: number
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* How multiple positive bars are arranged per x slot.
|
|
104
|
-
* - `stacked` (default): bars stack vertically on the left axis; negativeBars stack below baseline.
|
|
105
|
-
* - `grouped`: bars sit side-by-side within the slot. Each bar honors its own `axisSide`.
|
|
106
|
-
* negativeBars are ignored in grouped layout.
|
|
107
|
-
*/
|
|
108
|
-
barLayout?: 'stacked' | 'grouped'
|
|
109
|
-
|
|
110
|
-
/** Per-bar opacity override. Receives the data point + bar key. Default 0.85. */
|
|
111
|
-
barOpacity?: (d: T, key: string) => number
|
|
112
|
-
|
|
113
|
-
/** Exact number of x ticks. Default: as many as fit. Ignored when `xTickValues` is set. */
|
|
114
|
-
xTicks?: number
|
|
115
|
-
/** Which domain keys get a tick, from the full key list and the resolved plot width. Takes
|
|
116
|
-
* precedence over `xTicks` — see `CartesianChartProps.xTickValues` for why a count is not
|
|
117
|
-
* always enough. */
|
|
118
|
-
xTickValues?: (keys: readonly string[], xMax: number) => readonly string[]
|
|
119
|
-
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
120
|
-
formatX?: (key: string) => string
|
|
121
|
-
/** Tilt the x tick labels 45° or 90°, or `0` to opt out of the phone tier's auto-rotation —
|
|
122
|
-
* see `CartesianChartProps.xLabelRotate`. */
|
|
123
|
-
xLabelRotate?: 0 | 45 | 90
|
|
124
|
-
/**
|
|
125
|
-
* How a sibling chart's broadcast cursor key resolves against this chart's points. Default
|
|
126
|
-
* `'nearest'`. Pass `'leading'` when `getX` returns a bucket's leading edge (a weekly series
|
|
127
|
-
* keyed by its Monday) — see `CursorResolution`.
|
|
128
|
-
*/
|
|
129
|
-
cursorResolution?: CursorResolution
|
|
130
|
-
|
|
131
|
-
/** `false` disables the tooltip entirely (and with it the crosshair dots). */
|
|
132
|
-
tooltip?: CartesianTooltipConfig<T> | false
|
|
133
|
-
/** Per-side overrides of the measured margins — the escape hatch, applied last. */
|
|
134
|
-
margin?: Partial<ChartMargin>
|
|
135
|
-
/** Legend config forwarded to `CartesianChart`; `false` disables the legend (sparkline escape).
|
|
136
|
-
* Default `{ placement: 'bottom' }`. */
|
|
137
|
-
legend?: ChartLegendConfig | false
|
|
138
|
-
/** Accessible text alternative, forwarded as `aria-label` (+ `role="group"`). */
|
|
139
|
-
ariaLabel?: string
|
|
140
|
-
/** Forwarded to `CartesianChart` — see `ChartPending`'s JSDoc for the three-state rationale. */
|
|
141
|
-
isPending?: boolean
|
|
142
|
-
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
143
|
-
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
144
|
-
state?: ChartState
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Bars on a categorical x-axis with optional stacked negative series, 0–2 line
|
|
149
|
-
* overlays on left/right axes, horizontal zones, and reference lines. Covers
|
|
150
|
-
* diverging-stack + bar+line + any future stacked-bar preset.
|
|
151
|
-
*
|
|
152
|
-
* Composes `CartesianChart` (`docs/CHARTS-SPEC.md` §2) — margin, scales, grid, axes, the shared
|
|
153
|
-
* cursor, the crosshair + per-series dots, and the tooltip are ALL the primitive's job. This file
|
|
154
|
-
* draws only the bar rects, the line overlays, and (for a diverging stack) the zero baseline.
|
|
155
|
-
*
|
|
156
|
-
* X-axis is built from the full `data` array so the calendar is preserved even
|
|
157
|
-
* with per-bar nulls (nulls become visual gaps, not domain holes).
|
|
158
|
-
*/
|
|
159
|
-
function BarsInner<T>(props: BarsProps<T>) {
|
|
160
|
-
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
161
|
-
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
162
|
-
// swallows into a blank subtree that names nothing.
|
|
163
|
-
assertRequiredProps('Bars', props, ['data', 'getX', 'getValue', 'positiveBars'])
|
|
164
|
-
const {
|
|
165
|
-
data,
|
|
166
|
-
height,
|
|
167
|
-
chartId,
|
|
168
|
-
getX,
|
|
169
|
-
getValue,
|
|
170
|
-
positiveBars,
|
|
171
|
-
negativeBars = [],
|
|
172
|
-
lines = [],
|
|
173
|
-
zones,
|
|
174
|
-
refLines,
|
|
175
|
-
y,
|
|
176
|
-
y2,
|
|
177
|
-
barWidthRatio = 0.6,
|
|
178
|
-
barLayout = 'stacked',
|
|
179
|
-
barOpacity,
|
|
180
|
-
xTicks,
|
|
181
|
-
xTickValues,
|
|
182
|
-
formatX,
|
|
183
|
-
xLabelRotate,
|
|
184
|
-
cursorResolution,
|
|
185
|
-
tooltip,
|
|
186
|
-
margin,
|
|
187
|
-
legend,
|
|
188
|
-
ariaLabel,
|
|
189
|
-
isPending,
|
|
190
|
-
state,
|
|
191
|
-
className,
|
|
192
|
-
style,
|
|
193
|
-
} = props
|
|
194
|
-
|
|
195
|
-
// Stacking sums bar heights via `posOffset`/`negOffset` in yScale units directly — a log axis
|
|
196
|
-
// has no additive zero, so a stacked total is meaningless on it (`docs/CHARTS-SPEC.md`'s null-gap
|
|
197
|
-
// + log contract). `grouped` bars only ever read one bar's own scaled value, so they're unaffected.
|
|
198
|
-
if (process.env.NODE_ENV !== 'production' && barLayout === 'stacked' && y?.scale === 'log') {
|
|
199
|
-
throw new Error(
|
|
200
|
-
'Bars: stacked bars cannot use a log axis (y.scale: "log") — the stack sums bar heights, ' +
|
|
201
|
-
"and a log axis has no additive zero to sum from. Use barLayout: 'grouped' instead.",
|
|
202
|
-
)
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
const barSeries = useMemo<ChartSeries<T>[]>(
|
|
206
|
-
() =>
|
|
207
|
-
[...positiveBars, ...negativeBars].map((b) => ({
|
|
208
|
-
key: b.key,
|
|
209
|
-
label: b.label,
|
|
210
|
-
color: b.color,
|
|
211
|
-
mark: 'bar' as const,
|
|
212
|
-
fillOpacity: 0.85,
|
|
213
|
-
...(b.axisSide !== undefined && { axis: b.axisSide }),
|
|
214
|
-
getValue: (d: T) => getValue(d, b.key),
|
|
215
|
-
...(b.formatValue !== undefined && { formatValue: b.formatValue }),
|
|
216
|
-
...(b.tooltip !== undefined && { tooltip: b.tooltip }),
|
|
217
|
-
})),
|
|
218
|
-
[positiveBars, negativeBars, getValue],
|
|
219
|
-
)
|
|
220
|
-
|
|
221
|
-
const lineSeries = useMemo<ChartSeries<T>[]>(
|
|
222
|
-
() =>
|
|
223
|
-
lines.map((ln) => ({
|
|
224
|
-
key: ln.key,
|
|
225
|
-
label: ln.label,
|
|
226
|
-
color: ln.color,
|
|
227
|
-
mark: 'line' as const,
|
|
228
|
-
dash: ln.dashed ? ('dashed' as const) : ('solid' as const),
|
|
229
|
-
strokeWidth: ln.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH,
|
|
230
|
-
...(ln.axisSide !== undefined && { axis: ln.axisSide }),
|
|
231
|
-
getValue: (d: T) => getValue(d, ln.key),
|
|
232
|
-
...(ln.formatValue !== undefined && { formatValue: ln.formatValue }),
|
|
233
|
-
...(ln.tooltip !== undefined && { tooltip: ln.tooltip }),
|
|
234
|
-
...(ln.strokeOpacity !== undefined && { strokeOpacity: ln.strokeOpacity }),
|
|
235
|
-
})),
|
|
236
|
-
[lines, getValue],
|
|
237
|
-
)
|
|
238
|
-
|
|
239
|
-
const series = useMemo<ChartSeries<T>[]>(
|
|
240
|
-
() => [...barSeries, ...lineSeries],
|
|
241
|
-
[barSeries, lineSeries],
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
// `stacked` needs the SUMMED per-point total (bars stack on top of each other), not a per-series
|
|
245
|
-
// max — the built-in 'auto' domain (per-series max) would clip a multi-bar stack. Left-axis line
|
|
246
|
-
// overlays fold into the same min/max comparison, matching the pre-CartesianChart auto-domain
|
|
247
|
-
// math. Skipped when the caller already supplies a fixed tuple or their own domain function.
|
|
248
|
-
const yConfig = useMemo<AxisConfig<T>>(() => {
|
|
249
|
-
// `y ?? {}` INSIDE the memo, never a `y = {}` destructuring default: the default builds a
|
|
250
|
-
// fresh object every render, which busts this memo and cascades into `CartesianChart`'s own
|
|
251
|
-
// margin/scale memos. Same pattern as `StackedArea`.
|
|
252
|
-
const base = y ?? {}
|
|
253
|
-
if (barLayout !== 'stacked' || (base.domain !== undefined && base.domain !== 'auto'))
|
|
254
|
-
return base
|
|
255
|
-
const pad = base.autoPad ?? 1.1
|
|
256
|
-
return {
|
|
257
|
-
...base,
|
|
258
|
-
// Visible-only, so a legend toggle shrinks the axis rather than leaving a gap.
|
|
259
|
-
domain: (rows: readonly T[], visible: readonly ChartSeries<T>[]) => {
|
|
260
|
-
const shown = new Set(visible.map((s) => s.key))
|
|
261
|
-
let maxSum = 0
|
|
262
|
-
let minSum = 0
|
|
263
|
-
for (const d of rows) {
|
|
264
|
-
let pos = 0
|
|
265
|
-
for (const b of positiveBars) {
|
|
266
|
-
if (!shown.has(b.key)) continue
|
|
267
|
-
const v = getValue(d, b.key)
|
|
268
|
-
if (v !== null && !Number.isNaN(v) && v > 0) pos += v
|
|
269
|
-
}
|
|
270
|
-
let neg = 0
|
|
271
|
-
for (const b of negativeBars) {
|
|
272
|
-
if (!shown.has(b.key)) continue
|
|
273
|
-
const v = getValue(d, b.key)
|
|
274
|
-
if (v !== null && !Number.isNaN(v) && v > 0) neg -= v
|
|
275
|
-
}
|
|
276
|
-
if (pos > maxSum) maxSum = pos
|
|
277
|
-
if (neg < minSum) minSum = neg
|
|
278
|
-
}
|
|
279
|
-
for (const ln of lines) {
|
|
280
|
-
if ((ln.axisSide ?? 'left') !== 'left' || !shown.has(ln.key)) continue
|
|
281
|
-
for (const d of rows) {
|
|
282
|
-
const v = getValue(d, ln.key)
|
|
283
|
-
if (v === null || Number.isNaN(v)) continue
|
|
284
|
-
if (v > maxSum) maxSum = v
|
|
285
|
-
if (v < minSum) minSum = v
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
const upper = Math.max(maxSum, base.autoMaxFloor ?? maxSum) * pad
|
|
289
|
-
const ceil = base.autoMinCeil ?? 0
|
|
290
|
-
return [padAutoLower(Math.min(minSum, ceil), pad), upper]
|
|
291
|
-
},
|
|
292
|
-
}
|
|
293
|
-
}, [y, barLayout, positiveBars, negativeBars, lines, getValue])
|
|
294
|
-
|
|
295
|
-
const mappedRefLines = useMemo(
|
|
296
|
-
() =>
|
|
297
|
-
refLines?.map((r) => ({
|
|
298
|
-
value: r.value,
|
|
299
|
-
color: r.color,
|
|
300
|
-
...(r.dashed !== undefined && { dashed: r.dashed }),
|
|
301
|
-
...(r.axisSide !== undefined && { axis: r.axisSide }),
|
|
302
|
-
})),
|
|
303
|
-
[refLines],
|
|
304
|
-
)
|
|
305
|
-
|
|
306
|
-
return (
|
|
307
|
-
<CartesianChart
|
|
308
|
-
data={data}
|
|
309
|
-
chartId={chartId}
|
|
310
|
-
getX={getX}
|
|
311
|
-
series={series}
|
|
312
|
-
y={yConfig}
|
|
313
|
-
{...(y2 !== undefined && { y2 })}
|
|
314
|
-
{...(xTicks !== undefined && { xTicks })}
|
|
315
|
-
{...(xTickValues !== undefined && { xTickValues })}
|
|
316
|
-
{...(formatX !== undefined && { formatX })}
|
|
317
|
-
{...(xLabelRotate !== undefined && { xLabelRotate })}
|
|
318
|
-
{...(cursorResolution !== undefined && { cursorResolution })}
|
|
319
|
-
{...(zones !== undefined && { zones })}
|
|
320
|
-
{...(mappedRefLines !== undefined && { refLines: mappedRefLines })}
|
|
321
|
-
{...(height !== undefined && { height })}
|
|
322
|
-
{...(legend !== undefined && { legend })}
|
|
323
|
-
{...(tooltip !== undefined && { tooltip })}
|
|
324
|
-
{...(margin !== undefined && { margin })}
|
|
325
|
-
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
326
|
-
{...(isPending !== undefined && { isPending })}
|
|
327
|
-
{...(state !== undefined && { state })}
|
|
328
|
-
{...(className !== undefined && { className })}
|
|
329
|
-
{...(style !== undefined && { style })}
|
|
330
|
-
>
|
|
331
|
-
{(ctx) => (
|
|
332
|
-
<BarsMarks
|
|
333
|
-
getX={getX}
|
|
334
|
-
getValue={getValue}
|
|
335
|
-
positiveBars={positiveBars}
|
|
336
|
-
negativeBars={negativeBars}
|
|
337
|
-
lines={lines}
|
|
338
|
-
barWidthRatio={barWidthRatio}
|
|
339
|
-
barLayout={barLayout}
|
|
340
|
-
{...(barOpacity !== undefined && { barOpacity })}
|
|
341
|
-
ctx={ctx}
|
|
342
|
-
/>
|
|
343
|
-
)}
|
|
344
|
-
</CartesianChart>
|
|
345
|
-
)
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
type BarRectDatum = {
|
|
349
|
-
key: string
|
|
350
|
-
x: number
|
|
351
|
-
y: number
|
|
352
|
-
width: number
|
|
353
|
-
height: number
|
|
354
|
-
fill: string
|
|
355
|
-
fillOpacity: number
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
type LinePt<T> = { __d: T; __y: number }
|
|
359
|
-
|
|
360
|
-
type BarsMarksProps<T> = {
|
|
361
|
-
getX: (d: T) => string
|
|
362
|
-
getValue: (d: T, key: string) => number | null
|
|
363
|
-
positiveBars: BarsBar<T>[]
|
|
364
|
-
negativeBars: BarsBar<T>[]
|
|
365
|
-
lines: BarsLine<T>[]
|
|
366
|
-
barWidthRatio: number
|
|
367
|
-
barLayout: 'stacked' | 'grouped'
|
|
368
|
-
barOpacity?: (d: T, key: string) => number
|
|
369
|
-
ctx: PlotContext<T>
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
/**
|
|
373
|
-
* The bars, line overlays, and zero baseline. A component rather than an inline render-prop body
|
|
374
|
-
* so the per-row rect geometry can be memoized: the cursor is a shared store, so every pointer
|
|
375
|
-
* frame re-renders every mounted chart, and re-walking rows × bar-series (building fresh rect data
|
|
376
|
-
* + allocating a `<rect>`/`<g>` per bar) each frame is pure waste (parity with StackedAreaMarks /
|
|
377
|
-
* MultiLineMarks).
|
|
378
|
-
*/
|
|
379
|
-
function BarsMarks<T>({
|
|
380
|
-
getX,
|
|
381
|
-
getValue,
|
|
382
|
-
positiveBars,
|
|
383
|
-
negativeBars,
|
|
384
|
-
lines,
|
|
385
|
-
barWidthRatio,
|
|
386
|
-
barLayout,
|
|
387
|
-
barOpacity,
|
|
388
|
-
ctx,
|
|
389
|
-
}: BarsMarksProps<T>) {
|
|
390
|
-
const { data: rows, xScale, yScale, y2Scale, xMax, hidden, highlighted } = ctx
|
|
391
|
-
|
|
392
|
-
// Per-row bar rects — memoized on every input that drives the geometry (not on `hidden`/
|
|
393
|
-
// `highlighted` alone: a legend toggle or hover must still recompute, a hover-frame re-render of
|
|
394
|
-
// an unrelated chart must not). `scaleForSide`/`dim` are declared INSIDE the factory (rather than
|
|
395
|
-
// shared with the JSX below) so exhaustive-deps traces their `yScale`/`y2Scale`/`highlighted`
|
|
396
|
-
// reads directly instead of demanding the closures themselves as deps — those are recreated every
|
|
397
|
-
// render and would bust the memo every render if listed.
|
|
398
|
-
const barGroups = useMemo(() => {
|
|
399
|
-
const scaleForSide = (side: 'left' | 'right' | undefined) =>
|
|
400
|
-
side === 'right' && y2Scale ? y2Scale : yScale
|
|
401
|
-
const dim = (key: string) => (highlighted === null || highlighted === key ? 1 : 0.15)
|
|
402
|
-
// The y a bar grows FROM. `scale(0)` is `-Infinity` on a log axis — which has no zero — so
|
|
403
|
-
// every grouped bar's height came out NaN and the bars silently vanished; the fallback is the
|
|
404
|
-
// axis' own domain floor, which the log-domain law keeps positive. On a linear axis the same
|
|
405
|
-
// expression still resolves to `scale(0)` for any domain reaching zero, and pins the bar to
|
|
406
|
-
// the visible floor rather than to a zero drawn off the bottom of the plot when it does not.
|
|
407
|
-
const baselineFor = (scale: typeof yScale) => {
|
|
408
|
-
const floor = scale.domain()[0] ?? 0
|
|
409
|
-
const at = scale(Math.max(floor, 0))
|
|
410
|
-
return Number.isFinite(at) ? at : scale(floor)
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
const groupWidth = Math.max((xMax / Math.max(rows.length, 1)) * barWidthRatio, 2)
|
|
414
|
-
// Tiled across the bars that are actually DRAWN. Derived from the full `positiveBars` instead,
|
|
415
|
-
// a legend toggle left a hole in the slot where the hidden bar used to sit and never re-tiled
|
|
416
|
-
// the survivors across the same width.
|
|
417
|
-
const groupedBars =
|
|
418
|
-
barLayout === 'grouped' ? positiveBars.filter((b) => !hidden.has(b.key)) : []
|
|
419
|
-
const totalWeight = groupedBars.reduce((s, b) => s + (b.weight ?? 1), 0) || 1
|
|
420
|
-
const groupedBarWidths = groupedBars.map((b) =>
|
|
421
|
-
Math.max(groupWidth * ((b.weight ?? 1) / totalWeight), 1),
|
|
422
|
-
)
|
|
423
|
-
const groupedBarOffsets: number[] = []
|
|
424
|
-
let cursor = 0
|
|
425
|
-
for (const w of groupedBarWidths) {
|
|
426
|
-
groupedBarOffsets.push(cursor)
|
|
427
|
-
cursor += w
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
return rows.map((d) => {
|
|
431
|
-
const cx = xScale(getX(d)) ?? 0
|
|
432
|
-
const groupLeft = cx - groupWidth / 2
|
|
433
|
-
const rects: BarRectDatum[] = []
|
|
434
|
-
|
|
435
|
-
if (barLayout === 'stacked') {
|
|
436
|
-
let posOffset = 0
|
|
437
|
-
for (const b of positiveBars) {
|
|
438
|
-
if (hidden.has(b.key)) continue
|
|
439
|
-
const v = getValue(d, b.key)
|
|
440
|
-
if (v === null || Number.isNaN(v) || v <= 0) continue
|
|
441
|
-
const top = posOffset + v
|
|
442
|
-
const yTop = yScale(top)
|
|
443
|
-
const yBottom = yScale(posOffset)
|
|
444
|
-
rects.push({
|
|
445
|
-
key: `${getX(d)}-${b.key}`,
|
|
446
|
-
x: groupLeft,
|
|
447
|
-
y: yTop,
|
|
448
|
-
width: groupWidth,
|
|
449
|
-
height: yBottom - yTop,
|
|
450
|
-
fill: b.color,
|
|
451
|
-
fillOpacity: (barOpacity?.(d, b.key) ?? 0.85) * dim(b.key),
|
|
452
|
-
})
|
|
453
|
-
posOffset = top
|
|
454
|
-
}
|
|
455
|
-
let negOffset = 0
|
|
456
|
-
for (const b of negativeBars) {
|
|
457
|
-
if (hidden.has(b.key)) continue
|
|
458
|
-
const v = getValue(d, b.key)
|
|
459
|
-
if (v === null || Number.isNaN(v) || v <= 0) continue
|
|
460
|
-
const top = negOffset + v
|
|
461
|
-
const yTop = yScale(-negOffset)
|
|
462
|
-
const yBottom = yScale(-top)
|
|
463
|
-
rects.push({
|
|
464
|
-
key: `${getX(d)}-${b.key}-neg`,
|
|
465
|
-
x: groupLeft,
|
|
466
|
-
y: yTop,
|
|
467
|
-
width: groupWidth,
|
|
468
|
-
height: yBottom - yTop,
|
|
469
|
-
fill: b.color,
|
|
470
|
-
fillOpacity: (barOpacity?.(d, b.key) ?? 0.85) * dim(b.key),
|
|
471
|
-
})
|
|
472
|
-
negOffset = top
|
|
473
|
-
}
|
|
474
|
-
} else {
|
|
475
|
-
groupedBars.forEach((b, i) => {
|
|
476
|
-
const v = getValue(d, b.key)
|
|
477
|
-
if (v === null || Number.isNaN(v) || v <= 0) return
|
|
478
|
-
const scale = scaleForSide(b.axisSide)
|
|
479
|
-
const yTop = scale(v)
|
|
480
|
-
const yBottom = baselineFor(scale)
|
|
481
|
-
rects.push({
|
|
482
|
-
key: `${getX(d)}-${b.key}`,
|
|
483
|
-
x: groupLeft + (groupedBarOffsets[i] ?? 0),
|
|
484
|
-
y: yTop,
|
|
485
|
-
width: groupedBarWidths[i] ?? 0,
|
|
486
|
-
// A value below a caller-pinned domain floor sits under the baseline; SVG rejects a
|
|
487
|
-
// negative height outright, so it clamps to nothing drawn.
|
|
488
|
-
height: Math.max(yBottom - yTop, 0),
|
|
489
|
-
fill: b.color,
|
|
490
|
-
fillOpacity: (barOpacity?.(d, b.key) ?? 0.85) * dim(b.key),
|
|
491
|
-
})
|
|
492
|
-
})
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
return { rowKey: getX(d), rects }
|
|
496
|
-
})
|
|
497
|
-
}, [
|
|
498
|
-
rows,
|
|
499
|
-
xScale,
|
|
500
|
-
yScale,
|
|
501
|
-
y2Scale,
|
|
502
|
-
xMax,
|
|
503
|
-
hidden,
|
|
504
|
-
highlighted,
|
|
505
|
-
positiveBars,
|
|
506
|
-
negativeBars,
|
|
507
|
-
barLayout,
|
|
508
|
-
barWidthRatio,
|
|
509
|
-
barOpacity,
|
|
510
|
-
getX,
|
|
511
|
-
getValue,
|
|
512
|
-
])
|
|
513
|
-
|
|
514
|
-
// Per-line valid points — walked once per (lines, rows), not re-walked inside the render map
|
|
515
|
-
// every paint (parity with DualPanel's lineValid / MultiLine's pointsBySeries).
|
|
516
|
-
const lineValid = useMemo(() => {
|
|
517
|
-
const out = new Map<string, LinePt<T>[]>()
|
|
518
|
-
for (const ln of lines) {
|
|
519
|
-
const valid: LinePt<T>[] = []
|
|
520
|
-
for (const d of rows) {
|
|
521
|
-
const v = getValue(d, ln.key)
|
|
522
|
-
if (v !== null && !Number.isNaN(v)) valid.push({ __d: d, __y: v })
|
|
523
|
-
}
|
|
524
|
-
out.set(ln.key, valid)
|
|
525
|
-
}
|
|
526
|
-
return out
|
|
527
|
-
}, [lines, rows, getValue])
|
|
528
|
-
|
|
529
|
-
// Cheap per-render closures for the JSX below — unlike `barGroups`' O(rows × series) walk,
|
|
530
|
-
// calling these a handful of times per paint (once per line/baseline) isn't worth memoizing.
|
|
531
|
-
const scaleForSide = (side: 'left' | 'right' | undefined) =>
|
|
532
|
-
side === 'right' && y2Scale ? y2Scale : yScale
|
|
533
|
-
const dim = (key: string) => (highlighted === null || highlighted === key ? 1 : 0.15)
|
|
534
|
-
|
|
535
|
-
return (
|
|
536
|
-
<>
|
|
537
|
-
{barGroups.map((group) => (
|
|
538
|
-
<g key={`bars-${group.rowKey}`}>
|
|
539
|
-
{group.rects.map((r) => (
|
|
540
|
-
<rect
|
|
541
|
-
key={r.key}
|
|
542
|
-
x={r.x}
|
|
543
|
-
y={r.y}
|
|
544
|
-
width={r.width}
|
|
545
|
-
height={r.height}
|
|
546
|
-
rx={1.4}
|
|
547
|
-
fill={r.fill}
|
|
548
|
-
fillOpacity={r.fillOpacity}
|
|
549
|
-
/>
|
|
550
|
-
))}
|
|
551
|
-
</g>
|
|
552
|
-
))}
|
|
553
|
-
|
|
554
|
-
{lines.map((ln) => {
|
|
555
|
-
if (hidden.has(ln.key)) return null
|
|
556
|
-
const scale = scaleForSide(ln.axisSide)
|
|
557
|
-
const valid = lineValid.get(ln.key) ?? []
|
|
558
|
-
if (valid.length === 0) return null
|
|
559
|
-
return (
|
|
560
|
-
<LinePath<LinePt<T>>
|
|
561
|
-
key={`line-${ln.key}`}
|
|
562
|
-
data={valid}
|
|
563
|
-
x={(p) => xScale(getX(p.__d)) ?? 0}
|
|
564
|
-
y={(p) => scale(p.__y)}
|
|
565
|
-
stroke={ln.color}
|
|
566
|
-
strokeWidth={ln.strokeWidth ?? LINE_OVERLAY_STROKE_WIDTH}
|
|
567
|
-
strokeDasharray={ln.dashed ? VX.dashArray : undefined}
|
|
568
|
-
strokeOpacity={dim(ln.key) * (ln.strokeOpacity ?? 1)}
|
|
569
|
-
curve={curveFor(ln.curve)}
|
|
570
|
-
/>
|
|
571
|
-
)
|
|
572
|
-
})}
|
|
573
|
-
|
|
574
|
-
{negativeBars.length > 0 && (
|
|
575
|
-
<line x1={0} x2={xMax} y1={yScale(0)} y2={yScale(0)} stroke={VX.grid} strokeWidth={1} />
|
|
576
|
-
)}
|
|
577
|
-
</>
|
|
578
|
-
)
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
/**
|
|
582
|
-
* Hand-memoized: React Compiler does not process the shipped dist, so we wrap the
|
|
583
|
-
* hot bars kind in `React.memo` to retain the auto-memoization it had as source.
|
|
584
|
-
*/
|
|
585
|
-
const BarsMemo = memo(BarsInner)
|
|
586
|
-
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
587
|
-
// graph of nine identically-named nodes names nothing.
|
|
588
|
-
BarsMemo.displayName = 'Bars'
|
|
589
|
-
export const Bars = BarsMemo as typeof BarsInner
|