@liveblocks/react-ui 3.15.0-thread2 → 3.15.1-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 (157) hide show
  1. package/README.md +6 -16
  2. package/dist/_private/index.cjs +3 -5
  3. package/dist/_private/index.cjs.map +1 -1
  4. package/dist/_private/index.d.cts +6 -4
  5. package/dist/_private/index.d.ts +6 -4
  6. package/dist/_private/index.js +2 -2
  7. package/dist/components/AvatarStack.cjs +122 -0
  8. package/dist/components/AvatarStack.cjs.map +1 -0
  9. package/dist/components/AvatarStack.js +120 -0
  10. package/dist/components/AvatarStack.js.map +1 -0
  11. package/dist/components/Comment.cjs +10 -28
  12. package/dist/components/Comment.cjs.map +1 -1
  13. package/dist/components/Comment.js +12 -11
  14. package/dist/components/Comment.js.map +1 -1
  15. package/dist/components/CommentPin.cjs +38 -0
  16. package/dist/components/CommentPin.cjs.map +1 -0
  17. package/dist/components/CommentPin.js +36 -0
  18. package/dist/components/CommentPin.js.map +1 -0
  19. package/dist/components/Composer.cjs +2 -4
  20. package/dist/components/Composer.cjs.map +1 -1
  21. package/dist/components/Composer.js +3 -5
  22. package/dist/components/Composer.js.map +1 -1
  23. package/dist/components/Cursor.cjs +40 -0
  24. package/dist/components/Cursor.cjs.map +1 -0
  25. package/dist/components/Cursor.js +38 -0
  26. package/dist/components/Cursor.js.map +1 -0
  27. package/dist/components/Cursors.cjs +256 -0
  28. package/dist/components/Cursors.cjs.map +1 -0
  29. package/dist/components/Cursors.js +254 -0
  30. package/dist/components/Cursors.js.map +1 -0
  31. package/dist/components/FloatingComposer.cjs +97 -0
  32. package/dist/components/FloatingComposer.cjs.map +1 -0
  33. package/dist/components/FloatingComposer.js +95 -0
  34. package/dist/components/FloatingComposer.js.map +1 -0
  35. package/dist/components/FloatingThread.cjs +83 -0
  36. package/dist/components/FloatingThread.cjs.map +1 -0
  37. package/dist/components/FloatingThread.js +81 -0
  38. package/dist/components/FloatingThread.js.map +1 -0
  39. package/dist/components/InboxNotification.cjs +4 -6
  40. package/dist/components/InboxNotification.cjs.map +1 -1
  41. package/dist/components/InboxNotification.js +5 -7
  42. package/dist/components/InboxNotification.js.map +1 -1
  43. package/dist/components/Thread.cjs +19 -28
  44. package/dist/components/Thread.cjs.map +1 -1
  45. package/dist/components/Thread.js +19 -9
  46. package/dist/components/Thread.js.map +1 -1
  47. package/dist/components/internal/AiComposer.cjs +1 -2
  48. package/dist/components/internal/AiComposer.cjs.map +1 -1
  49. package/dist/components/internal/AiComposer.js +1 -2
  50. package/dist/components/internal/AiComposer.js.map +1 -1
  51. package/dist/components/internal/Avatar.cjs +10 -13
  52. package/dist/components/internal/Avatar.cjs.map +1 -1
  53. package/dist/components/internal/Avatar.js +11 -14
  54. package/dist/components/internal/Avatar.js.map +1 -1
  55. package/dist/components/internal/CodeBlock.cjs +1 -2
  56. package/dist/components/internal/CodeBlock.cjs.map +1 -1
  57. package/dist/components/internal/CodeBlock.js +1 -2
  58. package/dist/components/internal/CodeBlock.js.map +1 -1
  59. package/dist/components/internal/Dropdown.cjs +8 -28
  60. package/dist/components/internal/Dropdown.cjs.map +1 -1
  61. package/dist/components/internal/Dropdown.js +8 -7
  62. package/dist/components/internal/Dropdown.js.map +1 -1
  63. package/dist/components/internal/EmojiPicker.cjs +7 -27
  64. package/dist/components/internal/EmojiPicker.cjs.map +1 -1
  65. package/dist/components/internal/EmojiPicker.js +7 -6
  66. package/dist/components/internal/EmojiPicker.js.map +1 -1
  67. package/dist/components/internal/List.cjs +2 -2
  68. package/dist/components/internal/List.cjs.map +1 -1
  69. package/dist/components/internal/List.js +2 -2
  70. package/dist/components/internal/List.js.map +1 -1
  71. package/dist/components/internal/Tooltip.cjs +8 -28
  72. package/dist/components/internal/Tooltip.cjs.map +1 -1
  73. package/dist/components/internal/Tooltip.js +8 -7
  74. package/dist/components/internal/Tooltip.js.map +1 -1
  75. package/dist/icon.cjs +2 -0
  76. package/dist/icon.cjs.map +1 -1
  77. package/dist/icon.js +1 -0
  78. package/dist/icon.js.map +1 -1
  79. package/dist/icons/Plus.cjs +11 -0
  80. package/dist/icons/Plus.cjs.map +1 -0
  81. package/dist/icons/Plus.js +9 -0
  82. package/dist/icons/Plus.js.map +1 -0
  83. package/dist/icons/index.cjs +2 -0
  84. package/dist/icons/index.cjs.map +1 -1
  85. package/dist/icons/index.js +1 -0
  86. package/dist/icons/index.js.map +1 -1
  87. package/dist/index.cjs +12 -0
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.d.cts +240 -137
  90. package/dist/index.d.ts +240 -137
  91. package/dist/index.js +6 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/primitives/AiComposer/index.cjs +5 -4
  94. package/dist/primitives/AiComposer/index.cjs.map +1 -1
  95. package/dist/primitives/AiComposer/index.js +5 -4
  96. package/dist/primitives/AiComposer/index.js.map +1 -1
  97. package/dist/primitives/AiMessage/index.cjs +2 -2
  98. package/dist/primitives/AiMessage/index.cjs.map +1 -1
  99. package/dist/primitives/AiMessage/index.js +2 -2
  100. package/dist/primitives/AiMessage/index.js.map +1 -1
  101. package/dist/primitives/Collapsible/index.cjs +4 -4
  102. package/dist/primitives/Collapsible/index.cjs.map +1 -1
  103. package/dist/primitives/Collapsible/index.js +4 -4
  104. package/dist/primitives/Collapsible/index.js.map +1 -1
  105. package/dist/primitives/Comment/index.cjs +4 -4
  106. package/dist/primitives/Comment/index.cjs.map +1 -1
  107. package/dist/primitives/Comment/index.js +4 -4
  108. package/dist/primitives/Comment/index.js.map +1 -1
  109. package/dist/primitives/Composer/index.cjs +23 -35
  110. package/dist/primitives/Composer/index.cjs.map +1 -1
  111. package/dist/primitives/Composer/index.js +23 -16
  112. package/dist/primitives/Composer/index.js.map +1 -1
  113. package/dist/primitives/Duration.cjs +2 -2
  114. package/dist/primitives/Duration.cjs.map +1 -1
  115. package/dist/primitives/Duration.js +2 -2
  116. package/dist/primitives/Duration.js.map +1 -1
  117. package/dist/primitives/FileSize.cjs +2 -2
  118. package/dist/primitives/FileSize.cjs.map +1 -1
  119. package/dist/primitives/FileSize.js +2 -2
  120. package/dist/primitives/FileSize.js.map +1 -1
  121. package/dist/primitives/Markdown.cjs +2 -2
  122. package/dist/primitives/Markdown.cjs.map +1 -1
  123. package/dist/primitives/Markdown.js +2 -2
  124. package/dist/primitives/Markdown.js.map +1 -1
  125. package/dist/primitives/Timestamp.cjs +2 -2
  126. package/dist/primitives/Timestamp.cjs.map +1 -1
  127. package/dist/primitives/Timestamp.js +2 -2
  128. package/dist/primitives/Timestamp.js.map +1 -1
  129. package/dist/utils/Portal.cjs +2 -2
  130. package/dist/utils/Portal.cjs.map +1 -1
  131. package/dist/utils/Portal.js +2 -2
  132. package/dist/utils/Portal.js.map +1 -1
  133. package/dist/utils/animation-loop.cjs +44 -0
  134. package/dist/utils/animation-loop.cjs.map +1 -0
  135. package/dist/utils/animation-loop.js +42 -0
  136. package/dist/utils/animation-loop.js.map +1 -0
  137. package/dist/utils/px.cjs +14 -0
  138. package/dist/utils/px.cjs.map +1 -0
  139. package/dist/utils/px.js +12 -0
  140. package/dist/utils/px.js.map +1 -0
  141. package/dist/utils/use-pre-resolve-user.cjs +18 -0
  142. package/dist/utils/use-pre-resolve-user.cjs.map +1 -0
  143. package/dist/utils/use-pre-resolve-user.js +16 -0
  144. package/dist/utils/use-pre-resolve-user.js.map +1 -0
  145. package/dist/version.cjs +1 -1
  146. package/dist/version.cjs.map +1 -1
  147. package/dist/version.js +1 -1
  148. package/dist/version.js.map +1 -1
  149. package/package.json +7 -10
  150. package/src/styles/dark/index.css +1 -1
  151. package/src/styles/index.css +259 -4
  152. package/styles/dark/attributes.css +1 -1
  153. package/styles/dark/attributes.css.map +1 -1
  154. package/styles/dark/media-query.css +1 -1
  155. package/styles/dark/media-query.css.map +1 -1
  156. package/styles.css +1 -1
  157. package/styles.css.map +1 -1
