@liveblocks/react-ui 3.15.0-components1 → 3.15.0-thread2

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 (145) hide show
  1. package/dist/_private/index.cjs +7 -1
  2. package/dist/_private/index.cjs.map +1 -1
  3. package/dist/_private/index.d.cts +10 -4
  4. package/dist/_private/index.d.ts +10 -4
  5. package/dist/_private/index.js +3 -1
  6. package/dist/_private/index.js.map +1 -1
  7. package/dist/components/AiChat.cjs +10 -2
  8. package/dist/components/AiChat.cjs.map +1 -1
  9. package/dist/components/AiChat.js +10 -2
  10. package/dist/components/AiChat.js.map +1 -1
  11. package/dist/components/Comment.cjs +277 -232
  12. package/dist/components/Comment.cjs.map +1 -1
  13. package/dist/components/Comment.js +263 -237
  14. package/dist/components/Comment.js.map +1 -1
  15. package/dist/components/Composer.cjs +4 -2
  16. package/dist/components/Composer.cjs.map +1 -1
  17. package/dist/components/Composer.js +5 -3
  18. package/dist/components/Composer.js.map +1 -1
  19. package/dist/components/InboxNotification.cjs +6 -4
  20. package/dist/components/InboxNotification.cjs.map +1 -1
  21. package/dist/components/InboxNotification.js +7 -5
  22. package/dist/components/InboxNotification.js.map +1 -1
  23. package/dist/components/Thread.cjs +71 -45
  24. package/dist/components/Thread.cjs.map +1 -1
  25. package/dist/components/Thread.js +56 -49
  26. package/dist/components/Thread.js.map +1 -1
  27. package/dist/components/internal/AiComposer.cjs +2 -1
  28. package/dist/components/internal/AiComposer.cjs.map +1 -1
  29. package/dist/components/internal/AiComposer.js +2 -1
  30. package/dist/components/internal/AiComposer.js.map +1 -1
  31. package/dist/components/internal/CodeBlock.cjs +2 -1
  32. package/dist/components/internal/CodeBlock.cjs.map +1 -1
  33. package/dist/components/internal/CodeBlock.js +2 -1
  34. package/dist/components/internal/CodeBlock.js.map +1 -1
  35. package/dist/components/internal/Dropdown.cjs +28 -7
  36. package/dist/components/internal/Dropdown.cjs.map +1 -1
  37. package/dist/components/internal/Dropdown.js +7 -7
  38. package/dist/components/internal/Dropdown.js.map +1 -1
  39. package/dist/components/internal/EmojiPicker.cjs +27 -6
  40. package/dist/components/internal/EmojiPicker.cjs.map +1 -1
  41. package/dist/components/internal/EmojiPicker.js +6 -6
  42. package/dist/components/internal/EmojiPicker.js.map +1 -1
  43. package/dist/components/internal/List.cjs +2 -2
  44. package/dist/components/internal/List.cjs.map +1 -1
  45. package/dist/components/internal/List.js +2 -2
  46. package/dist/components/internal/List.js.map +1 -1
  47. package/dist/components/internal/Tooltip.cjs +28 -7
  48. package/dist/components/internal/Tooltip.cjs.map +1 -1
  49. package/dist/components/internal/Tooltip.js +7 -7
  50. package/dist/components/internal/Tooltip.js.map +1 -1
  51. package/dist/index.cjs +0 -12
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.d.cts +197 -213
  54. package/dist/index.d.ts +197 -213
  55. package/dist/index.js +0 -6
  56. package/dist/index.js.map +1 -1
  57. package/dist/primitives/AiComposer/index.cjs +4 -5
  58. package/dist/primitives/AiComposer/index.cjs.map +1 -1
  59. package/dist/primitives/AiComposer/index.js +4 -5
  60. package/dist/primitives/AiComposer/index.js.map +1 -1
  61. package/dist/primitives/AiMessage/index.cjs +2 -2
  62. package/dist/primitives/AiMessage/index.cjs.map +1 -1
  63. package/dist/primitives/AiMessage/index.js +2 -2
  64. package/dist/primitives/AiMessage/index.js.map +1 -1
  65. package/dist/primitives/Collapsible/index.cjs +4 -4
  66. package/dist/primitives/Collapsible/index.cjs.map +1 -1
  67. package/dist/primitives/Collapsible/index.js +4 -4
  68. package/dist/primitives/Collapsible/index.js.map +1 -1
  69. package/dist/primitives/Comment/index.cjs +4 -4
  70. package/dist/primitives/Comment/index.cjs.map +1 -1
  71. package/dist/primitives/Comment/index.js +4 -4
  72. package/dist/primitives/Comment/index.js.map +1 -1
  73. package/dist/primitives/Composer/index.cjs +35 -23
  74. package/dist/primitives/Composer/index.cjs.map +1 -1
  75. package/dist/primitives/Composer/index.js +16 -23
  76. package/dist/primitives/Composer/index.js.map +1 -1
  77. package/dist/primitives/Duration.cjs +2 -2
  78. package/dist/primitives/Duration.cjs.map +1 -1
  79. package/dist/primitives/Duration.js +2 -2
  80. package/dist/primitives/Duration.js.map +1 -1
  81. package/dist/primitives/FileSize.cjs +2 -2
  82. package/dist/primitives/FileSize.cjs.map +1 -1
  83. package/dist/primitives/FileSize.js +2 -2
  84. package/dist/primitives/FileSize.js.map +1 -1
  85. package/dist/primitives/Markdown.cjs +2 -2
  86. package/dist/primitives/Markdown.cjs.map +1 -1
  87. package/dist/primitives/Markdown.js +2 -2
  88. package/dist/primitives/Markdown.js.map +1 -1
  89. package/dist/primitives/Timestamp.cjs +2 -2
  90. package/dist/primitives/Timestamp.cjs.map +1 -1
  91. package/dist/primitives/Timestamp.js +2 -2
  92. package/dist/primitives/Timestamp.js.map +1 -1
  93. package/dist/utils/Portal.cjs +2 -2
  94. package/dist/utils/Portal.cjs.map +1 -1
  95. package/dist/utils/Portal.js +2 -2
  96. package/dist/utils/Portal.js.map +1 -1
  97. package/dist/utils/use-stable-component.cjs +32 -0
  98. package/dist/utils/use-stable-component.cjs.map +1 -0
  99. package/dist/utils/use-stable-component.js +30 -0
  100. package/dist/utils/use-stable-component.js.map +1 -0
  101. package/dist/version.cjs +1 -1
  102. package/dist/version.cjs.map +1 -1
  103. package/dist/version.js +1 -1
  104. package/dist/version.js.map +1 -1
  105. package/package.json +10 -6
  106. package/src/styles/dark/index.css +1 -1
  107. package/src/styles/index.css +4 -252
  108. package/styles/dark/attributes.css +1 -1
  109. package/styles/dark/attributes.css.map +1 -1
  110. package/styles/dark/media-query.css +1 -1
  111. package/styles/dark/media-query.css.map +1 -1
  112. package/styles.css +1 -1
  113. package/styles.css.map +1 -1
  114. package/dist/components/AvatarStack.cjs +0 -115
  115. package/dist/components/AvatarStack.cjs.map +0 -1
  116. package/dist/components/AvatarStack.js +0 -113
  117. package/dist/components/AvatarStack.js.map +0 -1
  118. package/dist/components/CommentPin.cjs +0 -27
  119. package/dist/components/CommentPin.cjs.map +0 -1
  120. package/dist/components/CommentPin.js +0 -25
  121. package/dist/components/CommentPin.js.map +0 -1
  122. package/dist/components/Cursor.cjs +0 -40
  123. package/dist/components/Cursor.cjs.map +0 -1
  124. package/dist/components/Cursor.js +0 -38
  125. package/dist/components/Cursor.js.map +0 -1
  126. package/dist/components/Cursors.cjs +0 -252
  127. package/dist/components/Cursors.cjs.map +0 -1
  128. package/dist/components/Cursors.js +0 -250
  129. package/dist/components/Cursors.js.map +0 -1
  130. package/dist/components/FloatingComposer.cjs +0 -82
  131. package/dist/components/FloatingComposer.cjs.map +0 -1
  132. package/dist/components/FloatingComposer.js +0 -80
  133. package/dist/components/FloatingComposer.js.map +0 -1
  134. package/dist/components/FloatingThread.cjs +0 -82
  135. package/dist/components/FloatingThread.cjs.map +0 -1
  136. package/dist/components/FloatingThread.js +0 -80
  137. package/dist/components/FloatingThread.js.map +0 -1
  138. package/dist/utils/animation-loop.cjs +0 -44
  139. package/dist/utils/animation-loop.cjs.map +0 -1
  140. package/dist/utils/animation-loop.js +0 -42
  141. package/dist/utils/animation-loop.js.map +0 -1
  142. package/dist/utils/use-pre-resolve-user.cjs +0 -18
  143. package/dist/utils/use-pre-resolve-user.cjs.map +0 -1
  144. package/dist/utils/use-pre-resolve-user.js +0 -16
  145. package/dist/utils/use-pre-resolve-user.js.map +0 -1
