@crafter/rn-ai-elements 0.0.1

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 (344) hide show
  1. package/lib/commonjs/chatbot/AIImage.js +126 -0
  2. package/lib/commonjs/chatbot/AIImage.js.map +1 -0
  3. package/lib/commonjs/chatbot/Attachments.js +317 -0
  4. package/lib/commonjs/chatbot/Attachments.js.map +1 -0
  5. package/lib/commonjs/chatbot/ChatErrorBoundary.js +201 -0
  6. package/lib/commonjs/chatbot/ChatErrorBoundary.js.map +1 -0
  7. package/lib/commonjs/chatbot/ChatMessageItem.js +169 -0
  8. package/lib/commonjs/chatbot/ChatMessageItem.js.map +1 -0
  9. package/lib/commonjs/chatbot/Conversation.js +415 -0
  10. package/lib/commonjs/chatbot/Conversation.js.map +1 -0
  11. package/lib/commonjs/chatbot/ConversationScrollButton.js +131 -0
  12. package/lib/commonjs/chatbot/ConversationScrollButton.js.map +1 -0
  13. package/lib/commonjs/chatbot/Message.js +203 -0
  14. package/lib/commonjs/chatbot/Message.js.map +1 -0
  15. package/lib/commonjs/chatbot/PromptInput.js +352 -0
  16. package/lib/commonjs/chatbot/PromptInput.js.map +1 -0
  17. package/lib/commonjs/chatbot/Reasoning.js +184 -0
  18. package/lib/commonjs/chatbot/Reasoning.js.map +1 -0
  19. package/lib/commonjs/chatbot/Shimmer.js +116 -0
  20. package/lib/commonjs/chatbot/Shimmer.js.map +1 -0
  21. package/lib/commonjs/chatbot/Sources.js +212 -0
  22. package/lib/commonjs/chatbot/Sources.js.map +1 -0
  23. package/lib/commonjs/chatbot/Suggestion.js +99 -0
  24. package/lib/commonjs/chatbot/Suggestion.js.map +1 -0
  25. package/lib/commonjs/chatbot/Tool.js +307 -0
  26. package/lib/commonjs/chatbot/Tool.js.map +1 -0
  27. package/lib/commonjs/chatbot/adapters/uiMessageAdapter.js +141 -0
  28. package/lib/commonjs/chatbot/adapters/uiMessageAdapter.js.map +1 -0
  29. package/lib/commonjs/chatbot/index.js +140 -0
  30. package/lib/commonjs/chatbot/index.js.map +1 -0
  31. package/lib/commonjs/chatbot/types.js +6 -0
  32. package/lib/commonjs/chatbot/types.js.map +1 -0
  33. package/lib/commonjs/hooks/index.js +34 -0
  34. package/lib/commonjs/hooks/index.js.map +1 -0
  35. package/lib/commonjs/hooks/useAutoScroll.js +39 -0
  36. package/lib/commonjs/hooks/useAutoScroll.js.map +1 -0
  37. package/lib/commonjs/hooks/useClipboard.js +44 -0
  38. package/lib/commonjs/hooks/useClipboard.js.map +1 -0
  39. package/lib/commonjs/hooks/useCollapsible.js +35 -0
  40. package/lib/commonjs/hooks/useCollapsible.js.map +1 -0
  41. package/lib/commonjs/hooks/useStickToBottom.js +68 -0
  42. package/lib/commonjs/hooks/useStickToBottom.js.map +1 -0
  43. package/lib/commonjs/index.js +257 -0
  44. package/lib/commonjs/index.js.map +1 -0
  45. package/lib/commonjs/package.json +1 -0
  46. package/lib/commonjs/primitives/Badge.js +119 -0
  47. package/lib/commonjs/primitives/Badge.js.map +1 -0
  48. package/lib/commonjs/primitives/Button.js +185 -0
  49. package/lib/commonjs/primitives/Button.js.map +1 -0
  50. package/lib/commonjs/primitives/Card.js +166 -0
  51. package/lib/commonjs/primitives/Card.js.map +1 -0
  52. package/lib/commonjs/primitives/Collapsible.js +137 -0
  53. package/lib/commonjs/primitives/Collapsible.js.map +1 -0
  54. package/lib/commonjs/primitives/ScrollArea.js +40 -0
  55. package/lib/commonjs/primitives/ScrollArea.js.map +1 -0
  56. package/lib/commonjs/primitives/index.js +83 -0
  57. package/lib/commonjs/primitives/index.js.map +1 -0
  58. package/lib/commonjs/streaming/StreamingMarkdown.js +252 -0
  59. package/lib/commonjs/streaming/StreamingMarkdown.js.map +1 -0
  60. package/lib/commonjs/streaming/index.js +13 -0
  61. package/lib/commonjs/streaming/index.js.map +1 -0
  62. package/lib/commonjs/streaming/parser.js +482 -0
  63. package/lib/commonjs/streaming/parser.js.map +1 -0
  64. package/lib/commonjs/streaming/renderers/BlockquoteRenderer.js +35 -0
  65. package/lib/commonjs/streaming/renderers/BlockquoteRenderer.js.map +1 -0
  66. package/lib/commonjs/streaming/renderers/CodeRenderer.js +128 -0
  67. package/lib/commonjs/streaming/renderers/CodeRenderer.js.map +1 -0
  68. package/lib/commonjs/streaming/renderers/HeadingRenderer.js +61 -0
  69. package/lib/commonjs/streaming/renderers/HeadingRenderer.js.map +1 -0
  70. package/lib/commonjs/streaming/renderers/ImageRenderer.js +53 -0
  71. package/lib/commonjs/streaming/renderers/ImageRenderer.js.map +1 -0
  72. package/lib/commonjs/streaming/renderers/LinkRenderer.js +49 -0
  73. package/lib/commonjs/streaming/renderers/LinkRenderer.js.map +1 -0
  74. package/lib/commonjs/streaming/renderers/ListRenderer.js +63 -0
  75. package/lib/commonjs/streaming/renderers/ListRenderer.js.map +1 -0
  76. package/lib/commonjs/streaming/renderers/TableRenderer.js +77 -0
  77. package/lib/commonjs/streaming/renderers/TableRenderer.js.map +1 -0
  78. package/lib/commonjs/streaming/renderers/TextRenderer.js +41 -0
  79. package/lib/commonjs/streaming/renderers/TextRenderer.js.map +1 -0
  80. package/lib/commonjs/streaming/renderers/index.js +76 -0
  81. package/lib/commonjs/streaming/renderers/index.js.map +1 -0
  82. package/lib/commonjs/streaming/renderers/renderInlineChildren.js +112 -0
  83. package/lib/commonjs/streaming/renderers/renderInlineChildren.js.map +1 -0
  84. package/lib/commonjs/streaming/renderers/renderNode.js +81 -0
  85. package/lib/commonjs/streaming/renderers/renderNode.js.map +1 -0
  86. package/lib/commonjs/theme/ThemeProvider.js +68 -0
  87. package/lib/commonjs/theme/ThemeProvider.js.map +1 -0
  88. package/lib/commonjs/theme/defaultTheme.js +96 -0
  89. package/lib/commonjs/theme/defaultTheme.js.map +1 -0
  90. package/lib/commonjs/theme/index.js +32 -0
  91. package/lib/commonjs/theme/index.js.map +1 -0
  92. package/lib/commonjs/theme/tokens.js +2 -0
  93. package/lib/commonjs/theme/tokens.js.map +1 -0
  94. package/lib/commonjs/types.d.js +2 -0
  95. package/lib/commonjs/types.d.js.map +1 -0
  96. package/lib/commonjs/voice/index.js +13 -0
  97. package/lib/commonjs/voice/index.js.map +1 -0
  98. package/lib/commonjs/voice/useSpeechRecognition.js +172 -0
  99. package/lib/commonjs/voice/useSpeechRecognition.js.map +1 -0
  100. package/lib/module/chatbot/AIImage.js +121 -0
  101. package/lib/module/chatbot/AIImage.js.map +1 -0
  102. package/lib/module/chatbot/Attachments.js +312 -0
  103. package/lib/module/chatbot/Attachments.js.map +1 -0
  104. package/lib/module/chatbot/ChatErrorBoundary.js +196 -0
  105. package/lib/module/chatbot/ChatErrorBoundary.js.map +1 -0
  106. package/lib/module/chatbot/ChatMessageItem.js +164 -0
  107. package/lib/module/chatbot/ChatMessageItem.js.map +1 -0
  108. package/lib/module/chatbot/Conversation.js +412 -0
  109. package/lib/module/chatbot/Conversation.js.map +1 -0
  110. package/lib/module/chatbot/ConversationScrollButton.js +126 -0
  111. package/lib/module/chatbot/ConversationScrollButton.js.map +1 -0
  112. package/lib/module/chatbot/Message.js +198 -0
  113. package/lib/module/chatbot/Message.js.map +1 -0
  114. package/lib/module/chatbot/PromptInput.js +347 -0
  115. package/lib/module/chatbot/PromptInput.js.map +1 -0
  116. package/lib/module/chatbot/Reasoning.js +179 -0
  117. package/lib/module/chatbot/Reasoning.js.map +1 -0
  118. package/lib/module/chatbot/Shimmer.js +111 -0
  119. package/lib/module/chatbot/Shimmer.js.map +1 -0
  120. package/lib/module/chatbot/Sources.js +207 -0
  121. package/lib/module/chatbot/Sources.js.map +1 -0
  122. package/lib/module/chatbot/Suggestion.js +94 -0
  123. package/lib/module/chatbot/Suggestion.js.map +1 -0
  124. package/lib/module/chatbot/Tool.js +303 -0
  125. package/lib/module/chatbot/Tool.js.map +1 -0
  126. package/lib/module/chatbot/adapters/uiMessageAdapter.js +137 -0
  127. package/lib/module/chatbot/adapters/uiMessageAdapter.js.map +1 -0
  128. package/lib/module/chatbot/index.js +39 -0
  129. package/lib/module/chatbot/index.js.map +1 -0
  130. package/lib/module/chatbot/types.js +4 -0
  131. package/lib/module/chatbot/types.js.map +1 -0
  132. package/lib/module/hooks/index.js +7 -0
  133. package/lib/module/hooks/index.js.map +1 -0
  134. package/lib/module/hooks/useAutoScroll.js +35 -0
  135. package/lib/module/hooks/useAutoScroll.js.map +1 -0
  136. package/lib/module/hooks/useClipboard.js +40 -0
  137. package/lib/module/hooks/useClipboard.js.map +1 -0
  138. package/lib/module/hooks/useCollapsible.js +31 -0
  139. package/lib/module/hooks/useCollapsible.js.map +1 -0
  140. package/lib/module/hooks/useStickToBottom.js +64 -0
  141. package/lib/module/hooks/useStickToBottom.js.map +1 -0
  142. package/lib/module/index.js +19 -0
  143. package/lib/module/index.js.map +1 -0
  144. package/lib/module/package.json +1 -0
  145. package/lib/module/primitives/Badge.js +114 -0
  146. package/lib/module/primitives/Badge.js.map +1 -0
  147. package/lib/module/primitives/Button.js +180 -0
  148. package/lib/module/primitives/Button.js.map +1 -0
  149. package/lib/module/primitives/Card.js +156 -0
  150. package/lib/module/primitives/Card.js.map +1 -0
  151. package/lib/module/primitives/Collapsible.js +130 -0
  152. package/lib/module/primitives/Collapsible.js.map +1 -0
  153. package/lib/module/primitives/ScrollArea.js +35 -0
  154. package/lib/module/primitives/ScrollArea.js.map +1 -0
  155. package/lib/module/primitives/index.js +8 -0
  156. package/lib/module/primitives/index.js.map +1 -0
  157. package/lib/module/streaming/StreamingMarkdown.js +246 -0
  158. package/lib/module/streaming/StreamingMarkdown.js.map +1 -0
  159. package/lib/module/streaming/index.js +4 -0
  160. package/lib/module/streaming/index.js.map +1 -0
  161. package/lib/module/streaming/parser.js +477 -0
  162. package/lib/module/streaming/parser.js.map +1 -0
  163. package/lib/module/streaming/renderers/BlockquoteRenderer.js +30 -0
  164. package/lib/module/streaming/renderers/BlockquoteRenderer.js.map +1 -0
  165. package/lib/module/streaming/renderers/CodeRenderer.js +123 -0
  166. package/lib/module/streaming/renderers/CodeRenderer.js.map +1 -0
  167. package/lib/module/streaming/renderers/HeadingRenderer.js +56 -0
  168. package/lib/module/streaming/renderers/HeadingRenderer.js.map +1 -0
  169. package/lib/module/streaming/renderers/ImageRenderer.js +48 -0
  170. package/lib/module/streaming/renderers/ImageRenderer.js.map +1 -0
  171. package/lib/module/streaming/renderers/LinkRenderer.js +44 -0
  172. package/lib/module/streaming/renderers/LinkRenderer.js.map +1 -0
  173. package/lib/module/streaming/renderers/ListRenderer.js +58 -0
  174. package/lib/module/streaming/renderers/ListRenderer.js.map +1 -0
  175. package/lib/module/streaming/renderers/TableRenderer.js +72 -0
  176. package/lib/module/streaming/renderers/TableRenderer.js.map +1 -0
  177. package/lib/module/streaming/renderers/TextRenderer.js +36 -0
  178. package/lib/module/streaming/renderers/TextRenderer.js.map +1 -0
  179. package/lib/module/streaming/renderers/index.js +13 -0
  180. package/lib/module/streaming/renderers/index.js.map +1 -0
  181. package/lib/module/streaming/renderers/renderInlineChildren.js +107 -0
  182. package/lib/module/streaming/renderers/renderInlineChildren.js.map +1 -0
  183. package/lib/module/streaming/renderers/renderNode.js +78 -0
  184. package/lib/module/streaming/renderers/renderNode.js.map +1 -0
  185. package/lib/module/theme/ThemeProvider.js +62 -0
  186. package/lib/module/theme/ThemeProvider.js.map +1 -0
  187. package/lib/module/theme/defaultTheme.js +92 -0
  188. package/lib/module/theme/defaultTheme.js.map +1 -0
  189. package/lib/module/theme/index.js +5 -0
  190. package/lib/module/theme/index.js.map +1 -0
  191. package/lib/module/theme/tokens.js +2 -0
  192. package/lib/module/theme/tokens.js.map +1 -0
  193. package/lib/module/types.d.js +2 -0
  194. package/lib/module/types.d.js.map +1 -0
  195. package/lib/module/voice/index.js +14 -0
  196. package/lib/module/voice/index.js.map +1 -0
  197. package/lib/module/voice/useSpeechRecognition.js +169 -0
  198. package/lib/module/voice/useSpeechRecognition.js.map +1 -0
  199. package/lib/typescript/src/chatbot/AIImage.d.ts +24 -0
  200. package/lib/typescript/src/chatbot/AIImage.d.ts.map +1 -0
  201. package/lib/typescript/src/chatbot/Attachments.d.ts +20 -0
  202. package/lib/typescript/src/chatbot/Attachments.d.ts.map +1 -0
  203. package/lib/typescript/src/chatbot/ChatErrorBoundary.d.ts +57 -0
  204. package/lib/typescript/src/chatbot/ChatErrorBoundary.d.ts.map +1 -0
  205. package/lib/typescript/src/chatbot/ChatMessageItem.d.ts +45 -0
  206. package/lib/typescript/src/chatbot/ChatMessageItem.d.ts.map +1 -0
  207. package/lib/typescript/src/chatbot/Conversation.d.ts +94 -0
  208. package/lib/typescript/src/chatbot/Conversation.d.ts.map +1 -0
  209. package/lib/typescript/src/chatbot/ConversationScrollButton.d.ts +62 -0
  210. package/lib/typescript/src/chatbot/ConversationScrollButton.d.ts.map +1 -0
  211. package/lib/typescript/src/chatbot/Message.d.ts +39 -0
  212. package/lib/typescript/src/chatbot/Message.d.ts.map +1 -0
  213. package/lib/typescript/src/chatbot/PromptInput.d.ts +93 -0
  214. package/lib/typescript/src/chatbot/PromptInput.d.ts.map +1 -0
  215. package/lib/typescript/src/chatbot/Reasoning.d.ts +14 -0
  216. package/lib/typescript/src/chatbot/Reasoning.d.ts.map +1 -0
  217. package/lib/typescript/src/chatbot/Shimmer.d.ts +13 -0
  218. package/lib/typescript/src/chatbot/Shimmer.d.ts.map +1 -0
  219. package/lib/typescript/src/chatbot/Sources.d.ts +17 -0
  220. package/lib/typescript/src/chatbot/Sources.d.ts.map +1 -0
  221. package/lib/typescript/src/chatbot/Suggestion.d.ts +15 -0
  222. package/lib/typescript/src/chatbot/Suggestion.d.ts.map +1 -0
  223. package/lib/typescript/src/chatbot/Tool.d.ts +30 -0
  224. package/lib/typescript/src/chatbot/Tool.d.ts.map +1 -0
  225. package/lib/typescript/src/chatbot/adapters/uiMessageAdapter.d.ts +24 -0
  226. package/lib/typescript/src/chatbot/adapters/uiMessageAdapter.d.ts.map +1 -0
  227. package/lib/typescript/src/chatbot/index.d.ts +29 -0
  228. package/lib/typescript/src/chatbot/index.d.ts.map +1 -0
  229. package/lib/typescript/src/chatbot/types.d.ts +49 -0
  230. package/lib/typescript/src/chatbot/types.d.ts.map +1 -0
  231. package/lib/typescript/src/hooks/index.d.ts +9 -0
  232. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  233. package/lib/typescript/src/hooks/useAutoScroll.d.ts +23 -0
  234. package/lib/typescript/src/hooks/useAutoScroll.d.ts.map +1 -0
  235. package/lib/typescript/src/hooks/useClipboard.d.ts +22 -0
  236. package/lib/typescript/src/hooks/useClipboard.d.ts.map +1 -0
  237. package/lib/typescript/src/hooks/useCollapsible.d.ts +28 -0
  238. package/lib/typescript/src/hooks/useCollapsible.d.ts.map +1 -0
  239. package/lib/typescript/src/hooks/useStickToBottom.d.ts +39 -0
  240. package/lib/typescript/src/hooks/useStickToBottom.d.ts.map +1 -0
  241. package/lib/typescript/src/index.d.ts +11 -0
  242. package/lib/typescript/src/index.d.ts.map +1 -0
  243. package/lib/typescript/src/primitives/Badge.d.ts +10 -0
  244. package/lib/typescript/src/primitives/Badge.d.ts.map +1 -0
  245. package/lib/typescript/src/primitives/Button.d.ts +16 -0
  246. package/lib/typescript/src/primitives/Button.d.ts.map +1 -0
  247. package/lib/typescript/src/primitives/Card.d.ts +33 -0
  248. package/lib/typescript/src/primitives/Card.d.ts.map +1 -0
  249. package/lib/typescript/src/primitives/Collapsible.d.ts +20 -0
  250. package/lib/typescript/src/primitives/Collapsible.d.ts.map +1 -0
  251. package/lib/typescript/src/primitives/ScrollArea.d.ts +10 -0
  252. package/lib/typescript/src/primitives/ScrollArea.d.ts.map +1 -0
  253. package/lib/typescript/src/primitives/index.d.ts +11 -0
  254. package/lib/typescript/src/primitives/index.d.ts.map +1 -0
  255. package/lib/typescript/src/streaming/StreamingMarkdown.d.ts +47 -0
  256. package/lib/typescript/src/streaming/StreamingMarkdown.d.ts.map +1 -0
  257. package/lib/typescript/src/streaming/index.d.ts +3 -0
  258. package/lib/typescript/src/streaming/index.d.ts.map +1 -0
  259. package/lib/typescript/src/streaming/parser.d.ts +41 -0
  260. package/lib/typescript/src/streaming/parser.d.ts.map +1 -0
  261. package/lib/typescript/src/streaming/renderers/BlockquoteRenderer.d.ts +7 -0
  262. package/lib/typescript/src/streaming/renderers/BlockquoteRenderer.d.ts.map +1 -0
  263. package/lib/typescript/src/streaming/renderers/CodeRenderer.d.ts +7 -0
  264. package/lib/typescript/src/streaming/renderers/CodeRenderer.d.ts.map +1 -0
  265. package/lib/typescript/src/streaming/renderers/HeadingRenderer.d.ts +7 -0
  266. package/lib/typescript/src/streaming/renderers/HeadingRenderer.d.ts.map +1 -0
  267. package/lib/typescript/src/streaming/renderers/ImageRenderer.d.ts +7 -0
  268. package/lib/typescript/src/streaming/renderers/ImageRenderer.d.ts.map +1 -0
  269. package/lib/typescript/src/streaming/renderers/LinkRenderer.d.ts +7 -0
  270. package/lib/typescript/src/streaming/renderers/LinkRenderer.d.ts.map +1 -0
  271. package/lib/typescript/src/streaming/renderers/ListRenderer.d.ts +7 -0
  272. package/lib/typescript/src/streaming/renderers/ListRenderer.d.ts.map +1 -0
  273. package/lib/typescript/src/streaming/renderers/TableRenderer.d.ts +7 -0
  274. package/lib/typescript/src/streaming/renderers/TableRenderer.d.ts.map +1 -0
  275. package/lib/typescript/src/streaming/renderers/TextRenderer.d.ts +7 -0
  276. package/lib/typescript/src/streaming/renderers/TextRenderer.d.ts.map +1 -0
  277. package/lib/typescript/src/streaming/renderers/index.d.ts +19 -0
  278. package/lib/typescript/src/streaming/renderers/index.d.ts.map +1 -0
  279. package/lib/typescript/src/streaming/renderers/renderInlineChildren.d.ts +12 -0
  280. package/lib/typescript/src/streaming/renderers/renderInlineChildren.d.ts.map +1 -0
  281. package/lib/typescript/src/streaming/renderers/renderNode.d.ts +8 -0
  282. package/lib/typescript/src/streaming/renderers/renderNode.d.ts.map +1 -0
  283. package/lib/typescript/src/theme/ThemeProvider.d.ts +14 -0
  284. package/lib/typescript/src/theme/ThemeProvider.d.ts.map +1 -0
  285. package/lib/typescript/src/theme/defaultTheme.d.ts +4 -0
  286. package/lib/typescript/src/theme/defaultTheme.d.ts.map +1 -0
  287. package/lib/typescript/src/theme/index.d.ts +5 -0
  288. package/lib/typescript/src/theme/index.d.ts.map +1 -0
  289. package/lib/typescript/src/theme/tokens.d.ts +66 -0
  290. package/lib/typescript/src/theme/tokens.d.ts.map +1 -0
  291. package/lib/typescript/src/voice/index.d.ts +3 -0
  292. package/lib/typescript/src/voice/index.d.ts.map +1 -0
  293. package/lib/typescript/src/voice/useSpeechRecognition.d.ts +77 -0
  294. package/lib/typescript/src/voice/useSpeechRecognition.d.ts.map +1 -0
  295. package/package.json +132 -0
  296. package/src/chatbot/AIImage.tsx +166 -0
  297. package/src/chatbot/Attachments.tsx +382 -0
  298. package/src/chatbot/ChatErrorBoundary.tsx +230 -0
  299. package/src/chatbot/ChatMessageItem.tsx +195 -0
  300. package/src/chatbot/Conversation.tsx +537 -0
  301. package/src/chatbot/ConversationScrollButton.tsx +149 -0
  302. package/src/chatbot/Message.tsx +266 -0
  303. package/src/chatbot/PromptInput.tsx +532 -0
  304. package/src/chatbot/Reasoning.tsx +198 -0
  305. package/src/chatbot/Shimmer.tsx +146 -0
  306. package/src/chatbot/Sources.tsx +263 -0
  307. package/src/chatbot/Suggestion.tsx +123 -0
  308. package/src/chatbot/Tool.tsx +340 -0
  309. package/src/chatbot/adapters/uiMessageAdapter.ts +177 -0
  310. package/src/chatbot/index.ts +97 -0
  311. package/src/chatbot/types.ts +66 -0
  312. package/src/hooks/index.ts +17 -0
  313. package/src/hooks/useAutoScroll.ts +43 -0
  314. package/src/hooks/useClipboard.ts +46 -0
  315. package/src/hooks/useCollapsible.ts +42 -0
  316. package/src/hooks/useStickToBottom.ts +82 -0
  317. package/src/index.ts +139 -0
  318. package/src/primitives/Badge.tsx +119 -0
  319. package/src/primitives/Button.tsx +213 -0
  320. package/src/primitives/Card.tsx +221 -0
  321. package/src/primitives/Collapsible.tsx +168 -0
  322. package/src/primitives/ScrollArea.tsx +53 -0
  323. package/src/primitives/index.ts +36 -0
  324. package/src/streaming/StreamingMarkdown.tsx +282 -0
  325. package/src/streaming/index.ts +2 -0
  326. package/src/streaming/parser.ts +506 -0
  327. package/src/streaming/renderers/BlockquoteRenderer.tsx +42 -0
  328. package/src/streaming/renderers/CodeRenderer.tsx +158 -0
  329. package/src/streaming/renderers/HeadingRenderer.tsx +64 -0
  330. package/src/streaming/renderers/ImageRenderer.tsx +62 -0
  331. package/src/streaming/renderers/LinkRenderer.tsx +53 -0
  332. package/src/streaming/renderers/ListRenderer.tsx +65 -0
  333. package/src/streaming/renderers/TableRenderer.tsx +103 -0
  334. package/src/streaming/renderers/TextRenderer.tsx +39 -0
  335. package/src/streaming/renderers/index.ts +26 -0
  336. package/src/streaming/renderers/renderInlineChildren.tsx +115 -0
  337. package/src/streaming/renderers/renderNode.tsx +72 -0
  338. package/src/theme/ThemeProvider.tsx +77 -0
  339. package/src/theme/defaultTheme.ts +93 -0
  340. package/src/theme/index.ts +4 -0
  341. package/src/theme/tokens.ts +69 -0
  342. package/src/types.d.ts +71 -0
  343. package/src/voice/index.ts +15 -0
  344. package/src/voice/useSpeechRecognition.ts +230 -0
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AIImage = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _theme = require("../theme");
10
+ var _Shimmer = require("./Shimmer");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ // ---------------------------------------------------------------------------
14
+ // Types
15
+ // ---------------------------------------------------------------------------
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+
21
+ function resolveImageUri(source) {
22
+ if ('uri' in source && source.uri) {
23
+ return source.uri;
24
+ }
25
+ const mime = source.mimeType ?? 'image/png';
26
+ return `data:${mime};base64,${source.base64}`;
27
+ }
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Component
31
+ // ---------------------------------------------------------------------------
32
+
33
+ function AIImageComponent({
34
+ source,
35
+ alt,
36
+ width: explicitWidth,
37
+ height: explicitHeight,
38
+ resizeMode = 'cover',
39
+ style,
40
+ onPress
41
+ }) {
42
+ const theme = (0, _theme.useAIElementsTheme)();
43
+ const [isLoading, setIsLoading] = (0, _react.useState)(true);
44
+ const [containerWidth, setContainerWidth] = (0, _react.useState)(0);
45
+ const [aspectRatio, setAspectRatio] = (0, _react.useState)(explicitWidth && explicitHeight ? explicitWidth / explicitHeight : undefined);
46
+ const uri = resolveImageUri(source);
47
+
48
+ // Measure natural aspect ratio when not provided
49
+ const handleLoad = (0, _react.useCallback)(() => {
50
+ setIsLoading(false);
51
+ if (!explicitWidth || !explicitHeight) {
52
+ _reactNative.Image.getSize(uri, (w, h) => {
53
+ if (h > 0) {
54
+ setAspectRatio(w / h);
55
+ }
56
+ }, () => {
57
+ // fallback: keep undefined, image will use container size
58
+ });
59
+ }
60
+ }, [uri, explicitWidth, explicitHeight]);
61
+ const handleLayout = (0, _react.useCallback)(event => {
62
+ setContainerWidth(event.nativeEvent.layout.width);
63
+ }, []);
64
+
65
+ // Determine display dimensions
66
+ const displayWidth = explicitWidth ?? containerWidth;
67
+ const displayHeight = explicitHeight ?? (aspectRatio ? displayWidth / aspectRatio : 200);
68
+ const imageContent = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
69
+ onLayout: handleLayout,
70
+ style: [styles.container, {
71
+ borderRadius: theme.radius.md,
72
+ overflow: 'hidden',
73
+ width: explicitWidth ?? '100%',
74
+ height: displayHeight
75
+ }, style],
76
+ children: [isLoading && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
77
+ style: _reactNative.StyleSheet.absoluteFill,
78
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Shimmer.Shimmer, {
79
+ width: "100%",
80
+ height: displayHeight,
81
+ borderRadius: theme.radius.md
82
+ })
83
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
84
+ source: {
85
+ uri
86
+ },
87
+ accessibilityLabel: alt,
88
+ resizeMode: resizeMode,
89
+ onLoad: handleLoad,
90
+ style: [_reactNative.StyleSheet.absoluteFill, {
91
+ opacity: isLoading ? 0 : 1
92
+ }]
93
+ })]
94
+ });
95
+ if (onPress) {
96
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
97
+ onPress: onPress,
98
+ style: ({
99
+ pressed
100
+ }) => [pressed && styles.pressed],
101
+ children: imageContent
102
+ });
103
+ }
104
+ return imageContent;
105
+ }
106
+
107
+ // ---------------------------------------------------------------------------
108
+ // Styles
109
+ // ---------------------------------------------------------------------------
110
+
111
+ const styles = _reactNative.StyleSheet.create({
112
+ container: {
113
+ position: 'relative',
114
+ backgroundColor: 'transparent'
115
+ },
116
+ pressed: {
117
+ opacity: 0.85
118
+ }
119
+ });
120
+
121
+ // ---------------------------------------------------------------------------
122
+ // Export
123
+ // ---------------------------------------------------------------------------
124
+
125
+ const AIImage = exports.AIImage = /*#__PURE__*/(0, _react.memo)(AIImageComponent);
126
+ //# sourceMappingURL=AIImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_theme","_Shimmer","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","resolveImageUri","source","uri","mime","mimeType","base64","AIImageComponent","alt","width","explicitWidth","height","explicitHeight","resizeMode","style","onPress","theme","useAIElementsTheme","isLoading","setIsLoading","useState","containerWidth","setContainerWidth","aspectRatio","setAspectRatio","undefined","handleLoad","useCallback","Image","getSize","w","h","handleLayout","event","nativeEvent","layout","displayWidth","displayHeight","imageContent","jsxs","View","onLayout","styles","container","borderRadius","radius","md","overflow","children","jsx","StyleSheet","absoluteFill","Shimmer","accessibilityLabel","onLoad","opacity","Pressable","pressed","create","position","backgroundColor","AIImage","exports","memo"],"sourceRoot":"../../../src","sources":["chatbot/AIImage.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,317 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Attachments = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _lucideReactNative = require("lucide-react-native");
10
+ var _theme = require("../theme");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ // ---------------------------------------------------------------------------
14
+ // Types
15
+ // ---------------------------------------------------------------------------
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+
21
+ function formatFileSize(bytes) {
22
+ if (bytes == null) return '';
23
+ if (bytes < 1024) return `${bytes} B`;
24
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
25
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
26
+ }
27
+ function getImageSource(attachment) {
28
+ const source = attachment.uri ?? attachment.url;
29
+ return source ? {
30
+ uri: source
31
+ } : undefined;
32
+ }
33
+
34
+ // ---------------------------------------------------------------------------
35
+ // Image thumbnail
36
+ // ---------------------------------------------------------------------------
37
+
38
+ function ImageThumbnail({
39
+ attachment,
40
+ size,
41
+ style
42
+ }) {
43
+ const theme = (0, _theme.useAIElementsTheme)();
44
+ const source = getImageSource(attachment);
45
+ if (!source) {
46
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
47
+ style: [styles.imagePlaceholder, {
48
+ width: size,
49
+ height: size,
50
+ backgroundColor: theme.colors.muted,
51
+ borderRadius: theme.radius.md
52
+ }, style],
53
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_lucideReactNative.ImageIcon, {
54
+ size: 24,
55
+ color: theme.colors.mutedForeground
56
+ })
57
+ });
58
+ }
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
60
+ source: source,
61
+ style: [{
62
+ width: size,
63
+ height: size,
64
+ borderRadius: theme.radius.md
65
+ }, style],
66
+ resizeMode: "cover"
67
+ });
68
+ }
69
+
70
+ // ---------------------------------------------------------------------------
71
+ // File row
72
+ // ---------------------------------------------------------------------------
73
+
74
+ function FileRow({
75
+ attachment
76
+ }) {
77
+ const theme = (0, _theme.useAIElementsTheme)();
78
+ const nameStyle = {
79
+ color: theme.colors.foreground,
80
+ fontSize: theme.typography.fontSize.sm,
81
+ fontWeight: theme.typography.fontWeight.medium,
82
+ fontFamily: theme.typography.fontFamily
83
+ };
84
+ const metaStyle = {
85
+ color: theme.colors.mutedForeground,
86
+ fontSize: theme.typography.fontSize.xs,
87
+ fontFamily: theme.typography.fontFamily
88
+ };
89
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
90
+ style: ({
91
+ pressed
92
+ }) => [styles.fileRow, {
93
+ backgroundColor: pressed ? theme.colors.muted : theme.colors.card,
94
+ borderColor: theme.colors.border,
95
+ borderRadius: theme.radius.md,
96
+ padding: theme.spacing.md,
97
+ gap: theme.spacing.md
98
+ }],
99
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
100
+ style: [styles.fileIcon, {
101
+ backgroundColor: theme.colors.muted,
102
+ borderRadius: theme.radius.sm
103
+ }],
104
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_lucideReactNative.File, {
105
+ size: 18,
106
+ color: theme.colors.mutedForeground
107
+ })
108
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
109
+ style: styles.fileInfo,
110
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
111
+ style: nameStyle,
112
+ numberOfLines: 1,
113
+ children: attachment.name
114
+ }), (attachment.size != null || attachment.mimeType) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
115
+ style: metaStyle,
116
+ numberOfLines: 1,
117
+ children: [attachment.mimeType, attachment.size != null ? formatFileSize(attachment.size) : null].filter(Boolean).join(' - ')
118
+ })]
119
+ })]
120
+ });
121
+ }
122
+
123
+ // ---------------------------------------------------------------------------
124
+ // Grid layout
125
+ // ---------------------------------------------------------------------------
126
+
127
+ function GridLayout({
128
+ attachments,
129
+ style
130
+ }) {
131
+ const theme = (0, _theme.useAIElementsTheme)();
132
+ const images = attachments.filter(a => a.type === 'image');
133
+ const files = attachments.filter(a => a.type === 'file');
134
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
135
+ style: style,
136
+ children: [images.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
137
+ style: [styles.grid, {
138
+ gap: theme.spacing.sm
139
+ }],
140
+ children: images.map((attachment, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageThumbnail, {
141
+ attachment: attachment,
142
+ size: 140,
143
+ style: styles.gridItem
144
+ }, `img-${index}`))
145
+ }), files.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
146
+ style: [styles.fileList, {
147
+ gap: theme.spacing.sm,
148
+ marginTop: images.length > 0 ? theme.spacing.sm : 0
149
+ }],
150
+ children: files.map((attachment, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(FileRow, {
151
+ attachment: attachment
152
+ }, `file-${index}`))
153
+ })]
154
+ });
155
+ }
156
+
157
+ // ---------------------------------------------------------------------------
158
+ // Inline layout (horizontal scroll for images)
159
+ // ---------------------------------------------------------------------------
160
+
161
+ function InlineLayout({
162
+ attachments,
163
+ style
164
+ }) {
165
+ const theme = (0, _theme.useAIElementsTheme)();
166
+ const images = attachments.filter(a => a.type === 'image');
167
+ const files = attachments.filter(a => a.type === 'file');
168
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
169
+ style: style,
170
+ children: [images.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
171
+ horizontal: true,
172
+ showsHorizontalScrollIndicator: false,
173
+ contentContainerStyle: [styles.inlineContainer, {
174
+ gap: theme.spacing.sm
175
+ }],
176
+ children: images.map((attachment, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageThumbnail, {
177
+ attachment: attachment,
178
+ size: 100
179
+ }, `img-${index}`))
180
+ }), files.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
181
+ style: [styles.fileList, {
182
+ gap: theme.spacing.sm,
183
+ marginTop: images.length > 0 ? theme.spacing.sm : 0
184
+ }],
185
+ children: files.map((attachment, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(FileRow, {
186
+ attachment: attachment
187
+ }, `file-${index}`))
188
+ })]
189
+ });
190
+ }
191
+
192
+ // ---------------------------------------------------------------------------
193
+ // List layout
194
+ // ---------------------------------------------------------------------------
195
+
196
+ function ListLayout({
197
+ attachments,
198
+ style
199
+ }) {
200
+ const theme = (0, _theme.useAIElementsTheme)();
201
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
202
+ style: [styles.fileList, {
203
+ gap: theme.spacing.sm
204
+ }, style],
205
+ children: attachments.map((attachment, index) => {
206
+ if (attachment.type === 'image') {
207
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
208
+ style: [styles.fileRow, {
209
+ backgroundColor: theme.colors.card,
210
+ borderColor: theme.colors.border,
211
+ borderRadius: theme.radius.md,
212
+ padding: theme.spacing.sm,
213
+ gap: theme.spacing.md
214
+ }],
215
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ImageThumbnail, {
216
+ attachment: attachment,
217
+ size: 48
218
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
219
+ style: styles.fileInfo,
220
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
221
+ numberOfLines: 1,
222
+ style: {
223
+ color: theme.colors.foreground,
224
+ fontSize: theme.typography.fontSize.sm,
225
+ fontWeight: theme.typography.fontWeight.medium,
226
+ fontFamily: theme.typography.fontFamily
227
+ },
228
+ children: attachment.name
229
+ })
230
+ })]
231
+ }, `img-${index}`);
232
+ }
233
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(FileRow, {
234
+ attachment: attachment
235
+ }, `file-${index}`);
236
+ })
237
+ });
238
+ }
239
+
240
+ // ---------------------------------------------------------------------------
241
+ // Component
242
+ // ---------------------------------------------------------------------------
243
+
244
+ function AttachmentsComponent({
245
+ attachments,
246
+ variant = 'inline',
247
+ style
248
+ }) {
249
+ if (attachments.length === 0) {
250
+ return null;
251
+ }
252
+ switch (variant) {
253
+ case 'grid':
254
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridLayout, {
255
+ attachments: attachments,
256
+ style: style
257
+ });
258
+ case 'inline':
259
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(InlineLayout, {
260
+ attachments: attachments,
261
+ style: style
262
+ });
263
+ case 'list':
264
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(ListLayout, {
265
+ attachments: attachments,
266
+ style: style
267
+ });
268
+ }
269
+ }
270
+
271
+ // ---------------------------------------------------------------------------
272
+ // Styles
273
+ // ---------------------------------------------------------------------------
274
+
275
+ const styles = _reactNative.StyleSheet.create({
276
+ grid: {
277
+ flexDirection: 'row',
278
+ flexWrap: 'wrap'
279
+ },
280
+ gridItem: {
281
+ flexBasis: '48%',
282
+ flexGrow: 1
283
+ },
284
+ inlineContainer: {
285
+ flexDirection: 'row',
286
+ alignItems: 'center'
287
+ },
288
+ fileList: {
289
+ flexDirection: 'column'
290
+ },
291
+ fileRow: {
292
+ flexDirection: 'row',
293
+ alignItems: 'center',
294
+ borderWidth: _reactNative.StyleSheet.hairlineWidth
295
+ },
296
+ fileIcon: {
297
+ width: 36,
298
+ height: 36,
299
+ alignItems: 'center',
300
+ justifyContent: 'center'
301
+ },
302
+ fileInfo: {
303
+ flex: 1,
304
+ gap: 2
305
+ },
306
+ imagePlaceholder: {
307
+ alignItems: 'center',
308
+ justifyContent: 'center'
309
+ }
310
+ });
311
+
312
+ // ---------------------------------------------------------------------------
313
+ // Export
314
+ // ---------------------------------------------------------------------------
315
+
316
+ const Attachments = exports.Attachments = /*#__PURE__*/(0, _react.memo)(AttachmentsComponent);
317
+ //# sourceMappingURL=Attachments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_lucideReactNative","_theme","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","formatFileSize","bytes","toFixed","getImageSource","attachment","source","uri","url","undefined","ImageThumbnail","size","style","theme","useAIElementsTheme","jsx","View","styles","imagePlaceholder","width","height","backgroundColor","colors","muted","borderRadius","radius","md","children","ImageIcon","color","mutedForeground","Image","resizeMode","FileRow","nameStyle","foreground","fontSize","typography","sm","fontWeight","medium","fontFamily","metaStyle","xs","jsxs","Pressable","pressed","fileRow","card","borderColor","border","padding","spacing","gap","fileIcon","File","fileInfo","Text","numberOfLines","name","mimeType","filter","Boolean","join","GridLayout","attachments","images","a","type","files","length","grid","map","index","gridItem","fileList","marginTop","InlineLayout","ScrollView","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","inlineContainer","ListLayout","AttachmentsComponent","variant","StyleSheet","create","flexDirection","flexWrap","flexBasis","flexGrow","alignItems","borderWidth","hairlineWidth","justifyContent","flex","Attachments","exports","memo"],"sourceRoot":"../../../src","sources":["chatbot/Attachments.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChatErrorBoundary = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _lucideReactNative = require("lucide-react-native");
10
+ var _theme = require("../theme");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ // ---------------------------------------------------------------------------
14
+ // Types
15
+ // ---------------------------------------------------------------------------
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Helpers
19
+ // ---------------------------------------------------------------------------
20
+
21
+ function arraysShallowEqual(a, b) {
22
+ if (a === b) return true;
23
+ if (!a || !b) return false;
24
+ if (a.length !== b.length) return false;
25
+ for (let i = 0; i < a.length; i += 1) {
26
+ if (a[i] !== b[i]) return false;
27
+ }
28
+ return true;
29
+ }
30
+
31
+ // ---------------------------------------------------------------------------
32
+ // Error boundary
33
+ // ---------------------------------------------------------------------------
34
+
35
+ /**
36
+ * Class-component boundary that wraps individual chat messages. If a single
37
+ * message's render throws (e.g. malformed markdown, a tool call with bad
38
+ * JSON), only that bubble shows a fallback — the rest of the conversation
39
+ * keeps working.
40
+ *
41
+ * React doesn't expose hooks for error boundaries, so this **must** stay a
42
+ * class component. The themed fallback is delegated to a sibling functional
43
+ * component so it can read the theme via hooks.
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * <ChatErrorBoundary resetKeys={[message.id]}>
48
+ * <MessageRenderer message={message} />
49
+ * </ChatErrorBoundary>
50
+ * ```
51
+ */
52
+ class ChatErrorBoundary extends _react.Component {
53
+ static displayName = 'ChatErrorBoundary';
54
+ state = {
55
+ error: null
56
+ };
57
+ static getDerivedStateFromError(error) {
58
+ return {
59
+ error
60
+ };
61
+ }
62
+ componentDidCatch(error, errorInfo) {
63
+ this.props.onError?.(error, errorInfo);
64
+ if (__DEV__) {
65
+ // Format following Expo's what / why / how convention so the warning
66
+ // tells you exactly what to fix instead of just dumping a stack.
67
+ console.warn('[chat-components] A message render threw inside <ChatErrorBoundary>.\n' + ` what: ${error.message || 'unknown render error'}\n` + ' why: React unmounted that subtree to prevent a crash.\n' + ' how: inspect the message payload (markdown / tool args / sources)\n' + ' below for invalid input. The user can also tap "Retry" to remount.');
68
+ console.error('[chat-components]', error, errorInfo.componentStack);
69
+ }
70
+ }
71
+ componentDidUpdate(prev) {
72
+ // Auto-reset if any reset key changed since the last render. This lets
73
+ // callers say "the message id changed, so any error from the previous
74
+ // message no longer applies".
75
+ if (this.state.error && !arraysShallowEqual(prev.resetKeys, this.props.resetKeys)) {
76
+ this.reset();
77
+ }
78
+ }
79
+ reset = () => {
80
+ this.setState({
81
+ error: null
82
+ });
83
+ };
84
+ render() {
85
+ const {
86
+ error
87
+ } = this.state;
88
+ if (error) {
89
+ if (this.props.fallback) {
90
+ return this.props.fallback(error, this.reset);
91
+ }
92
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(DefaultFallback, {
93
+ error: error,
94
+ onReset: this.reset
95
+ });
96
+ }
97
+ return this.props.children;
98
+ }
99
+ }
100
+
101
+ // ---------------------------------------------------------------------------
102
+ // Default themed fallback
103
+ // ---------------------------------------------------------------------------
104
+ exports.ChatErrorBoundary = ChatErrorBoundary;
105
+ function DefaultFallback({
106
+ error,
107
+ onReset
108
+ }) {
109
+ const theme = (0, _theme.useAIElementsTheme)();
110
+ const styles = getStyles(theme);
111
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
112
+ style: styles.wrapper,
113
+ accessible: true,
114
+ accessibilityRole: "alert",
115
+ accessibilityLabel: "Message failed to render",
116
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
117
+ style: styles.bubble,
118
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
119
+ style: styles.title,
120
+ children: "Couldn't render this message"
121
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
122
+ style: styles.message,
123
+ numberOfLines: 2,
124
+ children: error.message || 'Unknown render error.'
125
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
126
+ onPress: onReset,
127
+ accessibilityRole: "button",
128
+ accessibilityLabel: "Retry rendering this message",
129
+ hitSlop: 8,
130
+ style: ({
131
+ pressed
132
+ }) => [styles.retryButton, pressed && styles.retryButtonPressed],
133
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_lucideReactNative.RotateCcw, {
134
+ size: 12,
135
+ color: theme.colors.foreground
136
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
137
+ style: styles.retryText,
138
+ children: "Retry"
139
+ })]
140
+ })]
141
+ })
142
+ });
143
+ }
144
+ DefaultFallback.displayName = 'ChatErrorBoundary.DefaultFallback';
145
+
146
+ // ---------------------------------------------------------------------------
147
+ // Styles
148
+ // ---------------------------------------------------------------------------
149
+
150
+ function getStyles(theme) {
151
+ return _reactNative.StyleSheet.create({
152
+ wrapper: {
153
+ alignItems: 'flex-start',
154
+ paddingHorizontal: theme.spacing.lg,
155
+ marginBottom: theme.spacing.md
156
+ },
157
+ bubble: {
158
+ backgroundColor: theme.colors.muted,
159
+ borderColor: theme.colors.border,
160
+ borderWidth: _reactNative.StyleSheet.hairlineWidth,
161
+ borderRadius: theme.radius.md,
162
+ paddingHorizontal: theme.spacing.md,
163
+ paddingVertical: theme.spacing.sm,
164
+ maxWidth: '88%'
165
+ },
166
+ title: {
167
+ color: theme.colors.foreground,
168
+ fontFamily: theme.typography.fontFamily,
169
+ fontSize: theme.typography.fontSize.sm,
170
+ fontWeight: theme.typography.fontWeight.semibold,
171
+ marginBottom: 2
172
+ },
173
+ message: {
174
+ color: theme.colors.mutedForeground,
175
+ fontFamily: theme.typography.fontFamily,
176
+ fontSize: theme.typography.fontSize.sm,
177
+ lineHeight: theme.typography.fontSize.sm * theme.typography.lineHeight.normal,
178
+ marginBottom: theme.spacing.sm
179
+ },
180
+ retryButton: {
181
+ flexDirection: 'row',
182
+ alignItems: 'center',
183
+ gap: 6,
184
+ alignSelf: 'flex-start',
185
+ paddingHorizontal: theme.spacing.sm,
186
+ paddingVertical: 4,
187
+ borderRadius: theme.radius.sm,
188
+ backgroundColor: theme.colors.secondary
189
+ },
190
+ retryButtonPressed: {
191
+ opacity: 0.7
192
+ },
193
+ retryText: {
194
+ color: theme.colors.foreground,
195
+ fontFamily: theme.typography.fontFamily,
196
+ fontSize: theme.typography.fontSize.sm,
197
+ fontWeight: theme.typography.fontWeight.medium
198
+ }
199
+ });
200
+ }
201
+ //# sourceMappingURL=ChatErrorBoundary.js.map