@adecore/agents-react 0.31.11 → 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 (404) hide show
  1. package/dist/agents/AccountDot.js +57 -6
  2. package/dist/agents/AgentIcon.js +88 -12
  3. package/dist/agents/ModelOptionControl.js +153 -18
  4. package/dist/agents/ProviderLogo.js +49 -4
  5. package/dist/agents/account-limits.js +17 -14
  6. package/dist/agents/accounts.js +99 -67
  7. package/dist/agents/agent-marks.js +5 -3
  8. package/dist/agents/model-name.js +42 -31
  9. package/dist/agents/model-options.js +8 -8
  10. package/dist/agents/model-requirement.js +17 -14
  11. package/dist/agents/option-words.d.ts +7 -0
  12. package/dist/agents/option-words.js +35 -0
  13. package/dist/agents/provider-paths.js +6 -6
  14. package/dist/agents/status-look.js +32 -12
  15. package/dist/chat/account-choice.d.ts +13 -0
  16. package/dist/chat/account-choice.js +90 -20
  17. package/dist/chat/actions.js +126 -59
  18. package/dist/chat/activity.js +5 -5
  19. package/dist/chat/attachments.js +74 -53
  20. package/dist/chat/bookmarks.js +58 -48
  21. package/dist/chat/chat-client.js +344 -263
  22. package/dist/chat/chat-references.js +3 -3
  23. package/dist/chat/composer-effort.d.ts +5 -0
  24. package/dist/chat/composer-effort.js +26 -0
  25. package/dist/chat/composer-send.js +13 -13
  26. package/dist/chat/drafts.js +115 -79
  27. package/dist/chat/forks.js +81 -24
  28. package/dist/chat/guards.js +15 -43
  29. package/dist/chat/index.d.ts +3 -1
  30. package/dist/chat/index.js +3 -2
  31. package/dist/chat/logic/ansi.js +170 -167
  32. package/dist/chat/logic/answers.js +2 -2
  33. package/dist/chat/logic/bookmarks.js +19 -19
  34. package/dist/chat/logic/command-looks.js +138 -96
  35. package/dist/chat/logic/context-usage.js +13 -9
  36. package/dist/chat/logic/continue-after-stop.js +15 -19
  37. package/dist/chat/logic/effort.d.ts +14 -0
  38. package/dist/chat/logic/effort.js +34 -0
  39. package/dist/chat/logic/embedded-code.js +387 -326
  40. package/dist/chat/logic/fork.js +134 -110
  41. package/dist/chat/logic/generated-image.js +54 -23
  42. package/dist/chat/logic/goal.js +28 -20
  43. package/dist/chat/logic/handback.js +6 -6
  44. package/dist/chat/logic/json.js +2 -2
  45. package/dist/chat/logic/limit.js +46 -30
  46. package/dist/chat/logic/picker-entries.d.ts +5 -3
  47. package/dist/chat/logic/picker-entries.js +83 -43
  48. package/dist/chat/logic/resume-compaction.d.ts +14 -1
  49. package/dist/chat/logic/resume-compaction.js +93 -24
  50. package/dist/chat/logic/scrubber.js +188 -136
  51. package/dist/chat/logic/thought.js +13 -16
  52. package/dist/chat/logic/thread-cards.js +60 -48
  53. package/dist/chat/logic/timeline-copy.js +30 -38
  54. package/dist/chat/logic/timeline-target.js +92 -63
  55. package/dist/chat/logic/timeline.js +499 -355
  56. package/dist/chat/logic/tool-catalog.js +54 -34
  57. package/dist/chat/logic/tools.js +106 -82
  58. package/dist/chat/logic/visual-height.js +18 -18
  59. package/dist/chat/logic/visual-viewport.js +6 -3
  60. package/dist/chat/logic/welcome.js +9 -9
  61. package/dist/chat/logic/workflow.js +45 -34
  62. package/dist/chat/mentions.js +149 -109
  63. package/dist/chat/persisted-json.js +51 -54
  64. package/dist/chat/preferences.d.ts +4 -0
  65. package/dist/chat/preferences.js +162 -84
  66. package/dist/chat/prompt-hold.js +9 -9
  67. package/dist/chat/quote.js +21 -30
  68. package/dist/chat/reading-width.js +12 -10
  69. package/dist/chat/recent-messages.js +34 -21
  70. package/dist/chat/resume-compaction-dismissals.js +25 -5
  71. package/dist/chat/runtime-modes.js +3 -3
  72. package/dist/chat/send-key.js +11 -7
  73. package/dist/chat/stash.js +89 -69
  74. package/dist/chat/subagent-conversation.js +181 -139
  75. package/dist/chat/subagent-list.js +65 -67
  76. package/dist/chat/subagent-support.js +12 -7
  77. package/dist/chat/subagent-view.js +132 -44
  78. package/dist/chat/thumbnails.js +88 -60
  79. package/dist/chat/timeline-flash.js +24 -12
  80. package/dist/chat/timeline-scroll.js +116 -86
  81. package/dist/chat/ui/AccountPill.js +126 -15
  82. package/dist/chat/ui/AnsiOutput.js +62 -6
  83. package/dist/chat/ui/BookmarkMarker.js +231 -41
  84. package/dist/chat/ui/BookmarkSubmenu.js +165 -18
  85. package/dist/chat/ui/ChatActivity.js +649 -70
  86. package/dist/chat/ui/ChatReferenceChip.js +104 -9
  87. package/dist/chat/ui/CodeBlock.js +132 -58
  88. package/dist/chat/ui/Composer.js +866 -132
  89. package/dist/chat/ui/ComposerInput.js +309 -120
  90. package/dist/chat/ui/DiffPool.js +75 -14
  91. package/dist/chat/ui/EditDiff.js +160 -21
  92. package/dist/chat/ui/FadingWords.js +32 -3
  93. package/dist/chat/ui/GoalDock.js +235 -42
  94. package/dist/chat/ui/ImageView.js +617 -61
  95. package/dist/chat/ui/LimitState.js +446 -72
  96. package/dist/chat/ui/Markdown.js +991 -173
  97. package/dist/chat/ui/MermaidBlock.js +238 -68
  98. package/dist/chat/ui/MessageActions.js +251 -39
  99. package/dist/chat/ui/ModelMarks.js +55 -5
  100. package/dist/chat/ui/Pickers.js +664 -113
  101. package/dist/chat/ui/PromptComposer.js +281 -51
  102. package/dist/chat/ui/QuoteButton.js +151 -57
  103. package/dist/chat/ui/ResumeCompactionDock.d.ts +6 -2
  104. package/dist/chat/ui/ResumeCompactionDock.js +141 -6
  105. package/dist/chat/ui/RowTime.js +59 -5
  106. package/dist/chat/ui/RunSettings.js +1744 -154
  107. package/dist/chat/ui/Scrubber.js +517 -88
  108. package/dist/chat/ui/ShellCommand.js +183 -107
  109. package/dist/chat/ui/SubagentControls.js +212 -24
  110. package/dist/chat/ui/SubagentInfo.js +170 -13
  111. package/dist/chat/ui/SubagentStopButton.js +115 -24
  112. package/dist/chat/ui/SubagentTimeline.js +357 -91
  113. package/dist/chat/ui/Timeline.js +988 -476
  114. package/dist/chat/ui/TimelineMenu.js +552 -37
  115. package/dist/chat/ui/UnifiedDiff.js +234 -27
  116. package/dist/chat/ui/UploadThumb.js +37 -7
  117. package/dist/chat/ui/VisualDialogs.js +251 -20
  118. package/dist/chat/ui/VisualFrame.js +321 -95
  119. package/dist/chat/ui/Welcome.js +72 -7
  120. package/dist/chat/ui/chips.js +1 -1
  121. package/dist/chat/ui/code-lines.js +36 -36
  122. package/dist/chat/ui/code-streaming.js +1 -1
  123. package/dist/chat/ui/code-theme.js +7 -7
  124. package/dist/chat/ui/composer/ComposerControls.js +329 -21
  125. package/dist/chat/ui/composer/ComposerMenu.js +358 -30
  126. package/dist/chat/ui/composer/DraftParts.js +185 -11
  127. package/dist/chat/ui/composer/QueuedMessages.js +138 -13
  128. package/dist/chat/ui/composer/chips.js +29 -19
  129. package/dist/chat/ui/composer/editor.js +79 -63
  130. package/dist/chat/ui/composer/insert.js +26 -12
  131. package/dist/chat/ui/composer/key-handler.js +180 -127
  132. package/dist/chat/ui/composer/keys.js +90 -73
  133. package/dist/chat/ui/composer/menu-aria.js +18 -9
  134. package/dist/chat/ui/composer/placeholder.js +78 -31
  135. package/dist/chat/ui/composer/surface.js +13 -37
  136. package/dist/chat/ui/composer/use-chat-controls.js +230 -90
  137. package/dist/chat/ui/composer/use-compaction-offer.js +50 -18
  138. package/dist/chat/ui/composer/use-composer-draft.js +65 -34
  139. package/dist/chat/ui/composer/use-composer-menus.js +478 -193
  140. package/dist/chat/ui/composer/use-composer-submit.js +251 -109
  141. package/dist/chat/ui/composer/use-continuable-turn.js +33 -6
  142. package/dist/chat/ui/composer/use-draft-files.js +245 -93
  143. package/dist/chat/ui/composer/use-effort-stepper.d.ts +13 -0
  144. package/dist/chat/ui/composer/use-effort-stepper.js +88 -0
  145. package/dist/chat/ui/composer/use-notice.js +61 -16
  146. package/dist/chat/ui/composer/use-pending-requests.js +38 -17
  147. package/dist/chat/ui/composer/use-prompt-history.js +117 -45
  148. package/dist/chat/ui/composer/use-prompt-hold.js +119 -35
  149. package/dist/chat/ui/composer/use-take-back.js +94 -72
  150. package/dist/chat/ui/diff/ApprovalReview.js +101 -23
  151. package/dist/chat/ui/diff/DiffFallbackBoundary.js +21 -13
  152. package/dist/chat/ui/diff/DiffOmitted.js +56 -6
  153. package/dist/chat/ui/diff/DiffStack.js +92 -8
  154. package/dist/chat/ui/diff/DiffUnavailable.js +56 -6
  155. package/dist/chat/ui/diff/EditorEditDiff.js +263 -51
  156. package/dist/chat/ui/diff/EditorPatchDiff.js +39 -14
  157. package/dist/chat/ui/diff/LegacyDiffPool.js +27 -10
  158. package/dist/chat/ui/diff/LegacyEditDiff.js +97 -20
  159. package/dist/chat/ui/diff/LegacyUnifiedDiff.js +172 -42
  160. package/dist/chat/ui/diff/RawDiff.js +65 -5
  161. package/dist/chat/ui/diff/ReviewDiff.js +77 -5
  162. package/dist/chat/ui/diff/diff-props.js +1 -1
  163. package/dist/chat/ui/diff/diff-source-budget.js +46 -35
  164. package/dist/chat/ui/diff/editor-edit-model.js +18 -14
  165. package/dist/chat/ui/diff/review-plan.js +63 -40
  166. package/dist/chat/ui/diff/review-settle.js +24 -9
  167. package/dist/chat/ui/diff/syntax-runtime.js +236 -201
  168. package/dist/chat/ui/diff/use-review-stack.js +146 -25
  169. package/dist/chat/ui/diff-syntax.js +70 -58
  170. package/dist/chat/ui/diff-theme.js +31 -12
  171. package/dist/chat/ui/file-links.js +39 -10
  172. package/dist/chat/ui/find-reveal.js +29 -8
  173. package/dist/chat/ui/full-diff.js +17 -12
  174. package/dist/chat/ui/highlighter.js +143 -113
  175. package/dist/chat/ui/icons.js +16 -7
  176. package/dist/chat/ui/index.js +1 -1
  177. package/dist/chat/ui/intelligent-ui/UiBlockFrame.js +556 -82
  178. package/dist/chat/ui/intelligent-ui/UiFallbackPart.js +73 -5
  179. package/dist/chat/ui/intelligent-ui/UiReply.js +666 -262
  180. package/dist/chat/ui/intelligent-ui/block-local.js +59 -31
  181. package/dist/chat/ui/intelligent-ui/chart-data.js +77 -67
  182. package/dist/chat/ui/intelligent-ui/node-text.js +77 -91
  183. package/dist/chat/ui/intelligent-ui/registry.js +46 -46
  184. package/dist/chat/ui/intelligent-ui/render-context.js +1 -1
  185. package/dist/chat/ui/intelligent-ui/renderers/base-land.js +1 -1
  186. package/dist/chat/ui/intelligent-ui/renderers/binding.js +3 -3
  187. package/dist/chat/ui/intelligent-ui/renderers/chart.js +1223 -123
  188. package/dist/chat/ui/intelligent-ui/renderers/choices.js +312 -34
  189. package/dist/chat/ui/intelligent-ui/renderers/content.js +1241 -86
  190. package/dist/chat/ui/intelligent-ui/renderers/data.js +619 -54
  191. package/dist/chat/ui/intelligent-ui/renderers/inputs.js +868 -67
  192. package/dist/chat/ui/intelligent-ui/renderers/links.js +366 -62
  193. package/dist/chat/ui/intelligent-ui/renderers/map-slots.js +118 -60
  194. package/dist/chat/ui/intelligent-ui/renderers/map-style.js +85 -78
  195. package/dist/chat/ui/intelligent-ui/renderers/map-view.js +282 -217
  196. package/dist/chat/ui/intelligent-ui/renderers/map.js +621 -69
  197. package/dist/chat/ui/intelligent-ui/renderers/place-point.js +15 -8
  198. package/dist/chat/ui/intelligent-ui/renderers/structure.js +262 -20
  199. package/dist/chat/ui/intelligent-ui/renderers/text.js +674 -49
  200. package/dist/chat/ui/intelligent-ui/reply-parts.js +24 -15
  201. package/dist/chat/ui/intelligent-ui/table-data.js +97 -57
  202. package/dist/chat/ui/intelligent-ui/tones.js +31 -31
  203. package/dist/chat/ui/intelligent-ui/use-in-view.js +30 -12
  204. package/dist/chat/ui/intelligent-ui/use-later.js +28 -13
  205. package/dist/chat/ui/intelligent-ui/use-truncated.js +45 -21
  206. package/dist/chat/ui/intelligent-ui/use-ui-links.js +296 -109
  207. package/dist/chat/ui/intelligent-ui/use-ui-queries.js +256 -246
  208. package/dist/chat/ui/markdown-blocks.js +296 -262
  209. package/dist/chat/ui/mermaid.js +60 -72
  210. package/dist/chat/ui/quote-selection.js +32 -29
  211. package/dist/chat/ui/rehype-chips.js +35 -23
  212. package/dist/chat/ui/rehype-fade.js +28 -17
  213. package/dist/chat/ui/remark-html-as-text.js +22 -15
  214. package/dist/chat/ui/reply-context.js +1 -1
  215. package/dist/chat/ui/reveal.js +161 -72
  216. package/dist/chat/ui/rows/ForksRow.js +226 -24
  217. package/dist/chat/ui/rows/GeneratedImageRow.js +541 -87
  218. package/dist/chat/ui/rows/MessageRows.js +1706 -159
  219. package/dist/chat/ui/rows/RowContainer.js +57 -7
  220. package/dist/chat/ui/rows/Rows.js +463 -54
  221. package/dist/chat/ui/rows/SubagentRow.js +577 -60
  222. package/dist/chat/ui/rows/TaskRow.js +359 -40
  223. package/dist/chat/ui/rows/VisualRow.js +233 -11
  224. package/dist/chat/ui/rows/WorkRows.js +1946 -163
  225. package/dist/chat/ui/rows/WorkflowRow.js +293 -34
  226. package/dist/chat/ui/rows/row-rhythm.js +27 -17
  227. package/dist/chat/ui/theme-watch.js +26 -23
  228. package/dist/chat/ui/timestamp-format.js +4 -1
  229. package/dist/chat/ui/use-diff-source-tokens.js +70 -34
  230. package/dist/chat/ui/useToggleSet.js +51 -19
  231. package/dist/chat/ui/visual-theme.js +153 -128
  232. package/dist/chat/visual-bridge.js +123 -123
  233. package/dist/chat/visual-viewport.js +94 -83
  234. package/dist/chat/visuals.js +13 -5
  235. package/dist/host-hooks.d.ts +29 -0
  236. package/dist/host-hooks.js +78 -0
  237. package/dist/host.js +120 -48
  238. package/dist/index.js +1 -1
  239. package/dist/lazy.js +38 -32
  240. package/dist/locales/en/agent-chat.d.ts +35 -0
  241. package/dist/locales/en/agent-chat.js +747 -712
  242. package/dist/locales/en/agent-prompts.js +42 -42
  243. package/dist/locales/en/agent-providers.d.ts +1 -0
  244. package/dist/locales/en/agent-providers.js +166 -165
  245. package/dist/locales/en/agent-usage.d.ts +6 -0
  246. package/dist/locales/en/agent-usage.js +129 -123
  247. package/dist/locales/nl/agent-chat.d.ts +35 -0
  248. package/dist/locales/nl/agent-chat.js +747 -712
  249. package/dist/locales/nl/agent-prompts.js +42 -42
  250. package/dist/locales/nl/agent-providers.d.ts +1 -0
  251. package/dist/locales/nl/agent-providers.js +166 -165
  252. package/dist/locales/nl/agent-usage.d.ts +6 -0
  253. package/dist/locales/nl/agent-usage.js +129 -123
  254. package/dist/locales.js +14 -14
  255. package/dist/mounted-registry.js +31 -30
  256. package/dist/port-transport.js +122 -111
  257. package/dist/prompts/index.js +1 -1
  258. package/dist/prompts/logic/focus.js +15 -14
  259. package/dist/prompts/logic/keys.js +93 -59
  260. package/dist/prompts/logic/prompts.js +27 -14
  261. package/dist/prompts/logic/subjects.js +60 -46
  262. package/dist/prompts/logic/useFocusAfterAnswer.js +60 -20
  263. package/dist/prompts/logic/usePromptSession.js +88 -77
  264. package/dist/prompts/ui/ApprovalBody.js +246 -25
  265. package/dist/prompts/ui/PromptActions.js +215 -9
  266. package/dist/prompts/ui/PromptCard.js +215 -36
  267. package/dist/prompts/ui/PromptView.js +372 -34
  268. package/dist/prompts/ui/QuestionBody.js +269 -73
  269. package/dist/providers/AccountColors.js +36 -5
  270. package/dist/providers/AccountDetail.js +683 -50
  271. package/dist/providers/AccountVariables.js +139 -32
  272. package/dist/providers/AddAccountForm.js +125 -38
  273. package/dist/providers/CliDetail.js +343 -36
  274. package/dist/providers/InstallPage.js +644 -59
  275. package/dist/providers/ProviderList.d.ts +2 -1
  276. package/dist/providers/ProviderList.js +215 -23
  277. package/dist/providers/ProvidersPane.d.ts +4 -2
  278. package/dist/providers/ProvidersPane.js +244 -64
  279. package/dist/providers/account-actions.js +54 -30
  280. package/dist/providers/index.js +1 -1
  281. package/dist/providers/install-steps.js +12 -9
  282. package/dist/providers/pane-target.d.ts +3 -0
  283. package/dist/providers/pane-target.js +34 -13
  284. package/dist/providers/parts.js +62 -12
  285. package/dist/providers/provider-abilities.js +5 -5
  286. package/dist/providers/provider-groups.js +75 -40
  287. package/dist/providers/variables.js +73 -39
  288. package/dist/scope.js +6 -6
  289. package/dist/settings/sections.js +18 -18
  290. package/dist/state/chats.d.ts +1 -0
  291. package/dist/state/chats.js +408 -192
  292. package/dist/state/index.js +1 -1
  293. package/dist/state/provider-accounts.js +70 -47
  294. package/dist/state/providers.js +45 -16
  295. package/dist/state/usage.js +154 -77
  296. package/dist/storage.js +69 -68
  297. package/dist/testing/index.js +1 -1
  298. package/dist/testing/prompts.js +105 -67
  299. package/dist/transport.js +10 -10
  300. package/dist/ui/PlainTextarea.js +27 -3
  301. package/dist/usage/LimitsList.js +646 -40
  302. package/dist/usage/UsageBreakdown.js +879 -38
  303. package/dist/usage/UsageChart.js +311 -32
  304. package/dist/usage/UsageDialog.js +46 -4
  305. package/dist/usage/UsageLimits.js +467 -34
  306. package/dist/usage/UsageLimitsCard.js +95 -11
  307. package/dist/usage/UsagePage.js +817 -96
  308. package/dist/usage/UsagePane.js +164 -10
  309. package/dist/usage/UsageSummary.js +151 -6
  310. package/dist/usage/UsageTiles.js +164 -14
  311. package/dist/usage/format.js +32 -32
  312. package/dist/usage/index.d.ts +1 -1
  313. package/dist/usage/index.js +2 -1
  314. package/dist/usage/limit-groups.d.ts +2 -0
  315. package/dist/usage/limit-groups.js +77 -59
  316. package/dist/usage/limits.js +78 -43
  317. package/dist/usage/money.js +20 -4
  318. package/dist/usage/summary.js +85 -64
  319. package/package.json +8 -8
  320. package/src/agents/ModelOptionControl.tsx +3 -1
  321. package/src/agents/option-words.ts +27 -0
  322. package/src/chat/account-choice.ts +41 -1
  323. package/src/chat/composer-effort.ts +32 -0
  324. package/src/chat/forks.ts +4 -5
  325. package/src/chat/index.ts +3 -1
  326. package/src/chat/logic/effort.ts +32 -0
  327. package/src/chat/logic/picker-entries.ts +45 -10
  328. package/src/chat/logic/resume-compaction.ts +95 -17
  329. package/src/chat/logic/timeline.ts +11 -3
  330. package/src/chat/preferences.ts +35 -0
  331. package/src/chat/subagent-view.ts +2 -3
  332. package/src/chat/ui/AnsiOutput.tsx +1 -2
  333. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  334. package/src/chat/ui/ChatActivity.tsx +14 -22
  335. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  336. package/src/chat/ui/Composer.tsx +15 -7
  337. package/src/chat/ui/EditDiff.tsx +2 -3
  338. package/src/chat/ui/LimitState.tsx +2 -2
  339. package/src/chat/ui/Markdown.tsx +10 -8
  340. package/src/chat/ui/MermaidBlock.tsx +2 -3
  341. package/src/chat/ui/Pickers.tsx +49 -29
  342. package/src/chat/ui/PromptComposer.tsx +7 -9
  343. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  344. package/src/chat/ui/RunSettings.tsx +67 -28
  345. package/src/chat/ui/Scrubber.tsx +3 -3
  346. package/src/chat/ui/ShellCommand.tsx +2 -0
  347. package/src/chat/ui/SubagentInfo.tsx +2 -3
  348. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  349. package/src/chat/ui/Timeline.tsx +6 -6
  350. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  351. package/src/chat/ui/VisualFrame.tsx +5 -8
  352. package/src/chat/ui/code-theme.ts +4 -4
  353. package/src/chat/ui/composer/placeholder.ts +2 -2
  354. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  355. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  356. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  357. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  358. package/src/chat/ui/composer/use-notice.ts +2 -2
  359. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  360. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  361. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  362. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  363. package/src/chat/ui/diff-theme.ts +3 -3
  364. package/src/chat/ui/file-links.ts +2 -2
  365. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  366. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  367. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  368. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  369. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  370. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  371. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  372. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  373. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  374. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  375. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  376. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  377. package/src/chat/ui/rows/WorkRows.tsx +20 -7
  378. package/src/chat/ui/useToggleSet.ts +15 -18
  379. package/src/chat/ui/visual-theme.ts +2 -3
  380. package/src/host-hooks.ts +113 -0
  381. package/src/lazy.tsx +2 -0
  382. package/src/locales/en/agent-chat.ts +135 -108
  383. package/src/locales/en/agent-prompts.ts +7 -7
  384. package/src/locales/en/agent-providers.ts +35 -34
  385. package/src/locales/en/agent-usage.ts +26 -20
  386. package/src/locales/nl/agent-chat.ts +127 -100
  387. package/src/locales/nl/agent-prompts.ts +5 -5
  388. package/src/locales/nl/agent-providers.ts +33 -32
  389. package/src/locales/nl/agent-usage.ts +25 -20
  390. package/src/prompts/ui/ApprovalBody.tsx +3 -1
  391. package/src/providers/CliDetail.tsx +2 -1
  392. package/src/providers/InstallPage.tsx +2 -4
  393. package/src/providers/ProviderList.tsx +12 -2
  394. package/src/providers/ProvidersPane.tsx +45 -15
  395. package/src/providers/pane-target.ts +20 -4
  396. package/src/state/chats.ts +7 -2
  397. package/src/usage/LimitsList.tsx +12 -13
  398. package/src/usage/UsageBreakdown.tsx +17 -6
  399. package/src/usage/UsageLimits.tsx +2 -1
  400. package/src/usage/UsagePage.tsx +3 -3
  401. package/src/usage/index.ts +1 -1
  402. package/src/usage/limit-groups.ts +12 -0
  403. package/src/usage/limits.ts +2 -2
  404. package/src/usage/money.ts +1 -2