@@ -4,7 +4,7 @@
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
5
  var core = require('@liveblocks/core');
6
6
  var _private = require('@liveblocks/react/_private');
7
- var radixUi = require('radix-ui');
7
+ var TogglePrimitive = require('@radix-ui/react-toggle');
8
8
  var react = require('react');
9
9
  var components = require('../components.cjs');
10
10
  var Check = require('../icons/Check.cjs');
@@ -22,8 +22,6 @@ var cn = require('../utils/cn.cjs');
22
22
  var download = require('../utils/download.cjs');
23
23
  var useGroupMention = require('../utils/use-group-mention.cjs');
24
24
  var useRefs = require('../utils/use-refs.cjs');
25
- var useVisible = require('../utils/use-visible.cjs');
26
- var useWindowFocus = require('../utils/use-window-focus.cjs');
27
25
  var Composer = require('./Composer.cjs');
28
26
  var Attachment = require('./internal/Attachment.cjs');
29
27
  var Avatar = require('./internal/Avatar.cjs');
@@ -35,9 +33,48 @@ var Group = require('./internal/Group.cjs');
35
33
  var List = require('./internal/List.cjs');
36
34
  var Tooltip = require('./internal/Tooltip.cjs');
37
35
  var User = require('./internal/User.cjs');
36
+ var PopoverPrimitive = require('@radix-ui/react-popover');
37
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
38
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
39
+
40
+ function _interopNamespaceDefault(e) {
41
+ var n = Object.create(null);
42
+ if (e) {
43
+ Object.keys(e).forEach(function (k) {
44
+ if (k !== 'default') {
45
+ var d = Object.getOwnPropertyDescriptor(e, k);
46
+ Object.defineProperty(n, k, d.get ? d : {
47
+ enumerable: true,
48
+ get: function () { return e[k]; }
49
+ });
50
+ }
51
+ });
52
+ }
53
+ n.default = e;
54
+ return Object.freeze(n);
55
+ }
56
+
57
+ var TogglePrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(TogglePrimitive);
38
58
 
