zidane-ui 9.1.1 → 9.1.4
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 +11 -10
- 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/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/demos/index.js +1 -1
- package/dist/onboarding/index.js +5 -5
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ConnectorsStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +2 -2
- package/dist/onboarding/steps/SkillsStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +1 -1
- 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 +2 -2
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/settings/sections/skills/SkillsSection.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,296 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* One session in a list: status dot, title (inline rename), trailing badges
|
|
3
|
-
* and meta, an optional second line, and an actions menu behind a 3-dots
|
|
4
|
-
* trigger and right-click.
|
|
5
|
-
*
|
|
6
|
-
* Every app-specific part is a slot (`status`, `titleDisplay`, `badges`,
|
|
7
|
-
* `meta`, `sub`) and the actions are data (`menuItems`), so a host adds its
|
|
8
|
-
* own (an environment badge, a commits line, "open in new window") without
|
|
9
|
-
* forking the row. Paint (hover, active, renaming, archived) lives on
|
|
10
|
-
* `.zg-session-row` data attributes (styles/chat.css), so a keyboard cursor
|
|
11
|
-
* can move without a React render.
|
|
12
|
-
*/
|
|
13
|
-
import { memo, useCallback, useRef, useState, type CSSProperties, type ReactNode } from 'react';
|
|
14
|
-
|
|
15
|
-
import { EditableTitle } from '../components/EditableTitle';
|
|
16
|
-
import { IconButton } from '../components/IconButton';
|
|
17
|
-
import { RowActionsMenu, type RowActionItem } from '../components/RowActionsMenu';
|
|
18
|
-
import { StatusDot, type SessionDotState } from './StatusDot';
|
|
19
|
-
import { useChatLabels } from './useChatLabels';
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* The hovered title's right edge stays clear of the 3-dots trigger: the
|
|
23
|
-
* text is fully visible up to this many pixels before the line's end
|
|
24
|
-
* (`.zg-title-clip`'s hover mask in styles/chat.css spells the same 32px).
|
|
25
|
-
*/
|
|
26
|
-
const TITLE_HOVER_FADE = 32;
|
|
27
|
-
/** Reading pace of the hover slide, in pixels a second. */
|
|
28
|
-
const TITLE_SLIDE_SPEED = 50;
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Arms the hover slide of a long title: how far it must travel for its end
|
|
32
|
-
* to show, and how long that takes at a reading pace. Measured when the
|
|
33
|
-
* pointer or the keyboard arrives, against the room the line will have
|
|
34
|
-
* once the trailing meta folds away (its width plus the title's).
|
|
35
|
-
*/
|
|
36
|
-
function armTitleSlide(clip: HTMLElement | null): void {
|
|
37
|
-
const title = clip?.firstElementChild as HTMLElement | null;
|
|
38
|
-
if (!clip || !title) return;
|
|
39
|
-
const meta = clip.parentElement?.querySelector<HTMLElement>(':scope > .zg-row-meta');
|
|
40
|
-
const room = clip.clientWidth + (meta?.offsetWidth ?? 0) - TITLE_HOVER_FADE;
|
|
41
|
-
const shift = Math.ceil(title.scrollWidth - room);
|
|
42
|
-
if (shift <= 0) {
|
|
43
|
-
title.removeAttribute('data-slide');
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
title.style.setProperty('--zg-title-shift', `${-shift}px`);
|
|
47
|
-
title.style.setProperty(
|
|
48
|
-
'--zg-title-slide',
|
|
49
|
-
`${Math.round(Math.min(6000, Math.max(500, (shift / TITLE_SLIDE_SPEED) * 1000)))}ms`,
|
|
50
|
-
);
|
|
51
|
-
title.setAttribute('data-slide', '');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export type { RowActionItem };
|
|
55
|
-
|
|
56
|
-
/** Props for {@link SessionListRow}. Every app-specific part is a slot (`status`, `titleDisplay`, `badges`, `meta`, `sub`) or data (`menuItems`). */
|
|
57
|
-
export interface SessionListRowProps {
|
|
58
|
-
/** Session id, passed to `onSelect`, `onStartRename`, and the menu callbacks. */
|
|
59
|
-
id: string;
|
|
60
|
-
/** Session title. Shown unless `titleDisplay` replaces it, and used as the rename field's text. */
|
|
61
|
-
title: string;
|
|
62
|
-
/**
|
|
63
|
-
* Marks the row as the selected session.
|
|
64
|
-
* @default false
|
|
65
|
-
*/
|
|
66
|
-
active?: boolean;
|
|
67
|
-
/**
|
|
68
|
-
* Marks the session as archived. The default glyph becomes an archive icon.
|
|
69
|
-
* @default false
|
|
70
|
-
*/
|
|
71
|
-
archived?: boolean;
|
|
72
|
-
/** Leading glyph. Default: a `StatusDot` for `dot` (an archive glyph when archived). */
|
|
73
|
-
status?: ReactNode;
|
|
74
|
-
/**
|
|
75
|
-
* State drawn by the default `StatusDot` when `status` is not set.
|
|
76
|
-
* @default 'idle'
|
|
77
|
-
*/
|
|
78
|
-
dot?: SessionDotState;
|
|
79
|
-
/** What the title shows when not renaming (badges inside a title, highlighting). Default: the title. */
|
|
80
|
-
titleDisplay?: ReactNode;
|
|
81
|
-
/** After the title, on its line (an environment badge). Hidden while renaming. */
|
|
82
|
-
badges?: ReactNode;
|
|
83
|
-
/** Trailing, on the title's line (`now`, `3h`, a run's elapsed time). Hidden while renaming. */
|
|
84
|
-
meta?: ReactNode;
|
|
85
|
-
/** A second line (a search excerpt, commits). */
|
|
86
|
-
sub?: ReactNode;
|
|
87
|
-
/** Extra classes on the second line's box. */
|
|
88
|
-
subClassName?: string;
|
|
89
|
-
/** Called with `id` when the user clicks the row. Not called while renaming. */
|
|
90
|
-
onSelect: (id: string) => void;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Replaces the title with an inline text field.
|
|
94
|
-
* @default false
|
|
95
|
-
*/
|
|
96
|
-
renaming?: boolean;
|
|
97
|
-
/**
|
|
98
|
-
* Current text of the rename field. Only used while `renaming`.
|
|
99
|
-
* @default ''
|
|
100
|
-
*/
|
|
101
|
-
renameValue?: string;
|
|
102
|
-
/** Called with `id` and `title` when the user asks to edit the title in place. */
|
|
103
|
-
onStartRename?: (id: string, title: string) => void;
|
|
104
|
-
/** Called with the new text as the user types in the rename field. */
|
|
105
|
-
onRenameChange?: (value: string) => void;
|
|
106
|
-
/** Called when the user confirms the rename. */
|
|
107
|
-
onRenameCommit?: () => void | Promise<void>;
|
|
108
|
-
/** Called when the user abandons the rename. */
|
|
109
|
-
onRenameCancel?: () => void;
|
|
110
|
-
|
|
111
|
-
/** Row actions; none hides the trigger. */
|
|
112
|
-
menuItems?: readonly RowActionItem[];
|
|
113
|
-
/** The actions trigger's accessible name. Default: `labels.sessionActions` (a row that is no session names its own). */
|
|
114
|
-
menuLabel?: string;
|
|
115
|
-
/**
|
|
116
|
-
* The row folds rows under it and a click toggles them: `true` while they show, `false` while
|
|
117
|
-
* folded (`aria-expanded` on the row's button). Absent: the row folds nothing.
|
|
118
|
-
*/
|
|
119
|
-
expanded?: boolean;
|
|
120
|
-
/** Controlled menu (one open menu across a list); uncontrolled when omitted. */
|
|
121
|
-
menuOpen?: boolean;
|
|
122
|
-
/** Called with `id` when the row asks to open its actions menu. Used with a controlled `menuOpen`. */
|
|
123
|
-
onOpenMenu?: (id: string) => void;
|
|
124
|
-
/** Called with `id` when the actions menu closes. Used with a controlled `menuOpen`. */
|
|
125
|
-
onCloseMenu?: (id: string) => void;
|
|
126
|
-
|
|
127
|
-
/** Plays the row's arrival sweep (`data-arrived`, styles/chat.css). */
|
|
128
|
-
arrived?: boolean;
|
|
129
|
-
/** Extra classes on the root element. */
|
|
130
|
-
className?: string;
|
|
131
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
132
|
-
style?: CSSProperties;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/** Renders one session in a list: status dot, title with inline rename, badges, meta, an optional second line, and an actions menu behind a 3-dots trigger and right-click. */
|
|
136
|
-
export const SessionListRow = memo(function SessionListRow({
|
|
137
|
-
id,
|
|
138
|
-
title,
|
|
139
|
-
active = false,
|
|
140
|
-
archived = false,
|
|
141
|
-
status,
|
|
142
|
-
dot = 'idle',
|
|
143
|
-
titleDisplay,
|
|
144
|
-
badges,
|
|
145
|
-
meta,
|
|
146
|
-
sub,
|
|
147
|
-
subClassName = '',
|
|
148
|
-
onSelect,
|
|
149
|
-
renaming = false,
|
|
150
|
-
renameValue = '',
|
|
151
|
-
onStartRename,
|
|
152
|
-
onRenameChange,
|
|
153
|
-
onRenameCommit,
|
|
154
|
-
onRenameCancel,
|
|
155
|
-
menuItems,
|
|
156
|
-
menuLabel,
|
|
157
|
-
expanded,
|
|
158
|
-
menuOpen: menuOpenProp,
|
|
159
|
-
onOpenMenu,
|
|
160
|
-
onCloseMenu,
|
|
161
|
-
arrived = false,
|
|
162
|
-
className,
|
|
163
|
-
style,
|
|
164
|
-
}: SessionListRowProps) {
|
|
165
|
-
const labels = useChatLabels();
|
|
166
|
-
const trigger = useRef<HTMLButtonElement | null>(null);
|
|
167
|
-
const [ownOpen, setOwnOpen] = useState(false);
|
|
168
|
-
const [contextPos, setContextPos] = useState<{ x: number; y: number } | null>(null);
|
|
169
|
-
const controlled = menuOpenProp !== undefined;
|
|
170
|
-
const menuOpen = controlled ? menuOpenProp : ownOpen;
|
|
171
|
-
const hasMenu = Boolean(menuItems && menuItems.length > 0);
|
|
172
|
-
|
|
173
|
-
const open = useCallback(() => (controlled ? onOpenMenu?.(id) : setOwnOpen(true)), [controlled, onOpenMenu, id]);
|
|
174
|
-
const close = useCallback(() => {
|
|
175
|
-
setContextPos(null);
|
|
176
|
-
if (controlled) onCloseMenu?.(id);
|
|
177
|
-
else setOwnOpen(false);
|
|
178
|
-
}, [controlled, onCloseMenu, id]);
|
|
179
|
-
|
|
180
|
-
const onContextMenu = useCallback(
|
|
181
|
-
(event: React.MouseEvent<HTMLLIElement>) => {
|
|
182
|
-
if (!hasMenu) return;
|
|
183
|
-
event.preventDefault();
|
|
184
|
-
setContextPos({ x: event.clientX, y: event.clientY });
|
|
185
|
-
open();
|
|
186
|
-
},
|
|
187
|
-
[hasMenu, open],
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
const SelectBox = renaming ? 'div' : 'button';
|
|
191
|
-
const clipRef = useRef<HTMLDivElement | null>(null);
|
|
192
|
-
const armSlide = useCallback(() => armTitleSlide(clipRef.current), []);
|
|
193
|
-
return (
|
|
194
|
-
<li
|
|
195
|
-
className={['zg-session-row zg-press-host group relative rounded-[var(--zg-radius-md)] mb-1', className]
|
|
196
|
-
.filter(Boolean)
|
|
197
|
-
.join(' ')}
|
|
198
|
-
style={style}
|
|
199
|
-
data-session-id={id}
|
|
200
|
-
data-active={active ? 'true' : undefined}
|
|
201
|
-
data-renaming={renaming ? 'true' : undefined}
|
|
202
|
-
data-archived={archived ? 'true' : undefined}
|
|
203
|
-
data-arrived={arrived ? '' : undefined}
|
|
204
|
-
aria-current={active ? 'true' : undefined}
|
|
205
|
-
onContextMenu={onContextMenu}
|
|
206
|
-
onPointerEnter={renaming ? undefined : armSlide}
|
|
207
|
-
onFocus={renaming ? undefined : armSlide}
|
|
208
|
-
>
|
|
209
|
-
{/* The select button and the actions trigger are siblings (never nested). While renaming the
|
|
210
|
-
row is a plain box: the title's editor is a textbox, and a textbox inside a button is
|
|
211
|
-
nested interactive content (the caret, Space and Enter would belong to the button). */}
|
|
212
|
-
<div className="py-1 pr-2 pl-1">
|
|
213
|
-
<SelectBox
|
|
214
|
-
{...(renaming
|
|
215
|
-
? {}
|
|
216
|
-
: {
|
|
217
|
-
type: 'button' as const,
|
|
218
|
-
'data-row-select': true,
|
|
219
|
-
onClick: () => onSelect(id),
|
|
220
|
-
...(expanded !== undefined ? { 'aria-expanded': expanded } : {}),
|
|
221
|
-
})}
|
|
222
|
-
className={`block w-full text-left bg-transparent border-0 rounded-[var(--zg-radius-md)] p-0 ${
|
|
223
|
-
renaming ? '' : 'zg-press-subtle cursor-pointer'
|
|
224
|
-
}`}
|
|
225
|
-
>
|
|
226
|
-
<div className="zg-sidebar-fade flex items-baseline gap-1.5 pr-2">
|
|
227
|
-
{/* On the title's line (20px), however many lines the row has. */}
|
|
228
|
-
<span className="w-[18px] h-5 shrink-0 inline-flex items-center justify-center self-start">
|
|
229
|
-
{status ??
|
|
230
|
-
(archived ? (
|
|
231
|
-
<span
|
|
232
|
-
role="img"
|
|
233
|
-
aria-label={labels.archived}
|
|
234
|
-
title={labels.archived}
|
|
235
|
-
className="i-ph-archive text-sm text-[var(--zg-text-muted)] translate-y-[1px]"
|
|
236
|
-
/>
|
|
237
|
-
) : (
|
|
238
|
-
<StatusDot state={dot} />
|
|
239
|
-
))}
|
|
240
|
-
</span>
|
|
241
|
-
{/* The clip masks the title's end; the title inside slides on hover to show the rest. */}
|
|
242
|
-
<div ref={clipRef} className="zg-title-clip min-w-[45%] flex-1 overflow-hidden">
|
|
243
|
-
<EditableTitle
|
|
244
|
-
text={renaming ? renameValue : title}
|
|
245
|
-
display={titleDisplay ?? title}
|
|
246
|
-
editing={renaming}
|
|
247
|
-
onStartEdit={() => onStartRename?.(id, title)}
|
|
248
|
-
onChange={(v) => onRenameChange?.(v)}
|
|
249
|
-
onCommit={() => onRenameCommit?.()}
|
|
250
|
-
onCancel={() => onRenameCancel?.()}
|
|
251
|
-
className={`zg-session-title text-sm whitespace-nowrap text-[var(--zg-text)] ${
|
|
252
|
-
renaming ? 'overflow-hidden' : 'zg-title-slide w-max'
|
|
253
|
-
}`}
|
|
254
|
-
/>
|
|
255
|
-
</div>
|
|
256
|
-
{!renaming && badges}
|
|
257
|
-
{!renaming && meta}
|
|
258
|
-
</div>
|
|
259
|
-
{sub !== undefined && sub !== null && sub !== false && (
|
|
260
|
-
<div className={`zg-session-sub pl-6 pr-2 ${subClassName}`.trim()}>{sub}</div>
|
|
261
|
-
)}
|
|
262
|
-
</SelectBox>
|
|
263
|
-
{hasMenu && (
|
|
264
|
-
<>
|
|
265
|
-
{/* `.zg-row-dots` owns the hover / focus reveal. */}
|
|
266
|
-
<IconButton
|
|
267
|
-
ref={trigger}
|
|
268
|
-
icon="i-ph-dots-three"
|
|
269
|
-
label={menuLabel ?? labels.sessionActions}
|
|
270
|
-
title={labels.moreActions}
|
|
271
|
-
size="sm"
|
|
272
|
-
active={menuOpen}
|
|
273
|
-
aria-haspopup="menu"
|
|
274
|
-
aria-expanded={menuOpen}
|
|
275
|
-
data-open={menuOpen ? '' : undefined}
|
|
276
|
-
// Its glyph on the sidebar's trailing column (22px in from the edge), with the filter, gear and pin.
|
|
277
|
-
className="zg-row-dots zg-hit-extend absolute top-0.5 right-0.5"
|
|
278
|
-
onClick={(e) => {
|
|
279
|
-
e.stopPropagation();
|
|
280
|
-
if (menuOpen) close();
|
|
281
|
-
else open();
|
|
282
|
-
}}
|
|
283
|
-
/>
|
|
284
|
-
<RowActionsMenu
|
|
285
|
-
open={menuOpen}
|
|
286
|
-
anchorRef={trigger}
|
|
287
|
-
position={contextPos}
|
|
288
|
-
onClose={close}
|
|
289
|
-
items={menuItems as RowActionItem[]}
|
|
290
|
-
/>
|
|
291
|
-
</>
|
|
292
|
-
)}
|
|
293
|
-
</div>
|
|
294
|
-
</li>
|
|
295
|
-
);
|
|
296
|
-
});
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The session stream store (`createSessionStreams`, `zidane-ui/chat/headless`)
|
|
3
|
-
* as React hooks. An app creates the streams, feeds them its live signals and
|
|
4
|
-
* wraps once in `SessionStreamsProvider`; every hook below reads them.
|
|
5
|
-
*
|
|
6
|
-
* Subscription model: each read subscribes to one session only
|
|
7
|
-
* (`subscribeSession` through `useSyncExternalStore`), so a tick on session A
|
|
8
|
-
* re-renders A's readers and leaves B's transcript and sidebar row inert. The
|
|
9
|
-
* dispatch hooks return the bound writes of `createSessionStreamActions`:
|
|
10
|
-
* stable functions that never subscribe their caller.
|
|
11
|
-
*/
|
|
12
|
-
import {
|
|
13
|
-
createContext,
|
|
14
|
-
useCallback,
|
|
15
|
-
useContext,
|
|
16
|
-
useMemo,
|
|
17
|
-
useRef,
|
|
18
|
-
useState,
|
|
19
|
-
useSyncExternalStore,
|
|
20
|
-
type ReactNode,
|
|
21
|
-
} from 'react';
|
|
22
|
-
import type { SystemMdFile } from 'zidane/chat';
|
|
23
|
-
|
|
24
|
-
import type { ChatEvent } from './headless/host';
|
|
25
|
-
import {
|
|
26
|
-
createSessionStreamActions,
|
|
27
|
-
selectEditEvents,
|
|
28
|
-
stableSelection,
|
|
29
|
-
type SessionFallbackModel,
|
|
30
|
-
type SessionPageState,
|
|
31
|
-
type SessionRetryState,
|
|
32
|
-
type SessionStreamActions,
|
|
33
|
-
type SessionStreams,
|
|
34
|
-
type SessionStreamStore,
|
|
35
|
-
} from './headless/streams';
|
|
36
|
-
import {
|
|
37
|
-
readSessionEvents,
|
|
38
|
-
readSessionFallback,
|
|
39
|
-
readSessionPage,
|
|
40
|
-
readSessionRetry,
|
|
41
|
-
readSessionRunning,
|
|
42
|
-
readSessionSystemMd,
|
|
43
|
-
type SessionStreamRead,
|
|
44
|
-
} from './headless/streams/selectors';
|
|
45
|
-
|
|
46
|
-
interface StreamsContextValue {
|
|
47
|
-
store: SessionStreamStore<string>;
|
|
48
|
-
actions: SessionStreamActions<string>;
|
|
49
|
-
streams: SessionStreams<string>;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const StreamsContext = createContext<StreamsContextValue | null>(null);
|
|
53
|
-
|
|
54
|
-
/** Props of {@link SessionStreamsProvider}. */
|
|
55
|
-
export interface SessionStreamsProviderProps<K extends string = string> {
|
|
56
|
-
/** The streams the hooks read; keep its identity for the provider's life. */
|
|
57
|
-
streams: SessionStreams<K>;
|
|
58
|
-
/** The components that read the streams. */
|
|
59
|
-
children?: ReactNode;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Provides one session streams to the hooks below it.
|
|
64
|
-
*
|
|
65
|
-
* @param props - The streams and the components that read them.
|
|
66
|
-
*/
|
|
67
|
-
export function SessionStreamsProvider<K extends string = string>({
|
|
68
|
-
streams,
|
|
69
|
-
children,
|
|
70
|
-
}: SessionStreamsProviderProps<K>) {
|
|
71
|
-
const value = useMemo<StreamsContextValue>(() => {
|
|
72
|
-
const any = streams as unknown as SessionStreams<string>;
|
|
73
|
-
return { store: any.store, actions: createSessionStreamActions(any), streams: any };
|
|
74
|
-
}, [streams]);
|
|
75
|
-
return <StreamsContext.Provider value={value}>{children}</StreamsContext.Provider>;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function useStreamsCtx(): StreamsContextValue {
|
|
79
|
-
const ctx = useContext(StreamsContext);
|
|
80
|
-
if (!ctx) throw new Error('zidane-ui/chat: wrap the stream hooks in <SessionStreamsProvider streams={…}>');
|
|
81
|
-
return ctx;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/** The streams themselves (stable). */
|
|
85
|
-
export function useSessionStreams<K extends string = string>(): SessionStreams<K> {
|
|
86
|
-
return useStreamsCtx().streams as unknown as SessionStreams<K>;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/** The streams' bound writes (stable): dispatching never subscribes the caller. */
|
|
90
|
-
export function useSessionStreamActions<K extends string = string>(): SessionStreamActions<K> {
|
|
91
|
-
return useStreamsCtx().actions as unknown as SessionStreamActions<K>;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* One session's slice of the store, subscribed to that session only. `read`
|
|
96
|
-
* returns a stable reference for an unchanged slice and is itself stable.
|
|
97
|
-
*/
|
|
98
|
-
function useSessionSnapshot<K extends string, T>(sessionId: K | null, read: SessionStreamRead<T, K>): T {
|
|
99
|
-
const ctx = useStreamsCtx();
|
|
100
|
-
const store = ctx.store as unknown as SessionStreamStore<K>;
|
|
101
|
-
const subscribe = useCallback(
|
|
102
|
-
(listener: () => void) => store.subscribeSession(sessionId, listener),
|
|
103
|
-
[store, sessionId],
|
|
104
|
-
);
|
|
105
|
-
const getSnapshot = useCallback(() => read(store, sessionId), [store, sessionId, read]);
|
|
106
|
-
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* The session's events.
|
|
111
|
-
*
|
|
112
|
-
* @param sessionId - The session (`null`: none).
|
|
113
|
-
*/
|
|
114
|
-
export function useSessionEvents<K extends string>(sessionId: K | null): readonly ChatEvent[] {
|
|
115
|
-
return useSessionSnapshot(sessionId, readSessionEvents<K>);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* A value derived from the session's events, recomputed only when the events
|
|
120
|
-
* change. `select` should be stable (module-level or memoised) and return a
|
|
121
|
-
* stable reference for unchanged input.
|
|
122
|
-
*
|
|
123
|
-
* @param sessionId - The session (`null`: none).
|
|
124
|
-
* @param select - Derives the value from the events.
|
|
125
|
-
*/
|
|
126
|
-
export function useSessionEventsSelector<K extends string, T>(
|
|
127
|
-
sessionId: K | null,
|
|
128
|
-
select: (events: readonly ChatEvent[]) => T,
|
|
129
|
-
): T {
|
|
130
|
-
const last = useRef<{ events: readonly ChatEvent[]; select: typeof select; value: T } | null>(null);
|
|
131
|
-
const read = useCallback(
|
|
132
|
-
(store: SessionStreamStore<K>, id: K | null) => {
|
|
133
|
-
const events = store.getEventsSnapshot(id);
|
|
134
|
-
const prev = last.current;
|
|
135
|
-
if (prev && prev.events === events && prev.select === select) return prev.value;
|
|
136
|
-
const value = select(events);
|
|
137
|
-
last.current = { events, select, value };
|
|
138
|
-
return value;
|
|
139
|
-
},
|
|
140
|
-
[select],
|
|
141
|
-
);
|
|
142
|
-
return useSessionSnapshot(sessionId, read);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* The session's events that carry a file edit, as a stable list: a reader
|
|
147
|
-
* re-renders when an edit lands, not on every streamed token.
|
|
148
|
-
*
|
|
149
|
-
* @param sessionId - The session (`null`: none).
|
|
150
|
-
*/
|
|
151
|
-
export function useSessionEdits<K extends string>(sessionId: K | null): readonly ChatEvent[] {
|
|
152
|
-
const [select] = useState(() => stableSelection<ChatEvent, ChatEvent>(selectEditEvents));
|
|
153
|
-
return useSessionEventsSelector(sessionId, select);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Whether a run is in flight for the session.
|
|
158
|
-
*
|
|
159
|
-
* @param sessionId - The session (`null`: none).
|
|
160
|
-
*/
|
|
161
|
-
export function useSessionRunning<K extends string>(sessionId: K | null): boolean {
|
|
162
|
-
return useSessionSnapshot(sessionId, readSessionRunning<K>);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* The fallback model the session's run switched to, `null` when none.
|
|
167
|
-
*
|
|
168
|
-
* @param sessionId - The session (`null`: none).
|
|
169
|
-
*/
|
|
170
|
-
export function useSessionFallbackModel<K extends string>(sessionId: K | null): SessionFallbackModel | null {
|
|
171
|
-
return useSessionSnapshot(sessionId, readSessionFallback<K>);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
/**
|
|
175
|
-
* The provider retry the session's run is in, `null` when none.
|
|
176
|
-
*
|
|
177
|
-
* @param sessionId - The session (`null`: none).
|
|
178
|
-
*/
|
|
179
|
-
export function useSessionRetry<K extends string>(sessionId: K | null): SessionRetryState | null {
|
|
180
|
-
return useSessionSnapshot(sessionId, readSessionRetry<K>);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
* The session's `SYSTEM.md` override (it replaces the built-in doctrine), `null` when none.
|
|
185
|
-
*
|
|
186
|
-
* @param sessionId - The session (`null`: none).
|
|
187
|
-
*/
|
|
188
|
-
export function useSessionSystemMd<K extends string>(sessionId: K | null): SystemMdFile | null {
|
|
189
|
-
return useSessionSnapshot(sessionId, readSessionSystemMd<K>);
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* The session's scrollback state: whether older turns exist, whether a page is loading.
|
|
194
|
-
*
|
|
195
|
-
* @param sessionId - The session (`null`: none).
|
|
196
|
-
*/
|
|
197
|
-
export function useSessionPage<K extends string>(sessionId: K | null): SessionPageState {
|
|
198
|
-
return useSessionSnapshot(sessionId, readSessionPage<K>);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/**
|
|
202
|
-
* Whether the store holds any record for the session (re-renders when that changes).
|
|
203
|
-
*
|
|
204
|
-
* @param sessionId - The session (`null`: none).
|
|
205
|
-
*/
|
|
206
|
-
export function useHasSessionEvents<K extends string>(sessionId: K | null): boolean {
|
|
207
|
-
const { store } = useStreamsCtx();
|
|
208
|
-
const subscribe = useCallback((listener: () => void) => store.subscribeHas(listener), [store]);
|
|
209
|
-
const getSnapshot = useCallback(() => store.hasEvents(sessionId), [store, sessionId]);
|
|
210
|
-
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Whether the session's transcript is hydrated (re-renders when that changes).
|
|
215
|
-
*
|
|
216
|
-
* @param sessionId - The session (`null`: none).
|
|
217
|
-
*/
|
|
218
|
-
export function useIsSessionHydrated<K extends string>(sessionId: K | null): boolean {
|
|
219
|
-
const { store } = useStreamsCtx();
|
|
220
|
-
const subscribe = useCallback((listener: () => void) => store.subscribeHas(listener), [store]);
|
|
221
|
-
const getSnapshot = useCallback(() => store.isHydrated(sessionId), [store, sessionId]);
|
|
222
|
-
return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/** Reads a session's current events without subscribing (for event handlers). Stable. */
|
|
226
|
-
export function usePeekSessionEvents<K extends string = string>(): (sessionId: K | null) => readonly ChatEvent[] {
|
|
227
|
-
const { store } = useStreamsCtx();
|
|
228
|
-
return useCallback((sessionId) => store.getEventsSnapshot(sessionId), [store]);
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/** Reads whether a session's run is in flight without subscribing. Stable. */
|
|
232
|
-
export function usePeekSessionRunning<K extends string = string>(): (sessionId: K | null) => boolean {
|
|
233
|
-
const { store } = useStreamsCtx();
|
|
234
|
-
return useCallback((sessionId) => store.getRunningSnapshot(sessionId), [store]);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
/** Reads a session's run-start sequence without subscribing. Stable. */
|
|
238
|
-
export function usePeekRunSeq<K extends string = string>(): (sessionId: K | null) => number {
|
|
239
|
-
const { store } = useStreamsCtx();
|
|
240
|
-
return useCallback((sessionId) => store.getRunSeqSnapshot(sessionId), [store]);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Captures the run-state version; the returned check says whether it still
|
|
245
|
-
* holds. A signal or runtime switch invalidates snapshots fetched before it.
|
|
246
|
-
*/
|
|
247
|
-
export function useCaptureRunState(): () => () => boolean {
|
|
248
|
-
const { store } = useStreamsCtx();
|
|
249
|
-
return useCallback(() => {
|
|
250
|
-
const version = store.runStateVersion;
|
|
251
|
-
return () => store.runStateVersion === version;
|
|
252
|
-
}, [store]);
|
|
253
|
-
}
|
package/src/chat/StatusDot.tsx
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A session's state as one 8px dot: idle ring, running core with an
|
|
3
|
-
* orbiting arc, a rippling "needs you" for a pending approval, a breathing
|
|
4
|
-
* "awaiting input", an attached ring, a popping completion, a glowing error.
|
|
5
|
-
* Three layers (core, orbit, ripple) so every change tweens instead of
|
|
6
|
-
* snapping (`.zg-state-tween`, styles/motion.css). The loops (orbit,
|
|
7
|
-
* ripple, breathe) keep their own fixed timing and carry `.zg-loop`, which
|
|
8
|
-
* stills them under reduced / off motion; the completion pop is the `snap`
|
|
9
|
-
* spring with its opacity on `fade`. Colours are the decorative `-dot`
|
|
10
|
-
* tones (a fill, not text: vivid in light rather than held to text floors).
|
|
11
|
-
*/
|
|
12
|
-
import { memo, type CSSProperties } from 'react';
|
|
13
|
-
|
|
14
|
-
import { Presence } from '../motion/swap';
|
|
15
|
-
import type { ChatSessionStatus } from './headless/host';
|
|
16
|
-
import type { ChatLabels } from './headless/labels';
|
|
17
|
-
import { useChatLabels } from './useChatLabels';
|
|
18
|
-
|
|
19
|
-
/** Visual state of a {@link StatusDot}. */
|
|
20
|
-
export type SessionDotState = 'idle' | 'running' | 'pending' | 'completed' | 'error' | 'attention' | 'attached';
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* The dot for a session's plain status, when a host has nothing richer.
|
|
24
|
-
*
|
|
25
|
-
* @param status - The session's status, or `undefined` when the host reports none. `running`, `completed`, and `error` map to the matching dot state; anything else is `idle`.
|
|
26
|
-
*/
|
|
27
|
-
export function dotStateFor(status: ChatSessionStatus | undefined): SessionDotState {
|
|
28
|
-
return status === 'running' || status === 'completed' || status === 'error' ? status : 'idle';
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
interface DotStyle {
|
|
32
|
-
label: keyof ChatLabels;
|
|
33
|
-
style: CSSProperties;
|
|
34
|
-
ring?: 'orbit' | 'ripple';
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const STYLES: Record<SessionDotState, DotStyle> = {
|
|
38
|
-
idle: {
|
|
39
|
-
label: 'dotIdle',
|
|
40
|
-
style: { background: 'transparent', boxShadow: 'inset 0 0 0 1px var(--zg-text-muted)', opacity: 0.5 },
|
|
41
|
-
},
|
|
42
|
-
// The core shrinks (a tweenable transform) so the orbiting arc has room in the 8px slot.
|
|
43
|
-
running: {
|
|
44
|
-
label: 'dotRunning',
|
|
45
|
-
style: { background: 'var(--zg-accent-dot)', transform: 'scale(0.62)' },
|
|
46
|
-
ring: 'orbit',
|
|
47
|
-
},
|
|
48
|
-
// This window's own approval or question: the strongest "needs you" cue.
|
|
49
|
-
pending: { label: 'dotPending', style: { background: 'var(--zg-warn-dot)' }, ring: 'ripple' },
|
|
50
|
-
attention: {
|
|
51
|
-
label: 'dotAttention',
|
|
52
|
-
style: {
|
|
53
|
-
background: 'var(--zg-warn-dot)',
|
|
54
|
-
boxShadow: '0 0 6px 1px color-mix(in srgb, var(--zg-warn-dot) 55%, transparent)',
|
|
55
|
-
animation: 'zg-breathe 1.2s ease-in-out infinite',
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
attached: {
|
|
59
|
-
label: 'dotAttached',
|
|
60
|
-
style: { background: 'transparent', boxShadow: 'inset 0 0 0 1.5px var(--zg-success-dot)', opacity: 0.8 },
|
|
61
|
-
},
|
|
62
|
-
completed: {
|
|
63
|
-
label: 'dotCompleted',
|
|
64
|
-
style: {
|
|
65
|
-
background: 'var(--zg-success-dot)',
|
|
66
|
-
animation: 'zg-pop var(--zg-motion-snap) both, zg-fade-in var(--zg-motion-fade) both',
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
error: {
|
|
70
|
-
label: 'dotError',
|
|
71
|
-
style: {
|
|
72
|
-
background: 'var(--zg-danger-dot)',
|
|
73
|
-
boxShadow: '0 0 5px 1px color-mix(in srgb, var(--zg-danger-dot) 45%, transparent)',
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const ORBIT_MASK = 'radial-gradient(farthest-side, transparent calc(100% - 1.5px), #000 calc(100% - 1.5px))';
|
|
79
|
-
const ORBIT_STYLE: CSSProperties = {
|
|
80
|
-
background: 'conic-gradient(from 0deg, var(--zg-accent-dot) 0 32%, transparent 32% 100%)',
|
|
81
|
-
WebkitMaskImage: ORBIT_MASK,
|
|
82
|
-
maskImage: ORBIT_MASK,
|
|
83
|
-
animation: 'zg-orbit 1.1s linear infinite',
|
|
84
|
-
};
|
|
85
|
-
const RIPPLE_STYLE: CSSProperties = { background: 'var(--zg-warn-dot)', animation: 'zg-dot 1.8s ease-in-out infinite' };
|
|
86
|
-
|
|
87
|
-
/** Props for {@link StatusDot}. */
|
|
88
|
-
export interface StatusDotProps {
|
|
89
|
-
/** The state the dot shows. */
|
|
90
|
-
state: SessionDotState;
|
|
91
|
-
/** Accessible name and tooltip; defaults to the state's label. */
|
|
92
|
-
label?: string;
|
|
93
|
-
/** Extra classes on the root element. */
|
|
94
|
-
className?: string;
|
|
95
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
96
|
-
style?: CSSProperties;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function StatusDotInner({ state, label, className, style }: StatusDotProps) {
|
|
100
|
-
const labels = useChatLabels();
|
|
101
|
-
const cfg = STYLES[state];
|
|
102
|
-
const name = label ?? (labels[cfg.label] as string);
|
|
103
|
-
return (
|
|
104
|
-
<span
|
|
105
|
-
role="img"
|
|
106
|
-
aria-label={name}
|
|
107
|
-
title={name}
|
|
108
|
-
className={['relative shrink-0 inline-block w-2 h-2', className].filter(Boolean).join(' ')}
|
|
109
|
-
style={style}
|
|
110
|
-
>
|
|
111
|
-
<span
|
|
112
|
-
aria-hidden
|
|
113
|
-
className={`zg-state-tween absolute inset-0 rounded-full${state === 'attention' ? ' zg-loop' : ''}`}
|
|
114
|
-
style={cfg.style}
|
|
115
|
-
data-core
|
|
116
|
-
/>
|
|
117
|
-
<Presence show={cfg.ring === 'orbit'} className="absolute -inset-[3px]">
|
|
118
|
-
<span aria-hidden className="zg-loop absolute rounded-full inset-0" style={ORBIT_STYLE} />
|
|
119
|
-
</Presence>
|
|
120
|
-
<Presence show={cfg.ring === 'ripple'} className="absolute inset-0">
|
|
121
|
-
<span aria-hidden className="zg-loop absolute inset-0 rounded-full" style={RIPPLE_STYLE} />
|
|
122
|
-
</Presence>
|
|
123
|
-
</span>
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/** Renders a session's state as a small dot, with a motion cue for states that need attention. */
|
|
128
|
-
export const StatusDot = memo(StatusDotInner);
|