@dxos/plugin-thread 0.7.5-staging.e6154f3 → 0.8.1-main.013e445

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 (171) hide show
  1. package/dist/lib/browser/ChannelContainer-YWGW5LTF.mjs +74 -0
  2. package/dist/lib/browser/ChannelContainer-YWGW5LTF.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-FZ34L7RM.mjs} +4 -3
  4. package/dist/lib/browser/chunk-FZ34L7RM.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-MC42ZV23.mjs} +16 -4
  6. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-MC42ZV23.mjs.map} +4 -4
  7. package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-NOOMCX5E.mjs} +3 -2
  8. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-VDQ3TPIW.mjs} +28 -19
  10. package/dist/lib/browser/chunk-VDQ3TPIW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-636QDHE3.mjs → chunk-WBJLUUOK.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-636QDHE3.mjs.map → chunk-WBJLUUOK.mjs.map} +2 -2
  13. package/dist/lib/browser/index.mjs +38 -27
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-FCC6BZSE.mjs} +5 -5
  16. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs.map → intent-resolver-FCC6BZSE.mjs.map} +2 -2
  17. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-I7DN4THW.mjs} +6 -6
  18. package/dist/lib/browser/markdown-I7DN4THW.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-34FQO5BB.mjs} +23 -31
  21. package/dist/lib/browser/react-surface-34FQO5BB.mjs.map +7 -0
  22. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-G5ZTDTIU.mjs} +3 -3
  23. package/dist/lib/browser/{state-GNFUURIC.mjs → state-HPUFZBB7.mjs} +4 -3
  24. package/dist/lib/browser/state-HPUFZBB7.mjs.map +7 -0
  25. package/dist/lib/browser/types.mjs +2 -2
  26. package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs +98 -0
  27. package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-FMKMIGXZ.cjs} +30 -6
  29. package/dist/lib/node/chunk-FMKMIGXZ.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-G63K6IDM.cjs} +35 -26
  31. package/dist/lib/node/chunk-G63K6IDM.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  33. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  34. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
  35. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-X5TUGJ5K.cjs} +8 -7
  37. package/dist/lib/node/chunk-X5TUGJ5K.cjs.map +7 -0
  38. package/dist/lib/node/index.cjs +74 -64
  39. package/dist/lib/node/index.cjs.map +4 -4
  40. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-KTZSUHCU.cjs} +22 -22
  41. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs.map → intent-resolver-KTZSUHCU.cjs.map} +2 -2
  42. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-EUC6FFCM.cjs} +12 -12
  43. package/dist/lib/node/markdown-EUC6FFCM.cjs.map +7 -0
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-SF7YHWER.cjs} +44 -52
  46. package/dist/lib/node/react-surface-SF7YHWER.cjs.map +7 -0
  47. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-WQXGBGOV.cjs} +8 -8
  48. package/dist/lib/node/{state-TQWEZ6B3.cjs → state-JMI5ZXZI.cjs} +8 -7
  49. package/dist/lib/node/state-JMI5ZXZI.cjs.map +7 -0
  50. package/dist/lib/node/types.cjs +4 -4
  51. package/dist/lib/node/types.cjs.map +1 -1
  52. package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs +75 -0
  53. package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs → chunk-42F2DTMM.mjs} +1 -1
  55. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs.map → chunk-42F2DTMM.mjs.map} +2 -2
  56. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-C46EUYQO.mjs} +16 -4
  57. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-C46EUYQO.mjs.map} +4 -4
  58. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-FIPZFSRG.mjs} +28 -19
  59. package/dist/lib/node-esm/chunk-FIPZFSRG.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-TXW5SIBN.mjs} +3 -2
  61. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs → chunk-XUAPEJSP.mjs} +4 -3
  63. package/dist/lib/node-esm/chunk-XUAPEJSP.mjs.map +7 -0
  64. package/dist/lib/node-esm/index.mjs +38 -27
  65. package/dist/lib/node-esm/index.mjs.map +4 -4
  66. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-F4GQ2DBX.mjs} +5 -5
  67. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs.map → intent-resolver-F4GQ2DBX.mjs.map} +2 -2
  68. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-LNEGE76H.mjs} +6 -6
  69. package/dist/lib/node-esm/markdown-LNEGE76H.mjs.map +7 -0
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{react-surface-AZHTTR6J.mjs → react-surface-W6TBSW7R.mjs} +23 -31
  72. package/dist/lib/node-esm/react-surface-W6TBSW7R.mjs.map +7 -0
  73. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-3NFSK2ZO.mjs} +3 -3
  74. package/dist/lib/node-esm/{state-7MLR27YG.mjs → state-PSZO57LP.mjs} +4 -3
  75. package/dist/lib/node-esm/state-PSZO57LP.mjs.map +7 -0
  76. package/dist/lib/node-esm/types.mjs +2 -2
  77. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  79. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/ChannelContainer.d.ts +9 -0
  82. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/ChatContainer.d.ts +3 -2
  85. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  86. package/dist/types/src/components/CommentContainer.d.ts +2 -1
  87. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  88. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/CommentsContainer.d.ts +2 -1
  90. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/MessageContainer.d.ts +3 -2
  92. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  93. package/dist/types/src/components/ThreadComplementary.d.ts +2 -1
  94. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  95. package/dist/types/src/components/ThreadSettings.d.ts +2 -1
  96. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  97. package/dist/types/src/components/index.d.ts +3 -2
  98. package/dist/types/src/components/index.d.ts.map +1 -1
  99. package/dist/types/src/components/testing.d.ts +104 -44
  100. package/dist/types/src/components/testing.d.ts.map +1 -1
  101. package/dist/types/src/events.d.ts +4 -0
  102. package/dist/types/src/events.d.ts.map +1 -0
  103. package/dist/types/src/hooks/analytics.d.ts +2 -1
  104. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  105. package/dist/types/src/index.d.ts +2 -0
  106. package/dist/types/src/index.d.ts.map +1 -1
  107. package/dist/types/src/meta.d.ts +2 -7
  108. package/dist/types/src/meta.d.ts.map +1 -1
  109. package/dist/types/src/translations.d.ts +2 -9
  110. package/dist/types/src/translations.d.ts.map +1 -1
  111. package/dist/types/src/types.d.ts +4 -1
  112. package/dist/types/src/types.d.ts.map +1 -1
  113. package/package.json +32 -30
  114. package/src/ThreadPlugin.tsx +10 -4
  115. package/src/capabilities/capabilities.ts +6 -0
  116. package/src/capabilities/intent-resolver.ts +1 -1
  117. package/src/capabilities/react-surface.tsx +5 -16
  118. package/src/capabilities/state.ts +1 -1
  119. package/src/components/ChannelContainer.tsx +80 -0
  120. package/src/components/Chat.stories.tsx +4 -2
  121. package/src/components/ChatContainer.tsx +5 -5
  122. package/src/components/CommentContainer.tsx +1 -1
  123. package/src/components/Comments.stories.tsx +2 -1
  124. package/src/components/MessageContainer.tsx +15 -13
  125. package/src/components/ThreadComplementary.tsx +5 -4
  126. package/src/components/index.ts +1 -1
  127. package/src/components/testing.ts +15 -12
  128. package/src/events.ts +11 -0
  129. package/src/extensions/threads.ts +2 -2
  130. package/src/hooks/analytics.ts +7 -2
  131. package/src/index.ts +2 -0
  132. package/src/meta.ts +2 -2
  133. package/src/translations.ts +1 -3
  134. package/src/types.ts +4 -1
  135. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  136. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  140. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
  142. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  143. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  144. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  145. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  146. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  147. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  148. package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
  149. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  150. package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
  151. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
  152. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  153. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  154. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  155. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  156. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  157. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  161. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  162. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
  163. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  164. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  165. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  166. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  167. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  168. package/src/components/ThreadContainer.tsx +0 -22
  169. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-G5ZTDTIU.mjs.map} +0 -0
  170. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-WQXGBGOV.cjs.map} +0 -0
  171. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-3NFSK2ZO.mjs.map} +0 -0
