@liveblocks/react-ui 2.25.0-aiprivatebeta8 → 3.0.0

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 (181) hide show
  1. package/_private/package.json +2 -2
  2. package/dist/_private/index.cjs +14 -12
  3. package/dist/_private/index.cjs.map +1 -1
  4. package/dist/_private/index.d.cts +146 -113
  5. package/dist/_private/index.d.ts +146 -113
  6. package/dist/_private/index.js +10 -5
  7. package/dist/_private/index.js.map +1 -1
  8. package/dist/components/AiChat.cjs +85 -121
  9. package/dist/components/AiChat.cjs.map +1 -1
  10. package/dist/components/AiChat.js +87 -123
  11. package/dist/components/AiChat.js.map +1 -1
  12. package/dist/components/AiTool.cjs +188 -0
  13. package/dist/components/AiTool.cjs.map +1 -0
  14. package/dist/components/AiTool.js +186 -0
  15. package/dist/components/AiTool.js.map +1 -0
  16. package/dist/components/Comment.cjs +259 -238
  17. package/dist/components/Comment.cjs.map +1 -1
  18. package/dist/components/Comment.js +261 -240
  19. package/dist/components/Comment.js.map +1 -1
  20. package/dist/components/Composer.cjs +42 -30
  21. package/dist/components/Composer.cjs.map +1 -1
  22. package/dist/components/Composer.js +44 -32
  23. package/dist/components/Composer.js.map +1 -1
  24. package/dist/components/InboxNotificationList.cjs +11 -3
  25. package/dist/components/InboxNotificationList.cjs.map +1 -1
  26. package/dist/components/InboxNotificationList.js +12 -4
  27. package/dist/components/InboxNotificationList.js.map +1 -1
  28. package/dist/components/Thread.cjs +7 -1
  29. package/dist/components/Thread.cjs.map +1 -1
  30. package/dist/components/Thread.js +8 -2
  31. package/dist/components/Thread.js.map +1 -1
  32. package/dist/components/internal/AiChatAssistantMessage.cjs +75 -199
  33. package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -1
  34. package/dist/components/internal/AiChatAssistantMessage.js +77 -201
  35. package/dist/components/internal/AiChatAssistantMessage.js.map +1 -1
  36. package/dist/components/internal/AiChatComposer.cjs +1 -1
  37. package/dist/components/internal/AiChatComposer.cjs.map +1 -1
  38. package/dist/components/internal/AiChatComposer.js +1 -1
  39. package/dist/components/internal/AiChatComposer.js.map +1 -1
  40. package/dist/components/internal/AiChatUserMessage.cjs +17 -10
  41. package/dist/components/internal/AiChatUserMessage.cjs.map +1 -1
  42. package/dist/components/internal/AiChatUserMessage.js +17 -10
  43. package/dist/components/internal/AiChatUserMessage.js.map +1 -1
  44. package/dist/components/internal/Button.cjs.map +1 -1
  45. package/dist/components/internal/Button.js.map +1 -1
  46. package/dist/components/internal/CodeBlock.cjs +75 -0
  47. package/dist/components/internal/CodeBlock.cjs.map +1 -0
  48. package/dist/components/internal/CodeBlock.js +73 -0
  49. package/dist/components/internal/CodeBlock.js.map +1 -0
  50. package/dist/components/internal/Dropdown.cjs +1 -1
  51. package/dist/components/internal/Dropdown.cjs.map +1 -1
  52. package/dist/components/internal/Dropdown.js +2 -2
  53. package/dist/components/internal/Dropdown.js.map +1 -1
  54. package/dist/components/internal/Emoji.cjs +12 -4
  55. package/dist/components/internal/Emoji.cjs.map +1 -1
  56. package/dist/components/internal/Emoji.js +12 -4
  57. package/dist/components/internal/Emoji.js.map +1 -1
  58. package/dist/components/internal/EmojiPicker.cjs +1 -1
  59. package/dist/components/internal/EmojiPicker.cjs.map +1 -1
  60. package/dist/components/internal/EmojiPicker.js +2 -2
  61. package/dist/components/internal/EmojiPicker.js.map +1 -1
  62. package/dist/components/internal/InboxNotificationThread.cjs +5 -2
  63. package/dist/components/internal/InboxNotificationThread.cjs.map +1 -1
  64. package/dist/components/internal/InboxNotificationThread.js +6 -3
  65. package/dist/components/internal/InboxNotificationThread.js.map +1 -1
  66. package/dist/components/internal/Prose.cjs +37 -0
  67. package/dist/components/internal/Prose.cjs.map +1 -0
  68. package/dist/components/internal/Prose.js +35 -0
  69. package/dist/components/internal/Prose.js.map +1 -0
  70. package/dist/components/internal/Tooltip.cjs +1 -1
  71. package/dist/components/internal/Tooltip.cjs.map +1 -1
  72. package/dist/components/internal/Tooltip.js +2 -2
  73. package/dist/components/internal/Tooltip.js.map +1 -1
  74. package/dist/config.cjs +9 -9
  75. package/dist/config.cjs.map +1 -1
  76. package/dist/config.js +8 -8
  77. package/dist/config.js.map +1 -1
  78. package/dist/icons/CrossCircleFill.cjs +25 -0
  79. package/dist/icons/CrossCircleFill.cjs.map +1 -0
  80. package/dist/icons/CrossCircleFill.js +23 -0
  81. package/dist/icons/CrossCircleFill.js.map +1 -0
  82. package/dist/icons/MinusCircle.cjs +23 -0
  83. package/dist/icons/MinusCircle.cjs.map +1 -0
  84. package/dist/icons/MinusCircle.js +21 -0
  85. package/dist/icons/MinusCircle.js.map +1 -0
  86. package/dist/icons/index.cjs +4 -0
  87. package/dist/icons/index.cjs.map +1 -1
  88. package/dist/icons/index.js +2 -0
  89. package/dist/icons/index.js.map +1 -1
  90. package/dist/index.cjs +3 -3
  91. package/dist/index.cjs.map +1 -1
  92. package/dist/index.d.cts +270 -22
  93. package/dist/index.d.ts +270 -22
  94. package/dist/index.js +2 -2
  95. package/dist/index.js.map +1 -1
  96. package/dist/overrides.cjs +6 -4
  97. package/dist/overrides.cjs.map +1 -1
  98. package/dist/overrides.js +6 -4
  99. package/dist/overrides.js.map +1 -1
  100. package/dist/primitives/AiMessage/contexts.cjs +18 -0
  101. package/dist/primitives/AiMessage/contexts.cjs.map +1 -0
  102. package/dist/primitives/AiMessage/contexts.js +15 -0
  103. package/dist/primitives/AiMessage/contexts.js.map +1 -0
  104. package/dist/primitives/AiMessage/index.cjs +77 -0
  105. package/dist/primitives/AiMessage/index.cjs.map +1 -0
  106. package/dist/primitives/AiMessage/index.js +75 -0
  107. package/dist/primitives/AiMessage/index.js.map +1 -0
  108. package/dist/primitives/AiMessage/tool-invocation.cjs +70 -0
  109. package/dist/primitives/AiMessage/tool-invocation.cjs.map +1 -0
  110. package/dist/primitives/AiMessage/tool-invocation.js +68 -0
  111. package/dist/primitives/AiMessage/tool-invocation.js.map +1 -0
  112. package/dist/primitives/{internal/Collapsible → Collapsible}/index.cjs +39 -17
  113. package/dist/primitives/Collapsible/index.cjs.map +1 -0
  114. package/dist/primitives/{internal/Collapsible → Collapsible}/index.js +37 -15
  115. package/dist/primitives/Collapsible/index.js.map +1 -0
  116. package/dist/primitives/Comment/index.cjs +5 -4
  117. package/dist/primitives/Comment/index.cjs.map +1 -1
  118. package/dist/primitives/Comment/index.js +5 -4
  119. package/dist/primitives/Comment/index.js.map +1 -1
  120. package/dist/primitives/Composer/index.cjs +49 -41
  121. package/dist/primitives/Composer/index.cjs.map +1 -1
  122. package/dist/primitives/Composer/index.js +50 -42
  123. package/dist/primitives/Composer/index.js.map +1 -1
  124. package/dist/primitives/Composer/slate/plugins/mentions.cjs +4 -4
  125. package/dist/primitives/Composer/slate/plugins/mentions.cjs.map +1 -1
  126. package/dist/primitives/Composer/slate/plugins/mentions.js +4 -4
  127. package/dist/primitives/Composer/slate/plugins/mentions.js.map +1 -1
  128. package/dist/primitives/Composer/utils.cjs +3 -6
  129. package/dist/primitives/Composer/utils.cjs.map +1 -1
  130. package/dist/primitives/Composer/utils.js +3 -6
  131. package/dist/primitives/Composer/utils.js.map +1 -1
  132. package/dist/primitives/{internal/Markdown.cjs → Markdown.cjs} +105 -65
  133. package/dist/primitives/Markdown.cjs.map +1 -0
  134. package/dist/primitives/{internal/Markdown.js → Markdown.js} +106 -65
  135. package/dist/primitives/Markdown.js.map +1 -0
  136. package/dist/primitives/index.cjs +4 -6
  137. package/dist/primitives/index.cjs.map +1 -1
  138. package/dist/primitives/index.d.cts +20 -93
  139. package/dist/primitives/index.d.ts +20 -93
  140. package/dist/primitives/index.js +4 -6
  141. package/dist/primitives/index.js.map +1 -1
  142. package/dist/utils/ErrorBoundary.cjs +48 -0
  143. package/dist/utils/ErrorBoundary.cjs.map +1 -0
  144. package/dist/utils/ErrorBoundary.js +45 -0
  145. package/dist/utils/ErrorBoundary.js.map +1 -0
  146. package/dist/utils/use-controllable-state.cjs +25 -2
  147. package/dist/utils/use-controllable-state.cjs.map +1 -1
  148. package/dist/utils/use-controllable-state.js +25 -3
  149. package/dist/utils/use-controllable-state.js.map +1 -1
  150. package/dist/utils/use-visible.cjs +65 -45
  151. package/dist/utils/use-visible.cjs.map +1 -1
  152. package/dist/utils/use-visible.js +66 -46
  153. package/dist/utils/use-visible.js.map +1 -1
  154. package/dist/version.cjs +1 -1
  155. package/dist/version.cjs.map +1 -1
  156. package/dist/version.js +1 -1
  157. package/dist/version.js.map +1 -1
  158. package/package.json +16 -5
  159. package/primitives/package.json +2 -2
  160. package/src/styles/constants.css +1 -1
  161. package/src/styles/dark/index.css +7 -3
  162. package/src/styles/index.css +572 -252
  163. package/src/styles/utils.css +1 -1
  164. package/styles/dark/attributes.css +1 -1
  165. package/styles/dark/attributes.css.map +1 -1
  166. package/styles/dark/media-query.css +1 -1
  167. package/styles/dark/media-query.css.map +1 -1
  168. package/styles.css +1 -1
  169. package/styles.css.map +1 -1
  170. package/dist/components/AiToolDebugger.cjs +0 -74
  171. package/dist/components/AiToolDebugger.cjs.map +0 -1
  172. package/dist/components/AiToolDebugger.js +0 -72
  173. package/dist/components/AiToolDebugger.js.map +0 -1
  174. package/dist/primitives/internal/Collapsible/index.cjs.map +0 -1
  175. package/dist/primitives/internal/Collapsible/index.js.map +0 -1
  176. package/dist/primitives/internal/Emoji.cjs +0 -32
  177. package/dist/primitives/internal/Emoji.cjs.map +0 -1
  178. package/dist/primitives/internal/Emoji.js +0 -30
  179. package/dist/primitives/internal/Emoji.js.map +0 -1
  180. package/dist/primitives/internal/Markdown.cjs.map +0 -1
  181. package/dist/primitives/internal/Markdown.js.map +0 -1
