@dxos/plugin-thread 0.8.0 → 0.8.1-main.81238a8

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 (157) hide show
  1. package/dist/lib/browser/ChannelContainer-6YTHIJPS.mjs +74 -0
  2. package/dist/lib/browser/ChannelContainer-6YTHIJPS.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-3BIHVVEA.mjs} +5 -5
  4. package/dist/lib/browser/chunk-3BIHVVEA.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-K3NUEKPS.mjs} +14 -2
  6. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-K3NUEKPS.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-YK3ICB7G.mjs → chunk-OPDRTA7Q.mjs} +2 -2
  10. package/dist/lib/browser/{chunk-YK3ICB7G.mjs.map → chunk-OPDRTA7Q.mjs.map} +1 -1
  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 +25 -15
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-WAVFYWIS.mjs} +5 -5
  16. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs.map → intent-resolver-WAVFYWIS.mjs.map} +2 -2
  17. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-R6VIT67G.mjs} +6 -6
  18. package/dist/lib/browser/markdown-R6VIT67G.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-2MKPJW4D.mjs} +15 -28
  21. package/dist/lib/browser/react-surface-2MKPJW4D.mjs.map +7 -0
  22. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-2EJW5SUY.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-AVRYTS7L.cjs +98 -0
  27. package/dist/lib/node/ChannelContainer-AVRYTS7L.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-E6HDHBUB.cjs} +28 -4
  29. package/dist/lib/node/chunk-E6HDHBUB.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-EHS2JT63.cjs} +12 -12
  31. package/dist/lib/node/chunk-EHS2JT63.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-GBL2K6YX.cjs} +6 -6
  33. package/dist/lib/node/{chunk-CMEMMYDL.cjs.map → chunk-GBL2K6YX.cjs.map} +1 -1
  34. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  35. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  36. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
  37. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
  38. package/dist/lib/node/index.cjs +62 -53
  39. package/dist/lib/node/index.cjs.map +4 -4
  40. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-ESZ7YDRL.cjs} +22 -22
  41. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs.map → intent-resolver-ESZ7YDRL.cjs.map} +2 -2
  42. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-KJJCSWOZ.cjs} +12 -12
  43. package/dist/lib/node/markdown-KJJCSWOZ.cjs.map +7 -0
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-YJNIS6CL.cjs} +35 -48
  46. package/dist/lib/node/react-surface-YJNIS6CL.cjs.map +7 -0
  47. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-5YWRJNSN.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-2ZU33KAF.mjs +75 -0
  53. package/dist/lib/node-esm/ChannelContainer-2ZU33KAF.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-33NDMQQQ.mjs → chunk-B5VGBXRR.mjs} +2 -2
  57. package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs.map → chunk-B5VGBXRR.mjs.map} +1 -1
  58. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-L4C7BEQZ.mjs} +14 -2
  59. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-L4C7BEQZ.mjs.map} +4 -4
  60. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-RN3V7SYL.mjs} +5 -5
  61. package/dist/lib/node-esm/chunk-RN3V7SYL.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-TXW5SIBN.mjs} +3 -2
  63. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +7 -0
  64. package/dist/lib/node-esm/index.mjs +25 -15
  65. package/dist/lib/node-esm/index.mjs.map +4 -4
  66. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-YLBQTBSE.mjs} +5 -5
  67. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs.map → intent-resolver-YLBQTBSE.mjs.map} +2 -2
  68. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-LF4X5O6L.mjs} +6 -6
  69. package/dist/lib/node-esm/markdown-LF4X5O6L.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-ZEDBXBP3.mjs} +15 -28
  72. package/dist/lib/node-esm/react-surface-ZEDBXBP3.mjs.map +7 -0
  73. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-5EZW6KK4.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/ChatContainer.d.ts +3 -2
  84. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  85. package/dist/types/src/components/CommentContainer.d.ts +2 -1
  86. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/CommentsContainer.d.ts +2 -1
  88. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  89. package/dist/types/src/components/MessageContainer.d.ts +2 -1
  90. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ThreadComplementary.d.ts +2 -1
  92. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  93. package/dist/types/src/components/ThreadSettings.d.ts +2 -1
  94. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  95. package/dist/types/src/components/index.d.ts +3 -2
  96. package/dist/types/src/components/index.d.ts.map +1 -1
  97. package/dist/types/src/components/testing.d.ts +38 -38
  98. package/dist/types/src/components/testing.d.ts.map +1 -1
  99. package/dist/types/src/events.d.ts +4 -0
  100. package/dist/types/src/events.d.ts.map +1 -0
  101. package/dist/types/src/index.d.ts +2 -0
  102. package/dist/types/src/index.d.ts.map +1 -1
  103. package/dist/types/src/meta.d.ts +2 -7
  104. package/dist/types/src/meta.d.ts.map +1 -1
  105. package/dist/types/src/types.d.ts +2 -0
  106. package/dist/types/src/types.d.ts.map +1 -1
  107. package/package.json +31 -30
  108. package/src/ThreadPlugin.tsx +2 -1
  109. package/src/capabilities/capabilities.ts +6 -0
  110. package/src/capabilities/intent-resolver.ts +1 -1
  111. package/src/capabilities/react-surface.tsx +5 -16
  112. package/src/capabilities/state.ts +1 -1
  113. package/src/components/ChannelContainer.tsx +80 -0
  114. package/src/components/ChatContainer.tsx +1 -1
  115. package/src/components/CommentContainer.tsx +1 -1
  116. package/src/components/MessageContainer.tsx +1 -1
  117. package/src/components/ThreadComplementary.tsx +1 -1
  118. package/src/components/index.ts +1 -1
  119. package/src/events.ts +11 -0
  120. package/src/extensions/threads.ts +2 -2
  121. package/src/index.ts +2 -0
  122. package/src/meta.ts +2 -2
  123. package/src/types.ts +2 -0
  124. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  125. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
  127. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  128. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  129. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  130. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  131. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  132. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  133. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  134. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  135. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  136. package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
  137. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  138. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
  139. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  140. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  141. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  142. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  143. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  144. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  145. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  147. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
  149. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  150. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  151. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  152. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  153. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  154. package/src/components/ThreadContainer.tsx +0 -22
  155. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-2EJW5SUY.mjs.map} +0 -0
  156. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-5YWRJNSN.cjs.map} +0 -0
  157. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-5EZW6KK4.mjs.map} +0 -0