@@ -26,20 +26,19 @@ 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 chunk_RQR5Z23G_exports = {};
30
- __export(chunk_RQR5Z23G_exports, {
29
+ var chunk_G63K6IDM_exports = {};
30
+ __export(chunk_G63K6IDM_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  MessageContainer: () => MessageContainer,
33
33
  command: () => command,
34
34
  getMessageMetadata: () => getMessageMetadata
35
35
  });
36
- module.exports = __toCommonJS(chunk_RQR5Z23G_exports);
37
- var import_chunk_AWSTZ2KN = require("./chunk-AWSTZ2KN.cjs");
38
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
36
+ module.exports = __toCommonJS(chunk_G63K6IDM_exports);
37
+ var import_chunk_FMKMIGXZ = require("./chunk-FMKMIGXZ.cjs");
38
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_echo_schema = require("@dxos/echo-schema");
41
41
  var import_live_object = require("@dxos/live-object");
42
- var import_types = require("@dxos/plugin-space/types");
43
42
  var import_echo = require("@dxos/react-client/echo");
44
43
  var import_halo = require("@dxos/react-client/halo");
45
44
  var import_react_ui = require("@dxos/react-ui");
@@ -47,6 +46,7 @@ var import_react_ui_editor = require("@dxos/react-ui-editor");
47
46
  var import_react_ui_stack = require("@dxos/react-ui-stack");
48
47
  var import_react_ui_theme = require("@dxos/react-ui-theme");
49
48
  var import_react_ui_thread = require("@dxos/react-ui-thread");
49
+ var import_schema = require("@dxos/schema");
50
50
  var import_view = require("@codemirror/view");
51
51
  var import_react2 = require("@phosphor-icons/react");
52
52
  var import_react3 = __toESM(require("react"));
@@ -114,9 +114,12 @@ var MessageContainer = ({ message, members, onDelete }) => {
114
114
  message,
115
115
  onDelete
116
116
  ]);
