@liveblocks/react-ui 2.15.0-debug1 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/_private/index.js +1 -0
  2. package/dist/_private/index.js.map +1 -1
  3. package/dist/_private/index.mjs +1 -0
  4. package/dist/_private/index.mjs.map +1 -1
  5. package/dist/components/Comment.js +7 -6
  6. package/dist/components/Comment.js.map +1 -1
  7. package/dist/components/Comment.mjs +4 -3
  8. package/dist/components/Comment.mjs.map +1 -1
  9. package/dist/components/Composer.js +4 -2
  10. package/dist/components/Composer.js.map +1 -1
  11. package/dist/components/Composer.mjs +8 -7
  12. package/dist/components/Composer.mjs.map +1 -1
  13. package/dist/components/HistoryVersionSummary.js +3 -10
  14. package/dist/components/HistoryVersionSummary.js.map +1 -1
  15. package/dist/components/HistoryVersionSummary.mjs +3 -10
  16. package/dist/components/HistoryVersionSummary.mjs.map +1 -1
  17. package/dist/components/HistoryVersionSummaryList.js +1 -0
  18. package/dist/components/HistoryVersionSummaryList.js.map +1 -1
  19. package/dist/components/HistoryVersionSummaryList.mjs +1 -0
  20. package/dist/components/HistoryVersionSummaryList.mjs.map +1 -1
  21. package/dist/components/InboxNotification.js +1 -0
  22. package/dist/components/InboxNotification.js.map +1 -1
  23. package/dist/components/InboxNotification.mjs +1 -0
  24. package/dist/components/InboxNotification.mjs.map +1 -1
  25. package/dist/components/InboxNotificationList.js +1 -0
  26. package/dist/components/InboxNotificationList.js.map +1 -1
  27. package/dist/components/InboxNotificationList.mjs +3 -2
  28. package/dist/components/InboxNotificationList.mjs.map +1 -1
  29. package/dist/components/Thread.js +1 -0
  30. package/dist/components/Thread.js.map +1 -1
  31. package/dist/components/Thread.mjs +1 -0
  32. package/dist/components/Thread.mjs.map +1 -1
  33. package/dist/components/internal/Attachment.js +3 -6
  34. package/dist/components/internal/Attachment.js.map +1 -1
  35. package/dist/components/internal/Attachment.mjs +5 -8
  36. package/dist/components/internal/Attachment.mjs.map +1 -1
  37. package/dist/components/internal/Avatar.js +1 -0
  38. package/dist/components/internal/Avatar.js.map +1 -1
  39. package/dist/components/internal/Avatar.mjs +1 -0
  40. package/dist/components/internal/Avatar.mjs.map +1 -1
  41. package/dist/components/internal/Button.js +1 -0
  42. package/dist/components/internal/Button.js.map +1 -1
  43. package/dist/components/internal/Button.mjs +1 -0
  44. package/dist/components/internal/Button.mjs.map +1 -1
  45. package/dist/components/internal/Dropdown.js +1 -0
  46. package/dist/components/internal/Dropdown.js.map +1 -1
  47. package/dist/components/internal/Dropdown.mjs +2 -1
  48. package/dist/components/internal/Dropdown.mjs.map +1 -1
  49. package/dist/components/internal/EmojiPicker.mjs +2 -2
  50. package/dist/components/internal/Room.js +1 -0
  51. package/dist/components/internal/Room.js.map +1 -1
  52. package/dist/components/internal/Room.mjs +1 -0
  53. package/dist/components/internal/Room.mjs.map +1 -1
  54. package/dist/components/internal/Tooltip.js +1 -0
  55. package/dist/components/internal/Tooltip.js.map +1 -1
  56. package/dist/components/internal/Tooltip.mjs +1 -0
  57. package/dist/components/internal/Tooltip.mjs.map +1 -1
  58. package/dist/components/internal/User.js +1 -0
  59. package/dist/components/internal/User.js.map +1 -1
  60. package/dist/components/internal/User.mjs +1 -0
  61. package/dist/components/internal/User.mjs.map +1 -1
  62. package/dist/components.js +1 -0
  63. package/dist/components.js.map +1 -1
  64. package/dist/components.mjs +1 -0
  65. package/dist/components.mjs.map +1 -1
  66. package/dist/config.js +1 -0
  67. package/dist/config.js.map +1 -1
  68. package/dist/config.mjs +1 -0
  69. package/dist/config.mjs.map +1 -1
  70. package/dist/icons/index.js +42 -0
  71. package/dist/icons/index.js.map +1 -0
  72. package/dist/icons/index.mjs +19 -0
  73. package/dist/icons/index.mjs.map +1 -0
  74. package/dist/overrides.js +1 -0
  75. package/dist/overrides.js.map +1 -1
  76. package/dist/overrides.mjs +1 -0
  77. package/dist/overrides.mjs.map +1 -1
  78. package/dist/primitives/Composer/index.js +14 -13
  79. package/dist/primitives/Composer/index.js.map +1 -1
  80. package/dist/primitives/Composer/index.mjs +10 -9
  81. package/dist/primitives/Composer/index.mjs.map +1 -1
  82. package/dist/primitives/Composer/utils.js +2 -1
  83. package/dist/primitives/Composer/utils.js.map +1 -1
  84. package/dist/primitives/Composer/utils.mjs +4 -3
  85. package/dist/primitives/Composer/utils.mjs.map +1 -1
  86. package/dist/primitives/EmojiPicker/index.js +1 -0
  87. package/dist/primitives/EmojiPicker/index.js.map +1 -1
  88. package/dist/primitives/EmojiPicker/index.mjs +3 -2
  89. package/dist/primitives/EmojiPicker/index.mjs.map +1 -1
  90. package/dist/primitives/FileSize.js +1 -0
  91. package/dist/primitives/FileSize.js.map +1 -1
  92. package/dist/primitives/FileSize.mjs +1 -0
  93. package/dist/primitives/FileSize.mjs.map +1 -1
  94. package/dist/primitives/Timestamp.js +1 -0
  95. package/dist/primitives/Timestamp.js.map +1 -1
  96. package/dist/primitives/Timestamp.mjs +1 -0
  97. package/dist/primitives/Timestamp.mjs.map +1 -1
  98. package/dist/slate/plugins/auto-links.mjs +1 -1
  99. package/dist/slate/plugins/custom-links.mjs +1 -1
  100. package/dist/slate/plugins/mentions.mjs +1 -1
  101. package/dist/utils/Persist.js +1 -0
  102. package/dist/utils/Persist.js.map +1 -1
  103. package/dist/utils/Persist.mjs +2 -1
  104. package/dist/utils/Persist.mjs.map +1 -1
  105. package/dist/utils/Portal.js +1 -0
  106. package/dist/utils/Portal.js.map +1 -1
  107. package/dist/utils/Portal.mjs +1 -0
  108. package/dist/utils/Portal.mjs.map +1 -1
  109. package/dist/utils/use-visible.js +22 -0
  110. package/dist/utils/use-visible.js.map +1 -1
  111. package/dist/utils/use-visible.mjs +23 -2
  112. package/dist/utils/use-visible.mjs.map +1 -1
  113. package/dist/version.js +2 -2
  114. package/dist/version.js.map +1 -1
  115. package/dist/version.mjs +2 -2
  116. package/dist/version.mjs.map +1 -1
  117. package/package.json +8 -21
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/primitives/Composer/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type CommentAttachment,\n type CommentBody,\n type CommentLocalAttachment,\n createCommentAttachmentId,\n type EventSource,\n makeEventSource,\n} from \"@liveblocks/core\";\nimport {\n useClientOrNull,\n useMentionSuggestions,\n useResolveMentionSuggestions,\n useRoomOrNull,\n useSyncSource,\n} from \"@liveblocks/react/_private\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type {\n AriaAttributes,\n ChangeEvent,\n FocusEvent,\n FormEvent,\n KeyboardEvent,\n MouseEvent,\n PointerEvent,\n SyntheticEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n Descendant as SlateDescendant,\n Element as SlateElement,\n} from \"slate\";\nimport {\n createEditor,\n Editor as SlateEditor,\n insertText as insertSlateText,\n Range as SlateRange,\n Transforms as SlateTransforms,\n} from \"slate\";\nimport { withHistory } from \"slate-history\";\nimport type {\n RenderElementProps,\n RenderElementSpecificProps,\n RenderLeafProps,\n RenderPlaceholderProps,\n} from \"slate-react\";\nimport {\n Editable,\n ReactEditor,\n Slate,\n useSelected,\n useSlateStatic,\n withReact,\n} from \"slate-react\";\n\nimport { useLiveblocksUIConfig } from \"../../config\";\nimport { withAutoFormatting } from \"../../slate/plugins/auto-formatting\";\nimport { withAutoLinks } from \"../../slate/plugins/auto-links\";\nimport { withCustomLinks } from \"../../slate/plugins/custom-links\";\nimport { withEmptyClearFormatting } from \"../../slate/plugins/empty-clear-formatting\";\nimport type { MentionDraft } from \"../../slate/plugins/mentions\";\nimport {\n getMentionDraftAtSelection,\n insertMention,\n insertMentionCharacter,\n MENTION_CHARACTER,\n withMentions,\n} from \"../../slate/plugins/mentions\";\nimport { withNormalize } from \"../../slate/plugins/normalize\";\nimport { withPaste } from \"../../slate/plugins/paste\";\nimport { getDOMRange } from \"../../slate/utils/get-dom-range\";\nimport { isEmpty as isEditorEmpty } from \"../../slate/utils/is-empty\";\nimport {\n getMarks,\n leaveMarkEdge,\n toggleMark as toggleEditorMark,\n} from \"../../slate/utils/marks\";\nimport type {\n ComposerBody as ComposerBodyData,\n ComposerBodyAutoLink,\n ComposerBodyCustomLink,\n ComposerBodyMark,\n ComposerBodyMarks,\n ComposerBodyMention,\n} from \"../../types\";\nimport { isKey } from \"../../utils/is-key\";\nimport { Persist, useAnimationPersist, usePersist } from \"../../utils/Persist\";\nimport { Portal } from \"../../utils/Portal\";\nimport { requestSubmit } from \"../../utils/request-submit\";\nimport { useIndex } from \"../../utils/use-index\";\nimport { useInitial } from \"../../utils/use-initial\";\nimport { useObservable } from \"../../utils/use-observable\";\nimport { useRefs } from \"../../utils/use-refs\";\nimport { toAbsoluteUrl } from \"../Comment/utils\";\nimport {\n ComposerAttachmentsContext,\n ComposerContext,\n ComposerEditorContext,\n ComposerFloatingToolbarContext,\n ComposerSuggestionsContext,\n useComposer,\n useComposerAttachmentsContext,\n useComposerEditorContext,\n useComposerFloatingToolbarContext,\n useComposerSuggestionsContext,\n} from \"./contexts\";\nimport type {\n ComposerAttachFilesProps,\n ComposerAttachmentsDropAreaProps,\n ComposerEditorComponents,\n ComposerEditorElementProps,\n ComposerEditorFloatingToolbarWrapperProps,\n ComposerEditorLinkWrapperProps,\n ComposerEditorMentionSuggestionsWrapperProps,\n ComposerEditorMentionWrapperProps,\n ComposerEditorProps,\n ComposerFloatingToolbarProps,\n ComposerFormProps,\n ComposerLinkProps,\n ComposerMarkToggleProps,\n ComposerMentionProps,\n ComposerSubmitProps,\n ComposerSuggestionsListItemProps,\n ComposerSuggestionsListProps,\n ComposerSuggestionsProps,\n FloatingPosition,\n} from \"./types\";\nimport {\n commentBodyToComposerBody,\n composerBodyToCommentBody,\n getSideAndAlignFromFloatingPlacement,\n useComposerAttachmentsDropArea,\n useComposerAttachmentsManager,\n useContentZIndex,\n useFloatingWithOptions,\n} from \"./utils\";\n\nconst MENTION_SUGGESTIONS_POSITION: FloatingPosition = \"top\";\n\nconst FLOATING_TOOLBAR_POSITION: FloatingPosition = \"top\";\n\nconst COMPOSER_MENTION_NAME = \"ComposerMention\";\nconst COMPOSER_LINK_NAME = \"ComposerLink\";\nconst COMPOSER_FLOATING_TOOLBAR_NAME = \"ComposerFloatingToolbar\";\nconst COMPOSER_SUGGESTIONS_NAME = \"ComposerSuggestions\";\nconst COMPOSER_SUGGESTIONS_LIST_NAME = \"ComposerSuggestionsList\";\nconst COMPOSER_SUGGESTIONS_LIST_ITEM_NAME = \"ComposerSuggestionsListItem\";\nconst COMPOSER_SUBMIT_NAME = \"ComposerSubmit\";\nconst COMPOSER_EDITOR_NAME = \"ComposerEditor\";\nconst COMPOSER_ATTACH_FILES_NAME = \"ComposerAttachFiles\";\nconst COMPOSER_ATTACHMENTS_DROP_AREA_NAME = \"ComposerAttachmentsDropArea\";\nconst COMPOSER_MARK_TOGGLE_NAME = \"ComposerMarkToggle\";\nconst COMPOSER_FORM_NAME = \"ComposerForm\";\n\nconst emptyCommentBody: CommentBody = {\n version: 1,\n content: [{ type: \"paragraph\", children: [{ text: \"\" }] }],\n};\n\nfunction createComposerEditor({\n createAttachments,\n pasteFilesAsAttachments,\n}: {\n createAttachments: (files: File[]) => void;\n pasteFilesAsAttachments?: boolean;\n}) {\n return withNormalize(\n withMentions(\n withCustomLinks(\n withAutoLinks(\n withAutoFormatting(\n withEmptyClearFormatting(\n withPaste(withHistory(withReact(createEditor())), {\n createAttachments,\n pasteFilesAsAttachments,\n })\n )\n )\n )\n )\n )\n );\n}\n\nfunction ComposerEditorMentionWrapper({\n Mention,\n attributes,\n children,\n element,\n}: ComposerEditorMentionWrapperProps) {\n const isSelected = useSelected();\n\n return (\n <span {...attributes}>\n {element.id ? (\n <Mention userId={element.id} isSelected={isSelected} />\n ) : null}\n {children}\n </span>\n );\n}\n\nfunction ComposerEditorLinkWrapper({\n Link,\n attributes,\n element,\n children,\n}: ComposerEditorLinkWrapperProps) {\n const href = useMemo(\n () => toAbsoluteUrl(element.url) ?? element.url,\n [element.url]\n );\n\n return (\n <span {...attributes}>\n <Link href={href}>{children}</Link>\n </span>\n );\n}\n\nfunction ComposerEditorMentionSuggestionsWrapper({\n id,\n itemId,\n userIds,\n selectedUserId,\n setSelectedUserId,\n mentionDraft,\n setMentionDraft,\n onItemSelect,\n position = MENTION_SUGGESTIONS_POSITION,\n dir,\n MentionSuggestions,\n}: ComposerEditorMentionSuggestionsWrapperProps) {\n const editor = useSlateStatic();\n const { onEditorChange } = useComposerEditorContext();\n const { isFocused } = useComposer();\n const { portalContainer } = useLiveblocksUIConfig();\n const [contentRef, contentZIndex] = useContentZIndex();\n const isOpen =\n isFocused && mentionDraft?.range !== undefined && userIds !== undefined;\n const {\n refs: { setReference, setFloating },\n strategy,\n isPositioned,\n placement,\n x,\n y,\n } = useFloatingWithOptions({\n position,\n dir,\n alignment: \"start\",\n open: isOpen,\n });\n\n useObservable(onEditorChange, () => {\n setMentionDraft(getMentionDraftAtSelection(editor));\n });\n\n useLayoutEffect(() => {\n if (!mentionDraft) {\n setReference(null);\n\n return;\n }\n\n const domRange = getDOMRange(editor, mentionDraft.range);\n setReference(domRange ?? null);\n }, [setReference, editor, mentionDraft]);\n\n return (\n <Persist>\n {isOpen ? (\n <ComposerSuggestionsContext.Provider\n value={{\n id,\n itemId,\n selectedValue: selectedUserId,\n setSelectedValue: setSelectedUserId,\n onItemSelect,\n placement,\n dir,\n ref: contentRef,\n }}\n >\n <Portal\n ref={setFloating}\n container={portalContainer}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n }}\n >\n <MentionSuggestions\n userIds={userIds}\n selectedUserId={selectedUserId}\n />\n </Portal>\n </ComposerSuggestionsContext.Provider>\n ) : null}\n </Persist>\n );\n}\n\nfunction ComposerEditorFloatingToolbarWrapper({\n id,\n position = FLOATING_TOOLBAR_POSITION,\n dir,\n FloatingToolbar,\n hasFloatingToolbarRange,\n setHasFloatingToolbarRange,\n}: ComposerEditorFloatingToolbarWrapperProps) {\n const editor = useSlateStatic();\n const { onEditorChange } = useComposerEditorContext();\n const { isFocused } = useComposer();\n const { portalContainer } = useLiveblocksUIConfig();\n const [contentRef, contentZIndex] = useContentZIndex();\n const [isPointerDown, setPointerDown] = useState(false);\n const isOpen = isFocused && !isPointerDown && hasFloatingToolbarRange;\n const {\n refs: { setReference, setFloating },\n strategy,\n isPositioned,\n placement,\n x,\n y,\n } = useFloatingWithOptions({\n type: \"range\",\n position,\n dir,\n alignment: \"center\",\n open: isOpen,\n });\n\n useLayoutEffect(() => {\n if (!isFocused) {\n return;\n }\n\n const handlePointerDown = () => setPointerDown(true);\n const handlePointerUp = () => setPointerDown(false);\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [isFocused]);\n\n useObservable(onEditorChange, () => {\n // Detach from previous selection range (if any) to avoid sudden jumps\n setReference(null);\n\n // Then, wait for the next render to ensure the selection is updated\n requestAnimationFrame(() => {\n const domSelection = window.getSelection();\n\n // Finally, show the toolbar if there's a selection range\n if (\n !editor.selection ||\n SlateRange.isCollapsed(editor.selection) ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setHasFloatingToolbarRange(false);\n setReference(null);\n } else {\n setHasFloatingToolbarRange(true);\n\n const domRange = domSelection.getRangeAt(0);\n setReference(domRange);\n }\n });\n });\n\n return (\n <Persist>\n {isOpen ? (\n <ComposerFloatingToolbarContext.Provider\n value={{\n id,\n placement,\n dir,\n ref: contentRef,\n }}\n >\n <Portal\n ref={setFloating}\n container={portalContainer}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n }}\n >\n <FloatingToolbar />\n </Portal>\n </ComposerFloatingToolbarContext.Provider>\n ) : null}\n </Persist>\n );\n}\n\n/**\n * Displays a floating toolbar attached to the selection within `Composer.Editor`.\n *\n * @example\n * <Composer.FloatingToolbar>\n * <Composer.MarkToggle mark=\"bold\">Bold</Composer.MarkToggle>\n * <Composer.MarkToggle mark=\"italic\">Italic</Composer.MarkToggle>\n * </Composer.FloatingToolbar>\n */\nconst ComposerFloatingToolbar = forwardRef<\n HTMLDivElement,\n ComposerFloatingToolbarProps\n>(({ children, onPointerDown, style, asChild, ...props }, forwardedRef) => {\n const [isPresent] = usePersist();\n const ref = useRef<HTMLDivElement>(null);\n const {\n id,\n ref: contentRef,\n placement,\n dir,\n } = useComposerFloatingToolbarContext(COMPOSER_FLOATING_TOOLBAR_NAME);\n const mergedRefs = useRefs(forwardedRef, contentRef, ref);\n const [side, align] = useMemo(\n () => getSideAndAlignFromFloatingPlacement(placement),\n [placement]\n );\n const Component = asChild ? Slot : \"div\";\n useAnimationPersist(ref);\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onPointerDown]\n );\n\n return (\n <Component\n dir={dir}\n role=\"toolbar\"\n id={id}\n aria-label=\"Floating toolbar\"\n {...props}\n onPointerDown={handlePointerDown}\n data-state={isPresent ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n maxWidth: \"var(--lb-composer-floating-available-width)\",\n overflowX: \"auto\",\n ...style,\n }}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n});\n\nfunction ComposerEditorElement({\n Mention,\n Link,\n ...props\n}: ComposerEditorElementProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { attributes, children, element } = props;\n\n switch (element.type) {\n case \"mention\":\n return (\n <ComposerEditorMentionWrapper\n Mention={Mention}\n {...(props as RenderElementSpecificProps<ComposerBodyMention>)}\n />\n );\n case \"auto-link\":\n case \"custom-link\":\n return (\n <ComposerEditorLinkWrapper\n Link={Link}\n {...(props as RenderElementSpecificProps<\n ComposerBodyAutoLink | ComposerBodyCustomLink\n >)}\n />\n );\n case \"paragraph\":\n return (\n <p {...attributes} style={{ position: \"relative\" }}>\n {children}\n </p>\n );\n default:\n return null;\n }\n}\n\n// <code><s><em><strong>text</strong></s></em></code>\nfunction ComposerEditorLeaf({ attributes, children, leaf }: RenderLeafProps) {\n if (leaf.bold) {\n children = <strong>{children}</strong>;\n }\n\n if (leaf.italic) {\n children = <em>{children}</em>;\n }\n\n if (leaf.strikethrough) {\n children = <s>{children}</s>;\n }\n\n if (leaf.code) {\n children = <code>{children}</code>;\n }\n\n return <span {...attributes}>{children}</span>;\n}\n\nfunction ComposerEditorPlaceholder({\n attributes,\n children,\n}: RenderPlaceholderProps) {\n const { opacity: _opacity, ...style } = attributes.style;\n\n return (\n <span {...attributes} style={style} data-placeholder=\"\">\n {children}\n </span>\n );\n}\n\n/**\n * Displays mentions within `Composer.Editor`.\n *\n * @example\n * <Composer.Mention>@{userId}</Composer.Mention>\n */\nconst ComposerMention = forwardRef<HTMLSpanElement, ComposerMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n const isSelected = useSelected();\n\n return (\n <Component\n data-selected={isSelected || undefined}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Composer.Editor`.\n *\n * @example\n * <Composer.Link href={href}>{children}</Composer.Link>\n */\nconst ComposerLink = forwardRef<HTMLAnchorElement, ComposerLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Contains suggestions within `Composer.Editor`.\n */\nconst ComposerSuggestions = forwardRef<\n HTMLDivElement,\n ComposerSuggestionsProps\n>(({ children, style, asChild, ...props }, forwardedRef) => {\n const [isPresent] = usePersist();\n const ref = useRef<HTMLDivElement>(null);\n const {\n ref: contentRef,\n placement,\n dir,\n } = useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_NAME);\n const mergedRefs = useRefs(forwardedRef, contentRef, ref);\n const [side, align] = useMemo(\n () => getSideAndAlignFromFloatingPlacement(placement),\n [placement]\n );\n const Component = asChild ? Slot : \"div\";\n useAnimationPersist(ref);\n\n return (\n <Component\n dir={dir}\n {...props}\n data-state={isPresent ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"var(--lb-composer-floating-available-height)\",\n overflowY: \"auto\",\n ...style,\n }}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * Displays a list of suggestions within `Composer.Editor`.\n *\n * @example\n * <Composer.SuggestionsList>\n * {userIds.map((userId) => (\n * <Composer.SuggestionsListItem key={userId} value={userId}>\n * @{userId}\n * </Composer.SuggestionsListItem>\n * ))}\n * </Composer.SuggestionsList>\n */\nconst ComposerSuggestionsList = forwardRef<\n HTMLUListElement,\n ComposerSuggestionsListProps\n>(({ children, asChild, ...props }, forwardedRef) => {\n const { id } = useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_NAME);\n const Component = asChild ? Slot : \"ul\";\n\n return (\n <Component\n role=\"listbox\"\n id={id}\n aria-label=\"Suggestions list\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * Displays a suggestion within `Composer.SuggestionsList`.\n *\n * @example\n * <Composer.SuggestionsListItem key={userId} value={userId}>\n * @{userId}\n * </Composer.SuggestionsListItem>\n */\nconst ComposerSuggestionsListItem = forwardRef<\n HTMLLIElement,\n ComposerSuggestionsListItemProps\n>(\n (\n {\n value,\n children,\n onPointerMove,\n onPointerDown,\n onClick,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const ref = useRef<HTMLLIElement>(null);\n const mergedRefs = useRefs(forwardedRef, ref);\n const { selectedValue, setSelectedValue, itemId, onItemSelect } =\n useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_ITEM_NAME);\n const Component = asChild ? Slot : \"li\";\n const isSelected = useMemo(\n () => selectedValue === value,\n [selectedValue, value]\n );\n // TODO: Support props.id if provided, it will need to be sent up to Composer.Editor to use it in aria-activedescendant\n const id = useMemo(() => itemId(value), [itemId, value]);\n\n useEffect(() => {\n if (ref?.current && isSelected) {\n ref.current.scrollIntoView({ block: \"nearest\" });\n }\n }, [isSelected]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<HTMLLIElement>) => {\n onPointerMove?.(event);\n\n if (!event.isDefaultPrevented()) {\n setSelectedValue(value);\n }\n },\n [onPointerMove, setSelectedValue, value]\n );\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<HTMLLIElement>) => {\n onPointerDown?.(event);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onPointerDown]\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLLIElement>) => {\n onClick?.(event);\n\n const wasDefaultPrevented = event.isDefaultPrevented();\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!wasDefaultPrevented) {\n onItemSelect(value);\n }\n },\n [onClick, onItemSelect, value]\n );\n\n return (\n <Component\n role=\"option\"\n id={id}\n data-selected={isSelected || undefined}\n aria-selected={isSelected || undefined}\n onPointerMove={handlePointerMove}\n onPointerDown={handlePointerDown}\n onClick={handleClick}\n {...props}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultEditorComponents: ComposerEditorComponents = {\n Link: ({ href, children }) => {\n return <ComposerLink href={href}>{children}</ComposerLink>;\n },\n Mention: ({ userId }) => {\n return (\n <ComposerMention>\n {MENTION_CHARACTER}\n {userId}\n </ComposerMention>\n );\n },\n MentionSuggestions: ({ userIds }) => {\n return userIds.length > 0 ? (\n <ComposerSuggestions>\n <ComposerSuggestionsList>\n {userIds.map((userId) => (\n <ComposerSuggestionsListItem key={userId} value={userId}>\n {userId}\n </ComposerSuggestionsListItem>\n ))}\n </ComposerSuggestionsList>\n </ComposerSuggestions>\n ) : null;\n },\n};\n\n/**\n * Displays the composer's editor.\n *\n * @example\n * <Composer.Editor placeholder=\"Write a comment…\" />\n */\nconst ComposerEditor = forwardRef<HTMLDivElement, ComposerEditorProps>(\n (\n {\n defaultValue,\n onKeyDown,\n onFocus,\n onBlur,\n disabled,\n autoFocus,\n components,\n dir,\n ...props\n },\n forwardedRef\n ) => {\n const client = useClientOrNull();\n const { editor, validate, setFocused, onEditorChange, roomId } =\n useComposerEditorContext();\n const {\n submit,\n focus,\n blur,\n select,\n canSubmit,\n isDisabled: isComposerDisabled,\n isFocused,\n } = useComposer();\n const isDisabled = isComposerDisabled || disabled;\n const initialBody = useInitial(defaultValue ?? emptyCommentBody);\n const initialEditorValue = useMemo(() => {\n return commentBodyToComposerBody(initialBody);\n }, [initialBody]);\n const { Link, Mention, MentionSuggestions, FloatingToolbar } = useMemo(\n () => ({ ...defaultEditorComponents, ...components }),\n [components]\n );\n\n const [hasFloatingToolbarRange, setHasFloatingToolbarRange] =\n useState(false);\n // If used with LiveblocksProvider but without resolveMentionSuggestions,\n // we can skip the mention suggestions logic entirely\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const hasResolveMentionSuggestions = client\n ? resolveMentionSuggestions\n : true;\n const [mentionDraft, setMentionDraft] = useState<MentionDraft>();\n const mentionSuggestions = useMentionSuggestions(\n roomId,\n mentionDraft?.text\n );\n const [\n selectedMentionSuggestionIndex,\n setPreviousSelectedMentionSuggestionIndex,\n setNextSelectedMentionSuggestionIndex,\n setSelectedMentionSuggestionIndex,\n ] = useIndex(0, mentionSuggestions?.length ?? 0);\n const id = useId();\n const floatingToolbarId = useMemo(\n () => `liveblocks-floating-toolbar-${id}`,\n [id]\n );\n const suggestionsListId = useMemo(\n () => `liveblocks-suggestions-list-${id}`,\n [id]\n );\n const suggestionsListItemId = useCallback(\n (userId?: string) =>\n userId ? `liveblocks-suggestions-list-item-${id}-${userId}` : undefined,\n [id]\n );\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return (\n <ComposerEditorElement Mention={Mention} Link={Link} {...props} />\n );\n },\n [Link, Mention]\n );\n\n const handleChange = useCallback(\n (value: SlateDescendant[]) => {\n validate(value as SlateElement[]);\n\n // Our multi-component setup requires us to instantiate the editor in `Composer.Form`\n // but we can only listen to changes here in `Composer.Editor` via `Slate`, so we use\n // an event source to notify `Composer.Form` of changes.\n onEditorChange.notify();\n },\n [validate, onEditorChange]\n );\n\n const createMention = useCallback(\n (userId?: string) => {\n if (!mentionDraft || !userId) {\n return;\n }\n\n SlateTransforms.select(editor, mentionDraft.range);\n insertMention(editor, userId);\n setMentionDraft(undefined);\n setSelectedMentionSuggestionIndex(0);\n },\n [editor, mentionDraft, setSelectedMentionSuggestionIndex]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (event.isDefaultPrevented()) {\n return;\n }\n\n // Allow leaving marks with ArrowLeft\n if (isKey(event, \"ArrowLeft\")) {\n leaveMarkEdge(editor, \"start\");\n }\n\n // Allow leaving marks with ArrowRight\n if (isKey(event, \"ArrowRight\")) {\n leaveMarkEdge(editor, \"end\");\n }\n\n if (mentionDraft && mentionSuggestions?.length) {\n // Select the next mention suggestion on ArrowDown\n if (isKey(event, \"ArrowDown\")) {\n event.preventDefault();\n setNextSelectedMentionSuggestionIndex();\n }\n\n // Select the previous mention suggestion on ArrowUp\n if (isKey(event, \"ArrowUp\")) {\n event.preventDefault();\n setPreviousSelectedMentionSuggestionIndex();\n }\n\n // Create a mention on Enter/Tab\n if (isKey(event, \"Enter\") || isKey(event, \"Tab\")) {\n event.preventDefault();\n\n const userId = mentionSuggestions?.[selectedMentionSuggestionIndex];\n createMention(userId);\n }\n\n // Close the suggestions on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n setMentionDraft(undefined);\n setSelectedMentionSuggestionIndex(0);\n }\n } else {\n if (hasFloatingToolbarRange) {\n // Close the floating toolbar on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n setHasFloatingToolbarRange(false);\n }\n }\n\n // Blur the editor on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n blur();\n }\n\n // Submit the editor on Enter\n if (isKey(event, \"Enter\", { shift: false })) {\n // Even if submitting is not possible, don't do anything else on Enter. (e.g. creating a new line)\n event.preventDefault();\n\n if (canSubmit) {\n submit();\n }\n }\n\n // Create a new line on Shift + Enter\n if (isKey(event, \"Enter\", { shift: true })) {\n event.preventDefault();\n editor.insertBreak();\n }\n\n // Toggle bold on Command/Control + B\n if (isKey(event, \"b\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"bold\");\n }\n\n // Toggle italic on Command/Control + I\n if (isKey(event, \"i\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"italic\");\n }\n\n // Toggle strikethrough on Command/Control + Shift + S\n if (isKey(event, \"s\", { mod: true, shift: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"strikethrough\");\n }\n\n // Toggle code on Command/Control + E\n if (isKey(event, \"e\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"code\");\n }\n }\n },\n [\n onKeyDown,\n mentionDraft,\n mentionSuggestions,\n hasFloatingToolbarRange,\n editor,\n setNextSelectedMentionSuggestionIndex,\n setPreviousSelectedMentionSuggestionIndex,\n selectedMentionSuggestionIndex,\n createMention,\n setSelectedMentionSuggestionIndex,\n blur,\n canSubmit,\n submit,\n ]\n );\n\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus, setFocused]\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(false);\n }\n },\n [onBlur, setFocused]\n );\n\n const selectedMentionSuggestionUserId = useMemo(\n () => mentionSuggestions?.[selectedMentionSuggestionIndex],\n [selectedMentionSuggestionIndex, mentionSuggestions]\n );\n const setSelectedMentionSuggestionUserId = useCallback(\n (userId: string) => {\n const index = mentionSuggestions?.indexOf(userId);\n\n if (index !== undefined && index >= 0) {\n setSelectedMentionSuggestionIndex(index);\n }\n },\n [setSelectedMentionSuggestionIndex, mentionSuggestions]\n );\n\n const additionalProps: AriaAttributes = useMemo(\n () =>\n mentionDraft\n ? {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": true,\n \"aria-controls\": suggestionsListId,\n \"aria-activedescendant\": suggestionsListItemId(\n selectedMentionSuggestionUserId\n ),\n }\n : hasFloatingToolbarRange\n ? {\n \"aria-haspopup\": true,\n \"aria-controls\": floatingToolbarId,\n }\n : {},\n [\n mentionDraft,\n suggestionsListId,\n suggestionsListItemId,\n selectedMentionSuggestionUserId,\n hasFloatingToolbarRange,\n floatingToolbarId,\n ]\n );\n\n useImperativeHandle(forwardedRef, () => {\n return ReactEditor.toDOMNode(editor, editor) as HTMLDivElement;\n }, [editor]);\n\n // Manually focus the editor when `autoFocus` is true\n useLayoutEffect(() => {\n if (autoFocus) {\n focus();\n }\n }, [autoFocus, editor, focus]);\n\n // Manually add a selection in the editor if the selection\n // is still empty after being focused\n useLayoutEffect(() => {\n if (isFocused && editor.selection === null) {\n select();\n }\n }, [editor, select, isFocused]);\n\n return (\n <Slate\n editor={editor}\n initialValue={initialEditorValue}\n onChange={handleChange}\n >\n <Editable\n dir={dir}\n enterKeyHint={mentionDraft ? \"enter\" : \"send\"}\n autoCapitalize=\"sentences\"\n aria-label=\"Composer editor\"\n data-focused={isFocused || undefined}\n data-disabled={isDisabled || undefined}\n {...additionalProps}\n {...props}\n readOnly={isDisabled}\n disabled={isDisabled}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderElement={renderElement}\n renderLeaf={ComposerEditorLeaf}\n renderPlaceholder={ComposerEditorPlaceholder}\n />\n {hasResolveMentionSuggestions && (\n <ComposerEditorMentionSuggestionsWrapper\n dir={dir}\n mentionDraft={mentionDraft}\n setMentionDraft={setMentionDraft}\n selectedUserId={selectedMentionSuggestionUserId}\n setSelectedUserId={setSelectedMentionSuggestionUserId}\n userIds={mentionSuggestions}\n id={suggestionsListId}\n itemId={suggestionsListItemId}\n onItemSelect={createMention}\n MentionSuggestions={MentionSuggestions}\n />\n )}\n {FloatingToolbar && (\n <ComposerEditorFloatingToolbarWrapper\n dir={dir}\n id={floatingToolbarId}\n hasFloatingToolbarRange={hasFloatingToolbarRange}\n setHasFloatingToolbarRange={setHasFloatingToolbarRange}\n FloatingToolbar={FloatingToolbar}\n />\n )}\n </Slate>\n );\n }\n);\n\nconst MAX_ATTACHMENTS = 10;\nconst MAX_ATTACHMENT_SIZE = 1024 * 1024 * 1024; // 1 GB\n\nfunction prepareAttachment(file: File): CommentLocalAttachment {\n return {\n type: \"localAttachment\",\n status: \"idle\",\n id: createCommentAttachmentId(),\n name: file.name,\n size: file.size,\n mimeType: file.type,\n file,\n };\n}\n\n/**\n * Surrounds the composer's content and handles submissions.\n *\n * @example\n * <Composer.Form onComposerSubmit={({ body }) => {}}>\n *\t <Composer.Editor />\n * <Composer.Submit />\n * </Composer.Form>\n */\nconst ComposerForm = forwardRef<HTMLFormElement, ComposerFormProps>(\n (\n {\n children,\n onSubmit,\n onComposerSubmit,\n defaultAttachments = [],\n pasteFilesAsAttachments,\n preventUnsavedChanges = true,\n disabled,\n asChild,\n roomId: _roomId,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"form\";\n const [isEmpty, setEmpty] = useState(true);\n const [isSubmitting, setSubmitting] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const room = useRoomOrNull();\n\n const roomId = _roomId !== undefined ? _roomId : room?.id;\n if (roomId === undefined) {\n throw new Error(\"Composer.Form must be a descendant of RoomProvider.\");\n }\n\n // Later: Offer as Composer.Form props: { maxAttachments: number; maxAttachmentSize: number; supportedAttachmentMimeTypes: string[]; }\n const maxAttachments = MAX_ATTACHMENTS;\n const maxAttachmentSize = MAX_ATTACHMENT_SIZE;\n\n const {\n attachments,\n isUploadingAttachments,\n addAttachments,\n removeAttachment,\n clearAttachments,\n } = useComposerAttachmentsManager(defaultAttachments, {\n maxFileSize: maxAttachmentSize,\n roomId,\n });\n const numberOfAttachments = attachments.length;\n const hasMaxAttachments = numberOfAttachments >= maxAttachments;\n\n const isDisabled = useMemo(() => {\n return isSubmitting || disabled === true;\n }, [isSubmitting, disabled]);\n const canSubmit = useMemo(() => {\n return !isEmpty && !isUploadingAttachments;\n }, [isEmpty, isUploadingAttachments]);\n const [marks, setMarks] = useState<ComposerBodyMarks>(getMarks);\n\n const ref = useRef<HTMLFormElement>(null);\n const mergedRefs = useRefs(forwardedRef, ref);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const syncSource = useSyncSource();\n\n // Mark the composer as a pending update when it has unsubmitted (draft)\n // text or attachments\n const isPending = !preventUnsavedChanges\n ? false\n : !isEmpty || isUploadingAttachments || attachments.length > 0;\n\n useEffect(() => {\n syncSource?.setSyncStatus(\n isPending ? \"has-local-changes\" : \"synchronized\"\n );\n }, [syncSource, isPending]);\n\n const createAttachments = useCallback(\n (files: File[]) => {\n if (!files.length) {\n return;\n }\n\n const numberOfAcceptedFiles = Math.max(\n 0,\n maxAttachments - numberOfAttachments\n );\n\n files.splice(numberOfAcceptedFiles);\n\n const attachments = files.map((file) => prepareAttachment(file));\n\n addAttachments(attachments);\n },\n [addAttachments, maxAttachments, numberOfAttachments]\n );\n\n const createAttachmentsRef = useRef(createAttachments);\n\n useEffect(() => {\n createAttachmentsRef.current = createAttachments;\n }, [createAttachments]);\n\n const stableCreateAttachments = useCallback((files: File[]) => {\n createAttachmentsRef.current(files);\n }, []);\n\n const editor = useInitial(() =>\n createComposerEditor({\n createAttachments: stableCreateAttachments,\n pasteFilesAsAttachments,\n })\n );\n const onEditorChange = useInitial(makeEventSource) as EventSource<void>;\n\n const validate = useCallback(\n (value: SlateElement[]) => {\n setEmpty(isEditorEmpty(editor, value));\n },\n [editor]\n );\n\n const submit = useCallback(() => {\n if (!canSubmit) {\n return;\n }\n\n // We need to wait for the next frame in some cases like when composing diacritics,\n // we want any native handling to be done first while still being handled on `keydown`.\n requestAnimationFrame(() => {\n if (ref.current) {\n requestSubmit(ref.current);\n }\n });\n }, [canSubmit]);\n\n const clear = useCallback(() => {\n SlateTransforms.delete(editor, {\n at: {\n anchor: SlateEditor.start(editor, []),\n focus: SlateEditor.end(editor, []),\n },\n });\n }, [editor]);\n\n const select = useCallback(() => {\n SlateTransforms.select(editor, SlateEditor.end(editor, []));\n }, [editor]);\n\n const focus = useCallback(\n (resetSelection = true) => {\n if (!ReactEditor.isFocused(editor)) {\n SlateTransforms.select(\n editor,\n resetSelection || !editor.selection\n ? SlateEditor.end(editor, [])\n : editor.selection\n );\n ReactEditor.focus(editor);\n }\n },\n [editor]\n );\n\n const blur = useCallback(() => {\n ReactEditor.blur(editor);\n }, [editor]);\n\n const createMention = useCallback(() => {\n if (disabled) {\n return;\n }\n\n focus();\n insertMentionCharacter(editor);\n }, [disabled, editor, focus]);\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n\n focus(false);\n insertSlateText(editor, text);\n },\n [disabled, editor, focus]\n );\n\n const attachFiles = useCallback(() => {\n if (disabled) {\n return;\n }\n\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n }, [disabled]);\n\n const handleAttachmentsInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n return;\n }\n\n if (event.target.files) {\n createAttachments(Array.from(event.target.files));\n\n // Reset the input value to allow selecting the same file(s) again\n event.target.value = \"\";\n }\n },\n [createAttachments, disabled]\n );\n\n const onSubmitEnd = useCallback(() => {\n clear();\n blur();\n clearAttachments();\n setSubmitting(false);\n }, [blur, clear, clearAttachments]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n if (disabled) {\n return;\n }\n\n // In some situations (e.g. pressing Enter while composing diacritics), it's possible\n // for the form to be submitted as empty even though we already checked whether the\n // editor was empty when handling the key press.\n const isEmpty = isEditorEmpty(editor, editor.children);\n\n // We even prevent the user's `onSubmit` handler from being called if the editor is empty.\n if (isEmpty) {\n event.preventDefault();\n\n return;\n }\n\n onSubmit?.(event);\n\n if (!onComposerSubmit || event.isDefaultPrevented()) {\n event.preventDefault();\n\n return;\n }\n\n const body = composerBodyToCommentBody(\n editor.children as ComposerBodyData\n );\n // Only non-local attachments are included to be submitted.\n const commentAttachments: CommentAttachment[] = attachments\n .filter(\n (attachment) =>\n attachment.type === \"attachment\" ||\n (attachment.type === \"localAttachment\" &&\n attachment.status === \"uploaded\")\n )\n .map((attachment) => {\n return {\n id: attachment.id,\n type: \"attachment\",\n mimeType: attachment.mimeType,\n size: attachment.size,\n name: attachment.name,\n };\n });\n\n const promise = onComposerSubmit(\n { body, attachments: commentAttachments },\n event\n );\n\n event.preventDefault();\n\n if (promise) {\n setSubmitting(true);\n promise.then(onSubmitEnd);\n } else {\n onSubmitEnd();\n }\n },\n [disabled, editor, attachments, onComposerSubmit, onSubmit, onSubmitEnd]\n );\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const toggleMark = useCallback(\n (mark: ComposerBodyMark) => {\n toggleEditorMark(editor, mark);\n },\n [editor]\n );\n\n useObservable(onEditorChange, () => {\n setMarks(getMarks(editor));\n });\n\n return (\n <ComposerEditorContext.Provider\n value={{\n editor,\n validate,\n setFocused,\n onEditorChange,\n roomId,\n }}\n >\n <ComposerAttachmentsContext.Provider\n value={{\n createAttachments,\n isUploadingAttachments,\n hasMaxAttachments,\n maxAttachments,\n maxAttachmentSize,\n }}\n >\n <ComposerContext.Provider\n value={{\n isDisabled,\n isFocused,\n isEmpty,\n canSubmit,\n submit,\n clear,\n select,\n focus,\n blur,\n createMention,\n insertText,\n attachments,\n attachFiles,\n removeAttachment,\n toggleMark,\n marks,\n }}\n >\n <Component {...props} onSubmit={handleSubmit} ref={mergedRefs}>\n <input\n type=\"file\"\n multiple\n ref={fileInputRef}\n onChange={handleAttachmentsInputChange}\n onClick={stopPropagation}\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <Slottable>{children}</Slottable>\n </Component>\n </ComposerContext.Provider>\n </ComposerAttachmentsContext.Provider>\n </ComposerEditorContext.Provider>\n );\n }\n);\n\n/**\n * A button to submit the composer.\n *\n * @example\n * <Composer.Submit>Send</Composer.Submit>\n */\nconst ComposerSubmit = forwardRef<HTMLButtonElement, ComposerSubmitProps>(\n ({ children, disabled, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"button\";\n const { canSubmit, isDisabled: isComposerDisabled } = useComposer();\n const isDisabled = isComposerDisabled || disabled || !canSubmit;\n\n return (\n <Component\n type=\"submit\"\n {...props}\n ref={forwardedRef}\n disabled={isDisabled}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * A button which opens a file picker to create attachments.\n *\n * @example\n * <Composer.AttachFiles>Attach files</Composer.AttachFiles>\n */\nconst ComposerAttachFiles = forwardRef<\n HTMLButtonElement,\n ComposerAttachFilesProps\n>(({ children, onClick, disabled, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"button\";\n const { hasMaxAttachments } = useComposerAttachmentsContext();\n const { isDisabled: isComposerDisabled, attachFiles } = useComposer();\n const isDisabled = isComposerDisabled || hasMaxAttachments || disabled;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n if (!event.isDefaultPrevented()) {\n attachFiles();\n }\n },\n [attachFiles, onClick]\n );\n\n return (\n <Component\n type=\"button\"\n {...props}\n onClick={handleClick}\n ref={forwardedRef}\n disabled={isDisabled}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * A drop area which accepts files to create attachments.\n *\n * @example\n * <Composer.AttachmentsDropArea>\n * Drop files here\n * </Composer.AttachmentsDropArea>\n */\nconst ComposerAttachmentsDropArea = forwardRef<\n HTMLDivElement,\n ComposerAttachmentsDropAreaProps\n>(\n (\n {\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n disabled,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"div\";\n const { isDisabled: isComposerDisabled } = useComposer();\n const isDisabled = isComposerDisabled || disabled;\n const [, dropAreaProps] = useComposerAttachmentsDropArea({\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n disabled: isDisabled,\n });\n\n return (\n <Component\n {...dropAreaProps}\n data-disabled={isDisabled ? \"\" : undefined}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n);\n\n/**\n * A toggle button which toggles a specific text mark.\n *\n * @example\n * <Composer.MarkToggle mark=\"bold\">\n * Bold\n * </Composer.MarkToggle>\n */\nconst ComposerMarkToggle = forwardRef<\n HTMLButtonElement,\n ComposerMarkToggleProps\n>(\n (\n { children, mark, onValueChange, onClick, asChild, ...props },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"button\";\n const { marks, toggleMark } = useComposer();\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n if (!event.isDefaultPrevented()) {\n toggleMark(mark);\n onValueChange?.(mark);\n }\n },\n [mark, onClick, onValueChange, toggleMark]\n );\n\n return (\n <TogglePrimitive.Root\n asChild\n pressed={marks[mark]}\n onClick={handleClick}\n {...props}\n >\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n </TogglePrimitive.Root>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n ComposerAttachFiles.displayName = COMPOSER_ATTACH_FILES_NAME;\n ComposerAttachmentsDropArea.displayName = COMPOSER_ATTACHMENTS_DROP_AREA_NAME;\n ComposerEditor.displayName = COMPOSER_EDITOR_NAME;\n ComposerFloatingToolbar.displayName = COMPOSER_FLOATING_TOOLBAR_NAME;\n ComposerForm.displayName = COMPOSER_FORM_NAME;\n ComposerMention.displayName = COMPOSER_MENTION_NAME;\n ComposerLink.displayName = COMPOSER_LINK_NAME;\n ComposerSubmit.displayName = COMPOSER_SUBMIT_NAME;\n ComposerSuggestions.displayName = COMPOSER_SUGGESTIONS_NAME;\n ComposerSuggestionsList.displayName = COMPOSER_SUGGESTIONS_LIST_NAME;\n ComposerSuggestionsListItem.displayName = COMPOSER_SUGGESTIONS_LIST_ITEM_NAME;\n ComposerMarkToggle.displayName = COMPOSER_MARK_TOGGLE_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Composer.*\nexport {\n ComposerAttachFiles as AttachFiles,\n ComposerAttachmentsDropArea as AttachmentsDropArea,\n ComposerEditor as Editor,\n ComposerFloatingToolbar as FloatingToolbar,\n ComposerForm as Form,\n ComposerLink as Link,\n ComposerMarkToggle as MarkToggle,\n ComposerMention as Mention,\n ComposerSubmit as Submit,\n ComposerSuggestions as Suggestions,\n ComposerSuggestionsList as SuggestionsList,\n ComposerSuggestionsListItem as SuggestionsListItem,\n};\n"],"names":["withNormalize","withMentions","withCustomLinks","withAutoLinks","withAutoFormatting","withEmptyClearFormatting","withPaste","withHistory","withReact","createEditor","useSelected","jsxs","jsx","useMemo","toAbsoluteUrl","useSlateStatic","useComposerEditorContext","useComposer","useLiveblocksUIConfig","useContentZIndex","useFloatingWithOptions","useObservable","getMentionDraftAtSelection","useLayoutEffect","getDOMRange","Persist","ComposerSuggestionsContext","Portal","useState","SlateRange","ComposerFloatingToolbarContext","forwardRef","usePersist","useRef","useComposerFloatingToolbarContext","useRefs","getSideAndAlignFromFloatingPlacement","Slot","useAnimationPersist","useCallback","useComposerSuggestionsContext","useEffect","MENTION_CHARACTER","useClientOrNull","useInitial","commentBodyToComposerBody","useResolveMentionSuggestions","useMentionSuggestions","useIndex","useId","props","SlateTransforms","insertMention","isKey","leaveMarkEdge","toggleEditorMark","useImperativeHandle","ReactEditor","Slate","Editable","createCommentAttachmentId","isEmpty","useRoomOrNull","useComposerAttachmentsManager","marks","getMarks","useSyncSource","attachments","makeEventSource","isEditorEmpty","requestSubmit","SlateEditor","insertMentionCharacter","insertSlateText","composerBodyToCommentBody","ComposerEditorContext","ComposerAttachmentsContext","ComposerContext","Slottable","useComposerAttachmentsContext","useComposerAttachmentsDropArea","TogglePrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/primitives/Composer/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n type CommentAttachment,\n type CommentBody,\n type CommentLocalAttachment,\n createCommentAttachmentId,\n type EventSource,\n makeEventSource,\n} from \"@liveblocks/core\";\nimport {\n useClientOrNull,\n useMentionSuggestions,\n useResolveMentionSuggestions,\n useRoomOrNull,\n useSyncSource,\n} from \"@liveblocks/react/_private\";\nimport { Slot, Slottable } from \"@radix-ui/react-slot\";\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\nimport type {\n AriaAttributes,\n ChangeEvent,\n FocusEvent,\n FormEvent,\n KeyboardEvent,\n MouseEvent,\n PointerEvent,\n SyntheticEvent,\n} from \"react\";\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type {\n Descendant as SlateDescendant,\n Element as SlateElement,\n} from \"slate\";\nimport {\n createEditor,\n Editor as SlateEditor,\n insertText as insertSlateText,\n Range as SlateRange,\n Transforms as SlateTransforms,\n} from \"slate\";\nimport { withHistory } from \"slate-history\";\nimport type {\n RenderElementProps,\n RenderElementSpecificProps,\n RenderLeafProps,\n RenderPlaceholderProps,\n} from \"slate-react\";\nimport {\n Editable,\n ReactEditor,\n Slate,\n useSelected,\n useSlateStatic,\n withReact,\n} from \"slate-react\";\n\nimport { useLiveblocksUIConfig } from \"../../config\";\nimport { withAutoFormatting } from \"../../slate/plugins/auto-formatting\";\nimport { withAutoLinks } from \"../../slate/plugins/auto-links\";\nimport { withCustomLinks } from \"../../slate/plugins/custom-links\";\nimport { withEmptyClearFormatting } from \"../../slate/plugins/empty-clear-formatting\";\nimport type { MentionDraft } from \"../../slate/plugins/mentions\";\nimport {\n getMentionDraftAtSelection,\n insertMention,\n insertMentionCharacter,\n MENTION_CHARACTER,\n withMentions,\n} from \"../../slate/plugins/mentions\";\nimport { withNormalize } from \"../../slate/plugins/normalize\";\nimport { withPaste } from \"../../slate/plugins/paste\";\nimport { getDOMRange } from \"../../slate/utils/get-dom-range\";\nimport { isEmpty as isEditorEmpty } from \"../../slate/utils/is-empty\";\nimport {\n getMarks,\n leaveMarkEdge,\n toggleMark as toggleEditorMark,\n} from \"../../slate/utils/marks\";\nimport type {\n ComposerBody as ComposerBodyData,\n ComposerBodyAutoLink,\n ComposerBodyCustomLink,\n ComposerBodyMark,\n ComposerBodyMarks,\n ComposerBodyMention,\n} from \"../../types\";\nimport { isKey } from \"../../utils/is-key\";\nimport { Persist, useAnimationPersist, usePersist } from \"../../utils/Persist\";\nimport { Portal } from \"../../utils/Portal\";\nimport { requestSubmit } from \"../../utils/request-submit\";\nimport { useIndex } from \"../../utils/use-index\";\nimport { useInitial } from \"../../utils/use-initial\";\nimport { useObservable } from \"../../utils/use-observable\";\nimport { useRefs } from \"../../utils/use-refs\";\nimport { toAbsoluteUrl } from \"../Comment/utils\";\nimport {\n ComposerAttachmentsContext,\n ComposerContext,\n ComposerEditorContext,\n ComposerFloatingToolbarContext,\n ComposerSuggestionsContext,\n useComposer,\n useComposerAttachmentsContext,\n useComposerEditorContext,\n useComposerFloatingToolbarContext,\n useComposerSuggestionsContext,\n} from \"./contexts\";\nimport type {\n ComposerAttachFilesProps,\n ComposerAttachmentsDropAreaProps,\n ComposerEditorComponents,\n ComposerEditorElementProps,\n ComposerEditorFloatingToolbarWrapperProps,\n ComposerEditorLinkWrapperProps,\n ComposerEditorMentionSuggestionsWrapperProps,\n ComposerEditorMentionWrapperProps,\n ComposerEditorProps,\n ComposerFloatingToolbarProps,\n ComposerFormProps,\n ComposerLinkProps,\n ComposerMarkToggleProps,\n ComposerMentionProps,\n ComposerSubmitProps,\n ComposerSuggestionsListItemProps,\n ComposerSuggestionsListProps,\n ComposerSuggestionsProps,\n FloatingPosition,\n} from \"./types\";\nimport {\n commentBodyToComposerBody,\n composerBodyToCommentBody,\n getSideAndAlignFromFloatingPlacement,\n useComposerAttachmentsDropArea,\n useComposerAttachmentsManager,\n useContentZIndex,\n useFloatingWithOptions,\n} from \"./utils\";\n\nconst MENTION_SUGGESTIONS_POSITION: FloatingPosition = \"top\";\n\nconst FLOATING_TOOLBAR_POSITION: FloatingPosition = \"top\";\n\nconst COMPOSER_MENTION_NAME = \"ComposerMention\";\nconst COMPOSER_LINK_NAME = \"ComposerLink\";\nconst COMPOSER_FLOATING_TOOLBAR_NAME = \"ComposerFloatingToolbar\";\nconst COMPOSER_SUGGESTIONS_NAME = \"ComposerSuggestions\";\nconst COMPOSER_SUGGESTIONS_LIST_NAME = \"ComposerSuggestionsList\";\nconst COMPOSER_SUGGESTIONS_LIST_ITEM_NAME = \"ComposerSuggestionsListItem\";\nconst COMPOSER_SUBMIT_NAME = \"ComposerSubmit\";\nconst COMPOSER_EDITOR_NAME = \"ComposerEditor\";\nconst COMPOSER_ATTACH_FILES_NAME = \"ComposerAttachFiles\";\nconst COMPOSER_ATTACHMENTS_DROP_AREA_NAME = \"ComposerAttachmentsDropArea\";\nconst COMPOSER_MARK_TOGGLE_NAME = \"ComposerMarkToggle\";\nconst COMPOSER_FORM_NAME = \"ComposerForm\";\n\nconst emptyCommentBody: CommentBody = {\n version: 1,\n content: [{ type: \"paragraph\", children: [{ text: \"\" }] }],\n};\n\nfunction createComposerEditor({\n createAttachments,\n pasteFilesAsAttachments,\n}: {\n createAttachments: (files: File[]) => void;\n pasteFilesAsAttachments?: boolean;\n}) {\n return withNormalize(\n withMentions(\n withCustomLinks(\n withAutoLinks(\n withAutoFormatting(\n withEmptyClearFormatting(\n withPaste(withHistory(withReact(createEditor())), {\n createAttachments,\n pasteFilesAsAttachments,\n })\n )\n )\n )\n )\n )\n );\n}\n\nfunction ComposerEditorMentionWrapper({\n Mention,\n attributes,\n children,\n element,\n}: ComposerEditorMentionWrapperProps) {\n const isSelected = useSelected();\n\n return (\n <span {...attributes}>\n {element.id ? (\n <Mention userId={element.id} isSelected={isSelected} />\n ) : null}\n {children}\n </span>\n );\n}\n\nfunction ComposerEditorLinkWrapper({\n Link,\n attributes,\n element,\n children,\n}: ComposerEditorLinkWrapperProps) {\n const href = useMemo(\n () => toAbsoluteUrl(element.url) ?? element.url,\n [element.url]\n );\n\n return (\n <span {...attributes}>\n <Link href={href}>{children}</Link>\n </span>\n );\n}\n\nfunction ComposerEditorMentionSuggestionsWrapper({\n id,\n itemId,\n userIds,\n selectedUserId,\n setSelectedUserId,\n mentionDraft,\n setMentionDraft,\n onItemSelect,\n position = MENTION_SUGGESTIONS_POSITION,\n dir,\n MentionSuggestions,\n}: ComposerEditorMentionSuggestionsWrapperProps) {\n const editor = useSlateStatic();\n const { onEditorChange } = useComposerEditorContext();\n const { isFocused } = useComposer();\n const { portalContainer } = useLiveblocksUIConfig();\n const [contentRef, contentZIndex] = useContentZIndex();\n const isOpen =\n isFocused && mentionDraft?.range !== undefined && userIds !== undefined;\n const {\n refs: { setReference, setFloating },\n strategy,\n isPositioned,\n placement,\n x,\n y,\n } = useFloatingWithOptions({\n position,\n dir,\n alignment: \"start\",\n open: isOpen,\n });\n\n useObservable(onEditorChange, () => {\n setMentionDraft(getMentionDraftAtSelection(editor));\n });\n\n useLayoutEffect(() => {\n if (!mentionDraft) {\n setReference(null);\n\n return;\n }\n\n const domRange = getDOMRange(editor, mentionDraft.range);\n setReference(domRange ?? null);\n }, [setReference, editor, mentionDraft]);\n\n return (\n <Persist>\n {isOpen ? (\n <ComposerSuggestionsContext.Provider\n value={{\n id,\n itemId,\n selectedValue: selectedUserId,\n setSelectedValue: setSelectedUserId,\n onItemSelect,\n placement,\n dir,\n ref: contentRef,\n }}\n >\n <Portal\n ref={setFloating}\n container={portalContainer}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n }}\n >\n <MentionSuggestions\n userIds={userIds}\n selectedUserId={selectedUserId}\n />\n </Portal>\n </ComposerSuggestionsContext.Provider>\n ) : null}\n </Persist>\n );\n}\n\nfunction ComposerEditorFloatingToolbarWrapper({\n id,\n position = FLOATING_TOOLBAR_POSITION,\n dir,\n FloatingToolbar,\n hasFloatingToolbarRange,\n setHasFloatingToolbarRange,\n}: ComposerEditorFloatingToolbarWrapperProps) {\n const editor = useSlateStatic();\n const { onEditorChange } = useComposerEditorContext();\n const { isFocused } = useComposer();\n const { portalContainer } = useLiveblocksUIConfig();\n const [contentRef, contentZIndex] = useContentZIndex();\n const [isPointerDown, setPointerDown] = useState(false);\n const isOpen = isFocused && !isPointerDown && hasFloatingToolbarRange;\n const {\n refs: { setReference, setFloating },\n strategy,\n isPositioned,\n placement,\n x,\n y,\n } = useFloatingWithOptions({\n type: \"range\",\n position,\n dir,\n alignment: \"center\",\n open: isOpen,\n });\n\n useLayoutEffect(() => {\n if (!isFocused) {\n return;\n }\n\n const handlePointerDown = () => setPointerDown(true);\n const handlePointerUp = () => setPointerDown(false);\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n document.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n document.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, [isFocused]);\n\n useObservable(onEditorChange, () => {\n // Detach from previous selection range (if any) to avoid sudden jumps\n setReference(null);\n\n // Then, wait for the next render to ensure the selection is updated\n requestAnimationFrame(() => {\n const domSelection = window.getSelection();\n\n // Finally, show the toolbar if there's a selection range\n if (\n !editor.selection ||\n SlateRange.isCollapsed(editor.selection) ||\n !domSelection ||\n !domSelection.rangeCount\n ) {\n setHasFloatingToolbarRange(false);\n setReference(null);\n } else {\n setHasFloatingToolbarRange(true);\n\n const domRange = domSelection.getRangeAt(0);\n setReference(domRange);\n }\n });\n });\n\n return (\n <Persist>\n {isOpen ? (\n <ComposerFloatingToolbarContext.Provider\n value={{\n id,\n placement,\n dir,\n ref: contentRef,\n }}\n >\n <Portal\n ref={setFloating}\n container={portalContainer}\n style={{\n position: strategy,\n top: 0,\n left: 0,\n transform: isPositioned\n ? `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`\n : \"translate3d(0, -200%, 0)\",\n minWidth: \"max-content\",\n zIndex: contentZIndex,\n }}\n >\n <FloatingToolbar />\n </Portal>\n </ComposerFloatingToolbarContext.Provider>\n ) : null}\n </Persist>\n );\n}\n\n/**\n * Displays a floating toolbar attached to the selection within `Composer.Editor`.\n *\n * @example\n * <Composer.FloatingToolbar>\n * <Composer.MarkToggle mark=\"bold\">Bold</Composer.MarkToggle>\n * <Composer.MarkToggle mark=\"italic\">Italic</Composer.MarkToggle>\n * </Composer.FloatingToolbar>\n */\nconst ComposerFloatingToolbar = forwardRef<\n HTMLDivElement,\n ComposerFloatingToolbarProps\n>(({ children, onPointerDown, style, asChild, ...props }, forwardedRef) => {\n const [isPresent] = usePersist();\n const ref = useRef<HTMLDivElement>(null);\n const {\n id,\n ref: contentRef,\n placement,\n dir,\n } = useComposerFloatingToolbarContext(COMPOSER_FLOATING_TOOLBAR_NAME);\n const mergedRefs = useRefs(forwardedRef, contentRef, ref);\n const [side, align] = useMemo(\n () => getSideAndAlignFromFloatingPlacement(placement),\n [placement]\n );\n const Component = asChild ? Slot : \"div\";\n useAnimationPersist(ref);\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n onPointerDown?.(event);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onPointerDown]\n );\n\n return (\n <Component\n dir={dir}\n role=\"toolbar\"\n id={id}\n aria-label=\"Floating toolbar\"\n {...props}\n onPointerDown={handlePointerDown}\n data-state={isPresent ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n maxWidth: \"var(--lb-composer-floating-available-width)\",\n overflowX: \"auto\",\n ...style,\n }}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n});\n\nfunction ComposerEditorElement({\n Mention,\n Link,\n ...props\n}: ComposerEditorElementProps) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { attributes, children, element } = props;\n\n switch (element.type) {\n case \"mention\":\n return (\n <ComposerEditorMentionWrapper\n Mention={Mention}\n {...(props as RenderElementSpecificProps<ComposerBodyMention>)}\n />\n );\n case \"auto-link\":\n case \"custom-link\":\n return (\n <ComposerEditorLinkWrapper\n Link={Link}\n {...(props as RenderElementSpecificProps<\n ComposerBodyAutoLink | ComposerBodyCustomLink\n >)}\n />\n );\n case \"paragraph\":\n return (\n <p {...attributes} style={{ position: \"relative\" }}>\n {children}\n </p>\n );\n default:\n return null;\n }\n}\n\n// <code><s><em><strong>text</strong></s></em></code>\nfunction ComposerEditorLeaf({ attributes, children, leaf }: RenderLeafProps) {\n if (leaf.bold) {\n children = <strong>{children}</strong>;\n }\n\n if (leaf.italic) {\n children = <em>{children}</em>;\n }\n\n if (leaf.strikethrough) {\n children = <s>{children}</s>;\n }\n\n if (leaf.code) {\n children = <code>{children}</code>;\n }\n\n return <span {...attributes}>{children}</span>;\n}\n\nfunction ComposerEditorPlaceholder({\n attributes,\n children,\n}: RenderPlaceholderProps) {\n const { opacity: _opacity, ...style } = attributes.style;\n\n return (\n <span {...attributes} style={style} data-placeholder=\"\">\n {children}\n </span>\n );\n}\n\n/**\n * Displays mentions within `Composer.Editor`.\n *\n * @example\n * <Composer.Mention>@{userId}</Composer.Mention>\n */\nconst ComposerMention = forwardRef<HTMLSpanElement, ComposerMentionProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"span\";\n const isSelected = useSelected();\n\n return (\n <Component\n data-selected={isSelected || undefined}\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Displays links within `Composer.Editor`.\n *\n * @example\n * <Composer.Link href={href}>{children}</Composer.Link>\n */\nconst ComposerLink = forwardRef<HTMLAnchorElement, ComposerLinkProps>(\n ({ children, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"a\";\n\n return (\n <Component\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * Contains suggestions within `Composer.Editor`.\n */\nconst ComposerSuggestions = forwardRef<\n HTMLDivElement,\n ComposerSuggestionsProps\n>(({ children, style, asChild, ...props }, forwardedRef) => {\n const [isPresent] = usePersist();\n const ref = useRef<HTMLDivElement>(null);\n const {\n ref: contentRef,\n placement,\n dir,\n } = useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_NAME);\n const mergedRefs = useRefs(forwardedRef, contentRef, ref);\n const [side, align] = useMemo(\n () => getSideAndAlignFromFloatingPlacement(placement),\n [placement]\n );\n const Component = asChild ? Slot : \"div\";\n useAnimationPersist(ref);\n\n return (\n <Component\n dir={dir}\n {...props}\n data-state={isPresent ? \"open\" : \"closed\"}\n data-side={side}\n data-align={align}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n maxHeight: \"var(--lb-composer-floating-available-height)\",\n overflowY: \"auto\",\n ...style,\n }}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * Displays a list of suggestions within `Composer.Editor`.\n *\n * @example\n * <Composer.SuggestionsList>\n * {userIds.map((userId) => (\n * <Composer.SuggestionsListItem key={userId} value={userId}>\n * @{userId}\n * </Composer.SuggestionsListItem>\n * ))}\n * </Composer.SuggestionsList>\n */\nconst ComposerSuggestionsList = forwardRef<\n HTMLUListElement,\n ComposerSuggestionsListProps\n>(({ children, asChild, ...props }, forwardedRef) => {\n const { id } = useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_NAME);\n const Component = asChild ? Slot : \"ul\";\n\n return (\n <Component\n role=\"listbox\"\n id={id}\n aria-label=\"Suggestions list\"\n {...props}\n ref={forwardedRef}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * Displays a suggestion within `Composer.SuggestionsList`.\n *\n * @example\n * <Composer.SuggestionsListItem key={userId} value={userId}>\n * @{userId}\n * </Composer.SuggestionsListItem>\n */\nconst ComposerSuggestionsListItem = forwardRef<\n HTMLLIElement,\n ComposerSuggestionsListItemProps\n>(\n (\n {\n value,\n children,\n onPointerMove,\n onPointerDown,\n onClick,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const ref = useRef<HTMLLIElement>(null);\n const mergedRefs = useRefs(forwardedRef, ref);\n const { selectedValue, setSelectedValue, itemId, onItemSelect } =\n useComposerSuggestionsContext(COMPOSER_SUGGESTIONS_LIST_ITEM_NAME);\n const Component = asChild ? Slot : \"li\";\n const isSelected = useMemo(\n () => selectedValue === value,\n [selectedValue, value]\n );\n // TODO: Support props.id if provided, it will need to be sent up to Composer.Editor to use it in aria-activedescendant\n const id = useMemo(() => itemId(value), [itemId, value]);\n\n useEffect(() => {\n if (ref?.current && isSelected) {\n ref.current.scrollIntoView({ block: \"nearest\" });\n }\n }, [isSelected]);\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<HTMLLIElement>) => {\n onPointerMove?.(event);\n\n if (!event.isDefaultPrevented()) {\n setSelectedValue(value);\n }\n },\n [onPointerMove, setSelectedValue, value]\n );\n\n const handlePointerDown = useCallback(\n (event: PointerEvent<HTMLLIElement>) => {\n onPointerDown?.(event);\n\n event.preventDefault();\n event.stopPropagation();\n },\n [onPointerDown]\n );\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLLIElement>) => {\n onClick?.(event);\n\n const wasDefaultPrevented = event.isDefaultPrevented();\n\n event.preventDefault();\n event.stopPropagation();\n\n if (!wasDefaultPrevented) {\n onItemSelect(value);\n }\n },\n [onClick, onItemSelect, value]\n );\n\n return (\n <Component\n role=\"option\"\n id={id}\n data-selected={isSelected || undefined}\n aria-selected={isSelected || undefined}\n onPointerMove={handlePointerMove}\n onPointerDown={handlePointerDown}\n onClick={handleClick}\n {...props}\n ref={mergedRefs}\n >\n {children}\n </Component>\n );\n }\n);\n\nconst defaultEditorComponents: ComposerEditorComponents = {\n Link: ({ href, children }) => {\n return <ComposerLink href={href}>{children}</ComposerLink>;\n },\n Mention: ({ userId }) => {\n return (\n <ComposerMention>\n {MENTION_CHARACTER}\n {userId}\n </ComposerMention>\n );\n },\n MentionSuggestions: ({ userIds }) => {\n return userIds.length > 0 ? (\n <ComposerSuggestions>\n <ComposerSuggestionsList>\n {userIds.map((userId) => (\n <ComposerSuggestionsListItem key={userId} value={userId}>\n {userId}\n </ComposerSuggestionsListItem>\n ))}\n </ComposerSuggestionsList>\n </ComposerSuggestions>\n ) : null;\n },\n};\n\n/**\n * Displays the composer's editor.\n *\n * @example\n * <Composer.Editor placeholder=\"Write a comment…\" />\n */\nconst ComposerEditor = forwardRef<HTMLDivElement, ComposerEditorProps>(\n (\n {\n defaultValue,\n onKeyDown,\n onFocus,\n onBlur,\n disabled,\n autoFocus,\n components,\n dir,\n ...props\n },\n forwardedRef\n ) => {\n const client = useClientOrNull();\n const { editor, validate, setFocused, onEditorChange, roomId } =\n useComposerEditorContext();\n const {\n submit,\n focus,\n blur,\n select,\n canSubmit,\n isDisabled: isComposerDisabled,\n isFocused,\n } = useComposer();\n const isDisabled = isComposerDisabled || disabled;\n const initialBody = useInitial(defaultValue ?? emptyCommentBody);\n const initialEditorValue = useMemo(() => {\n return commentBodyToComposerBody(initialBody);\n }, [initialBody]);\n const { Link, Mention, MentionSuggestions, FloatingToolbar } = useMemo(\n () => ({ ...defaultEditorComponents, ...components }),\n [components]\n );\n\n const [hasFloatingToolbarRange, setHasFloatingToolbarRange] =\n useState(false);\n // If used with LiveblocksProvider but without resolveMentionSuggestions,\n // we can skip the mention suggestions logic entirely\n const resolveMentionSuggestions = useResolveMentionSuggestions();\n const hasResolveMentionSuggestions = client\n ? resolveMentionSuggestions\n : true;\n const [mentionDraft, setMentionDraft] = useState<MentionDraft>();\n const mentionSuggestions = useMentionSuggestions(\n roomId,\n mentionDraft?.text\n );\n const [\n selectedMentionSuggestionIndex,\n setPreviousSelectedMentionSuggestionIndex,\n setNextSelectedMentionSuggestionIndex,\n setSelectedMentionSuggestionIndex,\n ] = useIndex(0, mentionSuggestions?.length ?? 0);\n const id = useId();\n const floatingToolbarId = useMemo(\n () => `liveblocks-floating-toolbar-${id}`,\n [id]\n );\n const suggestionsListId = useMemo(\n () => `liveblocks-suggestions-list-${id}`,\n [id]\n );\n const suggestionsListItemId = useCallback(\n (userId?: string) =>\n userId ? `liveblocks-suggestions-list-item-${id}-${userId}` : undefined,\n [id]\n );\n\n const renderElement = useCallback(\n (props: RenderElementProps) => {\n return (\n <ComposerEditorElement Mention={Mention} Link={Link} {...props} />\n );\n },\n [Link, Mention]\n );\n\n const handleChange = useCallback(\n (value: SlateDescendant[]) => {\n validate(value as SlateElement[]);\n\n // Our multi-component setup requires us to instantiate the editor in `Composer.Form`\n // but we can only listen to changes here in `Composer.Editor` via `Slate`, so we use\n // an event source to notify `Composer.Form` of changes.\n onEditorChange.notify();\n },\n [validate, onEditorChange]\n );\n\n const createMention = useCallback(\n (userId?: string) => {\n if (!mentionDraft || !userId) {\n return;\n }\n\n SlateTransforms.select(editor, mentionDraft.range);\n insertMention(editor, userId);\n setMentionDraft(undefined);\n setSelectedMentionSuggestionIndex(0);\n },\n [editor, mentionDraft, setSelectedMentionSuggestionIndex]\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n if (event.isDefaultPrevented()) {\n return;\n }\n\n // Allow leaving marks with ArrowLeft\n if (isKey(event, \"ArrowLeft\")) {\n leaveMarkEdge(editor, \"start\");\n }\n\n // Allow leaving marks with ArrowRight\n if (isKey(event, \"ArrowRight\")) {\n leaveMarkEdge(editor, \"end\");\n }\n\n if (mentionDraft && mentionSuggestions?.length) {\n // Select the next mention suggestion on ArrowDown\n if (isKey(event, \"ArrowDown\")) {\n event.preventDefault();\n setNextSelectedMentionSuggestionIndex();\n }\n\n // Select the previous mention suggestion on ArrowUp\n if (isKey(event, \"ArrowUp\")) {\n event.preventDefault();\n setPreviousSelectedMentionSuggestionIndex();\n }\n\n // Create a mention on Enter/Tab\n if (isKey(event, \"Enter\") || isKey(event, \"Tab\")) {\n event.preventDefault();\n\n const userId = mentionSuggestions?.[selectedMentionSuggestionIndex];\n createMention(userId);\n }\n\n // Close the suggestions on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n setMentionDraft(undefined);\n setSelectedMentionSuggestionIndex(0);\n }\n } else {\n if (hasFloatingToolbarRange) {\n // Close the floating toolbar on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n setHasFloatingToolbarRange(false);\n }\n }\n\n // Blur the editor on Escape\n if (isKey(event, \"Escape\")) {\n event.preventDefault();\n blur();\n }\n\n // Submit the editor on Enter\n if (isKey(event, \"Enter\", { shift: false })) {\n // Even if submitting is not possible, don't do anything else on Enter. (e.g. creating a new line)\n event.preventDefault();\n\n if (canSubmit) {\n submit();\n }\n }\n\n // Create a new line on Shift + Enter\n if (isKey(event, \"Enter\", { shift: true })) {\n event.preventDefault();\n editor.insertBreak();\n }\n\n // Toggle bold on Command/Control + B\n if (isKey(event, \"b\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"bold\");\n }\n\n // Toggle italic on Command/Control + I\n if (isKey(event, \"i\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"italic\");\n }\n\n // Toggle strikethrough on Command/Control + Shift + S\n if (isKey(event, \"s\", { mod: true, shift: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"strikethrough\");\n }\n\n // Toggle code on Command/Control + E\n if (isKey(event, \"e\", { mod: true })) {\n event.preventDefault();\n toggleEditorMark(editor, \"code\");\n }\n }\n },\n [\n onKeyDown,\n mentionDraft,\n mentionSuggestions,\n hasFloatingToolbarRange,\n editor,\n setNextSelectedMentionSuggestionIndex,\n setPreviousSelectedMentionSuggestionIndex,\n selectedMentionSuggestionIndex,\n createMention,\n setSelectedMentionSuggestionIndex,\n blur,\n canSubmit,\n submit,\n ]\n );\n\n const handleFocus = useCallback(\n (event: FocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(true);\n }\n },\n [onFocus, setFocused]\n );\n\n const handleBlur = useCallback(\n (event: FocusEvent<HTMLDivElement>) => {\n onBlur?.(event);\n\n if (!event.isDefaultPrevented()) {\n setFocused(false);\n }\n },\n [onBlur, setFocused]\n );\n\n const selectedMentionSuggestionUserId = useMemo(\n () => mentionSuggestions?.[selectedMentionSuggestionIndex],\n [selectedMentionSuggestionIndex, mentionSuggestions]\n );\n const setSelectedMentionSuggestionUserId = useCallback(\n (userId: string) => {\n const index = mentionSuggestions?.indexOf(userId);\n\n if (index !== undefined && index >= 0) {\n setSelectedMentionSuggestionIndex(index);\n }\n },\n [setSelectedMentionSuggestionIndex, mentionSuggestions]\n );\n\n const additionalProps: AriaAttributes = useMemo(\n () =>\n mentionDraft\n ? {\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": true,\n \"aria-controls\": suggestionsListId,\n \"aria-activedescendant\": suggestionsListItemId(\n selectedMentionSuggestionUserId\n ),\n }\n : hasFloatingToolbarRange\n ? {\n \"aria-haspopup\": true,\n \"aria-controls\": floatingToolbarId,\n }\n : {},\n [\n mentionDraft,\n suggestionsListId,\n suggestionsListItemId,\n selectedMentionSuggestionUserId,\n hasFloatingToolbarRange,\n floatingToolbarId,\n ]\n );\n\n useImperativeHandle(forwardedRef, () => {\n return ReactEditor.toDOMNode(editor, editor) as HTMLDivElement;\n }, [editor]);\n\n // Manually focus the editor when `autoFocus` is true\n useLayoutEffect(() => {\n if (autoFocus) {\n focus();\n }\n }, [autoFocus, editor, focus]);\n\n // Manually add a selection in the editor if the selection\n // is still empty after being focused\n useLayoutEffect(() => {\n if (isFocused && editor.selection === null) {\n select();\n }\n }, [editor, select, isFocused]);\n\n return (\n <Slate\n editor={editor}\n initialValue={initialEditorValue}\n onChange={handleChange}\n >\n <Editable\n dir={dir}\n enterKeyHint={mentionDraft ? \"enter\" : \"send\"}\n autoCapitalize=\"sentences\"\n aria-label=\"Composer editor\"\n data-focused={isFocused || undefined}\n data-disabled={isDisabled || undefined}\n {...additionalProps}\n {...props}\n readOnly={isDisabled}\n disabled={isDisabled}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n renderElement={renderElement}\n renderLeaf={ComposerEditorLeaf}\n renderPlaceholder={ComposerEditorPlaceholder}\n />\n {hasResolveMentionSuggestions && (\n <ComposerEditorMentionSuggestionsWrapper\n dir={dir}\n mentionDraft={mentionDraft}\n setMentionDraft={setMentionDraft}\n selectedUserId={selectedMentionSuggestionUserId}\n setSelectedUserId={setSelectedMentionSuggestionUserId}\n userIds={mentionSuggestions}\n id={suggestionsListId}\n itemId={suggestionsListItemId}\n onItemSelect={createMention}\n MentionSuggestions={MentionSuggestions}\n />\n )}\n {FloatingToolbar && (\n <ComposerEditorFloatingToolbarWrapper\n dir={dir}\n id={floatingToolbarId}\n hasFloatingToolbarRange={hasFloatingToolbarRange}\n setHasFloatingToolbarRange={setHasFloatingToolbarRange}\n FloatingToolbar={FloatingToolbar}\n />\n )}\n </Slate>\n );\n }\n);\n\nconst MAX_ATTACHMENTS = 10;\nconst MAX_ATTACHMENT_SIZE = 1024 * 1024 * 1024; // 1 GB\n\nfunction prepareAttachment(file: File): CommentLocalAttachment {\n return {\n type: \"localAttachment\",\n status: \"idle\",\n id: createCommentAttachmentId(),\n name: file.name,\n size: file.size,\n mimeType: file.type,\n file,\n };\n}\n\n/**\n * Surrounds the composer's content and handles submissions.\n *\n * @example\n * <Composer.Form onComposerSubmit={({ body }) => {}}>\n *\t <Composer.Editor />\n * <Composer.Submit />\n * </Composer.Form>\n */\nconst ComposerForm = forwardRef<HTMLFormElement, ComposerFormProps>(\n (\n {\n children,\n onSubmit,\n onComposerSubmit,\n defaultAttachments = [],\n pasteFilesAsAttachments,\n preventUnsavedChanges = true,\n disabled,\n asChild,\n roomId: _roomId,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"form\";\n const [isEmpty, setEmpty] = useState(true);\n const [isSubmitting, setSubmitting] = useState(false);\n const [isFocused, setFocused] = useState(false);\n const room = useRoomOrNull();\n\n const roomId = _roomId !== undefined ? _roomId : room?.id;\n if (roomId === undefined) {\n throw new Error(\"Composer.Form must be a descendant of RoomProvider.\");\n }\n\n // Later: Offer as Composer.Form props: { maxAttachments: number; maxAttachmentSize: number; supportedAttachmentMimeTypes: string[]; }\n const maxAttachments = MAX_ATTACHMENTS;\n const maxAttachmentSize = MAX_ATTACHMENT_SIZE;\n\n const {\n attachments,\n isUploadingAttachments,\n addAttachments,\n removeAttachment,\n clearAttachments,\n } = useComposerAttachmentsManager(defaultAttachments, {\n maxFileSize: maxAttachmentSize,\n roomId,\n });\n const numberOfAttachments = attachments.length;\n const hasMaxAttachments = numberOfAttachments >= maxAttachments;\n\n const isDisabled = useMemo(() => {\n return isSubmitting || disabled === true;\n }, [isSubmitting, disabled]);\n const canSubmit = useMemo(() => {\n return !isEmpty && !isUploadingAttachments;\n }, [isEmpty, isUploadingAttachments]);\n const [marks, setMarks] = useState<ComposerBodyMarks>(getMarks);\n\n const ref = useRef<HTMLFormElement>(null);\n const mergedRefs = useRefs(forwardedRef, ref);\n const fileInputRef = useRef<HTMLInputElement>(null);\n const syncSource = useSyncSource();\n\n // Mark the composer as a pending update when it has unsubmitted (draft)\n // text or attachments\n const isPending = !preventUnsavedChanges\n ? false\n : !isEmpty || isUploadingAttachments || attachments.length > 0;\n\n useEffect(() => {\n syncSource?.setSyncStatus(\n isPending ? \"has-local-changes\" : \"synchronized\"\n );\n }, [syncSource, isPending]);\n\n const createAttachments = useCallback(\n (files: File[]) => {\n if (!files.length) {\n return;\n }\n\n const numberOfAcceptedFiles = Math.max(\n 0,\n maxAttachments - numberOfAttachments\n );\n\n files.splice(numberOfAcceptedFiles);\n\n const attachments = files.map((file) => prepareAttachment(file));\n\n addAttachments(attachments);\n },\n [addAttachments, maxAttachments, numberOfAttachments]\n );\n\n const createAttachmentsRef = useRef(createAttachments);\n\n useEffect(() => {\n createAttachmentsRef.current = createAttachments;\n }, [createAttachments]);\n\n const stableCreateAttachments = useCallback((files: File[]) => {\n createAttachmentsRef.current(files);\n }, []);\n\n const editor = useInitial(() =>\n createComposerEditor({\n createAttachments: stableCreateAttachments,\n pasteFilesAsAttachments,\n })\n );\n const onEditorChange = useInitial(makeEventSource) as EventSource<void>;\n\n const validate = useCallback(\n (value: SlateElement[]) => {\n setEmpty(isEditorEmpty(editor, value));\n },\n [editor]\n );\n\n const submit = useCallback(() => {\n if (!canSubmit) {\n return;\n }\n\n // We need to wait for the next frame in some cases like when composing diacritics,\n // we want any native handling to be done first while still being handled on `keydown`.\n requestAnimationFrame(() => {\n if (ref.current) {\n requestSubmit(ref.current);\n }\n });\n }, [canSubmit]);\n\n const clear = useCallback(() => {\n SlateTransforms.delete(editor, {\n at: {\n anchor: SlateEditor.start(editor, []),\n focus: SlateEditor.end(editor, []),\n },\n });\n }, [editor]);\n\n const select = useCallback(() => {\n SlateTransforms.select(editor, SlateEditor.end(editor, []));\n }, [editor]);\n\n const focus = useCallback(\n (resetSelection = true) => {\n if (!ReactEditor.isFocused(editor)) {\n SlateTransforms.select(\n editor,\n resetSelection || !editor.selection\n ? SlateEditor.end(editor, [])\n : editor.selection\n );\n ReactEditor.focus(editor);\n }\n },\n [editor]\n );\n\n const blur = useCallback(() => {\n ReactEditor.blur(editor);\n }, [editor]);\n\n const createMention = useCallback(() => {\n if (disabled) {\n return;\n }\n\n focus();\n insertMentionCharacter(editor);\n }, [disabled, editor, focus]);\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n\n focus(false);\n insertSlateText(editor, text);\n },\n [disabled, editor, focus]\n );\n\n const attachFiles = useCallback(() => {\n if (disabled) {\n return;\n }\n\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n }, [disabled]);\n\n const handleAttachmentsInputChange = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n return;\n }\n\n if (event.target.files) {\n createAttachments(Array.from(event.target.files));\n\n // Reset the input value to allow selecting the same file(s) again\n event.target.value = \"\";\n }\n },\n [createAttachments, disabled]\n );\n\n const onSubmitEnd = useCallback(() => {\n clear();\n blur();\n clearAttachments();\n setSubmitting(false);\n }, [blur, clear, clearAttachments]);\n\n const handleSubmit = useCallback(\n (event: FormEvent<HTMLFormElement>) => {\n if (disabled) {\n return;\n }\n\n // In some situations (e.g. pressing Enter while composing diacritics), it's possible\n // for the form to be submitted as empty even though we already checked whether the\n // editor was empty when handling the key press.\n const isEmpty = isEditorEmpty(editor, editor.children);\n\n // We even prevent the user's `onSubmit` handler from being called if the editor is empty.\n if (isEmpty) {\n event.preventDefault();\n\n return;\n }\n\n onSubmit?.(event);\n\n if (!onComposerSubmit || event.isDefaultPrevented()) {\n event.preventDefault();\n\n return;\n }\n\n const body = composerBodyToCommentBody(\n editor.children as ComposerBodyData\n );\n // Only non-local attachments are included to be submitted.\n const commentAttachments: CommentAttachment[] = attachments\n .filter(\n (attachment) =>\n attachment.type === \"attachment\" ||\n (attachment.type === \"localAttachment\" &&\n attachment.status === \"uploaded\")\n )\n .map((attachment) => {\n return {\n id: attachment.id,\n type: \"attachment\",\n mimeType: attachment.mimeType,\n size: attachment.size,\n name: attachment.name,\n };\n });\n\n const promise = onComposerSubmit(\n { body, attachments: commentAttachments },\n event\n );\n\n event.preventDefault();\n\n if (promise) {\n setSubmitting(true);\n promise.then(onSubmitEnd);\n } else {\n onSubmitEnd();\n }\n },\n [disabled, editor, attachments, onComposerSubmit, onSubmit, onSubmitEnd]\n );\n\n const stopPropagation = useCallback((event: SyntheticEvent) => {\n event.stopPropagation();\n }, []);\n\n const toggleMark = useCallback(\n (mark: ComposerBodyMark) => {\n toggleEditorMark(editor, mark);\n },\n [editor]\n );\n\n useObservable(onEditorChange, () => {\n setMarks(getMarks(editor));\n });\n\n return (\n <ComposerEditorContext.Provider\n value={{\n editor,\n validate,\n setFocused,\n onEditorChange,\n roomId,\n }}\n >\n <ComposerAttachmentsContext.Provider\n value={{\n createAttachments,\n isUploadingAttachments,\n hasMaxAttachments,\n maxAttachments,\n maxAttachmentSize,\n }}\n >\n <ComposerContext.Provider\n value={{\n isDisabled,\n isFocused,\n isEmpty,\n canSubmit,\n submit,\n clear,\n select,\n focus,\n blur,\n createMention,\n insertText,\n attachments,\n attachFiles,\n removeAttachment,\n toggleMark,\n marks,\n }}\n >\n <Component {...props} onSubmit={handleSubmit} ref={mergedRefs}>\n <input\n type=\"file\"\n multiple\n ref={fileInputRef}\n onChange={handleAttachmentsInputChange}\n onClick={stopPropagation}\n tabIndex={-1}\n style={{ display: \"none\" }}\n />\n <Slottable>{children}</Slottable>\n </Component>\n </ComposerContext.Provider>\n </ComposerAttachmentsContext.Provider>\n </ComposerEditorContext.Provider>\n );\n }\n);\n\n/**\n * A button to submit the composer.\n *\n * @example\n * <Composer.Submit>Send</Composer.Submit>\n */\nconst ComposerSubmit = forwardRef<HTMLButtonElement, ComposerSubmitProps>(\n ({ children, disabled, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"button\";\n const { canSubmit, isDisabled: isComposerDisabled } = useComposer();\n const isDisabled = isComposerDisabled || disabled || !canSubmit;\n\n return (\n <Component\n type=\"submit\"\n {...props}\n ref={forwardedRef}\n disabled={isDisabled}\n >\n {children}\n </Component>\n );\n }\n);\n\n/**\n * A button which opens a file picker to create attachments.\n *\n * @example\n * <Composer.AttachFiles>Attach files</Composer.AttachFiles>\n */\nconst ComposerAttachFiles = forwardRef<\n HTMLButtonElement,\n ComposerAttachFilesProps\n>(({ children, onClick, disabled, asChild, ...props }, forwardedRef) => {\n const Component = asChild ? Slot : \"button\";\n const { hasMaxAttachments } = useComposerAttachmentsContext();\n const { isDisabled: isComposerDisabled, attachFiles } = useComposer();\n const isDisabled = isComposerDisabled || hasMaxAttachments || disabled;\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n if (!event.isDefaultPrevented()) {\n attachFiles();\n }\n },\n [attachFiles, onClick]\n );\n\n return (\n <Component\n type=\"button\"\n {...props}\n onClick={handleClick}\n ref={forwardedRef}\n disabled={isDisabled}\n >\n {children}\n </Component>\n );\n});\n\n/**\n * A drop area which accepts files to create attachments.\n *\n * @example\n * <Composer.AttachmentsDropArea>\n * Drop files here\n * </Composer.AttachmentsDropArea>\n */\nconst ComposerAttachmentsDropArea = forwardRef<\n HTMLDivElement,\n ComposerAttachmentsDropAreaProps\n>(\n (\n {\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n disabled,\n asChild,\n ...props\n },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"div\";\n const { isDisabled: isComposerDisabled } = useComposer();\n const isDisabled = isComposerDisabled || disabled;\n const [, dropAreaProps] = useComposerAttachmentsDropArea({\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n disabled: isDisabled,\n });\n\n return (\n <Component\n {...dropAreaProps}\n data-disabled={isDisabled ? \"\" : undefined}\n {...props}\n ref={forwardedRef}\n />\n );\n }\n);\n\n/**\n * A toggle button which toggles a specific text mark.\n *\n * @example\n * <Composer.MarkToggle mark=\"bold\">\n * Bold\n * </Composer.MarkToggle>\n */\nconst ComposerMarkToggle = forwardRef<\n HTMLButtonElement,\n ComposerMarkToggleProps\n>(\n (\n { children, mark, onValueChange, onClick, asChild, ...props },\n forwardedRef\n ) => {\n const Component = asChild ? Slot : \"button\";\n const { marks, toggleMark } = useComposer();\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n\n if (!event.isDefaultPrevented()) {\n toggleMark(mark);\n onValueChange?.(mark);\n }\n },\n [mark, onClick, onValueChange, toggleMark]\n );\n\n return (\n <TogglePrimitive.Root\n asChild\n pressed={marks[mark]}\n onClick={handleClick}\n {...props}\n >\n <Component {...props} ref={forwardedRef}>\n {children}\n </Component>\n </TogglePrimitive.Root>\n );\n }\n);\n\nif (process.env.NODE_ENV !== \"production\") {\n ComposerAttachFiles.displayName = COMPOSER_ATTACH_FILES_NAME;\n ComposerAttachmentsDropArea.displayName = COMPOSER_ATTACHMENTS_DROP_AREA_NAME;\n ComposerEditor.displayName = COMPOSER_EDITOR_NAME;\n ComposerFloatingToolbar.displayName = COMPOSER_FLOATING_TOOLBAR_NAME;\n ComposerForm.displayName = COMPOSER_FORM_NAME;\n ComposerMention.displayName = COMPOSER_MENTION_NAME;\n ComposerLink.displayName = COMPOSER_LINK_NAME;\n ComposerSubmit.displayName = COMPOSER_SUBMIT_NAME;\n ComposerSuggestions.displayName = COMPOSER_SUGGESTIONS_NAME;\n ComposerSuggestionsList.displayName = COMPOSER_SUGGESTIONS_LIST_NAME;\n ComposerSuggestionsListItem.displayName = COMPOSER_SUGGESTIONS_LIST_ITEM_NAME;\n ComposerMarkToggle.displayName = COMPOSER_MARK_TOGGLE_NAME;\n}\n\n// NOTE: Every export from this file will be available publicly as Composer.*\nexport {\n ComposerAttachFiles as AttachFiles,\n ComposerAttachmentsDropArea as AttachmentsDropArea,\n ComposerEditor as Editor,\n ComposerFloatingToolbar as FloatingToolbar,\n ComposerForm as Form,\n ComposerLink as Link,\n ComposerMarkToggle as MarkToggle,\n ComposerMention as Mention,\n ComposerSubmit as Submit,\n ComposerSuggestions as Suggestions,\n ComposerSuggestionsList as SuggestionsList,\n ComposerSuggestionsListItem as SuggestionsListItem,\n};\n"],"names":["withNormalize","withMentions","withCustomLinks","withAutoLinks","withAutoFormatting","withEmptyClearFormatting","withPaste","withHistory","withReact","createEditor","useSelected","jsxs","jsx","useMemo","toAbsoluteUrl","useSlateStatic","useComposerEditorContext","useComposer","useLiveblocksUIConfig","useContentZIndex","useFloatingWithOptions","useObservable","getMentionDraftAtSelection","useLayoutEffect","getDOMRange","Persist","ComposerSuggestionsContext","Portal","useState","SlateRange","ComposerFloatingToolbarContext","forwardRef","usePersist","useRef","useComposerFloatingToolbarContext","useRefs","getSideAndAlignFromFloatingPlacement","Slot","useAnimationPersist","useCallback","useComposerSuggestionsContext","useEffect","MENTION_CHARACTER","useClientOrNull","useInitial","commentBodyToComposerBody","useResolveMentionSuggestions","useMentionSuggestions","useIndex","useId","props","SlateTransforms","insertMention","isKey","leaveMarkEdge","toggleEditorMark","useImperativeHandle","ReactEditor","Slate","Editable","createCommentAttachmentId","isEmpty","useRoomOrNull","useComposerAttachmentsManager","marks","getMarks","useSyncSource","attachments","makeEventSource","isEditorEmpty","requestSubmit","SlateEditor","insertMentionCharacter","insertSlateText","composerBodyToCommentBody","ComposerEditorContext","ComposerAttachmentsContext","ComposerContext","Slottable","useComposerAttachmentsContext","useComposerAttachmentsDropArea","TogglePrimitive"],"mappings":"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"}
@@ -1,25 +1,25 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import { createCommentAttachmentId, makeEventSource } from '@liveblocks/core';
3
3
  import { useClientOrNull, useResolveMentionSuggestions, useMentionSuggestions, useRoomOrNull, useSyncSource } from '@liveblocks/react/_private';
4
- import { Slottable, Slot } from '@radix-ui/react-slot';
4
+ import { Slot, Slottable } from '@radix-ui/react-slot';
5
5
  import * as TogglePrimitive from '@radix-ui/react-toggle';
6
- import { forwardRef, useRef, useMemo, useCallback, useEffect, useState, useId, useImperativeHandle, useLayoutEffect } from 'react';
7
- import { Transforms, Editor, insertText, createEditor, Range } from 'slate';
6
+ import { useMemo, useLayoutEffect, useState, forwardRef, useRef, useCallback, useEffect, useId, useImperativeHandle } from 'react';
7
+ import { createEditor, Range, Transforms, Editor, insertText } from 'slate';
8
8
  import { withHistory } from 'slate-history';
9
- import { useSelected, ReactEditor, Slate, Editable, useSlateStatic, withReact } from 'slate-react';
9
+ import { withReact, useSelected, useSlateStatic, ReactEditor, Slate, Editable } from 'slate-react';
10
10
  import { useLiveblocksUIConfig } from '../../config.mjs';
11
11
  import { withAutoFormatting } from '../../slate/plugins/auto-formatting.mjs';
12
12
  import { withAutoLinks } from '../../slate/plugins/auto-links.mjs';
13
13
  import { withCustomLinks } from '../../slate/plugins/custom-links.mjs';
