@google/gemini-cli 0.25.0-nightly.20260112.15891721a → 0.25.0-preview.0

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.
Files changed (255) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/commands/extensions/examples/mcp-server/example.d.ts +6 -0
  3. package/dist/src/commands/extensions/examples/mcp-server/example.js +22 -36
  4. package/dist/src/commands/extensions/examples/mcp-server/example.js.map +1 -0
  5. package/dist/src/commands/extensions/examples/mcp-server/example.test.d.ts +6 -0
  6. package/dist/src/commands/extensions/examples/mcp-server/example.test.js +111 -0
  7. package/dist/src/commands/extensions/examples/mcp-server/example.test.js.map +1 -0
  8. package/dist/src/commands/extensions/examples/mcp-server/example.test.ts +135 -0
  9. package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
  10. package/dist/src/commands/extensions/examples/mcp-server/gemini-extension.json +1 -1
  11. package/dist/src/commands/extensions/examples/mcp-server/package.json +7 -0
  12. package/dist/src/commands/extensions/examples/mcp-server/tsconfig.json +13 -0
  13. package/dist/src/commands/extensions/utils.d.ts +1 -1
  14. package/dist/src/commands/skills/disable.js +1 -1
  15. package/dist/src/commands/skills/disable.js.map +1 -1
  16. package/dist/src/commands/skills/disable.test.js +1 -1
  17. package/dist/src/commands/skills/disable.test.js.map +1 -1
  18. package/dist/src/commands/skills/install.d.ts +14 -0
  19. package/dist/src/commands/skills/install.js +61 -0
  20. package/dist/src/commands/skills/install.js.map +1 -0
  21. package/dist/src/commands/skills/install.test.d.ts +6 -0
  22. package/dist/src/commands/skills/install.test.js +57 -0
  23. package/dist/src/commands/skills/install.test.js.map +1 -0
  24. package/dist/src/commands/skills/list.js +1 -1
  25. package/dist/src/commands/skills/list.js.map +1 -1
  26. package/dist/src/commands/skills/list.test.js +1 -1
  27. package/dist/src/commands/skills/list.test.js.map +1 -1
  28. package/dist/src/commands/skills/uninstall.d.ts +13 -0
  29. package/dist/src/commands/skills/uninstall.js +56 -0
  30. package/dist/src/commands/skills/uninstall.js.map +1 -0
  31. package/dist/src/commands/skills/uninstall.test.d.ts +6 -0
  32. package/dist/src/commands/skills/uninstall.test.js +61 -0
  33. package/dist/src/commands/skills/uninstall.test.js.map +1 -0
  34. package/dist/src/commands/skills.js +4 -0
  35. package/dist/src/commands/skills.js.map +1 -1
  36. package/dist/src/config/config.js +5 -0
  37. package/dist/src/config/config.js.map +1 -1
  38. package/dist/src/config/extension-manager-agents.test.d.ts +6 -0
  39. package/dist/src/config/extension-manager-agents.test.js +115 -0
  40. package/dist/src/config/extension-manager-agents.test.js.map +1 -0
  41. package/dist/src/config/extension-manager-scope.test.js +11 -0
  42. package/dist/src/config/extension-manager-scope.test.js.map +1 -1
  43. package/dist/src/config/extension-manager-skills.test.js +4 -0
  44. package/dist/src/config/extension-manager-skills.test.js.map +1 -1
  45. package/dist/src/config/extension-manager.js +7 -1
  46. package/dist/src/config/extension-manager.js.map +1 -1
  47. package/dist/src/config/extension.test.js +10 -1
  48. package/dist/src/config/extension.test.js.map +1 -1
  49. package/dist/src/config/keyBindings.d.ts +14 -2
  50. package/dist/src/config/keyBindings.js +85 -10
  51. package/dist/src/config/keyBindings.js.map +1 -1
  52. package/dist/src/config/settings.js +8 -9
  53. package/dist/src/config/settings.js.map +1 -1
  54. package/dist/src/config/settingsSchema.d.ts +66 -2
  55. package/dist/src/config/settingsSchema.js +99 -2
  56. package/dist/src/config/settingsSchema.js.map +1 -1
  57. package/dist/src/gemini.js +12 -6
  58. package/dist/src/gemini.js.map +1 -1
  59. package/dist/src/generated/git-commit.d.ts +2 -2
  60. package/dist/src/generated/git-commit.js +2 -2
  61. package/dist/src/generated/git-commit.js.map +1 -1
  62. package/dist/src/services/BuiltinCommandLoader.js +18 -1
  63. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  64. package/dist/src/test-utils/render.js +1 -0
  65. package/dist/src/test-utils/render.js.map +1 -1
  66. package/dist/src/ui/AppContainer.js +103 -40
  67. package/dist/src/ui/AppContainer.js.map +1 -1
  68. package/dist/src/ui/AppContainer.test.js +214 -41
  69. package/dist/src/ui/AppContainer.test.js.map +1 -1
  70. package/dist/src/ui/auth/AuthDialog.d.ts +4 -1
  71. package/dist/src/ui/auth/AuthDialog.js +8 -2
  72. package/dist/src/ui/auth/AuthDialog.js.map +1 -1
  73. package/dist/src/ui/auth/AuthDialog.test.js +17 -0
  74. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -1
  75. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.d.ts +10 -0
  76. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.js +27 -0
  77. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.js.map +1 -0
  78. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.d.ts +6 -0
  79. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js +68 -0
  80. package/dist/src/ui/auth/LoginWithGoogleRestartDialog.test.js.map +1 -0
  81. package/dist/src/ui/commands/aboutCommand.js +1 -1
  82. package/dist/src/ui/commands/aboutCommand.js.map +1 -1
  83. package/dist/src/ui/commands/aboutCommand.test.js +4 -4
  84. package/dist/src/ui/commands/aboutCommand.test.js.map +1 -1
  85. package/dist/src/ui/commands/agentsCommand.js +5 -1
  86. package/dist/src/ui/commands/agentsCommand.js.map +1 -1
  87. package/dist/src/ui/commands/agentsCommand.test.js +1 -1
  88. package/dist/src/ui/commands/agentsCommand.test.js.map +1 -1
  89. package/dist/src/ui/commands/chatCommand.js +1 -1
  90. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  91. package/dist/src/ui/commands/chatCommand.test.js +1 -1
  92. package/dist/src/ui/commands/chatCommand.test.js.map +1 -1
  93. package/dist/src/ui/commands/directoryCommand.js +9 -9
  94. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  95. package/dist/src/ui/commands/directoryCommand.test.js +9 -9
  96. package/dist/src/ui/commands/directoryCommand.test.js.map +1 -1
  97. package/dist/src/ui/commands/extensionsCommand.js +36 -36
  98. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  99. package/dist/src/ui/commands/extensionsCommand.test.js +36 -36
  100. package/dist/src/ui/commands/extensionsCommand.test.js.map +1 -1
  101. package/dist/src/ui/commands/helpCommand.js +1 -1
  102. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  103. package/dist/src/ui/commands/helpCommand.test.js +1 -1
  104. package/dist/src/ui/commands/helpCommand.test.js.map +1 -1
  105. package/dist/src/ui/commands/hooksCommand.js +1 -1
  106. package/dist/src/ui/commands/hooksCommand.js.map +1 -1
  107. package/dist/src/ui/commands/hooksCommand.test.js +4 -4
  108. package/dist/src/ui/commands/hooksCommand.test.js.map +1 -1
  109. package/dist/src/ui/commands/mcpCommand.js +6 -6
  110. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  111. package/dist/src/ui/commands/mcpCommand.test.js +3 -3
  112. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  113. package/dist/src/ui/commands/memoryCommand.js +18 -43
  114. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  115. package/dist/src/ui/commands/memoryCommand.test.js +85 -15
  116. package/dist/src/ui/commands/memoryCommand.test.js.map +1 -1
  117. package/dist/src/ui/commands/skillsCommand.js +23 -8
  118. package/dist/src/ui/commands/skillsCommand.js.map +1 -1
  119. package/dist/src/ui/commands/skillsCommand.test.js +33 -12
  120. package/dist/src/ui/commands/skillsCommand.test.js.map +1 -1
  121. package/dist/src/ui/commands/statsCommand.js +4 -4
  122. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  123. package/dist/src/ui/commands/statsCommand.test.js +4 -4
  124. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  125. package/dist/src/ui/commands/toolsCommand.js +2 -2
  126. package/dist/src/ui/commands/toolsCommand.js.map +1 -1
  127. package/dist/src/ui/commands/toolsCommand.test.js +2 -2
  128. package/dist/src/ui/commands/toolsCommand.test.js.map +1 -1
  129. package/dist/src/ui/components/DialogManager.js +1 -1
  130. package/dist/src/ui/components/DialogManager.js.map +1 -1
  131. package/dist/src/ui/components/Help.js +1 -1
  132. package/dist/src/ui/components/Help.js.map +1 -1
  133. package/dist/src/ui/components/InputPrompt.js +18 -7
  134. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  135. package/dist/src/ui/components/InputPrompt.test.js +64 -1
  136. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  137. package/dist/src/ui/components/MainContent.js +6 -9
  138. package/dist/src/ui/components/MainContent.js.map +1 -1
  139. package/dist/src/ui/components/MainContent.test.js +19 -9
  140. package/dist/src/ui/components/MainContent.test.js.map +1 -1
  141. package/dist/src/ui/components/ModelDialog.js +1 -1
  142. package/dist/src/ui/components/ModelDialog.js.map +1 -1
  143. package/dist/src/ui/components/MultiFolderTrustDialog.d.ts +2 -2
  144. package/dist/src/ui/components/MultiFolderTrustDialog.js +1 -1
  145. package/dist/src/ui/components/MultiFolderTrustDialog.js.map +1 -1
  146. package/dist/src/ui/components/MultiFolderTrustDialog.test.js +2 -2
  147. package/dist/src/ui/components/MultiFolderTrustDialog.test.js.map +1 -1
  148. package/dist/src/ui/components/SettingsDialog.test.js +5 -2
  149. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  150. package/dist/src/ui/components/StickyHeader.d.ts +2 -0
  151. package/dist/src/ui/components/StickyHeader.js +1 -1
  152. package/dist/src/ui/components/StickyHeader.js.map +1 -1
  153. package/dist/src/ui/components/messages/DiffRenderer.js +5 -13
  154. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -1
  155. package/dist/src/ui/components/messages/DiffRenderer.test.js +26 -17
  156. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -1
  157. package/dist/src/ui/components/messages/ShellToolMessage.js +8 -5
  158. package/dist/src/ui/components/messages/ShellToolMessage.js.map +1 -1
  159. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +1 -5
  160. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  161. package/dist/src/ui/components/messages/ToolMessage.js +6 -2
  162. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  163. package/dist/src/ui/components/messages/ToolResultDisplay.js +22 -16
  164. package/dist/src/ui/components/messages/ToolResultDisplay.js.map +1 -1
  165. package/dist/src/ui/components/messages/ToolResultDisplay.test.js +36 -18
  166. package/dist/src/ui/components/messages/ToolResultDisplay.test.js.map +1 -1
  167. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.d.ts +6 -0
  168. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js +134 -0
  169. package/dist/src/ui/components/messages/ToolStickyHeaderRegression.test.js.map +1 -0
  170. package/dist/src/ui/components/shared/MaxSizedBox.d.ts +2 -38
  171. package/dist/src/ui/components/shared/MaxSizedBox.js +34 -419
  172. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  173. package/dist/src/ui/components/shared/MaxSizedBox.test.js +48 -133
  174. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  175. package/dist/src/ui/components/shared/text-buffer.d.ts +4 -4
  176. package/dist/src/ui/components/shared/text-buffer.js +35 -38
  177. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  178. package/dist/src/ui/components/views/AgentsStatus.js +3 -3
  179. package/dist/src/ui/components/views/AgentsStatus.js.map +1 -1
  180. package/dist/src/ui/constants/tips.js +1 -1
  181. package/dist/src/ui/constants/tips.js.map +1 -1
  182. package/dist/src/ui/constants.d.ts +1 -0
  183. package/dist/src/ui/constants.js +1 -0
  184. package/dist/src/ui/constants.js.map +1 -1
  185. package/dist/src/ui/contexts/KeypressContext.js +28 -0
  186. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  187. package/dist/src/ui/contexts/KeypressContext.test.js +31 -1
  188. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  189. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -0
  190. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  191. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +2 -1
  192. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +5 -4
  193. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -1
  194. package/dist/src/ui/hooks/useCommandCompletion.d.ts +1 -0
  195. package/dist/src/ui/hooks/useCommandCompletion.js +1 -0
  196. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  197. package/dist/src/ui/hooks/useCommandCompletion.test.js +7 -2
  198. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  199. package/dist/src/ui/hooks/useExtensionUpdates.test.js +11 -2
  200. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -1
  201. package/dist/src/ui/hooks/useGeminiStream.d.ts +2 -1
  202. package/dist/src/ui/hooks/useGeminiStream.js +34 -14
  203. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  204. package/dist/src/ui/hooks/useGeminiStream.test.js +87 -10
  205. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  206. package/dist/src/ui/hooks/useHistoryManager.d.ts +1 -1
  207. package/dist/src/ui/hooks/useHistoryManager.js +1 -1
  208. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -1
  209. package/dist/src/ui/hooks/useHistoryManager.test.js +16 -0
  210. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -1
  211. package/dist/src/ui/hooks/useIncludeDirsTrust.js +2 -2
  212. package/dist/src/ui/hooks/useIncludeDirsTrust.js.map +1 -1
  213. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js +2 -2
  214. package/dist/src/ui/hooks/useIncludeDirsTrust.test.js.map +1 -1
  215. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +2 -1
  216. package/dist/src/ui/hooks/useLoadingIndicator.js +7 -3
  217. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  218. package/dist/src/ui/hooks/useLoadingIndicator.test.js +14 -4
  219. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  220. package/dist/src/ui/hooks/usePhraseCycler.d.ts +1 -1
  221. package/dist/src/ui/hooks/usePhraseCycler.js +2 -2
  222. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -1
  223. package/dist/src/ui/keyMatchers.test.js +79 -53
  224. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  225. package/dist/src/ui/types.d.ts +2 -1
  226. package/dist/src/ui/types.js +2 -0
  227. package/dist/src/ui/types.js.map +1 -1
  228. package/dist/src/ui/utils/CodeColorizer.js +2 -2
  229. package/dist/src/ui/utils/CodeColorizer.js.map +1 -1
  230. package/dist/src/ui/utils/commandUtils.js +1 -3
  231. package/dist/src/ui/utils/commandUtils.js.map +1 -1
  232. package/dist/src/ui/utils/commandUtils.test.js +15 -2
  233. package/dist/src/ui/utils/commandUtils.test.js.map +1 -1
  234. package/dist/src/utils/sessionCleanup.js +12 -0
  235. package/dist/src/utils/sessionCleanup.js.map +1 -1
  236. package/dist/src/utils/skillUtils.d.ts +13 -0
  237. package/dist/src/utils/skillUtils.js +93 -0
  238. package/dist/src/utils/skillUtils.js.map +1 -1
  239. package/dist/src/utils/skillUtils.test.d.ts +6 -0
  240. package/dist/src/utils/skillUtils.test.js +57 -0
  241. package/dist/src/utils/skillUtils.test.js.map +1 -0
  242. package/dist/src/utils/windowTitle.d.ts +13 -4
  243. package/dist/src/utils/windowTitle.js +65 -7
  244. package/dist/src/utils/windowTitle.js.map +1 -1
  245. package/dist/src/utils/windowTitle.test.js +183 -40
  246. package/dist/src/utils/windowTitle.test.js.map +1 -1
  247. package/dist/tsconfig.tsbuildinfo +1 -1
  248. package/package.json +3 -3
  249. package/dist/google-gemini-cli-0.25.0-nightly.20260107.59a18e710.tgz +0 -0
  250. package/dist/src/commands/extensions/examples/hooks/gemini-extension.json +0 -4
  251. package/dist/src/commands/extensions/examples/hooks/hooks/hooks.json +0 -14
  252. package/dist/src/commands/extensions/examples/hooks/scripts/on-start.js +0 -8
  253. package/dist/src/commands/extensions/examples/mcp-server/README.md +0 -35
  254. package/dist/src/commands/extensions/examples/skills/gemini-extension.json +0 -4
  255. package/dist/src/commands/extensions/examples/skills/skills/greeter/SKILL.md +0 -7
