basalt-ui 1.41.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +46 -43
- package/CHANGELOG.md +542 -518
- package/MIGRATING.md +964 -37
- package/README.md +171 -366
- package/agent/rules/basalt-batteries.md +19 -74
- package/agent/rules/basalt-charts.md +21 -95
- package/agent/rules/basalt-controls.md +23 -131
- package/agent/rules/basalt-mantine.md +26 -99
- package/agent/rules/basalt-state.md +21 -103
- package/agent/rules/basalt-tokens.md +33 -114
- package/agent/skills/basalt-app/SKILL.md +229 -72
- package/agent/skills/basalt-charts/SKILL.md +23 -57
- package/agent/skills/basalt-design/SKILL.md +12 -70
- package/agent/templates/AGENTS-block.md.tpl +16 -26
- package/agent/templates/DESIGN.md.tpl +1 -1
- package/agent/templates/__root.tpl +9 -16
- package/agent/templates/main.tpl +21 -0
- package/agent/templates/nav.tpl +18 -0
- package/configs/oxlint-basalt.json +4 -10
- package/configs/oxlint-plugin.js +465 -844
- package/configs/oxlint-plugin.test.ts +661 -709
- package/configs/oxlint.json +10 -2
- package/dist/agent/ai-sdk-transport.d.ts +19 -7
- package/dist/agent/ai-sdk-transport.d.ts.map +1 -1
- package/dist/agent/ai-sdk-transport.js +10 -7
- package/dist/{agent-chat → agent/chat}/composer.d.ts +16 -16
- package/dist/agent/chat/composer.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/composer.js +10 -9
- package/dist/{agent-chat → agent/chat}/message-affordances.d.ts +7 -6
- package/dist/agent/chat/message-affordances.d.ts.map +1 -0
- package/dist/agent/chat/relative-time.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.d.ts +18 -16
- package/dist/agent/chat/thread-feed-row.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed-row.js +12 -11
- package/dist/{agent-chat → agent/chat}/thread-feed.d.ts +8 -8
- package/dist/agent/chat/thread-feed.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-feed.js +12 -10
- package/dist/{agent-chat → agent/chat}/thread-message.d.ts +12 -9
- package/dist/agent/chat/thread-message.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-message.js +15 -13
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.d.ts +2 -2
- package/dist/agent/chat/thread-outcome-card.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/thread-outcome-card.js +3 -3
- package/dist/{agent-chat → agent/chat}/tool-chip.d.ts +5 -5
- package/dist/agent/chat/tool-chip.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/tool-chip.js +4 -4
- package/dist/agent/chat/use-keyboard-inset.d.ts.map +1 -0
- package/dist/{agent-chat → agent/chat}/use-keyboard-inset.js +1 -1
- package/dist/{agent-chat → agent/chat}/virtualize.d.ts +7 -7
- package/dist/agent/chat/virtualize.d.ts.map +1 -0
- package/dist/agent/error.d.ts +31 -0
- package/dist/agent/error.d.ts.map +1 -0
- package/dist/agent/error.js +18 -0
- package/dist/agent/history.d.ts +2 -36
- package/dist/agent/history.d.ts.map +1 -1
- package/dist/agent/history.js +0 -32
- package/dist/agent/id.d.ts +4 -5
- package/dist/agent/id.d.ts.map +1 -1
- package/dist/agent/index.d.ts +19 -52
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -32
- package/dist/agent/outcome.d.ts +3 -14
- package/dist/agent/outcome.d.ts.map +1 -1
- package/dist/agent/outcome.js +0 -30
- package/dist/agent/part-list.d.ts +3 -3
- package/dist/agent/part-list.d.ts.map +1 -1
- package/dist/agent/parts.d.ts +23 -24
- package/dist/agent/parts.d.ts.map +1 -1
- package/dist/agent/run-committer.d.ts +23 -0
- package/dist/agent/run-committer.d.ts.map +1 -0
- package/dist/agent/run-committer.js +41 -0
- package/dist/agent/run-records.d.ts +77 -0
- package/dist/agent/run-records.d.ts.map +1 -0
- package/dist/agent/run-records.js +69 -0
- package/dist/agent/thread.d.ts +23 -47
- package/dist/agent/thread.d.ts.map +1 -1
- package/dist/agent/thread.js +3 -134
- package/dist/agent/transport.d.ts +6 -69
- package/dist/agent/transport.d.ts.map +1 -1
- package/dist/agent/transport.js +0 -18
- package/dist/agent/use-agent-thread-runs.d.ts +63 -26
- package/dist/agent/use-agent-thread-runs.d.ts.map +1 -1
- package/dist/agent/use-agent-thread-runs.js +202 -66
- package/dist/charts/BandStrip.d.ts +46 -0
- package/dist/charts/BandStrip.d.ts.map +1 -0
- package/dist/charts/BandStrip.js +151 -0
- package/dist/charts/Bars.d.ts +19 -0
- package/dist/charts/Bars.d.ts.map +1 -0
- package/dist/charts/Bars.js +77 -0
- package/dist/charts/CartesianChart.d.ts +57 -0
- package/dist/charts/CartesianChart.d.ts.map +1 -0
- package/dist/charts/CartesianChart.js +121 -0
- package/dist/charts/ChartCard.d.ts +34 -0
- package/dist/charts/ChartCard.d.ts.map +1 -0
- package/dist/charts/ChartCard.js +115 -0
- package/dist/charts/Donut.d.ts +25 -0
- package/dist/charts/Donut.d.ts.map +1 -0
- package/dist/charts/Donut.js +191 -0
- package/dist/charts/DualPanel.d.ts +47 -0
- package/dist/charts/DualPanel.d.ts.map +1 -0
- package/dist/charts/DualPanel.js +214 -0
- package/dist/charts/Heatmap.d.ts +41 -0
- package/dist/charts/Heatmap.d.ts.map +1 -0
- package/dist/charts/Heatmap.js +216 -0
- package/dist/charts/Lines.d.ts +11 -0
- package/dist/charts/Lines.d.ts.map +1 -0
- package/dist/charts/Lines.js +114 -0
- package/dist/charts/MirroredBars.d.ts +44 -0
- package/dist/charts/MirroredBars.d.ts.map +1 -0
- package/dist/charts/MirroredBars.js +190 -0
- package/dist/charts/Sparkline.d.ts +22 -0
- package/dist/charts/Sparkline.d.ts.map +1 -0
- package/dist/charts/Sparkline.js +129 -0
- package/dist/charts/StackedArea.d.ts +15 -0
- package/dist/charts/StackedArea.d.ts.map +1 -0
- package/dist/charts/StackedArea.js +46 -0
- package/dist/charts/box.d.ts +38 -0
- package/dist/charts/box.d.ts.map +1 -0
- package/dist/charts/box.js +72 -0
- package/dist/charts/card-context.d.ts +3 -0
- package/dist/charts/card-context.d.ts.map +1 -0
- package/dist/charts/card-context.js +7 -0
- package/dist/charts/chart-box.module.css +64 -0
- package/{src/content/article-card.module.css.d.ts → dist/charts/chart-box.module.css.d.ts} +5 -9
- package/dist/charts/chart-card.module.css +25 -0
- package/dist/{dashboard/widget-grid.module.css.d.ts → charts/chart-card.module.css.d.ts} +1 -3
- package/dist/charts/chart-legend.module.css +38 -0
- package/{src/dashboard/widget-grid.module.css.d.ts → dist/charts/chart-legend.module.css.d.ts} +3 -3
- package/dist/charts/compile.d.ts +62 -0
- package/dist/charts/compile.d.ts.map +1 -0
- package/dist/charts/compile.js +386 -0
- package/dist/charts/cursor.d.ts +50 -0
- package/dist/charts/cursor.d.ts.map +1 -0
- package/dist/charts/cursor.js +157 -0
- package/dist/charts/curves.d.ts +12 -0
- package/dist/charts/curves.d.ts.map +1 -0
- package/dist/charts/curves.js +86 -0
- package/dist/charts/donut.module.css +54 -0
- package/dist/{content/article-card.module.css.d.ts → charts/donut.module.css.d.ts} +2 -9
- package/dist/charts/host.d.ts +17 -0
- package/dist/charts/host.d.ts.map +1 -0
- package/dist/charts/host.js +35 -0
- package/dist/charts/index.d.ts +18 -53
- package/dist/charts/index.d.ts.map +1 -1
- package/dist/charts/index.js +17 -189
- package/dist/charts/legend.d.ts +23 -0
- package/dist/charts/legend.d.ts.map +1 -0
- package/dist/charts/legend.js +160 -0
- package/dist/charts/marks.d.ts +25 -0
- package/dist/charts/marks.d.ts.map +1 -0
- package/dist/charts/marks.js +128 -0
- package/dist/charts/panel.d.ts +56 -0
- package/dist/charts/panel.d.ts.map +1 -0
- package/dist/charts/panel.js +123 -0
- package/dist/charts/scales.d.ts +44 -0
- package/dist/charts/scales.d.ts.map +1 -0
- package/dist/charts/scales.js +163 -0
- package/dist/charts/sizing.d.ts +12 -0
- package/dist/charts/sizing.d.ts.map +1 -0
- package/dist/charts/sizing.js +33 -0
- package/dist/charts/state.d.ts +17 -0
- package/dist/charts/state.d.ts.map +1 -0
- package/dist/charts/state.js +53 -0
- package/dist/charts/theme.d.ts +38 -19
- package/dist/charts/theme.d.ts.map +1 -1
- package/dist/charts/theme.js +48 -26
- package/dist/charts/types.d.ts +227 -0
- package/dist/charts/types.d.ts.map +1 -0
- package/dist/charts/types.js +4 -0
- package/dist/cli/audit-allows.d.ts +4 -17
- package/dist/cli/audit-allows.d.ts.map +1 -1
- package/dist/cli/config.d.ts +18 -43
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +6 -0
- package/dist/cli/doctor-upgrade.d.ts +43 -0
- package/dist/cli/doctor-upgrade.d.ts.map +1 -0
- package/dist/cli/doctor-upgrade.js +314 -0
- package/dist/cli/doctor.d.ts +14 -29
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +58 -9
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -4
- package/dist/cli/index.d.ts +48 -172
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +39 -132
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +43 -37
- package/dist/cli/sync.d.ts +5 -21
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +4 -23
- package/dist/cli/tokens-css.d.ts +7 -28
- package/dist/cli/tokens-css.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.d.ts.map +1 -1
- package/dist/commands/ShortcutsHelp.js +4 -5
- package/dist/commands/define-commands.d.ts +15 -31
- package/dist/commands/define-commands.d.ts.map +1 -1
- package/dist/commands/define-commands.js +1 -11
- package/dist/commands/define-overlays.d.ts +5 -19
- package/dist/commands/define-overlays.d.ts.map +1 -1
- package/dist/commands/define-overlays.js +3 -11
- package/dist/commands/index.d.ts +10 -40
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +9 -46
- package/dist/{notifications → commands/notifications}/bell.d.ts +1 -1
- package/dist/commands/notifications/bell.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.d.ts +2 -2
- package/dist/commands/notifications/center.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/center.js +2 -2
- package/dist/{notifications → commands/notifications}/define-notifications.d.ts +3 -3
- package/dist/commands/notifications/define-notifications.d.ts.map +1 -0
- package/dist/commands/notifications/notify.d.ts +44 -0
- package/dist/commands/notifications/notify.d.ts.map +1 -0
- package/dist/commands/notifications/notify.js +79 -0
- package/dist/{notifications → commands/notifications}/store.d.ts +2 -0
- package/dist/commands/notifications/store.d.ts.map +1 -0
- package/dist/{notifications → commands/notifications}/store.js +4 -0
- package/dist/commands/projectors.d.ts +1 -131
- package/dist/commands/projectors.d.ts.map +1 -1
- package/dist/commands/projectors.js +2 -73
- package/dist/commands/shell-bridge.d.ts +3 -3
- package/dist/commands/shortcut-format.d.ts +5 -4
- package/dist/commands/shortcut-format.d.ts.map +1 -1
- package/dist/common/errors.d.ts +3 -3
- package/dist/common/use-measured-widths.d.ts.map +1 -1
- package/dist/common/use-measured-widths.js +5 -3
- package/dist/common/validate.d.ts +2 -2
- package/dist/content/article-layout.d.ts.map +1 -1
- package/dist/content/article-layout.js +3 -3
- package/dist/content/article-model.d.ts +1 -46
- package/dist/content/article-model.d.ts.map +1 -1
- package/dist/content/article-model.js +1 -29
- package/dist/content/index.d.ts +11 -41
- package/dist/content/index.d.ts.map +1 -1
- package/dist/content/index.js +3 -35
- package/dist/content/markdown.d.ts +1 -1
- package/dist/content/markdown.d.ts.map +1 -1
- package/dist/content/markdown.js +1 -1
- package/dist/content/mermaid.d.ts.map +1 -1
- package/dist/content/mermaid.js +7 -7
- package/dist/content/slug.d.ts +1 -8
- package/dist/content/slug.d.ts.map +1 -1
- package/dist/content/slug.js +1 -8
- package/dist/content/url-hardening.d.ts +2 -2
- package/dist/content/url-hardening.d.ts.map +1 -1
- package/dist/content/url-hardening.js +2 -0
- package/dist/controls/actions.d.ts +16 -1
- package/dist/controls/actions.d.ts.map +1 -1
- package/dist/controls/enum-filter.d.ts +1 -1
- package/dist/controls/enum-filter.d.ts.map +1 -1
- package/dist/controls/filter-context.d.ts.map +1 -1
- package/dist/controls/filter-context.js +3 -1
- package/dist/controls/filter-set.js +4 -6
- package/dist/controls/form-layout.d.ts +1 -1
- package/dist/controls/form-layout.d.ts.map +1 -1
- package/dist/controls/form-layout.js +1 -1
- package/dist/controls/glyphs.d.ts +0 -2
- package/dist/controls/glyphs.d.ts.map +1 -1
- package/dist/controls/glyphs.js +0 -7
- package/dist/controls/index.d.ts +12 -17
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +5 -39
- package/dist/controls/multi-select-filter.d.ts +4 -3
- package/dist/controls/multi-select-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.d.ts +4 -3
- package/dist/controls/number-filter.d.ts.map +1 -1
- package/dist/controls/number-filter.js +3 -1
- package/dist/controls/range-filter.d.ts +4 -3
- package/dist/controls/range-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.d.ts +4 -3
- package/dist/controls/search-filter.d.ts.map +1 -1
- package/dist/controls/search-filter.js +19 -14
- package/dist/controls/select-filter.d.ts +4 -3
- package/dist/controls/select-filter.d.ts.map +1 -1
- package/dist/controls/sync-button.d.ts.map +1 -1
- package/dist/controls/sync-button.js +12 -15
- package/dist/controls/toggle-filter.d.ts +4 -3
- package/dist/controls/toggle-filter.d.ts.map +1 -1
- package/dist/controls/uncontrolled.d.ts +12 -0
- package/dist/controls/uncontrolled.d.ts.map +1 -0
- package/dist/controls/view-tabs.d.ts +2 -2
- package/dist/controls/view-tabs.d.ts.map +1 -1
- package/dist/controls-dates/index.d.ts +0 -1
- package/dist/controls-dates/index.d.ts.map +1 -1
- package/dist/dashboard/index.d.ts +7 -9
- package/dist/dashboard/index.d.ts.map +1 -1
- package/dist/dashboard/index.js +3 -23
- package/dist/dashboard/section.d.ts +4 -6
- package/dist/dashboard/section.d.ts.map +1 -1
- package/dist/dashboard/section.js +4 -10
- package/dist/dashboard/stat-card.d.ts +4 -4
- package/dist/dashboard/stat-card.d.ts.map +1 -1
- package/dist/dashboard/stat-card.js +3 -3
- package/dist/dashboard/widget-header.module.css +9 -7
- package/dist/dev-dock.d.ts.map +1 -1
- package/dist/dev-dock.js +6 -1
- package/dist/format/date.d.ts +0 -34
- package/dist/format/date.d.ts.map +1 -1
- package/dist/format/date.js +0 -54
- package/dist/format/index.d.ts +7 -22
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +2 -43
- package/dist/format/number.d.ts +3 -14
- package/dist/format/number.d.ts.map +1 -1
- package/dist/format/number.js +0 -13
- package/dist/format/shared.d.ts +2 -3
- package/dist/format/shared.d.ts.map +1 -1
- package/dist/forms/index.d.ts +0 -11
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +1 -14
- package/dist/guard/index.d.ts +6 -21
- package/dist/guard/index.d.ts.map +1 -1
- package/dist/guard/index.js +27 -115
- package/dist/guard/types.d.ts +7 -18
- package/dist/guard/types.d.ts.map +1 -1
- package/dist/index.d.ts +16 -48
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -117
- package/dist/provider/create-router.d.ts +44 -0
- package/dist/provider/create-router.d.ts.map +1 -0
- package/dist/provider/create-router.js +62 -0
- package/dist/provider/hotkeys.d.ts +8 -0
- package/dist/provider/hotkeys.d.ts.map +1 -0
- package/dist/provider/hotkeys.js +50 -0
- package/dist/provider/index.d.ts +33 -110
- package/dist/provider/index.d.ts.map +1 -1
- package/dist/provider/index.js +182 -82
- package/dist/provider/lab-theme.d.ts.map +1 -1
- package/dist/provider/route-transition.d.ts +76 -0
- package/dist/provider/route-transition.d.ts.map +1 -0
- package/dist/provider/route-transition.js +98 -0
- package/dist/provider/spotlight-actions.d.ts +10 -0
- package/dist/provider/spotlight-actions.d.ts.map +1 -0
- package/dist/provider/spotlight-actions.js +55 -0
- package/dist/provider/test-router.d.ts +6 -0
- package/dist/provider/test-router.d.ts.map +1 -0
- package/dist/provider/test-router.js +18 -0
- package/dist/query-client.d.ts +4 -20
- package/dist/query-client.d.ts.map +1 -1
- package/dist/query-client.js +2 -2
- package/dist/router-tanstack/index.d.ts +18 -64
- package/dist/router-tanstack/index.d.ts.map +1 -1
- package/dist/router-tanstack/index.js +2 -16
- package/dist/router-tanstack/nav.d.ts +12 -1
- package/dist/router-tanstack/nav.d.ts.map +1 -1
- package/dist/router-tanstack/nav.js +8 -1
- package/dist/router-tanstack/search-store.d.ts +1 -1
- package/dist/router-tanstack/search-store.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.d.ts +8 -9
- package/dist/router-tanstack/use-nav.d.ts.map +1 -1
- package/dist/router-tanstack/use-nav.js +20 -1
- package/dist/shell/app-mobile-nav.d.ts.map +1 -1
- package/dist/shell/app-sidebar.js +1 -1
- package/dist/shell/index.d.ts +31 -10
- package/dist/shell/index.d.ts.map +1 -1
- package/dist/shell/index.js +14 -3
- package/dist/shell/page-aside.d.ts +2 -2
- package/dist/shell/page-aside.d.ts.map +1 -1
- package/dist/shell/page-aside.js +31 -12
- package/dist/shell/page-bar.d.ts +2 -2
- package/dist/shell/page-bar.d.ts.map +1 -1
- package/dist/shell/page-bar.js +1 -1
- package/dist/state.d.ts +10 -12
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +4 -6
- package/dist/styles.css +107 -7
- package/dist/surfaces.d.ts +28 -103
- package/dist/surfaces.d.ts.map +1 -1
- package/dist/surfaces.js +54 -143
- package/dist/{data → table}/data-table-state.d.ts +1 -1
- package/dist/table/data-table-state.d.ts.map +1 -0
- package/dist/{data → table}/data-table-state.js +4 -3
- package/dist/{data → table}/data-table.d.ts +28 -49
- package/dist/table/data-table.d.ts.map +1 -0
- package/dist/{data → table}/data-table.js +74 -60
- package/dist/table/index.d.ts +18 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/{data/table.js → table/index.js} +1 -1
- package/dist/table/query-branch.d.ts.map +1 -0
- package/dist/table/table-features.d.ts +69 -0
- package/dist/table/table-features.d.ts.map +1 -0
- package/dist/table/table-features.js +49 -0
- package/dist/telemetry.d.ts +77 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/theme/index.d.ts +10 -21
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +3 -14
- package/dist/theme/theme-toggle.d.ts.map +1 -1
- package/dist/theme/theme-toggle.js +7 -33
- package/dist/theme/theme-toggle.module.css +30 -0
- package/dist/theme/theme-toggle.module.css.d.ts +10 -0
- package/dist/theme-lab/derive-controls.d.ts.map +1 -1
- package/dist/theme-lab/derive-controls.js +5 -3
- package/dist/theme-lab/derive-state.d.ts.map +1 -1
- package/dist/theme-lab/derive-state.js +2 -1
- package/dist/tokens/core.d.ts +360 -0
- package/dist/tokens/core.d.ts.map +1 -0
- package/dist/tokens/core.js +708 -0
- package/dist/tokens/derive.d.ts +1 -1
- package/dist/tokens/derive.d.ts.map +1 -1
- package/dist/tokens/index.d.ts +5 -373
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +8 -700
- package/dist/tokens/palette.d.ts +2 -6
- package/dist/tokens/palette.d.ts.map +1 -1
- package/dist/tokens/palette.js +1 -4
- package/dist/vite.d.ts +4 -3
- package/dist/vite.d.ts.map +1 -1
- package/llms.txt +43 -85
- package/package.json +80 -173
- package/src/agent/ai-sdk-transport.ts +57 -37
- package/src/{agent-chat → agent/chat}/composer.tsx +29 -30
- package/src/{agent-chat → agent/chat}/message-affordances.ts +8 -5
- package/src/{agent-chat → agent/chat}/thread-feed-row.tsx +30 -35
- package/src/{agent-chat → agent/chat}/thread-feed.tsx +40 -35
- package/src/{agent-chat → agent/chat}/thread-message.tsx +37 -35
- package/src/{agent-chat → agent/chat}/thread-outcome-card.tsx +5 -5
- package/src/{agent-chat → agent/chat}/tool-chip.tsx +12 -12
- package/src/{agent-chat → agent/chat}/use-keyboard-inset.ts +1 -1
- package/src/{agent-chat → agent/chat}/virtualize.ts +5 -5
- package/src/agent/error.ts +43 -0
- package/src/agent/history.ts +2 -107
- package/src/agent/id.ts +4 -5
- package/src/agent/index.ts +23 -112
- package/src/agent/outcome.ts +3 -56
- package/src/agent/part-list.tsx +3 -3
- package/src/agent/parts.ts +23 -22
- package/src/agent/run-committer.ts +64 -0
- package/src/agent/run-records.ts +147 -0
- package/src/agent/thread.ts +24 -231
- package/src/agent/transport.ts +6 -96
- package/src/agent/use-agent-thread-runs.ts +364 -199
- package/src/charts/BandStrip.tsx +276 -0
- package/src/charts/Bars.tsx +141 -0
- package/src/charts/CartesianChart.tsx +206 -0
- package/src/charts/ChartCard.tsx +178 -0
- package/src/charts/Donut.tsx +256 -0
- package/src/charts/DualPanel.tsx +326 -0
- package/src/charts/Heatmap.tsx +282 -0
- package/src/charts/Lines.tsx +151 -0
- package/src/charts/MirroredBars.tsx +303 -0
- package/src/charts/Sparkline.tsx +176 -0
- package/src/charts/StackedArea.tsx +80 -0
- package/src/charts/box.tsx +96 -0
- package/src/charts/card-context.ts +11 -0
- package/src/charts/chart-box.module.css +64 -0
- package/src/charts/chart-box.module.css.d.ts +12 -0
- package/src/charts/chart-card.module.css +25 -0
- package/src/charts/chart-card.module.css.d.ts +8 -0
- package/src/charts/chart-legend.module.css +38 -0
- package/src/charts/chart-legend.module.css.d.ts +10 -0
- package/src/charts/compile.ts +585 -0
- package/src/charts/cursor.ts +282 -0
- package/src/charts/curves.ts +111 -0
- package/src/charts/donut.module.css +54 -0
- package/src/charts/donut.module.css.d.ts +9 -0
- package/src/charts/host.tsx +60 -0
- package/src/charts/index.ts +41 -178
- package/src/charts/legend.tsx +204 -0
- package/src/charts/marks.ts +201 -0
- package/src/charts/panel.tsx +227 -0
- package/src/charts/scales.ts +237 -0
- package/src/charts/sizing.ts +47 -0
- package/src/charts/state.tsx +80 -0
- package/src/charts/theme.ts +65 -0
- package/src/charts/types.ts +242 -0
- package/src/cli/audit-allows.ts +8 -30
- package/src/cli/config.ts +26 -43
- package/src/cli/doctor-upgrade.ts +457 -0
- package/src/cli/doctor.ts +89 -72
- package/src/cli/help.ts +2 -4
- package/src/cli/index.ts +100 -384
- package/src/cli/init.ts +60 -51
- package/src/cli/sync.ts +13 -68
- package/src/cli/tokens-css.ts +7 -28
- package/src/commands/ShortcutsHelp.tsx +8 -9
- package/src/commands/define-commands.ts +16 -43
- package/src/commands/define-overlays.ts +12 -36
- package/src/commands/index.ts +11 -94
- package/src/{notifications → commands/notifications}/bell.tsx +2 -2
- package/src/{notifications → commands/notifications}/center.tsx +7 -5
- package/src/{notifications → commands/notifications}/define-notifications.ts +3 -3
- package/src/commands/notifications/notify.tsx +158 -0
- package/src/{notifications → commands/notifications}/store.ts +10 -2
- package/src/commands/projectors.ts +5 -225
- package/src/commands/shell-bridge.ts +5 -5
- package/src/commands/shortcut-format.ts +5 -4
- package/src/common/errors.ts +3 -3
- package/src/common/use-measured-widths.ts +6 -3
- package/src/common/validate.ts +2 -2
- package/src/content/article-layout.tsx +37 -38
- package/src/content/article-model.ts +1 -84
- package/src/content/index.ts +12 -83
- package/src/content/markdown.tsx +4 -3
- package/src/content/mermaid.tsx +9 -7
- package/src/content/slug.ts +1 -16
- package/src/content/url-hardening.ts +8 -2
- package/src/controls/actions.tsx +24 -1
- package/src/controls/enum-filter.tsx +1 -1
- package/src/controls/filter-context.tsx +3 -1
- package/src/controls/filter-set.tsx +5 -7
- package/src/controls/form-layout.tsx +2 -2
- package/src/controls/glyphs.tsx +0 -10
- package/src/controls/index.ts +13 -64
- package/src/controls/multi-select-filter.tsx +5 -4
- package/src/controls/number-filter.tsx +8 -4
- package/src/controls/range-filter.tsx +5 -4
- package/src/controls/search-filter.tsx +25 -19
- package/src/controls/select-filter.tsx +5 -4
- package/src/controls/sync-button.tsx +18 -20
- package/src/controls/toggle-filter.tsx +5 -4
- package/src/controls/uncontrolled.ts +12 -0
- package/src/controls/view-tabs.tsx +3 -3
- package/src/controls-dates/date-range-picker.tsx +1 -1
- package/src/controls-dates/index.ts +0 -1
- package/src/dashboard/index.ts +7 -48
- package/src/dashboard/section.tsx +11 -40
- package/src/dashboard/stat-card.tsx +14 -16
- package/src/dashboard/widget-header.module.css +9 -7
- package/src/dev-dock.tsx +14 -27
- package/src/format/date.ts +2 -92
- package/src/format/index.ts +7 -53
- package/src/format/number.ts +3 -26
- package/src/format/shared.ts +2 -3
- package/src/forms/index.ts +0 -23
- package/src/guard/index.ts +36 -191
- package/src/guard/types.ts +6 -19
- package/src/index.ts +30 -282
- package/src/provider/create-router.tsx +138 -0
- package/src/provider/hotkeys.ts +70 -0
- package/src/provider/index.tsx +260 -230
- package/src/provider/lab-theme.ts +3 -2
- package/src/provider/route-transition.ts +199 -0
- package/src/provider/spotlight-actions.tsx +69 -0
- package/src/provider/test-router.tsx +25 -0
- package/src/query-client.ts +4 -22
- package/src/router-tanstack/index.ts +18 -112
- package/src/router-tanstack/nav.ts +28 -2
- package/src/router-tanstack/search-store.ts +9 -2
- package/src/router-tanstack/use-nav.ts +47 -13
- package/src/shell/app-mobile-nav.tsx +3 -2
- package/src/shell/app-sidebar.tsx +1 -1
- package/src/shell/aside-docking.ts +1 -1
- package/src/shell/index.tsx +61 -20
- package/src/shell/page-aside.tsx +47 -23
- package/src/shell/page-bar.tsx +3 -3
- package/src/shell/page-title.tsx +1 -1
- package/src/state.ts +11 -37
- package/src/styles.css +107 -7
- package/src/surfaces.ts +56 -151
- package/src/{data → table}/data-table-state.ts +5 -4
- package/src/{data → table}/data-table.tsx +170 -161
- package/src/table/index.ts +18 -0
- package/src/table/table-features.ts +102 -0
- package/src/telemetry.ts +110 -0
- package/src/theme/index.ts +22 -47
- package/src/theme/theme-toggle.module.css +30 -0
- package/src/theme/theme-toggle.module.css.d.ts +10 -0
- package/src/theme/theme-toggle.tsx +15 -43
- package/src/theme-lab/derive-controls.tsx +5 -3
- package/src/theme-lab/derive-state.ts +2 -1
- package/src/tokens/core.ts +1163 -0
- package/src/tokens/derive.ts +1 -1
- package/src/tokens/index.ts +14 -1181
- package/src/tokens/palette.ts +3 -7
- package/src/vite.ts +3 -3
- package/agent/templates/query-client.ts.tpl +0 -26
- package/dist/agent/adapter.d.ts +0 -150
- package/dist/agent/adapter.d.ts.map +0 -1
- package/dist/agent/adapter.js +0 -482
- package/dist/agent/use-agent-stream.d.ts +0 -35
- package/dist/agent/use-agent-stream.d.ts.map +0 -1
- package/dist/agent/use-agent-stream.js +0 -59
- package/dist/agent-chat/composer.d.ts.map +0 -1
- package/dist/agent-chat/index.d.ts +0 -31
- package/dist/agent-chat/index.d.ts.map +0 -1
- package/dist/agent-chat/index.js +0 -19
- package/dist/agent-chat/message-affordances.d.ts.map +0 -1
- package/dist/agent-chat/relative-time.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.d.ts +0 -28
- package/dist/agent-chat/thread-detail-panel.d.ts.map +0 -1
- package/dist/agent-chat/thread-detail-panel.js +0 -115
- package/dist/agent-chat/thread-feed-row.d.ts.map +0 -1
- package/dist/agent-chat/thread-feed.d.ts.map +0 -1
- package/dist/agent-chat/thread-message.d.ts.map +0 -1
- package/dist/agent-chat/thread-outcome-card.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.d.ts +0 -44
- package/dist/agent-chat/thread-workspace.d.ts.map +0 -1
- package/dist/agent-chat/thread-workspace.js +0 -153
- package/dist/agent-chat/tool-chip.d.ts.map +0 -1
- package/dist/agent-chat/use-keyboard-inset.d.ts.map +0 -1
- package/dist/agent-chat/virtualize.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.d.ts +0 -75
- package/dist/charts/cursor/resolve.d.ts.map +0 -1
- package/dist/charts/cursor/resolve.js +0 -91
- package/dist/charts/cursor/scope.d.ts +0 -20
- package/dist/charts/cursor/scope.d.ts.map +0 -1
- package/dist/charts/cursor/scope.js +0 -20
- package/dist/charts/cursor/store.d.ts +0 -35
- package/dist/charts/cursor/store.d.ts.map +0 -1
- package/dist/charts/cursor/store.js +0 -25
- package/dist/charts/cursor/touch-pin.d.ts +0 -45
- package/dist/charts/cursor/touch-pin.d.ts.map +0 -1
- package/dist/charts/cursor/touch-pin.js +0 -79
- package/dist/charts/hooks/use-discrete-cursor.d.ts +0 -66
- package/dist/charts/hooks/use-discrete-cursor.d.ts.map +0 -1
- package/dist/charts/hooks/use-discrete-cursor.js +0 -198
- package/dist/charts/hooks/use-hysteresis.d.ts +0 -18
- package/dist/charts/hooks/use-hysteresis.d.ts.map +0 -1
- package/dist/charts/hooks/use-hysteresis.js +0 -12
- package/dist/charts/hooks/useBandPlot.d.ts +0 -145
- package/dist/charts/hooks/useBandPlot.d.ts.map +0 -1
- package/dist/charts/hooks/useBandPlot.js +0 -178
- package/dist/charts/hooks/useChartCursor.d.ts +0 -75
- package/dist/charts/hooks/useChartCursor.d.ts.map +0 -1
- package/dist/charts/hooks/useChartCursor.js +0 -200
- package/dist/charts/hooks/useChartSize.d.ts +0 -29
- package/dist/charts/hooks/useChartSize.d.ts.map +0 -1
- package/dist/charts/hooks/useChartSize.js +0 -8
- package/dist/charts/kinds/BandStrip.d.ts +0 -132
- package/dist/charts/kinds/BandStrip.d.ts.map +0 -1
- package/dist/charts/kinds/BandStrip.js +0 -241
- package/dist/charts/kinds/Bars.d.ts +0 -141
- package/dist/charts/kinds/Bars.d.ts.map +0 -1
- package/dist/charts/kinds/Bars.js +0 -343
- package/dist/charts/kinds/Donut.d.ts +0 -77
- package/dist/charts/kinds/Donut.d.ts.map +0 -1
- package/dist/charts/kinds/Donut.js +0 -245
- package/dist/charts/kinds/DualPanel.d.ts +0 -111
- package/dist/charts/kinds/DualPanel.d.ts.map +0 -1
- package/dist/charts/kinds/DualPanel.js +0 -471
- package/dist/charts/kinds/Heatmap.d.ts +0 -85
- package/dist/charts/kinds/Heatmap.d.ts.map +0 -1
- package/dist/charts/kinds/Heatmap.js +0 -243
- package/dist/charts/kinds/MirroredBars.d.ts +0 -98
- package/dist/charts/kinds/MirroredBars.d.ts.map +0 -1
- package/dist/charts/kinds/MirroredBars.js +0 -292
- package/dist/charts/kinds/MultiLine.d.ts +0 -87
- package/dist/charts/kinds/MultiLine.d.ts.map +0 -1
- package/dist/charts/kinds/MultiLine.js +0 -176
- package/dist/charts/kinds/StackedArea.d.ts +0 -73
- package/dist/charts/kinds/StackedArea.d.ts.map +0 -1
- package/dist/charts/kinds/StackedArea.js +0 -135
- package/dist/charts/kinds/ZonedLine.d.ts +0 -97
- package/dist/charts/kinds/ZonedLine.d.ts.map +0 -1
- package/dist/charts/kinds/ZonedLine.js +0 -155
- package/dist/charts/kinds/band-chrome.d.ts +0 -31
- package/dist/charts/kinds/band-chrome.d.ts.map +0 -1
- package/dist/charts/kinds/band-chrome.js +0 -71
- package/dist/charts/kinds/donut-layout.d.ts +0 -47
- package/dist/charts/kinds/donut-layout.d.ts.map +0 -1
- package/dist/charts/kinds/donut-layout.js +0 -52
- package/dist/charts/layout/auto-margin.d.ts +0 -122
- package/dist/charts/layout/auto-margin.d.ts.map +0 -1
- package/dist/charts/layout/auto-margin.js +0 -81
- package/dist/charts/layout/end-labels.d.ts +0 -64
- package/dist/charts/layout/end-labels.d.ts.map +0 -1
- package/dist/charts/layout/end-labels.js +0 -76
- package/dist/charts/layout/log-ticks.d.ts +0 -27
- package/dist/charts/layout/log-ticks.d.ts.map +0 -1
- package/dist/charts/layout/log-ticks.js +0 -42
- package/dist/charts/primitives/AreaGradient.d.ts +0 -18
- package/dist/charts/primitives/AreaGradient.d.ts.map +0 -1
- package/dist/charts/primitives/AreaGradient.js +0 -13
- package/dist/charts/primitives/Axes.d.ts +0 -83
- package/dist/charts/primitives/Axes.d.ts.map +0 -1
- package/dist/charts/primitives/Axes.js +0 -168
- package/dist/charts/primitives/CartesianChart.d.ts +0 -257
- package/dist/charts/primitives/CartesianChart.d.ts.map +0 -1
- package/dist/charts/primitives/CartesianChart.js +0 -549
- package/dist/charts/primitives/ChartCard.d.ts +0 -66
- package/dist/charts/primitives/ChartCard.d.ts.map +0 -1
- package/dist/charts/primitives/ChartCard.js +0 -143
- package/dist/charts/primitives/ChartFrame.d.ts +0 -156
- package/dist/charts/primitives/ChartFrame.d.ts.map +0 -1
- package/dist/charts/primitives/ChartFrame.js +0 -241
- package/dist/charts/primitives/ChartLegend.d.ts +0 -67
- package/dist/charts/primitives/ChartLegend.d.ts.map +0 -1
- package/dist/charts/primitives/ChartLegend.js +0 -292
- package/dist/charts/primitives/ChartPending.d.ts +0 -113
- package/dist/charts/primitives/ChartPending.d.ts.map +0 -1
- package/dist/charts/primitives/ChartPending.js +0 -117
- package/dist/charts/primitives/ChartTooltip.d.ts +0 -59
- package/dist/charts/primitives/ChartTooltip.d.ts.map +0 -1
- package/dist/charts/primitives/ChartTooltip.js +0 -197
- package/dist/charts/primitives/Crosshair.d.ts +0 -26
- package/dist/charts/primitives/Crosshair.d.ts.map +0 -1
- package/dist/charts/primitives/Crosshair.js +0 -23
- package/dist/charts/primitives/HatchPattern.d.ts +0 -31
- package/dist/charts/primitives/HatchPattern.d.ts.map +0 -1
- package/dist/charts/primitives/HatchPattern.js +0 -31
- package/dist/charts/primitives/HoverOverlay.d.ts +0 -45
- package/dist/charts/primitives/HoverOverlay.d.ts.map +0 -1
- package/dist/charts/primitives/HoverOverlay.js +0 -72
- package/dist/charts/primitives/HoverOverlay.module.css +0 -13
- package/dist/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/dist/charts/primitives/XZoneRects.d.ts +0 -54
- package/dist/charts/primitives/XZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/XZoneRects.js +0 -65
- package/dist/charts/primitives/ZoneRects.d.ts +0 -38
- package/dist/charts/primitives/ZoneRects.d.ts.map +0 -1
- package/dist/charts/primitives/ZoneRects.js +0 -30
- package/dist/charts/primitives/chart-card-context.d.ts +0 -33
- package/dist/charts/primitives/chart-card-context.d.ts.map +0 -1
- package/dist/charts/primitives/chart-card-context.js +0 -18
- package/dist/charts/primitives/chart-frame-layout.d.ts +0 -185
- package/dist/charts/primitives/chart-frame-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-frame-layout.js +0 -175
- package/dist/charts/primitives/chart-layout.d.ts +0 -112
- package/dist/charts/primitives/chart-layout.d.ts.map +0 -1
- package/dist/charts/primitives/chart-layout.js +0 -175
- package/dist/charts/primitives/chart-tier.d.ts +0 -16
- package/dist/charts/primitives/chart-tier.d.ts.map +0 -1
- package/dist/charts/primitives/chart-tier.js +0 -44
- package/dist/charts/primitives/legend-disclosure.d.ts +0 -27
- package/dist/charts/primitives/legend-disclosure.d.ts.map +0 -1
- package/dist/charts/primitives/legend-disclosure.js +0 -153
- package/dist/charts/series.d.ts +0 -189
- package/dist/charts/series.d.ts.map +0 -1
- package/dist/charts/series.js +0 -84
- package/dist/charts/sparklines/BarSparkline.d.ts +0 -37
- package/dist/charts/sparklines/BarSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/BarSparkline.js +0 -53
- package/dist/charts/sparklines/LineSparkline.d.ts +0 -15
- package/dist/charts/sparklines/LineSparkline.d.ts.map +0 -1
- package/dist/charts/sparklines/LineSparkline.js +0 -51
- package/dist/charts/sparklines/index.d.ts +0 -3
- package/dist/charts/sparklines/index.d.ts.map +0 -1
- package/dist/charts/sparklines/index.js +0 -6
- package/dist/charts/utils/domain.d.ts +0 -35
- package/dist/charts/utils/domain.d.ts.map +0 -1
- package/dist/charts/utils/domain.js +0 -12
- package/dist/charts/utils/format.d.ts +0 -8
- package/dist/charts/utils/format.d.ts.map +0 -1
- package/dist/charts/utils/format.js +0 -20
- package/dist/charts/utils/measure-text.d.ts +0 -25
- package/dist/charts/utils/measure-text.d.ts.map +0 -1
- package/dist/charts/utils/measure-text.js +0 -64
- package/dist/charts/utils/ticks.d.ts +0 -103
- package/dist/charts/utils/ticks.d.ts.map +0 -1
- package/dist/charts/utils/ticks.js +0 -92
- package/dist/commands/overlays-mount.d.ts +0 -122
- package/dist/commands/overlays-mount.d.ts.map +0 -1
- package/dist/commands/overlays-mount.js +0 -125
- package/dist/commands/useCommandHotkeys.d.ts +0 -14
- package/dist/commands/useCommandHotkeys.d.ts.map +0 -1
- package/dist/commands/useCommandHotkeys.js +0 -45
- package/dist/content/article-actions.d.ts +0 -39
- package/dist/content/article-actions.d.ts.map +0 -1
- package/dist/content/article-actions.js +0 -28
- package/dist/content/article-card.d.ts +0 -58
- package/dist/content/article-card.d.ts.map +0 -1
- package/dist/content/article-card.js +0 -79
- package/dist/content/article-card.module.css +0 -111
- package/dist/content/mdx.d.ts +0 -20
- package/dist/content/mdx.d.ts.map +0 -1
- package/dist/content/mdx.js +0 -64
- package/dist/controls/compare-filter.d.ts +0 -42
- package/dist/controls/compare-filter.d.ts.map +0 -1
- package/dist/controls/compare-filter.js +0 -38
- package/dist/controls/slider-control.d.ts +0 -36
- package/dist/controls/slider-control.d.ts.map +0 -1
- package/dist/controls/slider-control.js +0 -64
- package/dist/dashboard/widget-grid.d.ts +0 -27
- package/dist/dashboard/widget-grid.d.ts.map +0 -1
- package/dist/dashboard/widget-grid.js +0 -40
- package/dist/dashboard/widget-grid.module.css +0 -69
- package/dist/data/data-table-state.d.ts.map +0 -1
- package/dist/data/data-table.d.ts.map +0 -1
- package/dist/data/query-branch.d.ts.map +0 -1
- package/dist/data/table.d.ts +0 -24
- package/dist/data/table.d.ts.map +0 -1
- package/dist/data/virtual-list.d.ts +0 -133
- package/dist/data/virtual-list.d.ts.map +0 -1
- package/dist/data/virtual-list.js +0 -157
- package/dist/data/virtual.d.ts +0 -21
- package/dist/data/virtual.d.ts.map +0 -1
- package/dist/data/virtual.js +0 -4
- package/dist/forms/FormErrorSummary.d.ts +0 -30
- package/dist/forms/FormErrorSummary.d.ts.map +0 -1
- package/dist/forms/FormErrorSummary.js +0 -30
- package/dist/forms/use-field-array.d.ts +0 -60
- package/dist/forms/use-field-array.d.ts.map +0 -1
- package/dist/forms/use-field-array.js +0 -20
- package/dist/forms/use-form-draft.d.ts +0 -76
- package/dist/forms/use-form-draft.d.ts.map +0 -1
- package/dist/forms/use-form-draft.js +0 -92
- package/dist/forms/use-form-submit.d.ts +0 -88
- package/dist/forms/use-form-submit.d.ts.map +0 -1
- package/dist/forms/use-form-submit.js +0 -63
- package/dist/notifications/bell.d.ts.map +0 -1
- package/dist/notifications/center.d.ts.map +0 -1
- package/dist/notifications/define-notifications.d.ts.map +0 -1
- package/dist/notifications/index.d.ts +0 -40
- package/dist/notifications/index.d.ts.map +0 -1
- package/dist/notifications/index.js +0 -54
- package/dist/notifications/mount-guard.d.ts +0 -8
- package/dist/notifications/mount-guard.d.ts.map +0 -1
- package/dist/notifications/mount-guard.js +0 -18
- package/dist/notifications/notify.d.ts +0 -149
- package/dist/notifications/notify.d.ts.map +0 -1
- package/dist/notifications/notify.js +0 -171
- package/dist/notifications/store.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.d.ts +0 -13
- package/dist/provider/connectivity-indicator.d.ts.map +0 -1
- package/dist/provider/connectivity-indicator.js +0 -205
- package/dist/provider/connectivity-provider.d.ts +0 -7
- package/dist/provider/connectivity-provider.d.ts.map +0 -1
- package/dist/provider/connectivity-provider.js +0 -128
- package/dist/provider/connectivity-types.d.ts +0 -36
- package/dist/provider/connectivity-types.d.ts.map +0 -1
- package/dist/provider/use-connectivity.d.ts +0 -3
- package/dist/provider/use-connectivity.d.ts.map +0 -1
- package/dist/provider/use-connectivity.js +0 -14
- package/dist/query-devtools.d.ts +0 -21
- package/dist/query-devtools.d.ts.map +0 -1
- package/dist/query-devtools.js +0 -13
- package/src/agent/adapter.ts +0 -945
- package/src/agent/use-agent-stream.ts +0 -154
- package/src/agent-chat/index.ts +0 -54
- package/src/agent-chat/thread-detail-panel.tsx +0 -201
- package/src/agent-chat/thread-workspace.tsx +0 -279
- package/src/charts/cursor/resolve.ts +0 -198
- package/src/charts/cursor/scope.tsx +0 -35
- package/src/charts/cursor/store.ts +0 -58
- package/src/charts/cursor/touch-pin.ts +0 -138
- package/src/charts/hooks/use-discrete-cursor.ts +0 -335
- package/src/charts/hooks/use-hysteresis.ts +0 -26
- package/src/charts/hooks/useBandPlot.ts +0 -383
- package/src/charts/hooks/useChartCursor.ts +0 -367
- package/src/charts/hooks/useChartSize.ts +0 -35
- package/src/charts/kinds/BandStrip.tsx +0 -449
- package/src/charts/kinds/Bars.tsx +0 -589
- package/src/charts/kinds/Donut.tsx +0 -368
- package/src/charts/kinds/DualPanel.tsx +0 -712
- package/src/charts/kinds/Heatmap.tsx +0 -396
- package/src/charts/kinds/MirroredBars.tsx +0 -469
- package/src/charts/kinds/MultiLine.tsx +0 -322
- package/src/charts/kinds/StackedArea.tsx +0 -267
- package/src/charts/kinds/ZonedLine.tsx +0 -301
- package/src/charts/kinds/band-chrome.tsx +0 -91
- package/src/charts/kinds/donut-layout.ts +0 -82
- package/src/charts/layout/auto-margin.ts +0 -242
- package/src/charts/layout/end-labels.ts +0 -135
- package/src/charts/layout/log-ticks.ts +0 -90
- package/src/charts/primitives/AreaGradient.tsx +0 -26
- package/src/charts/primitives/Axes.tsx +0 -271
- package/src/charts/primitives/CartesianChart.tsx +0 -1002
- package/src/charts/primitives/ChartCard.tsx +0 -280
- package/src/charts/primitives/ChartFrame.tsx +0 -493
- package/src/charts/primitives/ChartLegend.tsx +0 -422
- package/src/charts/primitives/ChartPending.tsx +0 -243
- package/src/charts/primitives/ChartTooltip.tsx +0 -265
- package/src/charts/primitives/Crosshair.tsx +0 -43
- package/src/charts/primitives/HatchPattern.tsx +0 -55
- package/src/charts/primitives/HoverOverlay.module.css +0 -13
- package/src/charts/primitives/HoverOverlay.module.css.d.ts +0 -8
- package/src/charts/primitives/HoverOverlay.tsx +0 -109
- package/src/charts/primitives/XZoneRects.tsx +0 -132
- package/src/charts/primitives/ZoneRects.tsx +0 -67
- package/src/charts/primitives/chart-card-context.ts +0 -46
- package/src/charts/primitives/chart-frame-layout.ts +0 -430
- package/src/charts/primitives/chart-layout.ts +0 -318
- package/src/charts/primitives/chart-tier.tsx +0 -76
- package/src/charts/primitives/legend-disclosure.tsx +0 -178
- package/src/charts/series.ts +0 -276
- package/src/charts/sparklines/BarSparkline.tsx +0 -94
- package/src/charts/sparklines/LineSparkline.tsx +0 -71
- package/src/charts/sparklines/index.ts +0 -2
- package/src/charts/theme.tsx +0 -53
- package/src/charts/utils/domain.ts +0 -41
- package/src/charts/utils/format.ts +0 -19
- package/src/charts/utils/measure-text.ts +0 -109
- package/src/charts/utils/ticks.ts +0 -239
- package/src/commands/overlays-mount.tsx +0 -333
- package/src/commands/useCommandHotkeys.ts +0 -114
- package/src/content/article-actions.ts +0 -72
- package/src/content/article-card.module.css +0 -111
- package/src/content/article-card.tsx +0 -174
- package/src/content/mdx.tsx +0 -127
- package/src/controls/compare-filter.tsx +0 -81
- package/src/controls/slider-control.tsx +0 -159
- package/src/dashboard/widget-grid.module.css +0 -69
- package/src/dashboard/widget-grid.tsx +0 -146
- package/src/data/table.ts +0 -39
- package/src/data/virtual-list.tsx +0 -356
- package/src/data/virtual.ts +0 -26
- package/src/forms/FormErrorSummary.tsx +0 -71
- package/src/forms/use-field-array.ts +0 -94
- package/src/forms/use-form-draft.ts +0 -262
- package/src/forms/use-form-submit.ts +0 -199
- package/src/notifications/index.ts +0 -88
- package/src/notifications/mount-guard.ts +0 -38
- package/src/notifications/notify.tsx +0 -379
- package/src/provider/connectivity-indicator.tsx +0 -267
- package/src/provider/connectivity-provider.tsx +0 -189
- package/src/provider/connectivity-types.ts +0 -42
- package/src/provider/use-connectivity.ts +0 -26
- package/src/query-devtools.tsx +0 -40
- /package/dist/{agent-chat → agent/chat}/message-affordances.js +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/relative-time.js +0 -0
- /package/dist/{agent-chat → agent/chat}/use-keyboard-inset.d.ts +0 -0
- /package/dist/{agent-chat → agent/chat}/virtualize.js +0 -0
- /package/dist/{notifications → commands/notifications}/bell.js +0 -0
- /package/dist/{notifications → commands/notifications}/define-notifications.js +0 -0
- /package/dist/{provider/connectivity-types.js → controls/uncontrolled.js} +0 -0
- /package/dist/{data → table}/data-table.module.css +0 -0
- /package/dist/{data → table}/data-table.module.css.d.ts +0 -0
- /package/dist/{data → table}/query-branch.d.ts +0 -0
- /package/dist/{data → table}/query-branch.js +0 -0
- /package/src/{agent-chat → agent/chat}/relative-time.ts +0 -0
- /package/src/{data → table}/data-table.module.css +0 -0
- /package/src/{data → table}/data-table.module.css.d.ts +0 -0
- /package/src/{data → table}/query-branch.ts +0 -0
|
@@ -1,356 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ./data — BasaltVirtualList: a windowed virtual list over @tanstack/react-virtual,
|
|
3
|
-
* rendered with a Mantine Box scroll container.
|
|
4
|
-
* Optional peer: @tanstack/react-virtual >=3.13.26 <4. This list works on any 3.x — the floor is
|
|
5
|
-
* set by ./agent-chat's virtualize mode (see ./data/index.ts), so do not lower it.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* import { BasaltVirtualList } from 'basalt-ui/data/virtual'
|
|
9
|
-
*
|
|
10
|
-
* const items = Array.from({ length: 10_000 }, (_, i) => ({ id: i, label: `Row ${i}` }))
|
|
11
|
-
* <BasaltVirtualList
|
|
12
|
-
* items={items}
|
|
13
|
-
* height={400}
|
|
14
|
-
* renderItem={(item) => <div>{item.label}</div>}
|
|
15
|
-
* getItemKey={(item) => item.id}
|
|
16
|
-
* />
|
|
17
|
-
*/
|
|
18
|
-
import { Box, Skeleton } from '@mantine/core'
|
|
19
|
-
import { useVirtualizer } from '@tanstack/react-virtual'
|
|
20
|
-
import type { ScrollToOptions, Virtualizer } from '@tanstack/react-virtual'
|
|
21
|
-
import { useImperativeHandle, useRef } from 'react'
|
|
22
|
-
import type { ReactNode, Ref } from 'react'
|
|
23
|
-
import { cx } from '../common/props'
|
|
24
|
-
import type { BasaltProps, SlotStylesProps } from '../common/props'
|
|
25
|
-
import { BASALT_PREFIX } from '../common/errors'
|
|
26
|
-
import { HIT_COARSE } from '../common/hit-floor'
|
|
27
|
-
import { assertRequiredProps, useValidateProps } from '../common/validate'
|
|
28
|
-
import { readMediaQuery } from '../common/use-media-query'
|
|
29
|
-
import { ErrorState } from '../dashboard/query-state'
|
|
30
|
-
import type { QueryStateLike } from '../dashboard/query-state'
|
|
31
|
-
import { dataQueryBranch } from './query-branch'
|
|
32
|
-
|
|
33
|
-
// ── Props ─────────────────────────────────────────────────────────────────────
|
|
34
|
-
|
|
35
|
-
/** The two boxes `BasaltVirtualList` paints: `root` is the scroll container, `row` is each
|
|
36
|
-
* absolutely-positioned virtual item. */
|
|
37
|
-
export type BasaltVirtualListSlot = 'root' | 'row'
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Props for {@link BasaltVirtualList}.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* const props: BasaltVirtualListProps<{ id: number; label: string }> = {
|
|
44
|
-
* items: rows,
|
|
45
|
-
* height: 400,
|
|
46
|
-
* estimateSize: 48,
|
|
47
|
-
* overscan: 5,
|
|
48
|
-
* renderItem: (item, index) => <div key={item.id}>{index}: {item.label}</div>,
|
|
49
|
-
* getItemKey: (item) => item.id,
|
|
50
|
-
* }
|
|
51
|
-
*/
|
|
52
|
-
export type BasaltVirtualListProps<T> = BasaltProps &
|
|
53
|
-
SlotStylesProps<BasaltVirtualListSlot> & {
|
|
54
|
-
/** All items in the list (unsliced — virtualization is handled internally). */
|
|
55
|
-
items: T[]
|
|
56
|
-
/** Height of the scroll container. Accepts a CSS value ('400px', '60vh') or a number in px. */
|
|
57
|
-
height: number | string
|
|
58
|
-
/**
|
|
59
|
-
* Estimated row height in px (used for virtual layout before measure).
|
|
60
|
-
* @default 40
|
|
61
|
-
*/
|
|
62
|
-
estimateSize?: number
|
|
63
|
-
/**
|
|
64
|
-
* Number of items rendered beyond the visible viewport (above + below) to reduce flicker.
|
|
65
|
-
* @default 5
|
|
66
|
-
*/
|
|
67
|
-
overscan?: number
|
|
68
|
-
/**
|
|
69
|
-
* Render function for a single item. Receives the item and its list index.
|
|
70
|
-
* The returned node is placed inside an absolutely-positioned row container.
|
|
71
|
-
*/
|
|
72
|
-
renderItem: (item: T, index: number) => ReactNode
|
|
73
|
-
/**
|
|
74
|
-
* Stable key for each item, handed straight to the virtualizer's own `getItemKey` — required,
|
|
75
|
-
* not merely recommended: the previous index fallback hid stale rows across a mutation (an
|
|
76
|
-
* insert/delete shifting every index below it keeps rendering the OLD item at each shifted
|
|
77
|
-
* index until React's own reconciliation happens to catch up), silently, in the one component
|
|
78
|
-
* whose job is a long mutable list.
|
|
79
|
-
*/
|
|
80
|
-
getItemKey: (item: T, index: number) => string | number
|
|
81
|
-
/**
|
|
82
|
-
* When true, renders skeleton placeholder rows at the given height instead of the virtual item
|
|
83
|
-
* list. The scroll container is still rendered at the specified `height`. Use while async data
|
|
84
|
-
* is loading.
|
|
85
|
-
*
|
|
86
|
-
* Superseded by `query`, which resolves this branch AND the two this prop cannot express — pass
|
|
87
|
-
* both and `query` wins, with a dev warning.
|
|
88
|
-
*/
|
|
89
|
-
isLoading?: boolean
|
|
90
|
-
/**
|
|
91
|
-
* The result behind `items`, resolved into a body: pending → the skeleton rows, error with no
|
|
92
|
-
* data → an `ErrorState` inside the scroll box (the query's own `refetch` behind Retry),
|
|
93
|
-
* anything else → the rows, or `emptyState` when `items` is empty.
|
|
94
|
-
*
|
|
95
|
-
* Law C3's uniform container contract (`docs/CONTROLS-SPEC.md` §1). The list took `isLoading`
|
|
96
|
-
* and nothing else (components audit #3), so a failed fetch and a genuinely empty list rendered
|
|
97
|
-
* the same blank box — the exact false claim `QueryState` exists to delete.
|
|
98
|
-
*
|
|
99
|
-
* The container keeps its declared `height` through every branch, so the page does not jump as
|
|
100
|
-
* the state resolves.
|
|
101
|
-
*/
|
|
102
|
-
query?: QueryStateLike<unknown>
|
|
103
|
-
/**
|
|
104
|
-
* Rendered inside the scroll container when `items` is empty and nothing is pending. Omit to
|
|
105
|
-
* keep today's rendering — an empty box. Works with or without `query`.
|
|
106
|
-
*/
|
|
107
|
-
emptyState?: ReactNode
|
|
108
|
-
/**
|
|
109
|
-
* Number of skeleton rows to render when `isLoading` is true.
|
|
110
|
-
* @default 5
|
|
111
|
-
*/
|
|
112
|
-
skeletonRows?: number
|
|
113
|
-
/** Imperative scroll handle — see {@link BasaltVirtualListHandle}. */
|
|
114
|
-
ref?: Ref<BasaltVirtualListHandle>
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/** `estimateSize` sets every row's rendered height — there is no per-row measurement in this
|
|
118
|
-
* component — so a value under the coarse floor understates the touch target for every row. */
|
|
119
|
-
function shortRowHeightMessage(estimateSize: number): string {
|
|
120
|
-
return (
|
|
121
|
-
`${BASALT_PREFIX} BasaltVirtualList: "estimateSize" is ${estimateSize}px under a coarse ` +
|
|
122
|
-
'(touch) pointer — every row renders at this height, below the `--vx-hit` floor (44px, WCAG ' +
|
|
123
|
-
'2.5.5). Raise "estimateSize" to at least 44, or pad the row content so it clears the floor.'
|
|
124
|
-
)
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Imperative escape hatch for {@link BasaltVirtualList} — the virtualizer's own `scrollToIndex` /
|
|
129
|
-
* `scrollToOffset` / `scrollToEnd` were otherwise unreachable, since the component owns the
|
|
130
|
-
* `useVirtualizer()` instance internally. `getVirtualizer()` is the full escape hatch for anything
|
|
131
|
-
* not covered by the three convenience methods (mirrors `./data/table`'s `useReactTable` export as
|
|
132
|
-
* the table's own escape hatch).
|
|
133
|
-
*
|
|
134
|
-
* @example
|
|
135
|
-
* const listRef = useRef<BasaltVirtualListHandle>(null)
|
|
136
|
-
* <BasaltVirtualList ref={listRef} items={items} height={400} renderItem={renderRow} getItemKey={(i) => i.id} />
|
|
137
|
-
* listRef.current?.scrollToIndex(42, { align: 'center' })
|
|
138
|
-
*/
|
|
139
|
-
export type BasaltVirtualListHandle = {
|
|
140
|
-
/** Scrolls so the item at `index` is in view. */
|
|
141
|
-
scrollToIndex: (index: number, opts?: ScrollToOptions) => void
|
|
142
|
-
/** Scrolls the container to a raw pixel `offset`. */
|
|
143
|
-
scrollToOffset: (offset: number, opts?: ScrollToOptions) => void
|
|
144
|
-
/** Scrolls to the end of the list. */
|
|
145
|
-
scrollToEnd: (opts?: Pick<ScrollToOptions, 'behavior'>) => void
|
|
146
|
-
/**
|
|
147
|
-
* The underlying `@tanstack/react-virtual` instance — the full escape hatch. Returns the RAW
|
|
148
|
-
* `@tanstack/react-virtual` `Virtualizer`, so a future major of that library reaching this shape
|
|
149
|
-
* ships here as a plain `feat:` under the no-majors doctrine (root `AGENTS.md` "Commit type
|
|
150
|
-
* discipline"), not a silent break.
|
|
151
|
-
*/
|
|
152
|
-
getVirtualizer: () => Virtualizer<HTMLDivElement, Element>
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// ── Component ─────────────────────────────────────────────────────────────────
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* A windowed virtual list backed by TanStack Virtual, rendered inside a Mantine `Box` scroll
|
|
159
|
-
* container. Only the visible rows (+`overscan`) are in the DOM at any time.
|
|
160
|
-
*
|
|
161
|
-
* Important: `useFlushSync: false` is set explicitly to silence a React 19 scroll warning
|
|
162
|
-
* (TanStack Virtual internally calls the deprecated `flushSync` on scroll events; this opt-out
|
|
163
|
-
* disables that path and is the correct setting for React 19+ apps).
|
|
164
|
-
*
|
|
165
|
-
* Render pattern: scroll container (fixed height, overflow auto) → inner sizer div (total height,
|
|
166
|
-
* position relative) → absolutely-positioned virtual rows via `transform: translateY(vi.start)`.
|
|
167
|
-
*
|
|
168
|
-
* @example
|
|
169
|
-
* const items = Array.from({ length: 5_000 }, (_, i) => ({ id: i, name: `User ${i}` }))
|
|
170
|
-
* <BasaltVirtualList
|
|
171
|
-
* items={items}
|
|
172
|
-
* height={300}
|
|
173
|
-
* estimateSize={40}
|
|
174
|
-
* renderItem={(item) => <div style={{ padding: '8px 12px' }}>{item.name}</div>}
|
|
175
|
-
* getItemKey={(item) => item.id}
|
|
176
|
-
* />
|
|
177
|
-
*/
|
|
178
|
-
export function BasaltVirtualList<T>(props: BasaltVirtualListProps<T>) {
|
|
179
|
-
// F-ERR-1: without this, a list missing `items`/`renderItem`/`getItemKey` fails deep inside
|
|
180
|
-
// `useVirtualizer` as a raw `TypeError` caught by `BasaltErrorBoundary` — a blank subtree with no
|
|
181
|
-
// message naming any of the three.
|
|
182
|
-
assertRequiredProps('BasaltVirtualList', props, ['items', 'renderItem', 'getItemKey'])
|
|
183
|
-
const {
|
|
184
|
-
items,
|
|
185
|
-
height,
|
|
186
|
-
estimateSize = 40,
|
|
187
|
-
overscan = 5,
|
|
188
|
-
renderItem,
|
|
189
|
-
getItemKey,
|
|
190
|
-
isLoading = false,
|
|
191
|
-
query,
|
|
192
|
-
emptyState,
|
|
193
|
-
skeletonRows = 5,
|
|
194
|
-
ref,
|
|
195
|
-
className,
|
|
196
|
-
style,
|
|
197
|
-
classNames,
|
|
198
|
-
} = props
|
|
199
|
-
|
|
200
|
-
// `query` resolves the pending branch `isLoading` used to own, plus the error and empty ones the
|
|
201
|
-
// boolean cannot express — so it wins outright, and says so rather than letting the flag look
|
|
202
|
-
// broken.
|
|
203
|
-
useValidateProps(
|
|
204
|
-
'BasaltVirtualList',
|
|
205
|
-
() =>
|
|
206
|
-
query === undefined || props.isLoading === undefined
|
|
207
|
-
? null
|
|
208
|
-
: `${BASALT_PREFIX} BasaltVirtualList: props "query" and "isLoading" are both set — ` +
|
|
209
|
-
'"query" wins and "isLoading" is ignored. Drop "isLoading".',
|
|
210
|
-
[query === undefined, props.isLoading === undefined],
|
|
211
|
-
)
|
|
212
|
-
|
|
213
|
-
// A coarse pointer only — a mouse user's row height is a layout choice, not an accessibility
|
|
214
|
-
// floor. `estimateSize` sets every row's actual rendered height (this component never measures
|
|
215
|
-
// one), so a value under the floor is not a false positive to catch later.
|
|
216
|
-
//
|
|
217
|
-
// Reads `props.estimateSize`, not the destructured `estimateSize` above: the shipped DEFAULT
|
|
218
|
-
// (40) is itself under `HIT_COARSE` (44), so warning off the destructured value fired on every
|
|
219
|
-
// coarse-pointer mount that never named `estimateSize` at all. Only a caller's OWN too-short
|
|
220
|
-
// value is a defect to report.
|
|
221
|
-
useValidateProps(
|
|
222
|
-
'BasaltVirtualList',
|
|
223
|
-
() =>
|
|
224
|
-
props.estimateSize !== undefined &&
|
|
225
|
-
props.estimateSize < HIT_COARSE &&
|
|
226
|
-
readMediaQuery('(pointer: coarse)', false)
|
|
227
|
-
? shortRowHeightMessage(props.estimateSize)
|
|
228
|
-
: null,
|
|
229
|
-
[props.estimateSize],
|
|
230
|
-
)
|
|
231
|
-
|
|
232
|
-
const parentRef = useRef<HTMLDivElement>(null)
|
|
233
|
-
|
|
234
|
-
const rowVirtualizer = useVirtualizer({
|
|
235
|
-
count: items.length,
|
|
236
|
-
getScrollElement: () => parentRef.current,
|
|
237
|
-
estimateSize: () => estimateSize,
|
|
238
|
-
overscan,
|
|
239
|
-
// Silences a React 19 deprecation warning: TanStack Virtual calls flushSync on scroll;
|
|
240
|
-
// setting this to false opts out of that path entirely.
|
|
241
|
-
useFlushSync: false,
|
|
242
|
-
getItemKey: (index: number) => {
|
|
243
|
-
const item = items[index]
|
|
244
|
-
return item !== undefined ? getItemKey(item, index) : index
|
|
245
|
-
},
|
|
246
|
-
})
|
|
247
|
-
|
|
248
|
-
useImperativeHandle(
|
|
249
|
-
ref,
|
|
250
|
-
() => ({
|
|
251
|
-
scrollToIndex: (index, opts) => rowVirtualizer.scrollToIndex(index, opts),
|
|
252
|
-
scrollToOffset: (offset, opts) => rowVirtualizer.scrollToOffset(offset, opts),
|
|
253
|
-
scrollToEnd: (opts) => rowVirtualizer.scrollToEnd(opts),
|
|
254
|
-
getVirtualizer: () => rowVirtualizer,
|
|
255
|
-
}),
|
|
256
|
-
[rowVirtualizer],
|
|
257
|
-
)
|
|
258
|
-
|
|
259
|
-
const branch = query === undefined ? undefined : dataQueryBranch('BasaltVirtualList', query)
|
|
260
|
-
const showSkeleton = branch === undefined ? isLoading : branch === 'pending'
|
|
261
|
-
// Every non-virtual branch paints into the SAME box at the SAME declared height, so the page does
|
|
262
|
-
// not reflow as one state resolves into the next.
|
|
263
|
-
const boxProps = {
|
|
264
|
-
className: cx(classNames?.root, className),
|
|
265
|
-
style: {
|
|
266
|
-
height,
|
|
267
|
-
// theme-allow raw-scroll-container — matches the virtualizer's own scroll box below, so a
|
|
268
|
-
// placeholder branch doesn't reflow.
|
|
269
|
-
overflow: 'auto' as const,
|
|
270
|
-
...style,
|
|
271
|
-
},
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (branch === 'error' && query !== undefined) {
|
|
275
|
-
return (
|
|
276
|
-
<Box {...boxProps}>
|
|
277
|
-
<ErrorState
|
|
278
|
-
error={query.error}
|
|
279
|
-
title="Could not load"
|
|
280
|
-
tier="section"
|
|
281
|
-
retrying={query.fetchStatus === 'fetching'}
|
|
282
|
-
onRetry={() => void query.refetch()}
|
|
283
|
-
/>
|
|
284
|
-
</Box>
|
|
285
|
-
)
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
if (showSkeleton) {
|
|
289
|
-
return (
|
|
290
|
-
<Box {...boxProps}>
|
|
291
|
-
{Array.from({ length: skeletonRows }, (_, i) => (
|
|
292
|
-
<Box
|
|
293
|
-
key={`skeleton-${i}`}
|
|
294
|
-
style={{
|
|
295
|
-
height: estimateSize,
|
|
296
|
-
padding: 'var(--vx-space-virtual-row-inset-y) var(--vx-space-virtual-row-inset-x)',
|
|
297
|
-
boxSizing: 'border-box',
|
|
298
|
-
}}
|
|
299
|
-
>
|
|
300
|
-
{/* Inner height = row height minus the row's own vertical inset (top + bottom), read
|
|
301
|
-
from the same density-tracking var the padding above uses — a hardcoded subtrahend
|
|
302
|
-
would only be correct at density level 0. */}
|
|
303
|
-
<Skeleton
|
|
304
|
-
height={`calc(${estimateSize}px - 2 * var(--vx-space-virtual-row-inset-y))`}
|
|
305
|
-
radius="sm"
|
|
306
|
-
/>
|
|
307
|
-
</Box>
|
|
308
|
-
))}
|
|
309
|
-
</Box>
|
|
310
|
-
)
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
if (items.length === 0 && emptyState !== undefined) return <Box {...boxProps}>{emptyState}</Box>
|
|
314
|
-
|
|
315
|
-
return (
|
|
316
|
-
<Box
|
|
317
|
-
ref={parentRef}
|
|
318
|
-
className={cx(classNames?.root, className)}
|
|
319
|
-
style={{
|
|
320
|
-
height,
|
|
321
|
-
// theme-allow raw-scroll-container — TanStack Virtual measures this element as the scroll container.
|
|
322
|
-
overflow: 'auto',
|
|
323
|
-
...style,
|
|
324
|
-
}}
|
|
325
|
-
>
|
|
326
|
-
{/* Inner sizer — defines total scroll height for the virtualizer */}
|
|
327
|
-
<Box
|
|
328
|
-
style={{
|
|
329
|
-
height: rowVirtualizer.getTotalSize(),
|
|
330
|
-
position: 'relative',
|
|
331
|
-
}}
|
|
332
|
-
>
|
|
333
|
-
{rowVirtualizer.getVirtualItems().map((virtualItem) => {
|
|
334
|
-
const item = items[virtualItem.index]
|
|
335
|
-
if (item === undefined) return null
|
|
336
|
-
return (
|
|
337
|
-
<Box
|
|
338
|
-
key={virtualItem.key}
|
|
339
|
-
className={cx(classNames?.row)}
|
|
340
|
-
style={{
|
|
341
|
-
position: 'absolute',
|
|
342
|
-
top: 0,
|
|
343
|
-
left: 0,
|
|
344
|
-
width: '100%',
|
|
345
|
-
height: virtualItem.size,
|
|
346
|
-
transform: `translateY(${virtualItem.start}px)`,
|
|
347
|
-
}}
|
|
348
|
-
>
|
|
349
|
-
{renderItem(item, virtualItem.index)}
|
|
350
|
-
</Box>
|
|
351
|
-
)
|
|
352
|
-
})}
|
|
353
|
-
</Box>
|
|
354
|
-
</Box>
|
|
355
|
-
)
|
|
356
|
-
}
|
package/src/data/virtual.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ./data/virtual — BasaltVirtualList: a windowed virtual list over @tanstack/react-virtual,
|
|
3
|
-
* rendered with a Mantine Box scroll container.
|
|
4
|
-
*
|
|
5
|
-
* Optional peer: @tanstack/react-virtual >=3.13.26 <4. This list works on any 3.x — the floor is
|
|
6
|
-
* set by ./agent-chat's virtualize mode, so do not lower it.
|
|
7
|
-
*
|
|
8
|
-
* This subpath does NOT value-import @tanstack/react-table, so the data-table peer is never
|
|
9
|
-
* required — use `./data/table` when your app only needs the table.
|
|
10
|
-
*
|
|
11
|
-
* Install with:
|
|
12
|
-
* bun add @tanstack/react-virtual
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* import { BasaltVirtualList } from 'basalt-ui/data/virtual'
|
|
16
|
-
* const items = Array.from({ length: 10_000 }, (_, i) => ({ id: i, label: `Row ${i}` }))
|
|
17
|
-
* <BasaltVirtualList items={items} height={400} renderItem={(item) => <div>{item.label}</div>} />
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
// ── BasaltVirtualList ─────────────────────────────────────────────────────────
|
|
21
|
-
export { BasaltVirtualList } from './virtual-list'
|
|
22
|
-
export type {
|
|
23
|
-
BasaltVirtualListHandle,
|
|
24
|
-
BasaltVirtualListProps,
|
|
25
|
-
BasaltVirtualListSlot,
|
|
26
|
-
} from './virtual-list'
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ./forms — FormErrorSummary: accessible error-summary component for long forms.
|
|
3
|
-
* Mantine-coupled. Optional peer: @mantine/form.
|
|
4
|
-
*/
|
|
5
|
-
import { Alert, List, Text } from '@mantine/core'
|
|
6
|
-
import type { UseFormReturnType } from '@mantine/form'
|
|
7
|
-
import type { BasaltProps } from '../common/props'
|
|
8
|
-
import { assertRequiredProps } from '../common/validate'
|
|
9
|
-
import { alpha, VX } from '../tokens'
|
|
10
|
-
|
|
11
|
-
// ── FormErrorSummary ──────────────────────────────────────────────────────────
|
|
12
|
-
|
|
13
|
-
/** Props for FormErrorSummary. */
|
|
14
|
-
export type FormErrorSummaryProps<Values extends Record<string, unknown>> = BasaltProps & {
|
|
15
|
-
form: UseFormReturnType<Values>
|
|
16
|
-
/** Accessible heading shown above the error list. Defaults to "Please fix the following errors". */
|
|
17
|
-
title?: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Renders an accessible error summary list for long forms and screen readers.
|
|
22
|
-
* Follows the WCAG error-summary pattern — a single `role="alert"` container that
|
|
23
|
-
* lists all field errors, placed at the top of the form so AT announces it on submit.
|
|
24
|
-
*
|
|
25
|
-
* Returns `null` when the form has no errors (renders nothing when the form is clean).
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* import { FormErrorSummary, useBasaltForm } from 'basalt-ui/forms'
|
|
29
|
-
*
|
|
30
|
-
* function MyForm() {
|
|
31
|
-
* const form = useBasaltForm({ initialValues: { email: '' } })
|
|
32
|
-
* return (
|
|
33
|
-
* <form onSubmit={form.onSubmit(console.log)}>
|
|
34
|
-
* <FormErrorSummary form={form} title="Fix these before submitting" />
|
|
35
|
-
* <TextInput key={fieldKey(form, 'email')} {...inputProps(form, 'email')} label="Email" />
|
|
36
|
-
* </form>
|
|
37
|
-
* )
|
|
38
|
-
* }
|
|
39
|
-
*/
|
|
40
|
-
export function FormErrorSummary<Values extends Record<string, unknown>>(
|
|
41
|
-
props: FormErrorSummaryProps<Values>,
|
|
42
|
-
) {
|
|
43
|
-
// F-ERR-1: without this, a missing `form` fails deep inside `Object.entries(form.errors)` as a
|
|
44
|
-
// raw `TypeError` caught by `BasaltErrorBoundary` — a blank subtree with no message naming it.
|
|
45
|
-
assertRequiredProps('FormErrorSummary', props, ['form'])
|
|
46
|
-
const { form, title = 'Please fix the following errors', className, style } = props
|
|
47
|
-
const errorEntries = Object.entries(form.errors)
|
|
48
|
-
if (errorEntries.length === 0) return null
|
|
49
|
-
|
|
50
|
-
return (
|
|
51
|
-
<Alert
|
|
52
|
-
role="alert"
|
|
53
|
-
title={<Text fw={600}>{title}</Text>}
|
|
54
|
-
{...(className !== undefined && { className })}
|
|
55
|
-
{...(style !== undefined && { style })}
|
|
56
|
-
styles={{
|
|
57
|
-
root: {
|
|
58
|
-
backgroundColor: alpha(VX.status.bad, 0.13),
|
|
59
|
-
color: VX.status.bad,
|
|
60
|
-
borderRadius: 'var(--vx-radius-ctrl)',
|
|
61
|
-
},
|
|
62
|
-
}}
|
|
63
|
-
>
|
|
64
|
-
<List size="sm" mt={4}>
|
|
65
|
-
{errorEntries.map(([path, message]) => (
|
|
66
|
-
<List.Item key={path}>{String(message)}</List.Item>
|
|
67
|
-
))}
|
|
68
|
-
</List>
|
|
69
|
-
</Alert>
|
|
70
|
-
)
|
|
71
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ./forms — useFieldArray: the list-field surface over Mantine's four list actions.
|
|
3
|
-
* Mantine-coupled. Optional peer: @mantine/form.
|
|
4
|
-
*
|
|
5
|
-
* The gap (audit B §4): `insertListItem` / `removeListItem` / `reorderListItem` are all reachable
|
|
6
|
-
* off the raw form object, but they are unexported by name, undocumented in the forms doctrine, and
|
|
7
|
-
* each takes a different argument shape (`(path, item, index?)`, `(path, index)`,
|
|
8
|
-
* `(path, { from, to })`). The list ALSO has to be read back out of the values by dotted path, and
|
|
9
|
-
* every row needs `form.key(\`${path}.${i}\`)` or the uncontrolled reconciler reuses the wrong DOM
|
|
10
|
-
* node when a row is removed from the middle — which is the defect this hook exists to make
|
|
11
|
-
* unwritable.
|
|
12
|
-
*/
|
|
13
|
-
import type { FormArrayElement, LooseKeys, UseFormReturnType } from '@mantine/form'
|
|
14
|
-
|
|
15
|
-
export type UseFieldArrayReturn<Item> = {
|
|
16
|
-
/** The live list. `[]` when the path holds nothing, so a call site never guards before mapping. */
|
|
17
|
-
items: Item[]
|
|
18
|
-
/** Push one item onto the end. */
|
|
19
|
-
append: (value: Item) => void
|
|
20
|
-
/** Drop the item at `index`. Mantine re-indexes the field errors with it. */
|
|
21
|
-
remove: (index: number) => void
|
|
22
|
-
/** Move one item, e.g. from a drag handle or a pair of arrow buttons. */
|
|
23
|
-
move: (from: number, to: number) => void
|
|
24
|
-
/**
|
|
25
|
-
* Mantine's reconciler key for row `index` (`form.key('<path>.<index>')`) — pass it as the row's
|
|
26
|
-
* JSX `key`, never spread it.
|
|
27
|
-
*
|
|
28
|
-
* **Positional, and that is a real limit worth stating**: it identifies the SLOT, not the item.
|
|
29
|
-
* Mantine's list actions write values through `$values` directly and never bump the form-level
|
|
30
|
-
* key generation (verified in 9.3.2's use-form-list), so removing row 0 does not change row 0's
|
|
31
|
-
* key — it changes which item sits there. That is correct for an append/remove list, where the
|
|
32
|
-
* uncontrolled inputs below re-read their `defaultValue` from the new values anyway. A list the
|
|
33
|
-
* USER reorders wants an identity key instead: put a `randomId()` on the item and key the row on
|
|
34
|
-
* that.
|
|
35
|
-
*/
|
|
36
|
-
key: (index: number) => string
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Reads and edits a list field as one object.
|
|
41
|
-
*
|
|
42
|
-
* **`items` is read from `form.getValues()`, not from `form.values`**, so it is correct under the
|
|
43
|
-
* `mode: 'uncontrolled'` default `useBasaltForm` sets: the list actions all re-render the form
|
|
44
|
-
* (they call `setValues` with `updateState: true`), so the snapshot this returns is the one the
|
|
45
|
-
* caller just produced.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* const items = useFieldArray(form, 'contacts')
|
|
49
|
-
*
|
|
50
|
-
* {items.items.map((_, index) => (
|
|
51
|
-
* <FormRow key={items.key(index)} label={`Contact ${index + 1}`}>
|
|
52
|
-
* <TextInput
|
|
53
|
-
* key={fieldKey(form, `contacts.${index}.email`)}
|
|
54
|
-
* {...inputProps(form, `contacts.${index}.email`)}
|
|
55
|
-
* />
|
|
56
|
-
* <Button onClick={() => items.remove(index)}>Remove</Button>
|
|
57
|
-
* </FormRow>
|
|
58
|
-
* ))}
|
|
59
|
-
* <Button onClick={() => items.append({ email: '' })}>Add contact</Button>
|
|
60
|
-
*/
|
|
61
|
-
export function useFieldArray<
|
|
62
|
-
Values extends Record<string, unknown>,
|
|
63
|
-
Path extends LooseKeys<Values>,
|
|
64
|
-
>(
|
|
65
|
-
form: UseFormReturnType<Values>,
|
|
66
|
-
path: Path,
|
|
67
|
-
): UseFieldArrayReturn<FormArrayElement<Values, Path & string>> {
|
|
68
|
-
type Item = FormArrayElement<Values, Path & string>
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
items: readList<Item>(form.getValues(), String(path)),
|
|
72
|
-
append: (value) => form.insertListItem(path, value),
|
|
73
|
-
remove: (index) => form.removeListItem(path, index),
|
|
74
|
-
move: (from, to) => form.reorderListItem(path, { from, to }),
|
|
75
|
-
key: (index) => form.key(`${String(path)}.${index}`),
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* The dotted-path read. Mantine's own `getPath` is internal to `@mantine/form/paths` and is not on
|
|
81
|
-
* the package's public entry, so this walks the path itself rather than reaching past the export
|
|
82
|
-
* map for six lines.
|
|
83
|
-
*
|
|
84
|
-
* Returns `[]` for a missing path or a non-array value: the alternative is a `.map` on `undefined`
|
|
85
|
-
* at the call site, and "the field is not a list" is a typing error the compiler already reports.
|
|
86
|
-
*/
|
|
87
|
-
function readList<Item>(values: Record<string, unknown>, path: string): Item[] {
|
|
88
|
-
let current: unknown = values
|
|
89
|
-
for (const segment of path.split('.')) {
|
|
90
|
-
if (current === null || typeof current !== 'object') return []
|
|
91
|
-
current = (current as Record<string, unknown>)[segment]
|
|
92
|
-
}
|
|
93
|
-
return Array.isArray(current) ? (current as Item[]) : []
|
|
94
|
-
}
|