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,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Context-usage orb in the composer's status cluster, with the context
|
|
3
|
-
* window breakdown in its popover. The orb is a 16px donut: the arc fills
|
|
4
|
-
* clockwise from 12 o'clock, red at ≥90%, amber at ≥70%, else accent. Cost
|
|
5
|
-
* lives in the popover and the tooltip only; it is a low-frequency signal.
|
|
6
|
-
*/
|
|
7
|
-
import type { CSSProperties, ReactNode } from 'react';
|
|
8
|
-
|
|
9
|
-
import { Popover } from '../../components/floating/Popover';
|
|
10
|
-
import { MetaChip } from '../../components/Form';
|
|
11
|
-
import { useChatLabels } from '../useChatLabels';
|
|
12
|
-
import { ContextBreakdown, type ContextBreakdownData } from './ContextBreakdown';
|
|
13
|
-
|
|
14
|
-
const RADIUS = 7;
|
|
15
|
-
const CIRC = 2 * Math.PI * RADIUS;
|
|
16
|
-
|
|
17
|
-
/** The session's spend, as the popover's last row and the orb's tooltip show it. */
|
|
18
|
-
export interface ContextCost {
|
|
19
|
-
/** Formatted total (`$0.42`). */
|
|
20
|
-
label: string;
|
|
21
|
-
/** The total includes a streaming turn's running estimate (`~` prefix, no money tint). */
|
|
22
|
-
estimated: boolean;
|
|
23
|
-
/** Number of runs the cost covers, or `null` when unknown. */
|
|
24
|
-
runCount: number | null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** Everything the orb and its popover show. */
|
|
28
|
-
export interface ContextUsage {
|
|
29
|
-
/** Used share of the effective window, 0–1 (clamped). */
|
|
30
|
-
fraction: number;
|
|
31
|
-
/** Formatted used tokens (`61k`). */
|
|
32
|
-
usedLabel: string;
|
|
33
|
-
/** Formatted effective window (`200k`). */
|
|
34
|
-
windowLabel: string;
|
|
35
|
-
/** Id of the model the session runs. */
|
|
36
|
-
modelId: string;
|
|
37
|
-
/** The model's readable name (default: `modelId`). */
|
|
38
|
-
modelName?: string;
|
|
39
|
-
/** Auto-compact threshold (0–1) when auto-compact is on. */
|
|
40
|
-
autoCompactThreshold?: number | null;
|
|
41
|
-
/** The session's spend, shown in the popover and tooltip. `null` or omitted: no cost row. */
|
|
42
|
-
cost?: ContextCost | null;
|
|
43
|
-
/** The breakdown the default popover body renders: undefined loading, null unavailable. */
|
|
44
|
-
breakdown?: ContextBreakdownData | null;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** The orb's share in percent and its color, for a breakdown's fallback gauge. */
|
|
48
|
-
export interface ContextGauge {
|
|
49
|
-
/** The used share as a whole percent from 0 to 100. */
|
|
50
|
-
pct: number;
|
|
51
|
-
/** CSS color of the arc: red from 90%, amber from 70%, accent below. */
|
|
52
|
-
color: string;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Computes the orb's percent and color from a used fraction.
|
|
57
|
-
*
|
|
58
|
-
* @param fraction - Used share of the context window, from 0 to 1. Values outside the range are clamped.
|
|
59
|
-
*/
|
|
60
|
-
export function contextGauge(fraction: number): ContextGauge {
|
|
61
|
-
const pct = Math.round(Math.max(0, Math.min(1, fraction)) * 100);
|
|
62
|
-
return { pct, color: pct >= 90 ? 'var(--zg-danger)' : pct >= 70 ? 'var(--zg-warn)' : 'var(--zg-accent)' };
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** Props for {@link ContextOrb}. */
|
|
66
|
-
export interface ContextOrbProps {
|
|
67
|
-
/** Everything the orb and its popover show. */
|
|
68
|
-
usage: ContextUsage;
|
|
69
|
-
/**
|
|
70
|
-
* The popover's breakdown body, mounted while it is open (a host that
|
|
71
|
-
* fetches the breakdown on open renders its own). Default:
|
|
72
|
-
* `<ContextBreakdown breakdown={usage.breakdown} … />`.
|
|
73
|
-
*/
|
|
74
|
-
renderBreakdown?: (gauge: ContextGauge) => ReactNode;
|
|
75
|
-
/** Extra classes on the root element (the orb's trigger button). */
|
|
76
|
-
className?: string;
|
|
77
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
78
|
-
style?: CSSProperties;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Renders the context usage donut and, in its popover, the window breakdown and session cost.
|
|
83
|
-
*
|
|
84
|
-
* @param props - The {@link ContextOrbProps}.
|
|
85
|
-
*/
|
|
86
|
-
export function ContextOrb({ usage, renderBreakdown, className, style }: ContextOrbProps) {
|
|
87
|
-
const labels = useChatLabels();
|
|
88
|
-
const fraction = Math.max(0, Math.min(1, usage.fraction));
|
|
89
|
-
const gauge = contextGauge(fraction);
|
|
90
|
-
const { pct, color } = gauge;
|
|
91
|
-
const { cost } = usage;
|
|
92
|
-
const compactThreshold = usage.autoCompactThreshold ?? null;
|
|
93
|
-
const summary = labels.contextSummary(usage.usedLabel, usage.windowLabel, pct);
|
|
94
|
-
|
|
95
|
-
return (
|
|
96
|
-
<Popover
|
|
97
|
-
ariaLabel={labels.contextDetail}
|
|
98
|
-
width={340}
|
|
99
|
-
align="end"
|
|
100
|
-
trigger={(props) => (
|
|
101
|
-
<button
|
|
102
|
-
{...props}
|
|
103
|
-
type="button"
|
|
104
|
-
// The orb draws nothing but the donut, so the tooltip is also its name.
|
|
105
|
-
aria-label={cost?.label ? labels.contextSummaryCost(summary, cost.label) : summary}
|
|
106
|
-
title={cost?.label ? labels.contextSummaryCost(summary, cost.label) : summary}
|
|
107
|
-
className={[
|
|
108
|
-
'zg-segment-item zg-press-soft inline-flex items-center justify-center w-7 h-7 rounded-full bg-transparent border-0 cursor-pointer p-0',
|
|
109
|
-
className,
|
|
110
|
-
]
|
|
111
|
-
.filter(Boolean)
|
|
112
|
-
.join(' ')}
|
|
113
|
-
style={style}
|
|
114
|
-
>
|
|
115
|
-
<svg width={16} height={16} viewBox="0 0 16 16" aria-hidden>
|
|
116
|
-
<g transform="rotate(-90 8 8)">
|
|
117
|
-
<circle cx={8} cy={8} r={RADIUS} fill="none" stroke="var(--zg-border)" strokeWidth={2} />
|
|
118
|
-
<circle
|
|
119
|
-
cx={8}
|
|
120
|
-
cy={8}
|
|
121
|
-
r={RADIUS}
|
|
122
|
-
fill="none"
|
|
123
|
-
stroke={color}
|
|
124
|
-
strokeWidth={2}
|
|
125
|
-
strokeDasharray={CIRC}
|
|
126
|
-
strokeDashoffset={CIRC * (1 - fraction)}
|
|
127
|
-
strokeLinecap="round"
|
|
128
|
-
style={{ transition: 'stroke-dashoffset var(--zg-motion-settle), stroke var(--zg-motion-fade)' }}
|
|
129
|
-
/>
|
|
130
|
-
</g>
|
|
131
|
-
</svg>
|
|
132
|
-
</button>
|
|
133
|
-
)}
|
|
134
|
-
>
|
|
135
|
-
{() => (
|
|
136
|
-
<div className="p-3 flex flex-col gap-3">
|
|
137
|
-
<div className="flex flex-col gap-1 px-1">
|
|
138
|
-
<div className="flex items-baseline justify-between gap-3">
|
|
139
|
-
<span className="text-zg-ui font-medium text-[var(--zg-text)]">{labels.contextWindow}</span>
|
|
140
|
-
<span className="zg-meta shrink-0">
|
|
141
|
-
<span style={{ color }}>{usage.usedLabel}</span> / {usage.windowLabel} ({pct}%)
|
|
142
|
-
</span>
|
|
143
|
-
</div>
|
|
144
|
-
<div className="zg-meta flex items-center justify-between gap-3">
|
|
145
|
-
<span className="truncate" title={usage.modelId}>
|
|
146
|
-
{usage.modelName ?? usage.modelId}
|
|
147
|
-
</span>
|
|
148
|
-
{compactThreshold !== null && (
|
|
149
|
-
<span className="shrink-0">{labels.contextAutoCompact(Math.round(compactThreshold * 100))}</span>
|
|
150
|
-
)}
|
|
151
|
-
</div>
|
|
152
|
-
</div>
|
|
153
|
-
|
|
154
|
-
{renderBreakdown ? (
|
|
155
|
-
renderBreakdown(gauge)
|
|
156
|
-
) : (
|
|
157
|
-
<ContextBreakdown breakdown={usage.breakdown} fallbackPct={pct} fallbackColor={color} />
|
|
158
|
-
)}
|
|
159
|
-
|
|
160
|
-
{cost?.label && (
|
|
161
|
-
<div className="flex items-center justify-between gap-3 px-1 text-zg-label">
|
|
162
|
-
<span className="text-[var(--zg-text-muted)]">{labels.contextSessionCost}</span>
|
|
163
|
-
<span className="flex items-center gap-1.5">
|
|
164
|
-
<span className="zg-meta" style={{ color: cost.estimated ? undefined : 'var(--zg-money)' }}>
|
|
165
|
-
{cost.estimated ? '~' : ''}
|
|
166
|
-
{cost.label}
|
|
167
|
-
</span>
|
|
168
|
-
{cost.runCount !== null && <MetaChip>{labels.contextRunCount(cost.runCount)}</MetaChip>}
|
|
169
|
-
</span>
|
|
170
|
-
</div>
|
|
171
|
-
)}
|
|
172
|
-
</div>
|
|
173
|
-
)}
|
|
174
|
-
</Popover>
|
|
175
|
-
);
|
|
176
|
-
}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The composer's badge strip for one conversation (`ComposerBadges`, drawn
|
|
3
|
-
* at the top of the composer's tray): what waits in the inbox, the todos'
|
|
4
|
-
* progress, the queued messages, the running work you can stop, and what
|
|
5
|
-
* extensions show with the session: their `composer.badges` slot items
|
|
6
|
-
* (`ExtensionsHost`, a click runs the item's command or opens its panel).
|
|
7
|
-
* What goes in, in which default order
|
|
8
|
-
* and how many per extension, is `conversationBadges` (`zidane-ui/chat/headless`).
|
|
9
|
-
*
|
|
10
|
-
* The session's todos, queue and running work come from the `SessionHost`
|
|
11
|
-
* (`zidane-ui/session`), its pending requests from the `ChatHost`
|
|
12
|
-
* (`interactions`). Running opens the app's Running work view
|
|
13
|
-
* (`onOpenRunningWork`); it shows once a call has run a moment and stays a
|
|
14
|
-
* moment after the work ends (`useSustainedWork`).
|
|
15
|
-
*
|
|
16
|
-
* A badge opens its panel (`onOpenPanel`); the badge of the panel on screen
|
|
17
|
-
* (`onScreen`) is the raised chip, and a click on it closes the panel
|
|
18
|
-
* (`onClosePanel`). What was on screen is read at the pointer-down, so an
|
|
19
|
-
* app that hides a floating panel on any pointer-down before the click
|
|
20
|
-
* still sees a click on its badge as a close.
|
|
21
|
-
*/
|
|
22
|
-
import { memo, useCallback, useEffect, useMemo, useRef, type CSSProperties } from 'react';
|
|
23
|
-
|
|
24
|
-
import { slotItems } from '../../extensions/headless/select';
|
|
25
|
-
import { useExtensionItems, useExtensionsHost } from '../../extensions/ExtensionsProvider';
|
|
26
|
-
import { useSessionHost, useSessionQueue, useSessionRunningWork, useSessionTodos } from '../../session/SessionProvider';
|
|
27
|
-
import { conversationBadges } from '../headless/composer/conversation-badges';
|
|
28
|
-
import { usePendingInteractions } from '../interactions/hooks';
|
|
29
|
-
import { mergeBadgeOrder, orderComposerBadges } from './badge-order';
|
|
30
|
-
import { ComposerBadges, type ComposerBadge } from './ComposerBadges';
|
|
31
|
-
import { useComposerLabels } from './ComposerHostProvider';
|
|
32
|
-
import { useSustainedWork } from './use-sustained-work';
|
|
33
|
-
|
|
34
|
-
/** Props for {@link ConversationBadges}. */
|
|
35
|
-
export interface ConversationBadgesProps {
|
|
36
|
-
/** The conversation, `null` for a draft. */
|
|
37
|
-
sessionId: string | null;
|
|
38
|
-
/** Show the todos' progress. @default true */
|
|
39
|
-
showTodos?: boolean;
|
|
40
|
-
/** The conversation's panel ids: a badge naming another opens nothing. */
|
|
41
|
-
panels: ReadonlySet<string>;
|
|
42
|
-
/** The panel on screen beside the conversation, `null` for none. */
|
|
43
|
-
onScreen?: string | null;
|
|
44
|
-
/** Opens (and focuses) a panel. */
|
|
45
|
-
onOpenPanel?: (panel: string) => void;
|
|
46
|
-
/** Closes the panel on screen. */
|
|
47
|
-
onClosePanel?: () => void;
|
|
48
|
-
/** The user's order (badge ids). */
|
|
49
|
-
order?: readonly string[];
|
|
50
|
-
/** Saves a new order: the saved one with the move merged in (`mergeBadgeOrder`). Absent: badges don't move. */
|
|
51
|
-
onOrderChange?: (merge: (saved: readonly string[]) => string[]) => void;
|
|
52
|
-
/** Opens the conversation's Running work view. Absent: the Running badge is a plain pill. */
|
|
53
|
-
onOpenRunningWork?: (sessionId: string) => void;
|
|
54
|
-
/** Extra classes on the strip. */
|
|
55
|
-
className?: string;
|
|
56
|
-
/** Inline styles on the strip. */
|
|
57
|
-
style?: CSSProperties;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const NO_ORDER: readonly string[] = [];
|
|
61
|
-
|
|
62
|
-
/** The badge strip of one conversation (see the header). */
|
|
63
|
-
export const ConversationBadges = memo(function ConversationBadges({
|
|
64
|
-
sessionId,
|
|
65
|
-
showTodos = true,
|
|
66
|
-
panels,
|
|
67
|
-
onScreen = null,
|
|
68
|
-
onOpenPanel,
|
|
69
|
-
onClosePanel,
|
|
70
|
-
order = NO_ORDER,
|
|
71
|
-
onOrderChange,
|
|
72
|
-
onOpenRunningWork,
|
|
73
|
-
className,
|
|
74
|
-
style,
|
|
75
|
-
}: ConversationBadgesProps) {
|
|
76
|
-
const labels = useComposerLabels();
|
|
77
|
-
const interactions = usePendingInteractions(sessionId);
|
|
78
|
-
const todos = useSessionTodos(sessionId);
|
|
79
|
-
const fetchTodos = useSessionHost().todos?.refresh;
|
|
80
|
-
const queued = useSessionQueue(sessionId).length;
|
|
81
|
-
const slots = useExtensionItems('slot');
|
|
82
|
-
const slotBadges = useMemo(() => slotItems(slots, 'composer.badges', sessionId ?? undefined), [slots, sessionId]);
|
|
83
|
-
const runCommand = useExtensionsHost()?.commands?.run;
|
|
84
|
-
const work = useSustainedWork(sessionId, useSessionRunningWork(sessionId));
|
|
85
|
-
|
|
86
|
-
// A conversation opened before any todos snapshot reached it (a window
|
|
87
|
-
// reopened over a live agent) reads its list once; the run's broadcasts take over from there.
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
if (sessionId) void fetchTodos?.(sessionId);
|
|
90
|
-
}, [sessionId, fetchTodos]);
|
|
91
|
-
|
|
92
|
-
const head = interactions[0] ?? null;
|
|
93
|
-
const waiting = interactions.length;
|
|
94
|
-
const data = useMemo(
|
|
95
|
-
() =>
|
|
96
|
-
conversationBadges(
|
|
97
|
-
{
|
|
98
|
-
inbox: head ? { count: waiting, head: head.request, live: head.live !== false } : null,
|
|
99
|
-
todos,
|
|
100
|
-
showTodos,
|
|
101
|
-
queued,
|
|
102
|
-
work,
|
|
103
|
-
slotBadges,
|
|
104
|
-
panels,
|
|
105
|
-
},
|
|
106
|
-
labels,
|
|
107
|
-
),
|
|
108
|
-
[head, waiting, todos, showTodos, queued, work, slotBadges, panels, labels],
|
|
109
|
-
);
|
|
110
|
-
|
|
111
|
-
// `onScreen` as last painted, and as it was when the pointer went down on the strip.
|
|
112
|
-
const shown = useRef(onScreen);
|
|
113
|
-
shown.current = onScreen;
|
|
114
|
-
const shownAtPress = useRef<string | null | undefined>(undefined);
|
|
115
|
-
|
|
116
|
-
const select = useCallback(
|
|
117
|
-
(panel: string) => {
|
|
118
|
-
const was = shownAtPress.current === undefined ? onScreen : shownAtPress.current;
|
|
119
|
-
shownAtPress.current = undefined;
|
|
120
|
-
if (panel === was) {
|
|
121
|
-
onClosePanel?.();
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
onOpenPanel?.(panel);
|
|
125
|
-
},
|
|
126
|
-
[onScreen, onOpenPanel, onClosePanel],
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
const badges = useMemo<ComposerBadge[]>(
|
|
130
|
-
() =>
|
|
131
|
-
orderComposerBadges(data, order).map(({ panel, opensWork, command, ...badge }) => {
|
|
132
|
-
if (opensWork && sessionId && onOpenRunningWork) {
|
|
133
|
-
return { ...badge, onSelect: () => onOpenRunningWork(sessionId) };
|
|
134
|
-
}
|
|
135
|
-
if (command && runCommand) {
|
|
136
|
-
return {
|
|
137
|
-
...badge,
|
|
138
|
-
onSelect: () => void runCommand(command, sessionId ? { sessionId } : undefined).catch(() => undefined),
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
return panel && onOpenPanel ? { ...badge, active: panel === onScreen, onSelect: () => select(panel) } : badge;
|
|
142
|
-
}),
|
|
143
|
-
[data, order, onScreen, select, sessionId, onOpenRunningWork, onOpenPanel, runCommand],
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
const reorder = useCallback(
|
|
147
|
-
(ids: readonly string[]) => onOrderChange?.((saved) => mergeBadgeOrder(saved, ids)),
|
|
148
|
-
[onOrderChange],
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
return (
|
|
152
|
-
// `contents`: no box of its own in the tray. The capture runs after an ancestor's, before React repaints.
|
|
153
|
-
<div
|
|
154
|
-
className="contents"
|
|
155
|
-
onPointerDownCapture={() => (shownAtPress.current = shown.current)}
|
|
156
|
-
// Gone once the click it was for has run (or never came: a drag), so Enter and Space read the screen.
|
|
157
|
-
onPointerUpCapture={() => setTimeout(() => (shownAtPress.current = undefined))}
|
|
158
|
-
>
|
|
159
|
-
<ComposerBadges
|
|
160
|
-
badges={badges}
|
|
161
|
-
resetKey={sessionId ?? 'draft'}
|
|
162
|
-
{...(onOrderChange ? { onReorder: reorder } : {})}
|
|
163
|
-
{...(className ? { className } : {})}
|
|
164
|
-
{...(style ? { style } : {})}
|
|
165
|
-
/>
|
|
166
|
-
</div>
|
|
167
|
-
);
|
|
168
|
-
});
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Composer dock primitives: the ONE visual grammar for everything that
|
|
3
|
-
* stacks above the prompt (an approval, the select-turn hint). What waits
|
|
4
|
-
* around the conversation (the inbox, todos, the queue, extensions) is a
|
|
5
|
-
* badge in the composer's tray instead (`ConversationBadges`).
|
|
6
|
-
*
|
|
7
|
-
* Alignment contract, measured against the composer card:
|
|
8
|
-
* - `DockCard` is `px-4` (16px): its text column starts exactly where the
|
|
9
|
-
* composer's editor text does (the card's `px-1` + the 12px
|
|
10
|
-
* `--zg-composer-inset`), so a queued message and the prompt below it
|
|
11
|
-
* share an edge. Retune both together.
|
|
12
|
-
* - `DockRow` puts an optional 12px glyph slot first, then `gap-2`, so
|
|
13
|
-
* every glyph-led row (status dot, cursor glyph) lands its text at the
|
|
14
|
-
* same 36px and its glyph on the same 22px center.
|
|
15
|
-
* - Rows are 28px tall minimum; cards are `py-2`; the dock stacks with
|
|
16
|
-
* `gap-2`. A raised card (`.zg-raised`), like the composer's.
|
|
17
|
-
*/
|
|
18
|
-
import type { CSSProperties, ReactNode } from 'react';
|
|
19
|
-
|
|
20
|
-
/** Props for {@link ComposerDock}. */
|
|
21
|
-
export interface ComposerDockProps {
|
|
22
|
-
/** The docked cards; each may render nothing. */
|
|
23
|
-
children: ReactNode;
|
|
24
|
-
/** Extra classes on the dock. */
|
|
25
|
-
className?: string;
|
|
26
|
-
/** Inline styles on the dock. */
|
|
27
|
-
style?: CSSProperties;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* The column above the prompt. `zg-composer-dock` carries `:empty { display:
|
|
32
|
-
* none }` (styles/composer.css): every child renders null on an idle
|
|
33
|
-
* session, and a zero-height flex item would still consume one of the
|
|
34
|
-
* footer column's 8px gaps, pushing the composer down at rest.
|
|
35
|
-
*
|
|
36
|
-
* @param props - The {@link ComposerDockProps}.
|
|
37
|
-
*/
|
|
38
|
-
export function ComposerDock({ children, className, style }: ComposerDockProps) {
|
|
39
|
-
return (
|
|
40
|
-
<div className={`zg-composer-dock flex flex-col gap-2${className ? ` ${className}` : ''}`} style={style}>
|
|
41
|
-
{children}
|
|
42
|
-
</div>
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/** Props for {@link DockCard}. */
|
|
47
|
-
export interface DockCardProps {
|
|
48
|
-
/** The card's content. */
|
|
49
|
-
children: ReactNode;
|
|
50
|
-
/** Extra classes on the card. */
|
|
51
|
-
className?: string;
|
|
52
|
-
/** Inline styles on the card, merged after its own. */
|
|
53
|
-
style?: CSSProperties;
|
|
54
|
-
/** `attention` tints the surface with the warn color, for things awaiting the user. */
|
|
55
|
-
tone?: 'default' | 'attention';
|
|
56
|
-
/** `false` when one full-bleed child (a button) owns the padding and the hover. */
|
|
57
|
-
padded?: boolean;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const ATTENTION: CSSProperties = {
|
|
61
|
-
background: 'color-mix(in srgb, var(--zg-warn) 7%, var(--zg-raised))',
|
|
62
|
-
borderColor: 'color-mix(in srgb, var(--zg-warn) 35%, var(--zg-hairline))',
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* One raised card in the dock.
|
|
67
|
-
*
|
|
68
|
-
* @param props - The {@link DockCardProps}.
|
|
69
|
-
*/
|
|
70
|
-
export function DockCard({ children, className = '', style, tone = 'default', padded = true }: DockCardProps) {
|
|
71
|
-
const toneStyle = tone === 'attention' ? ATTENTION : undefined;
|
|
72
|
-
return (
|
|
73
|
-
<div
|
|
74
|
-
className={`zg-dock-card zg-raised border rounded-zg-lg ${padded ? 'px-4 py-2' : 'overflow-hidden'} ${className}`}
|
|
75
|
-
// Inline: `.zg-raised` paints background and border after the utilities.
|
|
76
|
-
style={style ? { ...toneStyle, ...style } : toneStyle}
|
|
77
|
-
>
|
|
78
|
-
{children}
|
|
79
|
-
</div>
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/** Props for {@link DockRow}. */
|
|
84
|
-
export interface DockRowProps {
|
|
85
|
-
/** Leading glyph in the fixed 12px slot; omit for text flush at the card inset. */
|
|
86
|
-
glyph?: ReactNode;
|
|
87
|
-
/** The row's body. */
|
|
88
|
-
children: ReactNode;
|
|
89
|
-
/** Actions at the end. */
|
|
90
|
-
trailing?: ReactNode;
|
|
91
|
-
/** Extra classes on the row. */
|
|
92
|
-
className?: string;
|
|
93
|
-
/** Inline styles on the row. */
|
|
94
|
-
style?: CSSProperties;
|
|
95
|
-
/**
|
|
96
|
-
* `start` pins the glyph and trailing actions to the first 28px line of a
|
|
97
|
-
* tall body (an inline editor) instead of floating them at its middle.
|
|
98
|
-
*/
|
|
99
|
-
align?: 'center' | 'start';
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* One line of a dock card: glyph, body, actions.
|
|
104
|
-
*
|
|
105
|
-
* @param props - The {@link DockRowProps}.
|
|
106
|
-
*/
|
|
107
|
-
export function DockRow({ glyph, children, trailing, className = '', style, align = 'center' }: DockRowProps) {
|
|
108
|
-
const side = align === 'start' ? 'h-7' : '';
|
|
109
|
-
return (
|
|
110
|
-
<div
|
|
111
|
-
className={`flex ${align === 'start' ? 'items-start' : 'items-center'} gap-2 min-h-7 text-xs ${className}`}
|
|
112
|
-
style={style}
|
|
113
|
-
>
|
|
114
|
-
{glyph !== undefined && (
|
|
115
|
-
<span
|
|
116
|
-
aria-hidden
|
|
117
|
-
className={`w-3 shrink-0 inline-flex items-center justify-center text-[var(--zg-text-muted)] ${side}`}
|
|
118
|
-
>
|
|
119
|
-
{glyph}
|
|
120
|
-
</span>
|
|
121
|
-
)}
|
|
122
|
-
<div className="flex-1 min-w-0">{children}</div>
|
|
123
|
-
{trailing && <div className={`shrink-0 inline-flex items-center gap-1 ${side}`}>{trailing}</div>}
|
|
124
|
-
</div>
|
|
125
|
-
);
|
|
126
|
-
}
|
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The model options dialog: the keyboard-shortcut surface for the active
|
|
3
|
-
* session's model knobs, on the app's modal layer. Unifies two things:
|
|
4
|
-
* 1. Reasoning effort (`off / minimal / low / medium / high / xhigh / max / adaptive`),
|
|
5
|
-
* threaded into `agent.run({ thinking })`. Single-select; applying closes.
|
|
6
|
-
* 2. Feature toggles (e.g. fast mode), threaded into
|
|
7
|
-
* `agent.run({ modelOptions })`. Independent booleans; toggling keeps the
|
|
8
|
-
* modal open.
|
|
9
|
-
*
|
|
10
|
-
* Mirrors the TUI's `ModelOptionsPickerModal` and the composer's options pill
|
|
11
|
-
* (`ModelOptionsPicker`). A level that would re-read a long prompt says so
|
|
12
|
-
* (`useCacheHints`). Sections render only when the model exposes them, so a
|
|
13
|
-
* model with no reasoning and no options never opens this (the caller gates
|
|
14
|
-
* the shortcut). Needs a `ModalProvider` (`zidane-ui/app`).
|
|
15
|
-
*/
|
|
16
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
17
|
-
|
|
18
|
-
import { ModalShell, useModal } from '../../app/ModalProvider';
|
|
19
|
-
import { MenuRow } from '../../components/Menu';
|
|
20
|
-
import { SectionLabel } from '../../components/Surface';
|
|
21
|
-
import type { ComposerEffort, ComposerSessionView } from '../headless/composer/host-chrome';
|
|
22
|
-
import type { ComposerModelOption } from '../headless/composer/models';
|
|
23
|
-
import { useComposerLabels } from './ComposerHostProvider';
|
|
24
|
-
import { EFFORT_LEVELS, OPTION_ICON } from './ModelOptionsPicker';
|
|
25
|
-
import { useCacheHints } from './use-cache-hints';
|
|
26
|
-
|
|
27
|
-
type ThinkingLevel = ComposerEffort;
|
|
28
|
-
type ModelOptionSummary = ComposerModelOption;
|
|
29
|
-
|
|
30
|
-
/** Props for {@link EffortPickerDialog}. */
|
|
31
|
-
export interface EffortPickerDialogProps {
|
|
32
|
-
/** The session whose knobs are set. */
|
|
33
|
-
session: ComposerSessionView;
|
|
34
|
-
/** Whether the active model exposes a reasoning knob (effort section). */
|
|
35
|
-
supportsReasoning: boolean;
|
|
36
|
-
/** Feature options the active model declares (toggle section). */
|
|
37
|
-
options: readonly ModelOptionSummary[];
|
|
38
|
-
/** Currently-enabled option ids. */
|
|
39
|
-
enabled: Record<string, boolean>;
|
|
40
|
-
/** Applies an effort (the dialog closes once it settles). */
|
|
41
|
-
onApplyEffort: (effort: ThinkingLevel) => Promise<void> | void;
|
|
42
|
-
/** Applies the enabled options after a toggle (the dialog stays open). */
|
|
43
|
-
onToggleOption: (next: Record<string, boolean>) => Promise<void> | void;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/** Flat row model so ↑/↓ traverses both sections as one cursor. */
|
|
47
|
-
type Row = { kind: 'effort'; effort: (typeof EFFORT_LEVELS)[number] } | { kind: 'option'; option: ModelOptionSummary };
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* The model options dialog (see the header).
|
|
51
|
-
*
|
|
52
|
-
* @param props - The {@link EffortPickerDialogProps}.
|
|
53
|
-
*/
|
|
54
|
-
export function EffortPickerDialog({
|
|
55
|
-
session,
|
|
56
|
-
supportsReasoning,
|
|
57
|
-
options,
|
|
58
|
-
enabled,
|
|
59
|
-
onApplyEffort,
|
|
60
|
-
onToggleOption,
|
|
61
|
-
}: EffortPickerDialogProps) {
|
|
62
|
-
const modal = useModal();
|
|
63
|
-
const labels = useComposerLabels();
|
|
64
|
-
const currentEffort = session.effort ?? 'medium';
|
|
65
|
-
const [local, setLocal] = useState<Record<string, boolean>>(enabled);
|
|
66
|
-
const cacheHint = useCacheHints(session.id);
|
|
67
|
-
|
|
68
|
-
const rows = useMemo<Row[]>(() => {
|
|
69
|
-
const out: Row[] = [];
|
|
70
|
-
if (supportsReasoning) {
|
|
71
|
-
for (const effort of EFFORT_LEVELS) out.push({ kind: 'effort', effort });
|
|
72
|
-
}
|
|
73
|
-
for (const option of options) out.push({ kind: 'option', option });
|
|
74
|
-
return out;
|
|
75
|
-
}, [supportsReasoning, options]);
|
|
76
|
-
|
|
77
|
-
const initialCursor = Math.max(
|
|
78
|
-
0,
|
|
79
|
-
rows.findIndex((r) => r.kind === 'effort' && r.effort === currentEffort),
|
|
80
|
-
);
|
|
81
|
-
const [cursor, setCursor] = useState<number>(initialCursor);
|
|
82
|
-
|
|
83
|
-
const applyEffort = useCallback(
|
|
84
|
-
async (level: ThinkingLevel) => {
|
|
85
|
-
await onApplyEffort(level);
|
|
86
|
-
modal.close();
|
|
87
|
-
},
|
|
88
|
-
[onApplyEffort, modal],
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
const toggle = useCallback(
|
|
92
|
-
async (id: string) => {
|
|
93
|
-
const next = { ...local, [id]: !local[id] };
|
|
94
|
-
setLocal(next);
|
|
95
|
-
await onToggleOption(next);
|
|
96
|
-
},
|
|
97
|
-
[local, onToggleOption],
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
const activate = useCallback(
|
|
101
|
-
(row: Row | undefined) => {
|
|
102
|
-
if (!row) return;
|
|
103
|
-
if (row.kind === 'effort') void applyEffort(row.effort);
|
|
104
|
-
else void toggle(row.option.id);
|
|
105
|
-
},
|
|
106
|
-
[applyEffort, toggle],
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
useEffect(() => {
|
|
110
|
-
const onKey = (e: KeyboardEvent) => {
|
|
111
|
-
if (e.key === 'ArrowDown') {
|
|
112
|
-
e.preventDefault();
|
|
113
|
-
setCursor((c) => Math.min(rows.length - 1, c + 1));
|
|
114
|
-
} else if (e.key === 'ArrowUp') {
|
|
115
|
-
e.preventDefault();
|
|
116
|
-
setCursor((c) => Math.max(0, c - 1));
|
|
117
|
-
} else if (e.key === 'Enter' || e.key === ' ') {
|
|
118
|
-
e.preventDefault();
|
|
119
|
-
activate(rows[cursor]);
|
|
120
|
-
}
|
|
121
|
-
};
|
|
122
|
-
document.addEventListener('keydown', onKey);
|
|
123
|
-
return () => document.removeEventListener('keydown', onKey);
|
|
124
|
-
}, [cursor, rows, activate]);
|
|
125
|
-
|
|
126
|
-
const firstOptionIdx = rows.findIndex((r) => r.kind === 'option');
|
|
127
|
-
|
|
128
|
-
return (
|
|
129
|
-
<ModalShell
|
|
130
|
-
title={labels.effortDialogTitle}
|
|
131
|
-
description={labels.effortDialogDescription(session.title ?? '')}
|
|
132
|
-
onClose={modal.close}
|
|
133
|
-
size="medium"
|
|
134
|
-
>
|
|
135
|
-
<div className="flex flex-col">
|
|
136
|
-
{supportsReasoning && <SectionLabel className="px-2 pb-1">{labels.effortDialogReasoning}</SectionLabel>}
|
|
137
|
-
<ul className="flex flex-col gap-0.5 list-none m-0 p-0">
|
|
138
|
-
{rows.map((row, idx) => {
|
|
139
|
-
const isCursor = idx === cursor;
|
|
140
|
-
if (row.kind === 'effort') {
|
|
141
|
-
const isCurrent = row.effort === currentEffort;
|
|
142
|
-
const hint = isCurrent ? undefined : cacheHint(row.effort, { effort: row.effort });
|
|
143
|
-
return (
|
|
144
|
-
<li key={`effort:${row.effort}`}>
|
|
145
|
-
<MenuRow
|
|
146
|
-
onMouseEnter={() => setCursor(idx)}
|
|
147
|
-
onClick={() => void applyEffort(row.effort)}
|
|
148
|
-
active={isCursor}
|
|
149
|
-
role="menuitemradio"
|
|
150
|
-
checked={isCurrent}
|
|
151
|
-
title={row.effort}
|
|
152
|
-
trailing={hint ? <span className="zg-meta">{hint}</span> : undefined}
|
|
153
|
-
/>
|
|
154
|
-
</li>
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
const isOn = local[row.option.id] === true;
|
|
159
|
-
return (
|
|
160
|
-
<li key={`option:${row.option.id}`}>
|
|
161
|
-
{idx === firstOptionIdx && (
|
|
162
|
-
<SectionLabel className="px-2 pt-3 pb-1">{labels.effortDialogFeatures}</SectionLabel>
|
|
163
|
-
)}
|
|
164
|
-
<MenuRow
|
|
165
|
-
size={row.option.description ? 'lg' : 'md'}
|
|
166
|
-
onMouseEnter={() => setCursor(idx)}
|
|
167
|
-
onClick={() => void toggle(row.option.id)}
|
|
168
|
-
active={isCursor}
|
|
169
|
-
role="menuitemcheckbox"
|
|
170
|
-
toggle={isOn}
|
|
171
|
-
icon={
|
|
172
|
-
OPTION_ICON[row.option.id] ? <span aria-hidden className={OPTION_ICON[row.option.id]} /> : undefined
|
|
173
|
-
}
|
|
174
|
-
title={row.option.label}
|
|
175
|
-
description={row.option.description}
|
|
176
|
-
/>
|
|
177
|
-
</li>
|
|
178
|
-
);
|
|
179
|
-
})}
|
|
180
|
-
</ul>
|
|
181
|
-
</div>
|
|
182
|
-
</ModalShell>
|
|
183
|
-
);
|
|
184
|
-
}
|