39
59
 
40
60
  const REACTIONS_TRUNCATE = 5;
61
+ function CommentAvatar(props) {
62
+ return /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, { ...props });
63
+ }
64
+ function CommentAuthor(props) {
65
+ return /* @__PURE__ */ jsxRuntime.jsx(User.User, { ...props });
66
+ }
67
+ function CommentDate({ locale, date, className, ...props }) {
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ Timestamp.Timestamp,
70
+ {
71
+ locale,
72
+ date,
73
+ className: cn.cn("lb-date", className),
74
+ ...props
75
+ }
76
+ );
77
+ }
41
78
  function CommentUserMention({
42
79
  mention,
43
80
  className,
@@ -184,7 +221,7 @@ const CommentReaction = react.forwardRef(({ comment, reaction, overrides: overri
184
221
  multiline: true,
185
222
  className: "lb-comment-reaction-tooltip",
186
223
  children: /* @__PURE__ */ jsxRuntime.jsx(
187
- radixUi.Toggle.Root,
224
+ TogglePrimitive__namespace.Root,
188
225
  {
189
226
  asChild: true,
190
227
  pressed: isActive,
@@ -313,27 +350,6 @@ function CommentNonInteractiveFileAttachment({
313
350
  }
314
351
  );
315
352
  }
316
- function AutoMarkReadThreadIdHandler({
317
- threadId,
318
- roomId,
319
- commentRef
320
- }) {
321
- const markThreadAsRead = _private.useMarkRoomThreadAsRead(roomId);
322
- const isWindowFocused = useWindowFocus.useWindowFocus();
323
- useVisible.useIntersectionCallback(
324
- commentRef,
325
- (isIntersecting) => {
326
- if (isIntersecting) {
327
- markThreadAsRead(threadId);
328
- }
329
- },
330
- {
331
- // The underlying IntersectionObserver is only enabled when the window is focused
332
- enabled: isWindowFocused
333
- }
334
- );
335
- return null;
336
- }
337
353
  const CommentDropdownItem = react.forwardRef(({ children, icon, onSelect, onClick, ...props }, forwardedRef) => {
338
354
  const handleClick = react.useCallback(
339
355
  (event) => {
@@ -374,13 +390,17 @@ const Comment = Object.assign(
374
390
  dropdownItems,
375
391
  overrides: overrides$1,
376
392
  components: components$1,
393
+ additionalContent,
394
+ avatar,
395
+ author,
396
+ date,
377
397
  className,
378
398
  actions,
379
399
  actionsClassName,
380
- autoMarkReadThreadId,
400
+ internalDropdownItems,
401
+ children,
381
402
  ...props
382
403
  }, forwardedRef) => {
383
- const bodyId = `${comment.id}:body`;
384
404
  const ref = react.useRef(null);
385
405
  const mergedRefs = useRefs.useRefs(forwardedRef, ref);
386
406
  const currentUserId = shared.useCurrentUserId();
@@ -485,243 +505,268 @@ const Comment = Object.assign(
485
505
  if (!showDeleted && !comment.body) {
486
506
  return null;
487
507
  }
488
- const defaultDropdownItems = comment.userId === currentUserId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
508
+ const commentDropdownItems = comment.userId === currentUserId ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
489
509
  /* @__PURE__ */ jsxRuntime.jsx(CommentDropdownItem, { onSelect: handleEdit, icon: /* @__PURE__ */ jsxRuntime.jsx(Edit.EditIcon, {}), children: $.COMMENT_EDIT }),
490
510
  /* @__PURE__ */ jsxRuntime.jsx(CommentDropdownItem, { onSelect: handleDelete, icon: /* @__PURE__ */ jsxRuntime.jsx(Delete.DeleteIcon, {}), children: $.COMMENT_DELETE })
491
511
  ] }) : null;
492
- const dropdownContent = typeof dropdownItems === "function" ? dropdownItems({ children: defaultDropdownItems, comment }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
512
+ const defaultDropdownItems = internalDropdownItems || commentDropdownItems ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
513
+ internalDropdownItems,
514
+ commentDropdownItems
515
+ ] }) : null;
516
+ const dropdownContent = typeof dropdownItems === "function" ? dropdownItems({ children: defaultDropdownItems, comment }) : defaultDropdownItems || dropdownItems ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
493
517
  defaultDropdownItems,
494
518
  dropdownItems
495
- ] });
496
- return /* @__PURE__ */ jsxRuntime.jsx(Tooltip.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(components.ComponentsProvider, { components: components$1, children: [
497
- autoMarkReadThreadId && /* @__PURE__ */ jsxRuntime.jsx(
498
- AutoMarkReadThreadIdHandler,
519
+ ] }) : null;
520
+ let content;
521
+ if (isEditing) {
522
+ content = /* @__PURE__ */ jsxRuntime.jsx(
523
+ Composer.Composer,
499
524
  {
500
- commentRef: ref,
501
- threadId: autoMarkReadThreadId,
525
+ className: "lb-comment-composer",
526
+ onComposerSubmit: handleEditSubmit,
527
+ defaultValue: comment.body,
528
+ defaultAttachments: comment.attachments,
529
+ autoFocus: true,
530
+ showAttribution: false,
531
+ showAttachments,
532
+ showFormattingControls: showComposerFormattingControls,
533
+ actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
534
+ /* @__PURE__ */ jsxRuntime.jsx(
535
+ Tooltip.Tooltip,
536
+ {
537
+ content: $.COMMENT_EDIT_COMPOSER_CANCEL,
538
+ "aria-label": $.COMMENT_EDIT_COMPOSER_CANCEL,
539
+ children: /* @__PURE__ */ jsxRuntime.jsx(
540
+ Button.Button,
541
+ {
542
+ className: "lb-composer-action",
543
+ onClick: handleEditCancel,
544
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Cross.CrossIcon, {})
545
+ }
546
+ )
547
+ }
548
+ ),
549
+ /* @__PURE__ */ jsxRuntime.jsx(
550
+ Tooltip.ShortcutTooltip,
551
+ {
552
+ content: $.COMMENT_EDIT_COMPOSER_SAVE,
553
+ shortcut: "Enter",
554
+ children: /* @__PURE__ */ jsxRuntime.jsx(index$1.Submit, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
555
+ Button.Button,
556
+ {
557
+ variant: "primary",
558
+ className: "lb-composer-action",
559
+ onClick: stopPropagation,
560
+ "aria-label": $.COMMENT_EDIT_COMPOSER_SAVE,
561
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Check.CheckIcon, {})
562
+ }
563
+ ) })
564
+ }
565
+ )
566
+ ] }),
567
+ overrides: {
568
+ COMPOSER_PLACEHOLDER: $.COMMENT_EDIT_COMPOSER_PLACEHOLDER
569
+ },
502
570
  roomId: comment.roomId
503
571
  }