@@ -5,170 +5,85 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
7
  import { render } from '../../../test-utils/render.js';
8
+ import { waitFor } from '../../../test-utils/async.js';
8
9
  import { OverflowProvider } from '../../contexts/OverflowContext.js';
9
- import { MaxSizedBox, setMaxSizedBoxDebugging } from './MaxSizedBox.js';
10
+ import { MaxSizedBox } from './MaxSizedBox.js';
10
11
  import { Box, Text } from 'ink';
11
12
  import { describe, it, expect } from 'vitest';
12
13
  describe('<MaxSizedBox />', () => {
13
- // Make sure MaxSizedBox logs errors on invalid configurations.
14
- // This is useful for debugging issues with the component.
15
- // It should be set to false in production for performance and to avoid
16
- // cluttering the console if there are ignorable issues.
17
- setMaxSizedBoxDebugging(true);
18
- it('renders children without truncation when they fit', () => {
14
+ it('renders children without truncation when they fit', async () => {
19
15
  const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10, children: _jsx(Box, { children: _jsx(Text, { children: "Hello, World!" }) }) }) }));
20
- expect(lastFrame()).equals('Hello, World!');
16
+ await waitFor(() => expect(lastFrame()).toContain('Hello, World!'));
17
+ expect(lastFrame()).toMatchSnapshot();
21
18
  unmount();
22
19
  });