@@ -2,9 +2,11 @@
2
2
  'use strict';
3
3
 
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
+ var core = require('@liveblocks/core');
5
6
  var _private = require('@liveblocks/react/_private');
6
7
  var TogglePrimitive = require('@radix-ui/react-toggle');
7
8
  var react = require('react');
9
+ var components = require('../components.cjs');
8
10
  var constants = require('../constants.cjs');
9
11
  var Check = require('../icons/Check.cjs');
10
12
  var Cross = require('../icons/Cross.cjs');
@@ -58,22 +60,27 @@ var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(TogglePri
58
60
 
59
61
  const REACTIONS_TRUNCATE = 5;
60
62
  function CommentMention({
61
- userId,
63
+ mention,
62
64
  className,
63
65
  ...props
64
66
  }) {
65
67
  const currentId = shared.useCurrentUserId();
66
- return /* @__PURE__ */ jsxRuntime.jsxs(index.Mention, {
67
- className: classNames.classNames("lb-comment-mention", className),
68
- "data-self": userId === currentId ? "" : void 0,
69
- ...props,
70
- children: [
71
- constants.MENTION_CHARACTER,
72
- /* @__PURE__ */ jsxRuntime.jsx(User.User, {
73
- userId
74
- })
75
- ]
76
- });
68
+ switch (mention.kind) {
69
+ case "user":
70
+ return /* @__PURE__ */ jsxRuntime.jsxs(index.Mention, {
71
+ className: classNames.classNames("lb-comment-mention", className),
72
+ "data-self": mention.id === currentId ? "" : void 0,
73
+ ...props,
74
+ children: [
75
+ constants.MENTION_CHARACTER,
76
+ /* @__PURE__ */ jsxRuntime.jsx(User.User, {
77
+ userId: mention.id
78
+ })
79
+ ]
80
+ });
81
+ default:
82
+ return core.assertNever(mention.kind, "Unhandled mention kind");
83
+ }
77
84
  }
78
85
  function CommentLink({
79
86
  href,
@@ -81,11 +88,16 @@ function CommentLink({
81
88
  className,
82
89
  ...props
83
90
  }) {
91
+ const { Anchor } = components.useComponents();
84
92
  return /* @__PURE__ */ jsxRuntime.jsx(index.Link, {
85
93
  className: classNames.classNames("lb-comment-link", className),
86
94
  href,
87
95
  ...props,
88
- children
96
+ asChild: true,
97
+ children: /* @__PURE__ */ jsxRuntime.jsx(Anchor, {
98
+ ...props,
99
+ children
100
+ })
89
101
  });
90
102
  }
91
103
  function CommentNonInteractiveLink({
@@ -292,10 +304,12 @@ function AutoMarkReadThreadIdHandler({
292
304
  }) {
293
305
  const markThreadAsRead = _private.useMarkRoomThreadAsRead(roomId);
294
306
  const isWindowFocused = useWindowFocus.useWindowFocus();
295
- useVisible.useVisibleCallback(
307
+ useVisible.useIntersectionCallback(
296
308
  commentRef,
297
- () => {
298
- markThreadAsRead(threadId);
309
+ (isIntersecting) => {
310
+ if (isIntersecting) {
311
+ markThreadAsRead(threadId);
312
+ }
299
313
  },
300
314
  {
301
315
  enabled: isWindowFocused
@@ -318,6 +332,7 @@ const Comment = react.forwardRef(
318
332
  onCommentEdit,
319
333
  onCommentDelete,
320
334
  overrides: overrides$1,
335
+ components: components$1,
321
336
  className,
322
337
  additionalActions,
323
338
  additionalActionsClassName,
@@ -341,6 +356,8 @@ const Comment = react.forwardRef(
341
356
  const { mediaAttachments, fileAttachments } = react.useMemo(() => {
342
357
  return Attachment.separateMediaAttachments(comment.attachments);
343
358
  }, [comment.attachments]);
359
+ const permissions = _private.useRoomPermissions(comment.roomId);
360
+ const canComment = permissions.size > 0 ? permissions.has(core.Permission.CommentsWrite) || permissions.has(core.Permission.Write) : true;
344
361
  const stopPropagation = react.useCallback((event) => {
345
362
  event.stopPropagation();
346
363
  }, []);
@@ -428,254 +445,258 @@ const Comment = react.forwardRef(
428
445
  if (!showDeleted && !comment.body) {
429
446
  return null;
430
447
  }
431
- return /* @__PURE__ */ jsxRuntime.jsxs(TooltipPrimitive.TooltipProvider, {
432
- children: [
433
- autoMarkReadThreadId && /* @__PURE__ */ jsxRuntime.jsx(AutoMarkReadThreadIdHandler, {
434
- commentRef: ref,
435
- threadId: autoMarkReadThreadId,
436
- roomId: comment.roomId
437
- }),
438
- /* @__PURE__ */ jsxRuntime.jsxs("div", {
439
- id: comment.id,
440
- className: classNames.classNames(
441
- "lb-root lb-comment",
442
- indentContent && "lb-comment:indent-content",
443
- showActions === "hover" && "lb-comment:show-actions-hover",
444
- (isMoreActionOpen || isReactionActionOpen) && "lb-comment:action-open",
445
- className
446
- ),
447
- "data-deleted": !comment.body ? "" : void 0,
448
- "data-editing": isEditing ? "" : void 0,
449
- "data-target": isTarget ? "" : void 0,
450
- dir: $.dir,
451
- ...props,
452
- ref: mergedRefs,
453
- children: [
454
- /* @__PURE__ */ jsxRuntime.jsxs("div", {
455
- className: "lb-comment-header",
456
- children: [
457
- /* @__PURE__ */ jsxRuntime.jsxs("div", {
458
- className: "lb-comment-details",
459
- children: [
460
- /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, {
461
- className: "lb-comment-avatar",
462
- userId: comment.userId,
463
- onClick: handleAuthorClick
464
- }),
465
- /* @__PURE__ */ jsxRuntime.jsxs("span", {
466
- className: "lb-comment-details-labels",
467
- children: [
468
- /* @__PURE__ */ jsxRuntime.jsx(User.User, {
469
- className: "lb-comment-author",
470
- userId: comment.userId,
471
- onClick: handleAuthorClick
472
- }),
473
- /* @__PURE__ */ jsxRuntime.jsxs("span", {
474
- className: "lb-comment-date",
475
- children: [
476
- /* @__PURE__ */ jsxRuntime.jsx(Timestamp.Timestamp, {
477
- locale: $.locale,
478
- date: comment.createdAt,
479
- className: "lb-date lb-comment-date-created"
480
- }),
481
- comment.editedAt && comment.body && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
482
- children: [
483
- " ",
484
- /* @__PURE__ */ jsxRuntime.jsx("span", {
485
- className: "lb-comment-date-edited",
486
- children: $.COMMENT_EDITED
487
- })
488
- ]
489
- })
490
- ]
491
- })
492
- ]
493
- })
494
- ]
495
- }),
496
- showActions && !isEditing && /* @__PURE__ */ jsxRuntime.jsxs("div", {
497
- className: classNames.classNames(
498
- "lb-comment-actions",
499
- additionalActionsClassName
500
- ),
501
- children: [
502
- additionalActions ?? null,
503
- showReactions && /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, {
504
- onEmojiSelect: handleReactionSelect,
505
- onOpenChange: setReactionActionOpen,
506
- children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
507
- content: $.COMMENT_ADD_REACTION,
508
- children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive.PopoverTrigger, {
509
- asChild: true,
510
- children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
511
- className: "lb-comment-action",
512
- onClick: stopPropagation,
513
- "aria-label": $.COMMENT_ADD_REACTION,
514
- icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
515
- })
516
- })
517
- })
518
- }),
519
- comment.userId === currentUserId || additionalDropdownItemsBefore || additionalDropdownItemsAfter ? /* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown, {
520
- open: isMoreActionOpen,
521
- onOpenChange: setMoreActionOpen,
522
- align: "end",
523
- content: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
448
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, {
449
+ children: /* @__PURE__ */ jsxRuntime.jsxs(components.ComponentsProvider, {
450
+ components: components$1,
451
+ children: [
452
+ autoMarkReadThreadId && /* @__PURE__ */ jsxRuntime.jsx(AutoMarkReadThreadIdHandler, {
453
+ commentRef: ref,
454
+ threadId: autoMarkReadThreadId,
455
+ roomId: comment.roomId
456
+ }),
457
+ /* @__PURE__ */ jsxRuntime.jsxs("div", {
458
+ id: comment.id,
459
+ className: classNames.classNames(
460
+ "lb-root lb-comment",
461
+ indentContent && "lb-comment:indent-content",
462
+ showActions === "hover" && "lb-comment:show-actions-hover",
463
+ (isMoreActionOpen || isReactionActionOpen) && "lb-comment:action-open",
464
+ className
465
+ ),
466
+ "data-deleted": !comment.body ? "" : void 0,
467
+ "data-editing": isEditing ? "" : void 0,
468
+ "data-target": isTarget ? "" : void 0,
469
+ dir: $.dir,
470
+ ...props,
471
+ ref: mergedRefs,
472
+ children: [
473
+ /* @__PURE__ */ jsxRuntime.jsxs("div", {
474
+ className: "lb-comment-header",
475
+ children: [
476
+ /* @__PURE__ */ jsxRuntime.jsxs("div", {
477
+ className: "lb-comment-details",
478
+ children: [
479
+ /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, {
480
+ className: "lb-comment-avatar",
481
+ userId: comment.userId,
482
+ onClick: handleAuthorClick
483
+ }),
484
+ /* @__PURE__ */ jsxRuntime.jsxs("span", {
485
+ className: "lb-comment-details-labels",
524
486
  children: [
525
- additionalDropdownItemsBefore,
526
- comment.userId === currentUserId && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
487
+ /* @__PURE__ */ jsxRuntime.jsx(User.User, {
488
+ className: "lb-comment-author",
489
+ userId: comment.userId,
490
+ onClick: handleAuthorClick
491
+ }),
492
+ /* @__PURE__ */ jsxRuntime.jsxs("span", {
493
+ className: "lb-comment-date",
527
494
  children: [
528
- /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownItem, {
529
- onSelect: handleEdit,
530
- onClick: stopPropagation,
531
- icon: /* @__PURE__ */ jsxRuntime.jsx(Edit.EditIcon, {}),
532
- children: $.COMMENT_EDIT
495
+ /* @__PURE__ */ jsxRuntime.jsx(Timestamp.Timestamp, {
496
+ locale: $.locale,
497
+ date: comment.createdAt,
498
+ className: "lb-date lb-comment-date-created"
533
499
  }),
534
- /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownItem, {
535
- onSelect: handleDelete,
536
- onClick: stopPropagation,
537
- icon: /* @__PURE__ */ jsxRuntime.jsx(Delete.DeleteIcon, {}),
538
- children: $.COMMENT_DELETE
500
+ comment.editedAt && comment.body && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
501
+ children: [
502
+ " ",
503
+ /* @__PURE__ */ jsxRuntime.jsx("span", {
504
+ className: "lb-comment-date-edited",
505
+ children: $.COMMENT_EDITED
506
+ })
507
+ ]
539
508
  })
540
509
  ]
541
- }),
542
- additionalDropdownItemsAfter
543
- ]
544
- }),
545
- children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
546
- content: $.COMMENT_MORE,
547
- children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive.DropdownMenuTrigger, {
548
- asChild: true,
549
- children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
550
- className: "lb-comment-action",
551
- disabled: !comment.body,
552
- onClick: stopPropagation,
553
- "aria-label": $.COMMENT_MORE,
554
- icon: /* @__PURE__ */ jsxRuntime.jsx(Ellipsis.EllipsisIcon, {})
555
510
  })
556
- })
557
- })
558
- }) : null
559
- ]
560
- })
561
- ]
562
- }),
563
- /* @__PURE__ */ jsxRuntime.jsx("div", {
564
- className: "lb-comment-content",
565
- children: isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Composer.Composer, {
566
- className: "lb-comment-composer",
567
- onComposerSubmit: handleEditSubmit,
568
- defaultValue: comment.body,
569
- defaultAttachments: comment.attachments,
570
- autoFocus: true,
571
- showAttribution: false,
572
- showAttachments,
573
- showFormattingControls: showComposerFormattingControls,
574
- actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
575
- children: [
576
- /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
577
- content: $.COMMENT_EDIT_COMPOSER_CANCEL,
578
- "aria-label": $.COMMENT_EDIT_COMPOSER_CANCEL,
579
- children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
580
- className: "lb-composer-action",
581
- onClick: handleEditCancel,
582
- icon: /* @__PURE__ */ jsxRuntime.jsx(Cross.CrossIcon, {})
583
- })
584
- }),
585
- /* @__PURE__ */ jsxRuntime.jsx(Tooltip.ShortcutTooltip, {
586
- content: $.COMMENT_EDIT_COMPOSER_SAVE,
587
- shortcut: "Enter",
588
- children: /* @__PURE__ */ jsxRuntime.jsx(index$1.Submit, {
589
- asChild: true,
590
- children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
591
- variant: "primary",
592
- className: "lb-composer-action",
593
- onClick: stopPropagation,
594
- "aria-label": $.COMMENT_EDIT_COMPOSER_SAVE,
595
- icon: /* @__PURE__ */ jsxRuntime.jsx(Check.CheckIcon, {})
596
- })
511
+ ]
597
512
  })
598
- })
599
- ]
600
- }),
601
- overrides: {
602
- COMPOSER_PLACEHOLDER: $.COMMENT_EDIT_COMPOSER_PLACEHOLDER
603
- },
604
- roomId: comment.roomId
605
- }) : comment.body ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
606
- children: [
607
- /* @__PURE__ */ jsxRuntime.jsx(index.Body, {
608
- className: "lb-comment-body",
609
- body: comment.body,
610
- components: {
611
- Mention: ({ userId }) => /* @__PURE__ */ jsxRuntime.jsx(CommentMention, {
612
- userId,
613
- onClick: (event) => onMentionClick?.(userId, event)
614
- }),
615
- Link: CommentLink
616
- }
617
- }),
618
- showAttachments && (mediaAttachments.length > 0 || fileAttachments.length > 0) ? /* @__PURE__ */ jsxRuntime.jsxs("div", {
619
- className: "lb-comment-attachments",
620
- children: [
621
- mediaAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
622
- className: "lb-attachments",
623
- children: mediaAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(CommentMediaAttachment, {
624
- attachment,
625
- overrides: overrides$1,
626
- onAttachmentClick,
627
- roomId: comment.roomId
628
- }, attachment.id))
629
- }) : null,
630
- fileAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
631
- className: "lb-attachments",
632
- children: fileAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(CommentFileAttachment, {
633
- attachment,
634
- overrides: overrides$1,
635
- onAttachmentClick,
636
- roomId: comment.roomId
637
- }, attachment.id))
638
- }) : null
639
513
  ]
640
- }) : null,
641
- showReactions && comment.reactions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", {
642
- className: "lb-comment-reactions",
514
+ }),
515
+ showActions && !isEditing && /* @__PURE__ */ jsxRuntime.jsxs("div", {
516
+ className: classNames.classNames(
517
+ "lb-comment-actions",
518
+ additionalActionsClassName
519
+ ),
643
520
  children: [
644
- comment.reactions.map((reaction) => /* @__PURE__ */ jsxRuntime.jsx(CommentReaction, {
645
- comment,
646
- reaction,
647
- overrides: overrides$1
648
- }, reaction.emoji)),
649
- /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, {
521
+ additionalActions ?? null,
522
+ showReactions && canComment ? /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, {
650
523
  onEmojiSelect: handleReactionSelect,
524
+ onOpenChange: setReactionActionOpen,
651
525
  children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
652
526
  content: $.COMMENT_ADD_REACTION,
653
527
  children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive.PopoverTrigger, {
654
528
  asChild: true,
655
529
  children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
656
- className: "lb-comment-reaction lb-comment-reaction-add",
657
- variant: "outline",
530
+ className: "lb-comment-action",
658
531
  onClick: stopPropagation,
659
532
  "aria-label": $.COMMENT_ADD_REACTION,
660
533
  icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
661
534
  })
662
535
  })
663
536
  })
