@liveblocks/react-ui 3.9.1 → 3.9.2-tiptap2

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 (451) hide show
  1. package/dist/components/AiChat.cjs +133 -113
  2. package/dist/components/AiChat.cjs.map +1 -1
  3. package/dist/components/AiChat.js +133 -113
  4. package/dist/components/AiChat.js.map +1 -1
  5. package/dist/components/AiTool.cjs +120 -93
  6. package/dist/components/AiTool.cjs.map +1 -1
  7. package/dist/components/AiTool.js +120 -93
  8. package/dist/components/AiTool.js.map +1 -1
  9. package/dist/components/Comment.cjs +374 -374
  10. package/dist/components/Comment.cjs.map +1 -1
  11. package/dist/components/Comment.js +374 -374
  12. package/dist/components/Comment.js.map +1 -1
  13. package/dist/components/Composer.cjs +208 -259
  14. package/dist/components/Composer.cjs.map +1 -1
  15. package/dist/components/Composer.js +208 -259
  16. package/dist/components/Composer.js.map +1 -1
  17. package/dist/components/HistoryVersionSummary.cjs +28 -25
  18. package/dist/components/HistoryVersionSummary.cjs.map +1 -1
  19. package/dist/components/HistoryVersionSummary.js +28 -25
  20. package/dist/components/HistoryVersionSummary.js.map +1 -1
  21. package/dist/components/HistoryVersionSummaryList.cjs +9 -9
  22. package/dist/components/HistoryVersionSummaryList.cjs.map +1 -1
  23. package/dist/components/HistoryVersionSummaryList.js +9 -9
  24. package/dist/components/HistoryVersionSummaryList.js.map +1 -1
  25. package/dist/components/InboxNotification.cjs +264 -239
  26. package/dist/components/InboxNotification.cjs.map +1 -1
  27. package/dist/components/InboxNotification.js +264 -239
  28. package/dist/components/InboxNotification.js.map +1 -1
  29. package/dist/components/InboxNotificationList.cjs +19 -19
  30. package/dist/components/InboxNotificationList.cjs.map +1 -1
  31. package/dist/components/InboxNotificationList.js +19 -19
  32. package/dist/components/InboxNotificationList.js.map +1 -1
  33. package/dist/components/Thread.cjs +102 -82
  34. package/dist/components/Thread.cjs.map +1 -1
  35. package/dist/components/Thread.js +102 -82
  36. package/dist/components/Thread.js.map +1 -1
  37. package/dist/components/internal/AiChatAssistantMessage.cjs +164 -210
  38. package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
  39. package/dist/components/internal/AiChatAssistantMessage.js +164 -210
  40. package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
  41. package/dist/components/internal/AiChatUserMessage.cjs +29 -26
  42. package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
  43. package/dist/components/internal/AiChatUserMessage.js +29 -26
  44. package/dist/components/internal/AiChatUserMessage.js.map +1 -1
  45. package/dist/components/internal/AiComposer.cjs +37 -53
  46. package/dist/components/internal/AiComposer.cjs.map +1 -1
  47. package/dist/components/internal/AiComposer.js +37 -53
  48. package/dist/components/internal/AiComposer.js.map +1 -1
  49. package/dist/components/internal/Attachment.cjs +170 -181
  50. package/dist/components/internal/Attachment.cjs.map +1 -1
  51. package/dist/components/internal/Attachment.js +170 -181
  52. package/dist/components/internal/Attachment.js.map +1 -1
  53. package/dist/components/internal/Attribution.cjs +27 -18
  54. package/dist/components/internal/Attribution.cjs.map +1 -1
  55. package/dist/components/internal/Attribution.js +27 -18
  56. package/dist/components/internal/Attribution.js.map +1 -1
  57. package/dist/components/internal/Avatar.cjs +30 -32
  58. package/dist/components/internal/Avatar.cjs.map +1 -1
  59. package/dist/components/internal/Avatar.js +30 -32
  60. package/dist/components/internal/Avatar.js.map +1 -1
  61. package/dist/components/internal/Button.cjs +34 -47
  62. package/dist/components/internal/Button.cjs.map +1 -1
  63. package/dist/components/internal/Button.js +34 -47
  64. package/dist/components/internal/Button.js.map +1 -1
  65. package/dist/components/internal/CodeBlock.cjs +15 -34
  66. package/dist/components/internal/CodeBlock.cjs.map +1 -1
  67. package/dist/components/internal/CodeBlock.js +15 -34
  68. package/dist/components/internal/CodeBlock.js.map +1 -1
  69. package/dist/components/internal/Dropdown.cjs +37 -37
  70. package/dist/components/internal/Dropdown.cjs.map +1 -1
  71. package/dist/components/internal/Dropdown.js +37 -37
  72. package/dist/components/internal/Dropdown.js.map +1 -1
  73. package/dist/components/internal/Emoji.cjs +16 -13
  74. package/dist/components/internal/Emoji.cjs.map +1 -1
  75. package/dist/components/internal/Emoji.js +16 -13
  76. package/dist/components/internal/Emoji.js.map +1 -1
  77. package/dist/components/internal/EmojiPicker.cjs +61 -102
  78. package/dist/components/internal/EmojiPicker.cjs.map +1 -1
  79. package/dist/components/internal/EmojiPicker.js +61 -102
  80. package/dist/components/internal/EmojiPicker.js.map +1 -1
  81. package/dist/components/internal/Favicon.cjs +1 -10
  82. package/dist/components/internal/Favicon.cjs.map +1 -1
  83. package/dist/components/internal/Favicon.js +1 -10
  84. package/dist/components/internal/Favicon.js.map +1 -1
  85. package/dist/components/internal/Group.cjs +12 -9
  86. package/dist/components/internal/Group.cjs.map +1 -1
  87. package/dist/components/internal/Group.js +12 -9
  88. package/dist/components/internal/Group.js.map +1 -1
  89. package/dist/components/internal/GroupDescription.cjs +1 -5
  90. package/dist/components/internal/GroupDescription.cjs.map +1 -1
  91. package/dist/components/internal/GroupDescription.js +1 -5
  92. package/dist/components/internal/GroupDescription.js.map +1 -1
  93. package/dist/components/internal/Icon.cjs +18 -15
  94. package/dist/components/internal/Icon.cjs.map +1 -1
  95. package/dist/components/internal/Icon.js +18 -15
  96. package/dist/components/internal/Icon.js.map +1 -1
  97. package/dist/components/internal/InboxNotificationThread.cjs +38 -50
  98. package/dist/components/internal/InboxNotificationThread.cjs.map +1 -1
  99. package/dist/components/internal/InboxNotificationThread.js +38 -50
  100. package/dist/components/internal/InboxNotificationThread.js.map +1 -1
  101. package/dist/components/internal/List.cjs +9 -6
  102. package/dist/components/internal/List.cjs.map +1 -1
  103. package/dist/components/internal/List.js +9 -6
  104. package/dist/components/internal/List.js.map +1 -1
  105. package/dist/components/internal/Prose.cjs +7 -14
  106. package/dist/components/internal/Prose.cjs.map +1 -1
  107. package/dist/components/internal/Prose.js +7 -14
  108. package/dist/components/internal/Prose.js.map +1 -1
  109. package/dist/components/internal/Room.cjs +9 -6
  110. package/dist/components/internal/Room.cjs.map +1 -1
  111. package/dist/components/internal/Room.js +9 -6
  112. package/dist/components/internal/Room.js.map +1 -1
  113. package/dist/components/internal/Tooltip.cjs +43 -56
  114. package/dist/components/internal/Tooltip.cjs.map +1 -1
  115. package/dist/components/internal/Tooltip.js +43 -56
  116. package/dist/components/internal/Tooltip.js.map +1 -1
  117. package/dist/components/internal/User.cjs +12 -9
  118. package/dist/components/internal/User.cjs.map +1 -1
  119. package/dist/components/internal/User.js +12 -9
  120. package/dist/components/internal/User.js.map +1 -1
  121. package/dist/components.cjs +1 -4
  122. package/dist/components.cjs.map +1 -1
  123. package/dist/components.js +1 -4
  124. package/dist/components.js.map +1 -1
  125. package/dist/config.cjs +1 -10
  126. package/dist/config.cjs.map +1 -1
  127. package/dist/config.js +1 -10
  128. package/dist/config.js.map +1 -1
  129. package/dist/icons/ArrowCornerDownRight.cjs +1 -6
  130. package/dist/icons/ArrowCornerDownRight.cjs.map +1 -1
  131. package/dist/icons/ArrowCornerDownRight.js +1 -6
  132. package/dist/icons/ArrowCornerDownRight.js.map +1 -1
  133. package/dist/icons/ArrowCornerUpRight.cjs +1 -6
  134. package/dist/icons/ArrowCornerUpRight.cjs.map +1 -1
  135. package/dist/icons/ArrowCornerUpRight.js +1 -6
  136. package/dist/icons/ArrowCornerUpRight.js.map +1 -1
  137. package/dist/icons/ArrowDown.cjs +1 -6
  138. package/dist/icons/ArrowDown.cjs.map +1 -1
  139. package/dist/icons/ArrowDown.js +1 -6
  140. package/dist/icons/ArrowDown.js.map +1 -1
  141. package/dist/icons/ArrowUp.cjs +1 -6
  142. package/dist/icons/ArrowUp.cjs.map +1 -1
  143. package/dist/icons/ArrowUp.js +1 -6
  144. package/dist/icons/ArrowUp.js.map +1 -1
  145. package/dist/icons/Attachment.cjs +1 -6
  146. package/dist/icons/Attachment.cjs.map +1 -1
  147. package/dist/icons/Attachment.js +1 -6
  148. package/dist/icons/Attachment.js.map +1 -1
  149. package/dist/icons/Bell.cjs +1 -6
  150. package/dist/icons/Bell.cjs.map +1 -1
  151. package/dist/icons/Bell.js +1 -6
  152. package/dist/icons/Bell.js.map +1 -1
  153. package/dist/icons/BellCrossed.cjs +1 -6
  154. package/dist/icons/BellCrossed.cjs.map +1 -1
  155. package/dist/icons/BellCrossed.js +1 -6
  156. package/dist/icons/BellCrossed.js.map +1 -1
  157. package/dist/icons/Blockquote.cjs +1 -6
  158. package/dist/icons/Blockquote.cjs.map +1 -1
  159. package/dist/icons/Blockquote.js +1 -6
  160. package/dist/icons/Blockquote.js.map +1 -1
  161. package/dist/icons/Bold.cjs +1 -6
  162. package/dist/icons/Bold.cjs.map +1 -1
  163. package/dist/icons/Bold.js +1 -6
  164. package/dist/icons/Bold.js.map +1 -1
  165. package/dist/icons/Check.cjs +1 -6
  166. package/dist/icons/Check.cjs.map +1 -1
  167. package/dist/icons/Check.js +1 -6
  168. package/dist/icons/Check.js.map +1 -1
  169. package/dist/icons/CheckCircle.cjs +4 -13
  170. package/dist/icons/CheckCircle.cjs.map +1 -1
  171. package/dist/icons/CheckCircle.js +4 -13
  172. package/dist/icons/CheckCircle.js.map +1 -1
  173. package/dist/icons/CheckCircleFill.cjs +4 -15
  174. package/dist/icons/CheckCircleFill.cjs.map +1 -1
  175. package/dist/icons/CheckCircleFill.js +4 -15
  176. package/dist/icons/CheckCircleFill.js.map +1 -1
  177. package/dist/icons/ChevronDown.cjs +1 -6
  178. package/dist/icons/ChevronDown.cjs.map +1 -1
  179. package/dist/icons/ChevronDown.js +1 -6
  180. package/dist/icons/ChevronDown.js.map +1 -1
  181. package/dist/icons/ChevronLeft.cjs +1 -6
  182. package/dist/icons/ChevronLeft.cjs.map +1 -1
  183. package/dist/icons/ChevronLeft.js +1 -6
  184. package/dist/icons/ChevronLeft.js.map +1 -1
  185. package/dist/icons/ChevronRight.cjs +1 -6
  186. package/dist/icons/ChevronRight.cjs.map +1 -1
  187. package/dist/icons/ChevronRight.js +1 -6
  188. package/dist/icons/ChevronRight.js.map +1 -1
  189. package/dist/icons/ChevronUp.cjs +1 -6
  190. package/dist/icons/ChevronUp.cjs.map +1 -1
  191. package/dist/icons/ChevronUp.js +1 -6
  192. package/dist/icons/ChevronUp.js.map +1 -1
  193. package/dist/icons/Code.cjs +1 -6
  194. package/dist/icons/Code.cjs.map +1 -1
  195. package/dist/icons/Code.js +1 -6
  196. package/dist/icons/Code.js.map +1 -1
  197. package/dist/icons/Comment.cjs +1 -6
  198. package/dist/icons/Comment.cjs.map +1 -1
  199. package/dist/icons/Comment.js +1 -6
  200. package/dist/icons/Comment.js.map +1 -1
  201. package/dist/icons/Copy.cjs +4 -15
  202. package/dist/icons/Copy.cjs.map +1 -1
  203. package/dist/icons/Copy.js +4 -15
  204. package/dist/icons/Copy.js.map +1 -1
  205. package/dist/icons/Cross.cjs +4 -11
  206. package/dist/icons/Cross.cjs.map +1 -1
  207. package/dist/icons/Cross.js +4 -11
  208. package/dist/icons/Cross.js.map +1 -1
  209. package/dist/icons/CrossCircleFill.cjs +4 -15
  210. package/dist/icons/CrossCircleFill.cjs.map +1 -1
  211. package/dist/icons/CrossCircleFill.js +4 -15
  212. package/dist/icons/CrossCircleFill.js.map +1 -1
  213. package/dist/icons/Delete.cjs +1 -6
  214. package/dist/icons/Delete.cjs.map +1 -1
  215. package/dist/icons/Delete.js +1 -6
  216. package/dist/icons/Delete.js.map +1 -1
  217. package/dist/icons/Edit.cjs +1 -6
  218. package/dist/icons/Edit.cjs.map +1 -1
  219. package/dist/icons/Edit.js +1 -6
  220. package/dist/icons/Edit.js.map +1 -1
  221. package/dist/icons/Ellipsis.cjs +5 -21
  222. package/dist/icons/Ellipsis.cjs.map +1 -1
  223. package/dist/icons/Ellipsis.js +5 -21
  224. package/dist/icons/Ellipsis.js.map +1 -1
  225. package/dist/icons/Emoji.cjs +7 -24
  226. package/dist/icons/Emoji.cjs.map +1 -1
  227. package/dist/icons/Emoji.js +7 -24
  228. package/dist/icons/Emoji.js.map +1 -1
  229. package/dist/icons/EmojiPlus.cjs +8 -27
  230. package/dist/icons/EmojiPlus.cjs.map +1 -1
  231. package/dist/icons/EmojiPlus.js +8 -27
  232. package/dist/icons/EmojiPlus.js.map +1 -1
  233. package/dist/icons/Globe.cjs +4 -13
  234. package/dist/icons/Globe.cjs.map +1 -1
  235. package/dist/icons/Globe.js +4 -13
  236. package/dist/icons/Globe.js.map +1 -1
  237. package/dist/icons/H1.cjs +1 -6
  238. package/dist/icons/H1.cjs.map +1 -1
  239. package/dist/icons/H1.js +1 -6
  240. package/dist/icons/H1.js.map +1 -1
  241. package/dist/icons/H2.cjs +1 -6
  242. package/dist/icons/H2.cjs.map +1 -1
  243. package/dist/icons/H2.js +1 -6
  244. package/dist/icons/H2.js.map +1 -1
  245. package/dist/icons/H3.cjs +1 -6
  246. package/dist/icons/H3.cjs.map +1 -1
  247. package/dist/icons/H3.js +1 -6
  248. package/dist/icons/H3.js.map +1 -1
  249. package/dist/icons/Italic.cjs +1 -6
  250. package/dist/icons/Italic.cjs.map +1 -1
  251. package/dist/icons/Italic.js +1 -6
  252. package/dist/icons/Italic.js.map +1 -1
  253. package/dist/icons/Lengthen.cjs +1 -6
  254. package/dist/icons/Lengthen.cjs.map +1 -1
  255. package/dist/icons/Lengthen.js +1 -6
  256. package/dist/icons/Lengthen.js.map +1 -1
  257. package/dist/icons/ListOrdered.cjs +1 -6
  258. package/dist/icons/ListOrdered.cjs.map +1 -1
  259. package/dist/icons/ListOrdered.js +1 -6
  260. package/dist/icons/ListOrdered.js.map +1 -1
  261. package/dist/icons/ListUnordered.cjs +8 -29
  262. package/dist/icons/ListUnordered.cjs.map +1 -1
  263. package/dist/icons/ListUnordered.js +8 -29
  264. package/dist/icons/ListUnordered.js.map +1 -1
  265. package/dist/icons/Mention.cjs +4 -11
  266. package/dist/icons/Mention.cjs.map +1 -1
  267. package/dist/icons/Mention.js +4 -11
  268. package/dist/icons/Mention.js.map +1 -1
  269. package/dist/icons/MinusCircle.cjs +4 -13
  270. package/dist/icons/MinusCircle.cjs.map +1 -1
  271. package/dist/icons/MinusCircle.js +4 -13
  272. package/dist/icons/MinusCircle.js.map +1 -1
  273. package/dist/icons/QuestionMark.cjs +5 -16
  274. package/dist/icons/QuestionMark.cjs.map +1 -1
  275. package/dist/icons/QuestionMark.js +5 -16
  276. package/dist/icons/QuestionMark.js.map +1 -1
  277. package/dist/icons/Redo.cjs +4 -11
  278. package/dist/icons/Redo.cjs.map +1 -1
  279. package/dist/icons/Redo.js +4 -11
  280. package/dist/icons/Redo.js.map +1 -1
  281. package/dist/icons/Restore.cjs +4 -11
  282. package/dist/icons/Restore.cjs.map +1 -1
  283. package/dist/icons/Restore.js +4 -11
  284. package/dist/icons/Restore.js.map +1 -1
  285. package/dist/icons/Retry.cjs +4 -11
  286. package/dist/icons/Retry.cjs.map +1 -1
  287. package/dist/icons/Retry.js +4 -11
  288. package/dist/icons/Retry.js.map +1 -1
  289. package/dist/icons/Search.cjs +1 -6
  290. package/dist/icons/Search.cjs.map +1 -1
  291. package/dist/icons/Search.js +1 -6
  292. package/dist/icons/Search.js.map +1 -1
  293. package/dist/icons/Send.cjs +1 -6
  294. package/dist/icons/Send.cjs.map +1 -1
  295. package/dist/icons/Send.js +1 -6
  296. package/dist/icons/Send.js.map +1 -1
  297. package/dist/icons/Shorten.cjs +1 -6
  298. package/dist/icons/Shorten.cjs.map +1 -1
  299. package/dist/icons/Shorten.js +1 -6
  300. package/dist/icons/Shorten.js.map +1 -1
  301. package/dist/icons/Sparkles.cjs +1 -6
  302. package/dist/icons/Sparkles.cjs.map +1 -1
  303. package/dist/icons/Sparkles.js +1 -6
  304. package/dist/icons/Sparkles.js.map +1 -1
  305. package/dist/icons/SparklesText.cjs +4 -11
  306. package/dist/icons/SparklesText.cjs.map +1 -1
  307. package/dist/icons/SparklesText.js +4 -11
  308. package/dist/icons/SparklesText.js.map +1 -1
  309. package/dist/icons/Spinner.cjs +1 -7
  310. package/dist/icons/Spinner.cjs.map +1 -1
  311. package/dist/icons/Spinner.js +1 -7
  312. package/dist/icons/Spinner.js.map +1 -1
  313. package/dist/icons/Stop.cjs +1 -11
  314. package/dist/icons/Stop.cjs.map +1 -1
  315. package/dist/icons/Stop.js +1 -11
  316. package/dist/icons/Stop.js.map +1 -1
  317. package/dist/icons/Strikethrough.cjs +1 -6
  318. package/dist/icons/Strikethrough.cjs.map +1 -1
  319. package/dist/icons/Strikethrough.js +1 -6
  320. package/dist/icons/Strikethrough.js.map +1 -1
  321. package/dist/icons/Text.cjs +1 -6
  322. package/dist/icons/Text.cjs.map +1 -1
  323. package/dist/icons/Text.js +1 -6
  324. package/dist/icons/Text.js.map +1 -1
  325. package/dist/icons/Translate.cjs +4 -11
  326. package/dist/icons/Translate.cjs.map +1 -1
  327. package/dist/icons/Translate.js +4 -11
  328. package/dist/icons/Translate.js.map +1 -1
  329. package/dist/icons/Underline.cjs +1 -6
  330. package/dist/icons/Underline.cjs.map +1 -1
  331. package/dist/icons/Underline.js +1 -6
  332. package/dist/icons/Underline.js.map +1 -1
  333. package/dist/icons/Undo.cjs +4 -11
  334. package/dist/icons/Undo.cjs.map +1 -1
  335. package/dist/icons/Undo.js +4 -11
  336. package/dist/icons/Undo.js.map +1 -1
  337. package/dist/icons/User.cjs +1 -6
  338. package/dist/icons/User.cjs.map +1 -1
  339. package/dist/icons/User.js +1 -6
  340. package/dist/icons/User.js.map +1 -1
  341. package/dist/icons/Users.cjs +1 -6
  342. package/dist/icons/Users.cjs.map +1 -1
  343. package/dist/icons/Users.js +1 -6
  344. package/dist/icons/Users.js.map +1 -1
  345. package/dist/icons/Warning.cjs +4 -13
  346. package/dist/icons/Warning.cjs.map +1 -1
  347. package/dist/icons/Warning.js +4 -13
  348. package/dist/icons/Warning.js.map +1 -1
  349. package/dist/overrides.cjs +102 -150
  350. package/dist/overrides.cjs.map +1 -1
  351. package/dist/overrides.js +102 -150
  352. package/dist/overrides.js.map +1 -1
  353. package/dist/primitives/AiComposer/index.cjs +77 -65
  354. package/dist/primitives/AiComposer/index.cjs.map +1 -1
  355. package/dist/primitives/AiComposer/index.js +77 -65
  356. package/dist/primitives/AiComposer/index.js.map +1 -1
  357. package/dist/primitives/AiMessage/index.cjs +28 -49
  358. package/dist/primitives/AiMessage/index.cjs.map +1 -1
  359. package/dist/primitives/AiMessage/index.js +28 -49
  360. package/dist/primitives/AiMessage/index.js.map +1 -1
  361. package/dist/primitives/AiMessage/tool-invocation.cjs +5 -5
  362. package/dist/primitives/AiMessage/tool-invocation.cjs.map +1 -1
  363. package/dist/primitives/AiMessage/tool-invocation.js +5 -5
  364. package/dist/primitives/AiMessage/tool-invocation.js.map +1 -1
  365. package/dist/primitives/Collapsible/index.cjs +46 -34
  366. package/dist/primitives/Collapsible/index.cjs.map +1 -1
  367. package/dist/primitives/Collapsible/index.js +46 -34
  368. package/dist/primitives/Collapsible/index.js.map +1 -1
  369. package/dist/primitives/Comment/index.cjs +41 -64
  370. package/dist/primitives/Comment/index.cjs.map +1 -1
  371. package/dist/primitives/Comment/index.js +41 -64
  372. package/dist/primitives/Comment/index.js.map +1 -1
  373. package/dist/primitives/Composer/contexts.cjs.map +1 -1
  374. package/dist/primitives/Composer/contexts.js.map +1 -1
  375. package/dist/primitives/Composer/index.cjs +324 -312
  376. package/dist/primitives/Composer/index.cjs.map +1 -1
  377. package/dist/primitives/Composer/index.js +324 -312
  378. package/dist/primitives/Composer/index.js.map +1 -1
  379. package/dist/primitives/Composer/slate/plugins/auto-links.cjs.map +1 -1
  380. package/dist/primitives/Composer/slate/plugins/auto-links.js.map +1 -1
  381. package/dist/primitives/Composer/slate/plugins/custom-links.cjs.map +1 -1
  382. package/dist/primitives/Composer/slate/plugins/custom-links.js.map +1 -1
  383. package/dist/primitives/Composer/slate/plugins/mentions.cjs +1 -0
  384. package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -1
  385. package/dist/primitives/Composer/slate/plugins/mentions.js +1 -0
  386. package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -1
  387. package/dist/primitives/Composer/slate/plugins/paste.cjs +1 -0
  388. package/dist/primitives/Composer/slate/plugins/paste.cjs.map +1 -1
  389. package/dist/primitives/Composer/slate/plugins/paste.js +1 -0
  390. package/dist/primitives/Composer/slate/plugins/paste.js.map +1 -1
  391. package/dist/primitives/Composer/utils.cjs +3 -0
  392. package/dist/primitives/Composer/utils.cjs.map +1 -1
  393. package/dist/primitives/Composer/utils.js +3 -0
  394. package/dist/primitives/Composer/utils.js.map +1 -1
  395. package/dist/primitives/Duration.cjs +11 -7
  396. package/dist/primitives/Duration.cjs.map +1 -1
  397. package/dist/primitives/Duration.js +11 -7
  398. package/dist/primitives/Duration.js.map +1 -1
  399. package/dist/primitives/FileSize.cjs +2 -5
  400. package/dist/primitives/FileSize.cjs.map +1 -1
  401. package/dist/primitives/FileSize.js +2 -5
  402. package/dist/primitives/FileSize.js.map +1 -1
  403. package/dist/primitives/Markdown.cjs +80 -188
  404. package/dist/primitives/Markdown.cjs.map +1 -1
  405. package/dist/primitives/Markdown.js +80 -188
  406. package/dist/primitives/Markdown.js.map +1 -1
  407. package/dist/primitives/Timestamp.cjs +12 -7
  408. package/dist/primitives/Timestamp.cjs.map +1 -1
  409. package/dist/primitives/Timestamp.js +12 -7
  410. package/dist/primitives/Timestamp.js.map +1 -1
  411. package/dist/primitives/slate/utils/get-dom-range.cjs.map +1 -1
  412. package/dist/primitives/slate/utils/get-dom-range.js.map +1 -1
  413. package/dist/primitives/slate/utils/get-match-range.cjs.map +1 -1
  414. package/dist/primitives/slate/utils/get-match-range.js.map +1 -1
  415. package/dist/primitives/slate/utils/is-empty.cjs.map +1 -1
  416. package/dist/primitives/slate/utils/is-empty.js.map +1 -1
  417. package/dist/primitives/slate/utils/marks.cjs.map +1 -1
  418. package/dist/primitives/slate/utils/marks.js.map +1 -1
  419. package/dist/shared.cjs.map +1 -1
  420. package/dist/shared.js.map +1 -1
  421. package/dist/utils/ErrorBoundary.cjs +1 -6
  422. package/dist/utils/ErrorBoundary.cjs.map +1 -1
  423. package/dist/utils/ErrorBoundary.js +1 -6
  424. package/dist/utils/ErrorBoundary.js.map +1 -1
  425. package/dist/utils/Persist.cjs +1 -4
  426. package/dist/utils/Persist.cjs.map +1 -1
  427. package/dist/utils/Persist.js +1 -4
  428. package/dist/utils/Persist.js.map +1 -1
  429. package/dist/utils/Portal.cjs +1 -5
  430. package/dist/utils/Portal.cjs.map +1 -1
  431. package/dist/utils/Portal.js +1 -5
  432. package/dist/utils/Portal.js.map +1 -1
  433. package/dist/utils/format-file-size.cjs.map +1 -1
  434. package/dist/utils/format-file-size.js.map +1 -1
  435. package/dist/utils/is-key.cjs.map +1 -1
  436. package/dist/utils/is-key.js.map +1 -1
  437. package/dist/utils/pluralize.cjs.map +1 -1
  438. package/dist/utils/pluralize.js.map +1 -1
  439. package/dist/utils/use-controllable-state.cjs.map +1 -1
  440. package/dist/utils/use-controllable-state.js.map +1 -1
  441. package/dist/utils/use-rerender.cjs +3 -0
  442. package/dist/utils/use-rerender.cjs.map +1 -1
  443. package/dist/utils/use-rerender.js +3 -0
  444. package/dist/utils/use-rerender.js.map +1 -1
  445. package/dist/utils/use-visible.cjs.map +1 -1
  446. package/dist/utils/use-visible.js.map +1 -1
  447. package/dist/version.cjs +1 -1
  448. package/dist/version.cjs.map +1 -1
  449. package/dist/version.js +1 -1
  450. package/dist/version.js.map +1 -1
  451. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"AiTool.js","sources":["../../src/components/AiTool.tsx"],"sourcesContent":["import type {\n AiToolExecuteCallback,\n AiToolTypePack,\n JsonObject,\n NoInfr,\n} from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { Children, forwardRef, useCallback, useMemo } from \"react\";\n\nimport { Button } from \"../_private\";\nimport {\n CheckCircleFillIcon,\n ChevronRightIcon,\n CrossCircleFillIcon,\n MinusCircleIcon,\n SpinnerIcon,\n} from \"../icons\";\nimport {\n type AiToolConfirmationOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../overrides\";\nimport { useAiToolInvocationContext } from \"../primitives/AiMessage/contexts\";\nimport * as Collapsible from \"../primitives/Collapsible\";\nimport { cn } from \"../utils/cn\";\nimport { useSemiControllableState } from \"../utils/use-controllable-state\";\nimport { CodeBlock } from \"./internal/CodeBlock\";\n\nexport interface AiToolProps\n extends Omit<ComponentProps<\"div\">, \"title\" | \"children\"> {\n /**\n * The tool's title.\n *\n * By default, a human-readable version of the tool's name is used:\n * - `\"showTodo\"` → \"Show todo\"\n * - `\"get_weather\"` → \"Get weather\"\n */\n title?: ReactNode;\n\n /**\n * An optional icon displayed next to the title.\n */\n icon?: ReactNode;\n\n /**\n * The content shown in the tool.\n */\n children?: ReactNode;\n\n /**\n * The visual appearance of the tool.\n */\n variant?: \"block\" | \"minimal\";\n\n /**\n * Whether the content is currently collapsed.\n * It is not a traditional controlled value, as in if you set it to `true` it would only stay expanded.\n * Instead, it is \"semi-controlled\", meaning that setting it to `true` will expand it, but it\n * can still be collapsed/expanded by clicking on it.\n */\n collapsed?: boolean;\n\n /**\n * The event handler called when the content is collapsed or expanded by clicking on it.\n */\n onCollapsedChange?: (collapsed: boolean) => void;\n\n /**\n * Whether the content can be collapsed/expanded.\n * If set to `false`, clicking on it will have no effect.\n * If there's no content, this prop has no effect.\n */\n collapsible?: boolean;\n}\n\nexport type AiToolIconProps = ComponentProps<\"div\">;\n\nexport type AiToolInspectorProps = ComponentProps<\"div\">;\n\nexport interface AiToolConfirmationProps<\n A extends JsonObject,\n R extends JsonObject,\n> extends ComponentProps<\"div\"> {\n /**\n * The callback invoked when the user clicks the confirm button.\n */\n confirm: AiToolExecuteCallback<A, R>;\n\n /**\n * The callback invoked when the user clicks the cancel button.\n */\n cancel?: AiToolExecuteCallback<A, R>;\n\n /**\n * The visual appearance.\n */\n variant?: \"default\" | \"destructive\";\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides & AiToolConfirmationOverrides>;\n\n /**\n * The tool's result type, to be used with the `types` prop in the `render` method.\n *\n * @example\n * defineAiTool<{ value: number }>()({\n * // ...\n * render: ({ types }) => (\n * <AiTool.Confirmation\n * types={types}\n * confirm={() => {\n * return {\n * // Using `types` makes the result type-safe\n * // based on the tool's definition\n * data: { value: 123 },\n * };\n * }}\n * />\n * ),\n * })\n */\n types?: NoInfr<AiToolTypePack<A, R>>;\n}\n\nfunction AiToolIcon({ className, ...props }: AiToolIconProps) {\n return <div className={cn(\"lb-ai-tool-icon\", className)} {...props} />;\n}\n\nfunction AiToolInspector({ className, ...props }: AiToolInspectorProps) {\n const { args, partialArgs, result } = useAiToolInvocationContext();\n\n return (\n <div className={cn(\"lb-ai-tool-inspector\", className)} {...props}>\n <CodeBlock\n title=\"Arguments\"\n code={JSON.stringify(args ?? partialArgs, null, 2)}\n />\n {result !== undefined ? (\n <CodeBlock title=\"Result\" code={JSON.stringify(result, null, 2)} />\n ) : null}\n </div>\n );\n}\n\nfunction AiToolConfirmation<\n TPack extends AiToolTypePack,\n A extends JsonObject = TPack[\"A\"],\n R extends JsonObject = TPack[\"R\"],\n>({\n children,\n variant = \"default\",\n confirm,\n cancel,\n overrides,\n className,\n ...props\n}: AiToolConfirmationProps<A, R>) {\n const { stage, args, respond, name, invocationId } =\n useAiToolInvocationContext();\n const $ = useOverrides(overrides);\n\n const enabled = stage === \"executing\";\n\n const context = useMemo(() => ({ name, invocationId }), [name, invocationId]);\n\n const onConfirmClick = useCallback(async () => {\n if (enabled) {\n const result = await confirm(args as A, context);\n respond(result ?? undefined);\n }\n }, [enabled, args, confirm, respond, context]);\n\n const onCancelClick = useCallback(async () => {\n if (enabled) {\n if (cancel === undefined) {\n respond({ cancel: true });\n } else {\n const result = await cancel(args as A, context);\n respond(result ?? undefined);\n }\n }\n }, [enabled, args, cancel, respond, context]);\n\n // If there's no content and the tool has been executed (so there's no\n // confirmation UI displayed either), don't render anything.\n if (stage === \"executed\" && !children) {\n return null;\n }\n\n return (\n <div className={cn(\"lb-ai-tool-confirmation\", className)} {...props}>\n {children ? (\n <div className=\"lb-ai-tool-confirmation-content\">{children}</div>\n ) : null}\n {stage !== \"executed\" && (\n <div className=\"lb-ai-tool-confirmation-footer\">\n <div className=\"lb-ai-tool-confirmation-actions\">\n <Button\n disabled={!enabled}\n onClick={onCancelClick}\n variant=\"secondary\"\n >\n {$.AI_TOOL_CONFIRMATION_CANCEL}\n </Button>\n <Button\n disabled={!enabled}\n onClick={onConfirmClick}\n variant={variant === \"destructive\" ? \"destructive\" : \"primary\"}\n >\n {$.AI_TOOL_CONFIRMATION_CONFIRM}\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction prettifyString(string: string) {\n return (\n string\n // Convert camelCase to spaces\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n // Convert snake_case and kebab-case to spaces\n .replace(/[_-]+/g, \" \")\n // Collapse multiple following spaces\n .replace(/\\s+/g, \" \")\n // Trim leading and trailing spaces\n .trim()\n // Capitalize first word\n .toLowerCase()\n .replace(/^\\w/, (character) => character.toUpperCase())\n );\n}\n\n/**\n * A pre-built component which displays a tool call.\n *\n * By default, a human-readable version of the tool's name is used as a title:\n * - `\"showTodo\"` → \"Show todo\"\n * - `\"get_weather\"` → \"Get weather\"\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool />\n * ),\n * })\n *\n * It can be customized in various ways:\n * - adding an icon\n * - customizing the title (even dynamically)\n * - adding custom content inside it\n * - collapsing it conditionally\n * - etc.\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: ({ stage, result }) => (\n * <AiTool\n * icon=\"🔍\"\n *\n * // Override the default title based on the tool's stage\n * title={stage === \"executing\" ? \"Searching…\" : \"Search results\"}\n *\n * // Start open and automatically collapse after it is executed\n * // The user can still expand/collapse it manually at any time\n * collapsed={stage === \"executed\"}\n * >\n * <SearchResults data={result.data} />\n * </AiTool>\n * ),\n * })\n *\n * It also comes with a few built-in sub-components:\n * - `AiTool.Confirmation` to display a human-in-the-loop confirmation step\n * which can be accepted or cancelled by the user.\n * - `AiTool.Inspector` to display the tool's arguments and result which can\n * be useful during development.\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool>\n * <AiTool.Confirmation\n * // Use a destructive visual appearance\n * variant=\"destructive\"\n *\n * // The tool's arguments can be directly accessed like in `execute`\n * confirm={({ pageIds }) => {\n * const deletedPageTitles = pages\n * .filter((p) => pageIds.includes(p.id))\n * .map((page) => page.title);\n *\n * deletePages(pageIds);\n *\n * // This result will be available as `result` in the tool's `render` props\n * return { data: { deletedPageTitles } };\n * }}\n *\n * // If needed, `cancel={() => ...}` would work similarly\n * >\n * Do you want to delete these pages?\n * <PagesPreviews />\n * </AiTool.Confirmation>\n * </AiTool>\n * ),\n * })\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool>\n * <AiTool.Inspector />\n * </AiTool>\n * ),\n * })\n */\nexport const AiTool = Object.assign(\n forwardRef<HTMLDivElement, AiToolProps>(\n (\n {\n children,\n title,\n icon,\n collapsible,\n collapsed,\n onCollapsedChange,\n variant = \"block\",\n className,\n ...props\n },\n forwardedRef\n ) => {\n const {\n stage,\n result,\n name,\n [kInternal]: { execute, messageStatus },\n } = useAiToolInvocationContext();\n // Only mark the tool as pending visually (e.g. show a spinner, add a shimmer animation, etc.)\n // if it has an `execute` method and it isn't in the \"executed\" stage.\n const isVisuallyPending =\n execute !== undefined &&\n stage !== \"executed\" &&\n // If it's in the \"receiving\" stage, we also check that the outer message is still generating.\n (stage === \"receiving\" ? messageStatus === \"generating\" : true);\n const [semiControlledCollapsed, onSemiControlledCollapsed] =\n useSemiControllableState(collapsed ?? false, onCollapsedChange);\n // TODO: This check won't work for cases like:\n // <AiTool>\n // <ComponentThatRendersNull />\n // <ComponentThatAlsoRendersNull />\n // </AiTool>\n // One solution could be to check the DOM on every render with `useLayoutEffect`\n // to see if there's any actual content.\n // For now we're limiting the visual issues caused by the above by using CSS's\n // `:empty` pseudo-class to make the content 0px high if it's actually empty.\n const hasContent = Children.count(children) > 0;\n // If there's no content, the tool is never collapsible.\n const isCollapsible = hasContent ? (collapsible ?? true) : false;\n const resolvedTitle = useMemo(() => {\n return title ?? prettifyString(name);\n }, [title, name]);\n\n // `AiTool` uses \"collapsed\" instead of \"open\" (like the `Composer` component) because \"open\"\n // makes sense next to something called \"Collapsible\" but less so for something called \"AiTool\".\n const handleCollapsibleOpenChange = useCallback(\n (open: boolean) => {\n onSemiControlledCollapsed(!open);\n },\n [onSemiControlledCollapsed]\n );\n\n return (\n <Collapsible.Root\n ref={forwardedRef}\n className={cn(\n \"lb-collapsible lb-ai-tool\",\n `lb-ai-tool:variant-${variant}`,\n className\n )}\n {...props}\n // Regardless of `semiControlledCollapsed`, the collapsible is closed if there's no content.\n open={hasContent ? !semiControlledCollapsed : false}\n onOpenChange={handleCollapsibleOpenChange}\n disabled={!isCollapsible}\n data-result={result?.type}\n data-stage={stage}\n >\n <Collapsible.Trigger\n className={cn(\n \"lb-collapsible-trigger lb-ai-tool-header\",\n variant === \"minimal\" && isVisuallyPending && \"lb-ai-chat-pending\"\n )}\n >\n {icon ? (\n <div className=\"lb-ai-tool-header-icon-container\">{icon}</div>\n ) : null}\n <span className=\"lb-ai-tool-header-title\">{resolvedTitle}</span>\n {isCollapsible ? (\n <span className=\"lb-collapsible-chevron lb-icon-container\">\n <ChevronRightIcon />\n </span>\n ) : null}\n {variant !== \"minimal\" ? (\n <div className=\"lb-ai-tool-header-status\">\n {stage === \"executed\" ? (\n result.type === \"success\" ? (\n <CheckCircleFillIcon />\n ) : result.type === \"error\" ? (\n <CrossCircleFillIcon />\n ) : result.type === \"cancelled\" ? (\n <MinusCircleIcon />\n ) : null\n ) : isVisuallyPending ? (\n <SpinnerIcon />\n ) : null}\n </div>\n ) : null}\n </Collapsible.Trigger>\n\n {hasContent ? (\n <Collapsible.Content className=\"lb-collapsible-content lb-ai-tool-content-container\">\n <div className=\"lb-ai-tool-content\">{children}</div>\n </Collapsible.Content>\n ) : null}\n </Collapsible.Root>\n );\n }\n ),\n {\n /**\n * Display an icon in a container.\n *\n * @example\n * <AiTool\n * icon={\n * <AiTool.Icon>🔍</AiTool.Icon>\n * }\n * />\n */\n Icon: AiToolIcon,\n\n /**\n * Display the tool's arguments and result, which can be useful during\n * development.\n *\n * @example\n * <AiTool>\n * <AiTool.Inspector />\n * </AiTool>\n */\n Inspector: AiToolInspector,\n\n /**\n * Display a human-in-the-loop confirmation step which can be accepted\n * or cancelled by the user.\n *\n * The `confirm` and `cancel` callbacks work like `execute` in tool definitions: they can\n * perform side-effects, be async if needed, and return a result. The tool call will stay\n * pending until either `confirm` or `cancel` is called.\n *\n * @example\n * <AiTool>\n * <AiTool.Confirmation\n * // Use a destructive visual appearance\n * variant=\"destructive\"\n *\n * // The tool's arguments can be directly accessed like in `execute`\n * confirm={({ pageIds }) => {\n * const deletedPageTitles = pages\n * .filter((p) => pageIds.includes(p.id))\n * .map((page) => page.title);\n *\n * deletePages(pageIds);\n *\n * // This result will be available as `result` in the tool's `render` props\n * return { data: { deletedPageTitles } };\n * }}\n *\n * // If needed, `cancel={() => ...}` would work similarly\n * >\n * Do you want to delete these pages?\n * <PagesPreviews />\n * </AiTool.Confirmation>\n * </AiTool>\n */\n Confirmation: AiToolConfirmation,\n }\n);\n"],"names":["Collapsible.Root","Collapsible.Trigger","Collapsible.Content"],"mappings":"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"}