package/README.md CHANGED
@@ -1,24 +1,14 @@
1
- <p align="center">
2
- <a href="https://liveblocks.io#gh-light-mode-only">
3
- <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-light.svg" alt="Liveblocks" />
4
- </a>
5
- <a href="https://liveblocks.io#gh-dark-mode-only">
6
- <img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-dark.svg" alt="Liveblocks" />
7
- </a>
1
+ <p>
2
+ <a href="https://liveblocks.io#gh-light-mode-only"><img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-light.svg" alt="Liveblocks" /></a>
3
+ <a href="https://liveblocks.io#gh-dark-mode-only"><img src="https://raw.githubusercontent.com/liveblocks/liveblocks/main/.github/assets/header-dark.svg" alt="Liveblocks" /></a>
8
4
  </p>
9
5
 
10
6
  # `@liveblocks/react-ui`
11
7
 
12
8
  <p>
13
- <a href="https://npmjs.org/package/@liveblocks/react-ui">
14
- <img src="https://img.shields.io/npm/v/@liveblocks/react-ui?style=flat&label=npm&color=c33" alt="NPM" />
15
- </a>
16
- <a href="https://bundlephobia.com/package/@liveblocks/react-ui">
17
- <img src="https://img.shields.io/bundlephobia/minzip/@liveblocks/react-ui?style=flat&label=size&color=09f" alt="Size" />
18
- </a>
19
- <a href="https://github.com/liveblocks/liveblocks/blob/main/LICENSE">
20
- <img src="https://img.shields.io/github/license/liveblocks/liveblocks?style=flat&label=license&color=f80" alt="License" />
21
- </a>
9
+ <a href="https://npmjs.org/package/@liveblocks/react-ui"><img src="https://img.shields.io/npm/v/@liveblocks/react-ui?style=flat&label=npm&color=c33" alt="NPM" /></a>
10
+ <a href="https://bundlephobia.com/package/@liveblocks/react-ui"><img src="https://img.shields.io/bundlephobia/minzip/@liveblocks/react-ui?style=flat&label=size&color=09f" alt="Size" /></a>
11
+ <a href="https://github.com/liveblocks/liveblocks/blob/main/licenses/LICENSE-APACHE-2.0"><img src="https://img.shields.io/badge/license-Apache--2.0-green" alt="License" /></a>
22
12
  </p>
23
13
 
