@buoy-gg/ask-buoy 7.0.40 → 7.0.42

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 (314) hide show
  1. package/README.md +13 -94
  2. package/lib/commonjs/blocks/AskBlocks.js +1 -338
  3. package/lib/commonjs/blocks/BlockRenderer.js +1 -262
  4. package/lib/commonjs/blocks/ChromePrototypes.js +1 -514
  5. package/lib/commonjs/blocks/DataBlocks.js +1 -781
  6. package/lib/commonjs/blocks/ExtraBlocks.js +1 -1860
  7. package/lib/commonjs/blocks/MediaBlocks.js +1 -156
  8. package/lib/commonjs/blocks/ReceiptBlocks.js +2 -586
  9. package/lib/commonjs/blocks/blockText.js +1 -60
  10. package/lib/commonjs/blocks/blockText.test.js +1 -53
  11. package/lib/commonjs/blocks/context.js +1 -42
  12. package/lib/commonjs/blocks/icons.js +1 -96
  13. package/lib/commonjs/blocks/index.js +1 -95
  14. package/lib/commonjs/blocks/listRow.test.js +1 -55
  15. package/lib/commonjs/blocks/pageState.js +1 -34
  16. package/lib/commonjs/blocks/pageState.test.js +1 -57
  17. package/lib/commonjs/blocks/primitives.js +1 -457
  18. package/lib/commonjs/blocks/primitivesIndex.js +1 -62
  19. package/lib/commonjs/blocks/ruleStates.js +1 -0
  20. package/lib/commonjs/components/ApprovalCard.js +1 -297
  21. package/lib/commonjs/components/AskBuoyHeader.js +1 -196
  22. package/lib/commonjs/components/AskBuoyIcon.js +1 -19
  23. package/lib/commonjs/components/AskBuoyModal.js +2 -478
  24. package/lib/commonjs/components/AskBuoySettings.js +1 -181
  25. package/lib/commonjs/components/ChangesBar.js +1 -211
  26. package/lib/commonjs/components/Composer.js +1 -255
  27. package/lib/commonjs/components/EmptyState.js +1 -161
  28. package/lib/commonjs/components/KeyboardPad.js +1 -80
  29. package/lib/commonjs/components/Markdown.js +1 -310
  30. package/lib/commonjs/components/MessageList.js +1 -970
  31. package/lib/commonjs/components/QueuedMessages.js +1 -145
  32. package/lib/commonjs/components/ThinkingStrip.js +1 -223
  33. package/lib/commonjs/components/TypingDots.js +1 -63
  34. package/lib/commonjs/components/markdownParse.js +1 -131
  35. package/lib/commonjs/components/markdownParse.test.js +1 -99
  36. package/lib/commonjs/components/useCopyAction.js +1 -50
  37. package/lib/commonjs/index.js +1 -252
  38. package/lib/commonjs/preset.js +1 -91
  39. package/lib/commonjs/store/activityGroups.js +1 -110
  40. package/lib/commonjs/store/activityGroups.test.js +1 -78
  41. package/lib/commonjs/store/askBuoySettings.js +1 -72
  42. package/lib/commonjs/store/askBuoyStore.js +2 -588
  43. package/lib/commonjs/store/blockPlacement.js +1 -64
  44. package/lib/commonjs/store/blockPlacement.test.js +1 -123
  45. package/lib/commonjs/store/queue.test.js +1 -150
  46. package/lib/commonjs/store/resetConversation.js +1 -77
  47. package/lib/commonjs/store/restorePending.test.js +1 -63
  48. package/lib/commonjs/store/restoredIds.test.js +1 -47
  49. package/lib/commonjs/store/suggestions.js +1 -54
  50. package/lib/commonjs/store/suggestions.test.js +1 -58
  51. package/lib/commonjs/store/systemLine.test.js +1 -77
  52. package/lib/commonjs/store/ticketPrompt.js +1 -17
  53. package/lib/commonjs/store/traceText.js +1 -81
  54. package/lib/commonjs/store/traceText.test.js +1 -112
  55. package/lib/commonjs/store/transcriptPersistence.js +1 -297
  56. package/lib/commonjs/store/transcriptPersistence.test.js +1 -333
  57. package/lib/commonjs/store/turnRendering.test.js +1 -151
  58. package/lib/commonjs/store/useAskBuoy.js +1 -651
  59. package/lib/commonjs/store/useAskBuoySettings.js +1 -14
  60. package/lib/commonjs/sync/askBuoySyncAdapter.js +1 -153
  61. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +1 -141
  62. package/lib/commonjs/sync/wire.js +1 -58
  63. package/lib/commonjs/types.js +1 -6
  64. package/lib/module/blocks/AskBlocks.js +1 -331
  65. package/lib/module/blocks/BlockRenderer.js +1 -257
  66. package/lib/module/blocks/ChromePrototypes.js +1 -503
  67. package/lib/module/blocks/DataBlocks.js +1 -767
  68. package/lib/module/blocks/ExtraBlocks.js +1 -1833
  69. package/lib/module/blocks/MediaBlocks.js +1 -151
  70. package/lib/module/blocks/ReceiptBlocks.js +2 -574
  71. package/lib/module/blocks/blockText.js +1 -55
  72. package/lib/module/blocks/blockText.test.js +1 -53
  73. package/lib/module/blocks/context.js +1 -35
  74. package/lib/module/blocks/icons.js +1 -91
  75. package/lib/module/blocks/index.js +1 -8
  76. package/lib/module/blocks/listRow.test.js +1 -56
  77. package/lib/module/blocks/pageState.js +1 -30
  78. package/lib/module/blocks/pageState.test.js +1 -56
  79. package/lib/module/blocks/primitives.js +1 -445
  80. package/lib/module/blocks/primitivesIndex.js +1 -5
  81. package/lib/module/blocks/ruleStates.js +1 -0
  82. package/lib/module/components/ApprovalCard.js +1 -292
  83. package/lib/module/components/AskBuoyHeader.js +1 -193
  84. package/lib/module/components/AskBuoyIcon.js +1 -8
  85. package/lib/module/components/AskBuoyModal.js +2 -473
  86. package/lib/module/components/AskBuoySettings.js +1 -176
  87. package/lib/module/components/ChangesBar.js +1 -206
  88. package/lib/module/components/Composer.js +1 -250
  89. package/lib/module/components/EmptyState.js +1 -156
  90. package/lib/module/components/KeyboardPad.js +1 -75
  91. package/lib/module/components/Markdown.js +1 -305
  92. package/lib/module/components/MessageList.js +1 -964
  93. package/lib/module/components/QueuedMessages.js +1 -140
  94. package/lib/module/components/ThinkingStrip.js +1 -218
  95. package/lib/module/components/TypingDots.js +1 -58
  96. package/lib/module/components/markdownParse.js +1 -125
  97. package/lib/module/components/markdownParse.test.js +1 -98
  98. package/lib/module/components/useCopyAction.js +1 -46
  99. package/lib/module/index.js +1 -34
  100. package/lib/module/preset.js +1 -74
  101. package/lib/module/store/activityGroups.js +1 -103
  102. package/lib/module/store/activityGroups.test.js +1 -77
  103. package/lib/module/store/askBuoySettings.js +1 -67
  104. package/lib/module/store/askBuoyStore.js +2 -582
  105. package/lib/module/store/blockPlacement.js +1 -59
  106. package/lib/module/store/blockPlacement.test.js +1 -122
  107. package/lib/module/store/queue.test.js +1 -149
  108. package/lib/module/store/resetConversation.js +1 -72
  109. package/lib/module/store/restorePending.test.js +1 -62
  110. package/lib/module/store/restoredIds.test.js +1 -46
  111. package/lib/module/store/suggestions.js +1 -49
  112. package/lib/module/store/suggestions.test.js +1 -57
  113. package/lib/module/store/systemLine.test.js +1 -76
  114. package/lib/module/store/ticketPrompt.js +1 -13
  115. package/lib/module/store/traceText.js +1 -75
  116. package/lib/module/store/traceText.test.js +1 -111
  117. package/lib/module/store/transcriptPersistence.js +1 -287
  118. package/lib/module/store/transcriptPersistence.test.js +1 -332
  119. package/lib/module/store/turnRendering.test.js +1 -150
  120. package/lib/module/store/useAskBuoy.js +1 -646
  121. package/lib/module/store/useAskBuoySettings.js +1 -9
  122. package/lib/module/sync/askBuoySyncAdapter.js +1 -148
  123. package/lib/module/sync/askBuoySyncAdapter.test.js +1 -140
  124. package/lib/module/sync/wire.js +1 -47
  125. package/lib/module/types.js +1 -4
  126. package/lib/typescript/blocks/context.d.ts +3 -0
  127. package/lib/typescript/blocks/ruleStates.d.ts +15 -0
  128. package/lib/typescript/components/ChangesBar.d.ts +2 -1
  129. package/lib/typescript/sync/askBuoySyncAdapter.d.ts +2 -2
  130. package/lib/web/index.mjs +15 -0
  131. package/package.json +44 -11
  132. package/lib/commonjs/blocks/AskBlocks.js.map +0 -1
  133. package/lib/commonjs/blocks/BlockRenderer.js.map +0 -1
  134. package/lib/commonjs/blocks/ChromePrototypes.js.map +0 -1
  135. package/lib/commonjs/blocks/DataBlocks.js.map +0 -1
  136. package/lib/commonjs/blocks/ExtraBlocks.js.map +0 -1
  137. package/lib/commonjs/blocks/MediaBlocks.js.map +0 -1
  138. package/lib/commonjs/blocks/ReceiptBlocks.js.map +0 -1
  139. package/lib/commonjs/blocks/blockText.js.map +0 -1
  140. package/lib/commonjs/blocks/blockText.test.js.map +0 -1
  141. package/lib/commonjs/blocks/context.js.map +0 -1
  142. package/lib/commonjs/blocks/icons.js.map +0 -1
  143. package/lib/commonjs/blocks/index.js.map +0 -1
  144. package/lib/commonjs/blocks/listRow.test.js.map +0 -1
  145. package/lib/commonjs/blocks/pageState.js.map +0 -1
  146. package/lib/commonjs/blocks/pageState.test.js.map +0 -1
  147. package/lib/commonjs/blocks/primitives.js.map +0 -1
  148. package/lib/commonjs/blocks/primitivesIndex.js.map +0 -1
  149. package/lib/commonjs/components/ApprovalCard.js.map +0 -1
  150. package/lib/commonjs/components/AskBuoyHeader.js.map +0 -1
  151. package/lib/commonjs/components/AskBuoyIcon.js.map +0 -1
  152. package/lib/commonjs/components/AskBuoyModal.js.map +0 -1
  153. package/lib/commonjs/components/AskBuoySettings.js.map +0 -1
  154. package/lib/commonjs/components/ChangesBar.js.map +0 -1
  155. package/lib/commonjs/components/Composer.js.map +0 -1
  156. package/lib/commonjs/components/EmptyState.js.map +0 -1
  157. package/lib/commonjs/components/KeyboardPad.js.map +0 -1
  158. package/lib/commonjs/components/Markdown.js.map +0 -1
  159. package/lib/commonjs/components/MessageList.js.map +0 -1
  160. package/lib/commonjs/components/QueuedMessages.js.map +0 -1
  161. package/lib/commonjs/components/ThinkingStrip.js.map +0 -1
  162. package/lib/commonjs/components/TypingDots.js.map +0 -1
  163. package/lib/commonjs/components/markdownParse.js.map +0 -1
  164. package/lib/commonjs/components/markdownParse.test.js.map +0 -1
  165. package/lib/commonjs/components/useCopyAction.js.map +0 -1
  166. package/lib/commonjs/index.js.map +0 -1
  167. package/lib/commonjs/preset.js.map +0 -1
  168. package/lib/commonjs/store/activityGroups.js.map +0 -1
  169. package/lib/commonjs/store/activityGroups.test.js.map +0 -1
  170. package/lib/commonjs/store/askBuoySettings.js.map +0 -1
  171. package/lib/commonjs/store/askBuoyStore.js.map +0 -1
  172. package/lib/commonjs/store/blockPlacement.js.map +0 -1
  173. package/lib/commonjs/store/blockPlacement.test.js.map +0 -1
  174. package/lib/commonjs/store/queue.test.js.map +0 -1
  175. package/lib/commonjs/store/resetConversation.js.map +0 -1
  176. package/lib/commonjs/store/restorePending.test.js.map +0 -1
  177. package/lib/commonjs/store/restoredIds.test.js.map +0 -1
  178. package/lib/commonjs/store/suggestions.js.map +0 -1
  179. package/lib/commonjs/store/suggestions.test.js.map +0 -1
  180. package/lib/commonjs/store/systemLine.test.js.map +0 -1
  181. package/lib/commonjs/store/ticketPrompt.js.map +0 -1
  182. package/lib/commonjs/store/traceText.js.map +0 -1
  183. package/lib/commonjs/store/traceText.test.js.map +0 -1
  184. package/lib/commonjs/store/transcriptPersistence.js.map +0 -1
  185. package/lib/commonjs/store/transcriptPersistence.test.js.map +0 -1
  186. package/lib/commonjs/store/turnRendering.test.js.map +0 -1
  187. package/lib/commonjs/store/useAskBuoy.js.map +0 -1
  188. package/lib/commonjs/store/useAskBuoySettings.js.map +0 -1
  189. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +0 -1
  190. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +0 -1
  191. package/lib/commonjs/sync/wire.js.map +0 -1
  192. package/lib/commonjs/types.js.map +0 -1
  193. package/lib/module/blocks/AskBlocks.js.map +0 -1
  194. package/lib/module/blocks/BlockRenderer.js.map +0 -1
  195. package/lib/module/blocks/ChromePrototypes.js.map +0 -1
  196. package/lib/module/blocks/DataBlocks.js.map +0 -1
  197. package/lib/module/blocks/ExtraBlocks.js.map +0 -1
  198. package/lib/module/blocks/MediaBlocks.js.map +0 -1
  199. package/lib/module/blocks/ReceiptBlocks.js.map +0 -1
  200. package/lib/module/blocks/blockText.js.map +0 -1
  201. package/lib/module/blocks/blockText.test.js.map +0 -1
  202. package/lib/module/blocks/context.js.map +0 -1
  203. package/lib/module/blocks/icons.js.map +0 -1
  204. package/lib/module/blocks/index.js.map +0 -1
  205. package/lib/module/blocks/listRow.test.js.map +0 -1
  206. package/lib/module/blocks/pageState.js.map +0 -1
  207. package/lib/module/blocks/pageState.test.js.map +0 -1
  208. package/lib/module/blocks/primitives.js.map +0 -1
  209. package/lib/module/blocks/primitivesIndex.js.map +0 -1
  210. package/lib/module/components/ApprovalCard.js.map +0 -1
  211. package/lib/module/components/AskBuoyHeader.js.map +0 -1
  212. package/lib/module/components/AskBuoyIcon.js.map +0 -1
  213. package/lib/module/components/AskBuoyModal.js.map +0 -1
  214. package/lib/module/components/AskBuoySettings.js.map +0 -1
  215. package/lib/module/components/ChangesBar.js.map +0 -1
  216. package/lib/module/components/Composer.js.map +0 -1
  217. package/lib/module/components/EmptyState.js.map +0 -1
  218. package/lib/module/components/KeyboardPad.js.map +0 -1
  219. package/lib/module/components/Markdown.js.map +0 -1
  220. package/lib/module/components/MessageList.js.map +0 -1
  221. package/lib/module/components/QueuedMessages.js.map +0 -1
  222. package/lib/module/components/ThinkingStrip.js.map +0 -1
  223. package/lib/module/components/TypingDots.js.map +0 -1
  224. package/lib/module/components/markdownParse.js.map +0 -1
  225. package/lib/module/components/markdownParse.test.js.map +0 -1
  226. package/lib/module/components/useCopyAction.js.map +0 -1
  227. package/lib/module/index.js.map +0 -1
  228. package/lib/module/preset.js.map +0 -1
  229. package/lib/module/store/activityGroups.js.map +0 -1
  230. package/lib/module/store/activityGroups.test.js.map +0 -1
  231. package/lib/module/store/askBuoySettings.js.map +0 -1
  232. package/lib/module/store/askBuoyStore.js.map +0 -1
  233. package/lib/module/store/blockPlacement.js.map +0 -1
  234. package/lib/module/store/blockPlacement.test.js.map +0 -1
  235. package/lib/module/store/queue.test.js.map +0 -1
  236. package/lib/module/store/resetConversation.js.map +0 -1
  237. package/lib/module/store/restorePending.test.js.map +0 -1
  238. package/lib/module/store/restoredIds.test.js.map +0 -1
  239. package/lib/module/store/suggestions.js.map +0 -1
  240. package/lib/module/store/suggestions.test.js.map +0 -1
  241. package/lib/module/store/systemLine.test.js.map +0 -1
  242. package/lib/module/store/ticketPrompt.js.map +0 -1
  243. package/lib/module/store/traceText.js.map +0 -1
  244. package/lib/module/store/traceText.test.js.map +0 -1
  245. package/lib/module/store/transcriptPersistence.js.map +0 -1
  246. package/lib/module/store/transcriptPersistence.test.js.map +0 -1
  247. package/lib/module/store/turnRendering.test.js.map +0 -1
  248. package/lib/module/store/useAskBuoy.js.map +0 -1
  249. package/lib/module/store/useAskBuoySettings.js.map +0 -1
  250. package/lib/module/sync/askBuoySyncAdapter.js.map +0 -1
  251. package/lib/module/sync/askBuoySyncAdapter.test.js.map +0 -1
  252. package/lib/module/sync/wire.js.map +0 -1
  253. package/lib/module/types.js.map +0 -1
  254. package/lib/typescript/blocks/AskBlocks.d.ts.map +0 -1
  255. package/lib/typescript/blocks/BlockRenderer.d.ts.map +0 -1
  256. package/lib/typescript/blocks/ChromePrototypes.d.ts.map +0 -1
  257. package/lib/typescript/blocks/DataBlocks.d.ts.map +0 -1
  258. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +0 -1
  259. package/lib/typescript/blocks/MediaBlocks.d.ts.map +0 -1
  260. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +0 -1
  261. package/lib/typescript/blocks/blockText.d.ts.map +0 -1
  262. package/lib/typescript/blocks/blockText.test.d.ts.map +0 -1
  263. package/lib/typescript/blocks/context.d.ts.map +0 -1
  264. package/lib/typescript/blocks/icons.d.ts.map +0 -1
  265. package/lib/typescript/blocks/index.d.ts.map +0 -1
  266. package/lib/typescript/blocks/listRow.test.d.ts.map +0 -1
  267. package/lib/typescript/blocks/pageState.d.ts.map +0 -1
  268. package/lib/typescript/blocks/pageState.test.d.ts.map +0 -1
  269. package/lib/typescript/blocks/primitives.d.ts.map +0 -1
  270. package/lib/typescript/blocks/primitivesIndex.d.ts.map +0 -1
  271. package/lib/typescript/components/ApprovalCard.d.ts.map +0 -1
  272. package/lib/typescript/components/AskBuoyHeader.d.ts.map +0 -1
  273. package/lib/typescript/components/AskBuoyIcon.d.ts.map +0 -1
  274. package/lib/typescript/components/AskBuoyModal.d.ts.map +0 -1
  275. package/lib/typescript/components/AskBuoySettings.d.ts.map +0 -1
  276. package/lib/typescript/components/ChangesBar.d.ts.map +0 -1
  277. package/lib/typescript/components/Composer.d.ts.map +0 -1
  278. package/lib/typescript/components/EmptyState.d.ts.map +0 -1
  279. package/lib/typescript/components/KeyboardPad.d.ts.map +0 -1
  280. package/lib/typescript/components/Markdown.d.ts.map +0 -1
  281. package/lib/typescript/components/MessageList.d.ts.map +0 -1
  282. package/lib/typescript/components/QueuedMessages.d.ts.map +0 -1
  283. package/lib/typescript/components/ThinkingStrip.d.ts.map +0 -1
  284. package/lib/typescript/components/TypingDots.d.ts.map +0 -1
  285. package/lib/typescript/components/markdownParse.d.ts.map +0 -1
  286. package/lib/typescript/components/markdownParse.test.d.ts.map +0 -1
  287. package/lib/typescript/components/useCopyAction.d.ts.map +0 -1
  288. package/lib/typescript/index.d.ts.map +0 -1
  289. package/lib/typescript/preset.d.ts.map +0 -1
  290. package/lib/typescript/store/activityGroups.d.ts.map +0 -1
  291. package/lib/typescript/store/activityGroups.test.d.ts.map +0 -1
  292. package/lib/typescript/store/askBuoySettings.d.ts.map +0 -1
  293. package/lib/typescript/store/askBuoyStore.d.ts.map +0 -1
  294. package/lib/typescript/store/blockPlacement.d.ts.map +0 -1
  295. package/lib/typescript/store/blockPlacement.test.d.ts.map +0 -1
  296. package/lib/typescript/store/queue.test.d.ts.map +0 -1
  297. package/lib/typescript/store/resetConversation.d.ts.map +0 -1
  298. package/lib/typescript/store/restorePending.test.d.ts.map +0 -1
  299. package/lib/typescript/store/restoredIds.test.d.ts.map +0 -1
  300. package/lib/typescript/store/suggestions.d.ts.map +0 -1
  301. package/lib/typescript/store/suggestions.test.d.ts.map +0 -1
  302. package/lib/typescript/store/systemLine.test.d.ts.map +0 -1
  303. package/lib/typescript/store/ticketPrompt.d.ts.map +0 -1
  304. package/lib/typescript/store/traceText.d.ts.map +0 -1
  305. package/lib/typescript/store/traceText.test.d.ts.map +0 -1
  306. package/lib/typescript/store/transcriptPersistence.d.ts.map +0 -1
  307. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +0 -1
  308. package/lib/typescript/store/turnRendering.test.d.ts.map +0 -1
  309. package/lib/typescript/store/useAskBuoy.d.ts.map +0 -1
  310. package/lib/typescript/store/useAskBuoySettings.d.ts.map +0 -1
  311. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +0 -1
  312. package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +0 -1
  313. package/lib/typescript/sync/wire.d.ts.map +0 -1
  314. package/lib/typescript/types.d.ts.map +0 -1
