@adecore/agents-react 0.31.12 → 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 (402) 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 +1945 -164
  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 +34 -0
  241. package/dist/locales/en/agent-chat.js +747 -713
  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 +34 -0
  248. package/dist/locales/nl/agent-chat.js +747 -713
  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 -27
  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.js +404 -192
  291. package/dist/state/index.js +1 -1
  292. package/dist/state/provider-accounts.js +70 -47
  293. package/dist/state/providers.js +45 -16
  294. package/dist/state/usage.js +154 -77
  295. package/dist/storage.js +69 -68
  296. package/dist/testing/index.js +1 -1
  297. package/dist/testing/prompts.js +105 -67
  298. package/dist/transport.js +10 -10
  299. package/dist/ui/PlainTextarea.js +27 -3
  300. package/dist/usage/LimitsList.js +646 -40
  301. package/dist/usage/UsageBreakdown.js +879 -38
  302. package/dist/usage/UsageChart.js +311 -32
  303. package/dist/usage/UsageDialog.js +46 -4
  304. package/dist/usage/UsageLimits.js +467 -34
  305. package/dist/usage/UsageLimitsCard.js +95 -11
  306. package/dist/usage/UsagePage.js +817 -96
  307. package/dist/usage/UsagePane.js +164 -10
  308. package/dist/usage/UsageSummary.js +151 -6
  309. package/dist/usage/UsageTiles.js +164 -14
  310. package/dist/usage/format.js +32 -32
  311. package/dist/usage/index.d.ts +1 -1
  312. package/dist/usage/index.js +2 -1
  313. package/dist/usage/limit-groups.d.ts +2 -0
  314. package/dist/usage/limit-groups.js +77 -59
  315. package/dist/usage/limits.js +78 -43
  316. package/dist/usage/money.js +20 -4
  317. package/dist/usage/summary.js +85 -64
  318. package/package.json +8 -8
  319. package/src/agents/ModelOptionControl.tsx +3 -1
  320. package/src/agents/option-words.ts +27 -0
  321. package/src/chat/account-choice.ts +41 -1
  322. package/src/chat/composer-effort.ts +32 -0
  323. package/src/chat/forks.ts +4 -5
  324. package/src/chat/index.ts +3 -1
  325. package/src/chat/logic/effort.ts +32 -0
  326. package/src/chat/logic/picker-entries.ts +45 -10
  327. package/src/chat/logic/resume-compaction.ts +95 -17
  328. package/src/chat/logic/timeline.ts +11 -3
  329. package/src/chat/preferences.ts +35 -0
  330. package/src/chat/subagent-view.ts +2 -3
  331. package/src/chat/ui/AnsiOutput.tsx +1 -2
  332. package/src/chat/ui/BookmarkSubmenu.tsx +3 -3
  333. package/src/chat/ui/ChatActivity.tsx +14 -22
  334. package/src/chat/ui/ChatReferenceChip.tsx +2 -3
  335. package/src/chat/ui/Composer.tsx +15 -7
  336. package/src/chat/ui/EditDiff.tsx +2 -3
  337. package/src/chat/ui/LimitState.tsx +2 -2
  338. package/src/chat/ui/Markdown.tsx +10 -8
  339. package/src/chat/ui/MermaidBlock.tsx +2 -3
  340. package/src/chat/ui/Pickers.tsx +49 -29
  341. package/src/chat/ui/PromptComposer.tsx +7 -9
  342. package/src/chat/ui/ResumeCompactionDock.tsx +16 -4
  343. package/src/chat/ui/RunSettings.tsx +67 -28
  344. package/src/chat/ui/Scrubber.tsx +3 -3
  345. package/src/chat/ui/ShellCommand.tsx +2 -0
  346. package/src/chat/ui/SubagentInfo.tsx +2 -3
  347. package/src/chat/ui/SubagentTimeline.tsx +12 -16
  348. package/src/chat/ui/Timeline.tsx +6 -6
  349. package/src/chat/ui/UnifiedDiff.tsx +3 -4
  350. package/src/chat/ui/VisualFrame.tsx +5 -8
  351. package/src/chat/ui/code-theme.ts +4 -4
  352. package/src/chat/ui/composer/placeholder.ts +2 -2
  353. package/src/chat/ui/composer/use-compaction-offer.ts +36 -16
  354. package/src/chat/ui/composer/use-composer-menus.ts +4 -9
  355. package/src/chat/ui/composer/use-composer-submit.ts +2 -1
  356. package/src/chat/ui/composer/use-effort-stepper.ts +56 -0
  357. package/src/chat/ui/composer/use-notice.ts +2 -2
  358. package/src/chat/ui/diff/EditorEditDiff.tsx +9 -13
  359. package/src/chat/ui/diff/LegacyEditDiff.tsx +12 -17
  360. package/src/chat/ui/diff/LegacyUnifiedDiff.tsx +13 -21
  361. package/src/chat/ui/diff/use-review-stack.ts +4 -4
  362. package/src/chat/ui/diff-theme.ts +3 -3
  363. package/src/chat/ui/file-links.ts +2 -2
  364. package/src/chat/ui/intelligent-ui/UiReply.tsx +2 -0
  365. package/src/chat/ui/intelligent-ui/renderers/chart.tsx +3 -3
  366. package/src/chat/ui/intelligent-ui/renderers/content.tsx +5 -6
  367. package/src/chat/ui/intelligent-ui/renderers/map-view.tsx +2 -1
  368. package/src/chat/ui/intelligent-ui/renderers/map.tsx +2 -1
  369. package/src/chat/ui/intelligent-ui/use-truncated.ts +16 -19
  370. package/src/chat/ui/intelligent-ui/use-ui-links.ts +3 -3
  371. package/src/chat/ui/rows/ForksRow.tsx +3 -5
  372. package/src/chat/ui/rows/GeneratedImageRow.tsx +2 -1
  373. package/src/chat/ui/rows/MessageRows.tsx +12 -21
  374. package/src/chat/ui/rows/SubagentRow.tsx +3 -3
  375. package/src/chat/ui/rows/TaskRow.tsx +1 -1
  376. package/src/chat/ui/rows/WorkRows.tsx +10 -5
  377. package/src/chat/ui/useToggleSet.ts +15 -18
  378. package/src/chat/ui/visual-theme.ts +2 -3
  379. package/src/host-hooks.ts +113 -0
  380. package/src/lazy.tsx +2 -0
  381. package/src/locales/en/agent-chat.ts +134 -108
  382. package/src/locales/en/agent-prompts.ts +7 -7
  383. package/src/locales/en/agent-providers.ts +35 -34
  384. package/src/locales/en/agent-usage.ts +26 -20
  385. package/src/locales/nl/agent-chat.ts +126 -100
  386. package/src/locales/nl/agent-prompts.ts +5 -5
  387. package/src/locales/nl/agent-providers.ts +33 -32
  388. package/src/locales/nl/agent-usage.ts +25 -20
  389. package/src/providers/CliDetail.tsx +2 -1
  390. package/src/providers/InstallPage.tsx +2 -4
  391. package/src/providers/ProviderList.tsx +12 -2
  392. package/src/providers/ProvidersPane.tsx +45 -15
  393. package/src/providers/pane-target.ts +20 -4
  394. package/src/state/chats.ts +2 -2
  395. package/src/usage/LimitsList.tsx +12 -13
  396. package/src/usage/UsageBreakdown.tsx +17 -6
  397. package/src/usage/UsageLimits.tsx +2 -1
  398. package/src/usage/UsagePage.tsx +3 -3
  399. package/src/usage/index.ts +1 -1
  400. package/src/usage/limit-groups.ts +12 -0
  401. package/src/usage/limits.ts +2 -2
  402. package/src/usage/money.ts +1 -2
