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,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Puts a `KeybindingsHost` (and optional label overrides) in context, and
|
|
3
|
-
* the global keyboard dispatcher that drives every `KeyAction` against the
|
|
4
|
-
* merged map of `DEFAULT_KEYBINDINGS` and the host's overrides.
|
|
5
|
-
*
|
|
6
|
-
* The dispatcher's rules (parity with the TUI):
|
|
7
|
-
* - Bindings match exactly: `ctrl+o`, `ctrl+x`, `shift+tab`, …
|
|
8
|
-
* - Modifier match is strict: `'o'` does NOT fire `ctrl+o`.
|
|
9
|
-
* - Bare keys are ignored while the user types in an input, textarea,
|
|
10
|
-
* contenteditable or the code editor (`keyScopeOf`). Combos with a
|
|
11
|
-
* modifier always fire: the user clearly meant a shortcut.
|
|
12
|
-
*
|
|
13
|
-
* A matched handler's state updates render as a transition: the keydown
|
|
14
|
-
* ends at once and the render yields to the next frame and keys, so a
|
|
15
|
-
* shortcut that redraws much of the window (the side panel, a zoom) never
|
|
16
|
-
* shows as a long frame. The catalog's `urgent` actions (focus moves, the
|
|
17
|
-
* dialogs and the palette, a copy) render before the next key instead.
|
|
18
|
-
* Updates to an external store (`useSyncExternalStore`) render at once
|
|
19
|
-
* either way: React never defers them.
|
|
20
|
-
*
|
|
21
|
-
* Tab keys first: {@link CAPTURE_ACTIONS} match on the way DOWN (capture),
|
|
22
|
-
* before the focused widget sees the press, and stop it there. Embedded
|
|
23
|
-
* widgets read them as plain arrows (the file tree took ⌥⌘→ for → and
|
|
24
|
-
* swallowed it; a terminal would send it to the shell).
|
|
25
|
-
*
|
|
26
|
-
* The first `useKeybindings` under a host reads its overrides once; a
|
|
27
|
-
* `host.refresh()` (a settings panel's Reload) re-attaches every listener
|
|
28
|
-
* with the new specs, without a restart.
|
|
29
|
-
*/
|
|
30
|
-
import {
|
|
31
|
-
createContext,
|
|
32
|
-
startTransition,
|
|
33
|
-
useContext,
|
|
34
|
-
useEffect,
|
|
35
|
-
useMemo,
|
|
36
|
-
useReducer,
|
|
37
|
-
useRef,
|
|
38
|
-
useSyncExternalStore,
|
|
39
|
-
type ReactNode,
|
|
40
|
-
} from 'react';
|
|
41
|
-
import { parseBindingSpecs } from 'zidane/chat/pure';
|
|
42
|
-
|
|
43
|
-
import { LabelsProvider } from '../labels';
|
|
44
|
-
import { DEFAULT_KEYBINDINGS, KEYBINDING_DEF_BY_ACTION, type KeyAction, type KeyBindings } from './headless/catalog';
|
|
45
|
-
import type { KeyCommands } from './headless/commands';
|
|
46
|
-
import type { KeybindingsHost, KeyOverrides } from './headless/host';
|
|
47
|
-
import { bindingAllowedIn, keyScopeOf } from './headless/key-scope';
|
|
48
|
-
import type { KeybindingsLabels } from './headless/labels';
|
|
49
|
-
import { getMergedKeybindings } from './headless/overrides';
|
|
50
|
-
import { loadOnce } from './load-once';
|
|
51
|
-
import { matchesBinding } from './match';
|
|
52
|
-
|
|
53
|
-
const HostContext = createContext<KeybindingsHost | null>(null);
|
|
54
|
-
|
|
55
|
-
/** Props for {@link KeybindingsProvider}. */
|
|
56
|
-
export interface KeybindingsProviderProps {
|
|
57
|
-
/** Where the user's overrides live. */
|
|
58
|
-
host: KeybindingsHost;
|
|
59
|
-
/** Overrides for the built-in strings. Keys you leave out keep the default English label. */
|
|
60
|
-
labels?: Partial<KeybindingsLabels>;
|
|
61
|
-
/** The app. */
|
|
62
|
-
children: ReactNode;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Provides a {@link KeybindingsHost} and optional label overrides to the keybindings hooks and components below it.
|
|
67
|
-
*
|
|
68
|
-
* @param props - Provider props: the `host`, optional `labels`, and the `children` to render.
|
|
69
|
-
*/
|
|
70
|
-
export function KeybindingsProvider({ host, labels, children }: KeybindingsProviderProps) {
|
|
71
|
-
return (
|
|
72
|
-
<HostContext.Provider value={host}>
|
|
73
|
-
<LabelsProvider<KeybindingsLabels> labels={labels}>{children}</LabelsProvider>
|
|
74
|
-
</HostContext.Provider>
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/** The {@link KeybindingsHost} from the nearest {@link KeybindingsProvider}, or `null` outside one (the defaults apply). */
|
|
79
|
-
export function useKeybindingsHost(): KeybindingsHost | null {
|
|
80
|
-
return useContext(HostContext);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const noSubscribe = () => () => {};
|
|
84
|
-
const NO_OVERRIDES: KeyOverrides = {};
|
|
85
|
-
const noOverrides = () => NO_OVERRIDES;
|
|
86
|
-
|
|
87
|
-
/** The bindings in effect (defaults plus the host's overrides), re-rendering when the overrides change. */
|
|
88
|
-
export function useMergedKeybindings(): KeyBindings {
|
|
89
|
-
const host = useKeybindingsHost();
|
|
90
|
-
useEffect(() => loadOnce(host), [host]);
|
|
91
|
-
const read = host?.overrides.get ?? noOverrides;
|
|
92
|
-
const overrides = useSyncExternalStore(host?.overrides.subscribe ?? noSubscribe, read, read);
|
|
93
|
-
return useMemo(() => ({ ...DEFAULT_KEYBINDINGS, ...overrides }), [overrides]);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/** Matched before the focused element handles the press (see the header). */
|
|
97
|
-
const CAPTURE_ACTIONS: ReadonlySet<KeyAction> = new Set<KeyAction>(['tabNext', 'tabPrev']);
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Runs a matched action's handler: as a transition, unless the catalog marks the action `urgent` (see the header).
|
|
101
|
-
*
|
|
102
|
-
* @param action - The matched action.
|
|
103
|
-
* @param handler - Its handler.
|
|
104
|
-
*/
|
|
105
|
-
function runKeyHandler(action: KeyAction, handler: () => void): void {
|
|
106
|
-
if (KEYBINDING_DEF_BY_ACTION[action].urgent) handler();
|
|
107
|
-
else startTransition(handler);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/** A handler per action the caller binds. */
|
|
111
|
-
export type KeybindingHandlers = KeyCommands;
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Listens on the document for the bound actions' keys and calls their handlers. Handlers are read at press time,
|
|
115
|
-
* so a fresh object each render costs nothing; only the set of bound actions decides what is listened for. The
|
|
116
|
-
* first action (in the caller's order) matching a chord wins.
|
|
117
|
-
*
|
|
118
|
-
* @param handlers - A handler per action to bind.
|
|
119
|
-
*/
|
|
120
|
-
export function useKeybindings(handlers: KeybindingHandlers): void {
|
|
121
|
-
const host = useKeybindingsHost();
|
|
122
|
-
/*
|
|
123
|
-
* Subscribe to override changes via a forceUpdate-shaped reducer.
|
|
124
|
-
* The keydown listener inside the effect closes over `merged` so
|
|
125
|
-
* a refresh re-attaches with the new specs. Cheap: bindings rarely
|
|
126
|
-
* change at runtime.
|
|
127
|
-
*/
|
|
128
|
-
const [tick, bump] = useReducer((n: number) => n + 1, 0);
|
|
129
|
-
/*
|
|
130
|
-
* Handlers are read at press time, so a caller handing a fresh object each
|
|
131
|
-
* render (App's rebuilds whenever the active session changes) neither
|
|
132
|
-
* re-parses every binding nor detaches and re-attaches the document
|
|
133
|
-
* listeners. Only the SET of bound actions decides what is listened for.
|
|
134
|
-
*/
|
|
135
|
-
const handlersRef = useRef(handlers);
|
|
136
|
-
handlersRef.current = handlers;
|
|
137
|
-
// In the caller's order: the first action matching a chord wins.
|
|
138
|
-
const actionsKey = Object.keys(handlers).join(' ');
|
|
139
|
-
|
|
140
|
-
useEffect(() => {
|
|
141
|
-
loadOnce(host);
|
|
142
|
-
if (!host) return undefined;
|
|
143
|
-
const unsubscribe = host.overrides.subscribe(() => bump());
|
|
144
|
-
return () => {
|
|
145
|
-
unsubscribe();
|
|
146
|
-
};
|
|
147
|
-
}, [host]);
|
|
148
|
-
|
|
149
|
-
useEffect(
|
|
150
|
-
() =>
|
|
151
|
-
bindKeyListeners(
|
|
152
|
-
actionsKey ? (actionsKey.split(' ') as KeyAction[]) : [],
|
|
153
|
-
getMergedKeybindings(host),
|
|
154
|
-
(action) => handlersRef.current[action],
|
|
155
|
-
),
|
|
156
|
-
// `tick` re-runs the effect when the overrides change; the bindings are read inside.
|
|
157
|
-
[actionsKey, tick, host],
|
|
158
|
-
);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Listens on the document for the given actions' chords (the dispatcher's rules, see the header) and calls the
|
|
163
|
-
* handler `read` returns at press time. Returns the function that removes the listeners.
|
|
164
|
-
*
|
|
165
|
-
* @param actions - The bound actions, in order: the first matching a chord wins.
|
|
166
|
-
* @param merged - The bindings in effect.
|
|
167
|
-
* @param read - The handler of an action now (`undefined`: let the press through).
|
|
168
|
-
*/
|
|
169
|
-
export function bindKeyListeners(
|
|
170
|
-
actions: readonly KeyAction[],
|
|
171
|
-
merged: KeyBindings,
|
|
172
|
-
read: (action: KeyAction) => (() => void) | undefined,
|
|
173
|
-
): () => void {
|
|
174
|
-
// One entry per chord: a binding may list several (`ctrl+w | cmd+w`).
|
|
175
|
-
const all = actions.flatMap((action) => parseBindingSpecs(merged[action]).map((spec) => ({ action, parsed: spec })));
|
|
176
|
-
|
|
177
|
-
const listen = (parsed: typeof all, capture: boolean) => (event: KeyboardEvent) => {
|
|
178
|
-
/*
|
|
179
|
-
* Ignore bare-letter shortcuts (without modifiers) when the user is
|
|
180
|
-
* typing in an editable surface. Combos that include a modifier are
|
|
181
|
-
* always intentional and bypass this guard.
|
|
182
|
-
*
|
|
183
|
-
* `shift` is counted as a modifier here so shifted chords fire
|
|
184
|
-
* while the prompt has focus. Bare letters typed with shift
|
|
185
|
-
* (e.g. `A`) still won't match any registered binding so this
|
|
186
|
-
* doesn't break normal typing: every binding either has an
|
|
187
|
-
* additional modifier or is bound to a non-letter key.
|
|
188
|
-
*/
|
|
189
|
-
const hasModifier = event.ctrlKey || event.metaKey || event.altKey || event.shiftKey;
|
|
190
|
-
const scope = keyScopeOf(event);
|
|
191
|
-
|
|
192
|
-
if (!hasModifier && (scope === 'editor' || scope === 'input')) {
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
for (const { action, parsed: spec } of parsed) {
|
|
197
|
-
if (!spec) {
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
if (matchesBinding(event, spec) && bindingAllowedIn(scope, spec, action)) {
|
|
202
|
-
const handler = read(action);
|
|
203
|
-
|
|
204
|
-
if (handler) {
|
|
205
|
-
event.preventDefault();
|
|
206
|
-
// Taken on the way down: the focused widget never sees it.
|
|
207
|
-
if (capture) event.stopPropagation();
|
|
208
|
-
runKeyHandler(action, handler);
|
|
209
|
-
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
const onCapture = listen(
|
|
217
|
-
all.filter((b) => CAPTURE_ACTIONS.has(b.action)),
|
|
218
|
-
true,
|
|
219
|
-
);
|
|
220
|
-
const onKey = listen(
|
|
221
|
-
all.filter((b) => !CAPTURE_ACTIONS.has(b.action)),
|
|
222
|
-
false,
|
|
223
|
-
);
|
|
224
|
-
document.addEventListener('keydown', onCapture, true);
|
|
225
|
-
document.addEventListener('keydown', onKey);
|
|
226
|
-
|
|
227
|
-
return () => {
|
|
228
|
-
document.removeEventListener('keydown', onCapture, true);
|
|
229
|
-
document.removeEventListener('keydown', onKey);
|
|
230
|
-
};
|
|
231
|
-
}
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The app's keyboard actions: the catalog (`KEYBINDING_DEFS`, one default
|
|
3
|
-
* spec, label and description per action) and the default map.
|
|
4
|
-
*
|
|
5
|
-
* It shares the TUI's action names and spec grammar, and adds the desktop
|
|
6
|
-
* app's own actions. The grammar (`parseBindingSpec`, aliases, `|`
|
|
7
|
-
* alternatives) is core's, from `zidane/chat/pure`, so a `keybindings.json`
|
|
8
|
-
* parses the same on both surfaces. The user's overrides come from the host
|
|
9
|
-
* (`KeybindingsHost.overrides`); `getMergedKeybindings` layers them over
|
|
10
|
-
* `DEFAULT_KEYBINDINGS`. The DOM matcher is `matchesBinding` (`zidane-ui/keybindings`).
|
|
11
|
-
*/
|
|
12
|
-
export { bindingAlternatives, parseBindingSpec, parseBindingSpecs, type ParsedBinding } from 'zidane/chat/pure';
|
|
13
|
-
|
|
14
|
-
/** Every action a key binding can fire. */
|
|
15
|
-
export type KeyAction =
|
|
16
|
-
| 'openSettings'
|
|
17
|
-
| 'openSessionDetails'
|
|
18
|
-
| 'openModelPicker'
|
|
19
|
-
| 'openEffortPicker'
|
|
20
|
-
| 'openTodos'
|
|
21
|
-
| 'openArtifacts'
|
|
22
|
-
| 'openMainSession'
|
|
23
|
-
| 'openUsagePanel'
|
|
24
|
-
| 'newSession'
|
|
25
|
-
| 'openKeybindings'
|
|
26
|
-
| 'openPalette'
|
|
27
|
-
| 'cancelToolCall'
|
|
28
|
-
| 'cycleAgent'
|
|
29
|
-
| 'enterSelectTurnMode'
|
|
30
|
-
| 'toggleSidebar'
|
|
31
|
-
| 'sessionGenerateTitle'
|
|
32
|
-
| 'sessionCompact'
|
|
33
|
-
| 'sessionExportMarkdown'
|
|
34
|
-
| 'sessionExportJson'
|
|
35
|
-
| 'sessionDelete'
|
|
36
|
-
| 'sessionCopyId'
|
|
37
|
-
| 'sessionFavorite'
|
|
38
|
-
| 'zoomIn'
|
|
39
|
-
| 'zoomOut'
|
|
40
|
-
| 'zoomReset'
|
|
41
|
-
| 'panelNext'
|
|
42
|
-
| 'panelPrev'
|
|
43
|
-
| 'tabNext'
|
|
44
|
-
| 'tabPrev'
|
|
45
|
-
| 'closeTab'
|
|
46
|
-
| 'toggleTerminal'
|
|
47
|
-
| 'newTerminal'
|
|
48
|
-
| 'annotatePage'
|
|
49
|
-
| 'splitTabRight'
|
|
50
|
-
| 'splitTabDown';
|
|
51
|
-
|
|
52
|
-
/** One action of the catalog. */
|
|
53
|
-
export interface KeyBindingDef {
|
|
54
|
-
/** The action. */
|
|
55
|
-
action: KeyAction;
|
|
56
|
-
/** Its default spec (`cmd+k`, `ctrl+w | cmd+w`); `''` for unbound. */
|
|
57
|
-
default: string;
|
|
58
|
-
/** Its short name. */
|
|
59
|
-
label: string;
|
|
60
|
-
/** What it does. */
|
|
61
|
-
description: string;
|
|
62
|
-
/**
|
|
63
|
-
* Its state updates render before the next key. Without it they render as a transition (`bindKeyListeners`), so a
|
|
64
|
-
* shortcut that redraws much of the window ends its keydown at once and never holds up a frame or a keystroke. Set
|
|
65
|
-
* it on an action that moves the focus or opens what the next key goes to (a dialog, the palette, a terminal, a
|
|
66
|
-
* new chat's composer), since a key typed before that rendered would land where the focus was; and on a copy,
|
|
67
|
-
* which confirms at once.
|
|
68
|
-
*/
|
|
69
|
-
urgent?: true;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** The catalog, in display order. */
|
|
73
|
-
export const KEYBINDING_DEFS: readonly KeyBindingDef[] = [
|
|
74
|
-
{
|
|
75
|
-
action: 'openSettings',
|
|
76
|
-
/*
|
|
77
|
-
* `cmd+,` is the canonical macOS Settings shortcut — every native
|
|
78
|
-
* Mac app binds it. Override via `~/.zidane/keybindings.json` if
|
|
79
|
-
* desired.
|
|
80
|
-
*/
|
|
81
|
-
default: 'cmd+,',
|
|
82
|
-
label: 'settings',
|
|
83
|
-
description: 'open the Settings modal (toggles, theme, keybindings)',
|
|
84
|
-
urgent: true,
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
action: 'openSessionDetails',
|
|
88
|
-
default: 'ctrl+shift+x',
|
|
89
|
-
label: 'session',
|
|
90
|
-
description: 'open the session details modal (rename, export, delete)',
|
|
91
|
-
urgent: true,
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
action: 'openModelPicker',
|
|
95
|
-
default: 'ctrl+m',
|
|
96
|
-
label: 'model',
|
|
97
|
-
description: 'open the cross-provider model picker',
|
|
98
|
-
urgent: true,
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
action: 'openEffortPicker',
|
|
102
|
-
default: 'ctrl+l',
|
|
103
|
-
label: 'effort',
|
|
104
|
-
description: 'open the reasoning-effort picker (when the active model supports it)',
|
|
105
|
-
urgent: true,
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
action: 'openTodos',
|
|
109
|
-
default: 'ctrl+t',
|
|
110
|
-
label: 'todos',
|
|
111
|
-
description: "open the active run's todo list (the agent's `todowrite` checkpoints)",
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
action: 'openArtifacts',
|
|
115
|
-
default: 'ctrl+shift+a',
|
|
116
|
-
label: 'panel',
|
|
117
|
-
description: 'toggle the side panel (artifacts the session produced, plus extension panels)',
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
action: 'openMainSession',
|
|
121
|
-
default: 'ctrl+shift+m',
|
|
122
|
-
label: 'Jump to main session',
|
|
123
|
-
description: 'jump to (or lazily create) the pinned "Main" orchestration session for the active directory',
|
|
124
|
-
urgent: true,
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
action: 'openUsagePanel',
|
|
128
|
-
default: 'ctrl+p',
|
|
129
|
-
label: 'usage',
|
|
130
|
-
description: 'open the usage panel (rate-limit windows and credits per provider, GitHub API limits)',
|
|
131
|
-
urgent: true,
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
action: 'newSession',
|
|
135
|
-
default: 'ctrl+n',
|
|
136
|
-
label: 'new session',
|
|
137
|
-
description: 'leave the active session and start a fresh one',
|
|
138
|
-
urgent: true,
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
action: 'openKeybindings',
|
|
142
|
-
default: 'ctrl+y',
|
|
143
|
-
label: 'keybindings',
|
|
144
|
-
description: 'open the shortcut reference',
|
|
145
|
-
urgent: true,
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
action: 'openPalette',
|
|
149
|
-
default: 'cmd+k',
|
|
150
|
-
label: 'palette',
|
|
151
|
-
description: 'toggle the command palette: search every action, command, panel, session and setting',
|
|
152
|
-
urgent: true,
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
action: 'cancelToolCall',
|
|
156
|
-
default: 'ctrl+k',
|
|
157
|
-
label: 'cancel work',
|
|
158
|
-
description: 'cancel a running tool call or background task',
|
|
159
|
-
urgent: true,
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
action: 'cycleAgent',
|
|
163
|
-
/*
|
|
164
|
-
* `shift+cmd+i` over `shift+tab` — Tab inside the prompt editor
|
|
165
|
-
* (TipTap) inserts a tab character; trapping shift+tab globally
|
|
166
|
-
* for an agent cycle would steal the natural shift-tab navigation
|
|
167
|
-
* the editor + form controls expect. `⇧⌘I` is unclaimed on macOS
|
|
168
|
-
* and maps cleanly to "switch (I)dentity" mnemonics.
|
|
169
|
-
*/
|
|
170
|
-
default: 'shift+cmd+i',
|
|
171
|
-
label: 'cycle agent',
|
|
172
|
-
description: 'cycle to the next agent profile',
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
action: 'enterSelectTurnMode',
|
|
176
|
-
default: 'ctrl+s',
|
|
177
|
-
label: 'messages',
|
|
178
|
-
description: 'enter select-turn mode to navigate previous messages',
|
|
179
|
-
urgent: true,
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
action: 'toggleSidebar',
|
|
183
|
-
/*
|
|
184
|
-
* `cmd+b` follows the cross-app convention (VS Code, Notion, Linear,
|
|
185
|
-
* Slack, …) for show/hide the sidebar. `b` for "bar" / "browse".
|
|
186
|
-
*/
|
|
187
|
-
default: 'cmd+b',
|
|
188
|
-
label: 'sidebar',
|
|
189
|
-
description: 'show or hide the chats sidebar',
|
|
190
|
-
},
|
|
191
|
-
/*
|
|
192
|
-
* Session actions — the TUI binds these to bare letters (`g`, `k`, …)
|
|
193
|
-
* scoped to its session-details modal. The GUI registers them as
|
|
194
|
-
* global accelerators (there's no modal-scoped dispatcher here), so
|
|
195
|
-
* bare letters would misfire whenever focus sits outside an editable
|
|
196
|
-
* surface. `ctrl+shift+<TUI letter>` keeps the canonical mnemonic
|
|
197
|
-
* while gating on a deliberate chord.
|
|
198
|
-
*/
|
|
199
|
-
{
|
|
200
|
-
action: 'sessionGenerateTitle',
|
|
201
|
-
default: 'ctrl+shift+t',
|
|
202
|
-
label: 'generate title',
|
|
203
|
-
description: 'generate a title for the session via the active provider/model',
|
|
204
|
-
},
|
|
205
|
-
{
|
|
206
|
-
action: 'sessionCompact',
|
|
207
|
-
default: 'ctrl+shift+k',
|
|
208
|
-
label: 'compact',
|
|
209
|
-
description: 'compact older turns via an LLM summary (model still sees everything from the boundary down)',
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
action: 'sessionExportMarkdown',
|
|
213
|
-
default: 'ctrl+shift+e',
|
|
214
|
-
label: 'export md',
|
|
215
|
-
description: 'export the session as Markdown under .{prefix}/sessions/',
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
action: 'sessionExportJson',
|
|
219
|
-
default: 'ctrl+shift+j',
|
|
220
|
-
label: 'export json',
|
|
221
|
-
description: 'export the session as JSON under .{prefix}/sessions/',
|
|
222
|
-
},
|
|
223
|
-
{
|
|
224
|
-
action: 'sessionDelete',
|
|
225
|
-
default: 'ctrl+shift+d',
|
|
226
|
-
label: 'delete',
|
|
227
|
-
description: 'delete the entire session (confirm dialog)',
|
|
228
|
-
urgent: true,
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
action: 'sessionCopyId',
|
|
232
|
-
default: 'ctrl+shift+c',
|
|
233
|
-
label: 'copy id',
|
|
234
|
-
description: 'copy the full session id to the clipboard',
|
|
235
|
-
urgent: true,
|
|
236
|
-
},
|
|
237
|
-
// Unbound by default: the palette and the row menu reach it; bind one in Settings.
|
|
238
|
-
{
|
|
239
|
-
action: 'sessionFavorite',
|
|
240
|
-
default: '',
|
|
241
|
-
label: 'favorite',
|
|
242
|
-
description: 'add the session to favorites, or remove it',
|
|
243
|
-
},
|
|
244
|
-
// GUI-only: cycle the side panel's tabs.
|
|
245
|
-
{
|
|
246
|
-
action: 'panelNext',
|
|
247
|
-
default: 'ctrl+shift+]',
|
|
248
|
-
label: 'next panel',
|
|
249
|
-
description: 'cycle to the next side-panel tab (opens the panel)',
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
action: 'panelPrev',
|
|
253
|
-
default: 'ctrl+shift+[',
|
|
254
|
-
label: 'previous panel',
|
|
255
|
-
description: 'cycle to the previous side-panel tab (opens the panel)',
|
|
256
|
-
},
|
|
257
|
-
/*
|
|
258
|
-
* GUI-only: tabs within whatever holds focus (`tab-scopes.ts`): open files
|
|
259
|
-
* in Files, changed files in Diffs, terminals; with the focus elsewhere, the
|
|
260
|
-
* spaces (Spaces on), else the side panel's tabs.
|
|
261
|
-
*/
|
|
262
|
-
{
|
|
263
|
-
action: 'tabNext',
|
|
264
|
-
default: 'cmd+alt+right',
|
|
265
|
-
label: 'next tab',
|
|
266
|
-
description:
|
|
267
|
-
'next tab where the focus is: open file, changed file, terminal; elsewhere the next space (Spaces on) or side-panel tab',
|
|
268
|
-
urgent: true,
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
action: 'tabPrev',
|
|
272
|
-
default: 'cmd+alt+left',
|
|
273
|
-
label: 'previous tab',
|
|
274
|
-
description:
|
|
275
|
-
'previous tab where the focus is: open file, changed file, terminal; elsewhere the previous space (Spaces on) or side-panel tab',
|
|
276
|
-
urgent: true,
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
action: 'closeTab',
|
|
280
|
-
default: 'ctrl+w | cmd+w',
|
|
281
|
-
label: 'close tab',
|
|
282
|
-
description: 'close the open file in Files, the terminal, or else the active side-panel tab',
|
|
283
|
-
urgent: true,
|
|
284
|
-
},
|
|
285
|
-
// GUI-only: the terminal drawer under the chat (VS Code's chords; `cmd+j` is
|
|
286
|
-
// VS Code's panel toggle too, and the one that works on every layout).
|
|
287
|
-
{
|
|
288
|
-
action: 'toggleTerminal',
|
|
289
|
-
default: 'ctrl+` | cmd+j',
|
|
290
|
-
label: 'terminal',
|
|
291
|
-
description: 'show or hide the terminal drawer under the chat',
|
|
292
|
-
urgent: true,
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
action: 'newTerminal',
|
|
296
|
-
default: 'ctrl+shift+`',
|
|
297
|
-
label: 'new terminal',
|
|
298
|
-
description: "open a new terminal in the session's environment (shows the drawer)",
|
|
299
|
-
urgent: true,
|
|
300
|
-
},
|
|
301
|
-
// GUI-only: annotate mode in the Browser tab (Codex's key), while the tab is on screen.
|
|
302
|
-
{
|
|
303
|
-
action: 'annotatePage',
|
|
304
|
-
default: 'cmd+.',
|
|
305
|
-
label: 'annotate',
|
|
306
|
-
description: 'mark elements and areas of the page in the Browser tab for the agent, or stop marking',
|
|
307
|
-
},
|
|
308
|
-
// GUI-only: the side panel's tab groups. Split follows VS Code (⌘\ splits the editor).
|
|
309
|
-
{
|
|
310
|
-
action: 'splitTabRight',
|
|
311
|
-
default: 'cmd+\\',
|
|
312
|
-
label: 'split right',
|
|
313
|
-
description: "split the side panel's active tab into a new group on the right",
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
action: 'splitTabDown',
|
|
317
|
-
// Not ⇧⌘\: shifted, a US layout reports `|`, which specs read as a separator.
|
|
318
|
-
default: 'alt+cmd+\\',
|
|
319
|
-
label: 'split down',
|
|
320
|
-
description: "split the side panel's active tab into a new group below",
|
|
321
|
-
},
|
|
322
|
-
/*
|
|
323
|
-
* GUI-only: interface size. Persisted through the Appearance store (not
|
|
324
|
-
* Electron's transient page zoom) so the chosen scale survives relaunch.
|
|
325
|
-
* `plus` is the physical `=` key; ⌘= is the macOS zoom-in convention.
|
|
326
|
-
*/
|
|
327
|
-
{
|
|
328
|
-
action: 'zoomIn',
|
|
329
|
-
default: 'cmd+plus',
|
|
330
|
-
label: 'zoom in',
|
|
331
|
-
description: 'increase the interface size',
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
action: 'zoomOut',
|
|
335
|
-
default: 'cmd+minus',
|
|
336
|
-
label: 'zoom out',
|
|
337
|
-
description: 'decrease the interface size',
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
action: 'zoomReset',
|
|
341
|
-
default: 'cmd+0',
|
|
342
|
-
label: 'reset zoom',
|
|
343
|
-
description: 'reset the interface size to 100%',
|
|
344
|
-
},
|
|
345
|
-
];
|
|
346
|
-
|
|
347
|
-
/** A spec per action. */
|
|
348
|
-
export type KeyBindings = Record<KeyAction, string>;
|
|
349
|
-
|
|
350
|
-
/** The default spec per action. */
|
|
351
|
-
export const DEFAULT_KEYBINDINGS: KeyBindings = KEYBINDING_DEFS.reduce(
|
|
352
|
-
(acc, def) => Object.assign(acc, { [def.action]: def.default }),
|
|
353
|
-
{} as KeyBindings,
|
|
354
|
-
);
|
|
355
|
-
|
|
356
|
-
/** The catalog by action. */
|
|
357
|
-
export const KEYBINDING_DEF_BY_ACTION: Readonly<Record<KeyAction, KeyBindingDef>> = KEYBINDING_DEFS.reduce(
|
|
358
|
-
(acc, def) => Object.assign(acc, { [def.action]: def }),
|
|
359
|
-
{} as Record<KeyAction, KeyBindingDef>,
|
|
360
|
-
);
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The key command registry: the handlers an app's parts register for the
|
|
3
|
-
* catalog's actions, merged into the one map the dispatcher and the palette
|
|
4
|
-
* read. Each part holds a slot and replaces its handlers as its state
|
|
5
|
-
* changes; nothing re-renders for it. Readers that care which actions are
|
|
6
|
-
* bound (the dispatcher re-attaching, the palette listing them) compare
|
|
7
|
-
* `actions()`: handler identities change on every update, the set rarely.
|
|
8
|
-
*/
|
|
9
|
-
import type { Readable } from '../../chat/headless/store';
|
|
10
|
-
import type { KeyAction } from './catalog';
|
|
11
|
-
|
|
12
|
-
/** A handler per action. */
|
|
13
|
-
export type KeyCommands = Partial<Record<KeyAction, () => void>>;
|
|
14
|
-
|
|
15
|
-
/** One part's handlers in a {@link KeyCommandRegistry}. */
|
|
16
|
-
export interface KeyCommandSlot {
|
|
17
|
-
/** Replaces this part's handlers. */
|
|
18
|
-
set(commands: KeyCommands): void;
|
|
19
|
-
/** Removes this part's handlers. */
|
|
20
|
-
dispose(): void;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** The merged handlers of every registered part. */
|
|
24
|
-
export interface KeyCommandRegistry extends Readable<KeyCommands> {
|
|
25
|
-
/**
|
|
26
|
-
* Adds a part. Parts merge in the order they registered: an action an earlier part binds keeps its place, a later
|
|
27
|
-
* part's handler for it wins.
|
|
28
|
-
*
|
|
29
|
-
* @param commands - The part's first handlers.
|
|
30
|
-
*/
|
|
31
|
-
register(commands?: KeyCommands): KeyCommandSlot;
|
|
32
|
-
/** The bound actions, in merge order (the first action matching a chord wins). One string per set: compare it. */
|
|
33
|
-
actions(): string;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** A registry with no parts: what the dispatcher reads until something registers. */
|
|
37
|
-
export function createKeyCommandRegistry(): KeyCommandRegistry {
|
|
38
|
-
const slots: { commands: KeyCommands }[] = [];
|
|
39
|
-
const listeners = new Set<() => void>();
|
|
40
|
-
let merged: KeyCommands = {};
|
|
41
|
-
let actions = '';
|
|
42
|
-
|
|
43
|
-
const update = () => {
|
|
44
|
-
const next: KeyCommands = {};
|
|
45
|
-
for (const slot of slots) Object.assign(next, slot.commands);
|
|
46
|
-
merged = next;
|
|
47
|
-
actions = Object.keys(next).join(' ');
|
|
48
|
-
for (const listener of [...listeners]) listener();
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
return {
|
|
52
|
-
get: () => merged,
|
|
53
|
-
actions: () => actions,
|
|
54
|
-
subscribe(onChange) {
|
|
55
|
-
listeners.add(onChange);
|
|
56
|
-
return () => listeners.delete(onChange);
|
|
57
|
-
},
|
|
58
|
-
register(commands = {}) {
|
|
59
|
-
const slot = { commands };
|
|
60
|
-
slots.push(slot);
|
|
61
|
-
update();
|
|
62
|
-
return {
|
|
63
|
-
set(next) {
|
|
64
|
-
if (next === slot.commands) return;
|
|
65
|
-
slot.commands = next;
|
|
66
|
-
update();
|
|
67
|
-
},
|
|
68
|
-
dispose() {
|
|
69
|
-
const at = slots.indexOf(slot);
|
|
70
|
-
if (at < 0) return;
|
|
71
|
-
slots.splice(at, 1);
|
|
72
|
-
update();
|
|
73
|
-
},
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
}
|