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,442 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model chain picker: the one model list of the desktop app's composer
|
|
3
|
-
* popover and `Model` modal. Data in (the catalog, the chain,
|
|
4
|
-
* the Legacy switch), edits out; nothing here loads or persists anything.
|
|
5
|
-
*
|
|
6
|
-
* Interaction (TUI parity):
|
|
7
|
-
* - click / ↵ make the row the PRIMARY model (position 1)
|
|
8
|
-
* - shift+click / ⇥ add or remove the row as a fallback
|
|
9
|
-
* - × on a selected row remove it from the chain
|
|
10
|
-
* - ctrl+shift+↑ / ↓ move the highlighted selected row one slot
|
|
11
|
-
* - ⌥L the Legacy switch; ⌘1…⌘9 jump to a tab (In use, then
|
|
12
|
-
* each provider)
|
|
13
|
-
* - empty query selected rows first, in priority order, so they
|
|
14
|
-
* can be reviewed / removed without searching
|
|
15
|
-
* - unknown id typed query that matches nothing becomes a
|
|
16
|
-
* "use as typed" row (`xai grok-9` targets xAI)
|
|
17
|
-
*
|
|
18
|
-
* The list owns the DRAFT chain and reports it through `onChainChange`;
|
|
19
|
-
* the owner decides when to persist (the modal commits on close, the
|
|
20
|
-
* popover on dismiss or on a quick single pick).
|
|
21
|
-
*
|
|
22
|
-
* Layout: the header (`ModelChainHeader`: the search field, the caller's
|
|
23
|
-
* `toolbar` with the Legacy switch, provider pills that jump through the
|
|
24
|
-
* list: In use, then each provider), then ONE list grouped by
|
|
25
|
-
* provider under sticky headers, the current chain pinned on top as "In
|
|
26
|
-
* use" (its models are not repeated under their provider). By default
|
|
27
|
-
* each provider shows its current models only (core `currentModelKeys`:
|
|
28
|
-
* the newest version of each family); the switch lists every model, legacy
|
|
29
|
-
* ones tagged. Search always covers every model of every provider, ranked,
|
|
30
|
-
* whatever the switch says. Membership in the chain: a checked row; once two
|
|
31
|
-
* or more are selected, the In use rows lead with their 1-based priority. A
|
|
32
|
-
* pick naming no account follows its provider's active account: where the
|
|
33
|
-
* catalog lists that provider per account, it shows as the active account's
|
|
34
|
-
* row (`resolveChain`), and edits keep it unpinned (`unresolveChain`).
|
|
35
|
-
* A row with `unavailable` shows greyed out and never joins the chain.
|
|
36
|
-
* Loading, a failed load, an empty catalog and a search that matched
|
|
37
|
-
* nothing each fill the list's body with one centred line.
|
|
38
|
-
*
|
|
39
|
-
* Hundreds of models stay at frame rate: `ModelChainRows` mounts only the
|
|
40
|
-
* rows in view and places them by arithmetic (`model-list-layout`); its
|
|
41
|
-
* handlers never change, so moving the cursor renders the two rows it moves
|
|
42
|
-
* between; the scroll position lives in the list body, so scrolling renders
|
|
43
|
-
* neither the search field nor the pills.
|
|
44
|
-
*/
|
|
45
|
-
import {
|
|
46
|
-
useCallback,
|
|
47
|
-
useEffect,
|
|
48
|
-
useLayoutEffect,
|
|
49
|
-
useMemo,
|
|
50
|
-
useRef,
|
|
51
|
-
useState,
|
|
52
|
-
type CSSProperties,
|
|
53
|
-
type ReactNode,
|
|
54
|
-
} from 'react';
|
|
55
|
-
import { positionKeyed, reorderKeyed, toggleKeyed } from 'zidane/chat/pure';
|
|
56
|
-
|
|
57
|
-
import { useChatLabels } from '../useChatLabels';
|
|
58
|
-
import {
|
|
59
|
-
canJoinChain,
|
|
60
|
-
lineupKeyOf,
|
|
61
|
-
modelLineup,
|
|
62
|
-
offCatalogRows,
|
|
63
|
-
pickerGroups,
|
|
64
|
-
pickRefOf,
|
|
65
|
-
refKey,
|
|
66
|
-
resolveChain,
|
|
67
|
-
rowKey,
|
|
68
|
-
unresolveChain,
|
|
69
|
-
withPrimary,
|
|
70
|
-
type ModelCatalogRow,
|
|
71
|
-
type ModelPickRef,
|
|
72
|
-
type PickerGroup,
|
|
73
|
-
} from './model-catalog';
|
|
74
|
-
import { layoutModelList } from './model-list-layout';
|
|
75
|
-
import { ModelChainFooter, ModelChainHeader } from './ModelChainParts';
|
|
76
|
-
import { ModelChainRows, type Cursor } from './ModelChainRows';
|
|
77
|
-
import { ModelProviderPills } from './ModelProviderPills';
|
|
78
|
-
import { useModelListSpy } from './useModelListSpy';
|
|
79
|
-
|
|
80
|
-
const NO_MODELS: readonly ModelCatalogRow[] = [];
|
|
81
|
-
|
|
82
|
-
/** Props for {@link ModelChainList}. */
|
|
83
|
-
export interface ModelChainListProps {
|
|
84
|
-
/** Seed chain: entry 0 = current primary, 1+ = fallbacks. Empty = nothing picked yet. */
|
|
85
|
-
initialChain: readonly ModelPickRef[];
|
|
86
|
-
/** The models offered; `null` while they load. */
|
|
87
|
-
catalog: readonly ModelCatalogRow[] | null;
|
|
88
|
-
/** Why the catalog failed to load. */
|
|
89
|
-
loadError?: string | null;
|
|
90
|
-
/** Asks for the catalog again; shown as a Retry next to `loadError`. */
|
|
91
|
-
onRetry?: () => void;
|
|
92
|
-
/** List every model, not only the newest of each family. */
|
|
93
|
-
showLegacy: boolean;
|
|
94
|
-
/** Called when the user toggles the list between the newest models of each family and every model. */
|
|
95
|
-
onShowLegacyChange: (showLegacy: boolean) => void;
|
|
96
|
-
/** Every draft change, including the initial seed. */
|
|
97
|
-
onChainChange: (chain: ModelPickRef[]) => void;
|
|
98
|
-
/**
|
|
99
|
-
* A plain click / ↵ on a row while the chain has at most one entry: a
|
|
100
|
-
* quick swap, not building a chain. A popover picks and closes here.
|
|
101
|
-
*/
|
|
102
|
-
onQuickPick?: (chain: ModelPickRef[]) => void;
|
|
103
|
-
/** Compact one-line rows for the popover. */
|
|
104
|
-
dense?: boolean;
|
|
105
|
-
/** One model, no chain: every pick replaces the selection and fires `onQuickPick`; no fallbacks. */
|
|
106
|
-
single?: boolean;
|
|
107
|
-
/** Max list height class. */
|
|
108
|
-
className?: string;
|
|
109
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
110
|
-
style?: CSSProperties;
|
|
111
|
-
/** Controls on the row under the search field, before the Legacy switch. */
|
|
112
|
-
toolbar?: ReactNode;
|
|
113
|
-
/** A query that matches nothing offers itself as a model id (`offCatalogRows`). Default true. */
|
|
114
|
-
customIds?: boolean;
|
|
115
|
-
/** What the list says when the catalog is empty. Default: no provider is signed in. */
|
|
116
|
-
emptyText?: string;
|
|
117
|
-
/** The search text, when the caller keeps it (shared with another list). Absent: the list keeps its own. */
|
|
118
|
-
query?: string;
|
|
119
|
-
/** Called on each edit of a caller-kept `query`. */
|
|
120
|
-
onQueryChange?: (query: string) => void;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Renders a searchable list of models for building a fallback chain: the first entry is the primary, the rest are fallbacks. A plain pick on a chain of one swaps the primary.
|
|
125
|
-
*
|
|
126
|
-
* @param props - The {@link ModelChainListProps}.
|
|
127
|
-
*/
|
|
128
|
-
export function ModelChainList({
|
|
129
|
-
initialChain,
|
|
130
|
-
catalog,
|
|
131
|
-
loadError = null,
|
|
132
|
-
onRetry,
|
|
133
|
-
showLegacy,
|
|
134
|
-
onShowLegacyChange,
|
|
135
|
-
onChainChange,
|
|
136
|
-
onQuickPick,
|
|
137
|
-
dense = false,
|
|
138
|
-
single = false,
|
|
139
|
-
className = '',
|
|
140
|
-
style,
|
|
141
|
-
toolbar,
|
|
142
|
-
customIds = true,
|
|
143
|
-
emptyText,
|
|
144
|
-
query: keptQuery,
|
|
145
|
-
onQueryChange,
|
|
146
|
-
}: ModelChainListProps) {
|
|
147
|
-
const labels = useChatLabels();
|
|
148
|
-
const [ownQuery, setOwnQuery] = useState('');
|
|
149
|
-
const query = keptQuery ?? ownQuery;
|
|
150
|
-
const setQuery = onQueryChange ?? setOwnQuery;
|
|
151
|
-
const [cursor, setCursor] = useState<Cursor>({ index: 0, by: 'key' });
|
|
152
|
-
const [chain, setChain] = useState<ModelPickRef[]>(() => [...initialChain]);
|
|
153
|
-
/** A pill's jump, for the list body to carry out; `seq` makes a second jump to the same section a new one. */
|
|
154
|
-
const [jump, setJump] = useState<{ key: string; seq: number } | null>(null);
|
|
155
|
-
const inputRef = useRef<HTMLInputElement>(null);
|
|
156
|
-
const currentProviderKey = chain[0]?.providerKey ?? null;
|
|
157
|
-
const spy = useModelListSpy();
|
|
158
|
-
|
|
159
|
-
useEffect(() => {
|
|
160
|
-
onChainChange(chain);
|
|
161
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps -- report on change only
|
|
162
|
-
}, [chain]);
|
|
163
|
-
|
|
164
|
-
useEffect(() => {
|
|
165
|
-
inputRef.current?.focus({ preventScroll: true });
|
|
166
|
-
}, []);
|
|
167
|
-
|
|
168
|
-
// The lineup ignores the draft chain on purpose: picking a legacy model
|
|
169
|
-
// pins it under "In use", it does not make it current.
|
|
170
|
-
const current = useMemo(() => modelLineup(catalog ?? NO_MODELS), [catalog]);
|
|
171
|
-
/*
|
|
172
|
-
* The chain as the catalog lists it, what the list shows and edits. The
|
|
173
|
-
* draft keeps each entry's own form, so a chain nobody touched reports
|
|
174
|
-
* itself unchanged and nothing is committed.
|
|
175
|
-
*/
|
|
176
|
-
const shown = useMemo(() => resolveChain(chain, catalog ?? NO_MODELS), [chain, catalog]);
|
|
177
|
-
|
|
178
|
-
const groups = useMemo(() => {
|
|
179
|
-
if (!catalog) return [];
|
|
180
|
-
const found = pickerGroups(catalog, query, shown, showLegacy, current);
|
|
181
|
-
if (!query.trim() || !customIds) return found;
|
|
182
|
-
// A typed id can go through any signed-in provider: one row per route,
|
|
183
|
-
// first when nothing in the catalog matched, after the matches otherwise.
|
|
184
|
-
const typed = offCatalogRows(catalog, query, currentProviderKey, found.length > 0);
|
|
185
|
-
if (typed.length === 0) return found;
|
|
186
|
-
const group: PickerGroup = {
|
|
187
|
-
key: 'typed',
|
|
188
|
-
label: 'Custom id',
|
|
189
|
-
detail: typed[0]!.modelId,
|
|
190
|
-
providerKey: null,
|
|
191
|
-
rows: typed,
|
|
192
|
-
total: typed.length,
|
|
193
|
-
};
|
|
194
|
-
return found.length > 0 ? [...found, group] : [group];
|
|
195
|
-
}, [catalog, query, shown, showLegacy, current, currentProviderKey, customIds]);
|
|
196
|
-
|
|
197
|
-
/** Every row in list order; the cursor indexes this. */
|
|
198
|
-
const rows = useMemo(() => groups.flatMap((g) => g.rows), [groups]);
|
|
199
|
-
const layout = useMemo(() => layoutModelList(groups, dense), [groups, dense]);
|
|
200
|
-
/** The sections the tabs jump to: In use, then each provider (not a typed id's routes). */
|
|
201
|
-
const tabs = useMemo(
|
|
202
|
-
() => groups.filter((g) => g.key === 'in-use' || (g.providerKey !== null && g.key !== 'typed')),
|
|
203
|
-
[groups],
|
|
204
|
-
);
|
|
205
|
-
const hiddenLegacy = useMemo(() => {
|
|
206
|
-
if (!catalog || showLegacy || query.trim()) return 0;
|
|
207
|
-
return catalog.filter((e) => !current.has(lineupKeyOf(e)) && positionKeyed(shown, rowKey(e), refKey) === null)
|
|
208
|
-
.length;
|
|
209
|
-
}, [catalog, showLegacy, query, current, shown]);
|
|
210
|
-
|
|
211
|
-
// Rows that join the list after the first paint (the Legacy switch, a
|
|
212
|
-
// search) sharpen in; the first list does not animate. A row asks as it
|
|
213
|
-
// mounts, and the list notes its rows only after that commit, so a row
|
|
214
|
-
// scrolled into view later is not new.
|
|
215
|
-
const seen = useRef<Set<string> | null>(null);
|
|
216
|
-
useEffect(() => {
|
|
217
|
-
seen.current ??= new Set();
|
|
218
|
-
for (const row of rows) seen.current.add(rowKey(row));
|
|
219
|
-
}, [rows]);
|
|
220
|
-
const isNew = useCallback((key: string) => seen.current !== null && !seen.current.has(key), []);
|
|
221
|
-
|
|
222
|
-
// A shorter list (a search) keeps the cursor on its last row.
|
|
223
|
-
const lastRow = Math.max(0, rows.length - 1);
|
|
224
|
-
if (cursor.index > lastRow) setCursor({ index: lastRow, by: cursor.by });
|
|
225
|
-
|
|
226
|
-
// What the handlers below need, as of the last render: read when they run,
|
|
227
|
-
// so their identity never changes and the memoized rows don't re-render.
|
|
228
|
-
const live = useRef({ rows, chain, catalog, single, onQuickPick, layout });
|
|
229
|
-
useLayoutEffect(() => {
|
|
230
|
-
live.current = { rows, chain, catalog, single, onQuickPick, layout };
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
const pick = useCallback((entry: ModelCatalogRow) => {
|
|
234
|
-
if (entry.unavailable) return;
|
|
235
|
-
const { chain, catalog, single, onQuickPick } = live.current;
|
|
236
|
-
const ref = pickRefOf(entry);
|
|
237
|
-
// On the row an entry shows as, a pick changes nothing about that entry.
|
|
238
|
-
const shown = resolveChain(chain, catalog ?? NO_MODELS);
|
|
239
|
-
const next = unresolveChain(single ? [ref] : withPrimary(shown, ref), chain, shown);
|
|
240
|
-
setChain(next);
|
|
241
|
-
if (single || chain.length <= 1) onQuickPick?.(next);
|
|
242
|
-
}, []);
|
|
243
|
-
|
|
244
|
-
const toggle = useCallback(
|
|
245
|
-
(entry: ModelCatalogRow) => {
|
|
246
|
-
if (live.current.single) {
|
|
247
|
-
pick(entry);
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
if (entry.unavailable) return;
|
|
251
|
-
const ref = pickRefOf(entry);
|
|
252
|
-
setChain((prev) => {
|
|
253
|
-
const shown = resolveChain(prev, live.current.catalog ?? NO_MODELS);
|
|
254
|
-
const member = positionKeyed(shown, refKey(ref), refKey) !== null;
|
|
255
|
-
// One account per provider: a second account of a provider in the chain can't be a fallback.
|
|
256
|
-
if (!member && !canJoinChain(shown, ref)) return prev;
|
|
257
|
-
return unresolveChain(toggleKeyed(shown, ref, refKey), prev, shown);
|
|
258
|
-
});
|
|
259
|
-
},
|
|
260
|
-
[pick],
|
|
261
|
-
);
|
|
262
|
-
|
|
263
|
-
const onHover = useCallback(
|
|
264
|
-
(index: number) => setCursor((c) => (c.index === index && c.by === 'mouse' ? c : { index, by: 'mouse' })),
|
|
265
|
-
[],
|
|
266
|
-
);
|
|
267
|
-
const onPick = useCallback(
|
|
268
|
-
(index: number, shift: boolean) => {
|
|
269
|
-
const entry = live.current.rows[index];
|
|
270
|
-
if (entry) (shift ? toggle : pick)(entry);
|
|
271
|
-
},
|
|
272
|
-
[pick, toggle],
|
|
273
|
-
);
|
|
274
|
-
const onRemove = useCallback(
|
|
275
|
-
(index: number) => {
|
|
276
|
-
const entry = live.current.rows[index];
|
|
277
|
-
if (entry) toggle(entry);
|
|
278
|
-
},
|
|
279
|
-
[toggle],
|
|
280
|
-
);
|
|
281
|
-
|
|
282
|
-
const moveCursor = (update: (index: number) => number) => {
|
|
283
|
-
spy.unpin();
|
|
284
|
-
setCursor((c) => ({ index: update(c.index), by: 'key' }));
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
/** Bring a group's header to the top of the list and put the cursor on its first row. */
|
|
288
|
-
const { pin } = spy;
|
|
289
|
-
const jumpTo = useCallback(
|
|
290
|
-
(key: string) => {
|
|
291
|
-
const placed = live.current.layout.groups.find((g) => g.group.key === key);
|
|
292
|
-
setJump((prev) => ({ key, seq: (prev?.seq ?? 0) + 1 }));
|
|
293
|
-
// The jump places the list: the cursor goes there without scrolling it again.
|
|
294
|
-
if (placed) setCursor({ index: placed.first, by: 'mouse' });
|
|
295
|
-
pin(key);
|
|
296
|
-
inputRef.current?.focus({ preventScroll: true });
|
|
297
|
-
},
|
|
298
|
-
[pin],
|
|
299
|
-
);
|
|
300
|
-
|
|
301
|
-
// One listener for the life of the list; it runs the latest render's handler.
|
|
302
|
-
const onKey = useRef<(e: KeyboardEvent) => void>(() => {});
|
|
303
|
-
useLayoutEffect(() => {
|
|
304
|
-
onKey.current = (e) => {
|
|
305
|
-
if (e.altKey && !e.metaKey && !e.ctrlKey && e.code === 'KeyL') {
|
|
306
|
-
e.preventDefault();
|
|
307
|
-
onShowLegacyChange(!showLegacy);
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
if ((e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey && /^Digit[1-9]$/.test(e.code)) {
|
|
311
|
-
const target = tabs[Number(e.code.slice(5)) - 1];
|
|
312
|
-
if (target) {
|
|
313
|
-
e.preventDefault();
|
|
314
|
-
jumpTo(target.key);
|
|
315
|
-
}
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
if (e.ctrlKey && e.shiftKey && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {
|
|
319
|
-
e.preventDefault();
|
|
320
|
-
const row = rows[cursor.index];
|
|
321
|
-
if (!row) return;
|
|
322
|
-
const key = rowKey(row);
|
|
323
|
-
const delta = e.key === 'ArrowUp' ? (-1 as const) : (1 as const);
|
|
324
|
-
setChain((prev) => {
|
|
325
|
-
const shown = resolveChain(prev, catalog ?? NO_MODELS);
|
|
326
|
-
const reordered = reorderKeyed(shown, key, delta, refKey);
|
|
327
|
-
if (reordered === shown) return prev;
|
|
328
|
-
if (!query.trim()) {
|
|
329
|
-
const served = new Set((catalog ?? []).map(rowKey));
|
|
330
|
-
const next = reordered
|
|
331
|
-
.filter((entry) => served.has(refKey(entry)))
|
|
332
|
-
.findIndex((entry) => refKey(entry) === key);
|
|
333
|
-
if (next >= 0) moveCursor(() => next);
|
|
334
|
-
}
|
|
335
|
-
return unresolveChain(reordered, prev, shown);
|
|
336
|
-
});
|
|
337
|
-
return;
|
|
338
|
-
}
|
|
339
|
-
if (e.key === 'ArrowDown') {
|
|
340
|
-
e.preventDefault();
|
|
341
|
-
moveCursor((c) => Math.min(Math.max(0, rows.length - 1), c + 1));
|
|
342
|
-
} else if (e.key === 'ArrowUp') {
|
|
343
|
-
e.preventDefault();
|
|
344
|
-
moveCursor((c) => Math.max(0, c - 1));
|
|
345
|
-
} else if (e.key === 'Tab' || (e.key === 'Enter' && e.shiftKey)) {
|
|
346
|
-
e.preventDefault();
|
|
347
|
-
const entry = rows[cursor.index];
|
|
348
|
-
if (entry) toggle(entry);
|
|
349
|
-
} else if (e.key === 'Enter') {
|
|
350
|
-
e.preventDefault();
|
|
351
|
-
const entry = rows[cursor.index];
|
|
352
|
-
if (entry) pick(entry);
|
|
353
|
-
}
|
|
354
|
-
};
|
|
355
|
-
});
|
|
356
|
-
useEffect(() => {
|
|
357
|
-
const listener = (e: KeyboardEvent) => onKey.current(e);
|
|
358
|
-
document.addEventListener('keydown', listener);
|
|
359
|
-
return () => document.removeEventListener('keydown', listener);
|
|
360
|
-
}, []);
|
|
361
|
-
|
|
362
|
-
const pad = dense ? 'px-3' : 'px-4';
|
|
363
|
-
// What stands in for the rows: loading, a failed load, an empty catalog, a search that matched nothing.
|
|
364
|
-
const notice = loadError
|
|
365
|
-
? null
|
|
366
|
-
: catalog === null
|
|
367
|
-
? labels.modelsLoading
|
|
368
|
-
: catalog.length === 0
|
|
369
|
-
? (emptyText ?? labels.modelsNoProviders)
|
|
370
|
-
: rows.length === 0
|
|
371
|
-
? customIds
|
|
372
|
-
? labels.modelsTypeAnId
|
|
373
|
-
: labels.modelsNoMatch(query.trim())
|
|
374
|
-
: null;
|
|
375
|
-
|
|
376
|
-
return (
|
|
377
|
-
<div className={`zg-model-picker flex flex-col min-h-0 ${className}`} style={style}>
|
|
378
|
-
<ModelChainHeader
|
|
379
|
-
pad={pad}
|
|
380
|
-
query={query}
|
|
381
|
-
onQuery={setQuery}
|
|
382
|
-
showLegacy={showLegacy}
|
|
383
|
-
onShowLegacyChange={onShowLegacyChange}
|
|
384
|
-
toolbar={toolbar}
|
|
385
|
-
pills={
|
|
386
|
-
tabs.length > 0 ? (
|
|
387
|
-
<ModelProviderPills groups={tabs} active={spy.active} dense={dense} onJump={jumpTo} />
|
|
388
|
-
) : undefined
|
|
389
|
-
}
|
|
390
|
-
inputRef={inputRef}
|
|
391
|
-
/>
|
|
392
|
-
|
|
393
|
-
<div className="shrink-0 h-px bg-[var(--zg-hairline)]" />
|
|
394
|
-
|
|
395
|
-
{loadError || notice ? (
|
|
396
|
-
<div
|
|
397
|
-
role="status"
|
|
398
|
-
className={`flex-1 min-h-0 flex flex-col items-center justify-center gap-2 px-6 py-8 text-center text-xs ${
|
|
399
|
-
loadError ? 'text-zg-danger' : 'text-[var(--zg-text-muted)]'
|
|
400
|
-
}`}
|
|
401
|
-
>
|
|
402
|
-
{loadError ? labels.modelsLoadFailed(loadError) : notice}
|
|
403
|
-
{loadError && onRetry && (
|
|
404
|
-
<button
|
|
405
|
-
type="button"
|
|
406
|
-
className="underline text-[var(--zg-text)] bg-transparent border-0 cursor-pointer"
|
|
407
|
-
onClick={onRetry}
|
|
408
|
-
>
|
|
409
|
-
{labels.retry}
|
|
410
|
-
</button>
|
|
411
|
-
)}
|
|
412
|
-
</div>
|
|
413
|
-
) : (
|
|
414
|
-
<ModelChainRows
|
|
415
|
-
layout={layout}
|
|
416
|
-
cursor={cursor}
|
|
417
|
-
jump={jump}
|
|
418
|
-
chain={shown}
|
|
419
|
-
current={current}
|
|
420
|
-
isNew={isNew}
|
|
421
|
-
dense={dense}
|
|
422
|
-
single={single}
|
|
423
|
-
countHidden={!showLegacy && !query.trim()}
|
|
424
|
-
onHover={onHover}
|
|
425
|
-
onPick={onPick}
|
|
426
|
-
onRemove={onRemove}
|
|
427
|
-
onSpy={spy.report}
|
|
428
|
-
onUserMove={spy.unpin}
|
|
429
|
-
/>
|
|
430
|
-
)}
|
|
431
|
-
|
|
432
|
-
<ModelChainFooter
|
|
433
|
-
pad={pad}
|
|
434
|
-
single={single}
|
|
435
|
-
multi={chain.length > 1}
|
|
436
|
-
selected={chain.length}
|
|
437
|
-
hiddenLegacy={hiddenLegacy}
|
|
438
|
-
onShowLegacy={() => onShowLegacyChange(true)}
|
|
439
|
-
/>
|
|
440
|
-
</div>
|
|
441
|
-
);
|
|
442
|
-
}
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model pickers' furniture: the header (the search field, the caller's
|
|
3
|
-
* toolbar with the Legacy switch, the provider pills), the section header (a
|
|
4
|
-
* provider, the pinned chain, a typed id's routes) and the footer (the keys,
|
|
5
|
-
* the hidden legacy models, how many are selected).
|
|
6
|
-
*/
|
|
7
|
-
import { memo, type CSSProperties, type ReactNode, type RefObject } from 'react';
|
|
8
|
-
|
|
9
|
-
import { KeyCombo } from '../../components/Keycap';
|
|
10
|
-
import { MenuSwitch } from '../../components/Menu';
|
|
11
|
-
import { providerColor } from '../provider-color';
|
|
12
|
-
import { useChatLabels } from '../useChatLabels';
|
|
13
|
-
import type { PickerGroup } from './model-catalog';
|
|
14
|
-
import { MODEL_HEADER_H } from './model-list-layout';
|
|
15
|
-
|
|
16
|
-
/** Props for {@link ModelGroupHeader}. */
|
|
17
|
-
export interface ModelGroupHeaderProps {
|
|
18
|
-
/** The section the header names. */
|
|
19
|
-
group: PickerGroup;
|
|
20
|
-
/** Models of the section the lineup hides; 0: no count. */
|
|
21
|
-
hidden: number;
|
|
22
|
-
/** Extra classes on the root element. */
|
|
23
|
-
className?: string;
|
|
24
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
25
|
-
style?: CSSProperties;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** A model list's sticky section header: a provider, the pinned chain, or a typed id's routes. */
|
|
29
|
-
export const ModelGroupHeader = memo(function ModelGroupHeader({
|
|
30
|
-
group,
|
|
31
|
-
hidden,
|
|
32
|
-
className,
|
|
33
|
-
style,
|
|
34
|
-
}: ModelGroupHeaderProps) {
|
|
35
|
-
const labels = useChatLabels();
|
|
36
|
-
const color = group.providerKey ? providerColor(group.providerKey) : 'var(--zg-accent)';
|
|
37
|
-
return (
|
|
38
|
-
<div
|
|
39
|
-
data-group-header={group.key}
|
|
40
|
-
// Opaque so rows scroll under it; both hosts (popover, modal) float on the overlay tone.
|
|
41
|
-
// A fixed height: the list places rows by arithmetic (`model-list-layout`).
|
|
42
|
-
className={[
|
|
43
|
-
'zg-section-label sticky top-0 z-[1] flex items-center gap-2 px-2 pt-2.5 pb-1 bg-[var(--zg-overlay)]',
|
|
44
|
-
className,
|
|
45
|
-
]
|
|
46
|
-
.filter(Boolean)
|
|
47
|
-
.join(' ')}
|
|
48
|
-
style={{ height: MODEL_HEADER_H, ...style }}
|
|
49
|
-
>
|
|
50
|
-
{group.key === 'in-use' ? (
|
|
51
|
-
<span aria-hidden className="i-ph-push-pin-fill text-zg-badge text-[var(--zg-accent)]" />
|
|
52
|
-
) : group.key === 'typed' ? (
|
|
53
|
-
<span aria-hidden className="i-ph-arrow-bend-down-right text-zg-meta text-[var(--zg-accent)]" />
|
|
54
|
-
) : (
|
|
55
|
-
<span aria-hidden className="w-1.5 h-1.5 rounded-full" style={{ background: color }} />
|
|
56
|
-
)}
|
|
57
|
-
<span>
|
|
58
|
-
{group.key === 'in-use' ? labels.modelsInUse : group.key === 'typed' ? labels.modelsCustomId : group.label}
|
|
59
|
-
</span>
|
|
60
|
-
{group.detail && (
|
|
61
|
-
<span className="min-w-0 truncate normal-case tracking-normal font-mono font-normal text-zg-meta text-[var(--zg-text)]">
|
|
62
|
-
{group.detail}
|
|
63
|
-
</span>
|
|
64
|
-
)}
|
|
65
|
-
{hidden > 0 && (
|
|
66
|
-
<span className="zg-meta normal-case tracking-normal font-normal">
|
|
67
|
-
{labels.modelsShownOf(group.rows.length, group.total)}
|
|
68
|
-
</span>
|
|
69
|
-
)}
|
|
70
|
-
</div>
|
|
71
|
-
);
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
/** A footer key hint, drawn like the app's `KeyHint` (one chord). */
|
|
75
|
-
function FooterKey({ spec }: { spec: string }) {
|
|
76
|
-
return (
|
|
77
|
-
<span className="inline-flex items-center gap-0.5 " data-size="sm">
|
|
78
|
-
<span className="contents">
|
|
79
|
-
<KeyCombo spec={spec} size="sm" />
|
|
80
|
-
</span>
|
|
81
|
-
</span>
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/** Props for {@link ModelChainFooter}. */
|
|
86
|
-
export interface ModelChainFooterProps {
|
|
87
|
-
/** Horizontal padding class, the picker's. */
|
|
88
|
-
pad: string;
|
|
89
|
-
/** One model, no chain: no fallback hint and no selected count. */
|
|
90
|
-
single: boolean;
|
|
91
|
-
/** The chain has more than one model: the count explains the order. */
|
|
92
|
-
multi: boolean;
|
|
93
|
-
/** Models in the chain. */
|
|
94
|
-
selected: number;
|
|
95
|
-
/** Legacy models the lineup hides; 0: no hint. */
|
|
96
|
-
hiddenLegacy: number;
|
|
97
|
-
/** Called when the user clicks the hidden legacy models hint. */
|
|
98
|
-
onShowLegacy: () => void;
|
|
99
|
-
/** Extra classes on the root element. */
|
|
100
|
-
className?: string;
|
|
101
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
102
|
-
style?: CSSProperties;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* The model pickers' footer: the keys, the hidden legacy models, how many are selected.
|
|
107
|
-
*
|
|
108
|
-
* @param props - The {@link ModelChainFooterProps}.
|
|
109
|
-
*/
|
|
110
|
-
export function ModelChainFooter({
|
|
111
|
-
pad,
|
|
112
|
-
single,
|
|
113
|
-
multi,
|
|
114
|
-
selected,
|
|
115
|
-
hiddenLegacy,
|
|
116
|
-
onShowLegacy,
|
|
117
|
-
className,
|
|
118
|
-
style,
|
|
119
|
-
}: ModelChainFooterProps) {
|
|
120
|
-
const labels = useChatLabels();
|
|
121
|
-
return (
|
|
122
|
-
<div
|
|
123
|
-
className={[
|
|
124
|
-
`zg-meta ${pad} py-2 shrink-0 border-t border-[var(--zg-hairline)] flex items-center gap-3`,
|
|
125
|
-
className,
|
|
126
|
-
]
|
|
127
|
-
.filter(Boolean)
|
|
128
|
-
.join(' ')}
|
|
129
|
-
style={style}
|
|
130
|
-
>
|
|
131
|
-
<span className="inline-flex items-center gap-1.5 whitespace-nowrap">
|
|
132
|
-
<FooterKey spec="enter" />
|
|
133
|
-
{single ? labels.pickModel : labels.modelPrimary}
|
|
134
|
-
</span>
|
|
135
|
-
{!single && (
|
|
136
|
-
<span className="inline-flex items-center gap-1.5 whitespace-nowrap" title={labels.modelFallbackHint}>
|
|
137
|
-
<FooterKey spec="tab" />
|
|
138
|
-
{labels.modelFallback}
|
|
139
|
-
</span>
|
|
140
|
-
)}
|
|
141
|
-
{hiddenLegacy > 0 && (
|
|
142
|
-
<button
|
|
143
|
-
type="button"
|
|
144
|
-
onClick={onShowLegacy}
|
|
145
|
-
className="zg-meta bg-transparent border-0 p-0 cursor-pointer hover:text-[var(--zg-text)] whitespace-nowrap"
|
|
146
|
-
data-testid="model-legacy-hint"
|
|
147
|
-
>
|
|
148
|
-
{labels.modelsLegacyHidden(hiddenLegacy)}
|
|
149
|
-
</button>
|
|
150
|
-
)}
|
|
151
|
-
<span
|
|
152
|
-
hidden={single}
|
|
153
|
-
className="ml-auto whitespace-nowrap text-[var(--zg-accent)]"
|
|
154
|
-
data-testid="model-chain-count"
|
|
155
|
-
title={multi ? labels.modelChainOrderHint : undefined}
|
|
156
|
-
>
|
|
157
|
-
{labels.modelsSelected(selected)}
|
|
158
|
-
</span>
|
|
159
|
-
</div>
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/** Props for {@link ModelChainHeader}. */
|
|
164
|
-
export interface ModelChainHeaderProps {
|
|
165
|
-
/** Horizontal padding class, the picker's. */
|
|
166
|
-
pad: string;
|
|
167
|
-
/** The search field's text. */
|
|
168
|
-
query: string;
|
|
169
|
-
/** Called with the search field's text on each edit. */
|
|
170
|
-
onQuery: (query: string) => void;
|
|
171
|
-
/** The Legacy switch is on: every model is listed. */
|
|
172
|
-
showLegacy: boolean;
|
|
173
|
-
/** Called when the user toggles the Legacy switch. */
|
|
174
|
-
onShowLegacyChange: (showLegacy: boolean) => void;
|
|
175
|
-
/** Controls at the start of the row under the field. */
|
|
176
|
-
toolbar?: ReactNode;
|
|
177
|
-
/** The provider pills (`ModelProviderPills`); absent while there are no sections. */
|
|
178
|
-
pills?: ReactNode;
|
|
179
|
-
/** The field, so the list can hand focus back to it after a jump. */
|
|
180
|
-
inputRef: RefObject<HTMLInputElement | null>;
|
|
181
|
-
/** Extra classes on the root element. */
|
|
182
|
-
className?: string;
|
|
183
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
184
|
-
style?: CSSProperties;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* The pickers' header, the same for every list (chat models, image models):
|
|
189
|
-
* the search field across the full width, a row with the caller's `toolbar`
|
|
190
|
-
* (the popover's Chat / Image tabs) and the Legacy switch at its end, then
|
|
191
|
-
* the provider pills. One padding around it and one gap between rows, and
|
|
192
|
-
* each row keeps its height when it is empty, so switching lists or
|
|
193
|
-
* filtering to nothing never moves the list below.
|
|
194
|
-
*
|
|
195
|
-
* @param props - The {@link ModelChainHeaderProps}.
|
|
196
|
-
*/
|
|
197
|
-
export function ModelChainHeader({
|
|
198
|
-
pad,
|
|
199
|
-
query,
|
|
200
|
-
onQuery,
|
|
201
|
-
showLegacy,
|
|
202
|
-
onShowLegacyChange,
|
|
203
|
-
toolbar,
|
|
204
|
-
pills,
|
|
205
|
-
inputRef,
|
|
206
|
-
className,
|
|
207
|
-
style,
|
|
208
|
-
}: ModelChainHeaderProps) {
|
|
209
|
-
const labels = useChatLabels();
|
|
210
|
-
return (
|
|
211
|
-
<div className={[`${pad} py-3 shrink-0 flex flex-col gap-2`, className].filter(Boolean).join(' ')} style={style}>
|
|
212
|
-
<label className="zg-well w-full min-w-0 flex items-center gap-2 h-8 px-2.5">
|
|
213
|
-
<span aria-hidden className="i-ph-magnifying-glass text-zg-ui text-[var(--zg-text-muted)] shrink-0" />
|
|
214
|
-
<input
|
|
215
|
-
ref={inputRef}
|
|
216
|
-
value={query}
|
|
217
|
-
onChange={(e) => onQuery(e.target.value)}
|
|
218
|
-
placeholder={labels.searchModelsPlaceholder}
|
|
219
|
-
aria-label={labels.searchModels}
|
|
220
|
-
className="flex-1 min-w-0 h-full bg-transparent border-0 outline-none text-sm text-[var(--zg-text)] placeholder:text-[var(--zg-text-subtle)]"
|
|
221
|
-
spellCheck={false}
|
|
222
|
-
autoCorrect="off"
|
|
223
|
-
/>
|
|
224
|
-
</label>
|
|
225
|
-
<div className="h-7 flex items-center gap-2 min-w-0">
|
|
226
|
-
{toolbar}
|
|
227
|
-
<button
|
|
228
|
-
type="button"
|
|
229
|
-
role="switch"
|
|
230
|
-
aria-checked={showLegacy}
|
|
231
|
-
aria-label={labels.modelsShowLegacy}
|
|
232
|
-
title={labels.modelsShowLegacyHint}
|
|
233
|
-
onClick={() => {
|
|
234
|
-
onShowLegacyChange(!showLegacy);
|
|
235
|
-
inputRef.current?.focus({ preventScroll: true });
|
|
236
|
-
}}
|
|
237
|
-
className="zg-segment-item zg-press-subtle ml-auto shrink-0 inline-flex items-center gap-1.5 h-7 rounded-zg-md px-2 border-0 bg-transparent cursor-pointer text-zg-meta text-[var(--zg-text-muted)]"
|
|
238
|
-
>
|
|
239
|
-
<span aria-hidden className="i-ph-clock-counter-clockwise text-zg-ui" />
|
|
240
|
-
{labels.modelsLegacy}
|
|
241
|
-
<MenuSwitch on={showLegacy} />
|
|
242
|
-
</button>
|
|
243
|
-
</div>
|
|
244
|
-
<div className="h-7 flex min-w-0">{pills}</div>
|
|
245
|
-
</div>
|
|
246
|
-
);
|
|
247
|
-
}
|