@signalwire/web-components 4.0.0-beta.8 → 4.0.0-dev-20260515133934

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 (362) 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 +360 -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 +138 -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 +178 -0
  37. package/dist/components/UI/controls/sw-ui-split-button.js.map +1 -0
  38. package/dist/components/UI/host-reset.d.ts +16 -0
  39. package/dist/components/UI/host-reset.d.ts.map +1 -0
  40. package/dist/components/UI/host-reset.js +20 -0
  41. package/dist/components/UI/host-reset.js.map +1 -0
  42. package/dist/components/UI/icons/backspace.svg.js +10 -0
  43. package/dist/components/UI/icons/backspace.svg.js.map +1 -0
  44. package/dist/components/UI/icons/camera-off.svg.js +8 -0
  45. package/dist/components/UI/icons/camera-off.svg.js.map +1 -0
  46. package/dist/components/UI/icons/camera-on.svg.js +8 -0
  47. package/dist/components/UI/icons/camera-on.svg.js.map +1 -0
  48. package/dist/components/UI/icons/check-circle.svg.js +6 -0
  49. package/dist/components/UI/icons/check-circle.svg.js.map +1 -0
  50. package/dist/components/UI/icons/chevron-up.svg.js +8 -0
  51. package/dist/components/UI/icons/chevron-up.svg.js.map +1 -0
  52. package/dist/components/UI/icons/close.svg.js +6 -0
  53. package/dist/components/UI/icons/close.svg.js.map +1 -0
  54. package/dist/components/UI/icons/copy.svg.js +6 -0
  55. package/dist/components/UI/icons/copy.svg.js.map +1 -0
  56. package/dist/components/UI/icons/download.svg.js +6 -0
  57. package/dist/components/UI/icons/download.svg.js.map +1 -0
  58. package/dist/components/UI/icons/fullscreen-exit.svg.js +8 -0
  59. package/dist/components/UI/icons/fullscreen-exit.svg.js.map +1 -0
  60. package/dist/components/UI/icons/fullscreen.svg.js +8 -0
  61. package/dist/components/UI/icons/fullscreen.svg.js.map +1 -0
  62. package/dist/components/UI/icons/hand-raise.svg.js +6 -0
  63. package/dist/components/UI/icons/hand-raise.svg.js.map +1 -0
  64. package/dist/components/UI/icons/icons.d.ts +31 -0
  65. package/dist/components/UI/icons/icons.d.ts.map +1 -0
  66. package/dist/components/UI/icons/icons.js +60 -0
  67. package/dist/components/UI/icons/icons.js.map +1 -0
  68. package/dist/components/UI/icons/index.d.ts +4 -0
  69. package/dist/components/UI/icons/index.d.ts.map +1 -0
  70. package/dist/components/UI/icons/info-circle.svg.js +6 -0
  71. package/dist/components/UI/icons/info-circle.svg.js.map +1 -0
  72. package/dist/components/UI/icons/mic-off.svg.js +8 -0
  73. package/dist/components/UI/icons/mic-off.svg.js.map +1 -0
  74. package/dist/components/UI/icons/mic-on.svg.js +8 -0
  75. package/dist/components/UI/icons/mic-on.svg.js.map +1 -0
  76. package/dist/components/UI/icons/person.svg.js +8 -0
  77. package/dist/components/UI/icons/person.svg.js.map +1 -0
  78. package/dist/components/UI/icons/phone-call.svg.js +8 -0
  79. package/dist/components/UI/icons/phone-call.svg.js.map +1 -0
  80. package/dist/components/UI/icons/phone-end.svg.js +8 -0
  81. package/dist/components/UI/icons/phone-end.svg.js.map +1 -0
  82. package/dist/components/UI/icons/room.svg.js +8 -0
  83. package/dist/components/UI/icons/room.svg.js.map +1 -0
  84. package/dist/components/UI/icons/screen-share-off.svg.js +9 -0
  85. package/dist/components/UI/icons/screen-share-off.svg.js.map +1 -0
  86. package/dist/components/UI/icons/screen-share.svg.js +9 -0
  87. package/dist/components/UI/icons/screen-share.svg.js.map +1 -0
  88. package/dist/components/UI/icons/sendIcon.svg.js +9 -0
  89. package/dist/components/UI/icons/sendIcon.svg.js.map +1 -0
  90. package/dist/components/UI/icons/settings.svg.js +8 -0
  91. package/dist/components/UI/icons/settings.svg.js.map +1 -0
  92. package/dist/components/UI/icons/speaker-off.svg.js +8 -0
  93. package/dist/components/UI/icons/speaker-off.svg.js.map +1 -0
  94. package/dist/components/UI/icons/speaker-on.svg.js +8 -0
  95. package/dist/components/UI/icons/speaker-on.svg.js.map +1 -0
  96. package/dist/components/UI/icons/spinner.svg.js +9 -0
  97. package/dist/components/UI/icons/spinner.svg.js.map +1 -0
  98. package/dist/components/UI/icons/sw-logo.svg.js +11 -0
  99. package/dist/components/UI/icons/sw-logo.svg.js.map +1 -0
  100. package/dist/components/UI/icons/sw-ui-icon.d.ts +28 -0
  101. package/dist/components/UI/icons/sw-ui-icon.d.ts.map +1 -0
  102. package/dist/components/UI/icons/sw-ui-icon.js +47 -0
  103. package/dist/components/UI/icons/sw-ui-icon.js.map +1 -0
  104. package/dist/components/UI/icons/transcript.svg.js +10 -0
  105. package/dist/components/UI/icons/transcript.svg.js.map +1 -0
  106. package/dist/components/UI/index.d.ts +18 -0
  107. package/dist/components/UI/index.d.ts.map +1 -0
  108. package/dist/components/UI/layout/sw-ui-background.d.ts +33 -0
  109. package/dist/components/UI/layout/sw-ui-background.d.ts.map +1 -0
  110. package/dist/components/UI/layout/sw-ui-background.js +106 -0
  111. package/dist/components/UI/layout/sw-ui-background.js.map +1 -0
  112. package/dist/components/UI/layout/sw-ui-call-layout.d.ts +69 -0
  113. package/dist/components/UI/layout/sw-ui-call-layout.d.ts.map +1 -0
  114. package/dist/components/UI/layout/sw-ui-call-layout.js +278 -0
  115. package/dist/components/UI/layout/sw-ui-call-layout.js.map +1 -0
  116. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts +50 -0
  117. package/dist/components/UI/layout/sw-ui-content-drawer.d.ts.map +1 -0
  118. package/dist/components/UI/layout/sw-ui-content-drawer.js +413 -0
  119. package/dist/components/UI/layout/sw-ui-content-drawer.js.map +1 -0
  120. package/dist/components/UI/layout/sw-ui-modal.d.ts +31 -0
  121. package/dist/components/UI/layout/sw-ui-modal.d.ts.map +1 -0
  122. package/dist/components/UI/layout/sw-ui-modal.js +150 -0
  123. package/dist/components/UI/layout/sw-ui-modal.js.map +1 -0
  124. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts +15 -0
  125. package/dist/components/UI/layout/sw-ui-responsive-container.d.ts.map +1 -0
  126. package/dist/components/UI/layout/sw-ui-responsive-container.js +78 -0
  127. package/dist/components/UI/layout/sw-ui-responsive-container.js.map +1 -0
  128. package/dist/components/UI/sw-ui-alert.d.ts +37 -0
  129. package/dist/components/UI/sw-ui-alert.d.ts.map +1 -0
  130. package/dist/components/UI/sw-ui-alert.js +127 -0
  131. package/dist/components/UI/sw-ui-alert.js.map +1 -0
  132. package/dist/components/UI/sw-ui-transcript-view.d.ts +56 -0
  133. package/dist/components/UI/sw-ui-transcript-view.d.ts.map +1 -0
  134. package/dist/components/UI/sw-ui-transcript-view.js +342 -0
  135. package/dist/components/UI/sw-ui-transcript-view.js.map +1 -0
  136. package/dist/components/{audio-level.d.ts → sw-audio-level.d.ts} +44 -4
  137. package/dist/components/sw-audio-level.d.ts.map +1 -0
  138. package/dist/components/sw-audio-level.js +252 -0
  139. package/dist/components/sw-audio-level.js.map +1 -0
  140. package/dist/components/sw-call-controls.d.ts +58 -0
  141. package/dist/components/sw-call-controls.d.ts.map +1 -0
  142. package/dist/components/sw-call-controls.js +186 -0
  143. package/dist/components/sw-call-controls.js.map +1 -0
  144. package/dist/components/sw-call-dialpad.d.ts +52 -0
  145. package/dist/components/sw-call-dialpad.d.ts.map +1 -0
  146. package/dist/components/sw-call-dialpad.js +70 -0
  147. package/dist/components/sw-call-dialpad.js.map +1 -0
  148. package/dist/components/sw-call-media.d.ts +59 -0
  149. package/dist/components/sw-call-media.d.ts.map +1 -0
  150. package/dist/components/sw-call-media.js +178 -0
  151. package/dist/components/sw-call-media.js.map +1 -0
  152. package/dist/components/sw-call-provider.d.ts +41 -0
  153. package/dist/components/sw-call-provider.d.ts.map +1 -0
  154. package/dist/components/sw-call-provider.js +37 -0
  155. package/dist/components/sw-call-provider.js.map +1 -0
  156. package/dist/components/sw-call-status.d.ts +50 -0
  157. package/dist/components/sw-call-status.d.ts.map +1 -0
  158. package/dist/components/sw-call-status.js +204 -0
  159. package/dist/components/sw-call-status.js.map +1 -0
  160. package/dist/components/sw-call-widget/client-factory.d.ts +6 -0
  161. package/dist/components/sw-call-widget/client-factory.d.ts.map +1 -0
  162. package/dist/components/sw-call-widget/client-factory.js +25 -0
  163. package/dist/components/sw-call-widget/client-factory.js.map +1 -0
  164. package/dist/components/sw-call-widget/sw-call-widget.d.ts +110 -0
  165. package/dist/components/sw-call-widget/sw-call-widget.d.ts.map +1 -0
  166. package/dist/components/sw-call-widget/sw-call-widget.js +251 -0
  167. package/dist/components/sw-call-widget/sw-call-widget.js.map +1 -0
  168. package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts +17 -0
  169. package/dist/components/sw-call-widget/sw-call-widget.templates.d.ts.map +1 -0
  170. package/dist/components/sw-call-widget/sw-call-widget.templates.js +80 -0
  171. package/dist/components/sw-call-widget/sw-call-widget.templates.js.map +1 -0
  172. package/dist/components/sw-click-to-call.d.ts +39 -0
  173. package/dist/components/sw-click-to-call.d.ts.map +1 -0
  174. package/dist/components/sw-click-to-call.js +88 -0
  175. package/dist/components/sw-click-to-call.js.map +1 -0
  176. package/dist/components/sw-device-selector/index.d.ts +2 -0
  177. package/dist/components/sw-device-selector/index.d.ts.map +1 -0
  178. package/dist/components/sw-device-selector/sw-device-selector.d.ts +69 -0
  179. package/dist/components/sw-device-selector/sw-device-selector.d.ts.map +1 -0
  180. package/dist/components/sw-device-selector/sw-device-selector.js +278 -0
  181. package/dist/components/sw-device-selector/sw-device-selector.js.map +1 -0
  182. package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts +2 -0
  183. package/dist/components/sw-device-selector/sw-device-selector.styles.d.ts.map +1 -0
  184. package/dist/components/sw-device-selector/sw-device-selector.styles.js +238 -0
  185. package/dist/components/sw-device-selector/sw-device-selector.styles.js.map +1 -0
  186. package/dist/components/{directory.d.ts → sw-directory.d.ts} +18 -4
  187. package/dist/components/sw-directory.d.ts.map +1 -0
  188. package/dist/components/sw-directory.js +435 -0
  189. package/dist/components/sw-directory.js.map +1 -0
  190. package/dist/components/sw-local-camera.d.ts +53 -0
  191. package/dist/components/sw-local-camera.d.ts.map +1 -0
  192. package/dist/components/sw-local-camera.js +147 -0
  193. package/dist/components/sw-local-camera.js.map +1 -0
  194. package/dist/components/sw-participant-controls.d.ts +58 -0
  195. package/dist/components/sw-participant-controls.d.ts.map +1 -0
  196. package/dist/components/sw-participant-controls.js +306 -0
  197. package/dist/components/sw-participant-controls.js.map +1 -0
  198. package/dist/components/sw-participants.d.ts +55 -0
  199. package/dist/components/sw-participants.d.ts.map +1 -0
  200. package/dist/components/sw-participants.js +320 -0
  201. package/dist/components/sw-participants.js.map +1 -0
  202. package/dist/components/sw-self-media.d.ts +46 -0
  203. package/dist/components/sw-self-media.d.ts.map +1 -0
  204. package/dist/components/sw-self-media.js +106 -0
  205. package/dist/components/sw-self-media.js.map +1 -0
  206. package/dist/context/CallStateContextController.d.ts +31 -0
  207. package/dist/context/CallStateContextController.d.ts.map +1 -0
  208. package/dist/context/CallStateContextController.js +125 -0
  209. package/dist/context/CallStateContextController.js.map +1 -0
  210. package/dist/context/DevicesContextController.d.ts +38 -0
  211. package/dist/context/DevicesContextController.d.ts.map +1 -0
  212. package/dist/context/DevicesContextController.js +124 -0
  213. package/dist/context/DevicesContextController.js.map +1 -0
  214. package/dist/context/TranscriptController.d.ts +32 -0
  215. package/dist/context/TranscriptController.d.ts.map +1 -0
  216. package/dist/context/TranscriptController.js +113 -0
  217. package/dist/context/TranscriptController.js.map +1 -0
  218. package/dist/context/UserEventController.d.ts +26 -0
  219. package/dist/context/UserEventController.d.ts.map +1 -0
  220. package/dist/context/UserEventController.js +55 -0
  221. package/dist/context/UserEventController.js.map +1 -0
  222. package/dist/context/call-state-context.d.ts +75 -0
  223. package/dist/context/call-state-context.d.ts.map +1 -0
  224. package/dist/context/call-state-context.js +39 -0
  225. package/dist/context/call-state-context.js.map +1 -0
  226. package/dist/context/chat-state.d.ts +41 -0
  227. package/dist/context/chat-state.d.ts.map +1 -0
  228. package/dist/context/chat-state.js +61 -0
  229. package/dist/context/chat-state.js.map +1 -0
  230. package/dist/context/devices-context.d.ts +28 -0
  231. package/dist/context/devices-context.d.ts.map +1 -0
  232. package/dist/context/devices-context.js +6 -0
  233. package/dist/context/devices-context.js.map +1 -0
  234. package/dist/context/index.d.ts +9 -1
  235. package/dist/context/index.d.ts.map +1 -1
  236. package/dist/context/transcript-context.d.ts +9 -0
  237. package/dist/context/transcript-context.d.ts.map +1 -0
  238. package/dist/context/transcript-context.js +6 -0
  239. package/dist/context/transcript-context.js.map +1 -0
  240. package/dist/context/types.d.ts +9 -0
  241. package/dist/context/types.d.ts.map +1 -0
  242. package/dist/embed/signalwire-web-components-embed.iife.js +3237 -0
  243. package/dist/embed/signalwire-web-components-embed.iife.js.map +1 -0
  244. package/dist/embed/signalwire-web-components-embed.umd.cjs +3237 -0
  245. package/dist/embed/signalwire-web-components-embed.umd.cjs.map +1 -0
  246. package/dist/embed.d.ts +20 -0
  247. package/dist/embed.d.ts.map +1 -0
  248. package/dist/index.d.ts +19 -13
  249. package/dist/index.d.ts.map +1 -1
  250. package/dist/index.js +84 -35
  251. package/dist/index.js.map +1 -1
  252. package/dist/node_modules/dompurify/dist/purify.es.js +597 -0
  253. package/dist/node_modules/dompurify/dist/purify.es.js.map +1 -0
  254. package/dist/node_modules/marked/lib/marked.esm.js +1475 -0
  255. package/dist/node_modules/marked/lib/marked.esm.js.map +1 -0
  256. package/dist/node_modules/prismjs/components/prism-bash.js +220 -0
  257. package/dist/node_modules/prismjs/components/prism-bash.js.map +1 -0
  258. package/dist/node_modules/prismjs/components/prism-css.js +56 -0
  259. package/dist/node_modules/prismjs/components/prism-css.js.map +1 -0
  260. package/dist/node_modules/prismjs/components/prism-javascript.js +138 -0
  261. package/dist/node_modules/prismjs/components/prism-javascript.js.map +1 -0
  262. package/dist/node_modules/prismjs/components/prism-json.js +26 -0
  263. package/dist/node_modules/prismjs/components/prism-json.js.map +1 -0
  264. package/dist/node_modules/prismjs/components/prism-markdown.js +301 -0
  265. package/dist/node_modules/prismjs/components/prism-markdown.js.map +1 -0
  266. package/dist/node_modules/prismjs/components/prism-python.js +69 -0
  267. package/dist/node_modules/prismjs/components/prism-python.js.map +1 -0
  268. package/dist/node_modules/prismjs/components/prism-sql.js +34 -0
  269. package/dist/node_modules/prismjs/components/prism-sql.js.map +1 -0
  270. package/dist/node_modules/prismjs/components/prism-typescript.js +53 -0
  271. package/dist/node_modules/prismjs/components/prism-typescript.js.map +1 -0
  272. package/dist/node_modules/prismjs/components/prism-yaml.js +67 -0
  273. package/dist/node_modules/prismjs/components/prism-yaml.js.map +1 -0
  274. package/dist/node_modules/prismjs/prism.js +1165 -0
  275. package/dist/node_modules/prismjs/prism.js.map +1 -0
  276. package/dist/react.d.ts +96 -46
  277. package/dist/theme.css +451 -0
  278. package/dist/theme.css.js +5 -0
  279. package/dist/theme.css.js.map +1 -0
  280. package/dist/types/index.d.ts +9 -33
  281. package/dist/types/index.d.ts.map +1 -1
  282. package/dist/utils/index.d.ts +2 -0
  283. package/dist/utils/index.d.ts.map +1 -1
  284. package/dist/utils/prism.d.ts +4 -0
  285. package/dist/utils/prism.d.ts.map +1 -0
  286. package/dist/utils/prism.js +34 -0
  287. package/dist/utils/prism.js.map +1 -0
  288. package/dist/utils/theme-loader.d.ts +11 -0
  289. package/dist/utils/theme-loader.d.ts.map +1 -0
  290. package/dist/utils/theme-loader.js +17 -0
  291. package/dist/utils/theme-loader.js.map +1 -0
  292. package/dist/utils/transcriptToMarkdown.d.ts +14 -0
  293. package/dist/utils/transcriptToMarkdown.d.ts.map +1 -0
  294. package/dist/utils/transcriptToMarkdown.js +59 -0
  295. package/dist/utils/transcriptToMarkdown.js.map +1 -0
  296. package/dist/utils/use-google-font.d.ts +18 -0
  297. package/dist/utils/use-google-font.d.ts.map +1 -0
  298. package/dist/utils/use-google-font.js +12 -0
  299. package/dist/utils/use-google-font.js.map +1 -0
  300. package/dist/utils/user-variables.d.ts +20 -0
  301. package/dist/utils/user-variables.d.ts.map +1 -0
  302. package/dist/utils/user-variables.js +37 -0
  303. package/dist/utils/user-variables.js.map +1 -0
  304. package/dist/utils/video.js +6 -21
  305. package/dist/utils/video.js.map +1 -1
  306. package/package.json +105 -42
  307. package/dist/components/audio-level.d.ts.map +0 -1
  308. package/dist/components/audio-level.js +0 -203
  309. package/dist/components/audio-level.js.map +0 -1
  310. package/dist/components/call-controls.d.ts +0 -163
  311. package/dist/components/call-controls.d.ts.map +0 -1
  312. package/dist/components/call-controls.js +0 -606
  313. package/dist/components/call-controls.js.map +0 -1
  314. package/dist/components/call-media.d.ts +0 -114
  315. package/dist/components/call-media.d.ts.map +0 -1
  316. package/dist/components/call-media.js +0 -219
  317. package/dist/components/call-media.js.map +0 -1
  318. package/dist/components/call-status.d.ts +0 -68
  319. package/dist/components/call-status.d.ts.map +0 -1
  320. package/dist/components/call-status.js +0 -254
  321. package/dist/components/call-status.js.map +0 -1
  322. package/dist/components/click-to-call.d.ts +0 -123
  323. package/dist/components/click-to-call.d.ts.map +0 -1
  324. package/dist/components/click-to-call.js +0 -428
  325. package/dist/components/click-to-call.js.map +0 -1
  326. package/dist/components/device-selector.d.ts +0 -224
  327. package/dist/components/device-selector.d.ts.map +0 -1
  328. package/dist/components/device-selector.js +0 -685
  329. package/dist/components/device-selector.js.map +0 -1
  330. package/dist/components/dialpad.d.ts +0 -60
  331. package/dist/components/dialpad.d.ts.map +0 -1
  332. package/dist/components/dialpad.js +0 -372
  333. package/dist/components/dialpad.js.map +0 -1
  334. package/dist/components/directory.d.ts.map +0 -1
  335. package/dist/components/directory.js +0 -503
  336. package/dist/components/directory.js.map +0 -1
  337. package/dist/components/example-button.d.ts +0 -20
  338. package/dist/components/example-button.d.ts.map +0 -1
  339. package/dist/components/example-button.js +0 -74
  340. package/dist/components/example-button.js.map +0 -1
  341. package/dist/components/participant-controls.d.ts +0 -94
  342. package/dist/components/participant-controls.d.ts.map +0 -1
  343. package/dist/components/participant-controls.js +0 -468
  344. package/dist/components/participant-controls.js.map +0 -1
  345. package/dist/components/participants.d.ts +0 -116
  346. package/dist/components/participants.d.ts.map +0 -1
  347. package/dist/components/participants.js +0 -394
  348. package/dist/components/participants.js.map +0 -1
  349. package/dist/components/self-media.d.ts +0 -78
  350. package/dist/components/self-media.d.ts.map +0 -1
  351. package/dist/components/self-media.js +0 -129
  352. package/dist/components/self-media.js.map +0 -1
  353. package/dist/constants.js +0 -5
  354. package/dist/constants.js.map +0 -1
  355. package/dist/context/call-context.d.ts +0 -13
  356. package/dist/context/call-context.d.ts.map +0 -1
  357. package/dist/context/call-context.js +0 -6
  358. package/dist/context/call-context.js.map +0 -1
  359. package/dist/types/index.js +0 -12
  360. package/dist/types/index.js.map +0 -1
  361. package/dist/utils/debounce.js +0 -13
  362. package/dist/utils/debounce.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import o from "../theme.css.js";