@@ -16,21 +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 settings_7VQYARM5_exports = {};
20
- __export(settings_7VQYARM5_exports, {
19
+ var settings_5YWRJNSN_exports = {};
20
+ __export(settings_5YWRJNSN_exports, {
21
21
  default: () => settings_default
22
22
  });
23
- module.exports = __toCommonJS(settings_7VQYARM5_exports);
24
- var import_chunk_CMEMMYDL = require("./chunk-CMEMMYDL.cjs");
25
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
23
+ module.exports = __toCommonJS(settings_5YWRJNSN_exports);
24
+ var import_chunk_GBL2K6YX = require("./chunk-GBL2K6YX.cjs");
25
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_live_object = require("@dxos/live-object");
28
28
  var settings_default = () => {
29
29
  const settings = (0, import_live_object.create)({});
30
30
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Settings, {
31
- schema: import_chunk_CMEMMYDL.ThreadSettingsSchema,
32
- prefix: import_chunk_F735VMTN.THREAD_PLUGIN,
31
+ schema: import_chunk_GBL2K6YX.ThreadSettingsSchema,
32
+ prefix: import_chunk_ONLWOUYZ.THREAD_PLUGIN,
33
33
  value: settings
34
34
  });
35
35
  };
36
- //# sourceMappingURL=settings-7VQYARM5.cjs.map
36
+ //# sourceMappingURL=settings-5YWRJNSN.cjs.map
@@ -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 state_TQWEZ6B3_exports = {};
20
- __export(state_TQWEZ6B3_exports, {
19
+ var state_JMI5ZXZI_exports = {};
20
+ __export(state_JMI5ZXZI_exports, {
21
21
  default: () => state_default
22
22
  });
23
- module.exports = __toCommonJS(state_TQWEZ6B3_exports);
24
- var import_chunk_FPWNZ6TB = require("./chunk-FPWNZ6TB.cjs");
25
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
23
+ module.exports = __toCommonJS(state_JMI5ZXZI_exports);
24
+ var import_chunk_VEVJBOWK = require("./chunk-VEVJBOWK.cjs");
25
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_live_object = require("@dxos/live-object");
28
28
  var initialViewState = {
@@ -30,6 +30,7 @@ var initialViewState = {
30
30
  };
31
31
  var state_default = () => {
32
32
  const state = (0, import_live_object.create)({
33
+ activities: {},
33
34
  drafts: {}
34
35
  });
35
36
  const viewStore = (0, import_live_object.create)({});
@@ -41,9 +42,9 @@ var state_default = () => {
41
42
  }
42
43
  return viewStore[subjectId];
43
44
  };
44
- return (0, import_app_framework.contributes)(import_chunk_FPWNZ6TB.ThreadCapabilities.State, {
45
+ return (0, import_app_framework.contributes)(import_chunk_VEVJBOWK.ThreadCapabilities.State, {
45
46
  state,
46
47
  getViewState
47
48
  });
48
49
  };
49
- //# sourceMappingURL=state-TQWEZ6B3.cjs.map
50
+ //# sourceMappingURL=state-JMI5ZXZI.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/state.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes } from '@dxos/app-framework';\nimport { create } from '@dxos/live-object';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { type ThreadState, type ViewStore } from '../types';\n\nconst initialViewState = { showResolvedThreads: false };\n\nexport default () => {\n const state = create<ThreadState>({ activities: {}, drafts: {} });\n const viewStore = create<ViewStore>({});\n\n const getViewState = (subjectId: string) => {\n if (!viewStore[subjectId]) {\n viewStore[subjectId] = { ...initialViewState };\n }\n return viewStore[subjectId];\n };\n\n return contributes(ThreadCapabilities.State, { state, getViewState });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA4B;AAC5B,yBAAuB;AAKvB,IAAMA,mBAAmB;EAAEC,qBAAqB;AAAM;AAEtD,IAAA,gBAAe,MAAA;AACb,QAAMC,YAAQC,2BAAoB;IAAEC,YAAY,CAAC;IAAGC,QAAQ,CAAC;EAAE,CAAA;AAC/D,QAAMC,gBAAYH,2BAAkB,CAAC,CAAA;AAErC,QAAMI,eAAe,CAACC,cAAAA;AACpB,QAAI,CAACF,UAAUE,SAAAA,GAAY;AACzBF,gBAAUE,SAAAA,IAAa;QAAE,GAAGR;MAAiB;IAC/C;AACA,WAAOM,UAAUE,SAAAA;EACnB;AAEA,aAAOC,kCAAYC,yCAAmBC,OAAO;IAAET;IAAOK;EAAa,CAAA;AACrE;",
6
+ "names": ["initialViewState", "showResolvedThreads", "state", "create", "activities", "drafts", "viewStore", "getViewState", "subjectId", "contributes", "ThreadCapabilities", "State"]
7
+ }
@@ -18,12 +18,12 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- ThreadAction: () => import_chunk_CMEMMYDL.ThreadAction,
22
- ThreadSettingsSchema: () => import_chunk_CMEMMYDL.ThreadSettingsSchema
21
+ ThreadAction: () => import_chunk_GBL2K6YX.ThreadAction,
22
+ ThreadSettingsSchema: () => import_chunk_GBL2K6YX.ThreadSettingsSchema
23
23
  });
24
24
  module.exports = __toCommonJS(types_exports);
25
- var import_chunk_CMEMMYDL = require("./chunk-CMEMMYDL.cjs");
26
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
25
+ var import_chunk_GBL2K6YX = require("./chunk-GBL2K6YX.cjs");
26
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
27
27
  // Annotate the CommonJS export names for ESM import in node:
28
28
  0 && (module.exports = {
29
29
  ThreadAction,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["types.cjs"],
4
- "sourcesContent": ["import {\n ThreadAction,\n ThreadSettingsSchema\n} from \"./chunk-CMEMMYDL.cjs\";\nimport \"./chunk-F735VMTN.cjs\";\nexport {\n ThreadAction,\n ThreadSettingsSchema\n};\n//# sourceMappingURL=types.cjs.map\n"],
4
+ "sourcesContent": ["import {\n ThreadAction,\n ThreadSettingsSchema\n} from \"./chunk-GBL2K6YX.cjs\";\nimport \"./chunk-ONLWOUYZ.cjs\";\nexport {\n ThreadAction,\n ThreadSettingsSchema\n};\n//# sourceMappingURL=types.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,75 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ChatContainer
4
+ } from "./chunk-RN3V7SYL.mjs";
5
+ import "./chunk-L4C7BEQZ.mjs";
6
+ import {
7
+ ThreadCapabilities
8
+ } from "./chunk-TXW5SIBN.mjs";
9
+ import "./chunk-42F2DTMM.mjs";
10
+
11
+ // packages/plugins/plugin-thread/src/components/ChannelContainer.tsx
12
+ import React, { useCallback } from "react";
13
+ import { Surface, useCapabilities, useCapability } from "@dxos/app-framework";
14
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
15
+ import { createEditorActionGroup } from "@dxos/react-ui-editor";
16
+ import { createMenuAction, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
17
+ import { StackItem } from "@dxos/react-ui-stack";
18
+ var useActivitiesMenu = (activities, activity) => {
19
+ return useMenuActions(() => ({
20
+ nodes: [
21
+ createEditorActionGroup("activities", {
22
+ variant: "toggleGroup",
23
+ selectCardinality: "single",
24
+ value: activity
25
+ }),
26
+ ...activities.map(({ id, ...properties }) => createMenuAction(id, {
27
+ ...properties,
28
+ checked: true
29
+ }))
30
+ ],
31
+ edges: [
32
+ {
33
+ source: "root",
34
+ target: "activities"
35
+ },
36
+ ...activities.map((activity2) => ({
37
+ source: "activities",
38
+ target: activity2.id
39
+ }))
40
+ ]
41
+ }));
42
+ };
43
+ var ChannelContainer = ({ role, channel, context }) => {
44
+ const { state } = useCapability(ThreadCapabilities.MutableState);
45
+ const currentActivity = state.activities[channel.id];
46
+ const activities = useCapabilities(ThreadCapabilities.Activity);
47
+ const menu = useActivitiesMenu(activities, currentActivity);
48
+ const handleAction = useCallback((action) => state.activities[channel.id] = currentActivity === action.id ? void 0 : action.id, [
49
+ currentActivity
50
+ ]);
51
+ const thread = channel.threads[0].target;
52
+ if (!thread) {
53
+ return null;
54
+ }
55
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
56
+ toolbar: true
57
+ }, /* @__PURE__ */ React.createElement(MenuProvider, {
58
+ ...menu,
59
+ onAction: handleAction,
60
+ attendableId: fullyQualifiedId(channel)
61
+ }, /* @__PURE__ */ React.createElement(ToolbarMenu, null)), currentActivity ? /* @__PURE__ */ React.createElement(Surface, {
62
+ role: `channel-activity--${currentActivity}`,
63
+ data: {
64
+ subject: channel
65
+ }
66
+ }) : /* @__PURE__ */ React.createElement(ChatContainer, {
67
+ thread,
68
+ context
69
+ }));
70
+ };
71
+ var ChannelContainer_default = ChannelContainer;
72
+ export {
73
+ ChannelContainer_default as default
74
+ };
75
+ //# sourceMappingURL=ChannelContainer-2ZU33KAF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChannelContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, type ComponentProps } from 'react';\n\nimport { Surface, useCapabilities, useCapability } from '@dxos/app-framework';\nimport { type NodeArg } from '@dxos/plugin-graph';\nimport { type ChannelType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { createEditorActionGroup } from '@dxos/react-ui-editor';\nimport {\n createMenuAction,\n MenuProvider,\n ToolbarMenu,\n type ToolbarMenuActionGroupProperties,\n useMenuActions,\n type MenuAction,\n} from '@dxos/react-ui-menu';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ChatContainer } from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\n\nconst useActivitiesMenu = (activities: ThreadCapabilities.Activity[], activity: string | undefined) => {\n return useMenuActions(() => ({\n nodes: [\n createEditorActionGroup('activities', {\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: activity,\n } as ToolbarMenuActionGroupProperties) as NodeArg<any>,\n ...activities.map(({ id, ...properties }) =>\n createMenuAction(id, {\n ...properties,\n checked: true,\n }),\n ),\n ],\n edges: [\n { source: 'root', target: 'activities' },\n ...activities.map((activity) => ({ source: 'activities', target: activity.id })),\n ],\n }));\n};\n\nconst ChannelContainer = ({\n role,\n channel,\n context,\n}: Pick<ComponentProps<typeof ChatContainer>, 'context'> & { channel: ChannelType; role: string }) => {\n const { state } = useCapability(ThreadCapabilities.MutableState);\n const currentActivity = state.activities[channel.id];\n const activities = useCapabilities(ThreadCapabilities.Activity);\n const menu = useActivitiesMenu(activities, currentActivity);\n const handleAction = useCallback(\n (action: MenuAction) => (state.activities[channel.id] = currentActivity === action.id ? undefined : action.id),\n [currentActivity],\n );\n\n const thread = channel.threads[0].target;\n if (!thread) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(channel)}>\n <ToolbarMenu />\n </MenuProvider>\n {currentActivity ? (\n <Surface role={`channel-activity--${currentActivity}`} data={{ subject: channel }} />\n ) : (\n <ChatContainer thread={thread} context={context} />\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n"],
5
+ "mappings": ";;;;;;;;;;;AAIA,OAAOA,SAASC,mBAAwC;AAExD,SAASC,SAASC,iBAAiBC,qBAAqB;AAGxD,SAASC,wBAAwB;AACjC,SAASC,+BAA+B;AACxC,SACEC,kBACAC,cACAC,aAEAC,sBAEK;AACP,SAASC,iBAAiB;AAK1B,IAAMC,oBAAoB,CAACC,YAA2CC,aAAAA;AACpE,SAAOC,eAAe,OAAO;IAC3BC,OAAO;MACLC,wBAAwB,cAAc;QACpCC,SAAS;QACTC,mBAAmB;QACnBC,OAAON;MACT,CAAA;SACGD,WAAWQ,IAAI,CAAC,EAAEC,IAAI,GAAGC,WAAAA,MAC1BC,iBAAiBF,IAAI;QACnB,GAAGC;QACHE,SAAS;MACX,CAAA,CAAA;;IAGJC,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAa;SACpCf,WAAWQ,IAAI,CAACP,eAAc;QAAEa,QAAQ;QAAcC,QAAQd,UAASQ;MAAG,EAAA;;EAEjF,EAAA;AACF;AAEA,IAAMO,mBAAmB,CAAC,EACxBC,MACAC,SACAC,QAAO,MACwF;AAC/F,QAAM,EAAEC,MAAK,IAAKC,cAAcC,mBAAmBC,YAAY;AAC/D,QAAMC,kBAAkBJ,MAAMpB,WAAWkB,QAAQT,EAAE;AACnD,QAAMT,aAAayB,gBAAgBH,mBAAmBI,QAAQ;AAC9D,QAAMC,OAAO5B,kBAAkBC,YAAYwB,eAAAA;AAC3C,QAAMI,eAAeC,YACnB,CAACC,WAAwBV,MAAMpB,WAAWkB,QAAQT,EAAE,IAAIe,oBAAoBM,OAAOrB,KAAKsB,SAAYD,OAAOrB,IAC3G;IAACe;GAAgB;AAGnB,QAAMQ,SAASd,QAAQe,QAAQ,CAAA,EAAGlB;AAClC,MAAI,CAACiB,QAAQ;AACX,WAAO;EACT;AAEA,SACE,sBAAA,cAACE,UAAUC,SAAO;IAACC,SAAAA;KACjB,sBAAA,cAACC,cAAAA;IAAc,GAAGV;IAAMW,UAAUV;IAAcW,cAAcC,iBAAiBtB,OAAAA;KAC7E,sBAAA,cAACuB,aAAAA,IAAAA,CAAAA,GAEFjB,kBACC,sBAAA,cAACkB,SAAAA;IAAQzB,MAAM,qBAAqBO,eAAAA;IAAmBmB,MAAM;MAAEC,SAAS1B;IAAQ;OAEhF,sBAAA,cAAC2B,eAAAA;IAAcb;IAAgBb;;AAIvC;AAEA,IAAA,2BAAeH;",
6
+ "names": ["React", "useCallback", "Surface", "useCapabilities", "useCapability", "fullyQualifiedId", "createEditorActionGroup", "createMenuAction", "MenuProvider", "ToolbarMenu", "useMenuActions", "StackItem", "useActivitiesMenu", "activities", "activity", "useMenuActions", "nodes", "createEditorActionGroup", "variant", "selectCardinality", "value", "map", "id", "properties", "createMenuAction", "checked", "edges", "source", "target", "ChannelContainer", "role", "channel", "context", "state", "useCapability", "ThreadCapabilities", "MutableState", "currentActivity", "useCapabilities", "Activity", "menu", "handleAction", "useCallback", "action", "undefined", "thread", "threads", "StackItem", "Content", "toolbar", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "Surface", "data", "subject", "ChatContainer"]
7
+ }
@@ -16,4 +16,4 @@ export {
16
16
  THREAD_ITEM,
17
17
  meta
18
18
  };
19
- //# sourceMappingURL=chunk-FXUATCLW.mjs.map
19
+ //# sourceMappingURL=chunk-42F2DTMM.mjs.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
  }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  THREAD_PLUGIN
4
- } from "./chunk-FXUATCLW.mjs";
4
+ } from "./chunk-42F2DTMM.mjs";
5
5
 
