@dxos/plugin-thread 0.6.11 → 0.6.12-main.15a606f
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-4VU752F4.mjs} +3 -3
- package/dist/lib/browser/{ThreadMain-ZDCRC6RG.mjs → ThreadMain-ML3P4XSD.mjs} +3 -3
- package/dist/lib/browser/{chunk-5IBJO53M.mjs → chunk-7NUYW5IW.mjs} +2 -5
- package/dist/lib/browser/chunk-7NUYW5IW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-GKPZHUT3.mjs → chunk-GJRBBPXI.mjs} +2 -2
- package/dist/lib/browser/{chunk-GKPZHUT3.mjs.map → chunk-GJRBBPXI.mjs.map} +1 -1
- package/dist/lib/browser/{chunk-P7ZE5N5M.mjs → chunk-XF5QKI75.mjs} +13 -11
- package/dist/lib/browser/chunk-XF5QKI75.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +237 -207
- 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-ERUHPHVT.cjs} +7 -7
- package/dist/lib/node/{ThreadMain-XJX75GHG.cjs → ThreadMain-6DN7FDNB.cjs} +7 -7
- package/dist/lib/node/{chunk-BWBONZGU.cjs → chunk-6EVXCSDS.cjs} +5 -18
- package/dist/lib/node/chunk-6EVXCSDS.cjs.map +7 -0
- package/dist/lib/node/{chunk-D5GOVXHS.cjs → chunk-FXD3DYMO.cjs} +6 -6
- package/dist/lib/node/{chunk-D5GOVXHS.cjs.map → chunk-FXD3DYMO.cjs.map} +1 -1
- package/dist/lib/node/{chunk-5PZNPPQF.cjs → chunk-PZVUW4W2.cjs} +65 -63
- package/dist/lib/node/chunk-PZVUW4W2.cjs.map +7 -0
- package/dist/lib/node/index.cjs +324 -296
- 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-NKI5F4W5.mjs +19 -0
- package/dist/lib/node-esm/ThreadArticle-NKI5F4W5.mjs.map +7 -0
- package/dist/lib/node-esm/ThreadMain-2A3VQLCW.mjs +27 -0
- package/dist/lib/node-esm/ThreadMain-2A3VQLCW.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-A44C4MTQ.mjs +413 -0
- package/dist/lib/node-esm/chunk-A44C4MTQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Y475KZTX.mjs +20 -0
- package/dist/lib/node-esm/chunk-Y475KZTX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YO46JGAE.mjs +21 -0
- package/dist/lib/node-esm/chunk-YO46JGAE.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1133 -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/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
- 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 +11 -0
- package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -0
- 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/meta.d.ts +1 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +1 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/package.json +37 -34
- package/src/ThreadPlugin.tsx +67 -178
- package/src/components/ChatContainer.tsx +7 -8
- package/src/components/CommentContainer.tsx +10 -7
- package/src/components/Comments.stories.tsx +2 -2
- package/src/components/CommentsContainer.tsx +22 -18
- package/src/components/MessageContainer.tsx +2 -1
- package/src/components/ThreadComplementary.tsx +120 -0
- package/src/meta.tsx +1 -5
- package/src/types.ts +1 -1
- 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/types.test.ts +0 -13
- /package/dist/lib/browser/{ThreadArticle-O64ZECMF.mjs.map → ThreadArticle-4VU752F4.mjs.map} +0 -0
- /package/dist/lib/browser/{ThreadMain-ZDCRC6RG.mjs.map → ThreadMain-ML3P4XSD.mjs.map} +0 -0
- /package/dist/lib/node/{ThreadArticle-DO56JXBU.cjs.map → ThreadArticle-ERUHPHVT.cjs.map} +0 -0
- /package/dist/lib/node/{ThreadMain-XJX75GHG.cjs.map → ThreadMain-6DN7FDNB.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_PZVUW4W2_exports = {};
|
|
30
|
+
__export(chunk_PZVUW4W2_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_PZVUW4W2_exports);
|
|
41
|
+
var import_chunk_6EVXCSDS = require("./chunk-6EVXCSDS.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_6EVXCSDS.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_6EVXCSDS.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,33 @@ 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, ...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__ */
|
|
307
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.DensityProvider, {
|
|
309
308
|
density: "fine"
|
|
310
|
-
}, /* @__PURE__ */
|
|
309
|
+
}, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
|
|
311
310
|
role: "card",
|
|
312
311
|
limit: 1,
|
|
313
312
|
data: {
|
|
@@ -319,13 +318,16 @@ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react6.forwardRef)(({ dr
|
|
|
319
318
|
})));
|
|
320
319
|
});
|
|
321
320
|
var ChatHeading = ({ attendableId }) => {
|
|
322
|
-
const { t } = (0, import_react_ui2.useTranslation)(
|
|
323
|
-
return /* @__PURE__ */
|
|
321
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6EVXCSDS.THREAD_PLUGIN);
|
|
322
|
+
return /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
324
323
|
role: "none",
|
|
325
324
|
className: "flex items-center"
|
|
326
|
-
}, /* @__PURE__ */
|
|
325
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Button, {
|
|
327
326
|
attendableId
|
|
328
|
-
}, /* @__PURE__ */
|
|
327
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
|
|
328
|
+
icon: "ph--chat--regular",
|
|
329
|
+
size: 5
|
|
330
|
+
})), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_deck.PlankHeading.Label, {
|
|
329
331
|
attendableId
|
|
330
332
|
}, t("chat heading")));
|
|
331
333
|
};
|
|
@@ -333,16 +335,16 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
333
335
|
const identity = (0, import_halo.useIdentity)();
|
|
334
336
|
const space = (0, import_echo2.getSpace)(thread);
|
|
335
337
|
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,
|
|
338
|
+
const activity = useStatus(space, (0, import_echo2.fullyQualifiedId)(thread));
|
|
339
|
+
const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6EVXCSDS.THREAD_PLUGIN);
|
|
340
|
+
const [_count, _setCount] = (0, import_react3.useState)(0);
|
|
339
341
|
const rerenderEditor = () => _setCount((count) => count + 1);
|
|
340
|
-
const [autoFocus, setAutoFocus] = (0,
|
|
341
|
-
const threadScrollRef = (0,
|
|
342
|
+
const [autoFocus, setAutoFocus] = (0, import_react3.useState)(autoFocusTextbox);
|
|
343
|
+
const threadScrollRef = (0, import_react3.useRef)(null);
|
|
342
344
|
const { themeMode } = (0, import_react_ui2.useThemeContext)();
|
|
343
|
-
const textboxMetadata = getMessageMetadata(thread
|
|
344
|
-
const messageRef = (0,
|
|
345
|
-
const extensions = (0,
|
|
345
|
+
const textboxMetadata = getMessageMetadata((0, import_echo2.fullyQualifiedId)(thread), identity);
|
|
346
|
+
const messageRef = (0, import_react3.useRef)("");
|
|
347
|
+
const extensions = (0, import_react3.useMemo)(() => [
|
|
346
348
|
(0, import_react_ui_editor.createBasicExtensions)({
|
|
347
349
|
placeholder: t("message placeholder")
|
|
348
350
|
}),
|
|
@@ -361,7 +363,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
361
363
|
behavior,
|
|
362
364
|
block: "end"
|
|
363
365
|
}), 10);
|
|
364
|
-
(0,
|
|
366
|
+
(0, import_react3.useLayoutEffect)(() => {
|
|
365
367
|
scrollToEnd("instant");
|
|
366
368
|
}, []);
|
|
367
369
|
const handleCreate = () => {
|
|
@@ -388,32 +390,32 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
388
390
|
thread.messages.splice(messageIndex, 1);
|
|
389
391
|
}
|
|
390
392
|
};
|
|
391
|
-
return /* @__PURE__ */
|
|
393
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
|
|
392
394
|
current,
|
|
393
|
-
id: thread
|
|
395
|
+
id: (0, import_echo2.fullyQualifiedId)(thread),
|
|
394
396
|
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__ */
|
|
397
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Root, {
|
|
396
398
|
classNames: "col-span-2"
|
|
397
|
-
}, /* @__PURE__ */
|
|
399
|
+
}, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
|
|
398
400
|
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__ */
|
|
401
|
+
}, /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
400
402
|
role: "none",
|
|
401
403
|
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__ */
|
|
404
|
+
}, thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */ import_react3.default.createElement(MessageContainer, {
|
|
403
405
|
key: message.id,
|
|
404
406
|
message,
|
|
405
407
|
members,
|
|
406
408
|
onDelete: handleDelete
|
|
407
|
-
}))), /* @__PURE__ */
|
|
409
|
+
}))), /* @__PURE__ */ import_react3.default.createElement("div", {
|
|
408
410
|
role: "none",
|
|
409
411
|
className: "bs-px -mbs-px",
|
|
410
412
|
ref: threadScrollRef
|
|
411
|
-
}), /* @__PURE__ */
|
|
413
|
+
}), /* @__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
414
|
extensions,
|
|
413
415
|
autoFocus,
|
|
414
416
|
onSend: handleCreate,
|
|
415
417
|
...textboxMetadata
|
|
416
|
-
}), /* @__PURE__ */
|
|
418
|
+
}), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
|
|
417
419
|
activity
|
|
418
420
|
}, t("activity message")));
|
|
419
421
|
};
|
|
@@ -428,4 +430,4 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
|
|
|
428
430
|
useOnEditAnalytics,
|
|
429
431
|
useStatus
|
|
430
432
|
});
|
|
431
|
-
//# sourceMappingURL=chunk-
|
|
433
|
+
//# sourceMappingURL=chunk-PZVUW4W2.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 Expando, type EchoReactiveObject } from '@dxos/echo-schema';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport {\n Button,\n ButtonGroup,\n DensityProvider,\n Tooltip,\n useOnTransition,\n useThemeContext,\n useTranslation,\n} 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, ...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 <DensityProvider density='fine'>\n <Surface\n role='card'\n limit={1}\n data={{ content: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </DensityProvider>\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", "props", "forwardedRef", "title", "__typename", "content", "style", "DensityProvider", "density", "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
|
+
}
|