14
14
  import { withEmptyClearFormatting } from '../../slate/plugins/empty-clear-formatting.mjs';
15
- import { insertMention, insertMentionCharacter, MENTION_CHARACTER, withMentions, getMentionDraftAtSelection } from '../../slate/plugins/mentions.mjs';
15
+ import { withMentions, getMentionDraftAtSelection, MENTION_CHARACTER, insertMention, insertMentionCharacter } from '../../slate/plugins/mentions.mjs';
16
16
  import { withNormalize } from '../../slate/plugins/normalize.mjs';
17
17
  import { withPaste } from '../../slate/plugins/paste.mjs';
18
18
  import { getDOMRange } from '../../slate/utils/get-dom-range.mjs';
19
19
  import { isEmpty } from '../../slate/utils/is-empty.mjs';
20
20
  import { leaveMarkEdge, toggleMark, getMarks } from '../../slate/utils/marks.mjs';
21
21
  import { isKey } from '../../utils/is-key.mjs';
22
- import { usePersist, useAnimationPersist, Persist } from '../../utils/Persist.mjs';
22
+ import { Persist, usePersist, useAnimationPersist } from '../../utils/Persist.mjs';
23
23
  import { Portal } from '../../utils/Portal.mjs';
24
24
  import { requestSubmit } from '../../utils/request-submit.mjs';
