zidane-ui 9.0.4 → 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 +3 -1
- package/dist/adapters/extension-modules.d.ts +147 -0
- package/dist/adapters/extension-modules.js +244 -0
- package/dist/adapters/index.d.ts +3 -1
- package/dist/adapters/index.js +3 -1
- package/dist/adapters/live.d.ts +6 -0
- package/dist/adapters/live.js +33 -3
- package/dist/adapters/server-composer-host.js +20 -37
- package/dist/adapters/server-extensions-host.d.ts +113 -0
- package/dist/adapters/server-extensions-host.js +829 -0
- package/dist/adapters/server-host.js +28 -6
- package/dist/adapters/server-machines-host.js +1 -1
- package/dist/adapters/server-settings-host.js +1 -1
- package/dist/adapters/server-settings-sections.js +36 -13
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/AppHostProvider.d.ts +4 -1
- package/dist/app/AppHostProvider.js +11 -4
- package/dist/app/ModalProvider.d.ts +9 -3
- package/dist/app/ModalProvider.js +45 -25
- package/dist/app/headless/app-host.d.ts +3 -0
- package/dist/appearance/AppearanceProvider.d.ts +11 -4
- package/dist/appearance/AppearanceProvider.js +18 -6
- package/dist/appearance/headless/index.js +1 -1
- package/dist/appearance/headless/prefs.d.ts +2 -2
- package/dist/appearance/index.d.ts +1 -1
- package/dist/approvals/ApprovalBar.js +7 -1
- package/dist/approvals/FileEditApproval.js +7 -3
- package/dist/approvals/headless/index.js +2 -2
- package/dist/approvals/headless/labels.js +3 -3
- package/dist/chat/HostBadge.js +1 -1
- package/dist/chat/HostStatusDot.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/RunEstimateChip.d.ts +53 -0
- package/dist/chat/RunEstimateChip.js +116 -0
- package/dist/chat/SessionFilterMenu.d.ts +77 -5
- package/dist/chat/SessionFilterMenu.js +86 -4
- package/dist/chat/SessionGroupHeader.d.ts +6 -2
- package/dist/chat/SessionGroupHeader.js +35 -3
- package/dist/chat/SessionHostHeader.js +1 -1
- package/dist/chat/SessionList.js +1 -1
- package/dist/chat/SessionListRow.d.ts +8 -1
- package/dist/chat/SessionListRow.js +5 -4
- package/dist/chat/Throbber.js +0 -3
- package/dist/chat/Transcript.d.ts +1 -1
- package/dist/chat/Transcript.js +112 -57
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/ConversationBadges.js +18 -11
- package/dist/chat/composer/HostPicker.js +1 -1
- package/dist/chat/composer/ProjectMenu.d.ts +8 -1
- package/dist/chat/composer/ProjectMenu.js +11 -8
- package/dist/chat/composer/RetryPill.js +1 -1
- package/dist/chat/composer/SelectTurnHint.d.ts +19 -0
- package/dist/chat/composer/SelectTurnHint.js +28 -0
- package/dist/chat/composer/ServerScopeToggle.js +4 -1
- package/dist/chat/composer/composer-bus.d.ts +8 -1
- package/dist/chat/composer/composer-bus.js +10 -1
- package/dist/chat/composer/index.d.ts +4 -4
- package/dist/chat/composer/index.js +3 -3
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/composer/use-draft-target.d.ts +19 -1
- package/dist/chat/composer/use-draft-target.js +14 -1
- package/dist/chat/composer/use-run-meter.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/chip-labels.d.ts +1 -0
- package/dist/chat/headless/chip-labels.js +1 -0
- package/dist/chat/headless/composer/conversation-badges.d.ts +8 -6
- package/dist/chat/headless/composer/conversation-badges.js +26 -24
- package/dist/chat/headless/composer/host-chrome.d.ts +2 -27
- package/dist/chat/headless/composer/host.d.ts +1 -3
- package/dist/chat/headless/composer/index.d.ts +3 -4
- package/dist/chat/headless/composer/index.js +5 -6
- package/dist/chat/headless/composer/labels-chrome.d.ts +1 -1
- package/dist/chat/headless/composer/labels-chrome.js +1 -1
- package/dist/chat/headless/extension-sources.d.ts +17 -0
- package/dist/chat/headless/extension-sources.js +52 -0
- 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 +8 -0
- package/dist/chat/headless/hosts.d.ts +2 -0
- package/dist/chat/headless/index.d.ts +10 -8
- package/dist/chat/headless/index.js +21 -18
- package/dist/chat/headless/labels.d.ts +79 -1
- package/dist/chat/headless/labels.js +80 -3
- package/dist/chat/headless/session-list.d.ts +65 -2
- package/dist/chat/headless/session-list.js +10 -2
- package/dist/chat/headless/sidebar/badges.d.ts +2 -0
- package/dist/chat/headless/sidebar/badges.js +20 -1
- package/dist/chat/headless/sidebar/directory.d.ts +46 -6
- package/dist/chat/headless/sidebar/directory.js +198 -22
- package/dist/chat/headless/sidebar/estimates.d.ts +55 -0
- package/dist/chat/headless/sidebar/estimates.js +91 -0
- package/dist/chat/headless/sidebar/index.d.ts +6 -4
- package/dist/chat/headless/sidebar/index.js +6 -3
- package/dist/chat/headless/sidebar/labels.d.ts +71 -1
- package/dist/chat/headless/sidebar/labels.js +17 -0
- package/dist/chat/headless/sidebar/query.d.ts +276 -0
- package/dist/chat/headless/sidebar/query.js +450 -0
- package/dist/chat/headless/sidebar/rows.d.ts +104 -13
- package/dist/chat/headless/sidebar/rows.js +189 -5
- package/dist/chat/headless/sidebar/types.d.ts +37 -4
- package/dist/chat/headless/sidebar/types.js +8 -0
- package/dist/chat/headless/sidebar/view.d.ts +25 -1
- package/dist/chat/headless/sidebar/view.js +56 -3
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +6 -0
- 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 +22 -3
- package/dist/chat/headless/transcript/fold-attachments.js +1 -1
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/rows.d.ts +15 -1
- package/dist/chat/headless/transcript-labels.d.ts +1 -0
- package/dist/chat/index.d.ts +14 -6
- package/dist/chat/index.js +40 -32
- package/dist/chat/rich-composer/RichComposer.js +32 -1
- package/dist/chat/rich-composer/badge-decorations.js +1 -1
- package/dist/chat/rich-composer/use-extension-composer.d.ts +32 -0
- package/dist/chat/rich-composer/use-extension-composer.js +46 -0
- package/dist/chat/sidebar/MainSessionRow.js +1 -1
- package/dist/chat/sidebar/ProjectIcon.d.ts +25 -6
- package/dist/chat/sidebar/ProjectIcon.js +79 -34
- package/dist/chat/sidebar/SessionSidebar.d.ts +34 -1
- package/dist/chat/sidebar/SessionSidebar.js +161 -25
- package/dist/chat/sidebar/SidebarDecoration.d.ts +38 -0
- package/dist/chat/sidebar/SidebarDecoration.js +61 -0
- package/dist/chat/sidebar/SidebarFilterMenu.d.ts +15 -2
- package/dist/chat/sidebar/SidebarFilterMenu.js +226 -8
- package/dist/chat/sidebar/SidebarFooter.d.ts +3 -1
- package/dist/chat/sidebar/SidebarFooter.js +17 -4
- package/dist/chat/sidebar/SidebarGroupHeader.d.ts +17 -4
- package/dist/chat/sidebar/SidebarGroupHeader.js +23 -4
- package/dist/chat/sidebar/SidebarRowView.d.ts +30 -0
- package/dist/chat/sidebar/SidebarRowView.js +117 -0
- package/dist/chat/sidebar/SidebarSessionRow.d.ts +4 -1
- package/dist/chat/sidebar/SidebarSessionRow.js +22 -4
- package/dist/chat/sidebar/SpaceSwitcher.d.ts +12 -5
- package/dist/chat/sidebar/SpaceSwitcher.js +142 -49
- package/dist/chat/sidebar/SpacesSection.js +4 -2
- package/dist/chat/sidebar/collapsed.d.ts +24 -0
- package/dist/chat/sidebar/collapsed.js +44 -0
- package/dist/chat/sidebar/index.d.ts +8 -4
- package/dist/chat/sidebar/index.js +6 -2
- package/dist/chat/sidebar/session-menu.d.ts +2 -0
- package/dist/chat/sidebar/session-menu.js +8 -2
- package/dist/chat/sidebar/sidebar-live.d.ts +12 -1
- package/dist/chat/sidebar/sidebar-live.js +57 -17
- package/dist/chat/sidebar/useAgentNames.d.ts +8 -0
- package/dist/chat/sidebar/useAgentNames.js +13 -0
- package/dist/chat/sidebar/useSaveViewAsSpace.d.ts +13 -0
- package/dist/chat/sidebar/useSaveViewAsSpace.js +44 -0
- package/dist/chat/sidebar/useSessionDirectoryView.d.ts +4 -1
- package/dist/chat/sidebar/useSessionDirectoryView.js +46 -12
- package/dist/chat/sidebar/useSidebarKeyboardNav.js +3 -1
- package/dist/chat/testing/composer.contract.d.ts +2 -6
- package/dist/chat/testing/composer.contract.js +2 -31
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/testing/fixture-composer-chrome.d.ts +2 -6
- package/dist/chat/testing/fixture-composer-chrome.js +1 -17
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/BadgeMenu.d.ts +2 -0
- package/dist/chat/transcript/BadgeMenu.js +22 -6
- package/dist/chat/transcript/CardMarkdown.js +17 -5
- package/dist/chat/transcript/ChipCard.js +6 -0
- package/dist/chat/transcript/ChipCards.js +2 -2
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/EditDiffBlock.js +4 -1
- package/dist/chat/transcript/FileChip.js +20 -7
- package/dist/chat/transcript/InlineChipText.js +1 -1
- package/dist/chat/transcript/InteractionToolBody.js +32 -13
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/MermaidDiagram.d.ts +22 -0
- package/dist/chat/transcript/MermaidDiagram.js +410 -0
- package/dist/chat/transcript/PromptEcho.js +5 -5
- package/dist/chat/transcript/ProseMarkdown.js +9 -6
- package/dist/chat/transcript/ReferenceText.js +7 -2
- package/dist/chat/transcript/SelectTurnHint.js +1 -1
- package/dist/chat/transcript/SubagentBlock.d.ts +4 -2
- package/dist/chat/transcript/SubagentBlock.js +5 -2
- package/dist/chat/transcript/TranscriptRow.js +28 -6
- package/dist/chat/transcript/TranscriptSearch.js +1 -1
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/badges.js +5 -2
- package/dist/chat/transcript/extension-renderers.d.ts +36 -0
- package/dist/chat/transcript/extension-renderers.js +133 -0
- package/dist/chat/transcript/fold-worker.js +2 -2
- package/dist/chat/transcript/fold.js +6 -4
- package/dist/chat/transcript/index.d.ts +8 -2
- package/dist/chat/transcript/index.js +35 -29
- package/dist/chat/transcript/markdown-cache.js +16 -7
- package/dist/chat/transcript/markdown.d.ts +15 -1
- package/dist/chat/transcript/markdown.js +71 -6
- package/dist/chat/transcript/messages.js +3 -2
- package/dist/chat/transcript/notices.js +1 -1
- package/dist/chat/transcript/prompt.js +1 -1
- package/dist/chat/transcript/prose.js +1 -1
- package/dist/chat/transcript/recent-map.d.ts +20 -0
- package/dist/chat/transcript/recent-map.js +22 -0
- package/dist/chat/transcript/references.js +7 -3
- package/dist/chat/transcript/renderers.d.ts +11 -1
- package/dist/chat/transcript/renderers.js +14 -4
- 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-batch.js +4 -9
- package/dist/chat/transcript/tool-details.js +7 -67
- 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.d.ts +21 -0
- package/dist/chat/transcript/tool-payload.js +80 -0
- package/dist/chat/transcript/tool-row.js +158 -96
- package/dist/chat/transcript/useTranscriptScroll.js +3 -2
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/chat/transcript-options.d.ts +15 -0
- package/dist/chat/transcript-options.js +40 -0
- package/dist/code/CodeHighlightProvider.d.ts +3 -3
- package/dist/code/CodeHighlightProvider.js +4 -4
- package/dist/code/HighlightedCode.d.ts +7 -2
- package/dist/code/HighlightedCode.js +7 -71
- package/dist/code/code-themes.d.ts +13 -6
- package/dist/code/code-themes.js +385 -13
- package/dist/code/editor/CodeHover.d.ts +5 -4
- package/dist/code/editor/CodeHover.js +20 -16
- package/dist/code/editor/HighlightWorkers.js +2 -2
- package/dist/code/editor/edit-session.js +1 -0
- package/dist/code/editor/environment.d.ts +1 -1
- package/dist/code/editor/environment.js +1 -1
- package/dist/code/editor/index.d.ts +2 -2
- package/dist/code/editor/index.js +2 -2
- package/dist/code/editor/pierre-theme.d.ts +5 -5
- package/dist/code/editor/pierre-theme.js +6 -5
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/highlight.worker.js +2 -14
- package/dist/code/highlighter.d.ts +24 -9
- package/dist/code/highlighter.js +1 -4
- package/dist/code/highlights.d.ts +12 -0
- package/dist/code/highlights.js +47 -0
- package/dist/code/mermaid-lexer.d.ts +26 -0
- package/dist/code/mermaid-lexer.js +303 -0
- package/dist/code/shiki-theme.d.ts +6 -6
- package/dist/code/shiki-theme.js +3 -3
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/components/BrandMark.d.ts +6 -4
- package/dist/components/BrandMark.js +5 -2
- package/dist/components/CodeFrame.d.ts +5 -0
- package/dist/components/CodeFrame.js +27 -23
- package/dist/components/Form.js +1 -1
- package/dist/core.css +82 -11
- package/dist/dist/{index-Cx7GDZlz.d.ts → index-WlE93Q6d.d.ts} +255 -51
- package/dist/extensions/ExtensionComponent.d.ts +62 -0
- package/dist/extensions/ExtensionComponent.js +120 -0
- package/dist/extensions/ExtensionDialogHost.d.ts +31 -0
- package/dist/extensions/ExtensionDialogHost.js +439 -0
- package/dist/extensions/ExtensionRenderer.d.ts +30 -0
- package/dist/extensions/ExtensionRenderer.js +78 -0
- package/dist/extensions/ExtensionScreen.d.ts +24 -0
- package/dist/extensions/ExtensionScreen.js +120 -0
- package/dist/extensions/ExtensionSettingsPage.d.ts +19 -0
- package/dist/extensions/ExtensionSettingsPage.js +116 -0
- package/dist/extensions/ExtensionSettingsPages.d.ts +17 -0
- package/dist/extensions/ExtensionSettingsPages.js +33 -0
- package/dist/extensions/ExtensionSettingsSidebar.d.ts +63 -0
- package/dist/extensions/ExtensionSettingsSidebar.js +360 -0
- package/dist/extensions/ExtensionSlot.d.ts +44 -0
- package/dist/extensions/ExtensionSlot.js +161 -0
- package/dist/extensions/ExtensionWebview.d.ts +32 -0
- package/dist/extensions/ExtensionWebview.js +80 -0
- package/dist/extensions/ExtensionsProvider.d.ts +42 -0
- package/dist/extensions/ExtensionsProvider.js +104 -0
- package/dist/extensions/SettingsWireForm.d.ts +44 -0
- package/dist/extensions/SettingsWireForm.js +104 -0
- package/dist/extensions/headless/dialog-queue.d.ts +27 -0
- package/dist/extensions/headless/dialog-queue.js +68 -0
- package/dist/extensions/headless/effect-channel.d.ts +15 -0
- package/dist/extensions/headless/effect-channel.js +33 -0
- package/dist/extensions/headless/effect-router.d.ts +34 -0
- package/dist/extensions/headless/effect-router.js +50 -0
- package/dist/extensions/headless/fixture-host.d.ts +110 -0
- package/dist/extensions/headless/fixture-host.js +258 -0
- package/dist/extensions/headless/host.d.ts +433 -0
- package/dist/extensions/headless/host.js +27 -0
- package/dist/extensions/headless/index.d.ts +10 -0
- package/dist/extensions/headless/index.js +10 -0
- package/dist/extensions/headless/labels.d.ts +45 -0
- package/dist/extensions/headless/labels.js +49 -0
- package/dist/extensions/headless/links.d.ts +30 -0
- package/dist/extensions/headless/links.js +34 -0
- package/dist/extensions/headless/select.d.ts +120 -0
- package/dist/extensions/headless/select.js +191 -0
- package/dist/extensions/headless/webview-bridge.d.ts +71 -0
- package/dist/extensions/headless/webview-bridge.js +78 -0
- package/dist/extensions/headless/wire.d.ts +113 -0
- package/dist/extensions/headless/wire.js +38 -0
- package/dist/extensions/hooks.d.ts +88 -0
- package/dist/extensions/hooks.js +151 -0
- package/dist/extensions/index.d.ts +15 -0
- package/dist/extensions/index.js +15 -0
- package/dist/extensions/kit.d.ts +19 -0
- package/dist/extensions/kit.js +19 -0
- package/dist/extensions/links.d.ts +79 -0
- package/dist/extensions/links.js +94 -0
- package/dist/extensions/testing/contract.d.ts +80 -0
- package/dist/extensions/testing/contract.js +407 -0
- package/dist/extensions/testing/index.d.ts +2 -0
- package/dist/extensions/testing/index.js +1 -0
- package/dist/extensions/useExtensionsLabels.d.ts +6 -0
- package/dist/extensions/useExtensionsLabels.js +18 -0
- package/dist/files/DiffsTab.js +7 -19
- package/dist/files/EditorColumn.js +1 -1
- package/dist/files/EditorEnvironmentRoot.d.ts +15 -0
- package/dist/files/EditorEnvironmentRoot.js +55 -0
- package/dist/files/MediaDiff.js +1 -1
- package/dist/files/drafts-store.d.ts +10 -0
- package/dist/files/drafts-store.js +30 -1
- package/dist/files/headless/lsp-edits.d.ts +4 -1
- package/dist/files/headless/lsp-edits.js +14 -2
- package/dist/files/index.d.ts +2 -1
- package/dist/files/index.js +2 -1
- package/dist/files/session-patch.d.ts +11 -0
- package/dist/files/session-patch.js +44 -0
- package/dist/files/useEntryActions.js +1 -1
- package/dist/files/useLsp.js +5 -2
- package/dist/files/useOpenFiles.js +1 -1
- package/dist/git/BranchMenu.d.ts +1 -5
- package/dist/git/BranchMenu.js +23 -39
- package/dist/git/GitBar.d.ts +1 -1
- package/dist/git/GitBar.js +7 -1
- package/dist/git/ImportRepoDialog.d.ts +3 -1
- package/dist/git/ImportRepoDialog.js +8 -6
- package/dist/git/MoveSessionDialog.js +3 -1
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/hooks/useDisplayPath.d.ts +40 -0
- package/dist/hooks/useDisplayPath.js +75 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +4 -2
- package/dist/keybindings/KeyCommands.js +1 -1
- package/dist/keybindings/KeybindingsProvider.js +1 -1
- package/dist/keybindings/headless/index.js +2 -2
- package/dist/keybindings/headless/overrides.js +1 -1
- package/dist/keybindings/index.d.ts +2 -1
- package/dist/keybindings/index.js +2 -1
- package/dist/keybindings/press.d.ts +27 -0
- package/dist/keybindings/press.js +67 -0
- package/dist/machines/Banners.js +1 -1
- package/dist/machines/HostSyncPanel.js +1 -1
- package/dist/machines/HostsSection.js +1 -1
- package/dist/machines/SyncOutcomeBadge.js +1 -1
- package/dist/machines/headless/index.js +1 -1
- package/dist/machines/headless/labels.d.ts +1 -0
- package/dist/machines/headless/labels.js +1 -0
- package/dist/machines/headless/messages.d.ts +2 -1
- package/dist/machines/headless/messages.js +4 -3
- package/dist/machines/settings-section.d.ts +1 -1
- package/dist/onboarding/conversation.js +21 -3
- package/dist/onboarding/demos/features.d.ts +5 -1
- package/dist/onboarding/demos/features.js +80 -1
- package/dist/onboarding/headless/fixture-host.d.ts +2 -2
- package/dist/onboarding/headless/host.d.ts +2 -2
- package/dist/onboarding/headless/labels.d.ts +2 -0
- package/dist/onboarding/headless/labels.js +2 -0
- package/dist/onboarding/index.d.ts +4 -2
- package/dist/onboarding/index.js +3 -2
- package/dist/onboarding/marks.d.ts +29 -7
- package/dist/onboarding/marks.js +38 -12
- package/dist/onboarding/skills/SkillSourceBrowser.js +56 -247
- package/dist/onboarding/skills/parts.d.ts +31 -4
- package/dist/onboarding/skills/parts.js +8 -11
- package/dist/onboarding/sources/SourceBrowser.d.ts +87 -0
- package/dist/onboarding/sources/SourceBrowser.js +292 -0
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ConnectorsStep.js +3 -3
- package/dist/onboarding/steps/ConversationStep.js +2 -1
- package/dist/onboarding/steps/ExtensionsStep.js +2 -2
- package/dist/onboarding/steps/ReadyStep.js +2 -2
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/palette/app-sources.js +1 -1
- package/dist/path.d.ts +24 -2
- package/dist/path.js +34 -2
- package/dist/session/ArtifactRowChips.js +11 -2
- package/dist/session/ArtifactsPanel.d.ts +2 -0
- package/dist/session/ArtifactsPanel.js +67 -27
- package/dist/session/ProjectHome.d.ts +82 -0
- package/dist/session/ProjectHome.js +518 -0
- package/dist/session/ProviderUsageProvider.d.ts +3 -1
- package/dist/session/ProviderUsageProvider.js +5 -2
- package/dist/session/QueueTab.js +1 -1
- package/dist/session/SessionCacheFacts.js +1 -1
- package/dist/session/SessionDetailsDialog.d.ts +1 -1
- package/dist/session/SessionDetailsDialog.js +5 -2
- package/dist/session/SessionHeader.d.ts +3 -1
- package/dist/session/SessionHeader.js +7 -1
- package/dist/session/SideChat.js +2 -2
- package/dist/session/TodosPanel.js +4 -1
- package/dist/session/UsagePanel.js +139 -17
- package/dist/session/WelcomeScreen.d.ts +1 -1
- package/dist/session/WelcomeScreen.js +46 -502
- package/dist/session/headless/fixture-host.js +43 -1
- package/dist/session/headless/home-layout.d.ts +137 -0
- package/dist/session/headless/home-layout.js +235 -0
- package/dist/session/headless/host.d.ts +3 -1
- package/dist/session/headless/index.d.ts +4 -3
- package/dist/session/headless/index.js +4 -3
- package/dist/session/headless/labels.d.ts +33 -36
- package/dist/session/headless/labels.js +48 -47
- package/dist/session/headless/usage-format.d.ts +2 -92
- package/dist/session/headless/usage-format.js +2 -181
- package/dist/session/headless/usage.d.ts +15 -2
- package/dist/session/headless/usage.js +15 -1
- package/dist/session/index.d.ts +3 -1
- package/dist/session/index.js +4 -2
- package/dist/session/modal-shell.d.ts +8 -0
- package/dist/session/modal-shell.js +18 -0
- package/dist/session/testing/contract.d.ts +1 -1
- package/dist/session/testing/contract.js +16 -0
- package/dist/session/testing/demo.js +28 -4
- package/dist/settings/SettingsNav.d.ts +3 -2
- package/dist/settings/SettingsNav.js +86 -13
- package/dist/settings/SettingsRowsPage.d.ts +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +16 -9
- package/dist/settings/headless/catalog.js +20 -0
- package/dist/settings/headless/fixture-sections.d.ts +10 -1
- package/dist/settings/headless/fixture-sections.js +88 -3
- package/dist/settings/headless/host.d.ts +2 -0
- package/dist/settings/headless/index.d.ts +4 -4
- package/dist/settings/headless/index.js +1 -1
- package/dist/settings/headless/layout.d.ts +8 -4
- package/dist/settings/headless/layout.js +22 -16
- package/dist/settings/headless/registry.d.ts +14 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/headless/sections-host.d.ts +36 -3
- package/dist/settings/index.d.ts +5 -3
- package/dist/settings/index.js +8 -6
- package/dist/settings/sections/appearance/AppearanceSection.js +4 -4
- package/dist/settings/sections/claude-import/ClaudeImportDialog.js +1 -1
- package/dist/settings/sections/editor/EditorSection.js +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ChangeOriginDialog.d.ts +48 -0
- package/dist/settings/sections/extensions/ChangeOriginDialog.js +181 -0
- package/dist/settings/sections/extensions/CreateExtensionDialog.js +5 -2
- package/dist/settings/sections/extensions/ExtensionConfigRows.d.ts +76 -0
- package/dist/settings/sections/extensions/ExtensionConfigRows.js +349 -0
- package/dist/settings/sections/extensions/ExtensionOptionsSection.d.ts +1 -4
- package/dist/settings/sections/extensions/ExtensionOptionsSection.js +23 -286
- package/dist/settings/sections/extensions/ExtensionPicksBar.d.ts +46 -0
- package/dist/settings/sections/extensions/ExtensionPicksBar.js +102 -0
- package/dist/settings/sections/extensions/ExtensionSourceBrowser.d.ts +50 -0
- package/dist/settings/sections/extensions/ExtensionSourceBrowser.js +164 -0
- package/dist/settings/sections/extensions/ExtensionsSection.d.ts +6 -2
- package/dist/settings/sections/extensions/ExtensionsSection.js +233 -42
- package/dist/settings/sections/extensions/labels.d.ts +26 -5
- package/dist/settings/sections/extensions/labels.js +28 -3
- package/dist/settings/sections/extensions/options-labels.d.ts +2 -0
- package/dist/settings/sections/extensions/options-labels.js +2 -0
- package/dist/settings/sections/host-catalog/HostCatalogSection.js +104 -30
- package/dist/settings/sections/host-catalog/labels.js +4 -2
- package/dist/settings/sections/index.d.ts +5 -3
- package/dist/settings/sections/index.js +8 -6
- package/dist/settings/sections/instructions/InstructionsSection.js +7 -4
- package/dist/settings/sections/mcp/McpSection.js +1 -1
- package/dist/settings/sections/mcp/McpServerRow.js +3 -2
- package/dist/settings/sections/models/AgentDefaults.js +1 -1
- package/dist/settings/sections/models/ModelPickField.js +1 -1
- package/dist/settings/sections/models/ModelRows.js +3 -3
- package/dist/settings/sections/plugins/PluginsSection.js +3 -1
- package/dist/settings/sections/providers/ProvidersSection.js +3 -3
- package/dist/settings/sections/providers/ServerProvidersSection.js +2 -2
- package/dist/settings/sections/providers/ServerSignIn.js +3 -3
- package/dist/settings/sections/shared/catalog.d.ts +6 -1
- package/dist/settings/sections/shared/catalog.js +28 -22
- package/dist/settings/sections/skills/SkillList.js +2 -2
- package/dist/settings/sections/skills/SkillsSection.js +1 -1
- package/dist/styles.css +526 -21
- package/dist/terminal/HostTerminalSurface.js +18 -8
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +17 -0
- package/dist/terminal/headless/store.js +31 -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/dist/workspace/PanelContentView.d.ts +33 -4
- package/dist/workspace/PanelContentView.js +192 -58
- package/dist/workspace/PanelCorner.d.ts +35 -0
- package/dist/workspace/PanelCorner.js +68 -0
- package/dist/workspace/PanelGroups.d.ts +7 -2
- package/dist/workspace/PanelGroups.js +7 -3
- package/dist/workspace/PanelHome.d.ts +19 -0
- package/dist/workspace/PanelHome.js +74 -0
- package/dist/workspace/PanelItems.d.ts +28 -0
- package/dist/workspace/PanelItems.js +330 -0
- package/dist/workspace/PanelStrip.d.ts +5 -1
- package/dist/workspace/PanelStrip.js +6 -4
- package/dist/workspace/SidePanel.d.ts +9 -3
- package/dist/workspace/SidePanel.js +47 -10
- package/dist/workspace/TabParking.d.ts +2 -0
- package/dist/workspace/TabParking.js +8 -2
- package/dist/workspace/WorkspaceProvider.d.ts +1 -1
- package/dist/workspace/WorkspaceProvider.js +10 -6
- package/dist/workspace/extension-tabs.d.ts +36 -0
- package/dist/workspace/extension-tabs.js +175 -0
- package/dist/workspace/headless/host.d.ts +6 -2
- package/dist/workspace/headless/index.js +1 -1
- package/dist/workspace/headless/labels.d.ts +7 -0
- package/dist/workspace/headless/labels.js +14 -0
- package/dist/workspace/headless/view.d.ts +5 -0
- package/dist/workspace/index.d.ts +3 -2
- package/dist/workspace/index.js +3 -2
- package/package.json +37 -9
- package/src/styles/components.css +24 -8
- package/src/styles/motion.css +35 -0
- package/src/styles/primitives.css +5 -2
- package/src/styles/rich-composer.css +7 -2
- package/src/styles/sidebar.css +24 -0
- package/src/styles/transcript.css +329 -0
- package/src/styles/workspace.css +58 -0
- package/dist/chat/composer/use-hud.d.ts +0 -16
- package/dist/chat/composer/use-hud.js +0 -36
- package/dist/chat/headless/composer/hud.d.ts +0 -25
- package/dist/chat/headless/composer/hud.js +0 -66
- 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/index.ts +0 -32
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -230
- 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 -474
- 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 -459
- 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 -184
- 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 -122
- package/src/app/ModalProvider.tsx +0 -711
- package/src/app/headless/app-host.ts +0 -58
- 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 -359
- 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 -227
- 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 -305
- 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/SessionFilterMenu.tsx +0 -237
- package/src/chat/SessionGroupHeader.tsx +0 -136
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -279
- 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 -277
- package/src/chat/Transcript.tsx +0 -461
- 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 -159
- 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 -170
- 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/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -179
- 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 -307
- 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 -284
- package/src/chat/composer/use-hud.ts +0 -38
- 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 -39
- 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 -222
- 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 -227
- package/src/chat/headless/composer/host.ts +0 -253
- package/src/chat/headless/composer/hud.ts +0 -101
- package/src/chat/headless/composer/index.ts +0 -18
- 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/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 -259
- package/src/chat/headless/hosts.ts +0 -53
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -331
- 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 -390
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -163
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -819
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -16
- package/src/chat/headless/sidebar/labels.ts +0 -140
- 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/rows.ts +0 -229
- package/src/chat/headless/sidebar/types.ts +0 -61
- package/src/chat/headless/sidebar/view.ts +0 -296
- 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 -394
- 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 -780
- 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 -367
- 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 -29
- 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 -1036
- 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-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 -336
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -805
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -41
- package/src/chat/sidebar/SidebarFooter.tsx +0 -234
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -231
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -293
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -232
- package/src/chat/sidebar/SpacesSection.tsx +0 -256
- package/src/chat/sidebar/index.ts +0 -92
- package/src/chat/sidebar/session-menu.ts +0 -437
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -605
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -86
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -165
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -532
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -178
- 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 -223
- package/src/chat/transcript/CardMarkdown.tsx +0 -92
- package/src/chat/transcript/ChipCard.tsx +0 -176
- 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 -171
- package/src/chat/transcript/FileChip.tsx +0 -350
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -193
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -165
- package/src/chat/transcript/ReferenceText.tsx +0 -193
- 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 -218
- package/src/chat/transcript/TranscriptRow.tsx +0 -356
- 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 -152
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- 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 -520
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -65
- package/src/chat/transcript/markdown-cache.ts +0 -70
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -282
- package/src/chat/transcript/messages.tsx +0 -168
- 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/references.ts +0 -104
- 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 -241
- 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 -111
- package/src/chat/transcript/tool-details.tsx +0 -77
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-row.tsx +0 -489
- 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 -162
- 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/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -150
- package/src/code/code-themes.ts +0 -34
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -428
- 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 -28
- 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 -154
- 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 -19
- package/src/code/highlighter.ts +0 -185
- package/src/code/shiki-theme.ts +0 -47
- package/src/components/BrandMark.tsx +0 -107
- 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 -209
- 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 -589
- 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/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -590
- package/src/files/EditorColumn.tsx +0 -453
- 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 -159
- 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 -40
- 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 -24
- package/src/files/lazy-tabs.tsx +0 -41
- 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 -178
- 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 -981
- package/src/git/GitBar.tsx +0 -286
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -381
- package/src/git/MoveSessionDialog.tsx +0 -394
- 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/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 -118
- 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 -14
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- 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 -356
- package/src/machines/headless/messages.ts +0 -197
- 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 -179
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -447
- 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 -280
- package/src/onboarding/index.ts +0 -20
- package/src/onboarding/marks.tsx +0 -69
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -336
- package/src/onboarding/skills/parts.tsx +0 -440
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -226
- package/src/onboarding/steps/ConversationStep.tsx +0 -131
- 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 -165
- 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 -251
- package/src/session/ArtifactsPanel.tsx +0 -381
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProviderUsageProvider.tsx +0 -106
- 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 -621
- package/src/session/SessionHeader.tsx +0 -237
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -316
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -278
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -222
- package/src/session/WelcomeScreen.tsx +0 -578
- 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 -331
- package/src/session/headless/host.ts +0 -255
- package/src/session/headless/index.ts +0 -22
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -321
- 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 -280
- package/src/session/headless/usage.ts +0 -380
- package/src/session/index.ts +0 -29
- package/src/session/testing/contract.ts +0 -579
- package/src/session/testing/demo.ts +0 -209
- 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 -116
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -217
- package/src/settings/SettingsShell.tsx +0 -336
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -553
- 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 -323
- package/src/settings/headless/host.ts +0 -125
- 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 -723
- 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 -52
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -307
- 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/CreateExtensionDialog.tsx +0 -206
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -743
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -480
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -38
- package/src/settings/sections/extensions/options-labels.ts +0 -31
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -374
- package/src/settings/sections/host-catalog/labels.ts +0 -40
- package/src/settings/sections/index.ts +0 -58
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -381
- 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 -403
- 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 -148
- 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 -136
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -246
- 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 -911
- 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 -621
- 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 -335
- package/src/workspace/PanelGroups.tsx +0 -249
- package/src/workspace/PanelStrip.tsx +0 -307
- package/src/workspace/SidePanel.tsx +0 -192
- package/src/workspace/TabParking.tsx +0 -111
- package/src/workspace/WorkspaceProvider.tsx +0 -554
- 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/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -118
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -34
- 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 -159
- package/src/workspace/index.ts +0 -22
- 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,600 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The transcript's scroll contract, in one place:
|
|
3
|
-
*
|
|
4
|
-
* - Pinned to the bottom, the view follows every growth (streaming text,
|
|
5
|
-
* rows settling, images, the window getting taller).
|
|
6
|
-
* - The USER decides when to leave: a wheel tick up, a drag up, PageUp /
|
|
7
|
-
* ArrowUp / Home unpin at once. Nothing else does. Scrolling back to the
|
|
8
|
-
* bottom pins again.
|
|
9
|
-
* - Unpinned, the row at the top of the view stays where it is through
|
|
10
|
-
* any relayout (window resize, rows above rendering to their real
|
|
11
|
-
* height, an older page prepended). The browser's own anchoring is
|
|
12
|
-
* turned off; this is the one correction. A short row whose top is out
|
|
13
|
-
* of sight holds nothing in view, so the row after it holds instead
|
|
14
|
-
* (`pick`): what folds shut up there is taken off above the view.
|
|
15
|
-
* - A disclosure the user toggles (anything `[aria-expanded]`: a fold, a
|
|
16
|
-
* step, a tool call, thinking) holds its place on screen while what it
|
|
17
|
-
* opens or closes settles, pinned or not: following the bottom would
|
|
18
|
-
* send the line just clicked up the screen as its content grows under
|
|
19
|
-
* it. Afterwards a pinned view stays pinned if it is still at the
|
|
20
|
-
* bottom; an unpinned one pins only if closing clamped it there.
|
|
21
|
-
* - Where the view is can be read and put back (`readPosition` /
|
|
22
|
-
* `restorePosition`), for a scroller that shows something else in
|
|
23
|
-
* between: the bottom, or the rows under the reader's line (rows carry
|
|
24
|
-
* their id as `data-row`) and how far down each starts. Putting it
|
|
25
|
-
* back holds the row there, as a toggled disclosure is held, while the
|
|
26
|
-
* rows around it mount; then the anchor takes over.
|
|
27
|
-
*
|
|
28
|
-
* Why not "pinned = within N px of the bottom" on scroll events: a
|
|
29
|
-
* programmatic snap's scroll event lands after further growth and reads as
|
|
30
|
-
* far from the bottom (unpinning by itself), and a user's first small wheel
|
|
31
|
-
* tick still reads as within N px (so the next growth snaps back and the
|
|
32
|
-
* user cannot leave). Pinning tracks intent, not distance.
|
|
33
|
-
*/
|
|
34
|
-
import { animate } from 'motion';
|
|
35
|
-
import { useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject } from 'react';
|
|
36
|
-
|
|
37
|
-
import { currentMotionTransition } from '../../motion/springs';
|
|
38
|
-
import { mountRowNow } from './LazyRow';
|
|
39
|
-
|
|
40
|
-
/** Scrolling down to within this of the bottom re-pins. */
|
|
41
|
-
const REPIN_PX = 48;
|
|
42
|
-
/** Rows are the anchoring unit; the first one crossing this line under the top edge holds. */
|
|
43
|
-
const ANCHOR_PROBE_PX = 24;
|
|
44
|
-
/** A toggled disclosure holds its place until the layout has been still this long, */
|
|
45
|
-
const HOLD_SETTLE_MS = 120;
|
|
46
|
-
/** and no longer than its motion (a `settle` collapse, ~450ms with springs) needs: a streaming run keeps relaying out. */
|
|
47
|
-
const HOLD_MAX_MS = 500;
|
|
48
|
-
/** What carries a row's id, for a position to name it. */
|
|
49
|
-
const ROW_ID = '[data-row]';
|
|
50
|
-
|
|
51
|
-
/** A row of a {@link ScrollPosition}, and where it was on screen. */
|
|
52
|
-
export interface RowPlace {
|
|
53
|
-
/** The row's `data-row` id. */
|
|
54
|
-
id: string;
|
|
55
|
-
/** How far below the scroller's top edge the row started (px); negative once its top is scrolled past. */
|
|
56
|
-
offset: number;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Where a transcript's view is ({@link useStickToBottom}'s `readPosition`):
|
|
61
|
-
* following the bottom, or the row under the reader's line and then each row
|
|
62
|
-
* around it, out to the transcript's own.
|
|
63
|
-
*/
|
|
64
|
-
export type ScrollPosition =
|
|
65
|
-
| {
|
|
66
|
-
/** Following the bottom. */
|
|
67
|
-
pinned: true;
|
|
68
|
-
}
|
|
69
|
-
| {
|
|
70
|
-
/** Left the bottom. */
|
|
71
|
-
pinned: false;
|
|
72
|
-
/** The row under the reader's line, then each row around it, out to the transcript's own. */
|
|
73
|
-
rows: readonly RowPlace[];
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const AT_BOTTOM: ScrollPosition = { pinned: true };
|
|
77
|
-
|
|
78
|
-
interface Held {
|
|
79
|
-
el: HTMLElement;
|
|
80
|
-
/** Its top relative to the scroller's top when it was toggled. */
|
|
81
|
-
offset: number;
|
|
82
|
-
deadline: number;
|
|
83
|
-
timer: ReturnType<typeof setTimeout> | undefined;
|
|
84
|
-
/** Whether the view followed the bottom when it was toggled. */
|
|
85
|
-
wasPinned: boolean;
|
|
86
|
-
/** A row rendered outright while held (`content-visibility`), skipping offscreen again once let go. */
|
|
87
|
-
forced?: HTMLElement;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
interface Anchor {
|
|
91
|
-
el: HTMLElement;
|
|
92
|
-
/** The row's top relative to the scroller's top, at the time of recording. */
|
|
93
|
-
offset: number;
|
|
94
|
-
/** The scroller's scrollTop at the time of recording, so a later scroll can be discounted. */
|
|
95
|
-
top: number;
|
|
96
|
-
/** The row under the reader's line: `el` itself, unless `el` is the row starting after it (`pick`). */
|
|
97
|
-
line: HTMLElement;
|
|
98
|
-
/** `line`'s top relative to the scroller's top, like `offset`. */
|
|
99
|
-
lineOffset: number;
|
|
100
|
-
/** The scroller's width at the time of recording: a change reflows every row, and `line` holds. */
|
|
101
|
-
width: number;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* The row crossing the horizontal line at `y`, by geometry. Not a hit test:
|
|
106
|
-
* `elementFromPoint` skips rows that take no pointer events, which is every
|
|
107
|
-
* row while the wheel scrolls (the desktop app's `useWheelHoverPause`), so
|
|
108
|
-
* the view would lose its anchor exactly when rows above it resize. Rows are in vertical
|
|
109
|
-
* order, so a binary search finds the spot; nested rows (an open fold's)
|
|
110
|
-
* sit inside their parent's span, so the neighbours settle it.
|
|
111
|
-
*/
|
|
112
|
-
function rowAt(scroller: HTMLElement, selector: string, y: number): HTMLElement | null {
|
|
113
|
-
const rows = scroller.querySelectorAll<HTMLElement>(selector);
|
|
114
|
-
let lo = 0;
|
|
115
|
-
let hi = rows.length - 1;
|
|
116
|
-
while (lo < hi) {
|
|
117
|
-
const mid = (lo + hi) >> 1;
|
|
118
|
-
if (rows[mid]!.getBoundingClientRect().bottom > y) hi = mid;
|
|
119
|
-
else lo = mid + 1;
|
|
120
|
-
}
|
|
121
|
-
// The innermost row crossing the line, among the neighbours of the spot.
|
|
122
|
-
let best: HTMLElement | null = null;
|
|
123
|
-
for (let i = Math.max(0, lo - 3); i <= Math.min(rows.length - 1, lo + 3); i++) {
|
|
124
|
-
const r = rows[i]!.getBoundingClientRect();
|
|
125
|
-
if (r.height > 0 && r.top <= y && r.bottom > y) best = rows[i]!;
|
|
126
|
-
}
|
|
127
|
-
return best;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* The first row starting at or below `from` and above `to`, by geometry: rows'
|
|
132
|
-
* tops never decrease in document order (a nested row starts inside its
|
|
133
|
-
* parent, the next row after it), so a binary search finds the spot.
|
|
134
|
-
*/
|
|
135
|
-
function rowStartingIn(scroller: HTMLElement, selector: string, from: number, to: number): HTMLElement | null {
|
|
136
|
-
const rows = scroller.querySelectorAll<HTMLElement>(selector);
|
|
137
|
-
let lo = 0;
|
|
138
|
-
let hi = rows.length;
|
|
139
|
-
while (lo < hi) {
|
|
140
|
-
const mid = (lo + hi) >> 1;
|
|
141
|
-
if (rows[mid]!.getBoundingClientRect().top >= from) hi = mid;
|
|
142
|
-
else lo = mid + 1;
|
|
143
|
-
}
|
|
144
|
-
for (let i = lo; i < rows.length; i++) {
|
|
145
|
-
const r = rows[i]!.getBoundingClientRect();
|
|
146
|
-
if (r.top >= to) return null;
|
|
147
|
-
if (r.height > 0) return rows[i]!;
|
|
148
|
-
}
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* The row under the reader's line: the one the view anchors on (without an
|
|
154
|
-
* id, the nearest row around it with one); over something else (a collapsed
|
|
155
|
-
* worker block's header), the id'd row there; above the first row (the top
|
|
156
|
-
* padding), the first row.
|
|
157
|
-
*/
|
|
158
|
-
function rowUnderLine(scroller: HTMLElement, line: number, anchored: HTMLElement | null): HTMLElement | null {
|
|
159
|
-
const own = anchored?.closest<HTMLElement>(ROW_ID);
|
|
160
|
-
if (own && scroller.contains(own)) return own;
|
|
161
|
-
const hit = rowAt(scroller, ROW_ID, line);
|
|
162
|
-
if (hit) return hit;
|
|
163
|
-
const first = scroller.querySelector<HTMLElement>(ROW_ID);
|
|
164
|
-
return first && first.getBoundingClientRect().top >= line ? first : null;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/** An unpinned view's position: the row under the reader's line, then each row around it, and how far below the top edge each starts. */
|
|
168
|
-
function positionAt(scroller: HTMLElement, box: DOMRect, anchored: HTMLElement | null): ScrollPosition {
|
|
169
|
-
const rows: RowPlace[] = [];
|
|
170
|
-
let row = rowUnderLine(scroller, box.top + ANCHOR_PROBE_PX, anchored);
|
|
171
|
-
while (row && scroller.contains(row)) {
|
|
172
|
-
rows.push({ id: row.dataset.row!, offset: row.getBoundingClientRect().top - box.top });
|
|
173
|
-
row = row.parentElement?.closest<HTMLElement>(ROW_ID) ?? null;
|
|
174
|
-
}
|
|
175
|
-
return { pinned: false, rows };
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/** The outermost row `el` sits in (itself included): the one that skips rendering offscreen, the rows inside it render with it. */
|
|
179
|
-
function outermostRow(scroller: HTMLElement, el: HTMLElement, selector: string): HTMLElement | undefined {
|
|
180
|
-
let outer: HTMLElement | undefined;
|
|
181
|
-
let row = el.closest<HTMLElement>(selector);
|
|
182
|
-
while (row && scroller.contains(row)) {
|
|
183
|
-
outer = row;
|
|
184
|
-
row = row.parentElement?.closest<HTMLElement>(selector) ?? null;
|
|
185
|
-
}
|
|
186
|
-
return outer;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/** Options of {@link useStickToBottom}. */
|
|
190
|
-
export interface StickToBottomOptions {
|
|
191
|
-
/** Holds every correction (a drag-select in progress). Default: false. */
|
|
192
|
-
paused?: boolean;
|
|
193
|
-
/** The rows the view anchors on. Default: the transcript's top-level rows, `.zg-cv-row`. */
|
|
194
|
-
rowSelector?: string;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
* Keeps a transcript's scroller on the bottom while it grows, and its reader's line in place once they leave it (the contract above).
|
|
199
|
-
*
|
|
200
|
-
* @param scrollRef - The scroller. Its first element child is the content whose growth the view follows.
|
|
201
|
-
* @param options - {@link StickToBottomOptions}.
|
|
202
|
-
* @returns `pinned`, `snapToBottom` (go there now), `glideToBottom` (go there eased: a prompt sent), `setPinned`, and `readPosition` / `restorePosition` (where the view is, and back there after showing something else).
|
|
203
|
-
*/
|
|
204
|
-
export function useStickToBottom(
|
|
205
|
-
scrollRef: RefObject<HTMLElement | null>,
|
|
206
|
-
{ paused = false, rowSelector = '.zg-cv-row' }: StickToBottomOptions = {},
|
|
207
|
-
) {
|
|
208
|
-
const [pinned, setPinned] = useState(true);
|
|
209
|
-
const pinnedRef = useRef(true);
|
|
210
|
-
const pausedRef = useRef(paused);
|
|
211
|
-
useLayoutEffect(() => {
|
|
212
|
-
pausedRef.current = paused;
|
|
213
|
-
});
|
|
214
|
-
// The scrollTop our own scrollTo asked for; a scroll event landing there is ours.
|
|
215
|
-
const expected = useRef<number | null>(null);
|
|
216
|
-
const lastTop = useRef(0);
|
|
217
|
-
const anchor = useRef<Anchor | null>(null);
|
|
218
|
-
const held = useRef<Held | null>(null);
|
|
219
|
-
// Where the view is as of its last settled frame (`readPosition`); null until one settled.
|
|
220
|
-
const position = useRef<ScrollPosition | null>(null);
|
|
221
|
-
// Puts a position's rows back (`restorePosition`), while the scroller is wired.
|
|
222
|
-
const restoreRows = useRef<(rows: readonly RowPlace[]) => boolean>(() => false);
|
|
223
|
-
// Lets go of a held row for the bottom, which needs no anchor (`snapToBottom`, `glideToBottom`).
|
|
224
|
-
const dropHold = useRef(() => {});
|
|
225
|
-
|
|
226
|
-
const setPin = useCallback(
|
|
227
|
-
(next: boolean) => {
|
|
228
|
-
// Pinned, the bottom is the position; unpinned, the next settled frame reads it.
|
|
229
|
-
if (next) position.current = AT_BOTTOM;
|
|
230
|
-
if (pinnedRef.current === next) return;
|
|
231
|
-
pinnedRef.current = next;
|
|
232
|
-
setPinned(next);
|
|
233
|
-
// Readable from tests and devtools.
|
|
234
|
-
if (scrollRef.current) scrollRef.current.dataset.pinned = String(next);
|
|
235
|
-
},
|
|
236
|
-
[scrollRef],
|
|
237
|
-
);
|
|
238
|
-
|
|
239
|
-
const scrollTo = useCallback((el: HTMLElement, top: number) => {
|
|
240
|
-
const max = Math.max(0, el.scrollHeight - el.clientHeight);
|
|
241
|
-
const target = Math.min(Math.max(0, top), max);
|
|
242
|
-
expected.current = target;
|
|
243
|
-
lastTop.current = target;
|
|
244
|
-
el.scrollTo({ top: target, behavior: 'instant' as ScrollBehavior });
|
|
245
|
-
}, []);
|
|
246
|
-
|
|
247
|
-
// An eased scroll to the bottom in flight (`glideToBottom`).
|
|
248
|
-
const glide = useRef({ running: false, cancel: () => {} });
|
|
249
|
-
|
|
250
|
-
/** Go to the bottom and stay there. */
|
|
251
|
-
const snapToBottom = useCallback(() => {
|
|
252
|
-
const el = scrollRef.current;
|
|
253
|
-
if (!el) return;
|
|
254
|
-
glide.current.cancel();
|
|
255
|
-
dropHold.current();
|
|
256
|
-
setPin(true);
|
|
257
|
-
scrollTo(el, el.scrollHeight);
|
|
258
|
-
}, [scrollRef, setPin, scrollTo]);
|
|
259
|
-
|
|
260
|
-
/*
|
|
261
|
-
* The same, eased: what sending a message does. Each frame retargets the
|
|
262
|
-
* live bottom, so a prompt row still rendering (or text arriving) never
|
|
263
|
-
* leaves the glide short. Pinned from the first frame, so growth during
|
|
264
|
-
* the glide is followed; a wheel or key up cancels it (the user leaves).
|
|
265
|
-
*/
|
|
266
|
-
const glideToBottom = useCallback(() => {
|
|
267
|
-
const el = scrollRef.current;
|
|
268
|
-
if (!el) return;
|
|
269
|
-
glide.current.cancel();
|
|
270
|
-
// A held row would pull the view back up, and letting go would decide the pin mid-glide.
|
|
271
|
-
dropHold.current();
|
|
272
|
-
setPin(true);
|
|
273
|
-
const from = el.scrollTop;
|
|
274
|
-
const distance = el.scrollHeight - el.clientHeight - from;
|
|
275
|
-
if (document.documentElement.dataset.motion !== 'full' || distance <= 1) {
|
|
276
|
-
scrollTo(el, el.scrollHeight);
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
// Long jumps take a little longer, never long enough to feel like waiting.
|
|
280
|
-
const visualDuration = Math.min(0.52, 0.24 + distance / 12_000);
|
|
281
|
-
// Progress 0 → 1 on the `slide` curve (spring or tween); the target is re-read per frame.
|
|
282
|
-
glide.current.running = true;
|
|
283
|
-
const controls = animate(0, 1, {
|
|
284
|
-
...currentMotionTransition('slide', visualDuration),
|
|
285
|
-
onUpdate: (p) => {
|
|
286
|
-
const bottom = el.scrollHeight - el.clientHeight;
|
|
287
|
-
// A spring may overshoot 1: never scroll past the live bottom.
|
|
288
|
-
scrollTo(el, from + (bottom - from) * Math.min(1, p));
|
|
289
|
-
},
|
|
290
|
-
onComplete: () => {
|
|
291
|
-
glide.current.running = false;
|
|
292
|
-
},
|
|
293
|
-
});
|
|
294
|
-
glide.current.cancel = () => {
|
|
295
|
-
controls.stop();
|
|
296
|
-
glide.current.running = false;
|
|
297
|
-
};
|
|
298
|
-
}, [scrollRef, setPin, scrollTo]);
|
|
299
|
-
|
|
300
|
-
useEffect(() => {
|
|
301
|
-
const el = scrollRef.current;
|
|
302
|
-
if (!el) return undefined;
|
|
303
|
-
el.style.overflowAnchor = 'none';
|
|
304
|
-
el.dataset.pinned = String(pinnedRef.current);
|
|
305
|
-
|
|
306
|
-
/*
|
|
307
|
-
* The anchor is the painted position of the row under the top edge. It
|
|
308
|
-
* must never be re-taken after content changed and before that change is
|
|
309
|
-
* corrected: re-taking it then adopts the shift as the new normal and the
|
|
310
|
-
* view jumps. Content changes land between frames (rows mounting, long
|
|
311
|
-
* text revealing, code highlighting, rows leaving `content-visibility`
|
|
312
|
-
* skipping), so every point that takes the anchor corrects first
|
|
313
|
-
* (`settle`): in the frame after a scroll, and on every relayout the
|
|
314
|
-
* ResizeObserver reports. The anchor keeps the scrollTop it was taken at,
|
|
315
|
-
* so a scroll since then is discounted, never corrected.
|
|
316
|
-
*
|
|
317
|
-
* The row under the reader's line holds, except a short one whose top is
|
|
318
|
-
* out of sight: there, the row starting after it in the upper half of the
|
|
319
|
-
* view does. Holding a top nobody sees keeps nothing in view still: the
|
|
320
|
-
* run's steps settling to one line at the top edge would slide the reply
|
|
321
|
-
* up under the reader. A resize reflows every row, and the row under the
|
|
322
|
-
* line holds then (`settle`).
|
|
323
|
-
*/
|
|
324
|
-
const pick = (box: DOMRect): Anchor | null => {
|
|
325
|
-
const line = box.top + ANCHOR_PROBE_PX;
|
|
326
|
-
const current = anchor.current;
|
|
327
|
-
let row: HTMLElement | null = null;
|
|
328
|
-
// Still under the line: keep it (no hit test on every frame of a scroll).
|
|
329
|
-
if (current && el.contains(current.line)) {
|
|
330
|
-
const r = current.line.getBoundingClientRect();
|
|
331
|
-
if (r.top <= line && r.bottom > line) row = current.line;
|
|
332
|
-
}
|
|
333
|
-
row ??= rowAt(el, rowSelector, line);
|
|
334
|
-
if (!row) return null;
|
|
335
|
-
const r = row.getBoundingClientRect();
|
|
336
|
-
const middle = box.top + box.height / 2;
|
|
337
|
-
let after: HTMLElement | null = null;
|
|
338
|
-
if (r.top < box.top && r.bottom < middle) {
|
|
339
|
-
// The row after it, while it still starts in the upper half: no search either.
|
|
340
|
-
if (current && current.line === row && current.el !== row && el.contains(current.el)) {
|
|
341
|
-
const top = current.el.getBoundingClientRect().top;
|
|
342
|
-
if (top >= r.bottom - 1 && top < middle) after = current.el;
|
|
343
|
-
}
|
|
344
|
-
after ??= rowStartingIn(el, rowSelector, r.bottom - 1, middle);
|
|
345
|
-
}
|
|
346
|
-
const held = after ?? row;
|
|
347
|
-
return {
|
|
348
|
-
el: held,
|
|
349
|
-
offset: held.getBoundingClientRect().top - box.top,
|
|
350
|
-
top: el.scrollTop,
|
|
351
|
-
line: row,
|
|
352
|
-
lineOffset: r.top - box.top,
|
|
353
|
-
width: el.clientWidth,
|
|
354
|
-
};
|
|
355
|
-
};
|
|
356
|
-
|
|
357
|
-
const settle = () => {
|
|
358
|
-
// A held row keeps its own place (`keepHeld`); letting go takes a fresh anchor.
|
|
359
|
-
if (held.current) return;
|
|
360
|
-
const a = anchor.current;
|
|
361
|
-
if (!pausedRef.current && !pinnedRef.current && a) {
|
|
362
|
-
// A resize reflows every row: the row under the reader's line holds (as when the row after it left).
|
|
363
|
-
const [row, recorded] =
|
|
364
|
-
(el.clientWidth !== a.width || !el.contains(a.el)) && el.contains(a.line)
|
|
365
|
-
? [a.line, a.lineOffset]
|
|
366
|
-
: [a.el, a.offset];
|
|
367
|
-
if (el.contains(row)) {
|
|
368
|
-
const offset = row.getBoundingClientRect().top - el.getBoundingClientRect().top;
|
|
369
|
-
// Where the row would sit had only the scroll since the record moved it.
|
|
370
|
-
const delta = offset - (recorded - (el.scrollTop - a.top));
|
|
371
|
-
if (Math.abs(delta) >= 1) scrollTo(el, el.scrollTop + delta);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
// Pinned, the bottom is the position: no anchor to keep, so no hit test per streamed frame.
|
|
375
|
-
// Leaving the bottom unpins in `onScroll`, and the next frame takes a fresh anchor.
|
|
376
|
-
if (pinnedRef.current) {
|
|
377
|
-
anchor.current = null;
|
|
378
|
-
position.current = AT_BOTTOM;
|
|
379
|
-
return;
|
|
380
|
-
}
|
|
381
|
-
const box = el.getBoundingClientRect();
|
|
382
|
-
anchor.current = pick(box);
|
|
383
|
-
position.current = positionAt(el, box, anchor.current?.line ?? null);
|
|
384
|
-
};
|
|
385
|
-
|
|
386
|
-
let anchorFrame = 0;
|
|
387
|
-
const scheduleAnchor = () => {
|
|
388
|
-
if (!anchorFrame)
|
|
389
|
-
anchorFrame = requestAnimationFrame(() => {
|
|
390
|
-
anchorFrame = 0;
|
|
391
|
-
settle();
|
|
392
|
-
});
|
|
393
|
-
};
|
|
394
|
-
|
|
395
|
-
/** A hold's timer stops, and the row it rendered outright skips offscreen again. */
|
|
396
|
-
const letGo = (h: Held) => {
|
|
397
|
-
clearTimeout(h.timer);
|
|
398
|
-
h.forced?.style.removeProperty('content-visibility');
|
|
399
|
-
};
|
|
400
|
-
dropHold.current = () => {
|
|
401
|
-
const h = held.current;
|
|
402
|
-
if (!h) return;
|
|
403
|
-
letGo(h);
|
|
404
|
-
held.current = null;
|
|
405
|
-
delete el.dataset.holding;
|
|
406
|
-
};
|
|
407
|
-
/** The toggled disclosure lets go, and the top row anchors again. */
|
|
408
|
-
const release = () => {
|
|
409
|
-
const h = held.current;
|
|
410
|
-
if (!h) return;
|
|
411
|
-
letGo(h);
|
|
412
|
-
held.current = null;
|
|
413
|
-
delete el.dataset.holding;
|
|
414
|
-
const dist = el.scrollHeight - el.clientHeight - el.scrollTop;
|
|
415
|
-
setPin(dist <= (h.wasPinned ? REPIN_PX : 1));
|
|
416
|
-
anchor.current = null;
|
|
417
|
-
scheduleAnchor();
|
|
418
|
-
};
|
|
419
|
-
const armRelease = (h: Held) => {
|
|
420
|
-
clearTimeout(h.timer);
|
|
421
|
-
h.timer = setTimeout(release, Math.max(0, Math.min(HOLD_SETTLE_MS, h.deadline - performance.now())));
|
|
422
|
-
};
|
|
423
|
-
const keepHeld = (h: Held) => {
|
|
424
|
-
if (!el.contains(h.el)) {
|
|
425
|
-
release();
|
|
426
|
-
return;
|
|
427
|
-
}
|
|
428
|
-
const delta = h.el.getBoundingClientRect().top - el.getBoundingClientRect().top - h.offset;
|
|
429
|
-
if (Math.abs(delta) >= 1) scrollTo(el, el.scrollTop + delta);
|
|
430
|
-
armRelease(h);
|
|
431
|
-
};
|
|
432
|
-
// Capture: measured before the toggle's own handler changes anything.
|
|
433
|
-
const onClick = (e: MouseEvent) => {
|
|
434
|
-
if (pausedRef.current) return;
|
|
435
|
-
const toggle = e.target instanceof Element ? e.target.closest('[aria-expanded]') : null;
|
|
436
|
-
if (!(toggle instanceof HTMLElement) || !el.contains(toggle)) return;
|
|
437
|
-
glide.current.cancel();
|
|
438
|
-
if (held.current) letGo(held.current);
|
|
439
|
-
const h: Held = {
|
|
440
|
-
el: toggle,
|
|
441
|
-
offset: toggle.getBoundingClientRect().top - el.getBoundingClientRect().top,
|
|
442
|
-
deadline: performance.now() + HOLD_MAX_MS,
|
|
443
|
-
timer: undefined,
|
|
444
|
-
wasPinned: pinnedRef.current,
|
|
445
|
-
};
|
|
446
|
-
held.current = h;
|
|
447
|
-
// Readable from tests and devtools, like `data-pinned`.
|
|
448
|
-
el.dataset.holding = '';
|
|
449
|
-
armRelease(h);
|
|
450
|
-
};
|
|
451
|
-
|
|
452
|
-
const onScroll = () => {
|
|
453
|
-
const top = el.scrollTop;
|
|
454
|
-
const ours = expected.current !== null && Math.abs(top - expected.current) <= 1;
|
|
455
|
-
expected.current = null;
|
|
456
|
-
const dist = el.scrollHeight - el.clientHeight - top;
|
|
457
|
-
// Someone else scrolled (the scrollbar, a jump to a row): the toggled line
|
|
458
|
-
// lets go. Not for a clamp, content shrinking under it at the bottom.
|
|
459
|
-
if (!ours && held.current && !(top < lastTop.current && dist <= 1)) release();
|
|
460
|
-
// While a disclosure holds its place, the pin is decided when it lets go.
|
|
461
|
-
if (!ours && !held.current) {
|
|
462
|
-
// Up and away from the bottom leaves; a clamp (content shrinking under a
|
|
463
|
-
// pinned view) moves up but stays at the bottom, so it does not.
|
|
464
|
-
if (top < lastTop.current - 1 && dist > 1) setPin(false);
|
|
465
|
-
else if (dist <= REPIN_PX) setPin(true);
|
|
466
|
-
}
|
|
467
|
-
lastTop.current = top;
|
|
468
|
-
scheduleAnchor();
|
|
469
|
-
};
|
|
470
|
-
// Intent, before any growth can snap the view back.
|
|
471
|
-
const onWheel = (e: WheelEvent) => {
|
|
472
|
-
// The user scrolls: the toggled line need not hold any more.
|
|
473
|
-
release();
|
|
474
|
-
if (e.deltaY < 0) {
|
|
475
|
-
glide.current.cancel();
|
|
476
|
-
setPin(false);
|
|
477
|
-
}
|
|
478
|
-
};
|
|
479
|
-
const onKey = (e: KeyboardEvent) => {
|
|
480
|
-
if (['PageUp', 'PageDown', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(e.key)) release();
|
|
481
|
-
if (e.key === 'PageUp' || e.key === 'ArrowUp' || e.key === 'Home') {
|
|
482
|
-
glide.current.cancel();
|
|
483
|
-
setPin(false);
|
|
484
|
-
}
|
|
485
|
-
if (e.key === 'End') setPin(true);
|
|
486
|
-
};
|
|
487
|
-
|
|
488
|
-
const onLayout = () => {
|
|
489
|
-
if (pausedRef.current) return;
|
|
490
|
-
// A scroll whose event has not run yet (a drag to the bottom, the
|
|
491
|
-
// browser clamping): take it into account first, or a correction here
|
|
492
|
-
// would use a stale anchor and undo it.
|
|
493
|
-
if (Math.abs(el.scrollTop - lastTop.current) > 1) onScroll();
|
|
494
|
-
if (held.current) {
|
|
495
|
-
keepHeld(held.current);
|
|
496
|
-
return;
|
|
497
|
-
}
|
|
498
|
-
// A glide owns the position; it follows the live bottom itself.
|
|
499
|
-
if (glide.current.running) return;
|
|
500
|
-
if (pinnedRef.current) {
|
|
501
|
-
scrollTo(el, el.scrollHeight);
|
|
502
|
-
return;
|
|
503
|
-
}
|
|
504
|
-
settle();
|
|
505
|
-
};
|
|
506
|
-
|
|
507
|
-
/*
|
|
508
|
-
* A position's rows, back where they were: the innermost one still here,
|
|
509
|
-
* at its offset; failing that (what was inside reopened differently: a
|
|
510
|
-
* worker's block collapsed), the row around it, from its top. The
|
|
511
|
-
* transcript-level row mounts now if it is still lazy, and the row renders
|
|
512
|
-
* outright while held: skipped offscreen (`content-visibility`) it sits
|
|
513
|
-
* at its estimated height, and a place deep inside it would land below
|
|
514
|
-
* it. Then it is held there, like a toggled disclosure, while the rows
|
|
515
|
-
* around it mount.
|
|
516
|
-
*/
|
|
517
|
-
restoreRows.current = (rows) => {
|
|
518
|
-
const find = (id: string) =>
|
|
519
|
-
el.querySelector<HTMLElement>(`[data-row="${id.replace(/["\\]/g, (c) => `\\${c}`)}"]`);
|
|
520
|
-
const outer = rows.length > 0 ? find(rows[rows.length - 1]!.id) : null;
|
|
521
|
-
if (outer) mountRowNow(outer);
|
|
522
|
-
for (const [i, place] of rows.entries()) {
|
|
523
|
-
const target = find(place.id);
|
|
524
|
-
if (!target) continue;
|
|
525
|
-
glide.current.cancel();
|
|
526
|
-
if (held.current) letGo(held.current);
|
|
527
|
-
setPin(false);
|
|
528
|
-
const forced = outermostRow(el, target, rowSelector);
|
|
529
|
-
forced?.style.setProperty('content-visibility', 'visible');
|
|
530
|
-
const offset = i === 0 ? place.offset : Math.max(0, place.offset);
|
|
531
|
-
scrollTo(el, el.scrollTop + target.getBoundingClientRect().top - el.getBoundingClientRect().top - offset);
|
|
532
|
-
anchor.current = null;
|
|
533
|
-
const h: Held = {
|
|
534
|
-
el: target,
|
|
535
|
-
offset,
|
|
536
|
-
deadline: performance.now() + HOLD_MAX_MS,
|
|
537
|
-
timer: undefined,
|
|
538
|
-
wasPinned: false,
|
|
539
|
-
forced,
|
|
540
|
-
};
|
|
541
|
-
held.current = h;
|
|
542
|
-
el.dataset.holding = '';
|
|
543
|
-
armRelease(h);
|
|
544
|
-
return true;
|
|
545
|
-
}
|
|
546
|
-
return false;
|
|
547
|
-
};
|
|
548
|
-
|
|
549
|
-
el.addEventListener('scroll', onScroll, { passive: true });
|
|
550
|
-
el.addEventListener('wheel', onWheel, { passive: true });
|
|
551
|
-
el.addEventListener('keydown', onKey);
|
|
552
|
-
el.addEventListener('click', onClick, true);
|
|
553
|
-
const ro = new ResizeObserver(onLayout);
|
|
554
|
-
ro.observe(el);
|
|
555
|
-
// The content the scroller wraps: only its box grows as rows stream in.
|
|
556
|
-
const content = el.firstElementChild;
|
|
557
|
-
if (content) ro.observe(content);
|
|
558
|
-
lastTop.current = el.scrollTop;
|
|
559
|
-
|
|
560
|
-
const glideState = glide.current;
|
|
561
|
-
return () => {
|
|
562
|
-
glideState.cancel();
|
|
563
|
-
cancelAnimationFrame(anchorFrame);
|
|
564
|
-
if (held.current) letGo(held.current);
|
|
565
|
-
held.current = null;
|
|
566
|
-
restoreRows.current = () => false;
|
|
567
|
-
dropHold.current = () => {};
|
|
568
|
-
el.removeEventListener('click', onClick, true);
|
|
569
|
-
el.removeEventListener('scroll', onScroll);
|
|
570
|
-
el.removeEventListener('wheel', onWheel);
|
|
571
|
-
el.removeEventListener('keydown', onKey);
|
|
572
|
-
ro.disconnect();
|
|
573
|
-
};
|
|
574
|
-
}, [scrollRef, rowSelector, setPin, scrollTo]);
|
|
575
|
-
|
|
576
|
-
/** Where the view is as of its last settled frame, so still right once the content was swapped under it; null before one settled. */
|
|
577
|
-
const readPosition = useCallback((): ScrollPosition | null => position.current, []);
|
|
578
|
-
|
|
579
|
-
/**
|
|
580
|
-
* Put the view back where `saved` was: at the bottom, or on its rows.
|
|
581
|
-
* False, moving nothing, when none of its rows is here any more (the
|
|
582
|
-
* transcript was loaded again). Call it outside React's render and effects
|
|
583
|
-
* (a frame callback): the row it lands in may mount synchronously.
|
|
584
|
-
*/
|
|
585
|
-
const restorePosition = useCallback(
|
|
586
|
-
(saved: ScrollPosition): boolean => {
|
|
587
|
-
if (saved.pinned) {
|
|
588
|
-
snapToBottom();
|
|
589
|
-
return true;
|
|
590
|
-
}
|
|
591
|
-
if (!restoreRows.current(saved.rows)) return false;
|
|
592
|
-
// Read while held, before the layout settles and reads it again.
|
|
593
|
-
position.current = saved;
|
|
594
|
-
return true;
|
|
595
|
-
},
|
|
596
|
-
[snapToBottom],
|
|
597
|
-
);
|
|
598
|
-
|
|
599
|
-
return { pinned, snapToBottom, glideToBottom, setPinned: setPin, readPosition, restorePosition };
|
|
600
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The find in the conversation's state: which session it is open on and the
|
|
3
|
-
* query it opened with (empty from ⌘F, a palette match's text from a content
|
|
4
|
-
* search). Bound to a session, so a palette run can switch session and open
|
|
5
|
-
* find in one go; switching anywhere else closes it, since its matches are
|
|
6
|
-
* the previous transcript's DOM. ⌘F is {@link useTranscriptFindKey}'s.
|
|
7
|
-
*/
|
|
8
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
9
|
-
|
|
10
|
-
import { useTranscriptFindKey } from './useTranscriptFindKey';
|
|
11
|
-
|
|
12
|
-
/** Where the find is open, and with what. */
|
|
13
|
-
export interface TranscriptFindTarget<K extends string = string> {
|
|
14
|
-
/** The session whose conversation it searches. */
|
|
15
|
-
sessionId: K;
|
|
16
|
-
/** The text it searches for (empty from ⌘F). */
|
|
17
|
-
query: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** Options for {@link useTranscriptFind}. */
|
|
21
|
-
export interface TranscriptFindOptions<K extends string = string> {
|
|
22
|
-
/** The session on show, or `null`. */
|
|
23
|
-
sessionId: K | null;
|
|
24
|
-
/** Whether something else owns input now (a modal is open): ⌘F does nothing. */
|
|
25
|
-
blocked?(): boolean;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/** What {@link useTranscriptFind} returns: hand `open`, `query` and `close` to your `TranscriptSearch`. */
|
|
29
|
-
export interface TranscriptFind<K extends string = string> {
|
|
30
|
-
/** Open on the session on show. */
|
|
31
|
-
open: boolean;
|
|
32
|
-
/** The query it opened with. */
|
|
33
|
-
query: string | undefined;
|
|
34
|
-
/** Opens it on a session with a query (a palette match), even one being switched to. */
|
|
35
|
-
findIn(target: TranscriptFindTarget<K>): void;
|
|
36
|
-
/** Closes it. */
|
|
37
|
-
close(): void;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* The find in the conversation: ⌘F opens it on the session on show (keeping a query already there), a
|
|
42
|
-
* switch to another session closes it.
|
|
43
|
-
*
|
|
44
|
-
* @param options - The session on show, and what blocks ⌘F.
|
|
45
|
-
*/
|
|
46
|
-
export function useTranscriptFind<K extends string = string>({
|
|
47
|
-
sessionId,
|
|
48
|
-
blocked,
|
|
49
|
-
}: TranscriptFindOptions<K>): TranscriptFind<K> {
|
|
50
|
-
const [target, setTarget] = useState<TranscriptFindTarget<K> | null>(null);
|
|
51
|
-
const onFind = useCallback(
|
|
52
|
-
(id: K) => setTarget((open) => (open?.sessionId === id ? open : { sessionId: id, query: '' })),
|
|
53
|
-
[],
|
|
54
|
-
);
|
|
55
|
-
useTranscriptFindKey({ sessionId, onFind, ...(blocked ? { blocked } : {}) });
|
|
56
|
-
|
|
57
|
-
/*
|
|
58
|
-
* A find opened FOR the session switched to (a palette match) stays; one whose switch did not happen
|
|
59
|
-
* (a session in another window) is dropped rather than left to open later.
|
|
60
|
-
*/
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (target && target.sessionId !== sessionId) setTarget(null);
|
|
63
|
-
}, [sessionId, target]);
|
|
64
|
-
|
|
65
|
-
const close = useCallback(() => setTarget(null), []);
|
|
66
|
-
const findIn = useCallback((next: TranscriptFindTarget<K>) => setTarget(next), []);
|
|
67
|
-
const open = target !== null && target.sessionId === sessionId;
|
|
68
|
-
const query = target?.query;
|
|
69
|
-
return useMemo(() => ({ open, query, findIn, close }), [open, query, findIn, close]);
|
|
70
|
-
}
|