@dxos/plugin-thread 0.8.3-main.672df60 → 0.8.3-staging.0fa589b

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 (158) hide show
  1. package/dist/lib/browser/{ChannelContainer-LGYSQMC7.mjs → ChannelContainer-PKFBVENP.mjs} +4 -4
  2. package/dist/lib/browser/{ChatContainer-JWRI73OG.mjs → ChatContainer-RSOKYAMK.mjs} +2 -2
  3. package/dist/lib/browser/{app-graph-builder-K3CFBN7V.mjs → app-graph-builder-OY7R7EJP.mjs} +11 -11
  4. package/dist/lib/browser/app-graph-builder-OY7R7EJP.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-6NBVNXTM.mjs +21 -0
  6. package/dist/lib/browser/{chunk-WDOQXTI2.mjs → chunk-AEXWNS6Z.mjs} +5 -3
  7. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-KMVGJG23.mjs → chunk-PG5CTFKK.mjs} +50 -45
  9. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-G3TS64FP.mjs → chunk-TAFSCSUR.mjs} +4 -4
  11. package/dist/lib/browser/chunk-TAFSCSUR.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-5PGLGDIP.mjs → chunk-XZKBN3NS.mjs} +35 -35
  13. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +7 -0
  14. package/dist/lib/browser/index.mjs +35 -9
  15. package/dist/lib/browser/index.mjs.map +3 -3
  16. package/dist/lib/browser/{intent-resolver-YUYZCTLF.mjs → intent-resolver-FK2MDVDT.mjs} +24 -26
  17. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +7 -0
  18. package/dist/lib/browser/{markdown-4EC3OCF2.mjs → markdown-TE5SWWNJ.mjs} +9 -9
  19. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-root-EECCWHCW.mjs → react-root-NK3A4VG7.mjs} +6 -6
  22. package/dist/lib/browser/{react-surface-5QLZAFDL.mjs → react-surface-VXUJKSOG.mjs} +12 -12
  23. package/dist/lib/browser/react-surface-VXUJKSOG.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-KVBQQSO5.mjs → settings-RB2RSLXV.mjs} +4 -4
  25. package/dist/lib/browser/settings-RB2RSLXV.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +1 -1
  27. package/dist/lib/node/{ChannelContainer-5EKNEH56.cjs → ChannelContainer-YS5YT2ML.cjs} +9 -9
  28. package/dist/lib/node/{ChannelContainer-5EKNEH56.cjs.map → ChannelContainer-YS5YT2ML.cjs.map} +2 -2
  29. package/dist/lib/node/{ChatContainer-EE3FPSYO.cjs → ChatContainer-GCOM3M56.cjs} +8 -8
  30. package/dist/lib/node/{ChatContainer-EE3FPSYO.cjs.map → ChatContainer-GCOM3M56.cjs.map} +2 -2
  31. package/dist/lib/node/{app-graph-builder-IRE3GYKE.cjs → app-graph-builder-PBHJNDQY.cjs} +21 -21
  32. package/dist/lib/node/app-graph-builder-PBHJNDQY.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-4B3PPXA6.cjs → chunk-E3WBZTTI.cjs} +12 -12
  34. package/dist/lib/node/chunk-E3WBZTTI.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-U7NOIXN6.cjs → chunk-ERG7G6FF.cjs} +10 -10
  36. package/dist/lib/node/{chunk-JLHENFGK.cjs → chunk-IP533AMV.cjs} +76 -71
  37. package/dist/lib/node/chunk-IP533AMV.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-6B3M6XRE.cjs → chunk-UM36TPCT.cjs} +37 -37
  39. package/dist/lib/node/chunk-UM36TPCT.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-TKHJVC2C.cjs → chunk-ZGDN3XBR.cjs} +8 -6
  41. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +7 -0
  42. package/dist/lib/node/index.cjs +45 -19
  43. package/dist/lib/node/index.cjs.map +3 -3
  44. package/dist/lib/node/{intent-resolver-MZ3HADNY.cjs → intent-resolver-SYSJ5SJG.cjs} +50 -52
  45. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +7 -0
  46. package/dist/lib/node/{markdown-NJDPXIKD.cjs → markdown-GQIPJS2F.cjs} +27 -27
  47. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +7 -0
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-root-IAYQ2DBO.cjs → react-root-6HHDMULJ.cjs} +10 -10
  50. package/dist/lib/node/{react-surface-AVC5VVIS.cjs → react-surface-NBH42NN2.cjs} +24 -24
  51. package/dist/lib/node/react-surface-NBH42NN2.cjs.map +7 -0
  52. package/dist/lib/node/{settings-H45P5YO2.cjs → settings-4LQSFEDK.cjs} +7 -7
  53. package/dist/lib/node/settings-4LQSFEDK.cjs.map +7 -0
  54. package/dist/lib/node/types/index.cjs +6 -6
  55. package/dist/lib/node/types/index.cjs.map +1 -1
  56. package/dist/lib/node-esm/{ChannelContainer-KFS2RWWW.mjs → ChannelContainer-O4QJII2P.mjs} +4 -4
  57. package/dist/lib/node-esm/{ChatContainer-UJYPQMLV.mjs → ChatContainer-F6CSADV7.mjs} +2 -2
  58. package/dist/lib/node-esm/{app-graph-builder-I5VMPLE4.mjs → app-graph-builder-BAHBHYWI.mjs} +11 -11
  59. package/dist/lib/node-esm/app-graph-builder-BAHBHYWI.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-X6AUQDTE.mjs → chunk-2RNIPFDA.mjs} +35 -35
  61. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-ODUB4GAB.mjs → chunk-O63QJPQX.mjs} +7 -7
  63. package/dist/lib/node-esm/{chunk-POKXRTII.mjs → chunk-P6RLFCNT.mjs} +4 -4
  64. package/dist/lib/node-esm/chunk-P6RLFCNT.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-J323VQ4P.mjs → chunk-UJMPYKT3.mjs} +5 -3
  66. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-MNJ3V4XM.mjs → chunk-UZWVVFT3.mjs} +50 -45
  68. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +35 -9
  70. package/dist/lib/node-esm/index.mjs.map +3 -3
  71. package/dist/lib/node-esm/{intent-resolver-CU22OPAH.mjs → intent-resolver-BU73VYW3.mjs} +24 -26
  72. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +7 -0
  73. package/dist/lib/node-esm/{markdown-HRGGO7IA.mjs → markdown-HJUWNBLS.mjs} +9 -9
  74. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +7 -0
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-root-NQMUEI6Z.mjs → react-root-RUXOAQNW.mjs} +6 -6
  77. package/dist/lib/node-esm/{react-surface-Z4X5VLMY.mjs → react-surface-ELXFYKP6.mjs} +12 -12
  78. package/dist/lib/node-esm/react-surface-ELXFYKP6.mjs.map +7 -0
  79. package/dist/lib/node-esm/{settings-IJGUOU3F.mjs → settings-EA7DFSM6.mjs} +4 -4
  80. package/dist/lib/node-esm/settings-EA7DFSM6.mjs.map +7 -0
  81. package/dist/lib/node-esm/types/index.mjs +1 -1
  82. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  85. package/dist/types/src/components/ChatContainer.d.ts +3 -2
  86. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/CommentsContainer.d.ts +1 -1
  89. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  92. package/dist/types/src/components/testing.d.ts +2 -103
  93. package/dist/types/src/components/testing.d.ts.map +1 -1
  94. package/dist/types/src/translations.d.ts +128 -2
  95. package/dist/types/src/translations.d.ts.map +1 -1
  96. package/dist/types/src/types/schema.d.ts +117 -301
  97. package/dist/types/src/types/schema.d.ts.map +1 -1
  98. package/dist/types/src/types/types.d.ts +153 -828
  99. package/dist/types/src/types/types.d.ts.map +1 -1
  100. package/package.json +42 -42
  101. package/src/ThreadPlugin.tsx +29 -6
  102. package/src/capabilities/app-graph-builder.ts +9 -9
  103. package/src/capabilities/intent-resolver.ts +26 -26
  104. package/src/capabilities/react-surface.tsx +7 -7
  105. package/src/capabilities/settings.ts +7 -2
  106. package/src/components/Call/Toolbar.tsx +3 -3
  107. package/src/components/ChannelContainer.tsx +18 -22
  108. package/src/components/Chat.stories.tsx +4 -4
  109. package/src/components/ChatContainer.tsx +6 -6
  110. package/src/components/CommentContainer.tsx +2 -2
  111. package/src/components/Comments.stories.tsx +15 -5
  112. package/src/components/CommentsContainer.tsx +21 -24
  113. package/src/components/MessageContainer.tsx +20 -20
  114. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  115. package/src/components/ThreadComplementary.tsx +19 -15
  116. package/src/components/testing.ts +5 -5
  117. package/src/extensions/threads.ts +7 -7
  118. package/src/testing/stories.ts +3 -3
  119. package/src/translations.ts +7 -2
  120. package/src/types/schema.ts +8 -4
  121. package/dist/lib/browser/app-graph-builder-K3CFBN7V.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-5PGLGDIP.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-CF2MXRCH.mjs +0 -21
  124. package/dist/lib/browser/chunk-G3TS64FP.mjs.map +0 -7
  125. package/dist/lib/browser/chunk-KMVGJG23.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-WDOQXTI2.mjs.map +0 -7
  127. package/dist/lib/browser/intent-resolver-YUYZCTLF.mjs.map +0 -7
  128. package/dist/lib/browser/markdown-4EC3OCF2.mjs.map +0 -7
  129. package/dist/lib/browser/react-surface-5QLZAFDL.mjs.map +0 -7
  130. package/dist/lib/browser/settings-KVBQQSO5.mjs.map +0 -7
  131. package/dist/lib/node/app-graph-builder-IRE3GYKE.cjs.map +0 -7
  132. package/dist/lib/node/chunk-4B3PPXA6.cjs.map +0 -7
  133. package/dist/lib/node/chunk-6B3M6XRE.cjs.map +0 -7
  134. package/dist/lib/node/chunk-JLHENFGK.cjs.map +0 -7
  135. package/dist/lib/node/chunk-TKHJVC2C.cjs.map +0 -7
  136. package/dist/lib/node/intent-resolver-MZ3HADNY.cjs.map +0 -7
  137. package/dist/lib/node/markdown-NJDPXIKD.cjs.map +0 -7
  138. package/dist/lib/node/react-surface-AVC5VVIS.cjs.map +0 -7
  139. package/dist/lib/node/settings-H45P5YO2.cjs.map +0 -7
  140. package/dist/lib/node-esm/app-graph-builder-I5VMPLE4.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-J323VQ4P.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-MNJ3V4XM.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-POKXRTII.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-X6AUQDTE.mjs.map +0 -7
  145. package/dist/lib/node-esm/intent-resolver-CU22OPAH.mjs.map +0 -7
  146. package/dist/lib/node-esm/markdown-HRGGO7IA.mjs.map +0 -7
  147. package/dist/lib/node-esm/react-surface-Z4X5VLMY.mjs.map +0 -7
  148. package/dist/lib/node-esm/settings-IJGUOU3F.mjs.map +0 -7
  149. /package/dist/lib/browser/{ChannelContainer-LGYSQMC7.mjs.map → ChannelContainer-PKFBVENP.mjs.map} +0 -0
  150. /package/dist/lib/browser/{ChatContainer-JWRI73OG.mjs.map → ChatContainer-RSOKYAMK.mjs.map} +0 -0
  151. /package/dist/lib/browser/{chunk-CF2MXRCH.mjs.map → chunk-6NBVNXTM.mjs.map} +0 -0
  152. /package/dist/lib/browser/{react-root-EECCWHCW.mjs.map → react-root-NK3A4VG7.mjs.map} +0 -0
  153. /package/dist/lib/node/{chunk-U7NOIXN6.cjs.map → chunk-ERG7G6FF.cjs.map} +0 -0
  154. /package/dist/lib/node/{react-root-IAYQ2DBO.cjs.map → react-root-6HHDMULJ.cjs.map} +0 -0
  155. /package/dist/lib/node-esm/{ChannelContainer-KFS2RWWW.mjs.map → ChannelContainer-O4QJII2P.mjs.map} +0 -0
  156. /package/dist/lib/node-esm/{ChatContainer-UJYPQMLV.mjs.map → ChatContainer-F6CSADV7.mjs.map} +0 -0
  157. /package/dist/lib/node-esm/{chunk-ODUB4GAB.mjs.map → chunk-O63QJPQX.mjs.map} +0 -0
  158. /package/dist/lib/node-esm/{react-root-NQMUEI6Z.mjs.map → react-root-RUXOAQNW.mjs.map} +0 -0
