@dxos/plugin-thread 0.6.13 → 0.6.14-main.2b6a0f3
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/lib/browser/{ThreadArticle-O64ZECMF.mjs → ThreadArticle-43QSPQ2B.mjs} +3 -3
- package/dist/lib/browser/{ThreadMain-ZDCRC6RG.mjs → ThreadMain-VXHMJDQC.mjs} +3 -3
- package/dist/lib/browser/chunk-5G3KL6TC.mjs +16 -0
- package/dist/lib/browser/chunk-5G3KL6TC.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GKPZHUT3.mjs → chunk-JFQZ5W2I.mjs} +2 -2
- package/dist/lib/browser/{chunk-GKPZHUT3.mjs.map → chunk-JFQZ5W2I.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-P7ZE5N5M.mjs → chunk-TDPY6D4W.mjs} +16 -16
- package/dist/lib/browser/chunk-TDPY6D4W.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +409 -382
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/lib/browser/types.mjs +2 -2
- package/dist/lib/node/{ThreadArticle-DO56JXBU.cjs → ThreadArticle-ILLKCW6I.cjs} +7 -7
- package/dist/lib/node/{ThreadMain-XJX75GHG.cjs → ThreadMain-7UVE5D34.cjs} +7 -7
- package/dist/lib/node/{chunk-D5GOVXHS.cjs → chunk-FOZUQZF4.cjs} +6 -6
- package/dist/lib/node/{chunk-D5GOVXHS.cjs.map → chunk-FOZUQZF4.cjs.map} +1 -1
- package/dist/lib/node/{chunk-BWBONZGU.cjs → chunk-JIJ7Z6NO.cjs} +7 -22
- package/dist/lib/node/chunk-JIJ7Z6NO.cjs.map +7 -0
- package/dist/lib/node/{chunk-5PZNPPQF.cjs → chunk-QVOXOTRV.cjs} +65 -65
- package/dist/lib/node/chunk-QVOXOTRV.cjs.map +7 -0
- package/dist/lib/node/index.cjs +458 -435
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.cjs +4 -4
- package/dist/lib/node/meta.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/types.cjs +3 -3
- package/dist/lib/node/types.cjs.map +1 -1
- package/dist/lib/node-esm/ThreadArticle-MN2KCRY4.mjs +19 -0
- package/dist/lib/node-esm/ThreadArticle-MN2KCRY4.mjs.map +7 -0
- package/dist/lib/node-esm/ThreadMain-VKPAHZK7.mjs +27 -0
- package/dist/lib/node-esm/ThreadMain-VKPAHZK7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-5XQXCOZP.mjs +411 -0
- package/dist/lib/node-esm/chunk-5XQXCOZP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DC5ZA6H5.mjs +18 -0
- package/dist/lib/node-esm/chunk-DC5ZA6H5.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZXIPFXSA.mjs +21 -0
- package/dist/lib/node-esm/chunk-ZXIPFXSA.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1130 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/meta.mjs +12 -0
- package/dist/lib/node-esm/meta.mjs.map +7 -0
- package/dist/lib/node-esm/types.mjs +9 -0
- package/dist/lib/node-esm/types.mjs.map +7 -0
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts +3 -42
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts +1 -1
- package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
- package/dist/types/src/components/Comments.stories.d.ts +3 -41
- package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
- package/dist/types/src/components/CommentsContainer.d.ts +1 -5
- package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
- package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadComplementary.d.ts +10 -0
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +6 -6
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/testing.d.ts +2 -0
- package/dist/types/src/components/testing.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +2 -2
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/extensions/index.d.ts +2 -0
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/extensions/threads.d.ts +9 -0
- package/dist/types/src/extensions/threads.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +3 -9
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +6 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +41 -37
- package/src/ThreadPlugin.tsx +125 -305
- package/src/components/Chat.stories.tsx +7 -4
- package/src/components/ChatContainer.tsx +7 -8
- package/src/components/CommentContainer.tsx +18 -19
- package/src/components/Comments.stories.tsx +9 -6
- package/src/components/CommentsContainer.tsx +18 -31
- package/src/components/MessageContainer.tsx +13 -23
- package/src/components/ThreadComplementary.tsx +113 -0
- package/src/components/index.ts +6 -6
- package/src/components/types.ts +2 -2
- package/src/extensions/index.ts +5 -0
- package/src/extensions/threads.ts +117 -0
- package/src/meta.ts +15 -0
- package/src/types.ts +8 -3
- package/dist/lib/browser/chunk-5IBJO53M.mjs +0 -21
- package/dist/lib/browser/chunk-5IBJO53M.mjs.map +0 -7
- package/dist/lib/browser/chunk-P7ZE5N5M.mjs.map +0 -7
- package/dist/lib/node/chunk-5PZNPPQF.cjs.map +0 -7
- package/dist/lib/node/chunk-BWBONZGU.cjs.map +0 -7
- package/dist/types/src/types.test.d.ts +0 -2
- package/dist/types/src/types.test.d.ts.map +0 -1
- package/src/meta.tsx +0 -20
- package/src/types.test.ts +0 -13
- /package/dist/lib/browser/{ThreadArticle-O64ZECMF.mjs.map → ThreadArticle-43QSPQ2B.mjs.map} +0 -0
- /package/dist/lib/browser/{ThreadMain-ZDCRC6RG.mjs.map → ThreadMain-VXHMJDQC.mjs.map} +0 -0
- /package/dist/lib/node/{ThreadArticle-DO56JXBU.cjs.map → ThreadArticle-ILLKCW6I.cjs.map} +0 -0
- /package/dist/lib/node/{ThreadMain-XJX75GHG.cjs.map → ThreadMain-7UVE5D34.cjs.map} +0 -0
|
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
29
|
+
var chunk_QVOXOTRV_exports = {};
|
|
30
|
+
__export(chunk_QVOXOTRV_exports, {
|
|
31
31
|
ChatContainer: () => ChatContainer,
|
|
32
32
|
ChatHeading: () => ChatHeading,
|
|
33
33
|
MessageContainer: () => MessageContainer,
|
|
@@ -37,16 +37,15 @@ __export(chunk_5PZNPPQF_exports, {
|
|
|
37
37
|
useOnEditAnalytics: () => useOnEditAnalytics,
|
|
38
38
|
useStatus: () => useStatus
|
|
39
39
|
});
|
|
40
|
-
module.exports = __toCommonJS(
|
|
41
|
-
var
|
|
40
|
+
module.exports = __toCommonJS(chunk_QVOXOTRV_exports);
|
|
41
|
+
var import_chunk_JIJ7Z6NO = require("./chunk-JIJ7Z6NO.cjs");
|
|
42
42
|
var import_react = require("react");
|
|
43
43
|
var import_react2 = require("react");
|
|
44
44
|
var import_app_framework = require("@dxos/app-framework");
|
|
45
45
|
var import_meta = require("@dxos/plugin-observability/meta");
|
|
46
46
|
var import_echo = require("@dxos/react-client/echo");
|
|
47
47
|
var import_react_ui = require("@dxos/react-ui");
|
|
48
|
-
var import_react3 = require("
|
|
49
|
-
var import_react4 = __toESM(require("react"));
|
|
48
|
+
var import_react3 = __toESM(require("react"));
|
|
50
49
|
var import_echo_schema = require("@dxos/echo-schema");
|
|
51
50
|
var import_types = require("@dxos/plugin-space/types");
|
|
52
51
|
var import_echo2 = require("@dxos/react-client/echo");
|
|
@@ -58,8 +57,8 @@ var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
|
58
57
|
var import_react_ui_thread = require("@dxos/react-ui-thread");
|
|
59
58
|
var import_util = require("@dxos/util");
|
|
60
59
|
var import_view = require("@codemirror/view");
|
|
61
|
-
var
|
|
62
|
-
var
|
|
60
|
+
var import_react4 = require("@phosphor-icons/react");
|
|
61
|
+
var import_react5 = __toESM(require("react"));
|
|
63
62
|
var import_app_framework2 = require("@dxos/app-framework");
|
|
64
63
|
var import_react_client = require("@dxos/react-client");
|
|
65
64
|
var import_halo2 = require("@dxos/react-client/halo");
|
|
@@ -180,67 +179,67 @@ var MessageContainer = ({ message, members, onDelete }) => {
|
|
|
180
179
|
const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
|
|
181
180
|
const messageMetadata = getMessageMetadata(message.id, senderIdentity);
|
|
182
181
|
const userIsAuthor = (0, import_halo2.useIdentity)()?.identityKey.toHex() === messageMetadata.authorId;
|
|
183
|
-
const [editing, setEditing] = (0,
|
|
184
|
-
const handleDelete = (0,
|
|
182
|
+
const [editing, setEditing] = (0, import_react5.useState)(false);
|
|
183
|
+
const handleDelete = (0, import_react5.useCallback)(() => onDelete?.(message.id), [
|
|
185
184
|
message,
|
|
186
185
|
onDelete
|
|
187
186
|
]);
|
|
188
|
-
const { t } = (0, import_react_ui3.useTranslation)(
|
|
187
|
+
const { t } = (0, import_react_ui3.useTranslation)(import_chunk_JIJ7Z6NO.THREAD_PLUGIN);
|
|
189
188
|
const editLabel = t(editing ? "save message label" : "edit message label");
|
|
190
189
|
const deleteLabel = t("delete message label");
|
|
191
|
-
return /* @__PURE__ */
|
|
190
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
|
|
192
191
|
...messageMetadata,
|
|
193
192
|
classNames: [
|
|
194
193
|
import_react_ui_theme2.hoverableControls,
|
|
195
194
|
import_react_ui_theme2.hoverableFocusedWithinControls
|
|
196
195
|
]
|
|
197
|
-
}, /* @__PURE__ */
|
|
196
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageHeading, {
|
|
198
197
|
authorName: messageMetadata.authorName,
|
|
199
198
|
timestamp: messageMetadata.timestamp
|
|
200
|
-
}, /* @__PURE__ */
|
|
199
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.ButtonGroup, {
|
|
201
200
|
classNames: "mie-1"
|
|
202
|
-
}, userIsAuthor && /* @__PURE__ */
|
|
201
|
+
}, userIsAuthor && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
203
202
|
asChild: true
|
|
204
|
-
}, /* @__PURE__ */
|
|
203
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
|
|
205
204
|
variant: "ghost",
|
|
206
205
|
"data-testid": editing ? "thread.message.save" : "thread.message.edit",
|
|
207
206
|
classNames: messageControlClassNames,
|
|
208
207
|
onClick: () => setEditing((editing2) => !editing2)
|
|
209
|
-
}, /* @__PURE__ */
|
|
208
|
+
}, /* @__PURE__ */ import_react5.default.createElement("span", {
|
|
210
209
|
className: "sr-only"
|
|
211
|
-
}, editLabel), editing ? /* @__PURE__ */
|
|
210
|
+
}, editLabel), editing ? /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, {
|
|
212
211
|
className: (0, import_react_ui_theme2.getSize)(4)
|
|
213
|
-
}) : /* @__PURE__ */
|
|
212
|
+
}) : /* @__PURE__ */ import_react5.default.createElement(import_react4.PencilSimple, {
|
|
214
213
|
className: (0, import_react_ui_theme2.getSize)(4)
|
|
215
|
-
}))), /* @__PURE__ */
|
|
214
|
+
}))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, {
|
|
216
215
|
classNames: "z-[21]"
|
|
217
|
-
}, editLabel, /* @__PURE__ */
|
|
216
|
+
}, editLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
|
|
218
217
|
asChild: true
|
|
219
|
-
}, /* @__PURE__ */
|
|
218
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
|
|
220
219
|
variant: "ghost",
|
|
221
220
|
"data-testid": "thread.message.delete",
|
|
222
221
|
classNames: messageControlClassNames,
|
|
223
|
-
onClick: handleDelete
|
|
224
|
-
}, /* @__PURE__ */
|
|
222
|
+
onClick: () => handleDelete()
|
|
223
|
+
}, /* @__PURE__ */ import_react5.default.createElement("span", {
|
|
225
224
|
className: "sr-only"
|
|
226
|
-
}, deleteLabel), /* @__PURE__ */
|
|
225
|
+
}, deleteLabel), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
|
|
227
226
|
className: (0, import_react_ui_theme2.getSize)(4)
|
|
228
|
-
}))), /* @__PURE__ */
|
|
227
|
+
}))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, {
|
|
229
228
|
classNames: "z-[21]"
|
|
230
|
-
}, deleteLabel, /* @__PURE__ */
|
|
229
|
+
}, deleteLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react5.default.createElement(TextboxBlock, {
|
|
231
230
|
message,
|
|
232
231
|
isAuthor: userIsAuthor,
|
|
233
232
|
editing
|
|
234
|
-
}), message.parts?.filter(import_util2.nonNullable).map((part, index) => /* @__PURE__ */
|
|
233
|
+
}), message.parts?.filter(import_util2.nonNullable).map((part, index) => /* @__PURE__ */ import_react5.default.createElement(MessagePart, {
|
|
235
234
|
key: index,
|
|
236
235
|
part
|
|
237
236
|
})));
|
|
238
237
|
};
|
|
239
238
|
var MessagePart = ({ part }) => {
|
|
240
|
-
return /* @__PURE__ */
|
|
239
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
|
|
241
240
|
id: part.id
|
|
242
|
-
}, /* @__PURE__ */
|
|
243
|
-
type:
|
|
241
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
|
|
242
|
+
type: import_chunk_JIJ7Z6NO.THREAD_ITEM,
|
|
244
243
|
path: part.id,
|
|
245
244
|
item: part,
|
|
246
245
|
Component: MessageBlockObjectTile
|
|
@@ -248,11 +247,11 @@ var MessagePart = ({ part }) => {
|
|
|
248
247
|
};
|
|
249
248
|
var TextboxBlock = ({ message, isAuthor, editing }) => {
|
|
250
249
|
const { themeMode } = (0, import_react_ui3.useThemeContext)();
|
|
251
|
-
const inMemoryContentRef = (0,
|
|
252
|
-
const handleDocumentChange = (0,
|
|
250
|
+
const inMemoryContentRef = (0, import_react5.useRef)(message.text);
|
|
251
|
+
const handleDocumentChange = (0, import_react5.useCallback)((newState) => {
|
|
253
252
|
inMemoryContentRef.current = newState;
|
|
254
253
|
}, []);
|
|
255
|
-
const saveDocumentChange = (0,
|
|
254
|
+
const saveDocumentChange = (0, import_react5.useCallback)(() => {
|
|
256
255
|
message.text = inMemoryContentRef.current;
|
|
257
256
|
}, [
|
|
258
257
|
message
|
|
@@ -281,33 +280,31 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
|
|
|
281
280
|
themeMode,
|
|
282
281
|
handleDocumentChange
|
|
283
282
|
]);
|
|
284
|
-
(0,
|
|
283
|
+
(0, import_react5.useEffect)(() => {
|
|
285
284
|
editing && view?.focus();
|
|
286
285
|
}, [
|
|
287
286
|
editing,
|
|
288
287
|
view
|
|
289
288
|
]);
|
|
290
289
|
useOnEditAnalytics(message, !!editing);
|
|
291
|
-
return /* @__PURE__ */
|
|
290
|
+
return /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
292
291
|
role: "none",
|
|
293
292
|
ref: parentRef,
|
|
294
293
|
className: "mie-4",
|
|
295
294
|
...focusAttributes
|
|
296
295
|
});
|
|
297
296
|
};
|
|
298
|
-
var MessageBlockObjectTile = /* @__PURE__ */ (0,
|
|
297
|
+
var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
|
|
299
298
|
let title = item.name ?? item.title ?? item.__typename ?? "Object";
|
|
300
299
|
if (typeof title !== "string") {
|
|
301
300
|
title = title?.content ?? "";
|
|
302
301
|
}
|
|
303
|
-
return /* @__PURE__ */
|
|
302
|
+
return /* @__PURE__ */ import_react5.default.createElement("div", {
|
|
304
303
|
role: "group",
|
|
305
304
|
className: (0, import_react_ui_theme2.mx)("grid col-span-3 py-1 pr-4", import_react_ui_theme2.hoverableControls, import_react_ui_theme2.hoverableFocusedWithinControls),
|
|
306
305
|
style: draggableStyle,
|
|
307
306
|
ref: forwardedRef
|
|
308
|
-
}, /* @__PURE__ */
|
|
309
|
-
density: "fine"
|
|
310
|
-
}, /* @__PURE__ */ import_react6.default.createElement(import_app_framework2.Surface, {
|
|
307
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
|
|
311
308
|
role: "card",
|
|
312
309
|
limit: 1,
|
|
313
310
|
data: {
|
|
@@ -316,16 +313,19 @@ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react6.forwardRef)(({ dr
|
|
|
316
313
|
draggableProps,
|
|
317
314
|
fallback: title,
|
|
318
315
|
...props
|
|
319
|
-
}))
|
|
316
|
+
}));
|
|
320
317
|
});
|
|
321
318
|
var ChatHeading = ({ attendableId }) => {
|
|
322
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
323
|
-
return /* @__PURE__ */
|
|
319
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_JIJ7Z6NO.THREAD_PLUGIN);
|
|
320
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
324
321
|
role: "none",
|
|
325
322
|
className: "flex items-center"
|
|
326
|
-
}, /* @__PURE__ */
|
|
323
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Button, {
|
|
327
324
|
attendableId
|
|
328
|
-
}, /* @__PURE__ */
|
|
325
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
326
|
+
icon: "ph--chat--regular",
|
|
327
|
+
size: 5
|
|
328
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Label, {
|
|
329
329
|
attendableId
|
|
330
330
|
}, t("chat heading")));
|
|
331
331
|
};
|
|
@@ -333,16 +333,16 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
333
333
|
const identity = (0, import_halo.useIdentity)();
|
|
334
334
|
const space = (0, import_echo2.getSpace)(thread);
|
|
335
335
|
const members = (0, import_echo2.useMembers)(space?.key);
|
|
336
|
-
const activity = useStatus(space,
|
|
337
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
338
|
-
const [_count, _setCount] = (0,
|
|
336
|
+
const activity = useStatus(space, (0, import_echo2.fullyQualifiedId)(thread));
|
|
337
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_JIJ7Z6NO.THREAD_PLUGIN);
|
|
338
|
+
const [_count, _setCount] = (0, import_react3.useState)(0);
|
|
339
339
|
const rerenderEditor = () => _setCount((count) => count + 1);
|
|
340
|
-
const [autoFocus, setAutoFocus] = (0,
|
|
341
|
-
const threadScrollRef = (0,
|
|
340
|
+
const [autoFocus, setAutoFocus] = (0, import_react3.useState)(autoFocusTextbox);
|
|
341
|
+
const threadScrollRef = (0, import_react3.useRef)(null);
|
|
342
342
|
const { themeMode } = (0, import_react_ui2.useThemeContext)();
|
|
343
|
-
const textboxMetadata = getMessageMetadata(thread
|
|
344
|
-
const messageRef = (0,
|
|
345
|
-
const extensions = (0,
|
|
343
|
+
const textboxMetadata = getMessageMetadata((0, import_echo2.fullyQualifiedId)(thread), identity);
|
|
344
|
+
const messageRef = (0, import_react3.useRef)("");
|
|
345
|
+
const extensions = (0, import_react3.useMemo)(() => [
|
|
346
346
|
(0, import_react_ui_editor.createBasicExtensions)({
|
|
347
347
|
placeholder: t("message placeholder")
|
|
348
348
|
}),
|
|
@@ -361,7 +361,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
361
361
|
behavior,
|
|
362
362
|
block: "end"
|
|
363
363
|
}), 10);
|
|
364
|
-
(0,
|
|
364
|
+
(0, import_react3.useLayoutEffect)(() => {
|
|
365
365
|
scrollToEnd("instant");
|
|
366
366
|
}, []);
|
|
367
367
|
const handleCreate = () => {
|
|
@@ -388,32 +388,32 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
388
388
|
thread.messages.splice(messageIndex, 1);
|
|
389
389
|
}
|
|
390
390
|
};
|
|
391
|
-
return /* @__PURE__ */
|
|
391
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
|
|
392
392
|
current,
|
|
393
|
-
id: thread
|
|
393
|
+
id: (0, import_echo2.fullyQualifiedId)(thread),
|
|
394
394
|
classNames: "bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0"
|
|
395
|
-
}, /* @__PURE__ */
|
|
395
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Root, {
|
|
396
396
|
classNames: "col-span-2"
|
|
397
|
-
}, /* @__PURE__ */
|
|
397
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
|
|
398
398
|
classNames: "overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]"
|
|
399
|
-
}, /* @__PURE__ */
|
|
399
|
+
}, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
400
400
|
role: "none",
|
|
401
401
|
className: (0, import_react_ui_theme.mx)(import_react_ui_thread.threadLayout, "place-self-end")
|
|
402
|
-
}, thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */
|
|
402
|
+
}, thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */ import_react3.default.createElement(MessageContainer, {
|
|
403
403
|
key: message.id,
|
|
404
404
|
message,
|
|
405
405
|
members,
|
|
406
406
|
onDelete: handleDelete
|
|
407
|
-
}))), /* @__PURE__ */
|
|
407
|
+
}))), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
408
408
|
role: "none",
|
|
409
409
|
className: "bs-px -mbs-px",
|
|
410
410
|
ref: threadScrollRef
|
|
411
|
-
}), /* @__PURE__ */
|
|
411
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Thumb, null)))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.MessageTextbox, {
|
|
412
412
|
extensions,
|
|
413
413
|
autoFocus,
|
|
414
414
|
onSend: handleCreate,
|
|
415
415
|
...textboxMetadata
|
|
416
|
-
}), /* @__PURE__ */
|
|
416
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
|
|
417
417
|
activity
|
|
418
418
|
}, t("activity message")));
|
|
419
419
|
};
|
|
@@ -428,4 +428,4 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
428
428
|
useOnEditAnalytics,
|
|
429
429
|
useStatus
|
|
430
430
|
});
|
|
431
|
-
//# sourceMappingURL=chunk-
|
|
431
|
+
//# sourceMappingURL=chunk-QVOXOTRV.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts", "../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/echo-schema';\nimport { ObservabilityAction } from '@dxos/plugin-observability/meta';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const dispatch = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch({\n action: ObservabilityAction.SEND_EVENT,\n data: {\n name,\n properties: { ...meta, ...dynamicMeta, spaceId },\n },\n });\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { create } from '@dxos/echo-schema';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n return (\n <div role='none' className='flex items-center'>\n <PlankHeading.Button attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </PlankHeading.Button>\n <PlankHeading.Label attendableId={attendableId}>{t('chat heading')}</PlankHeading.Label>\n </div>\n );\n};\n\nexport const ChatContainer = ({ thread, context, current, autoFocusTextbox }: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\n const { t } = useTranslation(THREAD_PLUGIN);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: (text) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n // TODO(thure): Factor out.\n // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using\n // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient\n // for the desired effect; this is likely hardware-dependent and should be reevaluated.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n\n // TODO(burdon): Change to model.\n const handleCreate: MessageTextboxProps['onSend'] = () => {\n if (!messageRef.current?.length) {\n return false;\n }\n\n thread.messages.push(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context,\n }),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n const handleDelete = (id: string) => {\n const messageIndex = thread.messages.filter(nonNullable).findIndex((message) => message.id === id);\n if (messageIndex !== -1) {\n thread.messages.splice(messageIndex, 1);\n }\n };\n\n return (\n <Thread\n current={current}\n id={fullyQualifiedId(thread)}\n classNames='bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0'\n >\n <ScrollArea.Root classNames='col-span-2'>\n <ScrollArea.Viewport classNames='overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]'>\n <div role='none' className={mx(threadLayout, 'place-self-end')}>\n {thread.messages.filter(nonNullable).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleDelete} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type EchoReactiveObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { nonNullable } from '@dxos/util';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_ITEM, THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nconst messageControlClassNames = ['p-1 min-bs-0 transition-opacity items-start', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[21]'>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[21]'>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {message.parts?.filter(nonNullable).map((part, index) => <MessagePart key={index} part={part} />)}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return (\n <Mosaic.Container id={part.id}>\n <Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />\n </Mosaic.Container>\n );\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.text,\n extensions: [\n createBasicExtensions({ readonly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile: MosaicTileComponent<EchoReactiveObject<any>> = forwardRef(\n ({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {\n let title = item.name ?? item.title ?? item.__typename ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n style={draggableStyle}\n ref={forwardedRef}\n >\n <Surface\n role='card'\n limit={1}\n data={{ content: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx, tagRoot } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n {\n tag: tags.tagName,\n class: mx(tagRoot({ palette: 'cyan' }), 'text-baseText font-medium'),\n },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_echo", "import_react_ui", "import_app_framework", "import_halo", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "import_util", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "action", "ObservabilityAction", "SEND_EVENT", "data", "properties", "useOnEditAnalytics", "message", "editing", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "tagRoot", "palette", "command", "syntaxHighlighting", "getMessageMetadata", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "authorAvatarProps", "hue", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "members", "onDelete", "senderIdentity", "find", "member", "sender", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "setEditing", "handleDelete", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "React", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "parts", "filter", "nonNullable", "map", "part", "index", "MessagePart", "key", "Mosaic", "Container", "DraggableTile", "type", "THREAD_ITEM", "path", "item", "Component", "MessageBlockObjectTile", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "handleDocumentChange", "newState", "current", "saveDocumentChange", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "focus", "div", "role", "ref", "forwardRef", "draggableStyle", "draggableProps", "active", "_ref", "props", "forwardedRef", "title", "__typename", "content", "style", "Surface", "limit", "ChatHeading", "attendableId", "PlankHeading", "Icon", "icon", "size", "Label", "ChatContainer", "thread", "context", "autoFocusTextbox", "useMembers", "activity", "fullyQualifiedId", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "messages", "push", "create", "MessageType", "toISOString", "messageIndex", "findIndex", "splice", "Thread", "ScrollArea", "Viewport", "threadLayout", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
|
|
7
|
+
}
|