117
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
117
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_ONLWOUYZ.THREAD_PLUGIN);
118
118
  const editLabel = t(editing ? "save message label" : "edit message label");
119
119
  const deleteLabel = t("delete message label");
120
+ const textBlock = message.blocks.find((block) => block.type === "text");
121
+ const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
122
+ (0, import_chunk_FMKMIGXZ.useOnEditAnalytics)(message, textBlock, !!editing);
120
123
  return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
121
124
  ...messageMetadata,
122
125
  classNames: [
@@ -152,13 +155,13 @@ var MessageContainer = ({ message, members, onDelete }) => {
152
155
  className: "sr-only"
153
156
  }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
154
157
  className: (0, import_react_ui_theme2.getSize)(4)
155
- }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
156
- message,
158
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
159
+ block: textBlock,
157
160
  isAuthor: userIsAuthor,
158
161
  editing
159
- }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
162
+ }), import_live_object2.RefArray.targets(references).map((reference, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
160
163
  key: index,
161
- part
164
+ part: reference
162
165
  })));
163
166
  };
164
167
  var MessagePart = ({ part }) => {
@@ -166,20 +169,20 @@ var MessagePart = ({ part }) => {
166
169
  subject: part
167
170
  });
168
171
  };
169
- var TextboxBlock = ({ message, isAuthor, editing }) => {
172
+ var TextboxBlock = ({ block, isAuthor, editing }) => {
170
173
  const { themeMode } = (0, import_react_ui2.useThemeContext)();
171
- const inMemoryContentRef = (0, import_react3.useRef)(message.text);
174
+ const inMemoryContentRef = (0, import_react3.useRef)(block.text);
172
175
  const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
173
176
  inMemoryContentRef.current = newState;
174
177
  }, []);
175
178
  const saveDocumentChange = (0, import_react3.useCallback)(() => {
176
- message.text = inMemoryContentRef.current;
179
+ block.text = inMemoryContentRef.current;
177
180
  }, [
178
- message
181
+ block
179
182
  ]);
180
183
  (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
181
184
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
182
- initialValue: message.text,
185
+ initialValue: block.text,
183
186
  extensions: [
184
187
  (0, import_react_ui_editor2.createBasicExtensions)({
185
188
  readonly: !isAuthor || !editing
@@ -195,7 +198,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
195
198
  })
196
199
  ]
197
200
  }), [
198
- message.text,
201
+ block.text,
199
202
  editing,
200
203
  isAuthor,
201
204
  themeMode,
@@ -207,7 +210,6 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
207
210
  editing,
208
211
  view
209
212
  ]);
210
- (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
211
213
  return /* @__PURE__ */ import_react3.default.createElement("div", {
212
214
  role: "none",
213
215
  ref: parentRef,
@@ -237,8 +239,8 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
237
239
  const identity = (0, import_halo.useIdentity)();
238
240
  const space = (0, import_echo.getSpace)(thread);
239
241
  const members = (0, import_echo.useMembers)(space?.key);
240
- const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
241
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
242
+ const activity = (0, import_chunk_FMKMIGXZ.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
243
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_ONLWOUYZ.THREAD_PLUGIN);
242
244
  const [_count, _setCount] = (0, import_react.useState)(0);
243
245
  const rerenderEditor = () => _setCount((count) => count + 1);
244
246
  const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
@@ -272,13 +274,20 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
272
274
  if (!messageRef.current?.length) {
273
275
  return false;
274
276
  }
275
- thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
277
+ thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_schema.MessageType, {
276
278
  sender: {
277
279
  identityKey: identity.identityKey.toHex()
278
280
  },
279
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
280
- text: messageRef.current,
281
- context: context ? (0, import_live_object.makeRef)(context) : void 0
281
+ created: (/* @__PURE__ */ new Date()).toISOString(),
282
+ blocks: [
283
+ {
284
+ type: "text",
285
+ text: messageRef.current
286
+ }
287
+ ],
288
+ properties: context ? {
289
+ context: (0, import_live_object.makeRef)(context)
290
+ } : void 0
282
291
  })));
283
292
  messageRef.current = "";
284
293
  setAutoFocus(true);
@@ -303,7 +312,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
303
312
  }, /* @__PURE__ */ import_react.default.createElement("div", {
304
313
  role: "none",
305
314
  className: (0, import_react_ui_theme.mx)(import_react_ui_thread.threadLayout, "place-self-end")
306
- }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
315
+ }, import_live_object.RefArray.targets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
307
316
  key: message.id,