504
- ),
505
- /* @__PURE__ */ jsxRuntime.jsxs(
506
- "div",
507
- {
508
- role: "article",
509
- id: comment.id,
510
- className: cn.cn(
511
- "lb-root lb-comment",
512
- indentContent && "lb-comment:indent-content",
513
- showActions === "hover" && "lb-comment:show-actions-hover",
514
- (isMoreActionOpen || isReactionActionOpen) && "lb-comment:action-open",
515
- className
516
- ),
517
- "data-deleted": !comment.body ? "" : void 0,
518
- "data-editing": isEditing ? "" : void 0,
519
- "data-target": isTarget ? "" : void 0,
520
- "aria-labelledby": bodyId,
521
- dir: $.dir,
522
- ...props,
523
- ref: mergedRefs,
524
- children: [
525
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-header", children: [
526
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-details", children: [
527
- /* @__PURE__ */ jsxRuntime.jsx(
528
- Avatar.Avatar,
572
+ );
573
+ } else {
574
+ content = comment.body ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
575
+ /* @__PURE__ */ jsxRuntime.jsx(
576
+ index.Body,
577
+ {
578
+ className: "lb-comment-body",
579
+ body: comment.body,
580
+ components: {
581
+ Mention: ({ mention }) => /* @__PURE__ */ jsxRuntime.jsx(
582
+ CommentMention,
583
+ {
584
+ mention,
585
+ onClick: (event) => onMentionClick?.(mention, event),
586
+ overrides: overrides$1
587
+ }
588
+ ),
589
+ Link: CommentLink
590
+ }
591
+ }
592
+ ),
593
+ additionalContent,
594
+ showAttachments && (mediaAttachments.length > 0 || fileAttachments.length > 0) ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-attachments", children: [
595
+ mediaAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-attachments", children: mediaAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
596
+ CommentMediaAttachment,
597
+ {
598
+ attachment,
599
+ overrides: overrides$1,
600
+ onAttachmentClick,
601
+ roomId: comment.roomId
602
+ },
603
+ attachment.id
604
+ )) }) : null,
605
+ fileAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-attachments", children: fileAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
606
+ CommentFileAttachment,
607
+ {
608
+ attachment,
609
+ overrides: overrides$1,
610
+ onAttachmentClick,
611
+ roomId: comment.roomId
612
+ },
613
+ attachment.id
614
+ )) }) : null
615
+ ] }) : null,
616
+ showReactions && comment.reactions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-reactions", children: [
617
+ comment.reactions.map((reaction) => /* @__PURE__ */ jsxRuntime.jsx(
618
+ CommentReaction,
619
+ {
620
+ comment,
621
+ reaction,
622
+ overrides: overrides$1,
623
+ disabled: !canComment
624
+ },
625
+ reaction.emoji
626
+ )),
627
+ canComment ? /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, { onEmojiSelect: handleReactionSelect, children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_ADD_REACTION, children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
628
+ Button.Button,
629
+ {
630
+ className: "lb-comment-reaction lb-comment-reaction-add",
631
+ variant: "outline",
632
+ onClick: stopPropagation,
633
+ "aria-label": $.COMMENT_ADD_REACTION,
634
+ icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
635
+ }
636
+ ) }) }) }) : null
637
+ ] })
638
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-comment-body", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lb-comment-deleted", children: $.COMMENT_DELETED }) });
639
+ content = typeof children === "function" ? children({ comment, children: content }) : children ?? content;
640
+ }
641
+ return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(components.ComponentsProvider, { components: components$1, children: /* @__PURE__ */ jsxRuntime.jsxs(
642
+ "div",
643
+ {
644
+ id: comment.id,
645
+ className: cn.cn(
646
+ "lb-root lb-comment",
647
+ indentContent && "lb-comment:indent-content",
648
+ showActions === "hover" && "lb-comment:show-actions-hover",
649
+ (isMoreActionOpen || isReactionActionOpen) && "lb-comment:action-open",
650
+ className
651
+ ),
652
+ "data-deleted": !comment.body ? "" : void 0,
653
+ "data-editing": isEditing ? "" : void 0,
654
+ "data-target": isTarget ? "" : void 0,
655
+ dir: $.dir,
656
+ ...props,
657
+ ref: mergedRefs,
658
+ children: [
659
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-header", children: [
660
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-details", children: [
661
+ avatar ? /* @__PURE__ */ jsxRuntime.jsx(
662
+ "div",
663
+ {
664
+ className: "lb-comment-avatar",
665
+ onClick: handleAuthorClick,
666
+ children: avatar
667
+ }
668
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
669
+ Avatar.Avatar,
670
+ {
671
+ className: "lb-comment-avatar",
672
+ userId: comment.userId,
673
+ onClick: handleAuthorClick
674
+ }
675
+ ),
676
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "lb-comment-details-labels", children: [
677
+ author ? /* @__PURE__ */ jsxRuntime.jsx(
678
+ "span",
529
679
  {
530
- className: "lb-comment-avatar",
680
+ className: "lb-comment-author",
681
+ onClick: handleAuthorClick,
682
+ children: author
683
+ }
684
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
685
+ User.User,
686
+ {
687
+ className: "lb-comment-author",
531
688
  userId: comment.userId,
532
689
  onClick: handleAuthorClick
533
690
  }
534
691
  ),
535
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "lb-comment-details-labels", children: [
692
+ date ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-comment-date", children: date }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "lb-comment-date", children: [
536
693
  /* @__PURE__ */ jsxRuntime.jsx(
537
- User.User,
694
+ CommentDate,
538
695
  {
539
- className: "lb-comment-author",
540
- userId: comment.userId,
541
- onClick: handleAuthorClick
696
+ locale: $.locale,
697
+ date: comment.createdAt,
698
+ className: "lb-comment-date-created"
542
699
  }
543
700
  ),
544
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "lb-comment-date", children: [
545
- /* @__PURE__ */ jsxRuntime.jsx(
546
- Timestamp.Timestamp,
547
- {
548
- locale: $.locale,
549
- date: comment.createdAt,
550
- className: "lb-date lb-comment-date-created"
551
- }
552
- ),
553
- comment.editedAt && comment.body && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
554
- " ",
555
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-comment-date-edited", children: $.COMMENT_EDITED })
556
- ] })
701
+ comment.editedAt && comment.body && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
702
+ " ",
703
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "lb-comment-date-edited", children: $.COMMENT_EDITED })
557
704
  ] })
