@signalwire/web-components 4.0.0-beta.10 → 4.0.0-beta.12

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 (352) hide show
  1. package/README.md +48 -55
  2. package/dist/_virtual/_commonjsHelpers.js +9 -0
  3. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  4. package/dist/_virtual/prism-python.js +28 -0
  5. package/dist/_virtual/prism-python.js.map +1 -0
  6. package/dist/_virtual/prism-python2.js +5 -0
  7. package/dist/_virtual/prism-python2.js.map +1 -0
  8. package/dist/_virtual/prism-typescript.js +28 -0
  9. package/dist/_virtual/prism-typescript.js.map +1 -0
  10. package/dist/_virtual/prism-typescript2.js +5 -0
  11. package/dist/_virtual/prism-typescript2.js.map +1 -0
  12. package/dist/_virtual/prism.js +28 -0
  13. package/dist/_virtual/prism.js.map +1 -0
  14. package/dist/_virtual/prism2.js +5 -0
  15. package/dist/_virtual/prism2.js.map +1 -0
  16. package/dist/assets/sw_background.webp.js +5 -0
  17. package/dist/assets/sw_background.webp.js.map +1 -0
  18. package/dist/components/UI/DEFAULT_BACKGROUND.d.ts +4 -0
  19. package/dist/components/UI/DEFAULT_BACKGROUND.d.ts.map +1 -0
  20. package/dist/components/UI/DEFAULT_BACKGROUND.js +5 -0
  21. package/dist/components/UI/DEFAULT_BACKGROUND.js.map +1 -0
  22. package/dist/components/UI/controls/sw-ui-control-bar.d.ts +114 -0
  23. package/dist/components/UI/controls/sw-ui-control-bar.d.ts.map +1 -0
  24. package/dist/components/UI/controls/sw-ui-control-bar.js +324 -0
  25. package/dist/components/UI/controls/sw-ui-control-bar.js.map +1 -0
  26. package/dist/components/UI/controls/sw-ui-dialpad.d.ts +67 -0
  27. package/dist/components/UI/controls/sw-ui-dialpad.d.ts.map +1 -0
  28. package/dist/components/UI/controls/sw-ui-dialpad.js +359 -0
  29. package/dist/components/UI/controls/sw-ui-dialpad.js.map +1 -0
  30. package/dist/components/UI/controls/sw-ui-dropup.d.ts +42 -0
  31. package/dist/components/UI/controls/sw-ui-dropup.d.ts.map +1 -0
  32. package/dist/components/UI/controls/sw-ui-dropup.js +137 -0
  33. package/dist/components/UI/controls/sw-ui-dropup.js.map +1 -0
  34. package/dist/components/UI/controls/sw-ui-split-button.d.ts +44 -0
  35. package/dist/components/UI/controls/sw-ui-split-button.d.ts.map +1 -0
  36. package/dist/components/UI/controls/sw-ui-split-button.js +177 -0
  37. package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -0
  38. package/dist/components/UI/icons/backspace.svg.js +10 -0
  39. package/dist/components/UI/icons/backspace.svg.js.map +1 -0
  40. package/dist/components/UI/icons/camera-off.svg.js +8 -0
  41. package/dist/components/UI/icons/camera-off.svg.js.map +1 -0
  42. package/dist/components/UI/icons/camera-on.svg.js +8 -0
  43. package/dist/components/UI/icons/camera-on.svg.js.map +1 -0
  44. package/dist/components/UI/icons/check-circle.svg.js +6 -0
  45. package/dist/components/UI/icons/check-circle.svg.js.map +1 -0
  46. package/dist/components/UI/icons/chevron-up.svg.js +8 -0
  47. package/dist/components/UI/icons/chevron-up.svg.js.map +1 -0
  48. package/dist/components/UI/icons/close.svg.js +6 -0
  49. package/dist/components/UI/icons/close.svg.js.map +1 -0
  50. package/dist/components/UI/icons/copy.svg.js +6 -0
  51. package/dist/components/UI/icons/copy.svg.js.map +1 -0
  52. package/dist/components/UI/icons/download.svg.js +6 -0
  53. package/dist/components/UI/icons/download.svg.js.map +1 -0
  54. package/dist/components/UI/icons/fullscreen-exit.svg.js +8 -0
  55. package/dist/components/UI/icons/fullscreen-exit.svg.js.map +1 -0
  56. package/dist/components/UI/icons/fullscreen.svg.js +8 -0
  57. package/dist/components/UI/icons/fullscreen.svg.js.map +1 -0
  58. package/dist/components/UI/icons/hand-raise.svg.js +6 -0
  59. package/dist/components/UI/icons/hand-raise.svg.js.map +1 -0
  60. package/dist/components/UI/icons/icons.d.ts +31 -0
  61. package/dist/components/UI/icons/icons.d.ts.map +1 -0
  62. package/dist/components/UI/icons/icons.js +60 -0
  63. package/dist/components/UI/icons/icons.js.map +1 -0
  64. package/dist/components/UI/icons/index.d.ts +4 -0
  65. package/dist/components/UI/icons/index.d.ts.map +1 -0
  66. package/dist/components/UI/icons/info-circle.svg.js +6 -0
  67. package/dist/components/UI/icons/info-circle.svg.js.map +1 -0
  68. package/dist/components/UI/icons/mic-off.svg.js +8 -0
  69. package/dist/components/UI/icons/mic-off.svg.js.map +1 -0
  70. package/dist/components/UI/icons/mic-on.svg.js +8 -0
  71. package/dist/components/UI/icons/mic-on.svg.js.map +1 -0
  72. package/dist/components/UI/icons/person.svg.js +8 -0
  73. package/dist/components/UI/icons/person.svg.js.map +1 -0
  74. package/dist/components/UI/icons/phone-call.svg.js +8 -0
  75. package/dist/components/UI/icons/phone-call.svg.js.map +1 -0
  76. package/dist/components/UI/icons/phone-end.svg.js +8 -0
  77. package/dist/components/UI/icons/phone-end.svg.js.map +1 -0
  78. package/dist/components/UI/icons/room.svg.js +8 -0
  79. package/dist/components/UI/icons/room.svg.js.map +1 -0
  80. package/dist/components/UI/icons/screen-share-off.svg.js +9 -0
  81. package/dist/components/UI/icons/screen-share-off.svg.js.map +1 -0
  82. package/dist/components/UI/icons/screen-share.svg.js +9 -0
  83. package/dist/components/UI/icons/screen-share.svg.js.map +1 -0
  84. package/dist/components/UI/icons/sendIcon.svg.js +9 -0
  85. package/dist/components/UI/icons/sendIcon.svg.js.map +1 -0
  86. package/dist/components/UI/icons/settings.svg.js +8 -0
  87. package/dist/components/UI/icons/settings.svg.js.map +1 -0
  88. package/dist/components/UI/icons/speaker-off.svg.js +8 -0
  89. package/dist/components/UI/icons/speaker-off.svg.js.map +1 -0
  90. package/dist/components/UI/icons/speaker-on.svg.js +8 -0
  91. package/dist/components/UI/icons/speaker-on.svg.js.map +1 -0
  92. package/dist/components/UI/icons/spinner.svg.js +9 -0
  93. package/dist/components/UI/icons/spinner.svg.js.map +1 -0
  94. package/dist/components/UI/icons/sw-logo.svg.js +11 -0
  95. package/dist/components/UI/icons/sw-logo.svg.js.map +1 -0
  96. package/dist/components/UI/icons/sw-ui-icon.d.ts +28 -0
  97. package/dist/components/UI/icons/sw-ui-icon.d.ts.map +1 -0
  98. package/dist/components/UI/icons/sw-ui-icon.js +47 -0
  99. package/dist/components/UI/icons/sw-ui-icon.js.map +1 -0
  100. package/dist/components/UI/icons/transcript.svg.js +10 -0
  101. package/dist/components/UI/icons/transcript.svg.js.map +1 -0
  102. package/dist/components/UI/index.d.ts +18 -0
  103. package/dist/components/UI/index.d.ts.map +1 -0
  104. package/dist/components/UI/layout/sw-ui-background.d.ts +33 -0
  105. package/dist/components/UI/layout/sw-ui-background.d.ts.map +1 -0
  106. package/dist/components/UI/layout/sw-ui-background.js +106 -0
  107. package/dist/components/UI/layout/sw-ui-background.js.map +1 -0
  108. package/dist/components/UI/layout/sw-ui-call-layout.d.ts +69 -0
  109. package/dist/components/UI/layout/sw-ui-call-layout.d.ts.map +1 -0
  110. package/dist/components/UI/layout/sw-ui-call-layout.js +278 -0
  111. package/dist/components/UI/layout/sw-ui-call-layout.js.map +1 -0
  112. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts +50 -0
  113. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts.map +1 -0
  114. package/dist/components/UI/layout/sw-ui-content-drawer.js +413 -0
  115. package/dist/components/UI/layout/sw-ui-content-drawer.js.map +1 -0
  116. package/dist/components/UI/layout/sw-ui-modal.d.ts +31 -0
  117. package/dist/components/UI/layout/sw-ui-modal.d.ts.map +1 -0
  118. package/dist/components/UI/layout/sw-ui-modal.js +150 -0
  119. package/dist/components/UI/layout/sw-ui-modal.js.map +1 -0
  120. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts +15 -0
  121. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts.map +1 -0
  122. package/dist/components/UI/layout/sw-ui-responsive-container.js +78 -0
  123. package/dist/components/UI/layout/sw-ui-responsive-container.js.map +1 -0
  124. package/dist/components/UI/sw-ui-alert.d.ts +37 -0
  125. package/dist/components/UI/sw-ui-alert.d.ts.map +1 -0
  126. package/dist/components/UI/sw-ui-alert.js +126 -0
  127. package/dist/components/UI/sw-ui-alert.js.map +1 -0
  128. package/dist/components/UI/sw-ui-transcript-view.d.ts +56 -0
  129. package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -0
  130. package/dist/components/UI/sw-ui-transcript-view.js +341 -0
  131. package/dist/components/UI/sw-ui-transcript-view.js.map +1 -0
  132. package/dist/components/{audio-level.d.ts → sw-audio-level.d.ts} +44 -4
  133. package/dist/components/sw-audio-level.d.ts.map +1 -0
  134. package/dist/components/sw-audio-level.js +252 -0
  135. package/dist/components/sw-audio-level.js.map +1 -0
  136. package/dist/components/sw-call-controls.d.ts +58 -0
  137. package/dist/components/sw-call-controls.d.ts.map +1 -0
  138. package/dist/components/sw-call-controls.js +186 -0
  139. package/dist/components/sw-call-controls.js.map +1 -0
  140. package/dist/components/sw-call-dialpad.d.ts +52 -0
  141. package/dist/components/sw-call-dialpad.d.ts.map +1 -0
  142. package/dist/components/sw-call-dialpad.js +70 -0
  143. package/dist/components/sw-call-dialpad.js.map +1 -0
  144. package/dist/components/sw-call-media.d.ts +68 -0
  145. package/dist/components/sw-call-media.d.ts.map +1 -0
  146. package/dist/components/sw-call-media.js +220 -0
  147. package/dist/components/sw-call-media.js.map +1 -0
  148. package/dist/components/sw-call-provider.d.ts +41 -0
  149. package/dist/components/sw-call-provider.d.ts.map +1 -0
  150. package/dist/components/sw-call-provider.js +37 -0
  151. package/dist/components/sw-call-provider.js.map +1 -0
  152. package/dist/components/sw-call-status.d.ts +50 -0
  153. package/dist/components/sw-call-status.d.ts.map +1 -0
  154. package/dist/components/sw-call-status.js +203 -0
  155. package/dist/components/sw-call-status.js.map +1 -0
  156. package/dist/components/sw-call-widget/client-factory.d.ts +6 -0
  157. package/dist/components/sw-call-widget/client-factory.d.ts.map +1 -0
  158. package/dist/components/sw-call-widget/client-factory.js +25 -0
  159. package/dist/components/sw-call-widget/client-factory.js.map +1 -0
  160. package/dist/components/sw-call-widget/sw-call-widget.d.ts +110 -0
  161. package/dist/components/sw-call-widget/sw-call-widget.d.ts.map +1 -0
  162. package/dist/components/sw-call-widget/sw-call-widget.js +250 -0
  163. package/dist/components/sw-call-widget/sw-call-widget.js.map +1 -0
  164. package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts +17 -0
  165. package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts.map +1 -0
  166. package/dist/components/sw-call-widget/sw-call-widget.templates.js +80 -0
  167. package/dist/components/sw-call-widget/sw-call-widget.templates.js.map +1 -0
  168. package/dist/components/sw-click-to-call.d.ts +39 -0
  169. package/dist/components/sw-click-to-call.d.ts.map +1 -0
  170. package/dist/components/sw-click-to-call.js +87 -0
  171. package/dist/components/sw-click-to-call.js.map +1 -0
  172. package/dist/components/sw-device-selector/index.d.ts +2 -0
  173. package/dist/components/sw-device-selector/index.d.ts.map +1 -0
  174. package/dist/components/sw-device-selector/sw-device-selector.d.ts +69 -0
  175. package/dist/components/sw-device-selector/sw-device-selector.d.ts.map +1 -0
  176. package/dist/components/sw-device-selector/sw-device-selector.js +277 -0
  177. package/dist/components/sw-device-selector/sw-device-selector.js.map +1 -0
  178. package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts +2 -0
  179. package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts.map +1 -0
  180. package/dist/components/sw-device-selector/sw-device-selector.styles.js +238 -0
  181. package/dist/components/sw-device-selector/sw-device-selector.styles.js.map +1 -0
  182. package/dist/components/{directory.d.ts → sw-directory.d.ts} +17 -3
  183. package/dist/components/sw-directory.d.ts.map +1 -0
  184. package/dist/components/sw-directory.js +434 -0
  185. package/dist/components/sw-directory.js.map +1 -0
  186. package/dist/components/sw-local-camera.d.ts +53 -0
  187. package/dist/components/sw-local-camera.d.ts.map +1 -0
  188. package/dist/components/sw-local-camera.js +147 -0
  189. package/dist/components/sw-local-camera.js.map +1 -0
  190. package/dist/components/sw-participant-controls.d.ts +58 -0
  191. package/dist/components/sw-participant-controls.d.ts.map +1 -0
  192. package/dist/components/sw-participant-controls.js +305 -0
  193. package/dist/components/sw-participant-controls.js.map +1 -0
  194. package/dist/components/sw-participants.d.ts +55 -0
  195. package/dist/components/sw-participants.d.ts.map +1 -0
  196. package/dist/components/sw-participants.js +319 -0
  197. package/dist/components/sw-participants.js.map +1 -0
  198. package/dist/components/sw-self-media.d.ts +46 -0
  199. package/dist/components/sw-self-media.d.ts.map +1 -0
  200. package/dist/components/sw-self-media.js +106 -0
  201. package/dist/components/sw-self-media.js.map +1 -0
  202. package/dist/context/CallStateContextController.d.ts +31 -0
  203. package/dist/context/CallStateContextController.d.ts.map +1 -0
  204. package/dist/context/CallStateContextController.js +125 -0
  205. package/dist/context/CallStateContextController.js.map +1 -0
  206. package/dist/context/DevicesContextController.d.ts +38 -0
  207. package/dist/context/DevicesContextController.d.ts.map +1 -0
  208. package/dist/context/DevicesContextController.js +124 -0
  209. package/dist/context/DevicesContextController.js.map +1 -0
  210. package/dist/context/TranscriptController.d.ts +32 -0
  211. package/dist/context/TranscriptController.d.ts.map +1 -0
  212. package/dist/context/TranscriptController.js +113 -0
  213. package/dist/context/TranscriptController.js.map +1 -0
  214. package/dist/context/UserEventController.d.ts +26 -0
  215. package/dist/context/UserEventController.d.ts.map +1 -0
  216. package/dist/context/UserEventController.js +55 -0
  217. package/dist/context/UserEventController.js.map +1 -0
  218. package/dist/context/call-state-context.d.ts +75 -0
  219. package/dist/context/call-state-context.d.ts.map +1 -0
  220. package/dist/context/call-state-context.js +39 -0
  221. package/dist/context/call-state-context.js.map +1 -0
  222. package/dist/context/chat-state.d.ts +41 -0
  223. package/dist/context/chat-state.d.ts.map +1 -0
  224. package/dist/context/chat-state.js +61 -0
  225. package/dist/context/chat-state.js.map +1 -0
  226. package/dist/context/devices-context.d.ts +28 -0
  227. package/dist/context/devices-context.d.ts.map +1 -0
  228. package/dist/context/devices-context.js +6 -0
  229. package/dist/context/devices-context.js.map +1 -0
  230. package/dist/context/index.d.ts +9 -1
  231. package/dist/context/index.d.ts.map +1 -1
  232. package/dist/context/transcript-context.d.ts +9 -0
  233. package/dist/context/transcript-context.d.ts.map +1 -0
  234. package/dist/context/transcript-context.js +6 -0
  235. package/dist/context/transcript-context.js.map +1 -0
  236. package/dist/context/types.d.ts +9 -0
  237. package/dist/context/types.d.ts.map +1 -0
  238. package/dist/embed/signalwire-web-components-embed.iife.js +3225 -0
  239. package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -0
  240. package/dist/embed/signalwire-web-components-embed.umd.cjs +3225 -0
  241. package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -0
  242. package/dist/embed.d.ts +20 -0
  243. package/dist/embed.d.ts.map +1 -0
  244. package/dist/index.d.ts +19 -13
  245. package/dist/index.d.ts.map +1 -1
  246. package/dist/index.js +83 -34
  247. package/dist/index.js.map +1 -1
  248. package/dist/node_modules/dompurify/dist/purify.es.js +597 -0
  249. package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
  250. package/dist/node_modules/marked/lib/marked.esm.js +1475 -0
  251. package/dist/node_modules/marked/lib/marked.esm.js.map +1 -0
  252. package/dist/node_modules/prismjs/components/prism-bash.js +220 -0
  253. package/dist/node_modules/prismjs/components/prism-bash.js.map +1 -0
  254. package/dist/node_modules/prismjs/components/prism-css.js +56 -0
  255. package/dist/node_modules/prismjs/components/prism-css.js.map +1 -0
  256. package/dist/node_modules/prismjs/components/prism-javascript.js +138 -0
  257. package/dist/node_modules/prismjs/components/prism-javascript.js.map +1 -0
  258. package/dist/node_modules/prismjs/components/prism-json.js +26 -0
  259. package/dist/node_modules/prismjs/components/prism-json.js.map +1 -0
  260. package/dist/node_modules/prismjs/components/prism-markdown.js +301 -0
  261. package/dist/node_modules/prismjs/components/prism-markdown.js.map +1 -0
  262. package/dist/node_modules/prismjs/components/prism-python.js +69 -0
  263. package/dist/node_modules/prismjs/components/prism-python.js.map +1 -0
  264. package/dist/node_modules/prismjs/components/prism-sql.js +34 -0
  265. package/dist/node_modules/prismjs/components/prism-sql.js.map +1 -0
  266. package/dist/node_modules/prismjs/components/prism-typescript.js +53 -0
  267. package/dist/node_modules/prismjs/components/prism-typescript.js.map +1 -0
  268. package/dist/node_modules/prismjs/components/prism-yaml.js +67 -0
  269. package/dist/node_modules/prismjs/components/prism-yaml.js.map +1 -0
  270. package/dist/node_modules/prismjs/prism.js +1165 -0
  271. package/dist/node_modules/prismjs/prism.js.map +1 -0
  272. package/dist/react.d.ts +96 -46
  273. package/dist/theme.css +451 -0
  274. package/dist/theme.css.js +5 -0
  275. package/dist/theme.css.js.map +1 -0
  276. package/dist/types/index.d.ts +9 -33
  277. package/dist/types/index.d.ts.map +1 -1
  278. package/dist/utils/index.d.ts +2 -0
  279. package/dist/utils/index.d.ts.map +1 -1
  280. package/dist/utils/prism.d.ts +4 -0
  281. package/dist/utils/prism.d.ts.map +1 -0
  282. package/dist/utils/prism.js +34 -0
  283. package/dist/utils/prism.js.map +1 -0
  284. package/dist/utils/theme-loader.d.ts +11 -0
  285. package/dist/utils/theme-loader.d.ts.map +1 -0
  286. package/dist/utils/theme-loader.js +17 -0
  287. package/dist/utils/theme-loader.js.map +1 -0
  288. package/dist/utils/transcriptToMarkdown.d.ts +14 -0
  289. package/dist/utils/transcriptToMarkdown.d.ts.map +1 -0
  290. package/dist/utils/transcriptToMarkdown.js +59 -0
  291. package/dist/utils/transcriptToMarkdown.js.map +1 -0
  292. package/dist/utils/use-google-font.d.ts +18 -0
  293. package/dist/utils/use-google-font.d.ts.map +1 -0
  294. package/dist/utils/use-google-font.js +12 -0
  295. package/dist/utils/use-google-font.js.map +1 -0
  296. package/dist/utils/user-variables.d.ts +20 -0
  297. package/dist/utils/user-variables.d.ts.map +1 -0
  298. package/dist/utils/user-variables.js +37 -0
  299. package/dist/utils/user-variables.js.map +1 -0
  300. package/package.json +104 -41
  301. package/dist/components/audio-level.d.ts.map +0 -1
  302. package/dist/components/audio-level.js +0 -203
  303. package/dist/components/audio-level.js.map +0 -1
  304. package/dist/components/call-controls.d.ts +0 -163
  305. package/dist/components/call-controls.d.ts.map +0 -1
  306. package/dist/components/call-controls.js +0 -606
  307. package/dist/components/call-controls.js.map +0 -1
  308. package/dist/components/call-media.d.ts +0 -114
  309. package/dist/components/call-media.d.ts.map +0 -1
  310. package/dist/components/call-media.js +0 -219
  311. package/dist/components/call-media.js.map +0 -1
  312. package/dist/components/call-status.d.ts +0 -68
  313. package/dist/components/call-status.d.ts.map +0 -1
  314. package/dist/components/call-status.js +0 -254
  315. package/dist/components/call-status.js.map +0 -1
  316. package/dist/components/click-to-call.d.ts +0 -123
  317. package/dist/components/click-to-call.d.ts.map +0 -1
  318. package/dist/components/click-to-call.js +0 -428
  319. package/dist/components/click-to-call.js.map +0 -1
  320. package/dist/components/device-selector.d.ts +0 -224
  321. package/dist/components/device-selector.d.ts.map +0 -1
  322. package/dist/components/device-selector.js +0 -685
  323. package/dist/components/device-selector.js.map +0 -1
  324. package/dist/components/dialpad.d.ts +0 -60
  325. package/dist/components/dialpad.d.ts.map +0 -1
  326. package/dist/components/dialpad.js +0 -372
  327. package/dist/components/dialpad.js.map +0 -1
  328. package/dist/components/directory.d.ts.map +0 -1
  329. package/dist/components/directory.js +0 -503
  330. package/dist/components/directory.js.map +0 -1
  331. package/dist/components/example-button.d.ts +0 -20
  332. package/dist/components/example-button.d.ts.map +0 -1
  333. package/dist/components/example-button.js +0 -74
  334. package/dist/components/example-button.js.map +0 -1
  335. package/dist/components/participant-controls.d.ts +0 -94
  336. package/dist/components/participant-controls.d.ts.map +0 -1
  337. package/dist/components/participant-controls.js +0 -468
  338. package/dist/components/participant-controls.js.map +0 -1
  339. package/dist/components/participants.d.ts +0 -116
  340. package/dist/components/participants.d.ts.map +0 -1
  341. package/dist/components/participants.js +0 -394
  342. package/dist/components/participants.js.map +0 -1
  343. package/dist/components/self-media.d.ts +0 -78
  344. package/dist/components/self-media.d.ts.map +0 -1
  345. package/dist/components/self-media.js +0 -129
  346. package/dist/components/self-media.js.map +0 -1
  347. package/dist/context/call-context.d.ts +0 -13
  348. package/dist/context/call-context.d.ts.map +0 -1
  349. package/dist/context/call-context.js +0 -6
  350. package/dist/context/call-context.js.map +0 -1
  351. package/dist/types/index.js +0 -12
  352. package/dist/types/index.js.map +0 -1
