@compilr-dev/cli 0.4.0 → 0.5.1
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 +254 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +134 -4
- package/dist/agent.js +345 -166
- package/dist/anchors/index.d.ts +9 -0
- package/dist/anchors/index.js +9 -0
- package/dist/anchors/project-anchors.d.ts +79 -0
- package/dist/anchors/project-anchors.js +202 -0
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands/index.d.ts +2 -1
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.d.ts +13 -0
- package/dist/commands-v2/handlers/context.js +533 -0
- package/dist/commands-v2/handlers/core.d.ts +14 -0
- package/dist/commands-v2/handlers/core.js +290 -0
- package/dist/commands-v2/handlers/debug.d.ts +11 -0
- package/dist/commands-v2/handlers/debug.js +177 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +25 -0
- package/dist/commands-v2/handlers/index.js +63 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.d.ts +22 -0
- package/dist/commands-v2/handlers/project.js +1035 -0
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +17 -0
- package/dist/commands-v2/handlers/settings.js +417 -0
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +14 -0
- package/dist/commands-v2/index.js +18 -0
- package/dist/commands-v2/registry.d.ts +52 -0
- package/dist/commands-v2/registry.js +114 -0
- package/dist/commands-v2/types.d.ts +153 -0
- package/dist/commands-v2/types.js +7 -0
- package/dist/commands.js +123 -7
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +615 -179
- package/dist/input-handlers/index.d.ts +7 -0
- package/dist/input-handlers/index.js +7 -0
- package/dist/input-handlers/memory-handler.d.ts +26 -0
- package/dist/input-handlers/memory-handler.js +69 -0
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.d.ts +63 -0
- package/dist/repl-helpers.js +319 -0
- package/dist/repl-v2.d.ts +554 -0
- package/dist/repl-v2.js +3286 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +156 -13
- package/dist/settings/index.js +377 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +114 -0
- package/dist/settings/paths.js +270 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -58
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +35 -75
- package/dist/themes/colors.js +3 -1
- package/dist/themes/registry.d.ts +5 -36
- package/dist/themes/registry.js +11 -95
- package/dist/themes/types.d.ts +3 -38
- package/dist/themes/types.js +2 -2
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +31 -0
- package/dist/tools/anchor-tools.js +255 -0
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +56 -0
- package/dist/tools/backlog-wrappers.js +353 -0
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +2 -2
- package/dist/tools/db-tools.d.ts +12 -0
- package/dist/tools/db-tools.js +14 -0
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +43 -0
- package/dist/tools/document-db.js +220 -0
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +34 -0
- package/dist/tools/project-db.js +39 -0
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +135 -0
- package/dist/tools/workitem-db.js +730 -0
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +238 -38
- package/dist/ui/ask-user-overlay.d.ts +2 -2
- package/dist/ui/ask-user-overlay.js +443 -535
- package/dist/ui/ask-user-simple-overlay.d.ts +2 -2
- package/dist/ui/ask-user-simple-overlay.js +182 -209
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +26 -0
- package/dist/ui/base/index.js +33 -0
- package/dist/ui/base/inline-overlay-utils.d.ts +217 -0
- package/dist/ui/base/inline-overlay-utils.js +320 -0
- package/dist/ui/base/inline-overlay.d.ts +159 -0
- package/dist/ui/base/inline-overlay.js +257 -0
- package/dist/ui/base/key-utils.d.ts +15 -0
- package/dist/ui/base/key-utils.js +30 -0
- package/dist/ui/base/overlay-base-v2.d.ts +203 -0
- package/dist/ui/base/overlay-base-v2.js +260 -0
- package/dist/ui/base/overlay-base.d.ts +156 -0
- package/dist/ui/base/overlay-base.js +238 -0
- package/dist/ui/base/overlay-lifecycle.d.ts +65 -0
- package/dist/ui/base/overlay-lifecycle.js +159 -0
- package/dist/ui/base/overlay-types.d.ts +185 -0
- package/dist/ui/base/overlay-types.js +7 -0
- package/dist/ui/base/render-utils.d.ts +27 -0
- package/dist/ui/base/render-utils.js +36 -0
- package/dist/ui/base/screen-stack.d.ts +148 -0
- package/dist/ui/base/screen-stack.js +184 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +118 -0
- package/dist/ui/base/tabbed-list-overlay-v2.js +335 -0
- package/dist/ui/base/tabbed-list-overlay.d.ts +153 -0
- package/dist/ui/base/tabbed-list-overlay.js +369 -0
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.d.ts +75 -4
- package/dist/ui/conversation.js +376 -165
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.d.ts +1 -1
- package/dist/ui/ephemeral.js +4 -10
- package/dist/ui/features/index.d.ts +34 -0
- package/dist/ui/features/index.js +34 -0
- package/dist/ui/features/input-feature.d.ts +85 -0
- package/dist/ui/features/input-feature.js +238 -0
- package/dist/ui/features/list-feature.d.ts +155 -0
- package/dist/ui/features/list-feature.js +244 -0
- package/dist/ui/features/pagination-feature.d.ts +154 -0
- package/dist/ui/features/pagination-feature.js +238 -0
- package/dist/ui/features/search-feature.d.ts +148 -0
- package/dist/ui/features/search-feature.js +185 -0
- package/dist/ui/features/tab-feature.d.ts +194 -0
- package/dist/ui/features/tab-feature.js +307 -0
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +181 -7
- package/dist/ui/footer.js +523 -74
- package/dist/ui/guardrail-overlay.d.ts +29 -0
- package/dist/ui/guardrail-overlay.js +145 -0
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -3
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +135 -33
- package/dist/ui/input-prompt.js +728 -337
- package/dist/ui/iteration-limit-overlay.d.ts +2 -2
- package/dist/ui/iteration-limit-overlay.js +92 -128
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/keys-overlay.d.ts +1 -0
- package/dist/ui/keys-overlay.js +203 -141
- package/dist/ui/line-utils.d.ts +88 -0
- package/dist/ui/line-utils.js +150 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +157 -0
- package/dist/ui/live-region.js +379 -0
- package/dist/ui/mascot/expressions.d.ts +32 -0
- package/dist/ui/mascot/expressions.js +213 -0
- package/dist/ui/mascot/index.d.ts +8 -0
- package/dist/ui/mascot/index.js +8 -0
- package/dist/ui/mascot/renderer.d.ts +19 -0
- package/dist/ui/mascot/renderer.js +132 -0
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +814 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +749 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/arch-type-overlay-v2.js +240 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.d.ts +72 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +581 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/ask-user-simple-overlay-v2.js +204 -0
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +52 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +681 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.d.ts +33 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +439 -0
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +111 -0
- package/dist/ui/overlay/impl/config-overlay-v2.js +718 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +382 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +117 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +84 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +1112 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/guardrail-overlay-v2.js +114 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +57 -0
- package/dist/ui/overlay/impl/help-overlay-v2.js +287 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.d.ts +25 -0
- package/dist/ui/overlay/impl/init-setup-overlay-v2.js +97 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/iteration-limit-overlay-v2.js +105 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/keys-overlay-v2.js +248 -0
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/mascot-overlay-v2.js +138 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +93 -0
- package/dist/ui/overlay/impl/model-overlay-v2.js +1143 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.d.ts +46 -0
- package/dist/ui/overlay/impl/model-warning-overlay-v2.js +132 -0
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +108 -0
- package/dist/ui/overlay/impl/new-overlay-v2.js +1243 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +380 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +37 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +733 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.d.ts +42 -0
- package/dist/ui/overlay/impl/theme-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.d.ts +47 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +214 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +45 -0
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +212 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.d.ts +80 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +641 -0
- package/dist/ui/overlay/index.d.ts +52 -0
- package/dist/ui/overlay/index.js +54 -0
- package/dist/ui/overlay/key-utils.d.ts +6 -0
- package/dist/ui/overlay/key-utils.js +6 -0
- package/dist/ui/overlay/types.d.ts +140 -0
- package/dist/ui/overlay/types.js +22 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.d.ts +0 -4
- package/dist/ui/overlays.js +4 -460
- package/dist/ui/permission-overlay.d.ts +1 -1
- package/dist/ui/permission-overlay.js +189 -300
- package/dist/ui/providers/types.d.ts +178 -0
- package/dist/ui/providers/types.js +9 -0
- package/dist/ui/render-modes.d.ts +36 -0
- package/dist/ui/render-modes.js +44 -0
- package/dist/ui/startup-menu.d.ts +36 -0
- package/dist/ui/startup-menu.js +236 -0
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.d.ts +117 -0
- package/dist/ui/subagent-renderer.js +318 -0
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-codes.d.ts +94 -0
- package/dist/ui/terminal-codes.js +124 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +220 -0
- package/dist/ui/terminal-renderer.js +750 -0
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +331 -0
- package/dist/ui/terminal-ui.js +819 -0
- package/dist/ui/terminal.d.ts +20 -0
- package/dist/ui/terminal.js +72 -0
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +124 -38
- package/dist/ui/tool-formatters.d.ts +16 -0
- package/dist/ui/tool-formatters.js +1027 -0
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/debug-log.d.ts +28 -0
- package/dist/utils/debug-log.js +57 -0
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +39 -17
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.d.ts +56 -0
- package/dist/utils/path-safety.js +240 -0
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/dist/workflow/guided-mode-injector.d.ts +42 -0
- package/dist/workflow/guided-mode-injector.js +191 -0
- package/dist/workflow/index.d.ts +8 -0
- package/dist/workflow/index.js +8 -0
- package/dist/workflow/step-criteria.d.ts +62 -0
- package/dist/workflow/step-criteria.js +150 -0
- package/dist/workflow/step-tracker.d.ts +92 -0
- package/dist/workflow/step-tracker.js +141 -0
- package/package.json +32 -12
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -121
- package/dist/repl.js +0 -1878
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -501
- package/dist/ui/arch-type-overlay.d.ts +0 -20
- package/dist/ui/arch-type-overlay.js +0 -229
- package/dist/ui/backlog-overlay.d.ts +0 -17
- package/dist/ui/backlog-overlay.js +0 -786
- package/dist/ui/commands-overlay.d.ts +0 -11
- package/dist/ui/commands-overlay.js +0 -410
- package/dist/ui/config-overlay.d.ts +0 -34
- package/dist/ui/config-overlay.js +0 -977
- package/dist/ui/init-overlay.d.ts +0 -24
- package/dist/ui/init-overlay.js +0 -525
- package/dist/ui/input-prompt-v2.d.ts +0 -179
- package/dist/ui/input-prompt-v2.js +0 -991
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -171
- package/dist/ui/tools-overlay.d.ts +0 -26
- package/dist/ui/tools-overlay.js +0 -278
- package/dist/ui/tutorial-overlay.d.ts +0 -10
- package/dist/ui/tutorial-overlay.js +0 -936
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screen Stack
|
|
3
|
+
*
|
|
4
|
+
* Navigation stack for multi-screen overlays.
|
|
5
|
+
* Enables proper "back" behavior where Esc goes to previous screen.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```typescript
|
|
9
|
+
* class MyOverlay extends BaseOverlay<MyState, MyResult> {
|
|
10
|
+
* private screenStack = new ScreenStack();
|
|
11
|
+
*
|
|
12
|
+
* constructor() {
|
|
13
|
+
* super(initialState);
|
|
14
|
+
* this.screenStack.push(new ListScreen());
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* handleKey(data: Buffer): void {
|
|
18
|
+
* if (isEscape(data)) {
|
|
19
|
+
* if (this.screenStack.size() > 1) {
|
|
20
|
+
* this.screenStack.pop();
|
|
21
|
+
* this.update();
|
|
22
|
+
* } else {
|
|
23
|
+
* this.close(null);
|
|
24
|
+
* }
|
|
25
|
+
* return;
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* const result = this.screenStack.current()?.handleKey(data);
|
|
29
|
+
* this.handleScreenResult(result);
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* render(): string[] {
|
|
33
|
+
* return [
|
|
34
|
+
* ...this.renderHeader('My Overlay'),
|
|
35
|
+
* ...this.screenStack.current()?.render() ?? [],
|
|
36
|
+
* ...this.renderFooter(this.getCurrentHints())
|
|
37
|
+
* ];
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
// =============================================================================
|
|
43
|
+
// BaseScreen Abstract Class
|
|
44
|
+
// =============================================================================
|
|
45
|
+
/**
|
|
46
|
+
* Abstract base class for screens.
|
|
47
|
+
* Extend this to create screens for multi-screen overlays.
|
|
48
|
+
*/
|
|
49
|
+
export class BaseScreen {
|
|
50
|
+
/**
|
|
51
|
+
* Optional: Return minimum height for stable rendering.
|
|
52
|
+
* Override to prevent visual jitter when screen content varies.
|
|
53
|
+
* @returns Minimum number of lines this screen should occupy
|
|
54
|
+
*/
|
|
55
|
+
getMinHeight() {
|
|
56
|
+
return 0; // Default: no minimum, use overlay's minHeight
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// =============================================================================
|
|
60
|
+
// ScreenStack Class
|
|
61
|
+
// =============================================================================
|
|
62
|
+
/**
|
|
63
|
+
* Stack-based navigation for multi-screen overlays.
|
|
64
|
+
*
|
|
65
|
+
* The stack maintains a history of screens, allowing:
|
|
66
|
+
* - push() to navigate forward to a new screen
|
|
67
|
+
* - pop() to go back to the previous screen
|
|
68
|
+
* - current() to get the active screen
|
|
69
|
+
*/
|
|
70
|
+
export class ScreenStack {
|
|
71
|
+
screens = [];
|
|
72
|
+
/**
|
|
73
|
+
* Push a new screen onto the stack.
|
|
74
|
+
* Calls onExit() on current screen and onEnter() on new screen.
|
|
75
|
+
*
|
|
76
|
+
* @param screen - Screen to push
|
|
77
|
+
*/
|
|
78
|
+
push(screen) {
|
|
79
|
+
// Call exit hook on current screen
|
|
80
|
+
this.current()?.onExit?.();
|
|
81
|
+
// Push new screen
|
|
82
|
+
this.screens.push(screen);
|
|
83
|
+
// Call enter hook on new screen
|
|
84
|
+
screen.onEnter?.();
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Pop the current screen and return to the previous one.
|
|
88
|
+
* Calls onExit() on popped screen and onEnter() on revealed screen.
|
|
89
|
+
*
|
|
90
|
+
* @returns The popped screen, or null if stack was empty
|
|
91
|
+
*/
|
|
92
|
+
pop() {
|
|
93
|
+
if (this.screens.length === 0) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
// Pop and call exit hook
|
|
97
|
+
const screen = this.screens.pop();
|
|
98
|
+
if (screen) {
|
|
99
|
+
screen.onExit?.();
|
|
100
|
+
}
|
|
101
|
+
// Call enter hook on now-current screen
|
|
102
|
+
this.current()?.onEnter?.();
|
|
103
|
+
return screen ?? null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get the current (topmost) screen.
|
|
107
|
+
*
|
|
108
|
+
* @returns Current screen, or undefined if stack is empty
|
|
109
|
+
*/
|
|
110
|
+
current() {
|
|
111
|
+
return this.screens[this.screens.length - 1];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get the number of screens in the stack.
|
|
115
|
+
*/
|
|
116
|
+
size() {
|
|
117
|
+
return this.screens.length;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if the stack is empty.
|
|
121
|
+
*/
|
|
122
|
+
isEmpty() {
|
|
123
|
+
return this.screens.length === 0;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if there's more than one screen (can go back).
|
|
127
|
+
*/
|
|
128
|
+
canGoBack() {
|
|
129
|
+
return this.screens.length > 1;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Clear all screens from the stack.
|
|
133
|
+
* Calls onExit() on each screen in reverse order.
|
|
134
|
+
*/
|
|
135
|
+
clear() {
|
|
136
|
+
while (this.screens.length > 0) {
|
|
137
|
+
this.pop();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Replace the current screen with a new one.
|
|
142
|
+
* Useful for "replace" navigation (no back).
|
|
143
|
+
*
|
|
144
|
+
* @param screen - Screen to replace with
|
|
145
|
+
*/
|
|
146
|
+
replace(screen) {
|
|
147
|
+
if (this.screens.length > 0) {
|
|
148
|
+
const current = this.screens.pop();
|
|
149
|
+
if (current) {
|
|
150
|
+
current.onExit?.();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
this.screens.push(screen);
|
|
154
|
+
screen.onEnter?.();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// =============================================================================
|
|
158
|
+
// Helper Types
|
|
159
|
+
// =============================================================================
|
|
160
|
+
/**
|
|
161
|
+
* Helper to create a ScreenResult for staying on the current screen.
|
|
162
|
+
*/
|
|
163
|
+
export function stay(render = true) {
|
|
164
|
+
return { action: 'stay', render };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Helper to create a ScreenResult for pushing a new screen.
|
|
168
|
+
*/
|
|
169
|
+
export function pushScreen(screen) {
|
|
170
|
+
return { action: 'push', screen };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Helper to create a ScreenResult for popping the current screen.
|
|
174
|
+
*/
|
|
175
|
+
export function popScreen() {
|
|
176
|
+
return { action: 'pop' };
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Helper to create a ScreenResult for closing the overlay.
|
|
180
|
+
* Result is optional for void result types.
|
|
181
|
+
*/
|
|
182
|
+
export function closeOverlay(result) {
|
|
183
|
+
return { action: 'close', result: result };
|
|
184
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tabbed List Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* A reusable base for overlays using the new Overlay interface.
|
|
5
|
+
* Provides tabs, pagination, search, and detail views.
|
|
6
|
+
*
|
|
7
|
+
* Key differences from TabbedListOverlay:
|
|
8
|
+
* - Extends BaseOverlayV2 (implements new Overlay interface)
|
|
9
|
+
* - handleKey returns OverlayAction instead of void
|
|
10
|
+
* - Works with TerminalUI's overlay management
|
|
11
|
+
* - Keeps ScreenStack internally for detail screen navigation
|
|
12
|
+
*/
|
|
13
|
+
import { BaseOverlayV2 } from './overlay-base-v2.js';
|
|
14
|
+
import { BaseScreen, ScreenStack } from './screen-stack.js';
|
|
15
|
+
import { type PaginationState } from '../features/pagination-feature.js';
|
|
16
|
+
import { type SearchState } from '../features/search-feature.js';
|
|
17
|
+
import type { TabDefinition, TabState } from './overlay-types.js';
|
|
18
|
+
import type { RenderContext, OverlayAction, KeyEvent } from '../overlay/index.js';
|
|
19
|
+
import type { ThemeStyleFunctions } from '../../themes/index.js';
|
|
20
|
+
/**
|
|
21
|
+
* Configuration for a TabbedListOverlayV2.
|
|
22
|
+
*/
|
|
23
|
+
export interface TabbedListConfigV2<TItem> {
|
|
24
|
+
/** Title shown in header */
|
|
25
|
+
title: string;
|
|
26
|
+
/** Tab definitions */
|
|
27
|
+
tabs: TabDefinition[];
|
|
28
|
+
/** All items (will be filtered by tab and search) */
|
|
29
|
+
items: TItem[];
|
|
30
|
+
/** Number of items per page (default: 12) */
|
|
31
|
+
pageSize?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Filter items by tab.
|
|
34
|
+
* Return true to include item in the current tab.
|
|
35
|
+
*/
|
|
36
|
+
filterByTab: (item: TItem, tabId: string) => boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Get searchable text from an item.
|
|
39
|
+
* Used for search filtering.
|
|
40
|
+
*/
|
|
41
|
+
getSearchText: (item: TItem) => string;
|
|
42
|
+
/**
|
|
43
|
+
* Render an item as a string line.
|
|
44
|
+
*/
|
|
45
|
+
renderItem: (item: TItem, isSelected: boolean, styles: ThemeStyleFunctions) => string;
|
|
46
|
+
/** Show count badge in header (default: true) */
|
|
47
|
+
showCount?: boolean;
|
|
48
|
+
/** Custom empty state message */
|
|
49
|
+
emptyMessage?: string;
|
|
50
|
+
/** Custom no-results message */
|
|
51
|
+
noResultsMessage?: string;
|
|
52
|
+
/** Custom footer hints */
|
|
53
|
+
footerHints?: (searchMode: boolean, activeTabId?: string) => string;
|
|
54
|
+
/**
|
|
55
|
+
* Render preview content for the selected item.
|
|
56
|
+
* Displayed between the list and footer.
|
|
57
|
+
*/
|
|
58
|
+
renderSelectedPreview?: (item: TItem, styles: ThemeStyleFunctions) => string[];
|
|
59
|
+
/**
|
|
60
|
+
* Render sub-header content below the tab bar.
|
|
61
|
+
* Useful for showing status info like API key status.
|
|
62
|
+
*/
|
|
63
|
+
renderSubHeader?: (tabId: string, styles: ThemeStyleFunctions) => string[];
|
|
64
|
+
/**
|
|
65
|
+
* Handle custom key presses before default handling.
|
|
66
|
+
* Return { handled: true, render: boolean } to consume the key.
|
|
67
|
+
* Return { handled: false } to let default handling proceed.
|
|
68
|
+
*/
|
|
69
|
+
handleCustomKey?: (key: Buffer, tabId: string) => {
|
|
70
|
+
handled: boolean;
|
|
71
|
+
render?: boolean;
|
|
72
|
+
pushScreen?: BaseScreen;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* State for TabbedListOverlayV2.
|
|
77
|
+
*/
|
|
78
|
+
export interface TabbedListStateV2<TItem> extends TabState, PaginationState, SearchState {
|
|
79
|
+
/** All items */
|
|
80
|
+
items: TItem[];
|
|
81
|
+
/** Filtered items (by tab and search) */
|
|
82
|
+
filteredItems: TItem[];
|
|
83
|
+
/** Whether search mode is active */
|
|
84
|
+
searchMode: boolean;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Abstract base class for tabbed list overlays using the new Overlay interface.
|
|
88
|
+
*/
|
|
89
|
+
export declare abstract class TabbedListOverlayV2<TItem, TResult = void> extends BaseOverlayV2<TabbedListStateV2<TItem>, TResult> {
|
|
90
|
+
abstract readonly type: 'fullscreen' | 'inline';
|
|
91
|
+
abstract readonly id: string;
|
|
92
|
+
protected readonly screenStack: ScreenStack;
|
|
93
|
+
protected readonly listConfig: TabbedListConfigV2<TItem>;
|
|
94
|
+
constructor(config: TabbedListConfigV2<TItem>);
|
|
95
|
+
/**
|
|
96
|
+
* Override to create a detail screen for an item.
|
|
97
|
+
* Return null to disable detail view.
|
|
98
|
+
*/
|
|
99
|
+
protected createDetailScreen(_item: TItem): BaseScreen | null;
|
|
100
|
+
/**
|
|
101
|
+
* Override to handle item selection.
|
|
102
|
+
* Return a result to close the overlay, or undefined to fall back to detail screen.
|
|
103
|
+
*/
|
|
104
|
+
protected onItemSelected(_item: TItem): TResult | undefined;
|
|
105
|
+
protected renderContent(_context: RenderContext): string[];
|
|
106
|
+
/**
|
|
107
|
+
* Override render to use the effective minHeight (max of overlay and current screen).
|
|
108
|
+
*/
|
|
109
|
+
render(context: RenderContext): {
|
|
110
|
+
lines: string[];
|
|
111
|
+
minHeight?: number;
|
|
112
|
+
};
|
|
113
|
+
handleKey(key: KeyEvent): OverlayAction<TResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Get the currently selected item.
|
|
116
|
+
*/
|
|
117
|
+
protected getSelectedItem(): TItem | undefined;
|
|
118
|
+
}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tabbed List Overlay V2
|
|
3
|
+
*
|
|
4
|
+
* A reusable base for overlays using the new Overlay interface.
|
|
5
|
+
* Provides tabs, pagination, search, and detail views.
|
|
6
|
+
*
|
|
7
|
+
* Key differences from TabbedListOverlay:
|
|
8
|
+
* - Extends BaseOverlayV2 (implements new Overlay interface)
|
|
9
|
+
* - handleKey returns OverlayAction instead of void
|
|
10
|
+
* - Works with TerminalUI's overlay management
|
|
11
|
+
* - Keeps ScreenStack internally for detail screen navigation
|
|
12
|
+
*/
|
|
13
|
+
// Terminal width is passed via getWidth callback
|
|
14
|
+
import { BaseOverlayV2 } from './overlay-base-v2.js';
|
|
15
|
+
import { BaseScreen, ScreenStack } from './screen-stack.js';
|
|
16
|
+
import { TabFeature } from '../features/tab-feature.js';
|
|
17
|
+
import { PaginationFeature } from '../features/pagination-feature.js';
|
|
18
|
+
import { SearchFeature } from '../features/search-feature.js';
|
|
19
|
+
import { isCtrlC, isClose, isEscape, isSlash, isEnter } from './key-utils.js';
|
|
20
|
+
import { renderBorder } from './render-utils.js';
|
|
21
|
+
// =============================================================================
|
|
22
|
+
// List Screen V2 (Main View)
|
|
23
|
+
// =============================================================================
|
|
24
|
+
/**
|
|
25
|
+
* The main list screen for TabbedListOverlayV2.
|
|
26
|
+
*/
|
|
27
|
+
class ListScreenV2 extends BaseScreen {
|
|
28
|
+
config;
|
|
29
|
+
state;
|
|
30
|
+
getStyles;
|
|
31
|
+
getWidth;
|
|
32
|
+
createDetailScreen;
|
|
33
|
+
onItemSelected;
|
|
34
|
+
tabFeature;
|
|
35
|
+
pagination;
|
|
36
|
+
searchFeature;
|
|
37
|
+
constructor(config, state, getStyles, getWidth, createDetailScreen, onItemSelected) {
|
|
38
|
+
super();
|
|
39
|
+
this.config = config;
|
|
40
|
+
this.state = state;
|
|
41
|
+
this.getStyles = getStyles;
|
|
42
|
+
this.getWidth = getWidth;
|
|
43
|
+
this.createDetailScreen = createDetailScreen;
|
|
44
|
+
this.onItemSelected = onItemSelected;
|
|
45
|
+
this.tabFeature = new TabFeature(config.tabs, () => {
|
|
46
|
+
this.onTabChange();
|
|
47
|
+
});
|
|
48
|
+
this.pagination = new PaginationFeature({
|
|
49
|
+
pageSize: config.pageSize ?? 12,
|
|
50
|
+
});
|
|
51
|
+
this.searchFeature = new SearchFeature({
|
|
52
|
+
onSearch: () => {
|
|
53
|
+
this.applyFilters();
|
|
54
|
+
},
|
|
55
|
+
escapeClearsSearch: false,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
onTabChange() {
|
|
59
|
+
this.state.selectedIndex = 0;
|
|
60
|
+
this.state.scrollOffset = 0;
|
|
61
|
+
this.state.searchMode = false;
|
|
62
|
+
this.state.searchQuery = '';
|
|
63
|
+
this.applyFilters();
|
|
64
|
+
}
|
|
65
|
+
applyFilters() {
|
|
66
|
+
const tabId = this.tabFeature.getCurrentTabId(this.state);
|
|
67
|
+
let filtered = this.state.items.filter((item) => this.config.filterByTab(item, tabId));
|
|
68
|
+
if (this.state.searchQuery) {
|
|
69
|
+
filtered = this.searchFeature.filterItems(filtered, this.state, this.config.getSearchText);
|
|
70
|
+
}
|
|
71
|
+
this.state.filteredItems = filtered;
|
|
72
|
+
this.state.selectedIndex = 0;
|
|
73
|
+
this.state.scrollOffset = 0;
|
|
74
|
+
}
|
|
75
|
+
render() {
|
|
76
|
+
const s = this.getStyles();
|
|
77
|
+
const cols = this.getWidth();
|
|
78
|
+
const border = renderBorder(cols, s);
|
|
79
|
+
const pageSize = this.config.pageSize ?? 12;
|
|
80
|
+
const lines = [];
|
|
81
|
+
// Header
|
|
82
|
+
lines.push(border);
|
|
83
|
+
const showCount = this.config.showCount ?? true;
|
|
84
|
+
const countBadge = showCount
|
|
85
|
+
? s.muted(` [${String(this.state.filteredItems.length)}/${String(this.state.items.length)}]`)
|
|
86
|
+
: '';
|
|
87
|
+
lines.push(` ${s.primaryBold(this.config.title)}${countBadge}`);
|
|
88
|
+
lines.push('');
|
|
89
|
+
// Tab bar with hint
|
|
90
|
+
const tabBar = this.tabFeature.renderTabs(this.state, s);
|
|
91
|
+
const tabHint = s.muted(`(${this.tabFeature.renderHints()})`);
|
|
92
|
+
lines.push(` ${tabBar} ${tabHint}`);
|
|
93
|
+
lines.push('');
|
|
94
|
+
// Sub-header (if provided) - e.g., API key status
|
|
95
|
+
if (this.config.renderSubHeader) {
|
|
96
|
+
const tabId = this.tabFeature.getCurrentTabId(this.state);
|
|
97
|
+
const subHeaderLines = this.config.renderSubHeader(tabId, s);
|
|
98
|
+
lines.push(...subHeaderLines);
|
|
99
|
+
}
|
|
100
|
+
// Search box (if in search mode)
|
|
101
|
+
if (this.state.searchMode) {
|
|
102
|
+
const query = this.state.searchQuery;
|
|
103
|
+
lines.push(` ${s.muted('Search:')} ${query ? s.primary(query) : ''}█`);
|
|
104
|
+
lines.push('');
|
|
105
|
+
}
|
|
106
|
+
// Items
|
|
107
|
+
const visibleItems = this.pagination.getVisibleItems(this.state, this.state.filteredItems);
|
|
108
|
+
if (visibleItems.length === 0) {
|
|
109
|
+
const msg = this.state.searchQuery
|
|
110
|
+
? (this.config.noResultsMessage ?? 'No items match the search.')
|
|
111
|
+
: (this.config.emptyMessage ?? 'No items available.');
|
|
112
|
+
lines.push(` ${s.muted(msg)}`);
|
|
113
|
+
for (let i = 0; i < pageSize - 1; i++) {
|
|
114
|
+
lines.push('');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
for (let i = 0; i < visibleItems.length; i++) {
|
|
119
|
+
const item = visibleItems[i];
|
|
120
|
+
const absoluteIndex = this.state.scrollOffset + i;
|
|
121
|
+
const isSelected = absoluteIndex === this.state.selectedIndex;
|
|
122
|
+
lines.push(this.config.renderItem(item, isSelected, s));
|
|
123
|
+
}
|
|
124
|
+
// Pad to fixed height
|
|
125
|
+
for (let i = visibleItems.length; i < pageSize; i++) {
|
|
126
|
+
lines.push('');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Pagination indicator
|
|
130
|
+
lines.push('');
|
|
131
|
+
const indicator = this.pagination.renderIndicator(this.state, this.state.filteredItems.length, s);
|
|
132
|
+
if (indicator) {
|
|
133
|
+
lines.push(indicator);
|
|
134
|
+
}
|
|
135
|
+
// Selected item preview
|
|
136
|
+
if (this.config.renderSelectedPreview && visibleItems.length > 0) {
|
|
137
|
+
const selectedItem = this.state.filteredItems[this.state.selectedIndex];
|
|
138
|
+
if (selectedItem) {
|
|
139
|
+
lines.push('');
|
|
140
|
+
const previewLines = this.config.renderSelectedPreview(selectedItem, s);
|
|
141
|
+
lines.push(...previewLines);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Footer
|
|
145
|
+
lines.push(border);
|
|
146
|
+
lines.push(` ${s.muted(this.getFooterHints())}`);
|
|
147
|
+
lines.push(border);
|
|
148
|
+
return lines;
|
|
149
|
+
}
|
|
150
|
+
getFooterHints() {
|
|
151
|
+
if (this.config.footerHints) {
|
|
152
|
+
const activeTab = this.config.tabs[this.state.currentTab];
|
|
153
|
+
return this.config.footerHints(this.state.searchMode, activeTab.id);
|
|
154
|
+
}
|
|
155
|
+
if (this.state.searchMode) {
|
|
156
|
+
return 'Type to filter · ↑↓/jk Navigate · Enter Details · Esc Exit search';
|
|
157
|
+
}
|
|
158
|
+
return this.pagination.renderHints() + ' · / Search · Enter Details · q/Esc Close';
|
|
159
|
+
}
|
|
160
|
+
handleKey(data) {
|
|
161
|
+
// Ctrl+C always closes
|
|
162
|
+
if (isCtrlC(data)) {
|
|
163
|
+
return { action: 'close', result: undefined };
|
|
164
|
+
}
|
|
165
|
+
// Search mode handling
|
|
166
|
+
if (this.state.searchMode) {
|
|
167
|
+
if (isEscape(data)) {
|
|
168
|
+
this.state.searchMode = false;
|
|
169
|
+
if (this.state.searchQuery) {
|
|
170
|
+
this.state.searchQuery = '';
|
|
171
|
+
this.applyFilters();
|
|
172
|
+
}
|
|
173
|
+
return { action: 'stay', render: true };
|
|
174
|
+
}
|
|
175
|
+
const searchResult = this.searchFeature.handleKey(data, this.state);
|
|
176
|
+
if (searchResult?.handled) {
|
|
177
|
+
return { action: 'stay', render: searchResult.action === 'render' };
|
|
178
|
+
}
|
|
179
|
+
if (isEnter(data)) {
|
|
180
|
+
return this.handleEnter();
|
|
181
|
+
}
|
|
182
|
+
const paginationResult = this.pagination.handleKey(data, this.state, this.state.filteredItems.length);
|
|
183
|
+
if (paginationResult?.handled) {
|
|
184
|
+
return { action: 'stay', render: paginationResult.action === 'render' };
|
|
185
|
+
}
|
|
186
|
+
return { action: 'stay', render: false };
|
|
187
|
+
}
|
|
188
|
+
// Not in search mode
|
|
189
|
+
// Custom key handling (before default handling)
|
|
190
|
+
if (this.config.handleCustomKey) {
|
|
191
|
+
const tabId = this.tabFeature.getCurrentTabId(this.state);
|
|
192
|
+
const customResult = this.config.handleCustomKey(data, tabId);
|
|
193
|
+
if (customResult.handled) {
|
|
194
|
+
if (customResult.pushScreen) {
|
|
195
|
+
return { action: 'push', screen: customResult.pushScreen };
|
|
196
|
+
}
|
|
197
|
+
return { action: 'stay', render: customResult.render ?? false };
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (isSlash(data)) {
|
|
201
|
+
this.state.searchMode = true;
|
|
202
|
+
return { action: 'stay', render: true };
|
|
203
|
+
}
|
|
204
|
+
if (isClose(data)) {
|
|
205
|
+
return { action: 'close', result: undefined };
|
|
206
|
+
}
|
|
207
|
+
// Tab navigation
|
|
208
|
+
const tabResult = this.tabFeature.handleKey(data, this.state);
|
|
209
|
+
if (tabResult?.handled) {
|
|
210
|
+
return { action: 'stay', render: tabResult.action === 'render' };
|
|
211
|
+
}
|
|
212
|
+
// Enter shows detail
|
|
213
|
+
if (isEnter(data)) {
|
|
214
|
+
return this.handleEnter();
|
|
215
|
+
}
|
|
216
|
+
// Pagination
|
|
217
|
+
const paginationResult = this.pagination.handleKey(data, this.state, this.state.filteredItems.length);
|
|
218
|
+
if (paginationResult?.handled) {
|
|
219
|
+
return { action: 'stay', render: paginationResult.action === 'render' };
|
|
220
|
+
}
|
|
221
|
+
return { action: 'stay', render: false };
|
|
222
|
+
}
|
|
223
|
+
handleEnter() {
|
|
224
|
+
if (this.state.filteredItems.length === 0) {
|
|
225
|
+
return { action: 'stay', render: false };
|
|
226
|
+
}
|
|
227
|
+
const item = this.state.filteredItems[this.state.selectedIndex];
|
|
228
|
+
// First, check if there's an item selection handler
|
|
229
|
+
if (this.onItemSelected) {
|
|
230
|
+
const result = this.onItemSelected(item);
|
|
231
|
+
if (result !== undefined) {
|
|
232
|
+
// Item was selected, close overlay with result
|
|
233
|
+
return { action: 'close', result };
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// Fall back to detail screen
|
|
237
|
+
const detailScreen = this.createDetailScreen(item);
|
|
238
|
+
if (detailScreen) {
|
|
239
|
+
return { action: 'push', screen: detailScreen };
|
|
240
|
+
}
|
|
241
|
+
return { action: 'stay', render: false };
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// =============================================================================
|
|
245
|
+
// TabbedListOverlayV2 Base Class
|
|
246
|
+
// =============================================================================
|
|
247
|
+
/**
|
|
248
|
+
* Abstract base class for tabbed list overlays using the new Overlay interface.
|
|
249
|
+
*/
|
|
250
|
+
export class TabbedListOverlayV2 extends BaseOverlayV2 {
|
|
251
|
+
screenStack;
|
|
252
|
+
listConfig;
|
|
253
|
+
constructor(config) {
|
|
254
|
+
const initialState = {
|
|
255
|
+
currentTab: 0,
|
|
256
|
+
selectedIndex: 0,
|
|
257
|
+
scrollOffset: 0,
|
|
258
|
+
searchQuery: '',
|
|
259
|
+
searchMode: false,
|
|
260
|
+
items: config.items,
|
|
261
|
+
filteredItems: config.items.filter((item) => config.filterByTab(item, config.tabs[0]?.id ?? 'all')),
|
|
262
|
+
};
|
|
263
|
+
super(initialState);
|
|
264
|
+
this.listConfig = config;
|
|
265
|
+
// Calculate minimum height for stable rendering:
|
|
266
|
+
// Header (5) + pageSize items + pagination (2) + footer (3) = 10 + pageSize
|
|
267
|
+
const pageSize = config.pageSize ?? 12;
|
|
268
|
+
this.minHeight = 10 + pageSize;
|
|
269
|
+
this.screenStack = new ScreenStack();
|
|
270
|
+
this.screenStack.push(new ListScreenV2(config, this.state, () => this.getStyles(), () => this.termWidth, (item) => this.createDetailScreen(item), (item) => this.onItemSelected(item)));
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Override to create a detail screen for an item.
|
|
274
|
+
* Return null to disable detail view.
|
|
275
|
+
*/
|
|
276
|
+
createDetailScreen(_item) {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Override to handle item selection.
|
|
281
|
+
* Return a result to close the overlay, or undefined to fall back to detail screen.
|
|
282
|
+
*/
|
|
283
|
+
onItemSelected(_item) {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
renderContent(_context) {
|
|
287
|
+
const screen = this.screenStack.current();
|
|
288
|
+
return screen?.render() ?? [];
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Override render to use the effective minHeight (max of overlay and current screen).
|
|
292
|
+
*/
|
|
293
|
+
render(context) {
|
|
294
|
+
// Cache context values for helper methods
|
|
295
|
+
this.styles = context.styles;
|
|
296
|
+
this.termWidth = context.width;
|
|
297
|
+
// Get content from subclass
|
|
298
|
+
const lines = this.renderContent(context);
|
|
299
|
+
// Calculate effective minHeight: max of overlay's base and current screen's minHeight
|
|
300
|
+
const screen = this.screenStack.current();
|
|
301
|
+
const screenMinHeight = screen?.getMinHeight?.() ?? 0;
|
|
302
|
+
const effectiveMinHeight = Math.max(this.minHeight, screenMinHeight);
|
|
303
|
+
return effectiveMinHeight > 0 ? { lines, minHeight: effectiveMinHeight } : { lines };
|
|
304
|
+
}
|
|
305
|
+
handleKey(key) {
|
|
306
|
+
// Convert KeyEvent to Buffer for old-style BaseScreen.handleKey
|
|
307
|
+
const data = key.raw;
|
|
308
|
+
const screen = this.screenStack.current();
|
|
309
|
+
if (!screen) {
|
|
310
|
+
return this.cancel();
|
|
311
|
+
}
|
|
312
|
+
const result = screen.handleKey(data);
|
|
313
|
+
switch (result.action) {
|
|
314
|
+
case 'stay':
|
|
315
|
+
return result.render ? this.rerender() : this.noAction();
|
|
316
|
+
case 'push':
|
|
317
|
+
this.screenStack.push(result.screen);
|
|
318
|
+
return this.rerender();
|
|
319
|
+
case 'pop':
|
|
320
|
+
this.screenStack.pop();
|
|
321
|
+
return this.rerender();
|
|
322
|
+
case 'close':
|
|
323
|
+
if (result.result !== undefined) {
|
|
324
|
+
return this.close(result.result);
|
|
325
|
+
}
|
|
326
|
+
return this.cancel();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get the currently selected item.
|
|
331
|
+
*/
|
|
332
|
+
getSelectedItem() {
|
|
333
|
+
return this.state.filteredItems[this.state.selectedIndex];
|
|
334
|
+
}
|
|
335
|
+
}
|