@@ -1,4 +1,4 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { c as _c } from "react/compiler-runtime";
2
2
  import { Fragment, memo, useEffect, useMemo, useState } from 'react';
3
3
  import clsx from 'clsx';
4
4
  import { useTranslation } from 'react-i18next';
@@ -7,29 +7,30 @@ import { layoutTicks, messageAt, slotInView, slotOf, tickWidth, TICK_HEIGHT_PX }
7
7
  import { BookmarkMenuItems } from './TimelineMenu.js';
8
8
  import { formatMoment } from '@adecore/ui/format';
9
9
  import { cameThroughPortal, ContextMenu, copyText, Icon, Menu, PreviewCard } from '@adecore/ui';
10
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
10
11
  const PREVIEW_CHARS = 280;
11
12
  const FOUND_WIDTH_PX = 4;
12
13
  function timeOf(createdAt) {
13
- return formatMoment(createdAt);
14
+ return formatMoment(createdAt);
14
15
  }
15
16
  const CARD_ACTIONS = {
16
- 'copy-message': {
17
- label: 'timeline.menu.copyMessage',
18
- icon: Copy,
19
- // A wake carries the machine's label, not anything a person wrote.
20
- offers: (tick) => tick.kind === 'person' && tick.text !== '',
21
- run: (tick) => copyText(tick.text)
22
- },
23
- fork: {
24
- label: 'timeline.menu.forkFromHere',
25
- icon: GitFork,
26
- offers: (tick, chat) => chat !== null && tick.turnId !== null && chat.canFork(tick.turnId),
27
- run: (tick, chat) => {
28
- if (chat !== null && tick.turnId !== null) {
29
- chat.fork(tick.turnId);
30
- }
31
- }
17
+ 'copy-message': {
18
+ label: 'timeline.menu.copyMessage',
19
+ icon: Copy,
20
+ // A wake carries the machine's label, not anything a person wrote.
21
+ offers: tick => tick.kind === 'person' && tick.text !== '',
22
+ run: tick => copyText(tick.text)
23
+ },
24
+ fork: {
25
+ label: 'timeline.menu.forkFromHere',
26
+ icon: GitFork,
27
+ offers: (tick, chat) => chat !== null && tick.turnId !== null && chat.canFork(tick.turnId),
28
+ run: (tick, chat) => {
29
+ if (chat !== null && tick.turnId !== null) {
30
+ chat.fork(tick.turnId);
31
+ }
32
32
  }
33
+ }
33
34
  };
34
35
  const NOTHING_FOUND = [];
35
36
  /*
@@ -37,81 +38,509 @@ const NOTHING_FOUND = [];
37
38
  * per other bookmarked message, the ones on screen bright. One hover card follows the pointer, so a
38
39
  * thousand ticks are a thousand spans and not a thousand popups. An open find marks every tick it hits.
39
40
  */
40
- export const Scrubber = memo(function Scrubber({ ticks, firstInView, lastInView, onPick, chat = null, found = NOTHING_FOUND, foundCurrent = null }) {
41
- const { t } = useTranslation('agent-chat');
42
- // State rather than a ref. The card's anchor is built during render and has to change when the strip does.
43
- const [strip, setStrip] = useState(null);
44
- const [height, setHeight] = useState(0);
45
- // The message the card is about; it stays while the card closes, so the card never empties as it fades.
46
- const [hovered, setHovered] = useState(null);
47
- // Apart from `hovered`, which outlives the pointer for the card's sake. The ticks shrink back the moment it leaves.
48
- const [pointing, setPointing] = useState(false);
49
- const [cardOpen, setCardOpen] = useState(false);
50
- // The message a right-click was on, kept apart from `hovered`, which moves on with the pointer while the menu is up.
51
- const [menuIndex, setMenuIndex] = useState(null);
52
- const [menuOpen, setMenuOpen] = useState(false);
53
- useEffect(() => {
54
- if (strip === null || typeof ResizeObserver === 'undefined') {
55
- return;
56
- }
57
- const observer = new ResizeObserver(() => setHeight(strip.offsetHeight));
58
- observer.observe(strip);
59
- return () => observer.disconnect();
60
- }, [strip]);
61
- const kinds = useMemo(() => ticks.map((tick) => tick.kind), [ticks]);
62
- const marked = useMemo(() => ticks.map((tick) => tick.bookmark !== null), [ticks]);
63
- const layout = useMemo(() => layoutTicks(kinds, height, marked, found), [kinds, height, marked, found]);
41
+ export const Scrubber = memo(function Scrubber(t0) {
42
+ const $ = _c(116);
43
+ const {
44
+ ticks,
45
+ firstInView,
46
+ lastInView,
47
+ onPick,
48
+ chat: t1,
49
+ found: t2,
50
+ foundCurrent: t3
51
+ } = t0;
52
+ const chat = t1 === undefined ? null : t1;
53
+ const found = t2 === undefined ? NOTHING_FOUND : t2;
54
+ const foundCurrent = t3 === undefined ? null : t3;
55
+ const {
56
+ t
57
+ } = useTranslation("agent-chat");
58
+ const [strip, setStrip] = useState(null);
59
+ const [height, setHeight] = useState(0);
60
+ const [hovered, setHovered] = useState(null);
61
+ const [pointing, setPointing] = useState(false);
62
+ const [cardOpen, setCardOpen] = useState(false);
63
+ const [menuIndex, setMenuIndex] = useState(null);
64
+ const [menuOpen, setMenuOpen] = useState(false);
65
+ let t4;
66
+ let t5;
67
+ if ($[0] !== strip) {
68
+ t4 = () => {
69
+ if (strip === null || typeof ResizeObserver === "undefined") {
70
+ return;
71
+ }
72
+ const observer = new ResizeObserver(() => setHeight(strip.offsetHeight));
73
+ observer.observe(strip);
74
+ return () => observer.disconnect();
75
+ };
76
+ t5 = [strip];
77
+ $[0] = strip;
78
+ $[1] = t4;
79
+ $[2] = t5;
80
+ } else {
81
+ t4 = $[1];
82
+ t5 = $[2];
83
+ }
84
+ useEffect(t4, t5);
85
+ let T0;
86
+ let T1;
87
+ let T2;
88
+ let T3;
89
+ let actionsFor;
90
+ let menuMarkable;
91
+ let menuTick;
92
+ let t10;
93
+ let t11;
94
+ let t12;
95
+ let t13;
96
+ let t14;
97
+ let t15;
98
+ let t16;
99
+ let t17;
100
+ let t6;
101
+ let t7;
102
+ let t8;
103
+ let t9;
104
+ if ($[3] !== cardOpen || $[4] !== chat || $[5] !== firstInView || $[6] !== found || $[7] !== foundCurrent || $[8] !== height || $[9] !== hovered || $[10] !== lastInView || $[11] !== menuIndex || $[12] !== menuOpen || $[13] !== onPick || $[14] !== pointing || $[15] !== strip || $[16] !== t || $[17] !== ticks) {
105
+ const kinds = ticks.map(_temp);
106
+ const marked = ticks.map(_temp2);
107
+ const layout = layoutTicks(kinds, height, marked, found);
64
108
  const currentSlot = foundCurrent === null ? null : slotOf(layout, foundCurrent);
65
- const inView = firstInView === null || lastInView === null ? null : { first: firstInView, last: lastInView };
66
- const hoveredTick = hovered === null ? null : (ticks[hovered] ?? null);
109
+ const inView = firstInView === null || lastInView === null ? null : {
110
+ first: firstInView,
111
+ last: lastInView
112
+ };
113
+ const hoveredTick = hovered === null ? null : ticks[hovered] ?? null;
67
114
  const hoveredSlot = hovered === null ? null : slotOf(layout, hovered);
68
115
  const anchorY = hoveredSlot === null ? null : layout.slots[hoveredSlot].y;
69
- const anchor = useMemo(() => {
70
- const element = strip;
71
- if (anchorY === null || element === null) {
72
- return undefined;
73
- }
74
- return {
75
- contextElement: element,
76
- getBoundingClientRect: () => {
77
- const rect = element.getBoundingClientRect();
78
- return DOMRect.fromRect({ x: rect.left, y: rect.top + anchorY + TICK_HEIGHT_PX / 2, width: rect.width, height: 0 });
79
- }
116
+ let t18;
117
+ bb0: {
118
+ const element = strip;
119
+ if (anchorY === null || element === null) {
120
+ t18 = undefined;
121
+ break bb0;
122
+ }
123
+ let t19;
124
+ if ($[37] !== anchorY || $[38] !== element) {
125
+ t19 = () => {
126
+ const rect = element.getBoundingClientRect();
127
+ return DOMRect.fromRect({
128
+ x: rect.left,
129
+ y: rect.top + anchorY + TICK_HEIGHT_PX / 2,
130
+ width: rect.width,
131
+ height: 0
132
+ });
133
+ };
134
+ $[37] = anchorY;
135
+ $[38] = element;
136
+ $[39] = t19;
137
+ } else {
138
+ t19 = $[39];
139
+ }
140
+ let t20;
141
+ if ($[40] !== element || $[41] !== t19) {
142
+ t20 = {
143
+ contextElement: element,
144
+ getBoundingClientRect: t19
80
145
  };
81
- }, [anchorY, strip]);
82
- const pointAt = (e) => messageAt(layout, e.clientY - e.currentTarget.getBoundingClientRect().top);
83
- const actionsFor = (tick) => tick === null ? [] : Object.values(CARD_ACTIONS).filter((action) => action.offers(tick, chat));
146
+ $[40] = element;
147
+ $[41] = t19;
148
+ $[42] = t20;
149
+ } else {
150
+ t20 = $[42];
151
+ }
152
+ t18 = t20;
153
+ }
154
+ const anchor = t18;
155
+ let t19;
156
+ if ($[43] !== layout) {
157
+ t19 = e => messageAt(layout, e.clientY - e.currentTarget.getBoundingClientRect().top);
158
+ $[43] = layout;
159
+ $[44] = t19;
160
+ } else {
161
+ t19 = $[44];
162
+ }
163
+ const pointAt = t19;
164
+ let t20;
165
+ if ($[45] !== chat) {
166
+ t20 = tick_1 => tick_1 === null ? [] : Object.values(CARD_ACTIONS).filter(action => action.offers(tick_1, chat));
167
+ $[45] = chat;
168
+ $[46] = t20;
169
+ } else {
170
+ t20 = $[46];
171
+ }
172
+ actionsFor = t20;
84
173
  const actions = actionsFor(hoveredTick);
85
- /* The message a bookmark goes on: the one it is on already, or the person's own. A wake is the machine's and holds none. */
86
- const markableOf = (tick) => tick === null || chat === null ? null : (tick.bookmark?.itemId ?? (tick.kind === 'person' ? tick.id : null));
87
- const menuTick = menuIndex === null ? null : (ticks[menuIndex] ?? null);
88
- const menuMarkable = markableOf(menuTick);
89
- const onContextMenu = (e) => {
90
- // The hover card is a child here as well, and a click in it is about no tick.
91
- const index = strip === null || cameThroughPortal(e) ? null : messageAt(layout, e.clientY - strip.getBoundingClientRect().top);
92
- const tick = index === null ? null : (ticks[index] ?? null);
93
- if (tick === null || (actionsFor(tick).length === 0 && markableOf(tick) === null)) {
94
- e.preventBaseUIHandler();
95
- return;
174
+ let t21;
175
+ if ($[47] !== chat) {
176
+ t21 = tick_2 => tick_2 === null || chat === null ? null : tick_2.bookmark?.itemId ?? (tick_2.kind === "person" ? tick_2.id : null);
177
+ $[47] = chat;
178
+ $[48] = t21;
179
+ } else {
180
+ t21 = $[48];
181
+ }
182
+ const markableOf = t21;
183
+ menuTick = menuIndex === null ? null : ticks[menuIndex] ?? null;
184
+ let t22;
185
+ if ($[49] !== markableOf || $[50] !== menuTick) {
186
+ t22 = markableOf(menuTick);
187
+ $[49] = markableOf;
188
+ $[50] = menuTick;
189
+ $[51] = t22;
190
+ } else {
191
+ t22 = $[51];
192
+ }
193
+ menuMarkable = t22;
194
+ let t23;
195
+ if ($[52] !== actionsFor || $[53] !== layout || $[54] !== markableOf || $[55] !== strip || $[56] !== ticks) {
196
+ t23 = e_0 => {
197
+ const index = strip === null || cameThroughPortal(e_0) ? null : messageAt(layout, e_0.clientY - strip.getBoundingClientRect().top);
198
+ const tick_3 = index === null ? null : ticks[index] ?? null;
199
+ if (tick_3 === null || actionsFor(tick_3).length === 0 && markableOf(tick_3) === null) {
200
+ e_0.preventBaseUIHandler();
201
+ return;
96
202
  }
97
203
  setMenuIndex(index);
98
- };
99
- return (_jsxs(ContextMenu.Root, { onOpenChange: setMenuOpen, children: [_jsx(ContextMenu.Trigger, { className: "h-full w-full", onContextMenu: onContextMenu, children: _jsxs(PreviewCard.Root, { open: cardOpen && !menuOpen, onOpenChange: setCardOpen, children: [_jsx(PreviewCard.Trigger, { delay: 150, closeDelay: 150, render: _jsx("div", { ref: setStrip, role: "navigation", "aria-label": t('scrubber.strip'), className: "relative h-full w-full cursor-pointer select-none", onPointerMove: (e) => {
100
- setPointing(true);
101
- const index = pointAt(e);
102
- if (index !== hovered) {
103
- setHovered(index);
104
- }
105
- }, onPointerLeave: () => setPointing(false), onClick: (e) => {
106
- const index = pointAt(e);
107
- if (index !== null) {
108
- onPick(index);
109
- }
110
- } }), children: layout.slots.map((slot, index) => {
111
- const distance = pointing && hoveredSlot !== null ? Math.abs(index - hoveredSlot) : null;
112
- // A bookmark is a place to find again from anywhere, so it never dims with the rest.
113
- const bright = slot.marked || slotInView(slot, inView) || distance === 0;
114
- return (_jsxs(Fragment, { children: [_jsx("span", { "aria-hidden": true, className: clsx('absolute left-1 rounded-full transition-[width,opacity] duration-100 ease-out motion-reduce:transition-none', slot.marked ? 'bg-accent' : slot.kind === 'wake' ? 'bg-text-muted' : 'bg-text', bright ? 'opacity-100' : 'opacity-30'), style: { top: slot.y, height: TICK_HEIGHT_PX, width: tickWidth(slot.kind, distance) } }), slot.found && (_jsx("span", { "aria-hidden": true, className: clsx('absolute right-0 rounded-full bg-chat-find', index === currentSlot ? 'opacity-100' : 'opacity-50'), style: { top: slot.y, height: TICK_HEIGHT_PX, width: FOUND_WIDTH_PX } }))] }, slot.first));
115
- }) }), _jsx(PreviewCard.Popup, { anchor: anchor, side: "right", align: "center", sideOffset: 4, className: "w-72", children: hoveredTick !== null && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "px-2.5 pt-1.5 pb-2", children: [_jsxs("div", { className: "flex items-baseline justify-between gap-3 text-xs text-text-faint", children: [hoveredTick.bookmark === null ? (_jsx("span", { children: hoveredTick.kind === 'person' ? t('rows.user.heading') : t('scrubber.tasks') })) : (_jsxs("span", { className: "flex min-w-0 items-center gap-1 self-center text-text-muted", children: [_jsx(Icon, { icon: Bookmark, size: 12, className: "shrink-0 text-accent" }), _jsx("span", { className: "truncate", children: hoveredTick.bookmark.name ?? t('bookmarks.unnamed') })] })), _jsx("time", { className: "tabular-nums", children: timeOf(hoveredTick.createdAt) })] }), _jsx("p", { className: "mt-1 line-clamp-4 text-sm break-words whitespace-pre-line text-text", children: hoveredTick.text.slice(0, PREVIEW_CHARS) || t('pickers.stash.noText') })] }), actions.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Menu.Separator, {}), actions.map((action) => (_jsxs("button", { type: "button", className: "menu-item w-full hover:bg-surface-hover", onClick: () => action.run(hoveredTick, chat), children: [_jsx(Icon, { icon: action.icon, size: 14 }), " ", t(action.label)] }, action.label)))] }))] })) })] }) }), _jsxs(ContextMenu.Popup, { children: [menuTick !== null &&
116
- actionsFor(menuTick).map((action) => (_jsxs(ContextMenu.Item, { onClick: () => action.run(menuTick, chat), children: [_jsx(Icon, { icon: action.icon, size: 14 }), " ", t(action.label)] }, action.label))), menuTick !== null && actionsFor(menuTick).length > 0 && menuMarkable !== null && _jsx(ContextMenu.Separator, {}), chat !== null && menuIndex !== null && menuMarkable !== null && (_jsx(BookmarkMenuItems, { chatId: chat.chatId, itemId: menuMarkable, onName: () => onPick(menuIndex) }))] })] }));
204
+ };
205
+ $[52] = actionsFor;
206
+ $[53] = layout;
207
+ $[54] = markableOf;
208
+ $[55] = strip;
209
+ $[56] = ticks;
210
+ $[57] = t23;
211
+ } else {
212
+ t23 = $[57];
213
+ }
214
+ const onContextMenu = t23;
215
+ T3 = ContextMenu.Root;
216
+ t17 = setMenuOpen;
217
+ T2 = ContextMenu.Trigger;
218
+ t15 = "h-full w-full";
219
+ t16 = onContextMenu;
220
+ T1 = PreviewCard.Root;
221
+ t12 = cardOpen && !menuOpen;
222
+ t13 = setCardOpen;
223
+ let t24;
224
+ if ($[58] !== t) {
225
+ t24 = t("scrubber.strip");
226
+ $[58] = t;
227
+ $[59] = t24;
228
+ } else {
229
+ t24 = $[59];
230
+ }
231
+ let t25;
232
+ if ($[60] !== hovered || $[61] !== pointAt) {
233
+ t25 = e_1 => {
234
+ setPointing(true);
235
+ const index_0 = pointAt(e_1);
236
+ if (index_0 !== hovered) {
237
+ setHovered(index_0);
238
+ }
239
+ };
240
+ $[60] = hovered;
241
+ $[61] = pointAt;
242
+ $[62] = t25;
243
+ } else {
244
+ t25 = $[62];
245
+ }
246
+ let t26;
247
+ if ($[63] === Symbol.for("react.memo_cache_sentinel")) {
248
+ t26 = () => setPointing(false);
249
+ $[63] = t26;
250
+ } else {
251
+ t26 = $[63];
252
+ }
253
+ let t27;
254
+ if ($[64] !== onPick || $[65] !== pointAt) {
255
+ t27 = e_2 => {
256
+ const index_1 = pointAt(e_2);
257
+ if (index_1 !== null) {
258
+ onPick(index_1);
259
+ }
260
+ };
261
+ $[64] = onPick;
262
+ $[65] = pointAt;
263
+ $[66] = t27;
264
+ } else {
265
+ t27 = $[66];
266
+ }
267
+ let t28;
268
+ if ($[67] !== t24 || $[68] !== t25 || $[69] !== t27) {
269
+ t28 = /*#__PURE__*/_jsx("div", {
270
+ ref: setStrip,
271
+ role: "navigation",
272
+ "aria-label": t24,
273
+ className: "relative h-full w-full cursor-pointer select-none",
274
+ onPointerMove: t25,
275
+ onPointerLeave: t26,
276
+ onClick: t27
277
+ });
278
+ $[67] = t24;
279
+ $[68] = t25;
280
+ $[69] = t27;
281
+ $[70] = t28;
282
+ } else {
283
+ t28 = $[70];
284
+ }
285
+ const t29 = layout.slots.map((slot, index_2) => {
286
+ const distance = pointing && hoveredSlot !== null ? Math.abs(index_2 - hoveredSlot) : null;
287
+ const bright = slot.marked || slotInView(slot, inView) || distance === 0;
288
+ return /*#__PURE__*/_jsxs(Fragment, {
289
+ children: [/*#__PURE__*/_jsx("span", {
290
+ "aria-hidden": true,
291
+ className: clsx("absolute left-1 rounded-full transition-[width,opacity] duration-100 ease-out motion-reduce:transition-none", slot.marked ? "bg-accent" : slot.kind === "wake" ? "bg-text-muted" : "bg-text", bright ? "opacity-100" : "opacity-30"),
292
+ style: {
293
+ top: slot.y,
294
+ height: TICK_HEIGHT_PX,
295
+ width: tickWidth(slot.kind, distance)
296
+ }
297
+ }), slot.found && /*#__PURE__*/_jsx("span", {
298
+ "aria-hidden": true,
299
+ className: clsx("absolute right-0 rounded-full bg-chat-find", index_2 === currentSlot ? "opacity-100" : "opacity-50"),
300
+ style: {
301
+ top: slot.y,
302
+ height: TICK_HEIGHT_PX,
303
+ width: FOUND_WIDTH_PX
304
+ }
305
+ })]
306
+ }, slot.first);
307
+ });
308
+ if ($[71] !== t28 || $[72] !== t29) {
309
+ t14 = /*#__PURE__*/_jsx(PreviewCard.Trigger, {
310
+ delay: 150,
311
+ closeDelay: 150,
312
+ render: t28,
313
+ children: t29
314
+ });
315
+ $[71] = t28;
316
+ $[72] = t29;
317
+ $[73] = t14;
318
+ } else {
319
+ t14 = $[73];
320
+ }
321
+ T0 = PreviewCard.Popup;
322
+ t6 = anchor;
323
+ t7 = "right";
324
+ t8 = "center";
325
+ t9 = 4;
326
+ t10 = "w-72";
327
+ t11 = hoveredTick !== null && /*#__PURE__*/_jsxs(_Fragment, {
328
+ children: [/*#__PURE__*/_jsxs("div", {
329
+ className: "px-2.5 pt-1.5 pb-2",
330
+ children: [/*#__PURE__*/_jsxs("div", {
331
+ className: "flex items-baseline justify-between gap-3 text-xs text-text-faint",
332
+ children: [hoveredTick.bookmark === null ? /*#__PURE__*/_jsx("span", {
333
+ children: hoveredTick.kind === "person" ? t("rows.user.heading") : t("scrubber.tasks")
334
+ }) : /*#__PURE__*/_jsxs("span", {
335
+ className: "flex min-w-0 items-center gap-1 self-center text-text-muted",
336
+ children: [/*#__PURE__*/_jsx(Icon, {
337
+ icon: Bookmark,
338
+ size: 12,
339
+ className: "shrink-0 text-accent"
340
+ }), /*#__PURE__*/_jsx("span", {
341
+ className: "truncate",
342
+ children: hoveredTick.bookmark.name ?? t("bookmarks.unnamed")
343
+ })]
344
+ }), /*#__PURE__*/_jsx("time", {
345
+ className: "tabular-nums",
346
+ children: timeOf(hoveredTick.createdAt)
347
+ })]
348
+ }), /*#__PURE__*/_jsx("p", {
349
+ className: "mt-1 line-clamp-4 text-sm break-words whitespace-pre-line text-text",
350
+ children: hoveredTick.text.slice(0, PREVIEW_CHARS) || t("pickers.stash.noText")
351
+ })]
352
+ }), actions.length > 0 && /*#__PURE__*/_jsxs(_Fragment, {
353
+ children: [/*#__PURE__*/_jsx(Menu.Separator, {}), actions.map(action_0 => /*#__PURE__*/_jsxs("button", {
354
+ type: "button",
355
+ className: "menu-item w-full hover:bg-surface-hover",
356
+ onClick: () => action_0.run(hoveredTick, chat),
357
+ children: [/*#__PURE__*/_jsx(Icon, {
358
+ icon: action_0.icon,
359
+ size: 14
360
+ }), " ", t(action_0.label)]
361
+ }, action_0.label))]
362
+ })]
363
+ });
364
+ $[3] = cardOpen;
365
+ $[4] = chat;
366
+ $[5] = firstInView;
367
+ $[6] = found;
368
+ $[7] = foundCurrent;
369
+ $[8] = height;
370
+ $[9] = hovered;
371
+ $[10] = lastInView;
372
+ $[11] = menuIndex;
373
+ $[12] = menuOpen;
374
+ $[13] = onPick;
375
+ $[14] = pointing;
376
+ $[15] = strip;
377
+ $[16] = t;
378
+ $[17] = ticks;
379
+ $[18] = T0;
380
+ $[19] = T1;
381
+ $[20] = T2;
382
+ $[21] = T3;
383
+ $[22] = actionsFor;
384
+ $[23] = menuMarkable;
385
+ $[24] = menuTick;
386
+ $[25] = t10;
387
+ $[26] = t11;
388
+ $[27] = t12;
389
+ $[28] = t13;
390
+ $[29] = t14;
391
+ $[30] = t15;
392
+ $[31] = t16;
393
+ $[32] = t17;
394
+ $[33] = t6;
395
+ $[34] = t7;
396
+ $[35] = t8;
397
+ $[36] = t9;
398
+ } else {
399
+ T0 = $[18];
400
+ T1 = $[19];
401
+ T2 = $[20];
402
+ T3 = $[21];
403
+ actionsFor = $[22];
404
+ menuMarkable = $[23];
405
+ menuTick = $[24];
406
+ t10 = $[25];
407
+ t11 = $[26];
408
+ t12 = $[27];
409
+ t13 = $[28];
410
+ t14 = $[29];
411
+ t15 = $[30];
412
+ t16 = $[31];
413
+ t17 = $[32];
414
+ t6 = $[33];
415
+ t7 = $[34];
416
+ t8 = $[35];
417
+ t9 = $[36];
418
+ }
419
+ let t18;
420
+ if ($[74] !== T0 || $[75] !== t10 || $[76] !== t11 || $[77] !== t6 || $[78] !== t7 || $[79] !== t8 || $[80] !== t9) {
421
+ t18 = /*#__PURE__*/_jsx(T0, {
422
+ anchor: t6,
423
+ side: t7,
424
+ align: t8,
425
+ sideOffset: t9,
426
+ className: t10,
427
+ children: t11
428
+ });
429
+ $[74] = T0;
430
+ $[75] = t10;
431
+ $[76] = t11;
432
+ $[77] = t6;
433
+ $[78] = t7;
434
+ $[79] = t8;
435
+ $[80] = t9;
436
+ $[81] = t18;
437
+ } else {
438
+ t18 = $[81];
439
+ }
440
+ let t19;
441
+ if ($[82] !== T1 || $[83] !== t12 || $[84] !== t13 || $[85] !== t14 || $[86] !== t18) {
442
+ t19 = /*#__PURE__*/_jsxs(T1, {
443
+ open: t12,
444
+ onOpenChange: t13,
445
+ children: [t14, t18]
446
+ });
447
+ $[82] = T1;
448
+ $[83] = t12;
449
+ $[84] = t13;
450
+ $[85] = t14;
451
+ $[86] = t18;
452
+ $[87] = t19;
453
+ } else {
454
+ t19 = $[87];
455
+ }
456
+ let t20;
457
+ if ($[88] !== T2 || $[89] !== t15 || $[90] !== t16 || $[91] !== t19) {
458
+ t20 = /*#__PURE__*/_jsx(T2, {
459
+ className: t15,
460
+ onContextMenu: t16,
461
+ children: t19
462
+ });
463
+ $[88] = T2;
464
+ $[89] = t15;
465
+ $[90] = t16;
466
+ $[91] = t19;
467
+ $[92] = t20;
468
+ } else {
469
+ t20 = $[92];
470
+ }
471
+ let t21;
472
+ if ($[93] !== actionsFor || $[94] !== chat || $[95] !== menuTick || $[96] !== t) {
473
+ t21 = menuTick !== null && actionsFor(menuTick).map(action_1 => /*#__PURE__*/_jsxs(ContextMenu.Item, {
474
+ onClick: () => action_1.run(menuTick, chat),
475
+ children: [/*#__PURE__*/_jsx(Icon, {
476
+ icon: action_1.icon,
477
+ size: 14
478
+ }), " ", t(action_1.label)]
479
+ }, action_1.label));
480
+ $[93] = actionsFor;
481
+ $[94] = chat;
482
+ $[95] = menuTick;
483
+ $[96] = t;
484
+ $[97] = t21;
485
+ } else {
486
+ t21 = $[97];
487
+ }
488
+ let t22;
489
+ if ($[98] !== actionsFor || $[99] !== menuMarkable || $[100] !== menuTick) {
490
+ t22 = menuTick !== null && actionsFor(menuTick).length > 0 && menuMarkable !== null && /*#__PURE__*/_jsx(ContextMenu.Separator, {});
491
+ $[98] = actionsFor;
492
+ $[99] = menuMarkable;
493
+ $[100] = menuTick;
494
+ $[101] = t22;
495
+ } else {
496
+ t22 = $[101];
497
+ }
498
+ let t23;
499
+ if ($[102] !== chat || $[103] !== menuIndex || $[104] !== menuMarkable || $[105] !== onPick) {
500
+ t23 = chat !== null && menuIndex !== null && menuMarkable !== null && /*#__PURE__*/_jsx(BookmarkMenuItems, {
501
+ chatId: chat.chatId,
502
+ itemId: menuMarkable,
503
+ onName: () => onPick(menuIndex)
504
+ });
505
+ $[102] = chat;
506
+ $[103] = menuIndex;
507
+ $[104] = menuMarkable;
508
+ $[105] = onPick;
509
+ $[106] = t23;
510
+ } else {
511
+ t23 = $[106];
512
+ }
513
+ let t24;
514
+ if ($[107] !== t21 || $[108] !== t22 || $[109] !== t23) {
515
+ t24 = /*#__PURE__*/_jsxs(ContextMenu.Popup, {
516
+ children: [t21, t22, t23]
517
+ });
518
+ $[107] = t21;
519
+ $[108] = t22;
520
+ $[109] = t23;
521
+ $[110] = t24;
522
+ } else {
523
+ t24 = $[110];
524
+ }
525
+ let t25;
526
+ if ($[111] !== T3 || $[112] !== t17 || $[113] !== t20 || $[114] !== t24) {
527
+ t25 = /*#__PURE__*/_jsxs(T3, {
528
+ onOpenChange: t17,
529
+ children: [t20, t24]
530
+ });
531
+ $[111] = T3;
532
+ $[112] = t17;
533
+ $[113] = t20;
534
+ $[114] = t24;
535
+ $[115] = t25;
536
+ } else {
537
+ t25 = $[115];
538
+ }
539
+ return t25;
117
540
  });
541
+ function _temp(tick) {
542
+ return tick.kind;
543
+ }
544
+ function _temp2(tick_0) {
545
+ return tick_0.bookmark !== null;
546
+ }