@@ -0,0 +1,319 @@
1
+ import { LitElement as p, html as l, css as h } from "lit";
2
+ import { state as d, property as b, customElement as m } from "lit/decorators.js";
3
+ import { consume as g } from "@lit/context";
4
+ import { callStateContext as _ } from "../context/call-state-context.js";
5
+ var v = Object.defineProperty, y = Object.getOwnPropertyDescriptor, a = (e, t, i, s) => {
6
+ for (var r = s > 1 ? void 0 : s ? y(t, i) : t, o = e.length - 1, c; o >= 0; o--)
7
+ (c = e[o]) && (r = (s ? c(t, i, r) : c(r)) || r);
8
+ return s && r && v(t, i, r), r;
9
+ };
10
+ let n = class extends p {
11
+ constructor() {
12
+ super(...arguments), this._directLayoutLayers = [], this._directParticipants = [], this._directSelf = null, this._directSubscriptions = [], this._openMenuId = null, this._handleOutsideClick = (e) => {
13
+ const t = e.target;
14
+ !t.closest(".menu-trigger") && !t.closest(".menu-dropdown") && (this._openMenuId = null);
15
+ }, this._handleEscape = (e) => {
16
+ e.key === "Escape" && this._openMenuId !== null && (this._openMenuId = null);
17
+ };
18
+ }
19
+ connectedCallback() {
20
+ super.connectedCallback(), document.addEventListener("click", this._handleOutsideClick), document.addEventListener("keydown", this._handleEscape);
21
+ }
22
+ disconnectedCallback() {
23
+ super.disconnectedCallback(), document.removeEventListener("click", this._handleOutsideClick), document.removeEventListener("keydown", this._handleEscape), this._teardownDirect();
24
+ }
25
+ updated(e) {
26
+ super.updated(e), e.has("call") && (this._teardownDirect(), this.call && this._directSubscriptions.push(
27
+ this.call.layoutLayers$.subscribe((t) => this._directLayoutLayers = t),
28
+ this.call.participants$.subscribe((t) => this._directParticipants = t),
29
+ this.call.self$.subscribe((t) => this._directSelf = t)
30
+ ));
31
+ }
32
+ _teardownDirect() {
33
+ this._directSubscriptions.forEach((e) => e.unsubscribe()), this._directSubscriptions = [], this._directLayoutLayers = [], this._directParticipants = [], this._directSelf = null;
34
+ }
35
+ // ── Helpers ────────────────────────────────────────────────────────
36
+ _toggleMenu(e, t) {
37
+ t.stopPropagation(), this._openMenuId = this._openMenuId === e ? null : e;
38
+ }
39
+ _getParticipant(e) {
40
+ var i;
41
+ return (this.call ? this._directParticipants : ((i = this._callState) == null ? void 0 : i.participants) ?? []).find((s) => s.id === e);
42
+ }
43
+ async _handleMuteAudio(e, t) {
44
+ t.stopPropagation();
45
+ const i = this._getParticipant(e);
46
+ if (i) {
47
+ try {
48
+ i.audioMuted ? await i.unmute() : await i.mute(), this.dispatchEvent(
49
+ new CustomEvent("sw-participant-mute-audio", {
50
+ detail: { participant: i, memberId: e },
51
+ bubbles: !0,
52
+ composed: !0
53
+ })
54
+ );
55
+ } catch {
56
+ }
57
+ this._openMenuId = null;
58
+ }
59
+ }
60
+ async _handleMuteVideo(e, t) {
61
+ t.stopPropagation();
62
+ const i = this._getParticipant(e);
63
+ if (i) {
64
+ try {
65
+ i.videoMuted ? await i.unmuteVideo() : await i.muteVideo(), this.dispatchEvent(
66
+ new CustomEvent("sw-participant-mute-video", {
67
+ detail: { participant: i, memberId: e },
68
+ bubbles: !0,
69
+ composed: !0
70
+ })
71
+ );
72
+ } catch {
73
+ }
74
+ this._openMenuId = null;
75
+ }
76
+ }
77
+ async _handleRemove(e, t) {
78
+ t.stopPropagation();
79
+ const i = this._getParticipant(e);
80
+ if (i != null && i.remove) {
81
+ try {
82
+ await i.remove(), this.dispatchEvent(
83
+ new CustomEvent("sw-participant-remove", {
84
+ detail: { participant: i, memberId: e },
85
+ bubbles: !0,
86
+ composed: !0
87
+ })
88
+ );
89
+ } catch {
90
+ }
91
+ this._openMenuId = null;
92
+ }
93
+ }
94
+ // ── Render ─────────────────────────────────────────────────────────
95
+ _renderMenuIcon() {
96
+ return l`
97
+ <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
98
+ <circle cx="12" cy="6" r="2" />
99
+ <circle cx="12" cy="12" r="2" />
100
+ <circle cx="12" cy="18" r="2" />
101
+ </svg>
102
+ `;
103
+ }
104
+ _renderMenuDropdown(e) {
105
+ const t = this._getParticipant(e), i = this._openMenuId === e;
106
+ return l`
107
+ <div
108
+ class="menu-dropdown ${i ? "open" : ""}"
109
+ role="menu"
110
+ aria-label="Participant actions"
111
+ >
112
+ <button
113
+ class="menu-item"
114
+ role="menuitem"
115
+ @click=${(s) => this._handleMuteAudio(e, s)}
116
+ aria-label="${t != null && t.audioMuted ? "Unmute audio" : "Mute audio"}"
117
+ >
118
+ ${t != null && t.audioMuted ? "Unmute" : "Mute"}
119
+ </button>
120
+ <button
121
+ class="menu-item"
122
+ role="menuitem"
123
+ @click=${(s) => this._handleMuteVideo(e, s)}
124
+ aria-label="${t != null && t.videoMuted ? "Enable video" : "Disable video"}"
125
+ >
126
+ ${t != null && t.videoMuted ? "Enable video" : "Disable video"}
127
+ </button>
128
+ <button
129
+ class="menu-item danger"
130
+ role="menuitem"
131
+ @click=${(s) => this._handleRemove(e, s)}
132
+ aria-label="Remove participant"
133
+ >
134
+ Remove
135
+ </button>
136
+ </div>
137
+ `;
138
+ }
139
+ _renderOverlay(e, t) {
140
+ const i = e.member_id, s = `member-overlay${t ? " is-self" : ""}`, r = `
141
+ position: absolute;
142
+ top: ${e.y}%;
143
+ left: ${e.x}%;
144
+ width: ${e.width}%;
145
+ height: ${e.height}%;
146
+ opacity: ${e.visible ? 1 : 0};
147
+ overflow: visible;
148
+ transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
149
+ pointer-events: auto;
150
+ z-index: 10;
151
+ `;
152
+ return l`
153
+ <div class="${s}" part="overlay" style="${r}">
154
+ ${t ? null : l`
155
+ <button
156
+ class="menu-trigger"
157
+ part="menu-trigger"
158
+ @click=${(o) => this._toggleMenu(i, o)}
159
+ aria-label="Participant menu"
160
+ aria-expanded="${this._openMenuId === i}"
161
+ aria-haspopup="menu"
162
+ >
163
+ ${this._renderMenuIcon()}
164
+ </button>
165
+ ${this._renderMenuDropdown(i)}
166
+ `}
167
+ <slot name="controls-${i}"></slot>
168
+ </div>
169
+ `;
170
+ }
171
+ render() {
172
+ var s, r, o, c;
173
+ const e = this.call ? this._directLayoutLayers : ((s = this._callState) == null ? void 0 : s.layoutLayers) ?? [], t = this.call ? (r = this._directSelf) == null ? void 0 : r.id : (c = (o = this._callState) == null ? void 0 : o.self) == null ? void 0 : c.id, i = e.filter((u) => u.member_id).map((u) => this._renderOverlay(u, u.member_id === t));
174
+ return l`
175
+ ${i}
176
+ <slot></slot>
177
+ `;
178
+ }
179
+ };
180
+ n.styles = h`
181
+ :host {
182
+ display: contents;
183
+ }
184
+
185
+ .member-overlay {
186
+ box-sizing: border-box;
187
+ box-shadow: inset 0 0 0 8px rgba(255, 0, 0, 0.8);
188
+ background-color: rgba(255, 0, 0, 0.1);
189
+ }
190
+
191
+ .member-overlay.is-self {
192
+ box-shadow: inset 0 0 0 8px rgba(0, 0, 255, 0.8);
193
+ background-color: rgba(0, 0, 255, 0.1);
194
+ }
195
+
196
+ .menu-trigger {
197
+ position: absolute;
198
+ top: 12px;
199
+ left: 12px;
200
+ width: 36px;
201
+ height: 36px;
202
+ border-radius: 50%;
203
+ background: rgba(0, 0, 0, 0.6);
204
+ border: 2px solid rgba(255, 255, 255, 0.3);
205
+ color: white;
206
+ cursor: pointer;
207
+ display: flex;
208
+ align-items: center;
209
+ justify-content: center;
210
+ transition:
211
+ background 0.2s ease,
212
+ transform 0.2s ease,
213
+ border-color 0.2s ease;
214
+ z-index: 20;
215
+ }
216
+
217
+ .menu-trigger:hover {
218
+ background: rgba(0, 0, 0, 0.8);
219
+ border-color: rgba(255, 255, 255, 0.6);
220
+ transform: scale(1.1);
221
+ }
222
+
223
+ .menu-trigger:focus {
224
+ outline: none;
225
+ border-color: #044cf6;
226
+ box-shadow: 0 0 0 3px rgba(4, 78, 246, 0.4);
227
+ }
228
+
229
+ .menu-trigger svg {
230
+ width: 20px;
231
+ height: 20px;
232
+ }
233
+
234
+ .menu-dropdown {
235
+ position: absolute;
236
+ top: 12px;
237
+ left: 56px;
238
+ background: rgba(31, 41, 55, 0.95);
239
+ backdrop-filter: blur(8px);
240
+ border-radius: 8px;
241
+ padding: 8px 0;
242
+ min-width: 160px;
243
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
244
+ z-index: 30;
245
+ opacity: 0;
246
+ visibility: hidden;
247
+ transform: translateX(-10px);
248
+ transition:
249
+ opacity 0.2s ease,
250
+ transform 0.2s ease,
251
+ visibility 0.2s ease;
252
+ }
253
+
254
+ .menu-dropdown.open {
255
+ opacity: 1;
256
+ visibility: visible;
257
+ transform: translateX(0);
258
+ }
259
+
260
+ .menu-item {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 8px;
264
+ padding: 8px 16px;
265
+ color: white;
266
+ font-size: 14px;
267
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
268
+ cursor: pointer;
269
+ transition: background 0.15s ease;
270
+ border: none;
271
+ background: none;
272
+ width: 100%;
273
+ text-align: left;
274
+ }
275
+
276
+ .menu-item:hover {
277
+ background: rgba(255, 255, 255, 0.1);
278
+ }
279
+
280
+ .menu-item svg {
281
+ width: 16px;
282
+ height: 16px;
283
+ flex-shrink: 0;
284
+ }
285
+
286
+ .menu-item.danger {
287
+ color: #ef4444;
288
+ }
289
+
290
+ .menu-item.danger:hover {
291
+ background: rgba(239, 68, 68, 0.2);
292
+ }
293
+ `;
294
+ a([
295
+ g({ context: _, subscribe: !0 }),
296
+ d()
297
+ ], n.prototype, "_callState", 2);
298
+ a([
299
+ b({ type: Object })
300
+ ], n.prototype, "call", 2);
301
+ a([
302
+ d()
303
+ ], n.prototype, "_directLayoutLayers", 2);
304
+ a([
305
+ d()
306
+ ], n.prototype, "_directParticipants", 2);
307
+ a([
308
+ d()
309
+ ], n.prototype, "_directSelf", 2);
310
+ a([
311
+ d()
312
+ ], n.prototype, "_openMenuId", 2);
313
+ n = a([
314
+ m("sw-participants")
315
+ ], n);
316
+ export {
317
+ n as SwParticipants
318
+ };
319
+ //# sourceMappingURL=sw-participants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-participants.js","sources":["../../src/components/sw-participants.ts"],"sourcesContent":["/**\n * SwParticipants Component\n *\n * Renders member overlays based on layoutLayers.\n * Excludes self member and provides slot for <self-media> child component.\n *\n * Input precedence (most specific wins): `.call` > context.\n *\n * @example\n * ```html\n * <sw-participants></sw-participants>\n * <sw-participants .call=${call}></sw-participants>\n * ```\n *\n * @slot - Default slot for overlay content.\n * @slot controls-{memberId} - Per-participant menu content (e.g. `sw-participant-controls`).\n *\n * @fires sw-participant-mute-audio - User muted/unmuted a participant's audio. Detail: `{ participant, memberId }`.\n * @fires sw-participant-mute-video - User muted/unmuted a participant's video. Detail: `{ participant, memberId }`.\n * @fires sw-participant-remove - User removed a participant. Detail: `{ participant, memberId }`.\n */\n\nimport { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\nimport { Subscription } from 'rxjs';\nimport type { CallParticipant, CallSelfParticipant } from '@signalwire/js';\nimport type { Call, LayoutLayer } from '../types/index.js';\nimport { callStateContext, type CallState } from '../context/call-state-context.js';\n\n@customElement('sw-participants')\nexport class SwParticipants extends LitElement {\n static styles = css`\n :host {\n display: contents;\n }\n\n .member-overlay {\n box-sizing: border-box;\n box-shadow: inset 0 0 0 8px rgba(255, 0, 0, 0.8);\n background-color: rgba(255, 0, 0, 0.1);\n }\n\n .member-overlay.is-self {\n box-shadow: inset 0 0 0 8px rgba(0, 0, 255, 0.8);\n background-color: rgba(0, 0, 255, 0.1);\n }\n\n .menu-trigger {\n position: absolute;\n top: 12px;\n left: 12px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: rgba(0, 0, 0, 0.6);\n border: 2px solid rgba(255, 255, 255, 0.3);\n color: white;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition:\n background 0.2s ease,\n transform 0.2s ease,\n border-color 0.2s ease;\n z-index: 20;\n }\n\n .menu-trigger:hover {\n background: rgba(0, 0, 0, 0.8);\n border-color: rgba(255, 255, 255, 0.6);\n transform: scale(1.1);\n }\n\n .menu-trigger:focus {\n outline: none;\n border-color: #044cf6;\n box-shadow: 0 0 0 3px rgba(4, 78, 246, 0.4);\n }\n\n .menu-trigger svg {\n width: 20px;\n height: 20px;\n }\n\n .menu-dropdown {\n position: absolute;\n top: 12px;\n left: 56px;\n background: rgba(31, 41, 55, 0.95);\n backdrop-filter: blur(8px);\n border-radius: 8px;\n padding: 8px 0;\n min-width: 160px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);\n z-index: 30;\n opacity: 0;\n visibility: hidden;\n transform: translateX(-10px);\n transition:\n opacity 0.2s ease,\n transform 0.2s ease,\n visibility 0.2s ease;\n }\n\n .menu-dropdown.open {\n opacity: 1;\n visibility: visible;\n transform: translateX(0);\n }\n\n .menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n color: white;\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n cursor: pointer;\n transition: background 0.15s ease;\n border: none;\n background: none;\n width: 100%;\n text-align: left;\n }\n\n .menu-item:hover {\n background: rgba(255, 255, 255, 0.1);\n }\n\n .menu-item svg {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n }\n\n .menu-item.danger {\n color: #ef4444;\n }\n\n .menu-item.danger:hover {\n background: rgba(239, 68, 68, 0.2);\n }\n `;\n\n @consume({ context: callStateContext, subscribe: true })\n @state()\n private _callState?: CallState;\n\n /** Explicit Call — when set, subscribes directly and bypasses context. */\n @property({ type: Object }) call?: Call;\n\n @state() private _directLayoutLayers: LayoutLayer[] = [];\n @state() private _directParticipants: CallParticipant[] = [];\n @state() private _directSelf: CallSelfParticipant | null = null;\n\n private _directSubscriptions: Subscription[] = [];\n\n @state()\n private _openMenuId: string | null = null;\n\n private _handleOutsideClick = (e: Event): void => {\n const target = e.target as Element;\n if (!target.closest('.menu-trigger') && !target.closest('.menu-dropdown')) {\n this._openMenuId = null;\n }\n };\n\n private _handleEscape = (e: KeyboardEvent): void => {\n if (e.key === 'Escape' && this._openMenuId !== null) {\n this._openMenuId = null;\n }\n };\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n document.addEventListener('keydown', this._handleEscape);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n document.removeEventListener('click', this._handleOutsideClick);\n document.removeEventListener('keydown', this._handleEscape);\n this._teardownDirect();\n }\n\n protected updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has('call')) {\n this._teardownDirect();\n if (this.call) {\n this._directSubscriptions.push(\n this.call.layoutLayers$.subscribe((l) => (this._directLayoutLayers = l)),\n this.call.participants$.subscribe((p) => (this._directParticipants = p)),\n this.call.self$.subscribe((s) => (this._directSelf = s))\n );\n }\n }\n }\n\n private _teardownDirect(): void {\n this._directSubscriptions.forEach((s) => s.unsubscribe());\n this._directSubscriptions = [];\n this._directLayoutLayers = [];\n this._directParticipants = [];\n this._directSelf = null;\n }\n\n // ── Helpers ────────────────────────────────────────────────────────\n\n private _toggleMenu(memberId: string, e: Event): void {\n e.stopPropagation();\n this._openMenuId = this._openMenuId === memberId ? null : memberId;\n }\n\n private _getParticipant(memberId: string) {\n const participants = this.call ? this._directParticipants : this._callState?.participants ?? [];\n return participants.find((p) => p.id === memberId);\n }\n\n private async _handleMuteAudio(memberId: string, e: Event): Promise<void> {\n e.stopPropagation();\n const participant = this._getParticipant(memberId);\n if (!participant) return;\n try {\n if (participant.audioMuted) {\n await participant.unmute();\n } else {\n await participant.mute();\n }\n this.dispatchEvent(\n new CustomEvent('sw-participant-mute-audio', {\n detail: { participant, memberId },\n bubbles: true,\n composed: true,\n })\n );\n } catch {\n // Silently handle error\n }\n this._openMenuId = null;\n }\n\n private async _handleMuteVideo(memberId: string, e: Event): Promise<void> {\n e.stopPropagation();\n const participant = this._getParticipant(memberId);\n if (!participant) return;\n try {\n if (participant.videoMuted) {\n await participant.unmuteVideo();\n } else {\n await participant.muteVideo();\n }\n this.dispatchEvent(\n new CustomEvent('sw-participant-mute-video', {\n detail: { participant, memberId },\n bubbles: true,\n composed: true,\n })\n );\n } catch {\n // Silently handle error\n }\n this._openMenuId = null;\n }\n\n private async _handleRemove(memberId: string, e: Event): Promise<void> {\n e.stopPropagation();\n const participant = this._getParticipant(memberId);\n if (!participant?.remove) return;\n try {\n await participant.remove();\n this.dispatchEvent(\n new CustomEvent('sw-participant-remove', {\n detail: { participant, memberId },\n bubbles: true,\n composed: true,\n })\n );\n } catch {\n // Silently handle error\n }\n this._openMenuId = null;\n }\n\n // ── Render ─────────────────────────────────────────────────────────\n\n private _renderMenuIcon() {\n return html`\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"6\" r=\"2\" />\n <circle cx=\"12\" cy=\"12\" r=\"2\" />\n <circle cx=\"12\" cy=\"18\" r=\"2\" />\n </svg>\n `;\n }\n\n private _renderMenuDropdown(memberId: string) {\n const participant = this._getParticipant(memberId);\n const isOpen = this._openMenuId === memberId;\n\n return html`\n <div\n class=\"menu-dropdown ${isOpen ? 'open' : ''}\"\n role=\"menu\"\n aria-label=\"Participant actions\"\n >\n <button\n class=\"menu-item\"\n role=\"menuitem\"\n @click=${(e: Event) => this._handleMuteAudio(memberId, e)}\n aria-label=\"${participant?.audioMuted ? 'Unmute audio' : 'Mute audio'}\"\n >\n ${participant?.audioMuted ? 'Unmute' : 'Mute'}\n </button>\n <button\n class=\"menu-item\"\n role=\"menuitem\"\n @click=${(e: Event) => this._handleMuteVideo(memberId, e)}\n aria-label=\"${participant?.videoMuted ? 'Enable video' : 'Disable video'}\"\n >\n ${participant?.videoMuted ? 'Enable video' : 'Disable video'}\n </button>\n <button\n class=\"menu-item danger\"\n role=\"menuitem\"\n @click=${(e: Event) => this._handleRemove(memberId, e)}\n aria-label=\"Remove participant\"\n >\n Remove\n </button>\n </div>\n `;\n }\n\n private _renderOverlay(layer: LayoutLayer, isSelf: boolean) {\n const memberId = layer.member_id!;\n const classes = `member-overlay${isSelf ? ' is-self' : ''}`;\n\n const style = `\n position: absolute;\n top: ${layer.y}%;\n left: ${layer.x}%;\n width: ${layer.width}%;\n height: ${layer.height}%;\n opacity: ${layer.visible ? 1 : 0};\n overflow: visible;\n transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;\n pointer-events: auto;\n z-index: 10;\n `;\n\n return html`\n <div class=\"${classes}\" part=\"overlay\" style=\"${style}\">\n ${!isSelf\n ? html`\n <button\n class=\"menu-trigger\"\n part=\"menu-trigger\"\n @click=${(e: Event) => this._toggleMenu(memberId, e)}\n aria-label=\"Participant menu\"\n aria-expanded=\"${this._openMenuId === memberId}\"\n aria-haspopup=\"menu\"\n >\n ${this._renderMenuIcon()}\n </button>\n ${this._renderMenuDropdown(memberId)}\n `\n : null}\n <slot name=\"controls-${memberId}\"></slot>\n </div>\n `;\n }\n\n render() {\n const layers = this.call ? this._directLayoutLayers : this._callState?.layoutLayers ?? [];\n const selfId = this.call ? this._directSelf?.id : this._callState?.self?.id;\n\n const overlays = layers\n .filter((layer) => layer.member_id)\n .map((layer) => this._renderOverlay(layer, layer.member_id === selfId));\n\n return html`\n ${overlays}\n <slot></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-participants': SwParticipants;\n }\n}\n"],"names":["SwParticipants","LitElement","target","changed","l","p","s","memberId","e","_a","participant","html","isOpen","layer","isSelf","classes","style","layers","selfId","_b","_d","_c","overlays","css","__decorateClass","consume","callStateContext","state","property","customElement"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Self Media Component
3
+ *
4
+ * Renders local video overlay with positioning from layoutLayers.
5
+ *
6
+ * Input precedence (most specific wins): `.call` > context.
7
+ * `.stream` is not applicable — this component requires `layoutLayers` and
8
+ * `self.id`, which only come from a Call.
9
+ *
10
+ * @example
11
+ * ```html
12
+ * <!-- Inside a context provider: -->
13
+ * <sw-self-media mirror></sw-self-media>
14
+ *
15
+ * <!-- Standalone with an explicit Call: -->
16
+ * <sw-self-media .call=${call} mirror></sw-self-media>
17
+ * ```
18
+ *
19
+ * @csspart container - Positioned overlay container matching the layout layer rect.
20
+ * @csspart video - The `<video>` element rendering the local stream.
21
+ */
22
+ import { LitElement } from 'lit';
23
+ import type { Call } from '../types/index.js';
24
+ export declare class SwSelfMedia extends LitElement {
25
+ static styles: import("lit").CSSResult;
26
+ mirror: boolean;
27
+ /** Explicit Call — when set, subscribes directly and bypasses context. */
28
+ call?: Call;
29
+ private _callState?;
30
+ private _directLocalStream;
31
+ private _directLayoutLayers;
32
+ private _directSelf;
33
+ private _directSubscriptions;
34
+ protected updated(changed: Map<string, unknown>): void;
35
+ disconnectedCallback(): void;
36
+ private _setupDirect;
37
+ private _teardownDirect;
38
+ private _getSelfLayer;
39
+ render(): import("lit-html").TemplateResult<1> | null;
40
+ }
41
+ declare global {
42
+ interface HTMLElementTagNameMap {
43
+ 'sw-self-media': SwSelfMedia;
44
+ }
45
+ }
46
+ //# sourceMappingURL=sw-self-media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-self-media.d.ts","sourceRoot":"","sources":["../../src/components/sw-self-media.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C,OAAO,KAAK,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAG3D,qBACa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAYX;IAE0C,MAAM,UAAS;IAE3D,0EAA0E;IAC9C,IAAI,CAAC,EAAE,IAAI,CAAC;IAIxC,OAAO,CAAC,UAAU,CAAC,CAAY;IAEtB,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,WAAW,CAAoC;IAEhE,OAAO,CAAC,oBAAoB,CAAsB;IAElD,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQtD,oBAAoB;IAKpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,aAAa;IAOrB,MAAM;CAyCP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,WAAW,CAAC;KAC9B;CACF"}
@@ -0,0 +1,106 @@
1
+ import { LitElement as h, html as p, css as u } from "lit";
2
+ import { property as d, state as n, customElement as y } from "lit/decorators.js";
3
+ import { consume as _ } from "@lit/context";
4
+ import { callStateContext as f } from "../context/call-state-context.js";
5
+ var b = Object.defineProperty, m = Object.getOwnPropertyDescriptor, a = (t, e, l, r) => {
6
+ for (var s = r > 1 ? void 0 : r ? m(e, l) : e, i = t.length - 1, c; i >= 0; i--)
7
+ (c = t[i]) && (s = (r ? c(e, l, s) : c(s)) || s);
8
+ return r && s && b(e, l, s), s;
9
+ };
10
+ let o = class extends h {
11
+ constructor() {
12
+ super(...arguments), this.mirror = !1, this._directLocalStream = null, this._directLayoutLayers = [], this._directSelf = null, this._directSubscriptions = [];
13
+ }
14
+ updated(t) {
15
+ super.updated(t), t.has("call") && (this._teardownDirect(), this.call && this._setupDirect(this.call));
16
+ }
17
+ disconnectedCallback() {
18
+ super.disconnectedCallback(), this._teardownDirect();
19
+ }
20
+ _setupDirect(t) {
21
+ this._directSubscriptions.push(
22
+ t.localStream$.subscribe((e) => this._directLocalStream = e),
23
+ t.layoutLayers$.subscribe((e) => this._directLayoutLayers = e),
24
+ t.self$.subscribe((e) => this._directSelf = e)
25
+ );
26
+ }
27
+ _teardownDirect() {
28
+ this._directSubscriptions.forEach((t) => t.unsubscribe()), this._directSubscriptions = [], this._directLocalStream = null, this._directLayoutLayers = [], this._directSelf = null;
29
+ }
30
+ _getSelfLayer() {
31
+ var l, r, s, i;
32
+ const t = this.call ? (l = this._directSelf) == null ? void 0 : l.id : (s = (r = this._callState) == null ? void 0 : r.self) == null ? void 0 : s.id;
33
+ return t ? (this.call ? this._directLayoutLayers : ((i = this._callState) == null ? void 0 : i.layoutLayers) ?? []).find((c) => c.member_id === t) : void 0;
34
+ }
35
+ render() {
36
+ var i;
37
+ const t = this._getSelfLayer();
38
+ if (!t) return null;
39
+ const e = this.call ? this._directLocalStream : ((i = this._callState) == null ? void 0 : i.localStream) ?? null;
40
+ if (!(((e == null ? void 0 : e.getVideoTracks().length) ?? 0) > 0)) return null;
41
+ const r = `
42
+ position: absolute;
43
+ top: ${t.y}%;
44
+ left: ${t.x}%;
45
+ width: ${t.width}%;
46
+ height: ${t.height}%;
47
+ opacity: ${t.visible ? 1 : 0};
48
+ overflow: hidden;
49
+ transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;
50
+ pointer-events: none;
51
+ `, s = this.mirror ? "transform: scale(-1, 1); -webkit-transform: scale(-1, 1);" : "";
52
+ return p`
53
+ <div class="local-overlay" part="container" style="${r}">
54
+ <video
55
+ class="local-video"
56
+ part="video"
57
+ style="width: 100%; height: 100%; object-fit: cover; ${s}"
58
+ autoplay
59
+ playsinline
60
+ muted
61
+ disablePictureInPicture
62
+ .srcObject=${e}
63
+ ></video>
64
+ </div>
65
+ `;
66
+ }
67
+ };
68
+ o.styles = u`
69
+ :host {
70
+ display: contents;
71
+ }
72
+
73
+ .local-overlay {
74
+ box-sizing: border-box;
75
+ }
76
+
77
+ video {
78
+ display: block;
79
+ }
80
+ `;
81
+ a([
82
+ d({ type: Boolean, reflect: !0 })
83
+ ], o.prototype, "mirror", 2);
84
+ a([
85
+ d({ type: Object })
86
+ ], o.prototype, "call", 2);
87
+ a([
88
+ _({ context: f, subscribe: !0 }),
89
+ n()
90
+ ], o.prototype, "_callState", 2);
91
+ a([
92
+ n()
93
+ ], o.prototype, "_directLocalStream", 2);
94
+ a([
95
+ n()
96
+ ], o.prototype, "_directLayoutLayers", 2);
97
+ a([
98
+ n()
99
+ ], o.prototype, "_directSelf", 2);
100
+ o = a([
101
+ y("sw-self-media")
102
+ ], o);
103
+ export {
104
+ o as SwSelfMedia
105
+ };
106
+ //# sourceMappingURL=sw-self-media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-self-media.js","sources":["../../src/components/sw-self-media.ts"],"sourcesContent":["/**\n * Self Media Component\n *\n * Renders local video overlay with positioning from layoutLayers.\n *\n * Input precedence (most specific wins): `.call` > context.\n * `.stream` is not applicable — this component requires `layoutLayers` and\n * `self.id`, which only come from a Call.\n *\n * @example\n * ```html\n * <!-- Inside a context provider: -->\n * <sw-self-media mirror></sw-self-media>\n *\n * <!-- Standalone with an explicit Call: -->\n * <sw-self-media .call=${call} mirror></sw-self-media>\n * ```\n *\n * @csspart container - Positioned overlay container matching the layout layer rect.\n * @csspart video - The `<video>` element rendering the local stream.\n */\n\nimport { LitElement, html, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { consume } from '@lit/context';\nimport { Subscription } from 'rxjs';\nimport { callStateContext, type CallState } from '../context/call-state-context.js';\nimport type { Call, LayoutLayer } from '../types/index.js';\nimport type { CallSelfParticipant } from '@signalwire/js';\n\n@customElement('sw-self-media')\nexport class SwSelfMedia extends LitElement {\n static styles = css`\n :host {\n display: contents;\n }\n\n .local-overlay {\n box-sizing: border-box;\n }\n\n video {\n display: block;\n }\n `;\n\n @property({ type: Boolean, reflect: true }) mirror = false;\n\n /** Explicit Call — when set, subscribes directly and bypasses context. */\n @property({ type: Object }) call?: Call;\n\n @consume({ context: callStateContext, subscribe: true })\n @state()\n private _callState?: CallState;\n\n @state() private _directLocalStream: MediaStream | null = null;\n @state() private _directLayoutLayers: LayoutLayer[] = [];\n @state() private _directSelf: CallSelfParticipant | null = null;\n\n private _directSubscriptions: Subscription[] = [];\n\n protected updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has('call')) {\n this._teardownDirect();\n if (this.call) this._setupDirect(this.call);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n this._teardownDirect();\n }\n\n private _setupDirect(call: Call): void {\n this._directSubscriptions.push(\n call.localStream$.subscribe((s) => (this._directLocalStream = s)),\n call.layoutLayers$.subscribe((l) => (this._directLayoutLayers = l)),\n call.self$.subscribe((s) => (this._directSelf = s))\n );\n }\n\n private _teardownDirect(): void {\n this._directSubscriptions.forEach((s) => s.unsubscribe());\n this._directSubscriptions = [];\n this._directLocalStream = null;\n this._directLayoutLayers = [];\n this._directSelf = null;\n }\n\n private _getSelfLayer(): LayoutLayer | undefined {\n const selfId = this.call ? this._directSelf?.id : this._callState?.self?.id;\n if (!selfId) return undefined;\n const layers = this.call ? this._directLayoutLayers : this._callState?.layoutLayers ?? [];\n return layers.find((layer) => layer.member_id === selfId);\n }\n\n render() {\n const layer = this._getSelfLayer();\n if (!layer) return null;\n\n const localStream = this.call\n ? this._directLocalStream\n : this._callState?.localStream ?? null;\n const hasVideoTracks = (localStream?.getVideoTracks().length ?? 0) > 0;\n if (!hasVideoTracks) return null;\n\n const style = `\n position: absolute;\n top: ${layer.y}%;\n left: ${layer.x}%;\n width: ${layer.width}%;\n height: ${layer.height}%;\n opacity: ${layer.visible ? 1 : 0};\n overflow: hidden;\n transition: top 0.3s ease, left 0.3s ease, width 0.3s ease, height 0.3s ease, opacity 0.3s ease;\n pointer-events: none;\n `;\n\n const videoStyle = this.mirror\n ? 'transform: scale(-1, 1); -webkit-transform: scale(-1, 1);'\n : '';\n\n return html`\n <div class=\"local-overlay\" part=\"container\" style=\"${style}\">\n <video\n class=\"local-video\"\n part=\"video\"\n style=\"width: 100%; height: 100%; object-fit: cover; ${videoStyle}\"\n autoplay\n playsinline\n muted\n disablePictureInPicture\n .srcObject=${localStream}\n ></video>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-self-media': SwSelfMedia;\n }\n}\n"],"names":["SwSelfMedia","LitElement","changed","call","s","l","selfId","_a","_c","_b","_d","layer","localStream","style","videoStyle","html","css","__decorateClass","property","consume","callStateContext","state","customElement"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { Call } from '../types/index.js';
2
+ import type { ContextHost } from './types.js';
3
+ /**
4
+ * ReactiveController that flattens all Call observables into a plain CallState
5
+ * object provided via Lit context. Consumer components get automatic re-renders
6
+ * on any change.
7
+ *
8
+ * Usage in a provider component:
9
+ *
10
+ * private _callState = new CallStateContextController(this);
11
+ *
12
+ * // When a call arrives:
13
+ * this._callState.connect(call);
14
+ *
15
+ * // When the call ends:
16
+ * this._callState.disconnect();
17
+ */
18
+ export declare class CallStateContextController {
19
+ private _provider;
20
+ private _subscriptions;
21
+ private _state;
22
+ private _batching;
23
+ constructor(host: ContextHost);
24
+ hostConnected(): void;
25
+ hostDisconnected(): void;
26
+ connect(call: Call): void;
27
+ disconnect(): void;
28
+ private _patch;
29
+ private _publish;
30
+ }
31
+ //# sourceMappingURL=CallStateContextController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CallStateContextController.d.ts","sourceRoot":"","sources":["../../src/context/CallStateContextController.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuC9C;;;;;;;;;;;;;;GAcG;AACH,qBAAa,0BAA0B;IACrC,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,EAAE,WAAW;IAQ7B,aAAa;IACb,gBAAgB;IAIhB,OAAO,CAAC,IAAI,EAAE,IAAI;IAoFlB,UAAU;IAMV,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;CAGjB"}