@dxos/plugin-thread 0.8.3-main.7f5a14c → 0.8.3

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 (120) hide show
  1. package/dist/lib/browser/{ChannelContainer-KWXUKR5Q.mjs → ChannelContainer-PKFBVENP.mjs} +3 -3
  2. package/dist/lib/browser/{app-graph-builder-CBWNZCXB.mjs → app-graph-builder-OY7R7EJP.mjs} +2 -2
  3. package/dist/lib/browser/chunk-6NBVNXTM.mjs +21 -0
  4. package/dist/lib/browser/{chunk-WDOQXTI2.mjs → chunk-AEXWNS6Z.mjs} +5 -3
  5. package/dist/lib/browser/chunk-AEXWNS6Z.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-3EYX6CV7.mjs → chunk-PG5CTFKK.mjs} +47 -43
  7. package/dist/lib/browser/chunk-PG5CTFKK.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-5IRYNA5K.mjs → chunk-XZKBN3NS.mjs} +30 -30
  9. package/dist/lib/browser/chunk-XZKBN3NS.mjs.map +7 -0
  10. package/dist/lib/browser/index.mjs +33 -7
  11. package/dist/lib/browser/index.mjs.map +3 -3
  12. package/dist/lib/browser/{intent-resolver-I37YU7K3.mjs → intent-resolver-FK2MDVDT.mjs} +19 -22
  13. package/dist/lib/browser/intent-resolver-FK2MDVDT.mjs.map +7 -0
  14. package/dist/lib/browser/{markdown-LS3XO2KB.mjs → markdown-TE5SWWNJ.mjs} +7 -8
  15. package/dist/lib/browser/markdown-TE5SWWNJ.mjs.map +7 -0
  16. package/dist/lib/browser/meta.json +1 -1
  17. package/dist/lib/browser/{react-root-KNCKPHGS.mjs → react-root-NK3A4VG7.mjs} +5 -5
  18. package/dist/lib/browser/{react-surface-ASWIBD7H.mjs → react-surface-VXUJKSOG.mjs} +5 -5
  19. package/dist/lib/browser/{settings-ZUY7OX24.mjs → settings-RB2RSLXV.mjs} +2 -2
  20. package/dist/lib/browser/types/index.mjs +1 -1
  21. package/dist/lib/node/{ChannelContainer-MA5CFESJ.cjs → ChannelContainer-YS5YT2ML.cjs} +8 -8
  22. package/dist/lib/node/{ChannelContainer-MA5CFESJ.cjs.map → ChannelContainer-YS5YT2ML.cjs.map} +2 -2
  23. package/dist/lib/node/{app-graph-builder-K5OAVYI6.cjs → app-graph-builder-PBHJNDQY.cjs} +9 -9
  24. package/dist/lib/node/{chunk-3YYSLZE4.cjs → chunk-ERG7G6FF.cjs} +10 -10
  25. package/dist/lib/node/{chunk-WCQKISL5.cjs → chunk-IP533AMV.cjs} +64 -60
  26. package/dist/lib/node/chunk-IP533AMV.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-U4SZUERU.cjs → chunk-UM36TPCT.cjs} +33 -33
  28. package/dist/lib/node/chunk-UM36TPCT.cjs.map +7 -0
  29. package/dist/lib/node/{chunk-TKHJVC2C.cjs → chunk-ZGDN3XBR.cjs} +8 -6
  30. package/dist/lib/node/chunk-ZGDN3XBR.cjs.map +7 -0
  31. package/dist/lib/node/index.cjs +42 -16
  32. package/dist/lib/node/index.cjs.map +3 -3
  33. package/dist/lib/node/{intent-resolver-2TX6HSOL.cjs → intent-resolver-SYSJ5SJG.cjs} +36 -39
  34. package/dist/lib/node/intent-resolver-SYSJ5SJG.cjs.map +7 -0
  35. package/dist/lib/node/{markdown-GNFW2XDO.cjs → markdown-GQIPJS2F.cjs} +13 -14
  36. package/dist/lib/node/markdown-GQIPJS2F.cjs.map +7 -0
  37. package/dist/lib/node/meta.json +1 -1
  38. package/dist/lib/node/{react-root-BKOXG5AC.cjs → react-root-6HHDMULJ.cjs} +9 -9
  39. package/dist/lib/node/{react-surface-Q5DWX3UO.cjs → react-surface-NBH42NN2.cjs} +18 -18
  40. package/dist/lib/node/{settings-5O5V2NOE.cjs → settings-4LQSFEDK.cjs} +6 -6
  41. package/dist/lib/node/types/index.cjs +6 -6
  42. package/dist/lib/node/types/index.cjs.map +1 -1
  43. package/dist/lib/node-esm/{ChannelContainer-VGVEAUAQ.mjs → ChannelContainer-O4QJII2P.mjs} +3 -3
  44. package/dist/lib/node-esm/{app-graph-builder-UWJQE534.mjs → app-graph-builder-BAHBHYWI.mjs} +2 -2
  45. package/dist/lib/node-esm/{chunk-KP2JBSWF.mjs → chunk-2RNIPFDA.mjs} +30 -30
  46. package/dist/lib/node-esm/chunk-2RNIPFDA.mjs.map +7 -0
  47. package/dist/lib/node-esm/{chunk-EHDXOE5R.mjs → chunk-O63QJPQX.mjs} +7 -7
  48. package/dist/lib/node-esm/{chunk-J323VQ4P.mjs → chunk-UJMPYKT3.mjs} +5 -3
  49. package/dist/lib/node-esm/chunk-UJMPYKT3.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-6EGLDARC.mjs → chunk-UZWVVFT3.mjs} +47 -43
  51. package/dist/lib/node-esm/chunk-UZWVVFT3.mjs.map +7 -0
  52. package/dist/lib/node-esm/index.mjs +33 -7
  53. package/dist/lib/node-esm/index.mjs.map +3 -3
  54. package/dist/lib/node-esm/{intent-resolver-FHRK77IS.mjs → intent-resolver-BU73VYW3.mjs} +19 -22
  55. package/dist/lib/node-esm/intent-resolver-BU73VYW3.mjs.map +7 -0
  56. package/dist/lib/node-esm/{markdown-HBGB3UPJ.mjs → markdown-HJUWNBLS.mjs} +7 -8
  57. package/dist/lib/node-esm/markdown-HJUWNBLS.mjs.map +7 -0
  58. package/dist/lib/node-esm/meta.json +1 -1
  59. package/dist/lib/node-esm/{react-root-UPDDCRBV.mjs → react-root-RUXOAQNW.mjs} +5 -5
  60. package/dist/lib/node-esm/{react-surface-LU3CZDC4.mjs → react-surface-ELXFYKP6.mjs} +5 -5
  61. package/dist/lib/node-esm/{settings-KFEFSAYG.mjs → settings-EA7DFSM6.mjs} +2 -2
  62. package/dist/lib/node-esm/types/index.mjs +1 -1
  63. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  65. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  66. package/dist/types/src/components/CommentsContainer.d.ts +1 -1
  67. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  68. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  69. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  70. package/dist/types/src/translations.d.ts +128 -2
  71. package/dist/types/src/translations.d.ts.map +1 -1
  72. package/dist/types/src/types/schema.d.ts +117 -301
  73. package/dist/types/src/types/schema.d.ts.map +1 -1
  74. package/dist/types/src/types/types.d.ts +153 -828
  75. package/dist/types/src/types/types.d.ts.map +1 -1
  76. package/package.json +42 -42
  77. package/src/ThreadPlugin.tsx +26 -3
  78. package/src/capabilities/intent-resolver.ts +17 -18
  79. package/src/components/Call/Toolbar.tsx +1 -1
  80. package/src/components/ChannelContainer.tsx +18 -22
  81. package/src/components/CommentContainer.tsx +2 -2
  82. package/src/components/Comments.stories.tsx +12 -3
  83. package/src/components/CommentsContainer.tsx +21 -24
  84. package/src/components/ThreadComplementary.tsx +15 -16
  85. package/src/extensions/threads.ts +5 -6
  86. package/src/translations.ts +7 -2
  87. package/src/types/schema.ts +8 -4
  88. package/dist/lib/browser/chunk-3EYX6CV7.mjs.map +0 -7
  89. package/dist/lib/browser/chunk-5IRYNA5K.mjs.map +0 -7
  90. package/dist/lib/browser/chunk-FWBJHKRW.mjs +0 -21
  91. package/dist/lib/browser/chunk-WDOQXTI2.mjs.map +0 -7
  92. package/dist/lib/browser/intent-resolver-I37YU7K3.mjs.map +0 -7
  93. package/dist/lib/browser/markdown-LS3XO2KB.mjs.map +0 -7
  94. package/dist/lib/node/chunk-TKHJVC2C.cjs.map +0 -7
  95. package/dist/lib/node/chunk-U4SZUERU.cjs.map +0 -7
  96. package/dist/lib/node/chunk-WCQKISL5.cjs.map +0 -7
  97. package/dist/lib/node/intent-resolver-2TX6HSOL.cjs.map +0 -7
  98. package/dist/lib/node/markdown-GNFW2XDO.cjs.map +0 -7
  99. package/dist/lib/node-esm/chunk-6EGLDARC.mjs.map +0 -7
  100. package/dist/lib/node-esm/chunk-J323VQ4P.mjs.map +0 -7
  101. package/dist/lib/node-esm/chunk-KP2JBSWF.mjs.map +0 -7
  102. package/dist/lib/node-esm/intent-resolver-FHRK77IS.mjs.map +0 -7
  103. package/dist/lib/node-esm/markdown-HBGB3UPJ.mjs.map +0 -7
  104. /package/dist/lib/browser/{ChannelContainer-KWXUKR5Q.mjs.map → ChannelContainer-PKFBVENP.mjs.map} +0 -0
  105. /package/dist/lib/browser/{app-graph-builder-CBWNZCXB.mjs.map → app-graph-builder-OY7R7EJP.mjs.map} +0 -0
  106. /package/dist/lib/browser/{chunk-FWBJHKRW.mjs.map → chunk-6NBVNXTM.mjs.map} +0 -0
  107. /package/dist/lib/browser/{react-root-KNCKPHGS.mjs.map → react-root-NK3A4VG7.mjs.map} +0 -0
  108. /package/dist/lib/browser/{react-surface-ASWIBD7H.mjs.map → react-surface-VXUJKSOG.mjs.map} +0 -0
  109. /package/dist/lib/browser/{settings-ZUY7OX24.mjs.map → settings-RB2RSLXV.mjs.map} +0 -0
  110. /package/dist/lib/node/{app-graph-builder-K5OAVYI6.cjs.map → app-graph-builder-PBHJNDQY.cjs.map} +0 -0
  111. /package/dist/lib/node/{chunk-3YYSLZE4.cjs.map → chunk-ERG7G6FF.cjs.map} +0 -0
  112. /package/dist/lib/node/{react-root-BKOXG5AC.cjs.map → react-root-6HHDMULJ.cjs.map} +0 -0
  113. /package/dist/lib/node/{react-surface-Q5DWX3UO.cjs.map → react-surface-NBH42NN2.cjs.map} +0 -0
  114. /package/dist/lib/node/{settings-5O5V2NOE.cjs.map → settings-4LQSFEDK.cjs.map} +0 -0
  115. /package/dist/lib/node-esm/{ChannelContainer-VGVEAUAQ.mjs.map → ChannelContainer-O4QJII2P.mjs.map} +0 -0
  116. /package/dist/lib/node-esm/{app-graph-builder-UWJQE534.mjs.map → app-graph-builder-BAHBHYWI.mjs.map} +0 -0
  117. /package/dist/lib/node-esm/{chunk-EHDXOE5R.mjs.map → chunk-O63QJPQX.mjs.map} +0 -0
  118. /package/dist/lib/node-esm/{react-root-UPDDCRBV.mjs.map → react-root-RUXOAQNW.mjs.map} +0 -0
  119. /package/dist/lib/node-esm/{react-surface-LU3CZDC4.mjs.map → react-surface-ELXFYKP6.mjs.map} +0 -0
  120. /package/dist/lib/node-esm/{settings-KFEFSAYG.mjs.map → settings-EA7DFSM6.mjs.map} +0 -0
