@buoy-gg/ask-buoy 7.0.35 → 7.0.38

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 (286) hide show
  1. package/README.md +73 -15
  2. package/lib/commonjs/blocks/AskBlocks.js +1 -338
  3. package/lib/commonjs/blocks/BlockRenderer.js +1 -250
  4. package/lib/commonjs/blocks/ChromePrototypes.js +1 -514
  5. package/lib/commonjs/blocks/DataBlocks.js +1 -688
  6. package/lib/commonjs/blocks/ExtraBlocks.js +1 -1854
  7. package/lib/commonjs/blocks/MediaBlocks.js +1 -140
  8. package/lib/commonjs/blocks/ReceiptBlocks.js +1 -586
  9. package/lib/commonjs/blocks/blockText.js +1 -0
  10. package/lib/commonjs/blocks/blockText.test.js +1 -0
  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 -401
  18. package/lib/commonjs/blocks/primitivesIndex.js +1 -62
  19. package/lib/commonjs/components/ApprovalCard.js +1 -140
  20. package/lib/commonjs/components/AskBuoyHeader.js +1 -164
  21. package/lib/commonjs/components/AskBuoyIcon.js +1 -19
  22. package/lib/commonjs/components/AskBuoyModal.js +1 -353
  23. package/lib/commonjs/components/AskBuoySettings.js +1 -69
  24. package/lib/commonjs/components/ChangesBar.js +1 -211
  25. package/lib/commonjs/components/Composer.js +1 -175
  26. package/lib/commonjs/components/EmptyState.js +1 -154
  27. package/lib/commonjs/components/KeyboardPad.js +1 -0
  28. package/lib/commonjs/components/Markdown.js +1 -252
  29. package/lib/commonjs/components/MessageList.js +1 -683
  30. package/lib/commonjs/components/QueuedMessages.js +1 -0
  31. package/lib/commonjs/components/ThinkingStrip.js +1 -223
  32. package/lib/commonjs/components/TypingDots.js +1 -63
  33. package/lib/commonjs/components/markdownParse.js +1 -0
  34. package/lib/commonjs/components/markdownParse.test.js +1 -0
  35. package/lib/commonjs/components/useCopyAction.js +1 -50
  36. package/lib/commonjs/index.js +1 -252
  37. package/lib/commonjs/preset.js +1 -90
  38. package/lib/commonjs/store/activityGroups.js +1 -0
  39. package/lib/commonjs/store/activityGroups.test.js +1 -0
  40. package/lib/commonjs/store/askBuoySettings.js +1 -67
  41. package/lib/commonjs/store/askBuoyStore.js +1 -365
  42. package/lib/commonjs/store/blockPlacement.js +1 -0
  43. package/lib/commonjs/store/blockPlacement.test.js +1 -0
  44. package/lib/commonjs/store/queue.test.js +1 -0
  45. package/lib/commonjs/store/resetConversation.js +1 -0
  46. package/lib/commonjs/store/restorePending.test.js +1 -0
  47. package/lib/commonjs/store/restoredIds.test.js +1 -47
  48. package/lib/commonjs/store/suggestions.js +1 -0
  49. package/lib/commonjs/store/suggestions.test.js +1 -0
  50. package/lib/commonjs/store/systemLine.test.js +1 -0
  51. package/lib/commonjs/store/ticketPrompt.js +1 -0
  52. package/lib/commonjs/store/traceText.js +1 -81
  53. package/lib/commonjs/store/traceText.test.js +1 -112
  54. package/lib/commonjs/store/transcriptPersistence.js +1 -208
  55. package/lib/commonjs/store/transcriptPersistence.test.js +1 -185
  56. package/lib/commonjs/store/turnRendering.test.js +1 -0
  57. package/lib/commonjs/store/useAskBuoy.js +1 -400
  58. package/lib/commonjs/store/useAskBuoySettings.js +1 -14
  59. package/lib/commonjs/sync/askBuoySyncAdapter.js +1 -119
  60. package/lib/commonjs/sync/askBuoySyncAdapter.test.js +1 -141
  61. package/lib/commonjs/sync/wire.js +1 -58
  62. package/lib/commonjs/types.js +1 -6
  63. package/lib/module/blocks/AskBlocks.js +1 -331
  64. package/lib/module/blocks/BlockRenderer.js +1 -245
  65. package/lib/module/blocks/ChromePrototypes.js +1 -503
  66. package/lib/module/blocks/DataBlocks.js +1 -674
  67. package/lib/module/blocks/ExtraBlocks.js +1 -1827
  68. package/lib/module/blocks/MediaBlocks.js +1 -135
  69. package/lib/module/blocks/ReceiptBlocks.js +1 -574
  70. package/lib/module/blocks/blockText.js +1 -0
  71. package/lib/module/blocks/blockText.test.js +1 -0
  72. package/lib/module/blocks/context.js +1 -35
  73. package/lib/module/blocks/icons.js +1 -91
  74. package/lib/module/blocks/index.js +1 -8
  75. package/lib/module/blocks/listRow.test.js +1 -56
  76. package/lib/module/blocks/pageState.js +1 -30
  77. package/lib/module/blocks/pageState.test.js +1 -56
  78. package/lib/module/blocks/primitives.js +1 -389
  79. package/lib/module/blocks/primitivesIndex.js +1 -5
  80. package/lib/module/components/ApprovalCard.js +1 -135
  81. package/lib/module/components/AskBuoyHeader.js +1 -161
  82. package/lib/module/components/AskBuoyIcon.js +1 -8
  83. package/lib/module/components/AskBuoyModal.js +1 -348
  84. package/lib/module/components/AskBuoySettings.js +1 -64
  85. package/lib/module/components/ChangesBar.js +1 -206
  86. package/lib/module/components/Composer.js +1 -170
  87. package/lib/module/components/EmptyState.js +1 -149
  88. package/lib/module/components/KeyboardPad.js +1 -0
  89. package/lib/module/components/Markdown.js +1 -246
  90. package/lib/module/components/MessageList.js +1 -677
  91. package/lib/module/components/QueuedMessages.js +1 -0
  92. package/lib/module/components/ThinkingStrip.js +1 -218
  93. package/lib/module/components/TypingDots.js +1 -58
  94. package/lib/module/components/markdownParse.js +1 -0
  95. package/lib/module/components/markdownParse.test.js +1 -0
  96. package/lib/module/components/useCopyAction.js +1 -46
  97. package/lib/module/index.js +1 -34
  98. package/lib/module/preset.js +1 -73
  99. package/lib/module/store/activityGroups.js +1 -0
  100. package/lib/module/store/activityGroups.test.js +1 -0
  101. package/lib/module/store/askBuoySettings.js +1 -62
  102. package/lib/module/store/askBuoyStore.js +1 -361
  103. package/lib/module/store/blockPlacement.js +1 -0
  104. package/lib/module/store/blockPlacement.test.js +1 -0
  105. package/lib/module/store/queue.test.js +1 -0
  106. package/lib/module/store/resetConversation.js +1 -0
  107. package/lib/module/store/restorePending.test.js +1 -0
  108. package/lib/module/store/restoredIds.test.js +1 -46
  109. package/lib/module/store/suggestions.js +1 -0
  110. package/lib/module/store/suggestions.test.js +1 -0
  111. package/lib/module/store/systemLine.test.js +1 -0
  112. package/lib/module/store/ticketPrompt.js +1 -0
  113. package/lib/module/store/traceText.js +1 -75
  114. package/lib/module/store/traceText.test.js +1 -111
  115. package/lib/module/store/transcriptPersistence.js +1 -198
  116. package/lib/module/store/transcriptPersistence.test.js +1 -184
  117. package/lib/module/store/turnRendering.test.js +1 -0
  118. package/lib/module/store/useAskBuoy.js +1 -394
  119. package/lib/module/store/useAskBuoySettings.js +1 -9
  120. package/lib/module/sync/askBuoySyncAdapter.js +1 -114
  121. package/lib/module/sync/askBuoySyncAdapter.test.js +1 -140
  122. package/lib/module/sync/wire.js +1 -47
  123. package/lib/module/types.js +1 -4
  124. package/lib/typescript/blocks/DataBlocks.d.ts +11 -0
  125. package/lib/typescript/blocks/ExtraBlocks.d.ts +18 -2
  126. package/lib/typescript/blocks/blockText.d.ts +14 -0
  127. package/lib/typescript/blocks/blockText.test.d.ts +2 -0
  128. package/lib/typescript/blocks/primitives.d.ts +16 -1
  129. package/lib/typescript/components/ApprovalCard.d.ts +9 -1
  130. package/lib/typescript/components/AskBuoyHeader.d.ts +31 -1
  131. package/lib/typescript/components/Composer.d.ts +16 -1
  132. package/lib/typescript/components/EmptyState.d.ts +5 -1
  133. package/lib/typescript/components/KeyboardPad.d.ts +33 -0
  134. package/lib/typescript/components/Markdown.d.ts +0 -10
  135. package/lib/typescript/components/MessageList.d.ts +7 -2
  136. package/lib/typescript/components/QueuedMessages.d.ts +10 -0
  137. package/lib/typescript/components/markdownParse.d.ts +49 -0
  138. package/lib/typescript/components/markdownParse.test.d.ts +2 -0
  139. package/lib/typescript/preset.d.ts +4 -2
  140. package/lib/typescript/store/activityGroups.d.ts +29 -0
  141. package/lib/typescript/store/activityGroups.test.d.ts +2 -0
  142. package/lib/typescript/store/askBuoySettings.d.ts +22 -0
  143. package/lib/typescript/store/askBuoyStore.d.ts +174 -9
  144. package/lib/typescript/store/blockPlacement.d.ts +30 -0
  145. package/lib/typescript/store/blockPlacement.test.d.ts +2 -0
  146. package/lib/typescript/store/queue.test.d.ts +2 -0
  147. package/lib/typescript/store/resetConversation.d.ts +38 -0
  148. package/lib/typescript/store/restorePending.test.d.ts +2 -0
  149. package/lib/typescript/store/suggestions.d.ts +32 -0
  150. package/lib/typescript/store/suggestions.test.d.ts +2 -0
  151. package/lib/typescript/store/systemLine.test.d.ts +2 -0
  152. package/lib/typescript/store/ticketPrompt.d.ts +11 -0
  153. package/lib/typescript/store/transcriptPersistence.d.ts +41 -2
  154. package/lib/typescript/store/turnRendering.test.d.ts +2 -0
  155. package/lib/typescript/store/useAskBuoy.d.ts +26 -3
  156. package/lib/typescript/sync/askBuoySyncAdapter.d.ts +29 -6
  157. package/package.json +10 -10
  158. package/lib/commonjs/blocks/AskBlocks.js.map +0 -1
  159. package/lib/commonjs/blocks/BlockRenderer.js.map +0 -1
  160. package/lib/commonjs/blocks/ChromePrototypes.js.map +0 -1
  161. package/lib/commonjs/blocks/DataBlocks.js.map +0 -1
  162. package/lib/commonjs/blocks/ExtraBlocks.js.map +0 -1
  163. package/lib/commonjs/blocks/MediaBlocks.js.map +0 -1
  164. package/lib/commonjs/blocks/ReceiptBlocks.js.map +0 -1
  165. package/lib/commonjs/blocks/context.js.map +0 -1
  166. package/lib/commonjs/blocks/icons.js.map +0 -1
  167. package/lib/commonjs/blocks/index.js.map +0 -1
  168. package/lib/commonjs/blocks/listRow.test.js.map +0 -1
  169. package/lib/commonjs/blocks/pageState.js.map +0 -1
  170. package/lib/commonjs/blocks/pageState.test.js.map +0 -1
  171. package/lib/commonjs/blocks/primitives.js.map +0 -1
  172. package/lib/commonjs/blocks/primitivesIndex.js.map +0 -1
  173. package/lib/commonjs/components/ApprovalCard.js.map +0 -1
  174. package/lib/commonjs/components/AskBuoyHeader.js.map +0 -1
  175. package/lib/commonjs/components/AskBuoyIcon.js.map +0 -1
  176. package/lib/commonjs/components/AskBuoyModal.js.map +0 -1
  177. package/lib/commonjs/components/AskBuoySettings.js.map +0 -1
  178. package/lib/commonjs/components/ChangesBar.js.map +0 -1
  179. package/lib/commonjs/components/Composer.js.map +0 -1
  180. package/lib/commonjs/components/EmptyState.js.map +0 -1
  181. package/lib/commonjs/components/Markdown.js.map +0 -1
  182. package/lib/commonjs/components/MessageList.js.map +0 -1
  183. package/lib/commonjs/components/ThinkingStrip.js.map +0 -1
  184. package/lib/commonjs/components/TypingDots.js.map +0 -1
  185. package/lib/commonjs/components/useCopyAction.js.map +0 -1
  186. package/lib/commonjs/index.js.map +0 -1
  187. package/lib/commonjs/preset.js.map +0 -1
  188. package/lib/commonjs/store/askBuoySettings.js.map +0 -1
  189. package/lib/commonjs/store/askBuoyStore.js.map +0 -1
  190. package/lib/commonjs/store/restoredIds.test.js.map +0 -1
  191. package/lib/commonjs/store/traceText.js.map +0 -1
  192. package/lib/commonjs/store/traceText.test.js.map +0 -1
  193. package/lib/commonjs/store/transcriptPersistence.js.map +0 -1
  194. package/lib/commonjs/store/transcriptPersistence.test.js.map +0 -1
  195. package/lib/commonjs/store/useAskBuoy.js.map +0 -1
  196. package/lib/commonjs/store/useAskBuoySettings.js.map +0 -1
  197. package/lib/commonjs/sync/askBuoySyncAdapter.js.map +0 -1
  198. package/lib/commonjs/sync/askBuoySyncAdapter.test.js.map +0 -1
  199. package/lib/commonjs/sync/wire.js.map +0 -1
  200. package/lib/commonjs/types.js.map +0 -1
  201. package/lib/module/blocks/AskBlocks.js.map +0 -1
  202. package/lib/module/blocks/BlockRenderer.js.map +0 -1
  203. package/lib/module/blocks/ChromePrototypes.js.map +0 -1
  204. package/lib/module/blocks/DataBlocks.js.map +0 -1
  205. package/lib/module/blocks/ExtraBlocks.js.map +0 -1
  206. package/lib/module/blocks/MediaBlocks.js.map +0 -1
  207. package/lib/module/blocks/ReceiptBlocks.js.map +0 -1
  208. package/lib/module/blocks/context.js.map +0 -1
  209. package/lib/module/blocks/icons.js.map +0 -1
  210. package/lib/module/blocks/index.js.map +0 -1
  211. package/lib/module/blocks/listRow.test.js.map +0 -1
  212. package/lib/module/blocks/pageState.js.map +0 -1
  213. package/lib/module/blocks/pageState.test.js.map +0 -1
  214. package/lib/module/blocks/primitives.js.map +0 -1
  215. package/lib/module/blocks/primitivesIndex.js.map +0 -1
  216. package/lib/module/components/ApprovalCard.js.map +0 -1
  217. package/lib/module/components/AskBuoyHeader.js.map +0 -1
  218. package/lib/module/components/AskBuoyIcon.js.map +0 -1
  219. package/lib/module/components/AskBuoyModal.js.map +0 -1
  220. package/lib/module/components/AskBuoySettings.js.map +0 -1
  221. package/lib/module/components/ChangesBar.js.map +0 -1
  222. package/lib/module/components/Composer.js.map +0 -1
  223. package/lib/module/components/EmptyState.js.map +0 -1
  224. package/lib/module/components/Markdown.js.map +0 -1
  225. package/lib/module/components/MessageList.js.map +0 -1
  226. package/lib/module/components/ThinkingStrip.js.map +0 -1
  227. package/lib/module/components/TypingDots.js.map +0 -1
  228. package/lib/module/components/useCopyAction.js.map +0 -1
  229. package/lib/module/index.js.map +0 -1
  230. package/lib/module/preset.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/restoredIds.test.js.map +0 -1
  234. package/lib/module/store/traceText.js.map +0 -1
  235. package/lib/module/store/traceText.test.js.map +0 -1
  236. package/lib/module/store/transcriptPersistence.js.map +0 -1
  237. package/lib/module/store/transcriptPersistence.test.js.map +0 -1
  238. package/lib/module/store/useAskBuoy.js.map +0 -1
  239. package/lib/module/store/useAskBuoySettings.js.map +0 -1
  240. package/lib/module/sync/askBuoySyncAdapter.js.map +0 -1
  241. package/lib/module/sync/askBuoySyncAdapter.test.js.map +0 -1
  242. package/lib/module/sync/wire.js.map +0 -1
  243. package/lib/module/types.js.map +0 -1
  244. package/lib/typescript/blocks/AskBlocks.d.ts.map +0 -1
  245. package/lib/typescript/blocks/BlockRenderer.d.ts.map +0 -1
  246. package/lib/typescript/blocks/ChromePrototypes.d.ts.map +0 -1
  247. package/lib/typescript/blocks/DataBlocks.d.ts.map +0 -1
  248. package/lib/typescript/blocks/ExtraBlocks.d.ts.map +0 -1
  249. package/lib/typescript/blocks/MediaBlocks.d.ts.map +0 -1
  250. package/lib/typescript/blocks/ReceiptBlocks.d.ts.map +0 -1
  251. package/lib/typescript/blocks/context.d.ts.map +0 -1
  252. package/lib/typescript/blocks/icons.d.ts.map +0 -1
  253. package/lib/typescript/blocks/index.d.ts.map +0 -1
  254. package/lib/typescript/blocks/listRow.test.d.ts.map +0 -1
  255. package/lib/typescript/blocks/pageState.d.ts.map +0 -1
  256. package/lib/typescript/blocks/pageState.test.d.ts.map +0 -1
  257. package/lib/typescript/blocks/primitives.d.ts.map +0 -1
  258. package/lib/typescript/blocks/primitivesIndex.d.ts.map +0 -1
  259. package/lib/typescript/components/ApprovalCard.d.ts.map +0 -1
  260. package/lib/typescript/components/AskBuoyHeader.d.ts.map +0 -1
  261. package/lib/typescript/components/AskBuoyIcon.d.ts.map +0 -1
  262. package/lib/typescript/components/AskBuoyModal.d.ts.map +0 -1
  263. package/lib/typescript/components/AskBuoySettings.d.ts.map +0 -1
  264. package/lib/typescript/components/ChangesBar.d.ts.map +0 -1
  265. package/lib/typescript/components/Composer.d.ts.map +0 -1
  266. package/lib/typescript/components/EmptyState.d.ts.map +0 -1
  267. package/lib/typescript/components/Markdown.d.ts.map +0 -1
  268. package/lib/typescript/components/MessageList.d.ts.map +0 -1
  269. package/lib/typescript/components/ThinkingStrip.d.ts.map +0 -1
  270. package/lib/typescript/components/TypingDots.d.ts.map +0 -1
  271. package/lib/typescript/components/useCopyAction.d.ts.map +0 -1
  272. package/lib/typescript/index.d.ts.map +0 -1
  273. package/lib/typescript/preset.d.ts.map +0 -1
  274. package/lib/typescript/store/askBuoySettings.d.ts.map +0 -1
  275. package/lib/typescript/store/askBuoyStore.d.ts.map +0 -1
  276. package/lib/typescript/store/restoredIds.test.d.ts.map +0 -1
  277. package/lib/typescript/store/traceText.d.ts.map +0 -1
  278. package/lib/typescript/store/traceText.test.d.ts.map +0 -1
  279. package/lib/typescript/store/transcriptPersistence.d.ts.map +0 -1
  280. package/lib/typescript/store/transcriptPersistence.test.d.ts.map +0 -1
  281. package/lib/typescript/store/useAskBuoy.d.ts.map +0 -1
  282. package/lib/typescript/store/useAskBuoySettings.d.ts.map +0 -1
  283. package/lib/typescript/sync/askBuoySyncAdapter.d.ts.map +0 -1
  284. package/lib/typescript/sync/askBuoySyncAdapter.test.d.ts.map +0 -1
  285. package/lib/typescript/sync/wire.d.ts.map +0 -1
  286. package/lib/typescript/types.d.ts.map +0 -1