6
6
  // packages/plugins/plugin-thread/src/types.ts
7
7
  import { S } from "@dxos/echo-schema";
@@ -77,4 +77,4 @@ export {
77
77
  ThreadAction,
78
78
  ThreadSettingsSchema
79
79
  };
80
- //# sourceMappingURL=chunk-33NDMQQQ.mjs.map
80
+ //# sourceMappingURL=chunk-B5VGBXRR.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, MessageType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\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 /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, MessageType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\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
5
  "mappings": ";;;;;;AAIA,SAASA,SAAS;AAClB,SAASC,aAAaC,aAAaC,kBAAkB;AACrD,SAASC,wBAAwB;;UAIhBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,QAAQP,EAAEK,SAASL,EAAEM,MAAM;MAC3BE,SAASR,EAAEK,SAASI,gBAAAA;IACtB,CAAA;IACAC,QAAQV,EAAEG,OAAO;MACfQ,QAAQX,EAAEY,MAAMC,aAAaC,UAAAA;IAC/B,CAAA;EACF,CAAA,EAAA;EAAI;gBATSf,SAAAA;EAWN,MAAMgB,eAAef,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACda,SAAShB,EAAEM;MACXW,UAAUjB,EAAEK,SAASL,EAAEkB,OAAO;IAChC,CAAA;IACAR,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBpB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;IACV,CAAA;IACAJ,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAetB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTF,QAAQP,EAAEK,SAASL,EAAEM,MAAM;IAC7B,CAAA;IACAI,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBvB,EAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;IACX,CAAA;IACAC,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBxB,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTgB,WAAWzB,EAAEM;MACboB,SAAS1B,EAAEK,SAASsB,WAAAA;MACpBC,cAAc5B,EAAEK,SAASL,EAAE6B,MAAM;IACnC,CAAA;IACAnB,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GAzDiB5B,iBAAAA,eAAAA,CAAAA,EAAAA;AA2DV,IAAMkC,uBAAuB9B,EAAE+B,QAAQ/B,EAAEG,OAAO,CAAC,CAAA,CAAA;",