@@ -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 react_root_BKOXG5AC_exports = {};
30
- __export(react_root_BKOXG5AC_exports, {
29
+ var react_root_6HHDMULJ_exports = {};
30
+ __export(react_root_6HHDMULJ_exports, {
31
31
  default: () => react_root_default
32
32
  });
33
- module.exports = __toCommonJS(react_root_BKOXG5AC_exports);
34
- var import_chunk_WCQKISL5 = require("./chunk-WCQKISL5.cjs");
35
- var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
36
- var import_chunk_U4SZUERU = require("./chunk-U4SZUERU.cjs");
37
- var import_chunk_3YYSLZE4 = require("./chunk-3YYSLZE4.cjs");
33
+ module.exports = __toCommonJS(react_root_6HHDMULJ_exports);
34
+ var import_chunk_IP533AMV = require("./chunk-IP533AMV.cjs");
35
+ var import_chunk_ZGDN3XBR = require("./chunk-ZGDN3XBR.cjs");
36
+ var import_chunk_UM36TPCT = require("./chunk-UM36TPCT.cjs");
37
+ var import_chunk_ERG7G6FF = require("./chunk-ERG7G6FF.cjs");
38
38
  var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
39
39
  var import_chunk_E3WBZTTI = require("./chunk-E3WBZTTI.cjs");
40
40
  var import_chunk_FUXJAVFZ = require("./chunk-FUXJAVFZ.cjs");
@@ -45,7 +45,7 @@ var import_app_framework = require("@dxos/app-framework");
45
45
  var react_root_default = () => {
46
46
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactRoot, {
47
47
  id: import_chunk_HLMCEE5K.THREAD_PLUGIN,
48
- root: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_U4SZUERU.Call.Audio, null)
48
+ root: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_UM36TPCT.Call.Audio, null)
49
49
  });
50
50
  };
