@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,413 @@
1
+ import { LitElement as v, html as c, nothing as h, css as w } from "lit";
2
+ import { property as d, state as p, customElement as k } from "lit/decorators.js";
3
+ import { unsafeHTML as f } from "lit/directives/unsafe-html.js";
4
+ import { getLogger as y } from "@signalwire/js";
5
+ import { highlight as _ } from "../../../utils/prism.js";
6
+ var C = Object.defineProperty, z = Object.getOwnPropertyDescriptor, a = (t, e, o, s) => {
7
+ for (var r = s > 1 ? void 0 : s ? z(e, o) : e, i = t.length - 1, l; i >= 0; i--)
8
+ (l = t[i]) && (r = (s ? l(e, o, r) : l(r)) || r);
9
+ return s && r && C(e, o, r), r;
10
+ };
11
+ const u = y(), m = {
12
+ ALLOWED_TAGS: [
13
+ "p",
14
+ "br",
15
+ "b",
16
+ "i",
17
+ "em",
18
+ "strong",
19
+ "a",
20
+ "ul",
21
+ "ol",
22
+ "li",
23
+ "h1",
24
+ "h2",
25
+ "h3",
26
+ "h4",
27
+ "h5",
28
+ "h6",
29
+ "pre",
30
+ "code",
31
+ "blockquote",
32
+ "hr",
33
+ "table",
34
+ "thead",
35
+ "tbody",
36
+ "tr",
37
+ "th",
38
+ "td",
39
+ "img",
40
+ "span",
41
+ "div"
42
+ ],
43
+ ALLOWED_ATTR: ["href", "target", "rel", "src", "alt", "class", "title"],
44
+ ALLOW_DATA_ATTR: !1,
45
+ FORBID_TAGS: ["script", "iframe", "object", "embed", "form", "input"],
46
+ FORBID_ATTR: ["style"]
47
+ };
48
+ let b = !1;
49
+ function g(t) {
50
+ return b || (t.addHook("afterSanitizeAttributes", (e) => {
51
+ e.tagName === "A" && e.hasAttribute("target") && e.setAttribute("rel", "noopener noreferrer");
52
+ }), b = !0), t;
53
+ }
54
+ let n = class extends v {
55
+ constructor() {
56
+ super(...arguments), this.open = !1, this.narrow = !1, this.title = "", this.content = "", this.format = "text", this.language = "", this._renderedHtml = "", this._renderFormat = "text", this._copied = !1, this._renderId = 0;
57
+ }
58
+ connectedCallback() {
59
+ super.connectedCallback(), this._ro = new ResizeObserver((e) => {
60
+ const o = e[0];
61
+ o && (this.narrow = o.contentRect.width <= 480);
62
+ });
63
+ const t = this.parentElement;
64
+ t && this._ro.observe(t);
65
+ }
66
+ disconnectedCallback() {
67
+ var t;
68
+ super.disconnectedCallback(), (t = this._ro) == null || t.disconnect(), this._ro = void 0;
69
+ }
70
+ updated(t) {
71
+ super.updated(t), (t.has("content") || t.has("format") || t.has("language")) && this._renderContent();
72
+ }
73
+ async _renderContent() {
74
+ const t = ++this._renderId, { content: e, format: o, language: s } = this;
75
+ if (o === "text") {
76
+ if (t !== this._renderId) return;
77
+ this._renderedHtml = "", this._renderFormat = "text";
78
+ return;
79
+ }
80
+ try {
81
+ let r = "";
82
+ if (o === "markdown") {
83
+ const [{ marked: i }, { default: l }] = await Promise.all([
84
+ import("../../../node_modules/marked/lib/marked.esm.js"),
85
+ import("../../../node_modules/dompurify/dist/purify.es.js")
86
+ ]), x = await i.parse(e, { async: !0 });
87
+ r = g(l).sanitize(x, m);
88
+ } else if (o === "html") {
89
+ const { default: i } = await import("../../../node_modules/dompurify/dist/purify.es.js");
90
+ r = g(i).sanitize(e, m);
91
+ } else o === "code" && (r = await _(e, s || "plaintext"));
92
+ if (t !== this._renderId) return;
93
+ this._renderedHtml = r, this._renderFormat = o;
94
+ } catch (r) {
95
+ if (u.error("[ContentDrawer] Failed to render content:", r), t !== this._renderId) return;
96
+ this._renderedHtml = "", this._renderFormat = "text";
97
+ }
98
+ }
99
+ _close() {
100
+ this.dispatchEvent(new CustomEvent("sw-content-drawer-close", { bubbles: !0, composed: !0 }));
101
+ }
102
+ async _copy() {
103
+ try {
104
+ await navigator.clipboard.writeText(this.content), this._copied = !0, setTimeout(() => {
105
+ this._copied = !1;
106
+ }, 2e3);
107
+ } catch {
108
+ u.error("[ContentDrawer] Clipboard write failed");
109
+ }
110
+ }
111
+ _renderBody() {
112
+ return this.format === "text" || this._renderFormat !== this.format ? c`<div class="content-text">${this.content}</div>` : this._renderFormat === "code" ? c`
113
+ <div class="content-code">
114
+ <pre><code>${f(this._renderedHtml)}</code></pre>
115
+ </div>
116
+ ` : c`<div class="content-rich">${f(this._renderedHtml)}</div>`;
117
+ }
118
+ render() {
119
+ const t = this.format === "code" && this.language;
120
+ return c`
121
+ <div class="panel" part="panel">
122
+ <div class="header" part="header">
123
+ ${this.title ? c`<span class="title" part="title">${this.title}</span>` : h}
124
+ ${t ? c`<span class="lang-badge">${this.language}</span>` : h}
125
+ <button
126
+ class="action-btn ${this._copied ? "copy-done" : ""}"
127
+ title="Copy to clipboard"
128
+ @click=${this._copy}
129
+ >
130
+ <sw-ui-icon name=${this._copied ? "check-circle" : "copy"} size="16"></sw-ui-icon>
131
+ </button>
132
+ <button class="action-btn" title="Close" @click=${this._close}>
133
+ <sw-ui-icon name="close" size="16"></sw-ui-icon>
134
+ </button>
135
+ </div>
136
+ <div class="body" part="body">
137
+ ${this._renderBody()}
138
+ </div>
139
+ </div>
140
+ `;
141
+ }
142
+ };
143
+ n.styles = w`
144
+ /* ── Host — default: slide in from the right ── */
145
+ :host {
146
+ display: block;
147
+ position: absolute;
148
+ top: 0;
149
+ right: 0;
150
+ width: min(360px, 100%);
151
+ height: 100%;
152
+ z-index: 20;
153
+ transform: translateX(100%);
154
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
155
+ pointer-events: none;
156
+ }
157
+
158
+ :host([open]) {
159
+ transform: translateX(0);
160
+ pointer-events: auto;
161
+ }
162
+
163
+ /* ── Narrow mode: slide up from the bottom ── */
164
+ :host([narrow]) {
165
+ width: 100%;
166
+ height: auto;
167
+ max-height: 65%;
168
+ top: auto;
169
+ bottom: 0;
170
+ transform: translateY(100%);
171
+ }
172
+
173
+ :host([narrow][open]) {
174
+ transform: translateY(0);
175
+ }
176
+
177
+ /* ── Panel ── */
178
+ .panel {
179
+ display: flex;
180
+ flex-direction: column;
181
+ height: 100%;
182
+ background: var(--bg-page);
183
+ border-left: 1px solid var(--border-default);
184
+ overflow: hidden;
185
+ }
186
+
187
+ :host([narrow]) .panel {
188
+ border-left: none;
189
+ border-top: 1px solid var(--border-default);
190
+ border-radius: var(--sw-call-layout-radius, 0) var(--sw-call-layout-radius, 0) 0 0;
191
+ }
192
+
193
+ /* ── Header ── */
194
+ .header {
195
+ flex: 0 0 auto;
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 8px;
199
+ padding: 10px 12px;
200
+ border-bottom: 1px solid var(--border-default);
201
+ min-height: 42px;
202
+ }
203
+
204
+ .title {
205
+ flex: 1;
206
+ font-size: 11px;
207
+ font-weight: 600;
208
+ letter-spacing: 0.08em;
209
+ text-transform: uppercase;
210
+ color: color-mix(in srgb, var(--fg-default) 50%, transparent);
211
+ overflow: hidden;
212
+ text-overflow: ellipsis;
213
+ white-space: nowrap;
214
+ }
215
+
216
+ .lang-badge {
217
+ font-size: 10px;
218
+ font-weight: 500;
219
+ color: var(--fg-muted);
220
+ background: var(--bg-surface);
221
+ padding: 1px 6px;
222
+ border-radius: 4px;
223
+ border: 1px solid var(--border-default);
224
+ flex-shrink: 0;
225
+ }
226
+
227
+ .action-btn {
228
+ display: inline-flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ width: 28px;
232
+ height: 28px;
233
+ border: none;
234
+ border-radius: 6px;
235
+ background: transparent;
236
+ color: color-mix(in srgb, var(--fg-default) 55%, transparent);
237
+ cursor: pointer;
238
+ transition: background var(--transition-fast), color var(--transition-fast);
239
+ flex-shrink: 0;
240
+ }
241
+
242
+ .action-btn:hover {
243
+ background: var(--bg-surface-raised);
244
+ color: var(--fg-default);
245
+ }
246
+
247
+ .copy-done {
248
+ color: var(--interactive-status-success) !important;
249
+ }
250
+
251
+ /* ── Body ── */
252
+ .body {
253
+ flex: 1;
254
+ overflow-y: auto;
255
+ overflow-x: hidden;
256
+ padding: 14px 14px 20px;
257
+ font-size: 13px;
258
+ line-height: 1.6;
259
+ color: var(--fg-default);
260
+ }
261
+
262
+ .body::-webkit-scrollbar { width: 4px; }
263
+ .body::-webkit-scrollbar-track { background: transparent; }
264
+ .body::-webkit-scrollbar-thumb {
265
+ background: var(--bg-surface-raised);
266
+ border-radius: 2px;
267
+ }
268
+
269
+ /* ── text format ── */
270
+ .content-text {
271
+ white-space: pre-wrap;
272
+ font-family: ui-monospace, monospace;
273
+ font-size: 12px;
274
+ line-height: 1.6;
275
+ }
276
+
277
+ /* ── code format ── */
278
+ .content-code pre {
279
+ margin: 0;
280
+ padding: 14px 16px;
281
+ background: #1a1b26;
282
+ border-radius: 6px;
283
+ overflow-x: auto;
284
+ font-size: 12.5px;
285
+ line-height: 1.6;
286
+ }
287
+
288
+ .content-code code {
289
+ font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
290
+ color: #f8f8f2;
291
+ }
292
+
293
+ /* ── markdown / html format ── */
294
+ .content-rich { overflow-wrap: break-word; }
295
+
296
+ .content-rich h1, .content-rich h2, .content-rich h3 {
297
+ margin: 0 0 8px; font-weight: 600; color: var(--fg-default);
298
+ }
299
+ .content-rich h1 { font-size: 1.2em; }
300
+ .content-rich h2 { font-size: 1.1em; }
301
+ .content-rich h3 { font-size: 1em; }
302
+
303
+ .content-rich p { margin: 0 0 10px; }
304
+ .content-rich p:last-child { margin-bottom: 0; }
305
+
306
+ .content-rich ul, .content-rich ol { margin: 0 0 10px; padding-left: 18px; }
307
+ .content-rich li { margin-bottom: 4px; }
308
+
309
+ .content-rich code {
310
+ font-family: ui-monospace, monospace;
311
+ font-size: 0.85em;
312
+ background: rgba(255,255,255,0.1);
313
+ padding: 1px 5px;
314
+ border-radius: 3px;
315
+ }
316
+
317
+ .content-rich pre {
318
+ background: #1a1b26;
319
+ border-radius: 6px;
320
+ padding: 10px 12px;
321
+ overflow-x: auto;
322
+ margin: 0 0 10px;
323
+ }
324
+
325
+ .content-rich pre code { background: transparent; padding: 0; color: #f8f8f2; }
326
+
327
+ .content-rich a { color: var(--interactive-button-primary-bg); text-decoration: underline; }
328
+ .content-rich a:hover { opacity: 0.85; }
329
+
330
+ .content-rich blockquote {
331
+ border-left: 3px solid var(--border-default);
332
+ margin: 0 0 10px;
333
+ padding-left: 10px;
334
+ color: var(--fg-muted);
335
+ }
336
+
337
+ .content-rich table {
338
+ border-collapse: collapse; width: 100%; margin: 0 0 10px; font-size: 0.85em;
339
+ }
340
+ .content-rich th, .content-rich td {
341
+ border: 1px solid var(--border-default); padding: 4px 8px; text-align: left;
342
+ }
343
+ .content-rich th { background: var(--bg-surface); font-weight: 600; }
344
+
345
+ /* ── Prism Okaidia theme (must live in shadow DOM) ── */
346
+ .token.comment,
347
+ .token.prolog,
348
+ .token.doctype,
349
+ .token.cdata { color: #8292a2; }
350
+ .token.punctuation { color: #f8f8f2; }
351
+ .token.namespace { opacity: 0.7; }
352
+ .token.property,
353
+ .token.tag,
354
+ .token.constant,
355
+ .token.symbol,
356
+ .token.deleted { color: #f92672; }
357
+ .token.boolean,
358
+ .token.number { color: #ae81ff; }
359
+ .token.selector,
360
+ .token.attr-name,
361
+ .token.string,
362
+ .token.char,
363
+ .token.builtin,
364
+ .token.inserted { color: #a6e22e; }
365
+ .token.operator,
366
+ .token.entity,
367
+ .token.url,
368
+ .token.variable { color: #f8f8f2; }
369
+ .token.atrule,
370
+ .token.attr-value,
371
+ .token.function,
372
+ .token.class-name { color: #e6db74; }
373
+ .token.keyword { color: #66d9ef; }
374
+ .token.regex,
375
+ .token.important { color: #fd971f; }
376
+ .token.important,
377
+ .token.bold { font-weight: bold; }
378
+ .token.italic { font-style: italic; }
379
+ `;
380
+ a([
381
+ d({ type: Boolean, reflect: !0 })
382
+ ], n.prototype, "open", 2);
383
+ a([
384
+ d({ type: Boolean, reflect: !0 })
385
+ ], n.prototype, "narrow", 2);
386
+ a([
387
+ d({ type: String })
388
+ ], n.prototype, "title", 2);
389
+ a([
390
+ d({ type: String })
391
+ ], n.prototype, "content", 2);
392
+ a([
393
+ d({ type: String })
394
+ ], n.prototype, "format", 2);
395
+ a([
396
+ d({ type: String })
397
+ ], n.prototype, "language", 2);
398
+ a([
399
+ p()
400
+ ], n.prototype, "_renderedHtml", 2);
401
+ a([
402
+ p()
403
+ ], n.prototype, "_renderFormat", 2);
404
+ a([
405
+ p()
406
+ ], n.prototype, "_copied", 2);
407
+ n = a([
408
+ k("sw-ui-content-drawer")
409
+ ], n);
410
+ export {
411
+ n as SwUiContentDrawer
412
+ };
413
+ //# sourceMappingURL=sw-ui-content-drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-content-drawer.js","sources":["../../../../src/components/UI/layout/sw-ui-content-drawer.ts"],"sourcesContent":["import { LitElement, html, css, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport '../icons/sw-ui-icon.js';\nimport { getLogger } from '@signalwire/js';\nimport { highlight } from '../../../utils/prism.js';\n\nconst logger = getLogger();\n\n/** Formats supported by the content drawer. */\nexport type ContentFormat = 'text' | 'markdown' | 'code' | 'html';\n\n/** Payload that drives the content drawer. */\nexport interface DisplayContentPayload {\n title?: string;\n content: string;\n format: ContentFormat;\n /** Prism language name (required when format === 'code'). */\n language?: string;\n}\n\n// ── DOMPurify allowlist ──────────────────────────────────────────────────────\n\n// DOMPurify already blocks all `on*` event handlers by default — we only need\n// to extend the defaults for things it would otherwise allow (inline `style`).\nconst PURIFY_CONFIG = {\n ALLOWED_TAGS: [\n 'p', 'br', 'b', 'i', 'em', 'strong', 'a', 'ul', 'ol', 'li',\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\n 'pre', 'code', 'blockquote', 'hr', 'table', 'thead', 'tbody',\n 'tr', 'th', 'td', 'img', 'span', 'div',\n ],\n ALLOWED_ATTR: ['href', 'target', 'rel', 'src', 'alt', 'class', 'title'],\n ALLOW_DATA_ATTR: false,\n FORBID_TAGS: ['script', 'iframe', 'object', 'embed', 'form', 'input'],\n FORBID_ATTR: ['style'],\n};\n\n// Force `rel=\"noopener noreferrer\"` on any anchor that opens in a new context.\n// Without this, sanitized markdown/html with `<a target=\"_blank\">` could let\n// the opened page reach back into ours via `window.opener`.\ntype DOMPurifyNS = typeof import('dompurify')['default'];\nlet purifyHookInstalled = false;\nfunction ensurePurifyHook(DOMPurify: DOMPurifyNS): DOMPurifyNS {\n if (purifyHookInstalled) return DOMPurify;\n DOMPurify.addHook('afterSanitizeAttributes', (node) => {\n if (node.tagName === 'A' && node.hasAttribute('target')) {\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n purifyHookInstalled = true;\n return DOMPurify;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Content drawer overlay for the call widget.\n *\n * Slides in from the right on wide containers; on narrow containers (parent\n * width ≤ 480 px) it slides up from the bottom instead.\n *\n * Formats: `text` · `markdown` (marked + DOMPurify) · `code` (Prism) · `html` (DOMPurify)\n *\n * @fires sw-content-drawer-close - User clicked the close button. No detail.\n */\n@customElement('sw-ui-content-drawer')\nexport class SwUiContentDrawer extends LitElement {\n static styles = css`\n /* ── Host — default: slide in from the right ── */\n :host {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n width: min(360px, 100%);\n height: 100%;\n z-index: 20;\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n pointer-events: none;\n }\n\n :host([open]) {\n transform: translateX(0);\n pointer-events: auto;\n }\n\n /* ── Narrow mode: slide up from the bottom ── */\n :host([narrow]) {\n width: 100%;\n height: auto;\n max-height: 65%;\n top: auto;\n bottom: 0;\n transform: translateY(100%);\n }\n\n :host([narrow][open]) {\n transform: translateY(0);\n }\n\n /* ── Panel ── */\n .panel {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-page);\n border-left: 1px solid var(--border-default);\n overflow: hidden;\n }\n\n :host([narrow]) .panel {\n border-left: none;\n border-top: 1px solid var(--border-default);\n border-radius: var(--sw-call-layout-radius, 0) var(--sw-call-layout-radius, 0) 0 0;\n }\n\n /* ── Header ── */\n .header {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n border-bottom: 1px solid var(--border-default);\n min-height: 42px;\n }\n\n .title {\n flex: 1;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n color: color-mix(in srgb, var(--fg-default) 50%, transparent);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .lang-badge {\n font-size: 10px;\n font-weight: 500;\n color: var(--fg-muted);\n background: var(--bg-surface);\n padding: 1px 6px;\n border-radius: 4px;\n border: 1px solid var(--border-default);\n flex-shrink: 0;\n }\n\n .action-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: color-mix(in srgb, var(--fg-default) 55%, transparent);\n cursor: pointer;\n transition: background var(--transition-fast), color var(--transition-fast);\n flex-shrink: 0;\n }\n\n .action-btn:hover {\n background: var(--bg-surface-raised);\n color: var(--fg-default);\n }\n\n .copy-done {\n color: var(--interactive-status-success) !important;\n }\n\n /* ── Body ── */\n .body {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 14px 14px 20px;\n font-size: 13px;\n line-height: 1.6;\n color: var(--fg-default);\n }\n\n .body::-webkit-scrollbar { width: 4px; }\n .body::-webkit-scrollbar-track { background: transparent; }\n .body::-webkit-scrollbar-thumb {\n background: var(--bg-surface-raised);\n border-radius: 2px;\n }\n\n /* ── text format ── */\n .content-text {\n white-space: pre-wrap;\n font-family: ui-monospace, monospace;\n font-size: 12px;\n line-height: 1.6;\n }\n\n /* ── code format ── */\n .content-code pre {\n margin: 0;\n padding: 14px 16px;\n background: #1a1b26;\n border-radius: 6px;\n overflow-x: auto;\n font-size: 12.5px;\n line-height: 1.6;\n }\n\n .content-code code {\n font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;\n color: #f8f8f2;\n }\n\n /* ── markdown / html format ── */\n .content-rich { overflow-wrap: break-word; }\n\n .content-rich h1, .content-rich h2, .content-rich h3 {\n margin: 0 0 8px; font-weight: 600; color: var(--fg-default);\n }\n .content-rich h1 { font-size: 1.2em; }\n .content-rich h2 { font-size: 1.1em; }\n .content-rich h3 { font-size: 1em; }\n\n .content-rich p { margin: 0 0 10px; }\n .content-rich p:last-child { margin-bottom: 0; }\n\n .content-rich ul, .content-rich ol { margin: 0 0 10px; padding-left: 18px; }\n .content-rich li { margin-bottom: 4px; }\n\n .content-rich code {\n font-family: ui-monospace, monospace;\n font-size: 0.85em;\n background: rgba(255,255,255,0.1);\n padding: 1px 5px;\n border-radius: 3px;\n }\n\n .content-rich pre {\n background: #1a1b26;\n border-radius: 6px;\n padding: 10px 12px;\n overflow-x: auto;\n margin: 0 0 10px;\n }\n\n .content-rich pre code { background: transparent; padding: 0; color: #f8f8f2; }\n\n .content-rich a { color: var(--interactive-button-primary-bg); text-decoration: underline; }\n .content-rich a:hover { opacity: 0.85; }\n\n .content-rich blockquote {\n border-left: 3px solid var(--border-default);\n margin: 0 0 10px;\n padding-left: 10px;\n color: var(--fg-muted);\n }\n\n .content-rich table {\n border-collapse: collapse; width: 100%; margin: 0 0 10px; font-size: 0.85em;\n }\n .content-rich th, .content-rich td {\n border: 1px solid var(--border-default); padding: 4px 8px; text-align: left;\n }\n .content-rich th { background: var(--bg-surface); font-weight: 600; }\n\n /* ── Prism Okaidia theme (must live in shadow DOM) ── */\n .token.comment,\n .token.prolog,\n .token.doctype,\n .token.cdata { color: #8292a2; }\n .token.punctuation { color: #f8f8f2; }\n .token.namespace { opacity: 0.7; }\n .token.property,\n .token.tag,\n .token.constant,\n .token.symbol,\n .token.deleted { color: #f92672; }\n .token.boolean,\n .token.number { color: #ae81ff; }\n .token.selector,\n .token.attr-name,\n .token.string,\n .token.char,\n .token.builtin,\n .token.inserted { color: #a6e22e; }\n .token.operator,\n .token.entity,\n .token.url,\n .token.variable { color: #f8f8f2; }\n .token.atrule,\n .token.attr-value,\n .token.function,\n .token.class-name { color: #e6db74; }\n .token.keyword { color: #66d9ef; }\n .token.regex,\n .token.important { color: #fd971f; }\n .token.important,\n .token.bold { font-weight: bold; }\n .token.italic { font-style: italic; }\n `;\n\n @property({ type: Boolean, reflect: true }) open = false;\n @property({ type: Boolean, reflect: true }) narrow = false;\n @property({ type: String }) title = '';\n @property({ type: String }) content = '';\n @property({ type: String }) format: ContentFormat = 'text';\n @property({ type: String }) language = '';\n\n @state() private _renderedHtml = '';\n @state() private _renderFormat: ContentFormat = 'text';\n @state() private _copied = false;\n\n // Incremented each time a new render is requested; stale renders check this.\n private _renderId = 0;\n\n private _ro?: ResizeObserver;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._ro = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) this.narrow = entry.contentRect.width <= 480;\n });\n // Observe the parent element (the positioning container) so narrow mode\n // triggers on the container's width, not the drawer's own width.\n const parent = this.parentElement;\n if (parent) this._ro.observe(parent);\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._ro?.disconnect();\n this._ro = undefined;\n }\n\n protected updated(changed: Map<string, unknown>): void {\n super.updated(changed);\n if (changed.has('content') || changed.has('format') || changed.has('language')) {\n void this._renderContent();\n }\n }\n\n private async _renderContent(): Promise<void> {\n const id = ++this._renderId;\n const { content, format, language } = this;\n\n if (format === 'text') {\n if (id !== this._renderId) return;\n this._renderedHtml = '';\n this._renderFormat = 'text';\n return;\n }\n\n try {\n let html = '';\n\n if (format === 'markdown') {\n const [{ marked }, { default: DOMPurify }] = await Promise.all([\n import('marked'),\n import('dompurify'),\n ]);\n const raw = await marked.parse(content, { async: true });\n html = ensurePurifyHook(DOMPurify).sanitize(raw, PURIFY_CONFIG);\n } else if (format === 'html') {\n const { default: DOMPurify } = await import('dompurify');\n html = ensurePurifyHook(DOMPurify).sanitize(content, PURIFY_CONFIG);\n } else if (format === 'code') {\n html = await highlight(content, language || 'plaintext');\n }\n\n if (id !== this._renderId) return;\n this._renderedHtml = html;\n this._renderFormat = format;\n } catch (err) {\n logger.error('[ContentDrawer] Failed to render content:', err);\n if (id !== this._renderId) return;\n this._renderedHtml = '';\n this._renderFormat = 'text';\n }\n }\n\n private _close(): void {\n this.dispatchEvent(new CustomEvent('sw-content-drawer-close', { bubbles: true, composed: true }));\n }\n\n private async _copy(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.content);\n this._copied = true;\n setTimeout(() => { this._copied = false; }, 2000);\n } catch {\n logger.error('[ContentDrawer] Clipboard write failed');\n }\n }\n\n private _renderBody() {\n if (this.format === 'text' || (this._renderFormat !== this.format)) {\n // Show plain text immediately; highlighted version replaces it once ready.\n return html`<div class=\"content-text\">${this.content}</div>`;\n }\n if (this._renderFormat === 'code') {\n return html`\n <div class=\"content-code\">\n <pre><code>${unsafeHTML(this._renderedHtml)}</code></pre>\n </div>\n `;\n }\n return html`<div class=\"content-rich\">${unsafeHTML(this._renderedHtml)}</div>`;\n }\n\n render() {\n const showLangBadge = this.format === 'code' && this.language;\n\n return html`\n <div class=\"panel\" part=\"panel\">\n <div class=\"header\" part=\"header\">\n ${this.title\n ? html`<span class=\"title\" part=\"title\">${this.title}</span>`\n : nothing}\n ${showLangBadge\n ? html`<span class=\"lang-badge\">${this.language}</span>`\n : nothing}\n <button\n class=\"action-btn ${this._copied ? 'copy-done' : ''}\"\n title=\"Copy to clipboard\"\n @click=${this._copy}\n >\n <sw-ui-icon name=${this._copied ? 'check-circle' : 'copy'} size=\"16\"></sw-ui-icon>\n </button>\n <button class=\"action-btn\" title=\"Close\" @click=${this._close}>\n <sw-ui-icon name=\"close\" size=\"16\"></sw-ui-icon>\n </button>\n </div>\n <div class=\"body\" part=\"body\">\n ${this._renderBody()}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-content-drawer': SwUiContentDrawer;\n }\n}\n"],"names":["logger","getLogger","PURIFY_CONFIG","purifyHookInstalled","ensurePurifyHook","DOMPurify","node","SwUiContentDrawer","LitElement","entries","entry","parent","_a","changed","id","content","format","language","html","marked","raw","highlight","err","unsafeHTML","showLangBadge","nothing","css","__decorateClass","property","state","customElement"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Wrap elements with this to make them modal.
4
+ *
5
+ * @slot - Dialog content.
6
+ * @fires sw-modal-close - Cancelable. Fired on ESC or backdrop click; call
7
+ * `preventDefault()` to keep the modal open.
8
+ */
9
+ export declare class SwUiModal extends LitElement {
10
+ static styles: import("lit").CSSResult;
11
+ open: boolean;
12
+ private dialog;
13
+ private _savedOverflow;
14
+ updated(changed: Map<string, unknown>): void;
15
+ private _animateClose;
16
+ /** ESC key — intercept native close and route through `_requestClose`. */
17
+ private _handleCancel;
18
+ /** Backdrop click — the `<dialog>` itself is the backdrop target. */
19
+ private _handleBackdropClick;
20
+ /** Dispatch a cancelable `sw-modal-close`; only close if not prevented. */
21
+ private _requestClose;
22
+ connectedCallback(): void;
23
+ disconnectedCallback(): void;
24
+ render(): import("lit-html").TemplateResult<1>;
25
+ }
26
+ declare global {
27
+ interface HTMLElementTagNameMap {
28
+ 'sw-ui-modal': SwUiModal;
29
+ }
30
+ }
31
+ //# sourceMappingURL=sw-ui-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-modal.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/layout/sw-ui-modal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;;;GAMG;AAEH,qBACa,SAAU,SAAQ,UAAU;IACvC,MAAM,CAAC,MAAM,0BAwFX;IAGF,IAAI,UAAS;IAGb,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAYrC,OAAO,CAAC,aAAa;IAerB,0EAA0E;IAC1E,OAAO,CAAC,aAAa,CAGnB;IAEF,qEAAqE;IACrE,OAAO,CAAC,oBAAoB,CAI1B;IAEF,2EAA2E;IAC3E,OAAO,CAAC,aAAa;IAWrB,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAM5B,MAAM;CAKP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,SAAS,CAAC;KAC1B;CACF"}
@@ -0,0 +1,150 @@
1
+ import { LitElement as d, html as c, css as m } from "lit";
2
+ import { property as p, query as u, customElement as h } from "lit/decorators.js";
3
+ var f = Object.defineProperty, v = Object.getOwnPropertyDescriptor, r = (a, o, i, s) => {
4
+ for (var e = s > 1 ? void 0 : s ? v(o, i) : o, n = a.length - 1, l; n >= 0; n--)
5
+ (l = a[n]) && (e = (s ? l(o, i, e) : l(e)) || e);
6
+ return s && e && f(o, i, e), e;
7
+ };
8
+ let t = class extends d {
9
+ constructor() {
10
+ super(...arguments), this.open = !1, this._savedOverflow = null, this._handleCancel = (a) => {
11
+ a.preventDefault(), this._requestClose();
12
+ }, this._handleBackdropClick = (a) => {
13
+ a.target === this.dialog && this._requestClose();
14
+ };
15
+ }
16
+ updated(a) {
17
+ a.has("open") && (this.open ? (this._savedOverflow = document.body.style.overflow, this.dialog.showModal(), document.body.style.overflow = "hidden") : this.dialog.open && this._animateClose());
18
+ }
19
+ _animateClose() {
20
+ this.dialog.classList.add("closing");
21
+ const a = (o) => {
22
+ o.target === this.dialog && (this.dialog.removeEventListener("animationend", a), this.dialog.classList.remove("closing"), this.dialog.close(), this._savedOverflow !== null && (document.body.style.overflow = this._savedOverflow, this._savedOverflow = null));
23
+ };
24
+ this.dialog.addEventListener("animationend", a);
25
+ }
26
+ /** Dispatch a cancelable `sw-modal-close`; only close if not prevented. */
27
+ _requestClose() {
28
+ const a = new CustomEvent("sw-modal-close", {
29
+ bubbles: !0,
30
+ composed: !0,
31
+ cancelable: !0
32
+ });
33
+ this.dispatchEvent(a) && (this.open = !1);
34
+ }
35
+ connectedCallback() {
36
+ super.connectedCallback(), this.updateComplete.then(() => {
37
+ this.dialog.addEventListener("cancel", this._handleCancel), this.dialog.addEventListener("click", this._handleBackdropClick);
38
+ });
39
+ }
40
+ disconnectedCallback() {
41
+ super.disconnectedCallback(), this.dialog.removeEventListener("cancel", this._handleCancel), this.dialog.removeEventListener("click", this._handleBackdropClick);
42
+ }
43
+ render() {
44
+ return c`<dialog part="dialog backdrop">
45
+ <div part="panel"><slot></slot></div>
46
+ </dialog>`;
47
+ }
48
+ };
49
+ t.styles = m`
50
+ :host {
51
+ --sw-modal-duration: 0.2s;
52
+ --sw-modal-animation: bounce-in var(--sw-modal-duration) ease-out;
53
+ --sw-modal-close-animation: bounce-out var(--sw-modal-duration) ease-out;
54
+ --sw-modal-backdrop-animation: backdrop-in var(--sw-modal-duration) ease-out;
55
+ --sw-modal-backdrop-close-animation: backdrop-out var(--sw-modal-duration) ease-out;
56
+ }
57
+ dialog {
58
+ border: none;
59
+ padding: 0;
60
+ background: transparent;
61
+ animation: var(--sw-modal-animation);
62
+ animation-fill-mode: backwards;
63
+ }
64
+
65
+ dialog::backdrop {
66
+ background: rgba(0, 0, 0, 0.5);
67
+ animation: var(--sw-modal-backdrop-animation);
68
+ }
69
+
70
+ @keyframes bounce-in {
71
+ from {
72
+ opacity: 0;
73
+ transform: scale(0.8) translateY(20px);
74
+ }
75
+ 30% {
76
+ opacity: 1;
77
+ }
78
+ 70% {
79
+ transform: scale(1.1) translateY(-5px);
80
+ }
81
+ to {
82
+ transform: scale(1) translateY(0);
83
+ }
84
+ }
85
+ @keyframes slide-up {
86
+ from {
87
+ transform: translateY(1000px);
88
+ }
89
+
90
+ to {
91
+ transform: translateY(0);
92
+ }
93
+ }
94
+
95
+ @keyframes backdrop-in {
96
+ from {
97
+ opacity: 0;
98
+ }
99
+ to {
100
+ opacity: 1;
101
+ }
102
+ }
103
+
104
+ @keyframes bounce-out {
105
+ from {
106
+ opacity: 1;
107
+ transform: scale(1) translateY(0);
108
+ }
109
+ 30% {
110
+ transform: scale(1.1) translateY(-5px);
111
+ }
112
+ 70% {
113
+ opacity: 1;
114
+ }
115
+ to {
116
+ opacity: 0;
117
+ transform: scale(0.8) translateY(20px);
118
+ }
119
+ }
120
+
121
+ @keyframes backdrop-out {
122
+ from {
123
+ opacity: 1;
124
+ }
125
+ to {
126
+ opacity: 0;
127
+ }
128
+ }
129
+
130
+ dialog.closing {
131
+ animation: var(--sw-modal-close-animation);
132
+ }
133
+
134
+ dialog.closing::backdrop {
135
+ animation: var(--sw-modal-backdrop-close-animation);
136
+ }
137
+ `;
138
+ r([
139
+ p({ type: Boolean, reflect: !0 })
140
+ ], t.prototype, "open", 2);
141
+ r([
142
+ u("dialog")
143
+ ], t.prototype, "dialog", 2);
144
+ t = r([
145
+ h("sw-ui-modal")
146
+ ], t);
147
+ export {
148
+ t as SwUiModal
149
+ };
150
+ //# sourceMappingURL=sw-ui-modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-modal.js","sources":["../../../../src/components/UI/layout/sw-ui-modal.ts"],"sourcesContent":["import { LitElement, css, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\n\n/**\n * Wrap elements with this to make them modal.\n *\n * @slot - Dialog content.\n * @fires sw-modal-close - Cancelable. Fired on ESC or backdrop click; call\n * `preventDefault()` to keep the modal open.\n */\n\n@customElement('sw-ui-modal')\nexport class SwUiModal extends LitElement {\n static styles = css`\n :host {\n --sw-modal-duration: 0.2s;\n --sw-modal-animation: bounce-in var(--sw-modal-duration) ease-out;\n --sw-modal-close-animation: bounce-out var(--sw-modal-duration) ease-out;\n --sw-modal-backdrop-animation: backdrop-in var(--sw-modal-duration) ease-out;\n --sw-modal-backdrop-close-animation: backdrop-out var(--sw-modal-duration) ease-out;\n }\n dialog {\n border: none;\n padding: 0;\n background: transparent;\n animation: var(--sw-modal-animation);\n animation-fill-mode: backwards;\n }\n\n dialog::backdrop {\n background: rgba(0, 0, 0, 0.5);\n animation: var(--sw-modal-backdrop-animation);\n }\n\n @keyframes bounce-in {\n from {\n opacity: 0;\n transform: scale(0.8) translateY(20px);\n }\n 30% {\n opacity: 1;\n }\n 70% {\n transform: scale(1.1) translateY(-5px);\n }\n to {\n transform: scale(1) translateY(0);\n }\n }\n @keyframes slide-up {\n from {\n transform: translateY(1000px);\n }\n\n to {\n transform: translateY(0);\n }\n }\n\n @keyframes backdrop-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n\n @keyframes bounce-out {\n from {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n 30% {\n transform: scale(1.1) translateY(-5px);\n }\n 70% {\n opacity: 1;\n }\n to {\n opacity: 0;\n transform: scale(0.8) translateY(20px);\n }\n }\n\n @keyframes backdrop-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n dialog.closing {\n animation: var(--sw-modal-close-animation);\n }\n\n dialog.closing::backdrop {\n animation: var(--sw-modal-backdrop-close-animation);\n }\n `;\n\n @property({ type: Boolean, reflect: true })\n open = false;\n\n @query('dialog')\n private dialog!: HTMLDialogElement;\n\n private _savedOverflow: string | null = null;\n\n updated(changed: Map<string, unknown>) {\n if (changed.has('open')) {\n if (this.open) {\n this._savedOverflow = document.body.style.overflow;\n this.dialog.showModal();\n document.body.style.overflow = 'hidden';\n } else if (this.dialog.open) {\n this._animateClose();\n }\n }\n }\n\n private _animateClose(): void {\n this.dialog.classList.add('closing');\n const onClose = (e: AnimationEvent) => {\n if (e.target !== this.dialog) return;\n this.dialog.removeEventListener('animationend', onClose);\n this.dialog.classList.remove('closing');\n this.dialog.close();\n if (this._savedOverflow !== null) {\n document.body.style.overflow = this._savedOverflow;\n this._savedOverflow = null;\n }\n };\n this.dialog.addEventListener('animationend', onClose);\n }\n\n /** ESC key — intercept native close and route through `_requestClose`. */\n private _handleCancel = (e: Event): void => {\n e.preventDefault();\n this._requestClose();\n };\n\n /** Backdrop click — the `<dialog>` itself is the backdrop target. */\n private _handleBackdropClick = (e: MouseEvent): void => {\n if (e.target === this.dialog) {\n this._requestClose();\n }\n };\n\n /** Dispatch a cancelable `sw-modal-close`; only close if not prevented. */\n private _requestClose(): void {\n const ev = new CustomEvent('sw-modal-close', {\n bubbles: true,\n composed: true,\n cancelable: true,\n });\n if (this.dispatchEvent(ev)) {\n this.open = false;\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.updateComplete.then(() => {\n this.dialog.addEventListener('cancel', this._handleCancel);\n this.dialog.addEventListener('click', this._handleBackdropClick);\n });\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.dialog.removeEventListener('cancel', this._handleCancel);\n this.dialog.removeEventListener('click', this._handleBackdropClick);\n }\n\n render() {\n return html`<dialog part=\"dialog backdrop\">\n <div part=\"panel\"><slot></slot></div>\n </dialog>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sw-ui-modal': SwUiModal;\n }\n}\n"],"names":["SwUiModal","LitElement","e","changed","onClose","ev","html","css","__decorateClass","property","query","customElement"],"mappings":";;;;;;;AAYO,IAAMA,IAAN,cAAwBC,EAAW;AAAA,EAAnC,cAAA;AAAA,UAAA,GAAA,SAAA,GA4FL,KAAA,OAAO,IAKP,KAAQ,iBAAgC,MA8BxC,KAAQ,gBAAgB,CAACC,MAAmB;AAC1C,MAAAA,EAAE,eAAA,GACF,KAAK,cAAA;AAAA,IACP,GAGA,KAAQ,uBAAuB,CAACA,MAAwB;AACtD,MAAIA,EAAE,WAAW,KAAK,UACpB,KAAK,cAAA;AAAA,IAET;AAAA,EAAA;AAAA,EAtCA,QAAQC,GAA+B;AACrC,IAAIA,EAAQ,IAAI,MAAM,MAChB,KAAK,QACP,KAAK,iBAAiB,SAAS,KAAK,MAAM,UAC1C,KAAK,OAAO,UAAA,GACZ,SAAS,KAAK,MAAM,WAAW,YACtB,KAAK,OAAO,QACrB,KAAK,cAAA;AAAA,EAGX;AAAA,EAEQ,gBAAsB;AAC5B,SAAK,OAAO,UAAU,IAAI,SAAS;AACnC,UAAMC,IAAU,CAACF,MAAsB;AACrC,MAAIA,EAAE,WAAW,KAAK,WACtB,KAAK,OAAO,oBAAoB,gBAAgBE,CAAO,GACvD,KAAK,OAAO,UAAU,OAAO,SAAS,GACtC,KAAK,OAAO,MAAA,GACR,KAAK,mBAAmB,SAC1B,SAAS,KAAK,MAAM,WAAW,KAAK,gBACpC,KAAK,iBAAiB;AAAA,IAE1B;AACA,SAAK,OAAO,iBAAiB,gBAAgBA,CAAO;AAAA,EACtD;AAAA;AAAA,EAgBQ,gBAAsB;AAC5B,UAAMC,IAAK,IAAI,YAAY,kBAAkB;AAAA,MAC3C,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,IAAA,CACb;AACD,IAAI,KAAK,cAAcA,CAAE,MACvB,KAAK,OAAO;AAAA,EAEhB;AAAA,EAEA,oBAA0B;AACxB,UAAM,kBAAA,GACN,KAAK,eAAe,KAAK,MAAM;AAC7B,WAAK,OAAO,iBAAiB,UAAU,KAAK,aAAa,GACzD,KAAK,OAAO,iBAAiB,SAAS,KAAK,oBAAoB;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EAEA,uBAA6B;AAC3B,UAAM,qBAAA,GACN,KAAK,OAAO,oBAAoB,UAAU,KAAK,aAAa,GAC5D,KAAK,OAAO,oBAAoB,SAAS,KAAK,oBAAoB;AAAA,EACpE;AAAA,EAEA,SAAS;AACP,WAAOC;AAAA;AAAA;AAAA,EAGT;AACF;AA1KaN,EACJ,SAASO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2FhBC,EAAA;AAAA,EADCC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GA3F/BT,EA4FX,WAAA,QAAA,CAAA;AAGQQ,EAAA;AAAA,EADPE,EAAM,QAAQ;AAAA,GA9FJV,EA+FH,WAAA,UAAA,CAAA;AA/FGA,IAANQ,EAAA;AAAA,EADNG,EAAc,aAAa;AAAA,GACfX,CAAA;"}
@@ -0,0 +1,15 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Resizes itself to an appropriate modal size based on viewport size
4
+ * @slot items to hold inside responsive modal
5
+ */
6
+ export declare class SwUiResponsiveContainer extends LitElement {
7
+ static styles: import("lit").CSSResult;
8
+ render(): import("lit-html").TemplateResult<1>;
9
+ }
10
+ declare global {
11
+ interface HTMLElementTagNameMap {
12
+ 'sw-ui-responsive-container': SwUiResponsiveContainer;
13
+ }
14
+ }
15
+ //# sourceMappingURL=sw-ui-responsive-container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sw-ui-responsive-container.d.ts","sourceRoot":"","sources":["../../../../src/components/UI/layout/sw-ui-responsive-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;GAGG;AACH,qBACa,uBAAwB,SAAQ,UAAU;IACrD,MAAM,CAAC,MAAM,0BA0DX;IAEF,MAAM;CAGP;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,4BAA4B,EAAE,uBAAuB,CAAC;KACvD;CACF"}