23
- it('hides lines when content exceeds maxHeight', () => {
24
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 2, children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 3" }) })] }) }));
25
- expect(lastFrame()).equals(`... first 2 lines hidden ...
26
- Line 3`);
20
+ it('hides lines when content exceeds maxHeight', async () => {
21
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 2, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Line 1" }), _jsx(Text, { children: "Line 2" }), _jsx(Text, { children: "Line 3" })] }) }) }));
22
+ await waitFor(() => expect(lastFrame()).toContain('... first 2 lines hidden ...'));
23
+ expect(lastFrame()).toMatchSnapshot();
27
24
  unmount();
28
25
  });
29
- it('hides lines at the end when content exceeds maxHeight and overflowDirection is bottom', () => {
30
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 2, overflowDirection: "bottom", children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 3" }) })] }) }));
31
- expect(lastFrame()).equals(`Line 1
32
- ... last 2 lines hidden ...`);
26
+ it('hides lines at the end when content exceeds maxHeight and overflowDirection is bottom', async () => {
27
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 2, overflowDirection: "bottom", children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Line 1" }), _jsx(Text, { children: "Line 2" }), _jsx(Text, { children: "Line 3" })] }) }) }));
28
+ await waitFor(() => expect(lastFrame()).toContain('... last 2 lines hidden ...'));
29
+ expect(lastFrame()).toMatchSnapshot();
33
30
  unmount();
34
31
  });
35
- it('wraps text that exceeds maxWidth', () => {
36
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 10, maxHeight: 5, children: _jsx(Box, { children: _jsx(Text, { wrap: "wrap", children: "This is a long line of text" }) }) }) }));
37
- expect(lastFrame()).equals(`This is a
38
- long line
39
- of text`);
40
- unmount();
41
- });
42
- it('handles mixed wrapping and non-wrapping segments', () => {
43
- const multilineText = `This part will wrap around.
44
- And has a line break.
45
- Leading spaces preserved.`;
46
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 20, maxHeight: 20, children: [_jsx(Box, { children: _jsx(Text, { children: "Example" }) }), _jsxs(Box, { children: [_jsx(Text, { children: "No Wrap: " }), _jsx(Text, { wrap: "wrap", children: multilineText })] }), _jsxs(Box, { children: [_jsx(Text, { children: "Longer No Wrap: " }), _jsx(Text, { wrap: "wrap", children: "This part will wrap around." })] })] }) }));
47
- expect(lastFrame()).equals(`Example
48
- No Wrap: This part
49
- will wrap
50
- around.
51
- And has a
52
- line break.
53
- Leading
54
- spaces
55
- preserved.
56
- Longer No Wrap: This
57
- part
58
- will
59
- wrap
60
- arou
61
- nd.`);
32
+ it('shows plural "lines" when more than one line is hidden', async () => {
33
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 2, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Line 1" }), _jsx(Text, { children: "Line 2" }), _jsx(Text, { children: "Line 3" })] }) }) }));
34
+ await waitFor(() => expect(lastFrame()).toContain('... first 2 lines hidden ...'));
35
+ expect(lastFrame()).toMatchSnapshot();
62
36
  unmount();
63
37
  });
