@liveblocks/react-tiptap 2.14.0-v2encoding → 2.15.0-debug1

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 (39) hide show
  1. package/dist/LiveblocksExtension.js +12 -13
  2. package/dist/LiveblocksExtension.js.map +1 -1
  3. package/dist/LiveblocksExtension.mjs +3 -4
  4. package/dist/LiveblocksExtension.mjs.map +1 -1
  5. package/dist/comments/AnchoredThreads.js +54 -52
  6. package/dist/comments/AnchoredThreads.js.map +1 -1
  7. package/dist/comments/AnchoredThreads.mjs +39 -37
  8. package/dist/comments/AnchoredThreads.mjs.map +1 -1
  9. package/dist/comments/FloatingComposer.js +24 -22
  10. package/dist/comments/FloatingComposer.js.map +1 -1
  11. package/dist/comments/FloatingComposer.mjs +14 -12
  12. package/dist/comments/FloatingComposer.mjs.map +1 -1
  13. package/dist/comments/FloatingThreads.js +23 -21
  14. package/dist/comments/FloatingThreads.js.map +1 -1
  15. package/dist/comments/FloatingThreads.mjs +16 -14
  16. package/dist/comments/FloatingThreads.mjs.map +1 -1
  17. package/dist/index.d.mts +8 -6
  18. package/dist/index.d.ts +8 -6
  19. package/dist/mentions/Avatar.js +24 -17
  20. package/dist/mentions/Avatar.js.map +1 -1
  21. package/dist/mentions/Avatar.mjs +21 -14
  22. package/dist/mentions/Avatar.mjs.map +1 -1
  23. package/dist/mentions/Mention.js +13 -8
  24. package/dist/mentions/Mention.js.map +1 -1
  25. package/dist/mentions/Mention.mjs +11 -6
  26. package/dist/mentions/Mention.mjs.map +1 -1
  27. package/dist/mentions/MentionsList.js +38 -31
  28. package/dist/mentions/MentionsList.js.map +1 -1
  29. package/dist/mentions/MentionsList.mjs +29 -22
  30. package/dist/mentions/MentionsList.mjs.map +1 -1
  31. package/dist/version-history/HistoryVersionPreview.js +64 -46
  32. package/dist/version-history/HistoryVersionPreview.js.map +1 -1
  33. package/dist/version-history/HistoryVersionPreview.mjs +57 -39
  34. package/dist/version-history/HistoryVersionPreview.mjs.map +1 -1
  35. package/dist/version.js +1 -1
  36. package/dist/version.js.map +1 -1
  37. package/dist/version.mjs +1 -1
  38. package/dist/version.mjs.map +1 -1
  39. package/package.json +8 -10
@@ -1,7 +1,8 @@
1
+ import { jsx } from 'react/jsx-runtime';
1
2
  import { useFloating, flip, offset, hide, shift, limitShift, size, autoUpdate } from '@floating-ui/react-dom';
2
3
  import { Thread } from '@liveblocks/react-ui';
3
4
  import { useEditorState } from '@tiptap/react';
4
- import React, { useState, useEffect, useCallback, useLayoutEffect } from 'react';
5
+ import { useState, useEffect, useCallback, useLayoutEffect } from 'react';
5
6
  import { createPortal } from 'react-dom';
6
7
  import { classNames } from '../classnames.mjs';
7
8
  import { THREADS_PLUGIN_KEY } from '../types.mjs';
@@ -53,18 +54,18 @@ function FloatingThreads({
53
54
  }, [activeThread, editor]);
54
55
  if (!activeThread || !editor || activeThread.resolved)
55
56
  return null;
56
- return /* @__PURE__ */ React.createElement(FloatingThreadPortal, {
57
+ return /* @__PURE__ */ jsx(FloatingThreadPortal, {
57
58
  thread: activeThread,
58
59
  editor,
59
60
  container: document.body,
60
- ...props
61
- }, activeThread && /* @__PURE__ */ React.createElement(ThreadWrapper, {
62
- key: activeThread.id,
63
- thread: activeThread,
64
- Thread: Thread$1,
65
- onEscapeKeydown: handleEscapeKeydown,
66
- className: "lb-tiptap-floating-threads-thread"
67
- }));
61
+ ...props,
62
+ children: activeThread && /* @__PURE__ */ jsx(ThreadWrapper, {
63
+ thread: activeThread,
64
+ Thread: Thread$1,
65
+ onEscapeKeydown: handleEscapeKeydown,
66
+ className: "lb-tiptap-floating-threads-thread"
67
+ }, activeThread.id)
68
+ });
68
69
  }
69
70
  const FLOATING_THREAD_COLLISION_PADDING = 10;
70
71
  function FloatingThreadPortal({
@@ -126,7 +127,7 @@ function FloatingThreadPortal({
126
127
  }, [editor, updateRef]);
127
128
  useLayoutEffect(updateRef, [updateRef]);
128
129
  return createPortal(
129
- /* @__PURE__ */ React.createElement("div", {
130
+ /* @__PURE__ */ jsx("div", {
130
131
  ref: setFloating,
131
132
  ...props,
132
133
  style: {
@@ -140,8 +141,9 @@ function FloatingThreadPortal({
140
141
  className: classNames(
141
142
  "lb-root lb-portal lb-elevation lb-tiptap-floating lb-tiptap-floating-threads",
142
143
  className
143
- )
144
- }, children),
144
+ ),
145
+ children
146
+ }),
145
147
  container
146
148
  );
147
149
  }
@@ -161,7 +163,7 @@ function ThreadWrapper({
161
163
  },
162
164
  [onEscapeKeydown, onKeyDown]
163
165
  );
164
- return /* @__PURE__ */ React.createElement(Thread, {
166
+ return /* @__PURE__ */ jsx(Thread, {
165
167
  thread,
166
168
  onKeyDown: handleKeyDown,
167
169
  ...threadProps
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingThreads.mjs","sources":["../../src/comments/FloatingThreads.tsx"],"sourcesContent":["\nimport {\n autoUpdate,\n flip,\n hide,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport type { BaseMetadata, DM, ThreadData } from \"@liveblocks/core\";\nimport {\n Thread as DefaultThread,\n type ThreadProps,\n} from \"@liveblocks/react-ui\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport React, {\n type ComponentType,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { THREADS_PLUGIN_KEY } from \"../types\";\n\ntype ThreadPanelComponents = {\n Thread: ComponentType<ThreadProps>;\n};\n\nexport interface FloatingThreadsProps<M extends BaseMetadata = DM>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * The threads to display.\n */\n threads: ThreadData<M>[];\n\n /**\n * Override the component's components.\n */\n components?: Partial<ThreadPanelComponents>;\n\n /**\n * The tiptap editor\n */\n editor: Editor | null;\n}\n\nexport function FloatingThreads({\n threads,\n components,\n editor,\n ...props\n}: FloatingThreadsProps) {\n\n const Thread = components?.Thread ?? DefaultThread;\n\n const { pluginState } = useEditorState({\n editor,\n selector: (ctx) => {\n if (!ctx?.editor?.state) return { pluginState: undefined };\n const state = THREADS_PLUGIN_KEY.getState(ctx.editor.state);\n return {\n pluginState: state,\n };\n },\n equalityFn: (prev, next) => {\n if (!prev || !next) return false;\n return prev.pluginState?.selectedThreadPos === next.pluginState?.selectedThreadPos &&\n prev.pluginState?.selectedThreadId === next.pluginState?.selectedThreadId;\n },\n }) ?? { pluginState: undefined };\n\n const [activeThread, setActiveThread] = useState<ThreadData | null>(null);\n\n\n useEffect(() => {\n if (!editor || !pluginState) {\n setActiveThread(null);\n return;\n }\n const { selectedThreadId, selectedThreadPos } = pluginState;\n if (selectedThreadId === null || selectedThreadPos === null) {\n setActiveThread(null);\n return;\n }\n const active = (threads ?? []).find((thread) =>\n selectedThreadId === thread.id\n );\n setActiveThread(active ?? null);\n }, [editor, pluginState, threads]);\n\n const handleEscapeKeydown = useCallback((): boolean => {\n if (!editor || activeThread === null) return false;\n editor.commands.selectThread(null);\n return true;\n }, [activeThread, editor]);\n\n if (!activeThread || !editor || activeThread.resolved) return null;\n\n return (\n <FloatingThreadPortal\n thread={activeThread}\n editor={editor}\n container={document.body}\n {...props}\n >\n {activeThread &&\n <ThreadWrapper\n key={activeThread.id}\n thread={activeThread}\n Thread={Thread}\n onEscapeKeydown={handleEscapeKeydown}\n className=\"lb-tiptap-floating-threads-thread\"\n />\n }\n </FloatingThreadPortal>\n );\n}\n\ninterface FloatingThreadPortalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n thread: ThreadData;\n editor: Editor;\n container: HTMLElement;\n children: ReactNode;\n}\n\nexport const FLOATING_THREAD_COLLISION_PADDING = 10;\n\nfunction FloatingThreadPortal({\n container,\n editor,\n thread,\n children,\n className,\n style,\n ...props\n}: FloatingThreadPortalProps) {\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n } = useFloating({\n strategy: \"absolute\",\n placement: \"bottom\",\n middleware: [\n flip({ padding: FLOATING_THREAD_COLLISION_PADDING, crossAxis: false }),\n offset(10),\n hide({ padding: FLOATING_THREAD_COLLISION_PADDING }),\n shift({\n padding: FLOATING_THREAD_COLLISION_PADDING,\n limiter: limitShift(),\n }),\n size({\n padding: FLOATING_THREAD_COLLISION_PADDING,\n apply({ availableWidth, availableHeight, elements }) {\n elements.floating.style.setProperty(\n \"--lb-tiptap-floating-threads-available-width\",\n `${availableWidth}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-floating-threads-available-height\",\n `${availableHeight}px`\n );\n },\n }),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n });\n\n const updateRef = useCallback(() => {\n const el = editor.view.dom.querySelector(`[data-lb-thread-id=\"${thread.id}\"]`);\n if (el) {\n setReference(el);\n }\n }, [setReference, editor, thread.id]);\n\n // Remote cursor updates and other edits can cause the ref to break\n useEffect(() => {\n editor.on(\"transaction\", updateRef)\n return () => {\n editor.off(\"transaction\", updateRef);\n }\n }, [editor, updateRef]);\n\n useLayoutEffect(updateRef, [updateRef]);\n\n return createPortal(\n <div\n ref={setFloating}\n {...props}\n style={{\n ...style,\n position: strategy,\n top: 0,\n left: 0,\n transform: `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`,\n minWidth: \"max-content\",\n }}\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating lb-tiptap-floating-threads\",\n className\n )}\n >\n {children}\n </div>,\n container\n );\n}\n\ninterface ThreadWrapperProps extends ThreadProps {\n thread: ThreadData;\n Thread: ComponentType<ThreadProps>;\n onEscapeKeydown: () => void;\n}\n\nfunction ThreadWrapper({\n thread,\n Thread,\n onEscapeKeydown,\n onKeyDown,\n ...threadProps\n}: ThreadWrapperProps) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n // TODO: Add ability to preventDefault on keydown to override the default behavior, e.g. to show an alert dialog\n if (event.key === \"Escape\") {\n onEscapeKeydown();\n }\n },\n [onEscapeKeydown, onKeyDown]\n );\n\n return <Thread thread={thread} onKeyDown={handleKeyDown} {...threadProps} />;\n}\n\n"],"names":["Thread","DefaultThread"],"mappings":"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"}
1
+ {"version":3,"file":"FloatingThreads.mjs","sources":["../../src/comments/FloatingThreads.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n hide,\n limitShift,\n offset,\n shift,\n size,\n useFloating,\n} from \"@floating-ui/react-dom\";\nimport type { BaseMetadata, DM, ThreadData } from \"@liveblocks/core\";\nimport {\n Thread as DefaultThread,\n type ThreadProps,\n} from \"@liveblocks/react-ui\";\nimport { type Editor, useEditorState } from \"@tiptap/react\";\nimport {\n type ComponentType,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useLayoutEffect,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { classNames } from \"../classnames\";\nimport { THREADS_PLUGIN_KEY } from \"../types\";\n\ntype ThreadPanelComponents = {\n Thread: ComponentType<ThreadProps>;\n};\n\nexport interface FloatingThreadsProps<M extends BaseMetadata = DM>\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n /**\n * The threads to display.\n */\n threads: ThreadData<M>[];\n\n /**\n * Override the component's components.\n */\n components?: Partial<ThreadPanelComponents>;\n\n /**\n * The tiptap editor\n */\n editor: Editor | null;\n}\n\nexport function FloatingThreads({\n threads,\n components,\n editor,\n ...props\n}: FloatingThreadsProps) {\n const Thread = components?.Thread ?? DefaultThread;\n\n const { pluginState } = useEditorState({\n editor,\n selector: (ctx) => {\n if (!ctx?.editor?.state) return { pluginState: undefined };\n const state = THREADS_PLUGIN_KEY.getState(ctx.editor.state);\n return {\n pluginState: state,\n };\n },\n equalityFn: (prev, next) => {\n if (!prev || !next) return false;\n return prev.pluginState?.selectedThreadPos === next.pluginState?.selectedThreadPos &&\n prev.pluginState?.selectedThreadId === next.pluginState?.selectedThreadId;\n },\n }) ?? { pluginState: undefined };\n\n const [activeThread, setActiveThread] = useState<ThreadData | null>(null);\n\n useEffect(() => {\n if (!editor || !pluginState) {\n setActiveThread(null);\n return;\n }\n const { selectedThreadId, selectedThreadPos } = pluginState;\n if (selectedThreadId === null || selectedThreadPos === null) {\n setActiveThread(null);\n return;\n }\n const active = (threads ?? []).find((thread) =>\n selectedThreadId === thread.id\n );\n setActiveThread(active ?? null);\n }, [editor, pluginState, threads]);\n\n const handleEscapeKeydown = useCallback((): boolean => {\n if (!editor || activeThread === null) return false;\n editor.commands.selectThread(null);\n return true;\n }, [activeThread, editor]);\n\n if (!activeThread || !editor || activeThread.resolved) return null;\n\n return (\n <FloatingThreadPortal\n thread={activeThread}\n editor={editor}\n container={document.body}\n {...props}\n >\n {activeThread &&\n <ThreadWrapper\n key={activeThread.id}\n thread={activeThread}\n Thread={Thread}\n onEscapeKeydown={handleEscapeKeydown}\n className=\"lb-tiptap-floating-threads-thread\"\n />\n }\n </FloatingThreadPortal>\n );\n}\n\ninterface FloatingThreadPortalProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n thread: ThreadData;\n editor: Editor;\n container: HTMLElement;\n children: ReactNode;\n}\n\nexport const FLOATING_THREAD_COLLISION_PADDING = 10;\n\nfunction FloatingThreadPortal({\n container,\n editor,\n thread,\n children,\n className,\n style,\n ...props\n}: FloatingThreadPortalProps) {\n const {\n refs: { setReference, setFloating },\n strategy,\n x,\n y,\n } = useFloating({\n strategy: \"absolute\",\n placement: \"bottom\",\n middleware: [\n flip({ padding: FLOATING_THREAD_COLLISION_PADDING, crossAxis: false }),\n offset(10),\n hide({ padding: FLOATING_THREAD_COLLISION_PADDING }),\n shift({\n padding: FLOATING_THREAD_COLLISION_PADDING,\n limiter: limitShift(),\n }),\n size({\n padding: FLOATING_THREAD_COLLISION_PADDING,\n apply({ availableWidth, availableHeight, elements }) {\n elements.floating.style.setProperty(\n \"--lb-tiptap-floating-threads-available-width\",\n `${availableWidth}px`\n );\n elements.floating.style.setProperty(\n \"--lb-tiptap-floating-threads-available-height\",\n `${availableHeight}px`\n );\n },\n }),\n ],\n whileElementsMounted: (...args) => {\n return autoUpdate(...args, {\n animationFrame: true,\n });\n },\n });\n\n const updateRef = useCallback(() => {\n const el = editor.view.dom.querySelector(`[data-lb-thread-id=\"${thread.id}\"]`);\n if (el) {\n setReference(el);\n }\n }, [setReference, editor, thread.id]);\n\n // Remote cursor updates and other edits can cause the ref to break\n useEffect(() => {\n editor.on(\"transaction\", updateRef)\n return () => {\n editor.off(\"transaction\", updateRef);\n };\n }, [editor, updateRef]);\n\n useLayoutEffect(updateRef, [updateRef]);\n\n return createPortal(\n <div\n ref={setFloating}\n {...props}\n style={{\n ...style,\n position: strategy,\n top: 0,\n left: 0,\n transform: `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`,\n minWidth: \"max-content\",\n }}\n className={classNames(\n \"lb-root lb-portal lb-elevation lb-tiptap-floating lb-tiptap-floating-threads\",\n className\n )}\n >\n {children}\n </div>,\n container\n );\n}\n\ninterface ThreadWrapperProps extends ThreadProps {\n thread: ThreadData;\n Thread: ComponentType<ThreadProps>;\n onEscapeKeydown: () => void;\n}\n\nfunction ThreadWrapper({\n thread,\n Thread,\n onEscapeKeydown,\n onKeyDown,\n ...threadProps\n}: ThreadWrapperProps) {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n\n // TODO: Add ability to preventDefault on keydown to override the default behavior, e.g. to show an alert dialog\n if (event.key === \"Escape\") {\n onEscapeKeydown();\n }\n },\n [onEscapeKeydown, onKeyDown]\n );\n\n return <Thread thread={thread} onKeyDown={handleKeyDown} {...threadProps} />;\n}\n"],"names":["Thread","DefaultThread"],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -1,7 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
1
2
  import { BaseMetadata, DM, ThreadData, HistoryVersion } from '@liveblocks/core';
2
3
  import { ThreadProps, ComposerProps } from '@liveblocks/react-ui';
3
4
  import { Editor } from '@tiptap/react';
4
- import React, { ComponentPropsWithoutRef, ComponentType, HTMLAttributes } from 'react';
5
+ import * as react from 'react';
6
+ import { ComponentPropsWithoutRef, ComponentType, HTMLAttributes } from 'react';
5
7
  import { BaseMetadata as BaseMetadata$1 } from '@liveblocks/client';
6
8
  import { Extension, Content } from '@tiptap/core';
7
9
 
@@ -22,11 +24,11 @@ interface AnchoredThreadsProps<M extends BaseMetadata = DM> extends Omit<Compone
22
24
  */
23
25
  editor: Editor | null;
24
26
  }
25
- declare function AnchoredThreads({ threads, components, className, style, editor, ...props }: AnchoredThreadsProps): React.JSX.Element | null;
27
+ declare function AnchoredThreads({ threads, components, className, style, editor, ...props }: AnchoredThreadsProps): react_jsx_runtime.JSX.Element | null;
26
28
 
27
- declare const FloatingComposer: React.ForwardRefExoticComponent<Omit<ComposerProps<BaseMetadata$1>, "threadId" | "commentId"> & {
29
+ declare const FloatingComposer: react.ForwardRefExoticComponent<Omit<ComposerProps<BaseMetadata$1>, "threadId" | "commentId"> & {
28
30
  editor: Editor | null;
29
- } & React.RefAttributes<HTMLFormElement>>;
31
+ } & react.RefAttributes<HTMLFormElement>>;
30
32
 
31
33
  declare type ThreadPanelComponents = {
32
34
  Thread: ComponentType<ThreadProps>;
@@ -45,7 +47,7 @@ interface FloatingThreadsProps<M extends BaseMetadata = DM> extends Omit<HTMLAtt
45
47
  */
46
48
  editor: Editor | null;
47
49
  }
48
- declare function FloatingThreads({ threads, components, editor, ...props }: FloatingThreadsProps): React.JSX.Element | null;
50
+ declare function FloatingThreads({ threads, components, editor, ...props }: FloatingThreadsProps): react_jsx_runtime.JSX.Element | null;
49
51
 
50
52
  declare type LiveblocksExtensionOptions = {
51
53
  field?: string;
@@ -73,7 +75,7 @@ interface HistoryVersionPreviewProps extends ComponentPropsWithoutRef<"div"> {
73
75
  * @example
74
76
  * <HistoryVersionPreview version={version} />
75
77
  */
76
- declare const HistoryVersionPreview: React.ForwardRefExoticComponent<HistoryVersionPreviewProps & React.RefAttributes<HTMLDivElement>>;
78
+ declare const HistoryVersionPreview: react.ForwardRefExoticComponent<HistoryVersionPreviewProps & react.RefAttributes<HTMLDivElement>>;
77
79
 
78
80
  declare module "@tiptap/core" {
79
81
  interface Commands<ReturnType> {
package/dist/index.d.ts CHANGED
@@ -1,7 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
1
2
  import { BaseMetadata, DM, ThreadData, HistoryVersion } from '@liveblocks/core';
2
3
  import { ThreadProps, ComposerProps } from '@liveblocks/react-ui';
3
4
  import { Editor } from '@tiptap/react';
4
- import React, { ComponentPropsWithoutRef, ComponentType, HTMLAttributes } from 'react';
5
+ import * as react from 'react';
6
+ import { ComponentPropsWithoutRef, ComponentType, HTMLAttributes } from 'react';
5
7
  import { BaseMetadata as BaseMetadata$1 } from '@liveblocks/client';
6
8
  import { Extension, Content } from '@tiptap/core';
7
9
 
@@ -22,11 +24,11 @@ interface AnchoredThreadsProps<M extends BaseMetadata = DM> extends Omit<Compone
22
24
  */
23
25
  editor: Editor | null;
24
26
  }
25
- declare function AnchoredThreads({ threads, components, className, style, editor, ...props }: AnchoredThreadsProps): React.JSX.Element | null;
27
+ declare function AnchoredThreads({ threads, components, className, style, editor, ...props }: AnchoredThreadsProps): react_jsx_runtime.JSX.Element | null;
26
28
 
27
- declare const FloatingComposer: React.ForwardRefExoticComponent<Omit<ComposerProps<BaseMetadata$1>, "threadId" | "commentId"> & {
29
+ declare const FloatingComposer: react.ForwardRefExoticComponent<Omit<ComposerProps<BaseMetadata$1>, "threadId" | "commentId"> & {
28
30
  editor: Editor | null;
29
- } & React.RefAttributes<HTMLFormElement>>;
31
+ } & react.RefAttributes<HTMLFormElement>>;
30
32
 
31
33
  declare type ThreadPanelComponents = {
32
34
  Thread: ComponentType<ThreadProps>;
@@ -45,7 +47,7 @@ interface FloatingThreadsProps<M extends BaseMetadata = DM> extends Omit<HTMLAtt
45
47
  */
46
48
  editor: Editor | null;
47
49
  }
48
- declare function FloatingThreads({ threads, components, editor, ...props }: FloatingThreadsProps): React.JSX.Element | null;
50
+ declare function FloatingThreads({ threads, components, editor, ...props }: FloatingThreadsProps): react_jsx_runtime.JSX.Element | null;
49
51
 
50
52
  declare type LiveblocksExtensionOptions = {
51
53
  field?: string;
@@ -73,7 +75,7 @@ interface HistoryVersionPreviewProps extends ComponentPropsWithoutRef<"div"> {
73
75
  * @example
74
76
  * <HistoryVersionPreview version={version} />
75
77
  */
76
- declare const HistoryVersionPreview: React.ForwardRefExoticComponent<HistoryVersionPreviewProps & React.RefAttributes<HTMLDivElement>>;
78
+ declare const HistoryVersionPreview: react.ForwardRefExoticComponent<HistoryVersionPreviewProps & react.RefAttributes<HTMLDivElement>>;
77
79
 
78
80
  declare module "@tiptap/core" {
79
81
  interface Commands<ReturnType> {
@@ -1,43 +1,50 @@
1
1
  'use strict';
2
2
 
3
- var react = require('@liveblocks/react');
4
- var React = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react$1 = require('@liveblocks/react');
5
+ var react = require('react');
5
6
  var classnames = require('../classnames.js');
6
7
 
7
- const Avatar = React.forwardRef(
8
+ const Avatar = react.forwardRef(
8
9
  function Avatar2(props, forwardedRef) {
9
10
  const { userId, className, ...spanProps } = props;
10
- const { user, isLoading } = react.useUser(userId);
11
+ const { user, isLoading } = react$1.useUser(userId);
11
12
  const avatar = user ? user.avatar : void 0;
12
13
  const name = user ? user.name : void 0;
13
14
  function Initials() {
14
15
  const initials = name ? getInitials(name) : void 0;
15
16
  if (initials) {
16
- return /* @__PURE__ */ React.createElement("span", {
17
+ return /* @__PURE__ */ jsxRuntime.jsx("span", {
17
18
  "aria-hidden": true,
18
- className: "lb-avatar-fallback"
19
- }, initials);
19
+ className: "lb-avatar-fallback",
20
+ children: initials
21
+ });
20
22
  }
21
23
  if (isLoading)
22
24
  return null;
23
25
  if (user === void 0)
24
26
  return null;
25
- return /* @__PURE__ */ React.createElement("span", {
27
+ return /* @__PURE__ */ jsxRuntime.jsx("span", {
26
28
  "aria-label": userId,
27
29
  title: userId,
28
- className: "lb-avatar-fallback"
29
- }, getInitials(userId));
30
+ className: "lb-avatar-fallback",
31
+ children: getInitials(userId)
32
+ });
30
33
  }
31
- return /* @__PURE__ */ React.createElement("span", {
34
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", {
32
35
  "data-loading": isLoading ? "" : void 0,
33
36
  ...spanProps,
34
37
  className: classnames.classNames("lb-avatar", className),
35
- ref: forwardedRef
36
- }, avatar && /* @__PURE__ */ React.createElement("img", {
37
- src: avatar,
38
- alt: name,
39
- className: "lb-avatar-image"
40
- }), /* @__PURE__ */ React.createElement(Initials, null));
38
+ ref: forwardedRef,
39
+ children: [
40
+ avatar && /* @__PURE__ */ jsxRuntime.jsx("img", {
41
+ src: avatar,
42
+ alt: name,
43
+ className: "lb-avatar-image"
44
+ }),
45
+ /* @__PURE__ */ jsxRuntime.jsx(Initials, {})
46
+ ]
47
+ });
41
48
  }
42
49
  );
43
50
  function getInitials(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../src/mentions/Avatar.tsx"],"sourcesContent":["import { useUser } from \"@liveblocks/react\";\nimport type { HTMLAttributes } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n userId: string;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar(props, forwardedRef) {\n const { userId, className, ...spanProps } = props;\n\n const { user, isLoading } = useUser(userId);\n\n const avatar = user ? user.avatar : undefined;\n\n const name = user ? user.name : undefined;\n\n function Initials() {\n const initials = name ? getInitials(name) : undefined;\n if (initials) {\n return (\n <span aria-hidden className=\"lb-avatar-fallback\">\n {initials}\n </span>\n );\n }\n\n if (isLoading) return null;\n\n if (user === undefined) return null;\n\n return (\n <span aria-label={userId} title={userId} className=\"lb-avatar-fallback\">\n {getInitials(userId)}\n </span>\n );\n }\n\n return (\n <span\n data-loading={isLoading ? \"\" : undefined}\n {...spanProps}\n className={classNames(\"lb-avatar\", className)}\n ref={forwardedRef}\n >\n {avatar && <img src={avatar} alt={name} className=\"lb-avatar-image\" />}\n\n <Initials />\n </span>\n );\n }\n);\n\nfunction getInitials(name: string) {\n return name\n .trim()\n .split(\" \")\n .reduce((initials, name, index, array) => {\n if (index === 0 || index === array.length - 1) {\n initials += name.charAt(0).toLocaleUpperCase();\n }\n\n return initials;\n }, \"\");\n}\n"],"names":["forwardRef","Avatar","useUser","classNames","name"],"mappings":";;;;;;AAWO,MAAM,MAAS,GAAAA,gBAAA;AAAA,EACpB,SAASC,OAAO,CAAA,KAAA,EAAO,YAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAc,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE5C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAIC,cAAQ,MAAM,CAAA,CAAA;AAE1C,IAAM,MAAA,MAAA,GAAS,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA,CAAA;AAEpC,IAAM,MAAA,IAAA,GAAO,IAAO,GAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAEhC,IAAA,SAAS,QAAW,GAAA;AAClB,MAAA,MAAM,QAAW,GAAA,IAAA,GAAO,WAAY,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,UAAK,aAAW,EAAA,IAAA;AAAA,UAAC,SAAU,EAAA,oBAAA;AAAA,SAAA,EACzB,QACH,CAAA,CAAA;AAAA,OAEJ;AAEA,MAAI,IAAA,SAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAEtB,MAAA,IAAI,IAAS,KAAA,KAAA,CAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAE/B,MAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,QAAK,YAAY,EAAA,MAAA;AAAA,QAAQ,KAAO,EAAA,MAAA;AAAA,QAAQ,SAAU,EAAA,oBAAA;AAAA,OAChD,EAAA,WAAA,CAAY,MAAM,CACrB,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,MACC,cAAA,EAAc,YAAY,EAAK,GAAA,KAAA,CAAA;AAAA,MAC9B,GAAG,SAAA;AAAA,MACJ,SAAA,EAAWC,qBAAW,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MAC5C,GAAK,EAAA,YAAA;AAAA,KAAA,EAEJ,0BAAW,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MAAI,GAAK,EAAA,MAAA;AAAA,MAAQ,GAAK,EAAA,IAAA;AAAA,MAAM,SAAU,EAAA,iBAAA;AAAA,KAAkB,CAAA,kBAEnE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAS,CACZ,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,SAAS,YAAY,IAAc,EAAA;AACjC,EAAO,OAAA,IAAA,CACJ,IAAK,EAAA,CACL,KAAM,CAAA,GAAG,CACT,CAAA,MAAA,CAAO,CAAC,QAAA,EAAUC,KAAM,EAAA,KAAA,EAAO,KAAU,KAAA;AACxC,IAAA,IAAI,KAAU,KAAA,CAAA,IAAK,KAAU,KAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AAC7C,MAAA,QAAA,IAAYA,KAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/C;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,KACN,EAAE,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../src/mentions/Avatar.tsx"],"sourcesContent":["import { useUser } from \"@liveblocks/react\";\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n userId: string;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar(props, forwardedRef) {\n const { userId, className, ...spanProps } = props;\n\n const { user, isLoading } = useUser(userId);\n\n const avatar = user ? user.avatar : undefined;\n\n const name = user ? user.name : undefined;\n\n function Initials() {\n const initials = name ? getInitials(name) : undefined;\n if (initials) {\n return (\n <span aria-hidden className=\"lb-avatar-fallback\">\n {initials}\n </span>\n );\n }\n\n if (isLoading) return null;\n\n if (user === undefined) return null;\n\n return (\n <span aria-label={userId} title={userId} className=\"lb-avatar-fallback\">\n {getInitials(userId)}\n </span>\n );\n }\n\n return (\n <span\n data-loading={isLoading ? \"\" : undefined}\n {...spanProps}\n className={classNames(\"lb-avatar\", className)}\n ref={forwardedRef}\n >\n {avatar && <img src={avatar} alt={name} className=\"lb-avatar-image\" />}\n\n <Initials />\n </span>\n );\n }\n);\n\nfunction getInitials(name: string) {\n return name\n .trim()\n .split(\" \")\n .reduce((initials, name, index, array) => {\n if (index === 0 || index === array.length - 1) {\n initials += name.charAt(0).toLocaleUpperCase();\n }\n\n return initials;\n }, \"\");\n}\n"],"names":["forwardRef","Avatar","useUser","jsx","jsxs","classNames","name"],"mappings":";;;;;;;AAWO,MAAM,MAAS,GAAAA,gBAAA;AAAA,EACpB,SAASC,OAAO,CAAA,KAAA,EAAO,YAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAc,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE5C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAIC,gBAAQ,MAAM,CAAA,CAAA;AAE1C,IAAM,MAAA,MAAA,GAAS,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA,CAAA;AAEpC,IAAM,MAAA,IAAA,GAAO,IAAO,GAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAEhC,IAAA,SAAS,QAAW,GAAA;AAClB,MAAA,MAAM,QAAW,GAAA,IAAA,GAAO,WAAY,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,uBACGC,cAAA,CAAA,MAAA,EAAA;AAAA,UAAK,aAAW,EAAA,IAAA;AAAA,UAAC,SAAU,EAAA,oBAAA;AAAA,UACzB,QAAA,EAAA,QAAA;AAAA,SACH,CAAA,CAAA;AAAA,OAEJ;AAEA,MAAI,IAAA,SAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAEtB,MAAA,IAAI,IAAS,KAAA,KAAA,CAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAE/B,MAAA,uBACGA,cAAA,CAAA,MAAA,EAAA;AAAA,QAAK,YAAY,EAAA,MAAA;AAAA,QAAQ,KAAO,EAAA,MAAA;AAAA,QAAQ,SAAU,EAAA,oBAAA;AAAA,QAChD,sBAAY,MAAM,CAAA;AAAA,OACrB,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,uBACGC,eAAA,CAAA,MAAA,EAAA;AAAA,MACC,cAAA,EAAc,YAAY,EAAK,GAAA,KAAA,CAAA;AAAA,MAC9B,GAAG,SAAA;AAAA,MACJ,SAAA,EAAWC,qBAAW,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MAC5C,GAAK,EAAA,YAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAA,MAAA,oBAAWF,cAAA,CAAA,KAAA,EAAA;AAAA,UAAI,GAAK,EAAA,MAAA;AAAA,UAAQ,GAAK,EAAA,IAAA;AAAA,UAAM,SAAU,EAAA,iBAAA;AAAA,SAAkB,CAAA;AAAA,uCAEnE,QAAS,EAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,SAAS,YAAY,IAAc,EAAA;AACjC,EAAO,OAAA,IAAA,CACJ,IAAK,EAAA,CACL,KAAM,CAAA,GAAG,CACT,CAAA,MAAA,CAAO,CAAC,QAAA,EAAUG,KAAM,EAAA,KAAA,EAAO,KAAU,KAAA;AACxC,IAAA,IAAI,KAAU,KAAA,CAAA,IAAK,KAAU,KAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AAC7C,MAAA,QAAA,IAAYA,KAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/C;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,KACN,EAAE,CAAA,CAAA;AACT;;;;"}
@@ -1,5 +1,6 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
1
2
  import { useUser } from '@liveblocks/react';
2
- import React, { forwardRef } from 'react';
3
+ import { forwardRef } from 'react';
3
4
  import { classNames } from '../classnames.mjs';
4
5
 
5
6
  const Avatar = forwardRef(
@@ -11,31 +12,37 @@ const Avatar = forwardRef(
11
12
  function Initials() {
12
13
  const initials = name ? getInitials(name) : void 0;
13
14
  if (initials) {
14
- return /* @__PURE__ */ React.createElement("span", {
15
+ return /* @__PURE__ */ jsx("span", {
15
16
  "aria-hidden": true,
16
- className: "lb-avatar-fallback"
17
- }, initials);
17
+ className: "lb-avatar-fallback",
18
+ children: initials
19
+ });
18
20
  }
19
21
  if (isLoading)
20
22
  return null;
21
23
  if (user === void 0)
22
24
  return null;
23
- return /* @__PURE__ */ React.createElement("span", {
25
+ return /* @__PURE__ */ jsx("span", {
24
26
  "aria-label": userId,
25
27
  title: userId,
26
- className: "lb-avatar-fallback"
27
- }, getInitials(userId));
28
+ className: "lb-avatar-fallback",
29
+ children: getInitials(userId)
30
+ });
28
31
  }
29
- return /* @__PURE__ */ React.createElement("span", {
32
+ return /* @__PURE__ */ jsxs("span", {
30
33
  "data-loading": isLoading ? "" : void 0,
31
34
  ...spanProps,
32
35
  className: classNames("lb-avatar", className),
33
- ref: forwardedRef
34
- }, avatar && /* @__PURE__ */ React.createElement("img", {
35
- src: avatar,
36
- alt: name,
37
- className: "lb-avatar-image"
38
- }), /* @__PURE__ */ React.createElement(Initials, null));
36
+ ref: forwardedRef,
37
+ children: [
38
+ avatar && /* @__PURE__ */ jsx("img", {
39
+ src: avatar,
40
+ alt: name,
41
+ className: "lb-avatar-image"
42
+ }),
43
+ /* @__PURE__ */ jsx(Initials, {})
44
+ ]
45
+ });
39
46
  }
40
47
  );
41
48
  function getInitials(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.mjs","sources":["../../src/mentions/Avatar.tsx"],"sourcesContent":["import { useUser } from \"@liveblocks/react\";\nimport type { HTMLAttributes } from \"react\";\nimport React, { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n userId: string;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar(props, forwardedRef) {\n const { userId, className, ...spanProps } = props;\n\n const { user, isLoading } = useUser(userId);\n\n const avatar = user ? user.avatar : undefined;\n\n const name = user ? user.name : undefined;\n\n function Initials() {\n const initials = name ? getInitials(name) : undefined;\n if (initials) {\n return (\n <span aria-hidden className=\"lb-avatar-fallback\">\n {initials}\n </span>\n );\n }\n\n if (isLoading) return null;\n\n if (user === undefined) return null;\n\n return (\n <span aria-label={userId} title={userId} className=\"lb-avatar-fallback\">\n {getInitials(userId)}\n </span>\n );\n }\n\n return (\n <span\n data-loading={isLoading ? \"\" : undefined}\n {...spanProps}\n className={classNames(\"lb-avatar\", className)}\n ref={forwardedRef}\n >\n {avatar && <img src={avatar} alt={name} className=\"lb-avatar-image\" />}\n\n <Initials />\n </span>\n );\n }\n);\n\nfunction getInitials(name: string) {\n return name\n .trim()\n .split(\" \")\n .reduce((initials, name, index, array) => {\n if (index === 0 || index === array.length - 1) {\n initials += name.charAt(0).toLocaleUpperCase();\n }\n\n return initials;\n }, \"\");\n}\n"],"names":["Avatar","name"],"mappings":";;;;AAWO,MAAM,MAAS,GAAA,UAAA;AAAA,EACpB,SAASA,OAAO,CAAA,KAAA,EAAO,YAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAc,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE5C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAI,QAAQ,MAAM,CAAA,CAAA;AAE1C,IAAM,MAAA,MAAA,GAAS,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA,CAAA;AAEpC,IAAM,MAAA,IAAA,GAAO,IAAO,GAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAEhC,IAAA,SAAS,QAAW,GAAA;AAClB,MAAA,MAAM,QAAW,GAAA,IAAA,GAAO,WAAY,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,UAAK,aAAW,EAAA,IAAA;AAAA,UAAC,SAAU,EAAA,oBAAA;AAAA,SAAA,EACzB,QACH,CAAA,CAAA;AAAA,OAEJ;AAEA,MAAI,IAAA,SAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAEtB,MAAA,IAAI,IAAS,KAAA,KAAA,CAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAE/B,MAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,QAAK,YAAY,EAAA,MAAA;AAAA,QAAQ,KAAO,EAAA,MAAA;AAAA,QAAQ,SAAU,EAAA,oBAAA;AAAA,OAChD,EAAA,WAAA,CAAY,MAAM,CACrB,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,MACC,cAAA,EAAc,YAAY,EAAK,GAAA,KAAA,CAAA;AAAA,MAC9B,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,UAAW,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MAC5C,GAAK,EAAA,YAAA;AAAA,KAAA,EAEJ,0BAAW,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MAAI,GAAK,EAAA,MAAA;AAAA,MAAQ,GAAK,EAAA,IAAA;AAAA,MAAM,SAAU,EAAA,iBAAA;AAAA,KAAkB,CAAA,kBAEnE,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAS,CACZ,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,SAAS,YAAY,IAAc,EAAA;AACjC,EAAO,OAAA,IAAA,CACJ,IAAK,EAAA,CACL,KAAM,CAAA,GAAG,CACT,CAAA,MAAA,CAAO,CAAC,QAAA,EAAUC,KAAM,EAAA,KAAA,EAAO,KAAU,KAAA;AACxC,IAAA,IAAI,KAAU,KAAA,CAAA,IAAK,KAAU,KAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AAC7C,MAAA,QAAA,IAAYA,KAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/C;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,KACN,EAAE,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"Avatar.mjs","sources":["../../src/mentions/Avatar.tsx"],"sourcesContent":["import { useUser } from \"@liveblocks/react\";\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n userId: string;\n}\n\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n function Avatar(props, forwardedRef) {\n const { userId, className, ...spanProps } = props;\n\n const { user, isLoading } = useUser(userId);\n\n const avatar = user ? user.avatar : undefined;\n\n const name = user ? user.name : undefined;\n\n function Initials() {\n const initials = name ? getInitials(name) : undefined;\n if (initials) {\n return (\n <span aria-hidden className=\"lb-avatar-fallback\">\n {initials}\n </span>\n );\n }\n\n if (isLoading) return null;\n\n if (user === undefined) return null;\n\n return (\n <span aria-label={userId} title={userId} className=\"lb-avatar-fallback\">\n {getInitials(userId)}\n </span>\n );\n }\n\n return (\n <span\n data-loading={isLoading ? \"\" : undefined}\n {...spanProps}\n className={classNames(\"lb-avatar\", className)}\n ref={forwardedRef}\n >\n {avatar && <img src={avatar} alt={name} className=\"lb-avatar-image\" />}\n\n <Initials />\n </span>\n );\n }\n);\n\nfunction getInitials(name: string) {\n return name\n .trim()\n .split(\" \")\n .reduce((initials, name, index, array) => {\n if (index === 0 || index === array.length - 1) {\n initials += name.charAt(0).toLocaleUpperCase();\n }\n\n return initials;\n }, \"\");\n}\n"],"names":["Avatar","name"],"mappings":";;;;;AAWO,MAAM,MAAS,GAAA,UAAA;AAAA,EACpB,SAASA,OAAO,CAAA,KAAA,EAAO,YAAc,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAc,EAAA,GAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE5C,IAAA,MAAM,EAAE,IAAA,EAAM,SAAU,EAAA,GAAI,QAAQ,MAAM,CAAA,CAAA;AAE1C,IAAM,MAAA,MAAA,GAAS,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA,CAAA;AAEpC,IAAM,MAAA,IAAA,GAAO,IAAO,GAAA,IAAA,CAAK,IAAO,GAAA,KAAA,CAAA,CAAA;AAEhC,IAAA,SAAS,QAAW,GAAA;AAClB,MAAA,MAAM,QAAW,GAAA,IAAA,GAAO,WAAY,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA,CAAA;AAC5C,MAAA,IAAI,QAAU,EAAA;AACZ,QAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,UAAK,aAAW,EAAA,IAAA;AAAA,UAAC,SAAU,EAAA,oBAAA;AAAA,UACzB,QAAA,EAAA,QAAA;AAAA,SACH,CAAA,CAAA;AAAA,OAEJ;AAEA,MAAI,IAAA,SAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAEtB,MAAA,IAAI,IAAS,KAAA,KAAA,CAAA;AAAW,QAAO,OAAA,IAAA,CAAA;AAE/B,MAAA,uBACG,GAAA,CAAA,MAAA,EAAA;AAAA,QAAK,YAAY,EAAA,MAAA;AAAA,QAAQ,KAAO,EAAA,MAAA;AAAA,QAAQ,SAAU,EAAA,oBAAA;AAAA,QAChD,sBAAY,MAAM,CAAA;AAAA,OACrB,CAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,uBACG,IAAA,CAAA,MAAA,EAAA;AAAA,MACC,cAAA,EAAc,YAAY,EAAK,GAAA,KAAA,CAAA;AAAA,MAC9B,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,UAAW,CAAA,WAAA,EAAa,SAAS,CAAA;AAAA,MAC5C,GAAK,EAAA,YAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAA,MAAA,oBAAW,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,GAAK,EAAA,MAAA;AAAA,UAAQ,GAAK,EAAA,IAAA;AAAA,UAAM,SAAU,EAAA,iBAAA;AAAA,SAAkB,CAAA;AAAA,4BAEnE,QAAS,EAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KACZ,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAEA,SAAS,YAAY,IAAc,EAAA;AACjC,EAAO,OAAA,IAAA,CACJ,IAAK,EAAA,CACL,KAAM,CAAA,GAAG,CACT,CAAA,MAAA,CAAO,CAAC,QAAA,EAAUC,KAAM,EAAA,KAAA,EAAO,KAAU,KAAA;AACxC,IAAA,IAAI,KAAU,KAAA,CAAA,IAAK,KAAU,KAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AAC7C,MAAA,QAAA,IAAYA,KAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,iBAAkB,EAAA,CAAA;AAAA,KAC/C;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,KACN,EAAE,CAAA,CAAA;AACT;;;;"}
@@ -1,22 +1,27 @@
1
1
  'use strict';
2
2
 
3
- var react = require('@tiptap/react');
4
- var React = require('react');
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react$1 = require('@tiptap/react');
5
+ var react = require('react');
5
6
  var classnames = require('../classnames.js');
6
7
  var MentionsList = require('./MentionsList.js');
7
8
 
8
9
  const MENTION_CHARACTER = "@";
9
- const Mention = React.forwardRef(
10
+ const Mention = react.forwardRef(
10
11
  (props, forwardedRef) => {
11
12
  const id = props.node.attrs.id;
12
13
  const classnames$1 = classnames.classNames("lb-root", "lb-tiptap-mention", props.selected ? "lb-mention-selected" : null);
13
- return /* @__PURE__ */ React.createElement(react.NodeViewWrapper, {
14
+ return /* @__PURE__ */ jsxRuntime.jsxs(react$1.NodeViewWrapper, {
14
15
  className: classnames$1,
15
16
  as: "span",
16
- ref: forwardedRef
17
- }, MENTION_CHARACTER, /* @__PURE__ */ React.createElement(MentionsList.User, {
18
- userId: id
19
- }));
17
+ ref: forwardedRef,
18
+ children: [
19
+ MENTION_CHARACTER,
20
+ /* @__PURE__ */ jsxRuntime.jsx(MentionsList.User, {
21
+ userId: id
22
+ })
23
+ ]
24
+ });
20
25
  }
21
26
  );
22
27
 
@@ -1 +1 @@
1
- {"version":3,"file":"Mention.js","sources":["../../src/mentions/Mention.tsx"],"sourcesContent":["import type { Node } from \"@tiptap/pm/model\";\nimport { NodeViewWrapper } from \"@tiptap/react\";\nimport React, { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { User } from \"./MentionsList\";\n\nconst MENTION_CHARACTER = \"@\";\n\nexport const Mention = forwardRef<HTMLSpanElement, { node: Node, selected: boolean }>(\n (props, forwardedRef) => {\n const id = (props.node.attrs as { id: string }).id;\n const classnames = classNames(\"lb-root\", \"lb-tiptap-mention\", props.selected ? \"lb-mention-selected\" : null);\n return (\n <NodeViewWrapper className={classnames} as=\"span\"\n ref={forwardedRef}>\n {MENTION_CHARACTER}\n <User userId={id} />\n </NodeViewWrapper>\n )\n }\n);\n"],"names":["forwardRef","classnames","classNames","NodeViewWrapper","User"],"mappings":";;;;;;;AAOA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAEnB,MAAM,OAAU,GAAAA,gBAAA;AAAA,EACrB,CAAC,OAAO,YAAiB,KAAA;AACvB,IAAM,MAAA,EAAA,GAAM,KAAM,CAAA,IAAA,CAAK,KAAyB,CAAA,EAAA,CAAA;AAChD,IAAA,MAAMC,eAAaC,qBAAW,CAAA,SAAA,EAAW,qBAAqB,KAAM,CAAA,QAAA,GAAW,wBAAwB,IAAI,CAAA,CAAA;AAC3G,IAAA,uBACG,KAAA,CAAA,aAAA,CAAAC,qBAAA,EAAA;AAAA,MAAgB,SAAW,EAAAF,YAAA;AAAA,MAAY,EAAG,EAAA,MAAA;AAAA,MACzC,GAAK,EAAA,YAAA;AAAA,KAAA,EACJ,mCACA,KAAA,CAAA,aAAA,CAAAG,iBAAA,EAAA;AAAA,MAAK,MAAQ,EAAA,EAAA;AAAA,KAAI,CACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Mention.js","sources":["../../src/mentions/Mention.tsx"],"sourcesContent":["import type { Node } from \"@tiptap/pm/model\";\nimport { NodeViewWrapper } from \"@tiptap/react\";\nimport { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { User } from \"./MentionsList\";\n\nconst MENTION_CHARACTER = \"@\";\n\nexport const Mention = forwardRef<HTMLSpanElement, { node: Node, selected: boolean }>(\n (props, forwardedRef) => {\n const id = (props.node.attrs as { id: string }).id;\n const classnames = classNames(\"lb-root\", \"lb-tiptap-mention\", props.selected ? \"lb-mention-selected\" : null);\n return (\n <NodeViewWrapper className={classnames} as=\"span\"\n ref={forwardedRef}>\n {MENTION_CHARACTER}\n <User userId={id} />\n </NodeViewWrapper>\n )\n }\n);\n"],"names":["forwardRef","classnames","classNames","jsxs","NodeViewWrapper","jsx","User"],"mappings":";;;;;;;;AAOA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAEnB,MAAM,OAAU,GAAAA,gBAAA;AAAA,EACrB,CAAC,OAAO,YAAiB,KAAA;AACvB,IAAM,MAAA,EAAA,GAAM,KAAM,CAAA,IAAA,CAAK,KAAyB,CAAA,EAAA,CAAA;AAChD,IAAA,MAAMC,eAAaC,qBAAW,CAAA,SAAA,EAAW,qBAAqB,KAAM,CAAA,QAAA,GAAW,wBAAwB,IAAI,CAAA,CAAA;AAC3G,IAAA,uBACGC,eAAA,CAAAC,uBAAA,EAAA;AAAA,MAAgB,SAAW,EAAAH,YAAA;AAAA,MAAY,EAAG,EAAA,MAAA;AAAA,MACzC,GAAK,EAAA,YAAA;AAAA,MACJ,QAAA,EAAA;AAAA,QAAA,iBAAA;AAAA,wBACAI,cAAA,CAAAC,iBAAA,EAAA;AAAA,UAAK,MAAQ,EAAA,EAAA;AAAA,SAAI,CAAA;AAAA,OAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -1,5 +1,6 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
1
2
  import { NodeViewWrapper } from '@tiptap/react';
2
- import React, { forwardRef } from 'react';
3
+ import { forwardRef } from 'react';
3
4
  import { classNames } from '../classnames.mjs';
4
5
  import { User } from './MentionsList.mjs';
5
6
 
@@ -8,13 +9,17 @@ const Mention = forwardRef(
8
9
  (props, forwardedRef) => {
9
10
  const id = props.node.attrs.id;
10
11
  const classnames = classNames("lb-root", "lb-tiptap-mention", props.selected ? "lb-mention-selected" : null);
11
- return /* @__PURE__ */ React.createElement(NodeViewWrapper, {
12
+ return /* @__PURE__ */ jsxs(NodeViewWrapper, {
12
13
  className: classnames,
13
14
  as: "span",
14
- ref: forwardedRef
15
- }, MENTION_CHARACTER, /* @__PURE__ */ React.createElement(User, {
16
- userId: id
17
- }));
15
+ ref: forwardedRef,
16
+ children: [
17
+ MENTION_CHARACTER,
18
+ /* @__PURE__ */ jsx(User, {
19
+ userId: id
20
+ })
21
+ ]
22
+ });
18
23
  }
19
24
  );
20
25
 
@@ -1 +1 @@
1
- {"version":3,"file":"Mention.mjs","sources":["../../src/mentions/Mention.tsx"],"sourcesContent":["import type { Node } from \"@tiptap/pm/model\";\nimport { NodeViewWrapper } from \"@tiptap/react\";\nimport React, { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { User } from \"./MentionsList\";\n\nconst MENTION_CHARACTER = \"@\";\n\nexport const Mention = forwardRef<HTMLSpanElement, { node: Node, selected: boolean }>(\n (props, forwardedRef) => {\n const id = (props.node.attrs as { id: string }).id;\n const classnames = classNames(\"lb-root\", \"lb-tiptap-mention\", props.selected ? \"lb-mention-selected\" : null);\n return (\n <NodeViewWrapper className={classnames} as=\"span\"\n ref={forwardedRef}>\n {MENTION_CHARACTER}\n <User userId={id} />\n </NodeViewWrapper>\n )\n }\n);\n"],"names":[],"mappings":";;;;;AAOA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAEnB,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,CAAC,OAAO,YAAiB,KAAA;AACvB,IAAM,MAAA,EAAA,GAAM,KAAM,CAAA,IAAA,CAAK,KAAyB,CAAA,EAAA,CAAA;AAChD,IAAA,MAAM,aAAa,UAAW,CAAA,SAAA,EAAW,qBAAqB,KAAM,CAAA,QAAA,GAAW,wBAAwB,IAAI,CAAA,CAAA;AAC3G,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,eAAA,EAAA;AAAA,MAAgB,SAAW,EAAA,UAAA;AAAA,MAAY,EAAG,EAAA,MAAA;AAAA,MACzC,GAAK,EAAA,YAAA;AAAA,KAAA,EACJ,mCACA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA;AAAA,MAAK,MAAQ,EAAA,EAAA;AAAA,KAAI,CACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
1
+ {"version":3,"file":"Mention.mjs","sources":["../../src/mentions/Mention.tsx"],"sourcesContent":["import type { Node } from \"@tiptap/pm/model\";\nimport { NodeViewWrapper } from \"@tiptap/react\";\nimport { forwardRef } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport { User } from \"./MentionsList\";\n\nconst MENTION_CHARACTER = \"@\";\n\nexport const Mention = forwardRef<HTMLSpanElement, { node: Node, selected: boolean }>(\n (props, forwardedRef) => {\n const id = (props.node.attrs as { id: string }).id;\n const classnames = classNames(\"lb-root\", \"lb-tiptap-mention\", props.selected ? \"lb-mention-selected\" : null);\n return (\n <NodeViewWrapper className={classnames} as=\"span\"\n ref={forwardedRef}>\n {MENTION_CHARACTER}\n <User userId={id} />\n </NodeViewWrapper>\n )\n }\n);\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,iBAAoB,GAAA,GAAA,CAAA;AAEnB,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,CAAC,OAAO,YAAiB,KAAA;AACvB,IAAM,MAAA,EAAA,GAAM,KAAM,CAAA,IAAA,CAAK,KAAyB,CAAA,EAAA,CAAA;AAChD,IAAA,MAAM,aAAa,UAAW,CAAA,SAAA,EAAW,qBAAqB,KAAM,CAAA,QAAA,GAAW,wBAAwB,IAAI,CAAA,CAAA;AAC3G,IAAA,uBACG,IAAA,CAAA,eAAA,EAAA;AAAA,MAAgB,SAAW,EAAA,UAAA;AAAA,MAAY,EAAG,EAAA,MAAA;AAAA,MACzC,GAAK,EAAA,YAAA;AAAA,MACJ,QAAA,EAAA;AAAA,QAAA,iBAAA;AAAA,wBACA,GAAA,CAAA,IAAA,EAAA;AAAA,UAAK,MAAQ,EAAA,EAAA;AAAA,SAAI,CAAA;AAAA,OAAA;AAAA,KACpB,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -1,31 +1,33 @@
1
1
  'use strict';
2
2
 
3
+ var jsxRuntime = require('react/jsx-runtime');
3
4
  var reactDom = require('@floating-ui/react-dom');
4
5
  var core = require('@liveblocks/core');
5
- var react = require('@liveblocks/react');
6
+ var react$1 = require('@liveblocks/react');
6
7
  var _private = require('@liveblocks/react/_private');
7
8
  var reactUi = require('@liveblocks/react-ui');
8
- var React = require('react');
9
+ var react = require('react');
9
10
  var Avatar = require('./Avatar.js');
10
11
 
11
- const User = React.forwardRef(
12
+ const User = react.forwardRef(
12
13
  function User2(props, forwardedRef) {
13
14
  const { userId, className, ...spanProps } = props;
14
- const { user, isLoading } = react.useUser(userId);
15
+ const { user, isLoading } = react$1.useUser(userId);
15
16
  const $ = reactUi.useOverrides();
16
17
  const name = user === void 0 || user === null ? $.USER_UNKNOWN : user.name;
17
- return /* @__PURE__ */ React.createElement("span", {
18
+ return /* @__PURE__ */ jsxRuntime.jsx("span", {
18
19
  className,
19
20
  "data-loading": isLoading ? "" : void 0,
20
21
  ref: forwardedRef,
21
- ...spanProps
22
- }, isLoading ? null : name);
22
+ ...spanProps,
23
+ children: isLoading ? null : name
24
+ });
23
25
  }
24
26
  );
25
27
  const SUGGESTIONS_COLLISION_PADDING = 10;
26
- const MentionsList = React.forwardRef((props, ref) => {
27
- const [selectedIndex, setSelectedIndex] = React.useState(0);
28
- const room = react.useRoom();
28
+ const MentionsList = react.forwardRef((props, ref) => {
29
+ const [selectedIndex, setSelectedIndex] = react.useState(0);
30
+ const room = react$1.useRoom();
29
31
  const suggestions = _private.useMentionSuggestions(room.id, props.query);
30
32
  const { onMouseEnter, onClick } = props;
31
33
  const {
@@ -49,7 +51,7 @@ const MentionsList = React.forwardRef((props, ref) => {
49
51
  });
50
52
  }
51
53
  });
52
- React.useLayoutEffect(() => {
54
+ react.useLayoutEffect(() => {
53
55
  setReference({
54
56
  getBoundingClientRect: props.clientRect
55
57
  });
@@ -69,8 +71,8 @@ const MentionsList = React.forwardRef((props, ref) => {
69
71
  const enterHandler = () => {
70
72
  selectItem(selectedIndex);
71
73
  };
72
- React.useEffect(() => setSelectedIndex(0), [suggestions]);
73
- React.useImperativeHandle(ref, () => ({
74
+ react.useEffect(() => setSelectedIndex(0), [suggestions]);
75
+ react.useImperativeHandle(ref, () => ({
74
76
  onKeyDown: ({ event }) => {
75
77
  if (event.key === "ArrowUp") {
76
78
  upHandler();
@@ -102,7 +104,7 @@ const MentionsList = React.forwardRef((props, ref) => {
102
104
  if (suggestions === void 0 || suggestions.length === 0) {
103
105
  return null;
104
106
  }
105
- return /* @__PURE__ */ React.createElement("div", {
107
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
106
108
  className: "lb-root lb-portal lb-elevation lb-tiptap-suggestions lb-tiptap-mention-suggestions",
107
109
  ref: setFloating,
108
110
  style: {
@@ -112,23 +114,28 @@ const MentionsList = React.forwardRef((props, ref) => {
112
114
  transform: `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`,
113
115
  minWidth: "max-content",
114
116
  display: props.hide ? "none" : "block"
115
- }
116
- }, /* @__PURE__ */ React.createElement("div", {
117
- className: "lb-tiptap-suggestions-list lb-tiptap-mention-suggestions-list"
118
- }, suggestions.map((item, index) => /* @__PURE__ */ React.createElement("div", {
119
- className: "lb-tiptap-suggestions-list-item lb-tiptap-mention-suggestion",
120
- key: index,
121
- role: "option",
122
- "data-highlighted": index === selectedIndex || void 0,
123
- onMouseEnter: handleMouseEnter(index),
124
- onClick: handleClick(index)
125
- }, /* @__PURE__ */ React.createElement(Avatar.Avatar, {
126
- userId: item,
127
- className: "lb-tiptap-mention-suggestion-avatar"
128
- }), /* @__PURE__ */ React.createElement(User, {
129
- userId: item,
130
- className: "lb-tiptap-mention-suggestion-user"
131
- })))));
117
+ },
118
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", {
119
+ className: "lb-tiptap-suggestions-list lb-tiptap-mention-suggestions-list",
120
+ children: suggestions.map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs("div", {
121
+ className: "lb-tiptap-suggestions-list-item lb-tiptap-mention-suggestion",
122
+ role: "option",
123
+ "data-highlighted": index === selectedIndex || void 0,
124
+ onMouseEnter: handleMouseEnter(index),
125
+ onClick: handleClick(index),
126
+ children: [
127
+ /* @__PURE__ */ jsxRuntime.jsx(Avatar.Avatar, {
128
+ userId: item,
129
+ className: "lb-tiptap-mention-suggestion-avatar"
130
+ }),
131
+ /* @__PURE__ */ jsxRuntime.jsx(User, {
132
+ userId: item,
133
+ className: "lb-tiptap-mention-suggestion-user"
134
+ })
135
+ ]
136
+ }, index))
137
+ })
138
+ });
132
139
  });
133
140
 
134
141
  exports.MentionsList = MentionsList;