308
317
  message,
309
318
  members,
@@ -328,4 +337,4 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
328
337
  command,
329
338
  getMessageMetadata
330
339
  });
331
- //# sourceMappingURL=chunk-RQR5Z23G.cjs.map
340
+ //# sourceMappingURL=chunk-G63K6IDM.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Ref } from '@dxos/echo-schema';\nimport { create, makeRef, RefArray } from '@dxos/live-object';\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 { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';\nimport { MessageType } from '@dxos/schema';\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 <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\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 makeRef(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n created: new Date().toISOString(),\n blocks: [{ type: 'text', text: messageRef.current }],\n properties: context ? { context: makeRef(context) } : undefined,\n }),\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.findIndex(Ref.hasObjectId(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 {RefArray.targets(thread.messages ?? []).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 { 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 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 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 && (\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", "//\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?.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_live_object", "import_halo", "import_react_ui", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "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", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "onDelete", "senderIdentity", "find", "member", "sender", "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", "ChatContainer", "thread", "context", "autoFocusTextbox", "space", "getSpace", "useMembers", "activity", "useStatus", "fullyQualifiedId", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "useLayoutEffect", "handleCreate", "length", "messages", "push", "makeRef", "create", "MessageType", "created", "Date", "toISOString", "properties", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "Thread", "ScrollArea", "Viewport", "threadLayout", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -16,13 +16,13 @@ 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_F735VMTN_exports = {};
20
- __export(chunk_F735VMTN_exports, {
19
+ var chunk_ONLWOUYZ_exports = {};
20
+ __export(chunk_ONLWOUYZ_exports, {
21
21
  THREAD_ITEM: () => THREAD_ITEM,
22
22
  THREAD_PLUGIN: () => THREAD_PLUGIN,
23
23
  meta: () => meta
24
24
  });
25
- module.exports = __toCommonJS(chunk_F735VMTN_exports);
25
+ module.exports = __toCommonJS(chunk_ONLWOUYZ_exports);
26
26
  var THREAD_PLUGIN = "dxos.org/plugin/thread";
27
27
  var THREAD_ITEM = `${THREAD_PLUGIN}/item`;
28
28
  var meta = {
@@ -38,4 +38,4 @@ var meta = {
38
38
  THREAD_PLUGIN,
39
39
  meta
40
40
  });
41
- //# sourceMappingURL=chunk-F735VMTN.cjs.map
41
+ //# sourceMappingURL=chunk-ONLWOUYZ.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAO;EAClBC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta: PluginMeta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAmB;EAC9BC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
6
  "names": ["THREAD_PLUGIN", "THREAD_ITEM", "meta", "id", "name", "description", "icon", "source"]
7
7
  }
@@ -16,20 +16,21 @@ 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_FPWNZ6TB_exports = {};
20
- __export(chunk_FPWNZ6TB_exports, {
19
+ var chunk_VEVJBOWK_exports = {};
20
+ __export(chunk_VEVJBOWK_exports, {
21
21
  ThreadCapabilities: () => ThreadCapabilities
22
22
  });
23
- module.exports = __toCommonJS(chunk_FPWNZ6TB_exports);
24
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
23
+ module.exports = __toCommonJS(chunk_VEVJBOWK_exports);
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
- ThreadCapabilities2.State = (0, import_app_framework.defineCapability)(`${import_chunk_F735VMTN.THREAD_PLUGIN}/capability/state`);
29
- ThreadCapabilities2.MutableState = (0, import_app_framework.defineCapability)(`${import_chunk_F735VMTN.THREAD_PLUGIN}/capability/state`);
28
+ ThreadCapabilities2.State = (0, import_app_framework.defineCapability)(`${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/capability/state`);
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`);
30
31
  })(ThreadCapabilities || (ThreadCapabilities = {}));
31
32
  // Annotate the CommonJS export names for ESM import in node:
32
33
  0 && (module.exports = {
33
34
  ThreadCapabilities
34
35
  });
35
- //# sourceMappingURL=chunk-FPWNZ6TB.cjs.map
36
+ //# sourceMappingURL=chunk-VEVJBOWK.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 MenuActionProperties } from '@dxos/react-ui-menu';\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 export type Activity = Omit<MenuActionProperties, 'variant' | 'checked'> & {\n id: string;\n };\n export const Activity = defineCapability<Activity>(`${THREAD_PLUGIN}/capability/activity`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAAiC;;UAOhBA,qBAAAA;sBAEFC,YAAQC,uCACnB,GAAGC,mCAAAA,mBAAgC;sBAExBC,mBAAeF,uCAC1B,GAAGC,mCAAAA,mBAAgC;sBAMxBE,eAAWH,uCAA2B,GAAGC,mCAAAA,sBAAmC;AAC3F,GAbiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
6
+ "names": ["ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState", "Activity"]
7
+ }
@@ -16,19 +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_CMEMMYDL_exports = {};
20
- __export(chunk_CMEMMYDL_exports, {
19
+ var chunk_X5TUGJ5K_exports = {};
20
+ __export(chunk_X5TUGJ5K_exports, {
21
21
  ThreadAction: () => ThreadAction,
22
22
  ThreadSettingsSchema: () => ThreadSettingsSchema
23
23
  });
24
- module.exports = __toCommonJS(chunk_CMEMMYDL_exports);
25
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
24
+ module.exports = __toCommonJS(chunk_X5TUGJ5K_exports);
25
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_echo_schema = require("@dxos/echo-schema");
27
27
  var import_types = require("@dxos/plugin-space/types");
28
28
  var import_echo = require("@dxos/react-client/echo");
29
+ var import_schema = require("@dxos/schema");
29
30
  var ThreadAction;
30
31
  (function(ThreadAction2) {
31
- const THREAD_ACTION = `${import_chunk_F735VMTN.THREAD_PLUGIN}/action`;
32
+ const THREAD_ACTION = `${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/action`;
32
33
  class Create extends import_echo_schema.S.TaggedClass()(`${THREAD_ACTION}/create`, {
33
34
  input: import_echo_schema.S.Struct({
34
35
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
@@ -82,7 +83,7 @@ var ThreadAction;
82
83
  thread: import_types.ThreadType,
83
84
  subject: import_echo.EchoObjectSchema,
84
85
  messageId: import_echo_schema.S.String,
85
- message: import_echo_schema.S.optional(import_types.MessageType),
86
+ message: import_echo_schema.S.optional(import_schema.MessageType),
86
87
  messageIndex: import_echo_schema.S.optional(import_echo_schema.S.Number)
87
88
  }),
88
89
  output: import_echo_schema.S.Void
@@ -96,4 +97,4 @@ var ThreadSettingsSchema = import_echo_schema.S.mutable(import_echo_schema.S.Str
96
97
  ThreadAction,
97
98
  ThreadSettingsSchema
98
99
  });
99
- //# sourceMappingURL=chunk-CMEMMYDL.cjs.map
100
+ //# sourceMappingURL=chunk-X5TUGJ5K.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { MessageType } from '@dxos/schema';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.optional(S.String),\n subject: S.optional(EchoObjectSchema),\n }),\n output: S.Struct({\n object: S.Union(ChannelType, ThreadType),\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n skipOpen: S.optional(S.Boolean),\n }),\n output: S.Void,\n }) {}\n\n export class ToggleResolved extends S.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: S.Struct({\n thread: ThreadType,\n }),\n output: S.Void,\n }) {}\n\n export class Delete extends S.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: S.optional(S.String),\n }),\n output: S.Void,\n }) {}\n\n // TODO(wittjosiah): Rename?\n export class OnMessageAdd extends S.TaggedClass<OnMessageAdd>()(`${THREAD_ACTION}/on-message-add`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n }),\n output: S.Void,\n }) {}\n\n export class DeleteMessage extends S.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: S.String,\n message: S.optional(MessageType),\n messageIndex: S.optional(S.Number),\n }),\n output: S.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = S.mutable(S.Struct({}));\n\nexport type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Current channel activity. */\n activities: Record<string, string | undefined>;\n /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,yBAAkB;AAClB,mBAAwC;AACxC,kBAAiC;AACjC,oBAA4B;;UAIXA,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,mCAAAA;EAElB,MAAMC,eAAeC,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACdC,MAAMJ,qBAAEK,SAASL,qBAAEM,MAAM;MACzBC,QAAQP,qBAAEK,SAASL,qBAAEM,MAAM;MAC3BE,SAASR,qBAAEK,SAASI,4BAAAA;IACtB,CAAA;IACAC,QAAQV,qBAAEG,OAAO;MACfQ,QAAQX,qBAAEY,MAAMC,0BAAaC,uBAAAA;IAC/B,CAAA;EACF,CAAA,EAAA;EAAI;gBATSf,SAAAA;EAWN,MAAMgB,eAAef,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACda,SAAShB,qBAAEM;MACXW,UAAUjB,qBAAEK,SAASL,qBAAEkB,OAAO;IAChC,CAAA;IACAR,QAAQV,qBAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBpB,qBAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,qBAAEG,OAAO;MACdkB,QAAQP;IACV,CAAA;IACAJ,QAAQV,qBAAEmB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAetB,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTF,QAAQP,qBAAEK,SAASL,qBAAEM,MAAM;IAC7B,CAAA;IACAI,QAAQV,qBAAEmB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBvB,qBAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,qBAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;IACX,CAAA;IACAC,QAAQV,qBAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBxB,qBAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,qBAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTgB,WAAWzB,qBAAEM;MACboB,SAAS1B,qBAAEK,SAASsB,yBAAAA;MACpBC,cAAc5B,qBAAEK,SAASL,qBAAE6B,MAAM;IACnC,CAAA;IACAnB,QAAQV,qBAAEmB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GAzDiB5B,iBAAAA,eAAAA,CAAAA,EAAAA;AA2DV,IAAMkC,uBAAuB9B,qBAAE+B,QAAQ/B,qBAAEG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "cursor", "subject", "EchoObjectSchema", "output", "object", "Union", "ChannelType", "ThreadType", "Select", "current", "skipOpen", "Boolean", "Void", "ToggleResolved", "thread", "Delete", "OnMessageAdd", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }
@@ -18,21 +18,23 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var node_exports = {};
20
20
  __export(node_exports, {
21
- THREAD_ITEM: () => import_chunk_F735VMTN.THREAD_ITEM,
22
- THREAD_PLUGIN: () => import_chunk_F735VMTN.THREAD_PLUGIN,
21
+ THREAD_ITEM: () => import_chunk_ONLWOUYZ.THREAD_ITEM,
22
+ THREAD_PLUGIN: () => import_chunk_ONLWOUYZ.THREAD_PLUGIN,
23
+ ThreadCapabilities: () => import_chunk_VEVJBOWK.ThreadCapabilities,
24
+ ThreadEvents: () => ThreadEvents,
23
25
  ThreadPlugin: () => ThreadPlugin,
24
- meta: () => import_chunk_F735VMTN.meta,
25
- useAnalyticsCallback: () => import_chunk_AWSTZ2KN.useAnalyticsCallback,
26
- useOnEditAnalytics: () => import_chunk_AWSTZ2KN.useOnEditAnalytics,
27
- useStatus: () => import_chunk_AWSTZ2KN.useStatus
26
+ meta: () => import_chunk_ONLWOUYZ.meta,
27
+ useAnalyticsCallback: () => import_chunk_FMKMIGXZ.useAnalyticsCallback,
28
+ useOnEditAnalytics: () => import_chunk_FMKMIGXZ.useOnEditAnalytics,
29
+ useStatus: () => import_chunk_FMKMIGXZ.useStatus
28
30
  });
29
31
  module.exports = __toCommonJS(node_exports);
30
- var import_chunk_BHFHFTHO = require("./chunk-BHFHFTHO.cjs");
31
- var import_chunk_AWSTZ2KN = require("./chunk-AWSTZ2KN.cjs");
32
- var import_chunk_CMEMMYDL = require("./chunk-CMEMMYDL.cjs");
33
- var import_chunk_FPWNZ6TB = require("./chunk-FPWNZ6TB.cjs");
34
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
32
+ var import_chunk_FMKMIGXZ = require("./chunk-FMKMIGXZ.cjs");
33
+ var import_chunk_X5TUGJ5K = require("./chunk-X5TUGJ5K.cjs");
34
+ var import_chunk_VEVJBOWK = require("./chunk-VEVJBOWK.cjs");
35
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
35
36
  var import_app_framework = require("@dxos/app-framework");
37
+ var import_app_framework2 = require("@dxos/app-framework");
36
38
  var import_plugin_client = require("@dxos/plugin-client");
37
39
  var import_plugin_deck = require("@dxos/plugin-deck");
38
40
  var import_plugin_markdown = require("@dxos/plugin-markdown");
@@ -40,19 +42,22 @@ var import_plugin_space = require("@dxos/plugin-space");
40
42
  var import_types = require("@dxos/plugin-space/types");
41
43
  var import_echo = require("@dxos/react-client/echo");
42
44
  var import_react_ui_thread = require("@dxos/react-ui-thread");
45
+ var import_schema = require("@dxos/schema");
43
46
  var import_types2 = require("@dxos/plugin-space/types");
47
+ var ThreadEvents;
48
+ (function(ThreadEvents3) {
49
+ ThreadEvents3.SetupActivity = import_app_framework.Events.createStateEvent(`${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/setup-activity`);
50
+ })(ThreadEvents || (ThreadEvents = {}));
44
51
  var translations_default = [
45
52
  {
46
53
  "en-US": {
47
54
  [import_types2.ChannelType.typename]: {
48
- "typename label": "Channel"
55
+ "typename label": "Channel",
56
+ "object name placeholder": "New channel"
49
57
  },
50
- [import_chunk_F735VMTN.THREAD_PLUGIN]: {
58
+ [import_chunk_ONLWOUYZ.THREAD_PLUGIN]: {
51
59
  "plugin name": "Threads",
52
- "channel name placeholder": "New channel",
53
60
  "channel title label": "Title",
54
- "delete channel label": "Delete channel",
55
- "create channel label": "Create channel",
56
61
  "message placeholder": "Reply\u2026",
57
62
  "activity message": "Processing\u2026",
58
63
  "anonymous label": "Anonymous",
@@ -81,63 +86,57 @@ var translations_default = [
81
86
  }
82
87
  }
83
88
  ];
84
- var ThreadPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_F735VMTN.meta, [
89
+ var ThreadPlugin = () => (0, import_app_framework2.definePlugin)(import_chunk_ONLWOUYZ.meta, [
85
90
  // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.
86
91
  // defineModule({
87
92
  // id: `${meta.id}/module/settings`,
88
93
  // activatesOn: Events.SetupSettings,
89
94
  // activate: ThreadSettings,
90
95
  // }),
91
- (0, import_app_framework.defineModule)({
92
- id: `${import_chunk_F735VMTN.meta.id}/module/state`,
96
+ (0, import_app_framework2.defineModule)({
97
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/state`,
93
98
  // TODO(wittjosiah): Does not integrate with settings store.
94
99
  // Should this be a different event?
95
100
  // Should settings store be renamed to be more generic?
96
- activatesOn: import_app_framework.Events.SetupSettings,
97
- activate: import_chunk_BHFHFTHO.ThreadState
101
+ activatesOn: import_app_framework2.Events.SetupSettings,
102
+ activate: import_chunk_FMKMIGXZ.ThreadState
98
103
  }),
99
- (0, import_app_framework.defineModule)({
100
- id: `${import_chunk_F735VMTN.meta.id}/module/translations`,
101
- activatesOn: import_app_framework.Events.SetupTranslations,
102
- activate: () => (0, import_app_framework.contributes)(import_app_framework.Capabilities.Translations, [
104
+ (0, import_app_framework2.defineModule)({
105
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/translations`,
106
+ activatesOn: import_app_framework2.Events.SetupTranslations,
107
+ activate: () => (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Translations, [
103
108
  ...translations_default,
104
109
  ...import_react_ui_thread.translations
105
110
  ])
106
111
  }),
107
- (0, import_app_framework.defineModule)({
108
- id: `${import_chunk_F735VMTN.meta.id}/module/metadata`,
109
- activatesOn: import_app_framework.Events.SetupMetadata,
112
+ (0, import_app_framework2.defineModule)({
113
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/metadata`,
114
+ activatesOn: import_app_framework2.Events.SetupMetadata,
110
115
  activate: () => [
111
- (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
116
+ (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
112
117
  id: import_types.ChannelType.typename,
113
118
  metadata: {
114
- placeholder: [
115
- "channel name placeholder",
116
- {
117
- ns: import_chunk_F735VMTN.THREAD_PLUGIN
118
- }
119
- ],
120
119
  icon: "ph--chat--regular",
121
120
  // TODO(wittjosiah): Move out of metadata.
122
121
  loadReferences: async (channel) => await import_echo.RefArray.loadAll(channel.threads ?? [])
123
122
  }
124
123
  }),
125
- (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
124
+ (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
126
125
  id: import_types.ThreadType.typename,
127
126
  metadata: {
128
127
  // TODO(wittjosiah): Move out of metadata.
129
128
  loadReferences: async (thread) => await import_echo.RefArray.loadAll(thread.messages ?? [])
130
129
  }
131
130
  }),
132
- (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
133
- id: import_types.MessageType.typename,
131
+ (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
132
+ id: import_schema.MessageType.typename,
134
133
  metadata: {
135
134
  // TODO(wittjosiah): Move out of metadata.
136
135
  loadReferences: (message) => []
137
136
  }
138
137
  }),
139
- (0, import_app_framework.contributes)(import_app_framework.Capabilities.Metadata, {
140
- id: import_chunk_F735VMTN.THREAD_ITEM,
138
+ (0, import_app_framework2.contributes)(import_app_framework2.Capabilities.Metadata, {
139
+ id: import_chunk_ONLWOUYZ.THREAD_ITEM,
141
140
  metadata: {
142
141
  parse: (item, type) => {
143
142
  switch (type) {
@@ -160,31 +159,39 @@ var ThreadPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_F73
160
159
  })
161
160
  ]
162
161
  }),
163
- (0, import_app_framework.defineModule)({
164
- id: `${import_chunk_F735VMTN.meta.id}/module/object-form`,
162
+ (0, import_app_framework2.defineModule)({
163
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/object-form`,
165
164
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
166
- activate: () => (0, import_app_framework.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
165
+ activate: () => (0, import_app_framework2.contributes)(import_plugin_space.SpaceCapabilities.ObjectForm, (0, import_types.defineObjectForm)({
167
166
  objectSchema: import_types.ChannelType,
168
- getIntent: () => (0, import_app_framework.createIntent)(import_chunk_CMEMMYDL.ThreadAction.Create)
167
+ getIntent: () => (0, import_app_framework2.createIntent)(import_chunk_X5TUGJ5K.ThreadAction.Create)
169
168
  }))
170
169
  }),
171
- (0, import_app_framework.defineModule)({
172
- id: `${import_chunk_F735VMTN.meta.id}/module/schema`,
170
+ (0, import_app_framework2.defineModule)({
171
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/schema`,
173
172
  activatesOn: import_plugin_client.ClientEvents.SetupSchema,
174
- activate: () => (0, import_app_framework.contributes)(import_plugin_client.ClientCapabilities.Schema, [
173
+ activate: () => (0, import_app_framework2.contributes)(import_plugin_client.ClientCapabilities.Schema, [
175
174
  import_types.ThreadType,
176
- import_types.MessageType
175
+ import_schema.MessageType,
176
+ import_schema.MessageTypeV1
177
+ ])
178
+ }),
179
+ (0, import_app_framework2.defineModule)({
180
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/migration`,
181
+ activatesOn: import_plugin_client.ClientEvents.SetupMigration,
182
+ activate: () => (0, import_app_framework2.contributes)(import_plugin_client.ClientCapabilities.Migration, [
183
+ import_schema.MessageTypeV1ToV2
177
184
  ])
178
185
  }),
179
- (0, import_app_framework.defineModule)({
180
- id: `${import_chunk_F735VMTN.meta.id}/module/complementary-panel`,
186
+ (0, import_app_framework2.defineModule)({
187
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/complementary-panel`,
181
188
  activatesOn: import_plugin_deck.DeckEvents.SetupComplementaryPanels,
182
- activate: () => (0, import_app_framework.contributes)(import_plugin_deck.DeckCapabilities.ComplementaryPanel, {
189
+ activate: () => (0, import_app_framework2.contributes)(import_plugin_deck.DeckCapabilities.ComplementaryPanel, {
183
190
  id: "comments",
184
191
  label: [
185
192
  "comments panel label",
186
193
  {
187
- ns: import_chunk_F735VMTN.THREAD_PLUGIN
194
+ ns: import_chunk_ONLWOUYZ.THREAD_PLUGIN
188
195
  }
189
196
  ],
190
197
  icon: "ph--chat-text--regular",
@@ -194,30 +201,33 @@ var ThreadPlugin = () => (0, import_app_framework.definePlugin)(import_chunk_F73
194
201
  filter: (node) => !!node.data && typeof node.data === "object" && "threads" in node.data && Array.isArray(node.data.threads) && !(node.data instanceof import_types.ChannelType)
195
202
  })
196
203
  }),
197
- (0, import_app_framework.defineModule)({
198
- id: `${import_chunk_F735VMTN.meta.id}/module/markdown`,
204
+ (0, import_app_framework2.defineModule)({
205
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/markdown`,
199
206
  activatesOn: import_plugin_markdown.MarkdownEvents.SetupExtensions,
200
- activate: import_chunk_BHFHFTHO.Markdown
207
+ activate: import_chunk_FMKMIGXZ.Markdown
201
208
  }),
202
- (0, import_app_framework.defineModule)({
203
- id: `${import_chunk_F735VMTN.meta.id}/module/react-surface`,
204
- activatesOn: import_app_framework.Events.SetupReactSurface,
209
+ (0, import_app_framework2.defineModule)({
210
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/react-surface`,
211
+ activatesOn: import_app_framework2.Events.SetupReactSurface,
205
212
  // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.
206
213
  activatesBefore: [
207
- import_plugin_space.ThreadEvents.SetupThread
214
+ import_plugin_space.ThreadEvents.SetupThread,
215
+ ThreadEvents.SetupActivity
208
216
  ],
209
- activate: import_chunk_BHFHFTHO.ReactSurface
217
+ activate: import_chunk_FMKMIGXZ.ReactSurface
210
218
  }),
211
- (0, import_app_framework.defineModule)({
212
- id: `${import_chunk_F735VMTN.meta.id}/module/intent-resolver`,
213
- activatesOn: import_app_framework.Events.SetupIntentResolver,
214
- activate: import_chunk_BHFHFTHO.IntentResolver
219
+ (0, import_app_framework2.defineModule)({
220
+ id: `${import_chunk_ONLWOUYZ.meta.id}/module/intent-resolver`,
221
+ activatesOn: import_app_framework2.Events.SetupIntentResolver,
222
+ activate: import_chunk_FMKMIGXZ.IntentResolver
215
223
  })
216
224
  ]);
217
225
  // Annotate the CommonJS export names for ESM import in node:
218
226
  0 && (module.exports = {
219
227
  THREAD_ITEM,
220
228
  THREAD_PLUGIN,
229
+ ThreadCapabilities,
230
+ ThreadEvents,
221
231
  ThreadPlugin,
222
232
  meta,
223
233
  useAnalyticsCallback,