@dxos/plugin-thread 0.8.4-main.c1de068 → 0.8.4-main.fd6878d

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 (195) hide show
  1. package/dist/lib/browser/ChannelContainer-O2SFQJU7.mjs +16 -0
  2. package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs → ChatContainer-PVT3DUZJ.mjs} +4 -4
  3. package/dist/lib/browser/{app-graph-builder-N7BE5TYW.mjs → app-graph-builder-AF3M7UWN.mjs} +5 -5
  4. package/dist/lib/browser/app-graph-builder-AF3M7UWN.mjs.map +7 -0
  5. package/dist/lib/browser/{call-manager-NIPDYUVD.mjs → call-manager-XRRCAVLI.mjs} +4 -4
  6. package/dist/lib/browser/call-manager-XRRCAVLI.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2CWJBXBH.mjs +21 -0
  8. package/dist/lib/browser/{chunk-LGSDKXPF.mjs → chunk-4APCDRSH.mjs} +1 -1
  9. package/dist/lib/browser/{chunk-LGSDKXPF.mjs.map → chunk-4APCDRSH.mjs.map} +1 -1
  10. package/dist/lib/browser/{chunk-GCLD5ESP.mjs → chunk-DW7JD64V.mjs} +1 -1
  11. package/dist/lib/browser/{chunk-GCLD5ESP.mjs.map → chunk-DW7JD64V.mjs.map} +2 -2
  12. package/dist/lib/browser/{chunk-XLPJXUKO.mjs → chunk-FY4ZRD5X.mjs} +8 -8
  13. package/dist/lib/{node-esm/chunk-J4NSON5Q.mjs.map → browser/chunk-FY4ZRD5X.mjs.map} +3 -3
  14. package/dist/lib/browser/{chunk-VUWC4IJM.mjs → chunk-J3JO5NWO.mjs} +26 -28
  15. package/dist/lib/browser/chunk-J3JO5NWO.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-6NSMBO3B.mjs → chunk-JGKMMI65.mjs} +2 -2
  17. package/dist/lib/browser/{chunk-6NSMBO3B.mjs.map → chunk-JGKMMI65.mjs.map} +3 -3
  18. package/dist/lib/browser/{chunk-ZE7KWN36.mjs → chunk-TUFWPOVS.mjs} +92 -63
  19. package/dist/lib/browser/chunk-TUFWPOVS.mjs.map +7 -0
  20. package/dist/lib/browser/{chunk-ERWASUQK.mjs → chunk-X5PIP5YR.mjs} +3 -3
  21. package/dist/lib/browser/{chunk-ERWASUQK.mjs.map → chunk-X5PIP5YR.mjs.map} +3 -3
  22. package/dist/lib/browser/{chunk-KWPRNHTK.mjs → chunk-ZJ7QBXK6.mjs} +225 -225
  23. package/dist/lib/browser/chunk-ZJ7QBXK6.mjs.map +7 -0
  24. package/dist/lib/browser/index.mjs +7 -7
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-JFGLZ6VI.mjs → intent-resolver-DCY4P4OX.mjs} +8 -8
  27. package/dist/lib/browser/intent-resolver-DCY4P4OX.mjs.map +7 -0
  28. package/dist/lib/browser/{markdown-GEXBVJYN.mjs → markdown-WZSXCEZJ.mjs} +4 -4
  29. package/dist/lib/browser/markdown-WZSXCEZJ.mjs.map +7 -0
  30. package/dist/lib/browser/meta.json +1 -1
  31. package/dist/lib/browser/{react-root-X4UIVGTX.mjs → react-root-QXPALOUQ.mjs} +9 -9
  32. package/dist/lib/browser/{react-surface-YCYEFBPM.mjs → react-surface-PYAMIADB.mjs} +9 -9
  33. package/dist/lib/browser/react-surface-PYAMIADB.mjs.map +7 -0
  34. package/dist/lib/browser/{settings-E32MTL7A.mjs → settings-AC6YSASL.mjs} +2 -2
  35. package/dist/lib/browser/{state-H6CYONWE.mjs → state-2T4KDWBX.mjs} +2 -2
  36. package/dist/lib/browser/{state-H6CYONWE.mjs.map → state-2T4KDWBX.mjs.map} +2 -2
  37. package/dist/lib/browser/types/index.mjs +1 -1
  38. package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs → ChannelContainer-B2ZGAE4P.mjs} +7 -7
  39. package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs → ChatContainer-2CT4PJ7I.mjs} +4 -4
  40. package/dist/lib/node-esm/{app-graph-builder-VCW76Z6V.mjs → app-graph-builder-OLSJVCWY.mjs} +5 -5
  41. package/dist/lib/node-esm/app-graph-builder-OLSJVCWY.mjs.map +7 -0
  42. package/dist/lib/node-esm/{call-manager-D6O5ZJJ4.mjs → call-manager-EI7FXRAU.mjs} +4 -4
  43. package/dist/lib/node-esm/call-manager-EI7FXRAU.mjs.map +7 -0
  44. package/dist/lib/node-esm/{chunk-IHDNQLLR.mjs → chunk-4TME3BR4.mjs} +92 -63
  45. package/dist/lib/node-esm/chunk-4TME3BR4.mjs.map +7 -0
  46. package/dist/lib/node-esm/chunk-6CRHHOST.mjs +23 -0
  47. package/dist/lib/node-esm/{chunk-J4NSON5Q.mjs → chunk-BF4UKS55.mjs} +8 -8
  48. package/dist/lib/node-esm/chunk-BF4UKS55.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs → chunk-PYTVBN5J.mjs} +1 -1
  50. package/dist/lib/node-esm/{chunk-75RJ5DJI.mjs.map → chunk-PYTVBN5J.mjs.map} +1 -1
  51. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs → chunk-QBHKLWGR.mjs} +2 -2
  52. package/dist/lib/node-esm/{chunk-OU5BYIDO.mjs.map → chunk-QBHKLWGR.mjs.map} +3 -3
  53. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs → chunk-SED3O2XO.mjs} +3 -3
  54. package/dist/lib/node-esm/{chunk-25ABSYP2.mjs.map → chunk-SED3O2XO.mjs.map} +3 -3
  55. package/dist/lib/node-esm/{chunk-2MFNK53T.mjs → chunk-VNG6M2IY.mjs} +26 -28
  56. package/dist/lib/node-esm/chunk-VNG6M2IY.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs → chunk-XVKWHTH4.mjs} +1 -1
  58. package/dist/lib/node-esm/{chunk-TDFHTCZZ.mjs.map → chunk-XVKWHTH4.mjs.map} +2 -2
  59. package/dist/lib/node-esm/{chunk-C3XFMUAY.mjs → chunk-YIDU3DXK.mjs} +225 -225
  60. package/dist/lib/node-esm/chunk-YIDU3DXK.mjs.map +7 -0
  61. package/dist/lib/node-esm/index.mjs +7 -7
  62. package/dist/lib/node-esm/index.mjs.map +3 -3
  63. package/dist/lib/node-esm/{intent-resolver-OXGNQ44Y.mjs → intent-resolver-QGTPU6QB.mjs} +8 -8
  64. package/dist/lib/node-esm/intent-resolver-QGTPU6QB.mjs.map +7 -0
  65. package/dist/lib/node-esm/{markdown-LIJZDK2J.mjs → markdown-3MZXUGUA.mjs} +4 -4
  66. package/dist/lib/node-esm/markdown-3MZXUGUA.mjs.map +7 -0
  67. package/dist/lib/node-esm/meta.json +1 -1
  68. package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs → react-root-7ZFJYVUZ.mjs} +9 -9
  69. package/dist/lib/node-esm/{react-surface-IRSEKM42.mjs → react-surface-UJFCSFNO.mjs} +9 -9
  70. package/dist/lib/node-esm/react-surface-UJFCSFNO.mjs.map +7 -0
  71. package/dist/lib/node-esm/{settings-SJ24YG7M.mjs → settings-N52O7MLS.mjs} +2 -2
  72. package/dist/lib/node-esm/{state-D7WNDT3N.mjs → state-62TQKQVB.mjs} +2 -2
  73. package/dist/lib/node-esm/{state-D7WNDT3N.mjs.map → state-62TQKQVB.mjs.map} +2 -2
  74. package/dist/lib/node-esm/types/index.mjs +1 -1
  75. package/dist/types/src/calls/call-manager.d.ts.map +1 -1
  76. package/dist/types/src/calls/call-swarm-synchronizer.d.ts.map +1 -1
  77. package/dist/types/src/calls/media-manager.d.ts.map +1 -1
  78. package/dist/types/src/calls/types.d.ts +1 -1
  79. package/dist/types/src/calls/types.d.ts.map +1 -1
  80. package/dist/types/src/calls/util/calls-service.d.ts +1 -1
  81. package/dist/types/src/calls/util/calls-service.d.ts.map +1 -1
  82. package/dist/types/src/calls/util/stub-media-streams.d.ts.map +1 -1
  83. package/dist/types/src/calls-service.stories.d.ts +1 -1
  84. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/call-manager.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/capabilities.d.ts +2 -2
  87. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +1 -1
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/markdown.d.ts +1 -1
  92. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  95. package/dist/types/src/components/Call/Call.d.ts.map +1 -1
  96. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  97. package/dist/types/src/components/CallDebugPanel.d.ts.map +1 -1
  98. package/dist/types/src/components/CallSidebar.d.ts.map +1 -1
  99. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  100. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  101. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  103. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  105. package/dist/types/src/components/CommentsThreadContainer.d.ts.map +1 -1
  106. package/dist/types/src/components/Lobby/Lobby.d.ts.map +1 -1
  107. package/dist/types/src/components/Media/VideoObject.d.ts +1 -1
  108. package/dist/types/src/components/Media/VideoObject.stories.d.ts +1 -1
  109. package/dist/types/src/components/Media/VideoObject.stories.d.ts.map +1 -1
  110. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/Participant/ParticipantGrid.d.ts.map +1 -1
  112. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts +1 -1
  113. package/dist/types/src/components/ResponsiveGrid/ResponsiveContainer.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts +1 -1
  115. package/dist/types/src/components/ResponsiveGrid/ResponsiveGrid.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/ResponsiveGrid/ResponsiveGridItem.d.ts.map +1 -1
  117. package/dist/types/src/extensions/threads.d.ts +2 -2
  118. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  119. package/dist/types/src/types/schema.d.ts +5 -3
  120. package/dist/types/src/types/schema.d.ts.map +1 -1
  121. package/dist/types/src/types/types.d.ts +6 -4
  122. package/dist/types/src/types/types.d.ts.map +1 -1
  123. package/dist/types/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +47 -45
  125. package/src/ThreadPlugin.tsx +2 -2
  126. package/src/calls/call-manager.ts +1 -1
  127. package/src/calls/call-swarm-synchronizer.ts +1 -1
  128. package/src/calls/media-manager.ts +2 -2
  129. package/src/calls/types.ts +1 -1
  130. package/src/calls/util/calls-service.ts +4 -3
  131. package/src/calls/util/stub-media-streams.ts +2 -2
  132. package/src/calls-service.stories.tsx +3 -3
  133. package/src/capabilities/app-graph-builder.ts +6 -5
  134. package/src/capabilities/call-manager.ts +3 -2
  135. package/src/capabilities/capabilities.ts +2 -2
  136. package/src/capabilities/intent-resolver.ts +4 -3
  137. package/src/capabilities/markdown.ts +4 -3
  138. package/src/capabilities/react-surface.tsx +5 -4
  139. package/src/capabilities/state.ts +2 -1
  140. package/src/components/Call/Call.tsx +3 -2
  141. package/src/components/Call/Toolbar.tsx +2 -2
  142. package/src/components/CallDebugPanel.tsx +1 -1
  143. package/src/components/CallSidebar.tsx +2 -1
  144. package/src/components/ChannelContainer.stories.tsx +3 -2
  145. package/src/components/ChannelContainer.tsx +7 -6
  146. package/src/components/Chat.stories.tsx +3 -2
  147. package/src/components/ChatContainer.tsx +4 -3
  148. package/src/components/Comments.stories.tsx +4 -3
  149. package/src/components/CommentsContainer.tsx +2 -1
  150. package/src/components/CommentsThreadContainer.tsx +3 -2
  151. package/src/components/Lobby/Lobby.tsx +1 -1
  152. package/src/components/Media/VideoObject.stories.tsx +4 -3
  153. package/src/components/MessageContainer.tsx +4 -3
  154. package/src/components/Participant/ParticipantGrid.tsx +2 -1
  155. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +4 -3
  156. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +4 -3
  157. package/src/components/ResponsiveGrid/ResponsiveGrid.tsx +1 -1
  158. package/src/components/ResponsiveGrid/ResponsiveGridItem.tsx +2 -2
  159. package/src/components/ThreadComplementary.tsx +1 -1
  160. package/src/components/command-extension.ts +1 -1
  161. package/src/extensions/threads.ts +6 -6
  162. package/src/hooks/useDebugMode.ts +1 -1
  163. package/src/testing/stories.ts +2 -2
  164. package/src/types/types.ts +2 -1
  165. package/src/typings.d.ts +8 -0
  166. package/dist/lib/browser/ChannelContainer-IY2UIRLF.mjs +0 -16
  167. package/dist/lib/browser/app-graph-builder-N7BE5TYW.mjs.map +0 -7
  168. package/dist/lib/browser/call-manager-NIPDYUVD.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-4OYAYON2.mjs +0 -21
  170. package/dist/lib/browser/chunk-KWPRNHTK.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-VUWC4IJM.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-XLPJXUKO.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-ZE7KWN36.mjs.map +0 -7
  174. package/dist/lib/browser/intent-resolver-JFGLZ6VI.mjs.map +0 -7
  175. package/dist/lib/browser/markdown-GEXBVJYN.mjs.map +0 -7
  176. package/dist/lib/browser/react-surface-YCYEFBPM.mjs.map +0 -7
  177. package/dist/lib/node-esm/app-graph-builder-VCW76Z6V.mjs.map +0 -7
  178. package/dist/lib/node-esm/call-manager-D6O5ZJJ4.mjs.map +0 -7
  179. package/dist/lib/node-esm/chunk-2MFNK53T.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-C3XFMUAY.mjs.map +0 -7
  181. package/dist/lib/node-esm/chunk-GW37AAM4.mjs +0 -23
  182. package/dist/lib/node-esm/chunk-IHDNQLLR.mjs.map +0 -7
  183. package/dist/lib/node-esm/intent-resolver-OXGNQ44Y.mjs.map +0 -7
  184. package/dist/lib/node-esm/markdown-LIJZDK2J.mjs.map +0 -7
  185. package/dist/lib/node-esm/react-surface-IRSEKM42.mjs.map +0 -7
  186. /package/dist/lib/browser/{ChannelContainer-IY2UIRLF.mjs.map → ChannelContainer-O2SFQJU7.mjs.map} +0 -0
  187. /package/dist/lib/browser/{ChatContainer-AIGIWAUG.mjs.map → ChatContainer-PVT3DUZJ.mjs.map} +0 -0
  188. /package/dist/lib/browser/{chunk-4OYAYON2.mjs.map → chunk-2CWJBXBH.mjs.map} +0 -0
  189. /package/dist/lib/browser/{react-root-X4UIVGTX.mjs.map → react-root-QXPALOUQ.mjs.map} +0 -0
  190. /package/dist/lib/browser/{settings-E32MTL7A.mjs.map → settings-AC6YSASL.mjs.map} +0 -0
  191. /package/dist/lib/node-esm/{ChannelContainer-DET6T5N2.mjs.map → ChannelContainer-B2ZGAE4P.mjs.map} +0 -0
  192. /package/dist/lib/node-esm/{ChatContainer-IQUWU426.mjs.map → ChatContainer-2CT4PJ7I.mjs.map} +0 -0
  193. /package/dist/lib/node-esm/{chunk-GW37AAM4.mjs.map → chunk-6CRHHOST.mjs.map} +0 -0
  194. /package/dist/lib/node-esm/{react-root-M7J6PZVW.mjs.map → react-root-7ZFJYVUZ.mjs.map} +0 -0
  195. /package/dist/lib/node-esm/{settings-SJ24YG7M.mjs.map → settings-N52O7MLS.mjs.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ThreadCapabilities
4
- } from "./chunk-75RJ5DJI.mjs";
4
+ } from "./chunk-PYTVBN5J.mjs";
5
5
  import {
6
6
  ChatContainer_default
7
- } from "./chunk-2MFNK53T.mjs";
7
+ } from "./chunk-VNG6M2IY.mjs";
8
8
  import {
9
9
  useDebugMode
10
- } from "./chunk-25ABSYP2.mjs";
10
+ } from "./chunk-SED3O2XO.mjs";
11
11
  import {
12
12
  meta
13
13
  } from "./chunk-GRLRWTRU.mjs";
