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
package/src/motion/springs.ts
DELETED
|
@@ -1,413 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The design system's motion vocabulary: ONE place every animation reads its
|
|
3
|
-
* curve from, JS (`motion/react` components, `animate()`) and CSS alike.
|
|
4
|
-
*
|
|
5
|
-
* Which motion for what:
|
|
6
|
-
*
|
|
7
|
-
* snap indicators, pills, active chips, glyph swaps (a hint of overshoot)
|
|
8
|
-
* pop dialogs and other surfaces that spring from their anchor
|
|
9
|
-
* menu menus, popovers, dropdowns, hover cards, tooltips: one quick
|
|
10
|
-
* tween (opacity lands ahead of the scale, `menuTransition`),
|
|
11
|
-
* never a spring; `menu-exit` is its faster exit
|
|
12
|
-
* panel full-window screens, sheets, side panels, the sidebar
|
|
13
|
-
* slide horizontal content swaps (spaces list, lightbox steps), scroll glides
|
|
14
|
-
* settle rows, collapses, crossfades, badges: no visible bounce
|
|
15
|
-
* exit anything leaving, transform side: fast, straight, never a spring
|
|
16
|
-
* fade opacity and colour entering: a soft ease-out tween, never a spring
|
|
17
|
-
* fade-out opacity and colour leaving (the exit twin of `fade`)
|
|
18
|
-
*
|
|
19
|
-
* Movement (transform, size, position) springs: motion.dev's time-defined
|
|
20
|
-
* spring (`visualDuration` + `bounce`) with a tween twin. Opacity and colour
|
|
21
|
-
* never spring: a bouncy curve overshoots 1, clamps and ends abruptly. So an
|
|
22
|
-
* element that springs its transform fades its opacity on its own curve:
|
|
23
|
-
* `withFade('pop', prefs)` is the pop spring with `opacity` / colour /
|
|
24
|
-
* filter keys on `fade` (exits pair with `fade-out`).
|
|
25
|
-
*
|
|
26
|
-
* Two switches on `<html>` pick what plays:
|
|
27
|
-
*
|
|
28
|
-
* data-motion off | reduced | full (Appearance › Motion)
|
|
29
|
-
* data-springs on | off (Appearance › Spring animations)
|
|
30
|
-
*
|
|
31
|
-
* full + springs movement springs, fades tween
|
|
32
|
-
* full, no springs movement on the tween twins, fades tween
|
|
33
|
-
* reduced no movement (0ms; `MotionConfig reducedMotion` jumps
|
|
34
|
-
* transforms in JS), fades a brief 140ms
|
|
35
|
-
* off everything instant, exit timers included
|
|
36
|
-
*
|
|
37
|
-
* CSS consumes the same curves: `cssMotionVars` → `--zg-motion-<name>-duration`
|
|
38
|
-
* / `-ease` (a spring becomes a CSS `linear()` easing sampled by motion's
|
|
39
|
-
* `spring().toString()`, its duration the settle time), plus the shorthand
|
|
40
|
-
* `--zg-motion-<name>` (duration + ease) from tokens.css. Split movement and
|
|
41
|
-
* fade per property:
|
|
42
|
-
*
|
|
43
|
-
* transition: transform var(--zg-motion-pop), opacity var(--zg-motion-fade);
|
|
44
|
-
* animation: zg-rise var(--zg-motion-pop) both, zg-fade-in var(--zg-motion-fade) both;
|
|
45
|
-
*
|
|
46
|
-
* Hover / press colour feedback is `--zg-motion-hover-*` (a short fixed tween
|
|
47
|
-
* in every mode but `off`; Uno's `transition-colors` defaults to it).
|
|
48
|
-
* `panelMotionVars` → `--zg-panel-ms` / `-ease` for the layout panels.
|
|
49
|
-
* tokens.css ships the same values as static fallbacks (keyed on the two
|
|
50
|
-
* attributes) for consumers without JS; `applyMotionVars` / `MotionProvider`
|
|
51
|
-
* (motion/provider.tsx) write the live ones. JS exit timers read the vars
|
|
52
|
-
* (`readExitMs` in presence.ts), never a hard-coded length.
|
|
53
|
-
*/
|
|
54
|
-
import { spring, type TargetAndTransition, type Transition } from 'motion';
|
|
55
|
-
import { useSyncExternalStore } from 'react';
|
|
56
|
-
|
|
57
|
-
import { useMotionLevel, type MotionLevel } from './reduced';
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Name of a motion in the design system's vocabulary. `snap`, `pop`, `panel`, `slide` and
|
|
61
|
-
* `settle` are movement that springs; `exit` is a fast straight exit; `fade` and `fade-out` are
|
|
62
|
-
* the opacity curves for entering and leaving; `menu` and `menu-exit` are the menu tweens.
|
|
63
|
-
*/
|
|
64
|
-
export type MotionName =
|
|
65
|
-
'snap' | 'pop' | 'panel' | 'slide' | 'settle' | 'exit' | 'fade' | 'fade-out' | 'menu' | 'menu-exit';
|
|
66
|
-
|
|
67
|
-
interface MotionSpec {
|
|
68
|
-
/** Spring: perceived duration in seconds and bounce (0 = critically damped). Absent: never springs. */
|
|
69
|
-
spring?: { visualDuration: number; bounce: number };
|
|
70
|
-
/** Tween (the twin, or the only curve): seconds + cubic-bezier. */
|
|
71
|
-
duration: number;
|
|
72
|
-
ease: readonly [number, number, number, number];
|
|
73
|
-
/** Opacity / colour: kept (briefly) under reduced motion; movement drops to 0. */
|
|
74
|
-
fade?: boolean;
|
|
75
|
-
/** Reduced motion keeps it as an opacity-only tween of this many seconds (the menus). */
|
|
76
|
-
reduced?: number;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** `--zg-ease-out`: strong ease-out, the tween curve of `snap`, `pop`, `slide`, `settle` and `menu`. */
|
|
80
|
-
const EASE_OUT = [0.23, 1, 0.32, 1] as const;
|
|
81
|
-
/** `--zg-ease-drawer`: panels and sheets. */
|
|
82
|
-
const EASE_DRAWER = [0.32, 0.72, 0, 1] as const;
|
|
83
|
-
/** Exits accelerate away: shorter and never bouncy. */
|
|
84
|
-
const EASE_IN = [0.4, 0, 1, 1] as const;
|
|
85
|
-
/** Fades: a soft ease-out (cubic), so opacity lands gently instead of clamping. */
|
|
86
|
-
const EASE_FADE = [0.33, 1, 0.68, 1] as const;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* The curve of every {@link MotionName}: its spring (when it has one), tween duration in
|
|
90
|
-
* seconds and easing.
|
|
91
|
-
*/
|
|
92
|
-
export const MOTIONS: Readonly<Record<MotionName, MotionSpec>> = {
|
|
93
|
-
snap: { spring: { visualDuration: 0.28, bounce: 0.18 }, duration: 0.24, ease: EASE_OUT },
|
|
94
|
-
pop: { spring: { visualDuration: 0.22, bounce: 0.12 }, duration: 0.16, ease: EASE_OUT },
|
|
95
|
-
panel: { spring: { visualDuration: 0.32, bounce: 0.04 }, duration: 0.2, ease: EASE_DRAWER },
|
|
96
|
-
slide: { spring: { visualDuration: 0.34, bounce: 0.1 }, duration: 0.22, ease: EASE_OUT },
|
|
97
|
-
settle: { spring: { visualDuration: 0.26, bounce: 0.06 }, duration: 0.24, ease: EASE_OUT },
|
|
98
|
-
exit: { duration: 0.14, ease: EASE_IN },
|
|
99
|
-
fade: { duration: 0.2, ease: EASE_FADE, fade: true },
|
|
100
|
-
'fade-out': { duration: 0.14, ease: EASE_FADE, fade: true },
|
|
101
|
-
menu: { duration: 0.14, ease: EASE_OUT, reduced: 0.08 },
|
|
102
|
-
'menu-exit': { duration: 0.09, ease: EASE_IN, reduced: 0.08 },
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
/** A menu's enter opacity lands ahead of its scale: ~100ms of the 140ms `menu`. */
|
|
106
|
-
export const MENU_FADE_RATIO = 0.7;
|
|
107
|
-
|
|
108
|
-
/** Every {@link MotionName}, in the order of {@link MOTIONS}. */
|
|
109
|
-
export const MOTION_NAMES = Object.keys(MOTIONS) as MotionName[];
|
|
110
|
-
|
|
111
|
-
/** Hover / press colour feedback: one short tween, the same with springs on or off. */
|
|
112
|
-
export const HOVER_MOTION = { duration: 0.15, ease: [0.4, 0, 0.2, 1] as const };
|
|
113
|
-
|
|
114
|
-
/** The panel slider's default (ms): the `panel` spring's perceived duration. */
|
|
115
|
-
export const DEFAULT_PANEL_MS = 200;
|
|
116
|
-
|
|
117
|
-
/** The two switches that pick what plays: the motion level and whether movement springs. */
|
|
118
|
-
export interface MotionPrefs {
|
|
119
|
-
/** Motion level. `off` is instant, `reduced` keeps brief fades, `full` plays all motion. */
|
|
120
|
-
level: MotionLevel;
|
|
121
|
-
/** Whether movement uses springs. When off, it uses the tween twins. */
|
|
122
|
-
springs: boolean;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/** Instant: what every motion resolves to with motion off. */
|
|
126
|
-
export const INSTANT: Transition = { duration: 0 };
|
|
127
|
-
|
|
128
|
-
/** Reduced motion: a short fade; transforms jump (MotionConfig `reducedMotion`). */
|
|
129
|
-
export const REDUCED_FADE: Transition = { type: 'tween', duration: 0.14, ease: 'easeOut' };
|
|
130
|
-
|
|
131
|
-
/** The values `withFade` puts on the fade curve: never sprung, whatever moves around them. */
|
|
132
|
-
export const FADE_KEYS = [
|
|
133
|
-
'opacity',
|
|
134
|
-
'color',
|
|
135
|
-
'backgroundColor',
|
|
136
|
-
'borderColor',
|
|
137
|
-
'fill',
|
|
138
|
-
'stroke',
|
|
139
|
-
'filter',
|
|
140
|
-
'backdropFilter',
|
|
141
|
-
] as const;
|
|
142
|
-
|
|
143
|
-
const isExit = (name: MotionName) => name === 'exit' || name === 'fade-out' || name === 'menu-exit';
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* The motion transition for `name` under `prefs`. `visualDuration` overrides
|
|
147
|
-
* the spec's duration (seconds; the panel slider), scaling the tween too.
|
|
148
|
-
*
|
|
149
|
-
* @param name - The motion to resolve.
|
|
150
|
-
* @param prefs - The live motion level and spring switch.
|
|
151
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
152
|
-
* slider. A value of 0 or less is instant.
|
|
153
|
-
* @returns A `motion` transition: instant when off, a short fade when reduced, otherwise a spring
|
|
154
|
-
* or tween.
|
|
155
|
-
*/
|
|
156
|
-
export function motionTransition(name: MotionName, prefs: MotionPrefs, visualDuration?: number): Transition {
|
|
157
|
-
if (prefs.level === 'off') return INSTANT;
|
|
158
|
-
const spec = MOTIONS[name];
|
|
159
|
-
if (prefs.level === 'reduced')
|
|
160
|
-
return spec.reduced === undefined ? REDUCED_FADE : { type: 'tween', duration: spec.reduced, ease: 'easeOut' };
|
|
161
|
-
if (visualDuration !== undefined && visualDuration <= 0) return INSTANT;
|
|
162
|
-
if (prefs.springs && spec.spring)
|
|
163
|
-
return { type: 'spring', visualDuration: visualDuration ?? spec.spring.visualDuration, bounce: spec.spring.bounce };
|
|
164
|
-
const scale = visualDuration !== undefined ? visualDuration / (spec.spring?.visualDuration ?? spec.duration) : 1;
|
|
165
|
-
return { type: 'tween', duration: spec.duration * scale, ease: [...spec.ease] };
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* The fade curve for opacity / colour: `fade`, or `fade-out` for an exit.
|
|
170
|
-
*
|
|
171
|
-
* @param prefs - The live motion level and spring switch.
|
|
172
|
-
* @param exit - Use the leaving curve, `fade-out`, instead of `fade`.
|
|
173
|
-
* @returns The transition for opacity and colour.
|
|
174
|
-
*/
|
|
175
|
-
export function fadeTransition(prefs: MotionPrefs, exit = false): Transition {
|
|
176
|
-
return motionTransition(exit ? 'fade-out' : 'fade', prefs);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* A menu's open (`menu`) or close (`menu-exit`) transition: one tween for
|
|
181
|
-
* scale / position, with the enter's opacity on the same curve but shorter
|
|
182
|
-
* (`MENU_FADE_RATIO`) so the surface is solid before it finishes growing.
|
|
183
|
-
* Reduced: an opacity-only 80ms tween (pair it with no transform). Off: instant.
|
|
184
|
-
*
|
|
185
|
-
* @param prefs - The live motion level and spring switch.
|
|
186
|
-
* @param exit - Use the close transition, `menu-exit`, instead of `menu`.
|
|
187
|
-
* @returns The transition for a menu's scale and position, with a shorter opacity curve on enter.
|
|
188
|
-
*/
|
|
189
|
-
export function menuTransition(prefs: MotionPrefs, exit = false): Transition {
|
|
190
|
-
const move = motionTransition(exit ? 'menu-exit' : 'menu', prefs);
|
|
191
|
-
const fade = !exit && prefs.level === 'full' ? { ...move, duration: MOTIONS.menu.duration * MENU_FADE_RATIO } : move;
|
|
192
|
-
return { ...move, opacity: fade } as Transition;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
/**
|
|
196
|
-
* `name`'s transition for movement, with every `FADE_KEYS` value on the
|
|
197
|
-
* fade curve (`fade-out` when `name` is an exit): spring the transform,
|
|
198
|
-
* fade the opacity. Pass it as a motion component's `transition`.
|
|
199
|
-
*
|
|
200
|
-
* @param name - The movement motion to use.
|
|
201
|
-
* @param prefs - The live motion level and spring switch.
|
|
202
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
203
|
-
* slider. A value of 0 or less is instant.
|
|
204
|
-
* @returns The movement transition with opacity and colour keys on the fade curve.
|
|
205
|
-
*/
|
|
206
|
-
export function withFade(name: MotionName, prefs: MotionPrefs, visualDuration?: number): Transition {
|
|
207
|
-
const fade = fadeTransition(prefs, isExit(name));
|
|
208
|
-
const mixed: Record<string, unknown> = { ...motionTransition(name, prefs, visualDuration) };
|
|
209
|
-
for (const key of FADE_KEYS) mixed[key] = fade;
|
|
210
|
-
return mixed as Transition;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
function splitCss(css: string): [string, string] {
|
|
214
|
-
// "550ms linear(0, 0.12, …, 1)": the spring sampled as a CSS easing, settle time first.
|
|
215
|
-
const space = css.indexOf(' ');
|
|
216
|
-
return [css.slice(0, space), css.slice(space + 1)];
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
const ms = (seconds: number) => `${Math.round(seconds * 1000)}ms`;
|
|
220
|
-
const bezier = (ease: readonly number[]) => `cubic-bezier(${ease.join(', ')})`;
|
|
221
|
-
|
|
222
|
-
/**
|
|
223
|
-
* `--zg-motion-<name>-duration` / `-ease` for every motion and for `hover`,
|
|
224
|
-
* for CSS that stays CSS. Below `full`, movement is 0ms; fades stay a brief
|
|
225
|
-
* tween under `reduced`; `off` zeroes everything.
|
|
226
|
-
*
|
|
227
|
-
* @param prefs - The live motion level and spring switch.
|
|
228
|
-
* @returns A map of custom property names to values.
|
|
229
|
-
*/
|
|
230
|
-
export function cssMotionVars(prefs: MotionPrefs): Record<string, string> {
|
|
231
|
-
const vars: Record<string, string> = {};
|
|
232
|
-
const set = (name: string, duration: string, ease: string) => {
|
|
233
|
-
vars[`--zg-motion-${name}-duration`] = duration;
|
|
234
|
-
vars[`--zg-motion-${name}-ease`] = ease;
|
|
235
|
-
};
|
|
236
|
-
for (const name of MOTION_NAMES) {
|
|
237
|
-
const spec = MOTIONS[name];
|
|
238
|
-
if (prefs.level === 'off') set(name, '0ms', 'linear');
|
|
239
|
-
else if (prefs.level === 'reduced' && spec.reduced !== undefined) set(name, ms(spec.reduced), 'ease-out');
|
|
240
|
-
else if (prefs.level === 'reduced') set(name, spec.fade ? ms(0.14) : '0ms', spec.fade ? 'ease-out' : 'linear');
|
|
241
|
-
else if (prefs.springs && spec.spring)
|
|
242
|
-
set(name, ...splitCss(String(spring(spec.spring.visualDuration, spec.spring.bounce))));
|
|
243
|
-
else set(name, ms(spec.duration), bezier(spec.ease));
|
|
244
|
-
}
|
|
245
|
-
if (prefs.level === 'off') set('hover', '0ms', 'linear');
|
|
246
|
-
else set('hover', ms(HOVER_MOTION.duration), bezier(HOVER_MOTION.ease));
|
|
247
|
-
return vars;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
/**
|
|
251
|
-
* `--zg-panel-ms` / `--zg-panel-ease` for the layout panels (sidebar, side
|
|
252
|
-
* panel, terminal drawer, tree column). They animate width / height in CSS
|
|
253
|
-
* (a JS tween would re-lay out the chat column every frame), on the `panel`
|
|
254
|
-
* spring sized by the user's slider: `panelMs` is the spring's perceived
|
|
255
|
-
* duration; `--zg-panel-ms` becomes its settle time, which is also what
|
|
256
|
-
* `usePresence` (`readPanelMs`) waits before unmounting a closed panel.
|
|
257
|
-
*
|
|
258
|
-
* @param panelMs - The panel spring's perceived duration, in ms. Zero or less makes panels instant.
|
|
259
|
-
* @param prefs - The live motion level and spring switch.
|
|
260
|
-
* @returns `--zg-panel-ms` and `--zg-panel-ease`.
|
|
261
|
-
*/
|
|
262
|
-
export function panelMotionVars(panelMs: number, prefs: MotionPrefs): Record<string, string> {
|
|
263
|
-
if (prefs.level !== 'full' || panelMs <= 0) return { '--zg-panel-ms': '0ms', '--zg-panel-ease': 'linear' };
|
|
264
|
-
if (!prefs.springs) return { '--zg-panel-ms': `${panelMs}ms`, '--zg-panel-ease': bezier(MOTIONS.panel.ease) };
|
|
265
|
-
const [duration, ease] = splitCss(String(spring(panelMs / 1000, MOTIONS.panel.spring!.bounce)));
|
|
266
|
-
return { '--zg-panel-ms': duration, '--zg-panel-ease': ease };
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* Every motion custom property for `prefs`: the named curves, hover and the panels.
|
|
271
|
-
*
|
|
272
|
-
* @param prefs - The live motion level and spring switch.
|
|
273
|
-
* @param panelMs - The panel spring's perceived duration, in ms.
|
|
274
|
-
* @returns A map of custom property names to values.
|
|
275
|
-
*/
|
|
276
|
-
export function motionVars(prefs: MotionPrefs, panelMs: number = DEFAULT_PANEL_MS): Record<string, string> {
|
|
277
|
-
return { ...cssMotionVars(prefs), ...panelMotionVars(panelMs, prefs) };
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/** Options of {@link applyMotionVars}. */
|
|
281
|
-
export interface ApplyMotionOptions {
|
|
282
|
-
/** The panel slider (ms). Default `DEFAULT_PANEL_MS`. */
|
|
283
|
-
panelMs?: number;
|
|
284
|
-
/** Also write `data-motion` / `data-springs`. Default true; false when the attributes are the input. */
|
|
285
|
-
attributes?: boolean;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* Write the motion switches and every `--zg-motion-*` / `--zg-panel-*` var
|
|
290
|
-
* on `root` (usually `<html>`): what an app calls when its motion settings
|
|
291
|
-
* change, so it never copies the curves. Returns the vars written.
|
|
292
|
-
*
|
|
293
|
-
* @param root - The element to write to, usually `document.documentElement`.
|
|
294
|
-
* @param prefs - The motion level and spring switch to apply.
|
|
295
|
-
* @param options - See {@link ApplyMotionOptions}.
|
|
296
|
-
*/
|
|
297
|
-
export function applyMotionVars(
|
|
298
|
-
root: HTMLElement,
|
|
299
|
-
prefs: MotionPrefs,
|
|
300
|
-
{ panelMs = DEFAULT_PANEL_MS, attributes = true }: ApplyMotionOptions = {},
|
|
301
|
-
): Record<string, string> {
|
|
302
|
-
const vars = motionVars(prefs, panelMs);
|
|
303
|
-
for (const [name, value] of Object.entries(vars)) root.style.setProperty(name, value);
|
|
304
|
-
if (attributes) {
|
|
305
|
-
root.dataset.motion = prefs.level;
|
|
306
|
-
root.dataset.springs = prefs.springs ? 'on' : 'off';
|
|
307
|
-
/*
|
|
308
|
-
* Present only below `full`, for rules that reach every element (`[data-motion-limited] *`).
|
|
309
|
-
* `[data-motion='off'] *` is tried by every element in every restyle and walks to the root
|
|
310
|
-
* for its ancestor, since `data-motion` is always set; a selector on an attribute that is
|
|
311
|
-
* absent is rejected at once by the browser's ancestor filter.
|
|
312
|
-
*/
|
|
313
|
-
root.toggleAttribute('data-motion-off', prefs.level === 'off');
|
|
314
|
-
root.toggleAttribute('data-motion-limited', prefs.level !== 'full');
|
|
315
|
-
}
|
|
316
|
-
return vars;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
function readSprings(): boolean {
|
|
320
|
-
return document.documentElement.dataset.springs !== 'off';
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
function subscribeSprings(onChange: () => void): () => void {
|
|
324
|
-
const observer = new MutationObserver(onChange);
|
|
325
|
-
observer.observe(document.documentElement, { attributes: true, attributeFilter: ['data-springs'] });
|
|
326
|
-
return () => observer.disconnect();
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
/** Spring animations on (`html[data-springs]` is not `off`). */
|
|
330
|
-
export function useSprings(): boolean {
|
|
331
|
-
return useSyncExternalStore(subscribeSprings, readSprings, () => true);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
/** Both switches, live. */
|
|
335
|
-
export function useMotionPrefs(): MotionPrefs {
|
|
336
|
-
return { level: useMotionLevel(), springs: useSprings() };
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
/**
|
|
340
|
-
* `motionTransition(name)` under the live preferences.
|
|
341
|
-
*
|
|
342
|
-
* @param name - The motion to resolve.
|
|
343
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
344
|
-
* slider. A value of 0 or less is instant.
|
|
345
|
-
*/
|
|
346
|
-
export function useMotionTransition(name: MotionName, visualDuration?: number): Transition {
|
|
347
|
-
return motionTransition(name, useMotionPrefs(), visualDuration);
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* `menuTransition` under the live preferences.
|
|
352
|
-
*
|
|
353
|
-
* @param exit - Use the close transition instead of the open one.
|
|
354
|
-
*/
|
|
355
|
-
export function useMenuTransition(exit = false): Transition {
|
|
356
|
-
return menuTransition(useMotionPrefs(), exit);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/**
|
|
360
|
-
* `withFade(name)` under the live preferences.
|
|
361
|
-
*
|
|
362
|
-
* @param name - The movement motion to use.
|
|
363
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
364
|
-
* slider. A value of 0 or less is instant.
|
|
365
|
-
*/
|
|
366
|
-
export function useWithFade(name: MotionName, visualDuration?: number): Transition {
|
|
367
|
-
return withFade(name, useMotionPrefs(), visualDuration);
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
/**
|
|
371
|
-
* A closing tab's `exit`, for every tab strip (tabs in an `AnimatePresence initial={false}`):
|
|
372
|
-
* it folds to nothing on `settle` as it fades out, so the tabs after it flow left from where
|
|
373
|
-
* they were. None with motion reduced or off: the tab goes at once and the rest close up.
|
|
374
|
-
*/
|
|
375
|
-
export function useTabExit(): TargetAndTransition | undefined {
|
|
376
|
-
const prefs = useMotionPrefs();
|
|
377
|
-
if (prefs.level !== 'full') return undefined;
|
|
378
|
-
return {
|
|
379
|
-
width: 0,
|
|
380
|
-
opacity: 0,
|
|
381
|
-
overflow: 'hidden',
|
|
382
|
-
pointerEvents: 'none',
|
|
383
|
-
transition: { ...motionTransition('settle', prefs), opacity: fadeTransition(prefs, true) },
|
|
384
|
-
};
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
/** Both switches, read off `<html>` for imperative code. */
|
|
388
|
-
export function currentMotionPrefs(): MotionPrefs {
|
|
389
|
-
const level = document.documentElement.dataset.motion;
|
|
390
|
-
return { level: level === 'off' || level === 'reduced' ? level : 'full', springs: readSprings() };
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Non-hook read for imperative animations (`animate()`, scroll glides).
|
|
395
|
-
*
|
|
396
|
-
* @param name - The motion to resolve.
|
|
397
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
398
|
-
* slider. A value of 0 or less is instant.
|
|
399
|
-
*/
|
|
400
|
-
export function currentMotionTransition(name: MotionName, visualDuration?: number): Transition {
|
|
401
|
-
return motionTransition(name, currentMotionPrefs(), visualDuration);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Non-hook `withFade`, for `animate()` calls that move and fade one element.
|
|
406
|
-
*
|
|
407
|
-
* @param name - The movement motion to use.
|
|
408
|
-
* @param visualDuration - Overrides the motion's duration, in seconds, for example from the panel
|
|
409
|
-
* slider. A value of 0 or less is instant.
|
|
410
|
-
*/
|
|
411
|
-
export function currentWithFade(name: MotionName, visualDuration?: number): Transition {
|
|
412
|
-
return withFade(name, currentMotionPrefs(), visualDuration);
|
|
413
|
-
}
|
package/src/motion/swap.tsx
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* State flips: an element that appears / disappears, or a slot whose
|
|
3
|
-
* content is swapped by key (spinner → check → x).
|
|
4
|
-
*
|
|
5
|
-
* Presence keeps a leaving node mounted through a short exit and stamps
|
|
6
|
-
* `data-state="enter" | "exit"` for CSS (`.zg-presence`)
|
|
7
|
-
* Crossfade stacks the outgoing and incoming nodes in one grid cell so one
|
|
8
|
-
* fades / scales out while the other fades / scales in
|
|
9
|
-
* useCadencedValue holds a fast-changing value to a readable cadence
|
|
10
|
-
*
|
|
11
|
-
* Motion lives in styles/motion.css (`.zg-presence` / `.zg-crossfade`: the
|
|
12
|
-
* transform on `snap` / `settle` and `exit`, opacity and blur on `fade` /
|
|
13
|
-
* `fade-out`). How long a leaving node stays is read off the same vars
|
|
14
|
-
* (`readExitMs`) when its exit starts: reduced motion keeps a brief fade,
|
|
15
|
-
* off swaps at once. Layout-neutral: the container takes the size of its
|
|
16
|
-
* largest child.
|
|
17
|
-
*/
|
|
18
|
-
import { useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react';
|
|
19
|
-
|
|
20
|
-
import { readExitMs, usePresence } from './presence';
|
|
21
|
-
|
|
22
|
-
/** `settle` prop: how long after mounting a key change replaces the content instead of crossfading (a heuristic window, not a motion). */
|
|
23
|
-
const SETTLE_MS = 200;
|
|
24
|
-
|
|
25
|
-
/** Props for {@link Presence}. */
|
|
26
|
-
export interface PresenceProps {
|
|
27
|
-
/** Whether the content is shown. When it turns false, the content stays mounted for its exit. */
|
|
28
|
-
show: boolean;
|
|
29
|
-
/** The content to show and animate out. */
|
|
30
|
-
children: ReactNode;
|
|
31
|
-
/** Extra classes on the wrapper (sizing, spacing). */
|
|
32
|
-
className?: string;
|
|
33
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
34
|
-
style?: CSSProperties;
|
|
35
|
-
/** Inline wrapper by default; `block` for full-width rows. */
|
|
36
|
-
display?: 'inline' | 'block';
|
|
37
|
-
/** `scale` (default) for glyphs; `text` blurs a line of words in and out, anchored left. */
|
|
38
|
-
variant?: 'scale' | 'text';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Keeps `children` mounted for the exit (`readExitMs()`) after `show` flips
|
|
43
|
-
* false so the exit animation plays. Renders nothing once the exit is done.
|
|
44
|
-
*
|
|
45
|
-
* @param props - Component props.
|
|
46
|
-
*/
|
|
47
|
-
export function Presence({
|
|
48
|
-
show,
|
|
49
|
-
children,
|
|
50
|
-
className = '',
|
|
51
|
-
style,
|
|
52
|
-
display = 'inline',
|
|
53
|
-
variant = 'scale',
|
|
54
|
-
}: PresenceProps) {
|
|
55
|
-
const { mounted } = usePresence(show, { exitMs: readExitMs });
|
|
56
|
-
|
|
57
|
-
if (!mounted) return null;
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<span
|
|
61
|
-
className={`zg-presence ${display === 'block' ? 'block' : 'inline-flex items-center'} ${className}`}
|
|
62
|
-
style={style}
|
|
63
|
-
data-state={show ? 'enter' : 'exit'}
|
|
64
|
-
data-variant={variant}
|
|
65
|
-
>
|
|
66
|
-
{children}
|
|
67
|
-
</span>
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/** Props for {@link Crossfade}. */
|
|
72
|
-
export interface CrossfadeProps {
|
|
73
|
-
/** Identity of the current content; a change triggers the swap. */
|
|
74
|
-
activeKey: string | number;
|
|
75
|
-
/** The current content. `null` is a valid empty slot. */
|
|
76
|
-
children: ReactNode;
|
|
77
|
-
/** Extra classes on the wrapping cell. */
|
|
78
|
-
className?: string;
|
|
79
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
80
|
-
style?: CSSProperties;
|
|
81
|
-
/**
|
|
82
|
-
* `scale` (default): the glyph swap, in/out through scale around the
|
|
83
|
-
* centre; right for spinners, checks and icons. `text`: for a line of
|
|
84
|
-
* words, anchored left; the old line blurs away, the new one sharpens
|
|
85
|
-
* into place, no scale.
|
|
86
|
-
*/
|
|
87
|
-
variant?: 'scale' | 'text';
|
|
88
|
-
/**
|
|
89
|
-
* `text` only: which edge both lines hold to. `end` for text set against
|
|
90
|
-
* something on its right (a trailing slot): when the outgoing line leaves
|
|
91
|
-
* and the cell narrows, the line on show stays where it is.
|
|
92
|
-
*/
|
|
93
|
-
align?: 'start' | 'end';
|
|
94
|
-
/**
|
|
95
|
-
* For content inside something that is itself still appearing (a line
|
|
96
|
-
* fading in): a key change in its first moments replaces the content
|
|
97
|
-
* without a crossfade, since two lines fading over each other inside a
|
|
98
|
-
* line that is fading in reads as a flicker.
|
|
99
|
-
*/
|
|
100
|
-
settle?: boolean;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Swaps content by key with a cross-fade: the previous node stays in the
|
|
105
|
-
* same grid cell for the exit (`readExitMs()`) playing its exit while the new
|
|
106
|
-
* one plays its enter; with motion off it is replaced at once. `children ===
|
|
107
|
-
* null` is a valid state (empty slot).
|
|
108
|
-
*
|
|
109
|
-
* @param props - Component props.
|
|
110
|
-
*/
|
|
111
|
-
export function Crossfade({
|
|
112
|
-
activeKey,
|
|
113
|
-
children,
|
|
114
|
-
className = '',
|
|
115
|
-
style,
|
|
116
|
-
variant = 'scale',
|
|
117
|
-
align = 'start',
|
|
118
|
-
settle = false,
|
|
119
|
-
}: CrossfadeProps) {
|
|
120
|
-
const [previous, setPrevious] = useState<{ key: string | number; node: ReactNode } | null>(null);
|
|
121
|
-
const lastRef = useRef<{ key: string | number; node: ReactNode }>({ key: activeKey, node: children });
|
|
122
|
-
// The exit timer lives in a ref: this effect re-runs on every `children`
|
|
123
|
-
// change (each streaming tick), and a cleanup-owned timer would be
|
|
124
|
-
// cancelled by same-key re-renders, leaving the outgoing node mounted
|
|
125
|
-
// forever at opacity 0 and still sizing the grid cell.
|
|
126
|
-
const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
127
|
-
// The first content was not swapped in, it was already there (a row
|
|
128
|
-
// mounting, a conversation opening): only later keys play the enter. With
|
|
129
|
-
// `settle`, a key change while the slot is still appearing replaces it.
|
|
130
|
-
const [mountedAt] = useState(() => performance.now());
|
|
131
|
-
const [firstKey, setFirstKey] = useState(activeKey);
|
|
132
|
-
const [swapped, setSwapped] = useState(false);
|
|
133
|
-
if (!swapped && activeKey !== firstKey) {
|
|
134
|
-
// eslint-disable-next-line react-hooks/purity -- the appearing window is a wall-clock check, decided while rendering
|
|
135
|
-
if (settle && performance.now() - mountedAt < SETTLE_MS) setFirstKey(activeKey);
|
|
136
|
-
else setSwapped(true);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
useEffect(() => {
|
|
140
|
-
const last = lastRef.current;
|
|
141
|
-
lastRef.current = { key: activeKey, node: children };
|
|
142
|
-
if (last.key === activeKey || !swapped) return;
|
|
143
|
-
if (timer.current) clearTimeout(timer.current);
|
|
144
|
-
timer.current = null;
|
|
145
|
-
const exitMs = readExitMs();
|
|
146
|
-
if (exitMs <= 0) {
|
|
147
|
-
setPrevious(null);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
setPrevious(last);
|
|
151
|
-
timer.current = setTimeout(() => {
|
|
152
|
-
timer.current = null;
|
|
153
|
-
setPrevious(null);
|
|
154
|
-
}, exitMs);
|
|
155
|
-
}, [activeKey, children, swapped]);
|
|
156
|
-
|
|
157
|
-
useEffect(
|
|
158
|
-
() => () => {
|
|
159
|
-
if (timer.current) clearTimeout(timer.current);
|
|
160
|
-
},
|
|
161
|
-
[],
|
|
162
|
-
);
|
|
163
|
-
|
|
164
|
-
return (
|
|
165
|
-
<span className={`zg-crossfade ${className}`} style={style} data-variant={variant} data-align={align}>
|
|
166
|
-
{previous && previous.key !== activeKey && (
|
|
167
|
-
<span key={`out-${String(previous.key)}`} className="zg-crossfade-item" data-state="exit" aria-hidden>
|
|
168
|
-
{previous.node}
|
|
169
|
-
</span>
|
|
170
|
-
)}
|
|
171
|
-
<span key={`in-${String(activeKey)}`} className="zg-crossfade-item" data-state={swapped ? 'enter' : 'idle'}>
|
|
172
|
-
{children}
|
|
173
|
-
</span>
|
|
174
|
-
</span>
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Hold a fast-changing value to a readable cadence: at most one change every
|
|
180
|
-
* `ms`, the newest value always wins, and the last one always lands (a
|
|
181
|
-
* trailing update fires when the source goes quiet). The first value shows
|
|
182
|
-
* at once.
|
|
183
|
-
*
|
|
184
|
-
* @param value - The source value, which may change faster than it should show.
|
|
185
|
-
* @param ms - The minimum time between shown changes, in ms.
|
|
186
|
-
* @returns The value to show.
|
|
187
|
-
*/
|
|
188
|
-
export function useCadencedValue<T>(value: T, ms: number): T {
|
|
189
|
-
const [shown, setShown] = useState(value);
|
|
190
|
-
const last = useRef(Number.NEGATIVE_INFINITY);
|
|
191
|
-
const timer = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
192
|
-
const latest = useRef(value);
|
|
193
|
-
useLayoutEffect(() => {
|
|
194
|
-
latest.current = value;
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
useEffect(() => {
|
|
198
|
-
if (Object.is(value, shown)) return;
|
|
199
|
-
const wait = Math.max(0, ms - (performance.now() - last.current));
|
|
200
|
-
if (timer.current) clearTimeout(timer.current);
|
|
201
|
-
timer.current = setTimeout(() => {
|
|
202
|
-
timer.current = null;
|
|
203
|
-
last.current = performance.now();
|
|
204
|
-
setShown(latest.current);
|
|
205
|
-
}, wait);
|
|
206
|
-
// No cleanup: a newer value reschedules above; unmount clears below.
|
|
207
|
-
}, [value, shown, ms]);
|
|
208
|
-
|
|
209
|
-
useEffect(
|
|
210
|
-
() => () => {
|
|
211
|
-
if (timer.current) clearTimeout(timer.current);
|
|
212
|
-
},
|
|
213
|
-
[],
|
|
214
|
-
);
|
|
215
|
-
return shown;
|
|
216
|
-
}
|