@@ -1,4 +1,3 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
1
  import 'maplibre-gl/dist/maplibre-gl.css';
3
2
  import { useEffect, useRef, useState } from 'react';
4
3
  import { Map as MapLibreMap, Marker, setWorkerUrl } from 'maplibre-gl';
@@ -8,6 +7,8 @@ import { ButtonGroup, IconButton } from '@adecore/ui';
8
7
  import { useChatHost } from '../../../../host.js';
9
8
  import { watchTheme } from '../../theme-watch.js';
10
9
  import { baseMapStyle, boundsOf, localizedTextField, mapFitOptions, spreadOverlaps } from './map-style.js';
10
+ import { useHostCodeMode } from '../../../../host-hooks.js';
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
12
  const MARKER = 'flex size-5 items-center justify-center rounded-full bg-map-marker text-xs text-map-marker-text tabular-nums shadow-raised';
12
13
  const PICKED = 'z-1 bg-accent text-accent-text outline-2 outline-surface';
13
14
  // A tile that fails this many times with none loading in between leaves the map empty, so the outline stands in.
@@ -19,231 +20,295 @@ let workerUrlSet = null;
19
20
  * host hands the address from its own source.
20
21
  */
21
22
  function ensureBundledWorker(hosted) {
22
- const url = hosted ?? new URL('maplibre-gl/dist/maplibre-gl-worker.mjs', import.meta.url).href;
23
- if (url !== workerUrlSet) {
24
- setWorkerUrl(url);
25
- workerUrlSet = url;
26
- }
23
+ const url = hosted ?? new URL('maplibre-gl/dist/maplibre-gl-worker.mjs', import.meta.url).href;
24
+ if (url !== workerUrlSet) {
25
+ setWorkerUrl(url);
26
+ workerUrlSet = url;
27
+ }
27
28
  }