664
- })
537
+ }) : null,
538
+ comment.userId === currentUserId || additionalDropdownItemsBefore || additionalDropdownItemsAfter ? /* @__PURE__ */ jsxRuntime.jsx(Dropdown.Dropdown, {
539
+ open: isMoreActionOpen,
540
+ onOpenChange: setMoreActionOpen,
541
+ align: "end",
542
+ content: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
543
+ children: [
544
+ additionalDropdownItemsBefore,
545
+ comment.userId === currentUserId && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
546
+ children: [
547
+ /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownItem, {
548
+ onSelect: handleEdit,
549
+ onClick: stopPropagation,
550
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Edit.EditIcon, {}),
551
+ children: $.COMMENT_EDIT
552
+ }),
553
+ /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownItem, {
554
+ onSelect: handleDelete,
555
+ onClick: stopPropagation,
556
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Delete.DeleteIcon, {}),
557
+ children: $.COMMENT_DELETE
558
+ })
559
+ ]
560
+ }),
561
+ additionalDropdownItemsAfter
562
+ ]
563
+ }),
564
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
565
+ content: $.COMMENT_MORE,
566
+ children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive.DropdownMenuTrigger, {
567
+ asChild: true,
568
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
569
+ className: "lb-comment-action",
570
+ disabled: !comment.body,
571
+ onClick: stopPropagation,
572
+ "aria-label": $.COMMENT_MORE,
573
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Ellipsis.EllipsisIcon, {})
574
+ })
575
+ })
576
+ })
577
+ }) : null
665
578
  ]
