basalt-ui 1.41.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +46 -43
- package/CHANGELOG.md +535 -518
- package/MIGRATING.md +945 -37
- package/README.md +171 -366
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +16 -26
- package/agent/templates/DESIGN.md.tpl +1 -1
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +465 -844
- package/configs/oxlint-plugin.test.ts +661 -709
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +51 -9
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +48 -172
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +39 -132
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -37
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -23
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +81 -72
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +100 -384
- package/src/cli/init.ts +60 -51
- package/src/cli/sync.ts +13 -68
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +36 -191
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
import type { CSSProperties, ReactNode } from 'react'
|
|
2
|
-
import { useLayoutEffect, useRef, useState, useSyncExternalStore } from 'react'
|
|
3
|
-
import { createPortal } from 'react-dom'
|
|
4
|
-
import { VX } from '../../tokens'
|
|
5
|
-
import type { TooltipRowData } from '../series'
|
|
6
|
-
import { fmtTooltipDate } from '../utils/format'
|
|
7
|
-
import { useChartMetrics } from './chart-tier'
|
|
8
|
-
|
|
9
|
-
// Panel bg + shadow-card, radius 8 (docs/DESIGN-SPEC.md §5's "Tooltip/popover/menu" idiom) — the
|
|
10
|
-
// same depth-via-shadow treatment as ChartCard, never a `border` property. Surfaces resolve per
|
|
11
|
-
// theme via CSS vars, so this is a static object (no useMemo/hook needed).
|
|
12
|
-
const TOOLTIP_STYLES: CSSProperties = {
|
|
13
|
-
position: 'fixed',
|
|
14
|
-
pointerEvents: 'none',
|
|
15
|
-
zIndex: VX.zIndexFloating,
|
|
16
|
-
backgroundColor: VX.surface.panel,
|
|
17
|
-
borderRadius: 'var(--vx-radius-floating)',
|
|
18
|
-
padding: '0',
|
|
19
|
-
fontSize: VX.text.xs,
|
|
20
|
-
lineHeight: '18px',
|
|
21
|
-
color: VX.ink,
|
|
22
|
-
boxShadow: VX.shadowCard,
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/** Tooltip header — shows formatted date + optional right-aligned label with color. */
|
|
26
|
-
export function TooltipHeader({
|
|
27
|
-
date,
|
|
28
|
-
label,
|
|
29
|
-
labelColor,
|
|
30
|
-
format = fmtTooltipDate,
|
|
31
|
-
}: {
|
|
32
|
-
date: string
|
|
33
|
-
label?: string
|
|
34
|
-
labelColor?: string
|
|
35
|
-
/** Overrides `fmtTooltipDate` for the header text. Default: today's `fmtTooltipDate` behavior,
|
|
36
|
-
* unchanged. The seam exists because `fmtTooltipDate` regexes `YYYY-MM-DD` out of the key and
|
|
37
|
-
* builds a LOCAL `Date`, so a UTC ISO domain key names the wrong day next to `formatX`/the
|
|
38
|
-
* tooltip badge, which both resolve locally — a caller with a UTC key needs to supply its own. */
|
|
39
|
-
format?: (date: string) => string
|
|
40
|
-
}) {
|
|
41
|
-
return (
|
|
42
|
-
<div
|
|
43
|
-
style={{
|
|
44
|
-
display: 'flex',
|
|
45
|
-
justifyContent: 'space-between',
|
|
46
|
-
alignItems: 'center',
|
|
47
|
-
gap: 16,
|
|
48
|
-
padding: '6px 10px',
|
|
49
|
-
borderBottom: `1px solid ${VX.divider}`,
|
|
50
|
-
}}
|
|
51
|
-
>
|
|
52
|
-
<span
|
|
53
|
-
style={{
|
|
54
|
-
fontSize: VX.text.micro,
|
|
55
|
-
fontWeight: 600,
|
|
56
|
-
fontFamily: 'var(--basalt-font-mono)',
|
|
57
|
-
color: VX.ink,
|
|
58
|
-
}}
|
|
59
|
-
>
|
|
60
|
-
{format(date)}
|
|
61
|
-
</span>
|
|
62
|
-
{label !== undefined && (
|
|
63
|
-
<span
|
|
64
|
-
style={{
|
|
65
|
-
fontSize: VX.text.micro,
|
|
66
|
-
fontWeight: 500,
|
|
67
|
-
fontFamily: 'var(--basalt-font-mono)',
|
|
68
|
-
color: labelColor,
|
|
69
|
-
}}
|
|
70
|
-
>
|
|
71
|
-
{label}
|
|
72
|
-
</span>
|
|
73
|
-
)}
|
|
74
|
-
</div>
|
|
75
|
-
)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** Tooltip row — swatch + label + value. */
|
|
79
|
-
export function TooltipRow({
|
|
80
|
-
color,
|
|
81
|
-
label,
|
|
82
|
-
value,
|
|
83
|
-
valueColor,
|
|
84
|
-
shape,
|
|
85
|
-
strokeWidth,
|
|
86
|
-
dashed,
|
|
87
|
-
}: {
|
|
88
|
-
color: string
|
|
89
|
-
label: string
|
|
90
|
-
value: string
|
|
91
|
-
valueColor?: string
|
|
92
|
-
shape?: 'dot' | 'line' | 'bar'
|
|
93
|
-
strokeWidth?: number
|
|
94
|
-
/** Render the line swatch as dashed (only applies to shape='line'). */
|
|
95
|
-
dashed?: boolean
|
|
96
|
-
}) {
|
|
97
|
-
return (
|
|
98
|
-
<div
|
|
99
|
-
style={{
|
|
100
|
-
display: 'flex',
|
|
101
|
-
justifyContent: 'space-between',
|
|
102
|
-
alignItems: 'center',
|
|
103
|
-
gap: 16,
|
|
104
|
-
padding: '0 10px',
|
|
105
|
-
}}
|
|
106
|
-
>
|
|
107
|
-
<span style={{ display: 'flex', alignItems: 'center', gap: 6 }}>
|
|
108
|
-
{shape === 'line' ? (
|
|
109
|
-
<svg width={12} height={10} style={{ flexShrink: 0 }}>
|
|
110
|
-
<line
|
|
111
|
-
x1={0}
|
|
112
|
-
y1={5}
|
|
113
|
-
x2={12}
|
|
114
|
-
y2={5}
|
|
115
|
-
stroke={color}
|
|
116
|
-
strokeWidth={strokeWidth ?? VX.lineWidth}
|
|
117
|
-
strokeDasharray={dashed ? VX.dashArray : undefined}
|
|
118
|
-
/>
|
|
119
|
-
</svg>
|
|
120
|
-
) : (
|
|
121
|
-
<span
|
|
122
|
-
style={{
|
|
123
|
-
width: 8,
|
|
124
|
-
height: 8,
|
|
125
|
-
borderRadius: 2, // theme-allow raw-surface — sub-scale tooltip micro-corner, below the 4px radius floor
|
|
126
|
-
backgroundColor: color,
|
|
127
|
-
flexShrink: 0,
|
|
128
|
-
}}
|
|
129
|
-
/>
|
|
130
|
-
)}
|
|
131
|
-
{label}
|
|
132
|
-
</span>
|
|
133
|
-
<span style={{ fontWeight: 400, fontFamily: 'var(--basalt-font-mono)', color: valueColor }}>
|
|
134
|
-
{value}
|
|
135
|
-
</span>
|
|
136
|
-
</div>
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/** The derived rows (`deriveTooltipRows`), one {@link TooltipRow} each. */
|
|
141
|
-
export function TooltipRows({ rows }: { rows: readonly TooltipRowData[] }) {
|
|
142
|
-
return rows.map((row) => (
|
|
143
|
-
<TooltipRow
|
|
144
|
-
key={row.key}
|
|
145
|
-
color={row.color}
|
|
146
|
-
label={row.label}
|
|
147
|
-
value={row.value}
|
|
148
|
-
shape={row.shape}
|
|
149
|
-
dashed={row.dashed}
|
|
150
|
-
{...(row.strokeWidth !== undefined && { strokeWidth: row.strokeWidth })}
|
|
151
|
-
/>
|
|
152
|
-
))
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export function TooltipBody({ children }: { children: ReactNode }) {
|
|
156
|
-
return <div style={{ padding: '5px 0' }}>{children}</div>
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* "Am I on the client?", answered SYNCHRONOUSLY and hydration-safely.
|
|
161
|
-
*
|
|
162
|
-
* `useSyncExternalStore` is the one hook whose server snapshot React honours during BOTH
|
|
163
|
-
* `renderToString` and the hydration pass, so the server sees `false` and the client's very first
|
|
164
|
-
* render already sees `true` — no effect, no extra frame, and therefore no one-frame flash of a
|
|
165
|
-
* missing tooltip on a hover that has already happened. An `useEffect`-set flag would be correct
|
|
166
|
-
* on the server and a render late on the client. The store never emits, so nothing ever
|
|
167
|
-
* re-subscribes.
|
|
168
|
-
*/
|
|
169
|
-
const neverSubscribe = () => () => {}
|
|
170
|
-
const onClient = () => true
|
|
171
|
-
const onServer = () => false
|
|
172
|
-
const useIsClient = (): boolean => useSyncExternalStore(neverSubscribe, onClient, onServer)
|
|
173
|
-
|
|
174
|
-
/** Gap between the anchor point and the tooltip box, and the minimum distance kept from the
|
|
175
|
-
* viewport edge. */
|
|
176
|
-
const TOOLTIP_GAP = 12
|
|
177
|
-
const VIEWPORT_MARGIN = 8
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Floating tooltip positioned against a viewport-space anchor, with flip + clamp handled once for
|
|
181
|
-
* every chart instead of per call site (this used to be recomputed inside each chart's own `useChartTooltip`, and only for
|
|
182
|
-
* charts that remembered to use it).
|
|
183
|
-
*
|
|
184
|
-
* The box is measured after mount via `useLayoutEffect`, so the first paint of a given tooltip is
|
|
185
|
-
* hidden rather than misplaced — a tooltip that flashes at the wrong corner reads as a bug.
|
|
186
|
-
*
|
|
187
|
-
* **It renders NOTHING on the server.** `createPortal` throws outright in `react-dom/server`
|
|
188
|
-
* ("Portals are not currently supported by the server renderer"), and an unconditional portal made
|
|
189
|
-
* this the single component in the package that could not be server-rendered. The guard is
|
|
190
|
-
* {@link useIsClient}, not a `typeof document` check: under a DOM-preloaded test runner `document`
|
|
191
|
-
* exists while `renderToString` still refuses portals. A tooltip is a hover artifact with nothing
|
|
192
|
-
* to emit server-side, so rendering nothing is the whole fix, not a degradation.
|
|
193
|
-
*/
|
|
194
|
-
export function ChartTooltipFloat({
|
|
195
|
-
anchor,
|
|
196
|
-
ariaLive = true,
|
|
197
|
-
children,
|
|
198
|
-
}: {
|
|
199
|
-
anchor: { x: number; y: number } | null
|
|
200
|
-
/** Whether this tooltip announces itself to screen readers on every position change. Default
|
|
201
|
-
* true. Pass false for a cursor FOLLOWER's tooltip — N followers on a shared-cursor page all
|
|
202
|
-
* announcing on every pointer move would make the page unusable with a screen reader; only the
|
|
203
|
-
* cursor SOURCE should be `aria-live`. */
|
|
204
|
-
ariaLive?: boolean
|
|
205
|
-
children: ReactNode
|
|
206
|
-
}) {
|
|
207
|
-
const ref = useRef<HTMLDivElement>(null)
|
|
208
|
-
const [box, setBox] = useState<{ width: number; height: number } | null>(null)
|
|
209
|
-
const isClient = useIsClient()
|
|
210
|
-
const { tooltipMinWidth } = useChartMetrics()
|
|
211
|
-
|
|
212
|
-
useLayoutEffect(() => {
|
|
213
|
-
const el = ref.current
|
|
214
|
-
if (el === null) return
|
|
215
|
-
const { offsetWidth, offsetHeight } = el
|
|
216
|
-
setBox((prev) =>
|
|
217
|
-
prev !== null && prev.width === offsetWidth && prev.height === offsetHeight
|
|
218
|
-
? prev
|
|
219
|
-
: { width: offsetWidth, height: offsetHeight },
|
|
220
|
-
)
|
|
221
|
-
}, [children, anchor])
|
|
222
|
-
|
|
223
|
-
if (anchor === null) return null
|
|
224
|
-
// The SSR guard — see the component doc. A `typeof document` check does NOT cover this: under a
|
|
225
|
-
// jsdom/happy-dom-preloaded test runner `document` exists while `renderToString` still refuses
|
|
226
|
-
// portals, which is exactly how this shipped.
|
|
227
|
-
if (!isClient) return null
|
|
228
|
-
|
|
229
|
-
const width = box?.width ?? 0
|
|
230
|
-
const height = box?.height ?? 0
|
|
231
|
-
const vw = window.innerWidth
|
|
232
|
-
const vh = window.innerHeight
|
|
233
|
-
|
|
234
|
-
// An anchor outside the viewport means the chart that owns it has scrolled off-screen. Clamping
|
|
235
|
-
// would paint a follower's box over unrelated chrome (the bottom nav — `R2C-3`); render nothing
|
|
236
|
-
// instead.
|
|
237
|
-
if (anchor.y < 0 || anchor.y > vh) return null
|
|
238
|
-
|
|
239
|
-
const flipsLeft = anchor.x + TOOLTIP_GAP + width + VIEWPORT_MARGIN > vw
|
|
240
|
-
const left = flipsLeft
|
|
241
|
-
? Math.max(VIEWPORT_MARGIN, anchor.x - TOOLTIP_GAP - width)
|
|
242
|
-
: anchor.x + TOOLTIP_GAP
|
|
243
|
-
const top = Math.min(
|
|
244
|
-
Math.max(VIEWPORT_MARGIN, anchor.y - TOOLTIP_GAP),
|
|
245
|
-
Math.max(VIEWPORT_MARGIN, vh - height - VIEWPORT_MARGIN),
|
|
246
|
-
)
|
|
247
|
-
|
|
248
|
-
return createPortal(
|
|
249
|
-
<div
|
|
250
|
-
ref={ref}
|
|
251
|
-
role="tooltip"
|
|
252
|
-
{...(ariaLive && { 'aria-live': 'polite' as const })}
|
|
253
|
-
style={{
|
|
254
|
-
...TOOLTIP_STYLES,
|
|
255
|
-
minWidth: tooltipMinWidth,
|
|
256
|
-
left,
|
|
257
|
-
top,
|
|
258
|
-
visibility: box === null ? 'hidden' : 'visible',
|
|
259
|
-
}}
|
|
260
|
-
>
|
|
261
|
-
{children}
|
|
262
|
-
</div>,
|
|
263
|
-
document.body,
|
|
264
|
-
)
|
|
265
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react'
|
|
2
|
-
import { VX } from '../../tokens'
|
|
3
|
-
import { useChartMetrics } from './chart-tier'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* The shared vertical hover crosshair — one implementation for what used to be five hand-rolled
|
|
7
|
-
* call sites (`MultiLine`, `ZonedLine`, `StackedArea`, `Bars`, `DualPanel`). `top`/`bottom` are the
|
|
8
|
-
* plot-local y extent the line spans (usually `0` and the plot's `yMax`); `DualPanel` passes the
|
|
9
|
-
* extent spanning both panes for its cross-pane crosshair.
|
|
10
|
-
*/
|
|
11
|
-
export function Crosshair({
|
|
12
|
-
x,
|
|
13
|
-
top,
|
|
14
|
-
bottom,
|
|
15
|
-
}: {
|
|
16
|
-
x: number
|
|
17
|
-
top: number
|
|
18
|
-
bottom: number
|
|
19
|
-
}): ReactNode {
|
|
20
|
-
return <line x1={x} x2={x} y1={top} y2={bottom} stroke={VX.crosshair} strokeWidth={1} />
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The punched-out hover marker: a filled circle whose stroke is the chart background color, so it
|
|
25
|
-
* reads as a "hole" cut into the line on both themes. Centralizes the `dotStroke = chart-bg` trick.
|
|
26
|
-
*
|
|
27
|
-
* The default radius tracks the ambient chart tier (`docs/CHARTS-SPEC.md` §8) — an explicit `r`
|
|
28
|
-
* (a `getMarker`'s own radius) still wins.
|
|
29
|
-
*/
|
|
30
|
-
export function SeriesDot({
|
|
31
|
-
cx,
|
|
32
|
-
cy,
|
|
33
|
-
color,
|
|
34
|
-
r,
|
|
35
|
-
}: {
|
|
36
|
-
cx: number
|
|
37
|
-
cy: number
|
|
38
|
-
color: string
|
|
39
|
-
r?: number
|
|
40
|
-
}): ReactNode {
|
|
41
|
-
const { dotR } = useChartMetrics()
|
|
42
|
-
return <circle cx={cx} cy={cy} r={r ?? dotR} fill={color} stroke={VX.dotStroke} strokeWidth={2} />
|
|
43
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react'
|
|
2
|
-
import { alpha } from '../../tokens'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* A diagonal-hatch `<pattern>` — the one fill that reads as **absence** rather than as a weak
|
|
6
|
-
* measurement.
|
|
7
|
-
*
|
|
8
|
-
* A faint solid tint cannot do this job: it sits on the same perceptual axis as every other
|
|
9
|
-
* intensity of the same hue, so "nothing was measured here" and "everything measured here was
|
|
10
|
-
* fine" collapse into neighbouring steps of one ramp. Hatching is off that axis entirely and
|
|
11
|
-
* survives being placed beside a colour ramp of the same hue.
|
|
12
|
-
*
|
|
13
|
-
* `id` must be unique per document — `BandStrip` / `MirroredBars` namespace theirs with `chartId`.
|
|
14
|
-
* `opacity` is applied through `alpha()` on the stroke rather than as an `opacity` attribute, so
|
|
15
|
-
* the hue keeps resolving per colour scheme.
|
|
16
|
-
*/
|
|
17
|
-
export function HatchPattern({
|
|
18
|
-
id,
|
|
19
|
-
color,
|
|
20
|
-
opacity = 0.55,
|
|
21
|
-
size = 6,
|
|
22
|
-
}: {
|
|
23
|
-
id: string
|
|
24
|
-
color: string
|
|
25
|
-
opacity?: number
|
|
26
|
-
size?: number
|
|
27
|
-
}): ReactNode {
|
|
28
|
-
return (
|
|
29
|
-
<pattern
|
|
30
|
-
id={id}
|
|
31
|
-
width={size}
|
|
32
|
-
height={size}
|
|
33
|
-
patternUnits="userSpaceOnUse"
|
|
34
|
-
patternTransform="rotate(45)"
|
|
35
|
-
>
|
|
36
|
-
<line x1={0} y1={0} x2={0} y2={size} stroke={alpha(color, opacity)} strokeWidth={size / 3} />
|
|
37
|
-
</pattern>
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** `fill` value referencing a {@link HatchPattern} by id. */
|
|
42
|
-
export function hatchFill(id: string): string {
|
|
43
|
-
return `url(#${id})`
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* The pattern's own repeat, shrunk to fit the band it textures.
|
|
48
|
-
*
|
|
49
|
-
* Left at a fixed 6px a sub-pixel band draws less than one diagonal rule, so a fill/hatch split
|
|
50
|
-
* inside one band antialiases into a single smudge no reader can tell from a fully-measured band.
|
|
51
|
-
* Floored at 2 — below that the stroke has nothing to render on.
|
|
52
|
-
*/
|
|
53
|
-
export function hatchSizeFor(bandWidth: number): number {
|
|
54
|
-
return Math.max(2, Math.min(6, Math.round(bandWidth)))
|
|
55
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* `HoverOverlay` — the transparent plot rect every cartesian kind scrubs through. A tap focuses it
|
|
3
|
-
* on pointerdown, so the UA's own outline would ring the whole plot on every phone tap (`R2C-15`);
|
|
4
|
-
* keyboard focus keeps a VX accent inset instead.
|
|
5
|
-
*/
|
|
6
|
-
.overlay {
|
|
7
|
-
outline: none;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.overlay:focus-visible {
|
|
11
|
-
outline: 1px solid var(--vx-accent);
|
|
12
|
-
outline-offset: -1px;
|
|
13
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import type { FocusEventHandler, KeyboardEventHandler, PointerEventHandler } from 'react'
|
|
2
|
-
import type { ChartCursor } from '../hooks/useChartCursor'
|
|
3
|
-
import styles from './HoverOverlay.module.css'
|
|
4
|
-
|
|
5
|
-
/** Props of {@link HoverOverlay}. */
|
|
6
|
-
export type HoverOverlayProps = {
|
|
7
|
-
width: number
|
|
8
|
-
height: number
|
|
9
|
-
onMove: PointerEventHandler<SVGRectElement>
|
|
10
|
-
/** Coarse-pointer tap: resolves + shows the tooltip immediately, with no preceding `pointermove`
|
|
11
|
-
* (`docs/CHARTS-SPEC.md` §4, Tooltip). The press is provisional; `onUp` commits it. */
|
|
12
|
-
onDown?: PointerEventHandler<SVGRectElement>
|
|
13
|
-
/** Commits the provisional touch press so the pin survives the lift. */
|
|
14
|
-
onUp?: PointerEventHandler<SVGRectElement>
|
|
15
|
-
onLeave: PointerEventHandler<SVGRectElement>
|
|
16
|
-
/** Present = the overlay is focusable and scrubs on ←/→. */
|
|
17
|
-
onKeyDown?: KeyboardEventHandler<SVGRectElement>
|
|
18
|
-
onBlur?: FocusEventHandler<SVGRectElement>
|
|
19
|
-
ariaLabel?: string
|
|
20
|
-
/** Index of the focused point — announced as the slider position. */
|
|
21
|
-
valueNow?: number
|
|
22
|
-
/** Last index of the domain. */
|
|
23
|
-
valueMax?: number
|
|
24
|
-
/** Human-readable label for the focused point (the formatted x key). */
|
|
25
|
-
valueText?: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Transparent <rect> that captures pointer events (mouse + touch + pen) for tooltip + crosshair
|
|
30
|
-
* sync.
|
|
31
|
-
*
|
|
32
|
-
* With `onKeyDown` it also becomes the chart's keyboard affordance: the rect takes focus and
|
|
33
|
-
* ←/→ scrub the cursor, so a chart's values are reachable without a pointer.
|
|
34
|
-
*/
|
|
35
|
-
export function HoverOverlay({
|
|
36
|
-
width,
|
|
37
|
-
height,
|
|
38
|
-
onMove,
|
|
39
|
-
onDown,
|
|
40
|
-
onUp,
|
|
41
|
-
onLeave,
|
|
42
|
-
onKeyDown,
|
|
43
|
-
onBlur,
|
|
44
|
-
ariaLabel,
|
|
45
|
-
valueNow,
|
|
46
|
-
valueMax,
|
|
47
|
-
valueText,
|
|
48
|
-
}: HoverOverlayProps) {
|
|
49
|
-
return (
|
|
50
|
-
// `touch-action: pan-y` lives on the plot's `<svg>` (each kind's own), NOT here: Chrome ignores
|
|
51
|
-
// `touch-action` on an SVG child `<rect>`, so the browser claims a horizontal pan and cancels
|
|
52
|
-
// the pointer (`R2C-2`). The `overlay` class owns the focus ring: no UA outline on tap, a VX
|
|
53
|
-
// accent inset under `:focus-visible` (`R2C-15`).
|
|
54
|
-
<rect
|
|
55
|
-
className={styles.overlay}
|
|
56
|
-
width={width}
|
|
57
|
-
height={height}
|
|
58
|
-
fill="transparent"
|
|
59
|
-
{...(onKeyDown !== undefined && {
|
|
60
|
-
tabIndex: 0,
|
|
61
|
-
// `slider`, not `application`: `application` would drop this node out of the screen
|
|
62
|
-
// reader's normal browse mode entirely, which is a far bigger hammer than an arrow-key
|
|
63
|
-
// scrub needs. A slider announces both the affordance and the focused point.
|
|
64
|
-
role: 'slider',
|
|
65
|
-
'aria-label': ariaLabel ?? 'Chart data — use arrow keys to scrub',
|
|
66
|
-
'aria-orientation': 'horizontal' as const,
|
|
67
|
-
'aria-valuemin': 0,
|
|
68
|
-
...(valueMax !== undefined && { 'aria-valuemax': valueMax }),
|
|
69
|
-
// `aria-valuenow` is required on a slider: 0 (the first point) until the cursor lands on one.
|
|
70
|
-
'aria-valuenow': valueNow ?? 0,
|
|
71
|
-
...(valueText !== undefined && { 'aria-valuetext': valueText }),
|
|
72
|
-
onKeyDown,
|
|
73
|
-
...(onBlur !== undefined && { onBlur }),
|
|
74
|
-
})}
|
|
75
|
-
onPointerMove={onMove}
|
|
76
|
-
{...(onDown !== undefined && { onPointerDown: onDown })}
|
|
77
|
-
{...(onUp !== undefined && { onPointerUp: onUp })}
|
|
78
|
-
onPointerLeave={onLeave}
|
|
79
|
-
onPointerCancel={onLeave}
|
|
80
|
-
/>
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Everything a FOCUSABLE overlay over indexed data takes besides its rect: the cursor's pointer and
|
|
86
|
-
* keyboard handlers plus the slider label/position. `CartesianChart`, `DualPanel`'s top pane and
|
|
87
|
-
* the banded kinds all wire it identically, so it is stated once.
|
|
88
|
-
*/
|
|
89
|
-
export function cursorSliderProps<T>(input: {
|
|
90
|
-
cursor: ChartCursor<T>
|
|
91
|
-
data: readonly T[]
|
|
92
|
-
getX: (d: T) => string
|
|
93
|
-
formatX: (key: string) => string
|
|
94
|
-
ariaLabel: string | undefined
|
|
95
|
-
}): Omit<HoverOverlayProps, 'width' | 'height'> {
|
|
96
|
-
const { cursor, data, getX, formatX, ariaLabel } = input
|
|
97
|
-
const { point } = cursor
|
|
98
|
-
return {
|
|
99
|
-
onMove: cursor.onPointerMove,
|
|
100
|
-
onDown: cursor.onPointerDown,
|
|
101
|
-
onUp: cursor.onPointerUp,
|
|
102
|
-
onLeave: cursor.onPointerLeave,
|
|
103
|
-
onKeyDown: cursor.onKeyDown,
|
|
104
|
-
onBlur: cursor.onBlur,
|
|
105
|
-
valueMax: Math.max(data.length - 1, 0),
|
|
106
|
-
...(point !== null && { valueNow: data.indexOf(point), valueText: formatX(getX(point)) }),
|
|
107
|
-
...(ariaLabel !== undefined && { ariaLabel }),
|
|
108
|
-
}
|
|
109
|
-
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import type { scalePoint } from '@visx/scale'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The point-scale instance type, derived from `@visx/scale`'s own `scalePoint` return type.
|
|
5
|
-
* Equivalent to d3's `ScalePoint<string>` but resolved through `@visx/scale` (an installed dep) so
|
|
6
|
-
* it needs no `@types/d3-scale` and stays inside the visx-only-in-charts boundary.
|
|
7
|
-
*/
|
|
8
|
-
type PointScale = ReturnType<typeof scalePoint<string>>
|
|
9
|
-
|
|
10
|
-
export type XZoneSpec = {
|
|
11
|
-
/** Left edge — a domain key produced by the kind's `getX`. Omit for "start of the plot area". */
|
|
12
|
-
from?: string
|
|
13
|
-
/** Right edge — a domain key produced by the kind's `getX`. Omit for "end of the plot area". */
|
|
14
|
-
to?: string
|
|
15
|
-
fill: string
|
|
16
|
-
/**
|
|
17
|
-
* `'center'` (default, unchanged behaviour) resolves a present bound to `xScale(key)` — the
|
|
18
|
-
* point's own center, so a band reads "from this sample to that sample" rather than
|
|
19
|
-
* edge-to-edge. `'edge'` resolves a present `from` to `xScale(from) - step/2` and a present `to`
|
|
20
|
-
* to `xScale(to) + step/2` (`step` read from `xScale.step()`), so the band covers both terminal
|
|
21
|
-
* slots in full — a two-key band widens by exactly one step, and `from === to` renders one step
|
|
22
|
-
* wide instead of being skipped as degenerate. An omitted `from`/`to` still resolves to the plot
|
|
23
|
-
* edge (`xScale.range()[0]`/`[1]`) in both modes, unshifted — omission means "the plot's own
|
|
24
|
-
* edge", not "the first/last sample's edge". A resolved `'edge'` bound is clamped into the plot
|
|
25
|
-
* range so a band anchored at the first or last sample cannot paint outside the plot area.
|
|
26
|
-
*/
|
|
27
|
-
align?: 'center' | 'edge'
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function clamp(value: number, min: number, max: number): number {
|
|
31
|
-
return Math.min(Math.max(value, min), max)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Resolves one zone bound (`from` or `to`) to a pixel x. `edgeSign` is `-1` for `from` (subtract
|
|
36
|
-
* half a step) and `+1` for `to` (add half a step) — only consulted in `'edge'` mode.
|
|
37
|
-
*/
|
|
38
|
-
function resolveBound({
|
|
39
|
-
key,
|
|
40
|
-
omittedEdge,
|
|
41
|
-
xScale,
|
|
42
|
-
align,
|
|
43
|
-
edgeSign,
|
|
44
|
-
rangeMin,
|
|
45
|
-
rangeMax,
|
|
46
|
-
}: {
|
|
47
|
-
key: string | undefined
|
|
48
|
-
omittedEdge: number
|
|
49
|
-
xScale: PointScale
|
|
50
|
-
align: 'center' | 'edge'
|
|
51
|
-
edgeSign: -1 | 1
|
|
52
|
-
rangeMin: number
|
|
53
|
-
rangeMax: number
|
|
54
|
-
}): number | undefined {
|
|
55
|
-
if (key === undefined) return omittedEdge
|
|
56
|
-
const center = xScale(key)
|
|
57
|
-
if (center === undefined) return undefined
|
|
58
|
-
if (align === 'center') return center
|
|
59
|
-
return clamp(center + edgeSign * (xScale.step() / 2), rangeMin, rangeMax)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Vertical zone backgrounds (x-range overlays — twilight bands, a shaded time window) — one
|
|
64
|
-
* <rect> per zone, spanning y=[0, height] and x=[scale(from), scale(to)]. The x analog of
|
|
65
|
-
* `ZoneRects`, for a `scalePoint` x-axis instead of a `scaleLinear` y-axis.
|
|
66
|
-
*
|
|
67
|
-
* Bound resolution depends on `XZoneSpec.align` (see its JSDoc for the full `'center'`/`'edge'`
|
|
68
|
-
* contract) — default `'center'` resolves a present key to the point's own center; `'edge'`
|
|
69
|
-
* widens by half a step at each present bound so the band covers the terminal slots in full.
|
|
70
|
-
*
|
|
71
|
-
* A key that is not in the scale's domain skips that band entirely (renders nothing for it) —
|
|
72
|
-
* it is NEVER clamped to a plot edge, in either mode. Clamping an unknown key would silently
|
|
73
|
-
* paint a band across the whole chart for a typo'd or stale key, which is the exact class of
|
|
74
|
-
* quiet lie the repo's "nothing to draw is two different states" doctrine rejects: an unknown key
|
|
75
|
-
* must read as "not drawn", not as "the whole plot".
|
|
76
|
-
*
|
|
77
|
-
* A degenerate resolved range (right edge <= left edge, e.g. an inverted `from`/`to` pair) is
|
|
78
|
-
* also skipped — no negative-width rect. In `'center'` mode `from === to` is degenerate (skipped,
|
|
79
|
-
* today's behaviour); in `'edge'` mode it is NOT — the half-step widening on each side always
|
|
80
|
-
* produces a positive-width, one-step-wide rect.
|
|
81
|
-
*/
|
|
82
|
-
export function XZoneRects({
|
|
83
|
-
zones,
|
|
84
|
-
height,
|
|
85
|
-
xScale,
|
|
86
|
-
}: {
|
|
87
|
-
zones: XZoneSpec[]
|
|
88
|
-
/** Plot-area height (yMax); rects span from 0 to this. */
|
|
89
|
-
height: number
|
|
90
|
-
xScale: PointScale
|
|
91
|
-
}) {
|
|
92
|
-
return (
|
|
93
|
-
<>
|
|
94
|
-
{zones.map((z, i) => {
|
|
95
|
-
const [rangeStart, rangeEnd] = xScale.range() as [number, number]
|
|
96
|
-
const rangeMin = Math.min(rangeStart, rangeEnd)
|
|
97
|
-
const rangeMax = Math.max(rangeStart, rangeEnd)
|
|
98
|
-
const align = z.align ?? 'center'
|
|
99
|
-
const xFrom = resolveBound({
|
|
100
|
-
key: z.from,
|
|
101
|
-
omittedEdge: rangeStart,
|
|
102
|
-
xScale,
|
|
103
|
-
align,
|
|
104
|
-
edgeSign: -1,
|
|
105
|
-
rangeMin,
|
|
106
|
-
rangeMax,
|
|
107
|
-
})
|
|
108
|
-
const xTo = resolveBound({
|
|
109
|
-
key: z.to,
|
|
110
|
-
omittedEdge: rangeEnd,
|
|
111
|
-
xScale,
|
|
112
|
-
align,
|
|
113
|
-
edgeSign: 1,
|
|
114
|
-
rangeMin,
|
|
115
|
-
rangeMax,
|
|
116
|
-
})
|
|
117
|
-
if (xFrom === undefined || xTo === undefined) return null
|
|
118
|
-
if (xTo <= xFrom) return null
|
|
119
|
-
return (
|
|
120
|
-
<rect
|
|
121
|
-
key={`xzone-${i}`}
|
|
122
|
-
x={xFrom}
|
|
123
|
-
y={0}
|
|
124
|
-
width={xTo - xFrom}
|
|
125
|
-
height={height}
|
|
126
|
-
fill={z.fill}
|
|
127
|
-
/>
|
|
128
|
-
)
|
|
129
|
-
})}
|
|
130
|
-
</>
|
|
131
|
-
)
|
|
132
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { scaleLinear } from '@visx/scale'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* The linear-scale instance type, derived from `@visx/scale`'s own `scaleLinear` return type.
|
|
5
|
-
* Equivalent to d3's `ScaleLinear<number, number>` but resolved through `@visx/scale` (an
|
|
6
|
-
* installed dep) so it needs no `@types/d3-scale` and stays inside the visx-only-in-charts boundary.
|
|
7
|
-
*/
|
|
8
|
-
type LinearScale = ReturnType<typeof scaleLinear<number>>
|
|
9
|
-
|
|
10
|
-
export type ZoneSpec = {
|
|
11
|
-
/** Lower bound on the anchored axis. Use -Infinity for "bottom of axis". */
|
|
12
|
-
from: number
|
|
13
|
-
/** Upper bound. Use Infinity for "top of axis". */
|
|
14
|
-
to: number
|
|
15
|
-
fill: string
|
|
16
|
-
axisSide?: 'left' | 'right'
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Full-width horizontal zone backgrounds — one <rect> per zone, spanning
|
|
21
|
-
* x=[0, width] and y=[scale(to), scale(from)]. Shared by every kind that
|
|
22
|
-
* renders target-zone / threshold-zone bands.
|
|
23
|
-
*
|
|
24
|
-
* `Infinity` / `-Infinity` bounds clamp to the resolved domain of the
|
|
25
|
-
* scale so "from: -Infinity" reads as "the bottom of this axis" regardless
|
|
26
|
-
* of whether the domain is fixed or auto-computed.
|
|
27
|
-
*
|
|
28
|
-
* The wrapper picks left vs right scale per zone via `axisSide`; callers
|
|
29
|
-
* on single-axis kinds just pass the same scale twice (or leave `rightScale`
|
|
30
|
-
* undefined).
|
|
31
|
-
*/
|
|
32
|
-
export function ZoneRects({
|
|
33
|
-
zones,
|
|
34
|
-
width,
|
|
35
|
-
leftScale,
|
|
36
|
-
rightScale,
|
|
37
|
-
}: {
|
|
38
|
-
zones: ZoneSpec[]
|
|
39
|
-
/** Plot-area width (xMax); rects span from 0 to this. */
|
|
40
|
-
width: number
|
|
41
|
-
leftScale: LinearScale
|
|
42
|
-
/** Required only when any zone has axisSide='right'. */
|
|
43
|
-
rightScale?: LinearScale | null
|
|
44
|
-
}) {
|
|
45
|
-
return (
|
|
46
|
-
<>
|
|
47
|
-
{zones.map((z, i) => {
|
|
48
|
-
const scale = z.axisSide === 'right' && rightScale ? rightScale : leftScale
|
|
49
|
-
const [domainMin, domainMax] = scale.domain() as [number, number]
|
|
50
|
-
const zTo = z.to === Infinity ? domainMax : z.to
|
|
51
|
-
const zFrom = z.from === -Infinity ? domainMin : z.from
|
|
52
|
-
const yTop = scale(zTo)
|
|
53
|
-
const yBottom = scale(zFrom)
|
|
54
|
-
return (
|
|
55
|
-
<rect
|
|
56
|
-
key={`zone-${i}`}
|
|
57
|
-
x={0}
|
|
58
|
-
y={yTop}
|
|
59
|
-
width={width}
|
|
60
|
-
height={yBottom - yTop}
|
|
61
|
-
fill={z.fill}
|
|
62
|
-
/>
|
|
63
|
-
)
|
|
64
|
-
})}
|
|
65
|
-
</>
|
|
66
|
-
)
|
|
67
|
-
}
|