@google/gemini-cli 0.31.0-preview.2 → 0.32.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 (335) hide show
  1. package/dist/package.json +2 -2
  2. package/dist/src/commands/extensions/examples/policies/README.md +41 -0
  3. package/dist/src/commands/extensions/examples/policies/gemini-extension.json +5 -0
  4. package/dist/src/commands/extensions/examples/policies/policies/policies.toml +28 -0
  5. package/dist/src/commands/extensions/link.test.js +5 -21
  6. package/dist/src/commands/extensions/link.test.js.map +1 -1
  7. package/dist/src/commands/extensions/list.test.js +10 -24
  8. package/dist/src/commands/extensions/list.test.js.map +1 -1
  9. package/dist/src/commands/mcp/list.js +32 -14
  10. package/dist/src/commands/mcp/list.js.map +1 -1
  11. package/dist/src/commands/mcp/list.test.js +22 -1
  12. package/dist/src/commands/mcp/list.test.js.map +1 -1
  13. package/dist/src/commands/skills/disable.test.js +4 -7
  14. package/dist/src/commands/skills/disable.test.js.map +1 -1
  15. package/dist/src/commands/skills/enable.test.js +4 -7
  16. package/dist/src/commands/skills/enable.test.js.map +1 -1
  17. package/dist/src/commands/skills/install.test.js +12 -9
  18. package/dist/src/commands/skills/install.test.js.map +1 -1
  19. package/dist/src/commands/skills/link.test.js +5 -2
  20. package/dist/src/commands/skills/link.test.js.map +1 -1
  21. package/dist/src/commands/skills/list.test.js +16 -29
  22. package/dist/src/commands/skills/list.test.js.map +1 -1
  23. package/dist/src/commands/skills/uninstall.test.js +9 -6
  24. package/dist/src/commands/skills/uninstall.test.js.map +1 -1
  25. package/dist/src/config/config.js +3 -0
  26. package/dist/src/config/config.js.map +1 -1
  27. package/dist/src/config/config.test.js +55 -0
  28. package/dist/src/config/config.test.js.map +1 -1
  29. package/dist/src/config/extension-manager.d.ts +8 -1
  30. package/dist/src/config/extension-manager.js +88 -23
  31. package/dist/src/config/extension-manager.js.map +1 -1
  32. package/dist/src/config/extension-manager.test.d.ts +6 -0
  33. package/dist/src/config/extension-manager.test.js +138 -0
  34. package/dist/src/config/extension-manager.test.js.map +1 -0
  35. package/dist/src/config/extension.test.js +93 -4
  36. package/dist/src/config/extension.test.js.map +1 -1
  37. package/dist/src/config/extensions/consent.test.js +35 -43
  38. package/dist/src/config/extensions/consent.test.js.map +1 -1
  39. package/dist/src/config/keyBindings.js +1 -1
  40. package/dist/src/config/keyBindings.js.map +1 -1
  41. package/dist/src/config/policy-engine.integration.test.js +12 -12
  42. package/dist/src/config/policy.d.ts +20 -0
  43. package/dist/src/config/policy.js +35 -7
  44. package/dist/src/config/policy.js.map +1 -1
  45. package/dist/src/config/policy.test.js +71 -24
  46. package/dist/src/config/policy.test.js.map +1 -1
  47. package/dist/src/config/settingsSchema.d.ts +98 -3
  48. package/dist/src/config/settingsSchema.js +92 -1
  49. package/dist/src/config/settingsSchema.js.map +1 -1
  50. package/dist/src/config/settingsSchema.test.js +49 -0
  51. package/dist/src/config/settingsSchema.test.js.map +1 -1
  52. package/dist/src/config/workspace-policy-cli.test.js +48 -19
  53. package/dist/src/config/workspace-policy-cli.test.js.map +1 -1
  54. package/dist/src/gemini.js +7 -8
  55. package/dist/src/gemini.js.map +1 -1
  56. package/dist/src/gemini.test.js +5 -1
  57. package/dist/src/gemini.test.js.map +1 -1
  58. package/dist/src/generated/git-commit.d.ts +2 -2
  59. package/dist/src/generated/git-commit.js +2 -2
  60. package/dist/src/test-utils/AppRig.d.ts +26 -0
  61. package/dist/src/test-utils/AppRig.js +128 -6
  62. package/dist/src/test-utils/AppRig.js.map +1 -1
  63. package/dist/src/test-utils/customMatchers.d.ts +25 -5
  64. package/dist/src/test-utils/customMatchers.js +46 -0
  65. package/dist/src/test-utils/customMatchers.js.map +1 -1
  66. package/dist/src/test-utils/mockConfig.js +4 -0
  67. package/dist/src/test-utils/mockConfig.js.map +1 -1
  68. package/dist/src/test-utils/mockDebugLogger.d.ts +35 -0
  69. package/dist/src/test-utils/mockDebugLogger.js +67 -0
  70. package/dist/src/test-utils/mockDebugLogger.js.map +1 -0
  71. package/dist/src/test-utils/render.d.ts +13 -0
  72. package/dist/src/test-utils/render.js +48 -8
  73. package/dist/src/test-utils/render.js.map +1 -1
  74. package/dist/src/test-utils/svg.d.ts +7 -0
  75. package/dist/src/test-utils/svg.js +163 -0
  76. package/dist/src/test-utils/svg.js.map +1 -0
  77. package/dist/src/ui/AppContainer.js +48 -66
  78. package/dist/src/ui/AppContainer.js.map +1 -1
  79. package/dist/src/ui/AppContainer.test.js +89 -0
  80. package/dist/src/ui/AppContainer.test.js.map +1 -1
  81. package/dist/src/ui/commands/mcpCommand.js +17 -3
  82. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  83. package/dist/src/ui/commands/mcpCommand.test.js +10 -3
  84. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  85. package/dist/src/ui/commands/setupGithubCommand.js +2 -0
  86. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  87. package/dist/src/ui/commands/statsCommand.js +10 -4
  88. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  89. package/dist/src/ui/commands/statsCommand.test.js +12 -3
  90. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  91. package/dist/src/ui/components/AnsiOutput.test.js +3 -3
  92. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
  93. package/dist/src/ui/components/AskUserDialog.d.ts +4 -0
  94. package/dist/src/ui/components/AskUserDialog.js +5 -5
  95. package/dist/src/ui/components/AskUserDialog.js.map +1 -1
  96. package/dist/src/ui/components/AskUserDialog.test.js +6 -7
  97. package/dist/src/ui/components/AskUserDialog.test.js.map +1 -1
  98. package/dist/src/ui/components/Composer.js +17 -6
  99. package/dist/src/ui/components/Composer.js.map +1 -1
  100. package/dist/src/ui/components/Composer.test.js +47 -6
  101. package/dist/src/ui/components/Composer.test.js.map +1 -1
  102. package/dist/src/ui/components/ConfigInitDisplay.js +1 -1
  103. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  104. package/dist/src/ui/components/ConfigInitDisplay.test.js +6 -6
  105. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
  106. package/dist/src/ui/components/DetailedMessagesDisplay.js +6 -1
  107. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  108. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +43 -4
  109. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
  110. package/dist/src/ui/components/DialogManager.js +9 -1
  111. package/dist/src/ui/components/DialogManager.js.map +1 -1
  112. package/dist/src/ui/components/DialogManager.test.js +4 -0
  113. package/dist/src/ui/components/DialogManager.test.js.map +1 -1
  114. package/dist/src/ui/components/EmptyWalletDialog.d.ts +22 -0
  115. package/dist/src/ui/components/EmptyWalletDialog.js +33 -0
  116. package/dist/src/ui/components/EmptyWalletDialog.js.map +1 -0
  117. package/dist/src/ui/components/EmptyWalletDialog.test.d.ts +6 -0
  118. package/dist/src/ui/components/EmptyWalletDialog.test.js +127 -0
  119. package/dist/src/ui/components/EmptyWalletDialog.test.js.map +1 -0
  120. package/dist/src/ui/components/ExitPlanModeDialog.d.ts +2 -1
  121. package/dist/src/ui/components/ExitPlanModeDialog.js +34 -7
  122. package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
  123. package/dist/src/ui/components/ExitPlanModeDialog.test.js +31 -2
  124. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +1 -1
  125. package/dist/src/ui/components/FolderTrustDialog.test.js +1 -1
  126. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  127. package/dist/src/ui/components/Footer.js +3 -1
  128. package/dist/src/ui/components/Footer.js.map +1 -1
  129. package/dist/src/ui/components/Footer.test.js +63 -1
  130. package/dist/src/ui/components/Footer.test.js.map +1 -1
  131. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +0 -5
  132. package/dist/src/ui/components/GeminiRespondingSpinner.js +1 -32
  133. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  134. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +5 -10
  135. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -1
  136. package/dist/src/ui/components/GeminiSpinner.d.ts +13 -0
  137. package/dist/src/ui/components/GeminiSpinner.js +35 -0
  138. package/dist/src/ui/components/GeminiSpinner.js.map +1 -0
  139. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  140. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  141. package/dist/src/ui/components/InputPrompt.js +31 -3
  142. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  143. package/dist/src/ui/components/InputPrompt.test.js +82 -18
  144. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  145. package/dist/src/ui/components/OverageMenuDialog.d.ts +22 -0
  146. package/dist/src/ui/components/OverageMenuDialog.js +32 -0
  147. package/dist/src/ui/components/OverageMenuDialog.js.map +1 -0
  148. package/dist/src/ui/components/OverageMenuDialog.test.d.ts +6 -0
  149. package/dist/src/ui/components/OverageMenuDialog.test.js +129 -0
  150. package/dist/src/ui/components/OverageMenuDialog.test.js.map +1 -0
  151. package/dist/src/ui/components/ProQuotaDialog.d.ts +3 -1
  152. package/dist/src/ui/components/ProQuotaDialog.js +11 -6
  153. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  154. package/dist/src/ui/components/ProQuotaDialog.test.js +27 -14
  155. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  156. package/dist/src/ui/components/SettingsDialog.test.js +9 -11
  157. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  158. package/dist/src/ui/components/StatsDisplay.d.ts +1 -0
  159. package/dist/src/ui/components/StatsDisplay.js +2 -2
  160. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  161. package/dist/src/ui/components/Table.test.js +23 -4
  162. package/dist/src/ui/components/Table.test.js.map +1 -1
  163. package/dist/src/ui/components/ToastDisplay.js +1 -1
  164. package/dist/src/ui/components/ToastDisplay.js.map +1 -1
  165. package/dist/src/ui/components/ToastDisplay.test.js +2 -2
  166. package/dist/src/ui/components/ToastDisplay.test.js.map +1 -1
  167. package/dist/src/ui/components/ToolConfirmationQueue.js +3 -1
  168. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
  169. package/dist/src/ui/components/ToolConfirmationQueue.test.js +3 -2
  170. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -1
  171. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +1 -1
  172. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +1 -1
  173. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +2 -1
  174. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +3 -2
  175. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  176. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +17 -17
  177. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  178. package/dist/src/ui/components/messages/ToolGroupMessage.js +17 -7
  179. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  180. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +88 -5
  181. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  182. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +1 -1
  183. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +1 -1
  184. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +11 -4
  185. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +1 -1
  186. package/dist/src/ui/components/shared/DialogFooter.d.ts +2 -0
  187. package/dist/src/ui/components/shared/DialogFooter.js +2 -1
  188. package/dist/src/ui/components/shared/DialogFooter.js.map +1 -1
  189. package/dist/src/ui/components/shared/ExpandableText.test.js +21 -16
  190. package/dist/src/ui/components/shared/ExpandableText.test.js.map +1 -1
  191. package/dist/src/ui/components/shared/MaxSizedBox.js +10 -1
  192. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  193. package/dist/src/ui/components/shared/MaxSizedBox.test.js +8 -8
  194. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  195. package/dist/src/ui/components/shared/Scrollable.d.ts +1 -1
  196. package/dist/src/ui/components/shared/Scrollable.js +76 -43
  197. package/dist/src/ui/components/shared/Scrollable.js.map +1 -1
  198. package/dist/src/ui/components/shared/Scrollable.test.js +15 -20
  199. package/dist/src/ui/components/shared/Scrollable.test.js.map +1 -1
  200. package/dist/src/ui/components/shared/ScrollableList.js +14 -9
  201. package/dist/src/ui/components/shared/ScrollableList.js.map +1 -1
  202. package/dist/src/ui/components/shared/ScrollableList.test.js +153 -0
  203. package/dist/src/ui/components/shared/ScrollableList.test.js.map +1 -1
  204. package/dist/src/ui/components/shared/VirtualizedList.js +133 -88
  205. package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -1
  206. package/dist/src/ui/components/shared/VirtualizedList.test.js +6 -3
  207. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +1 -1
  208. package/dist/src/ui/components/shared/text-buffer.js +3 -30
  209. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  210. package/dist/src/ui/components/views/McpStatus.d.ts +1 -0
  211. package/dist/src/ui/components/views/McpStatus.js +2 -2
  212. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  213. package/dist/src/ui/components/views/McpStatus.test.js +7 -0
  214. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  215. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -0
  216. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  217. package/dist/src/ui/contexts/UIStateContext.d.ts +24 -1
  218. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  219. package/dist/src/ui/hooks/atCommandProcessor.js +4 -0
  220. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  221. package/dist/src/ui/hooks/creditsFlowHandler.d.ts +35 -0
  222. package/dist/src/ui/hooks/creditsFlowHandler.js +144 -0
  223. package/dist/src/ui/hooks/creditsFlowHandler.js.map +1 -0
  224. package/dist/src/ui/hooks/creditsFlowHandler.test.d.ts +6 -0
  225. package/dist/src/ui/hooks/creditsFlowHandler.test.js +180 -0
  226. package/dist/src/ui/hooks/creditsFlowHandler.test.js.map +1 -0
  227. package/dist/src/ui/hooks/shell-completions/gitProvider.d.ts +7 -0
  228. package/dist/src/ui/hooks/shell-completions/gitProvider.js +73 -0
  229. package/dist/src/ui/hooks/shell-completions/gitProvider.js.map +1 -0
  230. package/dist/src/ui/hooks/shell-completions/gitProvider.test.d.ts +6 -0
  231. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js +73 -0
  232. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js.map +1 -0
  233. package/dist/src/ui/hooks/shell-completions/index.d.ts +7 -0
  234. package/dist/src/ui/hooks/shell-completions/index.js +16 -0
  235. package/dist/src/ui/hooks/shell-completions/index.js.map +1 -0
  236. package/dist/src/ui/hooks/shell-completions/npmProvider.d.ts +7 -0
  237. package/dist/src/ui/hooks/shell-completions/npmProvider.js +67 -0
  238. package/dist/src/ui/hooks/shell-completions/npmProvider.js.map +1 -0
  239. package/dist/src/ui/hooks/shell-completions/npmProvider.test.d.ts +6 -0
  240. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js +69 -0
  241. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js.map +1 -0
  242. package/dist/src/ui/hooks/shell-completions/types.d.ts +16 -0
  243. package/dist/src/ui/hooks/shell-completions/types.js +7 -0
  244. package/dist/src/ui/hooks/shell-completions/types.js.map +1 -0
  245. package/dist/src/ui/hooks/shellCommandProcessor.js +1 -0
  246. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  247. package/dist/src/ui/hooks/slashCommandProcessor.js +1 -0
  248. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  249. package/dist/src/ui/hooks/toolMapping.js +1 -0
  250. package/dist/src/ui/hooks/toolMapping.js.map +1 -1
  251. package/dist/src/ui/hooks/toolMapping.test.js +25 -0
  252. package/dist/src/ui/hooks/toolMapping.test.js.map +1 -1
  253. package/dist/src/ui/hooks/useAlternateBuffer.d.ts +2 -2
  254. package/dist/src/ui/hooks/useAlternateBuffer.js +5 -4
  255. package/dist/src/ui/hooks/useAlternateBuffer.js.map +1 -1
  256. package/dist/src/ui/hooks/useAlternateBuffer.test.d.ts +6 -0
  257. package/dist/src/ui/hooks/useAlternateBuffer.test.js +57 -0
  258. package/dist/src/ui/hooks/useAlternateBuffer.test.js.map +1 -0
  259. package/dist/src/ui/hooks/useCommandCompletion.d.ts +2 -1
  260. package/dist/src/ui/hooks/useCommandCompletion.js +37 -5
  261. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  262. package/dist/src/ui/hooks/useCommandCompletion.test.js +23 -1
  263. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  264. package/dist/src/ui/hooks/useGeminiStream.js +83 -5
  265. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  266. package/dist/src/ui/hooks/useGeminiStream.test.js +110 -4
  267. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  268. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +2 -1
  269. package/dist/src/ui/hooks/useLoadingIndicator.js +7 -2
  270. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  271. package/dist/src/ui/hooks/useLoadingIndicator.test.js +25 -4
  272. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  273. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  274. package/dist/src/ui/hooks/usePrivacySettings.js +9 -3
  275. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  276. package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +11 -3
  277. package/dist/src/ui/hooks/useQuotaAndFallback.js +84 -12
  278. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  279. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +278 -16
  280. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  281. package/dist/src/ui/hooks/useShellCompletion.d.ts +49 -0
  282. package/dist/src/ui/hooks/useShellCompletion.js +489 -0
  283. package/dist/src/ui/hooks/useShellCompletion.js.map +1 -0
  284. package/dist/src/ui/hooks/useShellCompletion.test.d.ts +6 -0
  285. package/dist/src/ui/hooks/useShellCompletion.test.js +354 -0
  286. package/dist/src/ui/hooks/useShellCompletion.test.js.map +1 -0
  287. package/dist/src/ui/hooks/useTimedMessage.d.ts +1 -1
  288. package/dist/src/ui/hooks/useTimedMessage.js +5 -3
  289. package/dist/src/ui/hooks/useTimedMessage.js.map +1 -1
  290. package/dist/src/ui/hooks/useToolScheduler.js +5 -0
  291. package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
  292. package/dist/src/ui/hooks/useToolScheduler.test.js +28 -19
  293. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  294. package/dist/src/ui/types.d.ts +3 -0
  295. package/dist/src/ui/types.js.map +1 -1
  296. package/dist/src/ui/utils/InlineMarkdownRenderer.js +4 -86
  297. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  298. package/dist/src/ui/utils/MarkdownDisplay.test.js +2 -2
  299. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  300. package/dist/src/ui/utils/TableRenderer.js +18 -12
  301. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  302. package/dist/src/ui/utils/TableRenderer.test.js +152 -22
  303. package/dist/src/ui/utils/TableRenderer.test.js.map +1 -1
  304. package/dist/src/ui/utils/borderStyles.js +4 -1
  305. package/dist/src/ui/utils/borderStyles.js.map +1 -1
  306. package/dist/src/ui/utils/borderStyles.test.d.ts +6 -0
  307. package/dist/src/ui/utils/borderStyles.test.js +141 -0
  308. package/dist/src/ui/utils/borderStyles.test.js.map +1 -0
  309. package/dist/src/ui/utils/editorUtils.d.ts +17 -0
  310. package/dist/src/ui/utils/editorUtils.js +104 -0
  311. package/dist/src/ui/utils/editorUtils.js.map +1 -0
  312. package/dist/src/ui/utils/markdownParsingUtils.d.ts +10 -0
  313. package/dist/src/ui/utils/markdownParsingUtils.js +150 -0
  314. package/dist/src/ui/utils/markdownParsingUtils.js.map +1 -0
  315. package/dist/src/ui/utils/markdownParsingUtils.test.d.ts +6 -0
  316. package/dist/src/ui/utils/markdownParsingUtils.test.js +163 -0
  317. package/dist/src/ui/utils/markdownParsingUtils.test.js.map +1 -0
  318. package/dist/src/ui/utils/ui-sizing.d.ts +2 -2
  319. package/dist/src/ui/utils/ui-sizing.js +2 -3
  320. package/dist/src/ui/utils/ui-sizing.js.map +1 -1
  321. package/dist/src/ui/utils/ui-sizing.test.js +5 -19
  322. package/dist/src/ui/utils/ui-sizing.test.js.map +1 -1
  323. package/dist/src/utils/cleanup.d.ts +2 -0
  324. package/dist/src/utils/cleanup.js +51 -1
  325. package/dist/src/utils/cleanup.js.map +1 -1
  326. package/dist/src/utils/cleanup.test.js +130 -2
  327. package/dist/src/utils/cleanup.test.js.map +1 -1
  328. package/dist/src/zed-integration/zedIntegration.d.ts +2 -1
  329. package/dist/src/zed-integration/zedIntegration.js +35 -11
  330. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  331. package/dist/src/zed-integration/zedIntegration.test.js +17 -1
  332. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  333. package/dist/tsconfig.tsbuildinfo +1 -1
  334. package/package.json +3 -3
  335. package/dist/google-gemini-cli-0.31.0-preview.1.tgz +0 -0