6
6
  "names": ["S", "ChannelType", "MessageType", "ThreadType", "EchoObjectSchema", "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
7
  }
@@ -65,9 +65,21 @@ var useOnEditAnalytics = (message, editing) => {
65
65
  useOnTransition(editing, true, false, onEditAnalytics);
66
66
  };
67
67
 
68
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
69
+ import { lazy } from "@dxos/app-framework";
70
+ var IntentResolver = lazy(() => import("./intent-resolver-YLBQTBSE.mjs"));
71
+ var Markdown = lazy(() => import("./markdown-LF4X5O6L.mjs"));
72
+ var ReactSurface = lazy(() => import("./react-surface-ZEDBXBP3.mjs"));
73
+ var ThreadSettings = lazy(() => import("./settings-5EZW6KK4.mjs"));
74
+ var ThreadState = lazy(() => import("./state-PSZO57LP.mjs"));
75
+
68
76
  export {
69
77
  useStatus,
70
78
  useAnalyticsCallback,
71
- useOnEditAnalytics
79
+ useOnEditAnalytics,
80
+ IntentResolver,
81
+ Markdown,
82
+ ReactSurface,
83
+ ThreadState
72
84
  };
73
- //# sourceMappingURL=chunk-HLWJTUWZ.mjs.map
85
+ //# sourceMappingURL=chunk-L4C7BEQZ.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n"],
5
- "mappings": ";;;AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAEzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAACC,SAA8BC,YAAAA;AAC/D,QAAMC,QAAQC,SAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBgB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeP,QAAQQ,KAAKC;EAC9B,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;",
6
- "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
3
+ "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts", "../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\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,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAEzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAACC,SAA8BC,YAAAA;AAC/D,QAAMC,QAAQC,SAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBgB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeP,QAAQQ,KAAKC;EAC9B,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;;;AC9BA,SAASO,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,WAAWD,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMI,cAAcJ,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "lazy", "IntentResolver", "lazy", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
7
  }