558
705
  ] })
559
- ] }),
560
- showActions && !isEditing && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn.cn("lb-comment-actions", actionsClassName), children: [
561
- actions ?? null,
562
- showReactions && canComment ? /* @__PURE__ */ jsxRuntime.jsx(
563
- EmojiPicker.EmojiPicker,
564
- {
565
- onEmojiSelect: handleReactionSelect,
566
- onOpenChange: setReactionActionOpen,
567
- children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_ADD_REACTION, children: /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPickerTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
568
- Button.Button,
569
- {
570
- className: "lb-comment-action",
571
- onClick: stopPropagation,
572
- "aria-label": $.COMMENT_ADD_REACTION,
573
- icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
574
- }
575
- ) }) })
576
- }
577
- ) : null,
578
- dropdownContent ? /* @__PURE__ */ jsxRuntime.jsx(
579
- Dropdown.Dropdown,
580
- {
581
- open: isMoreActionOpen,
582
- onOpenChange: setMoreActionOpen,
583
- align: "end",
584
- content: dropdownContent,
585
- children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_MORE, children: /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
586
- Button.Button,
587
- {
588
- className: "lb-comment-action",
589
- disabled: !comment.body,
590
- onClick: stopPropagation,
591
- "aria-label": $.COMMENT_MORE,
592
- icon: /* @__PURE__ */ jsxRuntime.jsx(Ellipsis.EllipsisIcon, {})
593
- }
594
- ) }) })
595
- }
596
- ) : null
597
706
  ] })
