zidane-ui 9.1.1 → 9.1.3
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/README.md +2 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/ModalProvider.d.ts +3 -1
- package/dist/app/ModalProvider.js +15 -9
- package/dist/approvals/headless/index.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/index.js +1 -1
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/headless/block-runs.d.ts +57 -0
- package/dist/chat/headless/block-runs.js +123 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/fixture-transcript.d.ts +6 -1
- package/dist/chat/headless/fixture-transcript.js +49 -0
- package/dist/chat/headless/host.d.ts +3 -0
- package/dist/chat/headless/index.d.ts +2 -1
- package/dist/chat/headless/index.js +12 -11
- package/dist/chat/headless/labels.d.ts +42 -0
- package/dist/chat/headless/labels.js +42 -0
- package/dist/chat/headless/session-list.d.ts +27 -0
- package/dist/chat/headless/sidebar/index.js +1 -1
- package/dist/chat/headless/sidebar/labels.d.ts +27 -0
- package/dist/chat/headless/streams/index.js +1 -1
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +2 -2
- package/dist/chat/headless/streams/store.js +2 -2
- package/dist/chat/headless/transcript/batch.d.ts +21 -1
- package/dist/chat/headless/transcript/batch.js +55 -10
- package/dist/chat/headless/transcript/collapse.js +18 -3
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/index.js +1 -1
- package/dist/chat/headless/transcript/rows.d.ts +7 -1
- package/dist/chat/index.d.ts +6 -1
- package/dist/chat/index.js +7 -2
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/TranscriptRow.js +19 -2
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/index.d.ts +6 -1
- package/dist/chat/transcript/index.js +6 -1
- package/dist/chat/transcript/markdown.js +9 -0
- package/dist/chat/transcript/renderers.d.ts +7 -0
- package/dist/chat/transcript/script-input.d.ts +17 -0
- package/dist/chat/transcript/script-input.js +16 -0
- package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
- package/dist/chat/transcript/shell-block-scope.js +18 -0
- package/dist/chat/transcript/shell-block.d.ts +27 -0
- package/dist/chat/transcript/shell-block.js +306 -0
- package/dist/chat/transcript/tool-parts.d.ts +18 -6
- package/dist/chat/transcript/tool-parts.js +15 -5
- package/dist/chat/transcript/tool-payload.js +6 -3
- package/dist/chat/transcript/tool-row.js +155 -96
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/code/HighlightedCode.js +3 -69
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/core.css +6 -2
- package/dist/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +101 -3
- package/dist/extensions/ExtensionSettingsSidebar.js +19 -3
- package/dist/extensions/kit.d.ts +1 -1
- package/dist/git/BranchMenu.d.ts +1 -7
- package/dist/git/BranchMenu.js +17 -40
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/onboarding/index.js +1 -1
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +15 -8
- package/dist/settings/headless/catalog.js +5 -0
- package/dist/settings/headless/layout.js +2 -1
- package/dist/settings/headless/registry.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +2 -2
- package/dist/settings/sections/models/ModelRows.js +1 -1
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/styles.css +291 -2
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +10 -0
- package/dist/terminal/headless/store.js +16 -0
- package/dist/terminal/index.d.ts +2 -2
- package/dist/terminal/index.js +2 -2
- package/dist/theme/runtime-icons.d.ts +50 -0
- package/dist/theme/runtime-icons.js +95 -0
- package/package.json +3 -6
- package/src/styles/primitives.css +5 -2
- package/src/styles/transcript.css +281 -0
- package/src/adapters/browser-appearance-host.ts +0 -51
- package/src/adapters/browser-keybindings-host.ts +0 -48
- package/src/adapters/browser-workspace-host.ts +0 -92
- package/src/adapters/closable-client.ts +0 -34
- package/src/adapters/extension-modules.ts +0 -360
- package/src/adapters/index.ts +0 -35
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -270
- package/src/adapters/run-host.ts +0 -238
- package/src/adapters/server-approvals-host.ts +0 -102
- package/src/adapters/server-client.ts +0 -15
- package/src/adapters/server-composer-host.ts +0 -459
- package/src/adapters/server-extensions-host.ts +0 -979
- package/src/adapters/server-files-host.ts +0 -287
- package/src/adapters/server-git-host.ts +0 -289
- package/src/adapters/server-host.ts +0 -489
- package/src/adapters/server-machines-host.ts +0 -283
- package/src/adapters/server-oauth-flow.ts +0 -133
- package/src/adapters/server-onboarding-host.ts +0 -363
- package/src/adapters/server-palette-host.ts +0 -134
- package/src/adapters/server-session-host.ts +0 -241
- package/src/adapters/server-settings-accounts.ts +0 -212
- package/src/adapters/server-settings-host.ts +0 -120
- package/src/adapters/server-settings-models.ts +0 -46
- package/src/adapters/server-settings-performance.ts +0 -58
- package/src/adapters/server-settings-sections.ts +0 -222
- package/src/adapters/server-sidebar-host.ts +0 -59
- package/src/adapters/server-terminal-host.ts +0 -124
- package/src/adapters/server-transcript-members.ts +0 -131
- package/src/adapters/sse-host.ts +0 -264
- package/src/adapters/sse-parser.ts +0 -82
- package/src/adapters/sse-protocol.ts +0 -118
- package/src/adapters/stream-pacer.ts +0 -122
- package/src/adapters/worker-host.ts +0 -192
- package/src/adapters/worker-protocol.ts +0 -97
- package/src/app/AppHostProvider.tsx +0 -135
- package/src/app/ModalProvider.tsx +0 -731
- package/src/app/headless/app-host.ts +0 -61
- package/src/app/headless/index.ts +0 -6
- package/src/app/headless/resource.ts +0 -444
- package/src/app/index.ts +0 -9
- package/src/app/testing/index.ts +0 -90
- package/src/app/useConfirm.tsx +0 -65
- package/src/app/useResource.ts +0 -30
- package/src/appearance/AppearanceProvider.tsx +0 -383
- package/src/appearance/apply.ts +0 -69
- package/src/appearance/headless/fixture-host.ts +0 -111
- package/src/appearance/headless/fonts.ts +0 -224
- package/src/appearance/headless/host.ts +0 -65
- package/src/appearance/headless/index.ts +0 -12
- package/src/appearance/headless/prefs.ts +0 -252
- package/src/appearance/headless/storage.ts +0 -127
- package/src/appearance/headless/zoom-commands.ts +0 -21
- package/src/appearance/index.ts +0 -11
- package/src/appearance/testing/contract.ts +0 -210
- package/src/appearance/testing/index.ts +0 -6
- package/src/approvals/ApprovalBar.tsx +0 -234
- package/src/approvals/ApprovalConcern.tsx +0 -33
- package/src/approvals/ApprovalShell.tsx +0 -69
- package/src/approvals/ApprovalsProvider.tsx +0 -110
- package/src/approvals/FileEditApproval.tsx +0 -310
- package/src/approvals/HunkPreviews.tsx +0 -225
- package/src/approvals/SafelistPanel.tsx +0 -149
- package/src/approvals/headless/fixture-host.ts +0 -73
- package/src/approvals/headless/fixtures.ts +0 -86
- package/src/approvals/headless/heads.ts +0 -81
- package/src/approvals/headless/host.ts +0 -80
- package/src/approvals/headless/index.ts +0 -12
- package/src/approvals/headless/labels.ts +0 -67
- package/src/approvals/headless/pending.ts +0 -91
- package/src/approvals/headless/preview.ts +0 -94
- package/src/approvals/headless/safelist.ts +0 -63
- package/src/approvals/index.ts +0 -13
- package/src/approvals/key-scope.ts +0 -33
- package/src/approvals/testing/contract.ts +0 -230
- package/src/approvals/testing/index.ts +0 -7
- package/src/brands/marks.ts +0 -298
- package/src/chat/ChatProvider.tsx +0 -60
- package/src/chat/DaemonOrb.tsx +0 -107
- package/src/chat/HostBadge.tsx +0 -71
- package/src/chat/HostStatusDot.tsx +0 -53
- package/src/chat/HostTranscript.tsx +0 -101
- package/src/chat/PdfPreview.tsx +0 -65
- package/src/chat/RunEstimateChip.tsx +0 -168
- package/src/chat/SessionFilterMenu.tsx +0 -397
- package/src/chat/SessionGroupHeader.tsx +0 -177
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -296
- package/src/chat/SessionStreamsProvider.tsx +0 -253
- package/src/chat/StatusDot.tsx +0 -128
- package/src/chat/TextPreview.tsx +0 -121
- package/src/chat/Throbber.tsx +0 -270
- package/src/chat/Transcript.tsx +0 -523
- package/src/chat/composer/AgentPicker.tsx +0 -155
- package/src/chat/composer/AgentPickerDialog.tsx +0 -99
- package/src/chat/composer/ApprovalDock.tsx +0 -64
- package/src/chat/composer/ArchivedBanner.tsx +0 -44
- package/src/chat/composer/AttachmentTiles.tsx +0 -211
- package/src/chat/composer/Composer.tsx +0 -500
- package/src/chat/composer/ComposerBadges.tsx +0 -339
- package/src/chat/composer/ComposerControls.tsx +0 -243
- package/src/chat/composer/ComposerEditor.tsx +0 -101
- package/src/chat/composer/ComposerHostProvider.tsx +0 -46
- package/src/chat/composer/ComposerShell.tsx +0 -129
- package/src/chat/composer/ContextBreakdown.tsx +0 -382
- package/src/chat/composer/ContextOrb.tsx +0 -176
- package/src/chat/composer/ConversationBadges.tsx +0 -168
- package/src/chat/composer/DockCard.tsx +0 -126
- package/src/chat/composer/EffortPickerDialog.tsx +0 -184
- package/src/chat/composer/HostComposer.tsx +0 -135
- package/src/chat/composer/HostContextOrb.tsx +0 -94
- package/src/chat/composer/HostModelChainList.tsx +0 -102
- package/src/chat/composer/HostPicker.tsx +0 -97
- package/src/chat/composer/HostPickers.tsx +0 -320
- package/src/chat/composer/ImageModelList.tsx +0 -151
- package/src/chat/composer/ModelChainList.tsx +0 -442
- package/src/chat/composer/ModelChainParts.tsx +0 -247
- package/src/chat/composer/ModelChainRow.tsx +0 -191
- package/src/chat/composer/ModelChainRows.tsx +0 -223
- package/src/chat/composer/ModelChainTooltip.tsx +0 -121
- package/src/chat/composer/ModelFacts.tsx +0 -204
- package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
- package/src/chat/composer/ModelPicker.tsx +0 -513
- package/src/chat/composer/ModelPickerDialog.tsx +0 -99
- package/src/chat/composer/ModelProviderPills.tsx +0 -141
- package/src/chat/composer/PickerPill.tsx +0 -41
- package/src/chat/composer/ProjectMenu.tsx +0 -187
- package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
- package/src/chat/composer/RetryPill.tsx +0 -47
- package/src/chat/composer/RunStatusChip.tsx +0 -150
- package/src/chat/composer/ScopeToggle.tsx +0 -94
- package/src/chat/composer/SelectTurnHint.tsx +0 -40
- package/src/chat/composer/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -188
- package/src/chat/composer/attachment-ingest.ts +0 -413
- package/src/chat/composer/attachments.tsx +0 -176
- package/src/chat/composer/badge-order.ts +0 -65
- package/src/chat/composer/composer-bus.ts +0 -317
- package/src/chat/composer/index.ts +0 -63
- package/src/chat/composer/load-composer-editor.ts +0 -25
- package/src/chat/composer/model-catalog.ts +0 -424
- package/src/chat/composer/model-list-layout.ts +0 -118
- package/src/chat/composer/prompt-history-nav.ts +0 -60
- package/src/chat/composer/scope-side.ts +0 -7
- package/src/chat/composer/suggestion-extension.ts +0 -113
- package/src/chat/composer/suggestions.tsx +0 -115
- package/src/chat/composer/use-agent-profiles.ts +0 -97
- package/src/chat/composer/use-cache-hints.ts +0 -93
- package/src/chat/composer/use-composer-stores.ts +0 -140
- package/src/chat/composer/use-draft-target.ts +0 -317
- package/src/chat/composer/use-new-session-defaults.ts +0 -201
- package/src/chat/composer/use-provider-ready-poll.ts +0 -35
- package/src/chat/composer/use-run-meter.ts +0 -140
- package/src/chat/composer/use-send-prompt.ts +0 -188
- package/src/chat/composer/use-session-meters.ts +0 -109
- package/src/chat/composer/use-sustained-work.ts +0 -74
- package/src/chat/composer/useAttachmentIngest.ts +0 -116
- package/src/chat/composer/useModelListSpy.ts +0 -19
- package/src/chat/headless/badge-refs.ts +0 -76
- package/src/chat/headless/chip-labels.ts +0 -40
- package/src/chat/headless/chip-settle.ts +0 -53
- package/src/chat/headless/chip-views.ts +0 -215
- package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
- package/src/chat/headless/composer/commands.ts +0 -16
- package/src/chat/headless/composer/composer-sources.ts +0 -150
- package/src/chat/headless/composer/conversation-badges.ts +0 -227
- package/src/chat/headless/composer/draft-sync.ts +0 -199
- package/src/chat/headless/composer/editor-markdown.ts +0 -137
- package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
- package/src/chat/headless/composer/host-chrome.ts +0 -197
- package/src/chat/headless/composer/host.ts +0 -250
- package/src/chat/headless/composer/index.ts +0 -17
- package/src/chat/headless/composer/labels-chrome.ts +0 -83
- package/src/chat/headless/composer/labels-editor.ts +0 -44
- package/src/chat/headless/composer/labels.ts +0 -18
- package/src/chat/headless/composer/live-cost.ts +0 -67
- package/src/chat/headless/composer/model-knobs.ts +0 -179
- package/src/chat/headless/composer/model-names.ts +0 -145
- package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
- package/src/chat/headless/composer/models.ts +0 -86
- package/src/chat/headless/composer/new-session-defaults.ts +0 -68
- package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
- package/src/chat/headless/composer/remember-model-pick.ts +0 -132
- package/src/chat/headless/composer/run-meter.ts +0 -228
- package/src/chat/headless/composer-modes.ts +0 -170
- package/src/chat/headless/draft-scope.ts +0 -136
- package/src/chat/headless/draft-target.ts +0 -87
- package/src/chat/headless/extension-sources.ts +0 -64
- package/src/chat/headless/file-chip.ts +0 -175
- package/src/chat/headless/fixture-host.ts +0 -294
- package/src/chat/headless/fixture-transcript.ts +0 -125
- package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
- package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
- package/src/chat/headless/host.ts +0 -264
- package/src/chat/headless/hosts.ts +0 -55
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -373
- package/src/chat/headless/markdown-chunks.ts +0 -134
- package/src/chat/headless/path-resolver.ts +0 -178
- package/src/chat/headless/prompt-origin.ts +0 -90
- package/src/chat/headless/reference-store.ts +0 -285
- package/src/chat/headless/send-flow.ts +0 -347
- package/src/chat/headless/session-list.ts +0 -400
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -190
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -1046
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/estimates.ts +0 -146
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -18
- package/src/chat/headless/sidebar/labels.ts +0 -161
- package/src/chat/headless/sidebar/notifications.ts +0 -61
- package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
- package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
- package/src/chat/headless/sidebar/project-icons.ts +0 -116
- package/src/chat/headless/sidebar/query.ts +0 -621
- package/src/chat/headless/sidebar/rows.ts +0 -427
- package/src/chat/headless/sidebar/types.ts +0 -96
- package/src/chat/headless/sidebar/view.ts +0 -367
- package/src/chat/headless/site-icons.ts +0 -51
- package/src/chat/headless/smooth-stream.ts +0 -76
- package/src/chat/headless/store.ts +0 -62
- package/src/chat/headless/streams/actions.ts +0 -85
- package/src/chat/headless/streams/index.ts +0 -25
- package/src/chat/headless/streams/live-events.ts +0 -124
- package/src/chat/headless/streams/merge.ts +0 -60
- package/src/chat/headless/streams/pacer.ts +0 -189
- package/src/chat/headless/streams/prompt-previews.ts +0 -64
- package/src/chat/headless/streams/scheduler.ts +0 -36
- package/src/chat/headless/streams/selectors.ts +0 -76
- package/src/chat/headless/streams/session-streams.ts +0 -407
- package/src/chat/headless/streams/store.ts +0 -1107
- package/src/chat/headless/streams/transcript.ts +0 -41
- package/src/chat/headless/streams/types.ts +0 -84
- package/src/chat/headless/transcript/batch.ts +0 -429
- package/src/chat/headless/transcript/collapse.ts +0 -789
- package/src/chat/headless/transcript/fold-actions.ts +0 -269
- package/src/chat/headless/transcript/fold-attachments.ts +0 -78
- package/src/chat/headless/transcript/fold.ts +0 -382
- package/src/chat/headless/transcript/index.ts +0 -41
- package/src/chat/headless/transcript/nesting.ts +0 -73
- package/src/chat/headless/transcript/pairing.ts +0 -124
- package/src/chat/headless/transcript/rows.ts +0 -377
- package/src/chat/headless/transcript/run-failures.ts +0 -72
- package/src/chat/headless/transcript/select-stops.ts +0 -151
- package/src/chat/headless/transcript/tool-media.ts +0 -42
- package/src/chat/headless/transcript-host.ts +0 -180
- package/src/chat/headless/transcript-labels.ts +0 -12
- package/src/chat/headless/turn-labels.ts +0 -28
- package/src/chat/headless/turn-prompt.ts +0 -32
- package/src/chat/index.ts +0 -31
- package/src/chat/interactions/HostInteractions.tsx +0 -76
- package/src/chat/interactions/InboxPanel.tsx +0 -226
- package/src/chat/interactions/InteractionCard.tsx +0 -111
- package/src/chat/interactions/PlanCard.tsx +0 -186
- package/src/chat/interactions/QuestionField.tsx +0 -336
- package/src/chat/interactions/QuestionForm.tsx +0 -283
- package/src/chat/interactions/card-ui.tsx +0 -86
- package/src/chat/interactions/hooks.ts +0 -49
- package/src/chat/interactions/index.ts +0 -8
- package/src/chat/provider-color.ts +0 -71
- package/src/chat/rich-composer/MentionList.tsx +0 -238
- package/src/chat/rich-composer/RichComposer.tsx +0 -1071
- package/src/chat/rich-composer/badge-decorations.ts +0 -157
- package/src/chat/rich-composer/composer-controls.tsx +0 -102
- package/src/chat/rich-composer/composer-extensions.ts +0 -388
- package/src/chat/rich-composer/composer-keys.ts +0 -416
- package/src/chat/rich-composer/ghost-plugin.ts +0 -89
- package/src/chat/rich-composer/index.ts +0 -3
- package/src/chat/rich-composer/mention-popover.ts +0 -336
- package/src/chat/rich-composer/slash-completion.ts +0 -143
- package/src/chat/rich-composer/use-composer-bus.ts +0 -57
- package/src/chat/rich-composer/use-composer-editor.ts +0 -216
- package/src/chat/rich-composer/use-composer-sources.ts +0 -90
- package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
- package/src/chat/rich-composer/use-editor-handover.ts +0 -45
- package/src/chat/rich-composer/use-extension-composer.ts +0 -80
- package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
- package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
- package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
- package/src/chat/sidebar/MainSessionRow.tsx +0 -102
- package/src/chat/sidebar/ProjectIcon.tsx +0 -399
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -1039
- package/src/chat/sidebar/SidebarDecoration.tsx +0 -93
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -270
- package/src/chat/sidebar/SidebarFooter.tsx +0 -244
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -263
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarRowView.tsx +0 -151
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -317
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -341
- package/src/chat/sidebar/SpacesSection.tsx +0 -259
- package/src/chat/sidebar/collapsed.ts +0 -61
- package/src/chat/sidebar/index.ts +0 -109
- package/src/chat/sidebar/session-menu.ts +0 -441
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -666
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useAgentNames.ts +0 -12
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSaveViewAsSpace.ts +0 -42
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -128
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -167
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -508
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -159
- package/src/chat/testing/fixture-composer-host.ts +0 -147
- package/src/chat/testing/fixture-sidebar-host.ts +0 -99
- package/src/chat/testing/index.ts +0 -12
- package/src/chat/testing/sidebar.contract.ts +0 -196
- package/src/chat/transcript/BadgeMenu.tsx +0 -241
- package/src/chat/transcript/CardMarkdown.tsx +0 -102
- package/src/chat/transcript/ChipCard.tsx +0 -187
- package/src/chat/transcript/ChipCards.tsx +0 -100
- package/src/chat/transcript/DiffLines.tsx +0 -122
- package/src/chat/transcript/EarlierHistory.tsx +0 -136
- package/src/chat/transcript/EditDiffBlock.tsx +0 -176
- package/src/chat/transcript/FileChip.tsx +0 -361
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -211
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/MermaidDiagram.tsx +0 -484
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -168
- package/src/chat/transcript/ReferenceText.tsx +0 -198
- package/src/chat/transcript/SelectCursor.tsx +0 -118
- package/src/chat/transcript/SelectTurnHint.tsx +0 -81
- package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
- package/src/chat/transcript/SubagentBlock.tsx +0 -224
- package/src/chat/transcript/TranscriptRow.tsx +0 -362
- package/src/chat/transcript/TranscriptSearch.tsx +0 -171
- package/src/chat/transcript/TurnMenu.tsx +0 -217
- package/src/chat/transcript/actions.tsx +0 -77
- package/src/chat/transcript/badges.tsx +0 -155
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- package/src/chat/transcript/extension-renderers.tsx +0 -148
- package/src/chat/transcript/fold-attachments.tsx +0 -221
- package/src/chat/transcript/fold-status.tsx +0 -112
- package/src/chat/transcript/fold-worker.tsx +0 -160
- package/src/chat/transcript/fold.tsx +0 -522
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -66
- package/src/chat/transcript/markdown-cache.ts +0 -84
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -351
- package/src/chat/transcript/messages.tsx +0 -169
- package/src/chat/transcript/notices.tsx +0 -508
- package/src/chat/transcript/prompt-lines.tsx +0 -55
- package/src/chat/transcript/prompt.tsx +0 -258
- package/src/chat/transcript/prose.tsx +0 -171
- package/src/chat/transcript/recent-map.ts +0 -32
- package/src/chat/transcript/references.ts +0 -108
- package/src/chat/transcript/remark-references.ts +0 -157
- package/src/chat/transcript/remark-refs.ts +0 -176
- package/src/chat/transcript/renderer-slots.tsx +0 -35
- package/src/chat/transcript/renderers.tsx +0 -251
- package/src/chat/transcript/row-estimate.ts +0 -158
- package/src/chat/transcript/run-rows.tsx +0 -291
- package/src/chat/transcript/site-icons.ts +0 -27
- package/src/chat/transcript/thumbnails.ts +0 -146
- package/src/chat/transcript/tool-batch.tsx +0 -102
- package/src/chat/transcript/tool-details.tsx +0 -31
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-payload.tsx +0 -76
- package/src/chat/transcript/tool-row.tsx +0 -496
- package/src/chat/transcript/turn-commands.ts +0 -101
- package/src/chat/transcript/use-transcript-rows.ts +0 -195
- package/src/chat/transcript/useComposerSearch.ts +0 -106
- package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
- package/src/chat/transcript/useSettledReveal.ts +0 -57
- package/src/chat/transcript/useStickToBottom.ts +0 -600
- package/src/chat/transcript/useTranscriptFind.ts +0 -70
- package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
- package/src/chat/transcript/useTranscriptScroll.ts +0 -163
- package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
- package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
- package/src/chat/transcript/useWheelHoverPause.ts +0 -79
- package/src/chat/transcript/user-bash.tsx +0 -134
- package/src/chat/transcript-options.ts +0 -51
- package/src/chat/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -156
- package/src/code/code-themes.ts +0 -187
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -429
- package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
- package/src/code/editor/DiagnosticsChip.tsx +0 -85
- package/src/code/editor/DiffView.tsx +0 -197
- package/src/code/editor/EditorColumn.tsx +0 -256
- package/src/code/editor/FileIcon.tsx +0 -89
- package/src/code/editor/FileTabPill.tsx +0 -101
- package/src/code/editor/FileTree.tsx +0 -414
- package/src/code/editor/FileView.tsx +0 -462
- package/src/code/editor/HighlightWorkers.tsx +0 -84
- package/src/code/editor/LanguageEditor.tsx +0 -210
- package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
- package/src/code/editor/diagnostics.ts +0 -140
- package/src/code/editor/edit-session.ts +0 -32
- package/src/code/editor/environment.tsx +0 -88
- package/src/code/editor/find/FindBar.tsx +0 -126
- package/src/code/editor/find/find-highlight.ts +0 -138
- package/src/code/editor/find/find-model.ts +0 -123
- package/src/code/editor/find/settle-scroll.ts +0 -77
- package/src/code/editor/find/useFind.ts +0 -203
- package/src/code/editor/fs-adapter.ts +0 -37
- package/src/code/editor/index.ts +0 -36
- package/src/code/editor/language.ts +0 -31
- package/src/code/editor/patch-parse.ts +0 -176
- package/src/code/editor/patch-parse.worker.ts +0 -12
- package/src/code/editor/pierre-theme.ts +0 -155
- package/src/code/editor/prime-diff.ts +0 -37
- package/src/code/editor/reveal.ts +0 -58
- package/src/code/editor/scroll-reach.ts +0 -28
- package/src/code/editor/useCodeDocument.ts +0 -226
- package/src/code/editor/useDefinition.ts +0 -159
- package/src/code/editor/useDetachCleanup.ts +0 -36
- package/src/code/editor/useFileDocument.ts +0 -87
- package/src/code/editor/useRevealLine.ts +0 -92
- package/src/code/editor/word-at.ts +0 -145
- package/src/code/highlight.worker.ts +0 -16
- package/src/code/highlighter.ts +0 -181
- package/src/code/highlights.ts +0 -51
- package/src/code/mermaid-lexer.ts +0 -331
- package/src/code/shiki-theme.ts +0 -46
- package/src/components/BrandMark.tsx +0 -118
- package/src/components/Breadcrumb.tsx +0 -105
- package/src/components/BrowserChrome.tsx +0 -189
- package/src/components/BrowserSignIn.tsx +0 -210
- package/src/components/ChoiceCards.tsx +0 -170
- package/src/components/CodeFrame.tsx +0 -225
- package/src/components/ConfirmDialog.tsx +0 -119
- package/src/components/CopyButton.tsx +0 -85
- package/src/components/EditableTitle.tsx +0 -199
- package/src/components/ErrorBoundary.tsx +0 -208
- package/src/components/Form.tsx +0 -593
- package/src/components/Highlighted.tsx +0 -68
- package/src/components/HowItWorks.tsx +0 -123
- package/src/components/IconButton.tsx +0 -101
- package/src/components/IconToggle.tsx +0 -71
- package/src/components/Keycap.tsx +0 -334
- package/src/components/Lightbox.tsx +0 -257
- package/src/components/LoadError.tsx +0 -45
- package/src/components/MediaNav.tsx +0 -85
- package/src/components/Menu.tsx +0 -435
- package/src/components/Overlay.tsx +0 -327
- package/src/components/PanelEmpty.tsx +0 -80
- package/src/components/PanelRows.tsx +0 -107
- package/src/components/PreviewWindow.tsx +0 -53
- package/src/components/ReorderTabs.tsx +0 -103
- package/src/components/RowActionsMenu.tsx +0 -383
- package/src/components/SegmentSpinner.tsx +0 -88
- package/src/components/Segmented.tsx +0 -126
- package/src/components/StepFrame.tsx +0 -151
- package/src/components/Stepper.tsx +0 -157
- package/src/components/Surface.tsx +0 -191
- package/src/components/SwatchPicker.tsx +0 -147
- package/src/components/SwitchGlyph.tsx +0 -56
- package/src/components/TabPill.tsx +0 -188
- package/src/components/ThemeThumb.tsx +0 -52
- package/src/components/ToggleCard.tsx +0 -120
- package/src/components/Tooltip.tsx +0 -288
- package/src/components/ZoomableImage.tsx +0 -322
- package/src/components/button.ts +0 -120
- package/src/components/floating/FloatingSurface.tsx +0 -158
- package/src/components/floating/HoverCard.tsx +0 -143
- package/src/components/floating/Popover.tsx +0 -166
- package/src/components/floating/useAnchoredPosition.ts +0 -186
- package/src/components/floating/usePopover.ts +0 -158
- package/src/components/image-clipboard.ts +0 -70
- package/src/components/keyboard-layout.ts +0 -115
- package/src/components/palette/PaletteList.tsx +0 -432
- package/src/components/palette/PalettePanel.tsx +0 -338
- package/src/components/palette/palette-layout.ts +0 -86
- package/src/components/report-error.ts +0 -142
- package/src/components/zoom.ts +0 -133
- package/src/extensions/ExtensionComponent.tsx +0 -167
- package/src/extensions/ExtensionDialogHost.tsx +0 -445
- package/src/extensions/ExtensionRenderer.tsx +0 -100
- package/src/extensions/ExtensionScreen.tsx +0 -122
- package/src/extensions/ExtensionSettingsPage.tsx +0 -112
- package/src/extensions/ExtensionSettingsPages.tsx +0 -44
- package/src/extensions/ExtensionSettingsSidebar.tsx +0 -373
- package/src/extensions/ExtensionSlot.tsx +0 -213
- package/src/extensions/ExtensionWebview.tsx +0 -104
- package/src/extensions/ExtensionsProvider.tsx +0 -124
- package/src/extensions/SettingsWireForm.tsx +0 -182
- package/src/extensions/headless/dialog-queue.ts +0 -92
- package/src/extensions/headless/effect-channel.ts +0 -50
- package/src/extensions/headless/effect-router.ts +0 -107
- package/src/extensions/headless/fixture-host.ts +0 -381
- package/src/extensions/headless/host.ts +0 -398
- package/src/extensions/headless/index.ts +0 -17
- package/src/extensions/headless/labels.ts +0 -64
- package/src/extensions/headless/links.ts +0 -56
- package/src/extensions/headless/select.ts +0 -249
- package/src/extensions/headless/webview-bridge.ts +0 -127
- package/src/extensions/headless/wire.ts +0 -175
- package/src/extensions/hooks.ts +0 -209
- package/src/extensions/index.ts +0 -25
- package/src/extensions/kit.ts +0 -79
- package/src/extensions/links.tsx +0 -165
- package/src/extensions/testing/contract.ts +0 -382
- package/src/extensions/testing/index.ts +0 -6
- package/src/extensions/useExtensionsLabels.ts +0 -14
- package/src/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -581
- package/src/files/EditorColumn.tsx +0 -453
- package/src/files/EditorEnvironmentRoot.tsx +0 -63
- package/src/files/FilesDiagnosticsChip.tsx +0 -32
- package/src/files/FilesProvider.tsx +0 -58
- package/src/files/FilesTab.tsx +0 -441
- package/src/files/MediaDiff.tsx +0 -61
- package/src/files/MediaView.tsx +0 -170
- package/src/files/ReviewDraft.tsx +0 -88
- package/src/files/ReviewableDiff.tsx +0 -72
- package/src/files/SearchPanel.tsx +0 -325
- package/src/files/TreeColumn.tsx +0 -229
- package/src/files/code-excerpt.ts +0 -265
- package/src/files/code-menu.ts +0 -53
- package/src/files/drafts-store.ts +0 -192
- package/src/files/file-actions.ts +0 -152
- package/src/files/headless/editor-prefs.ts +0 -230
- package/src/files/headless/entries.ts +0 -172
- package/src/files/headless/fixture-host.ts +0 -260
- package/src/files/headless/host.ts +0 -387
- package/src/files/headless/index.ts +0 -14
- package/src/files/headless/labels.ts +0 -123
- package/src/files/headless/lsp-edits.ts +0 -58
- package/src/files/headless/media.ts +0 -57
- package/src/files/headless/name-match.ts +0 -38
- package/src/files/headless/search.ts +0 -23
- package/src/files/headless/view.ts +0 -114
- package/src/files/headless/workspace-diff.ts +0 -82
- package/src/files/index.ts +0 -25
- package/src/files/lazy-tabs.tsx +0 -41
- package/src/files/session-patch.ts +0 -45
- package/src/files/tab-hooks.ts +0 -37
- package/src/files/testing/contract.ts +0 -279
- package/src/files/testing/demo.ts +0 -36
- package/src/files/testing/index.ts +0 -7
- package/src/files/useCodeReview.tsx +0 -177
- package/src/files/useDiagnostics.ts +0 -59
- package/src/files/useDiagnosticsRun.ts +0 -86
- package/src/files/useEntryActions.ts +0 -280
- package/src/files/useFilesDiagnostics.ts +0 -51
- package/src/files/useFilesLabels.ts +0 -14
- package/src/files/useFolderChanges.ts +0 -38
- package/src/files/useLsp.ts +0 -181
- package/src/files/useOpenFiles.ts +0 -402
- package/src/files/useWorkspace.ts +0 -148
- package/src/files/working-tree-diff.ts +0 -142
- package/src/git/BranchMenu.tsx +0 -988
- package/src/git/GitBar.tsx +0 -297
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -390
- package/src/git/MoveSessionDialog.tsx +0 -396
- package/src/git/RemoteFolderPicker.tsx +0 -475
- package/src/git/SyncChip.tsx +0 -275
- package/src/git/WherePicker.tsx +0 -358
- package/src/git/headless/environment.ts +0 -132
- package/src/git/headless/host.ts +0 -353
- package/src/git/headless/index.ts +0 -14
- package/src/git/headless/labels.ts +0 -230
- package/src/git/headless/move.ts +0 -101
- package/src/git/headless/remote-clone.ts +0 -44
- package/src/git/headless/status-reads.ts +0 -77
- package/src/git/headless/switcher.ts +0 -215
- package/src/git/headless/sync.ts +0 -71
- package/src/git/index.ts +0 -17
- package/src/git/testing/contract.ts +0 -551
- package/src/git/testing/index.ts +0 -537
- package/src/git/useEnvironmentChoices.ts +0 -50
- package/src/git/useGitBar.ts +0 -180
- package/src/hooks/keyed-store.ts +0 -65
- package/src/hooks/useDisplayPath.tsx +0 -93
- package/src/hooks/useHydrated.ts +0 -16
- package/src/hooks/useMinuteTick.ts +0 -49
- package/src/hooks/useNearViewport.ts +0 -111
- package/src/hooks/usePersistedState.ts +0 -98
- package/src/hooks/useResizeDrag.ts +0 -240
- package/src/hooks/useTabDrag.ts +0 -88
- package/src/index.ts +0 -119
- package/src/keybindings/KeyCommands.tsx +0 -123
- package/src/keybindings/KeyHint.tsx +0 -78
- package/src/keybindings/KeybindingsProvider.tsx +0 -231
- package/src/keybindings/headless/catalog.ts +0 -360
- package/src/keybindings/headless/commands.ts +0 -77
- package/src/keybindings/headless/fixture-host.ts +0 -51
- package/src/keybindings/headless/host.ts +0 -29
- package/src/keybindings/headless/index.ts +0 -13
- package/src/keybindings/headless/key-scope.ts +0 -91
- package/src/keybindings/headless/labels.ts +0 -14
- package/src/keybindings/headless/overrides.ts +0 -64
- package/src/keybindings/index.ts +0 -15
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- package/src/keybindings/press.ts +0 -80
- package/src/keybindings/testing/contract.ts +0 -139
- package/src/keybindings/testing/index.ts +0 -6
- package/src/keybindings/useHelpKey.ts +0 -35
- package/src/keybindings/useKeybindingsLabels.ts +0 -14
- package/src/labels.tsx +0 -175
- package/src/machines/AddServerForm.tsx +0 -151
- package/src/machines/Banners.tsx +0 -172
- package/src/machines/DaemonMenu.tsx +0 -413
- package/src/machines/HostCapabilities.tsx +0 -245
- package/src/machines/HostSignIn.tsx +0 -63
- package/src/machines/HostSyncPanel.tsx +0 -275
- package/src/machines/HostsSection.tsx +0 -312
- package/src/machines/MachinesProvider.tsx +0 -164
- package/src/machines/ServerCard.tsx +0 -347
- package/src/machines/ServerMachinesPanel.tsx +0 -547
- package/src/machines/ServerUpdatePanel.tsx +0 -160
- package/src/machines/SyncAccounts.tsx +0 -148
- package/src/machines/SyncMarker.tsx +0 -87
- package/src/machines/SyncOutcomeBadge.tsx +0 -84
- package/src/machines/TokensPanel.tsx +0 -249
- package/src/machines/headless/fixture-host.ts +0 -519
- package/src/machines/headless/fixtures.ts +0 -164
- package/src/machines/headless/host.ts +0 -381
- package/src/machines/headless/index.ts +0 -13
- package/src/machines/headless/labels.ts +0 -364
- package/src/machines/headless/messages.ts +0 -209
- package/src/machines/headless/presence.ts +0 -110
- package/src/machines/headless/settings-focus.ts +0 -25
- package/src/machines/headless/stores.ts +0 -137
- package/src/machines/headless/sync.ts +0 -207
- package/src/machines/index.ts +0 -29
- package/src/machines/settings-section.tsx +0 -37
- package/src/machines/testing/contract.ts +0 -617
- package/src/machines/testing/index.ts +0 -7
- package/src/machines/testing/sync.contract.ts +0 -260
- package/src/motion/SwapIcon.tsx +0 -29
- package/src/motion/collapse.ts +0 -21
- package/src/motion/grow.tsx +0 -86
- package/src/motion/layout-animating.ts +0 -50
- package/src/motion/presence.ts +0 -191
- package/src/motion/provider.tsx +0 -63
- package/src/motion/reduced.ts +0 -36
- package/src/motion/roll.tsx +0 -131
- package/src/motion/shimmer.ts +0 -15
- package/src/motion/size.tsx +0 -192
- package/src/motion/springs.ts +0 -413
- package/src/motion/swap.tsx +0 -216
- package/src/motion/title-text.tsx +0 -74
- package/src/onboarding/ConnectProviderCard.tsx +0 -49
- package/src/onboarding/OnboardingFlow.tsx +0 -176
- package/src/onboarding/OnboardingProvider.tsx +0 -209
- package/src/onboarding/OnboardingStepFrame.tsx +0 -80
- package/src/onboarding/conversation.tsx +0 -196
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -488
- package/src/onboarding/demos/how-it-works.tsx +0 -698
- package/src/onboarding/demos/index.ts +0 -11
- package/src/onboarding/demos/parts.tsx +0 -133
- package/src/onboarding/demos/tour.tsx +0 -217
- package/src/onboarding/headless/controller.ts +0 -110
- package/src/onboarding/headless/fixture-host.ts +0 -269
- package/src/onboarding/headless/fixtures.ts +0 -486
- package/src/onboarding/headless/host.ts +0 -176
- package/src/onboarding/headless/index.ts +0 -8
- package/src/onboarding/headless/labels.ts +0 -282
- package/src/onboarding/index.ts +0 -21
- package/src/onboarding/marks.tsx +0 -107
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -128
- package/src/onboarding/skills/parts.tsx +0 -464
- package/src/onboarding/sources/SourceBrowser.tsx +0 -400
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -222
- package/src/onboarding/steps/ConversationStep.tsx +0 -132
- package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
- package/src/onboarding/steps/FeatureExample.tsx +0 -46
- package/src/onboarding/steps/FeaturesStep.tsx +0 -88
- package/src/onboarding/steps/ImportStep.tsx +0 -156
- package/src/onboarding/steps/LookStep.tsx +0 -276
- package/src/onboarding/steps/ReadyStep.tsx +0 -278
- package/src/onboarding/steps/SkillsStep.tsx +0 -45
- package/src/onboarding/steps/StepSection.tsx +0 -63
- package/src/onboarding/steps/Tradeoff.tsx +0 -45
- package/src/onboarding/steps/WelcomeStep.tsx +0 -147
- package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
- package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
- package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
- package/src/onboarding/steps/connect/ready-text.ts +0 -17
- package/src/onboarding/steps/index.ts +0 -12
- package/src/onboarding/steps/tasks.tsx +0 -84
- package/src/onboarding/testing/contract.ts +0 -472
- package/src/onboarding/testing/index.ts +0 -7
- package/src/onboarding/tutorials.tsx +0 -45
- package/src/onboarding/useSignIn.ts +0 -58
- package/src/palette/CommandPalette.tsx +0 -59
- package/src/palette/PaletteDialog.tsx +0 -186
- package/src/palette/PaletteProvider.tsx +0 -149
- package/src/palette/PaletteRows.tsx +0 -208
- package/src/palette/app-sources.ts +0 -62
- package/src/palette/headless/app-sources.ts +0 -515
- package/src/palette/headless/gather.ts +0 -50
- package/src/palette/headless/host.ts +0 -129
- package/src/palette/headless/index.ts +0 -15
- package/src/palette/headless/labels.ts +0 -124
- package/src/palette/headless/rank-protocol.ts +0 -23
- package/src/palette/headless/recents.ts +0 -35
- package/src/palette/headless/session-sources.ts +0 -218
- package/src/palette/headless/sources.ts +0 -313
- package/src/palette/headless/store.ts +0 -105
- package/src/palette/index.ts +0 -17
- package/src/palette/rank.worker.ts +0 -30
- package/src/palette/setup.ts +0 -19
- package/src/palette/testing/contract.ts +0 -250
- package/src/palette/testing/index.ts +0 -152
- package/src/palette/useConversationSearch.ts +0 -115
- package/src/palette/usePaletteController.ts +0 -229
- package/src/palette/useRankedItems.ts +0 -122
- package/src/path.ts +0 -199
- package/src/server/demo-tools.ts +0 -34
- package/src/server/environment.ts +0 -118
- package/src/server/index.ts +0 -7
- package/src/server/scripted-provider.ts +0 -174
- package/src/server/sse-handler.ts +0 -457
- package/src/server/testing/index.ts +0 -7
- package/src/session/ArtifactRowChips.tsx +0 -260
- package/src/session/ArtifactsPanel.tsx +0 -426
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProjectHome.tsx +0 -733
- package/src/session/ProviderUsageProvider.tsx +0 -113
- package/src/session/QueueTab.tsx +0 -669
- package/src/session/RunningWorkDialog.tsx +0 -178
- package/src/session/SessionCacheFacts.tsx +0 -190
- package/src/session/SessionDetailsDialog.tsx +0 -627
- package/src/session/SessionHeader.tsx +0 -242
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -320
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -279
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -358
- package/src/session/WelcomeScreen.tsx +0 -88
- package/src/session/headless/artifacts.ts +0 -101
- package/src/session/headless/diff-tree.ts +0 -167
- package/src/session/headless/fixture-host.ts +0 -362
- package/src/session/headless/home-layout.ts +0 -276
- package/src/session/headless/host.ts +0 -263
- package/src/session/headless/index.ts +0 -23
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -337
- package/src/session/headless/queue-attachments.ts +0 -73
- package/src/session/headless/queue.ts +0 -122
- package/src/session/headless/running-work.ts +0 -85
- package/src/session/headless/session-actions.ts +0 -198
- package/src/session/headless/session-diffs.ts +0 -136
- package/src/session/headless/side.ts +0 -63
- package/src/session/headless/todos.ts +0 -62
- package/src/session/headless/usage-format.ts +0 -19
- package/src/session/headless/usage.ts +0 -407
- package/src/session/index.ts +0 -31
- package/src/session/modal-shell.tsx +0 -24
- package/src/session/testing/contract.ts +0 -588
- package/src/session/testing/demo.ts +0 -224
- package/src/session/testing/index.ts +0 -7
- package/src/session/useSessionLabels.ts +0 -14
- package/src/session/useUsageSummary.ts +0 -82
- package/src/settings/SettingsHeadingText.tsx +0 -54
- package/src/settings/SettingsHostSwitcher.tsx +0 -93
- package/src/settings/SettingsNav.tsx +0 -198
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -218
- package/src/settings/SettingsShell.tsx +0 -337
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -570
- package/src/settings/headless/claude-import.ts +0 -61
- package/src/settings/headless/enabled.ts +0 -44
- package/src/settings/headless/fixture-accounts.ts +0 -260
- package/src/settings/headless/fixture-host.ts +0 -162
- package/src/settings/headless/fixture-models.ts +0 -51
- package/src/settings/headless/fixture-performance.ts +0 -350
- package/src/settings/headless/fixture-sections.ts +0 -391
- package/src/settings/headless/host.ts +0 -127
- package/src/settings/headless/index.ts +0 -22
- package/src/settings/headless/labels.ts +0 -63
- package/src/settings/headless/layout-sections.ts +0 -41
- package/src/settings/headless/layout.ts +0 -732
- package/src/settings/headless/mcp.ts +0 -319
- package/src/settings/headless/models.ts +0 -51
- package/src/settings/headless/page-counts.ts +0 -40
- package/src/settings/headless/performance.ts +0 -524
- package/src/settings/headless/providers.ts +0 -117
- package/src/settings/headless/registry.ts +0 -62
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -340
- package/src/settings/index.ts +0 -32
- package/src/settings/rows.tsx +0 -152
- package/src/settings/section.tsx +0 -165
- package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
- package/src/settings/sections/appearance/labels.ts +0 -77
- package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
- package/src/settings/sections/claude-import/labels.ts +0 -42
- package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
- package/src/settings/sections/descriptors.tsx +0 -261
- package/src/settings/sections/editor/EditorSection.tsx +0 -521
- package/src/settings/sections/editor/labels.ts +0 -84
- package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
- package/src/settings/sections/enabled-list/labels.ts +0 -37
- package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
- package/src/settings/sections/environments/labels.ts +0 -31
- package/src/settings/sections/extensions/ChangeOriginDialog.tsx +0 -218
- package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -210
- package/src/settings/sections/extensions/ExtensionConfigRows.tsx +0 -508
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -356
- package/src/settings/sections/extensions/ExtensionPicksBar.tsx +0 -112
- package/src/settings/sections/extensions/ExtensionSourceBrowser.tsx +0 -244
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -665
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -64
- package/src/settings/sections/extensions/options-labels.ts +0 -34
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -457
- package/src/settings/sections/host-catalog/labels.ts +0 -44
- package/src/settings/sections/index.ts +0 -60
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -385
- package/src/settings/sections/instructions/labels.ts +0 -33
- package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
- package/src/settings/sections/keybindings/labels.ts +0 -72
- package/src/settings/sections/keybindings/rows.ts +0 -103
- package/src/settings/sections/logs/LogsSection.tsx +0 -153
- package/src/settings/sections/logs/labels.ts +0 -20
- package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
- package/src/settings/sections/mcp/McpSection.tsx +0 -358
- package/src/settings/sections/mcp/McpServerRow.tsx +0 -404
- package/src/settings/sections/mcp/labels.ts +0 -193
- package/src/settings/sections/models/AgentDefaults.tsx +0 -365
- package/src/settings/sections/models/ModelListPicker.tsx +0 -265
- package/src/settings/sections/models/ModelPickField.tsx +0 -220
- package/src/settings/sections/models/ModelRows.tsx +0 -381
- package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
- package/src/settings/sections/models/labels.ts +0 -119
- package/src/settings/sections/models/model-test.tsx +0 -125
- package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
- package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
- package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
- package/src/settings/sections/performance/labels.ts +0 -114
- package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
- package/src/settings/sections/plugins/PluginsSection.tsx +0 -151
- package/src/settings/sections/plugins/labels.ts +0 -23
- package/src/settings/sections/providers/CredentialSources.tsx +0 -237
- package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
- package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
- package/src/settings/sections/providers/ServerSignIn.tsx +0 -137
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -265
- package/src/settings/sections/shared/labels.ts +0 -31
- package/src/settings/sections/skills/SkillList.tsx +0 -494
- package/src/settings/sections/skills/SkillsSection.tsx +0 -249
- package/src/settings/sections/skills/labels.ts +0 -54
- package/src/settings/sections/use-section-labels.ts +0 -10
- package/src/settings/testing/accounts-demo.ts +0 -110
- package/src/settings/testing/accounts.contract.ts +0 -319
- package/src/settings/testing/claude-import.contract.ts +0 -93
- package/src/settings/testing/contract.ts +0 -192
- package/src/settings/testing/extension-options.contract.ts +0 -163
- package/src/settings/testing/index.ts +0 -11
- package/src/settings/testing/models.contract.ts +0 -135
- package/src/settings/testing/performance.contract.ts +0 -219
- package/src/settings/testing/sections.contract.ts +0 -306
- package/src/terminal/HostTerminalSurface.tsx +0 -917
- package/src/terminal/TerminalDrawer.tsx +0 -228
- package/src/terminal/TerminalPanel.tsx +0 -740
- package/src/terminal/TerminalProvider.tsx +0 -201
- package/src/terminal/TerminalSurface.tsx +0 -262
- package/src/terminal/box-glyphs.ts +0 -333
- package/src/terminal/ghostty.ts +0 -116
- package/src/terminal/grid-size.ts +0 -46
- package/src/terminal/headless/fixture-host.ts +0 -250
- package/src/terminal/headless/host.ts +0 -99
- package/src/terminal/headless/index.ts +0 -11
- package/src/terminal/headless/labels.ts +0 -69
- package/src/terminal/headless/layout.ts +0 -57
- package/src/terminal/headless/links.ts +0 -227
- package/src/terminal/headless/order.ts +0 -28
- package/src/terminal/headless/output-cursor.ts +0 -66
- package/src/terminal/headless/recent.ts +0 -20
- package/src/terminal/headless/replay.ts +0 -45
- package/src/terminal/headless/scope.ts +0 -60
- package/src/terminal/headless/store.ts +0 -637
- package/src/terminal/index.ts +0 -40
- package/src/terminal/keys.ts +0 -34
- package/src/terminal/testing/contract.ts +0 -274
- package/src/terminal/testing/demo.ts +0 -40
- package/src/terminal/testing/index.ts +0 -7
- package/src/terminal/theme.ts +0 -110
- package/src/terminal/useTerminalLabels.ts +0 -14
- package/src/theme/accents.ts +0 -46
- package/src/theme/color.ts +0 -450
- package/src/theme/css-vars.ts +0 -187
- package/src/theme/derive.ts +0 -700
- package/src/theme/from-theme.ts +0 -52
- package/src/theme/stylesheet.ts +0 -55
- package/src/theme/themes.ts +0 -767
- package/src/theme/without-transitions.ts +0 -18
- package/src/uno.ts +0 -167
- package/src/workspace/LayoutBudget.tsx +0 -143
- package/src/workspace/PanelContentView.tsx +0 -523
- package/src/workspace/PanelCorner.tsx +0 -111
- package/src/workspace/PanelGroups.tsx +0 -264
- package/src/workspace/PanelHome.tsx +0 -71
- package/src/workspace/PanelItems.tsx +0 -368
- package/src/workspace/PanelStrip.tsx +0 -316
- package/src/workspace/SidePanel.tsx +0 -240
- package/src/workspace/TabParking.tsx +0 -120
- package/src/workspace/WorkspaceProvider.tsx +0 -558
- package/src/workspace/dnd/engine.ts +0 -371
- package/src/workspace/dnd/hooks.ts +0 -72
- package/src/workspace/dnd/index.ts +0 -57
- package/src/workspace/dnd/parking.tsx +0 -181
- package/src/workspace/extension-tabs.tsx +0 -174
- package/src/workspace/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -129
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -44
- package/src/workspace/headless/layout-memory.ts +0 -649
- package/src/workspace/headless/layouts.ts +0 -224
- package/src/workspace/headless/open-target.ts +0 -125
- package/src/workspace/headless/ops.ts +0 -163
- package/src/workspace/headless/panel-focus.ts +0 -58
- package/src/workspace/headless/panel-tree.ts +0 -259
- package/src/workspace/headless/resolve.ts +0 -146
- package/src/workspace/headless/reveal-at.ts +0 -27
- package/src/workspace/headless/strip-drop.ts +0 -81
- package/src/workspace/headless/tree.ts +0 -480
- package/src/workspace/headless/view.ts +0 -164
- package/src/workspace/index.ts +0 -23
- package/src/workspace/panel-group-keys.ts +0 -36
- package/src/workspace/panel-visibility.ts +0 -28
- package/src/workspace/tab-scopes.ts +0 -245
- package/src/workspace/testing/contract.ts +0 -282
- package/src/workspace/testing/index.ts +0 -140
- package/src/workspace/use-split-drag.ts +0 -73
- package/src/workspace/useScopeLayout.ts +0 -26
- package/src/workspace/useViewport.ts +0 -22
- package/src/workspace/useWorkspaceLabels.ts +0 -14
- package/src/workspace/workspace-key-commands.ts +0 -108
- /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's badge strip: a band at the top of the composer's tray ring,
|
|
3
|
-
* above the card, the git bar's mirror under it. A badge is a pill on the
|
|
4
|
-
* ring (an icon, a label, a count). One that opens something is a button,
|
|
5
|
-
* and the one whose panel is shown is the raised chip (`aria-pressed`), like
|
|
6
|
-
* a selected tab. A highlighted badge, something that waits on the user, is
|
|
7
|
-
* raised in the warn tone and breathes.
|
|
8
|
-
*
|
|
9
|
-
* <ComposerBadges badges={[{ id: 'todos', label: 'Todos', icon: 'i-ph-list-checks', count: '2/5', onSelect }]} />
|
|
10
|
-
*
|
|
11
|
-
* The strip scrolls sideways when it overflows (edge fades, a vertical wheel
|
|
12
|
-
* scrolls it while it can move) and keeps the highlighted, else the active,
|
|
13
|
-
* badge in view without scrolling the page. With `onReorder` the user drags
|
|
14
|
-
* a badge to a new slot, or moves the focused one with Alt+Shift+←/→; the new
|
|
15
|
-
* order is committed once, on drop. `orderComposerBadges` (badge-order.ts)
|
|
16
|
-
* puts a saved order back.
|
|
17
|
-
*
|
|
18
|
-
* Motion: a badge enters on `settle` with the fade and leaves on `exit` in its
|
|
19
|
-
* slot, then its siblings slide over (layout), and the band opens
|
|
20
|
-
* and closes like a collapsible. A new `resetKey` (another conversation) is
|
|
21
|
-
* a fresh strip shown as it is: no badge animates in its first moments, so
|
|
22
|
-
* switching conversations never replays them. Only the band's height eases
|
|
23
|
-
* when the composer changes shape, as the git bar's does.
|
|
24
|
-
*/
|
|
25
|
-
import { AnimatePresence, Reorder } from 'motion/react';
|
|
26
|
-
import { useEffect, useMemo, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode } from 'react';
|
|
27
|
-
|
|
28
|
-
import { CountBadge, type CountTone } from '../../components/TabPill';
|
|
29
|
-
import { Tooltip } from '../../components/Tooltip';
|
|
30
|
-
import { moveId, useTabDrag } from '../../hooks/useTabDrag';
|
|
31
|
-
import { currentMotionPrefs, useMotionTransition, useWithFade } from '../../motion/springs';
|
|
32
|
-
import { useChatLabels } from '../useChatLabels';
|
|
33
|
-
|
|
34
|
-
/** The tint of a badge's icon: the theme's quiet tones and its status colors. */
|
|
35
|
-
export type ComposerBadgeTone = 'muted' | 'subtle' | 'accent' | 'success' | 'warn' | 'danger';
|
|
36
|
-
|
|
37
|
-
/** One badge of a {@link ComposerBadges} strip. */
|
|
38
|
-
export interface ComposerBadge {
|
|
39
|
-
/** Stable id: the strip's key and what a saved order names. */
|
|
40
|
-
id: string;
|
|
41
|
-
/** The badge's name (`Todos`, `Queued`). */
|
|
42
|
-
label: string;
|
|
43
|
-
/** A count or a short value after the label (`3`, `2/5`), drawn as a {@link CountBadge}. */
|
|
44
|
-
count?: string;
|
|
45
|
-
/**
|
|
46
|
-
* Look of the count.
|
|
47
|
-
* @default 'info' (`attention` on a highlighted badge)
|
|
48
|
-
*/
|
|
49
|
-
countTone?: CountTone;
|
|
50
|
-
/** Leading icon class (`i-ph-list-checks`). */
|
|
51
|
-
icon?: string;
|
|
52
|
-
/** Tints the icon. Default: the badge's text color (warn on a highlighted badge). */
|
|
53
|
-
tone?: ComposerBadgeTone;
|
|
54
|
-
/** Work in progress: the running arc in place of the icon. */
|
|
55
|
-
loader?: boolean;
|
|
56
|
-
/** Something waits on the user: raised in the warn tone, breathing, kept in view. */
|
|
57
|
-
highlight?: boolean;
|
|
58
|
-
/** Tooltip, and the description assistive tech reads with it. */
|
|
59
|
-
title?: string;
|
|
60
|
-
/** What the badge opens is on screen (its panel): the raised chip, `aria-pressed`. */
|
|
61
|
-
active?: boolean;
|
|
62
|
-
/** Default slot, lower first (see `orderComposerBadges`). The strip itself draws badges in the order given. */
|
|
63
|
-
order?: number;
|
|
64
|
-
/** Called on a click, or Enter / Space. Without it the badge is a plain status pill. */
|
|
65
|
-
onSelect?: () => void;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/** Props for {@link ComposerBadges}. */
|
|
69
|
-
export interface ComposerBadgesProps {
|
|
70
|
-
/** The badges, in display order. An empty list closes the band. */
|
|
71
|
-
badges: readonly ComposerBadge[];
|
|
72
|
-
/**
|
|
73
|
-
* What the badges belong to (a session id). A new key shows its badges as
|
|
74
|
-
* they are, without animating them in or the previous ones out.
|
|
75
|
-
*/
|
|
76
|
-
resetKey?: string | null;
|
|
77
|
-
/** Makes badges draggable (and movable with Alt+Shift+←/→); receives every id in the new order, once per move. */
|
|
78
|
-
onReorder?: (ids: readonly string[]) => void;
|
|
79
|
-
/** Accessible name of the strip. Default: the `composerBadges` label. */
|
|
80
|
-
label?: string;
|
|
81
|
-
/** Extra classes on the band. */
|
|
82
|
-
className?: string;
|
|
83
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
84
|
-
style?: CSSProperties;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** A fresh strip's first moments: badges that show up then are part of it, not arrivals. */
|
|
88
|
-
const SETTLE_MS = 250;
|
|
89
|
-
|
|
90
|
-
const TONE_CLASS: Record<ComposerBadgeTone, string> = {
|
|
91
|
-
muted: 'text-zg-muted',
|
|
92
|
-
subtle: 'text-zg-subtle',
|
|
93
|
-
accent: 'text-zg-accent',
|
|
94
|
-
success: 'text-zg-success',
|
|
95
|
-
warn: 'text-zg-warn',
|
|
96
|
-
danger: 'text-zg-danger',
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const HIDDEN = { opacity: 0, scale: 0.86 };
|
|
100
|
-
const SHOWN = { opacity: 1, scale: 1 };
|
|
101
|
-
const LIFTED = { scale: 1.04 };
|
|
102
|
-
const REORDER_KEYS = 'Alt+Shift+ArrowLeft Alt+Shift+ArrowRight';
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Renders the composer's badge strip (see the module comment). Place it as
|
|
106
|
-
* the first child of the composer's tray ring, before the card.
|
|
107
|
-
*
|
|
108
|
-
* @param props - The {@link ComposerBadgesProps}.
|
|
109
|
-
*/
|
|
110
|
-
export function ComposerBadges({
|
|
111
|
-
badges,
|
|
112
|
-
resetKey = null,
|
|
113
|
-
onReorder,
|
|
114
|
-
label,
|
|
115
|
-
className = '',
|
|
116
|
-
style,
|
|
117
|
-
}: ComposerBadgesProps) {
|
|
118
|
-
const labels = useChatLabels();
|
|
119
|
-
const open = badges.length > 0;
|
|
120
|
-
return (
|
|
121
|
-
<div
|
|
122
|
-
className={`zg-collapsible zg-composer-badges ${className}`}
|
|
123
|
-
style={style}
|
|
124
|
-
data-open={open}
|
|
125
|
-
// Closed, nothing in it is read or reached, a badge still leaving included.
|
|
126
|
-
inert={!open || undefined}
|
|
127
|
-
>
|
|
128
|
-
<div className="zg-collapsible-inner">
|
|
129
|
-
{/* Keyed: another conversation's strip is a fresh one, with its own first moments. */}
|
|
130
|
-
<Strip key={resetKey ?? ''} badges={badges} onReorder={onReorder} label={label ?? labels.composerBadges} />
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
function Strip({
|
|
137
|
-
badges,
|
|
138
|
-
onReorder,
|
|
139
|
-
label,
|
|
140
|
-
}: {
|
|
141
|
-
badges: readonly ComposerBadge[];
|
|
142
|
-
onReorder: ((ids: readonly string[]) => void) | undefined;
|
|
143
|
-
label: string;
|
|
144
|
-
}) {
|
|
145
|
-
const trackRef = useRef<HTMLDivElement>(null);
|
|
146
|
-
const byId = useMemo(() => new Map(badges.map((badge) => [badge.id, badge])), [badges]);
|
|
147
|
-
const ids = useMemo(() => badges.map((badge) => badge.id), [badges]);
|
|
148
|
-
const drag = useTabDrag(ids, (order) => onReorder?.(order));
|
|
149
|
-
// While a badge is held, one that left meanwhile drops out of the held order.
|
|
150
|
-
const shown = drag.shown.filter((id) => byId.has(id));
|
|
151
|
-
const enter = useWithFade('settle');
|
|
152
|
-
const leave = useWithFade('exit');
|
|
153
|
-
const slide = useMotionTransition('settle');
|
|
154
|
-
// State, not a clock read while rendering: the server's render and the hydrating one agree.
|
|
155
|
-
const [settled, setSettled] = useState(false);
|
|
156
|
-
useEffect(() => {
|
|
157
|
-
const timer = setTimeout(() => setSettled(true), SETTLE_MS);
|
|
158
|
-
return () => clearTimeout(timer);
|
|
159
|
-
}, []);
|
|
160
|
-
|
|
161
|
-
// The badge that asks for the eye, else the open one, stays in view.
|
|
162
|
-
const focusId = badges.find((b) => b.highlight)?.id ?? badges.find((b) => b.active)?.id ?? null;
|
|
163
|
-
useEffect(() => {
|
|
164
|
-
const track = trackRef.current;
|
|
165
|
-
const el = focusId && track ? badgeElement(track, focusId) : null;
|
|
166
|
-
if (track && el) reveal(track, el);
|
|
167
|
-
}, [focusId]);
|
|
168
|
-
|
|
169
|
-
// A vertical wheel scrolls the strip sideways while it can move; at an end the page keeps it.
|
|
170
|
-
useEffect(() => {
|
|
171
|
-
const track = trackRef.current;
|
|
172
|
-
if (!track) return undefined;
|
|
173
|
-
const onWheel = (event: WheelEvent) => {
|
|
174
|
-
if (event.ctrlKey || Math.abs(event.deltaX) >= Math.abs(event.deltaY)) return;
|
|
175
|
-
const max = track.scrollWidth - track.clientWidth;
|
|
176
|
-
const delta = event.deltaMode === 1 ? event.deltaY * 16 : event.deltaY;
|
|
177
|
-
const next = Math.max(0, Math.min(max, track.scrollLeft + delta));
|
|
178
|
-
if (max <= 0 || next === track.scrollLeft) return;
|
|
179
|
-
event.preventDefault();
|
|
180
|
-
track.scrollLeft = next;
|
|
181
|
-
};
|
|
182
|
-
track.addEventListener('wheel', onWheel, { passive: false });
|
|
183
|
-
return () => track.removeEventListener('wheel', onWheel);
|
|
184
|
-
}, []);
|
|
185
|
-
|
|
186
|
-
const move = onReorder
|
|
187
|
-
? (id: string, delta: number): boolean => {
|
|
188
|
-
const next = moveId(shown, id, delta);
|
|
189
|
-
if (next.every((x, i) => x === shown[i])) return false;
|
|
190
|
-
onReorder(next);
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
: undefined;
|
|
194
|
-
|
|
195
|
-
return (
|
|
196
|
-
<Reorder.Group
|
|
197
|
-
as="div"
|
|
198
|
-
axis="x"
|
|
199
|
-
values={shown}
|
|
200
|
-
onReorder={drag.onReorder}
|
|
201
|
-
// Badges slide relative to the strip: the composer moving on the page (content above it
|
|
202
|
-
// reflowing, the column resizing) never flings them from where they were. A root is only
|
|
203
|
-
// measured with `layout` on; a layout root itself never animates, it snaps.
|
|
204
|
-
layout
|
|
205
|
-
layoutRoot
|
|
206
|
-
ref={trackRef}
|
|
207
|
-
role="group"
|
|
208
|
-
aria-label={label}
|
|
209
|
-
data-testid="composer-badges"
|
|
210
|
-
// Badges added from now on make an entrance.
|
|
211
|
-
data-settled={settled || undefined}
|
|
212
|
-
className="zg-composer-badges-track zg-no-scrollbar zg-scroll-fade-x"
|
|
213
|
-
>
|
|
214
|
-
{/* Not `popLayout`: under a layout root, the re-render that removes a popped badge
|
|
215
|
-
retargets its siblings' slide mid-flight and they jump the rest of the way. */}
|
|
216
|
-
<AnimatePresence initial={false}>
|
|
217
|
-
{shown.map((id) => {
|
|
218
|
-
const badge = byId.get(id)!;
|
|
219
|
-
const lifted = drag.dragging === id;
|
|
220
|
-
return (
|
|
221
|
-
<Reorder.Item
|
|
222
|
-
key={id}
|
|
223
|
-
as="div"
|
|
224
|
-
value={id}
|
|
225
|
-
drag={onReorder ? 'x' : false}
|
|
226
|
-
data-badge={id}
|
|
227
|
-
data-dragging={lifted || undefined}
|
|
228
|
-
onDragStart={() => drag.onDragStart(id)}
|
|
229
|
-
onDragEnd={drag.onDragEnd}
|
|
230
|
-
onPointerDown={drag.onPointerDown}
|
|
231
|
-
dragConstraints={drag.bounds}
|
|
232
|
-
dragElastic={0.08}
|
|
233
|
-
initial={settled ? HIDDEN : false}
|
|
234
|
-
animate={SHOWN}
|
|
235
|
-
exit={{ ...HIDDEN, transition: leave }}
|
|
236
|
-
transition={{ ...enter, layout: slide }}
|
|
237
|
-
whileDrag={LIFTED}
|
|
238
|
-
className="zg-composer-badge-slot"
|
|
239
|
-
>
|
|
240
|
-
<Pill
|
|
241
|
-
badge={badge}
|
|
242
|
-
onSelect={
|
|
243
|
-
badge.onSelect
|
|
244
|
-
? () => {
|
|
245
|
-
if (!drag.wasDragged()) badge.onSelect?.();
|
|
246
|
-
}
|
|
247
|
-
: undefined
|
|
248
|
-
}
|
|
249
|
-
onMove={move && ((delta) => move(id, delta))}
|
|
250
|
-
/>
|
|
251
|
-
</Reorder.Item>
|
|
252
|
-
);
|
|
253
|
-
})}
|
|
254
|
-
</AnimatePresence>
|
|
255
|
-
</Reorder.Group>
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
function Pill({
|
|
260
|
-
badge,
|
|
261
|
-
onSelect,
|
|
262
|
-
onMove,
|
|
263
|
-
}: {
|
|
264
|
-
badge: ComposerBadge;
|
|
265
|
-
onSelect: (() => void) | undefined;
|
|
266
|
-
/** Moves the badge one slot; `false` when it is already at that end. */
|
|
267
|
-
onMove: ((delta: number) => boolean) | undefined;
|
|
268
|
-
}) {
|
|
269
|
-
const tone = badge.tone ? TONE_CLASS[badge.tone] : badge.highlight ? TONE_CLASS.warn : '';
|
|
270
|
-
const body: ReactNode = (
|
|
271
|
-
<>
|
|
272
|
-
{badge.loader ? (
|
|
273
|
-
<span aria-hidden className="zg-arc shrink-0" />
|
|
274
|
-
) : (
|
|
275
|
-
badge.icon && <span aria-hidden className={`${badge.icon} text-zg-ui shrink-0 ${tone}`} />
|
|
276
|
-
)}
|
|
277
|
-
<span className="zg-composer-badge-label">{badge.label}</span>
|
|
278
|
-
{badge.count ? (
|
|
279
|
-
<CountBadge text={badge.count} tone={badge.countTone ?? (badge.highlight ? 'attention' : 'info')} />
|
|
280
|
-
) : null}
|
|
281
|
-
</>
|
|
282
|
-
);
|
|
283
|
-
const state = {
|
|
284
|
-
'data-highlight': badge.highlight ? '' : undefined,
|
|
285
|
-
'data-active': badge.active ? '' : undefined,
|
|
286
|
-
};
|
|
287
|
-
const pill = onSelect ? (
|
|
288
|
-
<button
|
|
289
|
-
type="button"
|
|
290
|
-
{...state}
|
|
291
|
-
aria-pressed={badge.active === true}
|
|
292
|
-
aria-keyshortcuts={onMove ? REORDER_KEYS : undefined}
|
|
293
|
-
onClick={onSelect}
|
|
294
|
-
onKeyDown={(event: KeyboardEvent<HTMLButtonElement>) => {
|
|
295
|
-
if (!onMove || !event.altKey || !event.shiftKey) return;
|
|
296
|
-
if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;
|
|
297
|
-
event.preventDefault();
|
|
298
|
-
const button = event.currentTarget;
|
|
299
|
-
// Moving the node drops its focus: give it back once the strip has its new order.
|
|
300
|
-
if (onMove(event.key === 'ArrowLeft' ? -1 : 1))
|
|
301
|
-
requestAnimationFrame(() => button.isConnected && button.focus());
|
|
302
|
-
}}
|
|
303
|
-
className="zg-composer-badge zg-segment-item zg-press-subtle zg-focus-ring"
|
|
304
|
-
>
|
|
305
|
-
{body}
|
|
306
|
-
</button>
|
|
307
|
-
) : (
|
|
308
|
-
<span {...state} className="zg-composer-badge">
|
|
309
|
-
{body}
|
|
310
|
-
</span>
|
|
311
|
-
);
|
|
312
|
-
return badge.title ? (
|
|
313
|
-
<Tooltip label={badge.title} side="top" portal maxWidth={280}>
|
|
314
|
-
{pill}
|
|
315
|
-
</Tooltip>
|
|
316
|
-
) : (
|
|
317
|
-
pill
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/** The slot of badge `id` in the strip. */
|
|
322
|
-
function badgeElement(track: HTMLElement, id: string): HTMLElement | null {
|
|
323
|
-
for (const el of track.querySelectorAll<HTMLElement>('[data-badge]')) if (el.dataset.badge === id) return el;
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
/** Scroll the strip, and only the strip, so `el` is in view. Smooth at full motion. */
|
|
328
|
-
function reveal(track: HTMLElement, el: HTMLElement): void {
|
|
329
|
-
const pad = 24;
|
|
330
|
-
const left = el.offsetLeft;
|
|
331
|
-
const right = left + el.offsetWidth;
|
|
332
|
-
const view = track.scrollLeft;
|
|
333
|
-
const target =
|
|
334
|
-
left - pad < view ? left - pad : right + pad > view + track.clientWidth ? right + pad - track.clientWidth : null;
|
|
335
|
-
if (target === null) return;
|
|
336
|
-
const behavior = currentMotionPrefs().level === 'full' ? 'smooth' : 'auto';
|
|
337
|
-
if (typeof track.scrollTo === 'function') track.scrollTo({ left: Math.max(0, target), behavior });
|
|
338
|
-
else track.scrollLeft = Math.max(0, target);
|
|
339
|
-
}
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's controls row, split in its two clusters:
|
|
3
|
-
*
|
|
4
|
-
* - `ComposerControls` (left, next to `+`): what runs next. Agent, model
|
|
5
|
-
* and model options, as pickers in ONE `.zg-segment` track, each opening
|
|
6
|
-
* its own popover (`HostPickers`).
|
|
7
|
-
* - `ComposerStatusPills` (right, before send): the run chip and the
|
|
8
|
-
* context orb. Running work is a badge at the top of the composer
|
|
9
|
-
* (`ConversationBadges`).
|
|
10
|
-
*
|
|
11
|
-
* The agent picker always renders (it picks a default for the next chat
|
|
12
|
-
* without a session). The model and options pills render for a draft too:
|
|
13
|
-
* a draft's options are the last ones used with its model (the remembered
|
|
14
|
-
* knobs), and the session created on send starts with them. The options pill
|
|
15
|
-
* hides when the model has neither a reasoning knob nor feature toggles.
|
|
16
|
-
*/
|
|
17
|
-
import { useMemo, type ReactNode } from 'react';
|
|
18
|
-
import type { SessionKnobs } from 'zidane/chat/pure';
|
|
19
|
-
|
|
20
|
-
import type { ComposerContextStatus, ComposerCostStatus, ComposerSessionView } from '../headless/composer/host-chrome';
|
|
21
|
-
import { composeLiveCost } from '../headless/composer/live-cost';
|
|
22
|
-
import type { ComposerModelOption } from '../headless/composer/models';
|
|
23
|
-
import type { SetDefaultModel } from '../headless/composer/remember-model-pick';
|
|
24
|
-
import { useComposerLabels } from './ComposerHostProvider';
|
|
25
|
-
import { HostContextOrb } from './HostContextOrb';
|
|
26
|
-
import { HostAgentPicker, HostModelOptionsPicker, HostModelPicker, type HostModelImages } from './HostPickers';
|
|
27
|
-
import { ModelOptionsPicker } from './ModelOptionsPicker';
|
|
28
|
-
import { RunStatusChip } from './RunStatusChip';
|
|
29
|
-
import { useDraftKnobs, useModelCatalog, useModelKnobs, useComposerModelName } from './use-composer-stores';
|
|
30
|
-
import { useJoinedRunProgress, useRunAccruedCost, useRunOutputTokens, useRunProgress } from './use-run-meter';
|
|
31
|
-
|
|
32
|
-
/** What the next new chat starts on, as the app decides it. */
|
|
33
|
-
export interface ComposerDefaults {
|
|
34
|
-
/** Its folder (`null`: none picked yet). */
|
|
35
|
-
folder: string | null;
|
|
36
|
-
/** Its agent. */
|
|
37
|
-
agentId: string;
|
|
38
|
-
/** Its model's provider. */
|
|
39
|
-
providerKey: string | null;
|
|
40
|
-
/** Its model. */
|
|
41
|
-
modelId: string | null;
|
|
42
|
-
/** The stored account its model runs on. */
|
|
43
|
-
account: string | null;
|
|
44
|
-
/** The configured effort and options (the space's, else the app's). */
|
|
45
|
-
knobs?: SessionKnobs;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Props for {@link ComposerControls}. */
|
|
49
|
-
export interface ComposerControlsProps {
|
|
50
|
-
/** The live session, `null` for a draft. */
|
|
51
|
-
session: ComposerSessionView | null;
|
|
52
|
-
/** The server the session (or draft) runs on: the pickers list its models. `null`: this computer. */
|
|
53
|
-
hostId?: string | null;
|
|
54
|
-
/** The next new chat's defaults. */
|
|
55
|
-
defaults: ComposerDefaults;
|
|
56
|
-
/** Sets the next new chat's agent. */
|
|
57
|
-
onDefaultAgentChange: (id: string) => void;
|
|
58
|
-
/** Sets the next new chat's model. */
|
|
59
|
-
onDefaultModel: SetDefaultModel;
|
|
60
|
-
/** Called once a session write lands (refresh the app's session list). */
|
|
61
|
-
onCommitted?: () => void | Promise<void>;
|
|
62
|
-
/** The session's model (its own pick, or the one its context status reports). */
|
|
63
|
-
modelId: string | null;
|
|
64
|
-
/** That model's provider. */
|
|
65
|
-
providerKey: string | null;
|
|
66
|
-
/** Whether the session's model has a reasoning knob (a draft looks its default model up in the catalog). */
|
|
67
|
-
activeSupportsReasoning: boolean;
|
|
68
|
-
/** The feature toggles the session's model declares. */
|
|
69
|
-
activeModelOptions: readonly ComposerModelOption[];
|
|
70
|
-
/** The session's enabled options. */
|
|
71
|
-
activeEnabledOptions: Record<string, boolean>;
|
|
72
|
-
/** Shown between the agent and the model pills (a retry pill). */
|
|
73
|
-
retry?: ReactNode;
|
|
74
|
-
/** The model picker's keyboard shortcut, for its tooltip. */
|
|
75
|
-
modelShortcut?: ReactNode;
|
|
76
|
-
/** The model serving the run after a fallback. */
|
|
77
|
-
serving?: { model: string; provider: string } | null;
|
|
78
|
-
/** The model picker's Image tab. Absent: none. */
|
|
79
|
-
images?: HostModelImages | null;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* The left cluster: agent, model and options pickers (see the header).
|
|
84
|
-
*
|
|
85
|
-
* @param props - The {@link ComposerControlsProps}.
|
|
86
|
-
*/
|
|
87
|
-
export function ComposerControls({
|
|
88
|
-
session,
|
|
89
|
-
hostId = null,
|
|
90
|
-
defaults,
|
|
91
|
-
onDefaultAgentChange,
|
|
92
|
-
onDefaultModel,
|
|
93
|
-
onCommitted,
|
|
94
|
-
modelId,
|
|
95
|
-
providerKey,
|
|
96
|
-
activeSupportsReasoning,
|
|
97
|
-
activeModelOptions,
|
|
98
|
-
activeEnabledOptions,
|
|
99
|
-
retry,
|
|
100
|
-
modelShortcut,
|
|
101
|
-
serving = null,
|
|
102
|
-
images = null,
|
|
103
|
-
}: ComposerControlsProps) {
|
|
104
|
-
const labels = useComposerLabels();
|
|
105
|
-
const knobs = useModelKnobs();
|
|
106
|
-
// A server's folder is a path there; a server draft has none yet (its default scope).
|
|
107
|
-
const catalogCwd = session?.cwd ?? (hostId ? undefined : (defaults.folder ?? undefined));
|
|
108
|
-
|
|
109
|
-
// The model steered: the session's, or the default the next new chat launches under.
|
|
110
|
-
const effectiveModelId = session ? modelId : defaults.modelId;
|
|
111
|
-
const effectiveProviderKey = session ? providerKey : defaults.providerKey;
|
|
112
|
-
const effectiveAccount = session ? (session.account ?? null) : defaults.account;
|
|
113
|
-
|
|
114
|
-
// One catalog load serves the model popover and the draft's reasoning lookup.
|
|
115
|
-
const models = useModelCatalog(null, catalogCwd, hostId);
|
|
116
|
-
const catalog = models.catalog;
|
|
117
|
-
|
|
118
|
-
// Unknown / unauthenticated default → nothing: hiding the pill beats a no-op control.
|
|
119
|
-
const draftEntry = session
|
|
120
|
-
? undefined
|
|
121
|
-
: catalog?.find((e) => e.providerKey === defaults.providerKey && e.modelId === defaults.modelId);
|
|
122
|
-
const supportsReasoning = session ? activeSupportsReasoning : (draftEntry?.supportsReasoning ?? false);
|
|
123
|
-
const options = session ? activeModelOptions : (draftEntry?.options ?? []);
|
|
124
|
-
// A draft's pill: its own pick, else the configured default for the model, else the last used.
|
|
125
|
-
const remembered = useDraftKnobs(session ? null : defaults.modelId, defaults.knobs);
|
|
126
|
-
// Only the options this model declares.
|
|
127
|
-
const draftEnabled = Object.fromEntries(options.filter((o) => remembered.options[o.id]).map((o) => [o.id, true]));
|
|
128
|
-
|
|
129
|
-
return (
|
|
130
|
-
/*
|
|
131
|
-
* Never wraps: on a tight composer the agent and model names truncate and
|
|
132
|
-
* the options pill folds to its icon (`zg-chatbox` tiers in styles/composer.css).
|
|
133
|
-
* Popovers are portaled, so nothing here can clip them.
|
|
134
|
-
*/
|
|
135
|
-
<div className="zg-chatbox-pickers zg-segment min-w-0 max-w-full">
|
|
136
|
-
<HostAgentPicker
|
|
137
|
-
session={session}
|
|
138
|
-
defaultAgentId={defaults.agentId}
|
|
139
|
-
onDefaultAgentChange={onDefaultAgentChange}
|
|
140
|
-
defaultCwd={defaults.folder ?? ''}
|
|
141
|
-
{...(onCommitted ? { onCommitted } : {})}
|
|
142
|
-
/>
|
|
143
|
-
{retry}
|
|
144
|
-
<HostModelPicker
|
|
145
|
-
session={session}
|
|
146
|
-
modelId={effectiveModelId}
|
|
147
|
-
providerKey={effectiveProviderKey}
|
|
148
|
-
account={effectiveAccount}
|
|
149
|
-
catalog={catalog}
|
|
150
|
-
catalogError={models.error}
|
|
151
|
-
{...(models.retry ? { onRetryCatalog: models.retry } : {})}
|
|
152
|
-
hostId={hostId}
|
|
153
|
-
onDefaultModel={onDefaultModel}
|
|
154
|
-
{...(onCommitted ? { onCommitted } : {})}
|
|
155
|
-
shortcut={modelShortcut}
|
|
156
|
-
serving={serving}
|
|
157
|
-
images={images}
|
|
158
|
-
/>
|
|
159
|
-
{(supportsReasoning || options.length > 0) &&
|
|
160
|
-
(session ? (
|
|
161
|
-
<HostModelOptionsPicker
|
|
162
|
-
session={session}
|
|
163
|
-
modelId={modelId}
|
|
164
|
-
supportsReasoning={supportsReasoning}
|
|
165
|
-
options={options}
|
|
166
|
-
enabled={session.modelOptions ?? activeEnabledOptions}
|
|
167
|
-
{...(onCommitted ? { onCommitted } : {})}
|
|
168
|
-
/>
|
|
169
|
-
) : (
|
|
170
|
-
<ModelOptionsPicker
|
|
171
|
-
supportsReasoning={supportsReasoning}
|
|
172
|
-
options={options}
|
|
173
|
-
effort={remembered.effort}
|
|
174
|
-
enabled={draftEnabled}
|
|
175
|
-
onEffort={(level) => knobs.pickDraftEffort(defaults.modelId, level)}
|
|
176
|
-
onOptions={(next) => knobs.pickDraftOptions(defaults.modelId, next)}
|
|
177
|
-
title={labels.modelOptionsTitle}
|
|
178
|
-
/>
|
|
179
|
-
))}
|
|
180
|
-
</div>
|
|
181
|
-
);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/** Props for {@link ComposerStatusPills}. */
|
|
185
|
-
export interface ComposerStatusPillsProps {
|
|
186
|
-
/** The live session, `null` for a draft (nothing shows). */
|
|
187
|
-
sessionId: string | null;
|
|
188
|
-
/** Whether it runs now. */
|
|
189
|
-
running: boolean;
|
|
190
|
-
/** Its context status. */
|
|
191
|
-
contextStatus: ComposerContextStatus | null;
|
|
192
|
-
/** Its cost as last read; the pills add what the run settled and streams since (`ComposerHost.runs`). */
|
|
193
|
-
fetchedCost: ComposerCostStatus | null;
|
|
194
|
-
/** The fraction auto-compaction starts at, `null` when it is off. */
|
|
195
|
-
autoCompactThreshold?: number | null;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* The right cluster: the run chip and the context orb. The only part of the
|
|
200
|
-
* conversation that re-renders on the run's progress ticks.
|
|
201
|
-
*
|
|
202
|
-
* @param props - The {@link ComposerStatusPillsProps}.
|
|
203
|
-
*/
|
|
204
|
-
export function ComposerStatusPills({
|
|
205
|
-
sessionId,
|
|
206
|
-
running,
|
|
207
|
-
contextStatus,
|
|
208
|
-
fetchedCost,
|
|
209
|
-
autoCompactThreshold = null,
|
|
210
|
-
}: ComposerStatusPillsProps) {
|
|
211
|
-
// A run this window joined mid-way counts from its real start and output.
|
|
212
|
-
useJoinedRunProgress(sessionId, running);
|
|
213
|
-
const progress = useRunProgress(sessionId);
|
|
214
|
-
const accrued = useRunAccruedCost(sessionId);
|
|
215
|
-
const runOutputTokens = useRunOutputTokens(sessionId);
|
|
216
|
-
const modelName = useComposerModelName();
|
|
217
|
-
const streaming = running ? progress : null;
|
|
218
|
-
const costStatus = useMemo(() => composeLiveCost(fetchedCost, accrued, streaming), [fetchedCost, accrued, streaming]);
|
|
219
|
-
|
|
220
|
-
if (!sessionId) return null;
|
|
221
|
-
if (!contextStatus && !costStatus?.label && !running) return null;
|
|
222
|
-
|
|
223
|
-
return (
|
|
224
|
-
<div className="zg-chatbox-status flex items-center gap-2 min-w-0">
|
|
225
|
-
<RunStatusChip
|
|
226
|
-
sessionId={sessionId}
|
|
227
|
-
running={running}
|
|
228
|
-
progress={streaming}
|
|
229
|
-
settledOutputTokens={runOutputTokens}
|
|
230
|
-
cost={costStatus}
|
|
231
|
-
/>
|
|
232
|
-
{contextStatus && (
|
|
233
|
-
<HostContextOrb
|
|
234
|
-
sessionId={sessionId}
|
|
235
|
-
status={contextStatus}
|
|
236
|
-
cost={costStatus}
|
|
237
|
-
modelName={modelName(contextStatus.modelId)}
|
|
238
|
-
autoCompactThreshold={autoCompactThreshold}
|
|
239
|
-
/>
|
|
240
|
-
)}
|
|
241
|
-
</div>
|
|
242
|
-
);
|
|
243
|
-
}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's Tiptap editor, apart from `Composer` so its ~180 kB load
|
|
3
|
-
* after the first paint (`loadComposerEditor`). It builds the editor and
|
|
4
|
-
* mounts its view; every behaviour stays in `Composer`, reached through
|
|
5
|
-
* `bridge`.
|
|
6
|
-
*/
|
|
7
|
-
import Placeholder from '@tiptap/extension-placeholder';
|
|
8
|
-
import { EditorContent, useEditor, type Editor } from '@tiptap/react';
|
|
9
|
-
import StarterKit from '@tiptap/starter-kit';
|
|
10
|
-
import { useLayoutEffect, type RefObject } from 'react';
|
|
11
|
-
|
|
12
|
-
import { plainTextToDocJson } from './prompt-history-nav';
|
|
13
|
-
import { suggestionExtension } from './suggestion-extension';
|
|
14
|
-
import type { SuggestionSource, SuggestionState } from './suggestions';
|
|
15
|
-
|
|
16
|
-
/** What the editor reads from its composer: refs to the latest props and state, and the handlers. */
|
|
17
|
-
export interface ComposerEditorBridge {
|
|
18
|
-
placeholder: RefObject<string>;
|
|
19
|
-
name: RefObject<string>;
|
|
20
|
-
mentions: RefObject<SuggestionSource | undefined>;
|
|
21
|
-
commands: RefObject<SuggestionSource | undefined>;
|
|
22
|
-
suggest: RefObject<SuggestionState | null>;
|
|
23
|
-
setSuggest(next: SuggestionState | null): void;
|
|
24
|
-
keyDown(event: KeyboardEvent): boolean;
|
|
25
|
-
paste(event: ClipboardEvent): boolean;
|
|
26
|
-
update(editor: Editor): void;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Props for {@link ComposerEditor}. */
|
|
30
|
-
export interface ComposerEditorProps {
|
|
31
|
-
/** The draft the editor starts with. */
|
|
32
|
-
text: string;
|
|
33
|
-
disabled: boolean;
|
|
34
|
-
autoFocus: boolean;
|
|
35
|
-
mentions: boolean;
|
|
36
|
-
commands: boolean;
|
|
37
|
-
bridge: ComposerEditorBridge;
|
|
38
|
-
/** Receives the editor once built (and each rebuild). */
|
|
39
|
-
onEditor(editor: Editor | null): void;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/** Builds the composer's editor and renders its view. */
|
|
43
|
-
export function ComposerEditor({
|
|
44
|
-
text,
|
|
45
|
-
disabled,
|
|
46
|
-
autoFocus,
|
|
47
|
-
mentions,
|
|
48
|
-
commands,
|
|
49
|
-
bridge,
|
|
50
|
-
onEditor,
|
|
51
|
-
}: ComposerEditorProps) {
|
|
52
|
-
const editor = useEditor(
|
|
53
|
-
{
|
|
54
|
-
immediatelyRender: false,
|
|
55
|
-
shouldRerenderOnTransaction: false,
|
|
56
|
-
editable: !disabled,
|
|
57
|
-
autofocus: autoFocus ? 'end' : false,
|
|
58
|
-
content: plainTextToDocJson(text),
|
|
59
|
-
extensions: [
|
|
60
|
-
// What is typed is what is sent: no input rules, no marks, no blocks but paragraphs.
|
|
61
|
-
StarterKit.configure({
|
|
62
|
-
heading: false,
|
|
63
|
-
horizontalRule: false,
|
|
64
|
-
bold: false,
|
|
65
|
-
italic: false,
|
|
66
|
-
strike: false,
|
|
67
|
-
underline: false,
|
|
68
|
-
code: false,
|
|
69
|
-
codeBlock: false,
|
|
70
|
-
blockquote: false,
|
|
71
|
-
bulletList: false,
|
|
72
|
-
orderedList: false,
|
|
73
|
-
listItem: false,
|
|
74
|
-
listKeymap: false,
|
|
75
|
-
link: false,
|
|
76
|
-
}),
|
|
77
|
-
Placeholder.configure({ placeholder: () => bridge.placeholder.current, showOnlyWhenEditable: false }),
|
|
78
|
-
...(mentions ? [suggestionExtension('mention', bridge.mentions, bridge.suggest, bridge.setSuggest)] : []),
|
|
79
|
-
...(commands ? [suggestionExtension('command', bridge.commands, bridge.suggest, bridge.setSuggest)] : []),
|
|
80
|
-
],
|
|
81
|
-
editorProps: {
|
|
82
|
-
attributes: () => ({
|
|
83
|
-
role: 'textbox',
|
|
84
|
-
'aria-multiline': 'true',
|
|
85
|
-
'aria-label': bridge.name.current,
|
|
86
|
-
class: 'zg-composer-editor',
|
|
87
|
-
'data-testid': 'composer-input',
|
|
88
|
-
}),
|
|
89
|
-
handleKeyDown: (_view, event) => bridge.keyDown(event),
|
|
90
|
-
handlePaste: (_view, event) => bridge.paste(event),
|
|
91
|
-
// Files land as attachments (the card's drop handler), never as editor content.
|
|
92
|
-
handleDrop: (_view, event) => Boolean(event.dataTransfer?.files.length),
|
|
93
|
-
},
|
|
94
|
-
onUpdate: ({ editor: ed }) => bridge.update(ed),
|
|
95
|
-
},
|
|
96
|
-
[mentions, commands],
|
|
97
|
-
);
|
|
98
|
-
// Before paint: the composer swaps its placeholder shell for the editor in the same frame.
|
|
99
|
-
useLayoutEffect(() => onEditor(editor), [editor, onEditor]);
|
|
100
|
-
return <EditorContent editor={editor} />;
|
|
101
|
-
}
|