@@ -288,5 +288,158 @@ describe('ScrollableList Demo Behavior', () => {
288
288
  });
289
289
  });
290
290
  });
291
+ it('regression: remove last item and add 2 items when scrolled to bottom', async () => {
292
+ let listRef = null;
293
+ let setItemsFunc = null;
294
+ const TestComp = () => {
295
+ const [items, setItems] = useState(Array.from({ length: 10 }, (_, i) => ({
296
+ id: String(i),
297
+ title: `Item ${i}`,
298
+ })));
299
+ useEffect(() => {
300
+ setItemsFunc = setItems;
301
+ }, []);
302
+ return (_jsx(MouseProvider, { mouseEventsEnabled: false, children: _jsx(KeypressProvider, { children: _jsx(ScrollProvider, { children: _jsx(Box, { flexDirection: "column", width: 80, height: 5, children: _jsx(ScrollableList, { ref: (ref) => {
303
+ listRef = ref;
304
+ }, data: items, renderItem: ({ item }) => _jsx(Text, { children: item.title }), estimatedItemHeight: () => 1, keyExtractor: (item) => item.id, hasFocus: true, initialScrollIndex: Number.MAX_SAFE_INTEGER }) }) }) }) }));
305
+ };
306
+ let result;
307
+ await act(async () => {
308
+ result = render(_jsx(TestComp, {}));
309
+ });
310
+ await result.waitUntilReady();
311
+ // Scrolled to bottom, max scroll = 10 - 5 = 5
312
+ await waitFor(() => {
313
+ expect(listRef?.getScrollState()?.scrollTop).toBe(5);
314
+ });
315
+ // Remove last element and add 2 elements
316
+ await act(async () => {
317
+ setItemsFunc((prev) => {
318
+ const next = prev.slice(0, prev.length - 1);
319
+ next.push({ id: '10', title: 'Item 10' });
320
+ next.push({ id: '11', title: 'Item 11' });
321
+ return next;
322
+ });
323
+ });
324
+ await result.waitUntilReady();
325
+ // Auto scrolls to new bottom: max scroll = 11 - 5 = 6
326
+ await waitFor(() => {
327
+ expect(listRef?.getScrollState()?.scrollTop).toBe(6);
328
+ });
329
+ // Scroll up slightly
330
+ await act(async () => {
331
+ listRef?.scrollBy(-2);
332
+ });
333
+ await result.waitUntilReady();
334
+ await waitFor(() => {
335
+ expect(listRef?.getScrollState()?.scrollTop).toBe(4);
336
+ });
337
+ // Scroll back to bottom
338
+ await act(async () => {
339
+ listRef?.scrollToEnd();
340
+ });
341
+ await result.waitUntilReady();
342
+ await waitFor(() => {
343
+ expect(listRef?.getScrollState()?.scrollTop).toBe(6);
344
+ });
345
+ // Add two more elements
346
+ await act(async () => {
347
+ setItemsFunc((prev) => [
348
+ ...prev,
349
+ { id: '12', title: 'Item 12' },
350
+ { id: '13', title: 'Item 13' },
351
+ ]);
352
+ });
353
+ await result.waitUntilReady();
354
+ // Auto scrolls to bottom: max scroll = 13 - 5 = 8
355
+ await waitFor(() => {
356
+ expect(listRef?.getScrollState()?.scrollTop).toBe(8);
357
+ });
358
+ result.unmount();
359
+ });
360
+ it('regression: bottom-most element changes size but list does not update', async () => {
361
+ let listRef = null;
362
+ let expandLastFunc = null;
363
+ const ItemWithState = ({ item, isLast, }) => {
364
+ const [expanded, setExpanded] = useState(false);
365
+ useEffect(() => {
366
+ if (isLast) {
367
+ expandLastFunc = () => setExpanded(true);
368
+ }
369
+ }, [isLast]);
370
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { children: item.title }), expanded && _jsx(Text, { children: "Expanded content" })] }));
371
+ };
372
+ const TestComp = () => {
373
+ // items array is stable
374
+ const [items] = useState(() => Array.from({ length: 5 }, (_, i) => ({
375
+ id: String(i),
376
+ title: `Item ${i}`,
377
+ })));
378
+ return (_jsx(MouseProvider, { mouseEventsEnabled: false, children: _jsx(KeypressProvider, { children: _jsx(ScrollProvider, { children: _jsx(Box, { flexDirection: "column", width: 80, height: 4, children: _jsx(ScrollableList, { ref: (ref) => {
379
+ listRef = ref;
380
+ }, data: items, renderItem: ({ item, index }) => (_jsx(ItemWithState, { item: item, isLast: index === 4 })), estimatedItemHeight: () => 1, keyExtractor: (item) => item.id, hasFocus: true, initialScrollIndex: Number.MAX_SAFE_INTEGER }) }) }) }) }));
381
+ };
382
+ let result;
383
+ await act(async () => {
384
+ result = render(_jsx(TestComp, {}));
385
+ });
386
+ await result.waitUntilReady();
387
+ // Initially, total height is 5. viewport is 4. scroll is 1.
388
+ await waitFor(() => {
389
+ expect(listRef?.getScrollState()?.scrollTop).toBe(1);
390
+ });
391
+ // Expand the last item locally, without re-rendering the list!
392
+ await act(async () => {
393
+ expandLastFunc();
394
+ });
395
+ await result.waitUntilReady();
396
+ // The total height becomes 6. It should remain scrolled to bottom, so scroll becomes 2.
397
+ // This is expected to FAIL currently because VirtualizedList won't remeasure
398
+ // unless data changes or container height changes.
399
+ await waitFor(() => {
400
+ expect(listRef?.getScrollState()?.scrollTop).toBe(2);
401
+ }, { timeout: 1000 });
402
+ result.unmount();
403
+ });
404
+ it('regression: prepending items does not corrupt heights (total height correct)', async () => {
405
+ let listRef = null;
406
+ let setItemsFunc = null;
407
+ const TestComp = () => {
408
+ // Items 1 to 5. Item 1 is very tall.
409
+ const [items, setItems] = useState(Array.from({ length: 5 }, (_, i) => ({
410
+ id: String(i + 1),
411
+ title: `Item ${i + 1}`,
412
+ })));
413
+ useEffect(() => {
414
+ setItemsFunc = setItems;
415
+ }, []);
416
+ return (_jsx(MouseProvider, { mouseEventsEnabled: false, children: _jsx(KeypressProvider, { children: _jsx(ScrollProvider, { children: _jsx(Box, { flexDirection: "column", width: 80, height: 10, children: _jsx(ScrollableList, { ref: (ref) => {
417
+ listRef = ref;
418
+ }, data: items, renderItem: ({ item }) => (_jsx(Box, { height: item.id === '1' ? 10 : 2, children: _jsx(Text, { children: item.title }) })), estimatedItemHeight: () => 2, keyExtractor: (item) => item.id, hasFocus: true, initialScrollIndex: Number.MAX_SAFE_INTEGER }) }) }) }) }));
419
+ };
420
+ let result;
421
+ await act(async () => {
422
+ result = render(_jsx(TestComp, {}));
423
+ });
424
+ await result.waitUntilReady();
425
+ // Scroll is at bottom.
426
+ // Heights: Item 1: 10, Item 2: 2, Item 3: 2, Item 4: 2, Item 5: 2.
427
+ // Total height = 18. Container = 10. Max scroll = 8.
428
+ await waitFor(() => {
429
+ expect(listRef?.getScrollState()?.scrollTop).toBe(8);
430
+ });
431
+ // Prepend an item!
432
+ await act(async () => {
433
+ setItemsFunc((prev) => [{ id: '0', title: 'Item 0' }, ...prev]);
434
+ });
435
+ await result.waitUntilReady();
436
+ // Now items: 0(2), 1(10), 2(2), 3(2), 4(2), 5(2).
437
+ // Total height = 20. Container = 10. Max scroll = 10.
438
+ // Auto-scrolls to bottom because it was sticking!
439
+ await waitFor(() => {
440
+ expect(listRef?.getScrollState()?.scrollTop).toBe(10);
441
+ });
442
+ result.unmount();
443
+ });
291
444
  });
