zidane-ui 9.1.1 → 9.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/index.js +1 -1
- package/dist/adapters/server-transcript-members.d.ts +1 -1
- package/dist/adapters/server-transcript-members.js +19 -1
- package/dist/app/ModalProvider.d.ts +3 -1
- package/dist/app/ModalProvider.js +15 -9
- package/dist/approvals/headless/index.js +1 -1
- package/dist/chat/HostTranscript.d.ts +3 -1
- package/dist/chat/HostTranscript.js +5 -3
- package/dist/chat/Transcript.js +1 -1
- package/dist/chat/composer/ComposerEditor.js +1 -1
- package/dist/chat/composer/index.js +1 -1
- package/dist/chat/composer/use-composer-stores.js +1 -1
- package/dist/chat/headless/block-runs.d.ts +57 -0
- package/dist/chat/headless/block-runs.js +123 -0
- package/dist/chat/headless/composer/index.js +2 -2
- package/dist/chat/headless/fixture-transcript.d.ts +6 -1
- package/dist/chat/headless/fixture-transcript.js +49 -0
- package/dist/chat/headless/host.d.ts +3 -0
- package/dist/chat/headless/index.d.ts +2 -1
- package/dist/chat/headless/index.js +12 -11
- package/dist/chat/headless/labels.d.ts +42 -0
- package/dist/chat/headless/labels.js +42 -0
- package/dist/chat/headless/session-list.d.ts +27 -0
- package/dist/chat/headless/sidebar/index.js +1 -1
- package/dist/chat/headless/sidebar/labels.d.ts +27 -0
- package/dist/chat/headless/streams/index.js +1 -1
- package/dist/chat/headless/streams/live-events.js +2 -1
- package/dist/chat/headless/streams/session-streams.js +2 -2
- package/dist/chat/headless/streams/store.js +2 -2
- package/dist/chat/headless/transcript/batch.d.ts +21 -1
- package/dist/chat/headless/transcript/batch.js +55 -10
- package/dist/chat/headless/transcript/collapse.js +18 -3
- package/dist/chat/headless/transcript/fold.js +26 -10
- package/dist/chat/headless/transcript/index.js +1 -1
- package/dist/chat/headless/transcript/rows.d.ts +7 -1
- package/dist/chat/index.d.ts +6 -1
- package/dist/chat/index.js +7 -2
- package/dist/chat/testing/contract.d.ts +6 -1
- package/dist/chat/testing/contract.js +30 -3
- package/dist/chat/transcript/AnsiText.d.ts +27 -0
- package/dist/chat/transcript/AnsiText.js +73 -0
- package/dist/chat/transcript/CodemodeScript.d.ts +33 -0
- package/dist/chat/transcript/CodemodeScript.js +212 -0
- package/dist/chat/transcript/LiveOutput.d.ts +21 -0
- package/dist/chat/transcript/LiveOutput.js +42 -0
- package/dist/chat/transcript/TranscriptRow.js +19 -2
- package/dist/chat/transcript/actions.d.ts +6 -0
- package/dist/chat/transcript/index.d.ts +6 -1
- package/dist/chat/transcript/index.js +6 -1
- package/dist/chat/transcript/markdown.js +9 -0
- package/dist/chat/transcript/renderers.d.ts +7 -0
- package/dist/chat/transcript/script-input.d.ts +17 -0
- package/dist/chat/transcript/script-input.js +16 -0
- package/dist/chat/transcript/shell-block-scope.d.ts +29 -0
- package/dist/chat/transcript/shell-block-scope.js +18 -0
- package/dist/chat/transcript/shell-block.d.ts +27 -0
- package/dist/chat/transcript/shell-block.js +306 -0
- package/dist/chat/transcript/tool-parts.d.ts +18 -6
- package/dist/chat/transcript/tool-parts.js +15 -5
- package/dist/chat/transcript/tool-payload.js +6 -3
- package/dist/chat/transcript/tool-row.js +155 -96
- package/dist/chat/transcript/user-bash.js +3 -2
- package/dist/code/HighlightedCode.js +3 -69
- package/dist/code/highlight-lines.d.ts +24 -0
- package/dist/code/highlight-lines.js +41 -0
- package/dist/code/use-highlighted-html.d.ts +5 -0
- package/dist/code/use-highlighted-html.js +75 -0
- package/dist/core.css +6 -2
- package/dist/dist/{index-CGbOWa7y.d.ts → index-WlE93Q6d.d.ts} +101 -3
- package/dist/extensions/ExtensionSettingsSidebar.js +19 -3
- package/dist/extensions/kit.d.ts +1 -1
- package/dist/git/BranchMenu.d.ts +1 -7
- package/dist/git/BranchMenu.js +17 -40
- package/dist/git/headless/labels.d.ts +0 -2
- package/dist/git/headless/labels.js +0 -2
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/onboarding/index.js +1 -1
- package/dist/onboarding/steps/ConnectStep.js +1 -1
- package/dist/onboarding/steps/ExtensionsStep.js +1 -1
- package/dist/onboarding/steps/ReadyStep.js +1 -1
- package/dist/onboarding/steps/connect/ProviderPanel.js +1 -1
- package/dist/session/headless/index.js +2 -2
- package/dist/settings/SettingsShell.d.ts +3 -1
- package/dist/settings/SettingsShell.js +15 -8
- package/dist/settings/headless/catalog.js +5 -0
- package/dist/settings/headless/layout.js +2 -1
- package/dist/settings/headless/registry.d.ts +2 -0
- package/dist/settings/headless/search.d.ts +1 -1
- package/dist/settings/sections/environments/EnvironmentsSection.js +1 -1
- package/dist/settings/sections/extensions/ExtensionsSection.js +2 -2
- package/dist/settings/sections/models/ModelRows.js +1 -1
- package/dist/settings/sections/models/model-test.js +1 -1
- package/dist/styles.css +291 -2
- package/dist/terminal/TerminalProvider.d.ts +3 -1
- package/dist/terminal/TerminalProvider.js +5 -1
- package/dist/terminal/headless/store.d.ts +10 -0
- package/dist/terminal/headless/store.js +16 -0
- package/dist/terminal/index.d.ts +2 -2
- package/dist/terminal/index.js +2 -2
- package/dist/theme/runtime-icons.d.ts +50 -0
- package/dist/theme/runtime-icons.js +95 -0
- package/package.json +3 -6
- package/src/styles/primitives.css +5 -2
- package/src/styles/transcript.css +281 -0
- package/src/adapters/browser-appearance-host.ts +0 -51
- package/src/adapters/browser-keybindings-host.ts +0 -48
- package/src/adapters/browser-workspace-host.ts +0 -92
- package/src/adapters/closable-client.ts +0 -34
- package/src/adapters/extension-modules.ts +0 -360
- package/src/adapters/index.ts +0 -35
- package/src/adapters/live-events.ts +0 -6
- package/src/adapters/live.ts +0 -270
- package/src/adapters/run-host.ts +0 -238
- package/src/adapters/server-approvals-host.ts +0 -102
- package/src/adapters/server-client.ts +0 -15
- package/src/adapters/server-composer-host.ts +0 -459
- package/src/adapters/server-extensions-host.ts +0 -979
- package/src/adapters/server-files-host.ts +0 -287
- package/src/adapters/server-git-host.ts +0 -289
- package/src/adapters/server-host.ts +0 -489
- package/src/adapters/server-machines-host.ts +0 -283
- package/src/adapters/server-oauth-flow.ts +0 -133
- package/src/adapters/server-onboarding-host.ts +0 -363
- package/src/adapters/server-palette-host.ts +0 -134
- package/src/adapters/server-session-host.ts +0 -241
- package/src/adapters/server-settings-accounts.ts +0 -212
- package/src/adapters/server-settings-host.ts +0 -120
- package/src/adapters/server-settings-models.ts +0 -46
- package/src/adapters/server-settings-performance.ts +0 -58
- package/src/adapters/server-settings-sections.ts +0 -222
- package/src/adapters/server-sidebar-host.ts +0 -59
- package/src/adapters/server-terminal-host.ts +0 -124
- package/src/adapters/server-transcript-members.ts +0 -131
- package/src/adapters/sse-host.ts +0 -264
- package/src/adapters/sse-parser.ts +0 -82
- package/src/adapters/sse-protocol.ts +0 -118
- package/src/adapters/stream-pacer.ts +0 -122
- package/src/adapters/worker-host.ts +0 -192
- package/src/adapters/worker-protocol.ts +0 -97
- package/src/app/AppHostProvider.tsx +0 -135
- package/src/app/ModalProvider.tsx +0 -731
- package/src/app/headless/app-host.ts +0 -61
- package/src/app/headless/index.ts +0 -6
- package/src/app/headless/resource.ts +0 -444
- package/src/app/index.ts +0 -9
- package/src/app/testing/index.ts +0 -90
- package/src/app/useConfirm.tsx +0 -65
- package/src/app/useResource.ts +0 -30
- package/src/appearance/AppearanceProvider.tsx +0 -383
- package/src/appearance/apply.ts +0 -69
- package/src/appearance/headless/fixture-host.ts +0 -111
- package/src/appearance/headless/fonts.ts +0 -224
- package/src/appearance/headless/host.ts +0 -65
- package/src/appearance/headless/index.ts +0 -12
- package/src/appearance/headless/prefs.ts +0 -252
- package/src/appearance/headless/storage.ts +0 -127
- package/src/appearance/headless/zoom-commands.ts +0 -21
- package/src/appearance/index.ts +0 -11
- package/src/appearance/testing/contract.ts +0 -210
- package/src/appearance/testing/index.ts +0 -6
- package/src/approvals/ApprovalBar.tsx +0 -234
- package/src/approvals/ApprovalConcern.tsx +0 -33
- package/src/approvals/ApprovalShell.tsx +0 -69
- package/src/approvals/ApprovalsProvider.tsx +0 -110
- package/src/approvals/FileEditApproval.tsx +0 -310
- package/src/approvals/HunkPreviews.tsx +0 -225
- package/src/approvals/SafelistPanel.tsx +0 -149
- package/src/approvals/headless/fixture-host.ts +0 -73
- package/src/approvals/headless/fixtures.ts +0 -86
- package/src/approvals/headless/heads.ts +0 -81
- package/src/approvals/headless/host.ts +0 -80
- package/src/approvals/headless/index.ts +0 -12
- package/src/approvals/headless/labels.ts +0 -67
- package/src/approvals/headless/pending.ts +0 -91
- package/src/approvals/headless/preview.ts +0 -94
- package/src/approvals/headless/safelist.ts +0 -63
- package/src/approvals/index.ts +0 -13
- package/src/approvals/key-scope.ts +0 -33
- package/src/approvals/testing/contract.ts +0 -230
- package/src/approvals/testing/index.ts +0 -7
- package/src/brands/marks.ts +0 -298
- package/src/chat/ChatProvider.tsx +0 -60
- package/src/chat/DaemonOrb.tsx +0 -107
- package/src/chat/HostBadge.tsx +0 -71
- package/src/chat/HostStatusDot.tsx +0 -53
- package/src/chat/HostTranscript.tsx +0 -101
- package/src/chat/PdfPreview.tsx +0 -65
- package/src/chat/RunEstimateChip.tsx +0 -168
- package/src/chat/SessionFilterMenu.tsx +0 -397
- package/src/chat/SessionGroupHeader.tsx +0 -177
- package/src/chat/SessionHostHeader.tsx +0 -66
- package/src/chat/SessionList.tsx +0 -413
- package/src/chat/SessionListRow.tsx +0 -296
- package/src/chat/SessionStreamsProvider.tsx +0 -253
- package/src/chat/StatusDot.tsx +0 -128
- package/src/chat/TextPreview.tsx +0 -121
- package/src/chat/Throbber.tsx +0 -270
- package/src/chat/Transcript.tsx +0 -523
- package/src/chat/composer/AgentPicker.tsx +0 -155
- package/src/chat/composer/AgentPickerDialog.tsx +0 -99
- package/src/chat/composer/ApprovalDock.tsx +0 -64
- package/src/chat/composer/ArchivedBanner.tsx +0 -44
- package/src/chat/composer/AttachmentTiles.tsx +0 -211
- package/src/chat/composer/Composer.tsx +0 -500
- package/src/chat/composer/ComposerBadges.tsx +0 -339
- package/src/chat/composer/ComposerControls.tsx +0 -243
- package/src/chat/composer/ComposerEditor.tsx +0 -101
- package/src/chat/composer/ComposerHostProvider.tsx +0 -46
- package/src/chat/composer/ComposerShell.tsx +0 -129
- package/src/chat/composer/ContextBreakdown.tsx +0 -382
- package/src/chat/composer/ContextOrb.tsx +0 -176
- package/src/chat/composer/ConversationBadges.tsx +0 -168
- package/src/chat/composer/DockCard.tsx +0 -126
- package/src/chat/composer/EffortPickerDialog.tsx +0 -184
- package/src/chat/composer/HostComposer.tsx +0 -135
- package/src/chat/composer/HostContextOrb.tsx +0 -94
- package/src/chat/composer/HostModelChainList.tsx +0 -102
- package/src/chat/composer/HostPicker.tsx +0 -97
- package/src/chat/composer/HostPickers.tsx +0 -320
- package/src/chat/composer/ImageModelList.tsx +0 -151
- package/src/chat/composer/ModelChainList.tsx +0 -442
- package/src/chat/composer/ModelChainParts.tsx +0 -247
- package/src/chat/composer/ModelChainRow.tsx +0 -191
- package/src/chat/composer/ModelChainRows.tsx +0 -223
- package/src/chat/composer/ModelChainTooltip.tsx +0 -121
- package/src/chat/composer/ModelFacts.tsx +0 -204
- package/src/chat/composer/ModelOptionsPicker.tsx +0 -257
- package/src/chat/composer/ModelPicker.tsx +0 -513
- package/src/chat/composer/ModelPickerDialog.tsx +0 -99
- package/src/chat/composer/ModelProviderPills.tsx +0 -141
- package/src/chat/composer/PickerPill.tsx +0 -41
- package/src/chat/composer/ProjectMenu.tsx +0 -187
- package/src/chat/composer/PromptHistoryProvider.tsx +0 -214
- package/src/chat/composer/RetryPill.tsx +0 -47
- package/src/chat/composer/RunStatusChip.tsx +0 -150
- package/src/chat/composer/ScopeToggle.tsx +0 -94
- package/src/chat/composer/SelectTurnHint.tsx +0 -40
- package/src/chat/composer/SendButton.tsx +0 -89
- package/src/chat/composer/ServerScopeToggle.tsx +0 -188
- package/src/chat/composer/attachment-ingest.ts +0 -413
- package/src/chat/composer/attachments.tsx +0 -176
- package/src/chat/composer/badge-order.ts +0 -65
- package/src/chat/composer/composer-bus.ts +0 -317
- package/src/chat/composer/index.ts +0 -63
- package/src/chat/composer/load-composer-editor.ts +0 -25
- package/src/chat/composer/model-catalog.ts +0 -424
- package/src/chat/composer/model-list-layout.ts +0 -118
- package/src/chat/composer/prompt-history-nav.ts +0 -60
- package/src/chat/composer/scope-side.ts +0 -7
- package/src/chat/composer/suggestion-extension.ts +0 -113
- package/src/chat/composer/suggestions.tsx +0 -115
- package/src/chat/composer/use-agent-profiles.ts +0 -97
- package/src/chat/composer/use-cache-hints.ts +0 -93
- package/src/chat/composer/use-composer-stores.ts +0 -140
- package/src/chat/composer/use-draft-target.ts +0 -317
- package/src/chat/composer/use-new-session-defaults.ts +0 -201
- package/src/chat/composer/use-provider-ready-poll.ts +0 -35
- package/src/chat/composer/use-run-meter.ts +0 -140
- package/src/chat/composer/use-send-prompt.ts +0 -188
- package/src/chat/composer/use-session-meters.ts +0 -109
- package/src/chat/composer/use-sustained-work.ts +0 -74
- package/src/chat/composer/useAttachmentIngest.ts +0 -116
- package/src/chat/composer/useModelListSpy.ts +0 -19
- package/src/chat/headless/badge-refs.ts +0 -76
- package/src/chat/headless/chip-labels.ts +0 -40
- package/src/chat/headless/chip-settle.ts +0 -53
- package/src/chat/headless/chip-views.ts +0 -215
- package/src/chat/headless/composer/attachment-dedupe.ts +0 -50
- package/src/chat/headless/composer/commands.ts +0 -16
- package/src/chat/headless/composer/composer-sources.ts +0 -150
- package/src/chat/headless/composer/conversation-badges.ts +0 -227
- package/src/chat/headless/composer/draft-sync.ts +0 -199
- package/src/chat/headless/composer/editor-markdown.ts +0 -137
- package/src/chat/headless/composer/ghost-autocomplete.ts +0 -381
- package/src/chat/headless/composer/host-chrome.ts +0 -197
- package/src/chat/headless/composer/host.ts +0 -250
- package/src/chat/headless/composer/index.ts +0 -17
- package/src/chat/headless/composer/labels-chrome.ts +0 -83
- package/src/chat/headless/composer/labels-editor.ts +0 -44
- package/src/chat/headless/composer/labels.ts +0 -18
- package/src/chat/headless/composer/live-cost.ts +0 -67
- package/src/chat/headless/composer/model-knobs.ts +0 -179
- package/src/chat/headless/composer/model-names.ts +0 -145
- package/src/chat/headless/composer/model-picker-prefs.ts +0 -90
- package/src/chat/headless/composer/models.ts +0 -86
- package/src/chat/headless/composer/new-session-defaults.ts +0 -68
- package/src/chat/headless/composer/prompt-suggestions.ts +0 -72
- package/src/chat/headless/composer/remember-model-pick.ts +0 -132
- package/src/chat/headless/composer/run-meter.ts +0 -228
- package/src/chat/headless/composer-modes.ts +0 -170
- package/src/chat/headless/draft-scope.ts +0 -136
- package/src/chat/headless/draft-target.ts +0 -87
- package/src/chat/headless/extension-sources.ts +0 -64
- package/src/chat/headless/file-chip.ts +0 -175
- package/src/chat/headless/fixture-host.ts +0 -294
- package/src/chat/headless/fixture-transcript.ts +0 -125
- package/src/chat/headless/fixtures/demo-transcript-all-kinds.ts +0 -233
- package/src/chat/headless/fixtures/demo-transcript.ts +0 -244
- package/src/chat/headless/host.ts +0 -264
- package/src/chat/headless/hosts.ts +0 -55
- package/src/chat/headless/index.ts +0 -31
- package/src/chat/headless/labels.ts +0 -373
- package/src/chat/headless/markdown-chunks.ts +0 -134
- package/src/chat/headless/path-resolver.ts +0 -178
- package/src/chat/headless/prompt-origin.ts +0 -90
- package/src/chat/headless/reference-store.ts +0 -285
- package/src/chat/headless/send-flow.ts +0 -347
- package/src/chat/headless/session-list.ts +0 -400
- package/src/chat/headless/sidebar/activity.ts +0 -179
- package/src/chat/headless/sidebar/badges.ts +0 -190
- package/src/chat/headless/sidebar/compaction.ts +0 -98
- package/src/chat/headless/sidebar/directory.ts +0 -1046
- package/src/chat/headless/sidebar/dot-state.ts +0 -36
- package/src/chat/headless/sidebar/environment.ts +0 -70
- package/src/chat/headless/sidebar/estimates.ts +0 -146
- package/src/chat/headless/sidebar/host.ts +0 -41
- package/src/chat/headless/sidebar/index.ts +0 -18
- package/src/chat/headless/sidebar/labels.ts +0 -161
- package/src/chat/headless/sidebar/notifications.ts +0 -61
- package/src/chat/headless/sidebar/pinned-projects.ts +0 -51
- package/src/chat/headless/sidebar/pinned-sessions.ts +0 -27
- package/src/chat/headless/sidebar/project-icons.ts +0 -116
- package/src/chat/headless/sidebar/query.ts +0 -621
- package/src/chat/headless/sidebar/rows.ts +0 -427
- package/src/chat/headless/sidebar/types.ts +0 -96
- package/src/chat/headless/sidebar/view.ts +0 -367
- package/src/chat/headless/site-icons.ts +0 -51
- package/src/chat/headless/smooth-stream.ts +0 -76
- package/src/chat/headless/store.ts +0 -62
- package/src/chat/headless/streams/actions.ts +0 -85
- package/src/chat/headless/streams/index.ts +0 -25
- package/src/chat/headless/streams/live-events.ts +0 -124
- package/src/chat/headless/streams/merge.ts +0 -60
- package/src/chat/headless/streams/pacer.ts +0 -189
- package/src/chat/headless/streams/prompt-previews.ts +0 -64
- package/src/chat/headless/streams/scheduler.ts +0 -36
- package/src/chat/headless/streams/selectors.ts +0 -76
- package/src/chat/headless/streams/session-streams.ts +0 -407
- package/src/chat/headless/streams/store.ts +0 -1107
- package/src/chat/headless/streams/transcript.ts +0 -41
- package/src/chat/headless/streams/types.ts +0 -84
- package/src/chat/headless/transcript/batch.ts +0 -429
- package/src/chat/headless/transcript/collapse.ts +0 -789
- package/src/chat/headless/transcript/fold-actions.ts +0 -269
- package/src/chat/headless/transcript/fold-attachments.ts +0 -78
- package/src/chat/headless/transcript/fold.ts +0 -382
- package/src/chat/headless/transcript/index.ts +0 -41
- package/src/chat/headless/transcript/nesting.ts +0 -73
- package/src/chat/headless/transcript/pairing.ts +0 -124
- package/src/chat/headless/transcript/rows.ts +0 -377
- package/src/chat/headless/transcript/run-failures.ts +0 -72
- package/src/chat/headless/transcript/select-stops.ts +0 -151
- package/src/chat/headless/transcript/tool-media.ts +0 -42
- package/src/chat/headless/transcript-host.ts +0 -180
- package/src/chat/headless/transcript-labels.ts +0 -12
- package/src/chat/headless/turn-labels.ts +0 -28
- package/src/chat/headless/turn-prompt.ts +0 -32
- package/src/chat/index.ts +0 -31
- package/src/chat/interactions/HostInteractions.tsx +0 -76
- package/src/chat/interactions/InboxPanel.tsx +0 -226
- package/src/chat/interactions/InteractionCard.tsx +0 -111
- package/src/chat/interactions/PlanCard.tsx +0 -186
- package/src/chat/interactions/QuestionField.tsx +0 -336
- package/src/chat/interactions/QuestionForm.tsx +0 -283
- package/src/chat/interactions/card-ui.tsx +0 -86
- package/src/chat/interactions/hooks.ts +0 -49
- package/src/chat/interactions/index.ts +0 -8
- package/src/chat/provider-color.ts +0 -71
- package/src/chat/rich-composer/MentionList.tsx +0 -238
- package/src/chat/rich-composer/RichComposer.tsx +0 -1071
- package/src/chat/rich-composer/badge-decorations.ts +0 -157
- package/src/chat/rich-composer/composer-controls.tsx +0 -102
- package/src/chat/rich-composer/composer-extensions.ts +0 -388
- package/src/chat/rich-composer/composer-keys.ts +0 -416
- package/src/chat/rich-composer/ghost-plugin.ts +0 -89
- package/src/chat/rich-composer/index.ts +0 -3
- package/src/chat/rich-composer/mention-popover.ts +0 -336
- package/src/chat/rich-composer/slash-completion.ts +0 -143
- package/src/chat/rich-composer/use-composer-bus.ts +0 -57
- package/src/chat/rich-composer/use-composer-editor.ts +0 -216
- package/src/chat/rich-composer/use-composer-sources.ts +0 -90
- package/src/chat/rich-composer/use-draft-mirror.ts +0 -398
- package/src/chat/rich-composer/use-editor-handover.ts +0 -45
- package/src/chat/rich-composer/use-extension-composer.ts +0 -80
- package/src/chat/rich-composer/use-ghost-lifecycle.ts +0 -265
- package/src/chat/rich-composer/use-prompt-ghost.ts +0 -90
- package/src/chat/rich-composer/use-staged-attachments.ts +0 -65
- package/src/chat/sidebar/MainSessionRow.tsx +0 -102
- package/src/chat/sidebar/ProjectIcon.tsx +0 -399
- package/src/chat/sidebar/RowChips.tsx +0 -98
- package/src/chat/sidebar/SessionSidebar.tsx +0 -1039
- package/src/chat/sidebar/SidebarDecoration.tsx +0 -93
- package/src/chat/sidebar/SidebarFilterMenu.tsx +0 -270
- package/src/chat/sidebar/SidebarFooter.tsx +0 -244
- package/src/chat/sidebar/SidebarFrame.tsx +0 -154
- package/src/chat/sidebar/SidebarGroupHeader.tsx +0 -263
- package/src/chat/sidebar/SidebarHostProvider.tsx +0 -51
- package/src/chat/sidebar/SidebarRowView.tsx +0 -151
- package/src/chat/sidebar/SidebarSearchRow.tsx +0 -66
- package/src/chat/sidebar/SidebarSessionRow.tsx +0 -317
- package/src/chat/sidebar/SidebarToggleButton.tsx +0 -48
- package/src/chat/sidebar/SpaceSwitcher.tsx +0 -341
- package/src/chat/sidebar/SpacesSection.tsx +0 -259
- package/src/chat/sidebar/collapsed.ts +0 -61
- package/src/chat/sidebar/index.ts +0 -109
- package/src/chat/sidebar/session-menu.ts +0 -441
- package/src/chat/sidebar/sidebar-focus-hold.ts +0 -56
- package/src/chat/sidebar/sidebar-live.tsx +0 -666
- package/src/chat/sidebar/use-main-session.ts +0 -32
- package/src/chat/sidebar/useAgentNames.ts +0 -12
- package/src/chat/sidebar/useCompactionProgress.ts +0 -24
- package/src/chat/sidebar/usePinnedProjects.ts +0 -36
- package/src/chat/sidebar/useSaveViewAsSpace.ts +0 -42
- package/src/chat/sidebar/useSessionActivity.ts +0 -24
- package/src/chat/sidebar/useSessionBadges.ts +0 -26
- package/src/chat/sidebar/useSessionDirectoryView.ts +0 -128
- package/src/chat/sidebar/useSessionSearch.ts +0 -94
- package/src/chat/sidebar/useSidebarKeyboardNav.ts +0 -167
- package/src/chat/sidebar/useSidebarLabels.ts +0 -10
- package/src/chat/testing/composer.contract.ts +0 -508
- package/src/chat/testing/contract.ts +0 -634
- package/src/chat/testing/fixture-composer-chrome.ts +0 -159
- package/src/chat/testing/fixture-composer-host.ts +0 -147
- package/src/chat/testing/fixture-sidebar-host.ts +0 -99
- package/src/chat/testing/index.ts +0 -12
- package/src/chat/testing/sidebar.contract.ts +0 -196
- package/src/chat/transcript/BadgeMenu.tsx +0 -241
- package/src/chat/transcript/CardMarkdown.tsx +0 -102
- package/src/chat/transcript/ChipCard.tsx +0 -187
- package/src/chat/transcript/ChipCards.tsx +0 -100
- package/src/chat/transcript/DiffLines.tsx +0 -122
- package/src/chat/transcript/EarlierHistory.tsx +0 -136
- package/src/chat/transcript/EditDiffBlock.tsx +0 -176
- package/src/chat/transcript/FileChip.tsx +0 -361
- package/src/chat/transcript/ImageGenerationBlock.tsx +0 -239
- package/src/chat/transcript/InlineChipText.tsx +0 -57
- package/src/chat/transcript/InteractionToolBody.tsx +0 -211
- package/src/chat/transcript/LazyRow.tsx +0 -311
- package/src/chat/transcript/MermaidDiagram.tsx +0 -484
- package/src/chat/transcript/PromptEcho.tsx +0 -171
- package/src/chat/transcript/PromptOriginLabel.tsx +0 -44
- package/src/chat/transcript/ProseMarkdown.tsx +0 -168
- package/src/chat/transcript/ReferenceText.tsx +0 -198
- package/src/chat/transcript/SelectCursor.tsx +0 -118
- package/src/chat/transcript/SelectTurnHint.tsx +0 -81
- package/src/chat/transcript/SelectTurnProvider.tsx +0 -150
- package/src/chat/transcript/SubagentBlock.tsx +0 -224
- package/src/chat/transcript/TranscriptRow.tsx +0 -362
- package/src/chat/transcript/TranscriptSearch.tsx +0 -171
- package/src/chat/transcript/TurnMenu.tsx +0 -217
- package/src/chat/transcript/actions.tsx +0 -77
- package/src/chat/transcript/badges.tsx +0 -155
- package/src/chat/transcript/chip-details.ts +0 -169
- package/src/chat/transcript/chip-resolve.ts +0 -56
- package/src/chat/transcript/extension-renderers.tsx +0 -148
- package/src/chat/transcript/fold-attachments.tsx +0 -221
- package/src/chat/transcript/fold-status.tsx +0 -112
- package/src/chat/transcript/fold-worker.tsx +0 -160
- package/src/chat/transcript/fold.tsx +0 -522
- package/src/chat/transcript/frame.tsx +0 -326
- package/src/chat/transcript/index.ts +0 -66
- package/src/chat/transcript/markdown-cache.ts +0 -84
- package/src/chat/transcript/markdown-context.ts +0 -52
- package/src/chat/transcript/markdown.tsx +0 -351
- package/src/chat/transcript/messages.tsx +0 -169
- package/src/chat/transcript/notices.tsx +0 -508
- package/src/chat/transcript/prompt-lines.tsx +0 -55
- package/src/chat/transcript/prompt.tsx +0 -258
- package/src/chat/transcript/prose.tsx +0 -171
- package/src/chat/transcript/recent-map.ts +0 -32
- package/src/chat/transcript/references.ts +0 -108
- package/src/chat/transcript/remark-references.ts +0 -157
- package/src/chat/transcript/remark-refs.ts +0 -176
- package/src/chat/transcript/renderer-slots.tsx +0 -35
- package/src/chat/transcript/renderers.tsx +0 -251
- package/src/chat/transcript/row-estimate.ts +0 -158
- package/src/chat/transcript/run-rows.tsx +0 -291
- package/src/chat/transcript/site-icons.ts +0 -27
- package/src/chat/transcript/thumbnails.ts +0 -146
- package/src/chat/transcript/tool-batch.tsx +0 -102
- package/src/chat/transcript/tool-details.tsx +0 -31
- package/src/chat/transcript/tool-media.tsx +0 -132
- package/src/chat/transcript/tool-parts.tsx +0 -358
- package/src/chat/transcript/tool-payload.tsx +0 -76
- package/src/chat/transcript/tool-row.tsx +0 -496
- package/src/chat/transcript/turn-commands.ts +0 -101
- package/src/chat/transcript/use-transcript-rows.ts +0 -195
- package/src/chat/transcript/useComposerSearch.ts +0 -106
- package/src/chat/transcript/useSelectTurnKeys.ts +0 -204
- package/src/chat/transcript/useSettledReveal.ts +0 -57
- package/src/chat/transcript/useStickToBottom.ts +0 -600
- package/src/chat/transcript/useTranscriptFind.ts +0 -70
- package/src/chat/transcript/useTranscriptFindKey.ts +0 -52
- package/src/chat/transcript/useTranscriptScroll.ts +0 -163
- package/src/chat/transcript/useTranscriptSearch.tsx +0 -382
- package/src/chat/transcript/useTranscriptSelectionCopy.ts +0 -63
- package/src/chat/transcript/useWheelHoverPause.ts +0 -79
- package/src/chat/transcript/user-bash.tsx +0 -134
- package/src/chat/transcript-options.ts +0 -51
- package/src/chat/useChatLabels.ts +0 -14
- package/src/code/CodeHighlightProvider.tsx +0 -87
- package/src/code/HighlightedCode.tsx +0 -156
- package/src/code/code-themes.ts +0 -187
- package/src/code/editor/CodeCompletion.tsx +0 -719
- package/src/code/editor/CodeEditor.tsx +0 -480
- package/src/code/editor/CodeHover.tsx +0 -429
- package/src/code/editor/DiagnosticAnnotation.tsx +0 -73
- package/src/code/editor/DiagnosticsChip.tsx +0 -85
- package/src/code/editor/DiffView.tsx +0 -197
- package/src/code/editor/EditorColumn.tsx +0 -256
- package/src/code/editor/FileIcon.tsx +0 -89
- package/src/code/editor/FileTabPill.tsx +0 -101
- package/src/code/editor/FileTree.tsx +0 -414
- package/src/code/editor/FileView.tsx +0 -462
- package/src/code/editor/HighlightWorkers.tsx +0 -84
- package/src/code/editor/LanguageEditor.tsx +0 -210
- package/src/code/editor/_vendor/tree-icon-colors.ts +0 -72
- package/src/code/editor/diagnostics.ts +0 -140
- package/src/code/editor/edit-session.ts +0 -32
- package/src/code/editor/environment.tsx +0 -88
- package/src/code/editor/find/FindBar.tsx +0 -126
- package/src/code/editor/find/find-highlight.ts +0 -138
- package/src/code/editor/find/find-model.ts +0 -123
- package/src/code/editor/find/settle-scroll.ts +0 -77
- package/src/code/editor/find/useFind.ts +0 -203
- package/src/code/editor/fs-adapter.ts +0 -37
- package/src/code/editor/index.ts +0 -36
- package/src/code/editor/language.ts +0 -31
- package/src/code/editor/patch-parse.ts +0 -176
- package/src/code/editor/patch-parse.worker.ts +0 -12
- package/src/code/editor/pierre-theme.ts +0 -155
- package/src/code/editor/prime-diff.ts +0 -37
- package/src/code/editor/reveal.ts +0 -58
- package/src/code/editor/scroll-reach.ts +0 -28
- package/src/code/editor/useCodeDocument.ts +0 -226
- package/src/code/editor/useDefinition.ts +0 -159
- package/src/code/editor/useDetachCleanup.ts +0 -36
- package/src/code/editor/useFileDocument.ts +0 -87
- package/src/code/editor/useRevealLine.ts +0 -92
- package/src/code/editor/word-at.ts +0 -145
- package/src/code/highlight.worker.ts +0 -16
- package/src/code/highlighter.ts +0 -181
- package/src/code/highlights.ts +0 -51
- package/src/code/mermaid-lexer.ts +0 -331
- package/src/code/shiki-theme.ts +0 -46
- package/src/components/BrandMark.tsx +0 -118
- package/src/components/Breadcrumb.tsx +0 -105
- package/src/components/BrowserChrome.tsx +0 -189
- package/src/components/BrowserSignIn.tsx +0 -210
- package/src/components/ChoiceCards.tsx +0 -170
- package/src/components/CodeFrame.tsx +0 -225
- package/src/components/ConfirmDialog.tsx +0 -119
- package/src/components/CopyButton.tsx +0 -85
- package/src/components/EditableTitle.tsx +0 -199
- package/src/components/ErrorBoundary.tsx +0 -208
- package/src/components/Form.tsx +0 -593
- package/src/components/Highlighted.tsx +0 -68
- package/src/components/HowItWorks.tsx +0 -123
- package/src/components/IconButton.tsx +0 -101
- package/src/components/IconToggle.tsx +0 -71
- package/src/components/Keycap.tsx +0 -334
- package/src/components/Lightbox.tsx +0 -257
- package/src/components/LoadError.tsx +0 -45
- package/src/components/MediaNav.tsx +0 -85
- package/src/components/Menu.tsx +0 -435
- package/src/components/Overlay.tsx +0 -327
- package/src/components/PanelEmpty.tsx +0 -80
- package/src/components/PanelRows.tsx +0 -107
- package/src/components/PreviewWindow.tsx +0 -53
- package/src/components/ReorderTabs.tsx +0 -103
- package/src/components/RowActionsMenu.tsx +0 -383
- package/src/components/SegmentSpinner.tsx +0 -88
- package/src/components/Segmented.tsx +0 -126
- package/src/components/StepFrame.tsx +0 -151
- package/src/components/Stepper.tsx +0 -157
- package/src/components/Surface.tsx +0 -191
- package/src/components/SwatchPicker.tsx +0 -147
- package/src/components/SwitchGlyph.tsx +0 -56
- package/src/components/TabPill.tsx +0 -188
- package/src/components/ThemeThumb.tsx +0 -52
- package/src/components/ToggleCard.tsx +0 -120
- package/src/components/Tooltip.tsx +0 -288
- package/src/components/ZoomableImage.tsx +0 -322
- package/src/components/button.ts +0 -120
- package/src/components/floating/FloatingSurface.tsx +0 -158
- package/src/components/floating/HoverCard.tsx +0 -143
- package/src/components/floating/Popover.tsx +0 -166
- package/src/components/floating/useAnchoredPosition.ts +0 -186
- package/src/components/floating/usePopover.ts +0 -158
- package/src/components/image-clipboard.ts +0 -70
- package/src/components/keyboard-layout.ts +0 -115
- package/src/components/palette/PaletteList.tsx +0 -432
- package/src/components/palette/PalettePanel.tsx +0 -338
- package/src/components/palette/palette-layout.ts +0 -86
- package/src/components/report-error.ts +0 -142
- package/src/components/zoom.ts +0 -133
- package/src/extensions/ExtensionComponent.tsx +0 -167
- package/src/extensions/ExtensionDialogHost.tsx +0 -445
- package/src/extensions/ExtensionRenderer.tsx +0 -100
- package/src/extensions/ExtensionScreen.tsx +0 -122
- package/src/extensions/ExtensionSettingsPage.tsx +0 -112
- package/src/extensions/ExtensionSettingsPages.tsx +0 -44
- package/src/extensions/ExtensionSettingsSidebar.tsx +0 -373
- package/src/extensions/ExtensionSlot.tsx +0 -213
- package/src/extensions/ExtensionWebview.tsx +0 -104
- package/src/extensions/ExtensionsProvider.tsx +0 -124
- package/src/extensions/SettingsWireForm.tsx +0 -182
- package/src/extensions/headless/dialog-queue.ts +0 -92
- package/src/extensions/headless/effect-channel.ts +0 -50
- package/src/extensions/headless/effect-router.ts +0 -107
- package/src/extensions/headless/fixture-host.ts +0 -381
- package/src/extensions/headless/host.ts +0 -398
- package/src/extensions/headless/index.ts +0 -17
- package/src/extensions/headless/labels.ts +0 -64
- package/src/extensions/headless/links.ts +0 -56
- package/src/extensions/headless/select.ts +0 -249
- package/src/extensions/headless/webview-bridge.ts +0 -127
- package/src/extensions/headless/wire.ts +0 -175
- package/src/extensions/hooks.ts +0 -209
- package/src/extensions/index.ts +0 -25
- package/src/extensions/kit.ts +0 -79
- package/src/extensions/links.tsx +0 -165
- package/src/extensions/testing/contract.ts +0 -382
- package/src/extensions/testing/index.ts +0 -6
- package/src/extensions/useExtensionsLabels.ts +0 -14
- package/src/files/CodeViewer.tsx +0 -289
- package/src/files/DiffFileViewer.tsx +0 -143
- package/src/files/DiffsTab.tsx +0 -581
- package/src/files/EditorColumn.tsx +0 -453
- package/src/files/EditorEnvironmentRoot.tsx +0 -63
- package/src/files/FilesDiagnosticsChip.tsx +0 -32
- package/src/files/FilesProvider.tsx +0 -58
- package/src/files/FilesTab.tsx +0 -441
- package/src/files/MediaDiff.tsx +0 -61
- package/src/files/MediaView.tsx +0 -170
- package/src/files/ReviewDraft.tsx +0 -88
- package/src/files/ReviewableDiff.tsx +0 -72
- package/src/files/SearchPanel.tsx +0 -325
- package/src/files/TreeColumn.tsx +0 -229
- package/src/files/code-excerpt.ts +0 -265
- package/src/files/code-menu.ts +0 -53
- package/src/files/drafts-store.ts +0 -192
- package/src/files/file-actions.ts +0 -152
- package/src/files/headless/editor-prefs.ts +0 -230
- package/src/files/headless/entries.ts +0 -172
- package/src/files/headless/fixture-host.ts +0 -260
- package/src/files/headless/host.ts +0 -387
- package/src/files/headless/index.ts +0 -14
- package/src/files/headless/labels.ts +0 -123
- package/src/files/headless/lsp-edits.ts +0 -58
- package/src/files/headless/media.ts +0 -57
- package/src/files/headless/name-match.ts +0 -38
- package/src/files/headless/search.ts +0 -23
- package/src/files/headless/view.ts +0 -114
- package/src/files/headless/workspace-diff.ts +0 -82
- package/src/files/index.ts +0 -25
- package/src/files/lazy-tabs.tsx +0 -41
- package/src/files/session-patch.ts +0 -45
- package/src/files/tab-hooks.ts +0 -37
- package/src/files/testing/contract.ts +0 -279
- package/src/files/testing/demo.ts +0 -36
- package/src/files/testing/index.ts +0 -7
- package/src/files/useCodeReview.tsx +0 -177
- package/src/files/useDiagnostics.ts +0 -59
- package/src/files/useDiagnosticsRun.ts +0 -86
- package/src/files/useEntryActions.ts +0 -280
- package/src/files/useFilesDiagnostics.ts +0 -51
- package/src/files/useFilesLabels.ts +0 -14
- package/src/files/useFolderChanges.ts +0 -38
- package/src/files/useLsp.ts +0 -181
- package/src/files/useOpenFiles.ts +0 -402
- package/src/files/useWorkspace.ts +0 -148
- package/src/files/working-tree-diff.ts +0 -142
- package/src/git/BranchMenu.tsx +0 -988
- package/src/git/GitBar.tsx +0 -297
- package/src/git/GitProvider.tsx +0 -50
- package/src/git/ImportRepoDialog.tsx +0 -390
- package/src/git/MoveSessionDialog.tsx +0 -396
- package/src/git/RemoteFolderPicker.tsx +0 -475
- package/src/git/SyncChip.tsx +0 -275
- package/src/git/WherePicker.tsx +0 -358
- package/src/git/headless/environment.ts +0 -132
- package/src/git/headless/host.ts +0 -353
- package/src/git/headless/index.ts +0 -14
- package/src/git/headless/labels.ts +0 -230
- package/src/git/headless/move.ts +0 -101
- package/src/git/headless/remote-clone.ts +0 -44
- package/src/git/headless/status-reads.ts +0 -77
- package/src/git/headless/switcher.ts +0 -215
- package/src/git/headless/sync.ts +0 -71
- package/src/git/index.ts +0 -17
- package/src/git/testing/contract.ts +0 -551
- package/src/git/testing/index.ts +0 -537
- package/src/git/useEnvironmentChoices.ts +0 -50
- package/src/git/useGitBar.ts +0 -180
- package/src/hooks/keyed-store.ts +0 -65
- package/src/hooks/useDisplayPath.tsx +0 -93
- package/src/hooks/useHydrated.ts +0 -16
- package/src/hooks/useMinuteTick.ts +0 -49
- package/src/hooks/useNearViewport.ts +0 -111
- package/src/hooks/usePersistedState.ts +0 -98
- package/src/hooks/useResizeDrag.ts +0 -240
- package/src/hooks/useTabDrag.ts +0 -88
- package/src/index.ts +0 -119
- package/src/keybindings/KeyCommands.tsx +0 -123
- package/src/keybindings/KeyHint.tsx +0 -78
- package/src/keybindings/KeybindingsProvider.tsx +0 -231
- package/src/keybindings/headless/catalog.ts +0 -360
- package/src/keybindings/headless/commands.ts +0 -77
- package/src/keybindings/headless/fixture-host.ts +0 -51
- package/src/keybindings/headless/host.ts +0 -29
- package/src/keybindings/headless/index.ts +0 -13
- package/src/keybindings/headless/key-scope.ts +0 -91
- package/src/keybindings/headless/labels.ts +0 -14
- package/src/keybindings/headless/overrides.ts +0 -64
- package/src/keybindings/index.ts +0 -15
- package/src/keybindings/load-once.ts +0 -11
- package/src/keybindings/match.ts +0 -48
- package/src/keybindings/press.ts +0 -80
- package/src/keybindings/testing/contract.ts +0 -139
- package/src/keybindings/testing/index.ts +0 -6
- package/src/keybindings/useHelpKey.ts +0 -35
- package/src/keybindings/useKeybindingsLabels.ts +0 -14
- package/src/labels.tsx +0 -175
- package/src/machines/AddServerForm.tsx +0 -151
- package/src/machines/Banners.tsx +0 -172
- package/src/machines/DaemonMenu.tsx +0 -413
- package/src/machines/HostCapabilities.tsx +0 -245
- package/src/machines/HostSignIn.tsx +0 -63
- package/src/machines/HostSyncPanel.tsx +0 -275
- package/src/machines/HostsSection.tsx +0 -312
- package/src/machines/MachinesProvider.tsx +0 -164
- package/src/machines/ServerCard.tsx +0 -347
- package/src/machines/ServerMachinesPanel.tsx +0 -547
- package/src/machines/ServerUpdatePanel.tsx +0 -160
- package/src/machines/SyncAccounts.tsx +0 -148
- package/src/machines/SyncMarker.tsx +0 -87
- package/src/machines/SyncOutcomeBadge.tsx +0 -84
- package/src/machines/TokensPanel.tsx +0 -249
- package/src/machines/headless/fixture-host.ts +0 -519
- package/src/machines/headless/fixtures.ts +0 -164
- package/src/machines/headless/host.ts +0 -381
- package/src/machines/headless/index.ts +0 -13
- package/src/machines/headless/labels.ts +0 -364
- package/src/machines/headless/messages.ts +0 -209
- package/src/machines/headless/presence.ts +0 -110
- package/src/machines/headless/settings-focus.ts +0 -25
- package/src/machines/headless/stores.ts +0 -137
- package/src/machines/headless/sync.ts +0 -207
- package/src/machines/index.ts +0 -29
- package/src/machines/settings-section.tsx +0 -37
- package/src/machines/testing/contract.ts +0 -617
- package/src/machines/testing/index.ts +0 -7
- package/src/machines/testing/sync.contract.ts +0 -260
- package/src/motion/SwapIcon.tsx +0 -29
- package/src/motion/collapse.ts +0 -21
- package/src/motion/grow.tsx +0 -86
- package/src/motion/layout-animating.ts +0 -50
- package/src/motion/presence.ts +0 -191
- package/src/motion/provider.tsx +0 -63
- package/src/motion/reduced.ts +0 -36
- package/src/motion/roll.tsx +0 -131
- package/src/motion/shimmer.ts +0 -15
- package/src/motion/size.tsx +0 -192
- package/src/motion/springs.ts +0 -413
- package/src/motion/swap.tsx +0 -216
- package/src/motion/title-text.tsx +0 -74
- package/src/onboarding/ConnectProviderCard.tsx +0 -49
- package/src/onboarding/OnboardingFlow.tsx +0 -176
- package/src/onboarding/OnboardingProvider.tsx +0 -209
- package/src/onboarding/OnboardingStepFrame.tsx +0 -80
- package/src/onboarding/conversation.tsx +0 -196
- package/src/onboarding/demos/autonomy.tsx +0 -154
- package/src/onboarding/demos/extensions.tsx +0 -183
- package/src/onboarding/demos/features.tsx +0 -488
- package/src/onboarding/demos/how-it-works.tsx +0 -698
- package/src/onboarding/demos/index.ts +0 -11
- package/src/onboarding/demos/parts.tsx +0 -133
- package/src/onboarding/demos/tour.tsx +0 -217
- package/src/onboarding/headless/controller.ts +0 -110
- package/src/onboarding/headless/fixture-host.ts +0 -269
- package/src/onboarding/headless/fixtures.ts +0 -486
- package/src/onboarding/headless/host.ts +0 -176
- package/src/onboarding/headless/index.ts +0 -8
- package/src/onboarding/headless/labels.ts +0 -282
- package/src/onboarding/index.ts +0 -21
- package/src/onboarding/marks.tsx +0 -107
- package/src/onboarding/preview-attachments.ts +0 -39
- package/src/onboarding/skills/SkillSourceBrowser.tsx +0 -128
- package/src/onboarding/skills/parts.tsx +0 -464
- package/src/onboarding/sources/SourceBrowser.tsx +0 -400
- package/src/onboarding/steps/AutonomyStep.tsx +0 -128
- package/src/onboarding/steps/ConnectStep.tsx +0 -104
- package/src/onboarding/steps/ConnectorsStep.tsx +0 -222
- package/src/onboarding/steps/ConversationStep.tsx +0 -132
- package/src/onboarding/steps/ExtensionsStep.tsx +0 -113
- package/src/onboarding/steps/FeatureExample.tsx +0 -46
- package/src/onboarding/steps/FeaturesStep.tsx +0 -88
- package/src/onboarding/steps/ImportStep.tsx +0 -156
- package/src/onboarding/steps/LookStep.tsx +0 -276
- package/src/onboarding/steps/ReadyStep.tsx +0 -278
- package/src/onboarding/steps/SkillsStep.tsx +0 -45
- package/src/onboarding/steps/StepSection.tsx +0 -63
- package/src/onboarding/steps/Tradeoff.tsx +0 -45
- package/src/onboarding/steps/WelcomeStep.tsx +0 -147
- package/src/onboarding/steps/connect/KeyForm.tsx +0 -112
- package/src/onboarding/steps/connect/ProviderPanel.tsx +0 -149
- package/src/onboarding/steps/connect/ProviderReady.tsx +0 -171
- package/src/onboarding/steps/connect/ready-text.ts +0 -17
- package/src/onboarding/steps/index.ts +0 -12
- package/src/onboarding/steps/tasks.tsx +0 -84
- package/src/onboarding/testing/contract.ts +0 -472
- package/src/onboarding/testing/index.ts +0 -7
- package/src/onboarding/tutorials.tsx +0 -45
- package/src/onboarding/useSignIn.ts +0 -58
- package/src/palette/CommandPalette.tsx +0 -59
- package/src/palette/PaletteDialog.tsx +0 -186
- package/src/palette/PaletteProvider.tsx +0 -149
- package/src/palette/PaletteRows.tsx +0 -208
- package/src/palette/app-sources.ts +0 -62
- package/src/palette/headless/app-sources.ts +0 -515
- package/src/palette/headless/gather.ts +0 -50
- package/src/palette/headless/host.ts +0 -129
- package/src/palette/headless/index.ts +0 -15
- package/src/palette/headless/labels.ts +0 -124
- package/src/palette/headless/rank-protocol.ts +0 -23
- package/src/palette/headless/recents.ts +0 -35
- package/src/palette/headless/session-sources.ts +0 -218
- package/src/palette/headless/sources.ts +0 -313
- package/src/palette/headless/store.ts +0 -105
- package/src/palette/index.ts +0 -17
- package/src/palette/rank.worker.ts +0 -30
- package/src/palette/setup.ts +0 -19
- package/src/palette/testing/contract.ts +0 -250
- package/src/palette/testing/index.ts +0 -152
- package/src/palette/useConversationSearch.ts +0 -115
- package/src/palette/usePaletteController.ts +0 -229
- package/src/palette/useRankedItems.ts +0 -122
- package/src/path.ts +0 -199
- package/src/server/demo-tools.ts +0 -34
- package/src/server/environment.ts +0 -118
- package/src/server/index.ts +0 -7
- package/src/server/scripted-provider.ts +0 -174
- package/src/server/sse-handler.ts +0 -457
- package/src/server/testing/index.ts +0 -7
- package/src/session/ArtifactRowChips.tsx +0 -260
- package/src/session/ArtifactsPanel.tsx +0 -426
- package/src/session/DiffFileTree.tsx +0 -173
- package/src/session/PanelAttention.tsx +0 -131
- package/src/session/ProjectHome.tsx +0 -733
- package/src/session/ProviderUsageProvider.tsx +0 -113
- package/src/session/QueueTab.tsx +0 -669
- package/src/session/RunningWorkDialog.tsx +0 -178
- package/src/session/SessionCacheFacts.tsx +0 -190
- package/src/session/SessionDetailsDialog.tsx +0 -627
- package/src/session/SessionHeader.tsx +0 -242
- package/src/session/SessionProvider.tsx +0 -98
- package/src/session/SessionShell.tsx +0 -77
- package/src/session/SideChat.tsx +0 -320
- package/src/session/TodoList.tsx +0 -123
- package/src/session/TodosPanel.tsx +0 -279
- package/src/session/TurnDetailsDialog.tsx +0 -299
- package/src/session/UsagePanel.tsx +0 -358
- package/src/session/WelcomeScreen.tsx +0 -88
- package/src/session/headless/artifacts.ts +0 -101
- package/src/session/headless/diff-tree.ts +0 -167
- package/src/session/headless/fixture-host.ts +0 -362
- package/src/session/headless/home-layout.ts +0 -276
- package/src/session/headless/host.ts +0 -263
- package/src/session/headless/index.ts +0 -23
- package/src/session/headless/keyed.ts +0 -72
- package/src/session/headless/labels.ts +0 -337
- package/src/session/headless/queue-attachments.ts +0 -73
- package/src/session/headless/queue.ts +0 -122
- package/src/session/headless/running-work.ts +0 -85
- package/src/session/headless/session-actions.ts +0 -198
- package/src/session/headless/session-diffs.ts +0 -136
- package/src/session/headless/side.ts +0 -63
- package/src/session/headless/todos.ts +0 -62
- package/src/session/headless/usage-format.ts +0 -19
- package/src/session/headless/usage.ts +0 -407
- package/src/session/index.ts +0 -31
- package/src/session/modal-shell.tsx +0 -24
- package/src/session/testing/contract.ts +0 -588
- package/src/session/testing/demo.ts +0 -224
- package/src/session/testing/index.ts +0 -7
- package/src/session/useSessionLabels.ts +0 -14
- package/src/session/useUsageSummary.ts +0 -82
- package/src/settings/SettingsHeadingText.tsx +0 -54
- package/src/settings/SettingsHostSwitcher.tsx +0 -93
- package/src/settings/SettingsNav.tsx +0 -198
- package/src/settings/SettingsProvider.tsx +0 -127
- package/src/settings/SettingsRowsPage.tsx +0 -218
- package/src/settings/SettingsShell.tsx +0 -337
- package/src/settings/SettingsTutorial.tsx +0 -55
- package/src/settings/headless/catalog.ts +0 -570
- package/src/settings/headless/claude-import.ts +0 -61
- package/src/settings/headless/enabled.ts +0 -44
- package/src/settings/headless/fixture-accounts.ts +0 -260
- package/src/settings/headless/fixture-host.ts +0 -162
- package/src/settings/headless/fixture-models.ts +0 -51
- package/src/settings/headless/fixture-performance.ts +0 -350
- package/src/settings/headless/fixture-sections.ts +0 -391
- package/src/settings/headless/host.ts +0 -127
- package/src/settings/headless/index.ts +0 -22
- package/src/settings/headless/labels.ts +0 -63
- package/src/settings/headless/layout-sections.ts +0 -41
- package/src/settings/headless/layout.ts +0 -732
- package/src/settings/headless/mcp.ts +0 -319
- package/src/settings/headless/models.ts +0 -51
- package/src/settings/headless/page-counts.ts +0 -40
- package/src/settings/headless/performance.ts +0 -524
- package/src/settings/headless/providers.ts +0 -117
- package/src/settings/headless/registry.ts +0 -62
- package/src/settings/headless/resource.ts +0 -75
- package/src/settings/headless/search.ts +0 -142
- package/src/settings/headless/sections-host.ts +0 -340
- package/src/settings/index.ts +0 -32
- package/src/settings/rows.tsx +0 -152
- package/src/settings/section.tsx +0 -165
- package/src/settings/sections/appearance/AppearanceSection.tsx +0 -667
- package/src/settings/sections/appearance/labels.ts +0 -77
- package/src/settings/sections/claude-import/ClaudeImportDialog.tsx +0 -258
- package/src/settings/sections/claude-import/labels.ts +0 -42
- package/src/settings/sections/claude-import/use-claude-import-available.ts +0 -35
- package/src/settings/sections/descriptors.tsx +0 -261
- package/src/settings/sections/editor/EditorSection.tsx +0 -521
- package/src/settings/sections/editor/labels.ts +0 -84
- package/src/settings/sections/enabled-list/EnabledListSection.tsx +0 -112
- package/src/settings/sections/enabled-list/labels.ts +0 -37
- package/src/settings/sections/environments/EnvironmentsSection.tsx +0 -549
- package/src/settings/sections/environments/labels.ts +0 -31
- package/src/settings/sections/extensions/ChangeOriginDialog.tsx +0 -218
- package/src/settings/sections/extensions/CreateExtensionDialog.tsx +0 -210
- package/src/settings/sections/extensions/ExtensionConfigRows.tsx +0 -508
- package/src/settings/sections/extensions/ExtensionOptionsSection.tsx +0 -356
- package/src/settings/sections/extensions/ExtensionPicksBar.tsx +0 -112
- package/src/settings/sections/extensions/ExtensionSourceBrowser.tsx +0 -244
- package/src/settings/sections/extensions/ExtensionsSection.tsx +0 -665
- package/src/settings/sections/extensions/create-labels.ts +0 -31
- package/src/settings/sections/extensions/labels.ts +0 -64
- package/src/settings/sections/extensions/options-labels.ts +0 -34
- package/src/settings/sections/host-catalog/HostCatalogSection.tsx +0 -457
- package/src/settings/sections/host-catalog/labels.ts +0 -44
- package/src/settings/sections/index.ts +0 -60
- package/src/settings/sections/instructions/InstructionsSection.tsx +0 -385
- package/src/settings/sections/instructions/labels.ts +0 -33
- package/src/settings/sections/keybindings/KeybindingsSection.tsx +0 -124
- package/src/settings/sections/keybindings/labels.ts +0 -72
- package/src/settings/sections/keybindings/rows.ts +0 -103
- package/src/settings/sections/logs/LogsSection.tsx +0 -153
- package/src/settings/sections/logs/labels.ts +0 -20
- package/src/settings/sections/mcp/McpAddForm.tsx +0 -245
- package/src/settings/sections/mcp/McpSection.tsx +0 -358
- package/src/settings/sections/mcp/McpServerRow.tsx +0 -404
- package/src/settings/sections/mcp/labels.ts +0 -193
- package/src/settings/sections/models/AgentDefaults.tsx +0 -365
- package/src/settings/sections/models/ModelListPicker.tsx +0 -265
- package/src/settings/sections/models/ModelPickField.tsx +0 -220
- package/src/settings/sections/models/ModelRows.tsx +0 -381
- package/src/settings/sections/models/SpacesDefaultsSection.tsx +0 -102
- package/src/settings/sections/models/labels.ts +0 -119
- package/src/settings/sections/models/model-test.tsx +0 -125
- package/src/settings/sections/performance/PerfSparkline.tsx +0 -64
- package/src/settings/sections/performance/PerformanceHud.tsx +0 -110
- package/src/settings/sections/performance/PerformanceSection.tsx +0 -770
- package/src/settings/sections/performance/labels.ts +0 -114
- package/src/settings/sections/performance/use-perf-monitor.ts +0 -26
- package/src/settings/sections/plugins/PluginsSection.tsx +0 -151
- package/src/settings/sections/plugins/labels.ts +0 -23
- package/src/settings/sections/providers/CredentialSources.tsx +0 -237
- package/src/settings/sections/providers/ProvidersSection.tsx +0 -389
- package/src/settings/sections/providers/ServerProvidersSection.tsx +0 -244
- package/src/settings/sections/providers/ServerSignIn.tsx +0 -137
- package/src/settings/sections/providers/labels.ts +0 -160
- package/src/settings/sections/shared/catalog.tsx +0 -265
- package/src/settings/sections/shared/labels.ts +0 -31
- package/src/settings/sections/skills/SkillList.tsx +0 -494
- package/src/settings/sections/skills/SkillsSection.tsx +0 -249
- package/src/settings/sections/skills/labels.ts +0 -54
- package/src/settings/sections/use-section-labels.ts +0 -10
- package/src/settings/testing/accounts-demo.ts +0 -110
- package/src/settings/testing/accounts.contract.ts +0 -319
- package/src/settings/testing/claude-import.contract.ts +0 -93
- package/src/settings/testing/contract.ts +0 -192
- package/src/settings/testing/extension-options.contract.ts +0 -163
- package/src/settings/testing/index.ts +0 -11
- package/src/settings/testing/models.contract.ts +0 -135
- package/src/settings/testing/performance.contract.ts +0 -219
- package/src/settings/testing/sections.contract.ts +0 -306
- package/src/terminal/HostTerminalSurface.tsx +0 -917
- package/src/terminal/TerminalDrawer.tsx +0 -228
- package/src/terminal/TerminalPanel.tsx +0 -740
- package/src/terminal/TerminalProvider.tsx +0 -201
- package/src/terminal/TerminalSurface.tsx +0 -262
- package/src/terminal/box-glyphs.ts +0 -333
- package/src/terminal/ghostty.ts +0 -116
- package/src/terminal/grid-size.ts +0 -46
- package/src/terminal/headless/fixture-host.ts +0 -250
- package/src/terminal/headless/host.ts +0 -99
- package/src/terminal/headless/index.ts +0 -11
- package/src/terminal/headless/labels.ts +0 -69
- package/src/terminal/headless/layout.ts +0 -57
- package/src/terminal/headless/links.ts +0 -227
- package/src/terminal/headless/order.ts +0 -28
- package/src/terminal/headless/output-cursor.ts +0 -66
- package/src/terminal/headless/recent.ts +0 -20
- package/src/terminal/headless/replay.ts +0 -45
- package/src/terminal/headless/scope.ts +0 -60
- package/src/terminal/headless/store.ts +0 -637
- package/src/terminal/index.ts +0 -40
- package/src/terminal/keys.ts +0 -34
- package/src/terminal/testing/contract.ts +0 -274
- package/src/terminal/testing/demo.ts +0 -40
- package/src/terminal/testing/index.ts +0 -7
- package/src/terminal/theme.ts +0 -110
- package/src/terminal/useTerminalLabels.ts +0 -14
- package/src/theme/accents.ts +0 -46
- package/src/theme/color.ts +0 -450
- package/src/theme/css-vars.ts +0 -187
- package/src/theme/derive.ts +0 -700
- package/src/theme/from-theme.ts +0 -52
- package/src/theme/stylesheet.ts +0 -55
- package/src/theme/themes.ts +0 -767
- package/src/theme/without-transitions.ts +0 -18
- package/src/uno.ts +0 -167
- package/src/workspace/LayoutBudget.tsx +0 -143
- package/src/workspace/PanelContentView.tsx +0 -523
- package/src/workspace/PanelCorner.tsx +0 -111
- package/src/workspace/PanelGroups.tsx +0 -264
- package/src/workspace/PanelHome.tsx +0 -71
- package/src/workspace/PanelItems.tsx +0 -368
- package/src/workspace/PanelStrip.tsx +0 -316
- package/src/workspace/SidePanel.tsx +0 -240
- package/src/workspace/TabParking.tsx +0 -120
- package/src/workspace/WorkspaceProvider.tsx +0 -558
- package/src/workspace/dnd/engine.ts +0 -371
- package/src/workspace/dnd/hooks.ts +0 -72
- package/src/workspace/dnd/index.ts +0 -57
- package/src/workspace/dnd/parking.tsx +0 -181
- package/src/workspace/extension-tabs.tsx +0 -174
- package/src/workspace/frame-motion.ts +0 -160
- package/src/workspace/headless/contents.ts +0 -125
- package/src/workspace/headless/host.ts +0 -129
- package/src/workspace/headless/index.ts +0 -33
- package/src/workspace/headless/labels.ts +0 -44
- package/src/workspace/headless/layout-memory.ts +0 -649
- package/src/workspace/headless/layouts.ts +0 -224
- package/src/workspace/headless/open-target.ts +0 -125
- package/src/workspace/headless/ops.ts +0 -163
- package/src/workspace/headless/panel-focus.ts +0 -58
- package/src/workspace/headless/panel-tree.ts +0 -259
- package/src/workspace/headless/resolve.ts +0 -146
- package/src/workspace/headless/reveal-at.ts +0 -27
- package/src/workspace/headless/strip-drop.ts +0 -81
- package/src/workspace/headless/tree.ts +0 -480
- package/src/workspace/headless/view.ts +0 -164
- package/src/workspace/index.ts +0 -23
- package/src/workspace/panel-group-keys.ts +0 -36
- package/src/workspace/panel-visibility.ts +0 -28
- package/src/workspace/tab-scopes.ts +0 -245
- package/src/workspace/testing/contract.ts +0 -282
- package/src/workspace/testing/index.ts +0 -140
- package/src/workspace/use-split-drag.ts +0 -73
- package/src/workspace/useScopeLayout.ts +0 -26
- package/src/workspace/useViewport.ts +0 -22
- package/src/workspace/useWorkspaceLabels.ts +0 -14
- package/src/workspace/workspace-key-commands.ts +0 -108
- /package/dist/dist/{types-bDQagoiL.d.ts → types-2HrgolQz.d.ts} +0 -0
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A layer above the page: portal, scrim, enter / exit motion, Esc, scroll
|
|
3
|
-
* lock and focus. The surface inside is the caller's (a `.zg-float` dialog,
|
|
4
|
-
* a `.zg-sheet` menu); it receives the state (`open` / `closed`) to put on
|
|
5
|
-
* its own `data-state` (a sheet's CSS keys on it).
|
|
6
|
-
*
|
|
7
|
-
* Motion: the scrim is motion's (opacity on `fade`, out on `fade-out`: an
|
|
8
|
-
* opacity never rides a spring) and holds the layer mounted until its fade
|
|
9
|
-
* finishes (`AnimatePresence`), the same length as the surface's CSS exit.
|
|
10
|
-
* The caller's surface animates in CSS off its `data-state` on the same
|
|
11
|
-
* curves (`--zg-motion-*`, primitives.css): the layout is the caller's, so
|
|
12
|
-
* the layer adds no box of its own around it. Reduced fades, Off is instant.
|
|
13
|
-
*
|
|
14
|
-
* Focus: on close it returns to whatever had it when the layer opened.
|
|
15
|
-
* `trapFocus` makes the layer modal (dialogs): focus moves in on open (to
|
|
16
|
-
* whatever inside asked for it with `autoFocus`, else the first control,
|
|
17
|
-
* else the layer itself), Tab stays inside, and everything else under
|
|
18
|
-
* `body` is `inert` so a screen reader can't browse behind it. A layer
|
|
19
|
-
* that leaves part of the page usable (a menu under a header whose button
|
|
20
|
-
* closes it) skips the trap and names the background in `inertSelector`
|
|
21
|
-
* instead, so Tab can't wander behind it.
|
|
22
|
-
*
|
|
23
|
-
* Stacking: layers opened over one another (a confirm over a dialog, a
|
|
24
|
-
* lightbox over a sheet) each own Esc and Tab only while topmost, so one Esc
|
|
25
|
-
* closes one layer. The scroll lock and the inert background are counted
|
|
26
|
-
* and released when the last layer that took them closes. The host app's
|
|
27
|
-
* own modal layer (the desktop app's ModalProvider) is outside this stack.
|
|
28
|
-
*/
|
|
29
|
-
import { AnimatePresence, domAnimation, LazyMotion, m, useIsPresent } from 'motion/react';
|
|
30
|
-
import {
|
|
31
|
-
useCallback,
|
|
32
|
-
useEffect,
|
|
33
|
-
useInsertionEffect,
|
|
34
|
-
useLayoutEffect,
|
|
35
|
-
useRef,
|
|
36
|
-
useState,
|
|
37
|
-
type CSSProperties,
|
|
38
|
-
type ReactNode,
|
|
39
|
-
type RefObject,
|
|
40
|
-
} from 'react';
|
|
41
|
-
import { createPortal } from 'react-dom';
|
|
42
|
-
|
|
43
|
-
import { useScrollLock } from '../motion/presence';
|
|
44
|
-
import { useMotionTransition } from '../motion/springs';
|
|
45
|
-
|
|
46
|
-
const FOCUSABLE =
|
|
47
|
-
'a[href], button:not([disabled]), input:not([disabled]), select, textarea, [tabindex]:not([tabindex="-1"])';
|
|
48
|
-
|
|
49
|
-
/** Can take focus right now: rendered, not hidden, not inert. */
|
|
50
|
-
function focusable(el: HTMLElement): boolean {
|
|
51
|
-
if (el.closest('[hidden], [inert], [aria-hidden="true"]')) return false;
|
|
52
|
-
return typeof el.checkVisibility === 'function' ? el.checkVisibility() : true;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/** The open layers, oldest first: Esc and the Tab trap belong to the last one. */
|
|
56
|
-
const layers: object[] = [];
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* How many open layers hold each element inert. Stacked modal layers share
|
|
60
|
-
* most of the background, so it stays inert until the last of them closes,
|
|
61
|
-
* whatever order they close in.
|
|
62
|
-
*/
|
|
63
|
-
const inertHolds = new Map<HTMLElement, number>();
|
|
64
|
-
|
|
65
|
-
/** Makes `el` inert for one layer; false when it was already inert by someone else's hand (theirs to undo). */
|
|
66
|
-
function holdInert(el: HTMLElement): boolean {
|
|
67
|
-
const held = inertHolds.get(el) ?? 0;
|
|
68
|
-
if (held === 0) {
|
|
69
|
-
if (el.inert) return false;
|
|
70
|
-
el.inert = true;
|
|
71
|
-
}
|
|
72
|
-
inertHolds.set(el, held + 1);
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function releaseInert(el: HTMLElement): void {
|
|
77
|
-
const held = inertHolds.get(el) ?? 0;
|
|
78
|
-
if (held > 1) {
|
|
79
|
-
inertHolds.set(el, held - 1);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
inertHolds.delete(el);
|
|
83
|
-
el.inert = false;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/** Options of {@link useLayer}. */
|
|
87
|
-
export interface LayerOptions {
|
|
88
|
-
/** Called on Esc while this is the topmost layer. Omit to leave Esc alone (it still never reaches a layer below). */
|
|
89
|
-
onEscape?: () => void;
|
|
90
|
-
/** Modal: focus moves in, Tab stays in, the rest of `body` goes inert. Default true. */
|
|
91
|
-
trapFocus?: boolean;
|
|
92
|
-
/** Elements made `inert` while open (e.g. `main, footer`). */
|
|
93
|
-
inertSelector?: string;
|
|
94
|
-
/** Where focus lands on open when nothing inside took it already; else the first control, else the layer. */
|
|
95
|
-
initialFocus?: RefObject<HTMLElement | null>;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* The behaviour of a layer whose root (`layerRef`, a child of `body`) is
|
|
100
|
-
* portaled by the caller: scroll lock, stacking, Esc, focus and the inert
|
|
101
|
-
* background, as described above. Overlay and Lightbox both run on it.
|
|
102
|
-
* Returns whether this layer is the topmost one right now, for a caller
|
|
103
|
-
* that handles more keys of its own.
|
|
104
|
-
*
|
|
105
|
-
* @param open - Whether the layer is open. Scroll lock, stacking, Esc handling and the focus trap
|
|
106
|
-
* run only while it is.
|
|
107
|
-
* @param layerRef - Ref to the layer's root element, a child of `body` the caller portals.
|
|
108
|
-
* @param options - Esc handling, focus trap and inert background options, see {@link LayerOptions}.
|
|
109
|
-
*/
|
|
110
|
-
export function useLayer(
|
|
111
|
-
open: boolean,
|
|
112
|
-
layerRef: RefObject<HTMLElement | null>,
|
|
113
|
-
{ onEscape, trapFocus = true, inertSelector, initialFocus }: LayerOptions = {},
|
|
114
|
-
): () => boolean {
|
|
115
|
-
useScrollLock(open);
|
|
116
|
-
const [token] = useState(() => ({}));
|
|
117
|
-
const isTop = useCallback(() => layers[layers.length - 1] === token, [token]);
|
|
118
|
-
|
|
119
|
-
const onEscapeRef = useRef(onEscape);
|
|
120
|
-
useLayoutEffect(() => {
|
|
121
|
-
onEscapeRef.current = onEscape;
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
// The opener is read before the layer's DOM is committed: by the time a
|
|
125
|
-
// layout effect runs, an `autoFocus` inside has already moved focus in.
|
|
126
|
-
const opener = useRef<HTMLElement | null>(null);
|
|
127
|
-
useInsertionEffect(() => {
|
|
128
|
-
if (open) opener.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
129
|
-
}, [open]);
|
|
130
|
-
|
|
131
|
-
// Declared before the focus effect: on close the background leaves inert
|
|
132
|
-
// first, so focus can return to the opener behind it.
|
|
133
|
-
useEffect(() => {
|
|
134
|
-
if (!open) return undefined;
|
|
135
|
-
const held: HTMLElement[] = [];
|
|
136
|
-
const hold = (el: HTMLElement) => {
|
|
137
|
-
if (holdInert(el)) held.push(el);
|
|
138
|
-
};
|
|
139
|
-
if (inertSelector) document.querySelectorAll<HTMLElement>(inertSelector).forEach(hold);
|
|
140
|
-
const layer = layerRef.current;
|
|
141
|
-
if (trapFocus && layer?.parentElement) {
|
|
142
|
-
for (const el of layer.parentElement.children) {
|
|
143
|
-
// Live regions (toasts) keep announcing over the layer.
|
|
144
|
-
if (el !== layer && el instanceof HTMLElement && !el.hasAttribute('aria-live')) hold(el);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
return () => held.forEach(releaseInert);
|
|
148
|
-
}, [open, trapFocus, inertSelector, layerRef]);
|
|
149
|
-
|
|
150
|
-
useEffect(() => {
|
|
151
|
-
if (!open) return undefined;
|
|
152
|
-
layers.push(token);
|
|
153
|
-
const layer = layerRef.current;
|
|
154
|
-
if (trapFocus && layer && !layer.contains(document.activeElement)) {
|
|
155
|
-
const target =
|
|
156
|
-
initialFocus?.current ?? [...layer.querySelectorAll<HTMLElement>(FOCUSABLE)].find(focusable) ?? layer;
|
|
157
|
-
if (target === layer && !layer.hasAttribute('tabindex')) layer.tabIndex = -1;
|
|
158
|
-
target.focus({ preventScroll: true });
|
|
159
|
-
}
|
|
160
|
-
return () => {
|
|
161
|
-
const at = layers.indexOf(token);
|
|
162
|
-
if (at !== -1) layers.splice(at, 1);
|
|
163
|
-
const el = opener.current;
|
|
164
|
-
if (el?.isConnected) el.focus({ preventScroll: true });
|
|
165
|
-
};
|
|
166
|
-
// Focus moves in once per opening; a later change of options must not pull it back.
|
|
167
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
168
|
-
}, [open, token]);
|
|
169
|
-
|
|
170
|
-
useEffect(() => {
|
|
171
|
-
if (!open) return undefined;
|
|
172
|
-
const onKey = (e: KeyboardEvent) => {
|
|
173
|
-
if (!isTop()) return;
|
|
174
|
-
if (e.key === 'Escape') {
|
|
175
|
-
// Esc mid-composition cancels the IME's candidate, not the layer.
|
|
176
|
-
if (!e.isComposing) onEscapeRef.current?.();
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
const layer = layerRef.current;
|
|
180
|
-
if (e.key !== 'Tab' || !trapFocus || !layer) return;
|
|
181
|
-
const items = [...layer.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(focusable);
|
|
182
|
-
if (!items.length) return;
|
|
183
|
-
const first = items[0];
|
|
184
|
-
const last = items[items.length - 1];
|
|
185
|
-
const inside = layer.contains(document.activeElement);
|
|
186
|
-
if (e.shiftKey && (document.activeElement === first || !inside)) {
|
|
187
|
-
e.preventDefault();
|
|
188
|
-
last.focus();
|
|
189
|
-
} else if (!e.shiftKey && (document.activeElement === last || !inside)) {
|
|
190
|
-
e.preventDefault();
|
|
191
|
-
first.focus();
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
window.addEventListener('keydown', onKey);
|
|
195
|
-
return () => window.removeEventListener('keydown', onKey);
|
|
196
|
-
}, [open, trapFocus, isTop, layerRef]);
|
|
197
|
-
|
|
198
|
-
return isTop;
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/** Props for {@link Overlay}. */
|
|
202
|
-
export interface OverlayProps {
|
|
203
|
-
/** Whether the layer is shown. */
|
|
204
|
-
open: boolean;
|
|
205
|
-
/** Called when the scrim is clicked, or on Esc when `closeOnEscape` is on. */
|
|
206
|
-
onClose: () => void;
|
|
207
|
-
/**
|
|
208
|
-
* Renders the surface. It receives `open` or `closed`, to put on the surface's `data-state`. The
|
|
209
|
-
* state is `closed` on the first frame and during exit, so CSS has a from-state.
|
|
210
|
-
*/
|
|
211
|
-
children: (state: 'open' | 'closed') => ReactNode;
|
|
212
|
-
/** Position of the layer (the scrim fills it). */
|
|
213
|
-
className?: string;
|
|
214
|
-
/**
|
|
215
|
-
* Extra classes on the scrim.
|
|
216
|
-
* @default ''
|
|
217
|
-
*/
|
|
218
|
-
scrimClassName?: string;
|
|
219
|
-
/**
|
|
220
|
-
* Exit duration in milliseconds. Ignored.
|
|
221
|
-
*
|
|
222
|
-
* @deprecated The exit lasts as long as its motion; kept so older callers compile.
|
|
223
|
-
*/
|
|
224
|
-
exitMs?: number;
|
|
225
|
-
/**
|
|
226
|
-
* Close the layer on Esc while it is the topmost layer.
|
|
227
|
-
* @default true
|
|
228
|
-
*/
|
|
229
|
-
closeOnEscape?: boolean;
|
|
230
|
-
/**
|
|
231
|
-
* Make the layer modal: focus moves in on open, Tab stays inside, and the rest of `body` goes
|
|
232
|
-
* inert.
|
|
233
|
-
* @default true
|
|
234
|
-
*/
|
|
235
|
-
trapFocus?: boolean;
|
|
236
|
-
/** Elements made `inert` while open (e.g. `main, footer`). */
|
|
237
|
-
inertSelector?: string;
|
|
238
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
239
|
-
style?: CSSProperties;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Renders a layer above the page through a portal: a scrim that fades in and out, with the
|
|
244
|
-
* surface drawn by `children`. It adds scroll lock, Esc to close, focus return on close and,
|
|
245
|
-
* with `trapFocus`, a modal focus trap that makes the rest of the page inert. The layer stays
|
|
246
|
-
* mounted until the scrim's exit finishes.
|
|
247
|
-
*
|
|
248
|
-
* @param props - Component props.
|
|
249
|
-
*/
|
|
250
|
-
export function Overlay({
|
|
251
|
-
open,
|
|
252
|
-
onClose,
|
|
253
|
-
children,
|
|
254
|
-
className = 'fixed inset-0 z-zg-overlay',
|
|
255
|
-
scrimClassName = '',
|
|
256
|
-
closeOnEscape = true,
|
|
257
|
-
trapFocus = true,
|
|
258
|
-
inertSelector,
|
|
259
|
-
style,
|
|
260
|
-
}: OverlayProps) {
|
|
261
|
-
const layerRef = useRef<HTMLDivElement>(null);
|
|
262
|
-
useLayer(open, layerRef, { onEscape: closeOnEscape ? onClose : undefined, trapFocus, inertSelector });
|
|
263
|
-
|
|
264
|
-
if (typeof document === 'undefined') return null;
|
|
265
|
-
return createPortal(
|
|
266
|
-
// `m` with the DOM animation features only: an app that renders no other motion component
|
|
267
|
-
// pays for these, not for motion's whole feature set (layout, drag).
|
|
268
|
-
<LazyMotion features={domAnimation}>
|
|
269
|
-
<AnimatePresence>
|
|
270
|
-
{open && (
|
|
271
|
-
<Layer
|
|
272
|
-
key="layer"
|
|
273
|
-
layerRef={layerRef}
|
|
274
|
-
className={className}
|
|
275
|
-
style={style}
|
|
276
|
-
scrimClassName={scrimClassName}
|
|
277
|
-
onClose={onClose}
|
|
278
|
-
>
|
|
279
|
-
{children}
|
|
280
|
-
</Layer>
|
|
281
|
-
)}
|
|
282
|
-
</AnimatePresence>
|
|
283
|
-
</LazyMotion>,
|
|
284
|
-
document.body,
|
|
285
|
-
);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
function Layer({
|
|
289
|
-
layerRef,
|
|
290
|
-
className,
|
|
291
|
-
style,
|
|
292
|
-
scrimClassName,
|
|
293
|
-
onClose,
|
|
294
|
-
children,
|
|
295
|
-
}: {
|
|
296
|
-
layerRef: React.RefObject<HTMLDivElement | null>;
|
|
297
|
-
className: string;
|
|
298
|
-
style: CSSProperties | undefined;
|
|
299
|
-
scrimClassName: string;
|
|
300
|
-
onClose: () => void;
|
|
301
|
-
children: (state: 'open' | 'closed') => ReactNode;
|
|
302
|
-
}) {
|
|
303
|
-
const present = useIsPresent();
|
|
304
|
-
// `closed` on the first frame too, so the surface's CSS enter has a from-state.
|
|
305
|
-
const [entered, setEntered] = useState(false);
|
|
306
|
-
useEffect(() => {
|
|
307
|
-
const id = requestAnimationFrame(() => setEntered(true));
|
|
308
|
-
return () => cancelAnimationFrame(id);
|
|
309
|
-
}, []);
|
|
310
|
-
const state = present && entered ? 'open' : 'closed';
|
|
311
|
-
const fadeIn = useMotionTransition('fade');
|
|
312
|
-
const fadeOut = useMotionTransition('fade-out');
|
|
313
|
-
return (
|
|
314
|
-
<div ref={layerRef} className={className} style={style} data-zg-overlay="" {...(present ? {} : { inert: true })}>
|
|
315
|
-
<m.div
|
|
316
|
-
className={`zg-scrim absolute inset-0 ${scrimClassName}`}
|
|
317
|
-
data-state={state}
|
|
318
|
-
initial={{ opacity: 0 }}
|
|
319
|
-
animate={{ opacity: 1, transition: fadeIn }}
|
|
320
|
-
exit={{ opacity: 0, transition: fadeOut }}
|
|
321
|
-
onClick={onClose}
|
|
322
|
-
aria-hidden
|
|
323
|
-
/>
|
|
324
|
-
{children(state)}
|
|
325
|
-
</div>
|
|
326
|
-
);
|
|
327
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Empty and loading states for the side panel's tabs: the shared
|
|
3
|
-
* `EmptyState` block, inset from the panel edges and centred in the
|
|
4
|
-
* remaining height.
|
|
5
|
-
*/
|
|
6
|
-
import type { CSSProperties, ReactNode } from 'react';
|
|
7
|
-
|
|
8
|
-
import { useLabels } from '../labels';
|
|
9
|
-
import { SegmentSpinner } from './SegmentSpinner';
|
|
10
|
-
import { EmptyState } from './Surface';
|
|
11
|
-
|
|
12
|
-
/** Props for {@link PanelEmpty}. */
|
|
13
|
-
export interface PanelEmptyProps {
|
|
14
|
-
/** Icon class shown above the title, such as `i-ph-files`. */
|
|
15
|
-
icon?: string;
|
|
16
|
-
/** Main message. It takes the warning colour when `warn` is set. */
|
|
17
|
-
title: ReactNode;
|
|
18
|
-
/** Secondary text under the title. */
|
|
19
|
-
hint?: ReactNode;
|
|
20
|
-
/** An error in place of content. */
|
|
21
|
-
warn?: boolean;
|
|
22
|
-
/** Extra classes on the root element. */
|
|
23
|
-
className?: string;
|
|
24
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
25
|
-
style?: CSSProperties;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Renders an empty or error state for a side panel tab: an {@link EmptyState} inset from the
|
|
30
|
-
* panel edges and centred in the remaining height.
|
|
31
|
-
*
|
|
32
|
-
* @param props - Component props.
|
|
33
|
-
*/
|
|
34
|
-
export function PanelEmpty({ icon, title, hint, warn = false, className, style }: PanelEmptyProps) {
|
|
35
|
-
return (
|
|
36
|
-
<div
|
|
37
|
-
className={['flex-1 min-h-0 flex flex-col justify-center p-3', className].filter(Boolean).join(' ')}
|
|
38
|
-
style={style}
|
|
39
|
-
>
|
|
40
|
-
<EmptyState
|
|
41
|
-
icon={icon}
|
|
42
|
-
title={warn ? <span className="text-[var(--zg-warn)]">{title}</span> : title}
|
|
43
|
-
hint={hint}
|
|
44
|
-
framed={false}
|
|
45
|
-
compact
|
|
46
|
-
/>
|
|
47
|
-
</div>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/** Props for {@link PanelLoading}. */
|
|
52
|
-
export interface PanelLoadingProps {
|
|
53
|
-
/** Extra classes on the root element. */
|
|
54
|
-
className?: string;
|
|
55
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
56
|
-
style?: CSSProperties;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Renders a centred spinner with a loading label for a side panel tab.
|
|
61
|
-
*
|
|
62
|
-
* @param props - Component props.
|
|
63
|
-
*/
|
|
64
|
-
export function PanelLoading({ className, style }: PanelLoadingProps) {
|
|
65
|
-
const labels = useLabels();
|
|
66
|
-
return (
|
|
67
|
-
<div
|
|
68
|
-
className={[
|
|
69
|
-
'flex-1 min-h-0 flex items-center justify-center gap-2 p-6 text-zg-label text-[var(--zg-text-muted)]',
|
|
70
|
-
className,
|
|
71
|
-
]
|
|
72
|
-
.filter(Boolean)
|
|
73
|
-
.join(' ')}
|
|
74
|
-
style={style}
|
|
75
|
-
>
|
|
76
|
-
<SegmentSpinner size="sm" tone="muted" label={labels.loading} />
|
|
77
|
-
<span aria-hidden>{labels.loading}…</span>
|
|
78
|
-
</div>
|
|
79
|
-
);
|
|
80
|
-
}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Row furniture shared by the Artifacts tab and extension panels
|
|
3
|
-
* (`PanelContentView`): the flat hoverable row, its badges, and the
|
|
4
|
-
* `+N −M` diff counts (also the Diffs tab's).
|
|
5
|
-
*/
|
|
6
|
-
import type { CSSProperties } from 'react';
|
|
7
|
-
|
|
8
|
-
/** A flat list row: no fill until hovered, bleeding into the list's padding. */
|
|
9
|
-
export const PANEL_ROW = 'relative flex items-start gap-2 -mx-2 px-2 py-1.5 rounded-zg-md';
|
|
10
|
-
/**
|
|
11
|
-
* Class that adds the hover fill to a {@link PANEL_ROW}. Left separate for rows that supply their
|
|
12
|
-
* own hover.
|
|
13
|
-
*/
|
|
14
|
-
export const PANEL_ROW_HOVER = 'hover:bg-[var(--zg-row-hover)]';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Colour of a {@link RowBadge}: `neutral` (or none) is muted, `success` and `warn` take their
|
|
18
|
-
* status colour, and `diff` is monospaced text for `+N -M` counts.
|
|
19
|
-
*/
|
|
20
|
-
export type BadgeTone = 'neutral' | 'diff' | 'success' | 'warn' | undefined;
|
|
21
|
-
|
|
22
|
-
/** Props for {@link DiffCounts}. */
|
|
23
|
-
export interface DiffCountsProps {
|
|
24
|
-
/** Number of added lines, shown as `+N` in the success colour. */
|
|
25
|
-
added: number;
|
|
26
|
-
/** Number of removed lines, shown as `-N` in the danger colour. */
|
|
27
|
-
removed: number;
|
|
28
|
-
/** Extra classes on the wrapping element. */
|
|
29
|
-
className?: string;
|
|
30
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
31
|
-
style?: CSSProperties;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* `+120 −8` with the halves colored like a diff, in the meta voice.
|
|
36
|
-
*
|
|
37
|
-
* @param props - Component props.
|
|
38
|
-
*/
|
|
39
|
-
export function DiffCounts({ added, removed, className = '', style }: DiffCountsProps) {
|
|
40
|
-
return (
|
|
41
|
-
<span className={`zg-meta shrink-0 inline-flex items-center gap-1 ${className}`} style={style}>
|
|
42
|
-
<span className="text-zg-success">+{added}</span>
|
|
43
|
-
<span className="text-zg-danger">−{removed}</span>
|
|
44
|
-
</span>
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Props for {@link RowBadge}. */
|
|
49
|
-
export interface RowBadgeProps {
|
|
50
|
-
/** Badge text. With `tone="diff"`, text shaped like `+12 -3` renders as {@link DiffCounts}. */
|
|
51
|
-
text: string;
|
|
52
|
-
/** Colour of the text. See {@link BadgeTone}. */
|
|
53
|
-
tone?: BadgeTone;
|
|
54
|
-
/** Native tooltip. */
|
|
55
|
-
title?: string;
|
|
56
|
-
/** Extra classes on the root element. */
|
|
57
|
-
className?: string;
|
|
58
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
59
|
-
style?: CSSProperties;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* A small status chip set into the row. A `diff` badge reading `+N −M` renders as `DiffCounts`.
|
|
64
|
-
*
|
|
65
|
-
* @param props - Component props.
|
|
66
|
-
*/
|
|
67
|
-
export function RowBadge({ text, tone, title, className, style }: RowBadgeProps) {
|
|
68
|
-
const diff = tone === 'diff' ? /^\+(\d+) −(\d+)$/.exec(text) : null;
|
|
69
|
-
if (diff) {
|
|
70
|
-
return (
|
|
71
|
-
<span
|
|
72
|
-
className={['zg-track-chip inline-flex items-center h-4 px-1.5', className].filter(Boolean).join(' ')}
|
|
73
|
-
style={style}
|
|
74
|
-
title={title}
|
|
75
|
-
>
|
|
76
|
-
<DiffCounts added={Number(diff[1])} removed={Number(diff[2])} />
|
|
77
|
-
</span>
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
return (
|
|
81
|
-
<span
|
|
82
|
-
className={[
|
|
83
|
-
`zg-track-chip inline-flex items-center h-4 px-1.5 text-zg-badge leading-4 tabular-nums whitespace-nowrap ${badgeTone(tone)}`,
|
|
84
|
-
className,
|
|
85
|
-
]
|
|
86
|
-
.filter(Boolean)
|
|
87
|
-
.join(' ')}
|
|
88
|
-
style={style}
|
|
89
|
-
title={title}
|
|
90
|
-
>
|
|
91
|
-
{text}
|
|
92
|
-
</span>
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function badgeTone(tone: BadgeTone): string {
|
|
97
|
-
switch (tone) {
|
|
98
|
-
case 'success':
|
|
99
|
-
return 'text-zg-success';
|
|
100
|
-
case 'warn':
|
|
101
|
-
return 'text-zg-warn';
|
|
102
|
-
case 'diff':
|
|
103
|
-
return 'font-mono text-[var(--zg-text)]';
|
|
104
|
-
default:
|
|
105
|
-
return 'text-[var(--zg-text-muted)]';
|
|
106
|
-
}
|
|
107
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A small app window around a live preview: a title bar with three dots and
|
|
3
|
-
* a caption, then the content. With `vars` (the CSS variables of a palette),
|
|
4
|
-
* the window has its own theme (`zg-theme-scope`). A theme picker can then
|
|
5
|
-
* show a theme before it applies to the page.
|
|
6
|
-
*/
|
|
7
|
-
import type { CSSProperties, ReactNode } from 'react';
|
|
8
|
-
|
|
9
|
-
/** Props for {@link PreviewWindow}. */
|
|
10
|
-
export interface PreviewWindowProps {
|
|
11
|
-
/** Caption in the title bar. */
|
|
12
|
-
title?: ReactNode;
|
|
13
|
-
/**
|
|
14
|
-
* A theme's CSS variables, the full set the app applies: `themeCssVars(id)`, or `paletteToCssVars`
|
|
15
|
-
* with `contrastToCssVars` and `depthToCssVars`. Palette vars alone leave text on the page's
|
|
16
|
-
* contrast. Absent: the page's theme.
|
|
17
|
-
*/
|
|
18
|
-
vars?: Readonly<Record<string, string>>;
|
|
19
|
-
/** Light or dark, for `vars` from a palette of that appearance. */
|
|
20
|
-
appearance?: 'dark' | 'light';
|
|
21
|
-
/** Accessible name of the preview. */
|
|
22
|
-
label?: string;
|
|
23
|
-
/** Extra classes on the window. */
|
|
24
|
-
className?: string;
|
|
25
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
26
|
-
style?: CSSProperties;
|
|
27
|
-
/** The preview. */
|
|
28
|
-
children: ReactNode;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Renders a window frame around a preview, themed by `vars` when given.
|
|
33
|
-
*
|
|
34
|
-
* @param props - Component props.
|
|
35
|
-
*/
|
|
36
|
-
export function PreviewWindow({ title, vars, appearance, label, className = '', style, children }: PreviewWindowProps) {
|
|
37
|
-
const scope = vars ? `zg-theme-scope ${appearance ?? ''}` : '';
|
|
38
|
-
return (
|
|
39
|
-
<figure
|
|
40
|
-
aria-label={label}
|
|
41
|
-
className={`m-0 flex flex-col min-w-0 overflow-hidden rounded-zg-lg border border-[var(--zg-hairline)] bg-[var(--zg-bg)] text-[var(--zg-text)] ${scope} ${className}`}
|
|
42
|
-
style={style ? { ...(vars as CSSProperties | undefined), ...style } : (vars as CSSProperties | undefined)}
|
|
43
|
-
>
|
|
44
|
-
<div aria-hidden className="flex items-center gap-1.5 h-7 px-3 shrink-0 bg-[var(--zg-tray)]">
|
|
45
|
-
<span className="w-2 h-2 rounded-full bg-[var(--zg-track)]" />
|
|
46
|
-
<span className="w-2 h-2 rounded-full bg-[var(--zg-track)]" />
|
|
47
|
-
<span className="w-2 h-2 rounded-full bg-[var(--zg-track)]" />
|
|
48
|
-
{title && <span className="ml-2 zg-meta truncate">{title}</span>}
|
|
49
|
-
</div>
|
|
50
|
-
<div className="flex-1 min-w-0 min-h-0">{children}</div>
|
|
51
|
-
</figure>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A strip of pills the user drags to reorder: every sibling slides to its
|
|
3
|
-
* new slot as the held pill passes it (the `settle` motion), the held pill
|
|
4
|
-
* lifts, and the order is committed once on drop. Alt+Shift+←/→ on a
|
|
5
|
-
* focused tab moves it one slot (`onMove` in `renderTab`). The active tab
|
|
6
|
-
* scrolls into view; the strip scrolls sideways when it overflows.
|
|
7
|
-
*/
|
|
8
|
-
import { AnimatePresence, Reorder } from 'motion/react';
|
|
9
|
-
import { useEffect, useRef, type CSSProperties, type ReactNode } from 'react';
|
|
10
|
-
|
|
11
|
-
import { moveId, useTabDrag } from '../hooks/useTabDrag';
|
|
12
|
-
import { useMotionTransition, useTabExit } from '../motion/springs';
|
|
13
|
-
|
|
14
|
-
/** What a tab needs to take part in the strip. */
|
|
15
|
-
export interface ReorderTabState {
|
|
16
|
-
/** Held by the pointer. */
|
|
17
|
-
lifted: boolean;
|
|
18
|
-
/** Wraps the tab's pick, so the click that ends a drag doesn't pick. */
|
|
19
|
-
pick: (run: () => void) => () => void;
|
|
20
|
-
/** Moves the tab one slot left (-1) or right (+1). */
|
|
21
|
-
onMove: (delta: number) => void;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/** Props of {@link ReorderTabs}. */
|
|
25
|
-
export interface ReorderTabsProps {
|
|
26
|
-
/** The tabs, in their current order. */
|
|
27
|
-
ids: readonly string[];
|
|
28
|
-
/** The selected tab, scrolled into view; `null` when none is. */
|
|
29
|
-
activeId: string | null;
|
|
30
|
-
/** The new order, once per drop or keyboard move. */
|
|
31
|
-
onReorder: (ids: readonly string[]) => void;
|
|
32
|
-
/** Draws one tab (a `role="tab"` element); `state` wires its pick, lift and keyboard move. */
|
|
33
|
-
renderTab: (id: string, state: ReorderTabState) => ReactNode;
|
|
34
|
-
/** Accessible name of the tablist. */
|
|
35
|
-
label: string;
|
|
36
|
-
/** Extra classes on the strip. */
|
|
37
|
-
className?: string;
|
|
38
|
-
/** Inline styles on the root element, merged after the component's own. */
|
|
39
|
-
style?: CSSProperties;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Renders the reorderable tab strip (see the module comment).
|
|
44
|
-
*
|
|
45
|
-
* @param props - Component props.
|
|
46
|
-
*/
|
|
47
|
-
export function ReorderTabs({ ids, activeId, onReorder, renderTab, label, className = '', style }: ReorderTabsProps) {
|
|
48
|
-
const tabLayout = useMotionTransition('settle');
|
|
49
|
-
const tabExit = useTabExit();
|
|
50
|
-
const stripRef = useRef<HTMLDivElement>(null);
|
|
51
|
-
const drag = useTabDrag(ids, onReorder);
|
|
52
|
-
useEffect(() => {
|
|
53
|
-
stripRef.current
|
|
54
|
-
?.querySelector<HTMLElement>('[role="tab"][aria-selected="true"]')
|
|
55
|
-
?.scrollIntoView({ block: 'nearest', inline: 'nearest' });
|
|
56
|
-
}, [activeId, ids.length]);
|
|
57
|
-
return (
|
|
58
|
-
<Reorder.Group
|
|
59
|
-
as="div"
|
|
60
|
-
axis="x"
|
|
61
|
-
values={drag.shown as string[]}
|
|
62
|
-
onReorder={drag.onReorder}
|
|
63
|
-
layoutScroll
|
|
64
|
-
ref={stripRef}
|
|
65
|
-
role="tablist"
|
|
66
|
-
aria-label={label}
|
|
67
|
-
className={`zg-segment zg-no-scrollbar zg-scroll-fade-x min-w-0 max-w-full overflow-x-auto ${className}`}
|
|
68
|
-
style={style}
|
|
69
|
-
>
|
|
70
|
-
<AnimatePresence initial={false}>
|
|
71
|
-
{drag.shown.map((id) => {
|
|
72
|
-
const lifted = drag.dragging === id;
|
|
73
|
-
return (
|
|
74
|
-
<Reorder.Item
|
|
75
|
-
key={id}
|
|
76
|
-
as="div"
|
|
77
|
-
value={id}
|
|
78
|
-
data-reorder-tab={id}
|
|
79
|
-
data-dragging={lifted || undefined}
|
|
80
|
-
onDragStart={() => drag.onDragStart(id)}
|
|
81
|
-
onDragEnd={drag.onDragEnd}
|
|
82
|
-
onPointerDown={drag.onPointerDown}
|
|
83
|
-
dragConstraints={drag.bounds}
|
|
84
|
-
dragElastic={0.08}
|
|
85
|
-
transition={tabLayout}
|
|
86
|
-
exit={tabExit}
|
|
87
|
-
whileDrag={{ scale: 1.04 }}
|
|
88
|
-
className={`relative shrink-0 rounded-full ${lifted ? 'z-10 shadow-[var(--zg-shadow-float)]' : ''}`}
|
|
89
|
-
>
|
|
90
|
-
{renderTab(id, {
|
|
91
|
-
lifted,
|
|
92
|
-
pick: (run) => () => {
|
|
93
|
-
if (!drag.wasDragged()) run();
|
|
94
|
-
},
|
|
95
|
-
onMove: (delta) => onReorder(moveId(drag.shown, id, delta)),
|
|
96
|
-
})}
|
|
97
|
-
</Reorder.Item>
|
|
98
|
-
);
|
|
99
|
-
})}
|
|
100
|
-
</AnimatePresence>
|
|
101
|
-
</Reorder.Group>
|
|
102
|
-
);
|
|
103
|
-
}
|