@@ -23,9 +23,9 @@ import { log } from "@dxos/log";
23
23
  import { useClient } from "@dxos/react-client";
24
24
  import { fullyQualifiedId as fullyQualifiedId2, getSpace } from "@dxos/react-client/echo";
25
25
  import { useIdentity } from "@dxos/react-client/halo";
26
- import { useTranslation as useTranslation3, Input, ElevationProvider } from "@dxos/react-ui";
27
- import { ControlGroup, ControlItemInput, ControlGroupButton } from "@dxos/react-ui-form";
28
- import { ToolbarMenu, MenuProvider, createMenuAction, useMenuActions, createMenuItemGroup } from "@dxos/react-ui-menu";
26
+ import { ElevationProvider, Input, useTranslation as useTranslation3 } from "@dxos/react-ui";
27
+ import { ControlGroup, ControlGroupButton, ControlItemInput } from "@dxos/react-ui-form";
28
+ import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from "@dxos/react-ui-menu";
29
29
  import { useSoundEffect } from "@dxos/react-ui-sfx";
30
30
  import { StackItem } from "@dxos/react-ui-stack";
31
31
 
@@ -34,153 +34,11 @@ import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking"
34
34
  import React9 from "react";
35
35
  import { useCapability as useCapability3 } from "@dxos/app-framework";
36
36
 
37
- // src/components/Call/Toolbar.tsx
38
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
39
- import React from "react";
40
- import { useAppGraph, useCapability } from "@dxos/app-framework";
41
- import { useNode, useActions } from "@dxos/plugin-graph";
42
- import { fullyQualifiedId } from "@dxos/react-client/echo";
43
- import { Icon, IconButton, Toolbar as NativeToolbar, toLocalizedString, useTranslation } from "@dxos/react-ui";
44
- import { groupHoverControlItemWithTransition, mx } from "@dxos/react-ui-theme";
45
- var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
46
- var _effect = _useSignals();
47
- try {
48
- const { t } = useTranslation(meta.id);
49
- const { graph } = useAppGraph();
50
- const call = useCapability(ThreadCapabilities.CallManager);
51
- const node = useNode(graph, channel && fullyQualifiedId(channel));
52
- const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
53
- const isScreensharing = call.media.screenshareTrack !== void 0;
54
- const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
55
- return /* @__PURE__ */ React.createElement("div", {
56
- className: mx("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition)
57
- }, /* @__PURE__ */ React.createElement(NativeToolbar.Root, {
58
- classNames: [
59
- "p-2 bg-modalSurface rounded-md shadow-md",
60
- classNames
61
- ]
62
- }, /* @__PURE__ */ React.createElement(ToggleButton, {
63
- active: call.media.audioEnabled,
64
- state: {
65
- on: {
66
- icon: "ph--microphone--regular",
67
- label: t("mic off"),
68
- onClick: () => call.turnAudioOff(),
69
- classNames: "bg-callActive"
70
- },
71
- off: {
72
- icon: "ph--microphone-slash--duotone",
73
- label: t("mic on"),
74
- onClick: () => call.turnAudioOn(),
75
- classNames: [
76
- call.joined && "bg-callAlert"
77
- ]
78
- }
79
- }
80
- }), /* @__PURE__ */ React.createElement(ToggleButton, {
81
- active: call.media.videoEnabled,
82
- state: {
83
- on: {
84
- icon: "ph--video-camera--regular",
85
- label: t("camera off"),
86
- onClick: () => call.turnVideoOff()
87
- },
88
- off: {
89
- icon: "ph--video-camera-slash--duotone",
90
- label: t("camera on"),
91
- onClick: () => call.turnVideoOn()
92
- }
93
- }
94
- }), participants !== void 0 && /* @__PURE__ */ React.createElement("div", {
95
- className: "flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued"
96
- }, /* @__PURE__ */ React.createElement(Icon, {
97
- icon: "ph--users--regular",
98
- size: 4
99
- }), /* @__PURE__ */ React.createElement("div", null, participants)) || /* @__PURE__ */ React.createElement(NativeToolbar.Separator, {
100
- variant: "gap"
101
- }), call.joined && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ToggleButton, {
102
- disabled: !canSharescreen,
103
- active: isScreensharing,
104
- state: {
105
- on: {
106
- icon: "ph--monitor--regular",
107
- label: t("screenshare off"),
108
- onClick: () => call.turnScreenshareOff()
109
- },
110
- off: {
111
- icon: "ph--monitor-arrow-up--duotone",
112
- label: t("screenshare on"),
113
- onClick: () => call.turnScreenshareOn()
114
- }
115
- }
116
- }), actions.map((action) => /* @__PURE__ */ React.createElement(IconButton, {
117
- key: action.id,
118
- ...defaultButtonProps,
119
- icon: action.properties.icon,
120
- label: toLocalizedString(action.properties.label, t),
121
- classNames: action.properties.classNames,
122
- onClick: () => action.data({
123
- node
124
- })
125
- })), /* @__PURE__ */ React.createElement(ToggleButton, {
126
- active: call.raisedHand,
127
- state: {
128
- on: {
129
- icon: "ph--hand-waving--regular",
130
- label: t("lower hand"),
131
- onClick: () => call.setRaisedHand(false),
132
- classNames: [
133
- call.joined && "bg-callAlert"
134
- ]
135
- },
136
- off: {
137
- icon: "ph--hand-palm--duotone",
138
- label: t("raise hand"),
139
- onClick: () => call.setRaisedHand(true)
140
- }
141
- }
142
- })), call.joined ? /* @__PURE__ */ React.createElement(IconButton, {
143
- variant: "destructive",
144
- icon: "ph--phone-x--regular",
145
- label: t("leave call"),
146
- onClick: onLeave
147
- }) : /* @__PURE__ */ React.createElement(IconButton, {
148
- variant: "primary",
149
- icon: "ph--phone-incoming--regular",
150
- label: t("join call"),
151
- onClick: onJoin
152
- })));
153
- } finally {
154
- _effect.f();
155
- }
156
- };
157
- Toolbar.displayName = "MeetingToolbar";
158
- var defaultButtonProps = {
159
- size: 5,
160
- iconOnly: true
161
- };
162
- var ToggleButton = ({ active, state }) => {
163
- var _effect = _useSignals();
164
- try {
165
- return /* @__PURE__ */ React.createElement(IconButton, {
166
- ...defaultButtonProps,
167
- classNames: [
168
- active ? state.on.classNames ?? "bg-callActive" : state.off.classNames
169
- ],
170
- icon: active ? state.on.icon : state.off.icon,
171
- label: active ? state.on.label : state.off.label,
172
- onClick: active ? state.on.onClick : state.off.onClick
173
- });
174
- } finally {
175
- _effect.f();
176
- }
177
- };
178
-
179
37
  // src/components/Media/AudioStream.tsx
180
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
181
- import React2, { useEffect, useRef } from "react";
38
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
39
+ import React, { useEffect, useRef } from "react";
182
40
  var AudioStream = ({ tracks }) => {
183
- var _effect = _useSignals2();
41
+ var _effect = _useSignals();
184
42
  try {
185
43
  const mediaStreamRef = useRef(new MediaStream());
186
44
  const ref = useRef(null);
@@ -203,10 +61,10 @@ var AudioStream = ({ tracks }) => {
203
61
  });
204
62
  audio.srcObject = mediaStream;
205
63
  };
206
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement("audio", {
64
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("audio", {
207
65
  ref,
208
66
  autoPlay: true
209
- }), tracks.map((track) => /* @__PURE__ */ React2.createElement(AudioTrack, {
67
+ }), tracks.map((track) => /* @__PURE__ */ React.createElement(AudioTrack, {
210
68
  key: track.id,
211
69
  track,
212
70
  mediaStream: mediaStreamRef.current,
@@ -233,11 +91,11 @@ var AudioTrack = ({ track, mediaStream, resetSrcObject }) => {
233
91
  };
234
92
 
235
93
  // src/components/Media/VideoObject.tsx
236
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
237
- import React3, { forwardRef, memo, useEffect as useEffect2, useRef as useRef2 } from "react";
238
- import { mx as mx2 } from "@dxos/react-ui-theme";
94
+ import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
95
+ import React2, { forwardRef, memo, useEffect as useEffect2, useRef as useRef2 } from "react";
96
+ import { mx } from "@dxos/react-ui-theme";
239
97
  var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream, classNames, flip, contain, ...rest }, ref) => {
240
- var _effect = _useSignals3();
98
+ var _effect = _useSignals2();
241
99
  try {
242
100
  const internalRef = useRef2(null);
243
101
  useEffect2(() => {
@@ -251,8 +109,8 @@ var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream
251
109
  videoStream,
252
110
  internalRef.current
253
111
  ]);
254
- return /* @__PURE__ */ React3.createElement("video", {
255
- className: mx2("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
112
+ return /* @__PURE__ */ React2.createElement("video", {
113
+ className: mx("w-full aspect-video", flip && "scale-x-[-1]", contain ? "object-contain" : "object-cover", classNames),
256
114
  ref: (v) => {
257
115
  internalRef.current = v;
258
116
  if (ref === null) {
@@ -273,28 +131,28 @@ var VideoObject = /* @__PURE__ */ memo(/* @__PURE__ */ forwardRef(({ videoStream
273
131
  VideoObject.displayName = "VideoObject";
274
132
 
275
133
  // src/components/Participant/Participant.tsx
276
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
277
- import React7, { memo as memo2, useMemo as useMemo2 } from "react";
278
- import { useCapability as useCapability2 } from "@dxos/app-framework";
134
+ import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
135
+ import React6, { memo as memo2, useMemo as useMemo2 } from "react";
136
+ import { useCapability } from "@dxos/app-framework";
279
137
 
280
138
  // src/components/ResponsiveGrid/ResponsiveContainer.tsx
281
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
282
- import React4 from "react";
283
- import { mx as mx3 } from "@dxos/react-ui-theme";
139
+ import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
140
+ import React3 from "react";
141
+ import { mx as mx2 } from "@dxos/react-ui-theme";
284
142
  var ResponsiveContainer = ({ children }) => {
285
- var _effect = _useSignals4();
143
+ var _effect = _useSignals3();
286
144
  try {
287
145
  return (
288
146
  // Outer container that takes full size of parent.
289
- /* @__PURE__ */ React4.createElement("div", {
147
+ /* @__PURE__ */ React3.createElement("div", {
290
148
  role: "none",
291
149
  className: "relative flex w-full h-full"
292
- }, /* @__PURE__ */ React4.createElement("div", {
150
+ }, /* @__PURE__ */ React3.createElement("div", {
293
151
  role: "none",
294
152
  className: "absolute inset-0 flex justify-center items-center"
295
- }, /* @__PURE__ */ React4.createElement("div", {
153
+ }, /* @__PURE__ */ React3.createElement("div", {
296
154
  role: "none",
297
- className: mx3("max-h-full max-w-full w-auto h-auto aspect-video")
155
+ className: mx2("max-h-full max-w-full w-auto h-auto aspect-video")
298
156
  }, children)))
299
157
  );
300
158
  } finally {
@@ -303,11 +161,11 @@ var ResponsiveContainer = ({ children }) => {
303
161
  };
304
162
 
305
163
  // src/components/ResponsiveGrid/ResponsiveGrid.tsx
306
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
307
- import React5, { useLayoutEffect, useState, useEffect as useEffect3, useMemo, useCallback } from "react";
164
+ import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
165
+ import React4, { useCallback, useEffect as useEffect3, useLayoutEffect, useMemo, useState } from "react";
308
166
  import { useResizeDetector } from "react-resize-detector";
309
167
  import { invariant } from "@dxos/invariant";
310
- import { mx as mx4 } from "@dxos/react-ui-theme";
168
+ import { mx as mx3 } from "@dxos/react-ui-theme";
311
169
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-thread/src/components/ResponsiveGrid/ResponsiveGrid.tsx";
312
170
  var ASPECT_RATIO = 16 / 9;
313
171
  var MIN_GALLERY_HEIGHT = 250;
@@ -315,7 +173,7 @@ var DEFAULT_GAP = 8;
315
173
  var maxImageSize = "w-[2560px] h-[1440px]";
316
174
  var defaultGetId = (item) => item.id;
317
175
  var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = defaultGetId, items, pinned, autoHideGallery = false, debug, onPinnedChange }) => {
318
- var _effect = _useSignals5();
176
+ var _effect = _useSignals4();
319
177
  try {
320
178
  const { width: containerWidth = 0, height: containerHeight = 0, ref: containerRef } = useResizeDetector({
321
179
  refreshRate: 100
@@ -402,47 +260,47 @@ var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = def
402
260
  pinned,
403
261
  onPinnedChange
404
262
  ]);
405
- return /* @__PURE__ */ React5.createElement("div", {
263
+ return /* @__PURE__ */ React4.createElement("div", {
406
264
  ref: containerRef,
407
- className: mx4("relative w-full h-full", classNames)
408
- }, /* @__PURE__ */ React5.createElement("div", {
265
+ className: mx3("relative w-full h-full", classNames)
266
+ }, /* @__PURE__ */ React4.createElement("div", {
409
267
  className: "absolute inset-0 flex flex-col grow gap-2"
410
- }, pinnedItem && /* @__PURE__ */ React5.createElement("div", {
411
- className: mx4("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
268
+ }, pinnedItem && /* @__PURE__ */ React4.createElement("div", {
269
+ className: mx3("flex grow-[2] shrink overflow-hidden justify-center items-center", hideGallery && "h-full"),
412
270
  style: hideGallery ? {} : {
413
271
  height: dividerHeight
414
272
  }
415
- }, /* @__PURE__ */ React5.createElement(SoloItem, {
273
+ }, /* @__PURE__ */ React4.createElement(SoloItem, {
416
274
  id: getId2(pinnedItem),
417
275
  debug
418
- })), !hideGallery && /* @__PURE__ */ React5.createElement("div", {
276
+ })), !hideGallery && /* @__PURE__ */ React4.createElement("div", {
419
277
  ref: gridContainerRef,
420
278
  className: "flex grow-[1] overflow-hidden justify-center items-center",
421
279
  style: hideGallery ? {} : {
422
280
  minHeight: MIN_GALLERY_HEIGHT
423
281
  }
424
- }, mainItems.length === 1 && /* @__PURE__ */ React5.createElement("div", {
282
+ }, mainItems.length === 1 && /* @__PURE__ */ React4.createElement("div", {
425
283
  style: {
426
284
  width: cellWidth
427
285
  },
428
286
  className: "flex h-full"
429
- }, /* @__PURE__ */ React5.createElement(SoloItem, {
287
+ }, /* @__PURE__ */ React4.createElement(SoloItem, {
430
288
  id: getId2(mainItems[0]),
431
289
  debug
432
- })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ React5.createElement("div", {
290
+ })), mainItems.length > 1 && columns > 0 && /* @__PURE__ */ React4.createElement("div", {
433
291
  role: "grid",
434
292
  style: {
435
293
  display: "grid",
436
294
  gridTemplateColumns: `repeat(${columns}, ${cellWidth}px)`,
437
295
  gap: `${gap}px`
438
296
  }
439
- }, mainItems.map((item) => /* @__PURE__ */ React5.createElement("div", {
297
+ }, mainItems.map((item) => /* @__PURE__ */ React4.createElement("div", {
440
298
  key: getId2(item),
441
299
  "data-grid-item": getId2(item),
442
- className: mx4("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
443
- }))))), /* @__PURE__ */ React5.createElement("div", {
444
- className: mx4(debug && "opacity-10")
445
- }, bounds.map(([item, bounds2]) => /* @__PURE__ */ React5.createElement(Cell, {
300
+ className: mx3("aspect-video max-h-full max-w-full w-auto h-auto", debug && "border border-primary-500")
301
+ }))))), /* @__PURE__ */ React4.createElement("div", {
302
+ className: mx3(debug && "opacity-10")
303
+ }, bounds.map(([item, bounds2]) => /* @__PURE__ */ React4.createElement(Cell, {
446
304
  key: getId2(item),
447
305
  classNames: "absolute transition-all duration-500",
448
306
  item,
@@ -455,14 +313,14 @@ var ResponsiveGrid = ({ classNames, Cell, gap = DEFAULT_GAP, getId: getId2 = def
455
313
  }
456
314
  };
457
315
  var SoloItem = ({ debug, id }) => {
458
- var _effect = _useSignals5();
316
+ var _effect = _useSignals4();
459
317
  try {
460
- return /* @__PURE__ */ React5.createElement(ResponsiveContainer, null, /* @__PURE__ */ React5.createElement("div", {
318
+ return /* @__PURE__ */ React4.createElement(ResponsiveContainer, null, /* @__PURE__ */ React4.createElement("div", {
461
319
  "data-grid-item": id,
462
- className: mx4("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
463
- }, /* @__PURE__ */ React5.createElement("img", {
320
+ className: mx3("aspect-video overflow-hidden", debug && "z-20 border-2 border-primary-500")
321
+ }, /* @__PURE__ */ React4.createElement("img", {
464
322
  alt: "placeholder video",
465
- className: mx4("opacity-0", maxImageSize)
323
+ className: mx3("opacity-0", maxImageSize)
466
324
  })));
467
325
  } finally {
468
326
  _effect.f();
@@ -532,15 +390,15 @@ var fitAspectRatio = (outerWidth, outerHeight, aspectRatio) => {
532
390
  };
533
391
 
534
392
  // src/components/ResponsiveGrid/ResponsiveGridItem.tsx
535
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
536
- import React6, { useEffect as useEffect4, useState as useState2 } from "react";
537
- import { Icon as Icon2, IconButton as IconButton2, useTranslation as useTranslation2 } from "@dxos/react-ui";
393
+ import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
394
+ import React5, { useEffect as useEffect4, useState as useState2 } from "react";
395
+ import { Icon, IconButton, useTranslation } from "@dxos/react-ui";
538
396
  import { Waveform } from "@dxos/react-ui-sfx";
539
- import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/react-ui-theme";
397
+ import { groupHoverControlItemWithTransition, mx as mx4 } from "@dxos/react-ui-theme";
540
398
  var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinned, screenshare, video, mute, wave, speaking, onClick }) => {
541
- var _effect = _useSignals6();
399
+ var _effect = _useSignals5();
542
400
  try {
543
- const { t } = useTranslation2(meta.id);
401
+ const { t } = useTranslation(meta.id);
544
402
  const iconProps = {
545
403
  wave: {
546
404
  icon: "ph--hand-waving--duotone",
@@ -566,32 +424,32 @@ var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinne
566
424
  }, [
567
425
  speaking
568
426
  ]);
569
- return /* @__PURE__ */ React6.createElement("div", {
570
- className: mx5("relative w-full h-full group", "rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500", speakingIndicator ? "outline-green-500" : !video && "outline-separator", classNames),
427
+ return /* @__PURE__ */ React5.createElement("div", {
428
+ className: mx4("relative w-full h-full group", "rounded-md outline outline-2 outline-neutral-900 transition-[outline-color] duration-500", speakingIndicator ? "outline-green-500" : !video && "outline-separator", classNames),
571
429
  style
572
- }, children, onClick && /* @__PURE__ */ React6.createElement("div", {
430
+ }, children, onClick && /* @__PURE__ */ React5.createElement("div", {
573
431
  className: "z-10 absolute top-1 right-1 flex"
574
- }, /* @__PURE__ */ React6.createElement(IconButton2, {
575
- classNames: mx5("p-1 min-bs-1 rounded", groupHoverControlItemWithTransition2),
432
+ }, /* @__PURE__ */ React5.createElement(IconButton, {
433
+ classNames: mx4("p-1 min-bs-1 rounded", groupHoverControlItemWithTransition),
576
434
  iconOnly: true,
577
435
  icon: pinned ? "ph--x--regular" : "ph--arrows-out--regular",
578
436
  size: pinned ? 5 : 4,
579
437
  label: pinned ? t("icon unpin") : t("icon pin"),
580
438
  onClick: () => onClick?.(item)
581
- })), name && /* @__PURE__ */ React6.createElement("div", {
439
+ })), name && /* @__PURE__ */ React5.createElement("div", {
582
440
  className: "z-10 absolute bottom-1 left-8 right-1 flex justify-end gap-1 items-center"
583
- }, screenshare && /* @__PURE__ */ React6.createElement(Icon2, {
441
+ }, screenshare && /* @__PURE__ */ React5.createElement(Icon, {
584
442
  icon: "ph--broadcast--regular",
585
443
  size: pinned ? 5 : 4
586
- }), /* @__PURE__ */ React6.createElement("div", {
587
- className: mx5("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded", pinned ? "px-2" : "px-1 text-xs")
588
- }, name)), /* @__PURE__ */ React6.createElement("div", {
444
+ }), /* @__PURE__ */ React5.createElement("div", {
445
+ className: mx4("bg-neutral-800 text-neutral-100 py-0.5 truncate rounded", pinned ? "px-2" : "px-1 text-xs")
446
+ }, name)), /* @__PURE__ */ React5.createElement("div", {
589
447
  className: "z-10 absolute bottom-1 left-1 flex"
590
- }, speaking && /* @__PURE__ */ React6.createElement(Waveform, {
448
+ }, speaking && /* @__PURE__ */ React5.createElement(Waveform, {
591
449
  active: true,
592
450
  size: pinned ? 5 : 4
593
- }) || props && /* @__PURE__ */ React6.createElement(IconButton2, {
594
- classNames: mx5("p-1 min-bs-1 rounded", props?.classNames),
451
+ }) || props && /* @__PURE__ */ React5.createElement(IconButton, {
452
+ classNames: mx4("p-1 min-bs-1 rounded", props?.classNames),
595
453
  icon: props?.icon,
596
454
  label: props?.label,
597
455
  size: pinned ? 5 : 4,
@@ -605,9 +463,9 @@ var ResponsiveGridItem = ({ children, classNames, item, style, name, self, pinne
605
463
  // src/components/Participant/Participant.tsx
606
464
  var SCREENSHARE_SUFFIX = "_screenshare";
607
465
  var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
608
- var _effect = _useSignals7();
466
+ var _effect = _useSignals6();
609
467
  try {
610
- const call = useCapability2(ThreadCapabilities.CallManager);
468
+ const call = useCapability(ThreadCapabilities.CallManager);
611
469
  const isSelf = call.self.id !== void 0 && user.id !== void 0 && user.id.startsWith(call.self.id);
612
470
  const isScreenshare = user.id?.endsWith(SCREENSHARE_SUFFIX);
613
471
  const pulledVideoStream = call.getVideoStream(isScreenshare || !isSelf ? user.tracks?.video : void 0);
@@ -626,7 +484,7 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
626
484
  call.media.screenshareVideoStream,
627
485
  pulledVideoStream
628
486
  ]);
629
- return /* @__PURE__ */ React7.createElement(ResponsiveGridItem, {
487
+ return /* @__PURE__ */ React6.createElement(ResponsiveGridItem, {
630
488
  ...props,
631
489
  item: user,
632
490
  name: user.name,
@@ -637,7 +495,7 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
637
495
  wave: user.raisedHand,
638
496
  speaking: user.speaking,
639
497
  debug
640
- }, /* @__PURE__ */ React7.createElement(VideoObject, {
498
+ }, /* @__PURE__ */ React6.createElement(VideoObject, {
641
499
  videoStream,
642
500
  flip: isSelf && !isScreenshare,
643
501
  contain: !!isScreenshare,
@@ -650,11 +508,11 @@ var Participant = /* @__PURE__ */ memo2(({ item: user, debug, ...props }) => {
650
508
  Participant.displayName = "Participant";
651
509
 
652
510
  // src/components/Participant/ParticipantGrid.tsx
653
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
654
- import React8, { useEffect as useEffect5, useMemo as useMemo3, useState as useState3 } from "react";
511
+ import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
512
+ import React7, { useEffect as useEffect5, useMemo as useMemo3, useState as useState3 } from "react";
655
513
  var getId = (user) => user.id;
656
514
  var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
657
- var _effect = _useSignals8();
515
+ var _effect = _useSignals7();
658
516
  try {
659
517
  const [pinned, setPinned] = useState3();
660
518
  const allUsers = useMemo3(() => {
@@ -708,7 +566,7 @@ var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
708
566
  return 0;
709
567
  }
710
568
  });
711
- return /* @__PURE__ */ React8.createElement(ResponsiveGrid, {
569
+ return /* @__PURE__ */ React7.createElement(ResponsiveGrid, {
712
570
  classNames,
713
571
  Cell: Participant,
714
572
  debug,
@@ -723,6 +581,148 @@ var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
723
581
  }
724
582
  };
725
583
 
584
+ // src/components/Call/Toolbar.tsx
585
+ import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
586
+ import React8 from "react";
587
+ import { useAppGraph, useCapability as useCapability2 } from "@dxos/app-framework";
588
+ import { useActions, useNode } from "@dxos/plugin-graph";
589
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
590
+ import { Icon as Icon2, IconButton as IconButton2, Toolbar as NativeToolbar, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
591
+ import { groupHoverControlItemWithTransition as groupHoverControlItemWithTransition2, mx as mx5 } from "@dxos/react-ui-theme";
592
+ var Toolbar = ({ classNames, channel, participants, autoHideControls = true, onJoin, onLeave }) => {
593
+ var _effect = _useSignals8();
594
+ try {
595
+ const { t } = useTranslation2(meta.id);
596
+ const { graph } = useAppGraph();
597
+ const call = useCapability2(ThreadCapabilities.CallManager);
598
+ const node = useNode(graph, channel && fullyQualifiedId(channel));
599
+ const actions = useActions(graph, node?.id).filter((action) => action.properties.disposition === "toolbar");
600
+ const isScreensharing = call.media.screenshareTrack !== void 0;
601
+ const canSharescreen = typeof navigator.mediaDevices !== "undefined" && navigator.mediaDevices.getDisplayMedia !== void 0;
602
+ return /* @__PURE__ */ React8.createElement("div", {
603
+ className: mx5("z-20 flex justify-center m-8", autoHideControls && groupHoverControlItemWithTransition2)
604
+ }, /* @__PURE__ */ React8.createElement(NativeToolbar.Root, {
605
+ classNames: [
606
+ "p-2 bg-modalSurface rounded-md shadow-md",
607
+ classNames
608
+ ]
609
+ }, /* @__PURE__ */ React8.createElement(ToggleButton, {
610
+ active: call.media.audioEnabled,
611
+ state: {
612
+ on: {
613
+ icon: "ph--microphone--regular",
614
+ label: t("mic off"),
615
+ onClick: () => call.turnAudioOff(),
616
+ classNames: "bg-callActive"
617
+ },
618
+ off: {
619
+ icon: "ph--microphone-slash--duotone",
620
+ label: t("mic on"),
621
+ onClick: () => call.turnAudioOn(),
622
+ classNames: [
623
+ call.joined && "bg-callAlert"
624
+ ]
625
+ }
626
+ }
627
+ }), /* @__PURE__ */ React8.createElement(ToggleButton, {
628
+ active: call.media.videoEnabled,
629
+ state: {
630
+ on: {
631
+ icon: "ph--video-camera--regular",
632
+ label: t("camera off"),
633
+ onClick: () => call.turnVideoOff()
634
+ },
635
+ off: {
636
+ icon: "ph--video-camera-slash--duotone",
637
+ label: t("camera on"),
638
+ onClick: () => call.turnVideoOn()
639
+ }
640
+ }
641
+ }), participants !== void 0 && /* @__PURE__ */ React8.createElement("div", {
642
+ className: "flex justify-center items-center gap-2 is-[5rem] text-xs text-subdued"
643
+ }, /* @__PURE__ */ React8.createElement(Icon2, {
644
+ icon: "ph--users--regular",
645
+ size: 4
646
+ }), /* @__PURE__ */ React8.createElement("div", null, participants)) || /* @__PURE__ */ React8.createElement(NativeToolbar.Separator, {
647
+ variant: "gap"
648
+ }), call.joined && /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(ToggleButton, {
649
+ disabled: !canSharescreen,
650
+ active: isScreensharing,
651
+ state: {
652
+ on: {
653
+ icon: "ph--monitor--regular",
654
+ label: t("screenshare off"),
655
+ onClick: () => call.turnScreenshareOff()
656
+ },
657
+ off: {
658
+ icon: "ph--monitor-arrow-up--duotone",
659
+ label: t("screenshare on"),
660
+ onClick: () => call.turnScreenshareOn()
661
+ }
662
+ }
663
+ }), actions.map((action) => /* @__PURE__ */ React8.createElement(IconButton2, {
664
+ key: action.id,
665
+ ...defaultButtonProps,
666
+ icon: action.properties.icon,
667
+ label: toLocalizedString(action.properties.label, t),
668
+ classNames: action.properties.classNames,
669
+ onClick: () => action.data({
670
+ node
671
+ })
672
+ })), /* @__PURE__ */ React8.createElement(ToggleButton, {
673
+ active: call.raisedHand,
674
+ state: {
675
+ on: {
676
+ icon: "ph--hand-waving--regular",
677
+ label: t("lower hand"),
678
+ onClick: () => call.setRaisedHand(false),
679
+ classNames: [
680
+ call.joined && "bg-callAlert"
681
+ ]
682
+ },
683
+ off: {
684
+ icon: "ph--hand-palm--duotone",
685
+ label: t("raise hand"),
686
+ onClick: () => call.setRaisedHand(true)
687
+ }
688
+ }
689
+ })), call.joined ? /* @__PURE__ */ React8.createElement(IconButton2, {
690
+ variant: "destructive",
691
+ icon: "ph--phone-x--regular",
692
+ label: t("leave call"),
693
+ onClick: onLeave
694
+ }) : /* @__PURE__ */ React8.createElement(IconButton2, {
695
+ variant: "primary",
696
+ icon: "ph--phone-incoming--regular",
697
+ label: t("join call"),
698
+ onClick: onJoin
699
+ })));
700
+ } finally {
701
+ _effect.f();
702
+ }
703
+ };
704
+ Toolbar.displayName = "MeetingToolbar";
705
+ var defaultButtonProps = {
706
+ size: 5,
707
+ iconOnly: true
708
+ };
709
+ var ToggleButton = ({ active, state }) => {
710
+ var _effect = _useSignals8();
711
+ try {
712
+ return /* @__PURE__ */ React8.createElement(IconButton2, {
713
+ ...defaultButtonProps,
714
+ classNames: [
715
+ active ? state.on.classNames ?? "bg-callActive" : state.off.classNames
716
+ ],
717
+ icon: active ? state.on.icon : state.off.icon,
718
+ label: active ? state.on.label : state.off.label,
719
+ onClick: active ? state.on.onClick : state.off.onClick
720
+ });
721
+ } finally {
722
+ _effect.f();
723
+ }
724
+ };
725
+
726
726
  // src/components/Call/Call.tsx
727
727
  var CallRoot = ({ children }) => {
728
728
  var _effect = _useSignals9();
@@ -802,7 +802,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
802
802
  useEffect6(() => {
803
803
  const ctx = new Context(void 0, {
804
804
  F: __dxlog_file2,
805
- L: 48
805
+ L: 49
806
806
  });
807
807
  callManager.left.on(ctx, (roomId2) => {
808
808
  extensions.forEach((extension) => {
@@ -844,7 +844,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
844
844
  } catch (err) {
845
845
  log.catch(err, void 0, {
846
846
  F: __dxlog_file2,
847
- L: 92,
847
+ L: 93,
848
848
  S: void 0,
849
849
  C: (f, a) => f(...a)
850
850
  });
@@ -860,7 +860,7 @@ var ChannelContainer = ({ channel, roomId: _roomId, role, fullscreen }) => {
860
860
  } catch (err) {
861
861
  log.catch(err, void 0, {
862
862
  F: __dxlog_file2,
863
- L: 104,
863
+ L: 105,
864
864
  S: void 0,
865
865
  C: (f, a) => f(...a)
866
866
  });
@@ -982,4 +982,4 @@ export {
982
982
  ChannelContainer,
983
983
  ChannelContainer_default
984
984
  };
985
- //# sourceMappingURL=chunk-C3XFMUAY.mjs.map
985
+ //# sourceMappingURL=chunk-YIDU3DXK.mjs.map