@google/gemini-cli 0.30.1 → 0.31.0-preview.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 +1 -1
- package/dist/google-gemini-cli-0.31.0-preview.0.tgz +0 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/package.json +7 -6
- package/dist/src/commands/extensions/install.js +72 -4
- package/dist/src/commands/extensions/install.js.map +1 -1
- package/dist/src/commands/extensions/install.test.js +153 -20
- package/dist/src/commands/extensions/install.test.js.map +1 -1
- package/dist/src/commands/extensions/utils.js +1 -0
- package/dist/src/commands/extensions/utils.js.map +1 -1
- package/dist/src/config/config.js +17 -5
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +79 -4
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/extension-manager-hydration.test.js +2 -2
- package/dist/src/config/extension-manager-hydration.test.js.map +1 -1
- package/dist/src/config/extension-manager.js +10 -6
- package/dist/src/config/extension-manager.js.map +1 -1
- package/dist/src/config/extension.test.js +20 -20
- package/dist/src/config/extension.test.js.map +1 -1
- package/dist/src/config/extensionRegistryClient.js +3 -2
- package/dist/src/config/extensionRegistryClient.js.map +1 -1
- package/dist/src/config/extensionRegistryClient.test.js +52 -0
- package/dist/src/config/extensionRegistryClient.test.js.map +1 -1
- package/dist/src/config/extensions/consent.d.ts +10 -0
- package/dist/src/config/extensions/consent.js +10 -3
- package/dist/src/config/extensions/consent.js.map +1 -1
- package/dist/src/config/extensions/consent.test.js +1 -1
- package/dist/src/config/extensions/consent.test.js.map +1 -1
- package/dist/src/config/extensions/extensionEnablement.js +1 -0
- package/dist/src/config/extensions/extensionEnablement.js.map +1 -1
- package/dist/src/config/extensions/extensionSettings.js +20 -3
- package/dist/src/config/extensions/extensionSettings.js.map +1 -1
- package/dist/src/config/extensions/extensionSettings.test.js +16 -0
- package/dist/src/config/extensions/extensionSettings.test.js.map +1 -1
- package/dist/src/config/extensions/github.test.js +1 -1
- package/dist/src/config/extensions/github.test.js.map +1 -1
- package/dist/src/config/extensions/variables.js +3 -1
- package/dist/src/config/extensions/variables.js.map +1 -1
- package/dist/src/config/keyBindings.js +6 -2
- package/dist/src/config/keyBindings.js.map +1 -1
- package/dist/src/config/policy-engine.integration.test.js +51 -13
- package/dist/src/config/policy-engine.integration.test.js.map +1 -1
- package/dist/src/config/policy.d.ts +15 -3
- package/dist/src/config/policy.js +49 -4
- package/dist/src/config/policy.js.map +1 -1
- package/dist/src/config/policy.test.d.ts +6 -0
- package/dist/src/config/policy.test.js +152 -0
- package/dist/src/config/policy.test.js.map +1 -0
- package/dist/src/config/settings-validation.js +1 -1
- package/dist/src/config/settings-validation.js.map +1 -1
- package/dist/src/config/settings-validation.test.js +2 -3
- package/dist/src/config/settings-validation.test.js.map +1 -1
- package/dist/src/config/settings.d.ts +2 -0
- package/dist/src/config/settings.js +18 -20
- package/dist/src/config/settings.js.map +1 -1
- package/dist/src/config/settings.test.js +118 -18
- package/dist/src/config/settings.test.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +171 -9
- package/dist/src/config/settingsSchema.js +159 -9
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/config/settingsSchema.test.js +26 -0
- package/dist/src/config/settingsSchema.test.js.map +1 -1
- package/dist/src/config/settings_repro.test.js +0 -1
- package/dist/src/config/settings_repro.test.js.map +1 -1
- package/dist/src/config/trustedFolders.test.js +3 -1
- package/dist/src/config/trustedFolders.test.js.map +1 -1
- package/dist/src/config/workspace-policy-cli.test.d.ts +6 -0
- package/dist/src/config/workspace-policy-cli.test.js +180 -0
- package/dist/src/config/workspace-policy-cli.test.js.map +1 -0
- package/dist/src/gemini.d.ts +2 -2
- package/dist/src/gemini.js +15 -5
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +18 -2
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/gemini_cleanup.test.js +27 -24
- package/dist/src/gemini_cleanup.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/integration-tests/modelSteering.test.d.ts +6 -0
- package/dist/src/integration-tests/modelSteering.test.js +65 -0
- package/dist/src/integration-tests/modelSteering.test.js.map +1 -0
- package/dist/src/nonInteractiveCli.js +2 -3
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/test-utils/AppRig.d.ts +1 -1
- package/dist/src/test-utils/AppRig.js +16 -7
- package/dist/src/test-utils/AppRig.js.map +1 -1
- package/dist/src/test-utils/AppRig.test.js +37 -2
- package/dist/src/test-utils/AppRig.test.js.map +1 -1
- package/dist/src/test-utils/async.d.ts +1 -1
- package/dist/src/test-utils/async.js +1 -1
- package/dist/src/test-utils/async.js.map +1 -1
- package/dist/src/test-utils/customMatchers.js +1 -1
- package/dist/src/test-utils/customMatchers.js.map +1 -1
- package/dist/src/test-utils/mockCommandContext.js +8 -2
- package/dist/src/test-utils/mockCommandContext.js.map +1 -1
- package/dist/src/test-utils/mockConfig.js +2 -1
- package/dist/src/test-utils/mockConfig.js.map +1 -1
- package/dist/src/test-utils/render.d.ts +81 -5
- package/dist/src/test-utils/render.js +299 -29
- package/dist/src/test-utils/render.js.map +1 -1
- package/dist/src/test-utils/render.test.js +49 -23
- package/dist/src/test-utils/render.test.js.map +1 -1
- package/dist/src/test-utils/settings.js +4 -2
- package/dist/src/test-utils/settings.js.map +1 -1
- package/dist/src/ui/App.test.js +56 -24
- package/dist/src/ui/App.test.js.map +1 -1
- package/dist/src/ui/AppContainer.d.ts +2 -2
- package/dist/src/ui/AppContainer.js +231 -11
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/AppContainer.test.js +561 -7
- package/dist/src/ui/AppContainer.test.js.map +1 -1
- package/dist/src/ui/IdeIntegrationNudge.test.js +29 -33
- package/dist/src/ui/IdeIntegrationNudge.test.js.map +1 -1
- package/dist/src/ui/auth/ApiAuthDialog.test.js +19 -9
- package/dist/src/ui/auth/ApiAuthDialog.test.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.js +1 -1
- package/dist/src/ui/auth/AuthDialog.js.map +1 -1
- package/dist/src/ui/auth/AuthDialog.test.js +61 -27
- package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
- package/dist/src/ui/auth/AuthInProgress.test.js +35 -14
- package/dist/src/ui/auth/AuthInProgress.test.js.map +1 -1
- package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +11 -5
- package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +1 -1
- package/dist/src/ui/colors.js +6 -0
- package/dist/src/ui/colors.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.js +2 -0
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.test.js +7 -1
- package/dist/src/ui/commands/clearCommand.test.js.map +1 -1
- package/dist/src/ui/commands/copyCommand.js +2 -1
- package/dist/src/ui/commands/copyCommand.js.map +1 -1
- package/dist/src/ui/commands/copyCommand.test.js +6 -4
- package/dist/src/ui/commands/copyCommand.test.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.js +18 -0
- package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
- package/dist/src/ui/commands/extensionsCommand.test.js +4 -4
- package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
- package/dist/src/ui/commands/planCommand.js +1 -1
- package/dist/src/ui/commands/planCommand.js.map +1 -1
- package/dist/src/ui/commands/planCommand.test.js +1 -1
- package/dist/src/ui/commands/planCommand.test.js.map +1 -1
- package/dist/src/ui/commands/policiesCommand.js +5 -0
- package/dist/src/ui/commands/policiesCommand.js.map +1 -1
- package/dist/src/ui/commands/policiesCommand.test.js +38 -1
- package/dist/src/ui/commands/policiesCommand.test.js.map +1 -1
- package/dist/src/ui/commands/rewindCommand.js +3 -2
- package/dist/src/ui/commands/rewindCommand.js.map +1 -1
- package/dist/src/ui/components/AboutBox.test.js +16 -8
- package/dist/src/ui/components/AboutBox.test.js.map +1 -1
- package/dist/src/ui/components/AdminSettingsChangedDialog.test.js +7 -4
- package/dist/src/ui/components/AdminSettingsChangedDialog.test.js.map +1 -1
- package/dist/src/ui/components/AgentConfigDialog.test.js +41 -19
- package/dist/src/ui/components/AgentConfigDialog.test.js.map +1 -1
- package/dist/src/ui/components/AlternateBufferQuittingDisplay.js +1 -1
- package/dist/src/ui/components/AlternateBufferQuittingDisplay.js.map +1 -1
- package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js +24 -12
- package/dist/src/ui/components/AlternateBufferQuittingDisplay.test.js.map +1 -1
- package/dist/src/ui/components/AnsiOutput.test.js +35 -19
- package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
- package/dist/src/ui/components/AppHeader.test.js +27 -17
- package/dist/src/ui/components/AppHeader.test.js.map +1 -1
- package/dist/src/ui/components/ApprovalModeIndicator.test.js +18 -12
- package/dist/src/ui/components/ApprovalModeIndicator.test.js.map +1 -1
- package/dist/src/ui/components/AskUserDialog.test.js +147 -85
- package/dist/src/ui/components/AskUserDialog.test.js.map +1 -1
- package/dist/src/ui/components/BackgroundShellDisplay.test.js +50 -48
- package/dist/src/ui/components/BackgroundShellDisplay.test.js.map +1 -1
- package/dist/src/ui/components/Banner.test.js +8 -4
- package/dist/src/ui/components/Banner.test.js.map +1 -1
- package/dist/src/ui/components/Checklist.test.js +17 -12
- package/dist/src/ui/components/Checklist.test.js.map +1 -1
- package/dist/src/ui/components/ChecklistItem.test.js +9 -6
- package/dist/src/ui/components/ChecklistItem.test.js.map +1 -1
- package/dist/src/ui/components/CliSpinner.test.js +8 -5
- package/dist/src/ui/components/CliSpinner.test.js.map +1 -1
- package/dist/src/ui/components/Composer.js +5 -5
- package/dist/src/ui/components/Composer.js.map +1 -1
- package/dist/src/ui/components/Composer.test.js +104 -100
- package/dist/src/ui/components/Composer.test.js.map +1 -1
- package/dist/src/ui/components/ConfigInitDisplay.test.js +3 -2
- package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ConsentPrompt.test.js +15 -8
- package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -1
- package/dist/src/ui/components/ConsoleSummaryDisplay.test.js +9 -5
- package/dist/src/ui/components/ConsoleSummaryDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ContextSummaryDisplay.test.js +16 -14
- package/dist/src/ui/components/ContextSummaryDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.test.js +12 -6
- package/dist/src/ui/components/ContextUsageDisplay.test.js.map +1 -1
- package/dist/src/ui/components/CopyModeWarning.test.js +9 -5
- package/dist/src/ui/components/CopyModeWarning.test.js.map +1 -1
- package/dist/src/ui/components/DebugProfiler.test.js +17 -14
- package/dist/src/ui/components/DebugProfiler.test.js.map +1 -1
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js +13 -7
- package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +5 -1
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/DialogManager.test.js +9 -5
- package/dist/src/ui/components/DialogManager.test.js.map +1 -1
- package/dist/src/ui/components/EditorSettingsDialog.test.js +16 -8
- package/dist/src/ui/components/EditorSettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ExitPlanModeDialog.js +2 -2
- package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
- package/dist/src/ui/components/ExitPlanModeDialog.test.js +2 -2
- package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +1 -1
- package/dist/src/ui/components/ExitWarning.test.js +18 -10
- package/dist/src/ui/components/ExitWarning.test.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.d.ts +2 -0
- package/dist/src/ui/components/FolderTrustDialog.js +49 -3
- package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
- package/dist/src/ui/components/FolderTrustDialog.test.js +249 -18
- package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/Footer.test.js +101 -50
- package/dist/src/ui/components/Footer.test.js.map +1 -1
- package/dist/src/ui/components/GeminiRespondingSpinner.test.js +23 -13
- package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -1
- package/dist/src/ui/components/GradientRegression.test.js +20 -10
- package/dist/src/ui/components/GradientRegression.test.js.map +1 -1
- package/dist/src/ui/components/Header.test.js +2 -0
- package/dist/src/ui/components/Header.test.js.map +1 -1
- package/dist/src/ui/components/Help.test.js +9 -6
- package/dist/src/ui/components/Help.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.d.ts +1 -2
- package/dist/src/ui/components/HistoryItemDisplay.js +4 -3
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.test.js +80 -35
- package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
- package/dist/src/ui/components/HookStatusDisplay.test.js +13 -9
- package/dist/src/ui/components/HookStatusDisplay.test.js.map +1 -1
- package/dist/src/ui/components/IdeTrustChangeDialog.test.js +36 -16
- package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +10 -12
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.test.js +127 -13
- package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
- package/dist/src/ui/components/LoadingIndicator.test.js +97 -47
- package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/components/LogoutConfirmationDialog.test.js +25 -9
- package/dist/src/ui/components/LogoutConfirmationDialog.test.js.map +1 -1
- package/dist/src/ui/components/LoopDetectionConfirmation.test.js +9 -5
- package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +1 -1
- package/dist/src/ui/components/MainContent.js +35 -14
- package/dist/src/ui/components/MainContent.js.map +1 -1
- package/dist/src/ui/components/MainContent.test.js +224 -10
- package/dist/src/ui/components/MainContent.test.js.map +1 -1
- package/dist/src/ui/components/MemoryUsageDisplay.test.js +8 -3
- package/dist/src/ui/components/MemoryUsageDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ModelDialog.js +6 -6
- package/dist/src/ui/components/ModelDialog.js.map +1 -1
- package/dist/src/ui/components/ModelDialog.test.js +142 -16
- package/dist/src/ui/components/ModelDialog.test.js.map +1 -1
- package/dist/src/ui/components/ModelStatsDisplay.test.js +38 -24
- package/dist/src/ui/components/ModelStatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/MultiFolderTrustDialog.test.js +32 -9
- package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/NewAgentsNotification.test.js +6 -4
- package/dist/src/ui/components/NewAgentsNotification.test.js.map +1 -1
- package/dist/src/ui/components/Notifications.js +50 -4
- package/dist/src/ui/components/Notifications.js.map +1 -1
- package/dist/src/ui/components/Notifications.test.js +162 -30
- package/dist/src/ui/components/Notifications.test.js.map +1 -1
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +36 -10
- package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -1
- package/dist/src/ui/components/PolicyUpdateDialog.d.ts +18 -0
- package/dist/src/ui/components/PolicyUpdateDialog.js +59 -0
- package/dist/src/ui/components/PolicyUpdateDialog.js.map +1 -0
- package/dist/src/ui/components/PolicyUpdateDialog.test.d.ts +6 -0
- package/dist/src/ui/components/PolicyUpdateDialog.test.js +93 -0
- package/dist/src/ui/components/PolicyUpdateDialog.test.js.map +1 -0
- package/dist/src/ui/components/QueuedMessageDisplay.test.js +16 -11
- package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -1
- package/dist/src/ui/components/QuittingDisplay.test.js +9 -5
- package/dist/src/ui/components/QuittingDisplay.test.js.map +1 -1
- package/dist/src/ui/components/QuotaDisplay.test.js +40 -22
- package/dist/src/ui/components/QuotaDisplay.test.js.map +1 -1
- package/dist/src/ui/components/RawMarkdownIndicator.test.js +8 -4
- package/dist/src/ui/components/RawMarkdownIndicator.test.js.map +1 -1
- package/dist/src/ui/components/RewindConfirmation.test.js +15 -7
- package/dist/src/ui/components/RewindConfirmation.test.js.map +1 -1
- package/dist/src/ui/components/RewindViewer.js +9 -7
- package/dist/src/ui/components/RewindViewer.js.map +1 -1
- package/dist/src/ui/components/RewindViewer.test.js +54 -17
- package/dist/src/ui/components/RewindViewer.test.js.map +1 -1
- package/dist/src/ui/components/SessionBrowser.test.js +24 -11
- package/dist/src/ui/components/SessionBrowser.test.js.map +1 -1
- package/dist/src/ui/components/SessionRetentionWarningDialog.test.js +12 -7
- package/dist/src/ui/components/SessionRetentionWarningDialog.test.js.map +1 -1
- package/dist/src/ui/components/SessionSummaryDisplay.js +1 -1
- package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/SessionSummaryDisplay.test.js +7 -4
- package/dist/src/ui/components/SessionSummaryDisplay.test.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.js +76 -7
- package/dist/src/ui/components/SettingsDialog.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +252 -109
- package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/ShellInputPrompt.test.js +120 -67
- package/dist/src/ui/components/ShellInputPrompt.test.js.map +1 -1
- package/dist/src/ui/components/ShellModeIndicator.test.js +4 -2
- package/dist/src/ui/components/ShellModeIndicator.test.js.map +1 -1
- package/dist/src/ui/components/ShortcutsHelp.js +1 -1
- package/dist/src/ui/components/ShortcutsHelp.js.map +1 -1
- package/dist/src/ui/components/ShortcutsHelp.test.js +6 -3
- package/dist/src/ui/components/ShortcutsHelp.test.js.map +1 -1
- package/dist/src/ui/components/ShowMoreLines.d.ts +2 -1
- package/dist/src/ui/components/ShowMoreLines.js +10 -5
- package/dist/src/ui/components/ShowMoreLines.js.map +1 -1
- package/dist/src/ui/components/ShowMoreLines.test.js +47 -7
- package/dist/src/ui/components/ShowMoreLines.test.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.d.ts +1 -0
- package/dist/src/ui/components/StatsDisplay.js +9 -3
- package/dist/src/ui/components/StatsDisplay.js.map +1 -1
- package/dist/src/ui/components/StatsDisplay.test.js +51 -34
- package/dist/src/ui/components/StatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/StatusDisplay.test.js +30 -17
- package/dist/src/ui/components/StatusDisplay.test.js.map +1 -1
- package/dist/src/ui/components/StickyHeader.test.js +4 -2
- package/dist/src/ui/components/StickyHeader.test.js.map +1 -1
- package/dist/src/ui/components/SuggestionsDisplay.test.js +19 -13
- package/dist/src/ui/components/SuggestionsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/Table.test.js +9 -6
- package/dist/src/ui/components/Table.test.js.map +1 -1
- package/dist/src/ui/components/ThemeDialog.test.js +42 -19
- package/dist/src/ui/components/ThemeDialog.test.js.map +1 -1
- package/dist/src/ui/components/ThemedGradient.test.js +4 -2
- package/dist/src/ui/components/ThemedGradient.test.js.map +1 -1
- package/dist/src/ui/components/Tips.test.js +4 -2
- package/dist/src/ui/components/Tips.test.js.map +1 -1
- package/dist/src/ui/components/ToastDisplay.js +6 -1
- package/dist/src/ui/components/ToastDisplay.js.map +1 -1
- package/dist/src/ui/components/ToastDisplay.test.js +48 -17
- package/dist/src/ui/components/ToastDisplay.test.js.map +1 -1
- package/dist/src/ui/components/ToolConfirmationQueue.js +11 -8
- package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
- package/dist/src/ui/components/ToolConfirmationQueue.test.js +75 -17
- package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -1
- package/dist/src/ui/components/ToolStatsDisplay.test.js +19 -12
- package/dist/src/ui/components/ToolStatsDisplay.test.js.map +1 -1
- package/dist/src/ui/components/UpdateNotification.test.js +4 -2
- package/dist/src/ui/components/UpdateNotification.test.js.map +1 -1
- package/dist/src/ui/components/UserIdentity.test.js +16 -11
- package/dist/src/ui/components/UserIdentity.test.js.map +1 -1
- package/dist/src/ui/components/ValidationDialog.test.js +33 -16
- package/dist/src/ui/components/ValidationDialog.test.js.map +1 -1
- package/dist/src/ui/components/messages/CompressionMessage.test.js +99 -101
- package/dist/src/ui/components/messages/CompressionMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ErrorMessage.test.js +8 -4
- package/dist/src/ui/components/messages/ErrorMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.js +5 -1
- package/dist/src/ui/components/messages/GeminiMessage.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiMessage.test.js +12 -6
- package/dist/src/ui/components/messages/GeminiMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/HintMessage.d.ts +11 -0
- package/dist/src/ui/components/messages/HintMessage.js +14 -0
- package/dist/src/ui/components/messages/HintMessage.js.map +1 -0
- package/dist/src/ui/components/messages/InfoMessage.d.ts +1 -0
- package/dist/src/ui/components/messages/InfoMessage.js +2 -2
- package/dist/src/ui/components/messages/InfoMessage.js.map +1 -1
- package/dist/src/ui/components/messages/InfoMessage.test.js +12 -6
- package/dist/src/ui/components/messages/InfoMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +4 -2
- package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +1 -1
- package/dist/src/ui/components/messages/ShellToolMessage.d.ts +1 -2
- package/dist/src/ui/components/messages/ShellToolMessage.js +15 -29
- package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ShellToolMessage.test.js +91 -22
- package/dist/src/ui/components/messages/ShellToolMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ThinkingMessage.test.js +25 -13
- package/dist/src/ui/components/messages/ThinkingMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/Todo.test.js +34 -19
- package/dist/src/ui/components/messages/Todo.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js +128 -13
- package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +175 -20
- package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +3 -4
- package/dist/src/ui/components/messages/ToolGroupMessage.js +91 -35
- package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js +286 -63
- package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.js +4 -4
- package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessage.test.js +118 -39
- package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js +15 -6
- package/dist/src/ui/components/messages/ToolMessageFocusHint.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js +4 -2
- package/dist/src/ui/components/messages/ToolMessageRawMarkdown.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +79 -0
- package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolResultDisplay.js +25 -14
- package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplay.test.js +81 -31
- package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +5 -5
- package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +1 -1
- package/dist/src/ui/components/messages/ToolShared.d.ts +8 -0
- package/dist/src/ui/components/messages/ToolShared.js +27 -9
- package/dist/src/ui/components/messages/ToolShared.js.map +1 -1
- package/dist/src/ui/components/messages/ToolShared.test.d.ts +6 -0
- package/dist/src/ui/components/messages/ToolShared.test.js +52 -0
- package/dist/src/ui/components/messages/ToolShared.test.js.map +1 -0
- package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +11 -4
- package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.js +1 -2
- package/dist/src/ui/components/messages/UserMessage.js.map +1 -1
- package/dist/src/ui/components/messages/UserMessage.test.js +16 -8
- package/dist/src/ui/components/messages/UserMessage.test.js.map +1 -1
- package/dist/src/ui/components/messages/UserShellMessage.js +1 -2
- package/dist/src/ui/components/messages/UserShellMessage.js.map +1 -1
- package/dist/src/ui/components/messages/WarningMessage.test.js +8 -4
- package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSelectionList.test.js +118 -106
- package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSettingsDialog.js +22 -24
- package/dist/src/ui/components/shared/BaseSettingsDialog.js.map +1 -1
- package/dist/src/ui/components/shared/BaseSettingsDialog.test.js +139 -40
- package/dist/src/ui/components/shared/BaseSettingsDialog.test.js.map +1 -1
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +10 -6
- package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -1
- package/dist/src/ui/components/shared/EnumSelector.test.js +42 -20
- package/dist/src/ui/components/shared/EnumSelector.test.js.map +1 -1
- package/dist/src/ui/components/shared/ExpandableText.test.js +21 -14
- package/dist/src/ui/components/shared/ExpandableText.test.js.map +1 -1
- package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js +8 -4
- package/dist/src/ui/components/shared/HalfLinePaddedBox.test.js.map +1 -1
- package/dist/src/ui/components/shared/MaxSizedBox.test.js +41 -30
- package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
- package/dist/src/ui/components/shared/Scrollable.js +2 -3
- package/dist/src/ui/components/shared/Scrollable.js.map +1 -1
- package/dist/src/ui/components/shared/Scrollable.test.js +33 -17
- package/dist/src/ui/components/shared/Scrollable.test.js.map +1 -1
- package/dist/src/ui/components/shared/ScrollableList.js +1 -1
- package/dist/src/ui/components/shared/ScrollableList.js.map +1 -1
- package/dist/src/ui/components/shared/ScrollableList.test.js +36 -6
- package/dist/src/ui/components/shared/ScrollableList.test.js.map +1 -1
- package/dist/src/ui/components/shared/SearchableList.d.ts +46 -14
- package/dist/src/ui/components/shared/SearchableList.js +69 -57
- package/dist/src/ui/components/shared/SearchableList.js.map +1 -1
- package/dist/src/ui/components/shared/SearchableList.test.js +67 -14
- package/dist/src/ui/components/shared/SearchableList.test.js.map +1 -1
- package/dist/src/ui/components/shared/SectionHeader.d.ts +1 -0
- package/dist/src/ui/components/shared/SectionHeader.js +1 -1
- package/dist/src/ui/components/shared/SectionHeader.js.map +1 -1
- package/dist/src/ui/components/shared/SectionHeader.test.js +9 -2
- package/dist/src/ui/components/shared/SectionHeader.test.js.map +1 -1
- package/dist/src/ui/components/shared/TabHeader.js +1 -1
- package/dist/src/ui/components/shared/TabHeader.js.map +1 -1
- package/dist/src/ui/components/shared/TabHeader.test.js +65 -25
- package/dist/src/ui/components/shared/TabHeader.test.js.map +1 -1
- package/dist/src/ui/components/shared/TextInput.test.js +111 -65
- package/dist/src/ui/components/shared/TextInput.test.js.map +1 -1
- package/dist/src/ui/components/shared/VirtualizedList.test.js +27 -35
- package/dist/src/ui/components/shared/VirtualizedList.test.js.map +1 -1
- package/dist/src/ui/components/triage/TriageDuplicates.js +1 -0
- package/dist/src/ui/components/triage/TriageDuplicates.js.map +1 -1
- package/dist/src/ui/components/triage/TriageIssues.js +1 -0
- package/dist/src/ui/components/triage/TriageIssues.js.map +1 -1
- package/dist/src/ui/components/views/ChatList.test.js +9 -6
- package/dist/src/ui/components/views/ChatList.test.js.map +1 -1
- package/dist/src/ui/components/views/ExtensionRegistryView.d.ts +15 -0
- package/dist/src/ui/components/views/ExtensionRegistryView.js +60 -0
- package/dist/src/ui/components/views/ExtensionRegistryView.js.map +1 -0
- package/dist/src/ui/components/views/ExtensionRegistryView.test.d.ts +6 -0
- package/dist/src/ui/components/views/ExtensionRegistryView.test.js +168 -0
- package/dist/src/ui/components/views/ExtensionRegistryView.test.js.map +1 -0
- package/dist/src/ui/components/views/ExtensionsList.test.js +21 -19
- package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -1
- package/dist/src/ui/components/views/McpStatus.test.js +38 -25
- package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
- package/dist/src/ui/components/views/SkillsList.test.js +18 -12
- package/dist/src/ui/components/views/SkillsList.test.js.map +1 -1
- package/dist/src/ui/components/views/ToolsList.test.js +9 -6
- package/dist/src/ui/components/views/ToolsList.test.js.map +1 -1
- package/dist/src/ui/constants/tips.js +1 -1
- package/dist/src/ui/constants/tips.js.map +1 -1
- package/dist/src/ui/constants.d.ts +2 -1
- package/dist/src/ui/constants.js +2 -1
- package/dist/src/ui/constants.js.map +1 -1
- package/dist/src/ui/contexts/AppContext.d.ts +2 -1
- package/dist/src/ui/contexts/AppContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.js +37 -8
- package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
- package/dist/src/ui/contexts/KeypressContext.test.js +68 -0
- package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
- package/dist/src/ui/contexts/OverflowContext.d.ts +3 -3
- package/dist/src/ui/contexts/OverflowContext.js +5 -1
- package/dist/src/ui/contexts/OverflowContext.js.map +1 -1
- package/dist/src/ui/contexts/TerminalContext.test.js +26 -15
- package/dist/src/ui/contexts/TerminalContext.test.js.map +1 -1
- package/dist/src/ui/contexts/UIActionsContext.d.ts +6 -1
- package/dist/src/ui/contexts/UIActionsContext.js +1 -1
- package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +7 -1
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/atCommandProcessor.test.js +6 -2
- package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.js +23 -11
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.test.js +30 -14
- package/dist/src/ui/hooks/slashCommandProcessor.test.js.map +1 -1
- package/dist/src/ui/hooks/toolMapping.d.ts +2 -0
- package/dist/src/ui/hooks/toolMapping.js +13 -1
- package/dist/src/ui/hooks/toolMapping.js.map +1 -1
- package/dist/src/ui/hooks/toolMapping.test.js +42 -0
- package/dist/src/ui/hooks/toolMapping.test.js.map +1 -1
- package/dist/src/ui/hooks/useAnimatedScrollbar.js +13 -3
- package/dist/src/ui/hooks/useAnimatedScrollbar.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.js +74 -22
- package/dist/src/ui/hooks/useAtCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useAtCompletion.test.js +88 -0
- package/dist/src/ui/hooks/useAtCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useCommandCompletion.js +2 -3
- package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useCommandCompletion.test.js +0 -4
- package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useConfirmingTool.d.ts +2 -6
- package/dist/src/ui/hooks/useConfirmingTool.js +2 -23
- package/dist/src/ui/hooks/useConfirmingTool.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.js +18 -6
- package/dist/src/ui/hooks/useConsoleMessages.js.map +1 -1
- package/dist/src/ui/hooks/useConsoleMessages.test.js +4 -4
- package/dist/src/ui/hooks/useExtensionRegistry.d.ts +13 -0
- package/dist/src/ui/hooks/useExtensionRegistry.js +70 -0
- package/dist/src/ui/hooks/useExtensionRegistry.js.map +1 -0
- package/dist/src/ui/hooks/useFocus.d.ts +4 -1
- package/dist/src/ui/hooks/useFocus.js +7 -1
- package/dist/src/ui/hooks/useFocus.js.map +1 -1
- package/dist/src/ui/hooks/useFocus.test.js +20 -11
- package/dist/src/ui/hooks/useFocus.test.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.d.ts +2 -0
- package/dist/src/ui/hooks/useFolderTrust.js +15 -3
- package/dist/src/ui/hooks/useFolderTrust.js.map +1 -1
- package/dist/src/ui/hooks/useFolderTrust.test.js +3 -0
- package/dist/src/ui/hooks/useFolderTrust.test.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +86 -20
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js +150 -1
- package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.d.ts +3 -1
- package/dist/src/ui/hooks/useLoadingIndicator.js +2 -2
- package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
- package/dist/src/ui/hooks/useLoadingIndicator.test.js +9 -4
- package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
- package/dist/src/ui/hooks/useMouseClick.test.js +15 -7
- package/dist/src/ui/hooks/useMouseClick.test.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.d.ts +4 -2
- package/dist/src/ui/hooks/usePhraseCycler.js +38 -26
- package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
- package/dist/src/ui/hooks/usePhraseCycler.test.js +123 -73
- package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
- package/dist/src/ui/hooks/usePromptCompletion.d.ts +1 -2
- package/dist/src/ui/hooks/usePromptCompletion.js +2 -2
- package/dist/src/ui/hooks/usePromptCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useRegistrySearch.d.ts +19 -0
- package/dist/src/ui/hooks/useRegistrySearch.js +35 -0
- package/dist/src/ui/hooks/useRegistrySearch.js.map +1 -0
- package/dist/src/ui/hooks/useRunEventNotifications.d.ts +22 -0
- package/dist/src/ui/hooks/useRunEventNotifications.js +93 -0
- package/dist/src/ui/hooks/useRunEventNotifications.js.map +1 -0
- package/dist/src/ui/hooks/useSearchBuffer.d.ts +11 -0
- package/dist/src/ui/hooks/useSearchBuffer.js +24 -0
- package/dist/src/ui/hooks/useSearchBuffer.js.map +1 -0
- package/dist/src/ui/hooks/useSelectionList.test.js +111 -45
- package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -1
- package/dist/src/ui/hooks/useSessionBrowser.js +3 -2
- package/dist/src/ui/hooks/useSessionBrowser.js.map +1 -1
- package/dist/src/ui/hooks/useSessionBrowser.test.js +15 -12
- package/dist/src/ui/hooks/useSessionBrowser.test.js.map +1 -1
- package/dist/src/ui/hooks/useSessionResume.js +2 -2
- package/dist/src/ui/hooks/useSessionResume.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.js +1 -0
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useStateAndRef.js +1 -0
- package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
- package/dist/src/ui/hooks/useTerminalTheme.test.js +29 -18
- package/dist/src/ui/hooks/useTerminalTheme.test.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.js +19 -2
- package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +44 -0
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/keyMatchers.test.js +1 -0
- package/dist/src/ui/keyMatchers.test.js.map +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.test.js +12 -6
- package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js +24 -8
- package/dist/src/ui/privacy/CloudFreePrivacyNotice.test.js.map +1 -1
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js +16 -5
- package/dist/src/ui/privacy/CloudPaidPrivacyNotice.test.js.map +1 -1
- package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js +16 -5
- package/dist/src/ui/privacy/GeminiPrivacyNotice.test.js.map +1 -1
- package/dist/src/ui/privacy/PrivacyNotice.test.js +4 -2
- package/dist/src/ui/privacy/PrivacyNotice.test.js.map +1 -1
- package/dist/src/ui/themes/no-color.js +4 -0
- package/dist/src/ui/themes/no-color.js.map +1 -1
- package/dist/src/ui/themes/semantic-tokens.d.ts +2 -0
- package/dist/src/ui/themes/semantic-tokens.js +6 -2
- package/dist/src/ui/themes/semantic-tokens.js.map +1 -1
- package/dist/src/ui/themes/solarized-dark.js +2 -0
- package/dist/src/ui/themes/solarized-dark.js.map +1 -1
- package/dist/src/ui/themes/solarized-light.js +2 -0
- package/dist/src/ui/themes/solarized-light.js.map +1 -1
- package/dist/src/ui/themes/theme-manager.js +9 -4
- package/dist/src/ui/themes/theme-manager.js.map +1 -1
- package/dist/src/ui/themes/theme.d.ts +2 -0
- package/dist/src/ui/themes/theme.js +20 -7
- package/dist/src/ui/themes/theme.js.map +1 -1
- package/dist/src/ui/themes/theme.test.js +7 -7
- package/dist/src/ui/themes/theme.test.js.map +1 -1
- package/dist/src/ui/types.d.ts +14 -2
- package/dist/src/ui/types.js +1 -0
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.js +3 -5
- package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
- package/dist/src/ui/utils/CodeColorizer.test.js +4 -2
- package/dist/src/ui/utils/CodeColorizer.test.js.map +1 -1
- package/dist/src/ui/utils/InlineMarkdownRenderer.js +3 -1
- package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.test.js +65 -33
- package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
- package/dist/src/ui/utils/TableRenderer.js +7 -3
- package/dist/src/ui/utils/TableRenderer.js.map +1 -1
- package/dist/src/ui/utils/TableRenderer.test.js +43 -22
- package/dist/src/ui/utils/TableRenderer.test.js.map +1 -1
- package/dist/src/ui/utils/borderStyles.d.ts +18 -0
- package/dist/src/ui/utils/borderStyles.js +78 -0
- package/dist/src/ui/utils/borderStyles.js.map +1 -0
- package/dist/src/ui/utils/commandUtils.d.ts +2 -1
- package/dist/src/ui/utils/commandUtils.js +8 -3
- package/dist/src/ui/utils/commandUtils.js.map +1 -1
- package/dist/src/ui/utils/commandUtils.test.js +18 -0
- package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
- package/dist/src/ui/utils/confirmingTool.d.ts +15 -0
- package/dist/src/ui/utils/confirmingTool.js +27 -0
- package/dist/src/ui/utils/confirmingTool.js.map +1 -0
- package/dist/src/ui/utils/pendingAttentionNotification.d.ts +12 -0
- package/dist/src/ui/utils/pendingAttentionNotification.js +101 -0
- package/dist/src/ui/utils/pendingAttentionNotification.js.map +1 -0
- package/dist/src/ui/utils/pendingAttentionNotification.test.d.ts +6 -0
- package/dist/src/ui/utils/pendingAttentionNotification.test.js +79 -0
- package/dist/src/ui/utils/pendingAttentionNotification.test.js.map +1 -0
- package/dist/src/ui/utils/terminalCapabilityManager.d.ts +2 -0
- package/dist/src/ui/utils/terminalCapabilityManager.js +18 -0
- package/dist/src/ui/utils/terminalCapabilityManager.js.map +1 -1
- package/dist/src/ui/utils/terminalCapabilityManager.test.js +68 -0
- package/dist/src/ui/utils/terminalCapabilityManager.test.js.map +1 -1
- package/dist/src/ui/utils/terminalSetup.d.ts +24 -0
- package/dist/src/ui/utils/terminalSetup.js +130 -34
- package/dist/src/ui/utils/terminalSetup.js.map +1 -1
- package/dist/src/ui/utils/terminalSetup.test.js +35 -1
- package/dist/src/ui/utils/terminalSetup.test.js.map +1 -1
- package/dist/src/ui/utils/textUtils.d.ts +4 -0
- package/dist/src/ui/utils/textUtils.js +10 -1
- package/dist/src/ui/utils/textUtils.js.map +1 -1
- package/dist/src/ui/utils/textUtils.test.js +25 -2
- package/dist/src/ui/utils/textUtils.test.js.map +1 -1
- package/dist/src/ui/utils/toolLayoutUtils.d.ts +44 -0
- package/dist/src/ui/utils/toolLayoutUtils.js +73 -0
- package/dist/src/ui/utils/toolLayoutUtils.js.map +1 -0
- package/dist/src/ui/utils/urlSecurityUtils.d.ts +32 -0
- package/dist/src/ui/utils/urlSecurityUtils.js +71 -0
- package/dist/src/ui/utils/urlSecurityUtils.js.map +1 -0
- package/dist/src/ui/utils/urlSecurityUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/urlSecurityUtils.test.js +49 -0
- package/dist/src/ui/utils/urlSecurityUtils.test.js.map +1 -0
- package/dist/src/utils/activityLogger.js +95 -24
- package/dist/src/utils/activityLogger.js.map +1 -1
- package/dist/src/utils/devtoolsService.js +1 -2
- package/dist/src/utils/devtoolsService.js.map +1 -1
- package/dist/src/utils/devtoolsService.test.js +1 -1
- package/dist/src/utils/devtoolsService.test.js.map +1 -1
- package/dist/src/utils/envVarResolver.js +4 -1
- package/dist/src/utils/envVarResolver.js.map +1 -1
- package/dist/src/utils/gitUtils.js +2 -0
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/jsonoutput.js +2 -0
- package/dist/src/utils/jsonoutput.js.map +1 -1
- package/dist/src/utils/persistentState.d.ts +2 -0
- package/dist/src/utils/persistentState.js +1 -0
- package/dist/src/utils/persistentState.js.map +1 -1
- package/dist/src/utils/readStdin.js +1 -0
- package/dist/src/utils/readStdin.js.map +1 -1
- package/dist/src/utils/sessionUtils.d.ts +1 -6
- package/dist/src/utils/sessionUtils.js +8 -101
- package/dist/src/utils/sessionUtils.js.map +1 -1
- package/dist/src/utils/sessionUtils.test.js +47 -0
- package/dist/src/utils/sessionUtils.test.js.map +1 -1
- package/dist/src/utils/settingsUtils.js +2 -0
- package/dist/src/utils/settingsUtils.js.map +1 -1
- package/dist/src/utils/skillUtils.test.js +7 -5
- package/dist/src/utils/skillUtils.test.js.map +1 -1
- package/dist/src/utils/terminalNotifications.d.ts +25 -0
- package/dist/src/utils/terminalNotifications.js +77 -0
- package/dist/src/utils/terminalNotifications.js.map +1 -0
- package/dist/src/utils/terminalNotifications.test.d.ts +6 -0
- package/dist/src/utils/terminalNotifications.test.js +123 -0
- package/dist/src/utils/terminalNotifications.test.js.map +1 -0
- package/dist/src/utils/userStartupWarnings.d.ts +4 -1
- package/dist/src/utils/userStartupWarnings.js +22 -4
- package/dist/src/utils/userStartupWarnings.js.map +1 -1
- package/dist/src/utils/userStartupWarnings.test.js +53 -11
- package/dist/src/utils/userStartupWarnings.test.js.map +1 -1
- package/dist/src/zed-integration/acpErrors.js +2 -0
- package/dist/src/zed-integration/acpErrors.js.map +1 -1
- package/dist/src/zed-integration/acpResume.test.js +53 -3
- package/dist/src/zed-integration/acpResume.test.js.map +1 -1
- package/dist/src/zed-integration/fileSystemService.js +2 -0
- package/dist/src/zed-integration/fileSystemService.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.d.ts +2 -0
- package/dist/src/zed-integration/zedIntegration.js +77 -6
- package/dist/src/zed-integration/zedIntegration.js.map +1 -1
- package/dist/src/zed-integration/zedIntegration.test.js +176 -2
- package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -7
- package/dist/google-gemini-cli-0.30.0.tgz +0 -0
- package/dist/src/ui/hooks/useFuzzyList.d.ts +0 -25
- package/dist/src/ui/hooks/useFuzzyList.js +0 -100
- package/dist/src/ui/hooks/useFuzzyList.js.map +0 -1
|
@@ -59,7 +59,8 @@ describe('useSelectionList', () => {
|
|
|
59
59
|
hookResult = useSelectionList(props);
|
|
60
60
|
return null;
|
|
61
61
|
}
|
|
62
|
-
const { rerender, unmount } = render(_jsx(TestComponent, { ...initialProps }));
|
|
62
|
+
const { rerender, unmount, waitUntilReady } = render(_jsx(TestComponent, { ...initialProps }));
|
|
63
|
+
await waitUntilReady();
|
|
63
64
|
return {
|
|
64
65
|
result: {
|
|
65
66
|
get current() {
|
|
@@ -67,11 +68,15 @@ describe('useSelectionList', () => {
|
|
|
67
68
|
},
|
|
68
69
|
},
|
|
69
70
|
rerender: async (newProps) => {
|
|
70
|
-
|
|
71
|
+
await act(async () => {
|
|
72
|
+
rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
|
|
73
|
+
});
|
|
74
|
+
await waitUntilReady();
|
|
71
75
|
},
|
|
72
76
|
unmount: async () => {
|
|
73
77
|
unmount();
|
|
74
78
|
},
|
|
79
|
+
waitUntilReady,
|
|
75
80
|
};
|
|
76
81
|
};
|
|
77
82
|
describe('Initialization', () => {
|
|
@@ -147,30 +152,34 @@ describe('useSelectionList', () => {
|
|
|
147
152
|
});
|
|
148
153
|
describe('Keyboard Navigation (Up/Down/J/K)', () => {
|
|
149
154
|
it('should move down with "j" and "down" keys, skipping disabled items', async () => {
|
|
150
|
-
const { result } = await renderSelectionListHook({
|
|
155
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
151
156
|
items,
|
|
152
157
|
onSelect: mockOnSelect,
|
|
153
158
|
});
|
|
154
159
|
expect(result.current.activeIndex).toBe(0);
|
|
155
160
|
pressKey('j');
|
|
161
|
+
await waitUntilReady();
|
|
156
162
|
expect(result.current.activeIndex).toBe(2);
|
|
157
163
|
pressKey('down');
|
|
164
|
+
await waitUntilReady();
|
|
158
165
|
expect(result.current.activeIndex).toBe(3);
|
|
159
166
|
});
|
|
160
167
|
it('should move up with "k" and "up" keys, skipping disabled items', async () => {
|
|
161
|
-
const { result } = await renderSelectionListHook({
|
|
168
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
162
169
|
items,
|
|
163
170
|
initialIndex: 3,
|
|
164
171
|
onSelect: mockOnSelect,
|
|
165
172
|
});
|
|
166
173
|
expect(result.current.activeIndex).toBe(3);
|
|
167
174
|
pressKey('k');
|
|
175
|
+
await waitUntilReady();
|
|
168
176
|
expect(result.current.activeIndex).toBe(2);
|
|
169
177
|
pressKey('up');
|
|
178
|
+
await waitUntilReady();
|
|
170
179
|
expect(result.current.activeIndex).toBe(0);
|
|
171
180
|
});
|
|
172
181
|
it('should ignore navigation keys when shift is pressed', async () => {
|
|
173
|
-
const { result } = await renderSelectionListHook({
|
|
182
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
174
183
|
items,
|
|
175
184
|
initialIndex: 2, // Start at middle item 'C'
|
|
176
185
|
onSelect: mockOnSelect,
|
|
@@ -178,48 +187,57 @@ describe('useSelectionList', () => {
|
|
|
178
187
|
expect(result.current.activeIndex).toBe(2);
|
|
179
188
|
// Shift+Down / Shift+J should not move down
|
|
180
189
|
pressKey('down', undefined, { shift: true });
|
|
190
|
+
await waitUntilReady();
|
|
181
191
|
expect(result.current.activeIndex).toBe(2);
|
|
182
192
|
pressKey('j', undefined, { shift: true });
|
|
193
|
+
await waitUntilReady();
|
|
183
194
|
expect(result.current.activeIndex).toBe(2);
|
|
184
195
|
// Shift+Up / Shift+K should not move up
|
|
185
196
|
pressKey('up', undefined, { shift: true });
|
|
197
|
+
await waitUntilReady();
|
|
186
198
|
expect(result.current.activeIndex).toBe(2);
|
|
187
199
|
pressKey('k', undefined, { shift: true });
|
|
200
|
+
await waitUntilReady();
|
|
188
201
|
expect(result.current.activeIndex).toBe(2);
|
|
189
202
|
// Verify normal navigation still works
|
|
190
203
|
pressKey('down');
|
|
204
|
+
await waitUntilReady();
|
|
191
205
|
expect(result.current.activeIndex).toBe(3);
|
|
192
206
|
});
|
|
193
207
|
it('should wrap navigation correctly', async () => {
|
|
194
|
-
const { result } = await renderSelectionListHook({
|
|
208
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
195
209
|
items,
|
|
196
210
|
initialIndex: items.length - 1,
|
|
197
211
|
onSelect: mockOnSelect,
|
|
198
212
|
});
|
|
199
213
|
expect(result.current.activeIndex).toBe(3);
|
|
200
214
|
pressKey('down');
|
|
215
|
+
await waitUntilReady();
|
|
201
216
|
expect(result.current.activeIndex).toBe(0);
|
|
202
217
|
pressKey('up');
|
|
218
|
+
await waitUntilReady();
|
|
203
219
|
expect(result.current.activeIndex).toBe(3);
|
|
204
220
|
});
|
|
205
221
|
it('should call onHighlight when index changes', async () => {
|
|
206
|
-
await renderSelectionListHook({
|
|
222
|
+
const { waitUntilReady } = await renderSelectionListHook({
|
|
207
223
|
items,
|
|
208
224
|
onSelect: mockOnSelect,
|
|
209
225
|
onHighlight: mockOnHighlight,
|
|
210
226
|
});
|
|
211
227
|
pressKey('down');
|
|
228
|
+
await waitUntilReady();
|
|
212
229
|
expect(mockOnHighlight).toHaveBeenCalledTimes(1);
|
|
213
230
|
expect(mockOnHighlight).toHaveBeenCalledWith('C');
|
|
214
231
|
});
|
|
215
232
|
it('should not move or call onHighlight if navigation results in the same index (e.g., single item)', async () => {
|
|
216
233
|
const singleItem = [{ value: 'A', key: 'A' }];
|
|
217
|
-
const { result } = await renderSelectionListHook({
|
|
234
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
218
235
|
items: singleItem,
|
|
219
236
|
onSelect: mockOnSelect,
|
|
220
237
|
onHighlight: mockOnHighlight,
|
|
221
238
|
});
|
|
222
239
|
pressKey('down');
|
|
240
|
+
await waitUntilReady();
|
|
223
241
|
expect(result.current.activeIndex).toBe(0);
|
|
224
242
|
expect(mockOnHighlight).not.toHaveBeenCalled();
|
|
225
243
|
});
|
|
@@ -228,32 +246,35 @@ describe('useSelectionList', () => {
|
|
|
228
246
|
{ value: 'A', disabled: true, key: 'A' },
|
|
229
247
|
{ value: 'B', disabled: true, key: 'B' },
|
|
230
248
|
];
|
|
231
|
-
const { result } = await renderSelectionListHook({
|
|
249
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
232
250
|
items: allDisabled,
|
|
233
251
|
onSelect: mockOnSelect,
|
|
234
252
|
onHighlight: mockOnHighlight,
|
|
235
253
|
});
|
|
236
254
|
const initialIndex = result.current.activeIndex;
|
|
237
255
|
pressKey('down');
|
|
256
|
+
await waitUntilReady();
|
|
238
257
|
expect(result.current.activeIndex).toBe(initialIndex);
|
|
239
258
|
expect(mockOnHighlight).not.toHaveBeenCalled();
|
|
240
259
|
});
|
|
241
260
|
});
|
|
242
261
|
describe('Wrapping (wrapAround)', () => {
|
|
243
262
|
it('should wrap by default (wrapAround=true)', async () => {
|
|
244
|
-
const { result } = await renderSelectionListHook({
|
|
263
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
245
264
|
items,
|
|
246
265
|
initialIndex: items.length - 1,
|
|
247
266
|
onSelect: mockOnSelect,
|
|
248
267
|
});
|
|
249
268
|
expect(result.current.activeIndex).toBe(3);
|
|
250
269
|
pressKey('down');
|
|
270
|
+
await waitUntilReady();
|
|
251
271
|
expect(result.current.activeIndex).toBe(0);
|
|
252
272
|
pressKey('up');
|
|
273
|
+
await waitUntilReady();
|
|
253
274
|
expect(result.current.activeIndex).toBe(3);
|
|
254
275
|
});
|
|
255
276
|
it('should not wrap when wrapAround is false', async () => {
|
|
256
|
-
const { result } = await renderSelectionListHook({
|
|
277
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
257
278
|
items,
|
|
258
279
|
initialIndex: items.length - 1,
|
|
259
280
|
onSelect: mockOnSelect,
|
|
@@ -261,37 +282,43 @@ describe('useSelectionList', () => {
|
|
|
261
282
|
});
|
|
262
283
|
expect(result.current.activeIndex).toBe(3);
|
|
263
284
|
pressKey('down');
|
|
285
|
+
await waitUntilReady();
|
|
264
286
|
expect(result.current.activeIndex).toBe(3); // Should stay at bottom
|
|
265
287
|
act(() => result.current.setActiveIndex(0));
|
|
288
|
+
await waitUntilReady();
|
|
266
289
|
expect(result.current.activeIndex).toBe(0);
|
|
267
290
|
pressKey('up');
|
|
291
|
+
await waitUntilReady();
|
|
268
292
|
expect(result.current.activeIndex).toBe(0); // Should stay at top
|
|
269
293
|
});
|
|
270
294
|
});
|
|
271
295
|
describe('Selection (Enter)', () => {
|
|
272
296
|
it('should call onSelect when "return" is pressed on enabled item', async () => {
|
|
273
|
-
await renderSelectionListHook({
|
|
297
|
+
const { waitUntilReady } = await renderSelectionListHook({
|
|
274
298
|
items,
|
|
275
299
|
initialIndex: 2,
|
|
276
300
|
onSelect: mockOnSelect,
|
|
277
301
|
});
|
|
278
302
|
pressKey('return');
|
|
303
|
+
await waitUntilReady();
|
|
279
304
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
280
305
|
expect(mockOnSelect).toHaveBeenCalledWith('C');
|
|
281
306
|
});
|
|
282
307
|
it('should not call onSelect if the active item is disabled', async () => {
|
|
283
|
-
const { result } = await renderSelectionListHook({
|
|
308
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
284
309
|
items,
|
|
285
310
|
onSelect: mockOnSelect,
|
|
286
311
|
});
|
|
287
312
|
act(() => result.current.setActiveIndex(1));
|
|
313
|
+
await waitUntilReady();
|
|
288
314
|
pressKey('return');
|
|
315
|
+
await waitUntilReady();
|
|
289
316
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
290
317
|
});
|
|
291
318
|
});
|
|
292
319
|
describe('Keyboard Navigation Robustness (Rapid Input)', () => {
|
|
293
320
|
it('should handle rapid navigation and selection robustly (avoiding stale state)', async () => {
|
|
294
|
-
const { result } = await renderSelectionListHook({
|
|
321
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
295
322
|
items, // A, B(disabled), C, D. Initial index 0 (A).
|
|
296
323
|
onSelect: mockOnSelect,
|
|
297
324
|
onHighlight: mockOnHighlight,
|
|
@@ -316,14 +343,17 @@ describe('useSelectionList', () => {
|
|
|
316
343
|
act(() => {
|
|
317
344
|
press('down');
|
|
318
345
|
});
|
|
346
|
+
await waitUntilReady();
|
|
319
347
|
// 2. Press Down again. Should move 2 (C) -> 3 (D).
|
|
320
348
|
act(() => {
|
|
321
349
|
press('down');
|
|
322
350
|
});
|
|
351
|
+
await waitUntilReady();
|
|
323
352
|
// 3. Press Enter. Should select D.
|
|
324
353
|
act(() => {
|
|
325
354
|
press('return');
|
|
326
355
|
});
|
|
356
|
+
await waitUntilReady();
|
|
327
357
|
expect(result.current.activeIndex).toBe(3);
|
|
328
358
|
expect(mockOnHighlight).toHaveBeenCalledTimes(2);
|
|
329
359
|
expect(mockOnHighlight).toHaveBeenNthCalledWith(1, 'C');
|
|
@@ -333,7 +363,7 @@ describe('useSelectionList', () => {
|
|
|
333
363
|
expect(mockOnSelect).not.toHaveBeenCalledWith('A');
|
|
334
364
|
});
|
|
335
365
|
it('should handle ultra-rapid input (multiple presses in single act) without stale state', async () => {
|
|
336
|
-
const { result } = await renderSelectionListHook({
|
|
366
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
337
367
|
items, // A, B(disabled), C, D. Initial index 0 (A).
|
|
338
368
|
onSelect: mockOnSelect,
|
|
339
369
|
onHighlight: mockOnHighlight,
|
|
@@ -360,6 +390,7 @@ describe('useSelectionList', () => {
|
|
|
360
390
|
press('down'); // Should move 2 (C) -> 3 (D)
|
|
361
391
|
press('return'); // Should select D
|
|
362
392
|
});
|
|
393
|
+
await waitUntilReady();
|
|
363
394
|
expect(result.current.activeIndex).toBe(3);
|
|
364
395
|
expect(mockOnHighlight).toHaveBeenCalledWith('D');
|
|
365
396
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
@@ -368,12 +399,13 @@ describe('useSelectionList', () => {
|
|
|
368
399
|
});
|
|
369
400
|
describe('Focus Management (isFocused)', () => {
|
|
370
401
|
it('should activate the keypress handler when focused (default) and items exist', async () => {
|
|
371
|
-
const { result } = await renderSelectionListHook({
|
|
402
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
372
403
|
items,
|
|
373
404
|
onSelect: mockOnSelect,
|
|
374
405
|
});
|
|
375
406
|
expect(activeKeypressHandler).not.toBeNull();
|
|
376
407
|
pressKey('down');
|
|
408
|
+
await waitUntilReady();
|
|
377
409
|
expect(result.current.activeIndex).toBe(2);
|
|
378
410
|
});
|
|
379
411
|
it('should not activate the keypress handler when isFocused is false', async () => {
|
|
@@ -395,7 +427,7 @@ describe('useSelectionList', () => {
|
|
|
395
427
|
expect(() => pressKey('down')).toThrow(/keypress handler is not active/);
|
|
396
428
|
});
|
|
397
429
|
it('should activate/deactivate when isFocused prop changes', async () => {
|
|
398
|
-
const { result, rerender } = await renderSelectionListHook({
|
|
430
|
+
const { result, rerender, waitUntilReady } = await renderSelectionListHook({
|
|
399
431
|
items,
|
|
400
432
|
onSelect: mockOnSelect,
|
|
401
433
|
isFocused: false,
|
|
@@ -404,6 +436,7 @@ describe('useSelectionList', () => {
|
|
|
404
436
|
await rerender({ isFocused: true });
|
|
405
437
|
expect(activeKeypressHandler).not.toBeNull();
|
|
406
438
|
pressKey('down');
|
|
439
|
+
await waitUntilReady();
|
|
407
440
|
expect(result.current.activeIndex).toBe(2);
|
|
408
441
|
await rerender({ isFocused: false });
|
|
409
442
|
expect(activeKeypressHandler).toBeNull();
|
|
@@ -421,22 +454,24 @@ describe('useSelectionList', () => {
|
|
|
421
454
|
const longList = Array.from({ length: 15 }, (_, i) => ({ value: `Item ${i + 1}`, key: `Item ${i + 1}` }));
|
|
422
455
|
const pressNumber = (num) => pressKey(num, num);
|
|
423
456
|
it('should not respond to numbers if showNumbers is false (default)', async () => {
|
|
424
|
-
const { result } = await renderSelectionListHook({
|
|
457
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
425
458
|
items: shortList,
|
|
426
459
|
onSelect: mockOnSelect,
|
|
427
460
|
});
|
|
428
461
|
pressNumber('1');
|
|
462
|
+
await waitUntilReady();
|
|
429
463
|
expect(result.current.activeIndex).toBe(0);
|
|
430
464
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
431
465
|
});
|
|
432
466
|
it('should select item immediately if the number cannot be extended (unambiguous)', async () => {
|
|
433
|
-
const { result } = await renderSelectionListHook({
|
|
467
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
434
468
|
items: shortList,
|
|
435
469
|
onSelect: mockOnSelect,
|
|
436
470
|
onHighlight: mockOnHighlight,
|
|
437
471
|
showNumbers: true,
|
|
438
472
|
});
|
|
439
473
|
pressNumber('3');
|
|
474
|
+
await waitUntilReady();
|
|
440
475
|
expect(result.current.activeIndex).toBe(2);
|
|
441
476
|
expect(mockOnHighlight).toHaveBeenCalledWith('C');
|
|
442
477
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
@@ -444,7 +479,7 @@ describe('useSelectionList', () => {
|
|
|
444
479
|
expect(vi.getTimerCount()).toBe(0);
|
|
445
480
|
});
|
|
446
481
|
it('should highlight and wait for timeout if the number can be extended (ambiguous)', async () => {
|
|
447
|
-
const { result } = await renderSelectionListHook({
|
|
482
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
448
483
|
items: longList,
|
|
449
484
|
initialIndex: 1, // Start at index 1 so pressing "1" (index 0) causes a change
|
|
450
485
|
onSelect: mockOnSelect,
|
|
@@ -452,82 +487,94 @@ describe('useSelectionList', () => {
|
|
|
452
487
|
showNumbers: true,
|
|
453
488
|
});
|
|
454
489
|
pressNumber('1');
|
|
490
|
+
await waitUntilReady();
|
|
455
491
|
expect(result.current.activeIndex).toBe(0);
|
|
456
492
|
expect(mockOnHighlight).toHaveBeenCalledWith('Item 1');
|
|
457
493
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
458
494
|
expect(vi.getTimerCount()).toBe(1);
|
|
459
|
-
act(() => {
|
|
495
|
+
await act(async () => {
|
|
460
496
|
vi.advanceTimersByTime(1000);
|
|
461
497
|
});
|
|
498
|
+
await waitUntilReady();
|
|
462
499
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
463
500
|
expect(mockOnSelect).toHaveBeenCalledWith('Item 1');
|
|
464
501
|
});
|
|
465
502
|
it('should handle multi-digit input correctly', async () => {
|
|
466
|
-
const { result } = await renderSelectionListHook({
|
|
503
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
467
504
|
items: longList,
|
|
468
505
|
onSelect: mockOnSelect,
|
|
469
506
|
showNumbers: true,
|
|
470
507
|
});
|
|
471
508
|
pressNumber('1');
|
|
509
|
+
await waitUntilReady();
|
|
472
510
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
473
511
|
pressNumber('2');
|
|
512
|
+
await waitUntilReady();
|
|
474
513
|
expect(result.current.activeIndex).toBe(11);
|
|
475
514
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
476
515
|
expect(mockOnSelect).toHaveBeenCalledWith('Item 12');
|
|
477
516
|
});
|
|
478
517
|
it('should reset buffer if input becomes invalid (out of bounds)', async () => {
|
|
479
|
-
const { result } = await renderSelectionListHook({
|
|
518
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
480
519
|
items: shortList,
|
|
481
520
|
onSelect: mockOnSelect,
|
|
482
521
|
showNumbers: true,
|
|
483
522
|
});
|
|
484
523
|
pressNumber('5');
|
|
524
|
+
await waitUntilReady();
|
|
485
525
|
expect(result.current.activeIndex).toBe(0);
|
|
486
526
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
487
527
|
pressNumber('3');
|
|
528
|
+
await waitUntilReady();
|
|
488
529
|
expect(result.current.activeIndex).toBe(2);
|
|
489
530
|
expect(mockOnSelect).toHaveBeenCalledWith('C');
|
|
490
531
|
});
|
|
491
532
|
it('should allow "0" as subsequent digit, but ignore as first digit', async () => {
|
|
492
|
-
const { result } = await renderSelectionListHook({
|
|
533
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
493
534
|
items: longList,
|
|
494
535
|
onSelect: mockOnSelect,
|
|
495
536
|
showNumbers: true,
|
|
496
537
|
});
|
|
497
538
|
pressNumber('0');
|
|
539
|
+
await waitUntilReady();
|
|
498
540
|
expect(result.current.activeIndex).toBe(0);
|
|
499
541
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
500
542
|
// Timer should be running to clear the '0' input buffer
|
|
501
543
|
expect(vi.getTimerCount()).toBe(1);
|
|
502
544
|
// Press '1', then '0' (Item 10, index 9)
|
|
503
545
|
pressNumber('1');
|
|
546
|
+
await waitUntilReady();
|
|
504
547
|
pressNumber('0');
|
|
548
|
+
await waitUntilReady();
|
|
505
549
|
expect(result.current.activeIndex).toBe(9);
|
|
506
550
|
expect(mockOnSelect).toHaveBeenCalledWith('Item 10');
|
|
507
551
|
});
|
|
508
552
|
it('should clear the initial "0" input after timeout', async () => {
|
|
509
|
-
await renderSelectionListHook({
|
|
553
|
+
const { waitUntilReady } = await renderSelectionListHook({
|
|
510
554
|
items: longList,
|
|
511
555
|
onSelect: mockOnSelect,
|
|
512
556
|
showNumbers: true,
|
|
513
557
|
});
|
|
514
558
|
pressNumber('0');
|
|
515
|
-
|
|
516
|
-
act(() => vi.advanceTimersByTime(1000)); // Timeout the '0' input
|
|
559
|
+
await waitUntilReady();
|
|
560
|
+
await act(async () => vi.advanceTimersByTime(1000)); // Timeout the '0' input
|
|
561
|
+
await waitUntilReady();
|
|
517
562
|
pressNumber('1');
|
|
563
|
+
await waitUntilReady();
|
|
518
564
|
expect(mockOnSelect).not.toHaveBeenCalled(); // Should be waiting for second digit
|
|
519
|
-
//
|
|
520
|
-
|
|
565
|
+
await act(async () => vi.advanceTimersByTime(1000)); // Timeout '1'
|
|
566
|
+
await waitUntilReady();
|
|
521
567
|
expect(mockOnSelect).toHaveBeenCalledWith('Item 1');
|
|
522
568
|
});
|
|
523
569
|
it('should highlight but not select a disabled item (immediate selection case)', async () => {
|
|
524
|
-
const { result } = await renderSelectionListHook({
|
|
570
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
525
571
|
items: shortList, // B (index 1, number 2) is disabled
|
|
526
572
|
onSelect: mockOnSelect,
|
|
527
573
|
onHighlight: mockOnHighlight,
|
|
528
574
|
showNumbers: true,
|
|
529
575
|
});
|
|
530
576
|
pressNumber('2');
|
|
577
|
+
await waitUntilReady();
|
|
531
578
|
expect(result.current.activeIndex).toBe(1);
|
|
532
579
|
expect(mockOnHighlight).toHaveBeenCalledWith('B');
|
|
533
580
|
// Should not select immediately, even though 20 > 4
|
|
@@ -539,48 +586,56 @@ describe('useSelectionList', () => {
|
|
|
539
586
|
{ value: 'Item 1 Disabled', disabled: true, key: 'Item 1 Disabled' },
|
|
540
587
|
...longList.slice(1),
|
|
541
588
|
];
|
|
542
|
-
const { result } = await renderSelectionListHook({
|
|
589
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
543
590
|
items: disabledAmbiguousList,
|
|
544
591
|
onSelect: mockOnSelect,
|
|
545
592
|
showNumbers: true,
|
|
546
593
|
});
|
|
547
594
|
pressNumber('1');
|
|
595
|
+
await waitUntilReady();
|
|
548
596
|
expect(result.current.activeIndex).toBe(0);
|
|
549
597
|
expect(vi.getTimerCount()).toBe(1);
|
|
550
|
-
act(() => {
|
|
598
|
+
await act(async () => {
|
|
551
599
|
vi.advanceTimersByTime(1000);
|
|
552
600
|
});
|
|
601
|
+
await waitUntilReady();
|
|
553
602
|
// Should not select after timeout
|
|
554
603
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
555
604
|
});
|
|
556
605
|
it('should clear the number buffer if a non-numeric key (e.g., navigation) is pressed', async () => {
|
|
557
|
-
const { result } = await renderSelectionListHook({
|
|
606
|
+
const { result, waitUntilReady } = await renderSelectionListHook({
|
|
558
607
|
items: longList,
|
|
559
608
|
onSelect: mockOnSelect,
|
|
560
609
|
showNumbers: true,
|
|
561
610
|
});
|
|
562
611
|
pressNumber('1');
|
|
612
|
+
await waitUntilReady();
|
|
563
613
|
expect(vi.getTimerCount()).toBe(1);
|
|
564
614
|
pressKey('down');
|
|
615
|
+
await waitUntilReady();
|
|
565
616
|
expect(result.current.activeIndex).toBe(1);
|
|
566
617
|
expect(vi.getTimerCount()).toBe(0);
|
|
567
618
|
pressNumber('3');
|
|
619
|
+
await waitUntilReady();
|
|
568
620
|
// Should select '3', not '13'
|
|
569
621
|
expect(result.current.activeIndex).toBe(2);
|
|
570
622
|
});
|
|
571
623
|
it('should clear the number buffer if "return" is pressed', async () => {
|
|
572
|
-
await renderSelectionListHook({
|
|
624
|
+
const { waitUntilReady } = await renderSelectionListHook({
|
|
573
625
|
items: longList,
|
|
574
626
|
onSelect: mockOnSelect,
|
|
575
627
|
showNumbers: true,
|
|
576
628
|
});
|
|
577
629
|
pressNumber('1');
|
|
630
|
+
await waitUntilReady();
|
|
578
631
|
pressKey('return');
|
|
632
|
+
await waitUntilReady();
|
|
579
633
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
580
634
|
expect(vi.getTimerCount()).toBe(0);
|
|
581
|
-
act(() => {
|
|
635
|
+
await act(async () => {
|
|
582
636
|
vi.advanceTimersByTime(1000);
|
|
583
637
|
});
|
|
638
|
+
await waitUntilReady();
|
|
584
639
|
expect(mockOnSelect).toHaveBeenCalledTimes(1);
|
|
585
640
|
});
|
|
586
641
|
});
|
|
@@ -597,13 +652,14 @@ describe('useSelectionList', () => {
|
|
|
597
652
|
});
|
|
598
653
|
});
|
|
599
654
|
it('should respect a new initialIndex even after user interaction', async () => {
|
|
600
|
-
const { result, rerender } = await renderSelectionListHook({
|
|
655
|
+
const { result, rerender, waitUntilReady } = await renderSelectionListHook({
|
|
601
656
|
items,
|
|
602
657
|
onSelect: mockOnSelect,
|
|
603
658
|
initialIndex: 0,
|
|
604
659
|
});
|
|
605
660
|
// User navigates, changing the active index
|
|
606
661
|
pressKey('down');
|
|
662
|
+
await waitUntilReady();
|
|
607
663
|
expect(result.current.activeIndex).toBe(2);
|
|
608
664
|
// The component re-renders with a new initial index
|
|
609
665
|
await rerender({ initialIndex: 3 });
|
|
@@ -680,16 +736,17 @@ describe('useSelectionList', () => {
|
|
|
680
736
|
{ value: 'C', key: 'C' },
|
|
681
737
|
{ value: 'D', key: 'D' },
|
|
682
738
|
];
|
|
683
|
-
const { result, rerender } = await renderSelectionListHook({
|
|
739
|
+
const { result, rerender, waitUntilReady } = await renderSelectionListHook({
|
|
684
740
|
onSelect: mockOnSelect,
|
|
685
741
|
onHighlight: mockOnHighlight,
|
|
686
742
|
initialIndex: 2,
|
|
687
743
|
items: initialItems,
|
|
688
744
|
});
|
|
689
745
|
expect(result.current.activeIndex).toBe(2);
|
|
690
|
-
act(() => {
|
|
746
|
+
await act(async () => {
|
|
691
747
|
result.current.setActiveIndex(3);
|
|
692
748
|
});
|
|
749
|
+
await waitUntilReady();
|
|
693
750
|
expect(result.current.activeIndex).toBe(3);
|
|
694
751
|
mockOnHighlight.mockClear();
|
|
695
752
|
// Create new array with same content (deeply equal but not identical)
|
|
@@ -764,11 +821,12 @@ describe('useSelectionList', () => {
|
|
|
764
821
|
{ value: 'B', key: 'B' },
|
|
765
822
|
{ value: 'C', key: 'C' },
|
|
766
823
|
];
|
|
767
|
-
const { result, rerender } = await renderSelectionListHook({
|
|
824
|
+
const { result, rerender, waitUntilReady } = await renderSelectionListHook({
|
|
768
825
|
onSelect: mockOnSelect,
|
|
769
826
|
items: initialItems,
|
|
770
827
|
});
|
|
771
828
|
pressKey('down');
|
|
829
|
+
await waitUntilReady();
|
|
772
830
|
expect(result.current.activeIndex).toBe(1);
|
|
773
831
|
const newItems = [
|
|
774
832
|
{ value: 'D', key: 'D' },
|
|
@@ -797,10 +855,14 @@ describe('useSelectionList', () => {
|
|
|
797
855
|
});
|
|
798
856
|
return null;
|
|
799
857
|
}
|
|
800
|
-
const { rerender } = render(_jsx(TestComponent, { ...initialProps }));
|
|
858
|
+
const { rerender, waitUntilReady } = render(_jsx(TestComponent, { ...initialProps }));
|
|
859
|
+
await waitUntilReady();
|
|
801
860
|
return {
|
|
802
861
|
rerender: async (newProps) => {
|
|
803
|
-
|
|
862
|
+
await act(async () => {
|
|
863
|
+
rerender(_jsx(TestComponent, { ...initialProps, ...newProps }));
|
|
864
|
+
});
|
|
865
|
+
await waitUntilReady();
|
|
804
866
|
},
|
|
805
867
|
};
|
|
806
868
|
};
|
|
@@ -825,22 +887,26 @@ describe('useSelectionList', () => {
|
|
|
825
887
|
});
|
|
826
888
|
it('should clear timeout on unmount when timer is active', async () => {
|
|
827
889
|
const longList = Array.from({ length: 15 }, (_, i) => ({ value: `Item ${i + 1}`, key: `Item ${i + 1}` }));
|
|
828
|
-
const { unmount } = await renderSelectionListHook({
|
|
890
|
+
const { unmount, waitUntilReady } = await renderSelectionListHook({
|
|
829
891
|
items: longList,
|
|
830
892
|
onSelect: mockOnSelect,
|
|
831
893
|
showNumbers: true,
|
|
832
894
|
});
|
|
833
895
|
pressKey('1', '1');
|
|
896
|
+
await waitUntilReady();
|
|
834
897
|
expect(vi.getTimerCount()).toBe(1);
|
|
835
|
-
act(() => {
|
|
898
|
+
await act(async () => {
|
|
836
899
|
vi.advanceTimersByTime(500);
|
|
837
900
|
});
|
|
901
|
+
await waitUntilReady();
|
|
838
902
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
903
|
+
const clearTimeoutSpy = vi.spyOn(global, 'clearTimeout');
|
|
839
904
|
await unmount();
|
|
840
|
-
expect(
|
|
841
|
-
act(() => {
|
|
905
|
+
expect(clearTimeoutSpy).toHaveBeenCalled();
|
|
906
|
+
await act(async () => {
|
|
842
907
|
vi.advanceTimersByTime(1000);
|
|
843
908
|
});
|
|
909
|
+
// No waitUntilReady here as component is unmounted
|
|
844
910
|
expect(mockOnSelect).not.toHaveBeenCalled();
|
|
845
911
|
});
|
|
846
912
|
});
|