@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,213 @@
1
+ import React, { useCallback, type ReactNode } from 'react';
2
+ import {
3
+ Pressable,
4
+ Text,
5
+ View,
6
+ StyleSheet,
7
+ type PressableProps,
8
+ type StyleProp,
9
+ type ViewStyle,
10
+ type TextStyle,
11
+ } from 'react-native';
12
+ import { useAIElementsTheme } from '../theme';
13
+ import type { AIElementsTheme } from '../theme';
14
+
15
+ export type ButtonVariant =
16
+ | 'default'
17
+ | 'secondary'
18
+ | 'outline'
19
+ | 'ghost'
20
+ | 'destructive';
21
+
22
+ export type ButtonSize = 'sm' | 'md' | 'lg';
23
+
24
+ export interface ButtonProps
25
+ extends Omit<PressableProps, 'style' | 'children'> {
26
+ variant?: ButtonVariant;
27
+ size?: ButtonSize;
28
+ disabled?: boolean;
29
+ onPress?: PressableProps['onPress'];
30
+ children?: ReactNode;
31
+ style?: StyleProp<ViewStyle>;
32
+ leftIcon?: ReactNode;
33
+ rightIcon?: ReactNode;
34
+ }
35
+
36
+ function getVariantStyles(
37
+ variant: ButtonVariant,
38
+ theme: AIElementsTheme
39
+ ): { container: ViewStyle; text: TextStyle } {
40
+ const { colors, radius } = theme;
41
+
42
+ switch (variant) {
43
+ case 'default':
44
+ return {
45
+ container: {
46
+ backgroundColor: colors.primary,
47
+ borderRadius: radius.md,
48
+ },
49
+ text: { color: colors.primaryForeground },
50
+ };
51
+ case 'secondary':
52
+ return {
53
+ container: {
54
+ backgroundColor: colors.secondary,
55
+ borderRadius: radius.md,
56
+ },
57
+ text: { color: colors.secondaryForeground },
58
+ };
59
+ case 'outline':
60
+ return {
61
+ container: {
62
+ backgroundColor: 'transparent',
63
+ borderWidth: 1,
64
+ borderColor: colors.border,
65
+ borderRadius: radius.md,
66
+ },
67
+ text: { color: colors.foreground },
68
+ };
69
+ case 'ghost':
70
+ return {
71
+ container: {
72
+ backgroundColor: 'transparent',
73
+ borderRadius: radius.md,
74
+ },
75
+ text: { color: colors.foreground },
76
+ };
77
+ case 'destructive':
78
+ return {
79
+ container: {
80
+ backgroundColor: colors.destructive,
81
+ borderRadius: radius.md,
82
+ },
83
+ text: { color: colors.destructiveForeground },
84
+ };
85
+ }
86
+ }
87
+
88
+ function getSizeStyles(
89
+ size: ButtonSize,
90
+ theme: AIElementsTheme
91
+ ): { container: ViewStyle; text: TextStyle } {
92
+ const { spacing, typography } = theme;
93
+
94
+ switch (size) {
95
+ case 'sm':
96
+ return {
97
+ container: {
98
+ paddingVertical: spacing.xs,
99
+ paddingHorizontal: spacing.sm,
100
+ minHeight: 32,
101
+ },
102
+ text: {
103
+ fontSize: typography.fontSize.sm,
104
+ },
105
+ };
106
+ case 'md':
107
+ return {
108
+ container: {
109
+ paddingVertical: spacing.sm,
110
+ paddingHorizontal: spacing.lg,
111
+ minHeight: 40,
112
+ },
113
+ text: {
114
+ fontSize: typography.fontSize.md,
115
+ },
116
+ };
117
+ case 'lg':
118
+ return {
119
+ container: {
120
+ paddingVertical: spacing.md,
121
+ paddingHorizontal: spacing.xl,
122
+ minHeight: 48,
123
+ },
124
+ text: {
125
+ fontSize: typography.fontSize.lg,
126
+ },
127
+ };
128
+ }
129
+ }
130
+
131
+ export function Button({
132
+ variant = 'default',
133
+ size = 'md',
134
+ disabled = false,
135
+ onPress,
136
+ children,
137
+ style,
138
+ leftIcon,
139
+ rightIcon,
140
+ ...pressableProps
141
+ }: ButtonProps) {
142
+ const theme = useAIElementsTheme();
143
+ const variantStyles = getVariantStyles(variant, theme);
144
+ const sizeStyles = getSizeStyles(size, theme);
145
+
146
+ const renderContent = useCallback(
147
+ (pressed: boolean) => {
148
+ const textStyle: TextStyle = {
149
+ ...sizeStyles.text,
150
+ ...variantStyles.text,
151
+ fontWeight: theme.typography.fontWeight.semibold as TextStyle['fontWeight'],
152
+ fontFamily: theme.typography.fontFamily,
153
+ opacity: disabled ? 0.5 : pressed ? 0.8 : 1,
154
+ };
155
+
156
+ return (
157
+ <View style={styles.content}>
158
+ {leftIcon && <View style={styles.iconLeft}>{leftIcon}</View>}
159
+ {typeof children === 'string' ? (
160
+ <Text style={textStyle}>{children}</Text>
161
+ ) : (
162
+ children
163
+ )}
164
+ {rightIcon && <View style={styles.iconRight}>{rightIcon}</View>}
165
+ </View>
166
+ );
167
+ },
168
+ [children, leftIcon, rightIcon, sizeStyles.text, variantStyles.text, theme, disabled]
169
+ );
170
+
171
+ return (
172
+ <Pressable
173
+ {...pressableProps}
174
+ onPress={onPress}
175
+ disabled={disabled}
176
+ style={({ pressed }) => [
177
+ styles.base,
178
+ variantStyles.container,
179
+ sizeStyles.container,
180
+ disabled && styles.disabled,
181
+ pressed && styles.pressed,
182
+ style,
183
+ ]}
184
+ >
185
+ {({ pressed }) => renderContent(pressed)}
186
+ </Pressable>
187
+ );
188
+ }
189
+
190
+ const styles = StyleSheet.create({
191
+ base: {
192
+ flexDirection: 'row',
193
+ alignItems: 'center',
194
+ justifyContent: 'center',
195
+ },
196
+ content: {
197
+ flexDirection: 'row',
198
+ alignItems: 'center',
199
+ justifyContent: 'center',
200
+ },
201
+ disabled: {
202
+ opacity: 0.5,
203
+ },
204
+ pressed: {
205
+ opacity: 0.7,
206
+ },
207
+ iconLeft: {
208
+ marginRight: 8,
209
+ },
210
+ iconRight: {
211
+ marginLeft: 8,
212
+ },
213
+ });
@@ -0,0 +1,221 @@
1
+ import React, { createContext, useContext, type ReactNode } from 'react';
2
+ import {
3
+ View,
4
+ Text,
5
+ StyleSheet,
6
+ Platform,
7
+ type StyleProp,
8
+ type ViewStyle,
9
+ type TextStyle,
10
+ } from 'react-native';
11
+ import { useAIElementsTheme } from '../theme';
12
+ import type { AIElementsTheme } from '../theme';
13
+
14
+ // ---------------------------------------------------------------------------
15
+ // Context (shared theme reference for compound children)
16
+ // ---------------------------------------------------------------------------
17
+
18
+ const CardContext = createContext<AIElementsTheme | null>(null);
19
+
20
+ function useCardTheme(): AIElementsTheme {
21
+ const ctx = useContext(CardContext);
22
+ if (!ctx) {
23
+ throw new Error('Card compound components must be used within a <Card>.');
24
+ }
25
+ return ctx;
26
+ }
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Prop types
30
+ // ---------------------------------------------------------------------------
31
+
32
+ export interface CardProps {
33
+ children?: ReactNode;
34
+ style?: StyleProp<ViewStyle>;
35
+ }
36
+
37
+ export interface CardHeaderProps {
38
+ children?: ReactNode;
39
+ style?: StyleProp<ViewStyle>;
40
+ }
41
+
42
+ export interface CardTitleProps {
43
+ children?: ReactNode;
44
+ style?: StyleProp<TextStyle>;
45
+ }
46
+
47
+ export interface CardDescriptionProps {
48
+ children?: ReactNode;
49
+ style?: StyleProp<TextStyle>;
50
+ }
51
+
52
+ export interface CardContentProps {
53
+ children?: ReactNode;
54
+ style?: StyleProp<ViewStyle>;
55
+ }
56
+
57
+ export interface CardFooterProps {
58
+ children?: ReactNode;
59
+ style?: StyleProp<ViewStyle>;
60
+ }
61
+
62
+ // ---------------------------------------------------------------------------
63
+ // Components
64
+ // ---------------------------------------------------------------------------
65
+
66
+ export function Card({ children, style }: CardProps) {
67
+ const theme = useAIElementsTheme();
68
+ const { colors, radius } = theme;
69
+
70
+ const shadowStyle: ViewStyle = Platform.select({
71
+ ios: {
72
+ shadowColor: '#000',
73
+ shadowOffset: { width: 0, height: 1 },
74
+ shadowOpacity: 0.05,
75
+ shadowRadius: 2,
76
+ },
77
+ android: {
78
+ elevation: 1,
79
+ },
80
+ default: {},
81
+ }) as ViewStyle;
82
+
83
+ return (
84
+ <CardContext.Provider value={theme}>
85
+ <View
86
+ style={[
87
+ styles.card,
88
+ {
89
+ backgroundColor: colors.card,
90
+ borderColor: colors.border,
91
+ borderRadius: radius.lg,
92
+ },
93
+ shadowStyle,
94
+ style,
95
+ ]}
96
+ >
97
+ {children}
98
+ </View>
99
+ </CardContext.Provider>
100
+ );
101
+ }
102
+
103
+ export function CardHeader({ children, style }: CardHeaderProps) {
104
+ const theme = useCardTheme();
105
+
106
+ return (
107
+ <View
108
+ style={[
109
+ styles.header,
110
+ { padding: theme.spacing.lg },
111
+ style,
112
+ ]}
113
+ >
114
+ {children}
115
+ </View>
116
+ );
117
+ }
118
+
119
+ export function CardTitle({ children, style }: CardTitleProps) {
120
+ const theme = useCardTheme();
121
+
122
+ return (
123
+ <Text
124
+ style={[
125
+ {
126
+ color: theme.colors.cardForeground,
127
+ fontSize: theme.typography.fontSize.lg,
128
+ fontWeight: theme.typography.fontWeight.semibold as TextStyle['fontWeight'],
129
+ fontFamily: theme.typography.fontFamily,
130
+ lineHeight:
131
+ theme.typography.fontSize.lg * theme.typography.lineHeight.tight,
132
+ },
133
+ style,
134
+ ]}
135
+ >
136
+ {children}
137
+ </Text>
138
+ );
139
+ }
140
+
141
+ export function CardDescription({ children, style }: CardDescriptionProps) {
142
+ const theme = useCardTheme();
143
+
144
+ return (
145
+ <Text
146
+ style={[
147
+ {
148
+ color: theme.colors.mutedForeground,
149
+ fontSize: theme.typography.fontSize.sm,
150
+ fontFamily: theme.typography.fontFamily,
151
+ lineHeight:
152
+ theme.typography.fontSize.sm * theme.typography.lineHeight.normal,
153
+ marginTop: theme.spacing.xs,
154
+ },
155
+ style,
156
+ ]}
157
+ >
158
+ {children}
159
+ </Text>
160
+ );
161
+ }
162
+
163
+ export function CardContent({ children, style }: CardContentProps) {
164
+ const theme = useCardTheme();
165
+
166
+ return (
167
+ <View
168
+ style={[
169
+ styles.content,
170
+ {
171
+ paddingHorizontal: theme.spacing.lg,
172
+ paddingBottom: theme.spacing.lg,
173
+ },
174
+ style,
175
+ ]}
176
+ >
177
+ {children}
178
+ </View>
179
+ );
180
+ }
181
+
182
+ export function CardFooter({ children, style }: CardFooterProps) {
183
+ const theme = useCardTheme();
184
+
185
+ return (
186
+ <View
187
+ style={[
188
+ styles.footer,
189
+ {
190
+ paddingHorizontal: theme.spacing.lg,
191
+ paddingBottom: theme.spacing.lg,
192
+ borderTopColor: theme.colors.border,
193
+ },
194
+ style,
195
+ ]}
196
+ >
197
+ {children}
198
+ </View>
199
+ );
200
+ }
201
+
202
+ // ---------------------------------------------------------------------------
203
+ // Styles
204
+ // ---------------------------------------------------------------------------
205
+
206
+ const styles = StyleSheet.create({
207
+ card: {
208
+ borderWidth: 1,
209
+ overflow: 'hidden',
210
+ },
211
+ header: {
212
+ flexDirection: 'column',
213
+ },
214
+ content: {},
215
+ footer: {
216
+ flexDirection: 'row',
217
+ alignItems: 'center',
218
+ borderTopWidth: StyleSheet.hairlineWidth,
219
+ paddingTop: 16,
220
+ },
221
+ });
@@ -0,0 +1,168 @@
1
+ import React, {
2
+ createContext,
3
+ useCallback,
4
+ useContext,
5
+ useState,
6
+ type ReactNode,
7
+ } from 'react';
8
+ import { Pressable, StyleSheet, type StyleProp, type ViewStyle } from 'react-native';
9
+ import Animated, {
10
+ useAnimatedStyle,
11
+ useDerivedValue,
12
+ useSharedValue,
13
+ withTiming,
14
+ } from 'react-native-reanimated';
15
+
16
+ // ---------------------------------------------------------------------------
17
+ // Context
18
+ // ---------------------------------------------------------------------------
19
+
20
+ interface CollapsibleContextValue {
21
+ open: boolean;
22
+ onToggle: () => void;
23
+ }
24
+
25
+ const CollapsibleContext = createContext<CollapsibleContextValue | null>(null);
26
+
27
+ function useCollapsibleContext(): CollapsibleContextValue {
28
+ const ctx = useContext(CollapsibleContext);
29
+ if (!ctx) {
30
+ throw new Error(
31
+ 'Collapsible compound components must be used within a <Collapsible>.'
32
+ );
33
+ }
34
+ return ctx;
35
+ }
36
+
37
+ // ---------------------------------------------------------------------------
38
+ // Prop types
39
+ // ---------------------------------------------------------------------------
40
+
41
+ export interface CollapsibleProps {
42
+ open?: boolean;
43
+ onOpenChange?: (open: boolean) => void;
44
+ children?: ReactNode;
45
+ style?: StyleProp<ViewStyle>;
46
+ }
47
+
48
+ export interface CollapsibleTriggerProps {
49
+ children?: ReactNode;
50
+ style?: StyleProp<ViewStyle>;
51
+ }
52
+
53
+ export interface CollapsibleContentProps {
54
+ children?: ReactNode;
55
+ style?: StyleProp<ViewStyle>;
56
+ }
57
+
58
+ // ---------------------------------------------------------------------------
59
+ // Collapsible (parent)
60
+ // ---------------------------------------------------------------------------
61
+
62
+ export function Collapsible({
63
+ open: controlledOpen,
64
+ onOpenChange,
65
+ children,
66
+ style,
67
+ }: CollapsibleProps) {
68
+ const [internalOpen, setInternalOpen] = useState(false);
69
+
70
+ const isControlled = controlledOpen !== undefined;
71
+ const open = isControlled ? controlledOpen : internalOpen;
72
+
73
+ const onToggle = useCallback(() => {
74
+ const next = !open;
75
+ if (!isControlled) {
76
+ setInternalOpen(next);
77
+ }
78
+ onOpenChange?.(next);
79
+ }, [open, isControlled, onOpenChange]);
80
+
81
+ return (
82
+ <CollapsibleContext.Provider value={{ open, onToggle }}>
83
+ <Animated.View style={style}>{children}</Animated.View>
84
+ </CollapsibleContext.Provider>
85
+ );
86
+ }
87
+
88
+ // ---------------------------------------------------------------------------
89
+ // CollapsibleTrigger
90
+ // ---------------------------------------------------------------------------
91
+
92
+ export function CollapsibleTrigger({
93
+ children,
94
+ style,
95
+ }: CollapsibleTriggerProps) {
96
+ const { onToggle } = useCollapsibleContext();
97
+
98
+ return (
99
+ <Pressable
100
+ onPress={onToggle}
101
+ style={({ pressed }) => [pressed && styles.pressed, style]}
102
+ >
103
+ {children}
104
+ </Pressable>
105
+ );
106
+ }
107
+
108
+ // ---------------------------------------------------------------------------
109
+ // CollapsibleContent (animated)
110
+ // ---------------------------------------------------------------------------
111
+
112
+ export function CollapsibleContent({
113
+ children,
114
+ style,
115
+ }: CollapsibleContentProps) {
116
+ const { open } = useCollapsibleContext();
117
+ const measuredHeight = useSharedValue(0);
118
+
119
+ const progress = useDerivedValue(() =>
120
+ withTiming(open ? 1 : 0, { duration: 250 })
121
+ );
122
+
123
+ const animatedContainerStyle = useAnimatedStyle(() => ({
124
+ height: progress.value * measuredHeight.value,
125
+ opacity: progress.value,
126
+ overflow: 'hidden' as const,
127
+ }));
128
+
129
+ const onLayout = useCallback(
130
+ (event: { nativeEvent: { layout: { height: number } } }) => {
131
+ const layoutHeight = event.nativeEvent.layout.height;
132
+ if (layoutHeight > 0) {
133
+ measuredHeight.value = layoutHeight;
134
+ }
135
+ },
136
+ [measuredHeight]
137
+ );
138
+
139
+ return (
140
+ <Animated.View style={[animatedContainerStyle as any, style]}>
141
+ <Animated.View
142
+ style={styles.inner}
143
+ onLayout={onLayout}
144
+ >
145
+ {children}
146
+ </Animated.View>
147
+ </Animated.View>
148
+ );
149
+ }
150
+
151
+ // ---------------------------------------------------------------------------
152
+ // Styles
153
+ // ---------------------------------------------------------------------------
154
+
155
+ const styles = StyleSheet.create({
156
+ pressed: {
157
+ opacity: 0.7,
158
+ },
159
+ inner: {
160
+ // Position absolute so we can measure the natural height without
161
+ // the parent constraining it while collapsed. Once the parent animates
162
+ // to the full measured height the content is fully visible.
163
+ position: 'absolute',
164
+ width: '100%',
165
+ top: 0,
166
+ left: 0,
167
+ },
168
+ });
@@ -0,0 +1,53 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import {
3
+ ScrollView,
4
+ StyleSheet,
5
+ type ScrollViewProps,
6
+ type StyleProp,
7
+ type ViewStyle,
8
+ } from 'react-native';
9
+ import { useAIElementsTheme } from '../theme';
10
+
11
+ export interface ScrollAreaProps
12
+ extends Omit<ScrollViewProps, 'style' | 'contentContainerStyle'> {
13
+ horizontal?: boolean;
14
+ style?: StyleProp<ViewStyle>;
15
+ contentContainerStyle?: StyleProp<ViewStyle>;
16
+ children?: ReactNode;
17
+ }
18
+
19
+ export function ScrollArea({
20
+ horizontal = false,
21
+ style,
22
+ contentContainerStyle,
23
+ children,
24
+ ...scrollViewProps
25
+ }: ScrollAreaProps) {
26
+ const theme = useAIElementsTheme();
27
+
28
+ return (
29
+ <ScrollView
30
+ {...scrollViewProps}
31
+ horizontal={horizontal}
32
+ showsVerticalScrollIndicator={false}
33
+ showsHorizontalScrollIndicator={false}
34
+ style={[
35
+ styles.base,
36
+ { backgroundColor: theme.colors.background },
37
+ style,
38
+ ]}
39
+ contentContainerStyle={[styles.contentContainer, contentContainerStyle]}
40
+ >
41
+ {children}
42
+ </ScrollView>
43
+ );
44
+ }
45
+
46
+ const styles = StyleSheet.create({
47
+ base: {
48
+ flex: 1,
49
+ },
50
+ contentContainer: {
51
+ flexGrow: 1,
52
+ },
53
+ });
@@ -0,0 +1,36 @@
1
+ export { Button } from './Button';
2
+ export type { ButtonProps, ButtonVariant, ButtonSize } from './Button';
3
+
4
+ export { Badge } from './Badge';
5
+ export type { BadgeProps, BadgeVariant } from './Badge';
6
+
7
+ export {
8
+ Card,
9
+ CardHeader,
10
+ CardTitle,
11
+ CardDescription,
12
+ CardContent,
13
+ CardFooter,
14
+ } from './Card';
15
+ export type {
16
+ CardProps,
17
+ CardHeaderProps,
18
+ CardTitleProps,
19
+ CardDescriptionProps,
20
+ CardContentProps,
21
+ CardFooterProps,
22
+ } from './Card';
23
+
24
+ export {
25
+ Collapsible,
26
+ CollapsibleTrigger,
27
+ CollapsibleContent,
28
+ } from './Collapsible';
29
+ export type {
30
+ CollapsibleProps,
31
+ CollapsibleTriggerProps,
32
+ CollapsibleContentProps,
33
+ } from './Collapsible';
34
+
35
+ export { ScrollArea } from './ScrollArea';
36
+ export type { ScrollAreaProps } from './ScrollArea';