1
+ {"version":3,"file":"AiTool.js","sources":["../../src/components/AiTool.tsx"],"sourcesContent":["import type {\n AiToolExecuteCallback,\n AiToolTypePack,\n JsonObject,\n NoInfr,\n} from \"@liveblocks/core\";\nimport { kInternal } from \"@liveblocks/core\";\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { Children, forwardRef, useCallback, useMemo } from \"react\";\n\nimport { Button } from \"../_private\";\nimport {\n CheckCircleFillIcon,\n ChevronRightIcon,\n CrossCircleFillIcon,\n MinusCircleIcon,\n SpinnerIcon,\n} from \"../icons\";\nimport {\n type AiToolConfirmationOverrides,\n type GlobalOverrides,\n useOverrides,\n} from \"../overrides\";\nimport { useAiToolInvocationContext } from \"../primitives/AiMessage/contexts\";\nimport * as Collapsible from \"../primitives/Collapsible\";\nimport { cn } from \"../utils/cn\";\nimport { useSemiControllableState } from \"../utils/use-controllable-state\";\nimport { CodeBlock } from \"./internal/CodeBlock\";\n\nexport interface AiToolProps\n extends Omit<ComponentProps<\"div\">, \"title\" | \"children\"> {\n /**\n * The tool's title.\n *\n * By default, a human-readable version of the tool's name is used:\n * - `\"showTodo\"` → \"Show todo\"\n * - `\"get_weather\"` → \"Get weather\"\n */\n title?: ReactNode;\n\n /**\n * An optional icon displayed next to the title.\n */\n icon?: ReactNode;\n\n /**\n * The content shown in the tool.\n */\n children?: ReactNode;\n\n /**\n * The visual appearance of the tool.\n */\n variant?: \"block\" | \"minimal\";\n\n /**\n * Whether the content is currently collapsed.\n * It is not a traditional controlled value, as in if you set it to `true` it would only stay expanded.\n * Instead, it is \"semi-controlled\", meaning that setting it to `true` will expand it, but it\n * can still be collapsed/expanded by clicking on it.\n */\n collapsed?: boolean;\n\n /**\n * The event handler called when the content is collapsed or expanded by clicking on it.\n */\n onCollapsedChange?: (collapsed: boolean) => void;\n\n /**\n * Whether the content can be collapsed/expanded.\n * If set to `false`, clicking on it will have no effect.\n * If there's no content, this prop has no effect.\n */\n collapsible?: boolean;\n}\n\nexport type AiToolIconProps = ComponentProps<\"div\">;\n\nexport type AiToolInspectorProps = ComponentProps<\"div\">;\n\nexport interface AiToolConfirmationProps<\n A extends JsonObject,\n R extends JsonObject,\n> extends ComponentProps<\"div\"> {\n /**\n * The callback invoked when the user clicks the confirm button.\n */\n confirm: AiToolExecuteCallback<A, R>;\n\n /**\n * The callback invoked when the user clicks the cancel button.\n */\n cancel?: AiToolExecuteCallback<A, R>;\n\n /**\n * The visual appearance.\n */\n variant?: \"default\" | \"destructive\";\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides & AiToolConfirmationOverrides>;\n\n /**\n * The tool's result type, to be used with the `types` prop in the `render` method.\n *\n * @example\n * defineAiTool<{ value: number }>()({\n * // ...\n * render: ({ types }) => (\n * <AiTool.Confirmation\n * types={types}\n * confirm={() => {\n * return {\n * // Using `types` makes the result type-safe\n * // based on the tool's definition\n * data: { value: 123 },\n * };\n * }}\n * />\n * ),\n * })\n */\n types?: NoInfr<AiToolTypePack<A, R>>;\n}\n\nfunction AiToolIcon({ className, ...props }: AiToolIconProps) {\n return <div className={cn(\"lb-ai-tool-icon\", className)} {...props} />;\n}\n\nfunction AiToolInspector({ className, ...props }: AiToolInspectorProps) {\n const { args, partialArgs, result } = useAiToolInvocationContext();\n\n return (\n <div className={cn(\"lb-ai-tool-inspector\", className)} {...props}>\n <CodeBlock\n title=\"Arguments\"\n code={JSON.stringify(args ?? partialArgs, null, 2)}\n />\n {result !== undefined ? (\n <CodeBlock title=\"Result\" code={JSON.stringify(result, null, 2)} />\n ) : null}\n </div>\n );\n}\n\nfunction AiToolConfirmation<\n TPack extends AiToolTypePack,\n A extends JsonObject = TPack[\"A\"],\n R extends JsonObject = TPack[\"R\"],\n>({\n children,\n variant = \"default\",\n confirm,\n cancel,\n overrides,\n className,\n ...props\n}: AiToolConfirmationProps<A, R>) {\n const { stage, args, respond, name, invocationId } =\n useAiToolInvocationContext();\n const $ = useOverrides(overrides);\n\n const enabled = stage === \"executing\";\n\n const context = useMemo(() => ({ name, invocationId }), [name, invocationId]);\n\n const onConfirmClick = useCallback(async () => {\n if (enabled) {\n const result = await confirm(args as A, context);\n respond(result ?? undefined);\n }\n }, [enabled, args, confirm, respond, context]);\n\n const onCancelClick = useCallback(async () => {\n if (enabled) {\n if (cancel === undefined) {\n respond({ cancel: true });\n } else {\n const result = await cancel(args as A, context);\n respond(result ?? undefined);\n }\n }\n }, [enabled, args, cancel, respond, context]);\n\n // If there's no content and the tool has been executed (so there's no\n // confirmation UI displayed either), don't render anything.\n if (stage === \"executed\" && !children) {\n return null;\n }\n\n return (\n <div className={cn(\"lb-ai-tool-confirmation\", className)} {...props}>\n {children ? (\n <div className=\"lb-ai-tool-confirmation-content\">{children}</div>\n ) : null}\n {stage !== \"executed\" && (\n <div className=\"lb-ai-tool-confirmation-footer\">\n <div className=\"lb-ai-tool-confirmation-actions\">\n <Button\n disabled={!enabled}\n onClick={onCancelClick}\n variant=\"secondary\"\n >\n {$.AI_TOOL_CONFIRMATION_CANCEL}\n </Button>\n <Button\n disabled={!enabled}\n onClick={onConfirmClick}\n variant={variant === \"destructive\" ? \"destructive\" : \"primary\"}\n >\n {$.AI_TOOL_CONFIRMATION_CONFIRM}\n </Button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nfunction prettifyString(string: string) {\n return (\n string\n // Convert camelCase to spaces\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n // Convert snake_case and kebab-case to spaces\n .replace(/[_-]+/g, \" \")\n // Collapse multiple following spaces\n .replace(/\\s+/g, \" \")\n // Trim leading and trailing spaces\n .trim()\n // Capitalize first word\n .toLowerCase()\n .replace(/^\\w/, (character) => character.toUpperCase())\n );\n}\n\n/**\n * A pre-built component which displays a tool call.\n *\n * By default, a human-readable version of the tool's name is used as a title:\n * - `\"showTodo\"` → \"Show todo\"\n * - `\"get_weather\"` → \"Get weather\"\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool />\n * ),\n * })\n *\n * It can be customized in various ways:\n * - adding an icon\n * - customizing the title (even dynamically)\n * - adding custom content inside it\n * - collapsing it conditionally\n * - etc.\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: ({ stage, result }) => (\n * <AiTool\n * icon=\"🔍\"\n *\n * // Override the default title based on the tool's stage\n * title={stage === \"executing\" ? \"Searching…\" : \"Search results\"}\n *\n * // Start open and automatically collapse after it is executed\n * // The user can still expand/collapse it manually at any time\n * collapsed={stage === \"executed\"}\n * >\n * <SearchResults data={result.data} />\n * </AiTool>\n * ),\n * })\n *\n * It also comes with a few built-in sub-components:\n * - `AiTool.Confirmation` to display a human-in-the-loop confirmation step\n * which can be accepted or cancelled by the user.\n * - `AiTool.Inspector` to display the tool's arguments and result which can\n * be useful during development.\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool>\n * <AiTool.Confirmation\n * // Use a destructive visual appearance\n * variant=\"destructive\"\n *\n * // The tool's arguments can be directly accessed like in `execute`\n * confirm={({ pageIds }) => {\n * const deletedPageTitles = pages\n * .filter((p) => pageIds.includes(p.id))\n * .map((page) => page.title);\n *\n * deletePages(pageIds);\n *\n * // This result will be available as `result` in the tool's `render` props\n * return { data: { deletedPageTitles } };\n * }}\n *\n * // If needed, `cancel={() => ...}` would work similarly\n * >\n * Do you want to delete these pages?\n * <PagesPreviews />\n * </AiTool.Confirmation>\n * </AiTool>\n * ),\n * })\n *\n * @example\n * defineAiTool()({\n * // ...\n * render: () => (\n * <AiTool>\n * <AiTool.Inspector />\n * </AiTool>\n * ),\n * })\n */\nexport const AiTool = Object.assign(\n forwardRef<HTMLDivElement, AiToolProps>(\n (\n {\n children,\n title,\n icon,\n collapsible,\n collapsed,\n onCollapsedChange,\n variant = \"block\",\n className,\n ...props\n },\n forwardedRef\n ) => {\n const {\n stage,\n result,\n name,\n [kInternal]: { execute, messageStatus },\n } = useAiToolInvocationContext();\n // Only mark the tool as pending visually (e.g. show a spinner, add a shimmer animation, etc.)\n // if it has an `execute` method and it isn't in the \"executed\" stage.\n const isVisuallyPending =\n execute !== undefined &&\n stage !== \"executed\" &&\n // If it's in the \"receiving\" stage, we also check that the outer message is still generating.\n (stage === \"receiving\" ? messageStatus === \"generating\" : true);\n const [semiControlledCollapsed, onSemiControlledCollapsed] =\n useSemiControllableState(collapsed ?? false, onCollapsedChange);\n // TODO: This check won't work for cases like:\n // <AiTool>\n // <ComponentThatRendersNull />\n // <ComponentThatAlsoRendersNull />\n // </AiTool>\n // One solution could be to check the DOM on every render with `useLayoutEffect`\n // to see if there's any actual content.\n // For now we're limiting the visual issues caused by the above by using CSS's\n // `:empty` pseudo-class to make the content 0px high if it's actually empty.\n const hasContent = Children.count(children) > 0;\n // If there's no content, the tool is never collapsible.\n const isCollapsible = hasContent ? (collapsible ?? true) : false;\n const resolvedTitle = useMemo(() => {\n return title ?? prettifyString(name);\n }, [title, name]);\n\n // `AiTool` uses \"collapsed\" instead of \"open\" (like the `Composer` component) because \"open\"\n // makes sense next to something called \"Collapsible\" but less so for something called \"AiTool\".\n const handleCollapsibleOpenChange = useCallback(\n (open: boolean) => {\n onSemiControlledCollapsed(!open);\n },\n [onSemiControlledCollapsed]\n );\n\n return (\n <Collapsible.Root\n ref={forwardedRef}\n className={cn(\n \"lb-collapsible lb-ai-tool\",\n `lb-ai-tool:variant-${variant}`,\n className\n )}\n {...props}\n // Regardless of `semiControlledCollapsed`, the collapsible is closed if there's no content.\n open={hasContent ? !semiControlledCollapsed : false}\n onOpenChange={handleCollapsibleOpenChange}\n disabled={!isCollapsible}\n data-result={result?.type}\n data-stage={stage}\n >\n <Collapsible.Trigger\n className={cn(\n \"lb-collapsible-trigger lb-ai-tool-header\",\n variant === \"minimal\" && isVisuallyPending && \"lb-ai-chat-pending\"\n )}\n >\n {icon ? (\n <div className=\"lb-ai-tool-header-icon-container\">{icon}</div>\n ) : null}\n <span className=\"lb-ai-tool-header-title\">{resolvedTitle}</span>\n {isCollapsible ? (\n <span className=\"lb-collapsible-chevron lb-icon-container\">\n <ChevronRightIcon />\n </span>\n ) : null}\n {variant !== \"minimal\" ? (\n <div className=\"lb-ai-tool-header-status\">\n {stage === \"executed\" ? (\n result.type === \"success\" ? (\n <CheckCircleFillIcon />\n ) : result.type === \"error\" ? (\n <CrossCircleFillIcon />\n ) : result.type === \"cancelled\" ? (\n <MinusCircleIcon />\n ) : null\n ) : isVisuallyPending ? (\n <SpinnerIcon />\n ) : null}\n </div>\n ) : null}\n </Collapsible.Trigger>\n\n {hasContent ? (\n <Collapsible.Content className=\"lb-collapsible-content lb-ai-tool-content-container\">\n <div className=\"lb-ai-tool-content\">{children}</div>\n </Collapsible.Content>\n ) : null}\n </Collapsible.Root>\n );\n }\n ),\n {\n /**\n * Display an icon in a container.\n *\n * @example\n * <AiTool\n * icon={\n * <AiTool.Icon>🔍</AiTool.Icon>\n * }\n * />\n */\n Icon: AiToolIcon,\n\n /**\n * Display the tool's arguments and result, which can be useful during\n * development.\n *\n * @example\n * <AiTool>\n * <AiTool.Inspector />\n * </AiTool>\n */\n Inspector: AiToolInspector,\n\n /**\n * Display a human-in-the-loop confirmation step which can be accepted\n * or cancelled by the user.\n *\n * The `confirm` and `cancel` callbacks work like `execute` in tool definitions: they can\n * perform side-effects, be async if needed, and return a result. The tool call will stay\n * pending until either `confirm` or `cancel` is called.\n *\n * @example\n * <AiTool>\n * <AiTool.Confirmation\n * // Use a destructive visual appearance\n * variant=\"destructive\"\n *\n * // The tool's arguments can be directly accessed like in `execute`\n * confirm={({ pageIds }) => {\n * const deletedPageTitles = pages\n * .filter((p) => pageIds.includes(p.id))\n * .map((page) => page.title);\n *\n * deletePages(pageIds);\n *\n * // This result will be available as `result` in the tool's `render` props\n * return { data: { deletedPageTitles } };\n * }}\n *\n * // If needed, `cancel={() => ...}` would work similarly\n * >\n * Do you want to delete these pages?\n * <PagesPreviews />\n * </AiTool.Confirmation>\n * </AiTool>\n */\n Confirmation: AiToolConfirmation,\n }\n);\n"],"names":["Collapsible.Root","Collapsible.Trigger","Collapsible.Content"],"mappings":"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"}