@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,114 @@
1
+ import { LitElement } from 'lit';
2
+ import type { DropUpItem } from './sw-ui-dropup';
3
+ export interface MicToggleDetail {
4
+ muted: boolean;
5
+ }
6
+ export interface CameraToggleDetail {
7
+ muted: boolean;
8
+ }
9
+ export interface SpeakerToggleDetail {
10
+ muted: boolean;
11
+ }
12
+ export interface DeviceChangeDetail {
13
+ kind: 'mic' | 'camera' | 'speaker';
14
+ deviceId: string;
15
+ label: string;
16
+ }
17
+ export interface FullscreenToggleDetail {
18
+ fullscreen: boolean;
19
+ }
20
+ export interface ScreenShareToggleDetail {
21
+ active: boolean;
22
+ }
23
+ export interface HandRaiseToggleDetail {
24
+ raised: boolean;
25
+ }
26
+ export interface SettingsChangeDetail {
27
+ settingId: string;
28
+ }
29
+ export interface SwUiControlBarEventMap {
30
+ 'sw-mic-toggle': CustomEvent<MicToggleDetail>;
31
+ 'sw-camera-toggle': CustomEvent<CameraToggleDetail>;
32
+ 'sw-speaker-toggle': CustomEvent<SpeakerToggleDetail>;
33
+ 'sw-device-change': CustomEvent<DeviceChangeDetail>;
34
+ 'sw-fullscreen-toggle': CustomEvent<FullscreenToggleDetail>;
35
+ 'sw-screen-share-toggle': CustomEvent<ScreenShareToggleDetail>;
36
+ 'sw-hand-raise-toggle': CustomEvent<HandRaiseToggleDetail>;
37
+ 'sw-transcript-toggle': CustomEvent<void>;
38
+ 'sw-settings-change': CustomEvent<SettingsChangeDetail>;
39
+ 'sw-call-hangup': CustomEvent<void>;
40
+ }
41
+ /**
42
+ * Call controls bar.
43
+ *
44
+ * Buttons rendered (left to right): mic, camera, speaker, screen share,
45
+ * hand raise, transcript, fullscreen, hang-up. Optional buttons are hidden
46
+ * when their `show*` property is false.
47
+ *
48
+ * @fires sw-mic-toggle - Mic toggled. Detail: `{ muted: boolean }`.
49
+ * @fires sw-camera-toggle - Camera toggled. Detail: `{ muted: boolean }`.
50
+ * @fires sw-speaker-toggle - Speaker toggled. Detail: `{ muted: boolean }`.
51
+ * @fires sw-device-change - Device picked from a chevron menu. Detail: `{ kind, deviceId, label }`.
52
+ * @fires sw-fullscreen-toggle - Fullscreen toggled. Detail: `{ fullscreen: boolean }`.
53
+ * @fires sw-screen-share-toggle - Screen share toggled. Detail: `{ active: boolean }`.
54
+ * @fires sw-hand-raise-toggle - Hand raise toggled. Detail: `{ raised: boolean }`.
55
+ * @fires sw-transcript-toggle - Transcript button clicked. No detail.
56
+ * @fires sw-settings-change - Settings menu item picked. Detail: `{ settingId: string }`.
57
+ * @fires sw-call-hangup - Hang-up button clicked. No detail.
58
+ *
59
+ * @cssprop --sw-control-bar-bg [transparent] - bar background
60
+ * @cssprop --sw-control-bar-padding [8px 16px] - bar padding
61
+ * @cssprop --sw-control-bar-gap [8px] - gap between buttons
62
+ * @cssprop --sw-control-bar-radius [0] - bar border-radius
63
+ *
64
+ * @cssprop --sw-split-button-size [44px] - button width & height
65
+ * @cssprop --sw-split-button-bg [rgba(255,255,255,0.12)] - button background
66
+ * @cssprop --sw-split-button-bg-hover [rgba(255,255,255,0.22)] - button hover bg
67
+ * @cssprop --sw-split-button-color [#fff] - icon colour
68
+ * @cssprop --sw-split-button-radius [9999px] - button border-radius
69
+ *
70
+ * @cssprop --sw-control-bar-hangup-bg - hang-up background (falls back to --interactive-button-destructive-bg)
71
+ * @cssprop --sw-control-bar-hangup-bg-hover - hang-up hover bg (falls back to --interactive-button-destructive-hover)
72
+ * @cssprop --sw-control-bar-hangup-color - hang-up icon colour (defaults to #fff)
73
+ *
74
+ * The active-toggle variant uses --interactive-button-primary-{bg,hover,text} from the design tokens.
75
+ */
76
+ export declare class SwUiControlBar extends LitElement {
77
+ static styles: import("lit").CSSResult;
78
+ micMuted: boolean;
79
+ cameraMuted: boolean;
80
+ speakerMuted: boolean;
81
+ fullscreen: boolean;
82
+ screenSharing: boolean;
83
+ handRaised: boolean;
84
+ transcriptActive: boolean;
85
+ showScreenShare: boolean;
86
+ showHandRaise: boolean;
87
+ showTranscript: boolean;
88
+ showSettings: boolean;
89
+ showFullscreen: boolean;
90
+ micDevices: DropUpItem[];
91
+ cameraDevices: DropUpItem[];
92
+ speakerDevices: DropUpItem[];
93
+ settingsItems: DropUpItem[];
94
+ private _dispatch;
95
+ private _onMicToggle;
96
+ private _onCameraToggle;
97
+ private _onSpeakerToggle;
98
+ private _onDeviceSelect;
99
+ private _onFullscreenToggle;
100
+ private _onScreenShareToggle;
101
+ private _onHandRaiseToggle;
102
+ private _onTranscriptToggle;
103
+ private _onSettingsSelect;
104
+ private _onHangUp;
105
+ private _overflowItems;
106
+ private _onOverflowSelect;
107
+ render(): import("lit-html").TemplateResult<1>;
108
+ }
109
+ declare global {
110
+ interface HTMLElementTagNameMap {
111
+ 'sw-ui-control-bar': SwUiControlBar;
112
+ }
113
+ }
114
+ //# sourceMappingURL=sw-ui-control-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-control-bar.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/controls/sw-ui-control-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,MAAM,WAAW,eAAe;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACnD,MAAM,WAAW,kBAAkB;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACtD,MAAM,WAAW,mBAAmB;IAAG,KAAK,EAAE,OAAO,CAAA;CAAE;AACvD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,sBAAsB;IAAG,UAAU,EAAE,OAAO,CAAA;CAAE;AAC/D,MAAM,WAAW,uBAAuB;IAAG,MAAM,EAAE,OAAO,CAAA;CAAE;AAC5D,MAAM,WAAW,qBAAqB;IAAG,MAAM,EAAE,OAAO,CAAA;CAAE;AAC1D,MAAM,WAAW,oBAAoB;IAAG,SAAS,EAAE,MAAM,CAAA;CAAE;AAI3D,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC9C,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACpD,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACtD,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACpD,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAC5D,wBAAwB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAC/D,sBAAsB,EAAE,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAC3D,sBAAsB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1C,oBAAoB,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACxD,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;CACrC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,0BA2EX;IAKF,QAAQ,UAAS;IAGjB,WAAW,UAAS;IAGpB,YAAY,UAAS;IAGrB,UAAU,UAAS;IAGnB,aAAa,UAAS;IAGtB,UAAU,UAAS;IAGnB,gBAAgB,UAAS;IAKzB,eAAe,UAAS;IAGxB,aAAa,UAAS;IAGtB,cAAc,UAAS;IAGvB,YAAY,UAAS;IAGrB,cAAc,UAAQ;IAKtB,UAAU,EAAE,UAAU,EAAE,CAAM;IAG9B,aAAa,EAAE,UAAU,EAAE,CAAM;IAGjC,cAAc,EAAE,UAAU,EAAE,CAAM;IAGlC,aAAa,EAAE,UAAU,EAAE,CAAM;IAIjC,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,iBAAiB;IAqBzB,MAAM;CAsHP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,mBAAmB,EAAE,cAAc,CAAC;KACrC;CACF"}
@@ -0,0 +1,324 @@
1
+ import { LitElement as h, nothing as r, html as a, css as w } from "lit";
2
+ import { property as i, customElement as d } from "lit/decorators.js";
3
+ var g = Object.defineProperty, b = Object.getOwnPropertyDescriptor, s = (t, n, c, l) => {
4
+ for (var o = l > 1 ? void 0 : l ? b(n, c) : n, p = t.length - 1, u; p >= 0; p--)
5
+ (u = t[p]) && (o = (l ? u(n, c, o) : u(o)) || o);
6
+ return l && o && g(n, c, o), o;
7
+ };
8
+ let e = class extends h {
9
+ constructor() {
10
+ super(...arguments), this.micMuted = !1, this.cameraMuted = !1, this.speakerMuted = !1, this.fullscreen = !1, this.screenSharing = !1, this.handRaised = !1, this.transcriptActive = !1, this.showScreenShare = !1, this.showHandRaise = !1, this.showTranscript = !1, this.showSettings = !1, this.showFullscreen = !0, this.micDevices = [], this.cameraDevices = [], this.speakerDevices = [], this.settingsItems = [];
11
+ }
12
+ // ── Dispatchers ───────────────────────────────────────────────────────────
13
+ _dispatch(t, n) {
14
+ this.dispatchEvent(new CustomEvent(t, { detail: n, bubbles: !0, composed: !0 }));
15
+ }
16
+ _onMicToggle() {
17
+ this.micMuted = !this.micMuted, this._dispatch("sw-mic-toggle", { muted: this.micMuted });
18
+ }
19
+ _onCameraToggle() {
20
+ this.cameraMuted = !this.cameraMuted, this._dispatch("sw-camera-toggle", { muted: this.cameraMuted });
21
+ }
22
+ _onSpeakerToggle() {
23
+ this.speakerMuted = !this.speakerMuted, this._dispatch("sw-speaker-toggle", { muted: this.speakerMuted });
24
+ }
25
+ _onDeviceSelect(t, n) {
26
+ this._dispatch("sw-device-change", { kind: t, deviceId: n.id, label: n.label });
27
+ }
28
+ _onFullscreenToggle() {
29
+ this.fullscreen = !this.fullscreen, this._dispatch("sw-fullscreen-toggle", { fullscreen: this.fullscreen });
30
+ }
31
+ _onScreenShareToggle() {
32
+ this.screenSharing = !this.screenSharing, this._dispatch("sw-screen-share-toggle", { active: this.screenSharing });
33
+ }
34
+ _onHandRaiseToggle() {
35
+ this.handRaised = !this.handRaised, this._dispatch("sw-hand-raise-toggle", { raised: this.handRaised });
36
+ }
37
+ _onTranscriptToggle() {
38
+ this.transcriptActive = !this.transcriptActive, this._dispatch("sw-transcript-toggle", void 0);
39
+ }
40
+ _onSettingsSelect(t) {
41
+ this._dispatch("sw-settings-change", { settingId: t.detail.id });
42
+ }
43
+ _onHangUp() {
44
+ this._dispatch("sw-call-hangup", void 0);
45
+ }
46
+ _overflowItems() {
47
+ const t = [];
48
+ return this.showScreenShare && t.push({
49
+ id: "__overflow:screen-share",
50
+ label: this.screenSharing ? "Stop sharing" : "Share screen",
51
+ selected: this.screenSharing
52
+ }), this.showHandRaise && t.push({
53
+ id: "__overflow:hand-raise",
54
+ label: this.handRaised ? "Lower hand" : "Raise hand",
55
+ selected: this.handRaised
56
+ }), this.showTranscript && t.push({
57
+ id: "__overflow:transcript",
58
+ label: "Transcript",
59
+ selected: this.transcriptActive
60
+ }), this.showSettings && t.push(...this.settingsItems), this.showFullscreen && t.push({
61
+ id: "__overflow:fullscreen",
62
+ label: this.fullscreen ? "Exit fullscreen" : "Fullscreen",
63
+ selected: this.fullscreen
64
+ }), t;
65
+ }
66
+ _onOverflowSelect(t) {
67
+ switch (t.detail.id) {
68
+ case "__overflow:screen-share":
69
+ this._onScreenShareToggle();
70
+ return;
71
+ case "__overflow:hand-raise":
72
+ this._onHandRaiseToggle();
73
+ return;
74
+ case "__overflow:transcript":
75
+ this._onTranscriptToggle();
76
+ return;
77
+ case "__overflow:fullscreen":
78
+ this._onFullscreenToggle();
79
+ return;
80
+ default:
81
+ this._dispatch("sw-settings-change", { settingId: t.detail.id });
82
+ }
83
+ }
84
+ // ── Render ────────────────────────────────────────────────────────────────
85
+ render() {
86
+ return a`
87
+ <div class="bar" part="bar">
88
+ <!-- SignalWire logo -->
89
+ <span class="sw-logo" part="logo" aria-hidden="true">
90
+ <sw-ui-icon name="sw-logo" size="20"></sw-ui-icon>
91
+ </span>
92
+
93
+ <!-- Mic -->
94
+ <sw-ui-split-button
95
+ .active=${!this.micMuted}
96
+ .items=${this.micDevices}
97
+ @sw-split-button-toggle=${this._onMicToggle}
98
+ @sw-dropup-select=${(t) => this._onDeviceSelect("mic", t.detail)}
99
+ >
100
+ <sw-ui-icon slot="active" name="mic-on"></sw-ui-icon>
101
+ <sw-ui-icon slot="inactive" name="mic-off"></sw-ui-icon>
102
+ </sw-ui-split-button>
103
+
104
+ <!-- Camera -->
105
+ <sw-ui-split-button
106
+ .active=${!this.cameraMuted}
107
+ .items=${this.cameraDevices}
108
+ @sw-split-button-toggle=${this._onCameraToggle}
109
+ @sw-dropup-select=${(t) => this._onDeviceSelect("camera", t.detail)}
110
+ >
111
+ <sw-ui-icon slot="active" name="camera-on"></sw-ui-icon>
112
+ <sw-ui-icon slot="inactive" name="camera-off"></sw-ui-icon>
113
+ </sw-ui-split-button>
114
+
115
+ <!-- Speaker -->
116
+ <sw-ui-split-button
117
+ .active=${!this.speakerMuted}
118
+ .items=${this.speakerDevices}
119
+ @sw-split-button-toggle=${this._onSpeakerToggle}
120
+ @sw-dropup-select=${(t) => this._onDeviceSelect("speaker", t.detail)}
121
+ >
122
+ <sw-ui-icon slot="active" name="speaker-on"></sw-ui-icon>
123
+ <sw-ui-icon slot="inactive" name="speaker-off"></sw-ui-icon>
124
+ </sw-ui-split-button>
125
+
126
+ <!-- Screen share (optional) -->
127
+ ${this.showScreenShare ? a`
128
+ <sw-ui-split-button
129
+ class="optional ${this.screenSharing ? "active-toggle" : ""}"
130
+ @sw-split-button-click=${this._onScreenShareToggle}
131
+ >
132
+ <sw-ui-icon name=${this.screenSharing ? "screen-share-off" : "screen-share"}></sw-ui-icon>
133
+ </sw-ui-split-button>
134
+ ` : r}
135
+
136
+ <!-- Hand raise (optional) -->
137
+ ${this.showHandRaise ? a`
138
+ <sw-ui-split-button
139
+ class="optional ${this.handRaised ? "active-toggle" : ""}"
140
+ @sw-split-button-click=${this._onHandRaiseToggle}
141
+ >
142
+ <sw-ui-icon name="hand-raise"></sw-ui-icon>
143
+ </sw-ui-split-button>
144
+ ` : r}
145
+
146
+ <!-- Transcript (optional) -->
147
+ ${this.showTranscript ? a`
148
+ <sw-ui-split-button
149
+ class="optional ${this.transcriptActive ? "active-toggle" : ""}"
150
+ @sw-split-button-click=${this._onTranscriptToggle}
151
+ >
152
+ <sw-ui-icon name="transcript"></sw-ui-icon>
153
+ </sw-ui-split-button>
154
+ ` : r}
155
+
156
+ <!-- Settings (optional) -->
157
+ ${this.showSettings ? a`
158
+ <sw-ui-split-button
159
+ class="optional"
160
+ .items=${this.settingsItems}
161
+ @sw-dropup-select=${this._onSettingsSelect}
162
+ >
163
+ <sw-ui-icon name="settings"></sw-ui-icon>
164
+ </sw-ui-split-button>
165
+ ` : r}
166
+
167
+ <!-- Fullscreen (optional) -->
168
+ ${this.showFullscreen ? a`
169
+ <sw-ui-split-button class="optional" @sw-split-button-click=${this._onFullscreenToggle}>
170
+ <sw-ui-icon name=${this.fullscreen ? "fullscreen-exit" : "fullscreen"}></sw-ui-icon>
171
+ </sw-ui-split-button>
172
+ ` : r}
173
+
174
+ <!-- Overflow menu (shown on narrow containers) -->
175
+ <sw-ui-split-button
176
+ class="overflow"
177
+ .items=${this._overflowItems()}
178
+ @sw-dropup-select=${this._onOverflowSelect}
179
+ >
180
+ <sw-ui-icon name="settings"></sw-ui-icon>
181
+ </sw-ui-split-button>
182
+
183
+ <!-- Hang up -->
184
+ <sw-ui-split-button class="hangup" @sw-split-button-click=${this._onHangUp}>
185
+ <sw-ui-icon name="phone-end"></sw-ui-icon>
186
+ </sw-ui-split-button>
187
+
188
+ <!-- Spacer to balance the logo and keep buttons centered -->
189
+ <span class="bar-spacer" aria-hidden="true"></span>
190
+ </div>
191
+ `;
192
+ }
193
+ };
194
+ e.styles = w`
195
+ :host {
196
+ display: block;
197
+ background: var(--sw-control-bar-bg, transparent);
198
+ border-radius: var(--sw-control-bar-radius, 0);
199
+ container-type: inline-size;
200
+ }
201
+
202
+ .bar {
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ gap: var(--sw-control-bar-gap, 8px);
207
+ padding: var(--sw-control-bar-padding, 8px 16px);
208
+ }
209
+
210
+ .sw-logo {
211
+ display: inline-flex;
212
+ align-items: center;
213
+ color: var(--fg-default);
214
+ opacity: 0.5;
215
+ flex-shrink: 0;
216
+ pointer-events: none;
217
+ margin-right: auto;
218
+ }
219
+
220
+ .bar-spacer {
221
+ margin-left: auto;
222
+ width: 20px;
223
+ flex-shrink: 0;
224
+ }
225
+
226
+ .hangup {
227
+ --sw-split-button-bg: var(--sw-control-bar-hangup-bg, var(--interactive-button-destructive-bg));
228
+ --sw-split-button-bg-hover: var(--sw-control-bar-hangup-bg-hover, var(--interactive-button-destructive-hover));
229
+ --sw-split-button-color: var(--sw-control-bar-hangup-color, #fff);
230
+ }
231
+
232
+ .active-toggle {
233
+ --sw-split-button-bg: var(--interactive-button-primary-bg);
234
+ --sw-split-button-bg-hover: var(--interactive-button-primary-hover);
235
+ --sw-split-button-color: var(--interactive-button-primary-text);
236
+ }
237
+
238
+ /* Overflow menu hidden by default (wide containers) */
239
+ sw-ui-split-button.overflow { display: none; }
240
+
241
+ /* Collapse optional/secondary buttons into an overflow menu on narrow containers */
242
+ @container (max-width: 720px) {
243
+ sw-ui-split-button.optional { display: none !important; }
244
+ sw-ui-split-button.overflow { display: inline-flex; }
245
+ }
246
+
247
+ /* Shrink buttons on very narrow containers */
248
+ @container (max-width: 540px) {
249
+ .bar {
250
+ --sw-split-button-size: 34px;
251
+ --sw-split-button-width: 42px;
252
+ --sw-split-button-height: 28px;
253
+ gap: 4px;
254
+ padding: 4px 8px;
255
+ }
256
+ .sw-logo, .bar-spacer { display: none; }
257
+ }
258
+
259
+ /* Further shrink for very small phones to prevent clipping */
260
+ @container (max-width: 360px) {
261
+ .bar {
262
+ --sw-split-button-size: 28px;
263
+ --sw-split-button-width: 34px;
264
+ --sw-split-button-height: 24px;
265
+ gap: 2px;
266
+ padding: 2px 4px;
267
+ }
268
+ }
269
+ `;
270
+ s([
271
+ i({ type: Boolean, reflect: !0, attribute: "mic-muted" })
272
+ ], e.prototype, "micMuted", 2);
273
+ s([
274
+ i({ type: Boolean, reflect: !0, attribute: "camera-muted" })
275
+ ], e.prototype, "cameraMuted", 2);
276
+ s([
277
+ i({ type: Boolean, reflect: !0, attribute: "speaker-muted" })
278
+ ], e.prototype, "speakerMuted", 2);
279
+ s([
280
+ i({ type: Boolean, reflect: !0 })
281
+ ], e.prototype, "fullscreen", 2);
282
+ s([
283
+ i({ type: Boolean, reflect: !0, attribute: "screen-sharing" })
284
+ ], e.prototype, "screenSharing", 2);
285
+ s([
286
+ i({ type: Boolean, reflect: !0, attribute: "hand-raised" })
287
+ ], e.prototype, "handRaised", 2);
288
+ s([
289
+ i({ type: Boolean, reflect: !0, attribute: "transcript-active" })
290
+ ], e.prototype, "transcriptActive", 2);
291
+ s([
292
+ i({ type: Boolean, reflect: !0, attribute: "show-screen-share" })
293
+ ], e.prototype, "showScreenShare", 2);
294
+ s([
295
+ i({ type: Boolean, reflect: !0, attribute: "show-hand-raise" })
296
+ ], e.prototype, "showHandRaise", 2);
297
+ s([
298
+ i({ type: Boolean, reflect: !0, attribute: "show-transcript" })
299
+ ], e.prototype, "showTranscript", 2);
300
+ s([
301
+ i({ type: Boolean, reflect: !0, attribute: "show-settings" })
302
+ ], e.prototype, "showSettings", 2);
303
+ s([
304
+ i({ type: Boolean, reflect: !0, attribute: "show-fullscreen" })
305
+ ], e.prototype, "showFullscreen", 2);
306
+ s([
307
+ i({ attribute: !1 })
308
+ ], e.prototype, "micDevices", 2);
309
+ s([
310
+ i({ attribute: !1 })
311
+ ], e.prototype, "cameraDevices", 2);
312
+ s([
313
+ i({ attribute: !1 })
314
+ ], e.prototype, "speakerDevices", 2);
315
+ s([
316
+ i({ attribute: !1 })
317
+ ], e.prototype, "settingsItems", 2);
318
+ e = s([
319
+ d("sw-ui-control-bar")
320
+ ], e);
321
+ export {
322
+ e as SwUiControlBar
323
+ };
324
+ //# sourceMappingURL=sw-ui-control-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-control-bar.js","sources":["../../../../src/components/UI/controls/sw-ui-control-bar.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { DropUpItem } from './sw-ui-dropup';\n\n// ── Event detail types ────────────────────────────────────────────────────────\n\nexport interface MicToggleDetail { muted: boolean }\nexport interface CameraToggleDetail { muted: boolean }\nexport interface SpeakerToggleDetail { muted: boolean }\nexport interface DeviceChangeDetail {\n kind: 'mic' | 'camera' | 'speaker';\n deviceId: string;\n label: string;\n}\nexport interface FullscreenToggleDetail { fullscreen: boolean }\nexport interface ScreenShareToggleDetail { active: boolean }\nexport interface HandRaiseToggleDetail { raised: boolean }\nexport interface SettingsChangeDetail { settingId: string }\n\n// ── Event map ─────────────────────────────────────────────────────────────────\n\nexport interface SwUiControlBarEventMap {\n 'sw-mic-toggle': CustomEvent<MicToggleDetail>;\n 'sw-camera-toggle': CustomEvent<CameraToggleDetail>;\n 'sw-speaker-toggle': CustomEvent<SpeakerToggleDetail>;\n 'sw-device-change': CustomEvent<DeviceChangeDetail>;\n 'sw-fullscreen-toggle': CustomEvent<FullscreenToggleDetail>;\n 'sw-screen-share-toggle': CustomEvent<ScreenShareToggleDetail>;\n 'sw-hand-raise-toggle': CustomEvent<HandRaiseToggleDetail>;\n 'sw-transcript-toggle': CustomEvent<void>;\n 'sw-settings-change': CustomEvent<SettingsChangeDetail>;\n 'sw-call-hangup': CustomEvent<void>;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * Call controls bar.\n *\n * Buttons rendered (left to right): mic, camera, speaker, screen share,\n * hand raise, transcript, fullscreen, hang-up. Optional buttons are hidden\n * when their `show*` property is false.\n *\n * @fires sw-mic-toggle - Mic toggled. Detail: `{ muted: boolean }`.\n * @fires sw-camera-toggle - Camera toggled. Detail: `{ muted: boolean }`.\n * @fires sw-speaker-toggle - Speaker toggled. Detail: `{ muted: boolean }`.\n * @fires sw-device-change - Device picked from a chevron menu. Detail: `{ kind, deviceId, label }`.\n * @fires sw-fullscreen-toggle - Fullscreen toggled. Detail: `{ fullscreen: boolean }`.\n * @fires sw-screen-share-toggle - Screen share toggled. Detail: `{ active: boolean }`.\n * @fires sw-hand-raise-toggle - Hand raise toggled. Detail: `{ raised: boolean }`.\n * @fires sw-transcript-toggle - Transcript button clicked. No detail.\n * @fires sw-settings-change - Settings menu item picked. Detail: `{ settingId: string }`.\n * @fires sw-call-hangup - Hang-up button clicked. No detail.\n *\n * @cssprop --sw-control-bar-bg [transparent] - bar background\n * @cssprop --sw-control-bar-padding [8px 16px] - bar padding\n * @cssprop --sw-control-bar-gap [8px] - gap between buttons\n * @cssprop --sw-control-bar-radius [0] - bar border-radius\n *\n * @cssprop --sw-split-button-size [44px] - button width & height\n * @cssprop --sw-split-button-bg [rgba(255,255,255,0.12)] - button background\n * @cssprop --sw-split-button-bg-hover [rgba(255,255,255,0.22)] - button hover bg\n * @cssprop --sw-split-button-color [#fff] - icon colour\n * @cssprop --sw-split-button-radius [9999px] - button border-radius\n *\n * @cssprop --sw-control-bar-hangup-bg - hang-up background (falls back to --interactive-button-destructive-bg)\n * @cssprop --sw-control-bar-hangup-bg-hover - hang-up hover bg (falls back to --interactive-button-destructive-hover)\n * @cssprop --sw-control-bar-hangup-color - hang-up icon colour (defaults to #fff)\n *\n * The active-toggle variant uses --interactive-button-primary-{bg,hover,text} from the design tokens.\n */\n@customElement('sw-ui-control-bar')\nexport class SwUiControlBar extends LitElement {\n static styles = css`\n :host {\n display: block;\n background: var(--sw-control-bar-bg, transparent);\n border-radius: var(--sw-control-bar-radius, 0);\n container-type: inline-size;\n }\n\n .bar {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: var(--sw-control-bar-gap, 8px);\n padding: var(--sw-control-bar-padding, 8px 16px);\n }\n\n .sw-logo {\n display: inline-flex;\n align-items: center;\n color: var(--fg-default);\n opacity: 0.5;\n flex-shrink: 0;\n pointer-events: none;\n margin-right: auto;\n }\n\n .bar-spacer {\n margin-left: auto;\n width: 20px;\n flex-shrink: 0;\n }\n\n .hangup {\n --sw-split-button-bg: var(--sw-control-bar-hangup-bg, var(--interactive-button-destructive-bg));\n --sw-split-button-bg-hover: var(--sw-control-bar-hangup-bg-hover, var(--interactive-button-destructive-hover));\n --sw-split-button-color: var(--sw-control-bar-hangup-color, #fff);\n }\n\n .active-toggle {\n --sw-split-button-bg: var(--interactive-button-primary-bg);\n --sw-split-button-bg-hover: var(--interactive-button-primary-hover);\n --sw-split-button-color: var(--interactive-button-primary-text);\n }\n\n /* Overflow menu hidden by default (wide containers) */\n sw-ui-split-button.overflow { display: none; }\n\n /* Collapse optional/secondary buttons into an overflow menu on narrow containers */\n @container (max-width: 720px) {\n sw-ui-split-button.optional { display: none !important; }\n sw-ui-split-button.overflow { display: inline-flex; }\n }\n\n /* Shrink buttons on very narrow containers */\n @container (max-width: 540px) {\n .bar {\n --sw-split-button-size: 34px;\n --sw-split-button-width: 42px;\n --sw-split-button-height: 28px;\n gap: 4px;\n padding: 4px 8px;\n }\n .sw-logo, .bar-spacer { display: none; }\n }\n\n /* Further shrink for very small phones to prevent clipping */\n @container (max-width: 360px) {\n .bar {\n --sw-split-button-size: 28px;\n --sw-split-button-width: 34px;\n --sw-split-button-height: 24px;\n gap: 2px;\n padding: 2px 4px;\n }\n }\n `;\n\n // ── Media toggle state ─────────────────────────────────────────────\n\n @property({ type: Boolean, reflect: true, attribute: 'mic-muted' })\n micMuted = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'camera-muted' })\n cameraMuted = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'speaker-muted' })\n speakerMuted = false;\n\n @property({ type: Boolean, reflect: true })\n fullscreen = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'screen-sharing' })\n screenSharing = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'hand-raised' })\n handRaised = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'transcript-active' })\n transcriptActive = false;\n\n // ── Visibility flags ───────────────────────────────────────────────\n\n @property({ type: Boolean, reflect: true, attribute: 'show-screen-share' })\n showScreenShare = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-hand-raise' })\n showHandRaise = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-transcript' })\n showTranscript = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-settings' })\n showSettings = false;\n\n @property({ type: Boolean, reflect: true, attribute: 'show-fullscreen' })\n showFullscreen = true;\n\n // ── Device lists ───────────────────────────────────────────────────\n\n @property({ attribute: false })\n micDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n cameraDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n speakerDevices: DropUpItem[] = [];\n\n @property({ attribute: false })\n settingsItems: DropUpItem[] = [];\n\n // ── Dispatchers ───────────────────────────────────────────────────────────\n\n private _dispatch<K extends keyof SwUiControlBarEventMap>(\n type: K,\n detail: SwUiControlBarEventMap[K] extends CustomEvent<infer D> ? D : never\n ) {\n this.dispatchEvent(new CustomEvent(type, { detail, bubbles: true, composed: true }));\n }\n\n private _onMicToggle() {\n this.micMuted = !this.micMuted;\n this._dispatch('sw-mic-toggle', { muted: this.micMuted });\n }\n\n private _onCameraToggle() {\n this.cameraMuted = !this.cameraMuted;\n this._dispatch('sw-camera-toggle', { muted: this.cameraMuted });\n }\n\n private _onSpeakerToggle() {\n this.speakerMuted = !this.speakerMuted;\n this._dispatch('sw-speaker-toggle', { muted: this.speakerMuted });\n }\n\n private _onDeviceSelect(kind: 'mic' | 'camera' | 'speaker', item: DropUpItem) {\n this._dispatch('sw-device-change', { kind, deviceId: item.id, label: item.label });\n }\n\n private _onFullscreenToggle() {\n this.fullscreen = !this.fullscreen;\n this._dispatch('sw-fullscreen-toggle', { fullscreen: this.fullscreen });\n }\n\n private _onScreenShareToggle() {\n this.screenSharing = !this.screenSharing;\n this._dispatch('sw-screen-share-toggle', { active: this.screenSharing });\n }\n\n private _onHandRaiseToggle() {\n this.handRaised = !this.handRaised;\n this._dispatch('sw-hand-raise-toggle', { raised: this.handRaised });\n }\n\n private _onTranscriptToggle() {\n this.transcriptActive = !this.transcriptActive;\n this._dispatch('sw-transcript-toggle', undefined as never);\n }\n\n private _onSettingsSelect(e: CustomEvent<DropUpItem>) {\n this._dispatch('sw-settings-change', { settingId: e.detail.id });\n }\n\n private _onHangUp() {\n this._dispatch('sw-call-hangup', undefined as never);\n }\n\n private _overflowItems(): DropUpItem[] {\n const items: DropUpItem[] = [];\n if (this.showScreenShare) {\n items.push({\n id: '__overflow:screen-share',\n label: this.screenSharing ? 'Stop sharing' : 'Share screen',\n selected: this.screenSharing,\n });\n }\n if (this.showHandRaise) {\n items.push({\n id: '__overflow:hand-raise',\n label: this.handRaised ? 'Lower hand' : 'Raise hand',\n selected: this.handRaised,\n });\n }\n if (this.showTranscript) {\n items.push({\n id: '__overflow:transcript',\n label: 'Transcript',\n selected: this.transcriptActive,\n });\n }\n if (this.showSettings) {\n items.push(...this.settingsItems);\n }\n if (this.showFullscreen) {\n items.push({\n id: '__overflow:fullscreen',\n label: this.fullscreen ? 'Exit fullscreen' : 'Fullscreen',\n selected: this.fullscreen,\n });\n }\n return items;\n }\n\n private _onOverflowSelect(e: CustomEvent<DropUpItem>) {\n switch (e.detail.id) {\n case '__overflow:screen-share':\n this._onScreenShareToggle();\n return;\n case '__overflow:hand-raise':\n this._onHandRaiseToggle();\n return;\n case '__overflow:transcript':\n this._onTranscriptToggle();\n return;\n case '__overflow:fullscreen':\n this._onFullscreenToggle();\n return;\n default:\n this._dispatch('sw-settings-change', { settingId: e.detail.id });\n }\n }\n\n // ── Render ────────────────────────────────────────────────────────────────\n\n render() {\n return html`\n <div class=\"bar\" part=\"bar\">\n <!-- SignalWire logo -->\n <span class=\"sw-logo\" part=\"logo\" aria-hidden=\"true\">\n <sw-ui-icon name=\"sw-logo\" size=\"20\"></sw-ui-icon>\n </span>\n\n <!-- Mic -->\n <sw-ui-split-button\n .active=${!this.micMuted}\n .items=${this.micDevices}\n @sw-split-button-toggle=${this._onMicToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('mic', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"mic-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"mic-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Camera -->\n <sw-ui-split-button\n .active=${!this.cameraMuted}\n .items=${this.cameraDevices}\n @sw-split-button-toggle=${this._onCameraToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('camera', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"camera-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"camera-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Speaker -->\n <sw-ui-split-button\n .active=${!this.speakerMuted}\n .items=${this.speakerDevices}\n @sw-split-button-toggle=${this._onSpeakerToggle}\n @sw-dropup-select=${(e: CustomEvent<DropUpItem>) => this._onDeviceSelect('speaker', e.detail)}\n >\n <sw-ui-icon slot=\"active\" name=\"speaker-on\"></sw-ui-icon>\n <sw-ui-icon slot=\"inactive\" name=\"speaker-off\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Screen share (optional) -->\n ${this.showScreenShare\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.screenSharing ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onScreenShareToggle}\n >\n <sw-ui-icon name=${this.screenSharing ? 'screen-share-off' : 'screen-share'}></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Hand raise (optional) -->\n ${this.showHandRaise\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.handRaised ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onHandRaiseToggle}\n >\n <sw-ui-icon name=\"hand-raise\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Transcript (optional) -->\n ${this.showTranscript\n ? html`\n <sw-ui-split-button\n class=\"optional ${this.transcriptActive ? 'active-toggle' : ''}\"\n @sw-split-button-click=${this._onTranscriptToggle}\n >\n <sw-ui-icon name=\"transcript\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Settings (optional) -->\n ${this.showSettings\n ? html`\n <sw-ui-split-button\n class=\"optional\"\n .items=${this.settingsItems}\n @sw-dropup-select=${this._onSettingsSelect}\n >\n <sw-ui-icon name=\"settings\"></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Fullscreen (optional) -->\n ${this.showFullscreen\n ? html`\n <sw-ui-split-button class=\"optional\" @sw-split-button-click=${this._onFullscreenToggle}>\n <sw-ui-icon name=${this.fullscreen ? 'fullscreen-exit' : 'fullscreen'}></sw-ui-icon>\n </sw-ui-split-button>\n `\n : nothing}\n\n <!-- Overflow menu (shown on narrow containers) -->\n <sw-ui-split-button\n class=\"overflow\"\n .items=${this._overflowItems()}\n @sw-dropup-select=${this._onOverflowSelect}\n >\n <sw-ui-icon name=\"settings\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Hang up -->\n <sw-ui-split-button class=\"hangup\" @sw-split-button-click=${this._onHangUp}>\n <sw-ui-icon name=\"phone-end\"></sw-ui-icon>\n </sw-ui-split-button>\n\n <!-- Spacer to balance the logo and keep buttons centered -->\n <span class=\"bar-spacer\" aria-hidden=\"true\"></span>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-control-bar': SwUiControlBar;\n }\n}\n"],"names":["SwUiControlBar","LitElement","type","detail","kind","item","e","items","html","nothing","css","__decorateClass","property","customElement"],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Dialpad Component
3
+ *
4
+ * A 12-key telephone keypad (0-9, *, #) for entering phone numbers
5
+ * and sending DTMF tones during active calls. Pure UI component — no
6
+ * call logic. Use `sw-call-dialpad` for a version that integrates with
7
+ * a call context.
8
+ *
9
+ * @example
10
+ * ```html
11
+ * <sw-dialpad show-call-button></sw-dialpad>
12
+ * ```
13
+ *
14
+ * Long-press behavior:
15
+ * - Long-press the `0` key → inserts `+` (international prefix).
16
+ * - Long-press the backspace button → clears the entire buffer.
17
+ *
18
+ * @fires sw-digit-press - Fired when a digit button is pressed. Detail: `{ digit: string, digits: string }`
19
+ * @fires sw-dialpad-backspace - Fired when the backspace button is pressed (or long-pressed to clear). Detail: `{ digits: string }`
20
+ * @fires sw-dial - Fired when the call button is pressed. Detail: `{ digits: string }`
21
+ * @fires sw-dialpad-input - Fired when free-text input changes (only when `allow-text` is set). Detail: `{ digits: string }`
22
+ *
23
+ * @cssprop [--interactive-button-primary-bg=#044ef4] - Primary accent color.
24
+ * @cssprop [--interactive-button-primary-hover=#0342cf] - Primary color on hover.
25
+ * @cssprop [--interactive-status-success=#22c55e] - Success/call button color.
26
+ * @cssprop [--interactive-button-destructive-bg=#dc2626] - Danger/hangup button color.
27
+ * @cssprop [--bg-surface=#181a28] - Component background.
28
+ * @cssprop [--fg-default=#f0f0f4] - Text color.
29
+ * @cssprop [--fg-muted=#a0a0aa] - Muted text color.
30
+ * @cssprop [--border-default=rgba(255,255,255,0.12)] - Border color.
31
+ */
32
+ import { LitElement } from 'lit';
33
+ import '../icons/sw-ui-icon.js';
34
+ export declare class SwUiDialpad extends LitElement {
35
+ static styles: import("lit").CSSResult;
36
+ /** Whether to display the call button below the keypad. */
37
+ showCallButton: boolean;
38
+ /** Allow free-text input in the display field (e.g., SIP URIs, vanity letters). Keypad buttons still append DTMF digits. */
39
+ allowText: boolean;
40
+ /** Placeholder text shown in the digit display input. */
41
+ placeholder: string;
42
+ private digits;
43
+ private pressedKey;
44
+ private _longPressTimer;
45
+ private _longPressFired;
46
+ private _startLongPress;
47
+ private _cancelLongPress;
48
+ disconnectedCallback(): void;
49
+ private _clearAll;
50
+ private _pressDigit;
51
+ private _backspace;
52
+ private _dial;
53
+ /**
54
+ * Handle keyboard input on the display field.
55
+ * We intercept all keys and manage state ourselves to prevent the browser
56
+ * from accumulating non-DTMF characters in the input value.
57
+ */
58
+ private _onKeyDown;
59
+ private _onInput;
60
+ render(): import("lit-html").TemplateResult<1>;
61
+ }
62
+ declare global {
63
+ interface HTMLElementTagNameMap {
64
+ 'sw-ui-dialpad': SwUiDialpad;
65
+ }
66
+ }
67
+ //# sourceMappingURL=sw-ui-dialpad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-dialpad.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/controls/sw-ui-dialpad.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,wBAAwB,CAAC;AAuBhC,qBACa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAoKX;IAEF,2DAA2D;IAE3D,cAAc,EAAE,OAAO,CAAS;IAEhC,4HAA4H;IAE5H,SAAS,EAAE,OAAO,CAAS;IAE3B,yDAAyD;IAEzD,WAAW,EAAE,MAAM,CAAkB;IAE5B,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,UAAU,CAAuB;IAElD,OAAO,CAAC,eAAe,CAA8C;IACrE,OAAO,CAAC,eAAe,CAAS;IAEhC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAOf,oBAAoB;IAK7B,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,KAAK;IAWb;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA0BlB,OAAO,CAAC,QAAQ;IAahB,MAAM;CAyEP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,WAAW,CAAC;KAC9B;CACF"}