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
package/configs/oxlint.json
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"react/rules-of-hooks": "error",
|
|
14
14
|
"react/jsx-key": "error",
|
|
15
15
|
"react/react-in-jsx-scope": "off",
|
|
16
|
-
"typescript/no-explicit-any": "
|
|
16
|
+
"typescript/no-explicit-any": "error",
|
|
17
17
|
"import/no-duplicates": "error",
|
|
18
18
|
"import/no-unassigned-import": "off",
|
|
19
19
|
"jsx-a11y/prefer-tag-over-role": "off",
|
|
@@ -22,7 +22,15 @@
|
|
|
22
22
|
{
|
|
23
23
|
"allow": ["__APP_VERSION__"]
|
|
24
24
|
}
|
|
25
|
-
]
|
|
25
|
+
],
|
|
26
|
+
"react/globals": "error",
|
|
27
|
+
"react/immutability": "error",
|
|
28
|
+
"react/incompatible-library": "error",
|
|
29
|
+
"react/preserve-manual-memoization": "error",
|
|
30
|
+
"react/refs": "error",
|
|
31
|
+
"react/only-export-components": ["warn", { "allowExportNames": ["Route"] }],
|
|
32
|
+
"react/set-state-in-effect": "error",
|
|
33
|
+
"no-constant-binary-expression": "error"
|
|
26
34
|
},
|
|
27
35
|
"overrides": [
|
|
28
36
|
{
|
|
@@ -1,18 +1,30 @@
|
|
|
1
1
|
import type { AgentPart } from './parts.js';
|
|
2
2
|
import type { ResumableAgentTransport } from './transport.js';
|
|
3
|
-
|
|
3
|
+
import type { ChatTransport, UIMessage } from 'ai';
|
|
4
|
+
export type AiSdkHttpOptions = {
|
|
4
5
|
/** The API URL AI SDK's transport POSTs new turns to and GETs reconnects from. */
|
|
5
6
|
readonly api: string;
|
|
7
|
+
readonly transport?: undefined;
|
|
6
8
|
/** HTTP headers to send with every request. */
|
|
7
|
-
readonly headers?: Record<string, string> | Headers;
|
|
9
|
+
readonly headers?: Record<string, string> | Headers | undefined;
|
|
8
10
|
/** The fetch credentials mode. Defaults to 'same-origin' (AI SDK's own default). */
|
|
9
|
-
readonly credentials?: RequestCredentials;
|
|
11
|
+
readonly credentials?: RequestCredentials | undefined;
|
|
10
12
|
/**
|
|
11
13
|
* Custom fetch implementation — e.g. to scope requests to a mock backend in tests/playground,
|
|
12
14
|
* or to add middleware. Defaults to the ambient `fetch` when omitted.
|
|
13
15
|
*/
|
|
14
|
-
readonly fetch?: typeof globalThis.fetch;
|
|
16
|
+
readonly fetch?: typeof globalThis.fetch | undefined;
|
|
15
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Any AI SDK `ChatTransport<UIMessage>`, used as-is: a `WebSocketChatTransport` plugs in here
|
|
20
|
+
* unwrapped. basalt never wraps or re-implements a transport; it only reads the chunk stream the
|
|
21
|
+
* transport returns.
|
|
22
|
+
*/
|
|
23
|
+
export type AiSdkCustomOptions = {
|
|
24
|
+
readonly api?: undefined;
|
|
25
|
+
readonly transport: ChatTransport<UIMessage>;
|
|
26
|
+
};
|
|
27
|
+
export type AiSdkTransportOptions = AiSdkHttpOptions | AiSdkCustomOptions;
|
|
16
28
|
export type AiSdkTransport<TPart = AgentPart> = ResumableAgentTransport<TPart, string> & {
|
|
17
29
|
/**
|
|
18
30
|
* Returns an AgentTransport bound to a stable chat id (e.g. a basalt-ui thread id) instead of
|
|
@@ -22,15 +34,15 @@ export type AiSdkTransport<TPart = AgentPart> = ResumableAgentTransport<TPart, s
|
|
|
22
34
|
readonly forThread: (chatId: string) => ResumableAgentTransport<TPart, string>;
|
|
23
35
|
};
|
|
24
36
|
/**
|
|
25
|
-
* Wraps AI SDK
|
|
37
|
+
* Wraps an AI SDK `ChatTransport` (`DefaultChatTransport` for `{ api }`, or your own via
|
|
38
|
+
* `{ transport }`) + `readUIMessageStream` into an AgentTransport.
|
|
26
39
|
*
|
|
27
|
-
* The returned object is immediately usable
|
|
40
|
+
* The returned object is immediately usable as-is (one fixed, stable chat id for
|
|
28
41
|
* the whole conversation). Call `.forThread(threadId)` to get a transport bound to a different
|
|
29
42
|
* (caller-supplied) chat id — the per-thread form for useAgentThreadRuns.
|
|
30
43
|
*
|
|
31
44
|
* @example
|
|
32
45
|
* const transport = aiSdkTransport<AgentPart>({ api: '/api/chat' })
|
|
33
|
-
* const { send, parts, status } = useAgentStream({ transport })
|
|
34
46
|
*/
|
|
35
47
|
export declare function aiSdkTransport<TPart = AgentPart>(options: AiSdkTransportOptions): AiSdkTransport<TPart>;
|
|
36
48
|
//# sourceMappingURL=ai-sdk-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-sdk-transport.d.ts","sourceRoot":"","sources":["../../src/agent/ai-sdk-transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ai-sdk-transport.d.ts","sourceRoot":"","sources":["../../src/agent/ai-sdk-transport.ts"],"names":[],"mappings":"AAkDA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,SAAS,CAAA;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAK1D,OAAO,KAAK,EACV,aAAa,EAGb,SAAS,EAGV,MAAM,IAAI,CAAA;AAOX,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,GAAG,SAAS,CAAA;IAC/D,oFAAoF;IACpF,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrD;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;CACrD,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;CAC7C,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,kBAAkB,CAAA;AAIzE,MAAM,MAAM,cAAc,CAAC,KAAK,GAAG,SAAS,IAAI,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG;IACvF;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAC/E,CAAA;AA8RD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,GAAG,SAAS,EAC9C,OAAO,EAAE,qBAAqB,GAC7B,cAAc,CAAC,KAAK,CAAC,CA4DvB"}
|
|
@@ -6,7 +6,7 @@ function createAiSdkResolver(options) {
|
|
|
6
6
|
return function resolveAiSdk() {
|
|
7
7
|
resolved ??= import("ai").then(
|
|
8
8
|
({ DefaultChatTransport: DefaultChatTransportCtor, readUIMessageStream: read }) => ({
|
|
9
|
-
|
|
9
|
+
chatTransport: options.transport !== void 0 ? options.transport : new DefaultChatTransportCtor({
|
|
10
10
|
api: options.api,
|
|
11
11
|
...options.headers !== void 0 ? { headers: options.headers } : {},
|
|
12
12
|
...options.credentials !== void 0 ? { credentials: options.credentials } : {},
|
|
@@ -142,7 +142,7 @@ function diffMessage(chatId, prev, curr, toolStartTimes) {
|
|
|
142
142
|
async function* diffChunkStream(chatId, chunkStream, readStream, signal) {
|
|
143
143
|
let prev;
|
|
144
144
|
const toolStartTimes = /* @__PURE__ */ new Map();
|
|
145
|
-
for await (const curr of readStream({ stream: chunkStream })) {
|
|
145
|
+
for await (const curr of readStream({ stream: chunkStream, terminateOnError: true })) {
|
|
146
146
|
if (signal?.aborted) return;
|
|
147
147
|
for (const part of diffMessage(chatId, prev, curr, toolStartTimes)) {
|
|
148
148
|
yield part;
|
|
@@ -160,19 +160,19 @@ function aiSdkTransport(options) {
|
|
|
160
160
|
idempotentReplay: true,
|
|
161
161
|
async *stream(input, signal, ctx) {
|
|
162
162
|
yield { id: `${chatId}#start`, type: "start", runId: chatId, resumeToken: chatId };
|
|
163
|
-
const {
|
|
163
|
+
const { chatTransport, readUIMessageStream: readStream } = await resolveAiSdk();
|
|
164
164
|
const userMessage = {
|
|
165
165
|
// This id is what AI SDK's own backend persistence/dedup keys turns hang off — the same
|
|
166
166
|
// idempotency-key cost as basalt's own ChatMessage.id (see mintMessageId's doc). Prefer
|
|
167
167
|
// the caller's OWN idempotency key (ctx.messageId — the id useAgentThreadRuns.start()
|
|
168
168
|
// already minted for this turn's ChatMessage) so the two never diverge for one turn; only
|
|
169
|
-
// a caller that omits ctx (
|
|
169
|
+
// a caller that omits ctx (a hand-rolled stream() call) falls back to
|
|
170
170
|
// minting a fresh one here.
|
|
171
171
|
id: ctx?.messageId ?? mintMessageId(),
|
|
172
172
|
role: "user",
|
|
173
173
|
parts: [{ type: "text", text: input }]
|
|
174
174
|
};
|
|
175
|
-
const chunkStream = await
|
|
175
|
+
const chunkStream = await chatTransport.sendMessages({
|
|
176
176
|
chatId,
|
|
177
177
|
messages: [userMessage],
|
|
178
178
|
trigger: "submit-message",
|
|
@@ -182,8 +182,11 @@ function aiSdkTransport(options) {
|
|
|
182
182
|
yield* diffChunkStream(chatId, chunkStream, readStream, signal);
|
|
183
183
|
},
|
|
184
184
|
async *resume(resumeToken, signal) {
|
|
185
|
-
const {
|
|
186
|
-
const chunkStream = await
|
|
185
|
+
const { chatTransport, readUIMessageStream: readStream } = await resolveAiSdk();
|
|
186
|
+
const chunkStream = await chatTransport.reconnectToStream({
|
|
187
|
+
chatId: resumeToken,
|
|
188
|
+
...signal !== void 0 ? { abortSignal: signal } : {}
|
|
189
|
+
});
|
|
187
190
|
if (chunkStream === null) return;
|
|
188
191
|
yield* diffChunkStream(resumeToken, chunkStream, readStream, signal);
|
|
189
192
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ClipboardEvent, JSX, ReactNode, Ref } from 'react';
|
|
2
|
-
import type { BasaltProps, SlotStylesProps } from '
|
|
2
|
+
import type { BasaltProps, SlotStylesProps } from '../../common/props.js';
|
|
3
3
|
export type ComposerAttachment = {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
readonly name: string;
|
|
@@ -63,7 +63,7 @@ export type ComposerHandle = {
|
|
|
63
63
|
export type ComposerSlot = 'root' | 'input' | 'actions';
|
|
64
64
|
export type ComposerProps = BasaltProps & SlotStylesProps<ComposerSlot> & {
|
|
65
65
|
/** Imperative write/focus handle — see `ComposerHandle`. */
|
|
66
|
-
readonly ref?: Ref<ComposerHandle
|
|
66
|
+
readonly ref?: Ref<ComposerHandle> | undefined;
|
|
67
67
|
/**
|
|
68
68
|
* Called with the trimmed text plus the pending attachments. May return `void` (fire-and-forget,
|
|
69
69
|
* validated only synchronously) or a `Promise<void>` (its outcome is awaited, its timing is not).
|
|
@@ -86,41 +86,41 @@ export type ComposerProps = BasaltProps & SlotStylesProps<ComposerSlot> & {
|
|
|
86
86
|
* A resolved promise clears and stays cleared, same as a `void` return.
|
|
87
87
|
*/
|
|
88
88
|
readonly onSubmit: (payload: ComposerSubmit) => void | Promise<void>;
|
|
89
|
-
readonly placeholder?: string;
|
|
89
|
+
readonly placeholder?: string | undefined;
|
|
90
90
|
/** Autofocuses the textarea on mount. */
|
|
91
|
-
readonly autoFocus?: boolean;
|
|
91
|
+
readonly autoFocus?: boolean | undefined;
|
|
92
92
|
/** Autosize ceiling for the textarea. Default 6. */
|
|
93
|
-
readonly maxRows?: number;
|
|
93
|
+
readonly maxRows?: number | undefined;
|
|
94
94
|
/** Hard-disable, independent of streaming (e.g. offline). */
|
|
95
|
-
readonly disabled?: boolean;
|
|
95
|
+
readonly disabled?: boolean | undefined;
|
|
96
96
|
/** A run is in flight on this thread. */
|
|
97
|
-
readonly streaming?: boolean;
|
|
97
|
+
readonly streaming?: boolean | undefined;
|
|
98
98
|
/** Default false — preserves the historical `disabled={streaming}` behaviour. */
|
|
99
|
-
readonly allowSubmitWhileStreaming?: boolean;
|
|
99
|
+
readonly allowSubmitWhileStreaming?: boolean | undefined;
|
|
100
100
|
/** When given, the send action becomes a Stop action while `streaming`. */
|
|
101
|
-
readonly onStop?: () => void;
|
|
101
|
+
readonly onStop?: (() => void) | undefined;
|
|
102
102
|
/**
|
|
103
103
|
* Opaque slot rendered before the textarea (a voice recorder, a mode switch, …). Slot content
|
|
104
104
|
* that needs to WRITE into the composer — append a transcript, insert a suggestion — does so
|
|
105
105
|
* through the `ref` handle (`ComposerHandle`), not a callback prop here; see the file's
|
|
106
106
|
* `@example`.
|
|
107
107
|
*/
|
|
108
|
-
readonly leftSection?: ReactNode;
|
|
108
|
+
readonly leftSection?: ReactNode | undefined;
|
|
109
109
|
/** Opaque slot rendered between the textarea and the send action (an attach button, …). */
|
|
110
|
-
readonly rightSection?: ReactNode;
|
|
110
|
+
readonly rightSection?: ReactNode | undefined;
|
|
111
111
|
/**
|
|
112
112
|
* Pending attachments, owned by the caller. Composer only forwards them on submit and asks for a
|
|
113
113
|
* reset afterwards — rendering previews is the caller's job, via `leftSection`/`rightSection`.
|
|
114
114
|
*/
|
|
115
|
-
readonly attachments?: readonly ComposerAttachment[];
|
|
115
|
+
readonly attachments?: readonly ComposerAttachment[] | undefined;
|
|
116
116
|
/**
|
|
117
117
|
* Called with `[]` optimistically the instant a submit goes out WITH pending attachments — a
|
|
118
118
|
* submit that had none to begin with skips the call rather than reporting a no-op change — and,
|
|
119
119
|
* subject to the restoration guards documented on `onSubmit`, with the original attachments
|
|
120
120
|
* again if that submit later rejects.
|
|
121
121
|
*/
|
|
122
|
-
readonly onAttachmentsChange?: (next: readonly ComposerAttachment[]) => void;
|
|
123
|
-
readonly onPaste?: (event: ClipboardEvent<HTMLTextAreaElement>) => void;
|
|
122
|
+
readonly onAttachmentsChange?: ((next: readonly ComposerAttachment[]) => void) | undefined;
|
|
123
|
+
readonly onPaste?: ((event: ClipboardEvent<HTMLTextAreaElement>) => void) | undefined;
|
|
124
124
|
/**
|
|
125
125
|
* Persists the unsent draft under `basalt:composer-draft:<key>`; switching keys swaps drafts, and
|
|
126
126
|
* the entry is removed (not blanked) on a successful submit.
|
|
@@ -129,9 +129,9 @@ export type ComposerProps = BasaltProps & SlotStylesProps<ComposerSlot> & {
|
|
|
129
129
|
* that fails, synchronously or later over the network, restores this persisted draft instead of
|
|
130
130
|
* leaving it erased (subject to the restoration guards documented on `onSubmit`).
|
|
131
131
|
*/
|
|
132
|
-
readonly draftKey?: string;
|
|
132
|
+
readonly draftKey?: string | undefined;
|
|
133
133
|
/** Replaces the whole Enter/Shift+Enter hint row. Pass `null` to drop it entirely. */
|
|
134
|
-
readonly hint?: ReactNode;
|
|
134
|
+
readonly hint?: ReactNode | undefined;
|
|
135
135
|
};
|
|
136
136
|
/**
|
|
137
137
|
* An autosize Textarea + send ActionIcon, with slots either side. Enter submits, Shift+Enter
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { ActionIcon, Box, Group, Kbd, Stack, Text, Textarea } from "@mantine/core";
|
|
3
|
-
import { useImperativeHandle, useLayoutEffect, useRef, useSyncExternalStore } from "react";
|
|
4
|
-
import { cx } from "
|
|
5
|
-
import { readPersistedValue } from "
|
|
6
|
-
import { VX } from "
|
|
3
|
+
import { useImperativeHandle, useLayoutEffect, useMemo, useRef, useSyncExternalStore } from "react";
|
|
4
|
+
import { cx } from "../../common/props.js";
|
|
5
|
+
import { readPersistedValue } from "../../state/persisted.js";
|
|
6
|
+
import { VX } from "../../tokens/index.js";
|
|
7
7
|
import { useKeyboardInsetRef } from "./use-keyboard-inset.js";
|
|
8
8
|
function SendGlyph() {
|
|
9
9
|
return /* @__PURE__ */ jsx("svg", { width: 16, height: 16, viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ jsx(
|
|
@@ -129,9 +129,8 @@ function Composer({
|
|
|
129
129
|
style,
|
|
130
130
|
classNames
|
|
131
131
|
}) {
|
|
132
|
-
const memoryStore =
|
|
133
|
-
memoryStore
|
|
134
|
-
const store = draftKey === void 0 ? memoryStore.current : persistedDraftStore(draftKey);
|
|
132
|
+
const memoryStore = useMemo(() => createDraftStore(null), []);
|
|
133
|
+
const store = draftKey === void 0 ? memoryStore : persistedDraftStore(draftKey);
|
|
135
134
|
const value = useSyncExternalStore(
|
|
136
135
|
isServer ? noopSubscribe : store.subscribe,
|
|
137
136
|
isServer ? emptyDraft : store.get,
|
|
@@ -144,9 +143,11 @@ function Composer({
|
|
|
144
143
|
const trimmed = value.trim();
|
|
145
144
|
const hasPayload = trimmed.length > 0 || pending.length > 0;
|
|
146
145
|
const attachmentsRef = useRef(pending);
|
|
147
|
-
attachmentsRef.current = pending;
|
|
148
146
|
const draftKeyRef = useRef(draftKey);
|
|
149
|
-
|
|
147
|
+
useLayoutEffect(() => {
|
|
148
|
+
attachmentsRef.current = pending;
|
|
149
|
+
draftKeyRef.current = draftKey;
|
|
150
|
+
});
|
|
150
151
|
const textareaRef = useRef(null);
|
|
151
152
|
const pendingCaretRef = useRef(null);
|
|
152
153
|
useLayoutEffect(() => {
|
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
* stays internal — resolving unset fields is the components' job, not the consumer's.
|
|
11
11
|
*/
|
|
12
12
|
import type { ReactNode } from 'react';
|
|
13
|
-
import type { ChatMessage
|
|
13
|
+
import type { ChatMessage } from '../history.js';
|
|
14
|
+
import type { TranscriptPart } from '../foreign.js';
|
|
14
15
|
export type MessageAffordances = {
|
|
15
16
|
/**
|
|
16
17
|
* How the per-message timestamp renders.
|
|
17
18
|
* @default 'relative'
|
|
18
19
|
*/
|
|
19
|
-
readonly timestamp?: 'relative' | 'absolute' | 'none';
|
|
20
|
+
readonly timestamp?: 'relative' | 'absolute' | 'none' | undefined;
|
|
20
21
|
/**
|
|
21
22
|
* Whether a copy action is offered on the hover row. Copies the message's COALESCED text (the
|
|
22
23
|
* same merged/de-duplicated text `coalesceParts` produces for display), not the raw `parts`
|
|
@@ -25,7 +26,7 @@ export type MessageAffordances = {
|
|
|
25
26
|
* assembled.
|
|
26
27
|
* @default true
|
|
27
28
|
*/
|
|
28
|
-
readonly copy?: boolean;
|
|
29
|
+
readonly copy?: boolean | undefined;
|
|
29
30
|
/**
|
|
30
31
|
* Regenerate action, shown on the LAST ASSISTANT message only (never on earlier turns, never on
|
|
31
32
|
* user messages). Receives that message's `id`. `useAgentThreadRuns`'s `retry` is
|
|
@@ -33,7 +34,7 @@ export type MessageAffordances = {
|
|
|
33
34
|
* whole thread — the consumer bridges this messageId-keyed callback to that thread-keyed retry;
|
|
34
35
|
* the framework only ever hands back the messageId, it does not know about threads.
|
|
35
36
|
*/
|
|
36
|
-
readonly onRegenerate?: (messageId: string) => void;
|
|
37
|
+
readonly onRegenerate?: ((messageId: string) => void) | undefined;
|
|
37
38
|
/**
|
|
38
39
|
* Extra actions appended to the hover row, after the built-in copy/regenerate actions.
|
|
39
40
|
*
|
|
@@ -47,9 +48,9 @@ export type MessageAffordances = {
|
|
|
47
48
|
* a long thread it is worth avoiding: wrap `actions` in the consumer's own `useCallback`, keyed
|
|
48
49
|
* on whatever state it actually reads.
|
|
49
50
|
*/
|
|
50
|
-
readonly actions?: (ctx: {
|
|
51
|
+
readonly actions?: ((ctx: {
|
|
51
52
|
readonly message: ChatMessage<TranscriptPart>;
|
|
52
|
-
}) => ReactNode;
|
|
53
|
+
}) => ReactNode) | undefined;
|
|
53
54
|
};
|
|
54
55
|
/**
|
|
55
56
|
* Resolved defaults for the optional {@link MessageAffordances} fields — one place, so
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-affordances.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/message-affordances.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAA;IACjE;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACjE;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,OAAO,CAAC,EACb,CAAC,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,CAAA;KAAE,KAAK,SAAS,CAAC,GACvE,SAAS,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,MAAM,CAAC,CAGxF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-time.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/relative-time.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAgBH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAc5D"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { JSX, ReactNode } from 'react';
|
|
2
|
-
import type { AgentThread,
|
|
3
|
-
import type {
|
|
2
|
+
import type { AgentThread, StreamStatus } from '../thread.js';
|
|
3
|
+
import type { ChatMessage } from '../history.js';
|
|
4
|
+
import type { ForeignPart, PartRenderer, PartRenderers, TranscriptPart } from '../foreign.js';
|
|
5
|
+
import type { BasaltProps, SlotStylesProps } from '../../common/props.js';
|
|
4
6
|
import type { ComposerProps, ComposerSubmit } from './composer.js';
|
|
5
7
|
import type { MessageAffordances } from './message-affordances.js';
|
|
6
8
|
import type { RowHeightProps } from './virtualize.js';
|
|
@@ -26,48 +28,48 @@ type ThreadFeedRowBase = {
|
|
|
26
28
|
* and never guessed client-side), pass it directly instead of forcing an outcome shape onto data
|
|
27
29
|
* that never had one.
|
|
28
30
|
*/
|
|
29
|
-
readonly title?: string;
|
|
31
|
+
readonly title?: string | undefined;
|
|
30
32
|
/** Header summary override, same fallback rule as `title` (`thread.outcome?.summary ?? ''`). */
|
|
31
|
-
readonly summary?: string;
|
|
33
|
+
readonly summary?: string | undefined;
|
|
32
34
|
/** Rendered at the START of the header row, before the title/summary stack — a pin icon, a type
|
|
33
35
|
* badge (argo's hermes-chat S5). Absent by default; renders nothing extra when omitted. */
|
|
34
|
-
readonly headerLeft?: ReactNode;
|
|
36
|
+
readonly headerLeft?: ReactNode | undefined;
|
|
35
37
|
/** Rendered at the END of the header row, before the timestamp and chevron — a collapsed-only
|
|
36
38
|
* streaming indicator (argo's hermes-chat S5). Absent by default; renders nothing extra when
|
|
37
39
|
* omitted. */
|
|
38
|
-
readonly headerRight?: ReactNode;
|
|
40
|
+
readonly headerRight?: ReactNode | undefined;
|
|
39
41
|
/**
|
|
40
42
|
* Overrides the transcript source: when provided, the row renders THESE messages instead of
|
|
41
43
|
* reading `thread.messages` directly (argo's hermes-chat S6 — the confirmed transcript is an
|
|
42
44
|
* optimistic-overlay MERGE over the store's messages, not the store's messages verbatim).
|
|
43
45
|
* Defaults to `thread.messages`.
|
|
44
46
|
*/
|
|
45
|
-
readonly messages?: readonly ChatMessage<TranscriptPart>[];
|
|
47
|
+
readonly messages?: readonly ChatMessage<TranscriptPart>[] | undefined;
|
|
46
48
|
/** The live (in-flight) assistant turn's parts, when a run is streaming for this thread. */
|
|
47
|
-
readonly liveParts?: readonly TranscriptPart[];
|
|
49
|
+
readonly liveParts?: readonly TranscriptPart[] | undefined;
|
|
48
50
|
/** The live run's status — drives the in-progress indicator on the live block. */
|
|
49
|
-
readonly liveStatus?: StreamStatus;
|
|
51
|
+
readonly liveStatus?: StreamStatus | undefined;
|
|
50
52
|
/** Consumer renderers keyed by part.type, forwarded to `ThreadTranscript`. */
|
|
51
|
-
readonly renderers?: PartRenderers;
|
|
53
|
+
readonly renderers?: PartRenderers | undefined;
|
|
52
54
|
/** Forwarded to `ThreadTranscript` — see its own prop doc. */
|
|
53
|
-
readonly fallbackRenderer?: PartRenderer<ForeignPart
|
|
55
|
+
readonly fallbackRenderer?: PartRenderer<ForeignPart> | undefined;
|
|
54
56
|
/**
|
|
55
57
|
* Per-message hover-row contract (timestamp/copy/regenerate/actions), forwarded verbatim to the
|
|
56
58
|
* row's `ThreadTranscript`. Shared with it via `message-affordances.ts` so the two cannot drift
|
|
57
59
|
* on what an unset field means.
|
|
58
60
|
*/
|
|
59
|
-
readonly affordances?: MessageAffordances;
|
|
61
|
+
readonly affordances?: MessageAffordances | undefined;
|
|
60
62
|
/** Forwarded to `ThreadTranscript` — suppresses role label + chrome on same-speaker runs.
|
|
61
63
|
* @default true */
|
|
62
|
-
readonly groupConsecutive?: boolean;
|
|
64
|
+
readonly groupConsecutive?: boolean | undefined;
|
|
63
65
|
/** Called with the composer's submit payload. */
|
|
64
66
|
readonly onSend: (payload: ComposerSubmit) => void;
|
|
65
|
-
/** Shown as the composer's Stop action while `liveStatus
|
|
66
|
-
readonly onStop?: () => void;
|
|
67
|
+
/** Shown as the composer's Stop action while `liveStatus` is `'submitted'` or `'streaming'`. */
|
|
68
|
+
readonly onStop?: (() => void) | undefined;
|
|
67
69
|
/** Forwarded to the row's `Composer`, minus the three props this component always wires itself
|
|
68
70
|
* (`onSubmit`, `onStop`, and `streaming` — the last derived from `liveStatus` so a consumer can't
|
|
69
71
|
* pass one that disagrees with the row's own live status). */
|
|
70
|
-
readonly composerProps?: Omit<ComposerProps, 'onSubmit' | 'onStop' | 'streaming'
|
|
72
|
+
readonly composerProps?: Omit<ComposerProps, 'onSubmit' | 'onStop' | 'streaming'> | undefined;
|
|
71
73
|
};
|
|
72
74
|
/**
|
|
73
75
|
* `virtualize`/`height` are forwarded straight to the row's `ThreadTranscript`, carrying the same
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-feed-row.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/thread-feed-row.tsx"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAG1F,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAI/D,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAA;AAsCnE,KAAK,iBAAiB,GAAG;IACvB;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAA;IAC5C,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC;+FAC2F;IAC3F,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3C;;kBAEc;IACd,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,WAAW,CAAC,cAAc,CAAC,EAAE,GAAG,SAAS,CAAA;IACtE,4FAA4F;IAC5F,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,cAAc,EAAE,GAAG,SAAS,CAAA;IAC1D,kFAAkF;IAClF,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;IAC9C,8EAA8E;IAC9E,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IAC9C,8DAA8D;IAC9D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,GAAG,SAAS,CAAA;IACjE;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACrD;uBACmB;IACnB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC/C,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAA;IAClD,gGAAgG;IAChG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;IAC1C;;kEAE8D;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,CAAC,GAAG,SAAS,CAAA;CAC9F,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAChD,cAAc,GACd,eAAe,CAAC,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,GAC3C,WAAW,CAAA;AAkBb;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CA8JpE"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Group, Stack, Text, UnstyledButton } from "@mantine/core";
|
|
3
3
|
import { useState } from "react";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { isLiveStatus } from "../thread.js";
|
|
5
|
+
import { BasaltStickToBottom } from "../stick-to-bottom.js";
|
|
6
|
+
import { cx } from "../../common/props.js";
|
|
7
|
+
import { assertRequiredProps } from "../../common/validate.js";
|
|
8
|
+
import { VX } from "../../tokens/index.js";
|
|
8
9
|
import { Composer } from "./composer.js";
|
|
9
10
|
import { formatRelativeTime } from "./relative-time.js";
|
|
10
11
|
import { ThreadTranscript } from "./thread-message.js";
|
|
@@ -81,17 +82,17 @@ function ThreadFeedRow(props) {
|
|
|
81
82
|
const resolvedTitle = rowTitle(thread, title);
|
|
82
83
|
const resolvedSummary = rowSummary(thread, summaryOverride);
|
|
83
84
|
const transcriptMessages = messages ?? thread.messages;
|
|
84
|
-
const streaming = liveStatus
|
|
85
|
+
const streaming = isLiveStatus(liveStatus);
|
|
85
86
|
const transcript = /* @__PURE__ */ jsx(
|
|
86
87
|
ThreadTranscript,
|
|
87
88
|
{
|
|
88
89
|
messages: transcriptMessages,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
90
|
+
liveParts,
|
|
91
|
+
liveStatus,
|
|
92
|
+
renderers,
|
|
93
|
+
fallbackRenderer,
|
|
94
|
+
affordances,
|
|
95
|
+
groupConsecutive,
|
|
95
96
|
...virtualizeProps
|
|
96
97
|
}
|
|
97
98
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { JSX, ReactNode } from 'react';
|
|
2
|
-
import type { AgentThread } from '../
|
|
3
|
-
import type { BasaltProps } from '
|
|
2
|
+
import type { AgentThread } from '../thread.js';
|
|
3
|
+
import type { BasaltProps } from '../../common/props.js';
|
|
4
4
|
import type { ComposerSubmit } from './composer.js';
|
|
5
5
|
export type ThreadFeedProps = BasaltProps & {
|
|
6
6
|
readonly threads: AgentThread[];
|
|
@@ -19,22 +19,22 @@ export type ThreadFeedProps = BasaltProps & {
|
|
|
19
19
|
* directly (the previous shape) meant a plain `onSelect={setActiveId}` consumer could never
|
|
20
20
|
* collapse a row, since re-selecting the same id is a no-op state update. Collapsing here is
|
|
21
21
|
* local, UI-only state, reset whenever `activeId` changes to point at a DIFFERENT thread. Since
|
|
22
|
-
* this reset
|
|
23
|
-
* this component is a no-op
|
|
22
|
+
* this reset compares `activeId` against the last one seen, re-driving it to the SAME id from outside
|
|
23
|
+
* this component is a no-op comparison, so it does not clear the override.
|
|
24
24
|
*/
|
|
25
|
-
readonly variant?: 'outcome' | 'inline';
|
|
25
|
+
readonly variant?: 'outcome' | 'inline' | undefined;
|
|
26
26
|
/**
|
|
27
27
|
* Wires the built-in `'inline'` row's composer to a real send channel — called with the thread
|
|
28
28
|
* and the composer's submit payload. Omit it and the row's composer renders disabled (visibly
|
|
29
29
|
* inert) instead of a live control that silently discards whatever is typed into it; a consumer
|
|
30
30
|
* that needs the composer live must supply this (or `renderRow`, for full control over the row).
|
|
31
31
|
*/
|
|
32
|
-
readonly onSend?: (thread: AgentThread, payload: ComposerSubmit) => void;
|
|
32
|
+
readonly onSend?: ((thread: AgentThread, payload: ComposerSubmit) => void) | undefined;
|
|
33
33
|
/** Overrides row rendering entirely, for BOTH variants — when supplied, this is called for every
|
|
34
34
|
* thread instead of either built-in row. Gives full control over live-run wiring
|
|
35
35
|
* (`onStop`/`liveParts`/`liveStatus`) the built-in `'inline'` row doesn't expose; see `variant`
|
|
36
36
|
* and `onSend`. */
|
|
37
|
-
readonly renderRow?: (thread: AgentThread) => ReactNode;
|
|
37
|
+
readonly renderRow?: ((thread: AgentThread) => ReactNode) | undefined;
|
|
38
38
|
/**
|
|
39
39
|
* Scroll anchor. `'start'` (default) is today's top-anchored `ScrollArea` feed, unchanged.
|
|
40
40
|
* `'end'` anchors the feed's growth to the BOTTOM instead — a `BasaltStickToBottom` scroll node
|
|
@@ -44,7 +44,7 @@ export type ThreadFeedProps = BasaltProps & {
|
|
|
44
44
|
* (argo's hermes-chat S15 — oldest→newest top→bottom, pinned last, `renderRow`-driven) needs
|
|
45
45
|
* instead of hand-rolling its own scroll shell around `renderRow`.
|
|
46
46
|
*/
|
|
47
|
-
readonly anchor?: 'start' | 'end';
|
|
47
|
+
readonly anchor?: 'start' | 'end' | undefined;
|
|
48
48
|
};
|
|
49
49
|
/**
|
|
50
50
|
* A scrollable feed of thread rows, animated on add/remove/reorder. Row content comes from
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-feed.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/thread-feed.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAShD,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG;IAC1C,QAAQ,CAAC,OAAO,EAAE,WAAW,EAAE,CAAA;IAC/B,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC;uGACmG;IACnG,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAA;IACnD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACtF;;;uBAGmB;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,KAAK,SAAS,CAAC,GAAG,SAAS,CAAA;IACrE;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,CAAA;CAC9C,CAAA;AAgCD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,OAAmB,EACnB,MAAM,EACN,SAAS,EACT,MAAgB,EAChB,SAAS,EACT,KAAK,GACN,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAsF/B"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Box, ScrollArea, Stack } from "@mantine/core";
|
|
3
3
|
import { useReducedMotion } from "@mantine/hooks";
|
|
4
|
-
import { AnimatePresence, motion } from "motion/react";
|
|
5
|
-
import {
|
|
6
|
-
import { BasaltStickToBottom } from "../
|
|
7
|
-
import { cx } from "
|
|
8
|
-
import { assertRequiredProps } from "
|
|
9
|
-
import { MOTION_SPRING } from "
|
|
4
|
+
import { AnimatePresence, MotionConfig, motion } from "motion/react";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { BasaltStickToBottom } from "../stick-to-bottom.js";
|
|
7
|
+
import { cx } from "../../common/props.js";
|
|
8
|
+
import { assertRequiredProps } from "../../common/validate.js";
|
|
9
|
+
import { MOTION_SPRING } from "../../common/motion.js";
|
|
10
10
|
import { ThreadFeedRow } from "./thread-feed-row.js";
|
|
11
11
|
import { ThreadOutcomeCard } from "./thread-outcome-card.js";
|
|
12
12
|
function noopSend() {
|
|
@@ -48,9 +48,11 @@ function ThreadFeed({
|
|
|
48
48
|
assertRequiredProps("ThreadFeed", { threads }, ["threads"]);
|
|
49
49
|
const reduceMotion = useReducedMotion();
|
|
50
50
|
const [collapsedId, setCollapsedId] = useState(null);
|
|
51
|
-
|
|
51
|
+
const [seenActiveId, setSeenActiveId] = useState(activeId);
|
|
52
|
+
if (seenActiveId !== activeId) {
|
|
53
|
+
setSeenActiveId(activeId);
|
|
52
54
|
setCollapsedId(null);
|
|
53
|
-
}
|
|
55
|
+
}
|
|
54
56
|
function handleInlineToggle(id) {
|
|
55
57
|
const isOpen = id === activeId && id !== collapsedId;
|
|
56
58
|
if (isOpen) {
|
|
@@ -62,7 +64,7 @@ function ThreadFeed({
|
|
|
62
64
|
}
|
|
63
65
|
const rowFor = (thread) => renderRow !== void 0 ? renderRow(thread) : defaultRow(thread, variant, activeId, collapsedId, handleInlineToggle, onSelect, onSend);
|
|
64
66
|
const stackAnchorProps = anchor === "end" ? { justify: "flex-end", mih: "100%" } : {};
|
|
65
|
-
const list = reduceMotion ? /* @__PURE__ */ jsx(Stack, { gap: "sm", p: "sm", ...stackAnchorProps, children: threads.map((thread) => /* @__PURE__ */ jsx(Box, { children: rowFor(thread) }, thread.id)) }) : /* @__PURE__ */ jsx(Stack, { gap: "sm", p: "sm", ...stackAnchorProps, children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: threads.map((thread) => /* @__PURE__ */ jsx(
|
|
67
|
+
const list = reduceMotion ? /* @__PURE__ */ jsx(Stack, { gap: "sm", p: "sm", ...stackAnchorProps, children: threads.map((thread) => /* @__PURE__ */ jsx(Box, { children: rowFor(thread) }, thread.id)) }) : /* @__PURE__ */ jsx(Stack, { gap: "sm", p: "sm", ...stackAnchorProps, children: /* @__PURE__ */ jsx(MotionConfig, { reducedMotion: "user", children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: threads.map((thread) => /* @__PURE__ */ jsx(
|
|
66
68
|
motion.div,
|
|
67
69
|
{
|
|
68
70
|
layout: true,
|
|
@@ -73,7 +75,7 @@ function ThreadFeed({
|
|
|
73
75
|
children: rowFor(thread)
|
|
74
76
|
},
|
|
75
77
|
thread.id
|
|
76
|
-
)) }) });
|
|
78
|
+
)) }) }) });
|
|
77
79
|
if (anchor === "end") {
|
|
78
80
|
return /* @__PURE__ */ jsx(BasaltStickToBottom, { className: cx(className), style: { height: "100%", ...style }, children: list });
|
|
79
81
|
}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { JSX } from 'react';
|
|
2
|
-
import type { AgentPartRenderers
|
|
3
|
-
import type {
|
|
2
|
+
import type { AgentPartRenderers } from '../part-list.js';
|
|
3
|
+
import type { ChatMessage } from '../history.js';
|
|
4
|
+
import type { ForeignPart, PartRenderer, PartRenderers, TranscriptPart } from '../foreign.js';
|
|
5
|
+
import type { StreamStatus } from '../thread.js';
|
|
6
|
+
import type { BasaltProps } from '../../common/props.js';
|
|
4
7
|
import type { MessageAffordances } from './message-affordances.js';
|
|
5
8
|
import type { VirtualizeOptions, VirtualizeProps } from './virtualize.js';
|
|
6
9
|
/**
|
|
@@ -185,22 +188,22 @@ type ThreadTranscriptBase = BasaltProps & {
|
|
|
185
188
|
/** Settled messages for the thread, oldest first. */
|
|
186
189
|
readonly messages: readonly ChatMessage<TranscriptPart>[];
|
|
187
190
|
/** The live (in-flight) assistant turn's parts, when a run is streaming for this thread. */
|
|
188
|
-
readonly liveParts?: readonly TranscriptPart[];
|
|
191
|
+
readonly liveParts?: readonly TranscriptPart[] | undefined;
|
|
189
192
|
/** The live run's status — drives the in-progress indicator on the live block. */
|
|
190
|
-
readonly liveStatus?: StreamStatus;
|
|
193
|
+
readonly liveStatus?: StreamStatus | undefined;
|
|
191
194
|
/** Consumer renderers keyed by part.type. Consulted BEFORE the built-in union. */
|
|
192
|
-
readonly renderers?: PartRenderers;
|
|
195
|
+
readonly renderers?: PartRenderers | undefined;
|
|
193
196
|
/** Called for a part whose type is neither an AgentPart variant nor a registered key. Defaults
|
|
194
197
|
* to a visible `UnknownPartChip` outside production, `null` in production — never throws. */
|
|
195
|
-
readonly fallbackRenderer?: PartRenderer<ForeignPart
|
|
198
|
+
readonly fallbackRenderer?: PartRenderer<ForeignPart> | undefined;
|
|
196
199
|
/** Per-message hover-row affordances (timestamp/copy/regenerate/custom actions). Unset fields
|
|
197
200
|
* fall back to `DEFAULT_AFFORDANCES`. Never shown on the live/streaming message — see
|
|
198
201
|
* `MessageBlockProps.affordances`. */
|
|
199
|
-
readonly affordances?: MessageAffordances;
|
|
202
|
+
readonly affordances?: MessageAffordances | undefined;
|
|
200
203
|
/** Suppresses the role label and surface chrome on a message whose predecessor shares its role
|
|
201
204
|
* and landed within 5 minutes — the Slack rhythm.
|
|
202
205
|
* @default true */
|
|
203
|
-
readonly groupConsecutive?: boolean;
|
|
206
|
+
readonly groupConsecutive?: boolean | undefined;
|
|
204
207
|
};
|
|
205
208
|
export type ThreadTranscriptProps = ThreadTranscriptBase & VirtualizeProps;
|
|
206
209
|
/**
|
|
@@ -219,7 +222,7 @@ export type ThreadTranscriptProps = ThreadTranscriptBase & VirtualizeProps;
|
|
|
219
222
|
*
|
|
220
223
|
* @example
|
|
221
224
|
* import { ThreadTranscript } from 'basalt-ui'
|
|
222
|
-
* <ThreadTranscript messages={thread.messages} liveParts={
|
|
225
|
+
* <ThreadTranscript messages={thread.messages} liveParts={run?.parts} liveStatus={run?.status} />
|
|
223
226
|
*
|
|
224
227
|
* @example
|
|
225
228
|
* // Windowed, for a long thread:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-message.d.ts","sourceRoot":"","sources":["../../../src/agent/chat/thread-message.tsx"],"names":[],"mappings":"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"}
|