64
- it('handles words longer than maxWidth by splitting them', () => {
65
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 5, maxHeight: 5, children: _jsx(Box, { children: _jsx(Text, { wrap: "wrap", children: "Supercalifragilisticexpialidocious" }) }) }) }));
66
- expect(lastFrame()).equals(`...
67
- istic
68
- expia
69
- lidoc
70
- ious`);
38
+ it('shows singular "line" when exactly one line is hidden', async () => {
39
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 2, additionalHiddenLinesCount: 1, children: _jsx(Box, { flexDirection: "column", children: _jsx(Text, { children: "Line 1" }) }) }) }));
40
+ await waitFor(() => expect(lastFrame()).toContain('... first 1 line hidden ...'));
41
+ expect(lastFrame()).toMatchSnapshot();
71
42
  unmount();
72
43
  });
73
- it('does not truncate when maxHeight is undefined', () => {
74
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: undefined, children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) })] }) }));
75
- expect(lastFrame()).equals(`Line 1
76
- Line 2`);
44
+ it('accounts for additionalHiddenLinesCount', async () => {
45
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 2, additionalHiddenLinesCount: 5, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Line 1" }), _jsx(Text, { children: "Line 2" }), _jsx(Text, { children: "Line 3" })] }) }) }));
46
+ await waitFor(() => expect(lastFrame()).toContain('... first 7 lines hidden ...'));
47
+ expect(lastFrame()).toMatchSnapshot();
77
48
  unmount();
78
49
  });