@@ -2,10 +2,10 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  useOnEditAnalytics,
4
4
  useStatus
5
- } from "./chunk-HLWJTUWZ.mjs";
5
+ } from "./chunk-L4C7BEQZ.mjs";
6
6
  import {
7
7
  THREAD_PLUGIN
8
- } from "./chunk-FXUATCLW.mjs";
8
+ } from "./chunk-42F2DTMM.mjs";
9
9
 
10
10
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
11
11
  import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
@@ -136,7 +136,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
136
136
  message,
137
137
  isAuthor: userIsAuthor,
138
138
  editing
139
- }), RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
139
+ }), RefArray.targets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
140
140
  key: index,
141
141
  part
142
142
  })));
@@ -285,7 +285,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
285
285
  }, /* @__PURE__ */ React2.createElement("div", {
286
286
  role: "none",
287
287
  className: mx3(threadLayout, "place-self-end")
288
- }, RefArray2.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
288
+ }, RefArray2.targets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
289
289
  key: message.id,
290
290
  message,
291
291
  members,
@@ -310,4 +310,4 @@ export {
310
310
  MessageContainer,
311
311
  ChatContainer
312
312
  };
313
- //# sourceMappingURL=chunk-CISLDOH7.mjs.map
313
+ //# sourceMappingURL=chunk-RN3V7SYL.mjs.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 { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { 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';\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 timestamp: new Date().toISOString(),\n text: messageRef.current,\n 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 { type MessageType } from '@dxos/plugin-space/types';\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';\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\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 <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {RefArray.targets(message.parts ?? []).map((part, index) => (\n <MessagePart key={index} part={part} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.text,\n extensions: [\n createBasicExtensions({ readonly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile = 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": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "Ref", "create", "makeRef", "RefArray", "MessageType", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "StreamLanguage", "HighlightStyle", "syntaxHighlighting", "tags", "mx", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "generateName", "hexToFallback", "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", "identityKey", "PublicKey", "equals", "identity", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "toHex", "authorId", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "targets", "parts", "map", "part", "index", "MessagePart", "key", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "useOnEditAnalytics", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "type", "content", "mx", "Surface", "limit", "data", "fallback", "ChatContainer", "thread", "context", "current", "autoFocusTextbox", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "activity", "useStatus", "fullyQualifiedId", "t", "useTranslation", "THREAD_PLUGIN", "_count", "_setCount", "useState", "rerenderEditor", "count", "autoFocus", "setAutoFocus", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "messages", "push", "makeRef", "create", "MessageType", "sender", "identityKey", "toHex", "timestamp", "Date", "toISOString", "undefined", "handleDelete", "id", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "React", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "div", "role", "className", "mx", "threadLayout", "RefArray", "targets", "map", "message", "MessageContainer", "onDelete", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  THREAD_PLUGIN
4
- } from "./chunk-FXUATCLW.mjs";
4
+ } from "./chunk-42F2DTMM.mjs";
5
5
 