2
+ import { useGoogleFont as e } from "./use-google-font.js";
3
+ let n = !1;
4
+ function i() {
5
+ if (typeof document > "u" || n) return;
6
+ n = !0;
7
+ const t = new CSSStyleSheet();
8
+ t.replaceSync(o), document.adoptedStyleSheets = [...document.adoptedStyleSheets, t];
9
+ }
10
+ function d() {
11
+ e("Lexend", { weights: [300, 400, 500, 600, 700] }), e("Instrument Sans", { weights: [400, 500, 600, 700] }), e("JetBrains Mono", { weights: [400, 500] });
12
+ }
13
+ export {
14
+ d as ensureSignalWireFonts,
15
+ i as ensureSignalWireTheme
16
+ };
17
+ //# sourceMappingURL=theme-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-loader.js","sources":["../../src/utils/theme-loader.ts"],"sourcesContent":["import themeCss from '../theme.css?inline';\nimport { useGoogleFont } from './use-google-font.js';\n\nlet themeAdopted = false;\n\n/**\n * Inject the SignalWire design-token stylesheet into the document so all\n * components — including those in shadow roots — can resolve `--bg-page`,\n * `--fg-default`, `--interactive-button-primary-bg`, etc.\n *\n * Idempotent. Calling twice is a no-op.\n */\nexport function ensureSignalWireTheme(): void {\n if (typeof document === 'undefined' || themeAdopted) return;\n themeAdopted = true;\n\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(themeCss);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n}\n\n/** Load the three SignalWire brand font families via Google Fonts. */\nexport function ensureSignalWireFonts(): void {\n useGoogleFont('Lexend', { weights: [300, 400, 500, 600, 700] });\n useGoogleFont('Instrument Sans', { weights: [400, 500, 600, 700] });\n useGoogleFont('JetBrains Mono', { weights: [400, 500] });\n}\n"],"names":["themeAdopted","ensureSignalWireTheme","sheet","themeCss","ensureSignalWireFonts","useGoogleFont"],"mappings":";;AAGA,IAAIA,IAAe;AASZ,SAASC,IAA8B;AAC5C,MAAI,OAAO,WAAa,OAAeD,EAAc;AACrD,EAAAA,IAAe;AAEf,QAAME,IAAQ,IAAI,cAAA;AAClB,EAAAA,EAAM,YAAYC,CAAQ,GAC1B,SAAS,qBAAqB,CAAC,GAAG,SAAS,oBAAoBD,CAAK;AACtE;AAGO,SAASE,IAA8B;AAC5C,EAAAC,EAAc,UAAU,EAAE,SAAS,CAAC,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,GAC9DA,EAAc,mBAAmB,EAAE,SAAS,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,GAClEA,EAAc,kBAAkB,EAAE,SAAS,CAAC,KAAK,GAAG,GAAG;AACzD;"}
@@ -0,0 +1,14 @@
1
+ import type { TranscriptEntry } from '../components/UI/sw-ui-transcript-view.js';
2
+ /**
3
+ * Serializes a transcript entry list to a Markdown string.
4
+ *
5
+ * Format per entry type:
6
+ * user → **You:** text
7
+ * agent → **Agent:** text
8
+ * system → *text*
9
+ *
10
+ * meta.code → fenced code block (with language tag when present)
11
+ * meta.links → markdown link list appended after the message text
12
+ */
13
+ export declare function transcriptToMarkdown(entries: TranscriptEntry[]): string;
14
+ //# sourceMappingURL=transcriptToMarkdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptToMarkdown.d.ts","sourceRoot":"","sources":["../../src/utils/transcriptToMarkdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,2CAA2C,CAAC;AAEtG;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,MAAM,CAuBvE"}
@@ -0,0 +1,59 @@
1
+ function r(t) {
2
+ const n = ["# Transcript", "", `*Generated: ${(/* @__PURE__ */ new Date()).toLocaleString(void 0, {
3
+ year: "numeric",
4
+ month: "long",
5
+ day: "numeric",
6
+ hour: "2-digit",
7
+ minute: "2-digit"
8
+ })}*`, ""], a = t.filter((s) => s.state === "complete");
9
+ for (const s of a)
10
+ n.push("---", ""), n.push(...u(s), "");
11
+ return a.length > 0 && n.push("---", ""), n.join(`
12
+ `);
13
+ }
14
+ function u(t) {
15
+ var n, a, s, i;
16
+ const e = [];
17
+ switch (t.type) {
18
+ case "user":
19
+ e.push(`**You:** ${t.text}`);
20
+ break;
21
+ case "agent":
22
+ e.push(`**Agent:** ${t.text}`);
23
+ break;
24
+ case "system":
25
+ e.push(`*${t.text}*`);
26
+ break;
27
+ }
28
+ if ((n = t.meta) != null && n.code) {
29
+ const { language: o = "", content: c } = t.meta.code;
30
+ e.push("", `\`\`\`${o}`, c, "```");
31
+ }
32
+ if ((s = (a = t.meta) == null ? void 0 : a.links) != null && s.length) {
33
+ e.push("");
34
+ for (const o of t.meta.links)
35
+ e.push(`- [${o.label}](${o.url})`);
36
+ }
37
+ return (i = t.meta) != null && i.displayContent && e.push(...l(t.meta.displayContent)), e;
38
+ }
39
+ function l(t) {
40
+ const e = [""];
41
+ switch (t.format) {
42
+ case "code":
43
+ e.push(`\`\`\`${t.language ?? ""}`, t.content, "```");
44
+ break;
45
+ case "markdown":
46
+ e.push(t.content);
47
+ break;
48
+ case "html":
49
+ e.push("<!-- html content -->", t.content, "<!-- /html content -->");
50
+ break;
51
+ default:
52
+ e.push(t.content);
53
+ }
54
+ return e;
55
+ }
56
+ export {
57
+ r as transcriptToMarkdown
58
+ };
59
+ //# sourceMappingURL=transcriptToMarkdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transcriptToMarkdown.js","sources":["../../src/utils/transcriptToMarkdown.ts"],"sourcesContent":["import type { TranscriptEntry, TranscriptEntryMeta } from '../components/UI/sw-ui-transcript-view.js';\n\n/**\n * Serializes a transcript entry list to a Markdown string.\n *\n * Format per entry type:\n * user → **You:** text\n * agent → **Agent:** text\n * system → *text*\n *\n * meta.code → fenced code block (with language tag when present)\n * meta.links → markdown link list appended after the message text\n */\nexport function transcriptToMarkdown(entries: TranscriptEntry[]): string {\n const timestamp = new Date().toLocaleString(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n const lines: string[] = [`# Transcript`, ``, `*Generated: ${timestamp}*`, ``];\n\n const completed = entries.filter((e) => e.state === 'complete');\n\n for (const entry of completed) {\n lines.push('---', '');\n lines.push(...serializeEntry(entry), '');\n }\n\n if (completed.length > 0) {\n lines.push('---', '');\n }\n\n return lines.join('\\n');\n}\n\nfunction serializeEntry(entry: TranscriptEntry): string[] {\n const lines: string[] = [];\n\n switch (entry.type) {\n case 'user':\n lines.push(`**You:** ${entry.text}`);\n break;\n case 'agent':\n lines.push(`**Agent:** ${entry.text}`);\n break;\n case 'system':\n lines.push(`*${entry.text}*`);\n break;\n }\n\n if (entry.meta?.code) {\n const { language = '', content } = entry.meta.code;\n lines.push('', `\\`\\`\\`${language}`, content, '```');\n }\n\n if (entry.meta?.links?.length) {\n lines.push('');\n for (const link of entry.meta.links) {\n lines.push(`- [${link.label}](${link.url})`);\n }\n }\n\n if (entry.meta?.displayContent) {\n lines.push(...serializeDisplayContent(entry.meta.displayContent));\n }\n\n return lines;\n}\n\nfunction serializeDisplayContent(\n dc: NonNullable<TranscriptEntryMeta['displayContent']>\n): string[] {\n const lines: string[] = [''];\n\n switch (dc.format) {\n case 'code':\n lines.push(`\\`\\`\\`${dc.language ?? ''}`, dc.content, '```');\n break;\n case 'markdown':\n lines.push(dc.content);\n break;\n case 'html':\n // Wrap in an HTML comment so the file stays valid markdown while\n // preserving the raw payload for anyone who needs it.\n lines.push('<!-- html content -->', dc.content, '<!-- /html content -->');\n break;\n default:\n lines.push(dc.content);\n }\n\n return lines;\n}\n"],"names":["transcriptToMarkdown","entries","lines","completed","e","entry","serializeEntry","_a","_b","_c","_d","language","content","link","serializeDisplayContent","dc"],"mappings":"AAaO,SAASA,EAAqBC,GAAoC;AASvE,QAAMC,IAAkB,CAAC,gBAAgB,IAAI,gBAR3B,oBAAI,KAAA,GAAO,eAAe,QAAW;AAAA,IACrD,MAAM;AAAA,IACN,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,EAAA,CACT,CAEoE,KAAK,EAAE,GAEtEC,IAAYF,EAAQ,OAAO,CAACG,MAAMA,EAAE,UAAU,UAAU;AAE9D,aAAWC,KAASF;AAClB,IAAAD,EAAM,KAAK,OAAO,EAAE,GACpBA,EAAM,KAAK,GAAGI,EAAeD,CAAK,GAAG,EAAE;AAGzC,SAAIF,EAAU,SAAS,KACrBD,EAAM,KAAK,OAAO,EAAE,GAGfA,EAAM,KAAK;AAAA,CAAI;AACxB;AAEA,SAASI,EAAeD,GAAkC;AAzBnD,MAAAE,GAAAC,GAAAC,GAAAC;AA0BL,QAAMR,IAAkB,CAAA;AAExB,UAAQG,EAAM,MAAA;AAAA,IACZ,KAAK;AACH,MAAAH,EAAM,KAAK,YAAYG,EAAM,IAAI,EAAE;AACnC;AAAA,IACF,KAAK;AACH,MAAAH,EAAM,KAAK,cAAcG,EAAM,IAAI,EAAE;AACrC;AAAA,IACF,KAAK;AACH,MAAAH,EAAM,KAAK,IAAIG,EAAM,IAAI,GAAG;AAC5B;AAAA,EAAA;AAGJ,OAAIE,IAAAF,EAAM,SAAN,QAAAE,EAAY,MAAM;AACpB,UAAM,EAAE,UAAAI,IAAW,IAAI,SAAAC,EAAA,IAAYP,EAAM,KAAK;AAC9C,IAAAH,EAAM,KAAK,IAAI,SAASS,CAAQ,IAAIC,GAAS,KAAK;AAAA,EACpD;AAEA,OAAIH,KAAAD,IAAAH,EAAM,SAAN,gBAAAG,EAAY,UAAZ,QAAAC,EAAmB,QAAQ;AAC7B,IAAAP,EAAM,KAAK,EAAE;AACb,eAAWW,KAAQR,EAAM,KAAK;AAC5B,MAAAH,EAAM,KAAK,MAAMW,EAAK,KAAK,KAAKA,EAAK,GAAG,GAAG;AAAA,EAE/C;AAEA,UAAIH,IAAAL,EAAM,SAAN,QAAAK,EAAY,kBACdR,EAAM,KAAK,GAAGY,EAAwBT,EAAM,KAAK,cAAc,CAAC,GAG3DH;AACT;AAEA,SAASY,EACPC,GACU;AACV,QAAMb,IAAkB,CAAC,EAAE;AAE3B,UAAQa,EAAG,QAAA;AAAA,IACT,KAAK;AACH,MAAAb,EAAM,KAAK,SAASa,EAAG,YAAY,EAAE,IAAIA,EAAG,SAAS,KAAK;AAC1D;AAAA,IACF,KAAK;AACH,MAAAb,EAAM,KAAKa,EAAG,OAAO;AACrB;AAAA,IACF,KAAK;AAGH,MAAAb,EAAM,KAAK,yBAAyBa,EAAG,SAAS,wBAAwB;AACxE;AAAA,IACF;AACE,MAAAb,EAAM,KAAKa,EAAG,OAAO;AAAA,EAAA;AAGzB,SAAOb;AACT;"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Load a Google Font into the document. Idempotent — calling twice with the
3
+ * same arguments injects only one `<link>`.
4
+ *
5
+ * @example
6
+ * useGoogleFont('Lexend', { weights: [400, 500, 700] });
7
+ * useGoogleFont('JetBrains Mono');
8
+ */
9
+ export interface UseGoogleFontOptions {
10
+ /** Font weights to load. Defaults to `[400]`. */
11
+ weights?: number[];
12
+ /** `font-display` strategy. Defaults to `'swap'`. */
13
+ display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';
14
+ /** Whether to load italic variants alongside the upright weights. */
15
+ italic?: boolean;
16
+ }
17
+ export declare function useGoogleFont(name: string, options?: UseGoogleFontOptions): void;
18
+ //# sourceMappingURL=use-google-font.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-google-font.d.ts","sourceRoot":"","sources":["../../src/utils/use-google-font.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9D,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,IAAI,CAmBpF"}
@@ -0,0 +1,12 @@
1
+ const r = "https://fonts.googleapis.com/css2";
2
+ function d(o, e = {}) {
3
+ if (typeof document > "u") return;
4
+ const n = e.weights ?? [400], l = e.display ?? "swap", c = o.replace(/\s+/g, "+"), a = e.italic ? `ital,wght@${n.flatMap((i) => [`0,${i}`, `1,${i}`]).join(";")}` : `wght@${n.join(";")}`, s = `${r}?family=${c}:${a}&display=${l}`;
5
+ if (document.querySelector(`link[href="${s}"]`)) return;
6
+ const t = document.createElement("link");
7
+ t.rel = "stylesheet", t.href = s, document.head.appendChild(t);
8
+ }
9
+ export {
10
+ d as useGoogleFont
11
+ };
12
+ //# sourceMappingURL=use-google-font.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-google-font.js","sources":["../../src/utils/use-google-font.ts"],"sourcesContent":["/**\n * Load a Google Font into the document. Idempotent — calling twice with the\n * same arguments injects only one `<link>`.\n *\n * @example\n * useGoogleFont('Lexend', { weights: [400, 500, 700] });\n * useGoogleFont('JetBrains Mono');\n */\nexport interface UseGoogleFontOptions {\n /** Font weights to load. Defaults to `[400]`. */\n weights?: number[];\n /** `font-display` strategy. Defaults to `'swap'`. */\n display?: 'auto' | 'block' | 'swap' | 'fallback' | 'optional';\n /** Whether to load italic variants alongside the upright weights. */\n italic?: boolean;\n}\n\nconst GOOGLE_FONTS_BASE = 'https://fonts.googleapis.com/css2';\n\nexport function useGoogleFont(name: string, options: UseGoogleFontOptions = {}): void {\n if (typeof document === 'undefined') return;\n\n const weights = options.weights ?? [400];\n const display = options.display ?? 'swap';\n const family = name.replace(/\\s+/g, '+');\n\n const axis = options.italic\n ? `ital,wght@${weights.flatMap((w) => [`0,${w}`, `1,${w}`]).join(';')}`\n : `wght@${weights.join(';')}`;\n\n const href = `${GOOGLE_FONTS_BASE}?family=${family}:${axis}&display=${display}`;\n\n if (document.querySelector(`link[href=\"${href}\"]`)) return;\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n}\n"],"names":["GOOGLE_FONTS_BASE","useGoogleFont","name","options","weights","display","family","axis","w","href","link"],"mappings":"AAiBA,MAAMA,IAAoB;AAEnB,SAASC,EAAcC,GAAcC,IAAgC,IAAU;AACpF,MAAI,OAAO,WAAa,IAAa;AAErC,QAAMC,IAAUD,EAAQ,WAAW,CAAC,GAAG,GACjCE,IAAUF,EAAQ,WAAW,QAC7BG,IAASJ,EAAK,QAAQ,QAAQ,GAAG,GAEjCK,IAAOJ,EAAQ,SACjB,aAAaC,EAAQ,QAAQ,CAACI,MAAM,CAAC,KAAKA,CAAC,IAAI,KAAKA,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,KACnE,QAAQJ,EAAQ,KAAK,GAAG,CAAC,IAEvBK,IAAO,GAAGT,CAAiB,WAAWM,CAAM,IAAIC,CAAI,YAAYF,CAAO;AAE7E,MAAI,SAAS,cAAc,cAAcI,CAAI,IAAI,EAAG;AAEpD,QAAMC,IAAO,SAAS,cAAc,MAAM;AAC1C,EAAAA,EAAK,MAAM,cACXA,EAAK,OAAOD,GACZ,SAAS,KAAK,YAAYC,CAAI;AAChC;"}
@@ -0,0 +1,20 @@
1
+ /** Formats the widget's content drawer can render. */
2
+ export declare const WIDGET_DISPLAY_FORMATS: readonly ["text", "markdown", "code", "html"];
3
+ /**
4
+ * Parse a user-supplied JSON string into a userVariables object. Returns an
5
+ * empty object on null/undefined/empty input, and on parse failure logs a
6
+ * warning and returns an empty object — never throws.
7
+ */
8
+ export declare function parseUserVariablesAttribute(raw: string | null | undefined): Record<string, unknown>;
9
+ /**
10
+ * Merge widget self-advertisement (display_content capability + opened_at
11
+ * timestamp) into a userVariables object. User-supplied keys win on shallow
12
+ * conflict; capability and metadata sub-objects are deep-merged one level so
13
+ * callers can add their own keys without losing the widget's signal.
14
+ *
15
+ * The shape matches what `Sigmond2Agent._caller_has_display` looks for:
16
+ * - `capabilities.display_content` (signal #1)
17
+ * - `metadata.widget.opened_at` (signal #2)
18
+ */
19
+ export declare function withWidgetCapabilities(base: Record<string, unknown>, now?: () => string): Record<string, unknown>;
20
+ //# sourceMappingURL=user-variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-variables.d.ts","sourceRoot":"","sources":["../../src/utils/user-variables.ts"],"names":[],"mappings":"AAIA,sDAAsD;AACtD,eAAO,MAAM,sBAAsB,+CAAgD,CAAC;AAMpF;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,GAAE,MAAM,MAAuC,GACjD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB"}
@@ -0,0 +1,37 @@
1
+ import { getLogger as s } from "@signalwire/js";
2
+ const i = s(), c = ["text", "markdown", "code", "html"];
3
+ function a(t) {
4
+ return typeof t == "object" && t !== null && !Array.isArray(t);
5
+ }
6
+ function g(t) {
7
+ if (!t) return {};
8
+ try {
9
+ const e = JSON.parse(t);
10
+ return a(e) ? e : (i.warn("[CallWidget] user-variables must be a JSON object; ignoring"), {});
11
+ } catch (e) {
12
+ return i.warn("[CallWidget] Failed to parse user-variables JSON; ignoring", e), {};
13
+ }
14
+ }
15
+ function d(t, e = () => (/* @__PURE__ */ new Date()).toISOString()) {
16
+ const n = a(t.capabilities) ? t.capabilities : {}, r = a(t.metadata) ? t.metadata : {}, o = a(r.widget) ? r.widget : {};
17
+ return {
18
+ ...t,
19
+ capabilities: {
20
+ display_content: { formats: [...c] },
21
+ ...n
22
+ },
23
+ metadata: {
24
+ ...r,
25
+ widget: {
26
+ opened_at: e(),
27
+ ...o
28
+ }
29
+ }
30
+ };
31
+ }
32
+ export {
33
+ c as WIDGET_DISPLAY_FORMATS,
34
+ g as parseUserVariablesAttribute,
35
+ d as withWidgetCapabilities
36
+ };
37
+ //# sourceMappingURL=user-variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-variables.js","sources":["../../src/utils/user-variables.ts"],"sourcesContent":["import { getLogger } from '@signalwire/js';\n\nconst logger = getLogger();\n\n/** Formats the widget's content drawer can render. */\nexport const WIDGET_DISPLAY_FORMATS = ['text', 'markdown', 'code', 'html'] as const;\n\nfunction isPlainObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n\n/**\n * Parse a user-supplied JSON string into a userVariables object. Returns an\n * empty object on null/undefined/empty input, and on parse failure logs a\n * warning and returns an empty object — never throws.\n */\nexport function parseUserVariablesAttribute(\n raw: string | null | undefined\n): Record<string, unknown> {\n if (!raw) return {};\n try {\n const parsed = JSON.parse(raw);\n if (!isPlainObject(parsed)) {\n logger.warn('[CallWidget] user-variables must be a JSON object; ignoring');\n return {};\n }\n return parsed;\n } catch (err) {\n logger.warn('[CallWidget] Failed to parse user-variables JSON; ignoring', err);\n return {};\n }\n}\n\n/**\n * Merge widget self-advertisement (display_content capability + opened_at\n * timestamp) into a userVariables object. User-supplied keys win on shallow\n * conflict; capability and metadata sub-objects are deep-merged one level so\n * callers can add their own keys without losing the widget's signal.\n *\n * The shape matches what `Sigmond2Agent._caller_has_display` looks for:\n * - `capabilities.display_content` (signal #1)\n * - `metadata.widget.opened_at` (signal #2)\n */\nexport function withWidgetCapabilities(\n base: Record<string, unknown>,\n now: () => string = () => new Date().toISOString()\n): Record<string, unknown> {\n const baseCaps = isPlainObject(base['capabilities']) ? base['capabilities'] : {};\n const baseMeta = isPlainObject(base['metadata']) ? base['metadata'] : {};\n const baseWidget = isPlainObject(baseMeta['widget']) ? baseMeta['widget'] : {};\n\n return {\n ...base,\n capabilities: {\n display_content: { formats: [...WIDGET_DISPLAY_FORMATS] },\n ...baseCaps,\n },\n metadata: {\n ...baseMeta,\n widget: {\n opened_at: now(),\n ...baseWidget,\n },\n },\n };\n}\n"],"names":["logger","getLogger","WIDGET_DISPLAY_FORMATS","isPlainObject","v","parseUserVariablesAttribute","raw","parsed","err","withWidgetCapabilities","base","now","baseCaps","baseMeta","baseWidget"],"mappings":";AAEA,MAAMA,IAASC,EAAA,GAGFC,IAAyB,CAAC,QAAQ,YAAY,QAAQ,MAAM;AAEzE,SAASC,EAAcC,GAA0C;AAC/D,SAAO,OAAOA,KAAM,YAAYA,MAAM,QAAQ,CAAC,MAAM,QAAQA,CAAC;AAChE;AAOO,SAASC,EACdC,GACyB;AACzB,MAAI,CAACA,EAAK,QAAO,CAAA;AACjB,MAAI;AACF,UAAMC,IAAS,KAAK,MAAMD,CAAG;AAC7B,WAAKH,EAAcI,CAAM,IAIlBA,KAHLP,EAAO,KAAK,6DAA6D,GAClE,CAAA;AAAA,EAGX,SAASQ,GAAK;AACZ,WAAAR,EAAO,KAAK,8DAA8DQ,CAAG,GACtE,CAAA;AAAA,EACT;AACF;AAYO,SAASC,EACdC,GACAC,IAAoB,2BAAU,KAAA,GAAO,eACZ;AACzB,QAAMC,IAAWT,EAAcO,EAAK,YAAe,IAAIA,EAAK,eAAkB,CAAA,GACxEG,IAAWV,EAAcO,EAAK,QAAW,IAAIA,EAAK,WAAc,CAAA,GAChEI,IAAaX,EAAcU,EAAS,MAAS,IAAIA,EAAS,SAAY,CAAA;AAE5E,SAAO;AAAA,IACL,GAAGH;AAAA,IACH,cAAc;AAAA,MACZ,iBAAiB,EAAE,SAAS,CAAC,GAAGR,CAAsB,EAAA;AAAA,MACtD,GAAGU;AAAA,IAAA;AAAA,IAEL,UAAU;AAAA,MACR,GAAGC;AAAA,MACH,QAAQ;AAAA,QACN,WAAWF,EAAA;AAAA,QACX,GAAGG;AAAA,MAAA;AAAA,IACL;AAAA,EACF;AAEJ;"}
@@ -1,26 +1,11 @@
1
- import { VIDEO_READY_TIMEOUT_MS as n } from "../constants.js";
2
- function c(e) {
3
- return new Promise((r) => {
4
- if (e.readyState >= HTMLMediaElement.HAVE_METADATA) {
5
- r();
6
- return;
7
- }
8
- let i = !1;
9
- const t = () => {
10
- i || (i = !0, clearTimeout(a), e.removeEventListener("canplay", t), e.removeEventListener("resize", t), r());
11
- }, a = setTimeout(t, n);
12
- e.addEventListener("canplay", t), e.addEventListener("resize", t);
13
- });
1
+ function a(c, t) {
2
+ c.srcObject = t;
14
3
  }
15
- function d(e, r) {
16
- e.srcObject = r;
17
- }
18
- function s(e) {
19
- e.srcObject && (e.srcObject = null);
4
+ function e(c) {
5
+ c.srcObject && (c.srcObject = null);
20
6
  }
21
7
  export {
22
- d as attachMediaStream,
23
- s as detachMediaStream,
24
- c as waitForVideoReady
8
+ a as attachMediaStream,
9
+ e as detachMediaStream
25
10
  };
26
11
  //# sourceMappingURL=video.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"video.js","sources":["../../src/utils/video.ts"],"sourcesContent":["/**\n * Video element utilities for creating and managing video elements\n * with proper configuration for WebRTC streams.\n */\n\nimport { VIDEO_READY_TIMEOUT_MS } from '../constants.js';\n\n/**\n * Creates a video element configured for WebRTC streams.\n * The video is muted, autoplays, and plays inline (mobile Safari support).\n * Prevents pause events which can occur on camera switches or PiP mode.\n *\n * @returns A configured HTMLVideoElement\n */\nexport function createVideoElement(): HTMLVideoElement {\n const video = document.createElement('video');\n video.muted = true;\n video.autoplay = true;\n video.playsInline = true;\n\n // Prevent pause (Safari/Firefox pause on PiP, camera switch)\n video.addEventListener('pause', () => {\n video.play().catch((error) => {\n console.error('Video Element Paused', error);\n });\n });\n\n return video;\n}\n\n/**\n * Waits for a video element to be ready for playback.\n * Resolves when the video has metadata or when it can play.\n *\n * @param element - The video element to wait for\n * @returns A promise that resolves when the video is ready\n */\nexport function waitForVideoReady(element: HTMLVideoElement): Promise<void> {\n return new Promise<void>((resolve) => {\n if (element.readyState >= HTMLMediaElement.HAVE_METADATA) {\n resolve();\n return;\n }\n\n let resolved = false;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n clearTimeout(timeoutId);\n element.removeEventListener('canplay', done);\n element.removeEventListener('resize', done);\n resolve();\n };\n\n // Timeout fallback for audio-only streams where resize/canplay may never fire\n const timeoutId = setTimeout(done, VIDEO_READY_TIMEOUT_MS);\n element.addEventListener('canplay', done);\n element.addEventListener('resize', done);\n });\n}\n\n/**\n * Attaches a MediaStream to a video element.\n *\n * @param element - The video element to attach the stream to\n * @param stream - The MediaStream to attach, or null to detach\n */\nexport function attachMediaStream(element: HTMLVideoElement, stream: MediaStream | null): void {\n element.srcObject = stream;\n}\n\n/**\n * Detaches any MediaStream from a video element.\n *\n * @param element - The video element to detach the stream from\n */\nexport function detachMediaStream(element: HTMLVideoElement): void {\n if (element.srcObject) {\n element.srcObject = null;\n }\n}\n"],"names":["waitForVideoReady","element","resolve","resolved","done","timeoutId","VIDEO_READY_TIMEOUT_MS","attachMediaStream","stream","detachMediaStream"],"mappings":";AAqCO,SAASA,EAAkBC,GAA0C;AAC1E,SAAO,IAAI,QAAc,CAACC,MAAY;AACpC,QAAID,EAAQ,cAAc,iBAAiB,eAAe;AACxD,MAAAC,EAAA;AACA;AAAA,IACF;AAEA,QAAIC,IAAW;AAEf,UAAMC,IAAO,MAAM;AACjB,MAAID,MACJA,IAAW,IACX,aAAaE,CAAS,GACtBJ,EAAQ,oBAAoB,WAAWG,CAAI,GAC3CH,EAAQ,oBAAoB,UAAUG,CAAI,GAC1CF,EAAA;AAAA,IACF,GAGMG,IAAY,WAAWD,GAAME,CAAsB;AACzD,IAAAL,EAAQ,iBAAiB,WAAWG,CAAI,GACxCH,EAAQ,iBAAiB,UAAUG,CAAI;AAAA,EACzC,CAAC;AACH;AAQO,SAASG,EAAkBN,GAA2BO,GAAkC;AAC7F,EAAAP,EAAQ,YAAYO;AACtB;AAOO,SAASC,EAAkBR,GAAiC;AACjE,EAAIA,EAAQ,cACVA,EAAQ,YAAY;AAExB;"}
1
+ {"version":3,"file":"video.js","sources":["../../src/utils/video.ts"],"sourcesContent":["/**\n * Video element utilities for creating and managing video elements\n * with proper configuration for WebRTC streams.\n */\n\nimport { VIDEO_READY_TIMEOUT_MS } from '../constants.js';\n\n/**\n * Creates a video element configured for WebRTC streams.\n * The video is muted, autoplays, and plays inline (mobile Safari support).\n * Prevents pause events which can occur on camera switches or PiP mode.\n *\n * @returns A configured HTMLVideoElement\n */\nexport function createVideoElement(): HTMLVideoElement {\n const video = document.createElement('video');\n video.muted = true;\n video.autoplay = true;\n video.playsInline = true;\n\n // Prevent pause (Safari/Firefox pause on PiP, camera switch)\n video.addEventListener('pause', () => {\n video.play().catch((error) => {\n console.error('Video Element Paused', error);\n });\n });\n\n return video;\n}\n\n/**\n * Waits for a video element to be ready for playback.\n * Resolves when the video has metadata or when it can play.\n *\n * @param element - The video element to wait for\n * @returns A promise that resolves when the video is ready\n */\nexport function waitForVideoReady(element: HTMLVideoElement): Promise<void> {\n return new Promise<void>((resolve) => {\n if (element.readyState >= HTMLMediaElement.HAVE_METADATA) {\n resolve();\n return;\n }\n\n let resolved = false;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n clearTimeout(timeoutId);\n element.removeEventListener('canplay', done);\n element.removeEventListener('resize', done);\n resolve();\n };\n\n // Timeout fallback for audio-only streams where resize/canplay may never fire\n const timeoutId = setTimeout(done, VIDEO_READY_TIMEOUT_MS);\n element.addEventListener('canplay', done);\n element.addEventListener('resize', done);\n });\n}\n\n/**\n * Attaches a MediaStream to a video element.\n *\n * @param element - The video element to attach the stream to\n * @param stream - The MediaStream to attach, or null to detach\n */\nexport function attachMediaStream(element: HTMLVideoElement, stream: MediaStream | null): void {\n element.srcObject = stream;\n}\n\n/**\n * Detaches any MediaStream from a video element.\n *\n * @param element - The video element to detach the stream from\n */\nexport function detachMediaStream(element: HTMLVideoElement): void {\n if (element.srcObject) {\n element.srcObject = null;\n }\n}\n"],"names":["attachMediaStream","element","stream","detachMediaStream"],"mappings":"AAoEO,SAASA,EAAkBC,GAA2BC,GAAkC;AAC7F,EAAAD,EAAQ,YAAYC;AACtB;AAOO,SAASC,EAAkBF,GAAiC;AACjE,EAAIA,EAAQ,cACVA,EAAQ,YAAY;AAExB;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signalwire/web-components",
3
- "version": "4.0.0-beta.8",
3
+ "version": "4.0.0-dev-20260515133934",
4
4
  "description": "UI components library built with Lit",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,7 +8,7 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "sideEffects": [
10
10
  "./dist/index.js",
11
- "./dist/components/*.js"
11
+ "./dist/components/**/*.js"
12
12
  ],
13
13
  "exports": {
14
14
  ".": {
@@ -16,53 +16,109 @@
16
16
  "import": "./dist/index.js",
17
17
  "default": "./dist/index.js"
18
18
  },
19
- "./call-media": {
20
- "types": "./dist/components/call-media.d.ts",
21
- "import": "./dist/components/call-media.js"
19
+ "./sw-call-media": {
20
+ "types": "./dist/components/sw-call-media.d.ts",
21
+ "import": "./dist/components/sw-call-media.js"
22
22
  },
23
- "./self-media": {
24
- "types": "./dist/components/self-media.d.ts",
25
- "import": "./dist/components/self-media.js"
23
+ "./sw-self-media": {
24
+ "types": "./dist/components/sw-self-media.d.ts",
25
+ "import": "./dist/components/sw-self-media.js"
26
26
  },
27
- "./participants": {
28
- "types": "./dist/components/participants.d.ts",
29
- "import": "./dist/components/participants.js"
27
+ "./sw-local-camera": {
28
+ "types": "./dist/components/sw-local-camera.d.ts",
29
+ "import": "./dist/components/sw-local-camera.js"
30
30
  },
31
- "./call-controls": {
32
- "types": "./dist/components/call-controls.d.ts",
33
- "import": "./dist/components/call-controls.js"
31
+ "./sw-participants": {
32
+ "types": "./dist/components/sw-participants.d.ts",
33
+ "import": "./dist/components/sw-participants.js"
34
34
  },
35
- "./call-status": {
36
- "types": "./dist/components/call-status.d.ts",
37
- "import": "./dist/components/call-status.js"
35
+ "./sw-participant-controls": {
36
+ "types": "./dist/components/sw-participant-controls.d.ts",
37
+ "import": "./dist/components/sw-participant-controls.js"
38
38
  },
39
- "./audio-level": {
40
- "types": "./dist/components/audio-level.d.ts",
41
- "import": "./dist/components/audio-level.js"
39
+ "./sw-call-controls": {
40
+ "types": "./dist/components/sw-call-controls.d.ts",
41
+ "import": "./dist/components/sw-call-controls.js"
42
42
  },
43
- "./device-selector": {
44
- "types": "./dist/components/device-selector.d.ts",
45
- "import": "./dist/components/device-selector.js"
43
+ "./sw-call-status": {
44
+ "types": "./dist/components/sw-call-status.d.ts",
45
+ "import": "./dist/components/sw-call-status.js"
46
46
  },
47
- "./dialpad": {
48
- "types": "./dist/components/dialpad.d.ts",
49
- "import": "./dist/components/dialpad.js"
47
+ "./sw-call-provider": {
48
+ "types": "./dist/components/sw-call-provider.d.ts",
49
+ "import": "./dist/components/sw-call-provider.js"
50
50
  },
51
- "./click-to-call": {
52
- "types": "./dist/components/click-to-call.d.ts",
53
- "import": "./dist/components/click-to-call.js"
51
+ "./sw-call-dialpad": {
52
+ "types": "./dist/components/sw-call-dialpad.d.ts",
53
+ "import": "./dist/components/sw-call-dialpad.js"
54
54
  },
55
- "./directory": {
56
- "types": "./dist/components/directory.d.ts",
57
- "import": "./dist/components/directory.js"
55
+ "./sw-call-widget": {
56
+ "types": "./dist/components/sw-call-widget/sw-call-widget.d.ts",
57
+ "import": "./dist/components/sw-call-widget/sw-call-widget.js"
58
58
  },
59
- "./participant-controls": {
60
- "types": "./dist/components/participant-controls.d.ts",
61
- "import": "./dist/components/participant-controls.js"
59
+ "./sw-audio-level": {
60
+ "types": "./dist/components/sw-audio-level.d.ts",
61
+ "import": "./dist/components/sw-audio-level.js"
62
62
  },
63
- "./example-button": {
64
- "types": "./dist/components/example-button.d.ts",
65
- "import": "./dist/components/example-button.js"
63
+ "./sw-device-selector": {
64
+ "types": "./dist/components/sw-device-selector/index.d.ts",
65
+ "import": "./dist/components/sw-device-selector/index.js"
66
+ },
67
+ "./sw-click-to-call": {
68
+ "types": "./dist/components/sw-click-to-call.d.ts",
69
+ "import": "./dist/components/sw-click-to-call.js"
70
+ },
71
+ "./sw-directory": {
72
+ "types": "./dist/components/sw-directory.d.ts",
73
+ "import": "./dist/components/sw-directory.js"
74
+ },
75
+ "./sw-ui-icon": {
76
+ "types": "./dist/components/UI/icons/sw-ui-icon.d.ts",
77
+ "import": "./dist/components/UI/icons/sw-ui-icon.js"
78
+ },
79
+ "./sw-ui-dropup": {
80
+ "types": "./dist/components/UI/controls/sw-ui-dropup.d.ts",
81
+ "import": "./dist/components/UI/controls/sw-ui-dropup.js"
82
+ },
83
+ "./sw-ui-split-button": {
84
+ "types": "./dist/components/UI/controls/sw-ui-split-button.d.ts",
85
+ "import": "./dist/components/UI/controls/sw-ui-split-button.js"
86
+ },
87
+ "./sw-ui-control-bar": {
88
+ "types": "./dist/components/UI/controls/sw-ui-control-bar.d.ts",
89
+ "import": "./dist/components/UI/controls/sw-ui-control-bar.js"
90
+ },
91
+ "./sw-ui-dialpad": {
92
+ "types": "./dist/components/UI/controls/sw-ui-dialpad.d.ts",
93
+ "import": "./dist/components/UI/controls/sw-ui-dialpad.js"
94
+ },
95
+ "./sw-ui-call-layout": {
96
+ "types": "./dist/components/UI/layout/sw-ui-call-layout.d.ts",
97
+ "import": "./dist/components/UI/layout/sw-ui-call-layout.js"
98
+ },
99
+ "./sw-ui-background": {
100
+ "types": "./dist/components/UI/layout/sw-ui-background.d.ts",
101
+ "import": "./dist/components/UI/layout/sw-ui-background.js"
102
+ },
103
+ "./sw-ui-modal": {
104
+ "types": "./dist/components/UI/layout/sw-ui-modal.d.ts",
105
+ "import": "./dist/components/UI/layout/sw-ui-modal.js"
106
+ },
107
+ "./sw-ui-content-drawer": {
108
+ "types": "./dist/components/UI/layout/sw-ui-content-drawer.d.ts",
109
+ "import": "./dist/components/UI/layout/sw-ui-content-drawer.js"
110
+ },
111
+ "./sw-ui-responsive-container": {
112
+ "types": "./dist/components/UI/layout/sw-ui-responsive-container.d.ts",
113
+ "import": "./dist/components/UI/layout/sw-ui-responsive-container.js"
114
+ },
115
+ "./sw-ui-alert": {
116
+ "types": "./dist/components/UI/sw-ui-alert.d.ts",
117
+ "import": "./dist/components/UI/sw-ui-alert.js"
118
+ },
119
+ "./sw-ui-transcript-view": {
120
+ "types": "./dist/components/UI/sw-ui-transcript-view.d.ts",
121
+ "import": "./dist/components/UI/sw-ui-transcript-view.js"
66
122
  },
67
123
  "./context": {
68
124
  "types": "./dist/context/index.d.ts",
@@ -78,7 +134,8 @@
78
134
  },
79
135
  "./react": {
80
136
  "types": "./dist/react.d.ts"
81
- }
137
+ },
138
+ "./theme.css": "./dist/theme.css"
82
139
  },
83
140
  "files": [
84
141
  "dist"
@@ -86,7 +143,8 @@
86
143
  "scripts": {
87
144
  "dev": "vite",
88
145
  "dev:test": "vite --port 3000",
89
- "build": "vite build && tsc --project tsconfig.build.json && cp src/react.d.ts dist/",
146
+ "build": "vite build && vite build --config vite.embed.config.ts && tsc --project tsconfig.build.json && cp src/react.d.ts dist/ && cp src/theme.css dist/theme.css && vite build --config vite.stories.config.ts",
147
+ "build:stories": "vite build --config vite.stories.config.ts",
90
148
  "preview": "vite preview",
91
149
  "type-check": "tsc --noEmit",
92
150
  "lint": "eslint src --ext .ts",
@@ -111,19 +169,24 @@
111
169
  "license": "MIT",
112
170
  "dependencies": {
113
171
  "@lit/context": "^1.1.0",
172
+ "dompurify": "^3.4.0",
114
173
  "lit": "^3.2.1",
174
+ "marked": "^9.1.6",
175
+ "prismjs": "^1.30.0",
115
176
  "rxjs": "^7.8.2"
116
177
  },
117
178
  "peerDependencies": {
118
- "@signalwire/js": "4.0.0-beta.8"
179
+ "@signalwire/js": "4.0.0-dev-20260515133934"
119
180
  },
120
181
  "devDependencies": {
121
182
  "@playwright/test": "^1.56.1",
122
183
  "@types/node": "^20.19.24",
184
+ "@types/prismjs": "^1.26.6",
123
185
  "@typescript-eslint/eslint-plugin": "^8.46.3",
186
+ "@vaadin/router": "^2.0.1",
124
187
  "@vitest/coverage-v8": "^3.2.4",
125
188
  "eslint": "^9.39.1",
126
- "happy-dom": "^20.4.0",
189
+ "happy-dom": "^20.9.0",
127
190
  "prettier": "^3.6.2",
128
191
  "typescript": "^5.9.3",
129
192
  "vite": "^6.0.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"audio-level.d.ts","sourceRoot":"","sources":["../../src/components/audio-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,qBACa,UAAW,SAAQ,UAAU;IACxC,MAAM,CAAC,MAAM,0BAiEX;IAEF;;OAEG;IACyB,MAAM,CAAC,EAAE,WAAW,CAAC;IAEjD;;OAEG;IACyB,IAAI,SAAK;IAErC;;OAEG;IACwC,WAAW,EAAE,UAAU,GAAG,YAAY,CAAc;IAE/F;;OAEG;IACyB,OAAO,SAAM;IAEzC;;OAEG;IACM,OAAO,CAAC,OAAO,CAAgB;IAExC;;OAEG;IACH,OAAO,CAAC,aAAa,CAAC,CAAe;IAErC;;OAEG;IACH,OAAO,CAAC,SAAS,CAAC,CAAe;IAEjC;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C;;OAEG;IACH,OAAO,CAAC,iBAAiB,CAAC,CAAS;IAEnC;;OAEG;IACH,OAAO,CAAC,UAAU,CAAC,CAA0B;IAE7C;;OAEG;IACH,iBAAiB;IAQjB;;OAEG;IACH,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAehE;;OAEG;IACH,oBAAoB;IAKpB;;;OAGG;IACI,gBAAgB,IAAI,IAAI;IAK/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgC5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAOrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,MAAM;CA0BP;AAED;;GAEG;AACH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,gBAAgB,EAAE,UAAU,CAAC;KAC9B;CACF"}