24
14
  `@liveblocks/react-ui` provides [React](https://reactjs.org/) pre-built
@@ -21,7 +21,6 @@ var contexts = require('../primitives/AiComposer/contexts.cjs');
21
21
  var index$1 = require('../primitives/AiMessage/index.cjs');
22
22
  var index$2 = require('../primitives/Collapsible/index.cjs');
23
23
  var Markdown = require('../primitives/Markdown.cjs');
24
- var TooltipPrimitive = require('@radix-ui/react-tooltip');
25
24
  var ArrowCornerDownRight = require('../icons/ArrowCornerDownRight.cjs');
26
25
  var ArrowCornerUpRight = require('../icons/ArrowCornerUpRight.cjs');
27
26
  var ArrowDown = require('../icons/ArrowDown.cjs');
@@ -58,6 +57,7 @@ var ListOrdered = require('../icons/ListOrdered.cjs');
58
57
  var ListUnordered = require('../icons/ListUnordered.cjs');
59
58
  var Mention = require('../icons/Mention.cjs');
60
59
  var MinusCircle = require('../icons/MinusCircle.cjs');
60
+ var Plus = require('../icons/Plus.cjs');
61
61
  var QuestionMark = require('../icons/QuestionMark.cjs');
62
62
  var Redo = require('../icons/Redo.cjs');
63
63
  var Restore = require('../icons/Restore.cjs');
@@ -89,6 +89,7 @@ exports.List = List.List;
89
89
  exports.Prose = Prose.Prose;
90
90
  exports.ShortcutTooltip = Tooltip.ShortcutTooltip;
91
91
  exports.Tooltip = Tooltip.Tooltip;
92
+ exports.TooltipProvider = Tooltip.TooltipProvider;
92
93
  exports.User = User.User;
93
94
  exports.useLiveblocksUiConfig = config.useLiveblocksUiConfig;
94
95
  exports.capitalize = capitalize.capitalize;
@@ -102,10 +103,6 @@ exports.useAiComposer = contexts.useAiComposer;
102
103
  exports.AiMessage = index$1;
103
104
  exports.Collapsible = index$2;
104
105
  exports.Markdown = Markdown.Markdown;
105
- Object.defineProperty(exports, 'TooltipProvider', {
106
- enumerable: true,
107
- get: function () { return TooltipPrimitive.TooltipProvider; }
108
- });
109
106
  exports.ArrowCornerDownRightIcon = ArrowCornerDownRight.ArrowCornerDownRightIcon;
110
107
  exports.ArrowCornerUpRightIcon = ArrowCornerUpRight.ArrowCornerUpRightIcon;
111
108
  exports.ArrowDownIcon = ArrowDown.ArrowDownIcon;
@@ -142,6 +139,7 @@ exports.ListOrderedIcon = ListOrdered.ListOrderedIcon;
142
139
  exports.ListUnorderedIcon = ListUnordered.ListUnorderedIcon;
143
140
  exports.MentionIcon = Mention.MentionIcon;
144
141
  exports.MinusCircleIcon = MinusCircle.MinusCircleIcon;
142
+ exports.PlusIcon = Plus.PlusIcon;
145
143
  exports.QuestionMarkIcon = QuestionMark.QuestionMarkIcon;
146
144
  exports.RedoIcon = Redo.RedoIcon;
147
145
  exports.RestoreIcon = Restore.RestoreIcon;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,8 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Relax, AiTextPart, AiReasoningPart, AiChatMessage } from '@liveblocks/core';
3
3
  import * as react from 'react';
4
4
  import { ComponentProps, ReactNode, ComponentPropsWithoutRef, ElementType, ComponentType, Ref, RefCallback, FormEvent } from 'react';
5
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
6
- export { TooltipProvider } from '@radix-ui/react-tooltip';
5
+ import { Tooltip as Tooltip$1 } from 'radix-ui';
7
6
 
8
7
  type AvatarProps = ComponentProps<"div"> & {
9
8
  icon?: ReactNode;
@@ -345,7 +344,7 @@ interface ProseProps extends ComponentProps<"div"> {
345
344
  */
346
345
  declare function Prose({ content, partial, components, className, ...props }: ProseProps): react_jsx_runtime.JSX.Element;
347
346
 
348
- interface TooltipProps extends Pick<TooltipPrimitive.TooltipTriggerProps, "children">, Omit<TooltipPrimitive.TooltipContentProps, "content"> {
347
+ interface TooltipProps extends Pick<Tooltip$1.TooltipTriggerProps, "children">, Omit<Tooltip$1.TooltipContentProps, "content"> {
349
348
  content: ReactNode;
350
349
  multiline?: boolean;
351
350
  }
@@ -354,6 +353,7 @@ interface ShortcutTooltipProps extends TooltipProps {
354
353
  }
355
354
  declare const Tooltip: react.ForwardRefExoticComponent<TooltipProps & react.RefAttributes<HTMLButtonElement>>;
356
355
  declare const ShortcutTooltip: react.ForwardRefExoticComponent<ShortcutTooltipProps & react.RefAttributes<HTMLButtonElement>>;
356
+ declare const TooltipProvider: react.FC<Tooltip$1.TooltipProviderProps>;
357
357
 
358
358
  interface UserProps extends ComponentProps<"span"> {
359
359
  /**
@@ -447,6 +447,8 @@ declare function MentionIcon(props: ComponentProps<"svg">): react_jsx_runtime.JS
447
447
 
448
448
  declare function MinusCircleIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
449
449
 
450
+ declare function PlusIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
451
+
450
452
  declare function QuestionMarkIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
451
453
 
452
454
  declare function RedoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
@@ -724,4 +726,4 @@ declare namespace index {
724
726
  };
725
727
  }
726
728
 
727
- export { index$2 as AiComposer, AiComposerEditorProps, AiComposerFormProps, AiComposerSubmitProps, index$1 as AiMessage, AiMessageContentComponents, AiMessageContentProps, AiMessageContentReasoningPartProps, AiMessageContentTextPartProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, Avatar, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, index as Collapsible, CommentIcon, CopyIcon, CrossCircleFillIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobeIcon, Group, GroupDescription, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, Markdown, MarkdownComponents, MarkdownComponentsBlockquoteProps, MarkdownComponentsCodeBlockProps, MarkdownComponentsHeadingProps, MarkdownComponentsImageProps, MarkdownComponentsInlineProps, MarkdownComponentsLinkProps, MarkdownComponentsListProps, MarkdownComponentsParagraphProps, MarkdownComponentsTableProps, MarkdownProps, MentionIcon, MinusCircleIcon, Portal, Prose, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TranslateIcon, UnderlineIcon, UndoIcon, User, UserIcon, UsersIcon, WarningIcon, capitalize, cn, useAiComposer, useInitial, useLiveblocksUiConfig, useRefs, useStableComponent };
729
+ export { index$2 as AiComposer, AiComposerEditorProps, AiComposerFormProps, AiComposerSubmitProps, index$1 as AiMessage, AiMessageContentComponents, AiMessageContentProps, AiMessageContentReasoningPartProps, AiMessageContentTextPartProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, Avatar, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, index as Collapsible, CommentIcon, CopyIcon, CrossCircleFillIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobeIcon, Group, GroupDescription, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, Markdown, MarkdownComponents, MarkdownComponentsBlockquoteProps, MarkdownComponentsCodeBlockProps, MarkdownComponentsHeadingProps, MarkdownComponentsImageProps, MarkdownComponentsInlineProps, MarkdownComponentsLinkProps, MarkdownComponentsListProps, MarkdownComponentsParagraphProps, MarkdownComponentsTableProps, MarkdownProps, MentionIcon, MinusCircleIcon, PlusIcon, Portal, Prose, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TooltipProvider, TranslateIcon, UnderlineIcon, UndoIcon, User, UserIcon, UsersIcon, WarningIcon, capitalize, cn, useAiComposer, useInitial, useLiveblocksUiConfig, useRefs, useStableComponent };
@@ -2,8 +2,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { Relax, AiTextPart, AiReasoningPart, AiChatMessage } from '@liveblocks/core';
3
3
  import * as react from 'react';
4
4
  import { ComponentProps, ReactNode, ComponentPropsWithoutRef, ElementType, ComponentType, Ref, RefCallback, FormEvent } from 'react';
5
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
6
- export { TooltipProvider } from '@radix-ui/react-tooltip';
5
+ import { Tooltip as Tooltip$1 } from 'radix-ui';
7
6
 
8
7
  type AvatarProps = ComponentProps<"div"> & {
9
8
  icon?: ReactNode;
@@ -345,7 +344,7 @@ interface ProseProps extends ComponentProps<"div"> {
345
344
  */
346
345
  declare function Prose({ content, partial, components, className, ...props }: ProseProps): react_jsx_runtime.JSX.Element;
347
346
 
348
- interface TooltipProps extends Pick<TooltipPrimitive.TooltipTriggerProps, "children">, Omit<TooltipPrimitive.TooltipContentProps, "content"> {
347
+ interface TooltipProps extends Pick<Tooltip$1.TooltipTriggerProps, "children">, Omit<Tooltip$1.TooltipContentProps, "content"> {
349
348
  content: ReactNode;
350
349
  multiline?: boolean;
351
350
  }
@@ -354,6 +353,7 @@ interface ShortcutTooltipProps extends TooltipProps {
354
353
  }
355
354
  declare const Tooltip: react.ForwardRefExoticComponent<TooltipProps & react.RefAttributes<HTMLButtonElement>>;
356
355
  declare const ShortcutTooltip: react.ForwardRefExoticComponent<ShortcutTooltipProps & react.RefAttributes<HTMLButtonElement>>;
356
+ declare const TooltipProvider: react.FC<Tooltip$1.TooltipProviderProps>;
357
357
 
358
358
  interface UserProps extends ComponentProps<"span"> {
359
359
  /**
@@ -447,6 +447,8 @@ declare function MentionIcon(props: ComponentProps<"svg">): react_jsx_runtime.JS
447
447
 
448
448
  declare function MinusCircleIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
449
449
 
450
+ declare function PlusIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
451
+
450
452
  declare function QuestionMarkIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
451
453
 
452
454
  declare function RedoIcon(props: ComponentProps<"svg">): react_jsx_runtime.JSX.Element;
@@ -724,4 +726,4 @@ declare namespace index {
724
726
  };
725
727
  }
726
728
 
727
- export { index$2 as AiComposer, AiComposerEditorProps, AiComposerFormProps, AiComposerSubmitProps, index$1 as AiMessage, AiMessageContentComponents, AiMessageContentProps, AiMessageContentReasoningPartProps, AiMessageContentTextPartProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, Avatar, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, index as Collapsible, CommentIcon, CopyIcon, CrossCircleFillIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobeIcon, Group, GroupDescription, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, Markdown, MarkdownComponents, MarkdownComponentsBlockquoteProps, MarkdownComponentsCodeBlockProps, MarkdownComponentsHeadingProps, MarkdownComponentsImageProps, MarkdownComponentsInlineProps, MarkdownComponentsLinkProps, MarkdownComponentsListProps, MarkdownComponentsParagraphProps, MarkdownComponentsTableProps, MarkdownProps, MentionIcon, MinusCircleIcon, Portal, Prose, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TranslateIcon, UnderlineIcon, UndoIcon, User, UserIcon, UsersIcon, WarningIcon, capitalize, cn, useAiComposer, useInitial, useLiveblocksUiConfig, useRefs, useStableComponent };
729
+ export { index$2 as AiComposer, AiComposerEditorProps, AiComposerFormProps, AiComposerSubmitProps, index$1 as AiMessage, AiMessageContentComponents, AiMessageContentProps, AiMessageContentReasoningPartProps, AiMessageContentTextPartProps, ArrowCornerDownRightIcon, ArrowCornerUpRightIcon, ArrowDownIcon, ArrowUpIcon, AttachmentIcon, Avatar, BellCrossedIcon, BellIcon, BlockquoteIcon, BoldIcon, Button, CheckCircleFillIcon, CheckCircleIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CodeIcon, index as Collapsible, CommentIcon, CopyIcon, CrossCircleFillIcon, CrossIcon, DeleteIcon, EditIcon, EllipsisIcon, EmojiIcon, EmojiPlusIcon, GlobeIcon, Group, GroupDescription, H1Icon, H2Icon, H3Icon, ItalicIcon, LengthenIcon, List, ListOrderedIcon, ListUnorderedIcon, Markdown, MarkdownComponents, MarkdownComponentsBlockquoteProps, MarkdownComponentsCodeBlockProps, MarkdownComponentsHeadingProps, MarkdownComponentsImageProps, MarkdownComponentsInlineProps, MarkdownComponentsLinkProps, MarkdownComponentsListProps, MarkdownComponentsParagraphProps, MarkdownComponentsTableProps, MarkdownProps, MentionIcon, MinusCircleIcon, PlusIcon, Portal, Prose, QuestionMarkIcon, RedoIcon, RestoreIcon, RetryIcon, SearchIcon, SelectButton, SendIcon, ShortcutTooltip, ShortenIcon, SparklesIcon, SparklesTextIcon, SpinnerIcon, StopIcon, StrikethroughIcon, TextIcon, Tooltip, TooltipProvider, TranslateIcon, UnderlineIcon, UndoIcon, User, UserIcon, UsersIcon, WarningIcon, capitalize, cn, useAiComposer, useInitial, useLiveblocksUiConfig, useRefs, useStableComponent };
@@ -4,7 +4,7 @@ export { Group } from '../components/internal/Group.js';
4
4
  export { GroupDescription } from '../components/internal/GroupDescription.js';
5
5
  export { List } from '../components/internal/List.js';
6
6
  export { Prose } from '../components/internal/Prose.js';
7
- export { ShortcutTooltip, Tooltip } from '../components/internal/Tooltip.js';
7
+ export { ShortcutTooltip, Tooltip, TooltipProvider } from '../components/internal/Tooltip.js';
8
8
  export { User } from '../components/internal/User.js';
9
9
  export { useLiveblocksUiConfig } from '../config.js';
10
10
  import '../icons/index.js';
@@ -22,7 +22,6 @@ export { index$1 as AiMessage };
22
22
  import * as index$2 from '../primitives/Collapsible/index.js';
23
23
  export { index$2 as Collapsible };
24
24
  export { Markdown } from '../primitives/Markdown.js';
25
- export { TooltipProvider } from '@radix-ui/react-tooltip';
26
25
  export { ArrowCornerDownRightIcon } from '../icons/ArrowCornerDownRight.js';
27
26
  export { ArrowCornerUpRightIcon } from '../icons/ArrowCornerUpRight.js';
28
27
  export { ArrowDownIcon } from '../icons/ArrowDown.js';
@@ -59,6 +58,7 @@ export { ListOrderedIcon } from '../icons/ListOrdered.js';
59
58
  export { ListUnorderedIcon } from '../icons/ListUnordered.js';
60
59
  export { MentionIcon } from '../icons/Mention.js';
61
60
  export { MinusCircleIcon } from '../icons/MinusCircle.js';
61
+ export { PlusIcon } from '../icons/Plus.js';
62
62
  export { QuestionMarkIcon } from '../icons/QuestionMark.js';
63
63
  export { RedoIcon } from '../icons/Redo.js';
64
64
  export { RestoreIcon } from '../icons/Restore.js';
@@ -0,0 +1,122 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var react$1 = require('@liveblocks/react');
6
+ var react = require('react');
7
+ var constants = require('../constants.cjs');
8
+ var overrides = require('../overrides.cjs');
9
+ var cn = require('../utils/cn.cjs');
10
+ var px = require('../utils/px.cjs');
11
+ var Avatar = require('./internal/Avatar.cjs');
12
+ var Tooltip = require('./internal/Tooltip.cjs');
13
+ var User = require('./internal/User.cjs');
14
+
15
+
16
+ const AvatarStack = react.forwardRef(
17
+ ({
18
+ userIds: additionalUserIds = [],
19
+ max = 3,
20
+ size,
21
+ overrides: overrides$1,
22
+ className,
23
+ style,
24
+ ...props
25
+ }, forwardedRef) => {
26
+ const $ = overrides.useOverrides(overrides$1);
27
+ const otherIds = react$1.useOthers(
28
+ (others) => [...others].sort((a, b) => b.connectionId - a.connectionId).map((user) => user.id).filter((userId) => userId !== void 0)
29
+ );
30
+ const selfId = react$1.useSelf((self) => self.id);
31
+ const userIds = react.useMemo(() => {
32
+ const uniqueUserIds = /* @__PURE__ */ new Set([
33
+ selfId,
34
+ ...otherIds,
35
+ ...additionalUserIds
36
+ ]);
37
+ return [...uniqueUserIds];
38
+ }, [selfId, otherIds, additionalUserIds]);
39
+ const maxItems = Math.max(2, Math.floor(max));
40
+ const shouldShowMore = userIds.length > maxItems;
41
+ const visibleAvatarsCount = shouldShowMore ? maxItems - 1 : maxItems;
42
+ const visibleUserIds = userIds.slice(0, visibleAvatarsCount);
43
+ const hiddenUserIds = userIds.slice(visibleUserIds.length);
44
+ const remainingUsersCount = hiddenUserIds.length;
45
+ const visibleItemsCount = visibleUserIds.length + Number(remainingUsersCount > 0);
46
+ if (userIds.length === 0) {
47
+ return null;
48
+ }
49
+ return /* @__PURE__ */ jsxRuntime.jsx(Tooltip.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsxs(
50
+ "div",
51
+ {
52
+ className: cn.cn("lb-root lb-avatar-stack", className),
53
+ dir: $.dir,
54
+ style: {
55
+ "--lb-avatar-stack-count": visibleItemsCount,
56
+ "--lb-avatar-stack-size": px.px(size),
57
+ ...style
58
+ },
59
+ ...props,
60
+ ref: forwardedRef,
61
+ children: [
62
+ visibleUserIds.map((userId, index) => {
63
+ if (!userId) {
64
+ return null;
65
+ }
66
+ return /* @__PURE__ */ jsxRuntime.jsx(
67
+ Tooltip.Tooltip,
68
+ {
69
+ content: /* @__PURE__ */ jsxRuntime.jsx(User.User, { userId }),
70
+ sideOffset: constants.FLOATING_ELEMENT_SIDE_OFFSET,
71
+ collisionPadding: constants.FLOATING_ELEMENT_COLLISION_PADDING,
72
+ side: "top",
73
+ align: "center",
74
+ children: /* @__PURE__ */ jsxRuntime.jsx(
75
+ Avatar.Avatar,
76
+ {
77
+ userId,
78
+ className: "lb-avatar-stack-avatar",
79
+ style: { "--lb-avatar-stack-index": index }
80
+ }
81
+ )
82
+ },
83
+ userId
84
+ );
85
+ }),
86
+ remainingUsersCount > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
87
+ Tooltip.Tooltip,
88
+ {
89
+ content: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "lb-users-tooltip-list", children: hiddenUserIds.map(
90
+ (userId) => userId ? /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "lb-users-tooltip-list-item", children: [
91
+ /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, { userId }),
92
+ /* @__PURE__ */ jsxRuntime.jsx(User.User, { userId })
93
+ ] }, userId) : null
94
+ ) }),
95
+ sideOffset: constants.FLOATING_ELEMENT_SIDE_OFFSET,
96
+ collisionPadding: constants.FLOATING_ELEMENT_COLLISION_PADDING,
97
+ side: "top",
98
+ align: "center",
99
+ className: "lb-users-tooltip",
100
+ children: /* @__PURE__ */ jsxRuntime.jsx(
101
+ "div",
102
+ {
103
+ className: "lb-avatar lb-avatar-stack-avatar lb-avatar-stack-more",
104
+ style: {
105
+ "--lb-avatar-stack-index": visibleUserIds.length
106
+ },
107
+ children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "lb-avatar-fallback", children: [
108
+ "+",
109
+ remainingUsersCount
110
+ ] })
111
+ }
112
+ )
113
+ }
114
+ ) : null
115
+ ]
116
+ }
117
+ ) });
118
+ }
119
+ );
120
+
121
+ exports.AvatarStack = AvatarStack;
122
+ //# sourceMappingURL=AvatarStack.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarStack.cjs","sources":["../../src/components/AvatarStack.tsx"],"sourcesContent":["\"use client\";\n\nimport { useOthers, useSelf } from \"@liveblocks/react\";\nimport type { ComponentPropsWithoutRef, CSSProperties } from \"react\";\nimport { forwardRef, useMemo } from \"react\";\n\nimport {\n FLOATING_ELEMENT_COLLISION_PADDING,\n FLOATING_ELEMENT_SIDE_OFFSET,\n} from \"../constants\";\nimport type { GlobalOverrides } from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { cn } from \"../utils/cn\";\nimport { px } from \"../utils/px\";\nimport { Avatar } from \"./internal/Avatar\";\nimport { Tooltip, TooltipProvider } from \"./internal/Tooltip\";\nimport { User } from \"./internal/User\";\n\nexport interface AvatarStackProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Optional additional user IDs to include in the stack.\n */\n userIds?: string[];\n\n /**\n * The maximum number of items in the stack (at least 2).\n * Defaults to 3, set to `undefined` to show all avatars.\n */\n max?: number;\n\n /**\n * The size of the avatars.\n */\n size?: string | number;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\n/**\n * Displays a stack of avatars for the users currently present in the room.\n */\nexport const AvatarStack = forwardRef<HTMLDivElement, AvatarStackProps>(\n (\n {\n userIds: additionalUserIds = [],\n max = 3,\n size,\n overrides,\n className,\n style,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const otherIds = useOthers((others) =>\n [...others]\n .sort((a, b) => b.connectionId - a.connectionId)\n .map((user) => user.id)\n .filter((userId): userId is string => userId !== undefined)\n );\n const selfId = useSelf((self) => self.id);\n const userIds = useMemo(() => {\n const uniqueUserIds = new Set([\n selfId,\n ...otherIds,\n ...additionalUserIds,\n ]);\n\n return [...uniqueUserIds];\n }, [selfId, otherIds, additionalUserIds]);\n const maxItems = Math.max(2, Math.floor(max));\n const shouldShowMore = userIds.length > maxItems;\n const visibleAvatarsCount = shouldShowMore ? maxItems - 1 : maxItems;\n const visibleUserIds = userIds.slice(0, visibleAvatarsCount);\n const hiddenUserIds = userIds.slice(visibleUserIds.length);\n const remainingUsersCount = hiddenUserIds.length;\n const visibleItemsCount =\n visibleUserIds.length + Number(remainingUsersCount > 0);\n\n if (userIds.length === 0) {\n return null;\n }\n\n return (\n <TooltipProvider>\n <div\n className={cn(\"lb-root lb-avatar-stack\", className)}\n dir={$.dir}\n style={\n {\n \"--lb-avatar-stack-count\": visibleItemsCount,\n \"--lb-avatar-stack-size\": px(size),\n ...style,\n } as CSSProperties\n }\n {...props}\n ref={forwardedRef}\n >\n {visibleUserIds.map((userId, index) => {\n if (!userId) {\n return null;\n }\n\n return (\n <Tooltip\n key={userId}\n content={<User userId={userId} />}\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n side=\"top\"\n align=\"center\"\n >\n <Avatar\n userId={userId}\n className=\"lb-avatar-stack-avatar\"\n style={{ \"--lb-avatar-stack-index\": index } as CSSProperties}\n />\n </Tooltip>\n );\n })}\n {remainingUsersCount > 0 ? (\n <Tooltip\n content={\n <ul className=\"lb-users-tooltip-list\">\n {hiddenUserIds.map((userId) =>\n userId ? (\n <li key={userId} className=\"lb-users-tooltip-list-item\">\n <Avatar userId={userId} />\n <User userId={userId} />\n </li>\n ) : null\n )}\n </ul>\n }\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n side=\"top\"\n align=\"center\"\n className=\"lb-users-tooltip\"\n >\n <div\n className=\"lb-avatar lb-avatar-stack-avatar lb-avatar-stack-more\"\n style={\n {\n \"--lb-avatar-stack-index\": visibleUserIds.length,\n } as CSSProperties\n }\n >\n <span className=\"lb-avatar-fallback\">\n +{remainingUsersCount}\n </span>\n </div>\n </Tooltip>\n ) : null}\n </div>\n </TooltipProvider>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AA4CO;AAAoB;AAEvB;AACgC;AACxB;AACN;AACA;AACA;AACA;AACG;AAIL;AACA;AAAiB;AAI6C;AAE9D;AACA;AACE;AAA8B;AAC5B;AACG;AACA;AAGL;AAAwB;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACE;AAAO;AAGT;AAEI;AAAC;AAAA;AACmD;AAC3C;AAEL;AAC6B;AACM;AAC9B;AACL;AAEE;AACC;AAEJ;AACC;AACE;AAAO;AAGT;AACE;AAAC;AAAA;AAEgC;AACnB;AACM;AACb;AACC;AAEN;AAAC;AAAA;AACC;AACU;AACgC;AAAA;AAC5C;AAAA;AAXK;AAYP;AAEH;AAEC;AAAC;AAAA;AAGoB;AAGT;AAAwB;AACF;AAEtB;AAER;AAEU;AACM;AACb;AACC;AACI;AAEV;AAAC;AAAA;AACW;AAER;AAC4C;AAC5C;AAGmC;AAAA;AACjC;AACJ;AAAA;AACF;AAAA;AAEA;AAAA;AAAA;AAER;AAGN;;"}
@@ -0,0 +1,120 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import { useOthers, useSelf } from '@liveblocks/react';
4
+ import { forwardRef, useMemo } from 'react';
5
+ import { FLOATING_ELEMENT_SIDE_OFFSET, FLOATING_ELEMENT_COLLISION_PADDING } from '../constants.js';
6
+ import { useOverrides } from '../overrides.js';
7
+ import { cn } from '../utils/cn.js';
8
+ import { px } from '../utils/px.js';
9
+ import { Avatar } from './internal/Avatar.js';
10
+ import { TooltipProvider, Tooltip } from './internal/Tooltip.js';
11
+ import { User } from './internal/User.js';
12
+
13
+
14
+ const AvatarStack = forwardRef(
15
+ ({
16
+ userIds: additionalUserIds = [],
17
+ max = 3,
18
+ size,
19
+ overrides,
20
+ className,
21
+ style,
22
+ ...props
23
+ }, forwardedRef) => {
24
+ const $ = useOverrides(overrides);
25
+ const otherIds = useOthers(
26
+ (others) => [...others].sort((a, b) => b.connectionId - a.connectionId).map((user) => user.id).filter((userId) => userId !== void 0)
27
+ );
28
+ const selfId = useSelf((self) => self.id);
29
+ const userIds = useMemo(() => {
30
+ const uniqueUserIds = /* @__PURE__ */ new Set([
31
+ selfId,
32
+ ...otherIds,
33
+ ...additionalUserIds
34
+ ]);
35
+ return [...uniqueUserIds];
36
+ }, [selfId, otherIds, additionalUserIds]);
37
+ const maxItems = Math.max(2, Math.floor(max));
38
+ const shouldShowMore = userIds.length > maxItems;
39
+ const visibleAvatarsCount = shouldShowMore ? maxItems - 1 : maxItems;
40
+ const visibleUserIds = userIds.slice(0, visibleAvatarsCount);
41
+ const hiddenUserIds = userIds.slice(visibleUserIds.length);
42
+ const remainingUsersCount = hiddenUserIds.length;
43
+ const visibleItemsCount = visibleUserIds.length + Number(remainingUsersCount > 0);
44
+ if (userIds.length === 0) {
45
+ return null;
46
+ }
47
+ return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(
48
+ "div",
49
+ {
50
+ className: cn("lb-root lb-avatar-stack", className),
51
+ dir: $.dir,
52
+ style: {
53
+ "--lb-avatar-stack-count": visibleItemsCount,
54
+ "--lb-avatar-stack-size": px(size),
55
+ ...style
56
+ },
57
+ ...props,
58
+ ref: forwardedRef,
59
+ children: [
60
+ visibleUserIds.map((userId, index) => {
61
+ if (!userId) {
62
+ return null;
63
+ }
64
+ return /* @__PURE__ */ jsx(
65
+ Tooltip,
66
+ {
67
+ content: /* @__PURE__ */ jsx(User, { userId }),
68
+ sideOffset: FLOATING_ELEMENT_SIDE_OFFSET,
69
+ collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
70
+ side: "top",
71
+ align: "center",
72
+ children: /* @__PURE__ */ jsx(
73
+ Avatar,
74
+ {
75
+ userId,
76
+ className: "lb-avatar-stack-avatar",
77
+ style: { "--lb-avatar-stack-index": index }
78
+ }
79
+ )
80
+ },
81
+ userId
82
+ );
83
+ }),
84
+ remainingUsersCount > 0 ? /* @__PURE__ */ jsx(
85
+ Tooltip,
86
+ {
87
+ content: /* @__PURE__ */ jsx("ul", { className: "lb-users-tooltip-list", children: hiddenUserIds.map(
88
+ (userId) => userId ? /* @__PURE__ */ jsxs("li", { className: "lb-users-tooltip-list-item", children: [
89
+ /* @__PURE__ */ jsx(Avatar, { userId }),
90
+ /* @__PURE__ */ jsx(User, { userId })
91
+ ] }, userId) : null
92
+ ) }),
93
+ sideOffset: FLOATING_ELEMENT_SIDE_OFFSET,
94
+ collisionPadding: FLOATING_ELEMENT_COLLISION_PADDING,
95
+ side: "top",
96
+ align: "center",
97
+ className: "lb-users-tooltip",
98
+ children: /* @__PURE__ */ jsx(
99
+ "div",
100
+ {
101
+ className: "lb-avatar lb-avatar-stack-avatar lb-avatar-stack-more",
102
+ style: {
103
+ "--lb-avatar-stack-index": visibleUserIds.length
104
+ },
105
+ children: /* @__PURE__ */ jsxs("span", { className: "lb-avatar-fallback", children: [
106
+ "+",
107
+ remainingUsersCount
108
+ ] })
109
+ }
110
+ )
111
+ }
112
+ ) : null
113
+ ]
114
+ }
115
+ ) });
116
+ }
117
+ );
118
+
119
+ export { AvatarStack };
120
+ //# sourceMappingURL=AvatarStack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AvatarStack.js","sources":["../../src/components/AvatarStack.tsx"],"sourcesContent":["\"use client\";\n\nimport { useOthers, useSelf } from \"@liveblocks/react\";\nimport type { ComponentPropsWithoutRef, CSSProperties } from \"react\";\nimport { forwardRef, useMemo } from \"react\";\n\nimport {\n FLOATING_ELEMENT_COLLISION_PADDING,\n FLOATING_ELEMENT_SIDE_OFFSET,\n} from \"../constants\";\nimport type { GlobalOverrides } from \"../overrides\";\nimport { useOverrides } from \"../overrides\";\nimport { cn } from \"../utils/cn\";\nimport { px } from \"../utils/px\";\nimport { Avatar } from \"./internal/Avatar\";\nimport { Tooltip, TooltipProvider } from \"./internal/Tooltip\";\nimport { User } from \"./internal/User\";\n\nexport interface AvatarStackProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Optional additional user IDs to include in the stack.\n */\n userIds?: string[];\n\n /**\n * The maximum number of items in the stack (at least 2).\n * Defaults to 3, set to `undefined` to show all avatars.\n */\n max?: number;\n\n /**\n * The size of the avatars.\n */\n size?: string | number;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<GlobalOverrides>;\n}\n\n/**\n * Displays a stack of avatars for the users currently present in the room.\n */\nexport const AvatarStack = forwardRef<HTMLDivElement, AvatarStackProps>(\n (\n {\n userIds: additionalUserIds = [],\n max = 3,\n size,\n overrides,\n className,\n style,\n ...props\n },\n forwardedRef\n ) => {\n const $ = useOverrides(overrides);\n const otherIds = useOthers((others) =>\n [...others]\n .sort((a, b) => b.connectionId - a.connectionId)\n .map((user) => user.id)\n .filter((userId): userId is string => userId !== undefined)\n );\n const selfId = useSelf((self) => self.id);\n const userIds = useMemo(() => {\n const uniqueUserIds = new Set([\n selfId,\n ...otherIds,\n ...additionalUserIds,\n ]);\n\n return [...uniqueUserIds];\n }, [selfId, otherIds, additionalUserIds]);\n const maxItems = Math.max(2, Math.floor(max));\n const shouldShowMore = userIds.length > maxItems;\n const visibleAvatarsCount = shouldShowMore ? maxItems - 1 : maxItems;\n const visibleUserIds = userIds.slice(0, visibleAvatarsCount);\n const hiddenUserIds = userIds.slice(visibleUserIds.length);\n const remainingUsersCount = hiddenUserIds.length;\n const visibleItemsCount =\n visibleUserIds.length + Number(remainingUsersCount > 0);\n\n if (userIds.length === 0) {\n return null;\n }\n\n return (\n <TooltipProvider>\n <div\n className={cn(\"lb-root lb-avatar-stack\", className)}\n dir={$.dir}\n style={\n {\n \"--lb-avatar-stack-count\": visibleItemsCount,\n \"--lb-avatar-stack-size\": px(size),\n ...style,\n } as CSSProperties\n }\n {...props}\n ref={forwardedRef}\n >\n {visibleUserIds.map((userId, index) => {\n if (!userId) {\n return null;\n }\n\n return (\n <Tooltip\n key={userId}\n content={<User userId={userId} />}\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n side=\"top\"\n align=\"center\"\n >\n <Avatar\n userId={userId}\n className=\"lb-avatar-stack-avatar\"\n style={{ \"--lb-avatar-stack-index\": index } as CSSProperties}\n />\n </Tooltip>\n );\n })}\n {remainingUsersCount > 0 ? (\n <Tooltip\n content={\n <ul className=\"lb-users-tooltip-list\">\n {hiddenUserIds.map((userId) =>\n userId ? (\n <li key={userId} className=\"lb-users-tooltip-list-item\">\n <Avatar userId={userId} />\n <User userId={userId} />\n </li>\n ) : null\n )}\n </ul>\n }\n sideOffset={FLOATING_ELEMENT_SIDE_OFFSET}\n collisionPadding={FLOATING_ELEMENT_COLLISION_PADDING}\n side=\"top\"\n align=\"center\"\n className=\"lb-users-tooltip\"\n >\n <div\n className=\"lb-avatar lb-avatar-stack-avatar lb-avatar-stack-more\"\n style={\n {\n \"--lb-avatar-stack-index\": visibleUserIds.length,\n } as CSSProperties\n }\n >\n <span className=\"lb-avatar-fallback\">\n +{remainingUsersCount}\n </span>\n </div>\n </Tooltip>\n ) : null}\n </div>\n </TooltipProvider>\n );\n }\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;AA4CO;AAAoB;AAEvB;AACgC;AACxB;AACN;AACA;AACA;AACA;AACG;AAIL;AACA;AAAiB;AAI6C;AAE9D;AACA;AACE;AAA8B;AAC5B;AACG;AACA;AAGL;AAAwB;AAE1B;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACE;AAAO;AAGT;AAEI;AAAC;AAAA;AACmD;AAC3C;AAEL;AAC6B;AACM;AAC9B;AACL;AAEE;AACC;AAEJ;AACC;AACE;AAAO;AAGT;AACE;AAAC;AAAA;AAEgC;AACnB;AACM;AACb;AACC;AAEN;AAAC;AAAA;AACC;AACU;AACgC;AAAA;AAC5C;AAAA;AAXK;AAYP;AAEH;AAEC;AAAC;AAAA;AAGoB;AAGT;AAAwB;AACF;AAEtB;AAER;AAEU;AACM;AACb;AACC;AACI;AAEV;AAAC;AAAA;AACW;AAER;AAC4C;AAC5C;AAGmC;AAAA;AACjC;AACJ;AAAA;AACF;AAAA;AAEA;AAAA;AAAA;AAER;AAGN;;"}
@@ -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');
@@ -33,28 +33,6 @@ var Group = require('./internal/Group.cjs');
33
33
  var List = require('./internal/List.cjs');