79
- it('shows plural "lines" when more than one line is hidden', () => {
80
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 2, children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 3" }) })] }) }));
81
- expect(lastFrame()).equals(`... first 2 lines hidden ...
82
- Line 3`);
50
+ it('wraps text that exceeds maxWidth', async () => {
51
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 10, maxHeight: 5, children: _jsx(Box, { children: _jsx(Text, { wrap: "wrap", children: "This is a long line of text" }) }) }) }));
52
+ await waitFor(() => expect(lastFrame()).toContain('This is a'));
53
+ expect(lastFrame()).toMatchSnapshot();
83
54
  unmount();
84
55
  });
85
- it('shows plural "lines" when more than one line is hidden and overflowDirection is bottom', () => {
86
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 2, overflowDirection: "bottom", children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 3" }) })] }) }));
87
- expect(lastFrame()).equals(`Line 1
88
- ... last 2 lines hidden ...`);
56
+ it('does not truncate when maxHeight is undefined', async () => {
57
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: undefined, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: "Line 1" }), _jsx(Text, { children: "Line 2" })] }) }) }));
58
+ await waitFor(() => expect(lastFrame()).toContain('Line 1'));
59
+ expect(lastFrame()).toMatchSnapshot();
89
60
  unmount();
90
61
  });
91
- it('renders an empty box for empty children', () => {
62
+ it('renders an empty box for empty children', async () => {
92
63
  const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10 }) }));
93
- // Expect an empty string or a box with nothing in it.
94
- // Ink renders an empty box as an empty string.
95
- expect(lastFrame()).equals('');
96
- unmount();
97
- });
98
- it('wraps text with multi-byte unicode characters correctly', () => {
99
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 5, maxHeight: 5, children: _jsx(Box, { children: _jsx(Text, { wrap: "wrap", children: "\u4F60\u597D\u4E16\u754C" }) }) }) }));
100
- // "你好" has a visual width of 4. "世界" has a visual width of 4.
101
- // With maxWidth=5, it should wrap after the second character.
102
- expect(lastFrame()).equals(`你好
103
- 世界`);
104
- unmount();
105
- });
106
- it('wraps text with multi-byte emoji characters correctly', () => {
107
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 5, maxHeight: 5, children: _jsx(Box, { children: _jsx(Text, { wrap: "wrap", children: "\uD83D\uDC36\uD83D\uDC36\uD83D\uDC36\uD83D\uDC36\uD83D\uDC36" }) }) }) }));
108
- // Each "🐶" has a visual width of 2.
109
- // With maxWidth=5, it should wrap every 2 emojis.
110
- expect(lastFrame()).equals(`🐶🐶
111
- 🐶🐶
112
- 🐶`);
113
- unmount();
114
- });
115
- it('falls back to an ellipsis when width is extremely small', () => {
116
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 2, maxHeight: 2, children: _jsxs(Box, { children: [_jsx(Text, { children: "No" }), _jsx(Text, { wrap: "wrap", children: "wrap" })] }) }) }));
117
- expect(lastFrame()).equals('N…');
118
- unmount();
119
- });
120
- it('truncates long non-wrapping text with ellipsis', () => {
121
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 3, maxHeight: 2, children: _jsxs(Box, { children: [_jsx(Text, { children: "ABCDE" }), _jsx(Text, { wrap: "wrap", children: "wrap" })] }) }) }));
122
- expect(lastFrame()).equals('AB…');
123
- unmount();
124
- });
125
- it('truncates non-wrapping text containing line breaks', () => {
126
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 3, maxHeight: 2, children: _jsxs(Box, { children: [_jsx(Text, { children: 'A\nBCDE' }), _jsx(Text, { wrap: "wrap", children: "wrap" })] }) }) }));
127
- expect(lastFrame()).equals(`A\n…`);
128
- unmount();
129
- });
130
- it('truncates emoji characters correctly with ellipsis', () => {
131
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 3, maxHeight: 2, children: _jsxs(Box, { children: [_jsx(Text, { children: "\uD83D\uDC36\uD83D\uDC36\uD83D\uDC36" }), _jsx(Text, { wrap: "wrap", children: "wrap" })] }) }) }));
132
- expect(lastFrame()).equals(`🐶…`);
133
- unmount();
134
- });
135
- it('shows ellipsis for multiple rows with long non-wrapping text', () => {
136
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 3, maxHeight: 3, children: [_jsxs(Box, { children: [_jsx(Text, { children: "AAA" }), _jsx(Text, { wrap: "wrap", children: "first" })] }), _jsxs(Box, { children: [_jsx(Text, { children: "BBB" }), _jsx(Text, { wrap: "wrap", children: "second" })] }), _jsxs(Box, { children: [_jsx(Text, { children: "CCC" }), _jsx(Text, { wrap: "wrap", children: "third" })] })] }) }));
137
- expect(lastFrame()).equals(`AA…\nBB…\nCC…`);
138
- unmount();
139
- });
140
- it('accounts for additionalHiddenLinesCount', () => {
141
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 2, additionalHiddenLinesCount: 5, children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 3" }) })] }) }));
142
- // 1 line is hidden by overflow, 5 are additionally hidden.
143
- expect(lastFrame()).equals(`... first 7 lines hidden ...
144
- Line 3`);
64
+ // Use waitFor to ensure ResizeObserver has a chance to run
65
+ await waitFor(() => expect(lastFrame()).toBeDefined());
66
+ expect(lastFrame()?.trim()).equals('');
145
67
  unmount();
146
68
  });