25
25
  import { useIndex } from '../../utils/use-index.mjs';
@@ -27,9 +27,10 @@ import { useInitial } from '../../utils/use-initial.mjs';
27
27
  import { useObservable } from '../../utils/use-observable.mjs';
28
28
  import { useRefs } from '../../utils/use-refs.mjs';
29
29
  import { toAbsoluteUrl } from '../Comment/utils.mjs';
30
- import { useComposerFloatingToolbarContext, useComposerSuggestionsContext, useComposerEditorContext, useComposer, ComposerEditorContext, ComposerAttachmentsContext, ComposerContext, useComposerAttachmentsContext, ComposerSuggestionsContext, ComposerFloatingToolbarContext } from './contexts.mjs';
31
- import { getSideAndAlignFromFloatingPlacement, commentBodyToComposerBody, useComposerAttachmentsManager, composerBodyToCommentBody, useComposerAttachmentsDropArea, useContentZIndex, useFloatingWithOptions } from './utils.mjs';
30
+ import { useComposerEditorContext, useComposer, ComposerSuggestionsContext, ComposerFloatingToolbarContext, useComposerFloatingToolbarContext, useComposerSuggestionsContext, ComposerEditorContext, ComposerAttachmentsContext, ComposerContext, useComposerAttachmentsContext } from './contexts.mjs';
31
+ import { useContentZIndex, useFloatingWithOptions, getSideAndAlignFromFloatingPlacement, commentBodyToComposerBody, useComposerAttachmentsManager, composerBodyToCommentBody, useComposerAttachmentsDropArea } from './utils.mjs';
32
32
 
33
+ "use client";
33
34
  const MENTION_SUGGESTIONS_POSITION = "top";
34
35
  const FLOATING_TOOLBAR_POSITION = "top";
35
36
  const COMPOSER_MENTION_NAME = "ComposerMention";