@liveblocks/react-ui 2.25.0-aiprivatebeta1 → 2.25.0-aiprivatebeta11

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 (273) hide show
  1. package/dist/_private/index.cjs +18 -10
  2. package/dist/_private/index.cjs.map +1 -1
  3. package/dist/_private/index.d.cts +204 -172
  4. package/dist/_private/index.d.ts +204 -172
  5. package/dist/_private/index.js +12 -5
  6. package/dist/_private/index.js.map +1 -1
  7. package/dist/components/AiChat.cjs +179 -0
  8. package/dist/components/AiChat.cjs.map +1 -0
  9. package/dist/components/AiChat.js +177 -0
  10. package/dist/components/AiChat.js.map +1 -0
  11. package/dist/components/AiTool.cjs +164 -0
  12. package/dist/components/AiTool.cjs.map +1 -0
  13. package/dist/components/AiTool.js +162 -0
  14. package/dist/components/AiTool.js.map +1 -0
  15. package/dist/components/Comment.cjs +7 -5
  16. package/dist/components/Comment.cjs.map +1 -1
  17. package/dist/components/Comment.js +7 -5
  18. package/dist/components/Comment.js.map +1 -1
  19. package/dist/components/Composer.cjs +1 -2
  20. package/dist/components/Composer.cjs.map +1 -1
  21. package/dist/components/Composer.js +1 -2
  22. package/dist/components/Composer.js.map +1 -1
  23. package/dist/components/InboxNotificationList.cjs +11 -3
  24. package/dist/components/InboxNotificationList.cjs.map +1 -1
  25. package/dist/components/InboxNotificationList.js +12 -4
  26. package/dist/components/InboxNotificationList.js.map +1 -1
  27. package/dist/components/Thread.cjs +3 -3
  28. package/dist/components/Thread.cjs.map +1 -1
  29. package/dist/components/Thread.js +3 -3
  30. package/dist/components/Thread.js.map +1 -1
  31. package/dist/components/internal/AiChatAssistantMessage.cjs +74 -291
  32. package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
  33. package/dist/components/internal/AiChatAssistantMessage.js +76 -293
  34. package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
  35. package/dist/components/internal/AiChatComposer.cjs +58 -282
  36. package/dist/components/internal/AiChatComposer.cjs.map +1 -1
  37. package/dist/components/internal/AiChatComposer.js +63 -283
  38. package/dist/components/internal/AiChatComposer.js.map +1 -1
  39. package/dist/components/internal/AiChatUserMessage.cjs +26 -169
  40. package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
  41. package/dist/components/internal/AiChatUserMessage.js +28 -171
  42. package/dist/components/internal/AiChatUserMessage.js.map +1 -1
  43. package/dist/components/internal/Button.cjs.map +1 -1
  44. package/dist/components/internal/Button.js.map +1 -1
  45. package/dist/components/internal/CodeBlock.cjs +72 -0
  46. package/dist/components/internal/CodeBlock.cjs.map +1 -0
  47. package/dist/components/internal/CodeBlock.js +70 -0
  48. package/dist/components/internal/CodeBlock.js.map +1 -0
  49. package/dist/components/internal/Emoji.cjs +12 -4
  50. package/dist/components/internal/Emoji.cjs.map +1 -1
  51. package/dist/components/internal/Emoji.js +12 -4
  52. package/dist/components/internal/Emoji.js.map +1 -1
  53. package/dist/components/internal/Prose.cjs +37 -0
  54. package/dist/components/internal/Prose.cjs.map +1 -0
  55. package/dist/components/internal/Prose.js +35 -0
  56. package/dist/components/internal/Prose.js.map +1 -0
  57. package/dist/constants.cjs +2 -0
  58. package/dist/constants.cjs.map +1 -1
  59. package/dist/constants.js +2 -1
  60. package/dist/constants.js.map +1 -1
  61. package/dist/icon.cjs +6 -0
  62. package/dist/icon.cjs.map +1 -1
  63. package/dist/icon.js +3 -0
  64. package/dist/icon.js.map +1 -1
  65. package/dist/icons/{Resolve.cjs → CheckCircle.cjs} +3 -3
  66. package/dist/icons/CheckCircle.cjs.map +1 -0
  67. package/dist/icons/{Resolve.js → CheckCircle.js} +3 -3
  68. package/dist/icons/CheckCircle.js.map +1 -0
  69. package/dist/icons/{Resolved.cjs → CheckCircleFill.cjs} +3 -3
  70. package/dist/icons/CheckCircleFill.cjs.map +1 -0
  71. package/dist/icons/{Resolved.js → CheckCircleFill.js} +3 -3
  72. package/dist/icons/CheckCircleFill.js.map +1 -0
  73. package/dist/icons/Copy.cjs +8 -9
  74. package/dist/icons/Copy.cjs.map +1 -1
  75. package/dist/icons/Copy.js +8 -9
  76. package/dist/icons/Copy.js.map +1 -1
  77. package/dist/icons/Retry.cjs +21 -0
  78. package/dist/icons/Retry.cjs.map +1 -0
  79. package/dist/icons/Retry.js +19 -0
  80. package/dist/icons/Retry.js.map +1 -0
  81. package/dist/icons/index.cjs +8 -4
  82. package/dist/icons/index.cjs.map +1 -1
  83. package/dist/icons/index.js +4 -2
  84. package/dist/icons/index.js.map +1 -1
  85. package/dist/index.cjs +3 -1
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.d.cts +102 -43
  88. package/dist/index.d.ts +102 -43
  89. package/dist/index.js +2 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/overrides.cjs +6 -12
  92. package/dist/overrides.cjs.map +1 -1
  93. package/dist/overrides.js +6 -12
  94. package/dist/overrides.js.map +1 -1
  95. package/dist/primitives/AiChatComposer/index.cjs +202 -0
  96. package/dist/primitives/AiChatComposer/index.cjs.map +1 -0
  97. package/dist/primitives/AiChatComposer/index.js +195 -0
  98. package/dist/primitives/AiChatComposer/index.js.map +1 -0
  99. package/dist/primitives/AiMessage/contexts.cjs +18 -0
  100. package/dist/primitives/AiMessage/contexts.cjs.map +1 -0
  101. package/dist/primitives/AiMessage/contexts.js +15 -0
  102. package/dist/primitives/AiMessage/contexts.js.map +1 -0
  103. package/dist/primitives/AiMessage/index.cjs +134 -0
  104. package/dist/primitives/AiMessage/index.cjs.map +1 -0
  105. package/dist/primitives/AiMessage/index.js +132 -0
  106. package/dist/primitives/AiMessage/index.js.map +1 -0
  107. package/dist/primitives/Collapsible/index.cjs +127 -0
  108. package/dist/primitives/Collapsible/index.cjs.map +1 -0
  109. package/dist/primitives/Collapsible/index.js +123 -0
  110. package/dist/primitives/Collapsible/index.js.map +1 -0
  111. package/dist/primitives/Comment/index.cjs +2 -2
  112. package/dist/primitives/Comment/index.cjs.map +1 -1
  113. package/dist/primitives/Comment/index.js +1 -1
  114. package/dist/primitives/Comment/index.js.map +1 -1
  115. package/dist/primitives/Composer/index.cjs +19 -14
  116. package/dist/primitives/Composer/index.cjs.map +1 -1
  117. package/dist/primitives/Composer/index.js +18 -13
  118. package/dist/primitives/Composer/index.js.map +1 -1
  119. package/dist/{slate → primitives/Composer/slate}/plugins/auto-formatting.cjs +3 -3
  120. package/dist/primitives/Composer/slate/plugins/auto-formatting.cjs.map +1 -0
  121. package/dist/{slate → primitives/Composer/slate}/plugins/auto-formatting.js +3 -3
  122. package/dist/primitives/Composer/slate/plugins/auto-formatting.js.map +1 -0
  123. package/dist/{slate → primitives/Composer/slate}/plugins/auto-links.cjs +7 -2
  124. package/dist/primitives/Composer/slate/plugins/auto-links.cjs.map +1 -0
  125. package/dist/{slate → primitives/Composer/slate}/plugins/auto-links.js +8 -3
  126. package/dist/primitives/Composer/slate/plugins/auto-links.js.map +1 -0
  127. package/dist/{slate → primitives/Composer/slate}/plugins/custom-links.cjs +8 -3
  128. package/dist/primitives/Composer/slate/plugins/custom-links.cjs.map +1 -0
  129. package/dist/{slate → primitives/Composer/slate}/plugins/custom-links.js +9 -4
  130. package/dist/primitives/Composer/slate/plugins/custom-links.js.map +1 -0
  131. package/dist/{slate → primitives/Composer/slate}/plugins/mentions.cjs +9 -10
  132. package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -0
  133. package/dist/{slate → primitives/Composer/slate}/plugins/mentions.js +6 -6
  134. package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -0
  135. package/dist/{slate → primitives/Composer/slate}/plugins/paste.cjs +1 -1
  136. package/dist/primitives/Composer/slate/plugins/paste.cjs.map +1 -0
  137. package/dist/{slate → primitives/Composer/slate}/plugins/paste.js +1 -1
  138. package/dist/primitives/Composer/slate/plugins/paste.js.map +1 -0
  139. package/dist/primitives/Composer/utils.cjs +4 -4
  140. package/dist/primitives/Composer/utils.cjs.map +1 -1
  141. package/dist/primitives/Composer/utils.js +4 -4
  142. package/dist/primitives/Composer/utils.js.map +1 -1
  143. package/dist/primitives/{internal/Markdown.cjs → Markdown.cjs} +150 -83
  144. package/dist/primitives/Markdown.cjs.map +1 -0
  145. package/dist/primitives/{internal/Markdown.js → Markdown.js} +151 -83
  146. package/dist/primitives/Markdown.js.map +1 -0
  147. package/dist/primitives/index.cjs +4 -9
  148. package/dist/primitives/index.cjs.map +1 -1
  149. package/dist/primitives/index.d.cts +4 -110
  150. package/dist/primitives/index.d.ts +4 -110
  151. package/dist/primitives/index.js +0 -1
  152. package/dist/primitives/index.js.map +1 -1
  153. package/dist/primitives/slate/plugins/empty-clear-formatting.cjs.map +1 -0
  154. package/dist/primitives/slate/plugins/empty-clear-formatting.js.map +1 -0
  155. package/dist/{slate → primitives/slate}/plugins/normalize.cjs +0 -5
  156. package/dist/primitives/slate/plugins/normalize.cjs.map +1 -0
  157. package/dist/{slate → primitives/slate}/plugins/normalize.js +0 -5
  158. package/dist/primitives/slate/plugins/normalize.js.map +1 -0
  159. package/dist/primitives/slate/utils/get-character.cjs.map +1 -0
  160. package/dist/primitives/slate/utils/get-character.js.map +1 -0
  161. package/dist/primitives/slate/utils/get-dom-range.cjs.map +1 -0
  162. package/dist/primitives/slate/utils/get-dom-range.js.map +1 -0
  163. package/dist/primitives/slate/utils/get-match-range.cjs.map +1 -0
  164. package/dist/primitives/slate/utils/get-match-range.js.map +1 -0
  165. package/dist/primitives/slate/utils/is-empty-string.cjs.map +1 -0
  166. package/dist/primitives/slate/utils/is-empty-string.js.map +1 -0
  167. package/dist/primitives/slate/utils/is-empty.cjs.map +1 -0
  168. package/dist/primitives/slate/utils/is-empty.js.map +1 -0
  169. package/dist/primitives/slate/utils/is-text.cjs.map +1 -0
  170. package/dist/primitives/slate/utils/is-text.js.map +1 -0
  171. package/dist/primitives/slate/utils/is-whitespace-character.cjs.map +1 -0
  172. package/dist/primitives/slate/utils/is-whitespace-character.js.map +1 -0
  173. package/dist/{slate → primitives/slate}/utils/marks.cjs +9 -9
  174. package/dist/primitives/slate/utils/marks.cjs.map +1 -0
  175. package/dist/{slate → primitives/slate}/utils/marks.js +9 -9
  176. package/dist/primitives/slate/utils/marks.js.map +1 -0
  177. package/dist/primitives/slate/utils/selection-contains-inlines.cjs.map +1 -0
  178. package/dist/primitives/slate/utils/selection-contains-inlines.js.map +1 -0
  179. package/dist/utils/ErrorBoundary.cjs +48 -0
  180. package/dist/utils/ErrorBoundary.cjs.map +1 -0
  181. package/dist/utils/ErrorBoundary.js +45 -0
  182. package/dist/utils/ErrorBoundary.js.map +1 -0
  183. package/dist/utils/use-visible.cjs +65 -45
  184. package/dist/utils/use-visible.cjs.map +1 -1
  185. package/dist/utils/use-visible.js +66 -46
  186. package/dist/utils/use-visible.js.map +1 -1
  187. package/dist/version.cjs +1 -1
  188. package/dist/version.cjs.map +1 -1
  189. package/dist/version.js +1 -1
  190. package/dist/version.js.map +1 -1
  191. package/package.json +18 -6
  192. package/src/styles/constants.css +1 -1
  193. package/src/styles/dark/index.css +7 -3
  194. package/src/styles/index.css +640 -307
  195. package/src/styles/utils.css +8 -3
  196. package/styles/dark/attributes.css +1 -1
  197. package/styles/dark/attributes.css.map +1 -1
  198. package/styles/dark/media-query.css +1 -1
  199. package/styles/dark/media-query.css.map +1 -1
  200. package/styles.css +1 -1
  201. package/styles.css.map +1 -1
  202. package/dist/components/AiChat/AiChat.cjs +0 -211
  203. package/dist/components/AiChat/AiChat.cjs.map +0 -1
  204. package/dist/components/AiChat/AiChat.js +0 -209
  205. package/dist/components/AiChat/AiChat.js.map +0 -1
  206. package/dist/icons/Resolve.cjs.map +0 -1
  207. package/dist/icons/Resolve.js.map +0 -1
  208. package/dist/icons/Resolved.cjs.map +0 -1
  209. package/dist/icons/Resolved.js.map +0 -1
  210. package/dist/primitives/Chat/Composer/index.cjs +0 -323
  211. package/dist/primitives/Chat/Composer/index.cjs.map +0 -1
  212. package/dist/primitives/Chat/Composer/index.js +0 -315
  213. package/dist/primitives/Chat/Composer/index.js.map +0 -1
  214. package/dist/primitives/internal/Collapsible.cjs +0 -99
  215. package/dist/primitives/internal/Collapsible.cjs.map +0 -1
  216. package/dist/primitives/internal/Collapsible.js +0 -95
  217. package/dist/primitives/internal/Collapsible.js.map +0 -1
  218. package/dist/primitives/internal/Emoji.cjs +0 -32
  219. package/dist/primitives/internal/Emoji.cjs.map +0 -1
  220. package/dist/primitives/internal/Emoji.js +0 -30
  221. package/dist/primitives/internal/Emoji.js.map +0 -1
  222. package/dist/primitives/internal/Markdown.cjs.map +0 -1
  223. package/dist/primitives/internal/Markdown.js.map +0 -1
  224. package/dist/slate/plugins/auto-formatting.cjs.map +0 -1
  225. package/dist/slate/plugins/auto-formatting.js.map +0 -1
  226. package/dist/slate/plugins/auto-links.cjs.map +0 -1
  227. package/dist/slate/plugins/auto-links.js.map +0 -1
  228. package/dist/slate/plugins/custom-links.cjs.map +0 -1
  229. package/dist/slate/plugins/custom-links.js.map +0 -1
  230. package/dist/slate/plugins/empty-clear-formatting.cjs.map +0 -1
  231. package/dist/slate/plugins/empty-clear-formatting.js.map +0 -1
  232. package/dist/slate/plugins/mentions.cjs.map +0 -1
  233. package/dist/slate/plugins/mentions.js.map +0 -1
  234. package/dist/slate/plugins/normalize.cjs.map +0 -1
  235. package/dist/slate/plugins/normalize.js.map +0 -1
  236. package/dist/slate/plugins/paste.cjs.map +0 -1
  237. package/dist/slate/plugins/paste.js.map +0 -1
  238. package/dist/slate/utils/get-character.cjs.map +0 -1
  239. package/dist/slate/utils/get-character.js.map +0 -1
  240. package/dist/slate/utils/get-dom-range.cjs.map +0 -1
  241. package/dist/slate/utils/get-dom-range.js.map +0 -1
  242. package/dist/slate/utils/get-match-range.cjs.map +0 -1
  243. package/dist/slate/utils/get-match-range.js.map +0 -1
  244. package/dist/slate/utils/is-empty-string.cjs.map +0 -1
  245. package/dist/slate/utils/is-empty-string.js.map +0 -1
  246. package/dist/slate/utils/is-empty.cjs.map +0 -1
  247. package/dist/slate/utils/is-empty.js.map +0 -1
  248. package/dist/slate/utils/is-text.cjs.map +0 -1
  249. package/dist/slate/utils/is-text.js.map +0 -1
  250. package/dist/slate/utils/is-whitespace-character.cjs.map +0 -1
  251. package/dist/slate/utils/is-whitespace-character.js.map +0 -1
  252. package/dist/slate/utils/marks.cjs.map +0 -1
  253. package/dist/slate/utils/marks.js.map +0 -1
  254. package/dist/slate/utils/selection-contains-inlines.cjs.map +0 -1
  255. package/dist/slate/utils/selection-contains-inlines.js.map +0 -1
  256. /package/dist/{slate → primitives/slate}/plugins/empty-clear-formatting.cjs +0 -0
  257. /package/dist/{slate → primitives/slate}/plugins/empty-clear-formatting.js +0 -0
  258. /package/dist/{slate → primitives/slate}/utils/get-character.cjs +0 -0
  259. /package/dist/{slate → primitives/slate}/utils/get-character.js +0 -0
  260. /package/dist/{slate → primitives/slate}/utils/get-dom-range.cjs +0 -0
  261. /package/dist/{slate → primitives/slate}/utils/get-dom-range.js +0 -0
  262. /package/dist/{slate → primitives/slate}/utils/get-match-range.cjs +0 -0
  263. /package/dist/{slate → primitives/slate}/utils/get-match-range.js +0 -0
  264. /package/dist/{slate → primitives/slate}/utils/is-empty-string.cjs +0 -0
  265. /package/dist/{slate → primitives/slate}/utils/is-empty-string.js +0 -0
  266. /package/dist/{slate → primitives/slate}/utils/is-empty.cjs +0 -0
  267. /package/dist/{slate → primitives/slate}/utils/is-empty.js +0 -0
  268. /package/dist/{slate → primitives/slate}/utils/is-text.cjs +0 -0
  269. /package/dist/{slate → primitives/slate}/utils/is-text.js +0 -0
  270. /package/dist/{slate → primitives/slate}/utils/is-whitespace-character.cjs +0 -0
  271. /package/dist/{slate → primitives/slate}/utils/is-whitespace-character.js +0 -0
  272. /package/dist/{slate → primitives/slate}/utils/selection-contains-inlines.cjs +0 -0
  273. /package/dist/{slate → primitives/slate}/utils/selection-contains-inlines.js +0 -0
@@ -2,186 +2,43 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var react = require('react');
5
- require('../../icons/index.cjs');
5
+ require('../../_private/index.cjs');
6
6
  var overrides = require('../../overrides.cjs');
7
7
  var classNames = require('../../utils/class-names.cjs');
8
- var formatFileSize = require('../../utils/format-file-size.cjs');
9
- var AiChatComposer = require('./AiChatComposer.cjs');
10
- var Spinner = require('../../icons/Spinner.cjs');
8
+ var index = require('../../primitives/AiMessage/index.cjs');
11
9
 
10
+ function PlainTextPart({ part }) {
11
+ return /* @__PURE__ */ jsxRuntime.jsx("p", {
12
+ children: part.text
13
+ });
14
+ }
12
15
  const AiChatUserMessage = react.memo(
13
16
  react.forwardRef(
14
- ({ message, className }, forwardedRef) => {
15
- const text = message.content.filter((c) => c.type === "text").map((c) => c.text).join("\n");
16
- const images = message.content.filter((c) => c.type === "image");
17
- if (message.deletedAt !== void 0) {
18
- return /* @__PURE__ */ jsxRuntime.jsx("div", {
19
- ref: forwardedRef,
20
- className: classNames.classNames("lb-ai-chat-user-message", className),
21
- children: /* @__PURE__ */ jsxRuntime.jsx("div", {
22
- className: "lb-ai-chat-user-message-deleted",
23
- children: "This message has been deleted."
24
- })
25
- });
26
- }
27
- return /* @__PURE__ */ jsxRuntime.jsxs("div", {
17
+ ({ message, className, overrides: overrides$1 }, forwardedRef) => {
18
+ const $ = overrides.useOverrides(overrides$1);
19
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
28
20
  ref: forwardedRef,
29
- className: classNames.classNames("lb-ai-chat-user-message", className),
30
- children: [
31
- images.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", {
32
- className: "lb-ai-chat-user-message-attachments",
33
- children: /* @__PURE__ */ jsxRuntime.jsx("div", {
34
- className: "lb-ai-chat-user-message-media-attachments",
35
- children: images.map((image) => /* @__PURE__ */ jsxRuntime.jsx(AiChatUserMessageMediaAttachment, {
36
- chatId: message.chatId,
37
- attachment: image,
38
- className: "lb-ai-chat-user-message-attachment"
39
- }, image.id))
40
- })
41
- }),
42
- /* @__PURE__ */ jsxRuntime.jsx("div", {
43
- className: "lb-ai-chat-user-message-content",
44
- children: /* @__PURE__ */ jsxRuntime.jsx("div", {
45
- className: "lb-ai-chat-user-message-body",
46
- children: text
47
- })
21
+ className: classNames.classNames(
22
+ "lb-ai-chat-message lb-ai-chat-user-message",
23
+ className
24
+ ),
25
+ children: message.deletedAt !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
26
+ className: "lb-ai-chat-message-deleted",
27
+ children: $.AI_CHAT_MESSAGE_DELETED
28
+ }) : /* @__PURE__ */ jsxRuntime.jsx("div", {
29
+ className: "lb-ai-chat-message-content",
30
+ children: /* @__PURE__ */ jsxRuntime.jsx(index.Content, {
31
+ message,
32
+ components: {
33
+ TextPart: PlainTextPart
34
+ },
35
+ className: "lb-prose lb-ai-chat-message-text"
48
36
  })
49
- ]
37
+ })
50
38
  });
51
39
  }
52
40
  )
53
41
  );
54
- function AiChatUserMessageMediaAttachment({
55
- className,
56
- chatId,
57
- attachment,
58
- overrides: overrides$1,
59
- onClick,
60
- onKeyDown,
61
- ...props
62
- }) {
63
- if (!attachment.mimeType.startsWith("image/")) {
64
- throw new Error("Only image attachments are supported.");
65
- }
66
- const { url } = AiChatComposer.useChatAttachmentUrl(chatId, attachment.id);
67
- const { base, extension } = AiChatComposer.splitFileName(attachment.name);
68
- const $ = overrides.useOverrides(overrides$1);
69
- const description = formatFileSize.formatFileSize(attachment.size, $.locale);
70
- return /* @__PURE__ */ jsxRuntime.jsxs("div", {
71
- className: classNames.classNames(
72
- "lb-ai-chat-user-message-attachment lb-attachment lb-media-attachment",
73
- className
74
- ),
75
- role: url !== void 0 ? "button" : void 0,
76
- tabIndex: url !== void 0 ? 0 : -1,
77
- onKeyDown: (event) => {
78
- onKeyDown?.(event);
79
- if (event.isDefaultPrevented())
80
- return;
81
- if (url === void 0)
82
- return;
83
- if (event.key === "Enter" || event.key === " ") {
84
- window.open(url, "_blank");
85
- }
86
- },
87
- ...props,
88
- onClick: (event) => {
89
- onClick?.(event);
90
- if (event.isDefaultPrevented())
91
- return;
92
- if (url === void 0)
93
- return;
94
- window.open(url, "_blank");
95
- },
96
- children: [
97
- /* @__PURE__ */ jsxRuntime.jsx(AttachmentPreview, {
98
- attachment,
99
- url
100
- }),
101
- /* @__PURE__ */ jsxRuntime.jsxs("div", {
102
- className: "lb-attachment-details",
103
- children: [
104
- /* @__PURE__ */ jsxRuntime.jsxs("span", {
105
- className: "lb-attachment-name",
106
- title: attachment.name,
107
- children: [
108
- /* @__PURE__ */ jsxRuntime.jsx("span", {
109
- className: "lb-attachment-name-base",
110
- children: base
111
- }),
112
- extension && /* @__PURE__ */ jsxRuntime.jsx("span", {
113
- className: "lb-attachment-name-extension",
114
- children: extension
115
- })
116
- ]
117
- }),
118
- /* @__PURE__ */ jsxRuntime.jsx("span", {
119
- className: "lb-attachment-description",
120
- title: description,
121
- children: description
122
- })
123
- ]
124
- })
125
- ]
126
- });
127
- }
128
- function AttachmentPreview({
129
- attachment,
130
- url,
131
- ...props
132
- }) {
133
- const [isUnsupportedPreview, setUnsupportedPreview] = react.useState(false);
134
- const [isLoaded, setLoaded] = react.useState(false);
135
- if (!isUnsupportedPreview && attachment.size <= AiChatComposer.MAX_DISPLAYED_MEDIA_SIZE) {
136
- return /* @__PURE__ */ jsxRuntime.jsxs("div", {
137
- className: "lb-attachment-preview",
138
- ...props,
139
- children: [
140
- !isLoaded ? /* @__PURE__ */ jsxRuntime.jsx(Spinner.SpinnerIcon, {}) : null,
141
- url ? /* @__PURE__ */ jsxRuntime.jsx("div", {
142
- className: "lb-attachment-preview-media",
143
- "data-hidden": !isLoaded ? "" : void 0,
144
- children: /* @__PURE__ */ jsxRuntime.jsx("img", {
145
- src: url,
146
- loading: "lazy",
147
- onLoad: () => setLoaded(true),
148
- onError: () => setUnsupportedPreview(true)
149
- })
150
- }) : null
151
- ]
152
- });
153
- }
154
- return /* @__PURE__ */ jsxRuntime.jsxs("svg", {
155
- className: "lb-attachment-icon",
156
- width: 30,
157
- height: 30,
158
- viewBox: "0 0 30 30",
159
- fill: "currentColor",
160
- fillRule: "evenodd",
161
- clipRule: "evenodd",
162
- xmlns: "http://www.w3.org/2000/svg",
163
- children: [
164
- /* @__PURE__ */ jsxRuntime.jsx("path", {
165
- d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
166
- className: "lb-attachment-icon-shadow"
167
- }),
168
- /* @__PURE__ */ jsxRuntime.jsx("path", {
169
- d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
170
- className: "lb-attachment-icon-background"
171
- }),
172
- /* @__PURE__ */ jsxRuntime.jsx("path", {
173
- d: "M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z",
174
- className: "lb-attachment-icon-fold"
175
- }),
176
- /* @__PURE__ */ jsxRuntime.jsx("g", {
177
- className: "lb-attachment-icon-glyph",
178
- children: /* @__PURE__ */ jsxRuntime.jsx("path", {
179
- d: "M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
180
- })
181
- })
182
- ]
183
- });
184
- }
185
42
 
186
43
  exports.AiChatUserMessage = AiChatUserMessage;
187
44
  //# sourceMappingURL=AiChatUserMessage.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"AiChatUserMessage.cjs","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type { UiUserMessage } from \"@liveblocks/core\";\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef, memo, useState } from \"react\";\n\nimport { SpinnerIcon } from \"../../icons\";\nimport type { GlobalOverrides } from \"../../overrides\";\nimport { useOverrides } from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { formatFileSize } from \"../../utils/format-file-size\";\nimport {\n MAX_DISPLAYED_MEDIA_SIZE,\n splitFileName,\n useChatAttachmentUrl,\n} from \"./AiChatComposer\";\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport type AiChatUserMessageProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n};\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className }, forwardedRef) => {\n const text = message.content\n .filter((c) => c.type === \"text\")\n .map((c) => c.text)\n .join(\"\\n\");\n\n const images = message.content.filter((c) => c.type === \"image\");\n\n if (message.deletedAt !== undefined) {\n return (\n <div\n ref={forwardedRef}\n className={classNames(\"lb-ai-chat-user-message\", className)}\n >\n <div className=\"lb-ai-chat-user-message-deleted\">\n This message has been deleted.\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={forwardedRef}\n className={classNames(\"lb-ai-chat-user-message\", className)}\n >\n {images.length > 0 && (\n <div className=\"lb-ai-chat-user-message-attachments\">\n <div className=\"lb-ai-chat-user-message-media-attachments\">\n {images.map((image) => (\n <AiChatUserMessageMediaAttachment\n key={image.id}\n chatId={message.chatId}\n attachment={image}\n className=\"lb-ai-chat-user-message-attachment\"\n />\n ))}\n </div>\n </div>\n )}\n\n <div className=\"lb-ai-chat-user-message-content\">\n <div className=\"lb-ai-chat-user-message-body\">{text}</div>\n </div>\n </div>\n );\n }\n )\n);\n\ntype AiChatUserMessageMediaAttachmentProps = HTMLAttributes<HTMLDivElement> & {\n chatId: string;\n attachment: {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n };\n overrides?: Partial<GlobalOverrides>;\n};\n\nfunction AiChatUserMessageMediaAttachment({\n className,\n chatId,\n attachment,\n overrides,\n onClick,\n onKeyDown,\n ...props\n}: AiChatUserMessageMediaAttachmentProps) {\n if (!attachment.mimeType.startsWith(\"image/\")) {\n throw new Error(\"Only image attachments are supported.\");\n }\n\n const { url } = useChatAttachmentUrl(chatId, attachment.id);\n\n const { base, extension } = splitFileName(attachment.name);\n const $ = useOverrides(overrides);\n const description = formatFileSize(attachment.size, $.locale);\n\n return (\n <div\n className={classNames(\n \"lb-ai-chat-user-message-attachment lb-attachment lb-media-attachment\",\n className\n )}\n role={url !== undefined ? \"button\" : undefined}\n tabIndex={url !== undefined ? 0 : -1}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.isDefaultPrevented()) return;\n\n if (url === undefined) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n window.open(url, \"_blank\");\n }\n }}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (event.isDefaultPrevented()) return;\n\n if (url === undefined) return;\n window.open(url, \"_blank\");\n }}\n >\n <AttachmentPreview attachment={attachment} url={url} />\n\n <div className=\"lb-attachment-details\">\n <span className=\"lb-attachment-name\" title={attachment.name}>\n <span className=\"lb-attachment-name-base\">{base}</span>\n {extension && (\n <span className=\"lb-attachment-name-extension\">{extension}</span>\n )}\n </span>\n\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n </div>\n );\n}\n\ntype AttachmentPreviewProps = HTMLAttributes<HTMLDivElement> & {\n attachment: { name: string; size: number };\n url: string | undefined;\n};\n\nfunction AttachmentPreview({\n attachment,\n url,\n ...props\n}: AttachmentPreviewProps) {\n const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n\n if (!isUnsupportedPreview && attachment.size <= MAX_DISPLAYED_MEDIA_SIZE) {\n return (\n <div className=\"lb-attachment-preview\" {...props}>\n {!isLoaded ? <SpinnerIcon /> : null}\n\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <img\n src={url}\n loading=\"lazy\"\n onLoad={() => setLoaded(true)}\n onError={() => setUnsupportedPreview(true)}\n />\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <svg\n className=\"lb-attachment-icon\"\n width={30}\n height={30}\n viewBox=\"0 0 30 30\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-shadow\"\n />\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-background\"\n />\n <path\n d=\"M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z\"\n className=\"lb-attachment-icon-fold\"\n />\n\n <g className=\"lb-attachment-icon-glyph\">\n <path d=\"M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" />\n </g>\n </svg>\n );\n}\n"],"names":["memo","forwardRef","jsx","classNames","jsxs","overrides","useChatAttachmentUrl","splitFileName","useOverrides","formatFileSize","useState","MAX_DISPLAYED_MEDIA_SIZE","SpinnerIcon"],"mappings":"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"}