34
34
  var Tooltip = require('./internal/Tooltip.cjs');
35
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);
58
36
 
59
37
 
60
38
  const REACTIONS_TRUNCATE = 5;
@@ -221,7 +199,7 @@ const CommentReaction = react.forwardRef(({ comment, reaction, overrides: overri
221
199
  multiline: true,
222
200
  className: "lb-comment-reaction-tooltip",
223
201
  children: /* @__PURE__ */ jsxRuntime.jsx(
224
- TogglePrimitive__namespace.Root,
202
+ radixUi.Toggle.Root,
225
203
  {
226
204
  asChild: true,
227
205
  pressed: isActive,
@@ -401,6 +379,7 @@ const Comment = Object.assign(
401
379
  children,
402
380
  ...props
403
381
  }, forwardedRef) => {
382
+ const bodyId = `${comment.id}:body`;
404
383
  const ref = react.useRef(null);
405
384
  const mergedRefs = useRefs.useRefs(forwardedRef, ref);
406
385
  const currentUserId = shared.useCurrentUserId();
@@ -576,6 +555,7 @@ const Comment = Object.assign(
576
555
  index.Body,
577
556
  {
578
557
  className: "lb-comment-body",
558
+ id: bodyId,
579
559
  body: comment.body,
580
560
  components: {
581
561
  Mention: ({ mention }) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -624,7 +604,7 @@ const Comment = Object.assign(
624
604
  },
625
605
  reaction.emoji
626
606
  )),
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(
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(
628
608
  Button.Button,
629
609
  {
630
610
  className: "lb-comment-reaction lb-comment-reaction-add",
@@ -638,9 +618,10 @@ const Comment = Object.assign(
638
618
  ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "lb-comment-body", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "lb-comment-deleted", children: $.COMMENT_DELETED }) });
639
619
  content = typeof children === "function" ? children({ comment, children: content }) : children ?? content;
640
620
  }
641
- return /* @__PURE__ */ jsxRuntime.jsx(TooltipPrimitive.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(components.ComponentsProvider, { components: components$1, children: /* @__PURE__ */ jsxRuntime.jsxs(
621
+ return /* @__PURE__ */ jsxRuntime.jsx(Tooltip.TooltipProvider, { children: /* @__PURE__ */ jsxRuntime.jsx(components.ComponentsProvider, { components: components$1, children: /* @__PURE__ */ jsxRuntime.jsxs(
642
622
  "div",
643
623
  {
624
+ role: "article",
644
625
  id: comment.id,
645
626
  className: cn.cn(
646
627
  "lb-root lb-comment",
@@ -652,6 +633,7 @@ const Comment = Object.assign(
652
633
  "data-deleted": !comment.body ? "" : void 0,
653
634
  "data-editing": isEditing ? "" : void 0,
654
635
  "data-target": isTarget ? "" : void 0,
636
+ "aria-labelledby": bodyId,
655
637
  dir: $.dir,
656
638
  ...props,
657
639
  ref: mergedRefs,
@@ -712,7 +694,7 @@ const Comment = Object.assign(
712
694
  {
713
695
  onEmojiSelect: handleReactionSelect,
714
696
  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(
697
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_ADD_REACTION, children: /* @__PURE__ */ jsxRuntime.jsx(EmojiPicker.EmojiPickerTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
716
698
  Button.Button,
717
699
  {
718
700
  className: "lb-comment-action",
@@ -730,7 +712,7 @@ const Comment = Object.assign(
730
712
  onOpenChange: setMoreActionOpen,
731
713
  align: "end",
732
714
  content: dropdownContent,
733
- children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_MORE, children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuPrimitive.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
715
+ children: /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: $.COMMENT_MORE, children: /* @__PURE__ */ jsxRuntime.jsx(Dropdown.DropdownTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
734
716
  Button.Button,
735
717
  {
736
718
  className: "lb-comment-action",