147
- it('handles React.Fragment as a child', () => {
148
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsxs(MaxSizedBox, { maxWidth: 80, maxHeight: 10, children: [_jsxs(_Fragment, { children: [_jsx(Box, { children: _jsx(Text, { children: "Line 1 from Fragment" }) }), _jsx(Box, { children: _jsx(Text, { children: "Line 2 from Fragment" }) })] }), _jsx(Box, { children: _jsx(Text, { children: "Line 3 direct child" }) })] }) }));
149
- expect(lastFrame()).equals(`Line 1 from Fragment
150
- Line 2 from Fragment
151
- Line 3 direct child`);
69
+ it('handles React.Fragment as a child', async () => {
70
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10, children: _jsxs(Box, { flexDirection: "column", children: [_jsxs(_Fragment, { children: [_jsx(Text, { children: "Line 1 from Fragment" }), _jsx(Text, { children: "Line 2 from Fragment" })] }), _jsx(Text, { children: "Line 3 direct child" })] }) }) }));
71
+ await waitFor(() => expect(lastFrame()).toContain('Line 1 from Fragment'));
72
+ expect(lastFrame()).toMatchSnapshot();
152
73
  unmount();
153
74
  });
154
- it('clips a long single text child from the top', () => {
75
+ it('clips a long single text child from the top', async () => {
155
76
  const THIRTY_LINES = Array.from({ length: 30 }, (_, i) => `Line ${i + 1}`).join('\n');
156
- const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10, children: _jsx(Box, { children: _jsx(Text, { children: THIRTY_LINES }) }) }) }));
157
- const expected = [
158
- '... first 21 lines hidden ...',
159
- ...Array.from({ length: 9 }, (_, i) => `Line ${22 + i}`),
160
- ].join('\n');
161
- expect(lastFrame()).equals(expected);
77
+ const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10, overflowDirection: "top", children: _jsx(Box, { children: _jsx(Text, { children: THIRTY_LINES }) }) }) }));
78
+ await waitFor(() => expect(lastFrame()).toContain('... first 21 lines hidden ...'));
79
+ expect(lastFrame()).toMatchSnapshot();
162
80
  unmount();
163
81
  });
164
- it('clips a long single text child from the bottom', () => {
82
+ it('clips a long single text child from the bottom', async () => {
165
83
  const THIRTY_LINES = Array.from({ length: 30 }, (_, i) => `Line ${i + 1}`).join('\n');
166
84
  const { lastFrame, unmount } = render(_jsx(OverflowProvider, { children: _jsx(MaxSizedBox, { maxWidth: 80, maxHeight: 10, overflowDirection: "bottom", children: _jsx(Box, { children: _jsx(Text, { children: THIRTY_LINES }) }) }) }));
167
- const expected = [
168
- ...Array.from({ length: 9 }, (_, i) => `Line ${i + 1}`),
169
- '... last 21 lines hidden ...',
170
- ].join('\n');
171
- expect(lastFrame()).equals(expected);
85
+ await waitFor(() => expect(lastFrame()).toContain('... last 21 lines hidden ...'));
86
+ expect(lastFrame()).toMatchSnapshot();
172
87
  unmount();
173
88
  });
174
89
  });
@@ -1 +1 @@
1
- {"version":3,"file":"MaxSizedBox.test.js","sourceRoot":"","sources":["../../../../../src/ui/components/shared/MaxSizedBox.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaxSizedBox.test.js","sourceRoot":"","sources":["../../../../../src/ui/components/shared/MaxSizedBox.test.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,YACtC,KAAC,GAAG,cACF,KAAC,IAAI,gCAAqB,GACtB,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC;QACpE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,YACrC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,IACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,iBAAiB,EAAC,QAAQ,YACjE,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,IACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAC7D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,YACrC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,IACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,YACpE,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACzB,KAAC,IAAI,yBAAc,GACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAC7D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,YACpE,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,IACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,YACrC,KAAC,GAAG,cACF,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,4CAAmC,GAChD,GACM,GACG,CACpB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,YAC7C,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,yBAAc,EACnB,KAAC,IAAI,yBAAc,IACf,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAgB,GACvC,CACpB,CAAC;QACF,2DAA2D;QAC3D,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,YACtC,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,8BACE,KAAC,IAAI,uCAA4B,EACjC,KAAC,IAAI,uCAA4B,IAChC,EACH,KAAC,IAAI,sCAA2B,IAC5B,GACM,GACG,CACpB,CAAC;QACF,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAC,KAAK,YAC/D,KAAC,GAAG,cACF,KAAC,IAAI,cAAE,YAAY,GAAQ,GACvB,GACM,GACG,CACpB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAC/D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAC7B,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CACnC,KAAC,gBAAgB,cACf,KAAC,WAAW,IAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAC,QAAQ,YAClE,KAAC,GAAG,cACF,KAAC,IAAI,cAAE,YAAY,GAAQ,GACvB,GACM,GACG,CACpB,CAAC;QAEF,MAAM,OAAO,CAAC,GAAG,EAAE,CACjB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAC9D,CAAC;QACF,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,eAAe,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,6 +3,7 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import { type EditorType } from '@google/gemini-cli-core';
6
7
  import type { Key } from '../../contexts/KeypressContext.js';
7
8
  export type Direction = 'left' | 'right' | 'up' | 'down' | 'wordLeft' | 'wordRight' | 'home' | 'end';
8
9
  export declare const isWordCharStrict: (char: string) => boolean;
@@ -48,6 +49,7 @@ interface UseTextBufferProps {
48
49
  shellModeActive?: boolean;
49
50
  inputFilter?: (text: string) => string;
50
51
  singleLine?: boolean;
52
+ getPreferredEditor?: () => EditorType | undefined;
51
53
  }
52
54
  interface UndoHistoryEntry {
53
55
  lines: string[];
@@ -285,7 +287,7 @@ export interface TextBufferOptions {
285
287
  singleLine?: boolean;
286
288
  }
287
289
  export declare function textBufferReducer(state: TextBufferState, action: TextBufferAction, options?: TextBufferOptions): TextBufferState;
288
- export declare function useTextBuffer({ initialText, initialCursorOffset, viewport, stdin, setRawMode, onChange, isValidPath, shellModeActive, inputFilter, singleLine, }: UseTextBufferProps): TextBuffer;
290
+ export declare function useTextBuffer({ initialText, initialCursorOffset, viewport, stdin, setRawMode, onChange, isValidPath, shellModeActive, inputFilter, singleLine, getPreferredEditor, }: UseTextBufferProps): TextBuffer;
289
291
  export interface TextBuffer {
290
292
  lines: string[];
291
293
  text: string;
@@ -389,9 +391,7 @@ export interface TextBuffer {
389
391
  * continuing. This mirrors Git's behaviour and simplifies downstream
390
392
  * control‑flow (callers can simply `await` the Promise).
391
393
  */
392
- openInExternalEditor: (opts?: {
393
- editor?: string;
394
- }) => Promise<void>;
394
+ openInExternalEditor: () => Promise<void>;
395
395
  replaceRangeByOffset: (startOffset: number, endOffset: number, replacementText: string) => void;
396
396
  getOffset: () => number;
397
397
  moveToOffset(offset: number): void;
@@ -9,9 +9,10 @@ import os from 'node:os';
9
9
  import pathMod from 'node:path';
10
10
  import * as path from 'node:path';
11
11
  import { useState, useCallback, useEffect, useMemo, useReducer } from 'react';
12
- import { coreEvents, CoreEvent, debugLogger, unescapePath, } from '@google/gemini-cli-core';
12
+ import { coreEvents, CoreEvent, debugLogger, unescapePath, getEditorCommand, isGuiEditor, } from '@google/gemini-cli-core';
13
13
  import { toCodePoints, cpLen, cpSlice, stripUnsafeCharacters, getCachedStringWidth, } from '../../utils/textUtils.js';
14
14
  import { parsePastedPaths } from '../../utils/clipboardUtils.js';
15
+ import { keyMatchers, Command } from '../../keyMatchers.js';
15
16
  import { handleVimAction } from './vim-buffer-actions.js';
16
17
  // Helper functions for line-based word navigation
17
18
  export const isWordCharStrict = (char) => /[\w\p{L}\p{N}]/u.test(char); // Matches a single character that is any Unicode letter, any Unicode number, or an underscore
@@ -1294,7 +1295,7 @@ export function textBufferReducer(state, action, options = {}) {
1294
1295
  return newState;
1295
1296
  }
1296
1297
  // --- End of reducer logic ---
1297
- export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewport, stdin, setRawMode, onChange, isValidPath, shellModeActive = false, inputFilter, singleLine = false, }) {
1298
+ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewport, stdin, setRawMode, onChange, isValidPath, shellModeActive = false, inputFilter, singleLine = false, getPreferredEditor, }) {
1298
1299
  const initialState = useMemo(() => {
1299
1300
  const lines = initialText.split('\n');
1300
1301
  const [initialCursorRow, initialCursorCol] = calculateInitialCursorPosition(lines.length === 0 ? [''] : lines, initialCursorOffset);
@@ -1522,19 +1523,32 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1522
1523
  const vimEscapeInsertMode = useCallback(() => {
1523
1524
  dispatch({ type: 'vim_escape_insert_mode' });
1524
1525
  }, []);
1525
- const openInExternalEditor = useCallback(async (opts = {}) => {
1526
- const editor = opts.editor ??
1527
- process.env['VISUAL'] ??
1528
- process.env['EDITOR'] ??
1529
- (process.platform === 'win32' ? 'notepad' : 'vi');
1526
+ const openInExternalEditor = useCallback(async () => {
1530
1527
  const tmpDir = fs.mkdtempSync(pathMod.join(os.tmpdir(), 'gemini-edit-'));
1531
1528
  const filePath = pathMod.join(tmpDir, 'buffer.txt');
1532
1529
  fs.writeFileSync(filePath, text, 'utf8');
1530
+ let command = undefined;
1531
+ const args = [filePath];
1532
+ const preferredEditorType = getPreferredEditor?.();
1533
+ if (!command && preferredEditorType) {
1534
+ command = getEditorCommand(preferredEditorType);
1535
+ if (isGuiEditor(preferredEditorType)) {
1536
+ args.unshift('--wait');
1537
+ }
1538
+ }
1539
+ if (!command) {
1540
+ command =
1541
+ (process.env['VISUAL'] ??
1542
+ process.env['EDITOR'] ??
1543
+ process.platform === 'win32')
1544
+ ? 'notepad'
1545
+ : 'vi';
1546
+ }
1533
1547
  dispatch({ type: 'create_undo_snapshot' });
1534
1548
  const wasRaw = stdin?.isRaw ?? false;
1535
1549
  try {
1536
1550
  setRawMode?.(false);
1537
- const { status, error } = spawnSync(editor, [filePath], {
1551
+ const { status, error } = spawnSync(command, args, {
1538
1552
  stdio: 'inherit',
1539
1553
  });
1540
1554
  if (error)
@@ -1565,7 +1579,7 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1565
1579
  /* ignore */
1566
1580
  }
1567
1581
  }
1568
- }, [text, stdin, setRawMode]);
1582
+ }, [text, stdin, setRawMode, getPreferredEditor]);
1569
1583
  const handleInput = useCallback((key) => {
1570
1584
  const { sequence: input } = key;
1571
1585
  if (key.paste) {
@@ -1581,50 +1595,33 @@ export function useTextBuffer({ initialText = '', initialCursorOffset = 0, viewp
1581
1595
  input === '\\r') // VSCode terminal represents shift + enter this way
1582
1596
  )
1583
1597
  newline();
1584
- else if (key.name === 'left' && !key.meta && !key.ctrl)
1598
+ else if (keyMatchers[Command.MOVE_LEFT](key))
1585
1599
  move('left');
1586
- else if (key.ctrl && key.name === 'b')
1587
- move('left');
1588
- else if (key.name === 'right' && !key.meta && !key.ctrl)
1589
- move('right');
1590
- else if (key.ctrl && key.name === 'f')
1600
+ else if (keyMatchers[Command.MOVE_RIGHT](key))
1591
1601
  move('right');
1592
1602
  else if (key.name === 'up')
1593
1603
  move('up');
1594
1604
  else if (key.name === 'down')
1595
1605
  move('down');
1596
- else if ((key.ctrl || key.meta) && key.name === 'left')
1606
+ else if (keyMatchers[Command.MOVE_WORD_LEFT](key))
1597
1607
  move('wordLeft');
1598
- else if (key.meta && key.name === 'b')
1599
- move('wordLeft');
1600
- else if ((key.ctrl || key.meta) && key.name === 'right')
1601
- move('wordRight');
1602
- else if (key.meta && key.name === 'f')
1608
+ else if (keyMatchers[Command.MOVE_WORD_RIGHT](key))
1603
1609
  move('wordRight');
1604
- else if (key.name === 'home')
1605
- move('home');
1606
- else if (key.ctrl && key.name === 'a')
1610
+ else if (keyMatchers[Command.HOME](key))
1607
1611
  move('home');
1608
- else if (key.name === 'end')
1612
+ else if (keyMatchers[Command.END](key))
1609
1613
  move('end');
1610
- else if (key.ctrl && key.name === 'e')
1611
- move('end');
1612
- else if (key.ctrl && key.name === 'w')
1613
- deleteWordLeft();
1614
- else if ((key.meta || key.ctrl) &&
1615
- (key.name === 'backspace' || input === '\x7f'))
1614
+ else if (keyMatchers[Command.DELETE_WORD_BACKWARD](key))
1616
1615
  deleteWordLeft();
1617
- else if ((key.meta || key.ctrl) && key.name === 'delete')
1616
+ else if (keyMatchers[Command.DELETE_WORD_FORWARD](key))
1618
1617
  deleteWordRight();
1619
- else if (key.name === 'backspace' ||
1620
- input === '\x7f' ||
1621
- (key.ctrl && key.name === 'h'))
1618
+ else if (keyMatchers[Command.DELETE_CHAR_LEFT](key))
1622
1619
  backspace();
1623
- else if (key.name === 'delete' || (key.ctrl && key.name === 'd'))
1620
+ else if (keyMatchers[Command.DELETE_CHAR_RIGHT](key))
1624
1621
  del();
1625
- else if (key.ctrl && !key.shift && key.name === 'z')
1622
+ else if (keyMatchers[Command.UNDO](key))
1626
1623
  undo();
1627
- else if (key.ctrl && key.shift && key.name === 'z')
1624
+ else if (keyMatchers[Command.REDO](key))
1628
1625
  redo();
1629
1626
  else if (key.insertable) {
1630
1627
  insert(input, { paste: key.paste });