6
6
  // packages/plugins/plugin-thread/src/capabilities/capabilities.ts
7
7
  import { defineCapability } from "@dxos/app-framework";
@@ -9,9 +9,10 @@ var ThreadCapabilities;
9
9
  (function(ThreadCapabilities2) {
10
10
  ThreadCapabilities2.State = defineCapability(`${THREAD_PLUGIN}/capability/state`);
11
11
  ThreadCapabilities2.MutableState = defineCapability(`${THREAD_PLUGIN}/capability/state`);
12
+ ThreadCapabilities2.Activity = defineCapability(`${THREAD_PLUGIN}/capability/activity`);
12
13
  })(ThreadCapabilities || (ThreadCapabilities = {}));
13
14
 
14
15
  export {
15
16
  ThreadCapabilities
16
17
  };
17
- //# sourceMappingURL=chunk-ZJITX3TO.mjs.map
18
+ //# sourceMappingURL=chunk-TXW5SIBN.mjs.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,SAASA,wBAAwB;;UAOhBC,qBAAAA;sBAEFC,QAAQC,iBACnB,GAAGC,aAAAA,mBAAgC;sBAExBC,eAAeF,iBAC1B,GAAGC,aAAAA,mBAAgC;sBAMxBE,WAAWH,iBAA2B,GAAGC,aAAAA,sBAAmC;AAC3F,GAbiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
6
+ "names": ["defineCapability", "ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState", "Activity"]
7
+ }
@@ -3,29 +3,36 @@ import {
3
3
  IntentResolver,
4
4
  Markdown,
5
5
  ReactSurface,
6
- ThreadState
7
- } from "./chunk-PJPVEO7E.mjs";
8
- import {
6
+ ThreadState,
9
7
  useAnalyticsCallback,
10
8
  useOnEditAnalytics,
11
9
  useStatus
12
- } from "./chunk-HLWJTUWZ.mjs";
10
+ } from "./chunk-L4C7BEQZ.mjs";
13
11
  import {
14
12
  ThreadAction
15
- } from "./chunk-33NDMQQQ.mjs";
16
- import "./chunk-ZJITX3TO.mjs";
13
+ } from "./chunk-B5VGBXRR.mjs";
14
+ import {
15
+ ThreadCapabilities
16
+ } from "./chunk-TXW5SIBN.mjs";
17
17
  import {
18
18
  THREAD_ITEM,
19
19
  THREAD_PLUGIN,
20
20
  meta
21
- } from "./chunk-FXUATCLW.mjs";
21
+ } from "./chunk-42F2DTMM.mjs";
22
+
23
+ // packages/plugins/plugin-thread/src/events.ts
24
+ import { Events } from "@dxos/app-framework";
25
+ var ThreadEvents;
26
+ (function(ThreadEvents3) {
27
+ ThreadEvents3.SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);
28
+ })(ThreadEvents || (ThreadEvents = {}));
22
29
 