51
- //# sourceMappingURL=react-root-BKOXG5AC.cjs.map
51
+ //# sourceMappingURL=react-root-6HHDMULJ.cjs.map
@@ -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 react_surface_Q5DWX3UO_exports = {};
30
- __export(react_surface_Q5DWX3UO_exports, {
29
+ var react_surface_NBH42NN2_exports = {};
30
+ __export(react_surface_NBH42NN2_exports, {
31
31
  default: () => react_surface_default
32
32
  });
33
- module.exports = __toCommonJS(react_surface_Q5DWX3UO_exports);
34
- var import_chunk_WCQKISL5 = require("./chunk-WCQKISL5.cjs");
35
- var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
36
- var import_chunk_U4SZUERU = require("./chunk-U4SZUERU.cjs");
37
- var import_chunk_3YYSLZE4 = require("./chunk-3YYSLZE4.cjs");
33
+ module.exports = __toCommonJS(react_surface_NBH42NN2_exports);
34
+ var import_chunk_IP533AMV = require("./chunk-IP533AMV.cjs");
35
+ var import_chunk_ZGDN3XBR = require("./chunk-ZGDN3XBR.cjs");
36
+ var import_chunk_UM36TPCT = require("./chunk-UM36TPCT.cjs");
37
+ var import_chunk_ERG7G6FF = require("./chunk-ERG7G6FF.cjs");
38
38
  var import_chunk_4YSNVPWU = require("./chunk-4YSNVPWU.cjs");
39
39
  var import_chunk_E3WBZTTI = require("./chunk-E3WBZTTI.cjs");
40
40
  var import_chunk_FUXJAVFZ = require("./chunk-FUXJAVFZ.cjs");
@@ -49,8 +49,8 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
49
49
  (0, import_app_framework.createSurface)({
50
50
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/channel`,
51
51
  role: "article",
52
- filter: (data) => import_echo.Obj.instanceOf(import_chunk_TKHJVC2C.ChannelType, data.subject),
53
- component: ({ data: { subject: channel }, role }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.ChannelContainer, {
52
+ filter: (data) => import_echo.Obj.instanceOf(import_chunk_ZGDN3XBR.ChannelType, data.subject),
53
+ component: ({ data: { subject: channel }, role }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.ChannelContainer, {
54
54
  channel,
55
55
  role
56
56
  })
@@ -58,14 +58,14 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
58
58
  (0, import_app_framework.createSurface)({
59
59
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/chat-companion`,
60
60
  role: "article",
61
- filter: (data) => import_echo.Obj.instanceOf(import_chunk_TKHJVC2C.ChannelType, data.companionTo) && data.subject === "chat",
61
+ filter: (data) => import_echo.Obj.instanceOf(import_chunk_ZGDN3XBR.ChannelType, data.companionTo) && data.subject === "chat",
62
62
  component: ({ data: { companionTo: channel } }) => {
63
63
  const space = (0, import_echo2.getSpace)(channel);
64
64
  const thread = channel.defaultThread.target;
65
65
  if (!space || !thread) {
66
66
  return null;
67
67
  }
68
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.ChatContainer, {
68
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.ChatContainer, {
69
69
  thread,
70
70
  space
71
71
  });
@@ -74,13 +74,13 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
74
74
  (0, import_app_framework.createSurface)({
75
75
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/thread`,
76
76
  role: "article",
77
- filter: (data) => import_echo.Obj.instanceOf(import_chunk_TKHJVC2C.ThreadType, data.subject),
77
+ filter: (data) => import_echo.Obj.instanceOf(import_chunk_ZGDN3XBR.ThreadType, data.subject),
78
78
  component: ({ data: { subject: thread } }) => {
79
79
  const space = (0, import_echo2.getSpace)(thread);
80
80
  if (!space || !thread) {
81
81
  return null;
82
82
  }
83
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.ChatContainer, {
83
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.ChatContainer, {
84
84
  thread,
85
85
  space
86
86
  });
@@ -91,7 +91,7 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
91
91
  role: "article",
92
92
  filter: (data) => data.subject === "comments" && import_echo.Obj.isObject(data.companionTo),
93
93
  // TODO(wittjosiah): This isn't scrolling properly in a plank.
94
- component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.ThreadComplementary, {
94
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.ThreadComplementary, {
95
95
  subject: data.companionTo
96
96
  })
97
97
  }),
@@ -99,24 +99,24 @@ var react_surface_default = () => (0, import_app_framework.contributes)(import_a
99
99
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/plugin-settings`,
100
100
  role: "article",
101
101
  filter: (data) => data.subject instanceof import_local_storage.SettingsStore && data.subject.prefix === import_chunk_HLMCEE5K.THREAD_PLUGIN,
102
- component: ({ data: { subject } }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.ThreadSettings, {
102
+ component: ({ data: { subject } }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.ThreadSettings, {
103
103
  settings: subject.value
104
104
  })
105
105
  }),
106
106
  (0, import_app_framework.createSurface)({
107
107
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/assistant`,
108
108
  role: "deck-companion--active-call",
109
- component: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.CallSidebar, null)
109
+ component: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.CallSidebar, null)
110
110
  }),
111
111
  (0, import_app_framework.createSurface)({
112
112
  id: `${import_chunk_HLMCEE5K.THREAD_PLUGIN}/devtools-overview`,
113
113
  role: "devtools-overview",
114
114
  component: () => {
115
115
  const call = (0, import_app_framework.useCapability)(import_chunk_4YSNVPWU.ThreadCapabilities.CallManager);
116
- return /* @__PURE__ */ import_react.default.createElement(import_chunk_WCQKISL5.CallDebugPanel, {
116
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_IP533AMV.CallDebugPanel, {
117
117
  state: call.state
118
118
  });
119
119
  }
120
120
  })
121
121
  ]);
122
- //# sourceMappingURL=react-surface-Q5DWX3UO.cjs.map
122
+ //# sourceMappingURL=react-surface-NBH42NN2.cjs.map
@@ -16,12 +16,12 @@ 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_5O5V2NOE_exports = {};
20
- __export(settings_5O5V2NOE_exports, {
19
+ var settings_4LQSFEDK_exports = {};
20
+ __export(settings_4LQSFEDK_exports, {
21
21
  default: () => settings_default
22
22
  });
23
- module.exports = __toCommonJS(settings_5O5V2NOE_exports);
24
- var import_chunk_TKHJVC2C = require("./chunk-TKHJVC2C.cjs");
23
+ module.exports = __toCommonJS(settings_4LQSFEDK_exports);
24
+ var import_chunk_ZGDN3XBR = require("./chunk-ZGDN3XBR.cjs");
25
25
  var import_chunk_HLMCEE5K = require("./chunk-HLMCEE5K.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_live_object = require("@dxos/live-object");
@@ -29,8 +29,8 @@ var settings_default = () => {
29
29
  const settings = (0, import_live_object.live)({});
30
30
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Settings, {
31
31
  prefix: import_chunk_HLMCEE5K.meta.id,
32
- schema: import_chunk_TKHJVC2C.ThreadSettingsSchema,
32
+ schema: import_chunk_ZGDN3XBR.ThreadSettingsSchema,
33
33
  value: settings
34
34
  });
35
35
  };
36
- //# sourceMappingURL=settings-5O5V2NOE.cjs.map
36
+ //# sourceMappingURL=settings-4LQSFEDK.cjs.map
@@ -18,14 +18,14 @@ 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
- ChannelType: () => import_chunk_TKHJVC2C.ChannelType,
22
- ThreadAction: () => import_chunk_TKHJVC2C.ThreadAction,
23
- ThreadSettingsSchema: () => import_chunk_TKHJVC2C.ThreadSettingsSchema,
24
- ThreadStatus: () => import_chunk_TKHJVC2C.ThreadStatus,
25
- ThreadType: () => import_chunk_TKHJVC2C.ThreadType
21
+ ChannelType: () => import_chunk_ZGDN3XBR.ChannelType,
22
+ ThreadAction: () => import_chunk_ZGDN3XBR.ThreadAction,
23
+ ThreadSettingsSchema: () => import_chunk_ZGDN3XBR.ThreadSettingsSchema,
24
+ ThreadStatus: () => import_chunk_ZGDN3XBR.ThreadStatus,
25
+ ThreadType: () => import_chunk_ZGDN3XBR.ThreadType
26
26
  });
27
27
  module.exports = __toCommonJS(types_exports);
28
- var import_chunk_TKHJVC2C = require("../chunk-TKHJVC2C.cjs");
28
+ var import_chunk_ZGDN3XBR = require("../chunk-ZGDN3XBR.cjs");
29
29
  var import_chunk_HLMCEE5K = require("../chunk-HLMCEE5K.cjs");
30
30
  // Annotate the CommonJS export names for ESM import in node:
31
31
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.cjs"],
4
- "sourcesContent": ["import {\n ChannelType,\n ThreadAction,\n ThreadSettingsSchema,\n ThreadStatus,\n ThreadType\n} from \"../chunk-TKHJVC2C.cjs\";\nimport \"../chunk-HLMCEE5K.cjs\";\nexport {\n ChannelType,\n ThreadAction,\n ThreadSettingsSchema,\n ThreadStatus,\n ThreadType\n};\n//# sourceMappingURL=index.cjs.map\n"],
4
+ "sourcesContent": ["import {\n ChannelType,\n ThreadAction,\n ThreadSettingsSchema,\n ThreadStatus,\n ThreadType\n} from \"../chunk-ZGDN3XBR.cjs\";\nimport \"../chunk-HLMCEE5K.cjs\";\nexport {\n ChannelType,\n ThreadAction,\n ThreadSettingsSchema,\n ThreadStatus,\n ThreadType\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAMO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -2,8 +2,8 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  ChannelContainer,
4
4
  ChannelContainer_default
5
- } from "./chunk-KP2JBSWF.mjs";
6
- import "./chunk-EHDXOE5R.mjs";
5
+ } from "./chunk-2RNIPFDA.mjs";
6
+ import "./chunk-O63QJPQX.mjs";
7
7
  import "./chunk-K4KAUOKT.mjs";
8
8
  import "./chunk-P6RLFCNT.mjs";
9
9
  import "./chunk-O3V45YJP.mjs";
@@ -13,4 +13,4 @@ export {
13
13
  ChannelContainer,
14
14
  ChannelContainer_default as default
15
15
  };
16
- //# sourceMappingURL=ChannelContainer-VGVEAUAQ.mjs.map
16
+ //# sourceMappingURL=ChannelContainer-O4QJII2P.mjs.map
@@ -2,7 +2,7 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
  import {
3
3
  ChannelType,
4
4
  ThreadAction
5
- } from "./chunk-J323VQ4P.mjs";
5
+ } from "./chunk-UJMPYKT3.mjs";
6
6
  import {
7
7
  ThreadCapabilities
8
8
  } from "./chunk-K4KAUOKT.mjs";
@@ -169,4 +169,4 @@ var app_graph_builder_default = (context) => {
169
169
  export {
170
170
  app_graph_builder_default as default
171
171
  };
172
- //# sourceMappingURL=app-graph-builder-UWJQE534.mjs.map
172
+ //# sourceMappingURL=app-graph-builder-BAHBHYWI.mjs.map
@@ -55,7 +55,7 @@ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJ
55
55
  className: mx("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition)
56
56
  }, /* @__PURE__ */ React.createElement(NativeToolbar.Root, {
57
57
  classNames: [
58
- "p-2 bg-modalSurface rounded-lg shadow-lg",
58
+ "p-2 bg-modalSurface rounded-md shadow-md",
59
59
  classNames
60
60
  ]
61
61
  }, /* @__PURE__ */ React.createElement(ToggleButton, {
@@ -928,40 +928,38 @@ var DisplayNameMissing = () => {
928
928
  };
929
929
  var useChannelToolbarActions = (onJoinCall) => {
930
930
  const creator = useMemo4(() => Rx.make(() => {
931
- const nodes = [];
932
- const edges = [];
933
- const rootGroup = createMenuItemGroup("root", {
934
- label: [
935
- "channel toolbar title",
931
+ return {
932
+ nodes: [
933
+ createMenuItemGroup("root", {
934
+ label: [
935
+ "channel toolbar title",
936
+ {
937
+ ns: THREAD_PLUGIN
938
+ }
939
+ ]
940
+ }),
941
+ createMenuAction("video-call", () => onJoinCall?.(), {
942
+ label: [
943
+ "start video call label",
944
+ {
945
+ ns: THREAD_PLUGIN
946
+ }
947
+ ],
948
+ icon: "ph--video-camera--regular",
949
+ type: "video-call"
950
+ })
951
+ ],
952
+ edges: [
936
953
  {
937
- ns: THREAD_PLUGIN
954
+ source: "root",
955
+ target: "video-call"
938
956
  }
939
957
  ]
940
- });
941
- nodes.push(rootGroup);
942
- const sortAction = createMenuAction("video-call", () => onJoinCall?.(), {
943
- label: [
944
- "start video call label",
945
- {
946
- ns: 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 useMenuActions(creator);
963
961
  };
964
- var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
962
+ var ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }) => {
965
963
  var _effect = _useSignals10();
966
964
  try {
967
965
  const menuProps = useChannelToolbarActions(onJoinCall);
@@ -970,7 +968,9 @@ var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
970
968
  }, /* @__PURE__ */ React10.createElement(MenuProvider, {
971
969
  ...menuProps,
972
970
  attendableId
973
- }, /* @__PURE__ */ React10.createElement(ToolbarMenu, null)));
971
+ }, /* @__PURE__ */ React10.createElement(ToolbarMenu, {
972
+ classNames
973
+ })));
974
974
  } finally {
975
975
  _effect.f();
976
976
  }
@@ -981,4 +981,4 @@ export {
981
981
  ChannelContainer,
982
982
  ChannelContainer_default
983
983
  };
984
- //# sourceMappingURL=chunk-KP2JBSWF.mjs.map
984
+ //# sourceMappingURL=chunk-2RNIPFDA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChannelContainer.tsx", "../../../src/components/Call/Call.tsx", "../../../src/components/Call/Toolbar.tsx", "../../../src/components/Media/AudioStream.tsx", "../../../src/components/Media/VideoObject.tsx", "../../../src/components/Participant/Participant.tsx", "../../../src/components/ResponsiveGrid/ResponsiveContainer.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGrid.tsx", "../../../src/components/ResponsiveGrid/ResponsiveGridItem.tsx", "../../../src/components/Participant/ParticipantGrid.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport React, { useCallback, useEffect, useMemo, useState, type ChangeEvent } from 'react';\n\nimport { useCapabilities, useCapability } from '@dxos/app-framework';\nimport { Context } from '@dxos/context';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { fullyQualifiedId, getSpace } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useTranslation, Input, ElevationProvider, type ThemedClassName } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlGroupButton } from '@dxos/react-ui-form';\nimport { ToolbarMenu, MenuProvider, createMenuAction, useMenuActions, createMenuItemGroup } from '@dxos/react-ui-menu';\nimport { useSoundEffect } from '@dxos/react-ui-sfx';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { Call } from './Call';\nimport ChatContainer from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ChannelType } from '../types';\n\nexport type ChannelContainerProps = {\n channel?: ChannelType;\n roomId?: string;\n role?: string;\n fullscreen?: boolean;\n};\n\n/**\n * Renders a call when active, otherwise renders the channel chat.\n */\nexport const ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }: ChannelContainerProps) => {\n const space = getSpace(channel);\n const callManager = useCapability(ThreadCapabilities.CallManager);\n const roomId = channel ? fullyQualifiedId(channel) : _roomId;\n const identity = useIdentity();\n const isNamed = !!identity?.profile?.displayName;\n const joinSound = useSoundEffect('JoinCall');\n const leaveSound = useSoundEffect('LeaveCall');\n\n const extensions = useCapabilities(ThreadCapabilities.CallExtension);\n useEffect(() => {\n const ctx = new Context();\n callManager.left.on(ctx, (roomId) => {\n extensions.forEach((extension) => {\n void extension.onLeave?.(roomId);\n });\n });\n\n callManager.callStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onCallStateUpdated?.(state);\n });\n });\n\n callManager.mediaStateUpdated.on(ctx, (state) => {\n extensions.forEach((extension) => {\n void extension.onMediaStateUpdated?.(state);\n });\n });\n\n return () => {\n void ctx.dispose();\n };\n }, [callManager, extensions]);\n\n /**\n * Join the call.\n */\n // TODO(wittjosiah): Show preview before joining?\n const handleJoin = useCallback(async () => {\n if (!roomId || !channel) {\n return;\n }\n\n if (callManager.joined) {\n await callManager.leave();\n }\n\n try {\n void joinSound.play();\n callManager.setRoomId(roomId);\n await callManager.join();\n await Promise.all(extensions.map((extension) => extension.onJoin?.({ channel, roomId })));\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n }\n }, [extensions, channel, roomId]);\n\n /**\n * Leave the call.\n */\n const handleLeave = useCallback(async () => {\n try {\n void leaveSound.play();\n } catch (err) {\n // TODO(burdon): Error sound.\n log.catch(err);\n } finally {\n void callManager.turnAudioOff();\n void callManager.turnVideoOff();\n void callManager.turnScreenshareOff();\n void callManager.leave();\n }\n }, [extensions, roomId]);\n\n const isJoined = callManager.joined && callManager.roomId === roomId;\n\n return (\n <StackItem.Content toolbar={!isJoined} classNames={isJoined && 'h-full'}>\n {isJoined && !isNamed && <DisplayNameMissing />}\n {isJoined && isNamed && (\n <Call.Root>\n <Call.Grid fullscreen={fullscreen} />\n <Call.Toolbar channel={channel} onLeave={handleLeave} />\n </Call.Root>\n )}\n {!isJoined && channel && channel.defaultThread.target && space && (\n <>\n <ChannelToolbar attendableId={fullyQualifiedId(channel)} role={role} onJoinCall={handleJoin} />\n <ChatContainer space={space} thread={channel.defaultThread.target} />\n </>\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n\nconst DisplayNameMissing = () => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const client = useClient();\n const [displayName, setDisplayName] = useState('');\n const handleChange = useCallback((event: ChangeEvent<HTMLInputElement>) => setDisplayName(event.target.value), []);\n const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);\n\n return (\n <ControlGroup classNames='p-4 place-content-center'>\n <ControlItemInput title={t('display name label')} description={t('display name description')}>\n <Input.TextInput\n value={displayName}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='md:min-is-64'\n />\n </ControlItemInput>\n <ControlGroupButton disabled={!displayName} onClick={handleSave}>\n {t('set display name label')}\n </ControlGroupButton>\n </ControlGroup>\n );\n};\n\nconst useChannelToolbarActions = (onJoinCall?: () => void) => {\n const creator = useMemo(\n () =>\n Rx.make(() => {\n return {\n nodes: [\n createMenuItemGroup('root', {\n label: ['channel toolbar title', { ns: THREAD_PLUGIN }],\n }),\n createMenuAction('video-call', () => onJoinCall?.(), {\n label: ['start video call label', { ns: THREAD_PLUGIN }],\n icon: 'ph--video-camera--regular',\n type: 'video-call',\n }),\n ],\n edges: [{ source: 'root', target: 'video-call' }],\n };\n }),\n [],\n );\n\n return useMenuActions(creator);\n};\n\ntype ChannelToolbarProps = ThemedClassName<{\n attendableId?: string;\n role?: string;\n onJoinCall?: () => void;\n}>;\n\nconst ChannelToolbar = ({ attendableId, role, onJoinCall, classNames }: ChannelToolbarProps) => {\n const menuProps = useChannelToolbarActions(onJoinCall);\n\n return (\n <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>\n <MenuProvider {...menuProps} attendableId={attendableId}>\n <ToolbarMenu classNames={classNames} />\n </MenuProvider>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, type FC } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Toolbar, type ToolbarProps } from './Toolbar';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { useDebugMode } from '../../hooks';\nimport { AudioStream } from '../Media';\nimport { ParticipantGrid } from '../Participant';\n\n//\n// Root\n//\n\ntype CallRootProps = PropsWithChildren<ThemedClassName>;\n\nconst CallRoot: FC<CallRootProps> = ({ children }) => {\n return <div className='relative flex flex-col grow overflow-hidden'>{children}</div>;\n};\n\nCallRoot.displayName = 'CallRoot';\n\n//\n// Audio\n//\n\ntype CallAudioProps = {};\n\nconst CallAudio: FC<CallAudioProps> = () => {\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return <AudioStream tracks={call.pulledAudioTracks} />;\n};\n\nCallAudio.displayName = 'CallAudio';\n\n//\n// Room\n//\n\ntype CallGridProps = {\n fullscreen?: boolean;\n};\n\nconst CallGrid: FC<CallGridProps> = ({ fullscreen }) => {\n const debug = useDebugMode();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n return (\n <div className='grid grow p-4 dark:bg-neutral-900'>\n <ParticipantGrid self={call.self} users={call.users} debug={debug} fullscreen={fullscreen} />\n </div>\n );\n};\n\nCallGrid.displayName = 'CallGrid';\n\n//\n// Toolbar\n//\n\ntype CallToolbarProps = Pick<ToolbarProps, 'channel' | 'onLeave'>;\n\nconst CallToolbar: FC<CallToolbarProps> = (props) => {\n return (\n <div className='absolute bottom-0 left-0 right-0 flex justify-center'>\n <Toolbar isInRoom {...props} />\n </div>\n );\n};\n\nCallToolbar.displayName = 'CallToolbar';\n\n//\n// Export\n//\n\nexport const Call = {\n Root: CallRoot,\n Grid: CallGrid,\n Audio: CallAudio,\n Toolbar: CallToolbar,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useAppGraph, useCapability } from '@dxos/app-framework';\nimport { useNode, useActions } from '@dxos/plugin-graph';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport {\n Icon,\n IconButton,\n type IconButtonProps,\n type ThemedClassName,\n Toolbar as NativeToolbar,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { ThreadCapabilities } from '../../capabilities';\nimport { THREAD_PLUGIN } from '../../meta';\nimport { type ChannelType } from '../../types';\n\nexport type ToolbarProps = ThemedClassName<{\n channel?: ChannelType;\n participants?: number;\n autoHideControls?: boolean;\n isInRoom?: boolean;\n onJoin?: () => void;\n onLeave?: () => void;\n}>;\n\n// TODO(wittjosiah): Use ToolbarMenu.\nexport const Toolbar = ({\n classNames,\n channel,\n participants,\n autoHideControls = true,\n onJoin,\n onLeave,\n}: ToolbarProps) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const { graph } = useAppGraph();\n const call = useCapability(ThreadCapabilities.CallManager);\n\n // Channel app graph node.\n const node = useNode(graph, channel && fullyQualifiedId(channel));\n const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === 'toolbar');\n\n // Screen sharing.\n const isScreensharing = call.media.screenshareTrack !== undefined;\n const canSharescreen =\n typeof navigator.mediaDevices !== 'undefined' && navigator.mediaDevices.getDisplayMedia !== undefined;\n\n // TODO(wittjosiah): In order to use toolbar, need to update to actually use the graph action callbacks directly.\n return (\n <div className={mx('z-20 flex justify-center m-8', autoHideControls && groupHoverControlItemWithTransition)}>\n <NativeToolbar.Root classNames={['p-2 bg-modalSurface rounded-md shadow-md', classNames]}>\n <ToggleButton\n active={call.media.audioEnabled}\n state={{\n on: {\n icon: 'ph--microphone--regular',\n label: t('mic off'),\n onClick: () => call.turnAudioOff(),\n classNames: 'bg-callActive',\n },\n off: {\n icon: 'ph--microphone-slash--duotone',\n label: t('mic on'),\n onClick: () => call.turnAudioOn(),\n classNames: [call.joined && 'bg-callAlert'],\n },\n }}\n />\n <ToggleButton\n active={call.media.videoEnabled}\n state={{\n on: {\n icon: 'ph--video-camera--regular',\n label: t('camera off'),\n onClick: () => call.turnVideoOff(),\n },\n off: {\n icon: 'ph--video-camera-slash--duotone',\n label: t('camera on'),\n onClick: () => call.turnVideoOn(),\n },\n }}\n />\n\n {(participants !== undefined && (\n <div className='flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued'>\n <Icon icon='ph--users--regular' size={4} />\n <div>{participants}</div>\n </div>\n )) || <NativeToolbar.Separator variant='gap' />}\n\n {call.joined && (\n <>\n <ToggleButton\n disabled={!canSharescreen}\n active={isScreensharing}\n state={{\n on: {\n icon: 'ph--monitor--regular',\n label: t('screenshare off'),\n onClick: () => call.turnScreenshareOff(),\n },\n off: {\n icon: 'ph--monitor-arrow-up--duotone',\n label: t('screenshare on'),\n onClick: () => call.turnScreenshareOn(),\n },\n }}\n />\n\n {/* Companion actions. */}\n {actions.map((action) => (\n <IconButton\n key={action.id}\n {...defaultButtonProps}\n icon={action.properties.icon}\n label={toLocalizedString(action.properties.label, t)}\n classNames={action.properties.classNames}\n onClick={() => action.data({ node })}\n />\n ))}\n\n <ToggleButton\n active={call.raisedHand}\n state={{\n on: {\n icon: 'ph--hand-waving--regular',\n label: t('lower hand'),\n onClick: () => call.setRaisedHand(false),\n classNames: [call.joined && 'bg-callAlert'],\n },\n off: {\n icon: 'ph--hand-palm--duotone',\n label: t('raise hand'),\n onClick: () => call.setRaisedHand(true),\n },\n }}\n />\n </>\n )}\n {call.joined ? (\n <IconButton variant='destructive' icon='ph--phone-x--regular' label={t('leave call')} onClick={onLeave} />\n ) : (\n <IconButton variant='primary' icon='ph--phone-incoming--regular' label={t('join call')} onClick={onJoin} />\n )}\n </NativeToolbar.Root>\n </div>\n );\n};\n\nToolbar.displayName = 'MeetingToolbar';\n\ntype ToolbarButtonProps = Pick<IconButtonProps, 'disabled'> & {\n active?: boolean;\n state: {\n on: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n off: Pick<IconButtonProps, 'icon' | 'label' | 'onClick' | 'classNames'>;\n };\n};\n\nconst defaultButtonProps: Partial<IconButtonProps> = {\n size: 5,\n iconOnly: true,\n};\n\nconst ToggleButton = ({ active, state }: ToolbarButtonProps) => (\n <IconButton\n {...defaultButtonProps}\n classNames={[active ? state.on.classNames ?? 'bg-callActive' : state.off.classNames]}\n icon={active ? state.on.icon : state.off.icon}\n label={active ? state.on.label : state.off.label}\n onClick={active ? state.on.onClick : state.off.onClick}\n />\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, useEffect, useRef } from 'react';\n\nexport type AudioStreamProps = {\n tracks: MediaStreamTrack[];\n};\n\nexport const AudioStream: FC<AudioStreamProps> = ({ tracks }) => {\n const mediaStreamRef = useRef(new MediaStream());\n const ref = useRef<HTMLAudioElement>(null);\n\n useEffect(() => {\n const audio = ref.current;\n if (!audio) {\n return;\n }\n\n const mediaStream = mediaStreamRef.current;\n audio.srcObject = mediaStream;\n }, []);\n\n const resetSrcObject = () => {\n const audio = ref.current;\n const mediaStream = mediaStreamRef.current;\n if (!audio || !mediaStream) {\n return;\n }\n\n // Need to set srcObject again in Chrome and call play() again for Safari\n // https://www.youtube.com/live/Tkx3OGrwVk8?si=K--P_AzNnAGrjraV&t=2533\n // Calling play() this way to make Chrome happy otherwise it throws an error.\n audio.addEventListener('canplay', () => audio.play(), { once: true });\n audio.srcObject = mediaStream;\n };\n\n return (\n <>\n <audio ref={ref} autoPlay />\n {tracks.map((track) => (\n <AudioTrack key={track.id} track={track} mediaStream={mediaStreamRef.current} resetSrcObject={resetSrcObject} />\n ))}\n </>\n );\n};\n\ntype AudioTrackProps = {\n track: MediaStreamTrack;\n mediaStream: MediaStream;\n resetSrcObject: () => void;\n};\n\nconst AudioTrack = ({ track, mediaStream, resetSrcObject }: AudioTrackProps) => {\n useEffect(() => {\n const currentTrack = track;\n mediaStream.addTrack(currentTrack);\n resetSrcObject();\n return () => {\n mediaStream.removeTrack(currentTrack);\n resetSrcObject();\n };\n }, [track, mediaStream]);\n\n return null;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type JSX, forwardRef, memo, useEffect, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type VideoObjectProps = Omit<JSX.IntrinsicElements['video'], 'className' | 'ref'> &\n ThemedClassName<{\n videoStream?: MediaStream;\n flip?: boolean;\n // TODO(burdon): If screenshare then contain.\n contain?: boolean;\n }>;\n\nexport const VideoObject = memo(\n forwardRef<HTMLVideoElement, VideoObjectProps>(({ videoStream, classNames, flip, contain, ...rest }, ref) => {\n const internalRef = useRef<HTMLVideoElement | null>(null);\n\n useEffect(() => {\n const video = internalRef.current;\n if (video && videoStream) {\n video.srcObject = videoStream;\n video.setAttribute('autoplay', 'true');\n video.setAttribute('playsinline', 'true');\n }\n }, [videoStream, internalRef.current]);\n\n // NOTE: The video element typically has a max size of 1280x720.\n return (\n <video\n className={mx(\n 'w-full aspect-video',\n flip && 'scale-x-[-1]',\n contain ? 'object-contain' : 'object-cover',\n classNames,\n )}\n ref={(v) => {\n internalRef.current = v;\n if (ref === null) {\n return;\n }\n\n if (typeof ref === 'function') {\n ref(v);\n } else {\n ref.current = v;\n }\n }}\n {...rest}\n />\n );\n }),\n);\n\nVideoObject.displayName = 'VideoObject';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { memo, useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework';\n\nimport { type EncodedTrackName, type UserState } from '../../calls';\nimport { ThreadCapabilities } from '../../capabilities';\nimport { VideoObject } from '../Media';\nimport { ResponsiveGridItem, type ResponsiveGridItemProps } from '../ResponsiveGrid';\n\nexport const SCREENSHARE_SUFFIX = '_screenshare';\n\nexport const Participant = memo(({ item: user, debug, ...props }: ResponsiveGridItemProps<UserState>) => {\n const call = useCapability(ThreadCapabilities.CallManager);\n const isSelf: boolean = call.self.id !== undefined && user.id !== undefined && user.id.startsWith(call.self.id);\n const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);\n const pulledVideoStream = call.getVideoStream(\n isScreenshare || !isSelf ? (user.tracks?.video as EncodedTrackName) : undefined,\n );\n\n const videoStream = useMemo<MediaStream | undefined>(() => {\n if (isSelf && !isScreenshare) {\n return call.media.videoStream;\n } else if (isSelf && isScreenshare) {\n return call.media.screenshareVideoStream;\n } else if (!isSelf) {\n return pulledVideoStream;\n }\n }, [isSelf, isScreenshare, call.media.videoStream, call.media.screenshareVideoStream, pulledVideoStream]);\n\n return (\n <ResponsiveGridItem\n {...props}\n item={user}\n name={user.name}\n self={isSelf}\n screenshare={!!call.media.screenshareVideoStream}\n video={call.media.videoEnabled}\n mute={user ? !user.tracks?.audioEnabled : false}\n wave={user.raisedHand}\n speaking={user.speaking}\n debug={debug}\n >\n <VideoObject\n videoStream={videoStream}\n flip={isSelf && !isScreenshare}\n contain={!!isScreenshare}\n classNames='rounded-md'\n />\n </ResponsiveGridItem>\n );\n});\n\nParticipant.displayName = 'Participant';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * A container component that maintains the child's aspect ratio while centering its content.\n * The container will scale to fit within its parent's bounds while preserving the aspect ratio.\n *\n * @example\n * <ResponsiveContainer>\n * <VideoObject />\n * </ResponsiveContainer>\n */\nexport const ResponsiveContainer = ({ children }: PropsWithChildren) => {\n return (\n // Outer container that takes full size of parent.\n <div role='none' className='relative flex w-full h-full'>\n {/* Absolute positioning layer for centering content. */}\n <div role='none' className='absolute inset-0 flex justify-center items-center'>\n {/* Content container that maintains given aspect ratio and proper scaling. */}\n <div role='none' className={mx('max-h-full max-w-full w-auto h-auto aspect-video')}>\n {children}\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentType, type FC, useLayoutEffect, useState, useEffect, useMemo, useCallback } from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { type Size } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { ResponsiveContainer } from './ResponsiveContainer';\nimport { type ResponsiveGridItemProps } from './ResponsiveGridItem';\n\nconst ASPECT_RATIO = 16 / 9;\nconst MIN_GALLERY_HEIGHT = 250;\n\nconst DEFAULT_GAP = 8;\n\nconst maxImageSize = 'w-[2560px] h-[1440px]';\n\n/**\n * Props for the ResponsiveGrid component.\n */\nexport type ResponsiveGridProps<T extends object = any> = ThemedClassName<{\n /** Cell component. */\n Cell: ComponentType<ResponsiveGridItemProps<T>>;\n\n /** Space between grid items in pixels. */\n gap?: number;\n\n /** Function to get the ID of an item. */\n getId?: (item: T) => string;\n\n /** Array of items to display in the grid. */\n items: T[];\n\n /** ID of the pinned item. */\n pinned?: string;\n\n /** Whether to hide the gallery (unpinned items) when an item is pinned. */\n autoHideGallery?: boolean;\n\n /** Whether the divider is resizable. */\n resizable?: boolean;\n\n /** Debug mode. */\n debug?: boolean;\n\n /** Callback when the pinned item changes. */\n onPinnedChange?: (pinned: string | undefined) => void;\n}>;\n\nconst defaultGetId: ResponsiveGridProps<any>['getId'] = (item: any) => item.id;\n\n/**\n * A responsive grid component that automatically adjusts its layout to optimize space usage.\n * Maintains aspect ratio of items while ensuring uniform gaps between them.\n */\nexport const ResponsiveGrid = <T extends object = any>({\n classNames,\n Cell,\n gap = DEFAULT_GAP,\n getId = defaultGetId,\n items,\n pinned,\n autoHideGallery = false,\n debug,\n onPinnedChange,\n}: ResponsiveGridProps<T>) => {\n const {\n width: containerWidth = 0,\n height: containerHeight = 0,\n ref: containerRef,\n } = useResizeDetector<HTMLDivElement>({ refreshRate: 100 });\n const [dividerHeight, setDividerHeight] = useState<Size>(0);\n useEffect(() => {\n if (containerWidth && containerHeight) {\n const { height } = fitAspectRatio(containerWidth, containerHeight, ASPECT_RATIO);\n setDividerHeight(Math.min(height, containerHeight - MIN_GALLERY_HEIGHT));\n }\n }, [containerWidth, containerHeight]);\n\n const pinnedItem = useMemo(() => items.find((item) => getId(item) === pinned), [items, pinned]);\n const mainItems = useMemo(() => items.filter((item) => getId(item) !== pinned), [items, pinned]);\n const hideGallery = autoHideGallery && pinnedItem !== undefined;\n\n //\n // Recalculate optimal layout when container size or items change.\n //\n const [{ time, columns, cellWidth }, setLayout] = useState<Layout>({ time: 0, columns: 0, cellWidth: 0 });\n const { width = 0, height = 0, ref: gridContainerRef } = useResizeDetector<HTMLDivElement>({ refreshRate: 200 });\n useEffect(() => {\n if (containerHeight && width && height) {\n const layout = calculateLayout(width, height, mainItems.length, gap);\n setLayout({ time: Date.now(), ...layout });\n }\n }, [containerHeight, width, height, mainItems.length, gap, pinned]);\n\n //\n // We use the browser to layout invisible divs and then calculate the absolute position of these items,\n // which are animated into position.\n //\n const [bounds, setBounds] = useState<[T, DOMRectBounds][]>([]);\n useLayoutEffect(() => {\n if ((!hideGallery && !gridContainerRef.current) || !containerHeight) {\n return;\n }\n\n // TODO(burdon): Consider directly setting bounds on DOM elementsinstead of state update?\n const t = setTimeout(() => {\n setBounds(\n items\n .filter((item) => !hideGallery || item === pinnedItem)\n .map((item) => {\n invariant(containerRef.current);\n const el = containerRef.current.querySelector(`[data-grid-item=\"${getId(item)}\"]`);\n if (!el) {\n return null;\n }\n\n const bounds = getRelativeBounds(containerRef.current, el as HTMLElement);\n return [item, bounds];\n })\n .filter((item): item is [T, DOMRectBounds] => item !== null),\n );\n });\n\n return () => clearTimeout(t);\n }, [containerHeight, items, pinnedItem, hideGallery, time]);\n\n const handleClick = useCallback(\n (item: T) => onPinnedChange?.(getId(item) === pinned ? undefined : getId(item)),\n [pinned, onPinnedChange],\n );\n\n return (\n <div ref={containerRef} className={mx('relative w-full h-full', classNames)}>\n {/* Placeholder elements to calculate layout. */}\n <div className='absolute inset-0 flex flex-col grow gap-2'>\n {/* Pinned item. */}\n {pinnedItem && (\n <div\n className={mx('flex grow-[2] shrink overflow-hidden justify-center items-center', hideGallery && 'h-full')}\n style={hideGallery ? {} : { height: dividerHeight }}\n >\n <SoloItem id={getId(pinnedItem)} debug={debug} />\n </div>\n )}\n\n {/* Gallery. */}\n {!hideGallery && (\n <div\n ref={gridContainerRef}\n className='flex grow-[1] overflow-hidden justify-center items-center'\n style={hideGallery ? {} : { minHeight: MIN_GALLERY_HEIGHT }}\n >\n {mainItems.length === 1 && (\n <div style={{ width: cellWidth }} className='flex h-full'>\n <SoloItem id={getId(mainItems[0])} debug={debug} />\n </div>\n )}\n\n {mainItems.length > 1 && columns > 0 && (\n <div\n role='grid'\n style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,\n gap: `${gap}px`,\n }}\n >\n {mainItems.map((item) => (\n <div\n key={getId(item)}\n {...{ 'data-grid-item': getId(item) }}\n className={mx(\n 'aspect-video max-h-full max-w-full w-auto h-auto',\n debug && 'border border-primary-500',\n )}\n />\n ))}\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Absolutely positioned items. */}\n <div className={mx(debug && 'opacity-10')}>\n {bounds.map(([item, bounds]) => (\n <Cell\n key={getId(item)}\n classNames='absolute transition-all duration-500'\n item={item}\n style={bounds}\n pinned={getId(item) === pinned}\n onClick={items.length > 1 ? handleClick : undefined}\n />\n ))}\n </div>\n </div>\n );\n};\n\nconst SoloItem: FC<Pick<ResponsiveGridProps, 'debug'> & { id: string }> = ({ debug, id }) => {\n return (\n <ResponsiveContainer>\n <div\n {...{ 'data-grid-item': id }}\n className={mx('aspect-video overflow-hidden', debug && 'z-20 border-2 border-primary-500')}\n >\n {/* Maximum size placeholder image forces aspect ratio. */}\n <img alt='placeholder video' className={mx('opacity-0', maxImageSize)} />\n </div>\n </ResponsiveContainer>\n );\n};\n\ntype DOMRectBounds = Pick<DOMRect, 'top' | 'left' | 'width' | 'height'>;\n\n// TODO(burdon): Reconcile with react-ui-gameboard.\nconst getRelativeBounds = (container: HTMLElement, el: HTMLElement): DOMRectBounds => {\n const containerRect = container.getBoundingClientRect();\n const elementRect = el.getBoundingClientRect();\n return {\n top: elementRect.top - containerRect.top,\n left: elementRect.left - containerRect.left,\n width: elementRect.width,\n height: elementRect.height,\n };\n};\n\ntype Layout = {\n time?: number;\n columns: number;\n cellWidth: number;\n};\n\n/**\n * Calculates the optimal number of columns for a grid layout that minimizes wasted space.\n * @param containerWidth - Width of the container in pixels.\n * @param containerHeight - Height of the container in pixels.\n * @param count - Total number of items to display.\n * @param gap - Space between items in pixels.\n * @param aspectRatio - Desired aspect ratio of items (width/height).\n * @returns The optimal number of columns.\n */\nconst calculateLayout = (\n containerWidth: number,\n containerHeight: number,\n count: number,\n gap: number,\n aspectRatio = ASPECT_RATIO,\n): Layout => {\n if (count === 0) {\n return { columns: 1, cellWidth: 1 };\n }\n\n let minWastedSpace = Infinity;\n let bestColumns = 1;\n let cellWidth = 0;\n\n // Try different rows counts to find the optimal layout that minimizes wasted space.\n for (let rows = 1; rows <= count; rows++) {\n const cols = Math.ceil(count / rows);\n\n // Calculate available space accounting for gaps.\n const { width: itemWidth, height: itemHeight } = fitItemsToGrid(\n containerWidth,\n containerHeight,\n cols,\n rows,\n aspectRatio,\n gap,\n );\n\n // Calculate total wasted space for this configuration.\n const usedWidth = itemWidth * cols + gap * cols - 1;\n const usedHeight = itemHeight * rows + gap * rows - 1;\n\n // Determine if optimal.\n const wastedSpace = containerWidth * containerHeight - usedWidth * usedHeight;\n if (wastedSpace < minWastedSpace) {\n minWastedSpace = wastedSpace;\n bestColumns = cols;\n cellWidth = itemWidth;\n }\n }\n\n return { columns: bestColumns, cellWidth };\n};\n\n/**\n * Returns the size of the largest rectangle with the given aspect ration that fits within the grid.\n */\nconst fitItemsToGrid = (\n outerWidth: number,\n outerHeight: number,\n numCols: number,\n numRows: number,\n aspectRatio: number,\n gap: number,\n): { width: number; height: number } => {\n // Calculate available space accounting for gaps.\n const availableWidth = outerWidth - gap * (numCols - 1);\n const availableHeight = outerHeight - gap * (numRows - 1);\n\n // Calculate max dimensions.\n const maxCellWidth = availableWidth / numCols;\n const maxCellHeight = availableHeight / numRows;\n\n // Use fitAspectRatio to get dimensions that fit within max cell size while maintaining the desired aspect ratio\n return fitAspectRatio(maxCellWidth, maxCellHeight, aspectRatio);\n};\n\n/**\n * Returns the size of the largest rectangle the given aspect ratio that fits within the outer rectangle.\n */\nconst fitAspectRatio = (\n outerWidth: number,\n outerHeight: number,\n aspectRatio: number,\n): { width: number; height: number } => {\n if (outerWidth <= 0 || outerHeight <= 0 || aspectRatio <= 0) {\n return { width: 0, height: 0 };\n }\n\n // First try fitting to width.\n let width = outerWidth;\n let height = width / aspectRatio;\n\n // If too tall, fit to height instead.\n if (height > outerHeight) {\n height = outerHeight;\n width = height * aspectRatio;\n }\n\n return { width, height };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useState, type CSSProperties, type PropsWithChildren } from 'react';\n\nimport { Icon, IconButton, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { Waveform } from '@dxos/react-ui-sfx';\nimport { groupHoverControlItemWithTransition, mx } from '@dxos/react-ui-theme';\n\nimport { THREAD_PLUGIN } from '../../meta';\n\nexport type ResponsiveGridItemProps<T extends object = any> = PropsWithChildren<\n ThemedClassName<{\n item: T;\n style?: CSSProperties;\n pinned?: boolean;\n name?: string;\n self?: boolean;\n screenshare?: boolean;\n video?: boolean;\n mute?: boolean;\n wave?: boolean;\n speaking?: boolean;\n debug?: boolean;\n onClick?: (item: T) => void;\n }>\n>;\n\n/**\n * Cell container.\n */\nexport const ResponsiveGridItem = <T extends object = any>({\n children,\n classNames,\n item,\n style,\n name,\n self,\n pinned,\n screenshare,\n video,\n mute,\n wave,\n speaking,\n onClick,\n}: ResponsiveGridItemProps<T>) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n const iconProps: Record<string, { icon: string; label: string; classNames?: string }> = {\n wave: {\n icon: 'ph--hand-waving--duotone',\n label: t('icon wave'),\n classNames: 'animate-pulse bg-orange-500',\n },\n mute: {\n icon: 'ph--microphone-slash--regular',\n label: t('icon muted'),\n },\n };\n\n const props = wave && !pinned ? iconProps.wave : mute ? iconProps.mute : speaking ? iconProps.speaking : undefined;\n\n // Debounce speaking indicator.\n const [speakingIndicator, setSpeakingIndicator] = useState(speaking);\n useEffect(() => {\n if (speaking) {\n setSpeakingIndicator(true);\n } else {\n const timeout = setTimeout(() => {\n setSpeakingIndicator(false);\n }, 1_000);\n return () => clearTimeout(timeout);\n }\n }, [speaking]);\n\n return (\n <div\n className={mx(\n 'relative w-full h-full group',\n 'rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500',\n speakingIndicator ? 'outline-green-500' : !video && 'outline-separator',\n classNames,\n )}\n style={style}\n >\n {children}\n\n {/* Action. */}\n {onClick && (\n <div className='z-10 absolute top-1 right-1 flex'>\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', groupHoverControlItemWithTransition)}\n iconOnly\n icon={pinned ? 'ph--x--regular' : 'ph--arrows-out--regular'}\n size={pinned ? 5 : 4}\n label={pinned ? t('icon unpin') : t('icon pin')}\n onClick={() => onClick?.(item)}\n />\n </div>\n )}\n\n {/* Name. */}\n {name && (\n <div className='z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center'>\n {/* TODO(burdon): Replace with avatar for everyone. */}\n {/* {self && <Icon icon='ph--asterisk--regular' size={pinned ? 5 : 4} />} */}\n {screenshare && <Icon icon='ph--broadcast--regular' size={pinned ? 5 : 4} />}\n <div\n className={mx('bg-neutral-800 text-neutral-100 py-0.5 truncate rounded', pinned ? 'px-2' : 'px-1 text-xs')}\n >\n {name}\n </div>\n </div>\n )}\n\n {/* Activity. */}\n <div className='z-10 absolute bottom-1 left-1 flex'>\n {(speaking && <Waveform active size={pinned ? 5 : 4} />) ||\n (props && (\n <IconButton\n classNames={mx('p-1 min-bs-1 rounded', props?.classNames)}\n icon={props?.icon}\n label={props?.label}\n size={pinned ? 5 : 4}\n iconOnly\n />\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\n\nimport { Participant, SCREENSHARE_SUFFIX } from './Participant';\nimport { type UserState } from '../../calls';\nimport { ResponsiveGrid } from '../ResponsiveGrid';\n\nconst getId = (user: UserState): string => user.id!;\n\nexport type ParticipantGridProps = ThemedClassName<{\n self: UserState;\n users: UserState[];\n fullscreen?: boolean;\n debug?: boolean;\n}>;\n\nexport const ParticipantGrid = ({ classNames, self, users, fullscreen, debug }: ParticipantGridProps) => {\n const [pinned, setPinned] = useState<string | undefined>();\n\n const allUsers = useMemo(() => {\n const allUsers: (UserState & { isSelf?: boolean })[] = [];\n users.forEach((user) => {\n if (!user.joined) {\n return;\n }\n\n allUsers.push({ ...user, isSelf: user.id === self.id });\n if (user.tracks?.screenshareEnabled) {\n const screenshare: UserState = {\n ...user,\n id: user.id + SCREENSHARE_SUFFIX,\n tracks: {\n ...user.tracks,\n video: user.tracks.screenshare,\n videoEnabled: user.tracks.screenshareEnabled,\n } as any, // TODO(burdon): Remove cast.\n };\n\n allUsers.push(screenshare);\n }\n });\n\n return allUsers;\n }, [self, users]);\n\n useEffect(() => {\n if (pinned) {\n // Check expanded user is still in call.\n if (!allUsers.find((user) => user.id === pinned)) {\n setPinned(undefined);\n }\n }\n }, [pinned, allUsers]);\n\n // TODO(burdon): Put self last.\n const sortedUsers: UserState[] = allUsers.sort((a, b) => {\n if (a.isSelf) {\n return 1;\n } else if (b.isSelf) {\n return -1;\n } else if (a.tracks?.screenshareEnabled) {\n return -1;\n } else if (b.tracks?.screenshareEnabled) {\n return 1;\n } else {\n return 0;\n }\n });\n\n // TODO(burdon): Show ghost view of user for a second before leaving.\n return (\n <ResponsiveGrid<UserState>\n classNames={classNames}\n Cell={Participant}\n debug={debug}\n getId={getId}\n items={sortedUsers}\n pinned={pinned}\n autoHideGallery={fullscreen}\n onPinnedChange={setPinned}\n />\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Rx", "React", "useCallback", "useEffect", "useMemo", "useState", "useCapabilities", "useCapability", "Context", "log", "useClient", "fullyQualifiedId", "getSpace", "useIdentity", "useTranslation", "Input", "ElevationProvider", "ControlGroup", "ControlItemInput", "ControlGroupButton", "ToolbarMenu", "MenuProvider", "createMenuAction", "useMenuActions", "createMenuItemGroup", "useSoundEffect", "StackItem", "React", "useCapability", "React", "useAppGraph", "useCapability", "useNode", "useActions", "fullyQualifiedId", "Icon", "IconButton", "Toolbar", "NativeToolbar", "toLocalizedString", "useTranslation", "groupHoverControlItemWithTransition", "mx", "Toolbar", "classNames", "channel", "participants", "autoHideControls", "onJoin", "onLeave", "t", "useTranslation", "THREAD_PLUGIN", "graph", "useAppGraph", "call", "useCapability", "ThreadCapabilities", "CallManager", "node", "useNode", "fullyQualifiedId", "actions", "useActions", "id", "filter", "action", "properties", "disposition", "isScreensharing", "media", "screenshareTrack", "undefined", "canSharescreen", "navigator", "mediaDevices", "getDisplayMedia", "div", "className", "mx", "groupHoverControlItemWithTransition", "NativeToolbar", "Root", "ToggleButton", "active", "audioEnabled", "state", "on", "icon", "label", "onClick", "turnAudioOff", "off", "turnAudioOn", "joined", "videoEnabled", "turnVideoOff", "turnVideoOn", "Icon", "size", "Separator", "variant", "disabled", "turnScreenshareOff", "turnScreenshareOn", "map", "IconButton", "key", "defaultButtonProps", "toLocalizedString", "data", "raisedHand", "setRaisedHand", "displayName", "iconOnly", "React", "useEffect", "useRef", "AudioStream", "tracks", "mediaStreamRef", "useRef", "MediaStream", "ref", "useEffect", "audio", "current", "mediaStream", "srcObject", "resetSrcObject", "addEventListener", "play", "once", "React", "autoPlay", "map", "track", "AudioTrack", "key", "id", "currentTrack", "addTrack", "removeTrack", "React", "forwardRef", "memo", "useEffect", "useRef", "mx", "VideoObject", "memo", "forwardRef", "videoStream", "classNames", "flip", "contain", "rest", "ref", "internalRef", "useRef", "useEffect", "video", "current", "srcObject", "setAttribute", "React", "className", "mx", "v", "displayName", "React", "memo", "useMemo", "useCapability", "React", "mx", "ResponsiveContainer", "children", "React", "div", "role", "className", "mx", "React", "useLayoutEffect", "useState", "useEffect", "useMemo", "useCallback", "useResizeDetector", "invariant", "mx", "ASPECT_RATIO", "MIN_GALLERY_HEIGHT", "DEFAULT_GAP", "maxImageSize", "defaultGetId", "item", "id", "ResponsiveGrid", "classNames", "Cell", "gap", "getId", "items", "pinned", "autoHideGallery", "debug", "onPinnedChange", "width", "containerWidth", "height", "containerHeight", "ref", "containerRef", "useResizeDetector", "refreshRate", "dividerHeight", "setDividerHeight", "useState", "useEffect", "fitAspectRatio", "Math", "min", "pinnedItem", "useMemo", "find", "mainItems", "filter", "hideGallery", "undefined", "time", "columns", "cellWidth", "setLayout", "gridContainerRef", "layout", "calculateLayout", "length", "Date", "now", "bounds", "setBounds", "useLayoutEffect", "current", "t", "setTimeout", "map", "invariant", "el", "querySelector", "getRelativeBounds", "clearTimeout", "handleClick", "useCallback", "React", "div", "className", "mx", "style", "SoloItem", "minHeight", "role", "display", "gridTemplateColumns", "key", "onClick", "ResponsiveContainer", "img", "alt", "container", "containerRect", "getBoundingClientRect", "elementRect", "top", "left", "count", "aspectRatio", "minWastedSpace", "Infinity", "bestColumns", "rows", "cols", "ceil", "itemWidth", "itemHeight", "fitItemsToGrid", "usedWidth", "usedHeight", "wastedSpace", "outerWidth", "outerHeight", "numCols", "numRows", "availableWidth", "availableHeight", "maxCellWidth", "maxCellHeight", "React", "useEffect", "useState", "Icon", "IconButton", "useTranslation", "Waveform", "groupHoverControlItemWithTransition", "mx", "ResponsiveGridItem", "children", "classNames", "item", "style", "name", "self", "pinned", "screenshare", "video", "mute", "wave", "speaking", "onClick", "t", "useTranslation", "THREAD_PLUGIN", "iconProps", "icon", "label", "props", "undefined", "speakingIndicator", "setSpeakingIndicator", "useState", "useEffect", "timeout", "setTimeout", "clearTimeout", "React", "div", "className", "mx", "IconButton", "groupHoverControlItemWithTransition", "iconOnly", "size", "Icon", "Waveform", "active", "SCREENSHARE_SUFFIX", "Participant", "memo", "item", "user", "debug", "props", "call", "useCapability", "ThreadCapabilities", "CallManager", "isSelf", "self", "id", "undefined", "startsWith", "isScreenshare", "endsWith", "pulledVideoStream", "getVideoStream", "tracks", "video", "videoStream", "useMemo", "media", "screenshareVideoStream", "React", "ResponsiveGridItem", "name", "screenshare", "videoEnabled", "mute", "audioEnabled", "wave", "raisedHand", "speaking", "VideoObject", "flip", "contain", "classNames", "displayName", "React", "useEffect", "useMemo", "useState", "getId", "user", "id", "ParticipantGrid", "classNames", "self", "users", "fullscreen", "debug", "pinned", "setPinned", "useState", "allUsers", "useMemo", "forEach", "joined", "push", "isSelf", "tracks", "screenshareEnabled", "screenshare", "SCREENSHARE_SUFFIX", "video", "videoEnabled", "useEffect", "find", "undefined", "sortedUsers", "sort", "a", "b", "React", "ResponsiveGrid", "Cell", "Participant", "items", "autoHideGallery", "onPinnedChange", "CallRoot", "children", "React", "div", "className", "displayName", "CallAudio", "call", "useCapability", "ThreadCapabilities", "CallManager", "AudioStream", "tracks", "pulledAudioTracks", "CallGrid", "fullscreen", "debug", "useDebugMode", "ParticipantGrid", "self", "users", "CallToolbar", "props", "Toolbar", "isInRoom", "Call", "Root", "Grid", "Audio", "ChannelContainer", "channel", "roomId", "_roomId", "role", "fullscreen", "space", "getSpace", "callManager", "useCapability", "ThreadCapabilities", "CallManager", "fullyQualifiedId", "identity", "useIdentity", "isNamed", "profile", "displayName", "joinSound", "useSoundEffect", "leaveSound", "extensions", "useCapabilities", "CallExtension", "useEffect", "ctx", "Context", "left", "on", "forEach", "extension", "onLeave", "callStateUpdated", "state", "onCallStateUpdated", "mediaStateUpdated", "onMediaStateUpdated", "dispose", "handleJoin", "useCallback", "joined", "leave", "play", "setRoomId", "join", "Promise", "all", "map", "onJoin", "err", "log", "catch", "handleLeave", "turnAudioOff", "turnVideoOff", "turnScreenshareOff", "isJoined", "React", "StackItem", "Content", "toolbar", "classNames", "DisplayNameMissing", "Call", "Root", "Grid", "Toolbar", "defaultThread", "target", "ChannelToolbar", "attendableId", "onJoinCall", "ChatContainer", "thread", "t", "useTranslation", "THREAD_PLUGIN", "client", "useClient", "setDisplayName", "useState", "handleChange", "event", "value", "handleSave", "halo", "updateProfile", "ControlGroup", "ControlItemInput", "title", "description", "Input", "TextInput", "onChange", "placeholder", "ControlGroupButton", "disabled", "onClick", "useChannelToolbarActions", "creator", "useMemo", "Rx", "make", "nodes", "createMenuItemGroup", "label", "ns", "createMenuAction", "icon", "type", "edges", "source", "useMenuActions", "menuProps", "ElevationProvider", "elevation", "MenuProvider", "ToolbarMenu"]
7
+ }
@@ -2,13 +2,13 @@ import { createRequire } from 'node:module';const require = createRequire(import
2
2
 
3
3
  // packages/plugins/plugin-thread/src/capabilities/index.ts
4
4
  import { lazy } from "@dxos/app-framework";
5
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-UWJQE534.mjs"));
5
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-BAHBHYWI.mjs"));
6
6
  var CallManager = lazy(() => import("./call-manager-UUYXLF4T.mjs"));
7
- var IntentResolver = lazy(() => import("./intent-resolver-FHRK77IS.mjs"));
8
- var Markdown = lazy(() => import("./markdown-HBGB3UPJ.mjs"));
9
- var ReactRoot = lazy(() => import("./react-root-UPDDCRBV.mjs"));
10
- var ReactSurface = lazy(() => import("./react-surface-LU3CZDC4.mjs"));
11
- var ThreadSettings = lazy(() => import("./settings-KFEFSAYG.mjs"));
7
+ var IntentResolver = lazy(() => import("./intent-resolver-BU73VYW3.mjs"));
8
+ var Markdown = lazy(() => import("./markdown-HJUWNBLS.mjs"));
9
+ var ReactRoot = lazy(() => import("./react-root-RUXOAQNW.mjs"));
10
+ var ReactSurface = lazy(() => import("./react-surface-ELXFYKP6.mjs"));
11
+ var ThreadSettings = lazy(() => import("./settings-EA7DFSM6.mjs"));
12
12
  var ThreadState = lazy(() => import("./state-6AUTNROZ.mjs"));
13
13
 
14
14
  export {
@@ -20,4 +20,4 @@ export {
20
20
  ReactSurface,
21
21
  ThreadState
22
22
  };
23
- //# sourceMappingURL=chunk-EHDXOE5R.mjs.map
23
+ //# sourceMappingURL=chunk-O63QJPQX.mjs.map
@@ -8,7 +8,7 @@ import { Schema } from "effect";
8
8
  import { Type } from "@dxos/echo";
9
9
  import { DataType } from "@dxos/schema";
10
10
  var ThreadStatus = Schema.Union(Schema.Literal("staged"), Schema.Literal("active"), Schema.Literal("resolved"));
11
- var ThreadType = Schema.Struct({
11
+ var _ThreadType = Schema.Struct({
12
12
  name: Schema.optional(Schema.String),
13
13
  status: Schema.optional(ThreadStatus),
14
14
  messages: Schema.mutable(Schema.Array(Type.Ref(DataType.Message)))
@@ -16,7 +16,8 @@ var ThreadType = Schema.Struct({
16
16
  typename: "dxos.org/type/Thread",
17
17
  version: "0.1.0"
18
18
  }));
19
- var ChannelType = Schema.Struct({
19
+ var ThreadType = _ThreadType;
20
+ var _ChannelType = Schema.Struct({
20
21
  name: Schema.optional(Schema.String),
21
22
  defaultThread: Type.Ref(ThreadType),
22
23
  // TODO(wittjosiah): Should be an "ordered collection".
@@ -25,6 +26,7 @@ var ChannelType = Schema.Struct({
25
26
  typename: "dxos.org/type/Channel",
26
27
  version: "0.1.0"
27
28
  }));
29
+ var ChannelType = _ChannelType;
28
30
 
29
31
  // packages/plugins/plugin-thread/src/types/types.ts
30
32
  import { Schema as Schema2 } from "effect";
@@ -124,4 +126,4 @@ export {
124
126
  ThreadSettingsSchema,
125
127
  ThreadAction
126
128
  };
127
- //# sourceMappingURL=chunk-J323VQ4P.mjs.map
129
+ //# sourceMappingURL=chunk-UJMPYKT3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { DataType } from '@dxos/schema';\n\nexport const ThreadStatus = Schema.Union(\n Schema.Literal('staged'),\n Schema.Literal('active'),\n Schema.Literal('resolved'),\n);\n\nconst _ThreadType = Schema.Struct({\n name: Schema.optional(Schema.String),\n status: Schema.optional(ThreadStatus),\n messages: Schema.mutable(Schema.Array(Type.Ref(DataType.Message))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Thread', version: '0.1.0' }));\nexport interface ThreadType extends Schema.Schema.Type<typeof _ThreadType> {}\nexport const ThreadType: Type.obj<Schema.Schema<ThreadType, Schema.Schema.Encoded<typeof _ThreadType>, never>> =\n _ThreadType;\n\nconst _ChannelType = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Type.Ref(ThreadType),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Schema.mutable(Schema.Array(Type.Ref(ThreadType))),\n}).pipe(Type.Obj({ typename: 'dxos.org/type/Channel', version: '0.1.0' }));\nexport interface ChannelType extends Schema.Schema.Type<typeof _ChannelType> {}\nexport const ChannelType: Type.obj<Schema.Schema<ChannelType, Schema.Schema.Encoded<typeof _ChannelType>, never>> =\n _ChannelType;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { AnchoredTo, DataType } from '@dxos/schema';\n\nimport { ChannelType, ThreadType } from './schema';\nimport { THREAD_PLUGIN } from '../meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class CreateChannel extends Schema.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: Schema.Struct({\n spaceId: Type.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class CreateChannelThread extends Schema.TaggedClass<CreateChannelThread>()(\n `${THREAD_ACTION}/create-channel-thread`,\n {\n input: Schema.Struct({\n channel: ChannelType,\n }),\n output: Schema.Struct({\n object: ThreadType,\n }),\n },\n ) {}\n\n export class Create extends Schema.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n anchor: Schema.optional(Schema.String),\n subject: EchoObjectSchema,\n }),\n output: Schema.Void,\n }) {}\n\n export class Delete extends Schema.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n thread: Schema.optional(ThreadType),\n }),\n output: Schema.Void,\n }) {}\n\n export class Select extends Schema.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class ToggleResolved extends Schema.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: Schema.Struct({\n thread: ThreadType,\n }),\n output: Schema.Void,\n }) {}\n\n export class AddMessage extends Schema.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: Schema.Struct({\n subject: EchoObjectSchema,\n anchor: AnchoredTo,\n sender: DataType.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteMessage extends Schema.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: Schema.Struct({\n anchor: AnchoredTo,\n subject: EchoObjectSchema,\n messageId: Schema.String,\n message: Schema.optional(DataType.Message),\n messageIndex: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.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 /** Object toolbar state. */\n toolbar: Record<string, boolean>;\n /** In-memory draft threads. */\n drafts: Record<string, AnchoredTo[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Schema", "Type", "DataType", "ThreadStatus", "Schema", "Union", "Literal", "_ThreadType", "Struct", "name", "optional", "String", "status", "messages", "mutable", "Array", "Type", "Ref", "DataType", "Message", "pipe", "Obj", "typename", "version", "ThreadType", "_ChannelType", "defaultThread", "threads", "ChannelType", "Schema", "Type", "EchoObjectSchema", "AnchoredTo", "DataType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "Schema", "TaggedClass", "input", "Struct", "spaceId", "Type", "SpaceId", "name", "optional", "String", "output", "object", "ChannelType", "CreateChannelThread", "channel", "ThreadType", "Create", "anchor", "subject", "EchoObjectSchema", "Void", "Delete", "AnchoredTo", "thread", "Select", "current", "ToggleResolved", "AddMessage", "sender", "DataType", "Actor", "text", "DeleteMessage", "messageId", "message", "Message", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }