@dxos/plugin-thread 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs +138 -0
  2. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs +41 -0
  4. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-NOOMCX5E.mjs → chunk-EP6MRLY7.mjs} +1 -2
  6. package/dist/lib/browser/chunk-EP6MRLY7.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-SMQYULO6.mjs → chunk-QDJ3Y6WF.mjs} +15 -32
  8. package/dist/lib/browser/chunk-QDJ3Y6WF.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-S5ZR4FYW.mjs +17 -0
  10. package/dist/lib/browser/chunk-S5ZR4FYW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-NRMJGYMA.mjs → chunk-TFVPUPOO.mjs} +19 -131
  12. package/dist/lib/browser/chunk-TFVPUPOO.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-SJPT347G.mjs → chunk-WOG72DWE.mjs} +8 -7
  14. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +16 -29
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-FSG3ZOIM.mjs → intent-resolver-QAY4FLLM.mjs} +76 -39
  18. package/dist/lib/browser/intent-resolver-QAY4FLLM.mjs.map +7 -0
  19. package/dist/lib/browser/{markdown-MYZQDQFY.mjs → markdown-7KXBXCUS.mjs} +6 -7
  20. package/dist/lib/browser/{markdown-MYZQDQFY.mjs.map → markdown-7KXBXCUS.mjs.map} +3 -3
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-KOYRIK3E.mjs → react-surface-MT3OWULR.mjs} +47 -36
  23. package/dist/lib/browser/react-surface-MT3OWULR.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-5CREE7BH.mjs → settings-4FEC7EAX.mjs} +2 -2
  25. package/dist/lib/browser/{state-HPUFZBB7.mjs → state-PNMSLKAH.mjs} +2 -2
  26. package/dist/lib/browser/types.mjs +1 -1
  27. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs +163 -0
  28. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs.map +7 -0
  29. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs +57 -0
  30. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-AXTPNGRI.cjs → chunk-46BSFPBV.cjs} +10 -9
  32. package/dist/lib/node/chunk-46BSFPBV.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-JBOC6MIE.cjs → chunk-AKINTFBH.cjs} +17 -47
  34. package/dist/lib/node/chunk-AKINTFBH.cjs.map +7 -0
  35. package/dist/lib/node/chunk-E7Z3BKRQ.cjs +232 -0
  36. package/dist/lib/node/chunk-E7Z3BKRQ.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-VEVJBOWK.cjs → chunk-NQ5DTPOY.cjs} +4 -5
  38. package/dist/lib/node/chunk-NQ5DTPOY.cjs.map +7 -0
  39. package/dist/lib/node/chunk-S2A6BXEA.cjs +53 -0
  40. package/dist/lib/node/chunk-S2A6BXEA.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +19 -34
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-NBME5QSW.cjs → intent-resolver-S6FE5OR7.cjs} +99 -62
  44. package/dist/lib/node/intent-resolver-S6FE5OR7.cjs.map +7 -0
  45. package/dist/lib/node/{markdown-QBQTARMD.cjs → markdown-L2WMCQKM.cjs} +10 -11
  46. package/dist/lib/node/{markdown-QBQTARMD.cjs.map → markdown-L2WMCQKM.cjs.map} +3 -3
  47. package/dist/lib/node/meta.json +1 -1
  48. package/dist/lib/node/{react-surface-ICWYXRJU.cjs → react-surface-Z45BYECE.cjs} +54 -43
  49. package/dist/lib/node/react-surface-Z45BYECE.cjs.map +7 -0
  50. package/dist/lib/node/{settings-XOLYNUHH.cjs → settings-IXCPE55J.cjs} +6 -6
  51. package/dist/lib/node/{state-JMI5ZXZI.cjs → state-AT73KPGZ.cjs} +6 -6
  52. package/dist/lib/node/types.cjs +3 -3
  53. package/dist/lib/node/types.cjs.map +1 -1
  54. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs +139 -0
  55. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs.map +7 -0
  56. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs +42 -0
  57. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-TW2NME6Z.mjs → chunk-ADTVMESP.mjs} +19 -131
  59. package/dist/lib/node-esm/chunk-ADTVMESP.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-FZXTP57V.mjs → chunk-E446MGLP.mjs} +8 -7
  61. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-XQO5DGHF.mjs → chunk-J56FORYF.mjs} +15 -32
  63. package/dist/lib/node-esm/chunk-J56FORYF.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-TXW5SIBN.mjs → chunk-WLY2HMDB.mjs} +1 -2
  65. package/dist/lib/node-esm/chunk-WLY2HMDB.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-WSE23GSG.mjs +19 -0
  67. package/dist/lib/node-esm/chunk-WSE23GSG.mjs.map +7 -0
  68. package/dist/lib/node-esm/index.mjs +16 -29
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/{intent-resolver-QQCCKVEW.mjs → intent-resolver-OURFRSSF.mjs} +76 -39
  71. package/dist/lib/node-esm/intent-resolver-OURFRSSF.mjs.map +7 -0
  72. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs → markdown-ZKU23UVD.mjs} +6 -7
  73. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs.map → markdown-ZKU23UVD.mjs.map} +3 -3
  74. package/dist/lib/node-esm/meta.json +1 -1
  75. package/dist/lib/node-esm/{react-surface-Z4CLCKTN.mjs → react-surface-KIJ767JK.mjs} +47 -36
  76. package/dist/lib/node-esm/react-surface-KIJ767JK.mjs.map +7 -0
  77. package/dist/lib/node-esm/{settings-32PBKVBB.mjs → settings-ZUJQ4LWI.mjs} +2 -2
  78. package/dist/lib/node-esm/{state-PSZO57LP.mjs → state-SSDX5O67.mjs} +2 -2
  79. package/dist/lib/node-esm/types.mjs +1 -1
  80. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  82. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  84. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/index.d.ts +177 -0
  86. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  89. package/dist/types/src/components/ChatContainer.d.ts +1 -0
  90. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +1 -5
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/components/testing.d.ts +1 -0
  96. package/dist/types/src/components/testing.d.ts.map +1 -1
  97. package/dist/types/src/hooks/analytics.d.ts +0 -1
  98. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  99. package/dist/types/src/translations.d.ts +3 -3
  100. package/dist/types/src/types.d.ts +20 -5
  101. package/dist/types/src/types.d.ts.map +1 -1
  102. package/package.json +33 -33
  103. package/src/ThreadPlugin.tsx +8 -23
  104. package/src/capabilities/app-graph-builder.ts +34 -0
  105. package/src/capabilities/capabilities.ts +0 -6
  106. package/src/capabilities/index.ts +1 -0
  107. package/src/capabilities/intent-resolver.ts +59 -29
  108. package/src/capabilities/react-surface.tsx +27 -13
  109. package/src/components/ChatContainer.tsx +3 -1
  110. package/src/components/MessageContainer.tsx +5 -3
  111. package/src/components/ThreadComplementary.tsx +24 -31
  112. package/src/components/index.ts +1 -2
  113. package/src/components/testing.ts +2 -2
  114. package/src/extensions/threads.ts +1 -1
  115. package/src/hooks/analytics.ts +19 -19
  116. package/src/translations.ts +1 -1
  117. package/src/types.ts +5 -5
  118. package/src/util.ts +1 -1
  119. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs +0 -75
  120. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-NRMJGYMA.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-SJPT347G.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-SMQYULO6.mjs.map +0 -7
  125. package/dist/lib/browser/intent-resolver-FSG3ZOIM.mjs.map +0 -7
  126. package/dist/lib/browser/react-surface-KOYRIK3E.mjs.map +0 -7
  127. package/dist/lib/node/ChannelContainer-F7345XW2.cjs +0 -99
  128. package/dist/lib/node/ChannelContainer-F7345XW2.cjs.map +0 -7
  129. package/dist/lib/node/chunk-AXTPNGRI.cjs.map +0 -7
  130. package/dist/lib/node/chunk-DGV5ABT6.cjs +0 -338
  131. package/dist/lib/node/chunk-DGV5ABT6.cjs.map +0 -7
  132. package/dist/lib/node/chunk-JBOC6MIE.cjs.map +0 -7
  133. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +0 -7
  134. package/dist/lib/node/intent-resolver-NBME5QSW.cjs.map +0 -7
  135. package/dist/lib/node/react-surface-ICWYXRJU.cjs.map +0 -7
  136. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs +0 -76
  137. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-FZXTP57V.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-TW2NME6Z.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-XQO5DGHF.mjs.map +0 -7
  142. package/dist/lib/node-esm/intent-resolver-QQCCKVEW.mjs.map +0 -7
  143. package/dist/lib/node-esm/react-surface-Z4CLCKTN.mjs.map +0 -7
  144. package/dist/types/src/components/ChannelContainer.d.ts +0 -9
  145. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  146. package/src/components/ChannelContainer.tsx +0 -80
  147. /package/dist/lib/browser/{settings-5CREE7BH.mjs.map → settings-4FEC7EAX.mjs.map} +0 -0
  148. /package/dist/lib/browser/{state-HPUFZBB7.mjs.map → state-PNMSLKAH.mjs.map} +0 -0
  149. /package/dist/lib/node/{settings-XOLYNUHH.cjs.map → settings-IXCPE55J.cjs.map} +0 -0
  150. /package/dist/lib/node/{state-JMI5ZXZI.cjs.map → state-AT73KPGZ.cjs.map} +0 -0
  151. /package/dist/lib/node-esm/{settings-32PBKVBB.mjs.map → settings-ZUJQ4LWI.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{state-PSZO57LP.mjs.map → state-SSDX5O67.mjs.map} +0 -0
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_E7Z3BKRQ_exports = {};
30
+ __export(chunk_E7Z3BKRQ_exports, {
31
+ MessageContainer: () => MessageContainer,
32
+ command: () => command,
33
+ getMessageMetadata: () => getMessageMetadata
34
+ });
35
+ module.exports = __toCommonJS(chunk_E7Z3BKRQ_exports);
36
+ var import_chunk_AKINTFBH = require("./chunk-AKINTFBH.cjs");
37
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
38
+ var import_language = require("@codemirror/language");
39
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
40
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
41
+ var import_display_name = require("@dxos/display-name");
42
+ var import_util = require("@dxos/util");
43
+ var import_view = require("@codemirror/view");
44
+ var import_react = require("@phosphor-icons/react");
45
+ var import_react2 = __toESM(require("react"));
46
+ var import_app_framework = require("@dxos/app-framework");
47
+ var import_live_object = require("@dxos/live-object");
48
+ var import_react_client = require("@dxos/react-client");
49
+ var import_halo = require("@dxos/react-client/halo");
50
+ var import_react_ui = require("@dxos/react-ui");
51
+ var import_react_ui_editor2 = require("@dxos/react-ui-editor");
52
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
53
+ var import_react_ui_thread = require("@dxos/react-ui-thread");
54
+ var parser = import_language.StreamLanguage.define({
55
+ startState: () => ({
56
+ count: 0
57
+ }),
58
+ token: (stream, state) => {
59
+ state.count++;
60
+ if (stream.eatSpace()) {
61
+ return null;
62
+ }
63
+ if (state.count === 1 && stream.match(/^(\/\w+)/)) {
64
+ return "tagName";
65
+ }
66
+ stream.next();
67
+ return null;
68
+ }
69
+ });
70
+ var styles = import_language.HighlightStyle.define([
71
+ {
72
+ tag: import_react_ui_editor.tags.tagName,
73
+ class: (0, import_react_ui_theme.mx)("dx-tag dx-tag--indigo text-baseText font-medium")
74
+ }
75
+ ]);
76
+ var command = [
77
+ parser,
78
+ (0, import_language.syntaxHighlighting)(styles)
79
+ ];
80
+ var getMessageMetadata = (id, identity) => {
81
+ const fallback = (0, import_util.hexToFallback)(identity?.identityKey.toHex() ?? "0");
82
+ return {
83
+ id,
84
+ authorId: identity?.did,
85
+ authorName: identity?.profile?.displayName ?? (identity?.identityKey ? (0, import_display_name.generateName)(identity.identityKey.toHex()) : void 0),
86
+ authorAvatarProps: {
87
+ hue: identity?.profile?.data?.hue ?? fallback.hue,
88
+ emoji: identity?.profile?.data?.emoji ?? fallback.emoji
89
+ }
90
+ };
91
+ };
92
+ var messageControlClassNames = [
93
+ "!p-1 !min-bs-0 transition-opacity",
94
+ import_react_ui_theme2.hoverableControlItem
95
+ ];
96
+ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
97
+ const senderIdentity = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
98
+ const messageMetadata = getMessageMetadata(message.id, senderIdentity);
99
+ const userIsAuthor = (0, import_halo.useIdentity)()?.did === messageMetadata.authorId;
100
+ const [editing, setEditing] = (0, import_react2.useState)(false);
101
+ const handleDelete = (0, import_react2.useCallback)(() => onDelete?.(message.id), [
102
+ message,
103
+ onDelete
104
+ ]);
105
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_ONLWOUYZ.THREAD_PLUGIN);
106
+ const editLabel = t(editing ? "save message label" : "edit message label");
107
+ const deleteLabel = t("delete message label");
108
+ const textBlock = message.blocks.find((block) => block.type === "text");
109
+ const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
110
+ (0, import_chunk_AKINTFBH.useOnEditAnalytics)(message, textBlock, !!editing);
111
+ return /* @__PURE__ */ import_react2.default.createElement(import_react_ui_thread.MessageRoot, {
112
+ ...messageMetadata,
113
+ classNames: [
114
+ import_react_ui_theme2.hoverableControls,
115
+ import_react_ui_theme2.hoverableFocusedWithinControls
116
+ ]
117
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_thread.MessageHeading, {
118
+ authorName: messageMetadata.authorName,
119
+ timestamp: messageMetadata.timestamp
120
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.ButtonGroup, {
121
+ classNames: "mie-1"
122
+ }, userIsAuthor && editable && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Trigger, {
123
+ asChild: true
124
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
125
+ variant: "ghost",
126
+ "data-testid": editing ? "thread.message.save" : "thread.message.edit",
127
+ classNames: messageControlClassNames,
128
+ onClick: () => setEditing((editing2) => !editing2)
129
+ }, /* @__PURE__ */ import_react2.default.createElement("span", {
130
+ className: "sr-only"
131
+ }, editLabel), editing ? /* @__PURE__ */ import_react2.default.createElement(import_react.Check, {
132
+ className: (0, import_react_ui_theme2.getSize)(4)
133
+ }) : /* @__PURE__ */ import_react2.default.createElement(import_react.PencilSimple, {
134
+ className: (0, import_react_ui_theme2.getSize)(4)
135
+ }))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Portal, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Content, null, editLabel, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Root, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Trigger, {
136
+ asChild: true
137
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Button, {
138
+ variant: "ghost",
139
+ "data-testid": "thread.message.delete",
140
+ classNames: messageControlClassNames,
141
+ onClick: () => handleDelete()
142
+ }, /* @__PURE__ */ import_react2.default.createElement("span", {
143
+ className: "sr-only"
144
+ }, deleteLabel), /* @__PURE__ */ import_react2.default.createElement(import_react.X, {
145
+ className: (0, import_react_ui_theme2.getSize)(4)
146
+ }))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Portal, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ import_react2.default.createElement(TextboxBlock, {
147
+ block: textBlock,
148
+ isAuthor: userIsAuthor,
149
+ editing
150
+ }), import_live_object.RefArray.targets(references).map((reference, index) => /* @__PURE__ */ import_react2.default.createElement(MessagePart, {
151
+ key: index,
152
+ part: reference
153
+ })));
154
+ };
155
+ var MessagePart = ({ part }) => {
156
+ return /* @__PURE__ */ import_react2.default.createElement(MessageBlockObjectTile, {
157
+ subject: part
158
+ });
159
+ };
160
+ var TextboxBlock = ({ block, isAuthor, editing }) => {
161
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
162
+ const inMemoryContentRef = (0, import_react2.useRef)(block.text);
163
+ const handleDocumentChange = (0, import_react2.useCallback)((newState) => {
164
+ inMemoryContentRef.current = newState;
165
+ }, []);
166
+ const saveDocumentChange = (0, import_react2.useCallback)(() => {
167
+ block.text = inMemoryContentRef.current;
168
+ }, [
169
+ block
170
+ ]);
171
+ (0, import_react_ui.useOnTransition)(editing, true, false, saveDocumentChange);
172
+ const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
173
+ initialValue: block.text,
174
+ extensions: [
175
+ (0, import_react_ui_editor2.createBasicExtensions)({
176
+ readOnly: !isAuthor || !editing
177
+ }),
178
+ (0, import_react_ui_editor2.createThemeExtensions)({
179
+ themeMode
180
+ }),
181
+ command,
182
+ import_view.EditorView.updateListener.of((update) => {
183
+ if (update.docChanged) {
184
+ handleDocumentChange(update.state.doc.toString());
185
+ }
186
+ })
187
+ ]
188
+ }), [
189
+ block.text,
190
+ editing,
191
+ isAuthor,
192
+ themeMode,
193
+ handleDocumentChange
194
+ ]);
195
+ (0, import_react2.useEffect)(() => {
196
+ editing && view?.focus();
197
+ }, [
198
+ editing,
199
+ view
200
+ ]);
201
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
202
+ role: "none",
203
+ ref: parentRef,
204
+ className: "mie-4",
205
+ ...focusAttributes
206
+ });
207
+ };
208
+ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react2.forwardRef)(({ subject }, forwardedRef) => {
209
+ let title = subject.name ?? subject.title ?? subject.type ?? "Object";
210
+ if (typeof title !== "string") {
211
+ title = title?.content ?? "";
212
+ }
213
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
214
+ role: "group",
215
+ 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),
216
+ ref: forwardedRef
217
+ }, /* @__PURE__ */ import_react2.default.createElement(import_app_framework.Surface, {
218
+ role: "card",
219
+ limit: 1,
220
+ data: {
221
+ subject
222
+ },
223
+ fallback: title
224
+ }));
225
+ });
226
+ // Annotate the CommonJS export names for ESM import in node:
227
+ 0 && (module.exports = {
228
+ MessageContainer,
229
+ command,
230
+ getMessageMetadata
231
+ });
232
+ //# sourceMappingURL=chunk-E7Z3BKRQ.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/command-extension.ts", "../../../src/util.ts", "../../../src/components/MessageContainer.tsx"],
4
+ "sourcesContent": ["//\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 } 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 { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\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?.did,\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", "//\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 { RefArray } from '@dxos/live-object';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, 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 {\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 { type TextContentBlock, type MessageType } from '@dxos/schema';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n editable = false,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.did === 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 const textBlock = message.blocks.find((block) => block.type === 'text');\n const references = message.blocks.filter((block) => block.type === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && editable && (\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>\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>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {RefArray.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: TextContentBlock;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.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 [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(\n ({ subject }, forwardedRef) => {\n let title = subject.name ?? subject.title ?? subject.type ?? '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 ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\n </div>\n );\n },\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui_editor", "import_react_ui_theme", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "did", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "editable", "onDelete", "senderIdentity", "find", "member", "sender", "identityDid", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "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", "RefArray", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "useEffect", "focus", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "Surface", "limit"]
7
+ }
@@ -16,21 +16,20 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_VEVJBOWK_exports = {};
20
- __export(chunk_VEVJBOWK_exports, {
19
+ var chunk_NQ5DTPOY_exports = {};
20
+ __export(chunk_NQ5DTPOY_exports, {
21
21
  ThreadCapabilities: () => ThreadCapabilities
22
22
  });
23
- module.exports = __toCommonJS(chunk_VEVJBOWK_exports);
23
+ module.exports = __toCommonJS(chunk_NQ5DTPOY_exports);
24
24
  var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
25
25
  var import_app_framework = require("@dxos/app-framework");
26
26
  var ThreadCapabilities;
27
27
  (function(ThreadCapabilities2) {
28
28
  ThreadCapabilities2.State = (0, import_app_framework.defineCapability)(`${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/capability/state`);
29
29
  ThreadCapabilities2.MutableState = (0, import_app_framework.defineCapability)(`${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/capability/state`);
30
- ThreadCapabilities2.Activity = (0, import_app_framework.defineCapability)(`${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/capability/activity`);
31
30
  })(ThreadCapabilities || (ThreadCapabilities = {}));
32
31
  // Annotate the CommonJS export names for ESM import in node:
33
32
  0 && (module.exports = {
34
33
  ThreadCapabilities
35
34
  });
36
- //# sourceMappingURL=chunk-VEVJBOWK.cjs.map
35
+ //# sourceMappingURL=chunk-NQ5DTPOY.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ViewState, type ThreadState } from '../types';\n\nexport namespace ThreadCapabilities {\n type GetViewState = (subjectId: string) => ViewState;\n export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAAiC;;UAMhBA,qBAAAA;sBAEFC,YAAQC,uCACnB,GAAGC,mCAAAA,mBAAgC;sBAExBC,mBAAeF,uCAC1B,GAAGC,mCAAAA,mBAAgC;AAEvC,GARiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
6
+ "names": ["ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState"]
7
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var chunk_S2A6BXEA_exports = {};
30
+ __export(chunk_S2A6BXEA_exports, {
31
+ AppGraphBuilder: () => AppGraphBuilder,
32
+ IntentResolver: () => IntentResolver,
33
+ Markdown: () => Markdown,
34
+ ReactSurface: () => ReactSurface,
35
+ ThreadState: () => ThreadState
36
+ });
37
+ module.exports = __toCommonJS(chunk_S2A6BXEA_exports);
38
+ var import_app_framework = require("@dxos/app-framework");
39
+ var AppGraphBuilder = (0, import_app_framework.lazy)(() => import("./app-graph-builder-HZNWT4QU.cjs"));
40
+ var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-S6FE5OR7.cjs"));
41
+ var Markdown = (0, import_app_framework.lazy)(() => import("./markdown-L2WMCQKM.cjs"));
42
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-Z45BYECE.cjs"));
43
+ var ThreadSettings = (0, import_app_framework.lazy)(() => import("./settings-IXCPE55J.cjs"));
44
+ var ThreadState = (0, import_app_framework.lazy)(() => import("./state-AT73KPGZ.cjs"));
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ AppGraphBuilder,
48
+ IntentResolver,
49
+ Markdown,
50
+ ReactSurface,
51
+ ThreadState
52
+ });
53
+ //# sourceMappingURL=chunk-S2A6BXEA.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAAqB;AAEd,IAAMA,sBAAkBC,2BAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,qBAAiBD,2BAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,eAAWF,2BAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,mBAAeH,2BAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,qBAAiBJ,2BAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,kBAAcL,2BAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }
@@ -20,23 +20,22 @@ var node_exports = {};
20
20
  __export(node_exports, {
21
21
  THREAD_ITEM: () => import_chunk_ONLWOUYZ.THREAD_ITEM,
22
22
  THREAD_PLUGIN: () => import_chunk_ONLWOUYZ.THREAD_PLUGIN,
23
- ThreadCapabilities: () => import_chunk_VEVJBOWK.ThreadCapabilities,
23
+ ThreadCapabilities: () => import_chunk_NQ5DTPOY.ThreadCapabilities,
24
24
  ThreadEvents: () => ThreadEvents,
25
25
  ThreadPlugin: () => ThreadPlugin,
26
26
  meta: () => import_chunk_ONLWOUYZ.meta,
27
- useAnalyticsCallback: () => import_chunk_JBOC6MIE.useAnalyticsCallback,
28
- useOnEditAnalytics: () => import_chunk_JBOC6MIE.useOnEditAnalytics,
29
- useStatus: () => import_chunk_JBOC6MIE.useStatus
27
+ useOnEditAnalytics: () => import_chunk_AKINTFBH.useOnEditAnalytics,
28
+ useStatus: () => import_chunk_AKINTFBH.useStatus
30
29
  });
31
30
  module.exports = __toCommonJS(node_exports);
32
- var import_chunk_JBOC6MIE = require("./chunk-JBOC6MIE.cjs");
33
- var import_chunk_AXTPNGRI = require("./chunk-AXTPNGRI.cjs");
34
- var import_chunk_VEVJBOWK = require("./chunk-VEVJBOWK.cjs");
31
+ var import_chunk_S2A6BXEA = require("./chunk-S2A6BXEA.cjs");
32
+ var import_chunk_NQ5DTPOY = require("./chunk-NQ5DTPOY.cjs");
33
+ var import_chunk_AKINTFBH = require("./chunk-AKINTFBH.cjs");
34
+ var import_chunk_46BSFPBV = require("./chunk-46BSFPBV.cjs");
35
35
  var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
36
36
  var import_app_framework = require("@dxos/app-framework");
37
37
  var import_app_framework2 = require("@dxos/app-framework");
38
38
  var import_plugin_client = require("@dxos/plugin-client");
39
- var import_plugin_deck = require("@dxos/plugin-deck");
40
39
  var import_plugin_markdown = require("@dxos/plugin-markdown");
41
40
  var import_plugin_space = require("@dxos/plugin-space");
42
41
  var import_types = require("@dxos/plugin-space/types");
@@ -79,7 +78,7 @@ var translations_default = [
79
78
  "edit message label": "Edit",
80
79
  "delete message label": "Delete message",
81
80
  "open comments panel label": "Show Comments",
82
- "comments panel label": "Comments",
81
+ "comments label": "Comments",
83
82
  "show all label": "All comments",
84
83
  "show unresolved label": "Unresolved only"
85
84
  }
