@liveblocks/react-ui 3.15.0-feeds2 → 3.15.0-rc1

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