666
579
  })
667
580
  ]
668
- }) : /* @__PURE__ */ jsxRuntime.jsx("div", {
669
- className: "lb-comment-body",
670
- children: /* @__PURE__ */ jsxRuntime.jsx("p", {
671
- className: "lb-comment-deleted",
672
- children: $.COMMENT_DELETED
581
+ }),
582
+ /* @__PURE__ */ jsxRuntime.jsx("div", {
583
+ className: "lb-comment-content",
584
+ children: isEditing ? /* @__PURE__ */ jsxRuntime.jsx(Composer.Composer, {
585
+ className: "lb-comment-composer",
586
+ onComposerSubmit: handleEditSubmit,
587
+ defaultValue: comment.body,
588
+ defaultAttachments: comment.attachments,
589
+ autoFocus: true,
590
+ showAttribution: false,
591
+ showAttachments,
592
+ showFormattingControls: showComposerFormattingControls,
593
+ actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
594
+ children: [
595
+ /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
596
+ content: $.COMMENT_EDIT_COMPOSER_CANCEL,
597
+ "aria-label": $.COMMENT_EDIT_COMPOSER_CANCEL,
598
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
599
+ className: "lb-composer-action",
600
+ onClick: handleEditCancel,
601
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Cross.CrossIcon, {})
602
+ })
603
+ }),
604
+ /* @__PURE__ */ jsxRuntime.jsx(Tooltip.ShortcutTooltip, {
605
+ content: $.COMMENT_EDIT_COMPOSER_SAVE,
606
+ shortcut: "Enter",
607
+ children: /* @__PURE__ */ jsxRuntime.jsx(index$1.Submit, {
608
+ asChild: true,
609
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
610
+ variant: "primary",
611
+ className: "lb-composer-action",
612
+ onClick: stopPropagation,
613
+ "aria-label": $.COMMENT_EDIT_COMPOSER_SAVE,
614
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Check.CheckIcon, {})
615
+ })
616
+ })
617
+ })
618
+ ]
619
+ }),
620
+ overrides: {
621
+ COMPOSER_PLACEHOLDER: $.COMMENT_EDIT_COMPOSER_PLACEHOLDER
622
+ },
623
+ roomId: comment.roomId
624
+ }) : comment.body ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, {
625
+ children: [
626
+ /* @__PURE__ */ jsxRuntime.jsx(index.Body, {
627
+ className: "lb-comment-body",
628
+ body: comment.body,
629
+ components: {
630
+ Mention: ({ mention }) => /* @__PURE__ */ jsxRuntime.jsx(CommentMention, {
631
+ mention,
632
+ onClick: (event) => onMentionClick?.(mention, event)
633
+ }),
634
+ Link: CommentLink
635
+ }
636
+ }),
637
+ showAttachments && (mediaAttachments.length > 0 || fileAttachments.length > 0) ? /* @__PURE__ */ jsxRuntime.jsxs("div", {
638
+ className: "lb-comment-attachments",
639
+ children: [
640
+ mediaAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
641
+ className: "lb-attachments",
642
+ children: mediaAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(CommentMediaAttachment, {
643
+ attachment,
644
+ overrides: overrides$1,
645
+ onAttachmentClick,
646
+ roomId: comment.roomId
647
+ }, attachment.id))
648
+ }) : null,
649
+ fileAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", {
650
+ className: "lb-attachments",
651
+ children: fileAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(CommentFileAttachment, {
652
+ attachment,
653
+ overrides: overrides$1,
654
+ onAttachmentClick,
655
+ roomId: comment.roomId
656
+ }, attachment.id))
657
+ }) : null
658
+ ]
659
+ }) : null,
660
+ showReactions && comment.reactions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", {
661
+ className: "lb-comment-reactions",
662
+ children: [
663
+ comment.reactions.map((reaction) => /* @__PURE__ */ jsxRuntime.jsx(CommentReaction, {
664
+ comment,
665
+ reaction,
666
+ overrides: overrides$1,
667
+ disabled: !canComment
668
+ }, reaction.emoji)),
669
+ canComment ? /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, {
670
+ onEmojiSelect: handleReactionSelect,
671
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, {
672
+ content: $.COMMENT_ADD_REACTION,
673
+ children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive.PopoverTrigger, {
674
+ asChild: true,
675
+ children: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, {
676
+ className: "lb-comment-reaction lb-comment-reaction-add",
677
+ variant: "outline",
678
+ onClick: stopPropagation,
679
+ "aria-label": $.COMMENT_ADD_REACTION,
680
+ icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
681
+ })
682
+ })
683
+ })
684
+ }) : null
685
+ ]
686
+ })
687
+ ]
688
+ }) : /* @__PURE__ */ jsxRuntime.jsx("div", {
689
+ className: "lb-comment-body",
690
+ children: /* @__PURE__ */ jsxRuntime.jsx("p", {
691
+ className: "lb-comment-deleted",
692
+ children: $.COMMENT_DELETED
693
+ })
673
694
  })
674
695
  })
675
- })
676
- ]
677
- })
678
- ]
696
+ ]
697
+ })
698
+ ]
699
+ })
679
700
  });
680
701
  }
681
702
  );