@@ -1,246 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Just enough Markdown for a chat answer.
5
- *
6
- * Models write `**bold**`, bullet lists and `code` whether or not the prompt
7
- * asks for prose, and the asterisks rendered raw made every answer look like
8
- * a broken template. This handles the subset a chat actually receives —
9
- * paragraphs, `-`/`*`/`1.` lists, `#` headings (rendered bold, not huge),
10
- * bold, italics and inline code — with no dependency and no HTML. Anything it
11
- * does not understand falls through as plain text, never as a blank.
12
- */
13
- import { StyleSheet, Text, View } from "react-native";
14
- import { night } from "@buoy-gg/shared-ui";
15
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
16
- const isTableRow = l => /^\s*\|.*\|\s*$/.test(l);
17
- const isTableRule = l => /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/.test(l);
18
- const splitRow = l => l.trim().replace(/^\|/, "").replace(/\|$/, "").split("|").map(c => c.trim());
19
- function parseBlocks(source) {
20
- const blocks = [];
21
- let para = [];
22
- const flush = () => {
23
- if (para.length) blocks.push({
24
- kind: "p",
25
- text: para.join(" ")
26
- });
27
- para = [];
28
- };
29
- const lines = source.split("\n");
30
- for (let li = 0; li < lines.length; li++) {
31
- const raw = lines[li];
32
- const line = raw.replace(/\s+$/, "");
33
- if (!line.trim()) {
34
- flush();
35
- continue;
36
- }
37
- // A pipe table: header row, a rule row, then body rows.
38
- if (isTableRow(line) && lines[li + 1] && isTableRule(lines[li + 1])) {
39
- flush();
40
- const header = splitRow(line);
41
- const rows = [];
42
- let j = li + 2;
43
- while (j < lines.length && isTableRow(lines[j])) {
44
- rows.push(splitRow(lines[j]));
45
- j++;
46
- }
47
- blocks.push({
48
- kind: "table",
49
- header,
50
- rows
51
- });
52
- li = j - 1;
53
- continue;
54
- }
55
- const heading = /^#{1,6}\s+(.*)$/.exec(line);
56
- if (heading) {
57
- flush();
58
- blocks.push({
59
- kind: "h",
60
- text: heading[1]
61
- });
62
- continue;
63
- }
64
- const bullet = /^(\s*)([-*•]|\d+[.)])\s+(.*)$/.exec(line);
65
- if (bullet) {
66
- flush();
67
- const depth = Math.min(2, Math.floor(bullet[1].length / 2));
68
- const marker = /^\d/.test(bullet[2]) ? bullet[2].replace(")", ".") : "•";
69
- blocks.push({
70
- kind: "li",
71
- text: bullet[3],
72
- marker,
73
- depth
74
- });
75
- continue;
76
- }
77
- para.push(line.trim());
78
- }
79
- flush();
80
- return blocks;
81
- }
82
-
83
- /**
84
- * `**bold**`, `*italic*` / `_italic_`, `` `code` `` → styled spans. Links and
85
- * images collapse to their text: a phone chat has nowhere to open a URL, and
86
- * `![Snorlax](https://raw.githubusercontent.com/…/143.png)` printed raw is
87
- * three lines of noise for one word of meaning.
88
- */
89
- export function renderInline(source, base) {
90
- const text = source.replace(/!?\[([^\]]*)\]\([^)]*\)/g, "$1");
91
- const out = [];
92
- const re = /(\*\*[^*]+\*\*|`[^`]+`|\*[^*\s][^*]*\*|_[^_\s][^_]*_)/g;
93
- let last = 0;
94
- let m;
95
- let i = 0;
96
- while (m = re.exec(text)) {
97
- if (m.index > last) out.push(text.slice(last, m.index));
98
- const tok = m[0];
99
- if (tok.startsWith("**")) {
100
- out.push(/*#__PURE__*/_jsx(Text, {
101
- style: [base, styles.bold],
102
- children: tok.slice(2, -2)
103
- }, i++));
104
- } else if (tok.startsWith("`")) {
105
- out.push(/*#__PURE__*/_jsx(Text, {
106
- style: [base, styles.code],
107
- children: tok.slice(1, -1)
108
- }, i++));
109
- } else {
110
- out.push(/*#__PURE__*/_jsx(Text, {
111
- style: [base, styles.italic],
112
- children: tok.slice(1, -1)
113
- }, i++));
114
- }
115
- last = m.index + tok.length;
116
- }
117
- if (last < text.length) out.push(text.slice(last));
118
- return out;
119
- }
120
- export function Markdown({
121
- text,
122
- style
123
- }) {
124
- const blocks = parseBlocks(text);
125
- return /*#__PURE__*/_jsx(View, {
126
- style: styles.wrap,
127
- children: blocks.map((b, i) => {
128
- if (b.kind === "table") {
129
- const cols = b.header.slice(0, 4);
130
- return /*#__PURE__*/_jsxs(View, {
131
- style: styles.table,
132
- children: [/*#__PURE__*/_jsx(View, {
133
- style: styles.tableHead,
134
- children: cols.map((c, k) => /*#__PURE__*/_jsx(Text, {
135
- style: [styles.th, k === 0 && styles.firstCol],
136
- numberOfLines: 1,
137
- children: c.replace(/\*\*/g, "")
138
- }, k))
139
- }), b.rows.slice(0, 12).map((r, ri) => /*#__PURE__*/_jsx(View, {
140
- style: [styles.tr, ri > 0 && styles.trDivider],
141
- children: cols.map((_, k) => /*#__PURE__*/_jsx(Text, {
142
- style: [styles.td, k === 0 && styles.firstCol, k === 0 && styles.tdFirst],
143
- numberOfLines: 2,
144
- children: renderInline((r[k] ?? "").replace(/!?\[([^\]]*)\]\([^)]*\)/g, "$1"), styles.td)
145
- }, k))
146
- }, ri))]
147
- }, i);
148
- }
149
- if (b.kind === "li") {
150
- return /*#__PURE__*/_jsxs(View, {
151
- style: [styles.li, {
152
- paddingLeft: 4 + b.depth * 14
153
- }],
154
- children: [/*#__PURE__*/_jsx(Text, {
155
- style: [style, styles.marker],
156
- children: b.marker
157
- }), /*#__PURE__*/_jsx(Text, {
158
- style: [style, styles.liText],
159
- selectable: true,
160
- children: renderInline(b.text, style)
161
- })]
162
- }, i);
163
- }
164
- return /*#__PURE__*/_jsx(Text, {
165
- style: [style, b.kind === "h" && styles.bold],
166
- selectable: true,
167
- children: renderInline(b.text, style)
168
- }, i);
169
- })
170
- });
171
- }
172
- const styles = StyleSheet.create({
173
- wrap: {
174
- gap: 8
175
- },
176
- bold: {
177
- fontWeight: "600"
178
- },
179
- italic: {
180
- fontStyle: "italic"
181
- },
182
- code: {
183
- fontFamily: "Menlo",
184
- fontSize: 13,
185
- color: night.color.accent,
186
- backgroundColor: night.color.fill
187
- },
188
- li: {
189
- flexDirection: "row",
190
- gap: 8
191
- },
192
- table: {
193
- borderRadius: night.radius.row,
194
- borderWidth: StyleSheet.hairlineWidth,
195
- borderColor: night.color.border,
196
- backgroundColor: night.color.surface,
197
- overflow: "hidden"
198
- },
199
- tableHead: {
200
- flexDirection: "row",
201
- paddingHorizontal: 10,
202
- paddingVertical: 6,
203
- gap: 8,
204
- backgroundColor: night.color.fill
205
- },
206
- th: {
207
- flex: 1,
208
- color: night.color.textTertiary,
209
- fontSize: night.font.micro,
210
- fontWeight: "700",
211
- letterSpacing: 0.6,
212
- textTransform: "uppercase"
213
- },
214
- tr: {
215
- flexDirection: "row",
216
- paddingHorizontal: 10,
217
- paddingVertical: 7,
218
- gap: 8
219
- },
220
- trDivider: {
221
- borderTopWidth: StyleSheet.hairlineWidth,
222
- borderTopColor: night.color.separator
223
- },
224
- td: {
225
- flex: 1,
226
- color: night.color.textSecondary,
227
- fontSize: night.font.caption,
228
- lineHeight: 17
229
- },
230
- tdFirst: {
231
- color: night.color.text,
232
- fontWeight: "500"
233
- },
234
- firstCol: {
235
- flex: 1.3
236
- },
237
- marker: {
238
- color: night.color.textSecondary,
239
- minWidth: 14,
240
- textAlign: "right"
241
- },
242
- liText: {
243
- flex: 1
244
- }
245
- });
246
- //# sourceMappingURL=Markdown.js.map
1
+ "use strict";import{useState}from"react";import{Pressable,ScrollView,StyleSheet,Text,View}from"react-native";import{night}from"@buoy-gg/shared-ui";import{parseBlocks,TABLE_PREVIEW_COLS,TABLE_PREVIEW_ROWS,tableTruncation}from"./markdownParse";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function renderInline(e,t){const l=e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1"),o=[],r=/(\*\*[^*]+\*\*|`[^`]+`|\*[^*\s][^*]*\*|_[^_\s][^_]*_)/g;let i,s=0,n=0;for(;i=r.exec(l);){i.index>s&&o.push(l.slice(s,i.index));const e=i[0];e.startsWith("**")?o.push(_jsx(Text,{style:[t,styles.bold],children:e.slice(2,-2)},n++)):e.startsWith("`")?o.push(_jsx(Text,{style:[t,styles.code],children:e.slice(1,-1)},n++)):o.push(_jsx(Text,{style:[t,styles.italic],children:e.slice(1,-1)},n++)),s=i.index+e.length}return s<l.length&&o.push(l.slice(s)),o}const stripLinks=e=>e.replace(/!?\[([^\]]*)\]\([^)]*\)/g,"$1");function MarkdownTable({header:e,rows:t}){const[l,o]=useState(!1),r=tableTruncation(e,t),i=l?e:e.slice(0,TABLE_PREVIEW_COLS),s=l?t:t.slice(0,TABLE_PREVIEW_ROWS),n=_jsxs(View,{style:l&&styles.tableWide,children:[_jsx(View,{style:styles.tableHead,children:i.map((e,t)=>_jsx(Text,{style:[styles.th,0===t&&styles.firstCol,l&&styles.colFixed],numberOfLines:1,children:e.replace(/\*\*/g,"")},t))}),s.map((e,t)=>_jsx(View,{style:[styles.tr,t>0&&styles.trDivider],children:i.map((t,o)=>_jsx(Text,{style:[styles.td,0===o&&styles.firstCol,0===o&&styles.tdFirst,l&&styles.colFixed],numberOfLines:l?3:2,children:renderInline(stripLinks(e[o]??""),styles.td)},o))},t))]});return _jsxs(View,{style:styles.table,testID:"buoy-ask-buoy-md-table",children:[l?_jsx(ScrollView,{style:styles.tableScrollV,nestedScrollEnabled:!0,children:_jsx(ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!0,children:n})}):n,r?_jsxs(Pressable,{testID:"buoy-ask-buoy-md-table-toggle",accessibilityRole:"button",accessibilityLabel:l?"Show fewer rows":"Show all rows and columns",onPress:()=>o(e=>!e),style:({pressed:e})=>[styles.tfoot,e&&styles.pressed],children:[_jsx(Text,{style:styles.tfootText,children:l?`All ${t.length} rows · ${e.length} columns`:r}),_jsx(Text,{style:styles.tfootAction,children:l?"Show fewer":"Show all"})]}):null]})}export function Markdown({text:e,style:t}){const l=parseBlocks(e);return _jsx(View,{style:styles.wrap,children:l.map((e,l)=>"table"===e.kind?_jsx(MarkdownTable,{header:e.header,rows:e.rows},l):"code"===e.kind?_jsx(ScrollView,{horizontal:!0,style:styles.codeBlock,contentContainerStyle:styles.codeBlockContent,testID:"buoy-ask-buoy-md-code",children:_jsx(Text,{style:styles.codeText,selectable:!0,children:e.text})},l):"li"===e.kind?_jsxs(View,{style:[styles.li,{paddingLeft:4+14*e.depth}],children:[_jsx(Text,{style:[t,styles.marker],children:e.marker}),_jsx(Text,{style:[t,styles.liText],selectable:!0,children:renderInline(e.text,t)})]},l):_jsx(Text,{style:[t,"h"===e.kind&&styles.bold],selectable:!0,children:renderInline(e.text,t)},l))})}const styles=StyleSheet.create({wrap:{gap:8},bold:{fontWeight:"600"},italic:{fontStyle:"italic"},code:{fontFamily:"Menlo",fontSize:13,color:night.color.accent,backgroundColor:night.color.fill},codeBlock:{borderRadius:night.radius.row,borderWidth:StyleSheet.hairlineWidth,borderColor:night.color.border,backgroundColor:night.color.surface},codeBlockContent:{paddingHorizontal:12,paddingVertical:10},codeText:{fontFamily:"Menlo",fontSize:12,lineHeight:18,color:night.color.text},li:{flexDirection:"row",gap:8},table:{borderRadius:night.radius.row,borderWidth:StyleSheet.hairlineWidth,borderColor:night.color.border,backgroundColor:night.color.surface,overflow:"hidden"},tableWide:{minWidth:"100%"},tableScrollV:{maxHeight:320},tableHead:{flexDirection:"row",paddingHorizontal:10,paddingVertical:6,gap:8,backgroundColor:night.color.fill},th:{flex:1,color:night.color.textTertiary,fontSize:night.font.micro,fontWeight:"700",letterSpacing:.6,textTransform:"uppercase"},tr:{flexDirection:"row",paddingHorizontal:10,paddingVertical:7,gap:8},trDivider:{borderTopWidth:StyleSheet.hairlineWidth,borderTopColor:night.color.separator},td:{flex:1,color:night.color.textSecondary,fontSize:night.font.caption,lineHeight:17},tdFirst:{color:night.color.text,fontWeight:"500"},firstCol:{flex:1.3},colFixed:{flex:0,width:110},tfoot:{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingHorizontal:10,paddingVertical:8,borderTopWidth:StyleSheet.hairlineWidth,borderTopColor:night.color.border},tfootText:{color:night.color.textSecondary,fontSize:night.font.micro},tfootAction:{color:night.color.accent,fontSize:night.font.micro,fontWeight:"600"},pressed:{opacity:.7},marker:{color:night.color.textSecondary,minWidth:14,textAlign:"right"},liText:{flex:1}});