598
707
  ] }),
599
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-comment-content", children: isEditing ? /* @__PURE__ */ jsxRuntime.jsx(
600
- Composer.Composer,
601
- {
602
- className: "lb-comment-composer",
603
- onComposerSubmit: handleEditSubmit,
604
- defaultValue: comment.body,
605
- defaultAttachments: comment.attachments,
606
- autoFocus: true,
607
- showAttribution: false,
608
- showAttachments,
609
- showFormattingControls: showComposerFormattingControls,
610
- actions: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
611
- /* @__PURE__ */ jsxRuntime.jsx(
612
- Tooltip.Tooltip,
708
+ showActions && !isEditing && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn.cn("lb-comment-actions", actionsClassName), children: [
709
+ actions ?? null,
710
+ showReactions && canComment ? /* @__PURE__ */ jsxRuntime.jsx(
711
+ EmojiPicker.EmojiPicker,
712
+ {
713
+ onEmojiSelect: handleReactionSelect,
714
+ onOpenChange: setReactionActionOpen,
715
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_ADD_REACTION, children: /* @__PURE__ */ jsxRuntime.jsx(PopoverPrimitive.PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
716
+ Button.Button,
613
717
  {
614
- content: $.COMMENT_EDIT_COMPOSER_CANCEL,
615
- "aria-label": $.COMMENT_EDIT_COMPOSER_CANCEL,
616
- children: /* @__PURE__ */ jsxRuntime.jsx(
617
- Button.Button,
618
- {
619
- className: "lb-composer-action",
620
- onClick: handleEditCancel,
621
- icon: /* @__PURE__ */ jsxRuntime.jsx(Cross.CrossIcon, {})
622
- }
623
- )
718
+ className: "lb-comment-action",
719
+ onClick: stopPropagation,
720
+ "aria-label": $.COMMENT_ADD_REACTION,
721
+ icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
624
722
  }
625
- ),
626
- /* @__PURE__ */ jsxRuntime.jsx(
627
- Tooltip.ShortcutTooltip,
723
+ ) }) })
724
+ }
725
+ ) : null,
726
+ dropdownContent ? /* @__PURE__ */ jsxRuntime.jsx(
727
+ Dropdown.Dropdown,
728
+ {
729
+ open: isMoreActionOpen,
730
+ onOpenChange: setMoreActionOpen,
731
+ align: "end",
732
+ content: dropdownContent,
733
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_MORE, children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
734
+ Button.Button,
628
735
  {
629
- content: $.COMMENT_EDIT_COMPOSER_SAVE,
630
- shortcut: "Enter",
631
- children: /* @__PURE__ */ jsxRuntime.jsx(index$1.Submit, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
632
- Button.Button,
633
- {
634
- variant: "primary",
635
- className: "lb-composer-action",
636
- onClick: stopPropagation,
637
- "aria-label": $.COMMENT_EDIT_COMPOSER_SAVE,
638
- icon: /* @__PURE__ */ jsxRuntime.jsx(Check.CheckIcon, {})
639
- }
640
- ) })
736
+ className: "lb-comment-action",
737
+ disabled: !comment.body,
738
+ onClick: stopPropagation,
739
+ "aria-label": $.COMMENT_MORE,
740
+ icon: /* @__PURE__ */ jsxRuntime.jsx(Ellipsis.EllipsisIcon, {})
641
741
  }