@@ -99,7 +98,7 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
99
98
  // Should this be a different event?
100
99
  // Should settings store be renamed to be more generic?
101
100
  activatesOn: import_app_framework2.Events.SetupSettings,
102
- activate: import_chunk_JBOC6MIE.ThreadState
101
+ activate: import_chunk_S2A6BXEA.ThreadState
103
102
  }),
104
103
  (0, import_app_framework2.defineModule)({
105
104
  id: `${import_chunk_ONLWOUYZ.meta.id}/module/translations`,
@@ -116,7 +115,7 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
116
115
  (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
117
116
  id: import_types.ChannelType.typename,
118
117
  metadata: {
119
- icon: "ph--chat--regular"
118
+ icon: "ph--hash--regular"
120
119
  }
121
120
  }),
122
121
  (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
@@ -162,7 +161,7 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
162
161
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
163
162
  activate: () => (0, import_app_framework2.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
164
163
  objectSchema: import_types.ChannelType,
165
- getIntent: (_, options) => (0, import_app_framework2.createIntent)(import_chunk_AXTPNGRI.ThreadAction.CreateChannel, {
164
+ getIntent: (_, options) => (0, import_app_framework2.createIntent)(import_chunk_46BSFPBV.ThreadAction.CreateChannel, {
166
165
  spaceId: options.space.id
167
166
  })
168
167
  }))
@@ -183,28 +182,10 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
183
182
  import_schema.MessageTypeV1ToV2
184
183
  ])
185
184
  }),
186
- (0, import_app_framework2.defineModule)({
187
- id: `${import_chunk_ONLWOUYZ.meta.id}/module/complementary-panel`,
188
- activatesOn: import_plugin_deck.DeckEvents.SetupComplementaryPanels,
189
- activate: () => (0, import_app_framework2.contributes)(import_plugin_deck.DeckCapabilities.ComplementaryPanel, {
190
- id: "comments",
191
- label: [
192
- "comments panel label",
193
- {
194
- ns: import_chunk_ONLWOUYZ.THREAD_PLUGIN
195
- }
196
- ],
197
- icon: "ph--chat-text--regular",
198
- position: "hoist",
199
- // TODO(wittjosiah): Support comments on any object.
200
- // filter: (node) => isEchoObject(node.data) && !!getSpace(node.data),
201
- filter: (node) => !!node.data && typeof node.data === "object" && "threads" in node.data && Array.isArray(node.data.threads) && !(node.data instanceof import_types.ChannelType)
202
- })
203
- }),
204
185
  (0, import_app_framework2.defineModule)({
205
186
  id: `${import_chunk_ONLWOUYZ.meta.id}/module/markdown`,
206
187
  activatesOn: import_plugin_markdown.MarkdownEvents.SetupExtensions,
207
- activate: import_chunk_JBOC6MIE.Markdown
188
+ activate: import_chunk_S2A6BXEA.Markdown
208
189
  }),
