@google/gemini-cli 0.31.0 → 0.32.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 (327) 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/settingsSchema.d.ts +98 -3
  43. package/dist/src/config/settingsSchema.js +92 -1
  44. package/dist/src/config/settingsSchema.js.map +1 -1
  45. package/dist/src/config/settingsSchema.test.js +49 -0
  46. package/dist/src/config/settingsSchema.test.js.map +1 -1
  47. package/dist/src/gemini.js +7 -8
  48. package/dist/src/gemini.js.map +1 -1
  49. package/dist/src/gemini.test.js +5 -1
  50. package/dist/src/gemini.test.js.map +1 -1
  51. package/dist/src/generated/git-commit.d.ts +2 -2
  52. package/dist/src/generated/git-commit.js +2 -2
  53. package/dist/src/test-utils/AppRig.d.ts +26 -0
  54. package/dist/src/test-utils/AppRig.js +128 -6
  55. package/dist/src/test-utils/AppRig.js.map +1 -1
  56. package/dist/src/test-utils/customMatchers.d.ts +25 -5
  57. package/dist/src/test-utils/customMatchers.js +46 -0
  58. package/dist/src/test-utils/customMatchers.js.map +1 -1
  59. package/dist/src/test-utils/mockConfig.js +4 -0
  60. package/dist/src/test-utils/mockConfig.js.map +1 -1
  61. package/dist/src/test-utils/mockDebugLogger.d.ts +35 -0
  62. package/dist/src/test-utils/mockDebugLogger.js +67 -0
  63. package/dist/src/test-utils/mockDebugLogger.js.map +1 -0
  64. package/dist/src/test-utils/render.d.ts +13 -0
  65. package/dist/src/test-utils/render.js +48 -8
  66. package/dist/src/test-utils/render.js.map +1 -1
  67. package/dist/src/test-utils/svg.d.ts +7 -0
  68. package/dist/src/test-utils/svg.js +163 -0
  69. package/dist/src/test-utils/svg.js.map +1 -0
  70. package/dist/src/ui/AppContainer.js +48 -66
  71. package/dist/src/ui/AppContainer.js.map +1 -1
  72. package/dist/src/ui/AppContainer.test.js +89 -0
  73. package/dist/src/ui/AppContainer.test.js.map +1 -1
  74. package/dist/src/ui/commands/mcpCommand.js +17 -3
  75. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  76. package/dist/src/ui/commands/mcpCommand.test.js +10 -3
  77. package/dist/src/ui/commands/mcpCommand.test.js.map +1 -1
  78. package/dist/src/ui/commands/setupGithubCommand.js +2 -0
  79. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
  80. package/dist/src/ui/commands/statsCommand.js +10 -4
  81. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  82. package/dist/src/ui/commands/statsCommand.test.js +12 -3
  83. package/dist/src/ui/commands/statsCommand.test.js.map +1 -1
  84. package/dist/src/ui/components/AnsiOutput.test.js +3 -3
  85. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -1
  86. package/dist/src/ui/components/AskUserDialog.d.ts +4 -0
  87. package/dist/src/ui/components/AskUserDialog.js +5 -5
  88. package/dist/src/ui/components/AskUserDialog.js.map +1 -1
  89. package/dist/src/ui/components/AskUserDialog.test.js +6 -7
  90. package/dist/src/ui/components/AskUserDialog.test.js.map +1 -1
  91. package/dist/src/ui/components/Composer.js +17 -6
  92. package/dist/src/ui/components/Composer.js.map +1 -1
  93. package/dist/src/ui/components/Composer.test.js +47 -6
  94. package/dist/src/ui/components/Composer.test.js.map +1 -1
  95. package/dist/src/ui/components/ConfigInitDisplay.js +1 -1
  96. package/dist/src/ui/components/ConfigInitDisplay.js.map +1 -1
  97. package/dist/src/ui/components/ConfigInitDisplay.test.js +6 -6
  98. package/dist/src/ui/components/ConfigInitDisplay.test.js.map +1 -1
  99. package/dist/src/ui/components/DetailedMessagesDisplay.js +6 -1
  100. package/dist/src/ui/components/DetailedMessagesDisplay.js.map +1 -1
  101. package/dist/src/ui/components/DetailedMessagesDisplay.test.js +43 -4
  102. package/dist/src/ui/components/DetailedMessagesDisplay.test.js.map +1 -1
  103. package/dist/src/ui/components/DialogManager.js +9 -1
  104. package/dist/src/ui/components/DialogManager.js.map +1 -1
  105. package/dist/src/ui/components/DialogManager.test.js +4 -0
  106. package/dist/src/ui/components/DialogManager.test.js.map +1 -1
  107. package/dist/src/ui/components/EmptyWalletDialog.d.ts +22 -0
  108. package/dist/src/ui/components/EmptyWalletDialog.js +33 -0
  109. package/dist/src/ui/components/EmptyWalletDialog.js.map +1 -0
  110. package/dist/src/ui/components/EmptyWalletDialog.test.d.ts +6 -0
  111. package/dist/src/ui/components/EmptyWalletDialog.test.js +127 -0
  112. package/dist/src/ui/components/EmptyWalletDialog.test.js.map +1 -0
  113. package/dist/src/ui/components/ExitPlanModeDialog.d.ts +2 -1
  114. package/dist/src/ui/components/ExitPlanModeDialog.js +34 -7
  115. package/dist/src/ui/components/ExitPlanModeDialog.js.map +1 -1
  116. package/dist/src/ui/components/ExitPlanModeDialog.test.js +31 -2
  117. package/dist/src/ui/components/ExitPlanModeDialog.test.js.map +1 -1
  118. package/dist/src/ui/components/FolderTrustDialog.test.js +1 -1
  119. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  120. package/dist/src/ui/components/Footer.js +3 -1
  121. package/dist/src/ui/components/Footer.js.map +1 -1
  122. package/dist/src/ui/components/Footer.test.js +63 -1
  123. package/dist/src/ui/components/Footer.test.js.map +1 -1
  124. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +0 -5
  125. package/dist/src/ui/components/GeminiRespondingSpinner.js +1 -32
  126. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -1
  127. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +5 -10
  128. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -1
  129. package/dist/src/ui/components/GeminiSpinner.d.ts +13 -0
  130. package/dist/src/ui/components/GeminiSpinner.js +35 -0
  131. package/dist/src/ui/components/GeminiSpinner.js.map +1 -0
  132. package/dist/src/ui/components/HistoryItemDisplay.js +1 -1
  133. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  134. package/dist/src/ui/components/InputPrompt.js +31 -3
  135. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  136. package/dist/src/ui/components/InputPrompt.test.js +82 -18
  137. package/dist/src/ui/components/InputPrompt.test.js.map +1 -1
  138. package/dist/src/ui/components/OverageMenuDialog.d.ts +22 -0
  139. package/dist/src/ui/components/OverageMenuDialog.js +32 -0
  140. package/dist/src/ui/components/OverageMenuDialog.js.map +1 -0
  141. package/dist/src/ui/components/OverageMenuDialog.test.d.ts +6 -0
  142. package/dist/src/ui/components/OverageMenuDialog.test.js +129 -0
  143. package/dist/src/ui/components/OverageMenuDialog.test.js.map +1 -0
  144. package/dist/src/ui/components/ProQuotaDialog.d.ts +3 -1
  145. package/dist/src/ui/components/ProQuotaDialog.js +11 -6
  146. package/dist/src/ui/components/ProQuotaDialog.js.map +1 -1
  147. package/dist/src/ui/components/ProQuotaDialog.test.js +27 -14
  148. package/dist/src/ui/components/ProQuotaDialog.test.js.map +1 -1
  149. package/dist/src/ui/components/SettingsDialog.test.js +9 -11
  150. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  151. package/dist/src/ui/components/StatsDisplay.d.ts +1 -0
  152. package/dist/src/ui/components/StatsDisplay.js +2 -2
  153. package/dist/src/ui/components/StatsDisplay.js.map +1 -1
  154. package/dist/src/ui/components/Table.test.js +23 -4
  155. package/dist/src/ui/components/Table.test.js.map +1 -1
  156. package/dist/src/ui/components/ToastDisplay.js +1 -1
  157. package/dist/src/ui/components/ToastDisplay.js.map +1 -1
  158. package/dist/src/ui/components/ToastDisplay.test.js +2 -2
  159. package/dist/src/ui/components/ToastDisplay.test.js.map +1 -1
  160. package/dist/src/ui/components/ToolConfirmationQueue.js +3 -1
  161. package/dist/src/ui/components/ToolConfirmationQueue.js.map +1 -1
  162. package/dist/src/ui/components/ToolConfirmationQueue.test.js +3 -2
  163. package/dist/src/ui/components/ToolConfirmationQueue.test.js.map +1 -1
  164. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js +1 -1
  165. package/dist/src/ui/components/messages/RedirectionConfirmation.test.js.map +1 -1
  166. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +2 -1
  167. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +3 -2
  168. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  169. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +17 -17
  170. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  171. package/dist/src/ui/components/messages/ToolGroupMessage.js +17 -7
  172. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  173. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +88 -5
  174. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -1
  175. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js +1 -1
  176. package/dist/src/ui/components/messages/ToolOverflowConsistencyChecks.test.js.map +1 -1
  177. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js +11 -4
  178. package/dist/src/ui/components/messages/ToolResultDisplayOverflow.test.js.map +1 -1
  179. package/dist/src/ui/components/shared/DialogFooter.d.ts +2 -0
  180. package/dist/src/ui/components/shared/DialogFooter.js +2 -1
  181. package/dist/src/ui/components/shared/DialogFooter.js.map +1 -1
  182. package/dist/src/ui/components/shared/ExpandableText.test.js +21 -16
  183. package/dist/src/ui/components/shared/ExpandableText.test.js.map +1 -1
  184. package/dist/src/ui/components/shared/MaxSizedBox.js +10 -1
  185. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -1
  186. package/dist/src/ui/components/shared/MaxSizedBox.test.js +8 -8
  187. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -1
  188. package/dist/src/ui/components/shared/Scrollable.d.ts +1 -1
  189. package/dist/src/ui/components/shared/Scrollable.js +76 -43
  190. package/dist/src/ui/components/shared/Scrollable.js.map +1 -1
  191. package/dist/src/ui/components/shared/Scrollable.test.js +15 -20
  192. package/dist/src/ui/components/shared/Scrollable.test.js.map +1 -1
  193. package/dist/src/ui/components/shared/ScrollableList.js +14 -9
  194. package/dist/src/ui/components/shared/ScrollableList.js.map +1 -1
  195. package/dist/src/ui/components/shared/ScrollableList.test.js +153 -0
  196. package/dist/src/ui/components/shared/ScrollableList.test.js.map +1 -1
  197. package/dist/src/ui/components/shared/VirtualizedList.js +133 -88
  198. package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -1
  199. package/dist/src/ui/components/shared/VirtualizedList.test.js +6 -3
  200. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +1 -1
  201. package/dist/src/ui/components/shared/text-buffer.js +3 -30
  202. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  203. package/dist/src/ui/components/views/McpStatus.d.ts +1 -0
  204. package/dist/src/ui/components/views/McpStatus.js +2 -2
  205. package/dist/src/ui/components/views/McpStatus.js.map +1 -1
  206. package/dist/src/ui/components/views/McpStatus.test.js +7 -0
  207. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -1
  208. package/dist/src/ui/contexts/UIActionsContext.d.ts +3 -0
  209. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
  210. package/dist/src/ui/contexts/UIStateContext.d.ts +24 -1
  211. package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
  212. package/dist/src/ui/hooks/atCommandProcessor.js +4 -0
  213. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -1
  214. package/dist/src/ui/hooks/creditsFlowHandler.d.ts +35 -0
  215. package/dist/src/ui/hooks/creditsFlowHandler.js +144 -0
  216. package/dist/src/ui/hooks/creditsFlowHandler.js.map +1 -0
  217. package/dist/src/ui/hooks/creditsFlowHandler.test.d.ts +6 -0
  218. package/dist/src/ui/hooks/creditsFlowHandler.test.js +180 -0
  219. package/dist/src/ui/hooks/creditsFlowHandler.test.js.map +1 -0
  220. package/dist/src/ui/hooks/shell-completions/gitProvider.d.ts +7 -0
  221. package/dist/src/ui/hooks/shell-completions/gitProvider.js +73 -0
  222. package/dist/src/ui/hooks/shell-completions/gitProvider.js.map +1 -0
  223. package/dist/src/ui/hooks/shell-completions/gitProvider.test.d.ts +6 -0
  224. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js +73 -0
  225. package/dist/src/ui/hooks/shell-completions/gitProvider.test.js.map +1 -0
  226. package/dist/src/ui/hooks/shell-completions/index.d.ts +7 -0
  227. package/dist/src/ui/hooks/shell-completions/index.js +16 -0
  228. package/dist/src/ui/hooks/shell-completions/index.js.map +1 -0
  229. package/dist/src/ui/hooks/shell-completions/npmProvider.d.ts +7 -0
  230. package/dist/src/ui/hooks/shell-completions/npmProvider.js +67 -0
  231. package/dist/src/ui/hooks/shell-completions/npmProvider.js.map +1 -0
  232. package/dist/src/ui/hooks/shell-completions/npmProvider.test.d.ts +6 -0
  233. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js +69 -0
  234. package/dist/src/ui/hooks/shell-completions/npmProvider.test.js.map +1 -0
  235. package/dist/src/ui/hooks/shell-completions/types.d.ts +16 -0
  236. package/dist/src/ui/hooks/shell-completions/types.js +7 -0
  237. package/dist/src/ui/hooks/shell-completions/types.js.map +1 -0
  238. package/dist/src/ui/hooks/shellCommandProcessor.js +1 -0
  239. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -1
  240. package/dist/src/ui/hooks/slashCommandProcessor.js +1 -0
  241. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  242. package/dist/src/ui/hooks/toolMapping.js +1 -0
  243. package/dist/src/ui/hooks/toolMapping.js.map +1 -1
  244. package/dist/src/ui/hooks/toolMapping.test.js +25 -0
  245. package/dist/src/ui/hooks/toolMapping.test.js.map +1 -1
  246. package/dist/src/ui/hooks/useAlternateBuffer.d.ts +2 -2
  247. package/dist/src/ui/hooks/useAlternateBuffer.js +5 -4
  248. package/dist/src/ui/hooks/useAlternateBuffer.js.map +1 -1
  249. package/dist/src/ui/hooks/useAlternateBuffer.test.d.ts +6 -0
  250. package/dist/src/ui/hooks/useAlternateBuffer.test.js +57 -0
  251. package/dist/src/ui/hooks/useAlternateBuffer.test.js.map +1 -0
  252. package/dist/src/ui/hooks/useCommandCompletion.d.ts +2 -1
  253. package/dist/src/ui/hooks/useCommandCompletion.js +37 -5
  254. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -1
  255. package/dist/src/ui/hooks/useCommandCompletion.test.js +23 -1
  256. package/dist/src/ui/hooks/useCommandCompletion.test.js.map +1 -1
  257. package/dist/src/ui/hooks/useGeminiStream.js +83 -5
  258. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  259. package/dist/src/ui/hooks/useGeminiStream.test.js +110 -4
  260. package/dist/src/ui/hooks/useGeminiStream.test.js.map +1 -1
  261. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +2 -1
  262. package/dist/src/ui/hooks/useLoadingIndicator.js +7 -2
  263. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -1
  264. package/dist/src/ui/hooks/useLoadingIndicator.test.js +25 -4
  265. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -1
  266. package/dist/src/ui/hooks/usePhraseCycler.test.js.map +1 -1
  267. package/dist/src/ui/hooks/usePrivacySettings.js +9 -3
  268. package/dist/src/ui/hooks/usePrivacySettings.js.map +1 -1
  269. package/dist/src/ui/hooks/useQuotaAndFallback.d.ts +11 -3
  270. package/dist/src/ui/hooks/useQuotaAndFallback.js +84 -12
  271. package/dist/src/ui/hooks/useQuotaAndFallback.js.map +1 -1
  272. package/dist/src/ui/hooks/useQuotaAndFallback.test.js +278 -16
  273. package/dist/src/ui/hooks/useQuotaAndFallback.test.js.map +1 -1
  274. package/dist/src/ui/hooks/useShellCompletion.d.ts +49 -0
  275. package/dist/src/ui/hooks/useShellCompletion.js +489 -0
  276. package/dist/src/ui/hooks/useShellCompletion.js.map +1 -0
  277. package/dist/src/ui/hooks/useShellCompletion.test.d.ts +6 -0
  278. package/dist/src/ui/hooks/useShellCompletion.test.js +354 -0
  279. package/dist/src/ui/hooks/useShellCompletion.test.js.map +1 -0
  280. package/dist/src/ui/hooks/useTimedMessage.d.ts +1 -1
  281. package/dist/src/ui/hooks/useTimedMessage.js +5 -3
  282. package/dist/src/ui/hooks/useTimedMessage.js.map +1 -1
  283. package/dist/src/ui/hooks/useToolScheduler.js +5 -0
  284. package/dist/src/ui/hooks/useToolScheduler.js.map +1 -1
  285. package/dist/src/ui/hooks/useToolScheduler.test.js +28 -19
  286. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  287. package/dist/src/ui/types.d.ts +3 -0
  288. package/dist/src/ui/types.js.map +1 -1
  289. package/dist/src/ui/utils/InlineMarkdownRenderer.js +4 -86
  290. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
  291. package/dist/src/ui/utils/MarkdownDisplay.test.js +2 -2
  292. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  293. package/dist/src/ui/utils/TableRenderer.js +18 -12
  294. package/dist/src/ui/utils/TableRenderer.js.map +1 -1
  295. package/dist/src/ui/utils/TableRenderer.test.js +152 -22
  296. package/dist/src/ui/utils/TableRenderer.test.js.map +1 -1
  297. package/dist/src/ui/utils/borderStyles.js +4 -1
  298. package/dist/src/ui/utils/borderStyles.js.map +1 -1
  299. package/dist/src/ui/utils/borderStyles.test.d.ts +6 -0
  300. package/dist/src/ui/utils/borderStyles.test.js +141 -0
  301. package/dist/src/ui/utils/borderStyles.test.js.map +1 -0
  302. package/dist/src/ui/utils/editorUtils.d.ts +17 -0
  303. package/dist/src/ui/utils/editorUtils.js +104 -0
  304. package/dist/src/ui/utils/editorUtils.js.map +1 -0
  305. package/dist/src/ui/utils/markdownParsingUtils.d.ts +10 -0
  306. package/dist/src/ui/utils/markdownParsingUtils.js +150 -0
  307. package/dist/src/ui/utils/markdownParsingUtils.js.map +1 -0
  308. package/dist/src/ui/utils/markdownParsingUtils.test.d.ts +6 -0
  309. package/dist/src/ui/utils/markdownParsingUtils.test.js +163 -0
  310. package/dist/src/ui/utils/markdownParsingUtils.test.js.map +1 -0
  311. package/dist/src/ui/utils/ui-sizing.d.ts +2 -2
  312. package/dist/src/ui/utils/ui-sizing.js +2 -3
  313. package/dist/src/ui/utils/ui-sizing.js.map +1 -1
  314. package/dist/src/ui/utils/ui-sizing.test.js +5 -19
  315. package/dist/src/ui/utils/ui-sizing.test.js.map +1 -1
  316. package/dist/src/utils/cleanup.d.ts +2 -0
  317. package/dist/src/utils/cleanup.js +51 -1
  318. package/dist/src/utils/cleanup.js.map +1 -1
  319. package/dist/src/utils/cleanup.test.js +130 -2
  320. package/dist/src/utils/cleanup.test.js.map +1 -1
  321. package/dist/src/zed-integration/zedIntegration.d.ts +2 -1
  322. package/dist/src/zed-integration/zedIntegration.js +35 -11
  323. package/dist/src/zed-integration/zedIntegration.js.map +1 -1
  324. package/dist/src/zed-integration/zedIntegration.test.js +17 -1
  325. package/dist/src/zed-integration/zedIntegration.test.js.map +1 -1
  326. package/dist/tsconfig.tsbuildinfo +1 -1
  327. package/package.json +3 -3