1
+ {"version":3,"file":"AiChatUserMessage.cjs","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type { AiTextPart, UiUserMessage } from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={classNames(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["jsx","memo","forwardRef","overrides","useOverrides","classNames","AiMessage.Content"],"mappings":";;;;;;;;;AA0BA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQA,cAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAAC,UAAA;AAAA,EAC/BC,gBAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,SAAW,aAAAC,WAAA,IAAa,YAAiB,KAAA;AACnD,MAAM,MAAA,CAAA,GAAIC,uBAAaD,WAAS,CAAA,CAAA;AAChC,MAAA,uBACGH,cAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAK,EAAA,YAAA;AAAA,QACL,SAAW,EAAAK,qBAAA;AAAA,UACT,4CAAA;AAAA,UACA,SAAA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA,OAAA,CAAQ,SAAc,KAAA,KAAA,CAAA,mBACpBL,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACZ,QAAE,EAAA,CAAA,CAAA,uBAAA;AAAA,SACL,oBAECA,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACb,QAAA,kBAAAA,cAAA,CAACM,aAAA,EAAA;AAAA,YACC,OAAA;AAAA,YACA,UAAY,EAAA;AAAA,cACV,QAAU,EAAA,aAAA;AAAA,aACZ;AAAA,YACA,SAAU,EAAA,kCAAA;AAAA,WACZ,CAAA;AAAA,SACF,CAAA;AAAA,OAEJ,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF;;;;"}
@@ -1,185 +1,42 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { memo, forwardRef, useState } from 'react';
3
- import '../../icons/index.js';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { memo, forwardRef } from 'react';
3
+ import '../../_private/index.js';
4
4
  import { useOverrides } from '../../overrides.js';
5
5
  import { classNames } from '../../utils/class-names.js';
6
- import { formatFileSize } from '../../utils/format-file-size.js';
7
- import { useChatAttachmentUrl, splitFileName, MAX_DISPLAYED_MEDIA_SIZE } from './AiChatComposer.js';
8
- import { SpinnerIcon } from '../../icons/Spinner.js';
6
+ import { Content as AiMessageContent } from '../../primitives/AiMessage/index.js';
9
7
 
8
+ function PlainTextPart({ part }) {
9
+ return /* @__PURE__ */ jsx("p", {
10
+ children: part.text
11
+ });
12
+ }
10
13
  const AiChatUserMessage = memo(
11
14
  forwardRef(
12
- ({ message, className }, forwardedRef) => {
13
- const text = message.content.filter((c) => c.type === "text").map((c) => c.text).join("\n");
14
- const images = message.content.filter((c) => c.type === "image");
15
- if (message.deletedAt !== void 0) {
16
- return /* @__PURE__ */ jsx("div", {
17
- ref: forwardedRef,
18
- className: classNames("lb-ai-chat-user-message", className),
19
- children: /* @__PURE__ */ jsx("div", {
20
- className: "lb-ai-chat-user-message-deleted",
21
- children: "This message has been deleted."
22
- })
23
- });
24
- }
25
- return /* @__PURE__ */ jsxs("div", {
15
+ ({ message, className, overrides }, forwardedRef) => {
16
+ const $ = useOverrides(overrides);
17
+ return /* @__PURE__ */ jsx("div", {
26
18
  ref: forwardedRef,
27
- className: classNames("lb-ai-chat-user-message", className),
28
- children: [
29
- images.length > 0 && /* @__PURE__ */ jsx("div", {
30
- className: "lb-ai-chat-user-message-attachments",
31
- children: /* @__PURE__ */ jsx("div", {
32
- className: "lb-ai-chat-user-message-media-attachments",
33
- children: images.map((image) => /* @__PURE__ */ jsx(AiChatUserMessageMediaAttachment, {
34
- chatId: message.chatId,
35
- attachment: image,
36
- className: "lb-ai-chat-user-message-attachment"
37
- }, image.id))
38
- })
39
- }),
40
- /* @__PURE__ */ jsx("div", {
41
- className: "lb-ai-chat-user-message-content",
42
- children: /* @__PURE__ */ jsx("div", {
43
- className: "lb-ai-chat-user-message-body",
44
- children: text
45
- })
19
+ className: classNames(
20
+ "lb-ai-chat-message lb-ai-chat-user-message",
21
+ className
22
+ ),
23
+ children: message.deletedAt !== void 0 ? /* @__PURE__ */ jsx("div", {
24
+ className: "lb-ai-chat-message-deleted",
25
+ children: $.AI_CHAT_MESSAGE_DELETED
26
+ }) : /* @__PURE__ */ jsx("div", {
27
+ className: "lb-ai-chat-message-content",
28
+ children: /* @__PURE__ */ jsx(AiMessageContent, {
29
+ message,
30
+ components: {
31
+ TextPart: PlainTextPart
32
+ },
33
+ className: "lb-prose lb-ai-chat-message-text"
46
34
  })
47
- ]
35
+ })
48
36
  });
49
37
  }
50
38
  )
51
39
  );
52
- function AiChatUserMessageMediaAttachment({
53
- className,
54
- chatId,
55
- attachment,
56
- overrides,
57
- onClick,
58
- onKeyDown,
59
- ...props
60
- }) {
61
- if (!attachment.mimeType.startsWith("image/")) {
62
- throw new Error("Only image attachments are supported.");
63
- }
64
- const { url } = useChatAttachmentUrl(chatId, attachment.id);
65
- const { base, extension } = splitFileName(attachment.name);
66
- const $ = useOverrides(overrides);
67
- const description = formatFileSize(attachment.size, $.locale);
68
- return /* @__PURE__ */ jsxs("div", {
69
- className: classNames(
70
- "lb-ai-chat-user-message-attachment lb-attachment lb-media-attachment",
71
- className
72
- ),
73
- role: url !== void 0 ? "button" : void 0,
74
- tabIndex: url !== void 0 ? 0 : -1,
75
- onKeyDown: (event) => {
76
- onKeyDown?.(event);
77
- if (event.isDefaultPrevented())
78
- return;
79
- if (url === void 0)
80
- return;
81
- if (event.key === "Enter" || event.key === " ") {
82
- window.open(url, "_blank");
83
- }
84
- },
85
- ...props,
86
- onClick: (event) => {
87
- onClick?.(event);
88
- if (event.isDefaultPrevented())
89
- return;
90
- if (url === void 0)
91
- return;
92
- window.open(url, "_blank");
93
- },
94
- children: [
95
- /* @__PURE__ */ jsx(AttachmentPreview, {
96
- attachment,
97
- url
98
- }),
99
- /* @__PURE__ */ jsxs("div", {
100
- className: "lb-attachment-details",
101
- children: [
102
- /* @__PURE__ */ jsxs("span", {
103
- className: "lb-attachment-name",
104
- title: attachment.name,
105
- children: [
106
- /* @__PURE__ */ jsx("span", {
107
- className: "lb-attachment-name-base",
108
- children: base
109
- }),
110
- extension && /* @__PURE__ */ jsx("span", {
111
- className: "lb-attachment-name-extension",
112
- children: extension
113
- })
114
- ]
115
- }),
116
- /* @__PURE__ */ jsx("span", {
117
- className: "lb-attachment-description",
118
- title: description,
119
- children: description
120
- })
121
- ]
122
- })
123
- ]
124
- });
125
- }
126
- function AttachmentPreview({
127
- attachment,
128
- url,
129
- ...props
130
- }) {
131
- const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);
132
- const [isLoaded, setLoaded] = useState(false);
133
- if (!isUnsupportedPreview && attachment.size <= MAX_DISPLAYED_MEDIA_SIZE) {
134
- return /* @__PURE__ */ jsxs("div", {
135
- className: "lb-attachment-preview",
136
- ...props,
137
- children: [
138
- !isLoaded ? /* @__PURE__ */ jsx(SpinnerIcon, {}) : null,
139
- url ? /* @__PURE__ */ jsx("div", {
140
- className: "lb-attachment-preview-media",
141
- "data-hidden": !isLoaded ? "" : void 0,
142
- children: /* @__PURE__ */ jsx("img", {
143
- src: url,
144
- loading: "lazy",
145
- onLoad: () => setLoaded(true),
146
- onError: () => setUnsupportedPreview(true)
147
- })
148
- }) : null
149
- ]
150
- });
151
- }
152
- return /* @__PURE__ */ jsxs("svg", {
153
- className: "lb-attachment-icon",
154
- width: 30,
155
- height: 30,
156
- viewBox: "0 0 30 30",
157
- fill: "currentColor",
158
- fillRule: "evenodd",
159
- clipRule: "evenodd",
160
- xmlns: "http://www.w3.org/2000/svg",
161
- children: [
162
- /* @__PURE__ */ jsx("path", {
163
- d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
164
- className: "lb-attachment-icon-shadow"
165
- }),
166
- /* @__PURE__ */ jsx("path", {
167
- d: "M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z",
168
- className: "lb-attachment-icon-background"
169
- }),
170
- /* @__PURE__ */ jsx("path", {
171
- d: "M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z",
172
- className: "lb-attachment-icon-fold"
173
- }),
174
- /* @__PURE__ */ jsx("g", {
175
- className: "lb-attachment-icon-glyph",
176
- children: /* @__PURE__ */ jsx("path", {
177
- d: "M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
178
- })
179
- })
180
- ]
181
- });
182
- }
183
40
 
184
41
  export { AiChatUserMessage };
185
42
  //# sourceMappingURL=AiChatUserMessage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AiChatUserMessage.js","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type { UiUserMessage } from \"@liveblocks/core\";\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef, memo, useState } from \"react\";\n\nimport { SpinnerIcon } from \"../../icons\";\nimport type { GlobalOverrides } from \"../../overrides\";\nimport { useOverrides } from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\nimport { formatFileSize } from \"../../utils/format-file-size\";\nimport {\n MAX_DISPLAYED_MEDIA_SIZE,\n splitFileName,\n useChatAttachmentUrl,\n} from \"./AiChatComposer\";\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport type AiChatUserMessageProps = HTMLAttributes<HTMLDivElement> & {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n};\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className }, forwardedRef) => {\n const text = message.content\n .filter((c) => c.type === \"text\")\n .map((c) => c.text)\n .join(\"\\n\");\n\n const images = message.content.filter((c) => c.type === \"image\");\n\n if (message.deletedAt !== undefined) {\n return (\n <div\n ref={forwardedRef}\n className={classNames(\"lb-ai-chat-user-message\", className)}\n >\n <div className=\"lb-ai-chat-user-message-deleted\">\n This message has been deleted.\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={forwardedRef}\n className={classNames(\"lb-ai-chat-user-message\", className)}\n >\n {images.length > 0 && (\n <div className=\"lb-ai-chat-user-message-attachments\">\n <div className=\"lb-ai-chat-user-message-media-attachments\">\n {images.map((image) => (\n <AiChatUserMessageMediaAttachment\n key={image.id}\n chatId={message.chatId}\n attachment={image}\n className=\"lb-ai-chat-user-message-attachment\"\n />\n ))}\n </div>\n </div>\n )}\n\n <div className=\"lb-ai-chat-user-message-content\">\n <div className=\"lb-ai-chat-user-message-body\">{text}</div>\n </div>\n </div>\n );\n }\n )\n);\n\ntype AiChatUserMessageMediaAttachmentProps = HTMLAttributes<HTMLDivElement> & {\n chatId: string;\n attachment: {\n id: string;\n name: string;\n size: number;\n mimeType: string;\n };\n overrides?: Partial<GlobalOverrides>;\n};\n\nfunction AiChatUserMessageMediaAttachment({\n className,\n chatId,\n attachment,\n overrides,\n onClick,\n onKeyDown,\n ...props\n}: AiChatUserMessageMediaAttachmentProps) {\n if (!attachment.mimeType.startsWith(\"image/\")) {\n throw new Error(\"Only image attachments are supported.\");\n }\n\n const { url } = useChatAttachmentUrl(chatId, attachment.id);\n\n const { base, extension } = splitFileName(attachment.name);\n const $ = useOverrides(overrides);\n const description = formatFileSize(attachment.size, $.locale);\n\n return (\n <div\n className={classNames(\n \"lb-ai-chat-user-message-attachment lb-attachment lb-media-attachment\",\n className\n )}\n role={url !== undefined ? \"button\" : undefined}\n tabIndex={url !== undefined ? 0 : -1}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.isDefaultPrevented()) return;\n\n if (url === undefined) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n window.open(url, \"_blank\");\n }\n }}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (event.isDefaultPrevented()) return;\n\n if (url === undefined) return;\n window.open(url, \"_blank\");\n }}\n >\n <AttachmentPreview attachment={attachment} url={url} />\n\n <div className=\"lb-attachment-details\">\n <span className=\"lb-attachment-name\" title={attachment.name}>\n <span className=\"lb-attachment-name-base\">{base}</span>\n {extension && (\n <span className=\"lb-attachment-name-extension\">{extension}</span>\n )}\n </span>\n\n <span className=\"lb-attachment-description\" title={description}>\n {description}\n </span>\n </div>\n </div>\n );\n}\n\ntype AttachmentPreviewProps = HTMLAttributes<HTMLDivElement> & {\n attachment: { name: string; size: number };\n url: string | undefined;\n};\n\nfunction AttachmentPreview({\n attachment,\n url,\n ...props\n}: AttachmentPreviewProps) {\n const [isUnsupportedPreview, setUnsupportedPreview] = useState(false);\n const [isLoaded, setLoaded] = useState(false);\n\n if (!isUnsupportedPreview && attachment.size <= MAX_DISPLAYED_MEDIA_SIZE) {\n return (\n <div className=\"lb-attachment-preview\" {...props}>\n {!isLoaded ? <SpinnerIcon /> : null}\n\n {url ? (\n <div\n className=\"lb-attachment-preview-media\"\n data-hidden={!isLoaded ? \"\" : undefined}\n >\n <img\n src={url}\n loading=\"lazy\"\n onLoad={() => setLoaded(true)}\n onError={() => setUnsupportedPreview(true)}\n />\n </div>\n ) : null}\n </div>\n );\n }\n\n return (\n <svg\n className=\"lb-attachment-icon\"\n width={30}\n height={30}\n viewBox=\"0 0 30 30\"\n fill=\"currentColor\"\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-shadow\"\n />\n <path\n d=\"M6 5a2 2 0 0 1 2-2h5.843a4 4 0 0 1 2.829 1.172l6.156 6.156A4 4 0 0 1 24 13.157V25a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V5Z\"\n className=\"lb-attachment-icon-background\"\n />\n <path\n d=\"M14.382 3.037a4 4 0 0 1 2.29 1.135l6.156 6.157a4 4 0 0 1 1.136 2.289A2 2 0 0 0 22 11h-4a2 2 0 0 1-2-2V5a2 2 0 0 0-1.618-1.963Z\"\n className=\"lb-attachment-icon-fold\"\n />\n\n <g className=\"lb-attachment-icon-glyph\">\n <path d=\"M12 16h6a1 1 0 0 1 1 1v3l-1.293-1.293a1 1 0 0 0-1.414 0L14.09 20.91l-.464-.386a1 1 0 0 0-1.265-.013l-1.231.985A.995.995 0 0 1 11 21v-4a1 1 0 0 1 1-1Zm-2 1a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-6a2 2 0 0 1-2-2v-4Zm3 2a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" />\n </g>\n </svg>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AA6BO,MAAM,iBAAoB,GAAA,IAAA;AAAA,EAC/B,UAAA;AAAA,IACE,CAAC,EAAE,OAAS,EAAA,SAAA,IAAa,YAAiB,KAAA;AACxC,MAAA,MAAM,OAAO,OAAQ,CAAA,OAAA,CAClB,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,KAAS,MAAM,CAAA,CAC/B,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA,CACjB,KAAK,IAAI,CAAA,CAAA;AAEZ,MAAM,MAAA,MAAA,GAAS,QAAQ,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAA,CAAE,SAAS,OAAO,CAAA,CAAA;AAE/D,MAAI,IAAA,OAAA,CAAQ,cAAc,KAAW,CAAA,EAAA;AACnC,QAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,UACC,GAAK,EAAA,YAAA;AAAA,UACL,SAAA,EAAW,UAAW,CAAA,yBAAA,EAA2B,SAAS,CAAA;AAAA,UAE1D,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAU,EAAA,iCAAA;AAAA,YAAkC,QAAA,EAAA,gCAAA;AAAA,WAEjD,CAAA;AAAA,SACF,CAAA,CAAA;AAAA,OAEJ;AAEA,MAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAK,EAAA,YAAA;AAAA,QACL,SAAA,EAAW,UAAW,CAAA,yBAAA,EAA2B,SAAS,CAAA;AAAA,QAEzD,QAAA,EAAA;AAAA,UAAO,MAAA,CAAA,MAAA,GAAS,qBACd,GAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAU,EAAA,qCAAA;AAAA,YACb,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAU,EAAA,2CAAA;AAAA,cACZ,QAAO,EAAA,MAAA,CAAA,GAAA,CAAI,CAAC,KAAA,qBACV,GAAA,CAAA,gCAAA,EAAA;AAAA,gBAEC,QAAQ,OAAQ,CAAA,MAAA;AAAA,gBAChB,UAAY,EAAA,KAAA;AAAA,gBACZ,SAAU,EAAA,oCAAA;AAAA,eAHL,EAAA,KAAA,CAAM,EAIb,CACD,CAAA;AAAA,aACH,CAAA;AAAA,WACF,CAAA;AAAA,0BAGD,GAAA,CAAA,KAAA,EAAA;AAAA,YAAI,SAAU,EAAA,iCAAA;AAAA,YACb,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAU,EAAA,8BAAA;AAAA,cAAgC,QAAA,EAAA,IAAA;AAAA,aAAK,CAAA;AAAA,WACtD,CAAA;AAAA,SAAA;AAAA,OACF,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF,EAAA;AAaA,SAAS,gCAAiC,CAAA;AAAA,EACxC,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACG,GAAA,KAAA;AACL,CAA0C,EAAA;AACxC,EAAA,IAAI,CAAC,UAAA,CAAW,QAAS,CAAA,UAAA,CAAW,QAAQ,CAAG,EAAA;AAC7C,IAAM,MAAA,IAAI,MAAM,uCAAuC,CAAA,CAAA;AAAA,GACzD;AAEA,EAAA,MAAM,EAAE,GAAI,EAAA,GAAI,oBAAqB,CAAA,MAAA,EAAQ,WAAW,EAAE,CAAA,CAAA;AAE1D,EAAA,MAAM,EAAE,IAAM,EAAA,SAAA,EAAc,GAAA,aAAA,CAAc,WAAW,IAAI,CAAA,CAAA;AACzD,EAAM,MAAA,CAAA,GAAI,aAAa,SAAS,CAAA,CAAA;AAChC,EAAA,MAAM,WAAc,GAAA,cAAA,CAAe,UAAW,CAAA,IAAA,EAAM,EAAE,MAAM,CAAA,CAAA;AAE5D,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,IACC,SAAW,EAAA,UAAA;AAAA,MACT,sEAAA;AAAA,MACA,SAAA;AAAA,KACF;AAAA,IACA,IAAA,EAAM,GAAQ,KAAA,KAAA,CAAA,GAAY,QAAW,GAAA,KAAA,CAAA;AAAA,IACrC,QAAA,EAAU,GAAQ,KAAA,KAAA,CAAA,GAAY,CAAI,GAAA,CAAA,CAAA;AAAA,IAClC,SAAA,EAAW,CAAC,KAAU,KAAA;AACpB,MAAA,SAAA,GAAY,KAAK,CAAA,CAAA;AACjB,MAAA,IAAI,MAAM,kBAAmB,EAAA;AAAG,QAAA,OAAA;AAEhC,MAAA,IAAI,GAAQ,KAAA,KAAA,CAAA;AAAW,QAAA,OAAA;AACvB,MAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,OAAW,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AAC9C,QAAO,MAAA,CAAA,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAA;AAAA,OAC3B;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ,OAAA,EAAS,CAAC,KAAU,KAAA;AAClB,MAAA,OAAA,GAAU,KAAK,CAAA,CAAA;AACf,MAAA,IAAI,MAAM,kBAAmB,EAAA;AAAG,QAAA,OAAA;AAEhC,MAAA,IAAI,GAAQ,KAAA,KAAA,CAAA;AAAW,QAAA,OAAA;AACvB,MAAO,MAAA,CAAA,IAAA,CAAK,KAAK,QAAQ,CAAA,CAAA;AAAA,KAC3B;AAAA,IAEA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,iBAAA,EAAA;AAAA,QAAkB,UAAA;AAAA,QAAwB,GAAA;AAAA,OAAU,CAAA;AAAA,sBAEpD,IAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,uBAAA;AAAA,QACb,QAAA,EAAA;AAAA,0BAAC,IAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAU,EAAA,oBAAA;AAAA,YAAqB,OAAO,UAAW,CAAA,IAAA;AAAA,YACrD,QAAA,EAAA;AAAA,8BAAC,GAAA,CAAA,MAAA,EAAA;AAAA,gBAAK,SAAU,EAAA,yBAAA;AAAA,gBAA2B,QAAA,EAAA,IAAA;AAAA,eAAK,CAAA;AAAA,cAC/C,6BACE,GAAA,CAAA,MAAA,EAAA;AAAA,gBAAK,SAAU,EAAA,8BAAA;AAAA,gBAAgC,QAAA,EAAA,SAAA;AAAA,eAAU,CAAA;AAAA,aAAA;AAAA,WAE9D,CAAA;AAAA,0BAEC,GAAA,CAAA,MAAA,EAAA;AAAA,YAAK,SAAU,EAAA,2BAAA;AAAA,YAA4B,KAAO,EAAA,WAAA;AAAA,YAChD,QAAA,EAAA,WAAA;AAAA,WACH,CAAA;AAAA,SAAA;AAAA,OACF,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAA;AAOA,SAAS,iBAAkB,CAAA;AAAA,EACzB,UAAA;AAAA,EACA,GAAA;AAAA,EACG,GAAA,KAAA;AACL,CAA2B,EAAA;AACzB,EAAA,MAAM,CAAC,oBAAA,EAAsB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AACpE,EAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAE5C,EAAA,IAAI,CAAC,oBAAA,IAAwB,UAAW,CAAA,IAAA,IAAQ,wBAA0B,EAAA;AACxE,IAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAU,EAAA,uBAAA;AAAA,MAAyB,GAAG,KAAA;AAAA,MACxC,QAAA,EAAA;AAAA,QAAC,CAAA,QAAA,mBAAY,GAAA,CAAA,WAAA,EAAA,EAAY,CAAK,GAAA,IAAA;AAAA,QAE9B,sBACE,GAAA,CAAA,KAAA,EAAA;AAAA,UACC,SAAU,EAAA,6BAAA;AAAA,UACV,aAAA,EAAa,CAAC,QAAA,GAAW,EAAK,GAAA,KAAA,CAAA;AAAA,UAE9B,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,YACC,GAAK,EAAA,GAAA;AAAA,YACL,OAAQ,EAAA,MAAA;AAAA,YACR,MAAA,EAAQ,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,YAC5B,OAAA,EAAS,MAAM,qBAAA,CAAsB,IAAI,CAAA;AAAA,WAC3C,CAAA;AAAA,SACF,CACE,GAAA,IAAA;AAAA,OAAA;AAAA,KACN,CAAA,CAAA;AAAA,GAEJ;AAEA,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,IACC,SAAU,EAAA,oBAAA;AAAA,IACV,KAAO,EAAA,EAAA;AAAA,IACP,MAAQ,EAAA,EAAA;AAAA,IACR,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,cAAA;AAAA,IACL,QAAS,EAAA,SAAA;AAAA,IACT,QAAS,EAAA,SAAA;AAAA,IACT,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,MAAA,EAAA;AAAA,QACC,CAAE,EAAA,oHAAA;AAAA,QACF,SAAU,EAAA,2BAAA;AAAA,OACZ,CAAA;AAAA,sBACC,GAAA,CAAA,MAAA,EAAA;AAAA,QACC,CAAE,EAAA,oHAAA;AAAA,QACF,SAAU,EAAA,+BAAA;AAAA,OACZ,CAAA;AAAA,sBACC,GAAA,CAAA,MAAA,EAAA;AAAA,QACC,CAAE,EAAA,gIAAA;AAAA,QACF,SAAU,EAAA,yBAAA;AAAA,OACZ,CAAA;AAAA,sBAEC,GAAA,CAAA,GAAA,EAAA;AAAA,QAAE,SAAU,EAAA,0BAAA;AAAA,QACX,QAAC,kBAAA,GAAA,CAAA,MAAA,EAAA;AAAA,UAAK,CAAE,EAAA,gQAAA;AAAA,SAAiQ,CAAA;AAAA,OAC3Q,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AiChatUserMessage.js","sources":["../../../src/components/internal/AiChatUserMessage.tsx"],"sourcesContent":["import type { AiTextPart, UiUserMessage } from \"@liveblocks/core\";\nimport type { ComponentProps } from \"react\";\nimport { forwardRef, memo } from \"react\";\n\nimport { AiMessage } from \"../../_private\";\nimport { type GlobalOverrides, useOverrides } from \"../../overrides\";\nimport { classNames } from \"../../utils/class-names\";\n\n/* -------------------------------------------------------------------------------------------------\n * AiChatUserMessage\n * -----------------------------------------------------------------------------------------------*/\nexport interface AiChatUserMessageProps extends ComponentProps<\"div\"> {\n /**\n * The message to display.\n */\n message: UiUserMessage;\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\ntype PlainTextPartProps = {\n part: AiTextPart;\n};\n\nfunction PlainTextPart({ part }: PlainTextPartProps) {\n return <p>{part.text}</p>;\n}\n\nexport const AiChatUserMessage = memo(\n forwardRef<HTMLDivElement, AiChatUserMessageProps>(\n ({ message, className, overrides }, forwardedRef) => {\n const $ = useOverrides(overrides);\n return (\n <div\n ref={forwardedRef}\n className={classNames(\n \"lb-ai-chat-message lb-ai-chat-user-message\",\n className\n )}\n >\n {message.deletedAt !== undefined ? (\n <div className=\"lb-ai-chat-message-deleted\">\n {$.AI_CHAT_MESSAGE_DELETED}\n </div>\n ) : (\n <div className=\"lb-ai-chat-message-content\">\n <AiMessage.Content\n message={message}\n components={{\n TextPart: PlainTextPart,\n }}\n className=\"lb-prose lb-ai-chat-message-text\"\n />\n </div>\n )}\n </div>\n );\n }\n )\n);\n"],"names":["AiMessage.Content"],"mappings":";;;;;;;AA0BA,SAAS,aAAA,CAAc,EAAE,IAAA,EAA4B,EAAA;AACnD,EAAA,uBAAQ,GAAA,CAAA,GAAA,EAAA;AAAA,IAAG,QAAK,EAAA,IAAA,CAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACvB,CAAA;AAEO,MAAM,iBAAoB,GAAA,IAAA;AAAA,EAC/B,UAAA;AAAA,IACE,CAAC,EAAE,OAAA,EAAS,SAAW,EAAA,SAAA,IAAa,YAAiB,KAAA;AACnD,MAAM,MAAA,CAAA,GAAI,aAAa,SAAS,CAAA,CAAA;AAChC,MAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,GAAK,EAAA,YAAA;AAAA,QACL,SAAW,EAAA,UAAA;AAAA,UACT,4CAAA;AAAA,UACA,SAAA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA,OAAA,CAAQ,SAAc,KAAA,KAAA,CAAA,mBACpB,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACZ,QAAE,EAAA,CAAA,CAAA,uBAAA;AAAA,SACL,oBAEC,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,4BAAA;AAAA,UACb,QAAA,kBAAA,GAAA,CAACA,gBAAA,EAAA;AAAA,YACC,OAAA;AAAA,YACA,UAAY,EAAA;AAAA,cACV,QAAU,EAAA,aAAA;AAAA,aACZ;AAAA,YACA,SAAU,EAAA,kCAAA;AAAA,WACZ,CAAA;AAAA,SACF,CAAA;AAAA,OAEJ,CAAA,CAAA;AAAA,KAEJ;AAAA,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs","sources":["../../../src/components/internal/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { classNames } from \"../../utils/class-names\";\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n variant?: \"default\" | \"toolbar\" | \"outline\" | \"primary\" | \"secondary\";\n size?: \"default\" | \"large\";\n disableable?: boolean;\n icon?: ReactNode;\n}\n\nexport const CustomButton = forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, \"icon\">\n>(\n (\n {\n variant = \"default\",\n size = \"default\",\n disableable = true,\n className,\n children,\n ...props\n },\n forwardedRef\n ) => {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"lb-button\",\n !disableable && \"lb-button:non-disableable\",\n className\n )}\n data-variant={variant}\n data-size={size}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </button>\n );\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, ...props }, forwardedRef) => {\n return (\n <CustomButton {...props} ref={forwardedRef}>\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n </CustomButton>\n );\n }\n);\n\nexport const SelectButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, className, ...props }, forwardedRef) => {\n return (\n <CustomButton\n {...props}\n type=\"button\"\n className={classNames(\"lb-select-button\", className)}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n <span className=\"lb-select-button-chevron\">\n <ChevronDownIcon />\n </span>\n </CustomButton>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;;;AAeO;AAAqB;AAKxB;AACY;AACH;AACO;AACd;AACA;AACG;AAIL;AACG;AACM;AACM;AACT;AACgB;AAChB;AACF;AACc;AACH;AACP;AACC;AAEJ;AACH;AAGN;AAEO;AAAe;AAElB;AACG;AAAiB;AAAY;AAC3B;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AAAA;AACpE;AAGN;AAEO;AAAqB;AAExB;AACG;AACK;AACC;AAC8C;AAC9C;AAEJ;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AACjE;AAAe;AACG;AACnB;AAAA;AACF;AAGN;;;;"}
1
+ {"version":3,"file":"Button.cjs","sources":["../../../src/components/internal/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { classNames } from \"../../utils/class-names\";\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n variant?:\n | \"default\"\n | \"toolbar\"\n | \"outline\"\n | \"primary\"\n | \"secondary\"\n | \"destructive\";\n size?: \"default\" | \"large\";\n disableable?: boolean;\n icon?: ReactNode;\n}\n\nexport const CustomButton = forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, \"icon\">\n>(\n (\n {\n variant = \"default\",\n size = \"default\",\n disableable = true,\n className,\n children,\n ...props\n },\n forwardedRef\n ) => {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"lb-button\",\n !disableable && \"lb-button:non-disableable\",\n className\n )}\n data-variant={variant}\n data-size={size}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </button>\n );\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, ...props }, forwardedRef) => {\n return (\n <CustomButton {...props} ref={forwardedRef}>\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n </CustomButton>\n );\n }\n);\n\nexport const SelectButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, className, ...props }, forwardedRef) => {\n return (\n <CustomButton\n {...props}\n type=\"button\"\n className={classNames(\"lb-select-button\", className)}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n <span className=\"lb-select-button-chevron\">\n <ChevronDownIcon />\n </span>\n </CustomButton>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;;;AAqBO;AAAqB;AAKxB;AACY;AACH;AACO;AACd;AACA;AACG;AAIL;AACG;AACM;AACM;AACT;AACgB;AAChB;AACF;AACc;AACH;AACP;AACC;AAEJ;AACH;AAGN;AAEO;AAAe;AAElB;AACG;AAAiB;AAAY;AAC3B;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AAAA;AACpE;AAGN;AAEO;AAAqB;AAExB;AACG;AACK;AACC;AAC8C;AAC9C;AAEJ;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AACjE;AAAe;AACG;AACnB;AAAA;AACF;AAGN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../../src/components/internal/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { classNames } from \"../../utils/class-names\";\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n variant?: \"default\" | \"toolbar\" | \"outline\" | \"primary\" | \"secondary\";\n size?: \"default\" | \"large\";\n disableable?: boolean;\n icon?: ReactNode;\n}\n\nexport const CustomButton = forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, \"icon\">\n>(\n (\n {\n variant = \"default\",\n size = \"default\",\n disableable = true,\n className,\n children,\n ...props\n },\n forwardedRef\n ) => {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"lb-button\",\n !disableable && \"lb-button:non-disableable\",\n className\n )}\n data-variant={variant}\n data-size={size}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </button>\n );\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, ...props }, forwardedRef) => {\n return (\n <CustomButton {...props} ref={forwardedRef}>\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n </CustomButton>\n );\n }\n);\n\nexport const SelectButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, className, ...props }, forwardedRef) => {\n return (\n <CustomButton\n {...props}\n type=\"button\"\n className={classNames(\"lb-select-button\", className)}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n <span className=\"lb-select-button-chevron\">\n <ChevronDownIcon />\n </span>\n </CustomButton>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;AAeO;AAAqB;AAKxB;AACY;AACH;AACO;AACd;AACA;AACG;AAIL;AACG;AACM;AACM;AACT;AACgB;AAChB;AACF;AACc;AACH;AACP;AACC;AAEJ;AACH;AAGN;AAEO;AAAe;AAElB;AACG;AAAiB;AAAY;AAC3B;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AAAA;AACpE;AAGN;AAEO;AAAqB;AAExB;AACG;AACK;AACC;AAC8C;AAC9C;AAEJ;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AACjE;AAAe;AACG;AACnB;AAAA;AACF;AAGN;;"}
1
+ {"version":3,"file":"Button.js","sources":["../../../src/components/internal/Button.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ComponentProps, ReactNode } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { ChevronDownIcon } from \"../../icons/ChevronDown\";\nimport { classNames } from \"../../utils/class-names\";\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n variant?:\n | \"default\"\n | \"toolbar\"\n | \"outline\"\n | \"primary\"\n | \"secondary\"\n | \"destructive\";\n size?: \"default\" | \"large\";\n disableable?: boolean;\n icon?: ReactNode;\n}\n\nexport const CustomButton = forwardRef<\n HTMLButtonElement,\n Omit<ButtonProps, \"icon\">\n>(\n (\n {\n variant = \"default\",\n size = \"default\",\n disableable = true,\n className,\n children,\n ...props\n },\n forwardedRef\n ) => {\n return (\n <button\n type=\"button\"\n className={classNames(\n \"lb-button\",\n !disableable && \"lb-button:non-disableable\",\n className\n )}\n data-variant={variant}\n data-size={size}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </button>\n );\n }\n);\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, ...props }, forwardedRef) => {\n return (\n <CustomButton {...props} ref={forwardedRef}>\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n </CustomButton>\n );\n }\n);\n\nexport const SelectButton = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ icon, children, className, ...props }, forwardedRef) => {\n return (\n <CustomButton\n {...props}\n type=\"button\"\n className={classNames(\"lb-select-button\", className)}\n ref={forwardedRef}\n >\n {icon ? <span className=\"lb-icon-container\">{icon}</span> : null}\n {children ? <span className=\"lb-button-label\">{children}</span> : null}\n <span className=\"lb-select-button-chevron\">\n <ChevronDownIcon />\n </span>\n </CustomButton>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;AAqBO;AAAqB;AAKxB;AACY;AACH;AACO;AACd;AACA;AACG;AAIL;AACG;AACM;AACM;AACT;AACgB;AAChB;AACF;AACc;AACH;AACP;AACC;AAEJ;AACH;AAGN;AAEO;AAAe;AAElB;AACG;AAAiB;AAAY;AAC3B;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AAAA;AACpE;AAGN;AAEO;AAAqB;AAExB;AACG;AACK;AACC;AAC8C;AAC9C;AAEJ;AAAQ;AAAe;AAAqB;AAAe;AAC/C;AAAe;AAAmB;AAAmB;AACjE;AAAe;AACG;AACnB;AAAA;AACF;AAGN;;"}
@@ -0,0 +1,72 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ require('../../icons/index.cjs');
6
+ var Button = require('./Button.cjs');
7
+ var Tooltip = require('./Tooltip.cjs');
8
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
9
+ var Check = require('../../icons/Check.cjs');
10
+ var Copy = require('../../icons/Copy.cjs');
11
+
12
+ const COPY_DELAY = 1500;
13
+ function CodeBlock({ title, code }) {
14
+ const [isCopied, setCopied] = react.useState(false);
15
+ const timeoutRef = react.useRef(null);
16
+ react.useEffect(() => {
17
+ if (isCopied) {
18
+ timeoutRef.current = setTimeout(() => {
19
+ setCopied(false);
20
+ }, COPY_DELAY);
21
+ }
22
+ return () => {
23
+ if (timeoutRef.current) {
24
+ clearTimeout(timeoutRef.current);
25
+ }
26
+ };
27
+ }, [isCopied]);
28
+ const handleCopy = react.useCallback(() => {
29
+ try {
30
+ navigator.clipboard.writeText(code);
31
+ setCopied(true);
32
+ } catch (error) {
33
+ console.error(error);
34
+ }
35
+ }, [code]);
36
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, {
37
+ children: /* @__PURE__ */ jsxRuntime.jsxs("div", {
38
+ className: "lb-code-block",
39
+ children: [
40
+ /* @__PURE__ */ jsxRuntime.jsxs("div", {
41
+ className: "lb-code-block-header",
42
+ children: [
43
+ /* @__PURE__ */ jsxRuntime.jsx("span", {
44
+ className: "lb-code-block-title",
45
+ children: title
46
+ }),
47
+ /* @__PURE__ */ jsxRuntime.jsx("div", {
48
+ className: "lb-code-block-header-actions",
49
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
50
+ content: isCopied ? null : "Copy",
51
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
52
+ className: "lb-code-block-header-action",
53
+ icon: isCopied ? /* @__PURE__ */ jsxRuntime.jsx(Check.CheckIcon, {}) : /* @__PURE__ */ jsxRuntime.jsx(Copy.CopyIcon, {}),
54
+ onClick: handleCopy
55
+ })
56
+ })
57
+ })
58
+ ]
59
+ }),
60
+ /* @__PURE__ */ jsxRuntime.jsx("pre", {
61
+ className: "lb-code-block-content",
62
+ children: /* @__PURE__ */ jsxRuntime.jsx("code", {
63
+ children: code
64
+ })
65
+ })
66
+ ]
67
+ })
68
+ });
69
+ }
70
+
71
+ exports.CodeBlock = CodeBlock;
72
+ //# sourceMappingURL=CodeBlock.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeBlock.cjs","sources":["../../../src/components/internal/CodeBlock.tsx"],"sourcesContent":["import type { ComponentProps } from \"react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { CheckIcon, CopyIcon } from \"../../icons\";\nimport { Button } from \"./Button\";\nimport { Tooltip, TooltipProvider } from \"./Tooltip\";\n\nconst COPY_DELAY = 1500;\n\ninterface CodeBlockProps extends Omit<ComponentProps<\"div\">, \"title\"> {\n title: string;\n code: string;\n}\n\nexport function CodeBlock({ title, code }: CodeBlockProps) {\n const [isCopied, setCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (isCopied) {\n timeoutRef.current = setTimeout(() => {\n setCopied(false);\n }, COPY_DELAY);\n }\n\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [isCopied]);\n\n const handleCopy = useCallback(() => {\n try {\n navigator.clipboard.writeText(code);\n setCopied(true);\n } catch (error) {\n console.error(error);\n }\n }, [code]);\n\n return (\n <TooltipProvider>\n <div className=\"lb-code-block\">\n <div className=\"lb-code-block-header\">\n <span className=\"lb-code-block-title\">{title}</span>\n <div className=\"lb-code-block-header-actions\">\n <Tooltip content={isCopied ? null : \"Copy\"}>\n <Button\n className=\"lb-code-block-header-action\"\n icon={isCopied ? <CheckIcon /> : <CopyIcon />}\n onClick={handleCopy}\n />\n </Tooltip>\n </div>\n </div>\n <pre className=\"lb-code-block-content\">\n <code>{code}</code>\n </pre>\n </div>\n </TooltipProvider>\n );\n}\n"],"names":["useState","useRef","useEffect","useCallback","jsx","TooltipProvider","jsxs","Tooltip","Button","CheckIcon","CopyIcon"],"mappings":";;;;;;;;;;;AAOA,MAAM,UAAa,GAAA,IAAA,CAAA;AAOZ,SAAS,SAAU,CAAA,EAAE,KAAO,EAAA,IAAA,EAAwB,EAAA;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA,CAAA;AAC5C,EAAM,MAAA,UAAA,GAAaC,aAA6C,IAAI,CAAA,CAAA;AAEpE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAU,EAAA;AACZ,MAAW,UAAA,CAAA,OAAA,GAAU,WAAW,MAAM;AACpC,QAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AAAA,SACd,UAAU,CAAA,CAAA;AAAA,KACf;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAS,EAAA;AACtB,QAAA,YAAA,CAAa,WAAW,OAAO,CAAA,CAAA;AAAA,OACjC;AAAA,KACF,CAAA;AAAA,GACF,EAAG,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEb,EAAM,MAAA,UAAA,GAAaC,kBAAY,MAAM;AACnC,IAAI,IAAA;AACF,MAAU,SAAA,CAAA,SAAA,CAAU,UAAU,IAAI,CAAA,CAAA;AAClC,MAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AAAA,aACP,KAAP,EAAA;AACA,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA,CAAA;AAAA,KACrB;AAAA,GACF,EAAG,CAAC,IAAI,CAAC,CAAA,CAAA;AAET,EAAA,uBACGC,cAAA,CAAAC,gCAAA,EAAA;AAAA,IACC,QAAC,kBAAAC,eAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAU,EAAA,eAAA;AAAA,MACb,QAAA,EAAA;AAAA,wBAACA,eAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,sBAAA;AAAA,UACb,QAAA,EAAA;AAAA,4BAACF,cAAA,CAAA,MAAA,EAAA;AAAA,cAAK,SAAU,EAAA,qBAAA;AAAA,cAAuB,QAAA,EAAA,KAAA;AAAA,aAAM,CAAA;AAAA,4BAC5CA,cAAA,CAAA,KAAA,EAAA;AAAA,cAAI,SAAU,EAAA,8BAAA;AAAA,cACb,QAAC,kBAAAA,cAAA,CAAAG,eAAA,EAAA;AAAA,gBAAQ,OAAA,EAAS,WAAW,IAAO,GAAA,MAAA;AAAA,gBAClC,QAAC,kBAAAH,cAAA,CAAAI,aAAA,EAAA;AAAA,kBACC,SAAU,EAAA,6BAAA;AAAA,kBACV,MAAM,QAAW,mBAAAJ,cAAA,CAACK,eAAU,EAAA,EAAA,CAAA,kCAAMC,aAAS,EAAA,EAAA,CAAA;AAAA,kBAC3C,OAAS,EAAA,UAAA;AAAA,iBACX,CAAA;AAAA,eACF,CAAA;AAAA,aACF,CAAA;AAAA,WAAA;AAAA,SACF,CAAA;AAAA,wBACCN,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAU,EAAA,uBAAA;AAAA,UACb,QAAC,kBAAAA,cAAA,CAAA,MAAA,EAAA;AAAA,YAAM,QAAA,EAAA,IAAA;AAAA,WAAK,CAAA;AAAA,SACd,CAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}