@@ -26,8 +26,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_JLHENFGK_exports = {};
30
- __export(chunk_JLHENFGK_exports, {
29
+ var chunk_IP533AMV_exports = {};
30
+ __export(chunk_IP533AMV_exports, {
31
31
  CallDebugPanel: () => CallDebugPanel,
32
32
  CallSidebar: () => CallSidebar,
33
33
  ChannelContainer: () => ChannelContainer2,
@@ -35,11 +35,11 @@ __export(chunk_JLHENFGK_exports, {
35
35
  ThreadComplementary: () => ThreadComplementary,
36
36
  ThreadSettings: () => ThreadSettings
37
37
  });
38
- module.exports = __toCommonJS(chunk_JLHENFGK_exports);
39
- var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
40
- var import_chunk_6B3M6XRE = require("./chunk-6B3M6XRE.cjs");
38
+ module.exports = __toCommonJS(chunk_IP533AMV_exports);
39
+ var import_chunk_ZGDN3XBR = require("./chunk-ZGDN3XBR.cjs");
40
+ var import_chunk_UM36TPCT = require("./chunk-UM36TPCT.cjs");
41
41
  var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
42
- var import_chunk_4B3PPXA6 = require("./chunk-4B3PPXA6.cjs");
42
+ var import_chunk_E3WBZTTI = require("./chunk-E3WBZTTI.cjs");
43
43
  var import_chunk_FUXJAVFZ = require("./chunk-FUXJAVFZ.cjs");
44
44
  var import_chunk_LR5NENBE = require("./chunk-LR5NENBE.cjs");
45
45
  var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
@@ -56,8 +56,8 @@ var import_app_framework = require("@dxos/app-framework");
56
56
  var import_tracking3 = require("@preact-signals/safe-react/tracking");
57
57
  var import_react3 = __toESM(require("react"));
58
58
  var import_app_framework2 = require("@dxos/app-framework");
59
- var import_echo_schema = require("@dxos/echo-schema");
60
- var import_echo = require("@dxos/react-client/echo");
59
+ var import_echo = require("@dxos/echo");
60
+ var import_echo2 = require("@dxos/react-client/echo");
61
61
  var import_halo = require("@dxos/react-client/halo");
62
62
  var import_react_ui2 = require("@dxos/react-ui");
63
63
  var import_react_ui_attention = require("@dxos/react-ui-attention");
@@ -68,9 +68,9 @@ var import_react4 = require("react");
68
68
  var import_tracking4 = require("@preact-signals/safe-react/tracking");
69
69
  var import_react5 = require("@phosphor-icons/react");
70
70
  var import_react6 = __toESM(require("react"));
71
- var import_echo_schema2 = require("@dxos/echo-schema");
71
+ var import_echo3 = require("@dxos/echo");
72
72
  var import_live_object = require("@dxos/live-object");
73
- var import_echo2 = require("@dxos/react-client/echo");
73
+ var import_echo4 = require("@dxos/react-client/echo");
74
74
  var import_halo2 = require("@dxos/react-client/halo");
75
75
  var import_react_ui3 = require("@dxos/react-ui");
76
76
  var import_react_ui_editor = require("@dxos/react-ui-editor");
@@ -78,14 +78,12 @@ var import_react_ui_theme = require("@dxos/react-ui-theme");
78
78
  var import_react_ui_thread = require("@dxos/react-ui-thread");
79
79
  var import_util = require("@dxos/util");
80
80
  var import_tracking5 = require("@preact-signals/safe-react/tracking");
81
- var import_react7 = require("@phosphor-icons/react");
82
- var import_react8 = __toESM(require("react"));
83
- var import_echo_schema3 = require("@dxos/echo-schema");
84
- var import_echo3 = require("@dxos/react-client/echo");
81
+ var import_react7 = __toESM(require("react"));
82
+ var import_echo5 = require("@dxos/echo");
83
+ var import_echo6 = require("@dxos/react-client/echo");
85
84
  var import_react_ui4 = require("@dxos/react-ui");
86
- var import_react_ui_theme2 = require("@dxos/react-ui-theme");
87
85
  var import_tracking6 = require("@preact-signals/safe-react/tracking");
88
- var import_react9 = __toESM(require("react"));
86
+ var import_react8 = __toESM(require("react"));
89
87
  var import_react_ui_form = require("@dxos/react-ui-form");
90
88
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-thread/src/components/CallDebugPanel.tsx";
91
89
  var CallDebugPanel = ({ state }) => {
@@ -199,7 +197,7 @@ var CallSidebar = () => {
199
197
  var _effect = (0, import_tracking2.useSignals)();
200
198
  try {
201
199
  const call = (0, import_app_framework.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
202
- return /* @__PURE__ */ import_react2.default.createElement(import_chunk_6B3M6XRE.ChannelContainer, {
200
+ return /* @__PURE__ */ import_react2.default.createElement(import_chunk_UM36TPCT.ChannelContainer, {
203
201
  roomId: call.roomId
204
202
  });
205
203
  } finally {
@@ -265,15 +263,15 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
265
263
  var _effect = (0, import_tracking4.useSignals)();
266
264
  try {
267
265
  const identity = (0, import_halo2.useIdentity)();
268
- const space = (0, import_echo2.getSpace)(anchor);
269
- const members = (0, import_echo2.useMembers)(space?.key);
266
+ const space = (0, import_echo4.getSpace)(anchor);
267
+ const members = (0, import_echo4.useMembers)(space?.key);
270
268
  const detached = !anchor.anchor;
271
- const thread = anchor[import_echo_schema2.RelationSourceId];
272
- const activity = (0, import_chunk_FUXJAVFZ.useStatus)(space, (0, import_echo2.fullyQualifiedId)(thread));
269
+ const thread = import_echo3.Relation.getSource(anchor);
270
+ const activity = (0, import_chunk_FUXJAVFZ.useStatus)(space, (0, import_echo4.fullyQualifiedId)(thread));
273
271
  const { t } = (0, import_react_ui3.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
274
272
  const threadScrollRef = (0, import_react6.useRef)(null);
275
273
  const { themeMode } = (0, import_react_ui3.useThemeContext)();
276
- const textboxMetadata = (0, import_chunk_LR5NENBE.getMessageMetadata)((0, import_echo2.fullyQualifiedId)(thread), identity);
274
+ const textboxMetadata = (0, import_chunk_LR5NENBE.getMessageMetadata)((0, import_echo4.fullyQualifiedId)(thread), identity);
277
275
  const [_count, _setCount] = (0, import_react6.useState)(0);
278
276
  const rerenderEditor = () => _setCount((count) => count + 1);
279
277
  const messageRef = (0, import_react6.useRef)("");
@@ -287,7 +285,7 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
287
285
  (0, import_react_ui_editor.listener)({
288
286
  onChange: (text) => messageRef.current = text
289
287
  }),
290
- import_chunk_4B3PPXA6.command
288
+ import_chunk_E3WBZTTI.command
291
289
  ], [
292
290
  _count
293
291
  ]);
@@ -328,7 +326,7 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
328
326
  onClickCapture: handleAttend,
329
327
  onFocusCapture: handleAttend,
330
328
  current,
331
- id: (0, import_echo2.fullyQualifiedId)(thread)
329
+ id: (0, import_echo4.fullyQualifiedId)(thread)
332
330
  }, /* @__PURE__ */ import_react6.default.createElement("div", {
333
331
  role: "none",
334
332
  className: (0, import_react_ui_theme.mx)("col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]", import_react_ui_theme.hoverableControls, import_react_ui_theme.hoverableFocusedWithinControls)
@@ -347,7 +345,7 @@ var CommentContainer = ({ anchor, current, onAttend, onComment, onResolve, onMes
347
345
  onResolve: handleResolve
348
346
  }), onThreadDelete && /* @__PURE__ */ import_react6.default.createElement(DeleteThreadButton, {
349
347
  onDelete: handleThreadDelete
350
- }))), import_live_object.RefArray.targets(thread.messages?.filter(import_util.isNonNullable) ?? []).map((message) => /* @__PURE__ */ import_react6.default.createElement(import_chunk_4B3PPXA6.MessageContainer, {
348
+ }))), import_live_object.RefArray.targets(thread.messages?.filter(import_util.isNonNullable) ?? []).map((message) => /* @__PURE__ */ import_react6.default.createElement(import_chunk_E3WBZTTI.MessageContainer, {
351
349
  key: message.id,
352
350
  editable: true,
353
351
  message,
@@ -372,11 +370,11 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
372
370
  var _effect = (0, import_tracking5.useSignals)();
373
371
  try {
374
372
  const { t } = (0, import_react_ui4.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
375
- const filteredAnchors = showResolvedThreads ? anchors.filter((anchor) => !!anchor[import_echo_schema3.RelationSourceId]) : anchors.filter((anchor) => {
376
- const thread = anchor[import_echo_schema3.RelationSourceId];
373
+ const filteredAnchors = showResolvedThreads ? anchors.filter((anchor) => !!import_echo5.Relation.getSource(anchor)) : anchors.filter((anchor) => {
374
+ const thread = import_echo5.Relation.getSource(anchor);
377
375
  return thread && thread.status !== "resolved";
378
376
  });
379
- (0, import_react8.useEffect)(() => {
377
+ (0, import_react7.useEffect)(() => {
380
378
  if (currentId) {
381
379
  document.getElementById(currentId)?.scrollIntoView({
382
380
  behavior: "smooth",
@@ -386,29 +384,32 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
386
384
  }, [
387
385
  currentId
388
386
  ]);
389
- return /* @__PURE__ */ import_react8.default.createElement(import_react8.default.Fragment, null, filteredAnchors.length > 0 ? filteredAnchors.map((anchor) => {
390
- const thread = anchor[import_echo_schema3.RelationSourceId];
391
- const threadId = (0, import_echo3.fullyQualifiedId)(thread);
392
- return /* @__PURE__ */ import_react8.default.createElement(CommentContainer, {
387
+ if (filteredAnchors.length === 0) {
388
+ return /* @__PURE__ */ import_react7.default.createElement("div", {
389
+ role: "none",
390
+ className: "plb-cardSpacingBlock pli-cardSpacingInline"
391
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Callout.Root, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Callout.Title, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Trans, {
392
+ t,
393
+ i18nKey: "no comments message",
394
+ components: {
395
+ commentIcon: /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Icon, {
396
+ icon: "ph--chat-text--regular",
397
+ size: 4,
398
+ classNames: "inline-block"
399
+ })
400
+ }
401
+ }))));
402
+ }
403
+ return filteredAnchors.map((anchor) => {
404
+ const thread = import_echo5.Relation.getSource(anchor);
405
+ const threadId = (0, import_echo6.fullyQualifiedId)(thread);
406
+ return /* @__PURE__ */ import_react7.default.createElement(CommentContainer, {
393
407
  key: threadId,
394
408
  anchor,
395
409
  current: currentId === threadId,
396
410
  ...props
397
411
  });
398
- }) : /* @__PURE__ */ import_react8.default.createElement("div", {
399
- role: "alert",
400
- className: (0, import_react_ui_theme2.mx)(import_react_ui_theme2.descriptionMessage, "place-self-center rounded-lg text-center m-4")
401
- }, /* @__PURE__ */ import_react8.default.createElement("h2", {
402
- className: "mbe-2 font-medium text-baseText"
403
- }, t("no comments title")), /* @__PURE__ */ import_react8.default.createElement("p", null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui4.Trans, {
404
- t,
405
- i18nKey: "no comments message",
406
- components: {
407
- commentIcon: /* @__PURE__ */ import_react8.default.createElement(import_react7.ChatText, {
408
- className: "inline-block"
409
- })
410
- }
411
- }))));
412
+ });
412
413
  } finally {
413
414
  _effect.f();
414
415
  }
@@ -416,46 +417,50 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
416
417
  var ThreadSettings = ({ settings }) => {
417
418
  var _effect = (0, import_tracking6.useSignals)();
418
419
  try {
419
- return /* @__PURE__ */ import_react9.default.createElement(import_react_ui_form.DeprecatedFormContainer, null);
420
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui_form.DeprecatedFormContainer, null);
420
421
  } finally {
421
422
  _effect.f();
422
423
  }
423
424
  };
424
- var ChannelContainer2 = (0, import_react4.lazy)(() => import("./ChannelContainer-5EKNEH56.cjs"));
425
- var ChatContainer = (0, import_react4.lazy)(() => import("./ChatContainer-EE3FPSYO.cjs"));
425
+ var ChannelContainer2 = (0, import_react4.lazy)(() => import("./ChannelContainer-YS5YT2ML.cjs"));
426
+ var ChatContainer = (0, import_react4.lazy)(() => import("./ChatContainer-GCOM3M56.cjs"));
426
427
  var ThreadComplementary = ({ subject }) => {
427
428
  var _effect = (0, import_tracking3.useSignals)();
428
429
  try {
429
430
  const { dispatchPromise: dispatch } = (0, import_app_framework2.useIntentDispatcher)();
430
431
  const identity = (0, import_halo.useIdentity)();
431
432
  const { t } = (0, import_react_ui2.useTranslation)(import_chunk_HLMCEE5K.THREAD_PLUGIN);
433
+ const { tx } = (0, import_react_ui2.useThemeContext)();
434
+ const subjectId = (0, import_echo2.fullyQualifiedId)(subject);
432
435
  const { state, getViewState } = (0, import_app_framework2.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.MutableState);
433
- const viewState = getViewState((0, import_echo.fullyQualifiedId)(subject));
436
+ const drafts = state.drafts[subjectId];
437
+ const viewState = (0, import_react3.useMemo)(() => getViewState(subjectId), [
438
+ getViewState,
439
+ subjectId
440
+ ]);
434
441
  const { showResolvedThreads } = viewState;
435
442
  const onChangeViewState = (0, import_react3.useCallback)((nextValue) => {
436
443
  viewState.showResolvedThreads = nextValue === "all";
437
444
  }, [
438
445
  viewState
439
446
  ]);
440
- const drafts = state.drafts[(0, import_echo.fullyQualifiedId)(subject)];
441
447
  const anchorSorts = (0, import_app_framework2.useCapabilities)(import_app_framework2.Capabilities.AnchorSort);
442
- const sort = (0, import_react3.useMemo)(() => anchorSorts.find(({ key }) => key === (0, import_echo_schema.getTypename)(subject))?.sort, [
448
+ const sort = (0, import_react3.useMemo)(() => anchorSorts.find(({ key }) => key === import_echo.Obj.getTypename(subject))?.sort, [
443
449
  anchorSorts,
444
450
  subject
445
451
  ]);
446
- const space = (0, import_echo.getSpace)(subject);
447
- const objectsAnchoredTo = (0, import_echo.useQuery)(space, import_echo_schema.Query.select(import_echo_schema.Filter.ids(subject.id)).targetOf(import_schema.AnchoredTo));
448
- const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => (0, import_echo_schema.isInstanceOf)(import_chunk_TKHJVC2C.ThreadType, anchor[import_echo_schema.RelationSourceId])).concat(drafts ?? []);
452
+ const space = (0, import_echo2.getSpace)(subject);
453
+ const objectsAnchoredTo = (0, import_echo2.useQuery)(space, import_echo.Query.select(import_echo.Filter.ids(subject.id)).targetOf(import_schema.AnchoredTo));
454
+ const anchors = objectsAnchoredTo.toSorted((a, b) => sort?.(a, b) ?? 0).filter((anchor) => import_echo.Obj.instanceOf(import_chunk_ZGDN3XBR.ThreadType, import_echo.Relation.getSource(anchor))).concat(drafts ?? []);
449
455
  const attended = (0, import_react_ui_attention.useAttended)();
450
- const qualifiedSubjectId = (0, import_echo.fullyQualifiedId)(subject);
451
456
  const handleAttend = (0, import_react3.useCallback)((anchor) => {
452
- const thread = anchor[import_echo_schema.RelationSourceId];
453
- const threadId = (0, import_echo.fullyQualifiedId)(thread);
457
+ const thread = import_echo.Relation.getSource(anchor);
458
+ const threadId = (0, import_echo2.fullyQualifiedId)(thread);
454
459
  if (state.current !== threadId) {
455
460
  state.current = threadId;
456
461
  void dispatch((0, import_app_framework2.createIntent)(import_app_framework2.LayoutAction.ScrollIntoView, {
457
462
  part: "current",
458
- subject: (0, import_echo.fullyQualifiedId)(subject),
463
+ subject: (0, import_echo2.fullyQualifiedId)(subject),
459
464
  options: {
460
465
  cursor: anchor.anchor,
461
466
  ref: threadId
@@ -468,7 +473,7 @@ var ThreadComplementary = ({ subject }) => {
468
473
  subject
469
474
  ]);
470
475
  const handleComment = (0, import_react3.useCallback)(async (anchor, text) => {
471
- await dispatch((0, import_app_framework2.createIntent)(import_chunk_TKHJVC2C.ThreadAction.AddMessage, {
476
+ await dispatch((0, import_app_framework2.createIntent)(import_chunk_ZGDN3XBR.ThreadAction.AddMessage, {
472
477
  anchor,
473
478
  subject,
474
479
  sender: {
@@ -476,26 +481,26 @@ var ThreadComplementary = ({ subject }) => {
476
481
  },
477
482
  text
478
483
  }));
479
- const thread = anchor[import_echo_schema.RelationSourceId];
480
- state.current = (0, import_echo.fullyQualifiedId)(thread);
484
+ const thread = import_echo.Relation.getSource(anchor);
485
+ state.current = (0, import_echo2.fullyQualifiedId)(thread);
481
486
  }, [
482
487
  dispatch,
483
488
  identity,
484
489
  subject
485
490
  ]);
486
- const handleResolve = (0, import_react3.useCallback)((anchor) => dispatch((0, import_app_framework2.createIntent)(import_chunk_TKHJVC2C.ThreadAction.ToggleResolved, {
487
- thread: anchor[import_echo_schema.RelationSourceId]
491
+ const handleResolve = (0, import_react3.useCallback)((anchor) => dispatch((0, import_app_framework2.createIntent)(import_chunk_ZGDN3XBR.ThreadAction.ToggleResolved, {
492
+ thread: import_echo.Relation.getSource(anchor)
488
493
  })), [
489
494
  dispatch
490
495
  ]);
491
- const handleThreadDelete = (0, import_react3.useCallback)((anchor) => dispatch((0, import_app_framework2.createIntent)(import_chunk_TKHJVC2C.ThreadAction.Delete, {
496
+ const handleThreadDelete = (0, import_react3.useCallback)((anchor) => dispatch((0, import_app_framework2.createIntent)(import_chunk_ZGDN3XBR.ThreadAction.Delete, {
492
497
  anchor,
493
498
  subject
494
499
  })), [
495
500
  dispatch,
496
501
  subject
497
502
  ]);
498
- const handleMessageDelete = (0, import_react3.useCallback)((anchor, messageId) => dispatch((0, import_app_framework2.createIntent)(import_chunk_TKHJVC2C.ThreadAction.DeleteMessage, {
503
+ const handleMessageDelete = (0, import_react3.useCallback)((anchor, messageId) => dispatch((0, import_app_framework2.createIntent)(import_chunk_ZGDN3XBR.ThreadAction.DeleteMessage, {
499
504
  anchor,
500
505
  subject,
501
506
  messageId
@@ -505,7 +510,7 @@ var ThreadComplementary = ({ subject }) => {
505
510
  ]);
506
511
  const comments = /* @__PURE__ */ import_react3.default.createElement(CommentsContainer, {
507
512
  anchors,
508
- currentId: attended.includes(qualifiedSubjectId) ? state.current : void 0,
513
+ currentId: attended.includes(subjectId) ? state.current : void 0,
509
514
  showResolvedThreads,
510
515
  onAttend: handleAttend,
511
516
  onComment: handleComment,
@@ -517,11 +522,11 @@ var ThreadComplementary = ({ subject }) => {
517
522
  toolbar: true
518
523
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_tabs.Tabs.Root, {
519
524
  value: showResolvedThreads ? "all" : "unresolved",
520
- onValueChange: onChangeViewState,
521
525
  orientation: "horizontal",
522
- classNames: 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin'
526
+ classNames: 'contents [&_[role="tabpanel"]]:min-bs-0 [&_[role="tabpanel"]]:overflow-y-auto [&_[role="tabpanel"]]:scrollbar-thin',
527
+ onValueChange: onChangeViewState
523
528
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_tabs.Tabs.Tablist, {
524
- classNames: "p-1 gap-1 bs-[--rail-action] border-be border-separator"
529
+ classNames: tx("toolbar.root", "toolbar", {})
525
530
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_tabs.Tabs.Tab, {
526
531
  value: "unresolved",
527
532
  classNames: "text-sm"
@@ -546,4 +551,4 @@ var ThreadComplementary = ({ subject }) => {
546
551
  ThreadComplementary,
547
552
  ThreadSettings
548
553
  });
549
- //# sourceMappingURL=chunk-JLHENFGK.cjs.map
554
+ //# sourceMappingURL=chunk-IP533AMV.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/CallDebugPanel.tsx", "../../../src/components/CallSidebar.tsx", "../../../src/components/ThreadComplementary.tsx", "../../../src/components/index.ts", "../../../src/components/CommentContainer.tsx", "../../../src/components/CommentsContainer.tsx", "../../../src/components/ThreadSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { WebRTCStats } from '@peermetrics/webrtc-stats';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { Panel } from '@dxos/devtools';\nimport { log } from '@dxos/log';\nimport { Input, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { Json } from '@dxos/react-ui-syntax-highlighter';\n\nimport { type GlobalState } from '../calls';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport type CallDebugPanelProps = ThemedClassName<{\n state?: GlobalState;\n}>;\n\nexport const CallDebugPanel = ({ state }: CallDebugPanelProps) => {\n const users = state?.call?.users;\n const self = state?.call?.self;\n const { t } = useTranslation(THREAD_PLUGIN);\n\n const [open, setOpen] = useState(false);\n const handleToggle = () => setOpen(!open);\n const [showDetailedWebRTCStats, setShowDetailedWebRTCStats] = useState(false);\n const handleShowDetailedWebRTCStats = () => setShowDetailedWebRTCStats(!showDetailedWebRTCStats);\n\n const webrtcStats = useMemo(\n () =>\n new WebRTCStats({\n getStatsInterval: 1000,\n }),\n [],\n );\n\n const [stats, setStats] = useState<Record<string, any>>({});\n useEffect(() => {\n const pc = state?.media.peer?.session?.peerConnection;\n const handleStats = (stats: Record<string, any>) => setStats(stats.data);\n let added = false;\n if (pc && showDetailedWebRTCStats) {\n webrtcStats.addConnection({ pc, peerId: 1, connectionId: '1' });\n webrtcStats.on('stats', handleStats);\n added = true;\n }\n return () => {\n try {\n if (pc && added) {\n webrtcStats.removeConnection({ pc });\n webrtcStats.removeListener('stats', handleStats);\n }\n } catch (error) {\n log.error('error removing webrtc stats', { error, pc, peerId: 1, connectionId: '1' });\n }\n };\n }, [state?.media.peer?.session?.peerConnection, showDetailedWebRTCStats]);\n\n return (\n <Panel\n id='meeting-status'\n icon='ph--video-conference--regular'\n open={open}\n onToggle={handleToggle}\n title={t('meeting status title')}\n maxHeight={false}\n info={\n <div className='flex items-center gap-2'>\n <span title='Joined'>{self?.joined ? 'Active' : 'Inactive'}</span>\n {users?.length !== undefined && <span title='Users'>{users?.length ?? 0} User(s)</span>}\n </div>\n }\n >\n <div className='flex flex-col gap-2 overflow-y-auto'>\n <div className='flex items-row gap-2'>\n <Input.Root>\n <Input.Label classNames={'text-sm'}>{t('show webrtc stats title')}</Input.Label>\n <Input.Checkbox checked={showDetailedWebRTCStats} onCheckedChange={handleShowDetailedWebRTCStats} />\n </Input.Root>\n </div>\n <Json\n classNames='text-sm'\n data={{\n users,\n activities: state?.call?.activities,\n ...(showDetailedWebRTCStats\n ? {\n webrtc: {\n connectionState: state?.media.peer?.session?.peerConnection.connectionState,\n iceConnectionState: state?.media.peer?.session?.peerConnection.iceConnectionState,\n stats,\n },\n }\n : {}),\n tracks: state?.media.peer?.session?.peerConnection.getTransceivers().map((transceiver) => {\n const track =\n transceiver.direction === 'recvonly' ? transceiver.receiver.track : transceiver.sender.track;\n return {\n id: track?.id,\n kind: track?.kind,\n direction: transceiver.direction,\n enabled: track?.enabled,\n muted: track?.muted,\n readyState: track?.readyState,\n settings: track?.getSettings(),\n };\n }),\n callsServiceHistory: state?.media.peer?.history.get(),\n }}\n />\n </div>\n </Panel>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\n\nimport { ChannelContainer } from './ChannelContainer';\nimport { ThreadCapabilities } from '../capabilities';\n\nexport const CallSidebar = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n return <ChannelContainer roomId={call.roomId} />;\n};\n\nexport default CallSidebar;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Capabilities,\n LayoutAction,\n createIntent,\n useCapability,\n useCapabilities,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { Filter, Obj, Query, Relation } from '@dxos/echo';\nimport { fullyQualifiedId, getSpace, useQuery } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { AnchoredTo } from '@dxos/schema';\n\nimport { ThreadCapabilities } from '../capabilities';\nimport { CommentsContainer } from '../components';\nimport { THREAD_PLUGIN } from '../meta';\nimport { ThreadAction, ThreadType } from '../types';\n\nexport const ThreadComplementary = ({ subject }: { subject: any }) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const identity = useIdentity();\n const { t } = useTranslation(THREAD_PLUGIN);\n const { tx } = useThemeContext();\n const subjectId = fullyQualifiedId(subject);\n\n const { state, getViewState } = useCapability(ThreadCapabilities.MutableState);\n const drafts = state.drafts[subjectId];\n const viewState = useMemo(() => getViewState(subjectId), [getViewState, subjectId]);\n const { showResolvedThreads } = viewState;\n const onChangeViewState = useCallback(\n (nextValue: string) => {\n viewState.showResolvedThreads = nextValue === 'all';\n },\n [viewState],\n );\n\n const anchorSorts = useCapabilities(Capabilities.AnchorSort);\n const sort = useMemo(\n () => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,\n [anchorSorts, subject],\n );\n\n const space = getSpace(subject);\n const objectsAnchoredTo = useQuery(space, Query.select(Filter.ids(subject.id)).targetOf(AnchoredTo));\n const anchors = objectsAnchoredTo\n .toSorted((a, b) => sort?.(a, b) ?? 0)\n .filter((anchor) => Obj.instanceOf(ThreadType, Relation.getSource(anchor)))\n .concat(drafts ?? []);\n\n const attended = useAttended();\n\n const handleAttend = useCallback(\n (anchor: AnchoredTo) => {\n const thread = Relation.getSource(anchor) as ThreadType;\n const threadId = fullyQualifiedId(thread);\n\n if (state.current !== threadId) {\n state.current = threadId;\n\n // TODO(wittjosiah): Should this be a thread-specific intent?\n // The layout doesn't know about threads and this working depends on other plugins conditionally handling it.\n // This may be overloading this intent or highjacking its intended purpose.\n void dispatch(\n createIntent(LayoutAction.ScrollIntoView, {\n part: 'current',\n subject: fullyQualifiedId(subject),\n options: {\n cursor: anchor.anchor,\n ref: threadId,\n },\n }),\n );\n }\n },\n [state.current, dispatch, subject],\n );\n\n const handleComment = useCallback(\n async (anchor: AnchoredTo, text: string) => {\n await dispatch(\n createIntent(ThreadAction.AddMessage, { anchor, subject, sender: { identityDid: identity?.did }, text }),\n );\n\n const thread = Relation.getSource(anchor) as ThreadType;\n state.current = fullyQualifiedId(thread);\n },\n [dispatch, identity, subject],\n );\n\n const handleResolve = useCallback(\n (anchor: AnchoredTo) =>\n dispatch(createIntent(ThreadAction.ToggleResolved, { thread: Relation.getSource(anchor) as ThreadType })),\n [dispatch],\n );\n\n const handleThreadDelete = useCallback(\n (anchor: AnchoredTo) => dispatch(createIntent(ThreadAction.Delete, { anchor, subject })),\n [dispatch, subject],\n );\n\n const handleMessageDelete = useCallback(\n (anchor: AnchoredTo, messageId: string) =>\n dispatch(createIntent(ThreadAction.DeleteMessage, { anchor, subject, messageId })),\n [dispatch, subject],\n );\n\n const comments = (\n <CommentsContainer\n anchors={anchors}\n currentId={attended.includes(subjectId) ? state.current : undefined}\n showResolvedThreads={showResolvedThreads}\n onAttend={handleAttend}\n onComment={handleComment}\n onResolve={handleResolve}\n onMessageDelete={handleMessageDelete}\n onThreadDelete={handleThreadDelete}\n />\n );\n\n return (\n <StackItem.Content toolbar>\n <Tabs.Root\n value={showResolvedThreads ? 'all' : 'unresolved'}\n orientation='horizontal'\n classNames='contents [&_[role=\"tabpanel\"]]:min-bs-0 [&_[role=\"tabpanel\"]]:overflow-y-auto [&_[role=\"tabpanel\"]]:scrollbar-thin'\n onValueChange={onChangeViewState}\n >\n <Tabs.Tablist classNames={tx('toolbar.root', 'toolbar', {})}>\n <Tabs.Tab value='unresolved' classNames='text-sm'>\n {t('show unresolved label')}\n </Tabs.Tab>\n <Tabs.Tab value='all' classNames='text-sm'>\n {t('show all label')}\n </Tabs.Tab>\n </Tabs.Tablist>\n <Tabs.Tabpanel value='all'>{showResolvedThreads && comments}</Tabs.Tabpanel>\n <Tabs.Tabpanel value='unresolved'>{!showResolvedThreads && comments}</Tabs.Tabpanel>\n </Tabs.Root>\n </StackItem.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { lazy } from 'react';\n\nexport const ChannelContainer = lazy(() => import('./ChannelContainer'));\nexport const ChatContainer = lazy(() => import('./ChatContainer'));\n\n// TODO(wittjosiah): Suspense boundary for sidebar?\nexport * from './Call';\nexport * from './CallDebugPanel';\nexport * from './CallSidebar';\nexport * from './CommentContainer';\nexport * from './CommentsContainer';\nexport * from './MessageContainer';\nexport * from './ThreadComplementary';\nexport * from './ThreadSettings';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CheckCircle, X } from '@phosphor-icons/react';\nimport React, { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { Relation } from '@dxos/echo';\nimport { RefArray } from '@dxos/live-object';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Button, Tag, Tooltip, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport {\n MessageTextbox,\n type MessageTextboxProps,\n Thread,\n ThreadFooter,\n ThreadHeading,\n type ThreadProps,\n} from '@dxos/react-ui-thread';\nimport { type AnchoredTo } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ThreadType } from '../types';\nimport { getMessageMetadata } from '../util';\n\nconst sizeClass = getSize(4);\n\n// TODO(thure): #8149\nconst commentControlClassNames = '!p-1 !min-bs-0 transition-opacity';\n\nconst ToggleResolvedButton = ({\n isResolved,\n onResolve,\n}: {\n isResolved: boolean | undefined;\n onResolve: () => void;\n}) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t(isResolved ? 'mark as unresolved label' : 'mark as resolved label');\n return (\n <Tooltip.Trigger asChild content={label}>\n <Button\n variant='ghost'\n data-testid='thread.toggle-resolved'\n onClick={onResolve}\n classNames={[commentControlClassNames, !isResolved && hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n {isResolved ? <CheckCircle className={sizeClass} weight='fill' /> : <CheckCircle className={sizeClass} />}\n </Button>\n </Tooltip.Trigger>\n );\n};\n\nconst DeleteThreadButton = ({ onDelete }: { onDelete: () => void }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const label = t('delete thread label');\n return (\n <Tooltip.Trigger asChild content={label}>\n <Button\n variant='ghost'\n data-testid='thread.delete'\n onClick={onDelete}\n classNames={[commentControlClassNames, hoverableControlItem]}\n >\n <span className='sr-only'>{label}</span>\n <X className={sizeClass} />\n </Button>\n </Tooltip.Trigger>\n );\n};\n\nexport type CommentContainerProps = {\n anchor: AnchoredTo;\n onAttend?: (anchor: AnchoredTo) => void;\n onComment?: (anchor: AnchoredTo, message: string) => void;\n onResolve?: (anchor: AnchoredTo) => void;\n onMessageDelete?: (anchor: AnchoredTo, messageId: string) => void;\n onThreadDelete?: (anchor: AnchoredTo) => void;\n} & Pick<ThreadProps, 'current'>;\n\nexport const CommentContainer = ({\n anchor,\n current,\n onAttend,\n onComment,\n onResolve,\n onMessageDelete,\n onThreadDelete,\n}: CommentContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(anchor);\n const members = useMembers(space?.key);\n const detached = !anchor.anchor;\n const thread = Relation.getSource(anchor) as ThreadType;\n const activity = useStatus(space, fullyQualifiedId(thread));\n const { t } = useTranslation(THREAD_PLUGIN);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\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 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 [_count],\n );\n\n // TODO(thure): Factor out.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n const handleAttend = useCallback(() => onAttend?.(anchor), [onAttend, anchor]);\n const handleResolve = useCallback(() => onResolve?.(anchor), [onResolve, anchor]);\n const handleMessageDelete = useCallback((id: string) => onMessageDelete?.(anchor, id), [onMessageDelete, anchor]);\n const handleThreadDelete = useCallback(() => onThreadDelete?.(anchor), [onThreadDelete, anchor]);\n\n const handleComment: MessageTextboxProps['onSend'] = useCallback(() => {\n if (!messageRef.current) {\n return false;\n }\n\n onComment?.(anchor, messageRef.current);\n messageRef.current = '';\n scrollToEnd('instant');\n rerenderEditor();\n\n return true;\n }, [anchor, identity]);\n\n return (\n <Thread onClickCapture={handleAttend} onFocusCapture={handleAttend} current={current} id={fullyQualifiedId(thread)}>\n <div\n role='none'\n className={mx(\n 'col-span-2 grid grid-cols-[var(--rail-size)_1fr_min-content]',\n hoverableControls,\n hoverableFocusedWithinControls,\n )}\n >\n {detached ? (\n <Tooltip.Trigger asChild content={t('detached thread label')} side='top'>\n <ThreadHeading detached>{thread.name}</ThreadHeading>\n </Tooltip.Trigger>\n ) : (\n <ThreadHeading>{thread.name}</ThreadHeading>\n )}\n <div className='flex flex-row items-center pli-1'>\n {thread.status === 'staged' && <Tag palette='neutral'>{t('draft button')}</Tag>}\n {onResolve && !(thread?.status === 'staged') && (\n <ToggleResolvedButton isResolved={thread?.status === 'resolved'} onResolve={handleResolve} />\n )}\n {onThreadDelete && <DeleteThreadButton onDelete={handleThreadDelete} />}\n </div>\n </div>\n {/** TODO(dmaretskyi): How's `thread.messages` undefined? */}\n {RefArray.targets(thread.messages?.filter(isNonNullable) ?? []).map((message) => (\n <MessageContainer\n key={message.id}\n editable\n message={message}\n members={members}\n onDelete={handleMessageDelete}\n />\n ))}\n {/*\n TODO(wittjosiah): Can't autofocus this generally.\n There can be multiple threads with inputs and they can't all be focused.\n Also, it steals focus from documents when first rendered.\n Need to find a way to autofocus in one scenario only: when a new thread is created.\n */}\n <MessageTextbox extensions={extensions} onSend={handleComment} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\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 </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect } from 'react';\n\nimport { Relation } from '@dxos/echo';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { Callout, Icon, Trans, useTranslation } from '@dxos/react-ui';\nimport { type AnchoredTo } from '@dxos/schema';\n\nimport { CommentContainer, type CommentContainerProps } from './CommentContainer';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ThreadType } from '../types';\n\nexport type ThreadsContainerProps = Omit<CommentContainerProps, 'anchor' | 'current'> & {\n anchors: AnchoredTo[];\n currentId?: string;\n showResolvedThreads?: boolean;\n};\n\n/**\n * Comment threads.\n */\nexport const CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props }: ThreadsContainerProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n // TODO(wittjosiah): There seems to be a race between thread and anchor being deleted.\n const filteredAnchors = showResolvedThreads\n ? anchors.filter((anchor) => !!Relation.getSource(anchor))\n : anchors.filter((anchor) => {\n const thread = Relation.getSource(anchor);\n return thread && thread.status !== 'resolved';\n });\n\n useEffect(() => {\n if (currentId) {\n document.getElementById(currentId)?.scrollIntoView({ behavior: 'smooth', block: 'end' });\n }\n }, [currentId]);\n\n if (filteredAnchors.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root>\n <Callout.Title>\n <Trans\n {...{\n t,\n i18nKey: 'no comments message',\n components: {\n commentIcon: <Icon icon='ph--chat-text--regular' size={4} classNames='inline-block' />,\n },\n }}\n />\n </Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return filteredAnchors.map((anchor) => {\n const thread = Relation.getSource(anchor) as ThreadType;\n const threadId = fullyQualifiedId(thread);\n return <CommentContainer key={threadId} anchor={anchor} current={currentId === threadId} {...props} />;\n });\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\n// import { useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormContainer } from '@dxos/react-ui-form';\n\n// import { THREAD_PLUGIN } from '../meta';\nimport type { ThreadSettingsProps } from '../types';\n\nexport const ThreadSettings = ({ settings }: { settings: ThreadSettingsProps }) => {\n // const { t } = useTranslation(THREAD_PLUGIN);\n\n return <DeprecatedFormContainer></DeprecatedFormContainer>;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_app_framework", "import_echo", "import_react_ui", "import_halo", "CallDebugPanel", "state", "users", "call", "self", "t", "useTranslation", "THREAD_PLUGIN", "open", "setOpen", "useState", "handleToggle", "showDetailedWebRTCStats", "setShowDetailedWebRTCStats", "handleShowDetailedWebRTCStats", "webrtcStats", "useMemo", "WebRTCStats", "getStatsInterval", "stats", "setStats", "useEffect", "pc", "media", "peer", "session", "peerConnection", "handleStats", "data", "added", "addConnection", "peerId", "connectionId", "on", "removeConnection", "removeListener", "error", "log", "React", "Panel", "id", "icon", "onToggle", "title", "maxHeight", "info", "div", "className", "span", "joined", "length", "undefined", "Input", "Root", "Label", "classNames", "Checkbox", "checked", "onCheckedChange", "Json", "activities", "webrtc", "connectionState", "iceConnectionState", "tracks", "getTransceivers", "map", "transceiver", "track", "direction", "receiver", "sender", "kind", "enabled", "muted", "readyState", "settings", "getSettings", "callsServiceHistory", "history", "get", "CallSidebar", "useCapability", "ThreadCapabilities", "CallManager", "ChannelContainer", "roomId", "sizeClass", "getSize", "commentControlClassNames", "ToggleResolvedButton", "isResolved", "onResolve", "label", "Tooltip", "Trigger", "asChild", "content", "Button", "variant", "data-testid", "onClick", "hoverableControlItem", "CheckCircle", "weight", "DeleteThreadButton", "onDelete", "X", "CommentContainer", "anchor", "current", "onAttend", "onComment", "onMessageDelete", "onThreadDelete", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "detached", "thread", "Relation", "getSource", "activity", "useStatus", "fullyQualifiedId", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "_count", "_setCount", "rerenderEditor", "count", "messageRef", "extensions", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "handleAttend", "useCallback", "handleResolve", "handleMessageDelete", "handleThreadDelete", "handleComment", "Thread", "onClickCapture", "onFocusCapture", "role", "mx", "hoverableControls", "hoverableFocusedWithinControls", "side", "ThreadHeading", "name", "status", "Tag", "palette", "RefArray", "targets", "messages", "filter", "isNonNullable", "message", "MessageContainer", "editable", "MessageTextbox", "onSend", "ThreadFooter", "ref", "CommentsContainer", "anchors", "currentId", "showResolvedThreads", "props", "filteredAnchors", "document", "getElementById", "Callout", "Title", "Trans", "i18nKey", "components", "commentIcon", "Icon", "size", "threadId", "ThreadSettings", "DeprecatedFormContainer", "lazy", "ChatContainer", "ThreadComplementary", "subject", "dispatchPromise", "dispatch", "useIntentDispatcher", "tx", "subjectId", "getViewState", "MutableState", "drafts", "viewState", "onChangeViewState", "nextValue", "anchorSorts", "useCapabilities", "Capabilities", "AnchorSort", "sort", "find", "Obj", "getTypename", "objectsAnchoredTo", "useQuery", "Query", "select", "Filter", "ids", "targetOf", "AnchoredTo", "toSorted", "a", "b", "instanceOf", "ThreadType", "concat", "attended", "useAttended", "createIntent", "LayoutAction", "ScrollIntoView", "part", "options", "cursor", "ThreadAction", "AddMessage", "identityDid", "did", "ToggleResolved", "Delete", "messageId", "DeleteMessage", "comments", "includes", "StackItem", "Content", "toolbar", "Tabs", "value", "orientation", "onValueChange", "Tablist", "Tab", "Tabpanel"]
7
+ }
@@ -26,15 +26,15 @@ 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_6B3M6XRE_exports = {};
30
- __export(chunk_6B3M6XRE_exports, {
29
+ var chunk_UM36TPCT_exports = {};
30
+ __export(chunk_UM36TPCT_exports, {
31
31
  Call: () => Call,
32
32
  ChannelContainer: () => ChannelContainer,
33
33
  ChannelContainer_default: () => ChannelContainer_default
34
34
  });
35
- module.exports = __toCommonJS(chunk_6B3M6XRE_exports);
35
+ module.exports = __toCommonJS(chunk_UM36TPCT_exports);
36
36
  var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
37
- var import_chunk_4B3PPXA6 = require("./chunk-4B3PPXA6.cjs");
37
+ var import_chunk_E3WBZTTI = require("./chunk-E3WBZTTI.cjs");
38
38
  var import_chunk_FUXJAVFZ = require("./chunk-FUXJAVFZ.cjs");
39
39
  var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
40
40
  var import_tracking = require("@preact-signals/safe-react/tracking");
@@ -95,10 +95,10 @@ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJ
95
95
  const isScreensharing = call.media.screenshareTrack !== void 0;
96
96
  const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
97
97
  return /* @__PURE__ */ import_react3.default.createElement("div", {
98
- className: (0, import_react_ui_theme.mx)("z-20 flex justify-center m-8", autoHideControls && import_react_ui_theme.hoverableHidden)
98
+ className: (0, import_react_ui_theme.mx)("z-20 flex justify-center m-8", autoHideControls && import_react_ui_theme.groupHoverControlItemWithTransition)
99
99
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Toolbar.Root, {
100
100
  classNames: [
101
- "p-2 bg-modalSurface rounded-lg shadow-lg",
101
+ "p-2 bg-modalSurface rounded-md shadow-md",
102
102
  classNames
103
103
  ]
104
104
  }, /* @__PURE__ */ import_react3.default.createElement(ToggleButton, {
@@ -581,7 +581,7 @@ var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinne
581
581
  }, children, onClick && /* @__PURE__ */ import_react9.default.createElement("div", {
582
582
  className: "z-10 absolute top-1 right-1 flex"
583
583
  }, /* @__PURE__ */ import_react9.default.createElement(import_react_ui3.IconButton, {
584
- classNames: (0, import_react_ui_theme5.mx)("p-1 min-bs-1 rounded", import_react_ui_theme5.hoverableHidden),
584
+ classNames: (0, import_react_ui_theme5.mx)("p-1 min-bs-1 rounded", import_react_ui_theme5.groupHoverControlItemWithTransition),
585
585
  iconOnly: true,
586
586
  icon: pinned ? "ph--x--regular" : "ph--arrows-out--regular",
587
587
  size: pinned ? 5 : 4,
@@ -886,7 +886,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
886
886
  attendableId: (0, import_echo.fullyQualifiedId)(channel),
887
887
  role,
888
888
  onJoinCall: handleJoin
889
- }), /* @__PURE__ */ import_react.default.createElement(import_chunk_4B3PPXA6.ChatContainer_default, {
889
+ }), /* @__PURE__ */ import_react.default.createElement(import_chunk_E3WBZTTI.ChatContainer_default, {
890
890
  space,
891
891
  thread: channel.defaultThread.target
892
892
  })));
@@ -928,40 +928,38 @@ var DisplayNameMissing = () => {
928
928
  };
929
929
  var useChannelToolbarActions = (onJoinCall) => {
930
930
  const creator = (0, import_react.useMemo)(() => import_rx_react.Rx.make(() => {
931
- const nodes = [];
932
- const edges = [];
933
- const rootGroup = (0, import_react_ui_menu.createMenuItemGroup)("root", {
934
- label: [
935
- "channel toolbar title",
931
+ return {
932
+ nodes: [
933
+ (0, import_react_ui_menu.createMenuItemGroup)("root", {
934
+ label: [
935
+ "channel toolbar title",
936
+ {
937
+ ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
938
+ }
939
+ ]
940
+ }),
941
+ (0, import_react_ui_menu.createMenuAction)("video-call", () => onJoinCall?.(), {
942
+ label: [
943
+ "start video call label",
944
+ {
945
+ ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
946
+ }
947
+ ],
948
+ icon: "ph--video-camera--regular",
949
+ type: "video-call"
950
+ })
951
+ ],
952
+ edges: [
936
953
  {
937
- ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
954
+ source: "root",
955
+ target: "video-call"
938
956
  }
939
957
  ]
940
- });
941
- nodes.push(rootGroup);
942
- const sortAction = (0, import_react_ui_menu.createMenuAction)("video-call", () => onJoinCall?.(), {
943
- label: [
944
- "start video call label",
945
- {
946
- ns: import_chunk_HLMCEE5K.THREAD_PLUGIN
947
- }
948
- ],
949
- icon: "ph--video-camera--regular",
950
- type: "video-call"
951
- });
952
- nodes.push(sortAction);
953
- edges.push({
954
- source: "root",
955
- target: sortAction.id
956
- });
957
- return {
958
- nodes,
959
- edges
960
958
  };
961
959
  }), []);
962
960
  return (0, import_react_ui_menu.useMenuActions)(creator);
963
961
  };
964
- var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
962
+ var ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }) => {
965
963
  var _effect = (0, import_tracking.useSignals)();
966
964
  try {
967
965
  const menuProps = useChannelToolbarActions(onJoinCall);
@@ -970,7 +968,9 @@ var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
970
968
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.MenuProvider, {
971
969
  ...menuProps,
972
970
  attendableId
973
- }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, null)));
971
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, {
972
+ classNames
973
+ })));
974
974
  } finally {
975
975
  _effect.f();
976
976
  }
@@ -981,4 +981,4 @@ var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
981
981
  ChannelContainer,
982
982
  ChannelContainer_default
983
983
  });
984
- //# sourceMappingURL=chunk-6B3M6XRE.cjs.map
984
+ //# sourceMappingURL=chunk-UM36TPCT.cjs.map