23
30
  // packages/plugins/plugin-thread/src/ThreadPlugin.tsx
24
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
31
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";
25
32
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
26
33
  import { DeckCapabilities, DeckEvents } from "@dxos/plugin-deck";
27
34
  import { MarkdownEvents } from "@dxos/plugin-markdown";
28
- import { SpaceCapabilities, ThreadEvents } from "@dxos/plugin-space";
35
+ import { SpaceCapabilities, ThreadEvents as ThreadEvents2 } from "@dxos/plugin-space";
29
36
  import { ChannelType as ChannelType2, defineObjectForm, MessageType, ThreadType } from "@dxos/plugin-space/types";
30
37
  import { RefArray } from "@dxos/react-client/echo";
31
38
  import { translations as threadTranslations } from "@dxos/react-ui-thread";
@@ -86,12 +93,12 @@ var ThreadPlugin = () => definePlugin(meta, [
86
93
  // TODO(wittjosiah): Does not integrate with settings store.
87
94
  // Should this be a different event?
88
95
  // Should settings store be renamed to be more generic?
89
- activatesOn: Events.SetupSettings,
96
+ activatesOn: Events2.SetupSettings,
90
97
  activate: ThreadState
91
98
  }),
92
99
  defineModule({
93
100
  id: `${meta.id}/module/translations`,
94
- activatesOn: Events.SetupTranslations,
101
+ activatesOn: Events2.SetupTranslations,
95
102
  activate: () => contributes(Capabilities.Translations, [
96
103
  ...translations_default,
97
104
  ...threadTranslations
@@ -99,7 +106,7 @@ var ThreadPlugin = () => definePlugin(meta, [
99
106
  }),
100
107
  defineModule({
101
108
  id: `${meta.id}/module/metadata`,
102
- activatesOn: Events.SetupMetadata,
109
+ activatesOn: Events2.SetupMetadata,
103
110
  activate: () => [
104
111
  contributes(Capabilities.Metadata, {
105
112
  id: ChannelType2.typename,
@@ -194,22 +201,25 @@ var ThreadPlugin = () => definePlugin(meta, [
194
201
  }),
195
202
  defineModule({
196
203
  id: `${meta.id}/module/react-surface`,
197
- activatesOn: Events.SetupReactSurface,
204
+ activatesOn: Events2.SetupReactSurface,
198
205
  // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.
199
206
  activatesBefore: [
200
- ThreadEvents.SetupThread
207
+ ThreadEvents2.SetupThread,
208
+ ThreadEvents.SetupActivity
201
209
  ],
202
210
  activate: ReactSurface
203
211
  }),
204
212
  defineModule({
205
213
  id: `${meta.id}/module/intent-resolver`,
206
- activatesOn: Events.SetupIntentResolver,
214
+ activatesOn: Events2.SetupIntentResolver,
207
215
  activate: IntentResolver
208
216
  })
209
217
  ]);
210
218
  export {
211
219
  THREAD_ITEM,
212
220
  THREAD_PLUGIN,
221
+ ThreadCapabilities,
222
+ ThreadEvents,
213
223
  ThreadPlugin,
214
224
  meta,
215
225
  useAnalyticsCallback,