@@ -1,145 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.QueuedMessages = QueuedMessages;
7
- var _reactNative = require("react-native");
8
- var _sharedUi = require("@buoy-gg/shared-ui");
9
- var _jsxRuntime = require("react/jsx-runtime");
10
- /**
11
- * Messages typed while the agent was working, waiting their turn.
12
- *
13
- * Visible because the alternative was a placeholder. The queue used to be one
14
- * string behind the composer's "Queued — sends when this turn finishes" hint:
15
- * a second message typed mid-turn silently replaced the first, and nothing on
16
- * screen could have told you. A list you can see is a list you can trust.
17
- *
18
- * Each row: the text (capped at three lines), tap to pull it back into the
19
- * composer to edit, ✕ to drop it. The hint underneath says whether the queue
20
- * is delivering or why it is holding — see `queuePauseReason` in the store.
21
- *
22
- * Height is bounded, so a long queue can never push the approval card or the
23
- * Stop button off the bottom of the sheet.
24
- */
25
-
26
- /** Three rows, then it scrolls. */
27
- const MAX_LIST_HEIGHT = 132;
28
- function QueuedMessages({
29
- items,
30
- paused,
31
- onEdit,
32
- onRemove
33
- }) {
34
- if (items.length === 0) return null;
35
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
36
- style: styles.wrap,
37
- testID: "buoy-ask-buoy-queued",
38
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
39
- style: styles.list,
40
- contentContainerStyle: styles.listContent,
41
- keyboardShouldPersistTaps: "handled",
42
- children: items.map((item, i) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
43
- style: [styles.row, paused !== null && styles.rowPaused],
44
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
45
- testID: `buoy-ask-buoy-queue-item-${i}`,
46
- accessibilityRole: "button",
47
- accessibilityLabel: `Edit queued message: ${item.text}`,
48
- onPress: () => onEdit(item.id),
49
- style: ({
50
- pressed
51
- }) => [styles.rowBody, pressed && styles.pressed],
52
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
53
- style: styles.ordinal,
54
- children: i === 0 ? "NEXT" : "THEN"
55
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
56
- style: styles.text,
57
- numberOfLines: 3,
58
- children: item.text
59
- })]
60
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
61
- testID: `buoy-ask-buoy-queue-remove-${i}`,
62
- accessibilityRole: "button",
63
- accessibilityLabel: "Remove queued message",
64
- onPress: () => onRemove(item.id),
65
- hitSlop: 8,
66
- style: ({
67
- pressed
68
- }) => [styles.remove, pressed && styles.pressed],
69
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
70
- size: 11,
71
- color: _sharedUi.night.color.textTertiary
72
- })
73
- })]
74
- }, item.id))
75
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
76
- style: [styles.hint, paused !== null && styles.hintPaused],
77
- testID: "buoy-ask-buoy-queue-hint",
78
- children: paused ?? "Sends one at a time when this turn finishes · tap to edit"
79
- })]
80
- });
81
- }
82
- const styles = _reactNative.StyleSheet.create({
83
- wrap: {
84
- paddingHorizontal: _sharedUi.night.gutter,
85
- paddingTop: 8,
86
- gap: 6,
87
- // Opaque, like the composer: the transcript scrolls under it.
88
- backgroundColor: _sharedUi.night.color.bg
89
- },
90
- list: {
91
- maxHeight: MAX_LIST_HEIGHT
92
- },
93
- listContent: {
94
- gap: 6
95
- },
96
- row: {
97
- flexDirection: "row",
98
- alignItems: "center",
99
- borderRadius: _sharedUi.night.radius.row,
100
- borderWidth: _reactNative.StyleSheet.hairlineWidth,
101
- borderColor: _sharedUi.night.color.border,
102
- backgroundColor: _sharedUi.night.color.surface
103
- },
104
- rowPaused: {
105
- borderColor: _sharedUi.night.color.warning
106
- },
107
- rowBody: {
108
- flex: 1,
109
- flexDirection: "row",
110
- alignItems: "center",
111
- gap: 8,
112
- paddingVertical: 7,
113
- paddingLeft: 10
114
- },
115
- ordinal: {
116
- color: _sharedUi.night.color.textTertiary,
117
- fontSize: 9,
118
- fontWeight: "700",
119
- letterSpacing: 0.6,
120
- width: 30
121
- },
122
- text: {
123
- flex: 1,
124
- color: _sharedUi.night.color.textSecondary,
125
- fontSize: _sharedUi.night.font.caption,
126
- lineHeight: 17
127
- },
128
- remove: {
129
- width: 32,
130
- height: 32,
131
- alignItems: "center",
132
- justifyContent: "center"
133
- },
134
- pressed: {
135
- opacity: 0.7
136
- },
137
- hint: {
138
- color: _sharedUi.night.color.textTertiary,
139
- fontSize: _sharedUi.night.font.micro
140
- },
141
- hintPaused: {
142
- color: _sharedUi.night.color.warning
143
- }
144
- });
145
- //# sourceMappingURL=QueuedMessages.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.QueuedMessages=QueuedMessages;var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");const MAX_LIST_HEIGHT=132;function QueuedMessages({items:i,paused:t,onEdit:n,onRemove:s}){if(i.length===0)return null;return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-queued",children:[(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:styles.list,contentContainerStyle:styles.listContent,keyboardShouldPersistTaps:"handled",children:i.map((e,r)=>(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.row,t!==null&&styles.rowPaused],children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:`buoy-ask-buoy-queue-item-${r}`,accessibilityRole:"button",accessibilityLabel:`Edit queued message: ${e.text}`,onPress:()=>n(e.id),style:({pressed:o})=>[styles.rowBody,o&&styles.pressed],children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.ordinal,children:r===0?"NEXT":"THEN"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.text,numberOfLines:3,children:e.text})]}),(0,_jsxRuntime.jsx)(_reactNative.Pressable,{testID:`buoy-ask-buoy-queue-remove-${r}`,accessibilityRole:"button",accessibilityLabel:"Remove queued message",onPress:()=>s(e.id),hitSlop:8,style:({pressed:o})=>[styles.remove,o&&styles.pressed],children:(0,_jsxRuntime.jsx)(_sharedUi.X,{size:11,color:_sharedUi.night.color.textTertiary})})]},e.id))}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.hint,t!==null&&styles.hintPaused],testID:"buoy-ask-buoy-queue-hint",children:t??"Sends one at a time when this turn finishes \xB7 tap to edit"})]})}const styles=_reactNative.StyleSheet.create({wrap:{paddingHorizontal:_sharedUi.night.gutter,paddingTop:8,gap:6,backgroundColor:_sharedUi.night.color.bg},list:{maxHeight:MAX_LIST_HEIGHT},listContent:{gap:6},row:{flexDirection:"row",alignItems:"center",borderRadius:_sharedUi.night.radius.row,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.border,backgroundColor:_sharedUi.night.color.surface},rowPaused:{borderColor:_sharedUi.night.color.warning},rowBody:{flex:1,flexDirection:"row",alignItems:"center",gap:8,paddingVertical:7,paddingLeft:10},ordinal:{color:_sharedUi.night.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.6,width:30},text:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.caption,lineHeight:17},remove:{width:32,height:32,alignItems:"center",justifyContent:"center"},pressed:{opacity:.7},hint:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},hintPaused:{color:_sharedUi.night.color.warning}});
@@ -1,223 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.ThinkingStrip = ThinkingStrip;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _traceText = require("../store/traceText");
11
- var _jsxRuntime = require("react/jsx-runtime");
12
- /**
13
- * The agent's own working, under an answer, collapsed by default.
14
- *
15
- * Collapsed is the whole design constraint. A multi-step turn's reasoning is
16
- * longer than the answer it produced, and rendered open it pushes the answer —
17
- * the thing the user came for — off the screen. So the strip is one line until
18
- * someone wants it, and the summary on that line ("3 steps · 2 thoughts") is
19
- * enough to tell whether opening it is worth it.
20
- *
21
- * Every step is expandable on its own too, because the parameters are the
22
- * useful part when hunting a bug and the tool name alone is not.
23
- */
24
-
25
- function StepRow({
26
- n,
27
- call
28
- }) {
29
- const [open, setOpen] = (0, _react.useState)(false);
30
- const failed = call.status === "failed" || call.status === "refused";
31
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
32
- onPress: () => setOpen(v => !v),
33
- accessibilityRole: "button",
34
- accessibilityState: {
35
- expanded: open
36
- },
37
- style: styles.step,
38
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
39
- style: styles.stepLine,
40
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
41
- style: styles.stepN,
42
- children: n
43
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
44
- style: [styles.stepName, failed && styles.stepFailed],
45
- numberOfLines: 1,
46
- children: [call.toolId, ".", call.action]
47
- }), call.durationMs !== undefined ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
48
- style: styles.stepMs,
49
- children: [call.durationMs, "ms"]
50
- }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
51
- style: [styles.stepStatus, failed && styles.stepFailed],
52
- numberOfLines: 1,
53
- children: call.status === "ok" ? call.summary || "done" : call.status
54
- })]
55
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
56
- style: styles.detail,
57
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
58
- style: styles.detailLabel,
59
- children: "SENT"
60
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
61
- style: styles.code,
62
- selectable: true,
63
- children: call.params ?? "no parameters"
64
- }), call.result ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
65
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
66
- style: styles.detailLabel,
67
- children: "RETURNED"
68
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
69
- style: styles.code,
70
- selectable: true,
71
- children: call.result
72
- })]
73
- }) : null]
74
- }) : null]
75
- });
76
- }
77
- function ThinkingStrip({
78
- message
79
- }) {
80
- const [open, setOpen] = (0, _react.useState)(false);
81
- if (!(0, _traceText.hasTrace)(message)) return null;
82
- const entries = (0, _traceText.traceEntries)(message);
83
- const steps = entries.filter(e => e.kind === "step").length;
84
- const thoughts = entries.length - steps;
85
- const wall = message.startedAt !== undefined && message.endedAt !== undefined ? `${((message.endedAt - message.startedAt) / 1000).toFixed(1)}s` : null;
86
- const summary = [steps ? `${steps} step${steps === 1 ? "" : "s"}` : null, thoughts ? `${thoughts} thought${thoughts === 1 ? "" : "s"}` : null, wall, message.usage ? `${message.usage.input + message.usage.output} tokens` : null].filter(Boolean).join(" · ");
87
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
88
- style: styles.wrap,
89
- testID: "buoy-ask-buoy-thinking",
90
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
91
- testID: "buoy-ask-buoy-thinking-toggle",
92
- onPress: () => setOpen(v => !v),
93
- accessibilityRole: "button",
94
- accessibilityLabel: open ? "Hide agent thinking" : "Show agent thinking",
95
- accessibilityState: {
96
- expanded: open
97
- },
98
- style: styles.head,
99
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Activity, {
100
- size: 12,
101
- color: _sharedUi.night.color.textTertiary
102
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
103
- style: styles.headText,
104
- children: summary
105
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
106
- size: 12,
107
- color: _sharedUi.night.color.textTertiary
108
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronRight, {
109
- size: 12,
110
- color: _sharedUi.night.color.textTertiary
111
- })]
112
- }), open ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
113
- style: styles.body,
114
- children: [entries.map((entry, i) => entry.kind === "thought" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
115
- style: styles.thought,
116
- selectable: true,
117
- children: entry.text.trim()
118
- }, `t${i}`) : /*#__PURE__*/(0, _jsxRuntime.jsx)(StepRow, {
119
- n: entry.n,
120
- call: entry.call
121
- }, entry.call.id)), thoughts === 0 ?
122
- /*#__PURE__*/
123
- // Said plainly, because an empty reasoning section reads as broken.
124
- // Most models report none: Claude thinks by default, gpt-4.1 never.
125
- (0, _jsxRuntime.jsx)(_reactNative.Text, {
126
- style: styles.none,
127
- children: "This model reports no reasoning \u2014 the steps above are the whole trace."
128
- }) : null]
129
- }) : null]
130
- });
131
- }
132
- const styles = _reactNative.StyleSheet.create({
133
- wrap: {
134
- marginTop: 8,
135
- borderRadius: _sharedUi.night.radius.badge,
136
- borderWidth: _reactNative.StyleSheet.hairlineWidth,
137
- borderColor: _sharedUi.night.color.separator,
138
- backgroundColor: _sharedUi.night.color.fill,
139
- overflow: "hidden"
140
- },
141
- head: {
142
- flexDirection: "row",
143
- alignItems: "center",
144
- gap: 6,
145
- paddingHorizontal: 10,
146
- paddingVertical: 7
147
- },
148
- headText: {
149
- flex: 1,
150
- color: _sharedUi.night.color.textTertiary,
151
- fontSize: _sharedUi.night.font.micro,
152
- fontWeight: "600"
153
- },
154
- body: {
155
- borderTopWidth: _reactNative.StyleSheet.hairlineWidth,
156
- borderTopColor: _sharedUi.night.color.separator
157
- },
158
- thought: {
159
- color: _sharedUi.night.color.textSecondary,
160
- fontSize: _sharedUi.night.font.micro,
161
- lineHeight: 17,
162
- fontStyle: "italic",
163
- paddingHorizontal: 10,
164
- paddingVertical: 8
165
- },
166
- step: {
167
- paddingHorizontal: 10,
168
- paddingVertical: 7
169
- },
170
- stepLine: {
171
- flexDirection: "row",
172
- alignItems: "center",
173
- gap: 8
174
- },
175
- stepN: {
176
- color: _sharedUi.night.color.textTertiary,
177
- fontSize: _sharedUi.night.font.micro,
178
- width: 14
179
- },
180
- stepName: {
181
- flex: 1,
182
- color: _sharedUi.night.color.textSecondary,
183
- fontSize: _sharedUi.night.font.micro,
184
- fontWeight: "600"
185
- },
186
- stepMs: {
187
- color: _sharedUi.night.color.textTertiary,
188
- fontSize: _sharedUi.night.font.micro
189
- },
190
- stepStatus: {
191
- color: _sharedUi.night.color.textTertiary,
192
- fontSize: _sharedUi.night.font.micro,
193
- maxWidth: 110
194
- },
195
- stepFailed: {
196
- color: _sharedUi.night.color.danger
197
- },
198
- detail: {
199
- marginTop: 6,
200
- marginLeft: 22,
201
- gap: 3
202
- },
203
- detailLabel: {
204
- color: _sharedUi.night.color.textTertiary,
205
- fontSize: 9,
206
- fontWeight: "700",
207
- letterSpacing: 0.5
208
- },
209
- code: {
210
- color: _sharedUi.night.color.textSecondary,
211
- fontSize: _sharedUi.night.font.micro,
212
- lineHeight: 16,
213
- marginBottom: 3
214
- },
215
- none: {
216
- color: _sharedUi.night.color.textTertiary,
217
- fontSize: _sharedUi.night.font.micro,
218
- fontStyle: "italic",
219
- paddingHorizontal: 10,
220
- paddingVertical: 8
221
- }
222
- });
223
- //# sourceMappingURL=ThinkingStrip.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.ThinkingStrip=ThinkingStrip;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _traceText=require("../store/traceText");var _jsxRuntime=require("react/jsx-runtime");function StepRow({n:e,call:t}){const[s,n]=(0,_react.useState)(false);const r=t.status==="failed"||t.status==="refused";return(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{onPress:()=>n(o=>!o),accessibilityRole:"button",accessibilityState:{expanded:s},style:styles.step,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.stepLine,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.stepN,children:e}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:[styles.stepName,r&&styles.stepFailed],numberOfLines:1,children:[t.toolId,".",t.action]}),t.durationMs!==void 0?(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.stepMs,children:[t.durationMs,"ms"]}):null,(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.stepStatus,r&&styles.stepFailed],numberOfLines:1,children:t.status==="ok"?t.summary||"done":t.status})]}),s?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.detail,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.detailLabel,children:"SENT"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:true,children:t.params??"no parameters"}),t.result?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.detailLabel,children:"RETURNED"}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.code,selectable:true,children:t.result})]}):null]}):null]})}function ThinkingStrip({message:e}){const[t,s]=(0,_react.useState)(false);if(!(0,_traceText.hasTrace)(e))return null;const n=(0,_traceText.traceEntries)(e);const r=n.filter(i=>i.kind==="step").length;const o=n.length-r;const l=e.startedAt!==void 0&&e.endedAt!==void 0?`${((e.endedAt-e.startedAt)/1e3).toFixed(1)}s`:null;const a=[r?`${r} step${r===1?"":"s"}`:null,o?`${o} thought${o===1?"":"s"}`:null,l,e.usage?`${e.usage.input+e.usage.output} tokens`:null].filter(Boolean).join(" \xB7 ");return(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-thinking",children:[(0,_jsxRuntime.jsxs)(_reactNative.Pressable,{testID:"buoy-ask-buoy-thinking-toggle",onPress:()=>s(i=>!i),accessibilityRole:"button",accessibilityLabel:t?"Hide agent thinking":"Show agent thinking",accessibilityState:{expanded:t},style:styles.head,children:[(0,_jsxRuntime.jsx)(_sharedUi.Activity,{size:12,color:_sharedUi.night.color.textTertiary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.headText,children:a}),t?(0,_jsxRuntime.jsx)(_sharedUi.ChevronDown,{size:12,color:_sharedUi.night.color.textTertiary}):(0,_jsxRuntime.jsx)(_sharedUi.ChevronRight,{size:12,color:_sharedUi.night.color.textTertiary})]}),t?(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.body,children:[n.map((i,d)=>i.kind==="thought"?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.thought,selectable:true,children:i.text.trim()},`t${d}`):(0,_jsxRuntime.jsx)(StepRow,{n:i.n,call:i.call},i.call.id)),o===0?(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.none,children:"This model reports no reasoning \u2014 the steps above are the whole trace."}):null]}):null]})}const styles=_reactNative.StyleSheet.create({wrap:{marginTop:8,borderRadius:_sharedUi.night.radius.badge,borderWidth:_reactNative.StyleSheet.hairlineWidth,borderColor:_sharedUi.night.color.separator,backgroundColor:_sharedUi.night.color.fill,overflow:"hidden"},head:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:7},headText:{flex:1,color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,fontWeight:"600"},body:{borderTopWidth:_reactNative.StyleSheet.hairlineWidth,borderTopColor:_sharedUi.night.color.separator},thought:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,lineHeight:17,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8},step:{paddingHorizontal:10,paddingVertical:7},stepLine:{flexDirection:"row",alignItems:"center",gap:8},stepN:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,width:14},stepName:{flex:1,color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,fontWeight:"600"},stepMs:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro},stepStatus:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,maxWidth:110},stepFailed:{color:_sharedUi.night.color.danger},detail:{marginTop:6,marginLeft:22,gap:3},detailLabel:{color:_sharedUi.night.color.textTertiary,fontSize:9,fontWeight:"700",letterSpacing:.5},code:{color:_sharedUi.night.color.textSecondary,fontSize:_sharedUi.night.font.micro,lineHeight:16,marginBottom:3},none:{color:_sharedUi.night.color.textTertiary,fontSize:_sharedUi.night.font.micro,fontStyle:"italic",paddingHorizontal:10,paddingVertical:8}});
@@ -1,63 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TypingDots = TypingDots;
7
- var _react = require("react");
8
- var _reactNative = require("react-native");
9
- var _sharedUi = require("@buoy-gg/shared-ui");
10
- var _jsxRuntime = require("react/jsx-runtime");
11
- /**
12
- * Three pulsing dots — the "it heard you" signal between sending a message
13
- * and the first streamed token. A static "…" glyph read as a finished (and
14
- * confusing) answer.
15
- *
16
- * Native-driver opacity only, so it costs the JS thread nothing while the
17
- * stream that replaces it is being parsed.
18
- */
19
-
20
- function TypingDots() {
21
- const dots = (0, _react.useRef)([0, 1, 2].map(() => new _reactNative.Animated.Value(0.25))).current;
22
- (0, _react.useEffect)(() => {
23
- const loops = dots.map((v, i) => _reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(i * 140), _reactNative.Animated.timing(v, {
24
- toValue: 1,
25
- duration: 320,
26
- easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
27
- useNativeDriver: true
28
- }), _reactNative.Animated.timing(v, {
29
- toValue: 0.25,
30
- duration: 320,
31
- easing: _reactNative.Easing.inOut(_reactNative.Easing.ease),
32
- useNativeDriver: true
33
- }), _reactNative.Animated.delay((2 - i) * 140)])));
34
- loops.forEach(l => l.start());
35
- return () => loops.forEach(l => l.stop());
36
- }, [dots]);
37
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
38
- style: styles.wrap,
39
- testID: "buoy-ask-buoy-typing",
40
- accessibilityLabel: "Thinking",
41
- children: dots.map((v, i) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
42
- style: [styles.dot, {
43
- opacity: v
44
- }]
45
- }, i))
46
- });
47
- }
48
- const styles = _reactNative.StyleSheet.create({
49
- wrap: {
50
- flexDirection: "row",
51
- alignItems: "center",
52
- gap: 5,
53
- paddingVertical: 8,
54
- paddingHorizontal: 2
55
- },
56
- dot: {
57
- width: 7,
58
- height: 7,
59
- borderRadius: 4,
60
- backgroundColor: _sharedUi.night.color.textSecondary
61
- }
62
- });
63
- //# sourceMappingURL=TypingDots.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TypingDots=TypingDots;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");var _jsxRuntime=require("react/jsx-runtime");function TypingDots(){const a=(0,_react.useRef)([0,1,2].map(()=>new _reactNative.Animated.Value(.25))).current;(0,_react.useEffect)(()=>{const t=a.map((e,i)=>_reactNative.Animated.loop(_reactNative.Animated.sequence([_reactNative.Animated.delay(i*140),_reactNative.Animated.timing(e,{toValue:1,duration:320,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true}),_reactNative.Animated.timing(e,{toValue:.25,duration:320,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),useNativeDriver:true}),_reactNative.Animated.delay((2-i)*140)])));t.forEach(e=>e.start());return()=>t.forEach(e=>e.stop())},[a]);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.wrap,testID:"buoy-ask-buoy-typing",accessibilityLabel:"Thinking",children:a.map((t,e)=>(0,_jsxRuntime.jsx)(_reactNative.Animated.View,{style:[styles.dot,{opacity:t}]},e))})}const styles=_reactNative.StyleSheet.create({wrap:{flexDirection:"row",alignItems:"center",gap:5,paddingVertical:8,paddingHorizontal:2},dot:{width:7,height:7,borderRadius:4,backgroundColor:_sharedUi.night.color.textSecondary}});
@@ -1,131 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.TABLE_PREVIEW_ROWS = exports.TABLE_PREVIEW_COLS = void 0;
7
- exports.parseBlocks = parseBlocks;
8
- exports.tableTruncation = tableTruncation;
9
- /**
10
- * The Markdown parser, kept apart from the renderer so it can be unit-tested
11
- * without React Native.
12
- *
13
- * Just enough for a chat answer: paragraphs, `-`/`*`/`1.` lists, `#` headings,
14
- * pipe tables, and fenced code. Anything it does not understand falls through
15
- * as plain text, never as a blank.
16
- */
17
-
18
- const isTableRow = l => /^\s*\|.*\|\s*$/.test(l);
19
- const isTableRule = l => /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(l);
20
- const splitRow = l => l.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map(c => c.trim());
21
- const FENCE = /^\s*```\s*([\w+-]*)\s*$/;
22
- function parseBlocks(source) {
23
- const blocks = [];
24
- let para = [];
25
- const flush = () => {
26
- if (para.length) blocks.push({
27
- kind: "p",
28
- text: para.join(" ")
29
- });
30
- para = [];
31
- };
32
- const lines = source.split("\n");
33
- for (let li = 0; li < lines.length; li++) {
34
- const raw = lines[li];
35
- const line = raw.replace(/\s+$/, "");
36
-
37
- // A fence opens a block that keeps its newlines and indentation — the
38
- // one place in a chat answer where whitespace IS the content (JSON, a
39
- // stack trace, a repro). Fences used to be unknown to this parser, so the
40
- // lines were joined into a paragraph with the backticks shown literally.
41
- const fence = FENCE.exec(line);
42
- if (fence) {
43
- flush();
44
- const body = [];
45
- let j = li + 1;
46
- let closed = false;
47
- while (j < lines.length) {
48
- if (/^\s*```\s*$/.test(lines[j])) {
49
- closed = true;
50
- break;
51
- }
52
- body.push(lines[j]);
53
- j++;
54
- }
55
- blocks.push({
56
- kind: "code",
57
- lang: fence[1] ?? "",
58
- text: body.join("\n"),
59
- closed
60
- });
61
- li = closed ? j : lines.length;
62
- continue;
63
- }
64
- if (!line.trim()) {
65
- flush();
66
- continue;
67
- }
68
- // A pipe table: header row, a rule row, then body rows.
69
- if (isTableRow(line) && lines[li + 1] && isTableRule(lines[li + 1])) {
70
- flush();
71
- const header = splitRow(line);
72
- const rows = [];
73
- let j = li + 2;
74
- while (j < lines.length && isTableRow(lines[j])) {
75
- rows.push(splitRow(lines[j]));
76
- j++;
77
- }
78
- blocks.push({
79
- kind: "table",
80
- header,
81
- rows
82
- });
83
- li = j - 1;
84
- continue;
85
- }
86
- const heading = /^#{1,6}\s+(.*)$/.exec(line);
87
- if (heading) {
88
- flush();
89
- blocks.push({
90
- kind: "h",
91
- text: heading[1]
92
- });
93
- continue;
94
- }
95
- const bullet = /^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(line);
96
- if (bullet) {
97
- flush();
98
- const depth = Math.min(2, Math.floor(bullet[1].length / 2));
99
- const marker = /^\d/.test(bullet[2]) ? bullet[2].replace(")", ".") : "•";
100
- blocks.push({
101
- kind: "li",
102
- text: bullet[3],
103
- marker,
104
- depth
105
- });
106
- continue;
107
- }
108
- para.push(line.trim());
109
- }
110
- flush();
111
- return blocks;
112
- }
113
-
114
- /** The preview a table is cut to. Past this it says so and offers the rest. */
115
- const TABLE_PREVIEW_ROWS = exports.TABLE_PREVIEW_ROWS = 12;
116
- const TABLE_PREVIEW_COLS = exports.TABLE_PREVIEW_COLS = 4;
117
-
118
- /**
119
- * What a table preview leaves out, in the user's words — or null when nothing.
120
- *
121
- * The renderer used to slice to 4 columns and 12 rows and say nothing, so a
122
- * 30-line bag read as a 12-line bag and the bug report that followed was
123
- * "the bag only has 12 items". Evidence that is cut must say it is cut.
124
- */
125
- function tableTruncation(header, rows) {
126
- const parts = [];
127
- if (rows.length > TABLE_PREVIEW_ROWS) parts.push(`${TABLE_PREVIEW_ROWS} of ${rows.length} rows`);
128
- if (header.length > TABLE_PREVIEW_COLS) parts.push(`${TABLE_PREVIEW_COLS} of ${header.length} columns`);
129
- return parts.length ? `Showing ${parts.join(" · ")}` : null;
130
- }
131
- //# sourceMappingURL=markdownParse.js.map
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TABLE_PREVIEW_ROWS=exports.TABLE_PREVIEW_COLS=void 0;exports.parseBlocks=parseBlocks;exports.tableTruncation=tableTruncation;const isTableRow=s=>/^\s*\|.*\|\s*$/.test(s);const isTableRule=s=>/^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(s);const splitRow=s=>s.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim());const FENCE=/^\s*```\s*([\w+-]*)\s*$/;function parseBlocks(s){const t=[];let o=[];const r=()=>{if(o.length)t.push({kind:"p",text:o.join(" ")});o=[]};const e=s.split("\n");for(let l=0;l<e.length;l++){const E=e[l];const c=E.replace(/\s+$/,"");const h=FENCE.exec(c);if(h){r();const p=[];let n=l+1;let i=false;while(n<e.length){if(/^\s*```\s*$/.test(e[n])){i=true;break}p.push(e[n]);n++}t.push({kind:"code",lang:h[1]??"",text:p.join("\n"),closed:i});l=i?n:e.length;continue}if(!c.trim()){r();continue}if(isTableRow(c)&&e[l+1]&&isTableRule(e[l+1])){r();const p=splitRow(c);const n=[];let i=l+2;while(i<e.length&&isTableRow(e[i])){n.push(splitRow(e[i]));i++}t.push({kind:"table",header:p,rows:n});l=i-1;continue}const a=/^#{1,6}\s+(.*)$/.exec(c);if(a){r();t.push({kind:"h",text:a[1]});continue}const u=/^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(c);if(u){r();const p=Math.min(2,Math.floor(u[1].length/2));const n=/^\d/.test(u[2])?u[2].replace(")","."):"\u2022";t.push({kind:"li",text:u[3],marker:n,depth:p});continue}o.push(c.trim())}r();return t}const TABLE_PREVIEW_ROWS=exports.TABLE_PREVIEW_ROWS=12;const TABLE_PREVIEW_COLS=exports.TABLE_PREVIEW_COLS=4;function tableTruncation(s,t){const o=[];if(t.length>TABLE_PREVIEW_ROWS)o.push(`${TABLE_PREVIEW_ROWS} of ${t.length} rows`);if(s.length>TABLE_PREVIEW_COLS)o.push(`${TABLE_PREVIEW_COLS} of ${s.length} columns`);return o.length?`Showing ${o.join(" \xB7 ")}`:null}