@oh-my-pi/pi-tui 18.2.3 → 18.2.5
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/CHANGELOG.md +29 -0
- package/README.md +43 -0
- package/dist/types/app-keybindings.d.ts +395 -0
- package/dist/types/apps/autoresearch-dashboard.d.ts +43 -0
- package/dist/types/apps/autoresearch-data.d.ts +15 -0
- package/dist/types/apps/cleanse-board.d.ts +66 -0
- package/dist/types/apps/cleanse-picker.d.ts +23 -0
- package/dist/types/apps/debug/log-formatting.d.ts +6 -0
- package/dist/types/apps/debug/log-viewer.d.ts +81 -0
- package/dist/types/apps/debug/protocol-probe.d.ts +42 -0
- package/dist/types/apps/debug/raw-sse-buffer.d.ts +58 -0
- package/dist/types/apps/debug/raw-sse.d.ts +26 -0
- package/dist/types/apps/debug/terminal-info.d.ts +34 -0
- package/dist/types/apps/debug/viewer-frame.d.ts +52 -0
- package/dist/types/apps/git/avatar.d.ts +9 -0
- package/dist/types/apps/git/colors.d.ts +49 -0
- package/dist/types/apps/git/diff-pane.d.ts +188 -0
- package/dist/types/apps/git/git-tui.d.ts +66 -0
- package/dist/types/apps/git/sidebar.d.ts +149 -0
- package/dist/types/apps/git/state.d.ts +117 -0
- package/dist/types/apps/if-bench-board.d.ts +75 -0
- package/dist/types/apps/live-visualizer.d.ts +33 -0
- package/dist/types/apps/ps-data.d.ts +51 -0
- package/dist/types/apps/ps-top.d.ts +33 -0
- package/dist/types/apps/session-picker.d.ts +26 -0
- package/dist/types/apps/setup-model-picker.d.ts +13 -0
- package/dist/types/apps/standalone-picker.d.ts +42 -0
- package/dist/types/autocomplete.d.ts +4 -0
- package/dist/types/chat/advisor-message.d.ts +11 -0
- package/dist/types/chat/assistant-message.d.ts +106 -0
- package/dist/types/chat/background-tan-message.d.ts +9 -0
- package/dist/types/chat/bash-execution.d.ts +47 -0
- package/dist/types/chat/cache-invalidation-marker.d.ts +50 -0
- package/dist/types/chat/chat-transcript-builder.d.ts +50 -0
- package/dist/types/chat/collab-prompt-message.d.ts +10 -0
- package/dist/types/chat/compaction-summary-message.d.ts +54 -0
- package/dist/types/chat/custom-message.d.ts +10 -0
- package/dist/types/chat/display-preferences.d.ts +13 -0
- package/dist/types/chat/eval-execution.d.ts +29 -0
- package/dist/types/chat/execution-shared.d.ts +51 -0
- package/dist/types/chat/extension-types.d.ts +28 -0
- package/dist/types/chat/hook-message.d.ts +10 -0
- package/dist/types/chat/image-loading.d.ts +46 -0
- package/dist/types/chat/late-diagnostics-message.d.ts +21 -0
- package/dist/types/chat/messages.d.ts +189 -0
- package/dist/types/chat/reaction.d.ts +30 -0
- package/dist/types/chat/read-target.d.ts +4 -0
- package/dist/types/chat/read-tool-group.d.ts +67 -0
- package/dist/types/chat/served-model-marker.d.ts +47 -0
- package/dist/types/chat/skill-message.d.ts +33 -0
- package/dist/types/chat/skill-title-input.d.ts +14 -0
- package/dist/types/chat/stripped-tool-calls-placeholder.d.ts +12 -0
- package/dist/types/chat/thinking-display.d.ts +12 -0
- package/dist/types/chat/todo-reminder.d.ts +13 -0
- package/dist/types/chat/tool-execution.d.ts +138 -0
- package/dist/types/chat/transcript-browser.d.ts +93 -0
- package/dist/types/chat/transcript-entry.d.ts +45 -0
- package/dist/types/chat/transcript-outline.d.ts +86 -0
- package/dist/types/chat/transcript-render-helpers.d.ts +92 -0
- package/dist/types/chat/ttsr-notification.d.ts +23 -0
- package/dist/types/chat/user-message.d.ts +52 -0
- package/dist/types/chrome/chat-block.d.ts +64 -0
- package/dist/types/chrome/collab-qrcode.d.ts +28 -0
- package/dist/types/chrome/context-thresholds.d.ts +10 -0
- package/dist/types/chrome/countdown-timer.d.ts +14 -0
- package/dist/types/chrome/diff.d.ts +14 -0
- package/dist/types/chrome/dynamic-border.d.ts +16 -0
- package/dist/types/chrome/error-block.d.ts +17 -0
- package/dist/types/chrome/form-theme.d.ts +3 -0
- package/dist/types/chrome/format.d.ts +12 -0
- package/dist/types/chrome/index.d.ts +20 -0
- package/dist/types/chrome/keybinding-hints.d.ts +40 -0
- package/dist/types/chrome/live-board.d.ts +23 -0
- package/dist/types/chrome/local-date.d.ts +4 -0
- package/dist/types/chrome/message-divider.d.ts +22 -0
- package/dist/types/chrome/message-frame.d.ts +52 -0
- package/dist/types/chrome/message-notice.d.ts +35 -0
- package/dist/types/chrome/overlay-box.d.ts +74 -0
- package/dist/types/chrome/qrcode.d.ts +48 -0
- package/dist/types/chrome/segment-track.d.ts +27 -0
- package/dist/types/chrome/select-list-mouse-routing.d.ts +4 -0
- package/dist/types/chrome/selector-helpers.d.ts +52 -0
- package/dist/types/chrome/shared.d.ts +5 -0
- package/dist/types/chrome/streaming-panel.d.ts +19 -0
- package/dist/types/chrome/tool-activity.d.ts +17 -0
- package/dist/types/chrome/transcript-container.d.ts +129 -0
- package/dist/types/chrome/transcript-status.d.ts +12 -0
- package/dist/types/chrome/visual-truncate.d.ts +19 -0
- package/dist/types/components/disclosure.d.ts +42 -0
- package/dist/types/components/form.d.ts +130 -0
- package/dist/types/components/image.d.ts +18 -16
- package/dist/types/components/key-value-list.d.ts +24 -0
- package/dist/types/components/layout/geometry.d.ts +73 -0
- package/dist/types/components/layout/row.d.ts +55 -0
- package/dist/types/components/layout/split-pane.d.ts +80 -0
- package/dist/types/components/layout/stack.d.ts +50 -0
- package/dist/types/components/menu-selection.d.ts +71 -0
- package/dist/types/components/metric.d.ts +44 -0
- package/dist/types/components/progress-bar.d.ts +36 -0
- package/dist/types/components/scroll-view.d.ts +53 -19
- package/dist/types/components/scroll-viewport.d.ts +46 -0
- package/dist/types/components/section.d.ts +19 -0
- package/dist/types/components/select-list.d.ts +46 -2
- package/dist/types/components/settings-list.d.ts +20 -0
- package/dist/types/components/table.d.ts +32 -0
- package/dist/types/components/tree-view.d.ts +130 -0
- package/dist/types/components/wizard-step.d.ts +60 -0
- package/dist/types/hotkeys-markdown.d.ts +7 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/keybinding-matchers.d.ts +35 -0
- package/dist/types/keys.d.ts +2 -2
- package/dist/types/lang-from-path.d.ts +9 -0
- package/dist/types/overlays/advisor-config.d.ts +114 -0
- package/dist/types/overlays/agent-activity.d.ts +41 -0
- package/dist/types/overlays/agent-hub-projection.d.ts +33 -0
- package/dist/types/overlays/agent-hub-renderer.d.ts +53 -0
- package/dist/types/overlays/agent-hub-types.d.ts +99 -0
- package/dist/types/overlays/agent-hub.d.ts +126 -0
- package/dist/types/overlays/agent-transcript-viewer.d.ts +71 -0
- package/dist/types/overlays/agents-hub.d.ts +72 -0
- package/dist/types/overlays/ask-dialog.d.ts +88 -0
- package/dist/types/overlays/bordered-loader.d.ts +11 -0
- package/dist/types/overlays/btw-history-panel.d.ts +29 -0
- package/dist/types/overlays/btw-history.d.ts +17 -0
- package/dist/types/overlays/btw-panel.d.ts +26 -0
- package/dist/types/overlays/cleanse-panel.d.ts +36 -0
- package/dist/types/overlays/codex-reset-fireworks.d.ts +52 -0
- package/dist/types/overlays/composer-shape-preview.d.ts +47 -0
- package/dist/types/overlays/composer-shape-registry.d.ts +50 -0
- package/dist/types/overlays/copy-selector.d.ts +48 -0
- package/dist/types/overlays/copy-targets.d.ts +63 -0
- package/dist/types/overlays/error-banner.d.ts +13 -0
- package/dist/types/overlays/extensions/display-text.d.ts +10 -0
- package/dist/types/overlays/extensions/extension-dashboard.d.ts +63 -0
- package/dist/types/overlays/extensions/extension-list.d.ts +54 -0
- package/dist/types/overlays/extensions/inspector-model.d.ts +109 -0
- package/dist/types/overlays/extensions/inspector-panel.d.ts +17 -0
- package/dist/types/overlays/extensions/live-tool-session.d.ts +28 -0
- package/dist/types/overlays/extensions/mcp-runtime.d.ts +107 -0
- package/dist/types/overlays/extensions/state-manager.d.ts +42 -0
- package/dist/types/overlays/extensions/types.d.ts +165 -0
- package/dist/types/overlays/history-search.d.ts +16 -0
- package/dist/types/overlays/hook-editor.d.ts +44 -0
- package/dist/types/overlays/hook-input.d.ts +20 -0
- package/dist/types/overlays/hook-selector.d.ts +71 -0
- package/dist/types/overlays/hub-frame.d.ts +77 -0
- package/dist/types/overlays/login-dialog.d.ts +43 -0
- package/dist/types/overlays/logout-account-selector.d.ts +15 -0
- package/dist/types/overlays/mcp-add-wizard.d.ts +87 -0
- package/dist/types/overlays/model-browser.d.ts +213 -0
- package/dist/types/overlays/model-hub.d.ts +72 -0
- package/dist/types/overlays/model-picker.d.ts +74 -0
- package/dist/types/overlays/model-selector.d.ts +52 -0
- package/dist/types/overlays/move-overlay.d.ts +39 -0
- package/dist/types/overlays/oauth-selector.d.ts +41 -0
- package/dist/types/overlays/omfg-panel.d.ts +20 -0
- package/dist/types/overlays/pause-screen.d.ts +43 -0
- package/dist/types/overlays/plan-review-overlay.d.ts +89 -0
- package/dist/types/overlays/plan-save-overlay.d.ts +19 -0
- package/dist/types/overlays/plan-toc.d.ts +41 -0
- package/dist/types/overlays/plugin-selector.d.ts +28 -0
- package/dist/types/overlays/plugin-settings.d.ts +180 -0
- package/dist/types/overlays/queue-mode-selector.d.ts +11 -0
- package/dist/types/overlays/reset-usage-selector.d.ts +23 -0
- package/dist/types/overlays/rewind-selector.d.ts +61 -0
- package/dist/types/overlays/running-subagent-badge.d.ts +6 -0
- package/dist/types/overlays/session-account-selector.d.ts +24 -0
- package/dist/types/overlays/session-info-overlay.d.ts +17 -0
- package/dist/types/overlays/session-observer-registry.d.ts +77 -0
- package/dist/types/overlays/session-selector.d.ts +131 -0
- package/dist/types/overlays/settings-defs.d.ts +119 -0
- package/dist/types/overlays/settings-selector.d.ts +73 -0
- package/dist/types/overlays/show-images-selector.d.ts +11 -0
- package/dist/types/overlays/snapcompact-shape-preview.d.ts +31 -0
- package/dist/types/overlays/theme-selector.d.ts +12 -0
- package/dist/types/overlays/thinking-selector.d.ts +12 -0
- package/dist/types/overlays/tiny-title-download-progress.d.ts +21 -0
- package/dist/types/overlays/tree-selector.d.ts +92 -0
- package/dist/types/overlays/usage-dashboard.d.ts +94 -0
- package/dist/types/overlays/usage-display.d.ts +5 -0
- package/dist/types/overlays/usage-row.d.ts +17 -0
- package/dist/types/prompt/attachment-chips.d.ts +19 -0
- package/dist/types/prompt/composer-attachments.d.ts +71 -0
- package/dist/types/prompt/composer-cache.d.ts +37 -0
- package/dist/types/prompt/composer.d.ts +159 -0
- package/dist/types/prompt/custom-editor.d.ts +261 -0
- package/dist/types/prompt/editor-top-gap.d.ts +18 -0
- package/dist/types/prompt/emoji-autocomplete.d.ts +16 -0
- package/dist/types/prompt/github-ref-autocomplete.d.ts +35 -0
- package/dist/types/prompt/gradient-highlight.d.ts +32 -0
- package/dist/types/prompt/image-format.d.ts +4 -0
- package/dist/types/prompt/image-references.d.ts +26 -0
- package/dist/types/prompt/interactive-context-helpers.d.ts +43 -0
- package/dist/types/prompt/internal-url-autocomplete.d.ts +56 -0
- package/dist/types/prompt/macos-spelling.d.ts +44 -0
- package/dist/types/prompt/magic-keyword-boundary.d.ts +9 -0
- package/dist/types/prompt/magic-keywords.d.ts +26 -0
- package/dist/types/prompt/markdown-prose.d.ts +15 -0
- package/dist/types/prompt/model-mention-autocomplete.d.ts +25 -0
- package/dist/types/prompt/model-mention-syntax.d.ts +24 -0
- package/dist/types/prompt/orchestrate.d.ts +13 -0
- package/dist/types/prompt/prompt-action-autocomplete.d.ts +56 -0
- package/dist/types/prompt/queue-input.d.ts +8 -0
- package/dist/types/prompt/skill-tokens.d.ts +13 -0
- package/dist/types/prompt/tools-markdown.d.ts +12 -0
- package/dist/types/prompt/ultrathink.d.ts +13 -0
- package/dist/types/prompt/usage-amounts.d.ts +26 -0
- package/dist/types/prompt/video.d.ts +18 -0
- package/dist/types/prompt/welcome.d.ts +83 -0
- package/dist/types/prompt/workflow.d.ts +13 -0
- package/dist/types/render/code-cell.d.ts +51 -0
- package/dist/types/render/file-list.d.ts +22 -0
- package/dist/types/render/hyperlink.d.ts +80 -0
- package/dist/types/render/index.d.ts +16 -0
- package/dist/types/render/output-block.d.ts +54 -0
- package/dist/types/render/output-pane.d.ts +80 -0
- package/dist/types/render/render-utils.d.ts +312 -0
- package/dist/types/render/sixel.d.ts +21 -0
- package/dist/types/render/status-line.d.ts +23 -0
- package/dist/types/render/tool-card.d.ts +71 -0
- package/dist/types/render/tree-list.d.ts +29 -0
- package/dist/types/render/types.d.ts +17 -0
- package/dist/types/render/utils.d.ts +43 -0
- package/dist/types/render/width-aware-text.d.ts +23 -0
- package/dist/types/setup/lazy.d.ts +3 -0
- package/dist/types/setup/scenes/composer.d.ts +3 -0
- package/dist/types/setup/scenes/glyph.d.ts +3 -0
- package/dist/types/setup/scenes/model.d.ts +3 -0
- package/dist/types/setup/scenes/outro.d.ts +2 -0
- package/dist/types/setup/scenes/providers.d.ts +3 -0
- package/dist/types/setup/scenes/sign-in.d.ts +21 -0
- package/dist/types/setup/scenes/splash.d.ts +11 -0
- package/dist/types/setup/scenes/theme.d.ts +3 -0
- package/dist/types/setup/scenes/types.d.ts +110 -0
- package/dist/types/setup/scenes/web-search.d.ts +22 -0
- package/dist/types/setup/setup-version.d.ts +11 -0
- package/dist/types/setup/startup-splash.d.ts +9 -0
- package/dist/types/setup/wizard-overlay.d.ts +16 -0
- package/dist/types/setup/wizard.d.ts +25 -0
- package/dist/types/status-line/component.d.ts +182 -0
- package/dist/types/status-line/context-usage.d.ts +156 -0
- package/dist/types/status-line/footer.d.ts +30 -0
- package/dist/types/status-line/git-utils.d.ts +22 -0
- package/dist/types/status-line/host.d.ts +129 -0
- package/dist/types/status-line/index.d.ts +6 -0
- package/dist/types/status-line/loop.d.ts +18 -0
- package/dist/types/status-line/metrics.d.ts +21 -0
- package/dist/types/status-line/presets.d.ts +3 -0
- package/dist/types/status-line/schema.d.ts +15 -0
- package/dist/types/status-line/segments.d.ts +5 -0
- package/dist/types/status-line/separators.d.ts +3 -0
- package/dist/types/status-line/types.d.ts +236 -0
- package/dist/types/stdin-buffer.d.ts +4 -0
- package/dist/types/theme/color.d.ts +24 -0
- package/dist/types/theme/defaults/index.d.ts +9489 -0
- package/dist/types/theme/index.d.ts +4 -0
- package/dist/types/theme/loader.d.ts +23 -0
- package/dist/types/theme/mermaid-cache.d.ts +26 -0
- package/dist/types/theme/schema-validation.d.ts +3 -0
- package/dist/types/theme/schema.d.ts +25 -0
- package/dist/types/theme/session-color.d.ts +43 -0
- package/dist/types/theme/shimmer.d.ts +44 -0
- package/dist/types/theme/symbols.d.ts +34 -0
- package/dist/types/theme/theme-class.d.ts +299 -0
- package/dist/types/theme/theme.d.ts +111 -0
- package/dist/types/theme/tui-adapters.d.ts +30 -0
- package/dist/types/thinking.d.ts +165 -0
- package/dist/types/tools/agent-tree.d.ts +36 -0
- package/dist/types/tools/ask.d.ts +67 -0
- package/dist/types/tools/ast-edit.d.ts +53 -0
- package/dist/types/tools/ast-grep.d.ts +52 -0
- package/dist/types/tools/autoresearch.d.ts +156 -0
- package/dist/types/tools/bash-interactive.d.ts +28 -0
- package/dist/types/tools/bash.d.ts +103 -0
- package/dist/types/tools/conflict-detect.d.ts +43 -0
- package/dist/types/tools/debug.d.ts +60 -0
- package/dist/types/tools/default-renderer.d.ts +24 -0
- package/dist/types/tools/edit.d.ts +158 -0
- package/dist/types/tools/eval-format/code-mode-declarations.d.ts +5 -0
- package/dist/types/tools/eval-format/index.d.ts +5 -0
- package/dist/types/tools/eval-format/javascript.d.ts +2 -0
- package/dist/types/tools/eval-format/python.d.ts +2 -0
- package/dist/types/tools/eval.d.ts +94 -0
- package/dist/types/tools/fetch.d.ts +42 -0
- package/dist/types/tools/gh-format.d.ts +8 -0
- package/dist/types/tools/github.d.ts +144 -0
- package/dist/types/tools/glob.d.ts +44 -0
- package/dist/types/tools/goal.d.ts +42 -0
- package/dist/types/tools/grep.d.ts +64 -0
- package/dist/types/tools/grouped-file-output.d.ts +71 -0
- package/dist/types/tools/hashline-format.d.ts +28 -0
- package/dist/types/tools/hub.d.ts +340 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/json-tree.d.ts +59 -0
- package/dist/types/tools/line-ranges.d.ts +29 -0
- package/dist/types/tools/list-limit.d.ts +15 -0
- package/dist/types/tools/lsp.d.ts +72 -0
- package/dist/types/tools/match-line-format.d.ts +11 -0
- package/dist/types/tools/mcp.d.ts +81 -0
- package/dist/types/tools/memory.d.ts +67 -0
- package/dist/types/tools/output-meta.d.ts +151 -0
- package/dist/types/tools/read.d.ts +139 -0
- package/dist/types/tools/renderer.d.ts +98 -0
- package/dist/types/tools/report-tool-issue.d.ts +8 -0
- package/dist/types/tools/resolve.d.ts +47 -0
- package/dist/types/tools/streaming-output.d.ts +282 -0
- package/dist/types/tools/subprocess.d.ts +24 -0
- package/dist/types/tools/task-repair-args.d.ts +53 -0
- package/dist/types/tools/task-yield-assembly.d.ts +20 -0
- package/dist/types/tools/task.d.ts +425 -0
- package/dist/types/tools/terminal-output.d.ts +8 -0
- package/dist/types/tools/think.d.ts +13 -0
- package/dist/types/tools/todo.d.ts +118 -0
- package/dist/types/tools/tool-errors.d.ts +7 -0
- package/dist/types/tools/vibe.d.ts +120 -0
- package/dist/types/tools/web-search.d.ts +195 -0
- package/dist/types/tools/write.d.ts +76 -0
- package/dist/types/tools/xd-url.d.ts +13 -0
- package/dist/types/tools/xdev.d.ts +52 -0
- package/dist/types/tui.d.ts +18 -0
- package/dist/types/utils.d.ts +2 -0
- package/package.json +37 -3
- package/src/app-keybindings.ts +760 -0
- package/src/apps/autoresearch-dashboard.ts +500 -0
- package/src/apps/autoresearch-data.ts +64 -0
- package/src/apps/cleanse-board.ts +341 -0
- package/src/apps/cleanse-picker.ts +57 -0
- package/src/apps/debug/log-formatting.ts +53 -0
- package/src/apps/debug/log-viewer.ts +868 -0
- package/src/apps/debug/protocol-probe.ts +267 -0
- package/src/apps/debug/raw-sse-buffer.ts +449 -0
- package/src/apps/debug/raw-sse.ts +282 -0
- package/src/apps/debug/terminal-info.ts +115 -0
- package/src/apps/debug/viewer-frame.ts +174 -0
- package/src/apps/git/avatar.ts +52 -0
- package/src/apps/git/colors.ts +109 -0
- package/src/apps/git/diff-pane.ts +1512 -0
- package/src/apps/git/git-tui.ts +889 -0
- package/src/apps/git/sidebar.ts +1204 -0
- package/src/apps/git/state.ts +113 -0
- package/src/apps/if-bench-board.ts +324 -0
- package/src/apps/live-visualizer.ts +238 -0
- package/src/apps/ps-data.ts +116 -0
- package/src/apps/ps-top.ts +422 -0
- package/src/apps/session-picker.ts +95 -0
- package/src/apps/setup-model-picker.ts +21 -0
- package/src/apps/standalone-picker.ts +111 -0
- package/src/autocomplete.ts +9 -13
- package/src/chat/advisor-message.ts +175 -0
- package/src/chat/assistant-message.ts +1214 -0
- package/src/chat/background-tan-message.ts +35 -0
- package/src/chat/bash-execution.ts +394 -0
- package/src/chat/cache-invalidation-marker.ts +94 -0
- package/src/chat/chat-transcript-builder.ts +593 -0
- package/src/chat/collab-prompt-message.ts +34 -0
- package/src/chat/compaction-summary-message.ts +261 -0
- package/src/chat/custom-message.ts +23 -0
- package/src/chat/display-preferences.ts +24 -0
- package/src/chat/eval-execution.ts +172 -0
- package/src/chat/execution-shared.ts +113 -0
- package/src/chat/extension-types.ts +46 -0
- package/src/chat/hook-message.ts +20 -0
- package/src/chat/image-loading.ts +122 -0
- package/src/chat/late-diagnostics-message.ts +92 -0
- package/src/chat/messages.ts +305 -0
- package/src/chat/reaction.ts +65 -0
- package/src/chat/read-target.ts +7 -0
- package/src/chat/read-tool-group.ts +873 -0
- package/src/chat/served-model-marker.ts +91 -0
- package/src/chat/skill-message.ts +220 -0
- package/src/chat/skill-title-input.ts +41 -0
- package/src/chat/stripped-tool-calls-placeholder.ts +35 -0
- package/src/chat/thinking-display.ts +312 -0
- package/src/chat/todo-reminder.ts +33 -0
- package/src/chat/tool-execution.ts +1395 -0
- package/src/chat/transcript-browser.ts +268 -0
- package/src/chat/transcript-entry.ts +96 -0
- package/src/chat/transcript-outline.ts +260 -0
- package/src/chat/transcript-render-helpers.ts +315 -0
- package/src/chat/ttsr-notification.ts +123 -0
- package/src/chat/user-message.ts +287 -0
- package/src/chrome/chat-block.ts +110 -0
- package/src/chrome/collab-qrcode.ts +74 -0
- package/src/chrome/context-thresholds.ts +85 -0
- package/src/chrome/countdown-timer.ts +74 -0
- package/src/chrome/diff.ts +266 -0
- package/src/chrome/dynamic-border.ts +36 -0
- package/src/chrome/error-block.ts +63 -0
- package/src/chrome/form-theme.ts +10 -0
- package/src/chrome/format.ts +66 -0
- package/src/chrome/index.ts +21 -0
- package/src/chrome/keybinding-hints.ts +55 -0
- package/src/chrome/live-board.ts +123 -0
- package/src/chrome/local-date.ts +20 -0
- package/src/chrome/message-divider.ts +51 -0
- package/src/chrome/message-frame.ts +164 -0
- package/src/chrome/message-notice.ts +103 -0
- package/src/chrome/overlay-box.ts +301 -0
- package/src/chrome/qrcode.ts +539 -0
- package/src/chrome/segment-track.ts +86 -0
- package/src/chrome/select-list-mouse-routing.ts +11 -0
- package/src/chrome/selector-helpers.ts +119 -0
- package/src/chrome/shared.ts +27 -0
- package/src/chrome/streaming-panel.ts +72 -0
- package/src/chrome/tool-activity.ts +44 -0
- package/src/chrome/transcript-container.ts +902 -0
- package/src/chrome/transcript-status.ts +27 -0
- package/src/chrome/visual-truncate.ts +70 -0
- package/src/components/disclosure.ts +235 -0
- package/src/components/editor.ts +10 -12
- package/src/components/form.ts +566 -0
- package/src/components/image.ts +80 -53
- package/src/components/input.ts +6 -27
- package/src/components/key-value-list.ts +88 -0
- package/src/components/layout/geometry.ts +202 -0
- package/src/components/layout/row.ts +283 -0
- package/src/components/layout/split-pane.ts +349 -0
- package/src/components/layout/stack.ts +261 -0
- package/src/components/markdown.ts +16 -12
- package/src/components/menu-selection.ts +248 -0
- package/src/components/metric.ts +132 -0
- package/src/components/progress-bar.ts +140 -0
- package/src/components/scroll-view.ts +372 -70
- package/src/components/scroll-viewport.ts +154 -0
- package/src/components/section.ts +77 -0
- package/src/components/select-list.ts +238 -159
- package/src/components/settings-list.ts +103 -80
- package/src/components/table.ts +127 -0
- package/src/components/tree-view.ts +481 -0
- package/src/components/wizard-step.ts +229 -0
- package/src/deccara.ts +1 -3
- package/src/hotkeys-markdown.ts +100 -0
- package/src/index.ts +18 -0
- package/src/keybinding-matchers.ts +99 -0
- package/src/keys.ts +2 -2
- package/src/lang-from-path.ts +252 -0
- package/src/overlays/advisor-config.ts +761 -0
- package/src/overlays/agent-activity.ts +113 -0
- package/src/overlays/agent-hub-projection.ts +250 -0
- package/src/overlays/agent-hub-renderer.ts +281 -0
- package/src/overlays/agent-hub-types.ts +74 -0
- package/src/overlays/agent-hub.ts +1562 -0
- package/src/overlays/agent-transcript-viewer.ts +669 -0
- package/src/overlays/agents-hub.ts +1203 -0
- package/src/overlays/ask-dialog.ts +1202 -0
- package/src/overlays/bordered-loader.ts +41 -0
- package/src/overlays/btw-history-panel.ts +591 -0
- package/src/overlays/btw-history.ts +33 -0
- package/src/overlays/btw-panel.ts +167 -0
- package/src/overlays/cleanse-panel.ts +167 -0
- package/src/overlays/codex-reset-fireworks.ts +375 -0
- package/src/overlays/composer-shape-preview.ts +137 -0
- package/src/overlays/composer-shape-registry.ts +82 -0
- package/src/overlays/copy-selector.ts +618 -0
- package/src/overlays/copy-targets.ts +210 -0
- package/src/overlays/error-banner.ts +39 -0
- package/src/overlays/extensions/display-text.ts +39 -0
- package/src/overlays/extensions/extension-dashboard.ts +645 -0
- package/src/overlays/extensions/extension-list.ts +667 -0
- package/src/overlays/extensions/inspector-model.ts +484 -0
- package/src/overlays/extensions/inspector-panel.ts +669 -0
- package/src/overlays/extensions/live-tool-session.ts +67 -0
- package/src/overlays/extensions/mcp-runtime.ts +289 -0
- package/src/overlays/extensions/state-manager.ts +337 -0
- package/src/overlays/extensions/types.ts +208 -0
- package/src/overlays/history-search.ts +268 -0
- package/src/overlays/hook-editor.ts +272 -0
- package/src/overlays/hook-input.ts +84 -0
- package/src/overlays/hook-selector.ts +635 -0
- package/src/overlays/hub-frame.ts +262 -0
- package/src/overlays/login-dialog.ts +231 -0
- package/src/overlays/logout-account-selector.ts +115 -0
- package/src/overlays/mcp-add-wizard.ts +1436 -0
- package/src/overlays/model-browser.ts +1176 -0
- package/src/overlays/model-hub.ts +2279 -0
- package/src/overlays/model-picker.ts +285 -0
- package/src/overlays/model-selector.ts +107 -0
- package/src/overlays/move-overlay.ts +197 -0
- package/src/overlays/oauth-selector.ts +446 -0
- package/src/overlays/omfg-panel.ts +136 -0
- package/src/overlays/pause-screen.ts +198 -0
- package/src/overlays/plan-review-overlay.ts +1227 -0
- package/src/overlays/plan-save-overlay.ts +74 -0
- package/src/overlays/plan-toc.ts +139 -0
- package/src/overlays/plugin-selector.ts +97 -0
- package/src/overlays/plugin-settings.ts +839 -0
- package/src/overlays/queue-mode-selector.ts +55 -0
- package/src/overlays/reset-usage-selector.ts +170 -0
- package/src/overlays/rewind-selector.ts +499 -0
- package/src/overlays/running-subagent-badge.ts +19 -0
- package/src/overlays/session-account-selector.ts +68 -0
- package/src/overlays/session-info-overlay.ts +96 -0
- package/src/overlays/session-observer-registry.ts +289 -0
- package/src/overlays/session-selector.ts +1137 -0
- package/src/overlays/settings-defs.ts +315 -0
- package/src/overlays/settings-selector.ts +1415 -0
- package/src/overlays/show-images-selector.ts +44 -0
- package/src/overlays/snapcompact-shape-preview-doc.md +14 -0
- package/src/overlays/snapcompact-shape-preview.ts +192 -0
- package/src/overlays/theme-selector.ts +62 -0
- package/src/overlays/thinking-selector.ts +51 -0
- package/src/overlays/tiny-title-download-progress.ts +102 -0
- package/src/overlays/tree-selector.ts +1121 -0
- package/src/overlays/usage-dashboard.ts +629 -0
- package/src/overlays/usage-display.ts +45 -0
- package/src/overlays/usage-row.ts +118 -0
- package/src/prompt/attachment-chips.ts +201 -0
- package/src/prompt/composer-attachments.ts +280 -0
- package/src/prompt/composer-cache.ts +304 -0
- package/src/prompt/composer.ts +934 -0
- package/src/prompt/custom-editor.ts +1392 -0
- package/src/prompt/data/emojis.json +1 -0
- package/src/prompt/editor-top-gap.ts +28 -0
- package/src/prompt/emoji-autocomplete.ts +285 -0
- package/src/prompt/github-ref-autocomplete.ts +75 -0
- package/src/prompt/gradient-highlight.ts +101 -0
- package/src/prompt/image-format.ts +28 -0
- package/src/prompt/image-references.ts +102 -0
- package/src/prompt/interactive-context-helpers.ts +126 -0
- package/src/prompt/internal-url-autocomplete.ts +155 -0
- package/src/prompt/macos-spelling.ts +456 -0
- package/src/prompt/magic-keyword-boundary.ts +23 -0
- package/src/prompt/magic-keywords.ts +42 -0
- package/src/prompt/markdown-prose.ts +245 -0
- package/src/prompt/model-mention-autocomplete.ts +94 -0
- package/src/prompt/model-mention-syntax.ts +41 -0
- package/src/prompt/orchestrate.ts +26 -0
- package/src/prompt/prompt-action-autocomplete.ts +337 -0
- package/src/prompt/queue-input.ts +132 -0
- package/src/prompt/skill-tokens.ts +36 -0
- package/src/prompt/tips.txt +27 -0
- package/src/prompt/tools-markdown.ts +29 -0
- package/src/prompt/ultrathink.ts +26 -0
- package/src/prompt/usage-amounts.ts +99 -0
- package/src/prompt/video.ts +47 -0
- package/src/prompt/welcome.ts +605 -0
- package/src/prompt/workflow.ts +26 -0
- package/src/render/code-cell.ts +244 -0
- package/src/render/file-list.ts +58 -0
- package/src/render/hyperlink.ts +192 -0
- package/src/render/index.ts +17 -0
- package/src/render/output-block.ts +267 -0
- package/src/render/output-pane.ts +299 -0
- package/src/render/render-utils.ts +1182 -0
- package/src/render/sixel.ts +69 -0
- package/src/render/status-line.ts +55 -0
- package/src/render/tool-card.ts +272 -0
- package/src/render/tree-list.ts +188 -0
- package/src/render/types.ts +19 -0
- package/src/render/utils.ts +109 -0
- package/src/render/width-aware-text.ts +60 -0
- package/src/setup/lazy.ts +17 -0
- package/src/setup/scenes/composer.ts +127 -0
- package/src/setup/scenes/glyph.ts +120 -0
- package/src/setup/scenes/model.ts +138 -0
- package/src/setup/scenes/outro.ts +24 -0
- package/src/setup/scenes/providers.ts +107 -0
- package/src/setup/scenes/sign-in.ts +373 -0
- package/src/setup/scenes/splash.ts +192 -0
- package/src/setup/scenes/theme.ts +343 -0
- package/src/setup/scenes/types.ts +111 -0
- package/src/setup/scenes/web-search.ts +165 -0
- package/src/setup/setup-version.ts +11 -0
- package/src/setup/startup-splash.ts +107 -0
- package/src/setup/wizard-overlay.ts +319 -0
- package/src/setup/wizard.ts +101 -0
- package/src/status-line/component.ts +3003 -0
- package/src/status-line/context-usage.ts +688 -0
- package/src/status-line/footer.ts +323 -0
- package/src/status-line/git-utils.ts +42 -0
- package/src/status-line/host.ts +97 -0
- package/src/status-line/index.ts +6 -0
- package/src/status-line/loop.ts +28 -0
- package/src/status-line/metrics.ts +94 -0
- package/src/status-line/presets.ts +107 -0
- package/src/status-line/schema.ts +57 -0
- package/src/status-line/segments.ts +934 -0
- package/src/status-line/separators.ts +55 -0
- package/src/status-line/types.ts +227 -0
- package/src/stdin-buffer.ts +4 -2
- package/src/theme/color.ts +95 -0
- package/src/theme/dark.json +95 -0
- package/src/theme/defaults/alabaster.json +93 -0
- package/src/theme/defaults/amethyst.json +96 -0
- package/src/theme/defaults/anthracite.json +93 -0
- package/src/theme/defaults/basalt.json +91 -0
- package/src/theme/defaults/birch.json +95 -0
- package/src/theme/defaults/dark-abyss.json +91 -0
- package/src/theme/defaults/dark-arctic.json +104 -0
- package/src/theme/defaults/dark-aurora.json +95 -0
- package/src/theme/defaults/dark-catppuccin.json +107 -0
- package/src/theme/defaults/dark-cavern.json +91 -0
- package/src/theme/defaults/dark-celestial.json +106 -0
- package/src/theme/defaults/dark-copper.json +95 -0
- package/src/theme/defaults/dark-cosmos.json +90 -0
- package/src/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/theme/defaults/dark-dracula.json +98 -0
- package/src/theme/defaults/dark-eclipse.json +91 -0
- package/src/theme/defaults/dark-ember.json +95 -0
- package/src/theme/defaults/dark-equinox.json +90 -0
- package/src/theme/defaults/dark-forest.json +96 -0
- package/src/theme/defaults/dark-github.json +105 -0
- package/src/theme/defaults/dark-gruvbox.json +112 -0
- package/src/theme/defaults/dark-lavender.json +95 -0
- package/src/theme/defaults/dark-lunar.json +89 -0
- package/src/theme/defaults/dark-midnight.json +95 -0
- package/src/theme/defaults/dark-monochrome.json +94 -0
- package/src/theme/defaults/dark-monokai.json +98 -0
- package/src/theme/defaults/dark-nebula.json +90 -0
- package/src/theme/defaults/dark-nord.json +98 -0
- package/src/theme/defaults/dark-ocean.json +101 -0
- package/src/theme/defaults/dark-one.json +100 -0
- package/src/theme/defaults/dark-poimandres.json +115 -0
- package/src/theme/defaults/dark-rainforest.json +91 -0
- package/src/theme/defaults/dark-reef.json +91 -0
- package/src/theme/defaults/dark-retro.json +92 -0
- package/src/theme/defaults/dark-rose-pine.json +96 -0
- package/src/theme/defaults/dark-sakura.json +95 -0
- package/src/theme/defaults/dark-slate.json +95 -0
- package/src/theme/defaults/dark-solarized.json +97 -0
- package/src/theme/defaults/dark-solstice.json +90 -0
- package/src/theme/defaults/dark-starfall.json +91 -0
- package/src/theme/defaults/dark-sunset.json +99 -0
- package/src/theme/defaults/dark-swamp.json +90 -0
- package/src/theme/defaults/dark-synthwave.json +103 -0
- package/src/theme/defaults/dark-taiga.json +91 -0
- package/src/theme/defaults/dark-terminal.json +95 -0
- package/src/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/theme/defaults/dark-tundra.json +91 -0
- package/src/theme/defaults/dark-twilight.json +91 -0
- package/src/theme/defaults/dark-volcanic.json +91 -0
- package/src/theme/defaults/graphite.json +92 -0
- package/src/theme/defaults/index.ts +201 -0
- package/src/theme/defaults/light-arctic.json +107 -0
- package/src/theme/defaults/light-aurora-day.json +91 -0
- package/src/theme/defaults/light-canyon.json +91 -0
- package/src/theme/defaults/light-catppuccin.json +106 -0
- package/src/theme/defaults/light-cirrus.json +90 -0
- package/src/theme/defaults/light-coral.json +95 -0
- package/src/theme/defaults/light-cyberpunk.json +96 -0
- package/src/theme/defaults/light-dawn.json +90 -0
- package/src/theme/defaults/light-dunes.json +91 -0
- package/src/theme/defaults/light-eucalyptus.json +95 -0
- package/src/theme/defaults/light-forest.json +100 -0
- package/src/theme/defaults/light-frost.json +95 -0
- package/src/theme/defaults/light-github.json +115 -0
- package/src/theme/defaults/light-glacier.json +91 -0
- package/src/theme/defaults/light-gruvbox.json +108 -0
- package/src/theme/defaults/light-haze.json +90 -0
- package/src/theme/defaults/light-honeycomb.json +95 -0
- package/src/theme/defaults/light-lagoon.json +91 -0
- package/src/theme/defaults/light-lavender.json +95 -0
- package/src/theme/defaults/light-meadow.json +91 -0
- package/src/theme/defaults/light-mint.json +95 -0
- package/src/theme/defaults/light-monochrome.json +101 -0
- package/src/theme/defaults/light-ocean.json +99 -0
- package/src/theme/defaults/light-one.json +99 -0
- package/src/theme/defaults/light-opal.json +91 -0
- package/src/theme/defaults/light-orchard.json +91 -0
- package/src/theme/defaults/light-paper.json +95 -0
- package/src/theme/defaults/light-poimandres.json +115 -0
- package/src/theme/defaults/light-prism.json +90 -0
- package/src/theme/defaults/light-retro.json +98 -0
- package/src/theme/defaults/light-sand.json +95 -0
- package/src/theme/defaults/light-savanna.json +91 -0
- package/src/theme/defaults/light-solarized.json +102 -0
- package/src/theme/defaults/light-soleil.json +90 -0
- package/src/theme/defaults/light-sunset.json +99 -0
- package/src/theme/defaults/light-synthwave.json +98 -0
- package/src/theme/defaults/light-tokyo-night.json +111 -0
- package/src/theme/defaults/light-wetland.json +91 -0
- package/src/theme/defaults/light-zenith.json +89 -0
- package/src/theme/defaults/limestone.json +94 -0
- package/src/theme/defaults/mahogany.json +97 -0
- package/src/theme/defaults/marble.json +93 -0
- package/src/theme/defaults/obsidian.json +91 -0
- package/src/theme/defaults/onyx.json +91 -0
- package/src/theme/defaults/pearl.json +93 -0
- package/src/theme/defaults/porcelain.json +91 -0
- package/src/theme/defaults/quartz.json +96 -0
- package/src/theme/defaults/sandstone.json +95 -0
- package/src/theme/defaults/titanium.json +90 -0
- package/src/theme/index.ts +5 -0
- package/src/theme/light.json +93 -0
- package/src/theme/loader.ts +200 -0
- package/src/theme/mermaid-cache.ts +92 -0
- package/src/theme/schema-validation.ts +119 -0
- package/src/theme/schema.ts +168 -0
- package/src/theme/session-color.ts +253 -0
- package/src/theme/shimmer.ts +307 -0
- package/src/theme/symbols.ts +1433 -0
- package/src/theme/theme-class.ts +787 -0
- package/src/theme/theme-schema.json +463 -0
- package/src/theme/theme.ts +810 -0
- package/src/theme/tui-adapters.ts +339 -0
- package/src/thinking.ts +380 -0
- package/src/tools/agent-tree.ts +128 -0
- package/src/tools/ask.ts +482 -0
- package/src/tools/ast-edit.ts +210 -0
- package/src/tools/ast-grep.ts +171 -0
- package/src/tools/autoresearch.ts +287 -0
- package/src/tools/bash-interactive.ts +295 -0
- package/src/tools/bash.ts +468 -0
- package/src/tools/conflict-detect.ts +77 -0
- package/src/tools/debug.ts +167 -0
- package/src/tools/default-renderer.ts +172 -0
- package/src/tools/edit.ts +1258 -0
- package/src/tools/eval-format/code-mode-declarations.ts +61 -0
- package/src/tools/eval-format/index.ts +16 -0
- package/src/tools/eval-format/javascript.ts +952 -0
- package/src/tools/eval-format/python.ts +544 -0
- package/src/tools/eval.ts +835 -0
- package/src/tools/fetch.ts +226 -0
- package/src/tools/gh-format.ts +18 -0
- package/src/tools/github.ts +686 -0
- package/src/tools/glob.ts +213 -0
- package/src/tools/goal.ts +153 -0
- package/src/tools/grep.ts +385 -0
- package/src/tools/grouped-file-output.ts +211 -0
- package/src/tools/hashline-format.ts +59 -0
- package/src/tools/hub.ts +1488 -0
- package/src/tools/index.ts +71 -0
- package/src/tools/json-tree.ts +388 -0
- package/src/tools/line-ranges.ts +98 -0
- package/src/tools/list-limit.ts +43 -0
- package/src/tools/lsp.ts +702 -0
- package/src/tools/match-line-format.ts +20 -0
- package/src/tools/mcp.ts +309 -0
- package/src/tools/memory.ts +220 -0
- package/src/tools/output-meta.ts +367 -0
- package/src/tools/read.ts +628 -0
- package/src/tools/renderer.ts +107 -0
- package/src/tools/report-tool-issue.ts +13 -0
- package/src/tools/resolve.ts +139 -0
- package/src/tools/streaming-output.ts +1576 -0
- package/src/tools/subprocess.ts +39 -0
- package/src/tools/task-repair-args.ts +118 -0
- package/src/tools/task-yield-assembly.ts +147 -0
- package/src/tools/task.ts +2110 -0
- package/src/tools/terminal-output.ts +153 -0
- package/src/tools/think.ts +28 -0
- package/src/tools/todo.ts +580 -0
- package/src/tools/tool-errors.ts +15 -0
- package/src/tools/vibe.ts +420 -0
- package/src/tools/web-search.ts +409 -0
- package/src/tools/write.ts +511 -0
- package/src/tools/xd-url.ts +28 -0
- package/src/tools/xdev.ts +201 -0
- package/src/tui.ts +70 -8
- package/src/utils.ts +8 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { MouseRoutable, SgrMouseEvent } from "../mouse.js";
|
|
2
|
+
import { type Component, type Focusable } from "../tui.js";
|
|
3
|
+
import { Input } from "./input.js";
|
|
4
|
+
import { type SelectItem, SelectList, type SelectListTheme } from "./select-list.js";
|
|
5
|
+
/** Styling hooks used by the reusable form-field layout. */
|
|
6
|
+
export interface FormFieldTheme {
|
|
7
|
+
label(text: string): string;
|
|
8
|
+
description(text: string): string;
|
|
9
|
+
error(text: string): string;
|
|
10
|
+
hint(text: string): string;
|
|
11
|
+
}
|
|
12
|
+
/** Interactive control accepted by {@link FormField}. */
|
|
13
|
+
export type FormControl = Component & Partial<Focusable> & {
|
|
14
|
+
handleInput(data: string): void;
|
|
15
|
+
pasteText?(text: string): void;
|
|
16
|
+
};
|
|
17
|
+
/** Declarative label, help, preview, and footer content surrounding a control. */
|
|
18
|
+
export interface FormFieldOptions {
|
|
19
|
+
theme: FormFieldTheme;
|
|
20
|
+
label?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
details?: readonly Component[];
|
|
23
|
+
previewLabel?: string;
|
|
24
|
+
preview?: Component;
|
|
25
|
+
hint?: string;
|
|
26
|
+
/** Read-only rows rendered after the control and before the interaction hint. */
|
|
27
|
+
summary?: readonly Component[];
|
|
28
|
+
footer?: Component;
|
|
29
|
+
/** Insert a blank row before the field's label/description/detail content. */
|
|
30
|
+
leadingSpace?: boolean;
|
|
31
|
+
spaceBeforeControl?: boolean;
|
|
32
|
+
spaceAfterControl?: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Layout and focus adapter for one form control. The control remains a normal
|
|
36
|
+
* component; this class only owns shared form chrome and local mouse routing.
|
|
37
|
+
*/
|
|
38
|
+
export declare class FormField implements Component, Focusable, MouseRoutable {
|
|
39
|
+
#private;
|
|
40
|
+
readonly control: FormControl;
|
|
41
|
+
constructor(control: FormControl, options: FormFieldOptions);
|
|
42
|
+
get focused(): boolean;
|
|
43
|
+
get debugChildren(): readonly Component[];
|
|
44
|
+
set focused(value: boolean);
|
|
45
|
+
setUseTerminalCursor(useTerminalCursor: boolean): void;
|
|
46
|
+
/** Show a bounded, single-line validation or submission error. */
|
|
47
|
+
setError(message: string | undefined): void;
|
|
48
|
+
handleInput(data: string): void;
|
|
49
|
+
pasteText(text: string): void;
|
|
50
|
+
/** Translate a field-local row to its control-local row, excluding all surrounding chrome. */
|
|
51
|
+
controlLineAt(line: number): number | undefined;
|
|
52
|
+
routeMouse(event: SgrMouseEvent, line: number, col: number): void;
|
|
53
|
+
render(width: number): readonly string[];
|
|
54
|
+
setIgnoreTight(ignore: boolean): this;
|
|
55
|
+
invalidate(): void;
|
|
56
|
+
dispose(): void;
|
|
57
|
+
}
|
|
58
|
+
/** Behavior used when a single-line field is submitted with an empty value. */
|
|
59
|
+
export type EmptyInputBehavior = "submit" | "cancel" | "reject";
|
|
60
|
+
/** Options for a validated, cancellable single-line field. */
|
|
61
|
+
export interface TextFormFieldOptions extends Omit<FormFieldOptions, "preview"> {
|
|
62
|
+
initialValue?: string;
|
|
63
|
+
secret?: boolean;
|
|
64
|
+
prompt?: string;
|
|
65
|
+
empty?: EmptyInputBehavior;
|
|
66
|
+
emptyError?: string;
|
|
67
|
+
validate?: (value: string) => string | undefined;
|
|
68
|
+
onSubmit(value: string): void | Promise<void>;
|
|
69
|
+
onCancel(): void;
|
|
70
|
+
/** Schedule a frame after an asynchronous submit settles. */
|
|
71
|
+
requestRender?: () => void;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Single-line form field backed by {@link Input}. Validation and thrown submit
|
|
75
|
+
* errors stay visible on the field; empty-value policy is explicit per caller.
|
|
76
|
+
*/
|
|
77
|
+
export declare class TextFormField extends FormField {
|
|
78
|
+
#private;
|
|
79
|
+
readonly input: Input;
|
|
80
|
+
constructor(options: TextFormFieldOptions);
|
|
81
|
+
getValue(): string;
|
|
82
|
+
setValue(value: string): void;
|
|
83
|
+
/** Validate and submit the current value according to the configured empty policy. */
|
|
84
|
+
submit(): void;
|
|
85
|
+
}
|
|
86
|
+
/** Options for a SelectList-backed form field with optional live preview. */
|
|
87
|
+
export interface SelectFormFieldOptions extends Omit<FormFieldOptions, "preview"> {
|
|
88
|
+
items: ReadonlyArray<SelectItem>;
|
|
89
|
+
currentValue?: string;
|
|
90
|
+
maxVisible?: number;
|
|
91
|
+
selectTheme: SelectListTheme;
|
|
92
|
+
getPreview?: () => string;
|
|
93
|
+
onSelectionChange?: (value: string) => void | Promise<void>;
|
|
94
|
+
onSubmit(value: string): void | Promise<void>;
|
|
95
|
+
onCancel(): void;
|
|
96
|
+
/** Schedule a frame after an asynchronous preview update settles. */
|
|
97
|
+
requestRender?: () => void;
|
|
98
|
+
}
|
|
99
|
+
/** SelectList field that centralizes selection, cancellation, preview refresh, and mouse routing. */
|
|
100
|
+
export declare class SelectFormField extends FormField {
|
|
101
|
+
#private;
|
|
102
|
+
readonly selectList: SelectList;
|
|
103
|
+
constructor(options: SelectFormFieldOptions);
|
|
104
|
+
invalidate(): void;
|
|
105
|
+
}
|
|
106
|
+
/** Options for focus and input dispatch across several composable fields. */
|
|
107
|
+
export interface FormOptions {
|
|
108
|
+
fields: readonly FormField[];
|
|
109
|
+
onCancel(): void;
|
|
110
|
+
isCancel?: (data: string) => boolean;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Small form controller for multi-field surfaces. It owns focus traversal,
|
|
114
|
+
* field-local mouse routing, and cancellation while fields retain submit policy.
|
|
115
|
+
*/
|
|
116
|
+
export declare class Form implements Component, Focusable, MouseRoutable {
|
|
117
|
+
#private;
|
|
118
|
+
constructor(options: FormOptions);
|
|
119
|
+
get focused(): boolean;
|
|
120
|
+
get debugChildren(): readonly Component[];
|
|
121
|
+
set focused(value: boolean);
|
|
122
|
+
setUseTerminalCursor(useTerminalCursor: boolean): void;
|
|
123
|
+
handleInput(data: string): void;
|
|
124
|
+
pasteText(text: string): void;
|
|
125
|
+
routeMouse(event: SgrMouseEvent, line: number, col: number): void;
|
|
126
|
+
render(width: number): readonly string[];
|
|
127
|
+
setIgnoreTight(ignore: boolean): this;
|
|
128
|
+
invalidate(): void;
|
|
129
|
+
dispose(): void;
|
|
130
|
+
}
|
|
@@ -22,10 +22,10 @@ export declare const DEFAULT_MAX_INLINE_IMAGES = 8;
|
|
|
22
22
|
* Bounds how many inline images render as live terminal graphics at once.
|
|
23
23
|
*
|
|
24
24
|
* Terminal graphics protocols — Kitty especially — keep every transmitted image
|
|
25
|
-
* in a per-
|
|
26
|
-
*
|
|
27
|
-
* shows many images piles up placements plus store memory and
|
|
28
|
-
* scrollback.
|
|
25
|
+
* in a per-screen store and re-draw placements as content scrolls; placements
|
|
26
|
+
* that left the viewport survive text-clear escapes (`CSI 2 J`). Unbounded, a
|
|
27
|
+
* session that shows many images piles up placements plus store memory and
|
|
28
|
+
* leaves ghosts in scrollback.
|
|
29
29
|
*
|
|
30
30
|
* The budget keeps the most recent `cap` images live and demotes older ones to
|
|
31
31
|
* their text fallback. Demotion needs a full redraw (so off-screen rows are
|
|
@@ -115,9 +115,9 @@ export declare class ImageBudget {
|
|
|
115
115
|
takeResetPurgeIds(): readonly number[];
|
|
116
116
|
/** Image ids to delete from the terminal this frame; clears the pending set. */
|
|
117
117
|
takePurgeIds(): readonly number[];
|
|
118
|
-
/** All image ids believed to be loaded in
|
|
118
|
+
/** All image ids believed to be loaded in any screen's store; clears tracking. */
|
|
119
119
|
takeAllTransmittedIds(): readonly number[];
|
|
120
|
-
/** Whether `imageId`'s data still needs to be transmitted to the
|
|
120
|
+
/** Whether `imageId`'s data still needs to be transmitted to the surface the in-flight pass paints. */
|
|
121
121
|
shouldTransmit(imageId: number): boolean;
|
|
122
122
|
/**
|
|
123
123
|
* Record a direct-placement image's source pixel geometry so the renderer
|
|
@@ -170,11 +170,12 @@ export declare class ImageBudget {
|
|
|
170
170
|
lastEpoch: number;
|
|
171
171
|
}>;
|
|
172
172
|
/**
|
|
173
|
-
* Queue a one-time transmit for `imageId
|
|
174
|
-
*
|
|
173
|
+
* Queue a one-time transmit for `imageId` on the surface the in-flight pass
|
|
174
|
+
* paints. No-op if that surface already holds the data, so a repeated call
|
|
175
|
+
* (e.g. a width-change re-render) never re-sends it.
|
|
175
176
|
*/
|
|
176
177
|
enqueueTransmit(imageId: number, sequence: string): void;
|
|
177
|
-
/** Whether
|
|
178
|
+
/** Whether the in-flight pass's surface has image data queued but not yet written. */
|
|
178
179
|
hasPendingTransmits(): boolean;
|
|
179
180
|
/**
|
|
180
181
|
* True when the budget has nothing in flight on either surface: no live images
|
|
@@ -183,15 +184,16 @@ export declare class ImageBudget {
|
|
|
183
184
|
* observe pass only then — a partial tree walk would under-count display order.
|
|
184
185
|
*/
|
|
185
186
|
get quiescent(): boolean;
|
|
186
|
-
/** Transmit sequences to write before this frame's placements; clears
|
|
187
|
+
/** Transmit sequences to write before this frame's placements on its surface; clears that queue. */
|
|
187
188
|
takeTransmits(): readonly string[];
|
|
188
189
|
/**
|
|
189
|
-
* Drop transmit tracking so every still-live image
|
|
190
|
-
* (`a=t`) on the next render. Recovers when the terminal
|
|
191
|
-
* transmit — e.g. Ghostty discarding graphics sent during
|
|
192
|
-
* window — where a placement-only replay can never bind a
|
|
193
|
-
* Pair with a component invalidate + forced repaint so
|
|
194
|
-
* re-emit together; keeps no base64 in budget state
|
|
190
|
+
* Drop the normal screen's transmit tracking so every still-live image
|
|
191
|
+
* re-enqueues its data (`a=t`) on the next render. Recovers when the terminal
|
|
192
|
+
* dropped the original transmit — e.g. Ghostty discarding graphics sent during
|
|
193
|
+
* its post-startup window — where a placement-only replay can never bind a
|
|
194
|
+
* Unicode placeholder. Pair with a component invalidate + forced repaint so
|
|
195
|
+
* the data and placement re-emit together; keeps no base64 in budget state
|
|
196
|
+
* (the transmit-once design).
|
|
195
197
|
*/
|
|
196
198
|
forgetTransmitted(): void;
|
|
197
199
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Component } from "../tui.js";
|
|
2
|
+
/** One label/value entry in a {@link KeyValueList}. */
|
|
3
|
+
export interface KeyValueRow {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly value: string;
|
|
6
|
+
readonly labelStyle?: (text: string) => string;
|
|
7
|
+
readonly valueStyle?: (text: string) => string;
|
|
8
|
+
}
|
|
9
|
+
/** Explicit sizing and wrapping policy for a key/value list. */
|
|
10
|
+
export interface KeyValueListOptions {
|
|
11
|
+
readonly indent?: string;
|
|
12
|
+
readonly labelWidth: number;
|
|
13
|
+
readonly gap?: string;
|
|
14
|
+
readonly minValueWidth?: number;
|
|
15
|
+
readonly labelOverflow?: "allow" | "truncate";
|
|
16
|
+
}
|
|
17
|
+
/** A bounded ANSI-aware label/value list with replaceable rows and aligned wrapped continuations. */
|
|
18
|
+
export declare class KeyValueList implements Component {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(rows: readonly KeyValueRow[], options: KeyValueListOptions);
|
|
21
|
+
setRows(rows: readonly KeyValueRow[]): boolean;
|
|
22
|
+
invalidate(): void;
|
|
23
|
+
render(width: number): readonly string[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { MouseRoutable } from "../../mouse.js";
|
|
2
|
+
import type { Component } from "../../tui.js";
|
|
3
|
+
/** Alignment within space allocated by a layout component. */
|
|
4
|
+
export type LayoutAlignment = "start" | "center" | "end";
|
|
5
|
+
/** Insets reserved inside a layout child's allocated rectangle. */
|
|
6
|
+
export interface LayoutInsets {
|
|
7
|
+
top?: number;
|
|
8
|
+
right?: number;
|
|
9
|
+
bottom?: number;
|
|
10
|
+
left?: number;
|
|
11
|
+
}
|
|
12
|
+
/** Insets normalized to finite, non-negative terminal-cell counts. */
|
|
13
|
+
export interface NormalizedLayoutInsets {
|
|
14
|
+
top: number;
|
|
15
|
+
right: number;
|
|
16
|
+
bottom: number;
|
|
17
|
+
left: number;
|
|
18
|
+
}
|
|
19
|
+
/** Rectangle in coordinates local to a layout component. */
|
|
20
|
+
export interface LayoutRect {
|
|
21
|
+
row: number;
|
|
22
|
+
col: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
}
|
|
26
|
+
/** Lazy layout child, evaluated only when the child is visible. */
|
|
27
|
+
export type LayoutRenderer = (width: number, height: number | undefined) => readonly string[];
|
|
28
|
+
/** A concrete component or a lazy renderer used as a layout child. */
|
|
29
|
+
export type LayoutContent = Component | LayoutRenderer;
|
|
30
|
+
/** Static text or a late-bound layout decoration, useful for theme-colored rules. */
|
|
31
|
+
export type LayoutDecoration = string | (() => string);
|
|
32
|
+
/** A component whose parent may assign a local row budget before rendering. */
|
|
33
|
+
export interface HeightConstrainedComponent extends Component {
|
|
34
|
+
setHeight(height: number | undefined): void;
|
|
35
|
+
}
|
|
36
|
+
/** One fixed or growing constraint consumed by {@link allocateLayoutSpace}. */
|
|
37
|
+
export interface LayoutAllocation {
|
|
38
|
+
fixed?: number;
|
|
39
|
+
grow?: number;
|
|
40
|
+
min?: number;
|
|
41
|
+
max?: number;
|
|
42
|
+
}
|
|
43
|
+
/** Clamp an external size to a finite, non-negative integer cell count. */
|
|
44
|
+
export declare function layoutSize(value: number | undefined, fallback?: number): number;
|
|
45
|
+
/** Normalize an optional external size while preserving `undefined`. */
|
|
46
|
+
export declare function optionalLayoutSize(value: number | undefined): number | undefined;
|
|
47
|
+
/** Clamp a proportional layout input to a finite, non-negative number. */
|
|
48
|
+
export declare function layoutRatio(value: number | undefined, fallback: number): number;
|
|
49
|
+
/** Resolve static or late-bound layout decoration text. */
|
|
50
|
+
export declare function layoutDecorationText(decoration: LayoutDecoration | undefined): string;
|
|
51
|
+
/**
|
|
52
|
+
* Allocate bounded integer cells across fixed and growing children. When the
|
|
53
|
+
* minimums cannot fit, later children collapse first so output stays bounded.
|
|
54
|
+
*/
|
|
55
|
+
export declare function allocateLayoutSpace(items: readonly LayoutAllocation[], available: number): number[];
|
|
56
|
+
/** Normalize every inset to a finite, non-negative integer cell count. */
|
|
57
|
+
export declare function layoutInsets(insets: LayoutInsets | undefined): NormalizedLayoutInsets;
|
|
58
|
+
/** Compare optional inset objects by their normalized terminal geometry. */
|
|
59
|
+
export declare function equalLayoutInsets(left: LayoutInsets | undefined, right: LayoutInsets | undefined): boolean;
|
|
60
|
+
/** Offset content within spare cells according to an alignment. */
|
|
61
|
+
export declare function layoutAlignmentOffset(space: number, alignment: LayoutAlignment): number;
|
|
62
|
+
/** Narrow a concrete-or-lazy child to a concrete component. */
|
|
63
|
+
export declare function isLayoutComponent(content: LayoutContent): content is Component;
|
|
64
|
+
/** Narrow a layout child to a component accepting a row budget. */
|
|
65
|
+
export declare function isHeightConstrainedComponent(content: LayoutContent): content is HeightConstrainedComponent;
|
|
66
|
+
/** Narrow a layout child to a mouse-routable component. */
|
|
67
|
+
export declare function isLayoutMouseRoutable(content: LayoutContent): content is Component & MouseRoutable;
|
|
68
|
+
/** Return concrete children once each, preserving their first layout order. */
|
|
69
|
+
export declare function uniqueLayoutComponents(contents: readonly LayoutContent[]): readonly Component[];
|
|
70
|
+
/** Fit one ANSI-styled row to an exact terminal-cell width. */
|
|
71
|
+
export declare function fitLayoutLine(line: string, width: number): string;
|
|
72
|
+
/** Render a concrete or lazy child with an optional local height budget. */
|
|
73
|
+
export declare function renderLayoutContent(content: LayoutContent, width: number, height: number | undefined): readonly string[];
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { MouseRoutable, SgrMouseEvent } from "../../mouse.js";
|
|
2
|
+
import type { Component } from "../../tui.js";
|
|
3
|
+
import { type LayoutAlignment, type LayoutContent, type LayoutDecoration, type LayoutInsets, type LayoutRect } from "./geometry.js";
|
|
4
|
+
/** One child and its horizontal sizing and alignment constraints. */
|
|
5
|
+
export interface RowChild {
|
|
6
|
+
content: LayoutContent;
|
|
7
|
+
width?: number;
|
|
8
|
+
grow?: number;
|
|
9
|
+
minWidth?: number;
|
|
10
|
+
maxWidth?: number;
|
|
11
|
+
padding?: LayoutInsets;
|
|
12
|
+
align?: LayoutAlignment;
|
|
13
|
+
}
|
|
14
|
+
/** Construction options for {@link Row}. */
|
|
15
|
+
export interface RowOptions {
|
|
16
|
+
children: readonly RowChild[];
|
|
17
|
+
height?: number;
|
|
18
|
+
gap?: LayoutDecoration;
|
|
19
|
+
prefix?: LayoutDecoration;
|
|
20
|
+
suffix?: LayoutDecoration;
|
|
21
|
+
align?: LayoutAlignment;
|
|
22
|
+
}
|
|
23
|
+
/** A child hit translated into that child's local coordinates. */
|
|
24
|
+
export interface RowHit {
|
|
25
|
+
index: number;
|
|
26
|
+
content: LayoutContent;
|
|
27
|
+
line: number;
|
|
28
|
+
col: number;
|
|
29
|
+
rect: LayoutRect;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Horizontal component layout with fixed/proportional slots, exact row budgets,
|
|
33
|
+
* ANSI-aware clipping, alignment, and local mouse-coordinate translation.
|
|
34
|
+
*/
|
|
35
|
+
export declare class Row implements Component, MouseRoutable {
|
|
36
|
+
#private;
|
|
37
|
+
constructor(options: RowOptions);
|
|
38
|
+
/** Concrete component children exposed to the debug tree. */
|
|
39
|
+
get debugChildren(): readonly Component[];
|
|
40
|
+
/** Last-rendered content rectangle for `index`, excluding its padding. */
|
|
41
|
+
childRect(index: number): LayoutRect | undefined;
|
|
42
|
+
/** Replace the row's children without recreating the layout component. */
|
|
43
|
+
setChildren(children: readonly RowChild[]): void;
|
|
44
|
+
/** Set the exact rendered row count, or clear it to use natural height. */
|
|
45
|
+
setHeight(height: number | undefined): void;
|
|
46
|
+
/** Update outer and inter-child decorations. */
|
|
47
|
+
setDecorations(prefix: LayoutDecoration | undefined, gap: LayoutDecoration | undefined, suffix: LayoutDecoration | undefined): void;
|
|
48
|
+
setIgnoreTight(ignore: boolean): this;
|
|
49
|
+
invalidate(): void;
|
|
50
|
+
dispose(): void;
|
|
51
|
+
/** Translate a row-local point into a child's local coordinates. */
|
|
52
|
+
locate(line: number, col: number): RowHit | undefined;
|
|
53
|
+
routeMouse(event: SgrMouseEvent, line: number, col: number): void;
|
|
54
|
+
render(width: number): readonly string[];
|
|
55
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { MouseRoutable, SgrMouseEvent } from "../../mouse.js";
|
|
2
|
+
import type { Component } from "../../tui.js";
|
|
3
|
+
import { type LayoutAlignment, type LayoutContent, type LayoutDecoration, type LayoutRect } from "./geometry.js";
|
|
4
|
+
/** Pane selected when a split collapses below its width constraints. */
|
|
5
|
+
export type PaneSide = "left" | "right";
|
|
6
|
+
/** Fixed or proportional sizing constraints for the left pane. */
|
|
7
|
+
export interface SplitPaneSize {
|
|
8
|
+
fixed?: number;
|
|
9
|
+
ratio?: number;
|
|
10
|
+
min?: number;
|
|
11
|
+
max?: number;
|
|
12
|
+
}
|
|
13
|
+
/** Construction options for {@link SplitPane}. */
|
|
14
|
+
export interface SplitPaneOptions {
|
|
15
|
+
left: LayoutContent;
|
|
16
|
+
right: LayoutContent;
|
|
17
|
+
leftSize?: SplitPaneSize;
|
|
18
|
+
rightMinWidth?: number;
|
|
19
|
+
splitAt?: number;
|
|
20
|
+
narrowPane?: PaneSide;
|
|
21
|
+
height?: number;
|
|
22
|
+
prefix?: LayoutDecoration;
|
|
23
|
+
divider?: LayoutDecoration;
|
|
24
|
+
suffix?: LayoutDecoration;
|
|
25
|
+
align?: LayoutAlignment;
|
|
26
|
+
}
|
|
27
|
+
/** Resolved pane mode and local rectangles for a width. */
|
|
28
|
+
export interface SplitPaneGeometry {
|
|
29
|
+
mode: "split" | "narrow";
|
|
30
|
+
left?: LayoutRect;
|
|
31
|
+
right?: LayoutRect;
|
|
32
|
+
dividerCol?: number;
|
|
33
|
+
}
|
|
34
|
+
/** A pane hit translated into the pane child's local coordinates. */
|
|
35
|
+
export interface SplitPaneHit {
|
|
36
|
+
pane: PaneSide;
|
|
37
|
+
content: LayoutContent;
|
|
38
|
+
line: number;
|
|
39
|
+
col: number;
|
|
40
|
+
rect: LayoutRect;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Adaptive two-pane layout over {@link Row}. It owns width bounds, an optional
|
|
44
|
+
* narrow fallback, exact height budgets, and pane-local mouse translation.
|
|
45
|
+
*/
|
|
46
|
+
export declare class SplitPane implements Component, MouseRoutable {
|
|
47
|
+
#private;
|
|
48
|
+
constructor(options: SplitPaneOptions);
|
|
49
|
+
/** Concrete pane children exposed to the debug tree. */
|
|
50
|
+
get debugChildren(): readonly Component[];
|
|
51
|
+
/** Mode used by the last render. */
|
|
52
|
+
get mode(): "split" | "narrow";
|
|
53
|
+
/** Left-pane content width from the last render. */
|
|
54
|
+
get leftWidth(): number;
|
|
55
|
+
/** Right-pane content width from the last render. */
|
|
56
|
+
get rightWidth(): number;
|
|
57
|
+
/** Column where the divider begins in the last split render. */
|
|
58
|
+
get dividerCol(): number | undefined;
|
|
59
|
+
/** Set the exact pane row budget, or clear it to use natural height. */
|
|
60
|
+
setHeight(height: number | undefined): void;
|
|
61
|
+
/** Change which pane is shown in narrow mode; `undefined` disables collapse. */
|
|
62
|
+
setNarrowPane(pane: PaneSide | undefined): void;
|
|
63
|
+
/** Update fixed/proportional left-pane constraints. */
|
|
64
|
+
setLeftSize(size: SplitPaneSize): void;
|
|
65
|
+
/** Update the minimum width at which both panes may be shown. */
|
|
66
|
+
setSplitAt(width: number): void;
|
|
67
|
+
/** Update the minimum content width reserved for the right pane. */
|
|
68
|
+
setRightMinWidth(width: number): void;
|
|
69
|
+
/** Update outer and divider decorations. */
|
|
70
|
+
setDecorations(prefix: LayoutDecoration | undefined, divider: LayoutDecoration | undefined, suffix: LayoutDecoration | undefined): void;
|
|
71
|
+
/** Resolve split/narrow geometry without rendering either pane. */
|
|
72
|
+
measure(width: number): SplitPaneGeometry;
|
|
73
|
+
/** Translate a split-local point into pane-local coordinates. */
|
|
74
|
+
locate(line: number, col: number): SplitPaneHit | undefined;
|
|
75
|
+
routeMouse(event: SgrMouseEvent, line: number, col: number): void;
|
|
76
|
+
setIgnoreTight(ignore: boolean): this;
|
|
77
|
+
invalidate(): void;
|
|
78
|
+
dispose(): void;
|
|
79
|
+
render(width: number): readonly string[];
|
|
80
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { MouseRoutable, SgrMouseEvent } from "../../mouse.js";
|
|
2
|
+
import type { Component } from "../../tui.js";
|
|
3
|
+
import { type LayoutAlignment, type LayoutContent, type LayoutInsets, type LayoutRect } from "./geometry.js";
|
|
4
|
+
/** One child and its vertical row-budget constraints. */
|
|
5
|
+
export interface StackChild {
|
|
6
|
+
content: LayoutContent;
|
|
7
|
+
height?: number;
|
|
8
|
+
grow?: number;
|
|
9
|
+
minHeight?: number;
|
|
10
|
+
maxHeight?: number;
|
|
11
|
+
padding?: LayoutInsets;
|
|
12
|
+
align?: LayoutAlignment;
|
|
13
|
+
}
|
|
14
|
+
/** Construction options for {@link Stack}. */
|
|
15
|
+
export interface StackOptions {
|
|
16
|
+
children: readonly StackChild[];
|
|
17
|
+
height?: number;
|
|
18
|
+
align?: LayoutAlignment;
|
|
19
|
+
}
|
|
20
|
+
/** A stack hit translated into the child's local coordinates. */
|
|
21
|
+
export interface StackHit {
|
|
22
|
+
index: number;
|
|
23
|
+
content: LayoutContent;
|
|
24
|
+
line: number;
|
|
25
|
+
col: number;
|
|
26
|
+
rect: LayoutRect;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Vertical component layout with fixed and growing regions, exact height
|
|
30
|
+
* budgets, ANSI-aware clipping, padding, and local mouse translation.
|
|
31
|
+
*/
|
|
32
|
+
export declare class Stack implements Component, MouseRoutable {
|
|
33
|
+
#private;
|
|
34
|
+
constructor(options: StackOptions);
|
|
35
|
+
/** Concrete component children exposed to the debug tree. */
|
|
36
|
+
get debugChildren(): readonly Component[];
|
|
37
|
+
/** Last-rendered content rectangle for `index`, excluding its padding. */
|
|
38
|
+
childRect(index: number): LayoutRect | undefined;
|
|
39
|
+
/** Replace the stack's children without recreating the layout component. */
|
|
40
|
+
setChildren(children: readonly StackChild[]): void;
|
|
41
|
+
/** Set the exact total row budget, or clear it to use natural height. */
|
|
42
|
+
setHeight(height: number | undefined): void;
|
|
43
|
+
setIgnoreTight(ignore: boolean): this;
|
|
44
|
+
invalidate(): void;
|
|
45
|
+
dispose(): void;
|
|
46
|
+
/** Translate a stack-local point into a child's local coordinates. */
|
|
47
|
+
locate(line: number, col: number): StackHit | undefined;
|
|
48
|
+
routeMouse(event: SgrMouseEvent, line: number, col: number): void;
|
|
49
|
+
render(width: number): readonly string[];
|
|
50
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/** Describes how a menu identifies, searches, disables, and confirms its items. */
|
|
2
|
+
export interface MenuSelectionAdapter<T> {
|
|
3
|
+
/** Stable identity used to retain selection while data or filtering changes. */
|
|
4
|
+
getKey: (item: T) => string;
|
|
5
|
+
/** Searchable text used by the default fuzzy filter. */
|
|
6
|
+
getSearchText: (item: T) => string;
|
|
7
|
+
/** Disabled items remain visible but are skipped by navigation and cannot activate. */
|
|
8
|
+
isDisabled?: (item: T) => boolean;
|
|
9
|
+
/** Items returning true require two activation requests without an intervening state change. */
|
|
10
|
+
requiresConfirmation?: (item: T) => boolean;
|
|
11
|
+
/** Optional domain-specific filtering/ranking. */
|
|
12
|
+
filter?: (items: readonly T[], query: string) => readonly T[];
|
|
13
|
+
}
|
|
14
|
+
/** Result of requesting activation of the current menu item. */
|
|
15
|
+
export type MenuActivation<T> = {
|
|
16
|
+
kind: "empty";
|
|
17
|
+
} | {
|
|
18
|
+
kind: "disabled";
|
|
19
|
+
item: T;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "pending";
|
|
22
|
+
item: T;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "confirmed";
|
|
25
|
+
item: T;
|
|
26
|
+
};
|
|
27
|
+
/** A viewport over variable-height items. */
|
|
28
|
+
export interface MenuWindow {
|
|
29
|
+
startIndex: number;
|
|
30
|
+
endIndex: number;
|
|
31
|
+
/** Number of visual rows before startIndex, for scrollbar positioning. */
|
|
32
|
+
rowOffset: number;
|
|
33
|
+
/** Total visual rows across every item. */
|
|
34
|
+
totalRows: number;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Pick a selection-centered, contiguous window whose visual rows fit `rowBudget`.
|
|
38
|
+
* A selected item taller than the budget is retained and clipped by the renderer.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getMenuWindow(rowCounts: readonly number[], selectedIndex: number, rowBudget: number): MenuWindow;
|
|
41
|
+
/**
|
|
42
|
+
* Controlled menu data, filtering, selection, disabled-row navigation, and
|
|
43
|
+
* confirmation state. Renderers remain domain-owned and consume `visibleItems`.
|
|
44
|
+
*/
|
|
45
|
+
export declare class MenuSelection<T> {
|
|
46
|
+
#private;
|
|
47
|
+
readonly adapter: MenuSelectionAdapter<T>;
|
|
48
|
+
constructor(items: readonly T[], adapter: MenuSelectionAdapter<T>, initialKey?: string);
|
|
49
|
+
get items(): readonly T[];
|
|
50
|
+
get visibleItems(): readonly T[];
|
|
51
|
+
get query(): string;
|
|
52
|
+
get selectedIndex(): number;
|
|
53
|
+
get selectedItem(): T | undefined;
|
|
54
|
+
get selectedKey(): string | undefined;
|
|
55
|
+
get pendingKey(): string | undefined;
|
|
56
|
+
isDisabled(item: T): boolean;
|
|
57
|
+
isPending(item: T): boolean;
|
|
58
|
+
/** Replace controlled data, retaining the selected key when it remains visible. */
|
|
59
|
+
setItems(items: readonly T[], selectedKey?: string | undefined): boolean;
|
|
60
|
+
/** Set the query and retain the selected key when it survives filtering. */
|
|
61
|
+
setQuery(query: string, retainSelection?: boolean): boolean;
|
|
62
|
+
/** Select a visible row, coercing disabled rows to the nearest enabled row. */
|
|
63
|
+
setSelectedIndex(index: number, direction?: -1 | 1): boolean;
|
|
64
|
+
setSelectedKey(key: string): boolean;
|
|
65
|
+
/** Move by item count, optionally wrapping at list edges. */
|
|
66
|
+
move(delta: number, wrap?: boolean): boolean;
|
|
67
|
+
moveToBoundary(boundary: "first" | "last"): boolean;
|
|
68
|
+
/** Clear a pending confirmation. Returns true only when one was cleared. */
|
|
69
|
+
cancelConfirmation(): boolean;
|
|
70
|
+
requestActivation(index?: number): MenuActivation<T>;
|
|
71
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Component } from "../tui.js";
|
|
2
|
+
/** One preformatted metric. Domain-specific number, cost, and quota policy stays with the caller. */
|
|
3
|
+
export interface MetricSpec {
|
|
4
|
+
/** Undefined omits the metric; an empty string and zero-like strings remain observable values. */
|
|
5
|
+
readonly value: string | undefined;
|
|
6
|
+
/** Optional icon or label placed before the value. */
|
|
7
|
+
readonly leading?: string;
|
|
8
|
+
/** Separator between `leading` and `value`. */
|
|
9
|
+
readonly separator?: string;
|
|
10
|
+
/** Higher-priority metrics survive first when a row uses `drop` overflow. */
|
|
11
|
+
readonly priority?: number;
|
|
12
|
+
/** Render-time styling for the complete metric. */
|
|
13
|
+
readonly style?: (text: string) => string;
|
|
14
|
+
}
|
|
15
|
+
/** Width behavior for an inline metric row. */
|
|
16
|
+
export type MetricOverflow = "allow" | "drop" | "truncate" | "wrap";
|
|
17
|
+
/** Presentation options shared by {@link formatMetricRow} and {@link MetricRow}. */
|
|
18
|
+
export interface MetricRowOptions {
|
|
19
|
+
readonly separator?: string;
|
|
20
|
+
readonly overflow?: MetricOverflow;
|
|
21
|
+
readonly maxWidth?: number;
|
|
22
|
+
readonly paddingX?: number;
|
|
23
|
+
readonly paddingY?: number;
|
|
24
|
+
readonly style?: (text: string) => string;
|
|
25
|
+
}
|
|
26
|
+
/** Format one metric without imposing domain-specific value policy. */
|
|
27
|
+
export declare function formatMetric(metric: MetricSpec): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Join metrics in declaration order. `drop` removes the lowest-priority metric
|
|
30
|
+
* first (rightmost on ties); `truncate` clips the complete row. `wrap` is
|
|
31
|
+
* applied by {@link MetricRow}, where the component owns the available width.
|
|
32
|
+
*/
|
|
33
|
+
export declare function formatMetricRow(metrics: readonly MetricSpec[], options?: MetricRowOptions): string;
|
|
34
|
+
/**
|
|
35
|
+
* Component form of an inline metric row. It delegates ANSI-aware wrapping,
|
|
36
|
+
* padding, theme invalidation, and stable unchanged-render arrays to {@link Text}.
|
|
37
|
+
*/
|
|
38
|
+
export declare class MetricRow implements Component {
|
|
39
|
+
#private;
|
|
40
|
+
constructor(metrics: readonly MetricSpec[], options?: MetricRowOptions);
|
|
41
|
+
setMetrics(metrics: readonly MetricSpec[]): boolean;
|
|
42
|
+
invalidate(): void;
|
|
43
|
+
render(width: number): readonly string[];
|
|
44
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Component } from "../tui.js";
|
|
2
|
+
/** Explicit glyph and styling policy for a progress bar. */
|
|
3
|
+
export interface ProgressBarStyle {
|
|
4
|
+
readonly filled: string;
|
|
5
|
+
readonly empty: string;
|
|
6
|
+
readonly indeterminate?: string;
|
|
7
|
+
readonly styleFilled?: (text: string) => string;
|
|
8
|
+
readonly styleEmpty?: (text: string) => string;
|
|
9
|
+
readonly styleIndeterminate?: (text: string) => string;
|
|
10
|
+
readonly styleBar?: (text: string) => string;
|
|
11
|
+
}
|
|
12
|
+
/** Layout and labeling policy for a progress bar. */
|
|
13
|
+
export interface ProgressBarOptions {
|
|
14
|
+
readonly min?: number;
|
|
15
|
+
readonly max?: number;
|
|
16
|
+
readonly minWidth?: number;
|
|
17
|
+
readonly maxWidth?: number;
|
|
18
|
+
readonly prefix?: string;
|
|
19
|
+
readonly suffix?: string;
|
|
20
|
+
readonly showPercentage?: boolean;
|
|
21
|
+
readonly percentageSeparator?: string;
|
|
22
|
+
readonly formatPercentage?: (fraction: number) => string;
|
|
23
|
+
readonly style: ProgressBarStyle;
|
|
24
|
+
}
|
|
25
|
+
/** Normalize a progress value to a clamped fraction, preserving undefined as indeterminate. */
|
|
26
|
+
export declare function progressFraction(value: number | undefined, min?: number, max?: number): number | undefined;
|
|
27
|
+
/** Render a single progress bar line; `width` is the inner bar width before frame and percentage chrome. */
|
|
28
|
+
export declare function renderProgressBar(value: number | undefined, width: number, options: ProgressBarOptions): string;
|
|
29
|
+
/** Mutable progress component whose `render(width)` bounds the complete framed and labeled line to `width`. */
|
|
30
|
+
export declare class ProgressBar implements Component {
|
|
31
|
+
#private;
|
|
32
|
+
constructor(value: number | undefined, options: ProgressBarOptions);
|
|
33
|
+
setValue(value: number | undefined): boolean;
|
|
34
|
+
invalidate(): void;
|
|
35
|
+
render(width: number): readonly string[];
|
|
36
|
+
}
|