@@ -0,0 +1,489 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { useEffect, useRef, useCallback, useMemo } from 'react';
7
+ import * as fs from 'node:fs/promises';
8
+ import * as path from 'node:path';
9
+ import * as os from 'node:os';
10
+ import { debugLogger } from '@google/gemini-cli-core';
11
+ import { getArgumentCompletions } from './shell-completions/index.js';
12
+ /**
13
+ * Maximum number of suggestions to return to avoid freezing the React Ink UI.
14
+ */
15
+ const MAX_SHELL_SUGGESTIONS = 100;
16
+ /**
17
+ * Debounce interval (ms) for file system completions.
18
+ */
19
+ const FS_COMPLETION_DEBOUNCE_MS = 50;
20
+ // Backslash-quote shell metacharacters on non-Windows platforms.
21
+ // On Unix, backslash-quote shell metacharacters (spaces, parens, etc.).
22
+ // On Windows, cmd.exe doesn't use backslash-quoting and `\` is the path
23
+ // separator, so we leave the path as-is.
24
+ const UNIX_SHELL_SPECIAL_CHARS = /[ \t\n\r'"()&|;<>!#$`{}[\]*?\\]/g;
25
+ /**
26
+ * Escapes special shell characters in a path segment.
27
+ */
28
+ export function escapeShellPath(segment) {
29
+ if (process.platform === 'win32') {
30
+ return segment;
31
+ }
32
+ return segment.replace(UNIX_SHELL_SPECIAL_CHARS, '\\$&');
33
+ }
34
+ export function getTokenAtCursor(line, cursorCol) {
35
+ const tokensInfo = [];
36
+ let i = 0;
37
+ while (i < line.length) {
38
+ // Skip whitespace
39
+ if (line[i] === ' ' || line[i] === '\t') {
40
+ i++;
41
+ continue;
42
+ }
43
+ const tokenStart = i;
44
+ let token = '';
45
+ while (i < line.length) {
46
+ const ch = line[i];
47
+ // Backslash escape: consume the next char literally
48
+ if (ch === '\\' && i + 1 < line.length) {
49
+ token += line[i + 1];
50
+ i += 2;
51
+ continue;
52
+ }
53
+ // Single-quoted string
54
+ if (ch === "'") {
55
+ i++; // skip opening quote
56
+ while (i < line.length && line[i] !== "'") {
57
+ token += line[i];
58
+ i++;
59
+ }
60
+ if (i < line.length)
61
+ i++; // skip closing quote
62
+ continue;
63
+ }
64
+ // Double-quoted string
65
+ if (ch === '"') {
66
+ i++; // skip opening quote
67
+ while (i < line.length && line[i] !== '"') {
68
+ if (line[i] === '\\' && i + 1 < line.length) {
69
+ token += line[i + 1];
70
+ i += 2;
71
+ }
72
+ else {
73
+ token += line[i];
74
+ i++;
75
+ }
76
+ }
77
+ if (i < line.length)
78
+ i++; // skip closing quote
79
+ continue;
80
+ }
81
+ // Unquoted whitespace ends the token
82
+ if (ch === ' ' || ch === '\t') {
83
+ break;
84
+ }
85
+ token += ch;
86
+ i++;
87
+ }
88
+ tokensInfo.push({ token, start: tokenStart, end: i });
89
+ }
90
+ const rawTokens = tokensInfo.map((t) => t.token);
91
+ const commandToken = rawTokens.length > 0 ? rawTokens[0] : '';
92
+ if (tokensInfo.length === 0) {
93
+ return {
94
+ token: '',
95
+ start: cursorCol,
96
+ end: cursorCol,
97
+ isFirstToken: true,
98
+ tokens: [''],
99
+ cursorIndex: 0,
100
+ commandToken: '',
101
+ };
102
+ }
103
+ // Find the token that contains or is immediately adjacent to the cursor
104
+ for (let idx = 0; idx < tokensInfo.length; idx++) {
105
+ const t = tokensInfo[idx];
106
+ if (cursorCol >= t.start && cursorCol <= t.end) {
107
+ return {
108
+ token: t.token,
109
+ start: t.start,
110
+ end: t.end,
111
+ isFirstToken: idx === 0,
112
+ tokens: rawTokens,
113
+ cursorIndex: idx,
114
+ commandToken,
115
+ };
116
+ }
117
+ }
118
+ // Cursor is in whitespace between tokens, or at the start/end of the line.
119
+ // Find the appropriate insertion index for a new empty token.
120
+ let insertIndex = tokensInfo.length;
121
+ for (let idx = 0; idx < tokensInfo.length; idx++) {
122
+ if (cursorCol < tokensInfo[idx].start) {
123
+ insertIndex = idx;
124
+ break;
125
+ }
126
+ }
127
+ const newTokens = [
128
+ ...rawTokens.slice(0, insertIndex),
129
+ '',
130
+ ...rawTokens.slice(insertIndex),
131
+ ];
132
+ return {
133
+ token: '',
134
+ start: cursorCol,
135
+ end: cursorCol,
136
+ isFirstToken: insertIndex === 0,
137
+ tokens: newTokens,
138
+ cursorIndex: insertIndex,
139
+ commandToken: newTokens.length > 0 ? newTokens[0] : '',
140
+ };
141
+ }
142
+ export async function scanPathExecutables(signal) {
143
+ const pathEnv = process.env['PATH'] ?? '';
144
+ const dirs = pathEnv.split(path.delimiter).filter(Boolean);
145
+ const isWindows = process.platform === 'win32';
146
+ const pathExtList = isWindows
147
+ ? (process.env['PATHEXT'] ?? '.EXE;.CMD;.BAT;.COM')
148
+ .split(';')
149
+ .filter(Boolean)
150
+ .map((e) => e.toLowerCase())
151
+ : [];
152
+ const seen = new Set();
153
+ const executables = [];
154
+ // Add Windows shell built-ins
155
+ if (isWindows) {
156
+ const builtins = [
157
+ 'assoc',
158
+ 'break',
159
+ 'call',
160
+ 'cd',
161
+ 'chcp',
162
+ 'chdir',
163
+ 'cls',
164
+ 'color',
165
+ 'copy',
166
+ 'date',
167
+ 'del',
168
+ 'dir',
169
+ 'echo',
170
+ 'endlocal',
171
+ 'erase',
172
+ 'exit',
173
+ 'for',
174
+ 'ftype',
175
+ 'goto',
176
+ 'if',
177
+ 'md',
178
+ 'mkdir',
179
+ 'mklink',
180
+ 'move',
181
+ 'path',
182
+ 'pause',
183
+ 'popd',
184
+ 'prompt',
185
+ 'pushd',
186
+ 'rd',
187
+ 'rem',
188
+ 'ren',
189
+ 'rename',
190
+ 'rmdir',
191
+ 'set',
192
+ 'setlocal',
193
+ 'shift',
194
+ 'start',
195
+ 'time',
196
+ 'title',
197
+ 'type',
198
+ 'ver',
199
+ 'verify',
200
+ 'vol',
201
+ ];
202
+ for (const builtin of builtins) {
203
+ seen.add(builtin);
204
+ executables.push(builtin);
205
+ }
206
+ }
207
+ const dirResults = await Promise.all(dirs.map(async (dir) => {
208
+ if (signal?.aborted)
209
+ return [];
210
+ try {
211
+ const entries = await fs.readdir(dir, { withFileTypes: true });
212
+ const validEntries = [];
213
+ // Check executability in parallel (batched per directory)
214
+ await Promise.all(entries.map(async (entry) => {
215
+ if (signal?.aborted)
216
+ return;
217
+ if (!entry.isFile() && !entry.isSymbolicLink())
218
+ return;
219
+ const name = entry.name;
220
+ if (isWindows) {
221
+ const ext = path.extname(name).toLowerCase();
222
+ if (pathExtList.length > 0 && !pathExtList.includes(ext))
223
+ return;
224
+ }
225
+ try {
226
+ await fs.access(path.join(dir, name), fs.constants.R_OK | fs.constants.X_OK);
227
+ validEntries.push(name);
228
+ }
229
+ catch {
230
+ // Not executable — skip
231
+ }
232
+ }));
233
+ return validEntries;
234
+ }
235
+ catch {
236
+ // EACCES, ENOENT, etc. — skip this directory
237
+ return [];
238
+ }
239
+ }));
240
+ for (const names of dirResults) {
241
+ for (const name of names) {
242
+ if (!seen.has(name)) {
243
+ seen.add(name);
244
+ executables.push(name);
245
+ }
246
+ }
247
+ }
248
+ executables.sort();
249
+ return executables;
250
+ }
251
+ function expandTilde(inputPath) {
252
+ if (inputPath === '~' ||
253
+ inputPath.startsWith('~/') ||
254
+ inputPath.startsWith('~' + path.sep)) {
255
+ return [path.join(os.homedir(), inputPath.slice(1)), true];
256
+ }
257
+ return [inputPath, false];
258
+ }
259
+ export async function resolvePathCompletions(partial, cwd, signal) {
260
+ if (partial == null)
261
+ return [];
262
+ // Input Sanitization
263
+ let strippedPartial = partial;
264
+ if (strippedPartial.startsWith('"') || strippedPartial.startsWith("'")) {
265
+ strippedPartial = strippedPartial.slice(1);
266
+ }
267
+ if (strippedPartial.endsWith('"') || strippedPartial.endsWith("'")) {
268
+ strippedPartial = strippedPartial.slice(0, -1);
269
+ }
270
+ // Normalize separators \ to /
271
+ const normalizedPartial = strippedPartial.replace(/\\/g, '/');
272
+ const [expandedPartial, didExpandTilde] = expandTilde(normalizedPartial);
273
+ // Directory Detection
274
+ const endsWithSep = normalizedPartial.endsWith('/') || normalizedPartial === '';
275
+ const dirToRead = endsWithSep
276
+ ? path.resolve(cwd, expandedPartial)
277
+ : path.resolve(cwd, path.dirname(expandedPartial));
278
+ const prefix = endsWithSep ? '' : path.basename(expandedPartial);
279
+ const prefixLower = prefix.toLowerCase();
280
+ const showDotfiles = prefix.startsWith('.');
281
+ let entries;
282
+ try {
283
+ if (signal?.aborted)
284
+ return [];
285
+ entries = await fs.readdir(dirToRead, { withFileTypes: true });
286
+ }
287
+ catch {
288
+ // EACCES, ENOENT, etc.
289
+ return [];
290
+ }
291
+ if (signal?.aborted)
292
+ return [];
293
+ const suggestions = [];
294
+ for (const entry of entries) {
295
+ if (signal?.aborted)
296
+ break;
297
+ const name = entry.name;
298
+ // Hide dotfiles unless query starts with '.'
299
+ if (name.startsWith('.') && !showDotfiles)
300
+ continue;
301
+ // Case-insensitive matching
302
+ if (!name.toLowerCase().startsWith(prefixLower))
303
+ continue;
304
+ const isDir = entry.isDirectory();
305
+ const displayName = isDir ? name + '/' : name;
306
+ // Build the completion value relative to what the user typed
307
+ let completionValue;
308
+ if (endsWithSep) {
309
+ completionValue = normalizedPartial + displayName;
310
+ }
311
+ else {
312
+ const parentPart = normalizedPartial.slice(0, normalizedPartial.length - path.basename(normalizedPartial).length);
313
+ completionValue = parentPart + displayName;
314
+ }
315
+ // Restore tilde if we expanded it
316
+ if (didExpandTilde) {
317
+ const homeDir = os.homedir().replace(/\\/g, '/');
318
+ if (completionValue.startsWith(homeDir)) {
319
+ completionValue = '~' + completionValue.slice(homeDir.length);
320
+ }
321
+ }
322
+ // Output formatting: Escape special characters in the completion value
323
+ // Since normalizedPartial stripped quotes, we escape the value directly.
324
+ const escapedValue = escapeShellPath(completionValue);
325
+ suggestions.push({
326
+ label: displayName,
327
+ value: escapedValue,
328
+ description: isDir ? 'directory' : 'file',
329
+ });
330
+ if (suggestions.length >= MAX_SHELL_SUGGESTIONS)
331
+ break;
332
+ }
333
+ // Sort: directories first, then alphabetically
334
+ suggestions.sort((a, b) => {
335
+ const aIsDir = a.description === 'directory';
336
+ const bIsDir = b.description === 'directory';
337
+ if (aIsDir !== bIsDir)
338
+ return aIsDir ? -1 : 1;
339
+ return a.label.localeCompare(b.label);
340
+ });
341
+ return suggestions;
342
+ }
343
+ const EMPTY_TOKENS = [];
344
+ export function useShellCompletion({ enabled, line, cursorCol, cwd, setSuggestions, setIsLoadingSuggestions, }) {
345
+ const pathCachePromiseRef = useRef(null);
346
+ const pathEnvRef = useRef(process.env['PATH'] ?? '');
347
+ const abortRef = useRef(null);
348
+ const debounceRef = useRef(null);
349
+ const tokenInfo = useMemo(() => (enabled ? getTokenAtCursor(line, cursorCol) : null), [enabled, line, cursorCol]);
350
+ const { token: query = '', start: completionStart = -1, end: completionEnd = -1, isFirstToken: isCommandPosition = false, tokens = EMPTY_TOKENS, cursorIndex = -1, commandToken = '', } = tokenInfo || {};
351
+ // Invalidate PATH cache when $PATH changes
352
+ useEffect(() => {
353
+ const currentPath = process.env['PATH'] ?? '';
354
+ if (currentPath !== pathEnvRef.current) {
355
+ pathCachePromiseRef.current = null;
356
+ pathEnvRef.current = currentPath;
357
+ }
358
+ });
359
+ const performCompletion = useCallback(async () => {
360
+ if (!enabled || !tokenInfo) {
361
+ setSuggestions([]);
362
+ return;
363
+ }
364
+ // Skip flags
365
+ if (query.startsWith('-')) {
366
+ setSuggestions([]);
367
+ return;
368
+ }
369
+ // Cancel any in-flight request
370
+ if (abortRef.current) {
371
+ abortRef.current.abort();
372
+ }
373
+ const controller = new AbortController();
374
+ abortRef.current = controller;
375
+ const { signal } = controller;
376
+ try {
377
+ let results;
378
+ if (isCommandPosition) {
379
+ setIsLoadingSuggestions(true);
380
+ if (!pathCachePromiseRef.current) {
381
+ // We don't pass the signal here because we want the cache to finish
382
+ // even if this specific completion request is aborted.
383
+ pathCachePromiseRef.current = scanPathExecutables();
384
+ }
385
+ const executables = await pathCachePromiseRef.current;
386
+ if (signal.aborted)
387
+ return;
388
+ const queryLower = query.toLowerCase();
389
+ results = executables
390
+ .filter((cmd) => cmd.toLowerCase().startsWith(queryLower))
391
+ .sort((a, b) => {
392
+ // Prioritize shorter commands as they are likely common built-ins
393
+ if (a.length !== b.length) {
394
+ return a.length - b.length;
395
+ }
396
+ return a.localeCompare(b);
397
+ })
398
+ .slice(0, MAX_SHELL_SUGGESTIONS)
399
+ .map((cmd) => ({
400
+ label: cmd,
401
+ value: escapeShellPath(cmd),
402
+ description: 'command',
403
+ }));
404
+ }
405
+ else {
406
+ const argumentCompletions = await getArgumentCompletions(commandToken, tokens, cursorIndex, cwd, signal);
407
+ if (signal.aborted)
408
+ return;
409
+ if (argumentCompletions?.exclusive) {
410
+ results = argumentCompletions.suggestions;
411
+ }
412
+ else {
413
+ const pathSuggestions = await resolvePathCompletions(query, cwd, signal);
414
+ if (signal.aborted)
415
+ return;
416
+ results = [
417
+ ...(argumentCompletions?.suggestions ?? []),
418
+ ...pathSuggestions,
419
+ ].slice(0, MAX_SHELL_SUGGESTIONS);
420
+ }
421
+ }
422
+ if (signal.aborted)
423
+ return;
424
+ setSuggestions(results);
425
+ }
426
+ catch (error) {
427
+ if (!(signal.aborted ||
428
+ (error instanceof Error && error.name === 'AbortError'))) {
429
+ debugLogger.warn(`[WARN] shell completion failed: ${error instanceof Error ? error.message : String(error)}`);
430
+ }
431
+ if (!signal.aborted) {
432
+ setSuggestions([]);
433
+ }
434
+ }
435
+ finally {
436
+ if (!signal.aborted) {
437
+ setIsLoadingSuggestions(false);
438
+ }
439
+ }
440
+ }, [
441
+ enabled,
442
+ tokenInfo,
443
+ query,
444
+ isCommandPosition,
445
+ tokens,
446
+ cursorIndex,
447
+ commandToken,
448
+ cwd,
449
+ setSuggestions,
450
+ setIsLoadingSuggestions,
451
+ ]);
452
+ useEffect(() => {
453
+ if (!enabled) {
454
+ abortRef.current?.abort();
455
+ setSuggestions([]);
456
+ setIsLoadingSuggestions(false);
457
+ }
458
+ }, [enabled, setSuggestions, setIsLoadingSuggestions]);
459
+ // Debounced effect to trigger completion
460
+ useEffect(() => {
461
+ if (!enabled)
462
+ return;
463
+ if (debounceRef.current) {
464
+ clearTimeout(debounceRef.current);
465
+ }
466
+ debounceRef.current = setTimeout(() => {
467
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
468
+ performCompletion();
469
+ }, FS_COMPLETION_DEBOUNCE_MS);
470
+ return () => {
471
+ if (debounceRef.current) {
472
+ clearTimeout(debounceRef.current);
473
+ }
474
+ };
475
+ }, [enabled, performCompletion]);
476
+ // Cleanup on unmount
477
+ useEffect(() => () => {
478
+ abortRef.current?.abort();
479
+ if (debounceRef.current) {
480
+ clearTimeout(debounceRef.current);
481
+ }
482
+ }, []);
483
+ return {
484
+ completionStart,
485
+ completionEnd,
486
+ query,
487
+ };
488
+ }
489
+ //# sourceMappingURL=useShellCompletion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useShellCompletion.js","sourceRoot":"","sources":["../../../../src/ui/hooks/useShellCompletion.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE;;GAEG;AACH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAElC;;GAEG;AACH,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAErC,iEAAiE;AAEjE,wEAAwE;AACxE,wEAAwE;AACxE,yCAAyC;AACzC,MAAM,wBAAwB,GAAG,kCAAkC,CAAC;AAEpE;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC;AAmBD,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,SAAiB;IAEjB,MAAM,UAAU,GAAyD,EAAE,CAAC;IAC5E,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,kBAAkB;QAClB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,IAAI,KAAK,GAAG,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAEnB,oDAAoD;YACpD,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;YAED,uBAAuB;YACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,CAAC,EAAE,CAAC,CAAC,qBAAqB;gBAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC1C,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;oBACjB,CAAC,EAAE,CAAC;gBACN,CAAC;gBACD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;oBAAE,CAAC,EAAE,CAAC,CAAC,qBAAqB;gBAC/C,SAAS;YACX,CAAC;YAED,uBAAuB;YACvB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,CAAC,EAAE,CAAC,CAAC,qBAAqB;gBAC1B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAC1C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC5C,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;wBACrB,CAAC,IAAI,CAAC,CAAC;oBACT,CAAC;yBAAM,CAAC;wBACN,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjB,CAAC,EAAE,CAAC;oBACN,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;oBAAE,CAAC,EAAE,CAAC,CAAC,qBAAqB;gBAC/C,SAAS;YACX,CAAC;YAED,qCAAqC;YACrC,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,KAAK,IAAI,EAAE,CAAC;YACZ,CAAC,EAAE,CAAC;QACN,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,SAAS;YACd,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,CAAC,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,EAAE;SACjB,CAAC;IACJ,CAAC;IAED,wEAAwE;IACxE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACjD,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,SAAS,IAAI,CAAC,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/C,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,YAAY,EAAE,GAAG,KAAK,CAAC;gBACvB,MAAM,EAAE,SAAS;gBACjB,WAAW,EAAE,GAAG;gBAChB,YAAY;aACb,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;IACpC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QACjD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACtC,WAAW,GAAG,GAAG,CAAC;YAClB,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;QAClC,EAAE;QACF,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;KAChC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,SAAS;QACd,YAAY,EAAE,WAAW,KAAK,CAAC;QAC/B,MAAM,EAAE,SAAS;QACjB,WAAW,EAAE,WAAW;QACxB,YAAY,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB;IAEpB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC/C,MAAM,WAAW,GAAG,SAAS;QAC3B,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,qBAAqB,CAAC;aAC9C,KAAK,CAAC,GAAG,CAAC;aACV,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,8BAA8B;IAC9B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG;YACf,OAAO;YACP,OAAO;YACP,MAAM;YACN,IAAI;YACJ,MAAM;YACN,OAAO;YACP,KAAK;YACL,OAAO;YACP,MAAM;YACN,MAAM;YACN,KAAK;YACL,KAAK;YACL,MAAM;YACN,UAAU;YACV,OAAO;YACP,MAAM;YACN,KAAK;YACL,OAAO;YACP,MAAM;YACN,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,QAAQ;YACR,MAAM;YACN,MAAM;YACN,OAAO;YACP,MAAM;YACN,QAAQ;YACR,OAAO;YACP,IAAI;YACJ,KAAK;YACL,KAAK;YACL,QAAQ;YACR,OAAO;YACP,KAAK;YACL,UAAU;YACV,OAAO;YACP,OAAO;YACP,MAAM;YACN,OAAO;YACP,MAAM;YACN,KAAK;YACL,QAAQ;YACR,KAAK;SACN,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAClC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACrB,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,YAAY,GAAa,EAAE,CAAC;YAElC,0DAA0D;YAC1D,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC1B,IAAI,MAAM,EAAE,OAAO;oBAAE,OAAO;gBAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;oBAAE,OAAO;gBAEvD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;gBACxB,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC7C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC;wBAAE,OAAO;gBACnE,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,EAAE,CAAC,MAAM,CACb,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EACpB,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CACtC,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,wBAAwB;gBAC1B,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,OAAO,YAAY,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,6CAA6C;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,IACE,SAAS,KAAK,GAAG;QACjB,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;QAC1B,SAAS,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EACpC,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,GAAW,EACX,MAAoB;IAEpB,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAE/B,qBAAqB;IACrB,IAAI,eAAe,GAAG,OAAO,CAAC;IAC9B,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvE,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnE,eAAe,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,8BAA8B;IAC9B,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE9D,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC,GAAG,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAEzE,sBAAsB;IACtB,MAAM,WAAW,GACf,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,iBAAiB,KAAK,EAAE,CAAC;IAC9D,MAAM,SAAS,GAAG,WAAW;QAC3B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC;QACpC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,OAAwC,CAAC;IAC7C,IAAI,CAAC;QACH,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO,EAAE,CAAC;QAC/B,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAE3B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,6CAA6C;QAC7C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY;YAAE,SAAS;QAEpD,4BAA4B;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;YAAE,SAAS;QAE1D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9C,6DAA6D;QAC7D,IAAI,eAAuB,CAAC;QAC5B,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,GAAG,iBAAiB,GAAG,WAAW,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,iBAAiB,CAAC,KAAK,CACxC,CAAC,EACD,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,MAAM,CACnE,CAAC;YACF,eAAe,GAAG,UAAU,GAAG,WAAW,CAAC;QAC7C,CAAC;QAED,kCAAkC;QAClC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACjD,IAAI,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxC,eAAe,GAAG,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,yEAAyE;QACzE,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;QAEtD,WAAW,CAAC,IAAI,CAAC;YACf,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;SAC1C,CAAC,CAAC;QAEH,IAAI,WAAW,CAAC,MAAM,IAAI,qBAAqB;YAAE,MAAM;IACzD,CAAC;IAED,+CAA+C;IAC/C,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC;QAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC;QAC7C,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAuBD,MAAM,YAAY,GAAa,EAAE,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAAC,EACjC,OAAO,EACP,IAAI,EACJ,SAAS,EACT,GAAG,EACH,cAAc,EACd,uBAAuB,GACC;IACxB,MAAM,mBAAmB,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAS,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAExD,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAC1D,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAC3B,CAAC;IAEF,MAAM,EACJ,KAAK,EAAE,KAAK,GAAG,EAAE,EACjB,KAAK,EAAE,eAAe,GAAG,CAAC,CAAC,EAC3B,GAAG,EAAE,aAAa,GAAG,CAAC,CAAC,EACvB,YAAY,EAAE,iBAAiB,GAAG,KAAK,EACvC,MAAM,GAAG,YAAY,EACrB,WAAW,GAAG,CAAC,CAAC,EAChB,YAAY,GAAG,EAAE,GAClB,GAAG,SAAS,IAAI,EAAE,CAAC;IAEpB,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,WAAW,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;YACvC,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC;YACnC,UAAU,CAAC,OAAO,GAAG,WAAW,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC/C,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3B,cAAc,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,aAAa;QACb,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,cAAc,CAAC,EAAE,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;QAE9B,IAAI,CAAC;YACH,IAAI,OAAqB,CAAC;YAE1B,IAAI,iBAAiB,EAAE,CAAC;gBACtB,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBAE9B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;oBACjC,oEAAoE;oBACpE,uDAAuD;oBACvD,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,EAAE,CAAC;gBACtD,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC;gBACtD,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvC,OAAO,GAAG,WAAW;qBAClB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;qBACzD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACb,kEAAkE;oBAClE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;wBAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;oBAC7B,CAAC;oBACD,OAAO,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC;qBAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;oBACb,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC;oBAC3B,WAAW,EAAE,SAAS;iBACvB,CAAC,CAAC,CAAC;YACR,CAAC;iBAAM,CAAC;gBACN,MAAM,mBAAmB,GAAG,MAAM,sBAAsB,CACtD,YAAY,EACZ,MAAM,EACN,WAAW,EACX,GAAG,EACH,MAAM,CACP,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO;oBAAE,OAAO;gBAE3B,IAAI,mBAAmB,EAAE,SAAS,EAAE,CAAC;oBACnC,OAAO,GAAG,mBAAmB,CAAC,WAAW,CAAC;gBAC5C,CAAC;qBAAM,CAAC;oBACN,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAClD,KAAK,EACL,GAAG,EACH,MAAM,CACP,CAAC;oBACF,IAAI,MAAM,CAAC,OAAO;wBAAE,OAAO;oBAE3B,OAAO,GAAG;wBACR,GAAG,CAAC,mBAAmB,EAAE,WAAW,IAAI,EAAE,CAAC;wBAC3C,GAAG,eAAe;qBACnB,CAAC,KAAK,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO;YAE3B,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,CAAC,CACC,MAAM,CAAC,OAAO;gBACd,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CACxD,EACD,CAAC;gBACD,WAAW,CAAC,IAAI,CACd,mCAAmC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5F,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,cAAc,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,uBAAuB,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC,EAAE;QACD,OAAO;QACP,SAAS;QACT,KAAK;QACL,iBAAiB;QACjB,MAAM;QACN,WAAW;QACX,YAAY;QACZ,GAAG;QACH,cAAc;QACd,uBAAuB;KACxB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;YAC1B,cAAc,CAAC,EAAE,CAAC,CAAC;YACnB,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAEvD,yCAAyC;IACzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,WAAW,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,mEAAmE;YACnE,iBAAiB,EAAE,CAAC;QACtB,CAAC,EAAE,yBAAyB,CAAC,CAAC;QAE9B,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEjC,qBAAqB;IACrB,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE;QACT,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1B,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YACxB,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO;QACL,eAAe;QACf,aAAa;QACb,KAAK;KACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};