292
445
  //# sourceMappingURL=ScrollableList.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScrollableList.test.js","sourceRoot":"","sources":["../../../../../src/ui/components/shared/ScrollableList.test.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScrollableList.test.js","sourceRoot":"","sources":["../../../../../src/ui/components/shared/ScrollableList.test.tsx"],"names":[],"mappings":"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"}
@@ -4,11 +4,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  * Copyright 2025 Google LLC
5
5
  * SPDX-License-Identifier: Apache-2.0
6
6
  */
7
- import { useState, useRef, useLayoutEffect, forwardRef, useImperativeHandle, useEffect, useMemo, useCallback, } from 'react';
7
+ import { useState, useRef, useLayoutEffect, forwardRef, useImperativeHandle, useMemo, useCallback, } from 'react';
8
8
  import { theme } from '../../semantic-colors.js';
9
9
  import { useBatchedScroll } from '../../hooks/useBatchedScroll.js';
10
10
  import { useUIState } from '../../contexts/UIStateContext.js';
11
- import { measureElement, Box } from 'ink';
11
+ import { Box, ResizeObserver } from 'ink';
12
12
  export const SCROLL_TO_ITEM_END = Number.MAX_SAFE_INTEGER;
13
13
  function findLastIndex(array, predicate) {
14
14
  for (let i = array.length - 1; i >= 0; i--) {
@@ -22,7 +22,7 @@ function VirtualizedList(props, ref) {
22
22
  const { data, renderItem, estimatedItemHeight, keyExtractor, initialScrollIndex, initialScrollOffsetInIndex, } = props;
23
23
  const { copyModeEnabled } = useUIState();
24
24
  const dataRef = useRef(data);
25
- useEffect(() => {
25
+ useLayoutEffect(() => {
26
26
  dataRef.current = data;
27
27
  }, [data]);
28
28
  const [scrollAnchor, setScrollAnchor] = useState(() => {
@@ -54,65 +54,58 @@ function VirtualizedList(props, ref) {
54
54
  const containerRef = useRef(null);
55
55
  const [containerHeight, setContainerHeight] = useState(0);
56
56
  const itemRefs = useRef([]);
57
- const [heights, setHeights] = useState([]);
57
+ const [heights, setHeights] = useState({});
58
58
  const isInitialScrollSet = useRef(false);
59
+ const containerObserverRef = useRef(null);
60
+ const nodeToKeyRef = useRef(new WeakMap());
61
+ const containerRefCallback = useCallback((node) => {
62
+ containerObserverRef.current?.disconnect();
63
+ containerRef.current = node;
64
+ if (node) {
65
+ const observer = new ResizeObserver((entries) => {
66
+ const entry = entries[0];
67
+ if (entry) {
68
+ setContainerHeight(Math.round(entry.contentRect.height));
69
+ }
70
+ });
71
+ observer.observe(node);
72
+ containerObserverRef.current = observer;
73
+ }
74
+ }, []);
75
+ const itemsObserver = useMemo(() => new ResizeObserver((entries) => {
76
+ setHeights((prev) => {
77
+ let next = null;
78
+ for (const entry of entries) {
79
+ const key = nodeToKeyRef.current.get(entry.target);
80
+ if (key !== undefined) {
81
+ const height = Math.round(entry.contentRect.height);
82
+ if (prev[key] !== height) {
83
+ if (!next) {
84
+ next = { ...prev };
85
+ }
86
+ next[key] = height;
87
+ }
88
+ }
89
+ }
90
+ return next ?? prev;
91
+ });
92
+ }), []);
93
+ useLayoutEffect(() => () => {
94
+ containerObserverRef.current?.disconnect();
95
+ itemsObserver.disconnect();
96
+ }, [itemsObserver]);
59
97
  const { totalHeight, offsets } = useMemo(() => {
60
98
  const offsets = [0];
61
99
  let totalHeight = 0;
62
100
  for (let i = 0; i < data.length; i++) {
63
- const height = heights[i] ?? estimatedItemHeight(i);
101
+ const key = keyExtractor(data[i], i);
102
+ const height = heights[key] ?? estimatedItemHeight(i);
64
103
  totalHeight += height;
65
104
  offsets.push(totalHeight);
66
105
  }
67
106
  return { totalHeight, offsets };
68
- }, [heights, data, estimatedItemHeight]);
69
- useEffect(() => {
70
- setHeights((prevHeights) => {
71
- if (data.length === prevHeights.length) {
72
- return prevHeights;
73
- }
74
- const newHeights = [...prevHeights];
75
- if (data.length < prevHeights.length) {
76
- newHeights.length = data.length;
77
- }
78
- else {
79
- for (let i = prevHeights.length; i < data.length; i++) {
80
- newHeights[i] = estimatedItemHeight(i);
81
- }
82
- }
83
- return newHeights;
84
- });
85
- }, [data, estimatedItemHeight]);
86
- // This layout effect needs to run on every render to correctly measure the
87
- // container and ensure we recompute the layout if it has changed.
88
- // eslint-disable-next-line react-hooks/exhaustive-deps
89
- useLayoutEffect(() => {
90
- if (containerRef.current) {
91
- const height = Math.round(measureElement(containerRef.current).height);
92
- if (containerHeight !== height) {
93
- setContainerHeight(height);
94
- }
95
- }
96
- let newHeights = null;
97
- for (let i = startIndex; i <= endIndex; i++) {
98
- const itemRef = itemRefs.current[i];
99
- if (itemRef) {
100
- const height = Math.round(measureElement(itemRef).height);
101
- if (height !== heights[i]) {
102
- if (!newHeights) {
103
- newHeights = [...heights];
104
- }
105
- newHeights[i] = height;
106
- }
107
- }
108
- }
109
- if (newHeights) {
110
- setHeights(newHeights);
111
- }
112
- });
113
- const scrollableContainerHeight = containerRef.current
114
- ? Math.round(measureElement(containerRef.current).height)
115
- : containerHeight;
107
+ }, [heights, data, estimatedItemHeight, keyExtractor]);
108
+ const scrollableContainerHeight = containerHeight;
116
109
  const getAnchorForScrollTop = useCallback((scrollTop, offsets) => {
117
110
  const index = findLastIndex(offsets, (offset) => offset <= scrollTop);
118
111
  if (index === -1) {
@@ -120,68 +113,70 @@ function VirtualizedList(props, ref) {
120
113
  }
121
114
  return { index, offset: scrollTop - offsets[index] };
122
115
  }, []);
123
- const scrollTop = useMemo(() => {
116
+ const actualScrollTop = useMemo(() => {
124
117
  const offset = offsets[scrollAnchor.index];
125
118
  if (typeof offset !== 'number') {
126
119
  return 0;
127
120
  }
128
121
  if (scrollAnchor.offset === SCROLL_TO_ITEM_END) {
129
- const itemHeight = heights[scrollAnchor.index] ?? 0;
122
+ const item = data[scrollAnchor.index];
123
+ const key = item ? keyExtractor(item, scrollAnchor.index) : '';
124
+ const itemHeight = heights[key] ?? 0;
130
125
  return offset + itemHeight - scrollableContainerHeight;
131
126
  }
132
127
  return offset + scrollAnchor.offset;
133
- }, [scrollAnchor, offsets, heights, scrollableContainerHeight]);
128
+ }, [
129
+ scrollAnchor,
130
+ offsets,
131
+ heights,
132
+ scrollableContainerHeight,
133
+ data,
134
+ keyExtractor,
135
+ ]);
136
+ const scrollTop = isStickingToBottom
137
+ ? Number.MAX_SAFE_INTEGER
138
+ : actualScrollTop;
134
139
  const prevDataLength = useRef(data.length);
135
140
  const prevTotalHeight = useRef(totalHeight);
136
- const prevScrollTop = useRef(scrollTop);
141
+ const prevScrollTop = useRef(actualScrollTop);
137
142
  const prevContainerHeight = useRef(scrollableContainerHeight);
138
143
  useLayoutEffect(() => {
139
144
  const contentPreviouslyFit = prevTotalHeight.current <= prevContainerHeight.current;
140
145
  const wasScrolledToBottomPixels = prevScrollTop.current >=
141
146
  prevTotalHeight.current - prevContainerHeight.current - 1;
142
147
  const wasAtBottom = contentPreviouslyFit || wasScrolledToBottomPixels;
143
- // If the user was at the bottom, they are now sticking. This handles
144
- // manually scrolling back to the bottom.
145
- if (wasAtBottom && scrollTop >= prevScrollTop.current) {
148
+ if (wasAtBottom && actualScrollTop >= prevScrollTop.current) {
146
149
  setIsStickingToBottom(true);
147
150
  }
148
151
  const listGrew = data.length > prevDataLength.current;
149
152
  const containerChanged = prevContainerHeight.current !== scrollableContainerHeight;
150
- // We scroll to the end if:
151
- // 1. The list grew AND we were already at the bottom (or sticking).
152
- // 2. We are sticking to the bottom AND the container size changed.
153
153
  if ((listGrew && (isStickingToBottom || wasAtBottom)) ||
154
154
  (isStickingToBottom && containerChanged)) {
155
155
  setScrollAnchor({
156
156
  index: data.length > 0 ? data.length - 1 : 0,
157
157
  offset: SCROLL_TO_ITEM_END,
158
158
  });
159
- // If we are scrolling to the bottom, we are by definition sticking.
160
159
  if (!isStickingToBottom) {
161
160
  setIsStickingToBottom(true);
162
161
  }
163
162
  }
164
- // Scenario 2: The list has changed (shrunk) in a way that our
165
- // current scroll position or anchor is invalid. We should adjust to the bottom.
166
163
  else if ((scrollAnchor.index >= data.length ||
167
- scrollTop > totalHeight - scrollableContainerHeight) &&
164
+ actualScrollTop > totalHeight - scrollableContainerHeight) &&
168
165
  data.length > 0) {
169
166
  const newScrollTop = Math.max(0, totalHeight - scrollableContainerHeight);
170
167
  setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
171
168
  }
172
169
  else if (data.length === 0) {
173
- // List is now empty, reset scroll to top.
174
170
  setScrollAnchor({ index: 0, offset: 0 });
175
171
  }
176
- // Update refs for the next render cycle.
177
172
  prevDataLength.current = data.length;
178
173
  prevTotalHeight.current = totalHeight;
179
- prevScrollTop.current = scrollTop;
174
+ prevScrollTop.current = actualScrollTop;
180
175
  prevContainerHeight.current = scrollableContainerHeight;
181
176
  }, [
182
177
  data.length,
183
178
  totalHeight,
184
- scrollTop,
179
+ actualScrollTop,
185
180
  scrollableContainerHeight,
186
181
  scrollAnchor.index,
187
182
  getAnchorForScrollTop,
@@ -226,18 +221,43 @@ function VirtualizedList(props, ref) {
226
221
  heights,
227
222
  scrollableContainerHeight,
228
223
  ]);
229
- const startIndex = Math.max(0, findLastIndex(offsets, (offset) => offset <= scrollTop) - 1);
230
- const endIndexOffset = offsets.findIndex((offset) => offset > scrollTop + scrollableContainerHeight);
224
+ const startIndex = Math.max(0, findLastIndex(offsets, (offset) => offset <= actualScrollTop) - 1);
225
+ const endIndexOffset = offsets.findIndex((offset) => offset > actualScrollTop + scrollableContainerHeight);
231
226
  const endIndex = endIndexOffset === -1
232
227
  ? data.length - 1
233
228
  : Math.min(data.length - 1, endIndexOffset);
234
229
  const topSpacerHeight = offsets[startIndex] ?? 0;
235
230
  const bottomSpacerHeight = totalHeight - (offsets[endIndex + 1] ?? totalHeight);
231
+ // Maintain a stable set of observed nodes using useLayoutEffect
232
+ const observedNodes = useRef(new Set());
233
+ useLayoutEffect(() => {
234
+ const currentNodes = new Set();
235
+ for (let i = startIndex; i <= endIndex; i++) {
236
+ const node = itemRefs.current[i];
237
+ const item = data[i];
238
+ if (node && item) {
239
+ currentNodes.add(node);
240
+ const key = keyExtractor(item, i);
241
+ // Always update the key mapping because React can reuse nodes at different indices/keys
242
+ nodeToKeyRef.current.set(node, key);
243
+ if (!observedNodes.current.has(node)) {
244
+ itemsObserver.observe(node);
245
+ }
246
+ }
247
+ }
248
+ for (const node of observedNodes.current) {
249
+ if (!currentNodes.has(node)) {
250
+ itemsObserver.unobserve(node);
251
+ nodeToKeyRef.current.delete(node);
252
+ }
253
+ }
254
+ observedNodes.current = currentNodes;
255
+ });
236
256
  const renderedItems = [];
237
257
  for (let i = startIndex; i <= endIndex; i++) {
238
258
  const item = data[i];
239
259
  if (item) {
240
- renderedItems.push(_jsx(Box, { width: "100%", ref: (el) => {
260
+ renderedItems.push(_jsx(Box, { width: "100%", flexDirection: "column", flexShrink: 0, ref: (el) => {
241
261
  itemRefs.current[i] = el;
242
262
  }, children: renderItem({ item, index: i }) }, keyExtractor(item, i)));
243
263
  }
@@ -249,18 +269,38 @@ function VirtualizedList(props, ref) {
249
269
  setIsStickingToBottom(false);
250
270
  }
251
271
  const currentScrollTop = getScrollTop();
252
- const newScrollTop = Math.max(0, Math.min(totalHeight - scrollableContainerHeight, currentScrollTop + delta));
272
+ const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
273
+ const actualCurrent = Math.min(currentScrollTop, maxScroll);
274
+ let newScrollTop = Math.max(0, actualCurrent + delta);
275
+ if (newScrollTop >= maxScroll) {
276
+ setIsStickingToBottom(true);
277
+ newScrollTop = Number.MAX_SAFE_INTEGER;
278
+ }
253
279
  setPendingScrollTop(newScrollTop);
254
- setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
280
+ setScrollAnchor(getAnchorForScrollTop(Math.min(newScrollTop, maxScroll), offsets));
255
281
  },
256
282
  scrollTo: (offset) => {
257
- setIsStickingToBottom(false);
258
- const newScrollTop = Math.max(0, Math.min(totalHeight - scrollableContainerHeight, offset));
259
- setPendingScrollTop(newScrollTop);
260
- setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
283
+ const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
284
+ if (offset >= maxScroll || offset === SCROLL_TO_ITEM_END) {
285
+ setIsStickingToBottom(true);
286
+ setPendingScrollTop(Number.MAX_SAFE_INTEGER);
287
+ if (data.length > 0) {
288
+ setScrollAnchor({
289
+ index: data.length - 1,
290
+ offset: SCROLL_TO_ITEM_END,
291
+ });
292
+ }
293
+ }
294
+ else {
295
+ setIsStickingToBottom(false);
296
+ const newScrollTop = Math.max(0, offset);
297
+ setPendingScrollTop(newScrollTop);
298
+ setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
299
+ }
261
300
  },
262
301
  scrollToEnd: () => {
263
302
  setIsStickingToBottom(true);
303
+ setPendingScrollTop(Number.MAX_SAFE_INTEGER);
264
304
  if (data.length > 0) {
265
305
  setScrollAnchor({
266
306
  index: data.length - 1,
@@ -272,7 +312,8 @@ function VirtualizedList(props, ref) {
272
312
  setIsStickingToBottom(false);
273
313
  const offset = offsets[index];
274
314
  if (offset !== undefined) {
275
- const newScrollTop = Math.max(0, Math.min(totalHeight - scrollableContainerHeight, offset - viewPosition * scrollableContainerHeight + viewOffset));
315
+ const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
316
+ const newScrollTop = Math.max(0, Math.min(maxScroll, offset - viewPosition * scrollableContainerHeight + viewOffset));
276
317
  setPendingScrollTop(newScrollTop);
277
318
  setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
278
319
  }
@@ -283,18 +324,22 @@ function VirtualizedList(props, ref) {
283
324
  if (index !== -1) {
284
325
  const offset = offsets[index];
285
326
  if (offset !== undefined) {
286
- const newScrollTop = Math.max(0, Math.min(totalHeight - scrollableContainerHeight, offset - viewPosition * scrollableContainerHeight + viewOffset));
327
+ const maxScroll = Math.max(0, totalHeight - scrollableContainerHeight);
328
+ const newScrollTop = Math.max(0, Math.min(maxScroll, offset - viewPosition * scrollableContainerHeight + viewOffset));
287
329
  setPendingScrollTop(newScrollTop);
288
330
  setScrollAnchor(getAnchorForScrollTop(newScrollTop, offsets));
289
331
  }
290
332
  }
291
333
  },
292
334
  getScrollIndex: () => scrollAnchor.index,
293
- getScrollState: () => ({
294
- scrollTop: getScrollTop(),
295
- scrollHeight: totalHeight,
296
- innerHeight: containerHeight,
297
- }),
335
+ getScrollState: () => {
336
+ const maxScroll = Math.max(0, totalHeight - containerHeight);
337
+ return {
338
+ scrollTop: Math.min(getScrollTop(), maxScroll),
339
+ scrollHeight: totalHeight,
340
+ innerHeight: containerHeight,
341
+ };
342
+ },
298
343
  }), [
299
344
  offsets,
300
345
  scrollAnchor,
@@ -306,7 +351,7 @@ function VirtualizedList(props, ref) {
306
351
  setPendingScrollTop,
307
352
  containerHeight,
308
353
  ]);
309
- return (_jsx(Box, { ref: containerRef, overflowY: copyModeEnabled ? 'hidden' : 'scroll', overflowX: "hidden", scrollTop: copyModeEnabled ? 0 : scrollTop, scrollbarThumbColor: props.scrollbarThumbColor ?? theme.text.secondary, width: "100%", height: "100%", flexDirection: "column", paddingRight: copyModeEnabled ? 0 : 1, children: _jsxs(Box, { flexShrink: 0, width: "100%", flexDirection: "column", marginTop: copyModeEnabled ? -scrollTop : 0, children: [_jsx(Box, { height: topSpacerHeight, flexShrink: 0 }), renderedItems, _jsx(Box, { height: bottomSpacerHeight, flexShrink: 0 })] }) }));
354
+ return (_jsx(Box, { ref: containerRefCallback, overflowY: copyModeEnabled ? 'hidden' : 'scroll', overflowX: "hidden", scrollTop: copyModeEnabled ? 0 : scrollTop, scrollbarThumbColor: props.scrollbarThumbColor ?? theme.text.secondary, width: "100%", height: "100%", flexDirection: "column", paddingRight: copyModeEnabled ? 0 : 1, children: _jsxs(Box, { flexShrink: 0, width: "100%", flexDirection: "column", marginTop: copyModeEnabled ? -actualScrollTop : 0, children: [_jsx(Box, { height: topSpacerHeight, flexShrink: 0 }), renderedItems, _jsx(Box, { height: bottomSpacerHeight, flexShrink: 0 })] }) }));
310
355
  }
311
356
  // eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
312
357
  const VirtualizedListWithForwardRef = forwardRef(VirtualizedList);