basalt-ui 1.40.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +50 -45
- package/CHANGELOG.md +543 -513
- package/MIGRATING.md +969 -37
- package/README.md +172 -367
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +30 -0
- package/agent/templates/DESIGN.md.tpl +2 -2
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/check.yml +1 -1
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +468 -847
- package/configs/oxlint-plugin.test.ts +662 -710
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/foreign.d.ts +3 -2
- package/dist/agent/foreign.d.ts.map +1 -1
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +14 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/doctor-upgrade.d.ts +31 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +269 -0
- package/dist/cli/doctor.d.ts +13 -26
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +79 -8
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +68 -135
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +89 -76
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -27
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -6
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/copy-action.d.ts +1 -1
- package/dist/content/glyphs.d.ts +1 -1
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +77 -170
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/foreign.ts +3 -2
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +14 -43
- package/src/cli/doctor-upgrade.ts +392 -0
- package/src/cli/doctor.ts +120 -68
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +161 -276
- package/src/cli/init.ts +60 -37
- package/src/cli/sync.ts +13 -45
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/copy-action.tsx +1 -1
- package/src/content/glyphs.tsx +1 -1
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +37 -192
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/CLAUDE-block.md.tpl +0 -40
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -1,449 +0,0 @@
|
|
|
1
|
-
import { Group } from '@visx/group'
|
|
2
|
-
import { memo, useMemo } from 'react'
|
|
3
|
-
import type { ReactNode } from 'react'
|
|
4
|
-
import { assertRequiredProps } from '../../common/validate'
|
|
5
|
-
import type { BasaltProps } from '../../common/props'
|
|
6
|
-
import { VX, alpha } from '../../tokens'
|
|
7
|
-
import type { ChartMargin } from '../../tokens'
|
|
8
|
-
import type { CursorResolution } from '../cursor/resolve'
|
|
9
|
-
import { useBandPlot } from '../hooks/useBandPlot'
|
|
10
|
-
import type { BandFold, BandTooltipConfig } from '../hooks/useBandPlot'
|
|
11
|
-
import { ChartFrame, resolveLegend } from '../primitives/ChartFrame'
|
|
12
|
-
import type { ResponsiveChartHeight } from '../primitives/ChartFrame'
|
|
13
|
-
import { TooltipRow } from '../primitives/ChartTooltip'
|
|
14
|
-
import { Crosshair } from '../primitives/Crosshair'
|
|
15
|
-
import { HatchPattern, hatchFill, hatchSizeFor } from '../primitives/HatchPattern'
|
|
16
|
-
import type { ChartState } from '../primitives/ChartPending'
|
|
17
|
-
import type { ChartLegendConfig, SeriesStyle } from '../series'
|
|
18
|
-
import { fmtAxisDate } from '../utils/format'
|
|
19
|
-
import { BandAxisOverlay, BandTooltip, clampFraction } from './band-chrome'
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* A state a strip can draw. Extends `SeriesStyle` rather than `ChartSeries` because a band has no
|
|
23
|
-
* numeric value to plot — `formatValue` reads the datum directly.
|
|
24
|
-
*/
|
|
25
|
-
export type BandStripSeries<T> = SeriesStyle & {
|
|
26
|
-
/**
|
|
27
|
-
* The derived tooltip row's value for a band in this state.
|
|
28
|
-
*
|
|
29
|
-
* Return `null` for a datum in this state whose reading is ABSENT — the row renders
|
|
30
|
-
* {@link NO_READING} instead, which is the escape `ChartSeries.getValue` has and this shape did
|
|
31
|
-
* not: with no value accessor, an absent reading had to come back as `''` and render as a label
|
|
32
|
-
* with an empty value, indistinguishable from a state whose name is the whole reading.
|
|
33
|
-
*
|
|
34
|
-
* Omit the function entirely for a state whose NAME *is* the whole reading ("Not measured").
|
|
35
|
-
*/
|
|
36
|
-
formatValue?: (d: T) => string | null
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/** One drawn band — which state it is in, and the three ways a state can be qualified. */
|
|
40
|
-
export type BandSpan = {
|
|
41
|
-
/**
|
|
42
|
-
* Series key naming this band's state: the tie to its legend entry, its fill, and its derived
|
|
43
|
-
* tooltip row.
|
|
44
|
-
*
|
|
45
|
-
* A key not present in `series` is a bug TypeScript cannot catch (this is a `string`), and it
|
|
46
|
-
* used to draw NOTHING — which on a strip whose vocabulary is measured/not-measured is
|
|
47
|
-
* indistinguishable from a real coverage gap, so a typo silently asserted "not measured". It now
|
|
48
|
-
* throws in development and draws an explicit unknown band in production; see
|
|
49
|
-
* {@link unknownStateError} for why the two differ.
|
|
50
|
-
*/
|
|
51
|
-
state: string
|
|
52
|
-
/**
|
|
53
|
-
* Overrides the fill derived from the state's series entry — the seam for an intensity ramp
|
|
54
|
-
* WITHIN one state (5% loss vs 0.5% loss are the same state at different strengths). Build it
|
|
55
|
-
* with `alpha(VX.*, …)`, never a raw hex.
|
|
56
|
-
*/
|
|
57
|
-
fill?: string
|
|
58
|
-
/**
|
|
59
|
-
* 0..1 of this band's width that no source sample covers, drawn hatched from the band's right.
|
|
60
|
-
*
|
|
61
|
-
* This is what a fold owes the reader. A 1-of-3-measured slot whose merge reports the one
|
|
62
|
-
* measured member's reading paints, without this, as a fully-measured band — a reading asserted
|
|
63
|
-
* over two slots that reported nothing either way.
|
|
64
|
-
*/
|
|
65
|
-
absentFraction?: number
|
|
66
|
-
/**
|
|
67
|
-
* A shorter, inset bar drawn over the band — for a fact that must NOT be readable off the fill
|
|
68
|
-
* ramp (a renegotiation, a restart, a config change). Its colour comes from a `series` entry, so
|
|
69
|
-
* it cannot be drawn in a hue the legend does not name.
|
|
70
|
-
*/
|
|
71
|
-
marker?: {
|
|
72
|
-
/** Series key naming the marker's colour. Defaults to the band's own `state`. */
|
|
73
|
-
state?: string
|
|
74
|
-
/** Vertical inset from the band's top and bottom, in px. Default 6. */
|
|
75
|
-
inset?: number
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export type BandStripProps<T> = BasaltProps & {
|
|
80
|
-
data: readonly T[]
|
|
81
|
-
/** Stable id — identifies this chart as the cursor's source. */
|
|
82
|
-
chartId: string
|
|
83
|
-
/** Extracts the x-domain key. On a band strip this is a SLOT START, so `cursorResolution`
|
|
84
|
-
* defaults to `'leading'` (see below) rather than `CartesianChart`'s `'nearest'`. */
|
|
85
|
-
getX: (d: T) => string
|
|
86
|
-
/** The states this strip can draw — the single source of truth for legend entries, band fills,
|
|
87
|
-
* and the derived tooltip row. */
|
|
88
|
-
series: readonly BandStripSeries<T>[]
|
|
89
|
-
/** Which state each datum is in. */
|
|
90
|
-
getBand: (d: T) => BandSpan
|
|
91
|
-
/** Height in px, or one per size step (`{ base, sm?, md?, lg? }`), forwarded to `ChartFrame`.
|
|
92
|
-
* The band row gets whatever the measured margins and legend band leave. Default 240.
|
|
93
|
-
* `ChartFrameProps.height` owns the law — steps resolve off the MEASURED width. */
|
|
94
|
-
height?: number | ResponsiveChartHeight
|
|
95
|
-
/** Fill the parent flex/grid cell's measured height instead of a fixed one. */
|
|
96
|
-
fill?: boolean
|
|
97
|
-
/** X tick label formatter. Default `fmtAxisDate` (DD.MM). */
|
|
98
|
-
formatX?: (key: string) => string
|
|
99
|
-
/** Which keys get a tick. Default `smartTicks`. */
|
|
100
|
-
xTickValues?: (keys: readonly string[], plotWidth: number) => readonly string[]
|
|
101
|
-
/** Collapse adjacent data at widths where one band per datum sub-pixels. */
|
|
102
|
-
fold?: BandFold<T>
|
|
103
|
-
/**
|
|
104
|
-
* How a sibling's broadcast cursor key resolves against this strip's slots. Default
|
|
105
|
-
* `'leading'` — strict containment, "the slot that swallowed this key" — because a band IS a
|
|
106
|
-
* span keyed by its leading edge, and it stays correct at every fold width. `'nearest'` puts
|
|
107
|
-
* the crosshair one slot right for every source key in the back half of a slot.
|
|
108
|
-
*/
|
|
109
|
-
cursorResolution?: CursorResolution
|
|
110
|
-
tooltip?: BandTooltipConfig<T> | false
|
|
111
|
-
legend?: ChartLegendConfig | false
|
|
112
|
-
/** Colour of the absence hatch, AND the state that is absent. Names a `series` entry, so absence
|
|
113
|
-
* is legended like any other state — a hatched band is the one mark a reader cannot decode from
|
|
114
|
-
* an axis. A slot in this state hatches across its whole width unless its own `absentFraction`
|
|
115
|
-
* says otherwise; a slot in any other state hatches only its `absentFraction`. Default
|
|
116
|
-
* `VX.neutral`, unnamed. A key naming no `series` entry throws (a PROP, so a typo can only be a
|
|
117
|
-
* wiring error) rather than falling back to the unnamed default. */
|
|
118
|
-
absentState?: string
|
|
119
|
-
/** Per-side overrides of the measured margins — applied last. */
|
|
120
|
-
margin?: Partial<ChartMargin>
|
|
121
|
-
/** Accessible text alternative, forwarded to `ChartFrame` (+ `role="group"`) and to the
|
|
122
|
-
* focusable hover overlay's slider label. */
|
|
123
|
-
ariaLabel?: string
|
|
124
|
-
/** Forwarded to `ChartFrame` — see `ChartPending`'s JSDoc. */
|
|
125
|
-
isPending?: boolean
|
|
126
|
-
/** The three "nothing to draw" states in one prop — pending → error → empty. See
|
|
127
|
-
* `ChartState`; `isPending` stays a supported alias for `state={{ pending: true }}`. */
|
|
128
|
-
state?: ChartState
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
const DEFAULT_MARKER_INSET = 6
|
|
132
|
-
|
|
133
|
-
/** Rendered by a `formatValue` that returned `null` — an absent reading, told apart from a state
|
|
134
|
-
* whose name is the whole reading (which renders no value at all). */
|
|
135
|
-
const NO_READING = '\u2014'
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* The one band treatment that belongs to no legend entry. A dashed neutral outline appears nowhere
|
|
139
|
-
* else on a strip — not as a state fill, not as the absence hatch — so an unresolvable key reads as
|
|
140
|
-
* "unnamed", never as data.
|
|
141
|
-
*/
|
|
142
|
-
const UNKNOWN_MARK = {
|
|
143
|
-
fill: alpha(VX.neutral, 0.2),
|
|
144
|
-
stroke: VX.neutral,
|
|
145
|
-
strokeWidth: 1,
|
|
146
|
-
strokeDasharray: '3 2',
|
|
147
|
-
} as const
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* A `state` (or `marker.state`) naming no `series` entry.
|
|
151
|
-
*
|
|
152
|
-
* Dev throws, production draws {@link UNKNOWN_MARK}: `state` comes off the DATUM, so a feed that
|
|
153
|
-
* grows a state basalt has never seen must degrade to an honest unknown rather than take the page
|
|
154
|
-
* down — while a typo, which is the same input, still fails loudly everywhere it is being written.
|
|
155
|
-
* The one outcome ruled out in both is the old one: dropping the band, which renders as absence.
|
|
156
|
-
*/
|
|
157
|
-
function unknownStateError(what: string, key: string, known: Iterable<string>): Error {
|
|
158
|
-
return new Error(
|
|
159
|
-
`BandStrip: ${what} "${key}" names no \`series\` entry (known: ${[...known].join(', ')}) — so ` +
|
|
160
|
-
'it has no legend entry, no colour and no tooltip row. Add the state to `series`, or map the ' +
|
|
161
|
-
'datum onto one that is there.',
|
|
162
|
-
)
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/** A band's tooltip value: `null` from `formatValue` is an absent reading, `undefined` (no
|
|
166
|
-
* `formatValue` at all) is a state whose label is the whole row. */
|
|
167
|
-
function formatBandValue<T>(style: BandStripSeries<T>, datum: T): string {
|
|
168
|
-
if (style.formatValue === undefined) return ''
|
|
169
|
-
return style.formatValue(datum) ?? NO_READING
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* A 1-D categorical band strip: one rect per slot over a shared x axis, no y dimension at all.
|
|
174
|
-
*
|
|
175
|
-
* `CartesianChart` cannot host this. It renders `AxisLeftNumeric` unconditionally, so composing it
|
|
176
|
-
* would draw a numeric axis over a chart that measures nothing vertically — and its `scalePoint` x
|
|
177
|
-
* scale has positions but no widths, which is the whole content of a strip. This is the
|
|
178
|
-
* non-single-plot escape `docs/CHARTS-SPEC.md` § "The contract" describes, assembled from the same
|
|
179
|
-
* parts every other chart gets (`ChartFrame`, `autoMargin`, `useChartCursor`, `ChartTooltipFloat`)
|
|
180
|
-
* via `useBandPlot`, never re-implemented.
|
|
181
|
-
*
|
|
182
|
-
* The three qualifications on {@link BandSpan} — `fill`, `absentFraction`, `marker` — are the ones
|
|
183
|
-
* a state strip cannot do without: an intensity ramp inside a state, the share of a folded slot
|
|
184
|
-
* nothing measured, and a fact that must not be read off the ramp.
|
|
185
|
-
*/
|
|
186
|
-
function BandStripInner<T>(props: BandStripProps<T>) {
|
|
187
|
-
// F-ERR-1: name the component and the prop. Without this a missing accessor surfaces
|
|
188
|
-
// from inside visx as `undefined is not a function`, which `BasaltErrorBoundary`
|
|
189
|
-
// swallows into a blank subtree that names nothing.
|
|
190
|
-
assertRequiredProps('BandStrip', props, ['data', 'getX', 'series', 'getBand'])
|
|
191
|
-
const { series, chartId, height, fill, legend, ariaLabel, isPending, state, className, style } =
|
|
192
|
-
props
|
|
193
|
-
|
|
194
|
-
return (
|
|
195
|
-
<ChartFrame
|
|
196
|
-
series={series}
|
|
197
|
-
chartId={chartId}
|
|
198
|
-
{...(height !== undefined && { height })}
|
|
199
|
-
{...(fill !== undefined && { fill })}
|
|
200
|
-
{...(ariaLabel !== undefined && { ariaLabel })}
|
|
201
|
-
{...(isPending !== undefined && { isPending })}
|
|
202
|
-
{...(state !== undefined && { state })}
|
|
203
|
-
{...(className !== undefined && { className })}
|
|
204
|
-
{...(style !== undefined && { style })}
|
|
205
|
-
legend={resolveLegend(legend)}
|
|
206
|
-
>
|
|
207
|
-
{(plot) => <BandStripPlot {...props} plot={plot} />}
|
|
208
|
-
</ChartFrame>
|
|
209
|
-
)
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
type BandStripPlotProps<T> = BandStripProps<T> & {
|
|
213
|
-
plot: { width: number; height: number; hidden: ReadonlySet<string> }
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/** The measured plot — split from {@link BandStripInner} so its scale/cursor hooks only run once
|
|
217
|
-
* `ChartFrame` has resolved a non-empty plot rect (parity with `DualPanel`). */
|
|
218
|
-
function BandStripPlot<T>(props: BandStripPlotProps<T>) {
|
|
219
|
-
const {
|
|
220
|
-
data,
|
|
221
|
-
chartId,
|
|
222
|
-
getX,
|
|
223
|
-
series,
|
|
224
|
-
getBand,
|
|
225
|
-
formatX = fmtAxisDate,
|
|
226
|
-
xTickValues,
|
|
227
|
-
fold,
|
|
228
|
-
cursorResolution = 'leading',
|
|
229
|
-
tooltip,
|
|
230
|
-
absentState,
|
|
231
|
-
margin: marginOverride,
|
|
232
|
-
ariaLabel,
|
|
233
|
-
plot,
|
|
234
|
-
} = props
|
|
235
|
-
|
|
236
|
-
const { hidden } = plot
|
|
237
|
-
const styleByKey = useMemo(() => new Map(series.map((s) => [s.key, s])), [series])
|
|
238
|
-
|
|
239
|
-
const band = useBandPlot<T>({
|
|
240
|
-
data,
|
|
241
|
-
chartId,
|
|
242
|
-
getX,
|
|
243
|
-
formatX,
|
|
244
|
-
width: plot.width,
|
|
245
|
-
cursorResolution,
|
|
246
|
-
...(fold !== undefined && { fold }),
|
|
247
|
-
...(xTickValues !== undefined && { xTickValues }),
|
|
248
|
-
...(marginOverride !== undefined && { margin: marginOverride }),
|
|
249
|
-
...(tooltip !== undefined && { tooltip }),
|
|
250
|
-
})
|
|
251
|
-
|
|
252
|
-
const { bands, margin, plotWidth, point, crosshairX, step, bandWidth } = band
|
|
253
|
-
const stripHeight = Math.max(plot.height - margin.top - margin.bottom, 1)
|
|
254
|
-
const hatchId = `${chartId}-band-absent`
|
|
255
|
-
if (absentState !== undefined && !styleByKey.has(absentState)) {
|
|
256
|
-
throw unknownStateError('absentState', absentState, styleByKey.keys())
|
|
257
|
-
}
|
|
258
|
-
const absentColor =
|
|
259
|
-
(absentState === undefined ? undefined : styleByKey.get(absentState)?.color) ?? VX.neutral
|
|
260
|
-
|
|
261
|
-
const rects = useMemo<ReactNode[]>(() => {
|
|
262
|
-
const out: ReactNode[] = []
|
|
263
|
-
bands.forEach((d, i) => {
|
|
264
|
-
const span = getBand(d)
|
|
265
|
-
const style = styleByKey.get(span.state)
|
|
266
|
-
const x = i * step
|
|
267
|
-
if (style === undefined) {
|
|
268
|
-
if (process.env.NODE_ENV !== 'production')
|
|
269
|
-
throw unknownStateError('BandSpan.state', span.state, styleByKey.keys())
|
|
270
|
-
out.push(
|
|
271
|
-
<rect
|
|
272
|
-
key={getX(d)}
|
|
273
|
-
{...UNKNOWN_MARK}
|
|
274
|
-
x={x}
|
|
275
|
-
y={0}
|
|
276
|
-
width={bandWidth}
|
|
277
|
-
height={stripHeight}
|
|
278
|
-
rx={1}
|
|
279
|
-
pointerEvents="none"
|
|
280
|
-
/>,
|
|
281
|
-
)
|
|
282
|
-
return
|
|
283
|
-
}
|
|
284
|
-
if (hidden.has(span.state)) return
|
|
285
|
-
// Clamped AND finite-checked. `foldedFrom` is carried by the consumer's datum, so a
|
|
286
|
-
// 0/0 on an un-folded slot arrives here as NaN — which `Math.min`/`Math.max` propagate
|
|
287
|
-
// straight into `width="NaN"`, a band that silently fails to paint.
|
|
288
|
-
// A slot whose STATE is the absent one is absent in whole — `absentState` and
|
|
289
|
-
// `absentFraction` are two ways of saying the same thing, and gating the hatch on the
|
|
290
|
-
// fraction alone meant a strip declaring `absentState` painted a flat fill while the docs,
|
|
291
|
-
// the demo and its own `<pattern>` all promised hatching. An explicit `absentFraction` still
|
|
292
|
-
// wins: a partially-covered slot in the absent state says so itself.
|
|
293
|
-
const absent =
|
|
294
|
-
span.state === absentState
|
|
295
|
-
? clampFraction(span.absentFraction ?? 1)
|
|
296
|
-
: clampFraction(span.absentFraction)
|
|
297
|
-
const measuredWidth = bandWidth * (1 - absent)
|
|
298
|
-
const hatchWidth = bandWidth - measuredWidth
|
|
299
|
-
const markerKey = span.marker?.state ?? span.state
|
|
300
|
-
const markerColor = styleByKey.get(markerKey)?.color
|
|
301
|
-
if (
|
|
302
|
-
span.marker !== undefined &&
|
|
303
|
-
markerColor === undefined &&
|
|
304
|
-
process.env.NODE_ENV !== 'production'
|
|
305
|
-
) {
|
|
306
|
-
throw unknownStateError('BandSpan.marker.state', markerKey, styleByKey.keys())
|
|
307
|
-
}
|
|
308
|
-
const inset = span.marker?.inset ?? DEFAULT_MARKER_INSET
|
|
309
|
-
out.push(
|
|
310
|
-
<g key={getX(d)}>
|
|
311
|
-
{measuredWidth > 0 && (
|
|
312
|
-
<rect
|
|
313
|
-
x={x}
|
|
314
|
-
y={0}
|
|
315
|
-
width={measuredWidth}
|
|
316
|
-
height={stripHeight}
|
|
317
|
-
rx={1}
|
|
318
|
-
fill={span.fill ?? alpha(style.color, style.fillOpacity ?? 1)}
|
|
319
|
-
pointerEvents="none"
|
|
320
|
-
/>
|
|
321
|
-
)}
|
|
322
|
-
{hatchWidth > 0 && (
|
|
323
|
-
<rect
|
|
324
|
-
x={x + measuredWidth}
|
|
325
|
-
y={0}
|
|
326
|
-
width={hatchWidth}
|
|
327
|
-
height={stripHeight}
|
|
328
|
-
rx={1}
|
|
329
|
-
fill={hatchFill(hatchId)}
|
|
330
|
-
pointerEvents="none"
|
|
331
|
-
/>
|
|
332
|
-
)}
|
|
333
|
-
{span.marker !== undefined && measuredWidth > 0 && (
|
|
334
|
-
<rect
|
|
335
|
-
{...(markerColor === undefined ? UNKNOWN_MARK : { fill: markerColor })}
|
|
336
|
-
x={x}
|
|
337
|
-
y={inset}
|
|
338
|
-
width={measuredWidth}
|
|
339
|
-
height={Math.max(stripHeight - 2 * inset, 2)}
|
|
340
|
-
rx={1}
|
|
341
|
-
pointerEvents="none"
|
|
342
|
-
/>
|
|
343
|
-
)}
|
|
344
|
-
</g>,
|
|
345
|
-
)
|
|
346
|
-
})
|
|
347
|
-
return out
|
|
348
|
-
}, [bands, getBand, getX, styleByKey, hidden, bandWidth, step, stripHeight, hatchId, absentState])
|
|
349
|
-
|
|
350
|
-
if (plotWidth <= 0 || bands.length === 0) return null
|
|
351
|
-
|
|
352
|
-
const row = point === null ? null : deriveBandRow(getBand(point), styleByKey, hidden, point)
|
|
353
|
-
|
|
354
|
-
return (
|
|
355
|
-
<>
|
|
356
|
-
<svg
|
|
357
|
-
ref={band.svgRef}
|
|
358
|
-
width={plot.width}
|
|
359
|
-
height={plot.height}
|
|
360
|
-
// `touch-action` on the plot `<svg>`: Chrome ignores it on the overlay `<rect>` (`R2C-2`).
|
|
361
|
-
style={{ touchAction: 'pan-y' }}
|
|
362
|
-
>
|
|
363
|
-
<defs>
|
|
364
|
-
<HatchPattern
|
|
365
|
-
id={hatchId}
|
|
366
|
-
color={absentColor}
|
|
367
|
-
opacity={0.7}
|
|
368
|
-
size={hatchSizeFor(bandWidth)}
|
|
369
|
-
/>
|
|
370
|
-
</defs>
|
|
371
|
-
{/* theme-allow-file basalt/hand-rolled-plot — a strip has ONE dimension: slots over a
|
|
372
|
-
category axis, no numeric y at all. `CartesianChart`'s contract is a single plot rect
|
|
373
|
-
with one or two numeric y axes and it renders `AxisLeftNumeric` unconditionally, so it
|
|
374
|
-
cannot express this shape. The plot is assembled here from the SAME parts every other
|
|
375
|
-
chart gets — `ChartFrame`, `autoMargin`, `useChartCursor`, `ChartTooltipFloat` — through
|
|
376
|
-
`useBandPlot`, which `MirroredBars` composes too rather than copying this file. */}
|
|
377
|
-
<Group left={margin.left} top={margin.top}>
|
|
378
|
-
{rects}
|
|
379
|
-
|
|
380
|
-
{crosshairX !== null && <Crosshair x={crosshairX} top={0} bottom={stripHeight} />}
|
|
381
|
-
|
|
382
|
-
<BandAxisOverlay
|
|
383
|
-
band={band}
|
|
384
|
-
height={stripHeight}
|
|
385
|
-
getX={getX}
|
|
386
|
-
formatX={formatX}
|
|
387
|
-
ariaLabel={ariaLabel}
|
|
388
|
-
/>
|
|
389
|
-
</Group>
|
|
390
|
-
</svg>
|
|
391
|
-
|
|
392
|
-
<BandTooltip band={band} tooltip={tooltip} getX={getX} hidden={hidden}>
|
|
393
|
-
{row !== null && (
|
|
394
|
-
<TooltipRow
|
|
395
|
-
color={row.color}
|
|
396
|
-
label={row.label}
|
|
397
|
-
value={row.value}
|
|
398
|
-
shape={row.shape}
|
|
399
|
-
dashed={row.dashed}
|
|
400
|
-
/>
|
|
401
|
-
)}
|
|
402
|
-
</BandTooltip>
|
|
403
|
-
</>
|
|
404
|
-
)
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
/**
|
|
408
|
-
* The strip's one derived row: the hovered band's STATE, named and formatted by its own `series`
|
|
409
|
-
* entry. A strip cannot show a row for a state it does not draw, and cannot name a state the
|
|
410
|
-
* legend does not carry — the same guarantee `deriveTooltipRows` gives a cartesian chart, over a
|
|
411
|
-
* shape that has no numeric value to derive from.
|
|
412
|
-
*/
|
|
413
|
-
function deriveBandRow<T>(
|
|
414
|
-
span: BandSpan,
|
|
415
|
-
styleByKey: ReadonlyMap<string, BandStripSeries<T>>,
|
|
416
|
-
hidden: ReadonlySet<string>,
|
|
417
|
-
datum: T,
|
|
418
|
-
): { color: string; label: string; value: string; shape: 'line' | 'bar'; dashed: boolean } | null {
|
|
419
|
-
const style = styleByKey.get(span.state)
|
|
420
|
-
// Production-only: dev threw while drawing. The row names the KEY rather than a state, so the
|
|
421
|
-
// tooltip cannot read back a state the legend does not carry.
|
|
422
|
-
if (style === undefined) {
|
|
423
|
-
return {
|
|
424
|
-
color: VX.neutral,
|
|
425
|
-
label: 'Unknown state',
|
|
426
|
-
value: span.state,
|
|
427
|
-
shape: 'bar',
|
|
428
|
-
dashed: true,
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
if (style.tooltip === false || hidden.has(span.state)) return null
|
|
432
|
-
return {
|
|
433
|
-
color: style.color,
|
|
434
|
-
label: style.label,
|
|
435
|
-
value: formatBandValue(style, datum),
|
|
436
|
-
shape: style.mark === 'line' ? 'line' : 'bar',
|
|
437
|
-
dashed: style.dash === 'dashed',
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
/**
|
|
442
|
-
* Hand-memoized: React Compiler does not process the shipped dist, so the hot kind is wrapped in
|
|
443
|
-
* `React.memo` to retain the auto-memoization it had as source (parity with `DualPanel`).
|
|
444
|
-
*/
|
|
445
|
-
const BandStripMemo = memo(BandStripInner)
|
|
446
|
-
// Without it every kind reads as `Memo` in React DevTools (audit A16) — a profiler flame
|
|
447
|
-
// graph of nine identically-named nodes names nothing.
|
|
448
|
-
BandStripMemo.displayName = 'BandStrip'
|
|
449
|
-
export const BandStrip = BandStripMemo as typeof BandStripInner
|