642
- )
643
- ] }),
644
- overrides: {
645
- COMPOSER_PLACEHOLDER: $.COMMENT_EDIT_COMPOSER_PLACEHOLDER
646
- },
647
- roomId: comment.roomId
648
- }
649
- ) : comment.body ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
650
- /* @__PURE__ */ jsxRuntime.jsx(
651
- index.Body,
652
- {
653
- className: "lb-comment-body",
654
- id: bodyId,
655
- body: comment.body,
656
- components: {
657
- Mention: ({ mention }) => /* @__PURE__ */ jsxRuntime.jsx(
658
- CommentMention,
659
- {
660
- mention,
661
- onClick: (event) => onMentionClick?.(mention, event),
662
- overrides: overrides$1
663
- }
664
- ),
665
- Link: CommentLink
666
- }
742
+ ) }) })
667
743
  }
668
- ),
669
- showAttachments && (mediaAttachments.length > 0 || fileAttachments.length > 0) ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-attachments", children: [
670
- mediaAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-attachments", children: mediaAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
671
- CommentMediaAttachment,
672
- {
673
- attachment,
674
- overrides: overrides$1,
675
- onAttachmentClick,
676
- roomId: comment.roomId
677
- },
678
- attachment.id
679
- )) }) : null,
680
- fileAttachments.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-attachments", children: fileAttachments.map((attachment) => /* @__PURE__ */ jsxRuntime.jsx(
681
- CommentFileAttachment,
682
- {
683
- attachment,
684
- overrides: overrides$1,
685
- onAttachmentClick,
686
- roomId: comment.roomId
687
- },
688
- attachment.id
689
- )) }) : null
690
- ] }) : null,
691
- showReactions && comment.reactions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "lb-comment-reactions", children: [
692
- comment.reactions.map((reaction) => /* @__PURE__ */ jsxRuntime.jsx(
693
- CommentReaction,
694
- {
695
- comment,
696
- reaction,
697
- overrides: overrides$1,
698
- disabled: !canComment
699
- },
700
- reaction.emoji
701
- )),
702
- canComment ? /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPicker, { onEmojiSelect: handleReactionSelect, children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_ADD_REACTION, children: /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPickerTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
703
- Button.Button,
704
- {
705
- className: "lb-comment-reaction lb-comment-reaction-add",
706
- variant: "outline",
707
- onClick: stopPropagation,
708
- "aria-label": $.COMMENT_ADD_REACTION,
709
- icon: /* @__PURE__ */ jsxRuntime.jsx(EmojiPlus.EmojiPlusIcon, {})
710
- }
711
- ) }) }) }) : null
712
- ] })
713
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-comment-body", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lb-comment-deleted", children: $.COMMENT_DELETED }) }) })
714
- ]
715
- }
716
- )
717
- ] }) });
744
+ ) : null
745
+ ] })
746
+ ] }),
747
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-comment-content", children: content })
748
+ ]
749
+ }
750
+ ) }) });
718
751
  }
719
752
  ),
720
753
  {
721
754
  /**
722
755
  * Displays a dropdown item in the comment's dropdown.
723
756
  */
724
- DropdownItem: CommentDropdownItem
757
+ DropdownItem: CommentDropdownItem,
758
+ /**
759
+ * Displays a comment's avatar.
760
+ */
761
+ Avatar: CommentAvatar,
762
+ /**
763
+ * Displays a comment's author.
764
+ */
765
+ Author: CommentAuthor,
766
+ /**
767
+ * Displays a comment's date.
768
+ */
769
+ Date: CommentDate
725
770
  }
726
771
  );
727
772