209
190
  (0, import_app_framework2.defineModule)({
210
191
  id: `${import_chunk_ONLWOUYZ.meta.id}/module/react-surface`,
@@ -214,12 +195,17 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
214
195
  import_plugin_space.ThreadEvents.SetupThread,
215
196
  ThreadEvents.SetupActivity
216
197
  ],
217
- activate: import_chunk_JBOC6MIE.ReactSurface
198
+ activate: import_chunk_S2A6BXEA.ReactSurface
218
199
  }),
219
200
  (0, import_app_framework2.defineModule)({
220
201
  id: `${import_chunk_ONLWOUYZ.meta.id}/module/intent-resolver`,
221
202
  activatesOn: import_app_framework2.Events.SetupIntentResolver,
222
- activate: import_chunk_JBOC6MIE.IntentResolver
203
+ activate: import_chunk_S2A6BXEA.IntentResolver
204
+ }),
205
+ (0, import_app_framework2.defineModule)({
206
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/app-graph-builder`,
207
+ activatesOn: import_app_framework2.Events.SetupAppGraph,
208
+ activate: import_chunk_S2A6BXEA.AppGraphBuilder
223
209
  })
224
210
  ]);
225
211
  // Annotate the CommonJS export names for ESM import in node:
@@ -230,7 +216,6 @@ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ON
230
216
  ThreadEvents,
231
217
  ThreadPlugin,
232
218
  meta,
233
- useAnalyticsCallback,
234
219
  useOnEditAnalytics,
235
220
  useStatus
236
221
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/events.ts", "../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadEvents {\n export const SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { DeckCapabilities, DeckEvents } from '@dxos/plugin-deck';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';\nimport { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';\n\nimport { IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { ThreadEvents as LocalThreadEvents } from './events';\nimport { meta, THREAD_ITEM, THREAD_PLUGIN } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--chat--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: MessageType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType, MessageTypeV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/complementary-panel`,\n activatesOn: DeckEvents.SetupComplementaryPanels,\n activate: () =>\n contributes(DeckCapabilities.ComplementaryPanel, {\n id: 'comments',\n label: ['comments panel label', { ns: THREAD_PLUGIN }],\n icon: 'ph--chat-text--regular',\n position: 'hoist',\n // TODO(wittjosiah): Support comments on any object.\n // filter: (node) => isEchoObject(node.data) && !!getSpace(node.data),\n filter: (node) =>\n !!node.data &&\n typeof node.data === 'object' &&\n 'threads' in node.data &&\n Array.isArray(node.data.threads) &&\n !(node.data instanceof ChannelType),\n }),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments panel label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
5
- "mappings": "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",
6
- "names": ["import_app_framework", "import_types", "ThreadEvents", "SetupActivity", "Events", "createStateEvent", "THREAD_PLUGIN", "ChannelType", "typename", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "MessageType", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "MessageTypeV1", "SetupMigration", "Migration", "MessageTypeV1ToV2", "DeckEvents", "SetupComplementaryPanels", "DeckCapabilities", "ComplementaryPanel", "ns", "position", "filter", "node", "Array", "isArray", "threads", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "SetupThread", "LocalThreadEvents", "ReactSurface", "SetupIntentResolver", "IntentResolver"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadEvents {\n export const SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';\nimport { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';\n\nimport { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { ThreadEvents as LocalThreadEvents } from './events';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--hash--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: MessageType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType, MessageTypeV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["import_app_framework", "import_types", "ThreadEvents", "SetupActivity", "Events", "createStateEvent", "THREAD_PLUGIN", "ChannelType", "typename", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "MessageType", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "MessageTypeV1", "SetupMigration", "Migration", "MessageTypeV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "SetupThread", "LocalThreadEvents", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }