@liveblocks/react-lexical 2.0.0-alpha3 → 2.0.0-alpha4
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.
- package/dist/comments/comment-plugin-provider.js +19 -10
- package/dist/comments/comment-plugin-provider.js.map +1 -1
- package/dist/comments/comment-plugin-provider.mjs +20 -13
- package/dist/comments/comment-plugin-provider.mjs.map +1 -1
- package/dist/comments/floating-composer.js.map +1 -1
- package/dist/comments/floating-composer.mjs.map +1 -1
- package/dist/index.d.mts +119 -24
- package/dist/index.d.ts +119 -24
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -3
- package/dist/index.mjs.map +1 -1
- package/dist/liveblocks-config.js.map +1 -1
- package/dist/liveblocks-config.mjs.map +1 -1
- package/dist/liveblocks-plugin-provider.js +72 -1
- package/dist/liveblocks-plugin-provider.js.map +1 -1
- package/dist/liveblocks-plugin-provider.mjs +74 -4
- package/dist/liveblocks-plugin-provider.mjs.map +1 -1
- package/dist/mentions/mention-component.js +1 -1
- package/dist/mentions/mention-component.js.map +1 -1
- package/dist/mentions/mention-component.mjs +1 -1
- package/dist/mentions/mention-component.mjs.map +1 -1
- package/dist/mentions/mention-plugin.js +0 -12
- package/dist/mentions/mention-plugin.js.map +1 -1
- package/dist/mentions/mention-plugin.mjs +1 -13
- package/dist/mentions/mention-plugin.mjs.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +6 -6
- package/src/styles/index.css +1 -24
- package/styles.css +1 -1
- package/styles.css.map +1 -1
- package/dist/comments/ThreadPanel.js +0 -51
- package/dist/comments/ThreadPanel.js.map +0 -1
- package/dist/comments/ThreadPanel.mjs +0 -49
- package/dist/comments/ThreadPanel.mjs.map +0 -1
package/styles.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.lb-lexical-
|
|
1
|
+
.lb-lexical-suggestions-list{margin:0;padding:0;list-style:none}.lb-lexical-mention-suggestions{--lb-lexical-mention-suggestion-avatar-size:1.25rem}.lb-lexical-mention-suggestion{padding:calc(.375*var(--lb-spacing))calc(.625*var(--lb-spacing))}.lb-lexical-mention-suggestion-avatar{inline-size:var(--lb-lexical-mention-suggestion-avatar-size);margin-inline-start:calc(-.125*var(--lb-spacing));margin-inline-end:calc(.5*var(--lb-spacing));margin-block:calc(.125*var(--lb-spacing));background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate)}.lb-lexical-suggestions{animation-duration:var(--lb-transition-duration);animation-timing-function:var(--lb-transition-easing);will-change:transform,opacity;padding:4px}.lb-lexical-suggestions-list-item{padding:calc(.25*var(--lb-spacing))calc(.5*var(--lb-spacing));border-radius:calc(var(--lb-radius) - .75*4px);color:var(--lb-foreground-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;align-items:center;scroll-margin-block:4px;font-size:.875rem;transition-property:background,color,opacity;display:flex}.lb-lexical-suggestions-list-item:where([data-highlighted],[data-selected]){background:var(--lb-foreground-subtle);transition-duration:calc(var(--lb-transition-duration)/2)}.lb-lexical-suggestions-list-item:where(:disabled,[data-disabled]){opacity:.5;cursor:not-allowed}.lb-lexical-suggestions:where([data-side=top]){animation-name:lb-animation-slide-up}.lb-lexical-suggestions:where([data-side=bottom]){animation-name:lb-animation-slide-down}.lb-lexical-suggestions:where([data-state=closed]){animation-name:lb-animation-disappear}.lb-lexical-mention{border-radius:calc(.675*var(--lb-radius));background:var(--lb-accent-subtle);color:var(--lb-accent);-webkit-box-decoration-break:clone;box-decoration-break:clone;padding:.1em .3em;font-weight:500}.lb-lexical-mention::selection{background:0 0}.lb-lexical-mention ::selection{background:0 0}.lb-lexical-mention:where([data-selected]){background:var(--lb-accent);color:var(--lb-accent-foreground)}.lb-lexical-active-selection{background-color:var(--lb-selection)}.lb-thread-mark{background:var(--lb-accent-subtle);color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}.lb-thread-mark:where([data-state=active]){color:var(--lb-accent);-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate)}@media (prefers-reduced-motion){.lb-lexical-suggestions:where(:not([data-state=closed])){animation-name:lb-animation-appear}}
|
package/styles.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"AAOA,6BAAA,QAAA,CAAA,SAAA,CAAA,eAAA,CAUA,gCAAA,mDAAA,CAIA,+BAAA,gEAAA,CAIA,sCAAA,4DAAA,CAAA,iDAAA,CAAA,4CAAA,CAAA,yCAAA,CAAA,sCAAA,CAAA,mCAAA,CAaA,wBAAA,gDAAA,CAAA,qDAAA,CAAA,6BAAA,CAAA,WAAA,CAOA,kCAAA,6DAAA,CAAA,8CAAA,CAAA,oCAAA,CAAA,cAAA,CAAA,wBAAA,CAAA,gBAAA,CAAA,YAAA,CAAA,kBAAA,CAAA,uBAAA,CAAA,iBAAA,CAAA,4CAAA,CAAA,YAAA,CAeE,4EAAA,sCAAA,CAAA,yDAAA,CAKA,mEAAA,UAAA,CAAA,kBAAA,CAWA,+CAAA,oCAAA,CAIA,kDAAA,sCAAA,CAIA,mDAAA,qCAAA,CAeF,oBAAA,yCAAA,CAAA,kCAAA,CAAA,sBAAA,CAAA,kCAAA,CAAA,0BAAA,CAAA,iBAAA,CAAA,eAAA,CClGE,+BAAA,cAAA,CAAA,gCAAA,cAAA,CD4GA,2CAAA,2BAAA,CAAA,iCAAA,CAUF,6BAAA,oCAAA,CAQA,gBAAA,kCAAA,CAAA,0BAAA,CAAA,8BAAA,CAAA,2DAAA,CAAA,mDAAA,CAAA,yBAAA,CAAA,YAAA,CAAA,eAAA,CAAA,+CAAA,CAUE,2CAAA,sBAAA,CAAA,uDAAA,CAAA,+CAAA,CAhDF,gCACE,yDAAA,kCAAA,CAAA","file":"styles.css","sourcesContent":["@import \"./utils\";\n@import \"./constants\";\n\n/*************************************\n * Suggestions *\n *************************************/\n\n.lb-lexical-suggestions-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n/*************************************\n * Mention suggestions *\n *************************************/\n\n.lb-lexical-mention-suggestions {\n --lb-lexical-mention-suggestion-avatar-size: 1.25rem;\n}\n\n.lb-lexical-mention-suggestion {\n padding: calc(0.375 * var(--lb-spacing)) calc(0.625 * var(--lb-spacing));\n}\n\n.lb-lexical-mention-suggestion-avatar {\n inline-size: var(--lb-lexical-mention-suggestion-avatar-size);\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.5 * var(--lb-spacing));\n margin-block: calc(0.125 * var(--lb-spacing));\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n}\n\n/*************************************\n * Elevation lists *\n *************************************/\n\n.lb-lexical-suggestions {\n padding: $lb-elevation-list-padding;\n animation-duration: var(--lb-transition-duration);\n animation-timing-function: var(--lb-transition-easing);\n will-change: transform, opacity;\n}\n\n.lb-lexical-suggestions-list-item {\n display: flex;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-elevation-list-padding);\n color: var(--lb-foreground-secondary);\n outline: none;\n font-size: 0.875rem;\n cursor: pointer;\n user-select: none;\n transition-property: background, color, opacity;\n scroll-margin-block: $lb-elevation-list-padding;\n}\n\n:is(.lb-lexical-suggestions-list-item) {\n &:where([data-highlighted], [data-selected]) {\n background: var(--lb-foreground-subtle);\n transition-duration: calc(var(--lb-transition-duration) / 2);\n }\n\n &:where(:disabled, [data-disabled]) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n/*************************************\n * Floating animations *\n *************************************/\n\n:is(.lb-lexical-suggestions) {\n &:where([data-side=\"top\"]) {\n animation-name: lb-animation-slide-up;\n }\n\n &:where([data-side=\"bottom\"]) {\n animation-name: lb-animation-slide-down;\n }\n\n &:where([data-state=\"closed\"]) {\n animation-name: lb-animation-disappear;\n }\n}\n\n@media (prefers-reduced-motion) {\n .lb-lexical-suggestions:where(:not([data-state=\"closed\"])) {\n animation-name: lb-animation-appear;\n }\n}\n\n/*************************************\n * Mention *\n *************************************/\n\n.lb-lexical-mention {\n padding: 0.1em 0.3em;\n border-radius: calc(0.675 * var(--lb-radius));\n background: var(--lb-accent-subtle);\n color: var(--lb-accent);\n box-decoration-break: clone;\n font-weight: 500;\n\n @include invisible-selection;\n\n &:where([data-selected]) {\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n }\n}\n\n/*************************************\n * Active selection *\n *************************************/\n\n.lb-lexical-active-selection {\n background-color: var(--lb-selection);\n}\n\n/*************************************\n * Thread Mark *\n *************************************/\n\n.lb-thread-mark {\n background: var(--lb-accent-subtle);\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n\n &:where([data-state=\"active\"]) {\n color: var(--lb-accent);\n text-decoration-color: var(--lb-accent-moderate);\n }\n}\n","@mixin invisible-selection {\n &::selection,\n *::selection {\n background: transparent;\n }\n}\n"]}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var react = require('@liveblocks/react');
|
|
4
|
-
var reactUi = require('@liveblocks/react-ui');
|
|
5
|
-
var React = require('react');
|
|
6
|
-
var classnames = require('../classnames.js');
|
|
7
|
-
var commentPluginProvider = require('./comment-plugin-provider.js');
|
|
8
|
-
|
|
9
|
-
const ThreadWrapper = ({ Thread, isActive, ...props }) => {
|
|
10
|
-
const onDeleteThread = React.useContext(commentPluginProvider.OnDeleteThreadCallback);
|
|
11
|
-
if (onDeleteThread === null) {
|
|
12
|
-
throw new Error("OnDeleteThreadCallback not provided");
|
|
13
|
-
}
|
|
14
|
-
const handleThreadDelete = React.useCallback(
|
|
15
|
-
(thread) => {
|
|
16
|
-
onDeleteThread(thread.id);
|
|
17
|
-
},
|
|
18
|
-
[onDeleteThread]
|
|
19
|
-
);
|
|
20
|
-
return /* @__PURE__ */ React.createElement(Thread, {
|
|
21
|
-
onThreadDelete: handleThreadDelete,
|
|
22
|
-
"data-state": isActive ? "active" : null,
|
|
23
|
-
...props
|
|
24
|
-
});
|
|
25
|
-
};
|
|
26
|
-
const ThreadPanel = React.forwardRef(
|
|
27
|
-
({ components, overrides, className, ...props }, forwardedRef) => {
|
|
28
|
-
const $ = reactUi.useOverrides(overrides);
|
|
29
|
-
const { threads } = react.useThreads();
|
|
30
|
-
const isThreadActive = React.useContext(commentPluginProvider.IsActiveThreadContext);
|
|
31
|
-
const Thread = components?.Thread ?? reactUi.Thread;
|
|
32
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
33
|
-
className: classnames.classNames(className, "lb-root lb-lexical-thread-panel"),
|
|
34
|
-
ref: forwardedRef,
|
|
35
|
-
...props
|
|
36
|
-
}, threads && threads.length > 0 ? threads.map((thread) => {
|
|
37
|
-
return /* @__PURE__ */ React.createElement(ThreadWrapper, {
|
|
38
|
-
Thread,
|
|
39
|
-
isActive: isThreadActive(thread.id),
|
|
40
|
-
key: thread.id,
|
|
41
|
-
thread,
|
|
42
|
-
className: "lb-lexical-thread-panel-thread"
|
|
43
|
-
});
|
|
44
|
-
}) : /* @__PURE__ */ React.createElement("div", {
|
|
45
|
-
className: "lb-lexical-thread-panel-empty"
|
|
46
|
-
}, $.THREAD_PANEL_EMPTY));
|
|
47
|
-
}
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
exports.ThreadPanel = ThreadPanel;
|
|
51
|
-
//# sourceMappingURL=ThreadPanel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadPanel.js","sources":["../../src/comments/ThreadPanel.tsx"],"sourcesContent":["import type { BaseMetadata, ThreadData } from \"@liveblocks/core\";\nimport { useThreads } from \"@liveblocks/react\";\nimport type {\n CommentOverrides,\n ComposerOverrides,\n GlobalOverrides,\n ThreadOverrides,\n ThreadPanelOverrides,\n ThreadProps,\n} from \"@liveblocks/react-ui\";\nimport { Thread as DefaultThread, useOverrides } from \"@liveblocks/react-ui\";\nimport type { ComponentProps, ComponentType } from \"react\";\nimport React, { forwardRef, useCallback, useContext } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport {\n IsActiveThreadContext,\n OnDeleteThreadCallback,\n} from \"./comment-plugin-provider\";\n\ntype ThreadPanelComponents = {\n Thread: ComponentType<ThreadProps>;\n};\n\nexport interface ThreadPanelProps extends ComponentProps<\"div\"> {\n /**\n * Override the component's components.\n */\n components?: Partial<ThreadPanelComponents>;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ThreadPanelOverrides &\n ThreadOverrides &\n CommentOverrides &\n ComposerOverrides\n >;\n}\n\ninterface ThreadWrapperProps extends ThreadProps {\n Thread: ComponentType<ThreadProps>;\n isActive: boolean;\n}\n\nconst ThreadWrapper = ({ Thread, isActive, ...props }: ThreadWrapperProps) => {\n const onDeleteThread = useContext(OnDeleteThreadCallback);\n\n if (onDeleteThread === null) {\n throw new Error(\"OnDeleteThreadCallback not provided\");\n }\n\n const handleThreadDelete = useCallback(\n (thread: ThreadData<BaseMetadata>) => {\n onDeleteThread(thread.id);\n },\n [onDeleteThread]\n );\n\n return (\n <Thread\n onThreadDelete={handleThreadDelete}\n data-state={isActive ? \"active\" : null}\n {...props}\n />\n );\n};\n\nexport const ThreadPanel = forwardRef<HTMLDivElement, ThreadPanelProps>(\n ({ components, overrides, className, ...props }, forwardedRef) => {\n const $ = useOverrides(overrides);\n const { threads } = useThreads();\n const isThreadActive = useContext(IsActiveThreadContext);\n const Thread = components?.Thread ?? DefaultThread;\n\n return (\n <div\n className={classNames(className, \"lb-root lb-lexical-thread-panel\")}\n ref={forwardedRef}\n {...props}\n >\n {threads && threads.length > 0 ? (\n threads.map((thread) => {\n return (\n <ThreadWrapper\n Thread={Thread}\n isActive={isThreadActive(thread.id)}\n key={thread.id}\n thread={thread}\n className=\"lb-lexical-thread-panel-thread\"\n />\n );\n })\n ) : (\n <div className=\"lb-lexical-thread-panel-empty\">\n {$.THREAD_PANEL_EMPTY}\n </div>\n )}\n </div>\n );\n }\n);\n"],"names":["useContext","OnDeleteThreadCallback","useCallback","forwardRef","useOverrides","useThreads","IsActiveThreadContext","DefaultThread","classNames"],"mappings":";;;;;;;;AA+CA,MAAM,gBAAgB,CAAC,EAAE,MAAQ,EAAA,QAAA,EAAA,GAAa,OAAgC,KAAA;AAC5E,EAAM,MAAA,cAAA,GAAiBA,iBAAWC,4CAAsB,CAAA,CAAA;AAExD,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AAAA,GACvD;AAEA,EAAA,MAAM,kBAAqB,GAAAC,iBAAA;AAAA,IACzB,CAAC,MAAqC,KAAA;AACpC,MAAA,cAAA,CAAe,OAAO,EAAE,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACC,cAAgB,EAAA,kBAAA;AAAA,IAChB,YAAA,EAAY,WAAW,QAAW,GAAA,IAAA;AAAA,IACjC,GAAG,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,WAAc,GAAAC,gBAAA;AAAA,EACzB,CAAC,EAAE,UAAA,EAAY,WAAW,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAChE,IAAM,MAAA,CAAA,GAAIC,qBAAa,SAAS,CAAA,CAAA;AAChC,IAAM,MAAA,EAAE,OAAQ,EAAA,GAAIC,gBAAW,EAAA,CAAA;AAC/B,IAAM,MAAA,cAAA,GAAiBL,iBAAWM,2CAAqB,CAAA,CAAA;AACvD,IAAM,MAAA,MAAA,GAAS,YAAY,MAAU,IAAAC,cAAA,CAAA;AAErC,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAA,EAAWC,qBAAW,CAAA,SAAA,EAAW,iCAAiC,CAAA;AAAA,MAClE,GAAK,EAAA,YAAA;AAAA,MACJ,GAAG,KAAA;AAAA,KAAA,EAEH,WAAW,OAAQ,CAAA,MAAA,GAAS,IAC3B,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACtB,MAAA,uBACG,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA;AAAA,QACC,MAAA;AAAA,QACA,QAAA,EAAU,cAAe,CAAA,MAAA,CAAO,EAAE,CAAA;AAAA,QAClC,KAAK,MAAO,CAAA,EAAA;AAAA,QACZ,MAAA;AAAA,QACA,SAAU,EAAA,gCAAA;AAAA,OACZ,CAAA,CAAA;AAAA,KAEH,oBAEA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAU,EAAA,+BAAA;AAAA,KACZ,EAAA,CAAA,CAAE,kBACL,CAEJ,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { useThreads } from '@liveblocks/react';
|
|
2
|
-
import { useOverrides, Thread } from '@liveblocks/react-ui';
|
|
3
|
-
import React__default, { useContext, useCallback, forwardRef } from 'react';
|
|
4
|
-
import { classNames } from '../classnames.mjs';
|
|
5
|
-
import { OnDeleteThreadCallback, IsActiveThreadContext } from './comment-plugin-provider.mjs';
|
|
6
|
-
|
|
7
|
-
const ThreadWrapper = ({ Thread, isActive, ...props }) => {
|
|
8
|
-
const onDeleteThread = useContext(OnDeleteThreadCallback);
|
|
9
|
-
if (onDeleteThread === null) {
|
|
10
|
-
throw new Error("OnDeleteThreadCallback not provided");
|
|
11
|
-
}
|
|
12
|
-
const handleThreadDelete = useCallback(
|
|
13
|
-
(thread) => {
|
|
14
|
-
onDeleteThread(thread.id);
|
|
15
|
-
},
|
|
16
|
-
[onDeleteThread]
|
|
17
|
-
);
|
|
18
|
-
return /* @__PURE__ */ React__default.createElement(Thread, {
|
|
19
|
-
onThreadDelete: handleThreadDelete,
|
|
20
|
-
"data-state": isActive ? "active" : null,
|
|
21
|
-
...props
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
const ThreadPanel = forwardRef(
|
|
25
|
-
({ components, overrides, className, ...props }, forwardedRef) => {
|
|
26
|
-
const $ = useOverrides(overrides);
|
|
27
|
-
const { threads } = useThreads();
|
|
28
|
-
const isThreadActive = useContext(IsActiveThreadContext);
|
|
29
|
-
const Thread$1 = components?.Thread ?? Thread;
|
|
30
|
-
return /* @__PURE__ */ React__default.createElement("div", {
|
|
31
|
-
className: classNames(className, "lb-root lb-lexical-thread-panel"),
|
|
32
|
-
ref: forwardedRef,
|
|
33
|
-
...props
|
|
34
|
-
}, threads && threads.length > 0 ? threads.map((thread) => {
|
|
35
|
-
return /* @__PURE__ */ React__default.createElement(ThreadWrapper, {
|
|
36
|
-
Thread: Thread$1,
|
|
37
|
-
isActive: isThreadActive(thread.id),
|
|
38
|
-
key: thread.id,
|
|
39
|
-
thread,
|
|
40
|
-
className: "lb-lexical-thread-panel-thread"
|
|
41
|
-
});
|
|
42
|
-
}) : /* @__PURE__ */ React__default.createElement("div", {
|
|
43
|
-
className: "lb-lexical-thread-panel-empty"
|
|
44
|
-
}, $.THREAD_PANEL_EMPTY));
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
|
|
48
|
-
export { ThreadPanel };
|
|
49
|
-
//# sourceMappingURL=ThreadPanel.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ThreadPanel.mjs","sources":["../../src/comments/ThreadPanel.tsx"],"sourcesContent":["import type { BaseMetadata, ThreadData } from \"@liveblocks/core\";\nimport { useThreads } from \"@liveblocks/react\";\nimport type {\n CommentOverrides,\n ComposerOverrides,\n GlobalOverrides,\n ThreadOverrides,\n ThreadPanelOverrides,\n ThreadProps,\n} from \"@liveblocks/react-ui\";\nimport { Thread as DefaultThread, useOverrides } from \"@liveblocks/react-ui\";\nimport type { ComponentProps, ComponentType } from \"react\";\nimport React, { forwardRef, useCallback, useContext } from \"react\";\n\nimport { classNames } from \"../classnames\";\nimport {\n IsActiveThreadContext,\n OnDeleteThreadCallback,\n} from \"./comment-plugin-provider\";\n\ntype ThreadPanelComponents = {\n Thread: ComponentType<ThreadProps>;\n};\n\nexport interface ThreadPanelProps extends ComponentProps<\"div\"> {\n /**\n * Override the component's components.\n */\n components?: Partial<ThreadPanelComponents>;\n\n /**\n * Override the component's strings.\n */\n overrides?: Partial<\n GlobalOverrides &\n ThreadPanelOverrides &\n ThreadOverrides &\n CommentOverrides &\n ComposerOverrides\n >;\n}\n\ninterface ThreadWrapperProps extends ThreadProps {\n Thread: ComponentType<ThreadProps>;\n isActive: boolean;\n}\n\nconst ThreadWrapper = ({ Thread, isActive, ...props }: ThreadWrapperProps) => {\n const onDeleteThread = useContext(OnDeleteThreadCallback);\n\n if (onDeleteThread === null) {\n throw new Error(\"OnDeleteThreadCallback not provided\");\n }\n\n const handleThreadDelete = useCallback(\n (thread: ThreadData<BaseMetadata>) => {\n onDeleteThread(thread.id);\n },\n [onDeleteThread]\n );\n\n return (\n <Thread\n onThreadDelete={handleThreadDelete}\n data-state={isActive ? \"active\" : null}\n {...props}\n />\n );\n};\n\nexport const ThreadPanel = forwardRef<HTMLDivElement, ThreadPanelProps>(\n ({ components, overrides, className, ...props }, forwardedRef) => {\n const $ = useOverrides(overrides);\n const { threads } = useThreads();\n const isThreadActive = useContext(IsActiveThreadContext);\n const Thread = components?.Thread ?? DefaultThread;\n\n return (\n <div\n className={classNames(className, \"lb-root lb-lexical-thread-panel\")}\n ref={forwardedRef}\n {...props}\n >\n {threads && threads.length > 0 ? (\n threads.map((thread) => {\n return (\n <ThreadWrapper\n Thread={Thread}\n isActive={isThreadActive(thread.id)}\n key={thread.id}\n thread={thread}\n className=\"lb-lexical-thread-panel-thread\"\n />\n );\n })\n ) : (\n <div className=\"lb-lexical-thread-panel-empty\">\n {$.THREAD_PANEL_EMPTY}\n </div>\n )}\n </div>\n );\n }\n);\n"],"names":["React","Thread","DefaultThread"],"mappings":";;;;;;AA+CA,MAAM,gBAAgB,CAAC,EAAE,MAAQ,EAAA,QAAA,EAAA,GAAa,OAAgC,KAAA;AAC5E,EAAM,MAAA,cAAA,GAAiB,WAAW,sBAAsB,CAAA,CAAA;AAExD,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAM,MAAA,IAAI,MAAM,qCAAqC,CAAA,CAAA;AAAA,GACvD;AAEA,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,MAAqC,KAAA;AACpC,MAAA,cAAA,CAAe,OAAO,EAAE,CAAA,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,cAAc,CAAA;AAAA,GACjB,CAAA;AAEA,EAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA;AAAA,IACC,cAAgB,EAAA,kBAAA;AAAA,IAChB,YAAA,EAAY,WAAW,QAAW,GAAA,IAAA;AAAA,IACjC,GAAG,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ,CAAA,CAAA;AAEO,MAAM,WAAc,GAAA,UAAA;AAAA,EACzB,CAAC,EAAE,UAAA,EAAY,WAAW,SAAc,EAAA,GAAA,KAAA,IAAS,YAAiB,KAAA;AAChE,IAAM,MAAA,CAAA,GAAI,aAAa,SAAS,CAAA,CAAA;AAChC,IAAM,MAAA,EAAE,OAAQ,EAAA,GAAI,UAAW,EAAA,CAAA;AAC/B,IAAM,MAAA,cAAA,GAAiB,WAAW,qBAAqB,CAAA,CAAA;AACvD,IAAM,MAAAC,QAAA,GAAS,YAAY,MAAU,IAAAC,MAAA,CAAA;AAErC,IAAA,uBACGF,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAA,EAAW,UAAW,CAAA,SAAA,EAAW,iCAAiC,CAAA;AAAA,MAClE,GAAK,EAAA,YAAA;AAAA,MACJ,GAAG,KAAA;AAAA,KAAA,EAEH,WAAW,OAAQ,CAAA,MAAA,GAAS,IAC3B,OAAQ,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACtB,MAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,aAAA,EAAA;AAAA,gBACCC,QAAA;AAAA,QACA,QAAA,EAAU,cAAe,CAAA,MAAA,CAAO,EAAE,CAAA;AAAA,QAClC,KAAK,MAAO,CAAA,EAAA;AAAA,QACZ,MAAA;AAAA,QACA,SAAU,EAAA,gCAAA;AAAA,OACZ,CAAA,CAAA;AAAA,KAEH,oBAEAD,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAU,EAAA,+BAAA;AAAA,KACZ,EAAA,CAAA,CAAE,kBACL,CAEJ,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|