28
29
  /* The grounds of the built-in map are theme tokens, which the page resolves; the style needs plain colors. */
29
30
  function readColors(element) {
30
- const style = getComputedStyle(element);
31
- return { land: style.getPropertyValue('--map-land').trim() || 'transparent', water: style.getPropertyValue('--map-water').trim() || 'transparent' };
31
+ const style = getComputedStyle(element);
32
+ return {
33
+ land: style.getPropertyValue('--map-land').trim() || 'transparent',
34
+ water: style.getPropertyValue('--map-water').trim() || 'transparent'
35
+ };
32
36
  }
33
37
  /*
34
38
  * The map itself, in the chunk that holds MapLibre. It draws the host's tiles when the source has them
35
39
  * and the outline of the world otherwise, also when the tiles turn out to be out of reach. Its
36
40
  * canvas is hidden from assistive technology, since the list of places beside it says the same.
37
41
  */
38
- export function MapView({ markers, source, selected, onPick, onStatus }) {
39
- const { t, i18n } = useTranslation('agent-chat');
40
- const host = useChatHost();
41
- const mode = host.code.useMode();
42
- const workerUrl = host.maps?.workerUrl;
43
- const element = useRef(null);
44
- const [map, setMap] = useState(null);
45
- const [outline, setOutline] = useState(false);
46
- const latest = useRef({ source, onStatus, onPick });
47
- useEffect(() => {
48
- latest.current = { source, onStatus, onPick };
49
- });
50
- const language = i18n.language.split('-')[0] ?? 'en';
51
- const styleKey = `${mode}:${source.state === 'tiles' ? source.styleUrl(mode) : 'outline'}`;
52
- const pointsKey = JSON.stringify(markers.map((marker) => [marker.id, marker.lat, marker.lon]));
53
- useEffect(() => {
54
- const container = element.current;
55
- if (container === null) {
56
- return;
57
- }
58
- const current = latest.current.source;
59
- let colors = readColors(container);
60
- const offline = current.state === 'tiles' && typeof navigator !== 'undefined' && navigator.onLine === false;
61
- const tiles = current.state === 'tiles' && !offline;
62
- let created;
63
- try {
64
- ensureBundledWorker(workerUrl);
65
- created = new MapLibreMap({
66
- container,
67
- style: current.state === 'tiles' && tiles ? current.styleUrl(mode) : baseMapStyle(colors),
68
- center: [0, 20],
69
- zoom: 1,
70
- keyboard: false,
71
- cooperativeGestures: true,
72
- attributionControl: false,
73
- dragRotate: false,
74
- pitchWithRotate: false,
75
- locale: {
76
- 'CooperativeGesturesHandler.WindowsHelpText': t('blocks.map.scrollHint'),
77
- 'CooperativeGesturesHandler.MacHelpText': t('blocks.map.scrollHint'),
78
- 'CooperativeGesturesHandler.MobileHelpText': t('blocks.map.touchHint')
79
- },
80
- transformRequest: (url) => {
81
- const now = latest.current.source;
82
- return now.state === 'tiles' && now.transformRequest ? now.transformRequest(url) : { url };
83
- }
84
- });
85
- }
86
- catch {
87
- latest.current.onStatus('failed');
88
- return;
89
- }
90
- created.touchZoomRotate.disableRotation();
91
- const canvas = created.getCanvas();
92
- canvas.tabIndex = -1;
93
- const wantsTiles = current.state === 'tiles';
94
- let drawing = tiles ? 'tiles' : 'outline';
95
- // Why the outline is drawn in place of tiles that were asked for; null while the tiles are.
96
- let reason = wantsTiles && !tiles ? 'offline' : null;
97
- let styleLoaded = false;
98
- let restoring = false;
99
- let tileErrors = 0;
100
- setOutline(!tiles);
101
- latest.current.onStatus(tiles ? 'loading' : wantsTiles ? 'offline' : 'base');
102
- const drawOutline = (why) => {
103
- if (drawing === 'outline' || !wantsTiles) {
104
- return;
105
- }
106
- drawing = 'outline';
107
- reason = why;
108
- setOutline(true);
109
- created.setStyle(baseMapStyle(colors));
110
- latest.current.onStatus(why);
111
- };
112
- const drawTiles = () => {
113
- if (current.state !== 'tiles') {
114
- return;
115
- }
116
- drawing = 'tiles';
117
- reason = null;
118
- styleLoaded = false;
119
- restoring = true;
120
- tileErrors = 0;
121
- setOutline(false);
122
- created.setStyle(current.styleUrl(mode));
123
- latest.current.onStatus('loading');
124
- };
125
- const unreachable = () => (typeof navigator !== 'undefined' && navigator.onLine === false ? 'offline' : 'unavailable');
126
- created.on('style.load', () => {
127
- if (drawing !== 'tiles') {
128
- return;
129
- }
130
- styleLoaded = true;
131
- if (restoring) {
132
- restoring = false;
133
- latest.current.onStatus('tiles');
134
- }
135
- const field = current.state === 'tiles' ? current.labelField?.(language) : undefined;
136
- if (field === undefined) {
137
- return;
138
- }
139
- for (const layer of created.getStyle().layers) {
140
- const textField = layer.type === 'symbol' ? layer.layout?.['text-field'] : undefined;
141
- if (textField !== undefined) {
142
- created.setLayoutProperty(layer.id, 'text-field', localizedTextField(textField, field));
143
- }
144
- }
145
- });
146
- created.on('load', () => {
147
- if (drawing === 'tiles') {
148
- latest.current.onStatus('tiles');
149
- }
150
- });
151
- created.on('sourcedata', (event) => {
152
- if ('tile' in event) {
153
- tileErrors = 0;
154
- }
155
- });
156
- created.on('error', (event) => {
157
- if (drawing !== 'tiles') {
158
- return;
159
- }
160
- // Before the style is here there is nothing to draw. After it, a tile the host refuses (a ticket
161
- // that ran out) or several in a row leave an empty map; a single one the map retries itself.
162
- const status = event.error?.status;
163
- if (!styleLoaded || status === 401 || status === 403 || ++tileErrors >= TILE_ERRORS_IN_A_ROW) {
164
- drawOutline(unreachable());
165
- }
166
- });
167
- const goOffline = () => drawOutline('offline');
168
- const goOnline = () => {
169
- if (reason === 'offline') {
170
- drawTiles();
171
- }
172
- };
173
- const contextLost = () => latest.current.onStatus('lost');
174
- if (wantsTiles) {
175
- window.addEventListener('offline', goOffline);
176
- window.addEventListener('online', goOnline);
177
- }
178
- canvas.addEventListener('webglcontextlost', contextLost);
179
- // Colors that change within the side repaint the outline in place: a style that differs only in its paint is
180
- // applied as a diff, so the map, its camera and its markers stay. The tiles draw colors of their own.
181
- const stopWatching = watchTheme(container.ownerDocument, () => {
182
- const next = readColors(container);
183
- if (next.land === colors.land && next.water === colors.water) {
184
- return;
185
- }
186
- colors = next;
187
- if (drawing === 'outline') {
188
- created.setStyle(baseMapStyle(colors));
189
- }
190
- });
191
- setMap(created);
192
- return () => {
193
- stopWatching();
194
- window.removeEventListener('offline', goOffline);
195
- window.removeEventListener('online', goOnline);
196
- canvas.removeEventListener('webglcontextlost', contextLost);
197
- setMap(null);
198
- created.remove();
199
- };
200
- // The map is made again when the style it draws changes, and not for any other change of the source.
201
- // oxlint-disable-next-line react-hooks/exhaustive-deps
202
- }, [styleKey, language]);
203
- useEffect(() => {
204
- const bounds = boundsOf(markers);
205
- if (map === null || bounds === null) {
206
- return;
207
- }
208
- map.fitBounds(bounds, { ...mapFitOptions(outline), duration: 0 });
209
- // The points are compared by their coordinates, so a render that rebuilt the same list does not move the map.
210
- // oxlint-disable-next-line react-hooks/exhaustive-deps
211
- }, [map, pointsKey, outline]);
212
- const pickable = onPick !== null;
213
- useEffect(() => {
214
- if (map === null) {
215
- return;
42
+ export function MapView({
43
+ markers,
44
+ source,
45
+ selected,
46
+ onPick,
47
+ onStatus
48
+ }) {
49
+ const {
50
+ t,
51
+ i18n
52
+ } = useTranslation('agent-chat');
53
+ const host = useChatHost();
54
+ const mode = useHostCodeMode();
55
+ const workerUrl = host.maps?.workerUrl;
56
+ const element = useRef(null);
57
+ const [map, setMap] = useState(null);
58
+ const [outline, setOutline] = useState(false);
59
+ const latest = useRef({
60
+ source,
61
+ onStatus,
62
+ onPick
63
+ });
64
+ useEffect(() => {
65
+ latest.current = {
66
+ source,
67
+ onStatus,
68
+ onPick
69
+ };
70
+ });
71
+ const language = i18n.language.split('-')[0] ?? 'en';
72
+ const styleKey = `${mode}:${source.state === 'tiles' ? source.styleUrl(mode) : 'outline'}`;
73
+ const pointsKey = JSON.stringify(markers.map(marker => [marker.id, marker.lat, marker.lon]));
74
+ useEffect(() => {
75
+ const container = element.current;
76
+ if (container === null) {
77
+ return;
78
+ }
79
+ const current = latest.current.source;
80
+ let colors = readColors(container);
81
+ const offline = current.state === 'tiles' && typeof navigator !== 'undefined' && navigator.onLine === false;
82
+ const tiles = current.state === 'tiles' && !offline;
83
+ let created;
84
+ try {
85
+ ensureBundledWorker(workerUrl);
86
+ created = new MapLibreMap({
87
+ container,
88
+ style: current.state === 'tiles' && tiles ? current.styleUrl(mode) : baseMapStyle(colors),
89
+ center: [0, 20],
90
+ zoom: 1,
91
+ keyboard: false,
92
+ cooperativeGestures: true,
93
+ attributionControl: false,
94
+ dragRotate: false,
95
+ pitchWithRotate: false,
96
+ locale: {
97
+ 'CooperativeGesturesHandler.WindowsHelpText': t('blocks.map.scrollHint'),
98
+ 'CooperativeGesturesHandler.MacHelpText': t('blocks.map.scrollHint'),
99
+ 'CooperativeGesturesHandler.MobileHelpText': t('blocks.map.touchHint')
100
+ },
101
+ transformRequest: url => {
102
+ const now = latest.current.source;
103
+ return now.state === 'tiles' && now.transformRequest ? now.transformRequest(url) : {
104
+ url
105
+ };
216
106
  }
217
- const drawn = markers.map((marker) => {
218
- const node = document.createElement('div');
219
- node.setAttribute('aria-hidden', 'true');
220
- node.dataset.mapMarker = marker.id;
221
- node.className = `${MARKER} ${marker.id === selected ? PICKED : ''} ${pickable ? 'cursor-pointer' : ''}`;
222
- node.textContent = String(marker.number);
223
- node.addEventListener('click', () => latest.current.onPick?.(marker.id));
224
- return { marker, drawing: new Marker({ element: node }).setLngLat([marker.lon, marker.lat]).addTo(map) };
225
- });
226
- const spread = () => {
227
- const offsets = spreadOverlaps(drawn.map(({ marker }) => ({ id: marker.id, ...map.project([marker.lon, marker.lat]) })));
228
- for (const { marker, drawing } of drawn) {
229
- drawing.setOffset(offsets.get(marker.id) ?? [0, 0]);
230
- }
231
- };
232
- spread();
233
- map.on('zoomend', spread);
234
- return () => {
235
- map.off('zoomend', spread);
236
- for (const { drawing } of drawn) {
237
- drawing.remove();
238
- }
239
- };
240
- // oxlint-disable-next-line react-hooks/exhaustive-deps
241
- }, [map, pointsKey, selected, pickable]);
242
- const showAll = () => {
243
- const bounds = boundsOf(markers);
244
- if (map !== null && bounds !== null) {
245
- map.fitBounds(bounds, mapFitOptions(outline));
107
+ });
108
+ } catch {
109
+ latest.current.onStatus('failed');
110
+ return;
111
+ }
112
+ created.touchZoomRotate.disableRotation();
113
+ const canvas = created.getCanvas();
114
+ canvas.tabIndex = -1;
115
+ const wantsTiles = current.state === 'tiles';
116
+ let drawing = tiles ? 'tiles' : 'outline';
117
+ // Why the outline is drawn in place of tiles that were asked for; null while the tiles are.
118
+ let reason = wantsTiles && !tiles ? 'offline' : null;
119
+ let styleLoaded = false;
120
+ let restoring = false;
121
+ let tileErrors = 0;
122
+ setOutline(!tiles);
123
+ latest.current.onStatus(tiles ? 'loading' : wantsTiles ? 'offline' : 'base');
124
+ const drawOutline = why => {
125
+ if (drawing === 'outline' || !wantsTiles) {
126
+ return;
127
+ }
128
+ drawing = 'outline';
129
+ reason = why;
130
+ setOutline(true);
131
+ created.setStyle(baseMapStyle(colors));
132
+ latest.current.onStatus(why);
133
+ };
134
+ const drawTiles = () => {
135
+ if (current.state !== 'tiles') {
136
+ return;
137
+ }
138
+ drawing = 'tiles';
139
+ reason = null;
140
+ styleLoaded = false;
141
+ restoring = true;
142
+ tileErrors = 0;
143
+ setOutline(false);
144
+ created.setStyle(current.styleUrl(mode));
145
+ latest.current.onStatus('loading');
146
+ };
147
+ const unreachable = () => typeof navigator !== 'undefined' && navigator.onLine === false ? 'offline' : 'unavailable';
148
+ created.on('style.load', () => {
149
+ if (drawing !== 'tiles') {
150
+ return;
151
+ }
152
+ styleLoaded = true;
153
+ if (restoring) {
154
+ restoring = false;
155
+ latest.current.onStatus('tiles');
156
+ }
157
+ const field = current.state === 'tiles' ? current.labelField?.(language) : undefined;
158
+ if (field === undefined) {
159
+ return;
160
+ }
161
+ for (const layer of created.getStyle().layers) {
162
+ const textField = layer.type === 'symbol' ? layer.layout?.['text-field'] : undefined;
163
+ if (textField !== undefined) {
164
+ created.setLayoutProperty(layer.id, 'text-field', localizedTextField(textField, field));
246
165
  }
166
+ }
167
+ });
168
+ created.on('load', () => {
169
+ if (drawing === 'tiles') {
170
+ latest.current.onStatus('tiles');
171
+ }
172
+ });
173
+ created.on('sourcedata', event => {
174
+ if ('tile' in event) {
175
+ tileErrors = 0;
176
+ }
177
+ });
178
+ created.on('error', event_0 => {
179
+ if (drawing !== 'tiles') {
180
+ return;
181
+ }
182
+ // Before the style is here there is nothing to draw. After it, a tile the host refuses (a ticket
183
+ // that ran out) or several in a row leave an empty map; a single one the map retries itself.
184
+ const status = event_0.error?.status;
185
+ if (!styleLoaded || status === 401 || status === 403 || ++tileErrors >= TILE_ERRORS_IN_A_ROW) {
186
+ drawOutline(unreachable());
187
+ }
188
+ });
189
+ const goOffline = () => drawOutline('offline');
190
+ const goOnline = () => {
191
+ if (reason === 'offline') {
192
+ drawTiles();
193
+ }
247
194
  };
248
- return (_jsxs("div", { className: "absolute inset-0", children: [_jsx("div", { ref: element, "aria-hidden": true, className: "size-full" }), _jsxs(ButtonGroup, { className: "absolute top-2 right-2 rounded-md border border-border bg-surface-raised shadow-raised", children: [_jsx(IconButton, { icon: Plus, size: "sm", label: t('blocks.map.zoomIn'), onClick: () => map?.zoomIn() }), _jsx(IconButton, { icon: Minus, size: "sm", label: t('blocks.map.zoomOut'), onClick: () => map?.zoomOut() }), markers.length > 1 && _jsx(IconButton, { icon: Maximize, size: "sm", label: t('blocks.map.showAll'), onClick: showAll })] })] }));
249
- }
195
+ const contextLost = () => latest.current.onStatus('lost');
196
+ if (wantsTiles) {
197
+ window.addEventListener('offline', goOffline);
198
+ window.addEventListener('online', goOnline);
199
+ }
200
+ canvas.addEventListener('webglcontextlost', contextLost);
201
+ // Colors that change within the side repaint the outline in place: a style that differs only in its paint is
202
+ // applied as a diff, so the map, its camera and its markers stay. The tiles draw colors of their own.
203
+ const stopWatching = watchTheme(container.ownerDocument, () => {
204
+ const next = readColors(container);
205
+ if (next.land === colors.land && next.water === colors.water) {
206
+ return;
207
+ }
208
+ colors = next;
209
+ if (drawing === 'outline') {
210
+ created.setStyle(baseMapStyle(colors));
211
+ }
212
+ });
213
+ setMap(created);
214
+ return () => {
215
+ stopWatching();
216
+ window.removeEventListener('offline', goOffline);
217
+ window.removeEventListener('online', goOnline);
218
+ canvas.removeEventListener('webglcontextlost', contextLost);
219
+ setMap(null);
220
+ created.remove();
221
+ };
222
+ // The map is made again when the style it draws changes, and not for any other change of the source.
223
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
224
+ }, [styleKey, language]);
225
+ useEffect(() => {
226
+ const bounds = boundsOf(markers);
227
+ if (map === null || bounds === null) {
228
+ return;
229
+ }
230
+ map.fitBounds(bounds, {
231
+ ...mapFitOptions(outline),
232
+ duration: 0
233
+ });
234
+ // The points are compared by their coordinates, so a render that rebuilt the same list does not move the map.
235
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
236
+ }, [map, pointsKey, outline]);
237
+ const pickable = onPick !== null;
238
+ useEffect(() => {
239
+ if (map === null) {
240
+ return;
241
+ }
242
+ const drawn = markers.map(marker_0 => {
243
+ const node = document.createElement('div');
244
+ node.setAttribute('aria-hidden', 'true');
245
+ node.dataset.mapMarker = marker_0.id;
246
+ node.className = `${MARKER} ${marker_0.id === selected ? PICKED : ''} ${pickable ? 'cursor-pointer' : ''}`;
247
+ node.textContent = String(marker_0.number);
248
+ node.addEventListener('click', () => latest.current.onPick?.(marker_0.id));
249
+ return {
250
+ marker: marker_0,
251
+ drawing: new Marker({
252
+ element: node
253
+ }).setLngLat([marker_0.lon, marker_0.lat]).addTo(map)
254
+ };
255
+ });
256
+ const spread = () => {
257
+ const offsets = spreadOverlaps(drawn.map(({
258
+ marker: marker_1
259
+ }) => ({
260
+ id: marker_1.id,
261
+ ...map.project([marker_1.lon, marker_1.lat])
262
+ })));
263
+ for (const {
264
+ marker: marker_2,
265
+ drawing: drawing_0
266
+ } of drawn) {
267
+ drawing_0.setOffset(offsets.get(marker_2.id) ?? [0, 0]);
268
+ }
269
+ };
270
+ spread();
271
+ map.on('zoomend', spread);
272
+ return () => {
273
+ map.off('zoomend', spread);
274
+ for (const {
275
+ drawing: drawing_1
276
+ } of drawn) {
277
+ drawing_1.remove();
278
+ }
279
+ };
280
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
281
+ }, [map, pointsKey, selected, pickable]);
282
+ const showAll = () => {
283
+ const bounds_0 = boundsOf(markers);
284
+ if (map !== null && bounds_0 !== null) {
285
+ map.fitBounds(bounds_0, mapFitOptions(outline));
286
+ }
287
+ };
288
+ return /*#__PURE__*/_jsxs("div", {
289
+ className: "absolute inset-0",
290
+ children: [/*#__PURE__*/_jsx("div", {
291
+ ref: element,
292
+ "aria-hidden": true,
293
+ className: "size-full"
294
+ }), /*#__PURE__*/_jsxs(ButtonGroup, {
295
+ className: "absolute top-2 right-2 rounded-md border border-border bg-surface-raised shadow-raised",
296
+ children: [/*#__PURE__*/_jsx(IconButton, {
297
+ icon: Plus,
298
+ size: "sm",
299
+ label: t('blocks.map.zoomIn'),
300
+ onClick: () => map?.zoomIn()
301
+ }), /*#__PURE__*/_jsx(IconButton, {
302
+ icon: Minus,
303
+ size: "sm",
304
+ label: t('blocks.map.zoomOut'),
305
+ onClick: () => map?.zoomOut()
306
+ }), markers.length > 1 && /*#__PURE__*/_jsx(IconButton, {
307
+ icon: Maximize,
308
+ size: "sm",
309
+ label: t('blocks.map.showAll'),
310
+ onClick: showAll
311
+ })]
312
+ })]
313
+ });
314
+ }