@onlive.ai/common-121 0.2.190 → 0.2.192

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 (457) hide show
  1. package/{audi-dark.theme-a2WmOyVS.d.cts → audi-dark.theme-BnrrZ7Vd.d.cts} +1 -1
  2. package/{audi-dark.theme-a2WmOyVS.d.ts → audi-dark.theme-BnrrZ7Vd.d.ts} +1 -1
  3. package/{audi.theme-DkdflnT8.d.cts → audi.theme-CinwCT_L.d.cts} +1 -1
  4. package/{audi.theme-DkdflnT8.d.ts → audi.theme-CinwCT_L.d.ts} +1 -1
  5. package/{australia.theme-B5n8F3QH.d.cts → australia.theme-i9S6sZCN.d.cts} +1 -1
  6. package/{australia.theme-B5n8F3QH.d.ts → australia.theme-i9S6sZCN.d.ts} +1 -1
  7. package/{chunk-4DKWCKNT.js → chunk-YU7F7RAB.js} +1 -1
  8. package/components/asset/asset-modal-portal.cjs +95 -21
  9. package/components/asset/asset-modal-portal.d.cts +3 -2
  10. package/components/asset/asset-modal-portal.d.ts +3 -2
  11. package/components/asset/asset-modal-portal.js +86 -12
  12. package/components/asset/asset.cjs +174 -81
  13. package/components/asset/asset.d.cts +2 -1
  14. package/components/asset/asset.d.ts +2 -1
  15. package/components/asset/asset.js +125 -32
  16. package/components/asset/asset.loaders.cjs +1 -1
  17. package/components/asset/asset.loaders.d.cts +1 -1
  18. package/components/asset/asset.loaders.d.ts +1 -1
  19. package/components/asset/asset.loaders.js +1 -1
  20. package/components/asset/asset.renderer.cjs +1 -1
  21. package/components/asset/asset.renderer.d.cts +1 -1
  22. package/components/asset/asset.renderer.d.ts +1 -1
  23. package/components/asset/asset.renderer.js +1 -1
  24. package/components/asset/asset.styles.cjs +37 -18
  25. package/components/asset/asset.styles.d.cts +1 -1
  26. package/components/asset/asset.styles.d.ts +1 -1
  27. package/components/asset/asset.styles.js +36 -17
  28. package/components/asset/asset.types.cjs +1 -1
  29. package/components/asset/asset.types.d.cts +1 -1
  30. package/components/asset/asset.types.d.ts +1 -1
  31. package/components/asset/asset.types.js +1 -1
  32. package/components/asset/index.cjs +179 -86
  33. package/components/asset/index.d.cts +1 -1
  34. package/components/asset/index.d.ts +1 -1
  35. package/components/asset/index.js +126 -33
  36. package/components/player/player.cjs +1 -1
  37. package/components/player/player.d.cts +1 -1
  38. package/components/player/player.d.ts +1 -1
  39. package/components/player/player.js +1 -1
  40. package/components/player/player.styles.cjs +1 -1
  41. package/components/player/player.styles.d.cts +1 -1
  42. package/components/player/player.styles.d.ts +1 -1
  43. package/components/player/player.styles.js +1 -1
  44. package/components/side-bar/index.cjs +1 -1
  45. package/components/side-bar/index.d.cts +1 -1
  46. package/components/side-bar/index.d.ts +1 -1
  47. package/components/side-bar/index.js +1 -1
  48. package/components/side-bar/side-bar.cjs +1 -1
  49. package/components/side-bar/side-bar.d.cts +1 -1
  50. package/components/side-bar/side-bar.d.ts +1 -1
  51. package/components/side-bar/side-bar.js +1 -1
  52. package/components/side-bar/side-bar.styles.cjs +1 -1
  53. package/components/side-bar/side-bar.styles.d.cts +1 -1
  54. package/components/side-bar/side-bar.styles.d.ts +1 -1
  55. package/components/side-bar/side-bar.styles.js +1 -1
  56. package/components/side-bar/side-bar.types.cjs +1 -1
  57. package/components/side-bar/side-bar.types.d.cts +1 -1
  58. package/components/side-bar/side-bar.types.d.ts +1 -1
  59. package/components/side-bar/side-bar.types.js +1 -1
  60. package/components/upload/index.cjs +1 -1
  61. package/components/upload/index.d.cts +1 -1
  62. package/components/upload/index.d.ts +1 -1
  63. package/components/upload/index.js +1 -1
  64. package/components/upload/upload.cjs +1 -1
  65. package/components/upload/upload.d.cts +1 -1
  66. package/components/upload/upload.d.ts +1 -1
  67. package/components/upload/upload.js +1 -1
  68. package/components/upload/upload.styles.cjs +1 -1
  69. package/components/upload/upload.styles.d.cts +1 -1
  70. package/components/upload/upload.styles.d.ts +1 -1
  71. package/components/upload/upload.styles.js +1 -1
  72. package/components/upload/upload.types.cjs +1 -1
  73. package/components/upload/upload.types.d.cts +1 -1
  74. package/components/upload/upload.types.d.ts +1 -1
  75. package/components/upload/upload.types.js +1 -1
  76. package/{cuernavaca.theme-BzcZX1EJ.d.cts → cuernavaca.theme-CKMAl8Cf.d.cts} +1 -1
  77. package/{cuernavaca.theme-BzcZX1EJ.d.ts → cuernavaca.theme-CKMAl8Cf.d.ts} +1 -1
  78. package/{cupra-diagonal.theme-CKxsGYdb.d.cts → cupra-diagonal.theme-pmfy7Bjo.d.cts} +1 -1
  79. package/{cupra-diagonal.theme-CKxsGYdb.d.ts → cupra-diagonal.theme-pmfy7Bjo.d.ts} +1 -1
  80. package/{cupra-events.theme-kGaXJptG.d.cts → cupra-events.theme-D6LPTG4F.d.cts} +1 -1
  81. package/{cupra-events.theme-kGaXJptG.d.ts → cupra-events.theme-D6LPTG4F.d.ts} +1 -1
  82. package/{cupra.theme-C-oFRdQw.d.cts → cupra.theme-C36kEto2.d.cts} +1 -1
  83. package/{cupra.theme-C-oFRdQw.d.ts → cupra.theme-C36kEto2.d.ts} +1 -1
  84. package/{germany.theme-Cxz60Lv5.d.cts → germany.theme-BPUTzlC8.d.cts} +1 -1
  85. package/{germany.theme-Cxz60Lv5.d.ts → germany.theme-BPUTzlC8.d.ts} +1 -1
  86. package/{hyundai.theme-DNFeBfk4.d.cts → hyundai.theme-XqGZljEG.d.cts} +1 -1
  87. package/{hyundai.theme-DNFeBfk4.d.ts → hyundai.theme-XqGZljEG.d.ts} +1 -1
  88. package/index.cjs +163 -70
  89. package/index.d.cts +3 -2
  90. package/index.d.ts +3 -2
  91. package/index.js +268 -176
  92. package/{italy.theme-YKt3PHQM.d.cts → italy.theme-DN5caGuK.d.cts} +1 -1
  93. package/{italy.theme-YKt3PHQM.d.ts → italy.theme-DN5caGuK.d.ts} +1 -1
  94. package/{magimix.theme-lIo3UAYh.d.cts → magimix.theme-C3JtAs0X.d.cts} +1 -1
  95. package/{magimix.theme-lIo3UAYh.d.ts → magimix.theme-C3JtAs0X.d.ts} +1 -1
  96. package/{media-BU4KDZMS.js → media-JBH7TR4B.js} +2 -2
  97. package/{onlive-ai.theme-Dk4K7dnu.d.cts → onlive-ai.theme-D6jYAwmA.d.cts} +1 -1
  98. package/{onlive-ai.theme-Dk4K7dnu.d.ts → onlive-ai.theme-D6jYAwmA.d.ts} +1 -1
  99. package/{onlive.theme-BU4h4zKz.d.cts → onlive.theme-D0NE7i0O.d.cts} +1 -1
  100. package/{onlive.theme-BU4h4zKz.d.ts → onlive.theme-D0NE7i0O.d.ts} +1 -1
  101. package/package.json +1 -1
  102. package/react/components/asset/Asset.cjs +1 -1
  103. package/react/components/asset/Asset.jsx +1 -1
  104. package/react/components/side-bar/SideBar.cjs +1 -1
  105. package/react/components/side-bar/SideBar.jsx +1 -1
  106. package/react/components/upload/Upload.cjs +1 -1
  107. package/react/components/upload/Upload.jsx +1 -1
  108. package/{seat-cupra.theme-C-PJk0pi.d.cts → seat-cupra.theme-Bkr5G_uU.d.cts} +1 -1
  109. package/{seat-cupra.theme-C-PJk0pi.d.ts → seat-cupra.theme-Bkr5G_uU.d.ts} +1 -1
  110. package/seat.theme-DANE63jr.d.cts +11 -0
  111. package/seat.theme-DANE63jr.d.ts +11 -0
  112. package/services/audio.service.cjs +1 -1
  113. package/services/audio.service.d.cts +1 -1
  114. package/services/audio.service.d.ts +1 -1
  115. package/services/audio.service.js +1 -1
  116. package/services/conversation/conversation.service.cjs +1 -1
  117. package/services/conversation/conversation.service.d.cts +1 -1
  118. package/services/conversation/conversation.service.d.ts +1 -1
  119. package/services/conversation/conversation.service.js +1 -1
  120. package/services/conversation/conversation.types.cjs +1 -1
  121. package/services/conversation/conversation.types.d.cts +1 -1
  122. package/services/conversation/conversation.types.d.ts +1 -1
  123. package/services/conversation/conversation.types.js +1 -1
  124. package/services/conversation/index.cjs +1 -1
  125. package/services/conversation/index.d.cts +1 -1
  126. package/services/conversation/index.d.ts +1 -1
  127. package/services/conversation/index.js +1 -1
  128. package/services/conversation/mock/actor/agent.cjs +1 -1
  129. package/services/conversation/mock/actor/agent.d.cts +1 -1
  130. package/services/conversation/mock/actor/agent.d.ts +1 -1
  131. package/services/conversation/mock/actor/agent.js +1 -1
  132. package/services/conversation/mock/actor/index.cjs +1 -1
  133. package/services/conversation/mock/actor/index.d.cts +1 -1
  134. package/services/conversation/mock/actor/index.d.ts +1 -1
  135. package/services/conversation/mock/actor/index.js +1 -1
  136. package/services/conversation/mock/actor/strategies.cjs +1 -1
  137. package/services/conversation/mock/actor/strategies.d.cts +1 -1
  138. package/services/conversation/mock/actor/strategies.d.ts +1 -1
  139. package/services/conversation/mock/actor/strategies.js +1 -1
  140. package/services/conversation/mock/errors.cjs +1 -1
  141. package/services/conversation/mock/errors.d.cts +1 -1
  142. package/services/conversation/mock/errors.d.ts +1 -1
  143. package/services/conversation/mock/errors.js +1 -1
  144. package/services/conversation/mock/events.cjs +1 -1
  145. package/services/conversation/mock/events.d.cts +1 -1
  146. package/services/conversation/mock/events.d.ts +1 -1
  147. package/services/conversation/mock/events.js +1 -1
  148. package/services/conversation/mock/factory.cjs +1 -1
  149. package/services/conversation/mock/factory.d.cts +1 -1
  150. package/services/conversation/mock/factory.d.ts +1 -1
  151. package/services/conversation/mock/factory.js +1 -1
  152. package/services/conversation/mock/fixtures.cjs +1 -1
  153. package/services/conversation/mock/fixtures.d.cts +1 -1
  154. package/services/conversation/mock/fixtures.d.ts +1 -1
  155. package/services/conversation/mock/fixtures.js +1 -1
  156. package/services/conversation/mock/generators.cjs +1 -1
  157. package/services/conversation/mock/generators.d.cts +1 -1
  158. package/services/conversation/mock/generators.d.ts +1 -1
  159. package/services/conversation/mock/generators.js +1 -1
  160. package/services/conversation/mock/index.cjs +1 -1
  161. package/services/conversation/mock/index.d.cts +1 -1
  162. package/services/conversation/mock/index.d.ts +1 -1
  163. package/services/conversation/mock/index.js +1 -1
  164. package/services/conversation/mock/livekit/index.cjs +1 -1
  165. package/services/conversation/mock/livekit/index.d.cts +1 -1
  166. package/services/conversation/mock/livekit/index.d.ts +1 -1
  167. package/services/conversation/mock/livekit/index.js +1 -1
  168. package/services/conversation/mock/livekit/local-participant.cjs +1 -1
  169. package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
  170. package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
  171. package/services/conversation/mock/livekit/local-participant.js +1 -1
  172. package/services/conversation/mock/livekit/participant.cjs +1 -1
  173. package/services/conversation/mock/livekit/participant.d.cts +1 -1
  174. package/services/conversation/mock/livekit/participant.d.ts +1 -1
  175. package/services/conversation/mock/livekit/participant.js +1 -1
  176. package/services/conversation/mock/livekit/room.cjs +1 -1
  177. package/services/conversation/mock/livekit/room.d.cts +1 -1
  178. package/services/conversation/mock/livekit/room.d.ts +1 -1
  179. package/services/conversation/mock/livekit/room.js +1 -1
  180. package/services/conversation/mock/livekit/streams.cjs +1 -1
  181. package/services/conversation/mock/livekit/streams.d.cts +1 -1
  182. package/services/conversation/mock/livekit/streams.d.ts +1 -1
  183. package/services/conversation/mock/livekit/streams.js +1 -1
  184. package/services/conversation/mock/livekit/tracks.cjs +1 -1
  185. package/services/conversation/mock/livekit/tracks.d.cts +1 -1
  186. package/services/conversation/mock/livekit/tracks.d.ts +1 -1
  187. package/services/conversation/mock/livekit/tracks.js +1 -1
  188. package/services/conversation/mock/media.cjs +1 -1
  189. package/services/conversation/mock/media.d.cts +1 -1
  190. package/services/conversation/mock/media.d.ts +1 -1
  191. package/services/conversation/mock/media.js +1 -1
  192. package/services/conversation/mock/service.cjs +1 -1
  193. package/services/conversation/mock/service.d.cts +1 -1
  194. package/services/conversation/mock/service.d.ts +1 -1
  195. package/services/conversation/mock/service.js +1 -1
  196. package/services/conversation/mock/service.test.cjs +1 -1
  197. package/services/conversation/mock/service.test.d.cts +1 -1
  198. package/services/conversation/mock/service.test.d.ts +1 -1
  199. package/services/conversation/mock/service.test.js +1 -1
  200. package/services/conversation/mock/state.cjs +1 -1
  201. package/services/conversation/mock/state.d.cts +1 -1
  202. package/services/conversation/mock/state.d.ts +1 -1
  203. package/services/conversation/mock/state.js +1 -1
  204. package/services/conversation/mock/storybook.cjs +1 -1
  205. package/services/conversation/mock/storybook.d.cts +1 -1
  206. package/services/conversation/mock/storybook.d.ts +1 -1
  207. package/services/conversation/mock/storybook.js +1 -1
  208. package/services/conversation/mock/types.cjs +1 -1
  209. package/services/conversation/mock/types.d.cts +1 -1
  210. package/services/conversation/mock/types.d.ts +1 -1
  211. package/services/conversation/mock/types.js +1 -1
  212. package/services/deep-link.service.cjs +1 -1
  213. package/services/deep-link.service.d.cts +1 -1
  214. package/services/deep-link.service.d.ts +1 -1
  215. package/services/deep-link.service.js +1 -1
  216. package/services/faqs/faqs.service.cjs +1 -1
  217. package/services/faqs/faqs.service.d.cts +1 -1
  218. package/services/faqs/faqs.service.d.ts +1 -1
  219. package/services/faqs/faqs.service.js +1 -1
  220. package/services/faqs/faqs.types.cjs +1 -1
  221. package/services/faqs/faqs.types.d.cts +1 -1
  222. package/services/faqs/faqs.types.d.ts +1 -1
  223. package/services/faqs/faqs.types.js +1 -1
  224. package/services/faqs/index.cjs +1 -1
  225. package/services/faqs/index.d.cts +1 -1
  226. package/services/faqs/index.d.ts +1 -1
  227. package/services/faqs/index.js +1 -1
  228. package/services/file/file.service.cjs +1 -1
  229. package/services/file/file.service.d.cts +1 -1
  230. package/services/file/file.service.d.ts +1 -1
  231. package/services/file/file.service.js +1 -1
  232. package/services/file/file.types.cjs +1 -1
  233. package/services/file/file.types.d.cts +1 -1
  234. package/services/file/file.types.d.ts +1 -1
  235. package/services/file/file.types.js +1 -1
  236. package/services/file/index.cjs +1 -1
  237. package/services/file/index.d.cts +1 -1
  238. package/services/file/index.d.ts +1 -1
  239. package/services/file/index.js +1 -1
  240. package/services/firebase/firebase-api.cjs +1 -1
  241. package/services/firebase/firebase-api.d.cts +1 -1
  242. package/services/firebase/firebase-api.d.ts +1 -1
  243. package/services/firebase/firebase-api.js +1 -1
  244. package/services/multimedia/config.example.cjs +1 -1
  245. package/services/multimedia/config.example.d.cts +1 -1
  246. package/services/multimedia/config.example.d.ts +1 -1
  247. package/services/multimedia/config.example.js +1 -1
  248. package/services/multimedia/index.cjs +1 -1
  249. package/services/multimedia/index.d.cts +1 -1
  250. package/services/multimedia/index.d.ts +1 -1
  251. package/services/multimedia/index.js +1 -1
  252. package/services/multimedia/multimedia.service.cjs +1 -1
  253. package/services/multimedia/multimedia.service.d.cts +1 -1
  254. package/services/multimedia/multimedia.service.d.ts +1 -1
  255. package/services/multimedia/multimedia.service.js +1 -1
  256. package/services/multimedia/multimedia.types.cjs +1 -1
  257. package/services/multimedia/multimedia.types.d.cts +1 -1
  258. package/services/multimedia/multimedia.types.d.ts +1 -1
  259. package/services/multimedia/multimedia.types.js +1 -1
  260. package/services/product/index.cjs +1 -1
  261. package/services/product/index.d.cts +1 -1
  262. package/services/product/index.d.ts +1 -1
  263. package/services/product/index.js +1 -1
  264. package/services/product/product.service.cjs +1 -1
  265. package/services/product/product.service.d.cts +1 -1
  266. package/services/product/product.service.d.ts +1 -1
  267. package/services/product/product.service.js +1 -1
  268. package/services/product/product.types.cjs +1 -1
  269. package/services/product/product.types.d.cts +1 -1
  270. package/services/product/product.types.d.ts +1 -1
  271. package/services/product/product.types.js +1 -1
  272. package/services/request.provider.cjs +1 -1
  273. package/services/request.provider.d.cts +1 -1
  274. package/services/request.provider.d.ts +1 -1
  275. package/services/request.provider.js +1 -1
  276. package/services/session.service.cjs +1 -1
  277. package/services/session.service.d.cts +1 -1
  278. package/services/session.service.d.ts +1 -1
  279. package/services/session.service.js +1 -1
  280. package/services/upload/index.cjs +1 -1
  281. package/services/upload/index.d.cts +1 -1
  282. package/services/upload/index.d.ts +1 -1
  283. package/services/upload/index.js +1 -1
  284. package/services/upload/upload.service.cjs +1 -1
  285. package/services/upload/upload.service.d.cts +1 -1
  286. package/services/upload/upload.service.d.ts +1 -1
  287. package/services/upload/upload.service.js +1 -1
  288. package/themes/custom/audi-dark.theme.cjs +1 -1
  289. package/themes/custom/audi-dark.theme.d.cts +2 -2
  290. package/themes/custom/audi-dark.theme.d.ts +2 -2
  291. package/themes/custom/audi-dark.theme.js +1 -1
  292. package/themes/custom/audi.theme.cjs +1 -1
  293. package/themes/custom/audi.theme.d.cts +2 -2
  294. package/themes/custom/audi.theme.d.ts +2 -2
  295. package/themes/custom/audi.theme.js +1 -1
  296. package/themes/custom/australia.theme.cjs +1 -1
  297. package/themes/custom/australia.theme.d.cts +2 -2
  298. package/themes/custom/australia.theme.d.ts +2 -2
  299. package/themes/custom/australia.theme.js +1 -1
  300. package/themes/custom/cuernavaca.theme.cjs +1 -1
  301. package/themes/custom/cuernavaca.theme.d.cts +2 -2
  302. package/themes/custom/cuernavaca.theme.d.ts +2 -2
  303. package/themes/custom/cuernavaca.theme.js +1 -1
  304. package/themes/custom/cupra-diagonal.theme.cjs +150 -102
  305. package/themes/custom/cupra-diagonal.theme.css +148 -100
  306. package/themes/custom/cupra-diagonal.theme.d.cts +2 -2
  307. package/themes/custom/cupra-diagonal.theme.d.ts +2 -2
  308. package/themes/custom/cupra-diagonal.theme.js +149 -101
  309. package/themes/custom/cupra-events.theme.cjs +1 -1
  310. package/themes/custom/cupra-events.theme.d.cts +2 -2
  311. package/themes/custom/cupra-events.theme.d.ts +2 -2
  312. package/themes/custom/cupra-events.theme.js +1 -1
  313. package/themes/custom/cupra.theme.cjs +1 -1
  314. package/themes/custom/cupra.theme.d.cts +2 -2
  315. package/themes/custom/cupra.theme.d.ts +2 -2
  316. package/themes/custom/cupra.theme.js +1 -1
  317. package/themes/custom/germany.theme.cjs +1 -1
  318. package/themes/custom/germany.theme.d.cts +2 -2
  319. package/themes/custom/germany.theme.d.ts +2 -2
  320. package/themes/custom/germany.theme.js +1 -1
  321. package/themes/custom/hyundai.theme.cjs +1 -1
  322. package/themes/custom/hyundai.theme.d.cts +2 -2
  323. package/themes/custom/hyundai.theme.d.ts +2 -2
  324. package/themes/custom/hyundai.theme.js +1 -1
  325. package/themes/custom/italy.theme.cjs +1 -1
  326. package/themes/custom/italy.theme.d.cts +2 -2
  327. package/themes/custom/italy.theme.d.ts +2 -2
  328. package/themes/custom/italy.theme.js +1 -1
  329. package/themes/custom/magimix.theme.cjs +1 -1
  330. package/themes/custom/magimix.theme.d.cts +2 -2
  331. package/themes/custom/magimix.theme.d.ts +2 -2
  332. package/themes/custom/magimix.theme.js +1 -1
  333. package/themes/custom/onlive-ai.theme.cjs +1 -1
  334. package/themes/custom/onlive-ai.theme.d.cts +2 -2
  335. package/themes/custom/onlive-ai.theme.d.ts +2 -2
  336. package/themes/custom/onlive-ai.theme.js +1 -1
  337. package/themes/custom/onlive.theme.cjs +1 -1
  338. package/themes/custom/onlive.theme.d.cts +2 -2
  339. package/themes/custom/onlive.theme.d.ts +2 -2
  340. package/themes/custom/onlive.theme.js +1 -1
  341. package/themes/custom/seat-cupra.theme.cjs +1 -1
  342. package/themes/custom/seat-cupra.theme.d.cts +2 -2
  343. package/themes/custom/seat-cupra.theme.d.ts +2 -2
  344. package/themes/custom/seat-cupra.theme.js +1 -1
  345. package/themes/custom/seat.theme.cjs +872 -0
  346. package/themes/custom/seat.theme.css +869 -0
  347. package/themes/custom/seat.theme.d.cts +3 -0
  348. package/themes/custom/seat.theme.d.ts +3 -0
  349. package/themes/custom/seat.theme.js +872 -0
  350. package/themes/dark.cjs +1 -1
  351. package/themes/dark.d.cts +1 -1
  352. package/themes/dark.d.ts +1 -1
  353. package/themes/dark.js +1 -1
  354. package/themes/light.cjs +1 -1
  355. package/themes/light.d.cts +1 -1
  356. package/themes/light.d.ts +1 -1
  357. package/themes/light.js +1 -1
  358. package/types/deep-link.types.cjs +1 -1
  359. package/types/deep-link.types.d.cts +1 -1
  360. package/types/deep-link.types.d.ts +1 -1
  361. package/types/deep-link.types.js +1 -1
  362. package/types/globals.cjs +1 -1
  363. package/types/globals.d.cts +1 -1
  364. package/types/globals.d.ts +1 -1
  365. package/types/globals.js +1 -1
  366. package/types/tracking-options.cjs +1 -1
  367. package/types/tracking-options.d.cts +1 -1
  368. package/types/tracking-options.d.ts +1 -1
  369. package/types/tracking-options.js +1 -1
  370. package/utils/adopt-styles.cjs +1 -1
  371. package/utils/adopt-styles.d.cts +1 -1
  372. package/utils/adopt-styles.d.ts +1 -1
  373. package/utils/adopt-styles.js +1 -1
  374. package/utils/apply-optional-styles.cjs +1034 -116
  375. package/utils/apply-optional-styles.d.cts +17 -15
  376. package/utils/apply-optional-styles.d.ts +17 -15
  377. package/utils/apply-optional-styles.js +1034 -116
  378. package/utils/browser-preferences.cjs +1 -1
  379. package/utils/browser-preferences.d.cts +1 -1
  380. package/utils/browser-preferences.d.ts +1 -1
  381. package/utils/browser-preferences.js +1 -1
  382. package/utils/classify-media.cjs +1 -1
  383. package/utils/classify-media.d.cts +1 -1
  384. package/utils/classify-media.d.ts +1 -1
  385. package/utils/classify-media.js +1 -1
  386. package/utils/decorators.cjs +1 -1
  387. package/utils/decorators.d.cts +1 -1
  388. package/utils/decorators.d.ts +1 -1
  389. package/utils/decorators.js +1 -1
  390. package/utils/detected-lang.cjs +1 -1
  391. package/utils/detected-lang.d.cts +1 -1
  392. package/utils/detected-lang.d.ts +1 -1
  393. package/utils/detected-lang.js +1 -1
  394. package/utils/fullscreen.cjs +1 -1
  395. package/utils/fullscreen.d.cts +1 -1
  396. package/utils/fullscreen.d.ts +1 -1
  397. package/utils/fullscreen.js +1 -1
  398. package/utils/insert-script.cjs +1 -1
  399. package/utils/insert-script.d.cts +1 -1
  400. package/utils/insert-script.d.ts +1 -1
  401. package/utils/insert-script.js +1 -1
  402. package/utils/is-map-compatible.cjs +1 -1
  403. package/utils/is-map-compatible.d.cts +1 -1
  404. package/utils/is-map-compatible.d.ts +1 -1
  405. package/utils/is-map-compatible.js +1 -1
  406. package/utils/markdown.cjs +1 -1
  407. package/utils/markdown.d.cts +1 -1
  408. package/utils/markdown.d.ts +1 -1
  409. package/utils/markdown.js +1 -1
  410. package/utils/merge.cjs +1 -1
  411. package/utils/merge.d.cts +1 -1
  412. package/utils/merge.d.ts +1 -1
  413. package/utils/merge.js +1 -1
  414. package/utils/multiband-track-volume.cjs +1 -1
  415. package/utils/multiband-track-volume.d.cts +1 -1
  416. package/utils/multiband-track-volume.d.ts +1 -1
  417. package/utils/multiband-track-volume.js +1 -1
  418. package/utils/onlive-url-params.cjs +1 -1
  419. package/utils/onlive-url-params.d.cts +1 -1
  420. package/utils/onlive-url-params.d.ts +1 -1
  421. package/utils/onlive-url-params.js +1 -1
  422. package/utils/pretty-distance.cjs +1 -1
  423. package/utils/pretty-distance.d.cts +1 -1
  424. package/utils/pretty-distance.d.ts +1 -1
  425. package/utils/pretty-distance.js +1 -1
  426. package/utils/pretty-time.cjs +1 -1
  427. package/utils/pretty-time.d.cts +1 -1
  428. package/utils/pretty-time.d.ts +1 -1
  429. package/utils/pretty-time.js +1 -1
  430. package/utils/random-string.cjs +1 -1
  431. package/utils/random-string.d.cts +1 -1
  432. package/utils/random-string.d.ts +1 -1
  433. package/utils/random-string.js +1 -1
  434. package/utils/resource-type.cjs +1 -1
  435. package/utils/resource-type.d.cts +1 -1
  436. package/utils/resource-type.d.ts +1 -1
  437. package/utils/resource-type.js +1 -1
  438. package/utils/round-number.cjs +1 -1
  439. package/utils/round-number.d.cts +1 -1
  440. package/utils/round-number.d.ts +1 -1
  441. package/utils/round-number.js +1 -1
  442. package/utils/safe-html.cjs +1 -1
  443. package/utils/safe-html.d.cts +1 -1
  444. package/utils/safe-html.d.ts +1 -1
  445. package/utils/safe-html.js +1 -1
  446. package/utils/sanitize.cjs +1 -1
  447. package/utils/sanitize.d.cts +1 -1
  448. package/utils/sanitize.d.ts +1 -1
  449. package/utils/sanitize.js +1 -1
  450. package/utils/spread.cjs +1 -1
  451. package/utils/spread.d.cts +1 -1
  452. package/utils/spread.d.ts +1 -1
  453. package/utils/spread.js +1 -1
  454. package/utils/watch.cjs +1 -1
  455. package/utils/watch.d.cts +1 -1
  456. package/utils/watch.d.ts +1 -1
  457. package/utils/watch.js +1 -1
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! @onlive.ai/common-121 v0.2.190 | © 2026 Onlive.ai */
2
- import{a as u,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-4DKWCKNT.js";import{html as fe,LitElement as di}from"lit";import{property as Ee,state as G}from"lit/decorators.js";import{classMap as pi}from"lit/directives/class-map.js";var Yt=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),Qt=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},L=s=>e=>typeof e=="function"?Yt(s,e):Qt(s,e);var J=class s{constructor(e){this.config=e}static initialize(e){return new s(e)}getBaseUrl(){return`${this.config.baseUrl}`}getHeaders(){return{"Content-Type":"application/json"}}async makeRequest(e,t={}){let i=`${this.getBaseUrl()}${e}`,o=await fetch(i,{...t,headers:{...this.getHeaders(),...t.headers}});if(!o.ok)throw new Error(`FAQs API error: ${o.status} ${o.statusText}`);return o.json()}async getSettingsByOrganization(e,t){try{let i=new URLSearchParams;t&&i.append("userGroupId",t);let o=i.toString(),r=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,n=await fetch(r,{method:"GET",headers:this.getHeaders(),credentials:"include"});if(n.status===404)return null;if(!n.ok)throw new Error(`Failed to fetch settings: ${n.statusText}`);return await n.json()}catch(i){return console.error("Error fetching settings:",i),null}}async getFaqs(e={}){let t=new URLSearchParams;if(e.search&&t.append("search",e.search),e.organizationId&&t.append("organizationId",e.organizationId),e.groupId&&t.append("groupId",e.groupId),e.isActive!==void 0&&t.append("isActive",e.isActive.toString()),e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.sortBy&&t.append("sortBy",e.sortBy),e.sortOrder&&t.append("sortOrder",e.sortOrder),e.extraFilters){for(let[r,n]of Object.entries(e.extraFilters))if(n&&(Array.isArray(n)?n.length>0:n.toString().trim()!=="")){let a=Array.isArray(n)?n.join(","):n.toString();t.append(`extra_${r}`,a)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var g=async(s,e)=>{let t=await fetch(s,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var B=class s{constructor(e){this.config=e,this.enableUpload=e.enableUpload||!1}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("FileService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async uploadFile(e,t={}){try{let i=await this.requestSignedUrl({filename:e.name,description:t.description,loadDirection:"up",bucketType:t.bucketType||"conversations",path:t.path||".temp",mimeType:e.type});return await this.uploadToSignedUrl(i.data.signedUrlData.signedUrl,e),{success:!0,id:i.data.file.id,name:i.data.file.name,url:i.data.file.url,type:i.data.file.type}}catch(i){return console.error("Error uploading file:",i),{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}async requestSignedUrl(e){let t=`${this.config.baseUrl}/files/upload-url`;return this.makeRequest(t,{method:"POST",body:JSON.stringify(e)})}async uploadToSignedUrl(e,t){let i=await fetch(e,{method:"PUT",body:t,headers:{"Content-Type":t.type}});if(!i.ok){let o=await i.text().catch(()=>"No response");throw new Error(`Upload failed with status: ${i.status}. Response: ${o}`)}}async uploadFileWithRetry(e,t={}){let i=t.maxRetries||3,o=null;for(let r=1;r<=i;r++)try{let n=await this.uploadFile(e,t);if(n.success)return n;throw new Error(n.error||"Upload failed")}catch(n){if(o=n instanceof Error?n:new Error("Unknown error"),r===i)break;let a=2**r*1e3;await new Promise(l=>setTimeout(l,a))}return{success:!1,error:o?.message||"Upload failed after retries"}}async getFileById(e){let t=`${this.config.baseUrl}/files/${e}`,i=await this.makeRequest(t);if(!i.success)throw new Error("Failed to get file");return i.data}async makeRequest(e,t){let i={"Content-Type":"application/json"};return this.config.organizationId&&(i["X-Onlive-Organization-Id"]=this.config.organizationId),t?.headers&&Object.assign(i,t.headers),g(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var K=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("MultimediaService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getImages(e={}){let t=new URLSearchParams({type:"image",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getVideos(e={}){let t=new URLSearchParams({type:"video",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getPresentations(e={}){let t=new URLSearchParams({type:"presentation",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getAllMultimedia(e={}){let[t,i,o]=await Promise.all([this.getImages(e),this.getVideos(e),this.getPresentations(e)]);return{images:t,videos:i,presentations:o}}async getMultimediaByToken(e){let t=`${this.config.baseUrl}/multimedia/secure-token/${e}`;return this.makeRequest(t,!1)}async searchMultimedia(e,t){let i={search:e,page:1,limit:50,includeSecureToken:!0};if(t)return this.getMultimediaByType(t,i);let[o,r,n]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),a=[...o.items,...r.items,...n.items];return{items:a,total:a.length,count:a.length,currentPage:1,totalPages:1}}async getMultimediaByType(e,t){switch(e){case"image":return this.getImages(t);case"video":return this.getVideos(t);case"presentation":return this.getPresentations(t);default:throw new Error(`Invalid multimedia type: ${e}`)}}appendExtraFilters(e,t){if(t){for(let[i,o]of Object.entries(t))if(o&&(Array.isArray(o)?o.length>0:o.toString().trim()!=="")){let r=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,r)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return g(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var N=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("ProductService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getProducts(e={}){let t=new URLSearchParams({...e.title&&{title:e.title},...e.search&&{search:e.search},...e.category&&{category:e.category},...e.tags&&{tags:e.tags.join(",")},...e.sortBy&&{sortBy:e.sortBy},...e.sortOrder&&{sortOrder:e.sortOrder},...e.minPrice&&{minPrice:e.minPrice.toString()},...e.maxPrice&&{maxPrice:e.maxPrice.toString()},...e.inStock!==void 0&&{inStock:e.inStock.toString()},...e.offset&&{offset:e.offset.toString()},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});e.extraFields&&Object.keys(e.extraFields).length>0&&t.append("extraFields",JSON.stringify(e.extraFields));let i=`${this.config.baseUrl}/products?${t}`;return this.makeRequest(i,!0)}async getProductByToken(e){let t=`${this.config.baseUrl}/products/secure-token/${e}`;return this.makeRequest(t)}async searchProducts(e,t={}){return this.getProducts({...t,search:e})}async makeRequest(e,t=!1){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return g(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var ge=class{constructor(e){e?.multimediaService&&(this.multimediaService=K.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=J.initialize(e.faqsService)),e?.productService&&(this.productService=N.initialize(e.productService)),e?.fileService&&(this.fileService=B.initialize(e.fileService))}async loadAsset(e,t){switch(e){case"multimedia":return this.loadMultimediaAsset(t);case"product":return this.loadProductAsset(t);case"faq":return this.loadFaqAsset(t);case"file":return this.loadFileAsset(t);default:throw new Error(`Unsupported asset type: ${e}`)}}async loadMultimediaAsset(e){if(!this.multimediaService)throw new Error("MultimediaService not configured");let t=await this.multimediaService.getMultimediaByToken(e);if(!t)throw new Error("Multimedia not found");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:t.animatedCoverUrl||t.url,type:"multimedia",externalId:t.id,format:t.format,size:t.size||void 0,duration:t.duration||void 0,vodUrl:t.vodUrl||void 0,slides:t.slides||[],labels:t.labels,animatedCoverUrl:t.animatedCoverUrl||void 0,metadata:{organizationId:t.organizationId,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadProductAsset(e){if(!this.productService)throw new Error("MultimediaService not configured");let t=await this.productService.getProductByToken(e);if(!t)throw new Error("Product not found");return{id:t.id,name:t.name,description:t.description,url:t.url,thumbnail:t.images?.[0],type:"product",externalId:t.externalId,price:t.price,currency:t.currency,category:t.category,tags:t.tags,images:t.images,variants:t.variants?.map(i=>({id:i.id,externalId:i.externalId,price:i.price,currency:i.currency,images:i.images})),options:t.options,metadata:{providerType:t.providerType,providerId:t.providerId,discountType:t.discountType,discount:t.discount,stock:t.stock,broken:t.broken}}}async loadFaqAsset(e){if(!this.faqsService)throw new Error("FaqsService not configured");let t=await this.faqsService.getFaqById(e);return{id:t.id,name:t.question,description:t.answer,url:`#faq-${t.id}`,type:"faq",externalId:t.id,question:t.question,answer:t.answer,priority:t.priority,isActive:t.isActive,metadata:{organizationId:t.organizationId,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadFileAsset(e){if(!this.fileService)throw new Error("FileService not configured");let t=await this.fileService.getFileById(e),i=t.type||"",o=i.startsWith("video/"),r=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:r?t.url:void 0,type:"file",externalId:t.id,format:i,size:t.metadata?.size,duration:void 0,vodUrl:o?t.url:void 0,labels:[],animatedCoverUrl:o?t.url:void 0,metadata:{path:t.metadata?.path,bucketType:t.metadata?.bucketType,loadDirection:t.metadata?.loadDirection,createdAt:t.createdAt,updatedAt:t.updatedAt}}}};import{html as c}from"lit";import{classMap as li}from"lit/directives/class-map.js";import{ifDefined as te}from"lit/directives/if-defined.js";import{when as D}from"lit/directives/when.js";import{unsafeHTML as Xt}from"lit/directives/unsafe-html.js";import Ze from"dompurify";var Wt={ALLOWED_TAGS:["p","br","span","b","strong","i","em","u","s","del","ul","ol","li","code","pre","a","h1","h2","h3","h4","table","thead","tbody","tr","th","td"],ALLOWED_ATTR:["href","target","rel","title","aria-label","role","colspan","rowspan"],FORCE_HTTPS:!0,ALLOW_DATA_ATTR:!1};Ze.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var et=(s,e=Wt)=>Ze.sanitize(s,e);function tt(s=""){return Xt(Zt(s))}function Zt(s=""){return et(s,{ADD_ATTR:["target","rel"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import{html as ot,LitElement as oi}from"lit";import{property as si,query as ri}from"lit/decorators.js";import{repeat as ni}from"lit/directives/repeat.js";import ai from"video.js";import{css as ei,unsafeCSS as ti}from"lit";import ii from"video.js/dist/video-js.min.css?inline";var it=ei`
3
- ${ti(ii)}
1
+ /*! @onlive.ai/common-121 v0.2.192 | © 2026 Onlive.ai */
2
+ var pt=Object.defineProperty;var ci=Object.getOwnPropertyDescriptor;var di=(s,e)=>()=>(s&&(e=s(s=0)),e);var pi=(s,e)=>{for(var t in e)pt(s,t,{get:e[t],enumerable:!0})};var g=(s,e,t,i)=>{for(var o=i>1?void 0:i?ci(e,t):e,a=s.length-1,r;a>=0;a--)(r=s[a])&&(o=(i?r(e,t,o):r(o))||o);return i&&o&&pt(e,t,o),o};var ce={};pi(ce,{SYNTHETIC_MEDIA_PRESETS:()=>$e,createSyntheticAudioTrack:()=>Fe,createSyntheticMedia:()=>Ue,createSyntheticMediaFromPreset:()=>Ze,createSyntheticVideoTrack:()=>De});function De(s={}){let{width:e=640,height:t=480,fps:i=30,backgroundColor:o="#1a1a2e",foregroundColor:a="#4361ee",label:r="Mock Video",animation:n="wave"}=s,l=document.createElement("canvas");l.width=e,l.height=t;let c=l.getContext("2d"),u,U=Date.now(),$={wave:C=>{c.fillStyle=o,c.fillRect(0,0,e,t),c.strokeStyle=a,c.lineWidth=3,c.beginPath();for(let j=0;j<e;j++){let M=t/2+Math.sin(j/e*4*Math.PI+C*.002)*(t/4);j===0?c.moveTo(j,M):c.lineTo(j,M)}c.stroke()},pulse:C=>{c.fillStyle=o,c.fillRect(0,0,e,t);let j=Math.sin(C*.003)*.3+.7,M=Math.min(e,t)*.3*j;c.beginPath(),c.arc(e/2,t/2,M,0,Math.PI*2),c.fillStyle=a,c.fill()},bars:C=>{c.fillStyle=o,c.fillRect(0,0,e,t);let j=20,M=e/j,G=t*.7;c.fillStyle=a;for(let pe=0;pe<j;pe++){let dt=Math.abs(Math.sin(pe/j*Math.PI*2+C*.004))*G,ni=pe*M,li=t-dt;c.fillRect(ni+2,li,M-4,dt)}},avatar:C=>{c.fillStyle=o,c.fillRect(0,0,e,t);let j=e/2,M=t/2-20,G=Math.min(e,t)*.15;c.beginPath(),c.arc(j,M,G,0,Math.PI*2),c.fillStyle=a,c.fill(),c.beginPath(),c.ellipse(j,M+G*2.2,G*1.5,G,0,Math.PI,0),c.fill(),Math.sin(C*.01)>0&&(c.beginPath(),c.arc(j,M+G*3,5+Math.sin(C*.02)*3,0,Math.PI*2),c.fillStyle="#22c55e",c.fill())},none:()=>{c.fillStyle=o,c.fillRect(0,0,e,t)}},q=()=>{c.fillStyle="rgba(255, 255, 255, 0.8)",c.font=`${Math.floor(t*.04)}px system-ui, sans-serif`,c.textAlign="center",c.fillText(r,e/2,t-20)},Z=()=>{let C=Date.now()-U;$[n](C),q(),u=requestAnimationFrame(Z)};Z();let lt=l.captureStream(i),ct=lt.getVideoTracks()[0];return{track:ct,stream:lt,cleanup:()=>{cancelAnimationFrame(u),ct.stop()}}}function Fe(s={}){let{frequency:e=440,volume:t=.1,waveType:i="sine",addVariation:o=!0,enabled:a=!1}=s,r=new AudioContext,n=r.createMediaStreamDestination(),l=r.createOscillator();l.type=i,l.frequency.value=e;let c=r.createGain();c.gain.value=a?t:0;let u=null,U=null;o&&(u=r.createOscillator(),u.frequency.value=.5,U=r.createGain(),U.gain.value=10,u.connect(U),U.connect(l.frequency),u.start()),l.connect(c),c.connect(n),l.start();let $=n.stream,q=$.getAudioTracks()[0];return{track:q,stream:$,setVolume:Z=>{c.gain.value=Math.max(0,Math.min(1,Z))},setEnabled:Z=>{c.gain.value=Z?t:0},cleanup:()=>{l.stop(),u?.stop(),r.close(),q.stop()}}}function Ue(s,e){let t=De(s),i=Fe(e),o=new MediaStream([t.track,i.track]);return{videoTrack:t.track,audioTrack:i.track,combinedStream:o,setAudioVolume:i.setVolume,setAudioEnabled:i.setEnabled,cleanup:()=>{t.cleanup(),i.cleanup()}}}function Ze(s){let e=$e[s];return Ue(e.video,e.audio)}var $e,W=di(()=>{"use strict";$e={localCamera:{video:{width:640,height:480,animation:"avatar",label:"You",foregroundColor:"#4361ee"},audio:{enabled:!1}},agentCamera:{video:{width:640,height:480,animation:"avatar",label:"AI Agent",foregroundColor:"#22c55e",backgroundColor:"#0f172a"},audio:{enabled:!1,frequency:300}},screenShare:{video:{width:1920,height:1080,animation:"bars",label:"Screen Share",backgroundColor:"#0a0a0a",foregroundColor:"#f59e0b"},audio:{enabled:!1}},voiceOnly:{video:{width:320,height:240,animation:"wave",label:"Voice Call"},audio:{enabled:!1,volume:.05}}}});import{html as Ce,LitElement as Ai}from"lit";import{property as Te,state as oe}from"lit/decorators.js";import{classMap as Ci}from"lit/directives/class-map.js";var ui=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),mi=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},N=s=>e=>typeof e=="function"?ui(s,e):mi(s,e);var ee=class s{constructor(e){this.config=e}static initialize(e){return new s(e)}getBaseUrl(){return`${this.config.baseUrl}`}getHeaders(){return{"Content-Type":"application/json"}}async makeRequest(e,t={}){let i=`${this.getBaseUrl()}${e}`,o=await fetch(i,{...t,headers:{...this.getHeaders(),...t.headers}});if(!o.ok)throw new Error(`FAQs API error: ${o.status} ${o.statusText}`);return o.json()}async getSettingsByOrganization(e,t){try{let i=new URLSearchParams;t&&i.append("userGroupId",t);let o=i.toString(),a=`${this.getBaseUrl()}/settings/organization/${e}${o?`?${o}`:""}`,r=await fetch(a,{method:"GET",headers:this.getHeaders(),credentials:"include"});if(r.status===404)return null;if(!r.ok)throw new Error(`Failed to fetch settings: ${r.statusText}`);return await r.json()}catch(i){return console.error("Error fetching settings:",i),null}}async getFaqs(e={}){let t=new URLSearchParams;if(e.search&&t.append("search",e.search),e.organizationId&&t.append("organizationId",e.organizationId),e.groupId&&t.append("groupId",e.groupId),e.isActive!==void 0&&t.append("isActive",e.isActive.toString()),e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.sortBy&&t.append("sortBy",e.sortBy),e.sortOrder&&t.append("sortOrder",e.sortOrder),e.extraFilters){for(let[a,r]of Object.entries(e.extraFilters))if(r&&(Array.isArray(r)?r.length>0:r.toString().trim()!=="")){let n=Array.isArray(r)?r.join(","):r.toString();t.append(`extra_${a}`,n)}}let i=t.toString(),o=`/faqs${i?`?${i}`:""}`;return this.makeRequest(o)}async getFaqById(e){return this.makeRequest(`/faqs/${e}`,{})}};var v=async(s,e)=>{let t=await fetch(s,e);if(!t.ok){let i=await t.json().catch(()=>({}));throw new Error(JSON.stringify({status:t.status,statusText:t.statusText,...i}))}return t&&t.json()};var te=class s{constructor(e){this.config=e,this.enableUpload=e.enableUpload||!1}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("FileService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async uploadFile(e,t={}){try{let i=await this.requestSignedUrl({filename:e.name,description:t.description,loadDirection:"up",bucketType:t.bucketType||"conversations",path:t.path||".temp",mimeType:e.type});return await this.uploadToSignedUrl(i.data.signedUrlData.signedUrl,e),{success:!0,id:i.data.file.id,name:i.data.file.name,url:i.data.file.url,type:i.data.file.type}}catch(i){return console.error("Error uploading file:",i),{success:!1,error:i instanceof Error?i.message:"Unknown error"}}}async requestSignedUrl(e){let t=`${this.config.baseUrl}/files/upload-url`;return this.makeRequest(t,{method:"POST",body:JSON.stringify(e)})}async uploadToSignedUrl(e,t){let i=await fetch(e,{method:"PUT",body:t,headers:{"Content-Type":t.type}});if(!i.ok){let o=await i.text().catch(()=>"No response");throw new Error(`Upload failed with status: ${i.status}. Response: ${o}`)}}async uploadFileWithRetry(e,t={}){let i=t.maxRetries||3,o=null;for(let a=1;a<=i;a++)try{let r=await this.uploadFile(e,t);if(r.success)return r;throw new Error(r.error||"Upload failed")}catch(r){if(o=r instanceof Error?r:new Error("Unknown error"),a===i)break;let n=2**a*1e3;await new Promise(l=>setTimeout(l,n))}return{success:!1,error:o?.message||"Upload failed after retries"}}async getFileById(e){let t=`${this.config.baseUrl}/files/${e}`,i=await this.makeRequest(t);if(!i.success)throw new Error("Failed to get file");return i.data}async makeRequest(e,t){let i={"Content-Type":"application/json"};return this.config.organizationId&&(i["X-Onlive-Organization-Id"]=this.config.organizationId),t?.headers&&Object.assign(i,t.headers),v(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var ie=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("MultimediaService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getImages(e={}){let t=new URLSearchParams({type:"image",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getVideos(e={}){let t=new URLSearchParams({type:"video",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getPresentations(e={}){let t=new URLSearchParams({type:"presentation",page:(e.page||1).toString(),limit:(e.limit||12).toString(),...e.search&&{search:e.search},...e.labels&&{labels:e.labels.join(",")},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});this.appendExtraFilters(t,e.extraFilters);let i=`${this.config.baseUrl}/multimedia?${t}`;return this.makeRequest(i)}async getAllMultimedia(e={}){let[t,i,o]=await Promise.all([this.getImages(e),this.getVideos(e),this.getPresentations(e)]);return{images:t,videos:i,presentations:o}}async getMultimediaByToken(e){let t=`${this.config.baseUrl}/multimedia/secure-token/${e}`;return this.makeRequest(t,!1)}async searchMultimedia(e,t){let i={search:e,page:1,limit:50,includeSecureToken:!0};if(t)return this.getMultimediaByType(t,i);let[o,a,r]=await Promise.all([this.getImages(i),this.getVideos(i),this.getPresentations(i)]),n=[...o.items,...a.items,...r.items];return{items:n,total:n.length,count:n.length,currentPage:1,totalPages:1}}async getMultimediaByType(e,t){switch(e){case"image":return this.getImages(t);case"video":return this.getVideos(t);case"presentation":return this.getPresentations(t);default:throw new Error(`Invalid multimedia type: ${e}`)}}appendExtraFilters(e,t){if(t){for(let[i,o]of Object.entries(t))if(o&&(Array.isArray(o)?o.length>0:o.toString().trim()!=="")){let a=Array.isArray(o)?o.join(","):o.toString();e.append(`extra_${i}`,a)}}}async makeRequest(e,t=!0){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return v(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var Y=class s{constructor(e){this.config=e}static getInstance(e){if(!s.instance&&e&&(s.instance=new s(e)),!s.instance)throw new Error("ProductService must be initialized with config first");return s.instance}static initialize(e){return s.instance=new s(e),s.instance}async getProducts(e={}){let t=new URLSearchParams({...e.title&&{title:e.title},...e.search&&{search:e.search},...e.category&&{category:e.category},...e.tags&&{tags:e.tags.join(",")},...e.sortBy&&{sortBy:e.sortBy},...e.sortOrder&&{sortOrder:e.sortOrder},...e.minPrice&&{minPrice:e.minPrice.toString()},...e.maxPrice&&{maxPrice:e.maxPrice.toString()},...e.inStock!==void 0&&{inStock:e.inStock.toString()},...e.offset&&{offset:e.offset.toString()},...e.includeSecureToken&&{includeSecureToken:e.includeSecureToken.toString()}});e.extraFields&&Object.keys(e.extraFields).length>0&&t.append("extraFields",JSON.stringify(e.extraFields));let i=`${this.config.baseUrl}/products?${t}`;return this.makeRequest(i,!0)}async getProductByToken(e){let t=`${this.config.baseUrl}/products/secure-token/${e}`;return this.makeRequest(t)}async searchProducts(e,t={}){return this.getProducts({...t,search:e})}async makeRequest(e,t=!1){let i={"Content-Type":"application/json","X-Onlive-Organization-Id":this.config.organizationId};return v(e,{method:"GET",headers:i,credentials:t?"include":"same-origin"})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var xe=class{constructor(e){e?.multimediaService&&(this.multimediaService=ie.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=ee.initialize(e.faqsService)),e?.productService&&(this.productService=Y.initialize(e.productService)),e?.fileService&&(this.fileService=te.initialize(e.fileService))}async loadAsset(e,t){switch(e){case"multimedia":return this.loadMultimediaAsset(t);case"product":return this.loadProductAsset(t);case"faq":return this.loadFaqAsset(t);case"file":return this.loadFileAsset(t);default:throw new Error(`Unsupported asset type: ${e}`)}}async loadMultimediaAsset(e){if(!this.multimediaService)throw new Error("MultimediaService not configured");let t=await this.multimediaService.getMultimediaByToken(e);if(!t)throw new Error("Multimedia not found");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:t.animatedCoverUrl||t.url,type:"multimedia",externalId:t.id,format:t.format,size:t.size||void 0,duration:t.duration||void 0,vodUrl:t.vodUrl||void 0,slides:t.slides||[],labels:t.labels,animatedCoverUrl:t.animatedCoverUrl||void 0,metadata:{organizationId:t.organizationId,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadProductAsset(e){if(!this.productService)throw new Error("MultimediaService not configured");let t=await this.productService.getProductByToken(e);if(!t)throw new Error("Product not found");return{id:t.id,name:t.name,description:t.description,url:t.url,thumbnail:t.images?.[0],type:"product",externalId:t.externalId,price:t.price,currency:t.currency,category:t.category,tags:t.tags,images:t.images,variants:t.variants?.map(i=>({id:i.id,externalId:i.externalId,price:i.price,currency:i.currency,images:i.images})),options:t.options,metadata:{providerType:t.providerType,providerId:t.providerId,discountType:t.discountType,discount:t.discount,stock:t.stock,broken:t.broken}}}async loadFaqAsset(e){if(!this.faqsService)throw new Error("FaqsService not configured");let t=await this.faqsService.getFaqById(e);return{id:t.id,name:t.question,description:t.answer,url:`#faq-${t.id}`,type:"faq",externalId:t.id,question:t.question,answer:t.answer,priority:t.priority,isActive:t.isActive,metadata:{organizationId:t.organizationId,createdAt:t.createdAt,updatedAt:t.updatedAt}}}async loadFileAsset(e){if(!this.fileService)throw new Error("FileService not configured");let t=await this.fileService.getFileById(e),i=t.type||"",o=i.startsWith("video/"),a=i.startsWith("image/");return{id:t.id,name:t.name,description:t.description||"",url:t.url,thumbnail:a?t.url:void 0,type:"file",externalId:t.id,format:i,size:t.metadata?.size,duration:void 0,vodUrl:o?t.url:void 0,labels:[],animatedCoverUrl:o?t.url:void 0,metadata:{path:t.metadata?.path,bucketType:t.metadata?.bucketType,loadDirection:t.metadata?.loadDirection,createdAt:t.createdAt,updatedAt:t.updatedAt}}}};import{html as d}from"lit";import{classMap as xi}from"lit/directives/class-map.js";import{ifDefined as ue}from"lit/directives/if-defined.js";import{when as H}from"lit/directives/when.js";import{unsafeHTML as vi}from"lit/directives/unsafe-html.js";import ut from"dompurify";var gi={ALLOWED_TAGS:["p","br","span","b","strong","i","em","u","s","del","ul","ol","li","code","pre","a","h1","h2","h3","h4","table","thead","tbody","tr","th","td"],ALLOWED_ATTR:["href","target","rel","title","aria-label","role","colspan","rowspan"],FORCE_HTTPS:!0,ALLOW_DATA_ATTR:!1};ut.addHook("afterSanitizeAttributes",s=>{"target"in s&&s.target==="_blank"&&s.setAttribute("rel","noopener noreferrer")});var mt=(s,e=gi)=>ut.sanitize(s,e);function gt(s=""){return vi(hi(s))}function hi(s=""){return mt(s,{ADD_ATTR:["target","rel"],ADD_TAGS:["ol-"],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:/^ol-/,attributeNameCheck:null,allowCustomizedBuiltInElements:!0}})}import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import{html as ht,LitElement as ki}from"lit";import{property as ji,query as wi}from"lit/decorators.js";import{repeat as Si}from"lit/directives/repeat.js";import _i from"video.js";import{css as fi,unsafeCSS as bi}from"lit";import yi from"video.js/dist/video-js.min.css?inline";var vt=fi`
3
+ ${bi(yi)}
4
4
  .och__player {
5
5
  width: 100%;
6
6
  height: auto;
@@ -13,18 +13,18 @@ import{a as u,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-4DKWCKNT.js";
13
13
  background: transparent;
14
14
  transition: all 0.2s ease;
15
15
  }
16
- `;var H=class extends oi{constructor(){super(...arguments);this.sources=[];this.player=null}connectedCallback(){super.connectedCallback();let t="videojs-font-face";if(!document.head.querySelector(`#${t}`)){let i=document.createElement("style");i.id=t,i.innerHTML=`
16
+ `;var Q=class extends ki{constructor(){super(...arguments);this.sources=[];this.player=null}connectedCallback(){super.connectedCallback();let t="videojs-font-face";if(!document.head.querySelector(`#${t}`)){let i=document.createElement("style");i.id=t,i.innerHTML=`
17
17
  @font-face {
18
18
  font-family: VideoJS;
19
19
  src:
20
20
  url(https://cdn.onlive.site/fonts/video-js/font/VideoJS.woff) format("woff"),
21
21
  url(https://cdn.onlive.site/fonts/video-js/font/VideoJS.ttf) format("truetype");
22
- }`,document.head.appendChild(i)}}firstUpdated(){this.$player&&(this.player=ai(this.$player,{controls:!0,controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}))}play(){this.player?.play()}pause(){this.player?.pause()}render(){return ot`
22
+ }`,document.head.appendChild(i)}}firstUpdated(){this.$player&&(this.player=_i(this.$player,{controls:!0,controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}))}play(){this.player?.play()}pause(){this.player?.pause()}render(){return ht`
23
23
  <video
24
24
  id="player"
25
25
  class="och__player video-js video-js vjs-16-9 vjs-controls-enabled vjs-workinghover vjs-v8 vjs-theme-sea vjs_video_2321-dimensions vjs-has-started vjs-paused vjs-user-inactive"
26
26
  >
27
- ${ni(this.sources,t=>t.src,t=>ot`<source src=${t.src} type=${t.type}></source>`)}
27
+ ${Si(this.sources,t=>t.src,t=>ht`<source src=${t.src} type=${t.type}></source>`)}
28
28
  <p class="vjs-no-js">
29
29
  To view this video please enable JavaScript, and consider upgrading to a web browser that
30
30
  <a href="https://videojs.com/html5-video-support/" target="_blank"> supports HTML5 video </a>
@@ -2041,45 +2041,45 @@ video::-webkit-media-text-track-display {
2041
2041
  transition: all 0.2s ease;
2042
2042
  }
2043
2043
  </style>
2044
- `}};H.styles=[it],u([si({type:Array})],H.prototype,"sources",2),u([ri("#player")],H.prototype,"$player",2),H=u([L("och-player")],H);var ve=class{formatFileSize(e){let t=["B","KB","MB","GB"];if(e===0)return"0 B";let i=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/1024**i*100)/100+" "+t[i]}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}renderThumbnail(e,t,i,o,r){return!t.showThumbnail||e.type==="faq"?c``:c`
2044
+ `}};Q.styles=[vt],g([ji({type:Array})],Q.prototype,"sources",2),g([wi("#player")],Q.prototype,"$player",2),Q=g([N("och-player")],Q);var Me=class{formatFileSize(e){let t=["B","KB","MB","GB"];if(e===0)return"0 B";let i=Math.floor(Math.log(e)/Math.log(1024));return Math.round(e/1024**i*100)/100+" "+t[i]}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}renderThumbnail(e,t,i,o,a){return!t.showThumbnail||e.type==="faq"?d``:d`
2045
2045
  <div class="ol-asset__thumbnail">
2046
2046
  ${this.renderThumbnailContent(e)}
2047
2047
  ${this.renderMetadata(e,t)}
2048
2048
  ${this.renderThumbnailOverlay(e)}
2049
- ${this.renderHoverOverlay(e,i,r,o)}
2049
+ ${this.renderHoverOverlay(e,i,a,o)}
2050
2050
  </div>
2051
- `}renderThumbnailContent(e){switch(e.type){case"multimedia":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return c`
2051
+ `}renderThumbnailContent(e){switch(e.type){case"multimedia":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return d`
2052
2052
  <img
2053
- src="${te(t.thumbnail||t.url)}"
2053
+ src="${ue(t.thumbnail||t.url)}"
2054
2054
  alt="${t.name}"
2055
2055
  class="ol-asset__image"
2056
2056
  />
2057
- `}}case"file":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return c`
2057
+ `}}case"file":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return d`
2058
2058
  <img
2059
- src="${te(t.thumbnail||t.url)}"
2059
+ src="${ue(t.thumbnail||t.url)}"
2060
2060
  alt="${t.name}"
2061
2061
  class="ol-asset__image"
2062
2062
  />
2063
- `}}default:return c`
2063
+ `}}default:return d`
2064
2064
  <img
2065
- src="${te(e.thumbnail||e.url)}"
2065
+ src="${ue(e.thumbnail||e.url)}"
2066
2066
  alt="${e.name}"
2067
2067
  class="ol-asset__image"
2068
2068
  />
2069
- `}}renderVideoThumbnail(e){return c`
2069
+ `}}renderVideoThumbnail(e){return d`
2070
2070
  <och-player
2071
2071
  class="ol-asset__video-player"
2072
2072
  .sources=${[{src:e.url||"",type:e.format||"video/mp4"}]}
2073
2073
  ></och-player>
2074
- `}renderPresentationThumbnail(e){return c`
2074
+ `}renderPresentationThumbnail(e){return d`
2075
2075
  <div class="ol-asset__presentation-preview">
2076
- ${D(e.slides&&e.slides.length>0,()=>c`
2076
+ ${H(e.slides&&e.slides.length>0,()=>d`
2077
2077
  <img
2078
2078
  src="${e.slides[0]}"
2079
2079
  alt="Presentation preview"
2080
2080
  class="ol-asset__presentation-image"
2081
2081
  />
2082
- `,()=>c`
2082
+ `,()=>d`
2083
2083
  <div class="ol-asset__presentation-fallback">
2084
2084
  <div class="ol-asset__presentation-icon">
2085
2085
  <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
@@ -2094,61 +2094,61 @@ video::-webkit-media-text-track-display {
2094
2094
  </div>
2095
2095
  `)}
2096
2096
  </div>
2097
- `}renderThumbnailOverlay(e){let t=[];if(e.type==="multimedia"||e.type==="file"){let i=e;this.getMultimediaSubtype(i)==="video"&&i.duration&&t.push(c`
2097
+ `}renderThumbnailOverlay(e){let t=[];if(e.type==="multimedia"||e.type==="file"){let i=e;this.getMultimediaSubtype(i)==="video"&&i.duration&&t.push(d`
2098
2098
  <div class="ol-asset__duration">${this.formatDuration(i.duration)}</div>
2099
- `)}return c`${t}`}renderContent(e,t){let i=(e.type==="multimedia"||e.type==="file")&&!t.showName&&!t.showDescription&&!t.showTags;return c`
2100
- <div class=${li({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2099
+ `)}return d`${t}`}renderContent(e,t){let i=(e.type==="multimedia"||e.type==="file")&&!t.showName&&!t.showDescription&&!t.showTags;return d`
2100
+ <div class=${xi({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2101
2101
  ${this.renderName(e,t)}
2102
2102
  ${this.renderDescription(e,t)}
2103
2103
  ${this.renderPrice(e)}
2104
2104
  ${this.renderTags(e,t)}
2105
2105
  </div>
2106
- `}renderName(e,t){return e.type==="faq"?c``:e.type==="product"?c`
2106
+ `}renderName(e,t){return e.type==="faq"?d``:e.type==="product"?d`
2107
2107
  <div class="ol-asset__name">${e.name}</div>
2108
- `:(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0)?c`
2108
+ `:(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0)?d`
2109
2109
  <div class="ol-asset__name">${e.name}</div>
2110
- `:t.showName?c`
2110
+ `:t.showName?d`
2111
2111
  <div class="ol-asset__name">${e.name}</div>
2112
- `:c``}renderDescription(e,t){if(e.type==="faq"){let o=e;return o.answer?c`
2112
+ `:d``}renderDescription(e,t){if(e.type==="faq"){let o=e;return o.answer?d`
2113
2113
  <div class="ol-asset__description ol-asset__answer">${o.answer}</div>
2114
- `:c``}return e.description?e.type==="product"?c`
2115
- <div class="ol-asset__description">${tt(e.description)}</div>
2116
- `:t.showDescription?c`
2114
+ `:d``}return e.description?e.type==="product"?d`
2115
+ <div class="ol-asset__description">${gt(e.description)}</div>
2116
+ `:t.showDescription?d`
2117
2117
  <div class="ol-asset__description">${e.description}</div>
2118
- `:c``:c``}renderPrice(e){if(e.type!=="product")return c``;let t=e;return t.price?c`
2118
+ `:d``:d``}renderPrice(e){if(e.type!=="product")return d``;let t=e;return t.price?d`
2119
2119
  <div class="ol-asset__price">
2120
2120
  ${t.currency} ${t.price}
2121
2121
  </div>
2122
- `:c``}renderMetadata(e,t){if(!t.showMetadata)return c``;let i=[];if(t.showSize&&e.type!=="faq"&&"size"in e&&e.size&&typeof e.size=="number"&&i.push(c`
2122
+ `:d``}renderMetadata(e,t){if(!t.showMetadata)return d``;let i=[];if(t.showSize&&e.type!=="faq"&&"size"in e&&e.size&&typeof e.size=="number"&&i.push(d`
2123
2123
  <div class="ol-asset__meta-item">
2124
2124
  <span>${this.formatFileSize(e.size)}</span>
2125
2125
  </div>
2126
- `),t.showDuration&&(e.type==="multimedia"||e.type==="file")){let o=e;this.getMultimediaSubtype(o)==="video"&&o.duration&&i.push(c`
2126
+ `),t.showDuration&&(e.type==="multimedia"||e.type==="file")){let o=e;this.getMultimediaSubtype(o)==="video"&&o.duration&&i.push(d`
2127
2127
  <div class="ol-asset__meta-item">
2128
2128
  <span>⏱️</span>
2129
2129
  <span>${this.formatDuration(o.duration)}</span>
2130
2130
  </div>
2131
- `)}return i.length===0?c``:c`
2131
+ `)}return i.length===0?d``:d`
2132
2132
  <div class="ol-asset__metadata">
2133
2133
  ${i}
2134
2134
  </div>
2135
- `}renderTags(e,t){if(!t.showTags)return c``;let i=[];switch(e.type){case"product":i=e.tags||[];break;case"multimedia":case"file":i=e.labels||[];break}return i.length===0?c``:c`
2135
+ `}renderTags(e,t){if(!t.showTags)return d``;let i=[];switch(e.type){case"product":i=e.tags||[];break;case"multimedia":case"file":i=e.labels||[];break}return i.length===0?d``:d`
2136
2136
  <div class="ol-asset__tags">
2137
- ${i.slice(0,3).map(o=>c`
2137
+ ${i.slice(0,3).map(o=>d`
2138
2138
  <span class="ol-asset__tag">${o}</span>
2139
2139
  `)}
2140
2140
  </div>
2141
- `}renderLoading(){return c`
2141
+ `}renderLoading(){return d`
2142
2142
  <div class="ol-asset__loading">
2143
2143
  <div class="ol-asset__spinner"></div>
2144
2144
  <span>Loading...</span>
2145
2145
  </div>
2146
- `}renderError(e){return c`
2146
+ `}renderError(e){return d`
2147
2147
  <div class="ol-asset__error">
2148
2148
  <span class="ol-asset__error-icon">⚠️</span>
2149
2149
  <span>${e}</span>
2150
2150
  </div>
2151
- `}renderModal(e,t,i){return t?c`
2151
+ `}renderModal(e,t,i){return t?d`
2152
2152
  <div class="ol-asset__modal-overlay" @click=${i}>
2153
2153
  <div class="ol-asset__modal" @click=${o=>o.stopPropagation()}>
2154
2154
  <ol-button class="ol-asset__modal-close" @click=${i}>
@@ -2162,53 +2162,53 @@ video::-webkit-media-text-track-display {
2162
2162
  </div>
2163
2163
  </div>
2164
2164
  </div>
2165
- `:c``}renderModalContent(e){switch(e.type){case"multimedia":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?c`
2165
+ `:d``}renderModalContent(e){switch(e.type){case"multimedia":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?d`
2166
2166
  <img
2167
- src="${te(t.url)}"
2167
+ src="${ue(t.url)}"
2168
2168
  alt="${t.name}"
2169
2169
  class="ol-asset__modal-image"
2170
2170
  />
2171
2171
  <div class="ol-asset__modal-info">
2172
2172
  <h3 class="ol-asset__modal-title">${t.name}</h3>
2173
- ${t.description?c`<p class="ol-asset__modal-description">${t.description}</p>`:c``}
2173
+ ${t.description?d`<p class="ol-asset__modal-description">${t.description}</p>`:d``}
2174
2174
  </div>
2175
- `:c`
2175
+ `:d`
2176
2176
  <div class="ol-asset__modal-info">
2177
2177
  <h3 class="ol-asset__modal-title">${t.name}</h3>
2178
- ${t.description?c`<p class="ol-asset__modal-description">${t.description}</p>`:c``}
2178
+ ${t.description?d`<p class="ol-asset__modal-description">${t.description}</p>`:d``}
2179
2179
  <p class="ol-asset__modal-type">Type: ${i}</p>
2180
2180
  </div>
2181
- `}case"file":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?c`
2181
+ `}case"file":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?d`
2182
2182
  <img
2183
- src="${te(t.url)}"
2183
+ src="${ue(t.url)}"
2184
2184
  alt="${t.name}"
2185
2185
  class="ol-asset__modal-image"
2186
2186
  />
2187
2187
  <div class="ol-asset__modal-info">
2188
2188
  <h3 class="ol-asset__modal-title">${t.name}</h3>
2189
- ${t.description?c`<p class="ol-asset__modal-description">${t.description}</p>`:c``}
2189
+ ${t.description?d`<p class="ol-asset__modal-description">${t.description}</p>`:d``}
2190
2190
  </div>
2191
- `:c`
2191
+ `:d`
2192
2192
  <div class="ol-asset__modal-info">
2193
2193
  <h3 class="ol-asset__modal-title">${t.name}</h3>
2194
- ${t.description?c`<p class="ol-asset__modal-description">${t.description}</p>`:c``}
2194
+ ${t.description?d`<p class="ol-asset__modal-description">${t.description}</p>`:d``}
2195
2195
  <p class="ol-asset__modal-type">Type: ${i}</p>
2196
2196
  </div>
2197
- `}case"faq":return c`
2197
+ `}case"faq":return d`
2198
2198
  <div class="ol-asset__modal-faq">
2199
2199
  <div class="ol-asset__modal-answer">${e.answer||e.description}</div>
2200
2200
  </div>
2201
- `;default:return c`
2201
+ `;default:return d`
2202
2202
  <div class="ol-asset__modal-info">
2203
2203
  <h3 class="ol-asset__modal-title">${e.name}</h3>
2204
- ${e.description?c`<p class="ol-asset__modal-description">${e.description}</p>`:c``}
2204
+ ${e.description?d`<p class="ol-asset__modal-description">${e.description}</p>`:d``}
2205
2205
  </div>
2206
- `}}renderHoverOverlay(e,t,i,o){let r=e.type==="multimedia"&&this.getMultimediaSubtype(e)==="video",n=(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0);return r?c`
2206
+ `}}renderHoverOverlay(e,t,i,o){let a=e.type==="multimedia"&&this.getMultimediaSubtype(e)==="video",r=(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0);return a?d`
2207
2207
  <div class="ol-asset__video-controls">
2208
- ${D(i,()=>c`
2208
+ ${H(i,()=>d`
2209
2209
  <ol-button
2210
2210
  class="ol-asset__video-btn ol-asset__video-btn--maximize"
2211
- @click=${a=>{a.stopPropagation(),i(e)}}
2211
+ @click=${n=>{n.stopPropagation(),i(e)}}
2212
2212
  title="Maximize ${e.name}"
2213
2213
  >
2214
2214
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2216,19 +2216,19 @@ video::-webkit-media-text-track-display {
2216
2216
  </svg>
2217
2217
  </ol-button>
2218
2218
  `)}
2219
- ${D(t,()=>c`
2219
+ ${H(t,()=>d`
2220
2220
  <ol-button
2221
2221
  class="ol-asset__video-btn ol-asset__video-btn--download ${o?"ol-asset__video-btn--downloading":""}"
2222
- @click=${a=>{a.stopPropagation(),t(e)}}
2222
+ @click=${n=>{n.stopPropagation(),t(e)}}
2223
2223
  title="Download ${e.name}"
2224
2224
  ?disabled=${o}
2225
2225
  >
2226
- ${D(o,()=>c`
2226
+ ${H(o,()=>d`
2227
2227
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2228
2228
  <circle cx="12" cy="12" r="10"></circle>
2229
2229
  <path d="M12 2a10 10 0 0 1 10 10"></path>
2230
2230
  </svg>
2231
- `,()=>c`
2231
+ `,()=>d`
2232
2232
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2233
2233
  <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
2234
2234
  <polyline points="7,10 12,15 17,10"></polyline>
@@ -2238,13 +2238,13 @@ video::-webkit-media-text-track-display {
2238
2238
  </ol-button>
2239
2239
  `)}
2240
2240
  </div>
2241
- `:c`
2241
+ `:d`
2242
2242
  <div class="ol-asset__hover-overlay">
2243
2243
  <div class="ol-asset__hover-buttons">
2244
- ${D(e.type==="product",()=>c`
2244
+ ${H(e.type==="product",()=>d`
2245
2245
  <ol-button
2246
2246
  class="ol-asset__hover-btn ol-asset__hover-btn--external"
2247
- @click=${a=>{a.stopPropagation(),this.openProductInNewWindow(e)}}
2247
+ @click=${n=>{n.stopPropagation(),this.openProductInNewWindow(e)}}
2248
2248
  title="Open ${e.name} in new window"
2249
2249
  >
2250
2250
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2253,11 +2253,11 @@ video::-webkit-media-text-track-display {
2253
2253
  <line x1="10" y1="14" x2="21" y2="3"></line>
2254
2254
  </svg>
2255
2255
  </ol-button>
2256
- `,()=>c`
2257
- ${D(i&&!n,()=>c`
2256
+ `,()=>d`
2257
+ ${H(i&&!r,()=>d`
2258
2258
  <ol-button
2259
2259
  class="ol-asset__hover-btn ol-asset__hover-btn--maximize"
2260
- @click=${a=>{a.stopPropagation(),i(e)}}
2260
+ @click=${n=>{n.stopPropagation(),i(e)}}
2261
2261
  title="Maximize ${e.name}"
2262
2262
  >
2263
2263
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2265,19 +2265,19 @@ video::-webkit-media-text-track-display {
2265
2265
  </svg>
2266
2266
  </ol-button>
2267
2267
  `)}
2268
- ${D(t&&["multimedia","file"].includes(e.type),()=>c`
2268
+ ${H(t&&["multimedia","file"].includes(e.type),()=>d`
2269
2269
  <ol-button
2270
2270
  class="ol-asset__hover-btn ol-asset__hover-btn--download ${o?"ol-asset__hover-btn--downloading":""}"
2271
- @click=${a=>{a.stopPropagation(),t(e)}}
2271
+ @click=${n=>{n.stopPropagation(),t(e)}}
2272
2272
  title="Download ${e.name}"
2273
2273
  ?disabled=${o}
2274
2274
  >
2275
- ${D(o,()=>c`
2275
+ ${H(o,()=>d`
2276
2276
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2277
2277
  <circle cx="12" cy="12" r="10"></circle>
2278
2278
  <path d="M12 2a10 10 0 0 1 10 10"></path>
2279
2279
  </svg>
2280
- `,()=>c`
2280
+ `,()=>d`
2281
2281
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
2282
2282
  <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path>
2283
2283
  <polyline points="7,10 12,15 17,10"></polyline>
@@ -2289,7 +2289,7 @@ video::-webkit-media-text-track-display {
2289
2289
  `)}
2290
2290
  </div>
2291
2291
  </div>
2292
- `}openProductInNewWindow(e){e.url&&window.open(e.url,"_blank","noopener,noreferrer")}};import{css as ci}from"lit";var st=ci`
2292
+ `}openProductInNewWindow(e){e.url&&window.open(e.url,"_blank","noopener,noreferrer")}};import{css as Mi}from"lit";var ft=Mi`
2293
2293
  :host {
2294
2294
  display: block;
2295
2295
  --asset-border-radius: 8px;
@@ -2856,49 +2856,60 @@ video::-webkit-media-text-track-display {
2856
2856
  .ol-asset__hover-btn {
2857
2857
  width: 48px;
2858
2858
  height: 48px;
2859
+ cursor: pointer;
2860
+ transition: all 0.2s ease;
2861
+ }
2862
+
2863
+ .ol-asset__hover-btn::part(base) {
2864
+ width: 48px;
2865
+ height: 48px;
2866
+ min-height: unset;
2859
2867
  border: none;
2860
2868
  border-radius: 50%;
2861
2869
  background: rgba(255, 255, 255, 0.9);
2862
2870
  color: var(--ol-color-neutral-700, #374151);
2863
- cursor: pointer;
2864
2871
  display: flex;
2865
2872
  align-items: center;
2866
2873
  justify-content: center;
2867
- transition: all 0.2s ease;
2874
+ padding: 0;
2868
2875
  backdrop-filter: blur(8px);
2869
2876
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2877
+ transition: all 0.2s ease;
2870
2878
  }
2871
2879
 
2872
- .ol-asset__hover-btn:hover {
2880
+ .ol-asset__hover-btn:hover::part(base) {
2873
2881
  background: rgba(255, 255, 255, 1);
2874
2882
  transform: scale(1.1);
2875
2883
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
2876
2884
  }
2877
2885
 
2878
- .ol-asset__hover-btn:active {
2886
+ .ol-asset__hover-btn:active::part(base) {
2879
2887
  transform: scale(0.95);
2880
2888
  }
2881
2889
 
2882
- .ol-asset__hover-btn--maximize,
2883
- .ol-asset__hover-btn--download,
2884
- .ol-asset__hover-btn--external {
2890
+ .ol-asset__hover-btn--maximize::part(base),
2891
+ .ol-asset__hover-btn--download::part(base),
2892
+ .ol-asset__hover-btn--external::part(base) {
2885
2893
  background: rgba(255, 255, 255, 0.9);
2886
2894
  color: var(--ol-color-neutral-700, #374151);
2887
2895
  }
2888
2896
 
2889
- .ol-asset__hover-btn--maximize:hover,
2890
- .ol-asset__hover-btn--download:hover,
2891
- .ol-asset__hover-btn--external:hover {
2897
+ .ol-asset__hover-btn--maximize:hover::part(base),
2898
+ .ol-asset__hover-btn--download:hover::part(base),
2899
+ .ol-asset__hover-btn--external:hover::part(base) {
2892
2900
  background: rgba(255, 255, 255, 1);
2893
2901
  }
2894
2902
 
2895
2903
  .ol-asset__hover-btn--downloading {
2896
2904
  opacity: 0.7;
2897
2905
  cursor: not-allowed;
2906
+ }
2907
+
2908
+ .ol-asset__hover-btn--downloading::part(base) {
2898
2909
  transform: none !important;
2899
2910
  }
2900
2911
 
2901
- .ol-asset__hover-btn--downloading:hover {
2912
+ .ol-asset__hover-btn--downloading:hover::part(base) {
2902
2913
  transform: none;
2903
2914
  background: rgba(34, 197, 94, 0.9);
2904
2915
  }
@@ -2922,24 +2933,32 @@ video::-webkit-media-text-track-display {
2922
2933
  .ol-asset__video-btn {
2923
2934
  width: 32px;
2924
2935
  height: 32px;
2936
+ cursor: pointer;
2937
+ transition: all 0.2s ease;
2938
+ }
2939
+
2940
+ .ol-asset__video-btn::part(base) {
2941
+ width: 32px;
2942
+ height: 32px;
2943
+ min-height: unset;
2925
2944
  border: none;
2926
2945
  border-radius: 6px;
2927
2946
  background: rgba(0, 0, 0, 0.6);
2928
2947
  color: white;
2929
- cursor: pointer;
2930
2948
  display: flex;
2931
2949
  align-items: center;
2932
2950
  justify-content: center;
2933
- transition: all 0.2s ease;
2951
+ padding: 0;
2934
2952
  backdrop-filter: blur(8px);
2953
+ transition: all 0.2s ease;
2935
2954
  }
2936
2955
 
2937
- .ol-asset__video-btn:hover {
2956
+ .ol-asset__video-btn:hover::part(base) {
2938
2957
  background: rgba(0, 0, 0, 0.8);
2939
2958
  transform: scale(1.05);
2940
2959
  }
2941
2960
 
2942
- .ol-asset__video-btn:active {
2961
+ .ol-asset__video-btn:active::part(base) {
2943
2962
  transform: scale(0.95);
2944
2963
  }
2945
2964
 
@@ -2948,7 +2967,7 @@ video::-webkit-media-text-track-display {
2948
2967
  cursor: not-allowed;
2949
2968
  }
2950
2969
 
2951
- .ol-asset__video-btn--downloading:hover {
2970
+ .ol-asset__video-btn--downloading:hover::part(base) {
2952
2971
  transform: none;
2953
2972
  }
2954
2973
 
@@ -2970,7 +2989,7 @@ video::-webkit-media-text-track-display {
2970
2989
  opacity: 0;
2971
2990
  visibility: hidden;
2972
2991
  }
2973
- `;var he=class{constructor(e,t){this.asset=e,this.onClose=t}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}async open(){await import("@onlive.ai/ui/dist/components/dialog/dialog.js"),await import("@onlive.ai/ui/dist/components/icon-button/icon-button.js"),await import("@onlive.ai/ui/dist/components/button/button.js"),await import("@onlive.ai/ui/dist/components/icon/icon.js");let e=this.asset;this.getMultimediaSubtype(e)==="presentation"&&(e.slides?.length??0)>0&&await Promise.all([import("@onlive.ai/ui/dist/components/carousel/carousel.js"),import("@onlive.ai/ui/dist/components/carousel-item/carousel-item.js")]),this.injectStyles(),this.createDialog(),this.dialog?.show()}close(){this.dialog?.hide(),setTimeout(()=>{this.removeDialog()},300)}createDialog(){if(this.dialog||!this.asset)return;let e=this.createDialogHTML(),t=document.createElement("div");t.innerHTML=e,this.dialog=t.firstElementChild,this.dialog&&(document.body.appendChild(this.dialog),this.attachEventListeners())}removeDialog(){this.dialog&&(this.dialog.parentNode&&this.dialog.parentNode.removeChild(this.dialog),this.dialog=void 0)}injectStyles(){if(document.getElementById("asset-modal-styles"))return;let e=document.createElement("style");e.id="asset-modal-styles",e.textContent=this.getModalStyles(),document.head.appendChild(e)}getModalStyles(){return`
2992
+ `;var Ae=class{constructor(e,t,i="normal"){this.asset=e,this.onClose=t,this.displayState=i}getMultimediaSubtype(e){let t=e.format||"";return t.startsWith("video/")?"video":t.startsWith("image/")?"image":t.includes("presentation")||t.includes("pdf")||t.includes("powerpoint")||t.includes("slides")||t.includes("application/vnd.ms-powerpoint")||t.includes("application/vnd.openxmlformats-officedocument.presentationml")||e.slides&&e.slides.length>0?"presentation":e.duration||e.vodUrl?"video":"image"}formatDuration(e){let t=Math.floor(e/60),i=Math.floor(e%60);return`${t}:${i.toString().padStart(2,"0")}`}async open(){await import("@onlive.ai/ui/dist/components/dialog/dialog.js"),await import("@onlive.ai/ui/dist/components/icon-button/icon-button.js"),await import("@onlive.ai/ui/dist/components/button/button.js"),await import("@onlive.ai/ui/dist/components/icon/icon.js");let e=this.asset;this.getMultimediaSubtype(e)==="presentation"&&(e.slides?.length??0)>0&&await Promise.all([import("@onlive.ai/ui/dist/components/carousel/carousel.js"),import("@onlive.ai/ui/dist/components/carousel-item/carousel-item.js")]),this.injectStyles(),this.createDialog(),this.dialog?.show()}close(){this.dialog?.hide(),setTimeout(()=>{this.removeDialog()},300)}createDialog(){if(this.dialog||!this.asset)return;let e=this.createDialogHTML(),t=document.createElement("div");t.innerHTML=e,this.dialog=t.firstElementChild,this.dialog&&(document.body.appendChild(this.dialog),this.attachEventListeners())}removeDialog(){this.dialog&&(this.dialog.parentNode&&this.dialog.parentNode.removeChild(this.dialog),this.dialog=void 0)}injectStyles(){if(document.getElementById("asset-modal-styles"))return;let e=document.createElement("style");e.id="asset-modal-styles",e.textContent=this.getModalStyles(),document.head.appendChild(e)}getModalStyles(){return`
2974
2993
 
2975
2994
  ol-dialog::part(base){
2976
2995
  z-index: 1000000;
@@ -3311,7 +3330,80 @@ video::-webkit-media-text-track-display {
3311
3330
  max-height: 90vh;
3312
3331
  }
3313
3332
  }
3314
- `}createDialogHTML(){if(!this.asset)return"";let{name:e,description:t,url:i,type:o}=this.asset,r="";if(o==="multimedia"){let l=this.asset,h=this.getMultimediaSubtype(l);if(h==="image")r=`
3333
+
3334
+ /* Maximized state - glassmorphism effect */
3335
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(overlay) {
3336
+ background: rgba(0, 0, 0, 0.4);
3337
+ backdrop-filter: blur(12px);
3338
+ -webkit-backdrop-filter: blur(12px);
3339
+ }
3340
+
3341
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(panel) {
3342
+ background: rgba(18, 20, 30, 0.38);
3343
+ backdrop-filter: blur(20px);
3344
+ -webkit-backdrop-filter: blur(20px);
3345
+ border: 1px solid rgba(255, 255, 255, 0.12);
3346
+ box-shadow:
3347
+ 0 8px 32px rgba(0, 0, 0, 0.4),
3348
+ inset 0 1px 0 rgba(255, 255, 255, 0.06);
3349
+ }
3350
+
3351
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(title) {
3352
+ color: rgba(255, 255, 255, 0.92);
3353
+ }
3354
+
3355
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(close-button) {
3356
+ color: rgba(255, 255, 255, 0.8);
3357
+ }
3358
+
3359
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(close-button):hover {
3360
+ color: rgba(255, 255, 255, 1);
3361
+ }
3362
+
3363
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"]::part(header) {
3364
+ border-bottom-color: rgba(255, 255, 255, 0.1);
3365
+ }
3366
+
3367
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-info {
3368
+ background: transparent;
3369
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
3370
+ }
3371
+
3372
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-title {
3373
+ color: rgba(255, 255, 255, 0.95);
3374
+ }
3375
+
3376
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-description,
3377
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-answer {
3378
+ color: rgba(255, 255, 255, 0.7);
3379
+ }
3380
+
3381
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-type,
3382
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-duration,
3383
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-slides {
3384
+ color: rgba(255, 255, 255, 0.5);
3385
+ }
3386
+
3387
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-metadata-item {
3388
+ color: rgba(255, 255, 255, 0.6);
3389
+ }
3390
+
3391
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-metadata-item ol-icon {
3392
+ color: rgba(255, 255, 255, 0.4);
3393
+ }
3394
+
3395
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-media-container {
3396
+ background: rgba(0, 0, 0, 0.3);
3397
+ }
3398
+
3399
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-faq {
3400
+ color: rgba(255, 255, 255, 0.9);
3401
+ }
3402
+
3403
+ ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-question {
3404
+ color: rgba(130, 170, 255, 1);
3405
+ }
3406
+ `}createDialogHTML(){if(!this.asset)return"";let{name:e,description:t,url:i,type:o}=this.asset,a="";if(o==="multimedia"){let l=this.asset,c=this.getMultimediaSubtype(l);if(c==="image")a=`
3315
3407
  <div class="ol-asset__modal-media-container">
3316
3408
  <div class="ol-asset__modal-image-container">
3317
3409
  <img
@@ -3332,7 +3424,7 @@ video::-webkit-media-text-track-display {
3332
3424
  </div>
3333
3425
  </div>
3334
3426
  </div>
3335
- `;else if(h==="video")r=`
3427
+ `;else if(c==="video")a=`
3336
3428
  <div class="ol-asset__modal-media-container">
3337
3429
  <div class="ol-asset__modal-video-container">
3338
3430
  <video
@@ -3361,15 +3453,15 @@ video::-webkit-media-text-track-display {
3361
3453
  `:""}
3362
3454
  </div>
3363
3455
  </div>
3364
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;r=`
3456
+ `;else if(c==="presentation")if(l.slides&&l.slides.length>0){let u=l.slides;a=`
3365
3457
  <div class="ol-asset__modal-media-container" data-type="presentation">
3366
3458
  <div class="ol-asset__modal-presentation">
3367
3459
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
3368
- ${m.map((Re,Ie)=>`
3460
+ ${u.map(($,q)=>`
3369
3461
  <ol-carousel-item>
3370
3462
  <img
3371
- src="${Re}"
3372
- alt="Slide ${Ie+1} of ${m.length}"
3463
+ src="${$}"
3464
+ alt="Slide ${q+1} of ${u.length}"
3373
3465
  class="ol-asset__modal-slide-image"
3374
3466
  />
3375
3467
  </ol-carousel-item>
@@ -3387,11 +3479,11 @@ video::-webkit-media-text-track-display {
3387
3479
  </div>
3388
3480
  <div class="ol-asset__modal-metadata-item">
3389
3481
  <ol-icon name="layers"></ol-icon>
3390
- <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3482
+ <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3391
3483
  </div>
3392
3484
  </div>
3393
3485
  </div>
3394
- `}else r=`
3486
+ `}else a=`
3395
3487
  <div class="ol-asset__modal-presentation">
3396
3488
  <div class="ol-asset__modal-presentation-fallback">
3397
3489
  <div class="ol-asset__modal-presentation-icon">\u{1F4C4}</div>
@@ -3403,7 +3495,7 @@ video::-webkit-media-text-track-display {
3403
3495
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3404
3496
  <p class="ol-asset__modal-type">Type: Presentation</p>
3405
3497
  </div>
3406
- `}else if(o==="file"){let l=this.asset,h=this.getMultimediaSubtype(l);if(h==="image")r=`
3498
+ `}else if(o==="file"){let l=this.asset,c=this.getMultimediaSubtype(l);if(c==="image")a=`
3407
3499
  <div class="ol-asset__modal-media-container">
3408
3500
  <div class="ol-asset__modal-image-container">
3409
3501
  <img
@@ -3424,7 +3516,7 @@ video::-webkit-media-text-track-display {
3424
3516
  </div>
3425
3517
  </div>
3426
3518
  </div>
3427
- `;else if(h==="video")r=`
3519
+ `;else if(c==="video")a=`
3428
3520
  <div class="ol-asset__modal-media-container">
3429
3521
  <div class="ol-asset__modal-video-container">
3430
3522
  <video
@@ -3453,15 +3545,15 @@ video::-webkit-media-text-track-display {
3453
3545
  `:""}
3454
3546
  </div>
3455
3547
  </div>
3456
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;r=`
3548
+ `;else if(c==="presentation")if(l.slides&&l.slides.length>0){let u=l.slides;a=`
3457
3549
  <div class="ol-asset__modal-media-container" data-type="presentation">
3458
3550
  <div class="ol-asset__modal-presentation">
3459
3551
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
3460
- ${m.map((Re,Ie)=>`
3552
+ ${u.map(($,q)=>`
3461
3553
  <ol-carousel-item>
3462
3554
  <img
3463
- src="${Re}"
3464
- alt="Slide ${Ie+1} of ${m.length}"
3555
+ src="${$}"
3556
+ alt="Slide ${q+1} of ${u.length}"
3465
3557
  class="ol-asset__modal-slide-image"
3466
3558
  />
3467
3559
  </ol-carousel-item>
@@ -3479,11 +3571,11 @@ video::-webkit-media-text-track-display {
3479
3571
  </div>
3480
3572
  <div class="ol-asset__modal-metadata-item">
3481
3573
  <ol-icon name="layers"></ol-icon>
3482
- <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3574
+ <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3483
3575
  </div>
3484
3576
  </div>
3485
3577
  </div>
3486
- `}else r=`
3578
+ `}else a=`
3487
3579
  <div class="ol-asset__modal-presentation">
3488
3580
  <div class="ol-asset__modal-presentation-fallback">
3489
3581
  <div class="ol-asset__modal-presentation-icon">\u{1F4C4}</div>
@@ -3495,45 +3587,46 @@ video::-webkit-media-text-track-display {
3495
3587
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3496
3588
  <p class="ol-asset__modal-type">Type: Presentation File</p>
3497
3589
  </div>
3498
- `}else if(o==="faq"){let l=this.asset;r=`
3590
+ `}else if(o==="faq"){let l=this.asset;a=`
3499
3591
  <div class="ol-asset__modal-faq">
3500
3592
  <h3 class="ol-asset__modal-question">${l.question||e}</h3>
3501
3593
  <div class="ol-asset__modal-answer">${l.answer||t}</div>
3502
3594
  </div>
3503
- `}else r=`
3595
+ `}else a=`
3504
3596
  <div class="ol-asset__modal-info">
3505
3597
  <h3 class="ol-asset__modal-title">${e}</h3>
3506
3598
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3507
3599
  </div>
3508
- `;let n=o==="multimedia"||o==="file",a=o==="faq"&&this.asset.question||e;return`
3600
+ `;let r=o==="multimedia"||o==="file",n=o==="faq"&&this.asset.question||e;return`
3509
3601
  <ol-dialog
3510
- label="${this.escapeHtml(a)}"
3602
+ label="${this.escapeHtml(n)}"
3511
3603
  class="ol-asset__dialog"
3512
- data-fullscreen="${n}"
3513
- ${n?'style="--width: 95vw; --max-width: 1600px;"':""}
3604
+ data-fullscreen="${r}"
3605
+ data-display-state="${this.displayState}"
3606
+ ${r?'style="--width: 95vw; --max-width: 1600px;"':""}
3514
3607
  >
3515
3608
  <div class="ol-asset__dialog-content">
3516
3609
  <div class="ol-asset__dialog-body">
3517
- ${r}
3610
+ ${a}
3518
3611
  </div>
3519
3612
  </div>
3520
3613
  </ol-dialog>
3521
- `}attachEventListeners(){this.dialog&&(this.dialog.addEventListener("ol-after-hide",()=>{this.onClose?.()}),this.dialog.addEventListener("ol-request-close",e=>{e.detail?.source==="overlay"&&e.preventDefault()}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var k=class extends di{constructor(){super(...arguments);this.loadingState="idle";this.assetRenderer=new ve;this.isDownloading=!1;this.defaultDisplayOptions={showThumbnail:!0,showName:!1,showDescription:!1,showMetadata:!0,showPrice:!0,showDuration:!1,showSize:!1,showTags:!1,layout:"card",size:"medium"}}connectedCallback(){super.connectedCallback(),this.initializeServices(),this.loadAsset()}disconnectedCallback(){super.disconnectedCallback(),this.closeModal()}initializeServices(){this.assetLoader=new ge(this.config)}async loadAsset(){if(!this.type||!this.externalId){this.error="Type and externalId are required",this.loadingState="error";return}this.loadingState="loading",this.error=void 0;try{let t=await this.assetLoader.loadAsset(this.type,this.externalId);this.asset=t,this.loadingState="loaded",this.dispatchEvent(new CustomEvent("asset-load",{detail:t})),console.debug("Asset loaded:",t)}catch(t){console.error(`Error loading ${this.type} asset:`,t),this.error=t instanceof Error?t.message:"Failed to load asset",this.loadingState="error",this.dispatchEvent(new CustomEvent("asset-error",{detail:{error:this.error,asset:this.asset}}))}}async onDownload(t){if(!(!t.url||this.isDownloading)){this.isDownloading=!0;try{let i=await fetch(t.url,{method:"GET",mode:"cors",cache:"no-cache"});if(i.ok){let o=await i.blob(),r=window.URL.createObjectURL(o),n=document.createElement("a");n.href=r,n.download=this.getDownloadFilename(t),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>window.URL.revokeObjectURL(r),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}}catch(i){console.warn("Fetch strategy failed:",i)}try{let i=await fetch(t.url,{headers:{Accept:"*/*"},mode:"no-cors"});if(i.type==="opaque")throw new Error("No-cors response, cannot access blob");let o=await i.blob(),r=window.URL.createObjectURL(o),n=document.createElement("a");n.href=r,n.download=this.getDownloadFilename(t),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),setTimeout(()=>window.URL.revokeObjectURL(r),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}catch(i){console.warn("No-cors strategy failed:",i)}try{let i=document.createElement("a");i.href=t.url,i.download=this.getDownloadFilename(t),i.target="_blank",i.rel="noopener noreferrer",i.style.position="absolute",i.style.left="-9999px",document.body.appendChild(i),i.click(),setTimeout(()=>{document.body.removeChild(i)},100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t}))}catch(i){console.error("All download strategies failed:",i),window.open(t.url,"_blank")}this.isDownloading=!1}}getDownloadFilename(t){let i=Date.now(),o=this.getFileExtension(t);return`${t.name||`asset-${t.type}-${i}`}${o}`}getFileExtension(t){if(t.url){let r=new URL(t.url).pathname,n=r.lastIndexOf(".");if(n>0)return r.substring(n)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new he(this.asset,this.closeModal.bind(this)),await this.modalPortal.open())}onMaximize(){if(this.asset){if(this.asset.type==="multimedia"||this.asset.type==="file"){let t=this.asset,i=t.slides&&t.slides.length>0,o=t.format||"";if((o.includes("presentation")||o.includes("pdf")||o.includes("powerpoint")||o.includes("slides")||o.includes("application/vnd.ms-powerpoint")||o.includes("application/vnd.openxmlformats-officedocument.presentationml")||i&&t.slides.length>0)&&!i)return}this.asset.type==="multimedia"||this.asset.type==="file"||this.asset.type==="faq"?this.openModal():this.dispatchEvent(new CustomEvent("asset-click",{detail:this.asset}))}}closeModal(){this.modalPortal&&(this.modalPortal.close(),this.modalPortal=void 0)}render(){let t={...this.defaultDisplayOptions,...this.config?.assetDisplayOptions||{}};return this.loadingState==="loading"?fe`
3614
+ `}attachEventListeners(){this.dialog&&(this.dialog.addEventListener("ol-after-hide",()=>{this.onClose?.()}),this.dialog.addEventListener("ol-request-close",e=>{e.detail?.source==="overlay"&&e.preventDefault()}))}escapeHtml(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}};var y=class extends Ai{constructor(){super(...arguments);this.displayState="normal";this.loadingState="idle";this.assetRenderer=new Me;this.isDownloading=!1;this.defaultDisplayOptions={showThumbnail:!0,showName:!1,showDescription:!1,showMetadata:!0,showPrice:!0,showDuration:!1,showSize:!1,showTags:!1,layout:"card",size:"medium"}}connectedCallback(){super.connectedCallback(),this.initializeServices(),this.loadAsset()}disconnectedCallback(){super.disconnectedCallback(),this.closeModal()}initializeServices(){this.assetLoader=new xe(this.config)}async loadAsset(){if(!this.type||!this.externalId){this.error="Type and externalId are required",this.loadingState="error";return}this.loadingState="loading",this.error=void 0;try{let t=await this.assetLoader.loadAsset(this.type,this.externalId);this.asset=t,this.loadingState="loaded",this.dispatchEvent(new CustomEvent("asset-load",{detail:t})),console.debug("Asset loaded:",t)}catch(t){console.error(`Error loading ${this.type} asset:`,t),this.error=t instanceof Error?t.message:"Failed to load asset",this.loadingState="error",this.dispatchEvent(new CustomEvent("asset-error",{detail:{error:this.error,asset:this.asset}}))}}async onDownload(t){if(!(!t.url||this.isDownloading)){this.isDownloading=!0;try{let i=await fetch(t.url,{method:"GET",mode:"cors",cache:"no-cache"});if(i.ok){let o=await i.blob(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}}catch(i){console.warn("Fetch strategy failed:",i)}try{let i=await fetch(t.url,{headers:{Accept:"*/*"},mode:"no-cors"});if(i.type==="opaque")throw new Error("No-cors response, cannot access blob");let o=await i.blob(),a=window.URL.createObjectURL(o),r=document.createElement("a");r.href=a,r.download=this.getDownloadFilename(t),r.style.display="none",document.body.appendChild(r),r.click(),document.body.removeChild(r),setTimeout(()=>window.URL.revokeObjectURL(a),100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t})),this.isDownloading=!1;return}catch(i){console.warn("No-cors strategy failed:",i)}try{let i=document.createElement("a");i.href=t.url,i.download=this.getDownloadFilename(t),i.target="_blank",i.rel="noopener noreferrer",i.style.position="absolute",i.style.left="-9999px",document.body.appendChild(i),i.click(),setTimeout(()=>{document.body.removeChild(i)},100),this.dispatchEvent(new CustomEvent("asset-download",{detail:t}))}catch(i){console.error("All download strategies failed:",i),window.open(t.url,"_blank")}this.isDownloading=!1}}getDownloadFilename(t){let i=Date.now(),o=this.getFileExtension(t);return`${t.name||`asset-${t.type}-${i}`}${o}`}getFileExtension(t){if(t.url){let a=new URL(t.url).pathname,r=a.lastIndexOf(".");if(r>0)return a.substring(r)}return{multimedia:".jpg",file:".bin",product:".jpg",faq:".txt"}[t.type]||""}async openModal(){this.asset&&(this.modalPortal=new Ae(this.asset,this.closeModal.bind(this),this.displayState),await this.modalPortal.open())}onMaximize(){if(this.asset){if(this.asset.type==="multimedia"||this.asset.type==="file"){let t=this.asset,i=t.slides&&t.slides.length>0,o=t.format||"";if((o.includes("presentation")||o.includes("pdf")||o.includes("powerpoint")||o.includes("slides")||o.includes("application/vnd.ms-powerpoint")||o.includes("application/vnd.openxmlformats-officedocument.presentationml")||i&&t.slides.length>0)&&!i)return}this.asset.type==="multimedia"||this.asset.type==="file"||this.asset.type==="faq"?this.openModal():this.dispatchEvent(new CustomEvent("asset-click",{detail:this.asset}))}}closeModal(){this.modalPortal&&(this.modalPortal.close(),this.modalPortal=void 0)}render(){let t={...this.defaultDisplayOptions,...this.config?.assetDisplayOptions||{}};return this.loadingState==="loading"?Ce`
3522
3615
  <div class="ol-asset ol-asset--loading">
3523
3616
  ${this.assetRenderer.renderLoading()}
3524
3617
  </div>
3525
- `:this.loadingState==="error"?fe`
3618
+ `:this.loadingState==="error"?Ce`
3526
3619
  <div class="ol-asset ol-asset--error">
3527
3620
  ${this.assetRenderer.renderError(this.error)}
3528
3621
  </div>
3529
- `:this.asset?fe`
3622
+ `:this.asset?Ce`
3530
3623
  <div
3531
- class="ol-asset ${pi({"ol-asset--compact":t.layout==="compact","ol-asset--minimal":t.layout==="minimal","ol-asset--small":t.size==="small","ol-asset--medium":t.size==="medium","ol-asset--large":t.size==="large","ol-asset--faq":this.asset.type==="faq"})}"
3624
+ class="ol-asset ${Ci({"ol-asset--compact":t.layout==="compact","ol-asset--minimal":t.layout==="minimal","ol-asset--small":t.size==="small","ol-asset--medium":t.size==="medium","ol-asset--large":t.size==="large","ol-asset--faq":this.asset.type==="faq"})}"
3532
3625
  >
3533
3626
  ${this.assetRenderer.renderThumbnail(this.asset,t,this.onDownload.bind(this),this.isDownloading,this.onMaximize.bind(this))}
3534
3627
  ${this.assetRenderer.renderContent(this.asset,t)}
3535
3628
  </div>
3536
- `:fe``}};k.styles=[st],u([Ee({type:String})],k.prototype,"type",2),u([Ee({type:String})],k.prototype,"externalId",2),u([Ee({type:Object})],k.prototype,"config",2),u([G()],k.prototype,"asset",2),u([G()],k.prototype,"loadingState",2),u([G()],k.prototype,"error",2),u([G()],k.prototype,"assetLoader",2),u([G()],k.prototype,"assetRenderer",2),u([G()],k.prototype,"isDownloading",2),k=u([L("osb-asset")],k);import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/details/details.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/input/input.js";import"@onlive.ai/ui/dist/components/option/option.js";import"@onlive.ai/ui/dist/components/select/select.js";import{html as d,LitElement as vi}from"lit";import{property as be,state as w}from"lit/decorators.js";import{classMap as Y}from"lit/directives/class-map.js";import{ifDefined as ie}from"lit/directives/if-defined.js";import{repeat as Oe}from"lit/directives/repeat.js";import{when as y}from"lit/directives/when.js";import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/dropdown/dropdown.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/menu-item/menu-item.js";import"@onlive.ai/ui/dist/components/menu/menu.js";import{html as ze,LitElement as mi}from"lit";import{property as nt}from"lit/decorators.js";import{css as ui}from"lit";var rt=ui`
3629
+ `:Ce``}};y.styles=[ft],g([Te({type:String})],y.prototype,"type",2),g([Te({type:String})],y.prototype,"externalId",2),g([Te({type:Object})],y.prototype,"config",2),g([Te({type:String,attribute:"display-state"})],y.prototype,"displayState",2),g([oe()],y.prototype,"asset",2),g([oe()],y.prototype,"loadingState",2),g([oe()],y.prototype,"error",2),g([oe()],y.prototype,"assetLoader",2),g([oe()],y.prototype,"assetRenderer",2),g([oe()],y.prototype,"isDownloading",2),y=g([N("osb-asset")],y);import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/details/details.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/input/input.js";import"@onlive.ai/ui/dist/components/option/option.js";import"@onlive.ai/ui/dist/components/select/select.js";import{html as p,LitElement as Ii}from"lit";import{property as Pe,state as S}from"lit/decorators.js";import{classMap as se}from"lit/directives/class-map.js";import{ifDefined as me}from"lit/directives/if-defined.js";import{repeat as Ge}from"lit/directives/repeat.js";import{when as k}from"lit/directives/when.js";import"@onlive.ai/ui/dist/components/button/button.js";import"@onlive.ai/ui/dist/components/dropdown/dropdown.js";import"@onlive.ai/ui/dist/components/icon/icon.js";import"@onlive.ai/ui/dist/components/menu-item/menu-item.js";import"@onlive.ai/ui/dist/components/menu/menu.js";import{html as Ke,LitElement as Pi}from"lit";import{property as yt}from"lit/decorators.js";import{css as Ti}from"lit";var bt=Ti`
3537
3630
  :host {
3538
3631
  display: inline-block;
3539
3632
  }
@@ -3596,7 +3689,7 @@ video::-webkit-media-text-track-display {
3596
3689
  background: var(--ol-color-success-300, #86efac);
3597
3690
  transform: scale(1.1);
3598
3691
  }
3599
- `;var _=class extends mi{constructor(){super(...arguments);this.defaultConfig={maxFileSize:10*1024*1024,multiple:!1,showImage:!0,showVideo:!0,showDocument:!0}}getAllowedExtensions(t){switch(t){case"image":return[".jpg",".jpeg",".png",".gif",".webp",".svg"];case"video":return[".mp4",".avi",".mov",".wmv",".flv",".webm"];case"document":return[".pdf",".doc",".docx",".txt",".rtf",".odt"];default:return[]}}getAcceptAttribute(t){return this.getAllowedExtensions(t).join(",")}getFileTypeLabel(t){switch(t){case"image":return"Imagen";case"video":return"Video";case"document":return"Documento";default:return"Archivo"}}getAvailableTypes(){let t={...this.defaultConfig,...this.config},i=[];return t.showImage&&i.push("image"),t.showVideo&&i.push("video"),t.showDocument&&i.push("document"),i}onTypeSelect(t){this.openFileDialog(t)}openFileDialog(t){let i=document.createElement("input");i.type="file",i.accept=this.getAcceptAttribute(t),i.multiple=this.config?.multiple||!1,i.onchange=o=>{let r=o.target.files?.[0];r&&this.handleFileSelection(r,t)},i.click()}handleFileSelection(t,i){let o=this.validateFile(t,i);if(!o.valid){this.dispatchEvent(new CustomEvent("osb-upload-error",{detail:{error:o.error},bubbles:!0}));return}this.dispatchEvent(new CustomEvent("osb-file-selected",{detail:{file:t,type:i},bubbles:!0})),this.events?.onFileSelected?.(t,i)}validateFile(t,i){let o={...this.defaultConfig,...this.config};if(o.maxFileSize&&t.size>o.maxFileSize)return{valid:!1,error:`El archivo es demasiado grande. Tama\xF1o m\xE1ximo: ${Math.round(o.maxFileSize/1048576)}MB`};let r=t.name.toLowerCase(),n=this.getAllowedExtensions(i);return n.some(l=>r.endsWith(l.toLowerCase()))?{valid:!0}:{valid:!1,error:`Tipo de archivo no v\xE1lido. Extensiones permitidas: ${n.join(", ")}`}}render(){let t=this.getAvailableTypes();return t.length===0?ze`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ze`
3692
+ `;var T=class extends Pi{constructor(){super(...arguments);this.defaultConfig={maxFileSize:10*1024*1024,multiple:!1,showImage:!0,showVideo:!0,showDocument:!0}}getAllowedExtensions(t){switch(t){case"image":return[".jpg",".jpeg",".png",".gif",".webp",".svg"];case"video":return[".mp4",".avi",".mov",".wmv",".flv",".webm"];case"document":return[".pdf",".doc",".docx",".txt",".rtf",".odt"];default:return[]}}getAcceptAttribute(t){return this.getAllowedExtensions(t).join(",")}getFileTypeLabel(t){switch(t){case"image":return"Imagen";case"video":return"Video";case"document":return"Documento";default:return"Archivo"}}getAvailableTypes(){let t={...this.defaultConfig,...this.config},i=[];return t.showImage&&i.push("image"),t.showVideo&&i.push("video"),t.showDocument&&i.push("document"),i}onTypeSelect(t){this.openFileDialog(t)}openFileDialog(t){let i=document.createElement("input");i.type="file",i.accept=this.getAcceptAttribute(t),i.multiple=this.config?.multiple||!1,i.onchange=o=>{let a=o.target.files?.[0];a&&this.handleFileSelection(a,t)},i.click()}handleFileSelection(t,i){let o=this.validateFile(t,i);if(!o.valid){this.dispatchEvent(new CustomEvent("osb-upload-error",{detail:{error:o.error},bubbles:!0}));return}this.dispatchEvent(new CustomEvent("osb-file-selected",{detail:{file:t,type:i},bubbles:!0})),this.events?.onFileSelected?.(t,i)}validateFile(t,i){let o={...this.defaultConfig,...this.config};if(o.maxFileSize&&t.size>o.maxFileSize)return{valid:!1,error:`El archivo es demasiado grande. Tama\xF1o m\xE1ximo: ${Math.round(o.maxFileSize/1048576)}MB`};let a=t.name.toLowerCase(),r=this.getAllowedExtensions(i);return r.some(l=>a.endsWith(l.toLowerCase()))?{valid:!0}:{valid:!1,error:`Tipo de archivo no v\xE1lido. Extensiones permitidas: ${r.join(", ")}`}}render(){let t=this.getAvailableTypes();return t.length===0?Ke`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:Ke`
3600
3693
  <div class="ol-upload">
3601
3694
  <ol-dropdown placement="bottom-start" distance="8">
3602
3695
  <div slot="trigger">
@@ -3605,7 +3698,7 @@ video::-webkit-media-text-track-display {
3605
3698
  </div>
3606
3699
 
3607
3700
  <ol-menu>
3608
- ${t.map(i=>ze`
3701
+ ${t.map(i=>Ke`
3609
3702
  <ol-menu-item @click="${()=>this.onTypeSelect(i)}">
3610
3703
  <ol-icon slot="prefix" name="${this.getIconName(i)}"></ol-icon>
3611
3704
  ${this.getFileTypeLabel(i)}
@@ -3614,7 +3707,7 @@ video::-webkit-media-text-track-display {
3614
3707
  </ol-menu>
3615
3708
  </ol-dropdown>
3616
3709
  </div>
3617
- `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};_.styles=[rt],u([nt({type:Object})],_.prototype,"config",2),u([nt({type:Object})],_.prototype,"events",2),_=u([L("osb-upload")],_);import{css as gi}from"lit";var at=gi`
3710
+ `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};T.styles=[bt],g([yt({type:Object})],T.prototype,"config",2),g([yt({type:Object})],T.prototype,"events",2),T=g([N("osb-upload")],T);import{css as Ri}from"lit";var kt=Ri`
3618
3711
  :host {
3619
3712
  display: block;
3620
3713
  position: fixed;
@@ -4413,77 +4506,77 @@ video::-webkit-media-text-track-display {
4413
4506
  height: 120px;
4414
4507
  }
4415
4508
  }
4416
- `;var A={products:{label:"PRODUCTS",icon:"shopping-bag",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showPrice:!0,showTags:!1,thumbnailSize:"small",layout:"grid"}},videos:{label:"VIDEOS",icon:"video",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},images:{label:"IMAGES",icon:"image",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},presentations:{label:"PRESENTATIONS",icon:"file-text",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},faqs:{label:"FAQS",icon:"help-circle",enabled:!0,displayOptions:{showThumbnail:!1,showDescription:!0,showSize:!1,thumbnailSize:"small",layout:"list"}},audios:{label:"AUDIOS",icon:"music",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},"special-effects":{label:"SPECIAL EFFECTS",icon:"zap",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}}};var v=class extends vi{constructor(){super(...arguments);this.selectedCategory="products";this.disabled=!1;this.isUploading=!1;this.uploadProgress=0;this.categoryStates=new Map;this.unifiedSearchQuery="";this.extraFilters=[];this.activeFilters={};this.loadingFilters=!1;this.defaultSearchConfig={placeholder:"Search all assets...",debounceMs:300,minLength:2}}async firstUpdated(){this.initializeService(),this.initializeCategoryStates(),await this.loadExtraFilters()}initializeService(){this.config?.multimediaService&&(this.multimediaService=K.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=N.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=J.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=B.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys(A)).forEach(i=>{this.categoryStates.set(i,{category:i,items:[],pagination:{page:1,limit:this.config?.itemsPerPage||12,total:0,hasMore:!1,loading:!1},searchQuery:"",loading:!1})})}async loadExtraFilters(){if(!this.config?.enableExtraFilters||!this.faqsService)return;let t=this.config.faqsService?.organizationId;if(!t){console.warn("Organization ID required for loading extra filters");return}this.loadingFilters=!0;try{let i=await this.faqsService.getSettingsByOrganization(t,this.config.userGroupId);i?.extraFilters&&(this.extraFilters=i.extraFilters.filter(o=>o.enabled&&(o.entity==="all"||o.entity==="assets")).sort((o,r)=>o.order-r.order))}catch(i){console.error("Error loading extra filters:",i)}finally{this.loadingFilters=!1}}hasActiveFilters(){return Object.keys(this.activeFilters).length>0}convertToExtraFields(t){if(!t||Object.keys(t).length===0)return;let i={};for(let[o,r]of Object.entries(t))r!=null&&(Array.isArray(r)?r.length>0&&(i[o]=r.join(",")):typeof r=="string"&&r.trim()!==""&&(r==="true"?i[o]=!0:r==="false"?i[o]=!1:!isNaN(Number(r))&&r.trim()!==""?i[o]=Number(r):i[o]=r));return Object.keys(i).length>0?i:void 0}async loadCategoryData(t,i="",o=1){if(!this.multimediaService&&t!=="faqs"&&t!=="products"||!this.productService&&t==="products"||!this.faqsService&&t==="faqs")return;let r=this.categoryStates.get(t);if(!r)return;this.updateCategoryState(t,{loading:!0,error:void 0});let n=this.hasActiveFilters()?this.activeFilters:void 0;try{let a=[],l=0;switch(t){case"products":{let m=await this.productService.getProducts({title:i,limit:r.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(n)});a=this.mapProductsToAssetItems(m),l=m.length;break}case"images":{let m=await this.multimediaService.getImages({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"images"),l=m.total;break}case"videos":{let m=await this.multimediaService.getVideos({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"videos"),l=m.total;break}case"presentations":{let m=await this.multimediaService.getPresentations({search:i,page:o,limit:r.pagination.limit,includeSecureToken:!0,extraFilters:n});a=this.mapMultimediaToAssetItems(m.items,"presentations"),l=m.total;break}case"faqs":{let m=await this.faqsService.getFaqs({search:i,isActive:!0,page:o,organizationId:this.config?.faqsService?.organizationId,limit:r.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:n});a=this.mapFaqsToAssetItems(m.data),l=m.total;break}}let h=o===1?a:[...r.items,...a];this.updateCategoryState(t,{items:h,pagination:{...r.pagination,page:o,total:l,hasMore:h.length<l,loading:!1},searchQuery:i,loading:!1})}catch(a){console.error(`Error loading ${t} data:`,a),this.updateCategoryState(t,{loading:!1,error:a instanceof Error?a.message:"Failed to load data"})}}mapProductsToAssetItems(t){return t.map(i=>({id:i.id,name:i.name,description:i.description,url:i.url,thumbnail:i.images?.[0],type:"products",price:i.price,currency:i.currency,tags:i.tags,secureToken:i.secureToken,metadata:{externalId:i.externalId,category:i.category,providerType:i.providerType,variants:i.variants,options:i.options}}))}mapMultimediaToAssetItems(t,i){return t?.map(o=>({id:o.id,name:o.name,description:o.description,url:o.url,thumbnail:i==="images"?o.url:o.animatedCoverUrl,type:i,size:o.size,format:o.format,duration:o.duration,labels:o.labels,secureToken:o.secureToken,metadata:{organizationId:o.organizationId,status:o.status,vodUrl:o.vodUrl,slides:o.slides}}))}mapFaqsToAssetItems(t){return t.map(i=>({id:i.id,name:i.question,description:i.answer,url:`#faq-${i.id}`,type:"faqs",metadata:{organizationId:i.organizationId,groupId:i.groupId,priority:i.priority,isActive:i.isActive,createdAt:i.createdAt,updatedAt:i.updatedAt}}))}updateCategoryState(t,i){let o=this.categoryStates.get(t);o&&(this.categoryStates.set(t,{...o,...i}),this.requestUpdate())}async onCategoryToggle(t){if(this.disabled)return;let i=this.categoryStates.get(t);i&&i.items.length===0&&!i.loading&&await this.loadCategoryData(t,this.unifiedSearchQuery),this.dispatchEvent(new CustomEvent("category-change",{detail:t}))}async onUnifiedSearchInput(t){if(this.disabled)return;let o=t.target.value.trim();this.unifiedSearchQuery=o,this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(async()=>{o.length>=(this.searchConfig?.minLength||this.defaultSearchConfig.minLength)?(await this.searchAllCategories(o),this.dispatchEvent(new CustomEvent("search",{detail:{query:o,category:"all"}}))):o.length===0&&await this.clearSearchAllCategories()},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}async searchAllCategories(t){let i=this.config?.customCategories||Object.keys(A);for(let o of i)this.updateCategoryState(o,{searchQuery:t}),await this.loadCategoryData(o,t,1)}async clearSearchAllCategories(){let t=this.config?.customCategories||Object.keys(A);for(let i of t)this.updateCategoryState(i,{searchQuery:""}),await this.loadCategoryData(i,"",1)}async onFilterChange(t,i){if(!this.disabled){if(!i||Array.isArray(i)&&i.length===0||i===""){let{[t]:o,...r}=this.activeFilters;this.activeFilters=r}else this.activeFilters={...this.activeFilters,[t]:i};await this.reloadAllOpenCategories(),this.dispatchEvent(new CustomEvent("filter-change",{detail:{filterName:t,value:i,activeFilters:this.activeFilters}}))}}async reloadAllOpenCategories(){let t=this.config?.customCategories||Object.keys(A);for(let i of t){let o=this.categoryStates.get(i);o&&o.items.length>0&&await this.loadCategoryData(i,o.searchQuery,1)}}renderExtraFilters(){return this.extraFilters.length?d`
4509
+ `;var P={products:{label:"PRODUCTS",icon:"shopping-bag",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showPrice:!0,showTags:!1,thumbnailSize:"small",layout:"grid"}},videos:{label:"VIDEOS",icon:"video",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},images:{label:"IMAGES",icon:"image",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},presentations:{label:"PRESENTATIONS",icon:"file-text",enabled:!0,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}},faqs:{label:"FAQS",icon:"help-circle",enabled:!0,displayOptions:{showThumbnail:!1,showDescription:!0,showSize:!1,thumbnailSize:"small",layout:"list"}},audios:{label:"AUDIOS",icon:"music",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showDuration:!0,showSize:!1,thumbnailSize:"small",layout:"grid"}},"special-effects":{label:"SPECIAL EFFECTS",icon:"zap",enabled:!1,displayOptions:{showThumbnail:!0,showDescription:!1,showSize:!1,thumbnailSize:"small",layout:"grid"}}};var h=class extends Ii{constructor(){super(...arguments);this.selectedCategory="products";this.disabled=!1;this.isUploading=!1;this.uploadProgress=0;this.categoryStates=new Map;this.unifiedSearchQuery="";this.extraFilters=[];this.activeFilters={};this.loadingFilters=!1;this.defaultSearchConfig={placeholder:"Search all assets...",debounceMs:300,minLength:2}}async firstUpdated(){this.initializeService(),this.initializeCategoryStates(),await this.loadExtraFilters()}initializeService(){this.config?.multimediaService&&(this.multimediaService=ie.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=Y.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=ee.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=te.initialize(this.config.fileService))}initializeCategoryStates(){(this.config?.customCategories||Object.keys(P)).forEach(i=>{this.categoryStates.set(i,{category:i,items:[],pagination:{page:1,limit:this.config?.itemsPerPage||12,total:0,hasMore:!1,loading:!1},searchQuery:"",loading:!1})})}async loadExtraFilters(){if(!this.config?.enableExtraFilters||!this.faqsService)return;let t=this.config.faqsService?.organizationId;if(!t){console.warn("Organization ID required for loading extra filters");return}this.loadingFilters=!0;try{let i=await this.faqsService.getSettingsByOrganization(t,this.config.userGroupId);i?.extraFilters&&(this.extraFilters=i.extraFilters.filter(o=>o.enabled&&(o.entity==="all"||o.entity==="assets")).sort((o,a)=>o.order-a.order))}catch(i){console.error("Error loading extra filters:",i)}finally{this.loadingFilters=!1}}hasActiveFilters(){return Object.keys(this.activeFilters).length>0}convertToExtraFields(t){if(!t||Object.keys(t).length===0)return;let i={};for(let[o,a]of Object.entries(t))a!=null&&(Array.isArray(a)?a.length>0&&(i[o]=a.join(",")):typeof a=="string"&&a.trim()!==""&&(a==="true"?i[o]=!0:a==="false"?i[o]=!1:!isNaN(Number(a))&&a.trim()!==""?i[o]=Number(a):i[o]=a));return Object.keys(i).length>0?i:void 0}async loadCategoryData(t,i="",o=1){if(!this.multimediaService&&t!=="faqs"&&t!=="products"||!this.productService&&t==="products"||!this.faqsService&&t==="faqs")return;let a=this.categoryStates.get(t);if(!a)return;this.updateCategoryState(t,{loading:!0,error:void 0});let r=this.hasActiveFilters()?this.activeFilters:void 0;try{let n=[],l=0;switch(t){case"products":{let u=await this.productService.getProducts({title:i,limit:a.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});n=this.mapProductsToAssetItems(u),l=u.length;break}case"images":{let u=await this.multimediaService.getImages({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"images"),l=u.total;break}case"videos":{let u=await this.multimediaService.getVideos({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"videos"),l=u.total;break}case"presentations":{let u=await this.multimediaService.getPresentations({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(u.items,"presentations"),l=u.total;break}case"faqs":{let u=await this.faqsService.getFaqs({search:i,isActive:!0,page:o,organizationId:this.config?.faqsService?.organizationId,limit:a.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:r});n=this.mapFaqsToAssetItems(u.data),l=u.total;break}}let c=o===1?n:[...a.items,...n];this.updateCategoryState(t,{items:c,pagination:{...a.pagination,page:o,total:l,hasMore:c.length<l,loading:!1},searchQuery:i,loading:!1})}catch(n){console.error(`Error loading ${t} data:`,n),this.updateCategoryState(t,{loading:!1,error:n instanceof Error?n.message:"Failed to load data"})}}mapProductsToAssetItems(t){return t.map(i=>({id:i.id,name:i.name,description:i.description,url:i.url,thumbnail:i.images?.[0],type:"products",price:i.price,currency:i.currency,tags:i.tags,secureToken:i.secureToken,metadata:{externalId:i.externalId,category:i.category,providerType:i.providerType,variants:i.variants,options:i.options}}))}mapMultimediaToAssetItems(t,i){return t?.map(o=>({id:o.id,name:o.name,description:o.description,url:o.url,thumbnail:i==="images"?o.url:o.animatedCoverUrl,type:i,size:o.size,format:o.format,duration:o.duration,labels:o.labels,secureToken:o.secureToken,metadata:{organizationId:o.organizationId,status:o.status,vodUrl:o.vodUrl,slides:o.slides}}))}mapFaqsToAssetItems(t){return t.map(i=>({id:i.id,name:i.question,description:i.answer,url:`#faq-${i.id}`,type:"faqs",metadata:{organizationId:i.organizationId,groupId:i.groupId,priority:i.priority,isActive:i.isActive,createdAt:i.createdAt,updatedAt:i.updatedAt}}))}updateCategoryState(t,i){let o=this.categoryStates.get(t);o&&(this.categoryStates.set(t,{...o,...i}),this.requestUpdate())}async onCategoryToggle(t){if(this.disabled)return;let i=this.categoryStates.get(t);i&&i.items.length===0&&!i.loading&&await this.loadCategoryData(t,this.unifiedSearchQuery),this.dispatchEvent(new CustomEvent("category-change",{detail:t}))}async onUnifiedSearchInput(t){if(this.disabled)return;let o=t.target.value.trim();this.unifiedSearchQuery=o,this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(async()=>{o.length>=(this.searchConfig?.minLength||this.defaultSearchConfig.minLength)?(await this.searchAllCategories(o),this.dispatchEvent(new CustomEvent("search",{detail:{query:o,category:"all"}}))):o.length===0&&await this.clearSearchAllCategories()},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}async searchAllCategories(t){let i=this.config?.customCategories||Object.keys(P);for(let o of i)this.updateCategoryState(o,{searchQuery:t}),await this.loadCategoryData(o,t,1)}async clearSearchAllCategories(){let t=this.config?.customCategories||Object.keys(P);for(let i of t)this.updateCategoryState(i,{searchQuery:""}),await this.loadCategoryData(i,"",1)}async onFilterChange(t,i){if(!this.disabled){if(!i||Array.isArray(i)&&i.length===0||i===""){let{[t]:o,...a}=this.activeFilters;this.activeFilters=a}else this.activeFilters={...this.activeFilters,[t]:i};await this.reloadAllOpenCategories(),this.dispatchEvent(new CustomEvent("filter-change",{detail:{filterName:t,value:i,activeFilters:this.activeFilters}}))}}async reloadAllOpenCategories(){let t=this.config?.customCategories||Object.keys(P);for(let i of t){let o=this.categoryStates.get(i);o&&o.items.length>0&&await this.loadCategoryData(i,o.searchQuery,1)}}renderExtraFilters(){return this.extraFilters.length?p`
4417
4510
  <div class="ol-sidebar__extra-filters">
4418
- ${Oe(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4511
+ ${Ge(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4419
4512
  </div>
4420
- `:d``}renderFilter(t){switch(t.type){case"select":return this.renderSelectFilter(t);case"multiselect":return this.renderMultiselectFilter(t);case"text":return this.renderTextFilter(t);default:return d``}}renderSelectFilter(t){let i=this.activeFilters[t.name];return d`
4513
+ `:p``}renderFilter(t){switch(t.type){case"select":return this.renderSelectFilter(t);case"multiselect":return this.renderMultiselectFilter(t);case"text":return this.renderTextFilter(t);default:return p``}}renderSelectFilter(t){let i=this.activeFilters[t.name];return p`
4421
4514
  <div class="ol-sidebar__filter">
4422
4515
  <label class="ol-sidebar__filter-label">${t.label}</label>
4423
4516
  <ol-select
4424
4517
  class="ol-sidebar__filter-select"
4425
- placeholder=${ie(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4518
+ placeholder=${me(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4426
4519
  clearable
4427
4520
  size="small"
4428
4521
  ?disabled=${this.disabled}
4429
4522
  .value=${i||""}
4430
- @ol-change=${o=>{let r=o.target;this.onFilterChange(t.name,r.value)}}
4523
+ @ol-change=${o=>{let a=o.target;this.onFilterChange(t.name,a.value)}}
4431
4524
  >
4432
- ${t.values?.map(o=>d`
4525
+ ${t.values?.map(o=>p`
4433
4526
  <ol-option value=${o}>${o}</ol-option>
4434
4527
  `)}
4435
4528
  </ol-select>
4436
4529
  </div>
4437
- `}renderMultiselectFilter(t){let i=this.activeFilters[t.name]||[];return d`
4530
+ `}renderMultiselectFilter(t){let i=this.activeFilters[t.name]||[];return p`
4438
4531
  <div class="ol-sidebar__filter">
4439
4532
  <label class="ol-sidebar__filter-label">${t.label}</label>
4440
4533
  <ol-select
4441
4534
  class="ol-sidebar__filter-select"
4442
- placeholder=${ie(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4535
+ placeholder=${me(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4443
4536
  multiple
4444
4537
  clearable
4445
4538
  size="small"
4446
4539
  ?disabled=${this.disabled}
4447
4540
  .value=${i}
4448
- @ol-change=${o=>{let r=o.target,n=Array.isArray(r.value)?r.value:[r.value].filter(Boolean);this.onFilterChange(t.name,n)}}
4541
+ @ol-change=${o=>{let a=o.target,r=Array.isArray(a.value)?a.value:[a.value].filter(Boolean);this.onFilterChange(t.name,r)}}
4449
4542
  >
4450
- ${t.values?.map(o=>d`
4543
+ ${t.values?.map(o=>p`
4451
4544
  <ol-option value=${o}>${o}</ol-option>
4452
4545
  `)}
4453
4546
  </ol-select>
4454
4547
  </div>
4455
- `}renderTextFilter(t){let i=this.activeFilters[t.name]||"";return d`
4548
+ `}renderTextFilter(t){let i=this.activeFilters[t.name]||"";return p`
4456
4549
  <div class="ol-sidebar__filter">
4457
4550
  <label class="ol-sidebar__filter-label">${t.label}</label>
4458
4551
  <ol-input
4459
4552
  class="ol-sidebar__filter-input"
4460
- placeholder=${ie(t.placeholder||`Enter ${t.label.toLowerCase()}`)}
4553
+ placeholder=${me(t.placeholder||`Enter ${t.label.toLowerCase()}`)}
4461
4554
  size="small"
4462
4555
  ?disabled=${this.disabled}
4463
4556
  .value=${i}
4464
- @ol-input=${o=>{let r=o.target;this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(()=>{this.onFilterChange(t.name,r.value)},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}}
4557
+ @ol-input=${o=>{let a=o.target;this.searchTimeout&&clearTimeout(this.searchTimeout),this.searchTimeout=window.setTimeout(()=>{this.onFilterChange(t.name,a.value)},this.searchConfig?.debounceMs||this.defaultSearchConfig.debounceMs)}}
4465
4558
  ></ol-input>
4466
4559
  </div>
4467
- `}async onLoadMore(t){if(this.disabled)return;let i=this.categoryStates.get(t);!i||!i.pagination.hasMore||i.pagination.loading||(await this.loadCategoryData(t,i.searchQuery,i.pagination.page+1),this.dispatchEvent(new CustomEvent("load-more",{detail:t})))}onItemSelect(t){this.disabled||this.dispatchEvent(new CustomEvent("item-select",{detail:t}))}async onFileSelected(t){if(this.disabled)return;if(!this.fileService){console.warn("FileService not configured");return}let{file:i,type:o}=t.detail;this.isUploading=!0,this.uploadProgress=0;try{let r=await this.fileService.uploadFile(i,{bucketType:"conversations",path:"scanned",description:`${o} uploaded from sidebar`,onProgress:n=>{this.uploadProgress=n}});if(r.success)this.dispatchEvent(new CustomEvent("file-uploaded",{detail:{id:r.id,name:r.name,url:r.url,type:"file"}}));else throw new Error(r.error||"Upload failed")}catch(r){console.error("Error uploading file:",r),this.dispatchEvent(new CustomEvent("file-upload-error",{detail:{error:r instanceof Error?r.message:"Unknown error"},bubbles:!0}))}finally{this.isUploading=!1,this.uploadProgress=0}}renderCategoryHeader(t){let i=A[t],r=this.categoryStates.get(t)?.items.length||0;return d`
4560
+ `}async onLoadMore(t){if(this.disabled)return;let i=this.categoryStates.get(t);!i||!i.pagination.hasMore||i.pagination.loading||(await this.loadCategoryData(t,i.searchQuery,i.pagination.page+1),this.dispatchEvent(new CustomEvent("load-more",{detail:t})))}onItemSelect(t){this.disabled||this.dispatchEvent(new CustomEvent("item-select",{detail:t}))}async onFileSelected(t){if(this.disabled)return;if(!this.fileService){console.warn("FileService not configured");return}let{file:i,type:o}=t.detail;this.isUploading=!0,this.uploadProgress=0;try{let a=await this.fileService.uploadFile(i,{bucketType:"conversations",path:"scanned",description:`${o} uploaded from sidebar`,onProgress:r=>{this.uploadProgress=r}});if(a.success)this.dispatchEvent(new CustomEvent("file-uploaded",{detail:{id:a.id,name:a.name,url:a.url,type:"file"}}));else throw new Error(a.error||"Upload failed")}catch(a){console.error("Error uploading file:",a),this.dispatchEvent(new CustomEvent("file-upload-error",{detail:{error:a instanceof Error?a.message:"Unknown error"},bubbles:!0}))}finally{this.isUploading=!1,this.uploadProgress=0}}renderCategoryHeader(t){let i=P[t],a=this.categoryStates.get(t)?.items.length||0;return p`
4468
4561
  <div class="ol-sidebar__category-header">
4469
4562
  <div class="ol-sidebar__category-info">
4470
4563
  <span class="ol-sidebar__category-label">${i.label}</span>
4471
- ${y(r>0,()=>d`
4472
- <span class="ol-sidebar__category-count">(${r})</span>
4564
+ ${k(a>0,()=>p`
4565
+ <span class="ol-sidebar__category-count">(${a})</span>
4473
4566
  `)}
4474
4567
  </div>
4475
4568
 
4476
4569
  </div>
4477
- `}renderAssetItem(t,i){return d`
4570
+ `}renderAssetItem(t,i){return p`
4478
4571
  <div
4479
- class="ol-sidebar__asset-item ${Y({"ol-sidebar__asset-item--grid":i.layout==="grid","ol-sidebar__asset-item--list":i.layout==="list","ol-sidebar__asset-item--faq":t.type==="faqs","ol-sidebar__asset-item--disabled":this.disabled})}"
4572
+ class="ol-sidebar__asset-item ${se({"ol-sidebar__asset-item--grid":i.layout==="grid","ol-sidebar__asset-item--list":i.layout==="list","ol-sidebar__asset-item--faq":t.type==="faqs","ol-sidebar__asset-item--disabled":this.disabled})}"
4480
4573
  @click=${()=>this.onItemSelect(t)}
4481
4574
  >
4482
4575
  ${this.renderAssetThumbnail(t)}
4483
4576
  ${this.renderAssetContent(t,i)}
4484
4577
  </div>
4485
- `}renderAssetThumbnail(t){return t.type==="faqs"?d``:d`
4486
- ${y(t.type==="videos",()=>d`
4578
+ `}renderAssetThumbnail(t){return t.type==="faqs"?p``:p`
4579
+ ${k(t.type==="videos",()=>p`
4487
4580
  <div class="ol-sidebar__asset-thumbnail">
4488
4581
  <och-player
4489
4582
  class="och__media-visualizer__item--video"
@@ -4493,16 +4586,16 @@ video::-webkit-media-text-track-display {
4493
4586
  ${this.formatDuration(t.duration)}
4494
4587
  </div>
4495
4588
  </div>
4496
- `,()=>d`
4589
+ `,()=>p`
4497
4590
  <div class="ol-sidebar__asset-thumbnail">
4498
4591
  <img
4499
- src="${ie(t.thumbnail)}"
4592
+ src="${me(t.thumbnail)}"
4500
4593
  alt="${t.name}"
4501
4594
  class="ol-sidebar__asset-image"
4502
4595
  />
4503
4596
  </div>
4504
4597
  `)}
4505
- `}renderAssetContent(t,i){return d`
4598
+ `}renderAssetContent(t,i){return p`
4506
4599
  <div class="ol-sidebar__asset-content">
4507
4600
  ${this.renderAssetName(t)}
4508
4601
  ${this.renderAssetPrice(t)}
@@ -4511,20 +4604,20 @@ video::-webkit-media-text-track-display {
4511
4604
  ${this.renderAssetMeta(t,i)}
4512
4605
  ${this.renderAssetTags(t,i)}
4513
4606
  </div>
4514
- `}renderAssetName(t){return d`
4515
- <div class="ol-sidebar__asset-name ${Y({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4607
+ `}renderAssetName(t){return p`
4608
+ <div class="ol-sidebar__asset-name ${se({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4516
4609
  ${t.name}
4517
4610
  </div>
4518
- `}renderAssetPrice(t){return d`
4519
- ${y(t.type==="products"&&t.price,()=>d`
4611
+ `}renderAssetPrice(t){return p`
4612
+ ${k(t.type==="products"&&t.price,()=>p`
4520
4613
  <div class="ol-sidebar__asset-price">
4521
4614
  ${t.currency} ${t.price}
4522
4615
  </div>
4523
4616
  `)}
4524
- `}renderAssetPresentation(t){return d`
4525
- ${y(t.type==="presentations",()=>d`
4617
+ `}renderAssetPresentation(t){return p`
4618
+ ${k(t.type==="presentations",()=>p`
4526
4619
  <div class="ol-sidebar__asset-presentation">
4527
- ${y(t.metadata?.slides&&t.metadata.slides.length>0,()=>d`
4620
+ ${k(t.metadata?.slides&&t.metadata.slides.length>0,()=>p`
4528
4621
  <div class="ol-sidebar__asset-presentation-preview">
4529
4622
  <img
4530
4623
  src=${t.metadata?.slides[0]}
@@ -4535,7 +4628,7 @@ video::-webkit-media-text-track-display {
4535
4628
  ${this.getFormat(t.format)}
4536
4629
  </div>
4537
4630
  </div>
4538
- `,()=>d`
4631
+ `,()=>p`
4539
4632
  <div class="ol-sidebar__asset-presentation-fallback">
4540
4633
  <div class="ol-sidebar__asset-presentation-icon">📄</div>
4541
4634
  <div class="ol-sidebar__asset-presentation-format">
@@ -4545,52 +4638,52 @@ video::-webkit-media-text-track-display {
4545
4638
  `)}
4546
4639
  </div>
4547
4640
  `)}
4548
- `}renderAssetDescription(t,i){return d`
4549
- ${y(i.showDescription&&t.description&&t.type!=="products",()=>d`
4550
- <div class="ol-sidebar__asset-description ${Y({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4641
+ `}renderAssetDescription(t,i){return p`
4642
+ ${k(i.showDescription&&t.description&&t.type!=="products",()=>p`
4643
+ <div class="ol-sidebar__asset-description ${se({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4551
4644
  ${t.description}
4552
4645
  </div>
4553
4646
  `)}
4554
- `}renderAssetMeta(t,i){return d`
4647
+ `}renderAssetMeta(t,i){return p`
4555
4648
  <div class="ol-sidebar__asset-meta">
4556
- ${y(i.showSize&&t.size,()=>d`
4649
+ ${k(i.showSize&&t.size,()=>p`
4557
4650
  <span class="ol-sidebar__asset-size">
4558
4651
  ${this.formatFileSize(t.size)}
4559
4652
  </span>
4560
4653
  `)}
4561
4654
  </div>
4562
- `}renderAssetTags(t,i){return d`
4563
- ${y(i.showTags&&t.tags&&t.tags.length>0,()=>d`
4655
+ `}renderAssetTags(t,i){return p`
4656
+ ${k(i.showTags&&t.tags&&t.tags.length>0,()=>p`
4564
4657
  <div class="ol-sidebar__asset-tags">
4565
- ${t.tags?.map(o=>d`
4658
+ ${t.tags?.map(o=>p`
4566
4659
  <span class="ol-sidebar__asset-tag">${o}</span>
4567
4660
  `)}
4568
4661
  </div>
4569
4662
  `)}
4570
- `}renderCategoryContent(t){let i=this.categoryStates.get(t),o=A[t];return i?d`
4663
+ `}renderCategoryContent(t){let i=this.categoryStates.get(t),o=P[t];return i?p`
4571
4664
  <div class="ol-sidebar__category-content">
4572
4665
 
4573
- ${y(i.loading&&i.items.length===0,()=>d`
4666
+ ${k(i.loading&&i.items.length===0,()=>p`
4574
4667
  <div class="ol-sidebar__loading">
4575
4668
  <div class="ol-sidebar__spinner"></div>
4576
4669
  <span>Loading ${o.label.toLowerCase()}...</span>
4577
4670
  </div>
4578
4671
  `)}
4579
4672
 
4580
- ${y(i.error,()=>d`
4673
+ ${k(i.error,()=>p`
4581
4674
  <div class="ol-sidebar__error">
4582
4675
  <span class="ol-sidebar__error-icon">⚠</span>
4583
4676
  <span>${i.error}</span>
4584
4677
  </div>
4585
4678
  `)}
4586
4679
 
4587
- ${y(i.items.length>0,()=>d`
4588
- <div class="ol-sidebar__assets ${Y({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4589
- ${Oe(i.items,r=>r.id,r=>this.renderAssetItem(r,o.displayOptions))}
4680
+ ${k(i.items.length>0,()=>p`
4681
+ <div class="ol-sidebar__assets ${se({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4682
+ ${Ge(i.items,a=>a.id,a=>this.renderAssetItem(a,o.displayOptions))}
4590
4683
  </div>
4591
4684
  `)}
4592
4685
 
4593
- ${y(i.pagination.hasMore,()=>d`
4686
+ ${k(i.pagination.hasMore,()=>p`
4594
4687
  <div class="ol-sidebar__load-more">
4595
4688
  <ol-button
4596
4689
  class="ol-sidebar__load-more-button"
@@ -4602,18 +4695,18 @@ video::-webkit-media-text-track-display {
4602
4695
  </div>
4603
4696
  `)}
4604
4697
 
4605
- ${y(!i.loading&&i.items.length===0&&!i.error,()=>d`
4698
+ ${k(!i.loading&&i.items.length===0&&!i.error,()=>p`
4606
4699
  <div class="ol-sidebar__empty">
4607
4700
  <span>No ${o.label.toLowerCase()}s found</span>
4608
4701
  </div>
4609
4702
  `)}
4610
4703
  </div>
4611
- `:d``}formatFileSize(t){let i=["B","KB","MB","GB"];if(t===0)return"0 B";let o=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/1024**o*100)/100+" "+i[o]}getFormat(t){return t.split("/")[1]}formatDuration(t){let i=Math.floor(t/60),o=Math.floor(t%60);return`${i}:${o.toString().padStart(2,"0")}`}render(){let t=this.config?.customCategories||Object.keys(A);return d`
4612
- <div class="ol-sidebar ${Y({"ol-sidebar--disabled":this.disabled})}">
4704
+ `:p``}formatFileSize(t){let i=["B","KB","MB","GB"];if(t===0)return"0 B";let o=Math.floor(Math.log(t)/Math.log(1024));return Math.round(t/1024**o*100)/100+" "+i[o]}getFormat(t){return t.split("/")[1]}formatDuration(t){let i=Math.floor(t/60),o=Math.floor(t%60);return`${i}:${o.toString().padStart(2,"0")}`}render(){let t=this.config?.customCategories||Object.keys(P);return p`
4705
+ <div class="ol-sidebar ${se({"ol-sidebar--disabled":this.disabled})}">
4613
4706
  <div class="ol-sidebar__header">
4614
4707
  <div class="ol-sidebar__header-top">
4615
4708
  <h2 class="ol-sidebar__title">Assets</h2>
4616
- ${y(this.config?.enableUpload&&this.fileService&&!this.disabled,()=>d`
4709
+ ${k(this.config?.enableUpload&&this.fileService&&!this.disabled,()=>p`
4617
4710
  <osb-upload
4618
4711
  .config=${{maxFileSize:10*1024*1024,showImage:!0,showVideo:!0,showDocument:!0}}
4619
4712
  @osb-file-selected=${this.onFileSelected}
@@ -4622,7 +4715,7 @@ video::-webkit-media-text-track-display {
4622
4715
  <ol-icon name="plus"></ol-icon>
4623
4716
  </ol-button>
4624
4717
  </osb-upload>
4625
- ${y(this.isUploading,()=>d`
4718
+ ${k(this.isUploading,()=>p`
4626
4719
  <div class="ol-sidebar__upload-progress">
4627
4720
  <div class="ol-sidebar__upload-progress-bar">
4628
4721
  <div
@@ -4637,20 +4730,20 @@ video::-webkit-media-text-track-display {
4637
4730
  `)}
4638
4731
  `)}
4639
4732
  </div>
4640
- ${y(this.config?.showSearch,()=>d`
4733
+ ${k(this.config?.showSearch,()=>p`
4641
4734
  <div class="ol-sidebar__unified-search">
4642
4735
  <input
4643
4736
  class="ol-sidebar__unified-search-input"
4644
4737
  type="text"
4645
- placeholder="${ie(this.searchConfig?.placeholder||this.defaultSearchConfig.placeholder)}"
4738
+ placeholder="${me(this.searchConfig?.placeholder||this.defaultSearchConfig.placeholder)}"
4646
4739
  .value=${this.unifiedSearchQuery}
4647
4740
  ?disabled=${this.disabled}
4648
4741
  @input=${this.onUnifiedSearchInput}
4649
4742
  />
4650
4743
  </div>
4651
4744
  `)}
4652
- ${y(this.config?.enableExtraFilters&&this.extraFilters.length>0,()=>this.renderExtraFilters())}
4653
- ${y(this.loadingFilters,()=>d`
4745
+ ${k(this.config?.enableExtraFilters&&this.extraFilters.length>0,()=>this.renderExtraFilters())}
4746
+ ${k(this.loadingFilters,()=>p`
4654
4747
  <div class="ol-sidebar__filters-loading">
4655
4748
  <div class="ol-sidebar__spinner ol-sidebar__spinner--small"></div>
4656
4749
  <span>Loading filters...</span>
@@ -4659,9 +4752,9 @@ video::-webkit-media-text-track-display {
4659
4752
  </div>
4660
4753
 
4661
4754
  <div class="ol-sidebar__content">
4662
- ${Oe(t,i=>i,i=>A[i].enabled?d`
4755
+ ${Ge(t,i=>i,i=>P[i].enabled?p`
4663
4756
  <ol-details
4664
- class="ol-sidebar__category ${Y({"ol-sidebar__category--disabled":this.disabled})}"
4757
+ class="ol-sidebar__category ${se({"ol-sidebar__category--disabled":this.disabled})}"
4665
4758
  summary=""
4666
4759
  ?disabled=${this.disabled}
4667
4760
  @ol-show=${()=>this.onCategoryToggle(i)}
@@ -4671,8 +4764,7 @@ video::-webkit-media-text-track-display {
4671
4764
  </div>
4672
4765
  ${this.renderCategoryContent(i)}
4673
4766
  </ol-details>
4674
- `:d``)}
4767
+ `:p``)}
4675
4768
  </div>
4676
4769
  </div>
4677
- `}};v.styles=[at],u([be({type:Object})],v.prototype,"config",2),u([be({type:Object})],v.prototype,"searchConfig",2),u([be({type:String})],v.prototype,"selectedCategory",2),u([be({type:Boolean})],v.prototype,"disabled",2),u([w()],v.prototype,"multimediaService",2),u([w()],v.prototype,"productService",2),u([w()],v.prototype,"faqsService",2),u([w()],v.prototype,"fileService",2),u([w()],v.prototype,"isUploading",2),u([w()],v.prototype,"uploadProgress",2),u([w()],v.prototype,"categoryStates",2),u([w()],v.prototype,"searchTimeout",2),u([w()],v.prototype,"unifiedSearchQuery",2),u([w()],v.prototype,"extraFilters",2),u([w()],v.prototype,"activeFilters",2),u([w()],v.prototype,"loadingFilters",2),v=u([L("osb-side-bar")],v);import{createComponent as hi}from"@lit/react";import fi from"react";var bi=hi({tagName:"osb-asset",elementClass:k,react:fi,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as yi}from"@lit/react";import ki from"react";var ji=yi({tagName:"osb-side-bar",elementClass:v,react:ki,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as wi}from"@lit/react";import Si from"react";var Mi=wi({tagName:"osb-upload",elementClass:_,react:Si,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var j=0;function ye(){j=0}function lt(s){j=s}function p(s){return j++,`mock_${s}_${j}_${Date.now().toString(36)}`}function ct(s,e){return`mock_${s}_${e.toString(36)}`}function C(s,e,t){let i=t||new Date().toISOString(),o=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${s}_${e}_${o}`}function dt(s){if(!s.startsWith("mock_token_"))return null;let e=s.replace("mock_token_","").split("_");if(e.length<3)return null;let t=e[e.length-1],i=e[e.length-2],o=e.slice(0,-2).join("_");try{let r=t.replace(/-/g,"+").replace(/_/g,"/"),n=typeof atob=="function"?atob(r):t;return{roomId:o,identity:i,timestamp:n}}catch{return null}}function Q(s){return`wss://mock-livekit.local/room/${s}`}function pt(s="participant",e){let t=e??j++;return`${s}_${t}_${Date.now().toString(36)}`}function ut(s="room"){return j++,`${s}_${j}_${Date.now().toString(36)}`}function mt(s,e){return j++,`TR_${s.toUpperCase()}_${e}_${j}`}function gt(){return j++,`msg_${j}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function vt(s){return j++,`api_${s}_${j}_${Date.now().toString(36)}`}function ht(){return[Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,14)].join("-")}function ft(s,e){let t=[];for(let i=0;i<e;i++)t.push(p(s));return t}var ke={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function je(s,e,t=[],i=0,o=Math.random){switch(s){case"echo":return{response:`Echo: ${e}`,nextIndex:i};case"canned":return{response:t[0]||"Default response",nextIndex:i};case"sequential":return{response:t[i]||"No more responses",nextIndex:(i+1)%Math.max(1,t.length)};case"random":{if(t.length===0)return{response:"Random response",nextIndex:i};let r=Math.floor(o()*t.length);return{response:t[r],nextIndex:i}}case"silent":return{response:"",nextIndex:i};case"error":throw new Error("Agent error");case"custom":return{response:"",nextIndex:i};default:return{response:"Default agent response",nextIndex:i}}}var W=class{constructor(e,t,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=e,this.name=t,this.config={...ke,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setStrategy(e){this.config.responseStrategy=e}setCannedResponses(e){this.config.cannedResponses=e,this.responseIndex=0}setCustomHandler(e){this.customHandler=e,this.config.responseStrategy="custom"}setRandomFunction(e){this.randomFn=e}async start(e){this._state!=="running"&&(this._state="starting",this.roomId=e,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0,await this.delay(50),this._state="running",this.emitEvent({type:"started",agentId:this.id}))}async stop(){this._state==="running"&&(this._state="stopping",await this.delay(50),this._state="stopped",this.roomId=void 0,this.emitEvent({type:"stopped",agentId:this.id}))}async processMessage(e){if(this._state!=="running")throw new Error("Agent is not running");if(this.config.maxMessages&&this.messageCount>=this.config.maxMessages)return await this.stop(),"";this.addMessage(e,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:e});let t;try{if(this.config.responseStrategy==="custom"&&this.customHandler)t=await this.customHandler(this.id,e,this.conversationHistory);else{if(this.config.responseStrategy==="silent")return"";if(this.config.responseStrategy==="error"){let i=new Error("Agent error");throw this.emitEvent({type:"error",agentId:this.id,error:i}),i}else{let i=je(this.config.responseStrategy,e,this.config.cannedResponses,this.responseIndex,this.randomFn);t=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(t.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(t,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:t}),t}addEventListener(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}clearHistory(){this.conversationHistory=[],this.responseIndex=0}reset(){this._state="idle",this.roomId=void 0,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0}toJSON(){return{id:this.id,name:this.name,state:this._state,roomId:this.roomId,config:this.config,historyLength:this.conversationHistory.length,messageCount:this.messageCount}}addMessage(e,t){let i={id:p("msg"),content:e,role:t,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(i){console.error("Error in agent event listener:",i)}}delay(e){return new Promise(t=>setTimeout(t,e))}};var f=class s extends Error{constructor(e,t,i){super(t),this.name="MockLiveKitError",this.code=e,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(e){return new s(e.code,e.message,e.details)}},T=class extends f{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},oe=class extends f{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},se=class extends f{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},re=class extends f{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},ne=class extends f{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ae=class extends f{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},le=class extends f{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},ce=class extends f{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},de=class extends f{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},pe=class extends f{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function X(s){switch(s.code){case"ROOM_NOT_FOUND":return new T(s.details?.roomId??"unknown");case"ROOM_ENDED":return new oe(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new se(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new re(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new ne(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ae(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new le(s.message);case"NETWORK_ERROR":return new ce(s.message);case"INVALID_OPERATION":return new de(s.message,s.details);case"TIMEOUT":return new pe(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return f.fromMockError(s)}}function P(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function bt(s){return s instanceof f}var Z=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(e){this.maxHistorySize=e,this.trimHistory()}setRecordHistory(e){this.recordHistory=e}on(e,t){return this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),()=>{this.off(e,t)}}once(e,t){let i=o=>{this.off(e,i),t(o)};return this.on(e,i)}off(e,t){this.listeners[e]?.delete(t)}onAny(e){return this.wildcardListeners.add(e),()=>{this.wildcardListeners.delete(e)}}offAny(e){this.wildcardListeners.delete(e)}removeAllListeners(e){e?delete this.listeners[e]:(this.listeners={},this.wildcardListeners.clear())}emit(e){this.recordHistory&&(this.eventHistory.push(e),this.trimHistory());let t=this.listeners[e.type];if(t)for(let i of t)try{i(e)}catch(o){console.error(`Error in mock event listener for ${e.type}:`,o)}for(let i of this.wildcardListeners)try{i(e)}catch(o){console.error("Error in mock wildcard event listener:",o)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(e){let t={type:"roomCreated",timestamp:new Date().toISOString(),roomId:e.id,room:e};this.emit(t)}emitRoomEnded(e){let t={type:"roomEnded",timestamp:new Date().toISOString(),roomId:e};this.emit(t)}emitRoomConnectionStateChanged(e,t,i){let o={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:e,state:t,previousState:i};this.emit(o)}emitParticipantJoined(e,t){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:e,participant:t};this.emit(i)}emitParticipantLeft(e,t){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t};this.emit(i)}emitParticipantAttributesChanged(e,t,i,o){let r={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(r)}emitTrackPublished(e,t,i){let o={type:"trackPublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,track:i};this.emit(o)}emitTrackUnpublished(e,t,i){let o={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,trackId:i};this.emit(o)}emitTrackMuted(e,t){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitTrackUnmuted(e,t){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitMessageReceived(e,t){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitMessageSent(e,t){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitTypingIndicator(e,t,i){let o={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,isTyping:i};this.emit(o)}emitAgentStarted(e,t){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:e,agent:t};this.emit(i)}emitAgentStopped(e,t){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:e,agentId:t};this.emit(i)}emitAgentMessage(e,t,i){let o={type:"agentMessage",timestamp:new Date().toISOString(),roomId:e,agentId:t,message:i};this.emit(o)}emitDataReceived(e,t,i,o){let r={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(r)}emitError(e,t){let i={type:"error",timestamp:new Date().toISOString(),roomId:t,error:e};this.emit(i)}getHistory(e){return e?this.eventHistory.filter(t=>t.type===e):[...this.eventHistory]}getLastEvents(e,t){return(t?this.eventHistory.filter(o=>o.type===t):this.eventHistory).slice(-e)}clearHistory(){this.eventHistory=[]}listenerCount(e){return(this.listeners[e]?.size??0)+this.wildcardListeners.size}};import{Session as De}from"@onlive.ai/tracker/session";import{Room as Ni,RoomEvent as Fe}from"livekit-client";import{initializeApp as _i}from"firebase/app";import{query as F,endAt as Ai,equalTo as Ci,get as yt,getDatabase as Ti,limitToFirst as Pi,limitToLast as Ri,onChildAdded as kt,onChildChanged as jt,onChildRemoved as wt,onDisconnect as St,onValue as Mt,orderByChild as Ii,orderByKey as Ei,orderByValue as zi,push as Oi,ref as Li,remove as Di,runTransaction as Fi,set as xt,startAt as Ui,update as $i}from"firebase/database";var we=class{constructor(e){this.onChildChanged=(e,t)=>jt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>wt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>jt(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>wt(e,i=>t(i.key||"",i.val(),i));let t=_i(e.config);this.db=Ti(t)}ref(e){return Li(this.db,e)}async getOnce(e){let t=await yt(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await yt(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return Mt(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return Mt(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return kt(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return kt(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return xt(this.ref(e),t)}update(e,t){return $i(this.ref(e),t)}remove(e){return Di(this.ref(e))}async push(e,t){let i=Oi(this.ref(e));return await xt(i,t),i.key}onDisconnectUpdate(e,t){return St(this.ref(e)).update(t)}cancelOnDisconnect(e){return St(this.ref(e)).cancel()}transaction(e,t){return Fi(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=F(i,Ii(t.childKey))),t.orderBy==="key"&&(i=F(i,Ei())),t.orderBy==="value"&&(i=F(i,zi())),t.startAt!=null&&(i=F(i,Ui(t.startAt))),t.endAt!=null&&(i=F(i,Ai(t.endAt))),t.equalTo!=null&&(i=F(i,Ci(t.equalTo))),t.limitFirst!=null&&(i=F(i,Pi(t.limitFirst))),t.limitLast!=null&&(i=F(i,Ri(t.limitLast))),i}};var _t=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as qi}from"@onlive.ai/tracker/generator";import{Session as S}from"@onlive.ai/tracker/session";var U="chatbot",Se=class s{static hasSession(){return!!S.getCookie(U)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(S.id=qi.uuid(),S.deleteCookie(U));let t=S.getCookie(U);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||S.id):S.id,secret:_t(16),createdAt:new Date().toISOString()};return S.setCookie(U,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=s.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return S.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=S.getCookie(U);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};S.setCookie(U,i,3600*24*365)}}static hasRegistrationData(){return!!S.getCookie(U)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return S.getCookie(U)?.registrationData}};var At="lk.chat",Ct="lk.transcription",Tt="lk.events",Le="typing-indicator";var Ue=class extends Ni{},Me=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,quickStart:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,o=e.info?.attributes?.["lk.segment_id"];o&&(this.transcriptionMap.has(o)?i=this.transcriptionMap.get(o)||"":this.transcriptionMap.set(o,i));let r=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,n="";for await(let a of e)n+=a,this.emitMessage({id:i,timestamp:Date.now(),message:n,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:r});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:n,externalId:i,identity:r?.identity,kind:r?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,o)=>{if(o===Le)try{let r=JSON.parse(new TextDecoder().decode(e));if(r.type==="typing"&&r.participantId!==this.room.localParticipant.identity){let n={type:"typing",isTyping:r.isTyping,timestamp:r.timestamp,participantId:r.participantId};this.emitTypingIndicator(n)}}catch(r){console.warn("Failed to parse typing indicator:",r)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||At,this.transcriptionTopic=e.transcriptionTopic||Ct,this.eventsTopic=e.eventsTopic||Tt,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new Ue({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new we({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(Fe.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Fe.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let r=await g(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:o}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!r.token)throw new Error("Registration failed: No token received from server");return this.authToken=r.token,r}async registerAgent(e,t){let i=De.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;De.deleteCookie("livekit-agent-token")}let o=await g(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return De.setCookie("livekit-agent-token",o.token,1440*60),this.authToken=o.token,o.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],o=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(o)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await g(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!t.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=t.user.token;let i={id:t.room.id,groupId:t.room.groupId||"",token:t.room.token,wsURL:t.room.wsURL,createdAt:t.room.createdAt||new Date().toISOString(),affinity:t.room.affinity};return this.setRoomMetadata(i),this.setupParticipantAttributesHandler(),this.room.connect(i.wsURL,i.token),this.initializeRoomHandlers(),this.room}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,o=await g(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(r){console.error("[ConversationService] Failed to send initial message:",r)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,o){let r=await g(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...o??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(r),this.setupParticipantAttributesHandler(),await this.room.connect(r.wsURL,r.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(Fe.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&Se.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return g(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await g(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let o=i.track;if(o)try{await e.unpublishTrack(o,!0)}catch{o.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return g(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),g(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return g(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await g(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return g(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return g(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return g(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:Le})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return g(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return g(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return g(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return g(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(o,r)=>e(o,r))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,r)=>t(o,r))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),r=(await g(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${r}`,{status:"disconnected"}),r}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(o,r)=>e(o,{...r,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,r)=>e(o,{...r,id:o}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,o=>e(o))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await g(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:o}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let r=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),n=i.onChildAddedQuery(r,(a,l)=>{if(!a||this.seenRequestIds.has(a))return;let h={...l,id:a};this.seenRequestIds.add(a),e(a,h)});return this.firebaseUnsubscribers["pending-requests"]=n,()=>{n?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let o=t.onChildChanged(i,(r,n)=>{if(!r)return;let a=JSON.stringify(n);this.lastSnapshotById.get(r)!==a&&(this.lastSnapshotById.set(r,a),e(r,{...n,id:r}))});return this.firebaseUnsubscribers["request-changes"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),o=`${i}/${e}`;return await t.transaction(o,n=>n&&(n.status==="pending"?{...n,status:"accepted"}:n)),(await t.getOnce(o))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(o,(r,n)=>{t(n)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(o,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(o,(r,n)=>{t(n)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};var x=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=p("TR"),this.mediaStreamTrack=i,this.mediaCleanup=o}get mediaTrack(){return this.mediaStreamTrack}attach(e){let t=e||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);t.srcObject=i,t.autoplay=!0,this.kind==="video"&&(t.playsInline=!0,t.muted=!0)}return this.attachedElements.add(t),t}detach(e){if(e)return e.srcObject=null,this.attachedElements.delete(e),[e];let t=Array.from(this.attachedElements);for(let i of t)i.srcObject=null;return this.attachedElements.clear(),t}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(e){this.muted=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!e)}setEnabled(e){this.enabled=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=e)}},M=class{constructor(e,t){this.subscribed=!0;this.isEnabled=!0;this.track=e,this.trackSid=e.sid,this.trackName=t||`${e.kind}_${e.source}`,this.source=e.source,this.kind=e.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(e){this.subscribed=e}setEnabled(e){this.isEnabled=e,this.track&&(this.track.enabled=e)}setMuted(e){this.track&&this.track.setMuted(e)}};var V=class{constructor(e){this.identity="";this.sid="";this.name="";this.attributes={};this.kind="standard";this.trackPublications=new Map;this.audioTrackPublications=new Map;this.videoTrackPublications=new Map;this._cameraEnabled=!1;this._microphoneEnabled=!1;this._screenShareEnabled=!1;this.room=e,this.sid=p("PA"),this.joinedAt=new Date}get isCameraEnabled(){return this._cameraEnabled}get isMicrophoneEnabled(){return this._microphoneEnabled}get isScreenShareEnabled(){return this._screenShareEnabled}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){let i={camera:"camera",Camera:"camera",microphone:"microphone",Microphone:"microphone",screen_share:"screen_share",ScreenShare:"screen_share",screen_share_audio:"screen_share_audio",ScreenShareAudio:"screen_share_audio"}[e]||e;return this.trackPublications.get(i)}getTrackPublicationBySid(e){for(let t of this.trackPublications.values())if(t.trackSid===e)return t}setAttributes(e){this.attributes={...this.attributes,...e}}async setCameraEnabled(e,t){if(this._cameraEnabled=e,e){let{createSyntheticVideoTrack:o}=await import("./media-BU4KDZMS.js"),{track:r,cleanup:n}=o({animation:"avatar",label:this.name||"Local Camera"}),a=new x("video","camera",r,n),l=new M(a,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("camera");i&&(i.track?.stop(),this.trackPublications.delete("camera"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setMicrophoneEnabled(e,t){if(this._microphoneEnabled=e,e){let{createSyntheticAudioTrack:o}=await import("./media-BU4KDZMS.js"),{track:r,cleanup:n}=o({enabled:!1}),a=new x("audio","microphone",r,n),l=new M(a,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("microphone");i&&(i.track?.stop(),this.trackPublications.delete("microphone"),this.audioTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setScreenShareEnabled(e,t){if(this._screenShareEnabled=e,e){let{createSyntheticVideoTrack:o}=await import("./media-BU4KDZMS.js"),{track:r,cleanup:n}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),a=new x("video","screen_share",r,n),l=new M(a,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(a.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("screen_share");i&&(i.track?.stop(),this.trackPublications.delete("screen_share"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async publishTrack(e,t){let i=new M(e,t?.name),o=t?.source||e.source;return this.trackPublications.set(o,i),e.kind==="audio"?this.audioTrackPublications.set(e.sid,i):e.kind==="video"&&this.videoTrackPublications.set(e.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(e){e.stop();for(let[t,i]of this.trackPublications)if(i.track===e){this.trackPublications.delete(t),e.kind==="audio"?this.audioTrackPublications.delete(e.sid):e.kind==="video"&&this.videoTrackPublications.delete(e.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(e,t){return{id:p("msg")}}async publishData(e,t){}async setMetadata(e){this.attributes.metadata=e}async setName(e){this.name=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function Hi(s){switch(s){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var R=class{constructor(e,t,i={},o="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=e,this.sid=p("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=Hi(o),this.joinedAt=new Date}get isAgent(){return this.kind===4||this.attributes["lk.agent.name"]!==void 0}get kindString(){return this._kindString}get isCameraEnabled(){let e=this.getTrackPublication("camera");return!!(e?.track&&!e.isMuted)}get isMicrophoneEnabled(){let e=this.getTrackPublication("microphone");return!!(e?.track&&!e.isMuted)}getTrackPublication(e){for(let t of this.trackPublications.values())if(t.source===e)return t}getTrackPublicationBySid(e){return this.trackPublications.get(e)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(e=>e.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(e=>e.kind==="video")}addTrackPublication(e){this.trackPublications.set(e.trackSid,e)}removeTrackPublication(e){let t=this.trackPublications.get(e);return t&&(this.trackPublications.delete(e),t.track?.stop()),t}setAttributes(e){this.attributes={...this.attributes,...e}}getAttribute(e){return this.attributes[e]}startSpeaking(e=.5){this.isSpeaking=!0,this.audioLevel=e}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(e){this.connectionQuality=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear()}};var I=class{constructor(e){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=e,this.localParticipant=new V(this),this.sid=p("RM")}get state(){return this._state}set state(e){let t=this._state;this._state=e,t!==e&&this.emit("connectionStateChanged",e,t)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(e,t){this._state="connecting",this.emit("connectionStateChanged","connecting","disconnected"),await this.mockService.simulateLatency(),this._state="connected",this.connectedAt=new Date().toISOString(),this.emit("connectionStateChanged","connected","connecting"),this.emit("connected")}async disconnect(){for(let t of this.remoteParticipants.values())t.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let e=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",e),this.emit("disconnected"),this.eventHandlers.clear()}async reconnect(){this._state="reconnecting",this.emit("connectionStateChanged","reconnecting","connected"),await this.mockService.simulateLatency(),this._state="connected",this.emit("connectionStateChanged","connected","reconnecting"),this.emit("reconnected")}on(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Set),this.eventHandlers.get(e).add(t),this}once(e,t){let i=(...o)=>{this.off(e,i),t(...o)};return this.on(e,i)}off(e,t){return this.eventHandlers.get(e)?.delete(t),this}removeAllListeners(){this.eventHandlers.clear()}emit(e,...t){let i=this.eventHandlers.get(e);if(i)for(let o of i)try{o(...t)}catch(r){console.error(`Error in mock room event handler for ${e}:`,r)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let r=this.rpcHandlers.get(e);if(!r)throw new Error(`RPC method not found: ${e}`);return r({callerIdentity:t,payload:i,responseTimeout:o})}registerTextStreamHandler(e,t){this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}simulateTextStream(e,t){let i=this.textStreamHandlers.get(e);i&&i(t,{identity:t.participantIdentity})}getParticipantByIdentity(e){return e===this.localParticipant.identity?new R(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new R(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let t of this.remoteParticipants.values())if(t.sid===e)return t}async simulateParticipantJoin(e,t){let i=new R(e,t?.name,t?.attributes||{},t?.kind||"standard");return this.remoteParticipants.set(e,i),this.emit("participantConnected",i),t?.withCamera&&await this.simulateRemoteTrack(e,"video","camera"),t?.withMicrophone&&await this.simulateRemoteTrack(e,"audio","microphone"),i}simulateParticipantLeave(e){let t=this.remoteParticipants.get(e);if(t){for(let i of t.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,t);this.remoteParticipants.delete(e),this.emit("participantDisconnected",t)}}async simulateRemoteTrack(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let r,n;if(t==="video"){let{createSyntheticVideoTrack:h}=await import("./media-BU4KDZMS.js"),m=h({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});r=m.track,n=m.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:h}=await import("./media-BU4KDZMS.js"),m=h({enabled:!1});r=m.track,n=m.cleanup}let a=new x(t,i,r,n),l=new M(a);return o.addTrackPublication(l),this.emit("trackSubscribed",a,l,o),this.emit("trackPublished",l,o),a}simulateTrackUnpublished(e,t){let i=this.remoteParticipants.get(e);if(!i)return;let o=i.getTrackPublication(t);o&&(i.removeTrackPublication(o.trackSid),this.emit("trackUnpublished",o,i),this.emit("trackUnsubscribed",o.track,o,i))}async simulateAgentJoin(e,t="AI Agent"){return this.simulateParticipantJoin(e,{name:t,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":t,"lk.agent.state":"active"}})}simulateAttributeChange(e,t){let i=this.remoteParticipants.get(e);if(i){let o={...i.attributes};i.setAttributes(t),this.emit("participantAttributesChanged",t,o,i)}}simulateTrackMuted(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let r=o.getTrackPublication(t);r?.track&&(r.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",r,o))}simulateActiveSpeakersChanged(e){let t=[];for(let i of e){let o=this.remoteParticipants.get(i);o&&(o.startSpeaking(),t.push(o))}this.emit("activeSpeakersChanged",t)}simulateDataReceived(e,t,i,o){let r=this.remoteParticipants.get(t);this.emit("dataReceived",e,r,i,o)}};var ee=class{constructor(e={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=e,this.randomState=e.seed??Date.now()}updateConfig(e){this.config={...this.config,...e},e.seed!==void 0&&(this.randomState=e.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(e,t,i){let o=p("room"),r=new Date().toISOString(),n={id:o,name:e,groupId:t||p("group"),createdAt:r,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Q(o),token:C(o,"pending",r)};return this.rooms.set(o,n),this.messages.set(o,[]),n}getRoom(e){return this.rooms.get(e)}getRoomByName(e){for(let t of this.rooms.values())if(t.name===e)return t}listRooms(e=!1){let t=Array.from(this.rooms.values());return e?t.filter(i=>i.isActive):t}updateRoomConnectionState(e,t){let i=this.rooms.get(e);if(!i)return;let o=i.connectionState;return i.connectionState=t,o}endRoom(e){let t=this.rooms.get(e);if(!t||!t.isActive)return!1;t.isActive=!1,t.endedAt=new Date().toISOString(),t.connectionState="disconnected";for(let i of t.participantIds){let o=this.participants.get(i);o&&(o.isConnected=!1)}for(let i of this.agents.values())i.roomId===e&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(e){let t=this.rooms.get(e);if(!t)return!1;for(let i of t.participantIds)this.participants.delete(i);for(let[i,o]of this.tracks)o.roomId===e&&this.tracks.delete(i);for(let[i,o]of this.agents)o.roomId===e&&this.agents.delete(i);return this.messages.delete(e),this.rooms.delete(e),!0}addParticipant(e,t,i,o="user",r="standard",n=!1){let a=this.rooms.get(e);if(!a)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!a.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let l=this.participants.get(t);if(l&&l.roomId===e&&l.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`):l;let h={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:r,isLocal:n};return this.participants.set(t,h),a.participantIds.push(t),h}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let r of i.participantIds){let n=this.participants.get(r);n&&(!t||n.isConnected)&&o.push(n)}return o}updateParticipantAttributes(e,t){let i=this.participants.get(e);if(!i)return;let o={...i.attributes};return i.attributes={...i.attributes,...t},o}removeParticipant(e){let t=this.participants.get(e);if(!t)return;t.isConnected=!1;for(let o of t.trackIds)this.tracks.delete(o);t.trackIds=[];let i=this.rooms.get(t.roomId);if(i){let o=i.participantIds.indexOf(e);o!==-1&&i.participantIds.splice(o,1)}return t}publishTrack(e,t,i="unknown",o){let r=this.participants.get(e);if(!r)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!r.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let n=this.rooms.get(r.roomId);if(!n||!n.isActive)return this.createError("ROOM_ENDED","Room is not active");let a=p("track"),l={id:a,kind:t,source:i,participantIdentity:e,roomId:r.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(a,l),r.trackIds.push(a),l}getTrack(e){return this.tracks.get(e)}listTracks(e,t){let i=[];for(let o of this.tracks.values())e&&o.roomId!==e||t&&o.participantIdentity!==t||i.push(o);return i}unpublishTrack(e){let t=this.tracks.get(e);if(!t)return;let i=this.participants.get(t.participantIdentity);if(i){let o=i.trackIds.indexOf(e);o!==-1&&i.trackIds.splice(o,1)}return this.tracks.delete(e),t}setTrackMuted(e,t){let i=this.tracks.get(e);return i?(i.muted=t,!0):!1}startAgent(e,t,i={}){let o=this.rooms.get(e);if(!o)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!o.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let r=p("agent"),n={id:r,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(r,n),this.addParticipant(e,`agent_${r}`,t,"agent","agent",!1),n}getAgent(e){return this.agents.get(e)}listAgents(e){let t=[];for(let i of this.agents.values())i.roomId===e&&t.push(i);return t}stopAgent(e){let t=this.agents.get(e);if(t)return t.status="stopped",t.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${e}`),t}updateAgentStatus(e,t){let i=this.agents.get(e);return i?(i.status=t,t==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(e,t,i){let o=this.agents.get(e);if(!o)return;let r={id:p("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(r),r}addMessage(e,t,i,o="standard",r){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let a={id:p("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:r},l=this.messages.get(e)||[];return l.push(a),this.messages.set(e,l),a}getMessages(e,t){let i=this.messages.get(e)||[];return t?i.slice(-t):i}createError(e,t,i){return{code:e,message:t,details:i}}isError(e){return typeof e=="object"&&e!==null&&"code"in e&&"message"in e}reset(){this.rooms.clear(),this.participants.clear(),this.tracks.clear(),this.agents.clear(),this.messages.clear(),this.randomState=this.config.seed??Date.now()}getSnapshot(){return{rooms:new Map(this.rooms),participants:new Map(this.participants),tracks:new Map(this.tracks),agents:new Map(this.agents),messages:new Map(this.messages),config:{...this.config},eventHistory:[]}}toJSON(){return{rooms:Object.fromEntries(this.rooms),participants:Object.fromEntries(this.participants),tracks:Object.fromEntries(this.tracks),agents:Object.fromEntries(this.agents),messages:Object.fromEntries(this.messages),config:this.config,eventHistory:[],exportedAt:new Date().toISOString()}}fromJSON(e){this.rooms=new Map(Object.entries(e.rooms)),this.participants=new Map(Object.entries(e.participants)),this.tracks=new Map(Object.entries(e.tracks)),this.agents=new Map(Object.entries(e.agents)),this.messages=new Map(Object.entries(e.messages).map(([t,i])=>[t,i])),this.config=e.config}};var E=class{constructor(e={}){this.messageListeners=new Set;this.typingListeners=new Set;this.callRequestListeners=new Map;this._authToken=null;this._registeredUser=null;this.agents=new Map;this.config={latencyMs:e.latencyMs??0,strictMode:e.strictMode??!1,seed:e.seed,scenario:e.scenario,errorConfig:e.errorConfig,autoEmitEvents:e.autoEmitEvents??!0,organizationId:e.organizationId??"mock_org",apiUrl:e.apiUrl??"https://mock-livekit.local"},this.state=new ee(this.config),this.events=new Z,this.room=new I(this),this.config.scenario&&this.applyScenario(this.config.scenario)}get authToken(){return this._authToken}get registeredUser(){return this._registeredUser}getState(){return this.state}getEvents(){return this.events}updateConfig(e){this.config={...this.config,...e},this.state.updateConfig(e)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(e=>setTimeout(e,this.config.latencyMs))}applyScenario(e){switch(e){case"happy_path":this.config.errorConfig={},this.config.latencyMs=0;break;case"slow_network":this.config.latencyMs=500;break;case"network_unstable":this.config.errorConfig={errorRate:30};break;default:break}}shouldThrowError(){return this.config.errorConfig?.errorRate?this.state.random()*100<this.config.errorConfig.errorRate:!1}ensureRoom(){return this.room||(this.room=new I(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Registration failed");let r={id:p("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:C("pending",e,new Date().toISOString())};return this._authToken=r.token,this._registeredUser=r,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,r}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Agent registration failed");let i=C("agent",e,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=e,this.room.localParticipant.name=t.name,i}async quickStart(e){let{externalId:t,secret:i,metadata:o,...r}=e.user;return await this.registerUser(t,i,r,o),this.createRoom({language:e.room.language,timezone:e.room.timezone,affinity:e.room.affinity,metadata:e.room.metadata,disablePersistence:e.room.disablePersistence,contextualEvents:e.room.contextualEvents,userGroupId:e.room.userGroupId??void 0})}async createRoom(e,t={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new f("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,e.affinity?.agentId,e.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,o,this.room.localParticipant.name,"user","standard",!0),Object.keys(t).length>0&&(this.state.updateParticipantAttributes(o,t),this.room.localParticipant.setAttributes(t)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(e.affinity?.agentId||e.affinity?.agentType)&&await this.startMockAgent(i.id,{type:e.affinity?.agentType,nature:e.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(e,t,i,o){await this.simulateLatency();let r=this.state.getRoom(e);if(!r)throw new T(e);if(!r.isActive)throw new f("ROOM_ENDED",`Room ${e} has ended`);this.room.id=r.id,this.room.groupId=r.groupId,this.room.createdAt=r.createdAt,this.room.connectedAt=new Date().toISOString();let n=this.room.localParticipant.identity||"local_user",a=this.state.addParticipant(e,n,this.room.localParticipant.name,"user","standard",!0);if(P(a))throw X(a);if(o){let l={};for(let[h,m]of Object.entries(o))l[h]=String(m);this.state.updateParticipantAttributes(n,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,a),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(r.wsURL,r.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new f("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new T(t);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:e.rating,comment:e.comment,evaluatedAt:new Date().toISOString()}}async closeRoom(){await this.simulateLatency(),this.room?.id&&(this.state.endRoom(this.room.id),await this.stopLocalTracks(),this.config.autoEmitEvents&&this.events.emitRoomEnded(this.room.id))}async disconnect(){if(this.room){let e=this.room.id,t=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(t),this.config.autoEmitEvents&&e&&this.events.emitParticipantLeft(e,t),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let e=this.room?.localParticipant;e&&await Promise.all([e.setCameraEnabled(!1),e.setMicrophoneEnabled(!1),e.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){await this.simulateLatency();let t=this.state.getRoom(e);if(!t)throw new T(e);t.metadata||(t.metadata={}),t.metadata.lastReadAt=new Date().toISOString()}async getRooms(e){await this.simulateLatency();let t=this.state.listRooms();e.roomStatus==="active"?t=t.filter(a=>a.isActive):e.roomStatus==="closed"&&(t=t.filter(a=>!a.isActive)),e.ids?.length&&(t=t.filter(a=>e.ids.includes(a.id))),e.groupId&&(t=t.filter(a=>a.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(a=>({id:a.id,name:a.name,groupId:a.groupId,organizationId:this.config.organizationId,endedAt:a.endedAt??null,createdAt:a.createdAt,updatedAt:a.createdAt,status:a.isActive?"active":"ended",participants:this.state.listParticipants(a.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(a.id).length,participants:a.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new f("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(P(i))throw X(i);let o={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let r of this.messageListeners)r([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let r of this.agents.values())r.isRunning&&r.roomId===this.room.id&&this.triggerAgentResponse(r,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(P(t))throw X(t);return{items:[{id:t.id,timestamp:Date.now(),message:t.content,content:t.content,createdAt:t.createdAt}],count:1,limit:1,offset:0}}async getMessages(e){await this.simulateLatency();let t=e.roomId||this.room?.id;return t?this.state.getMessages(t,e.limit).map(o=>({id:o.id,timestamp:Date.parse(o.createdAt),message:o.content,content:o.content,createdAt:o.createdAt,from:{identity:o.participantIdentity,id:o.participantIdentity,role:"user"}})):[]}async sendMessageReport(e){await this.simulateLatency()}async deleteMessageReport(e){await this.simulateLatency()}async updateMessageReactions(e){await this.simulateLatency()}subscribeMessages(e){return this.messageListeners.add(e),()=>{this.messageListeners.delete(e)}}async sendTypingIndicator(e){if(!this.room?.id)return;let t={type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(t);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,e)}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>this.typingListeners.delete(e)}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){await this.simulateLatency()}async requestNewRoom(e){await this.simulateLatency();let t=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:e.originRoom});return{id:t.id,groupId:t.groupId,token:t.token,wsURL:t.wsURL,createdAt:t.createdAt}}async confirmRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:e}}async cancelRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:e}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(e){return()=>{}}onPresenceAgentChange(e,t){return()=>{}}async createCallRequest(e){return await this.simulateLatency(),p("call")}onNewCallRequest(e){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(e),()=>this.callRequestListeners.get("new")?.delete(e)}onCallRequestChange(e){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(e),()=>this.callRequestListeners.get("change")?.delete(e)}onCallRequestRemoved(e){return()=>{}}async acceptCallRequest(e){await this.simulateLatency()}async cancelCallRequest(e){await this.simulateLatency()}async cancelOnDisconnect(e){await this.simulateLatency()}subscribePendingRequests(e,t={}){return()=>{}}subscribeRequestChanges(e){return()=>{}}async tryAcceptRequest(e){return await this.simulateLatency(),!0}onRoomSync(e,t){return()=>{}}async clearRoomSync(e,t){await this.simulateLatency()}onNewRoomRequest(e,t){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(e,t){let i=t?.name||"AI Assistant",o=new W(p("agent"),i,{responseStrategy:t?.responseStrategy||"echo",responseDelayMs:t?.responseDelayMs||100,cannedResponses:t?.cannedResponses||[],type:t?.type,nature:t?.nature});await o.start(e),this.agents.set(o.id,o),this.customAgentHandler&&o.setCustomHandler((h,m)=>this.customAgentHandler(h,m));let r=t?.type,n=Array.isArray(r)?r:[r].filter(Boolean),a=n.includes("video"),l=n.includes("voice");return(a||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:a,withMicrophone:l||a,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(e,{id:o.id,name:o.name,roomId:e,status:"running",config:o.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),o.id}async stopMockAgent(e){let t=this.agents.get(e);if(t){let i=t.roomId;await t.stop(),this.agents.delete(e),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,e)}}setAgentResponseHandler(e){this.customAgentHandler=e;for(let t of this.agents.values())t.setCustomHandler((i,o)=>e(i,o))}async triggerAgentResponse(e,t){if(this.config.scenario!=="agent_timeout")try{let i=await e.processMessage(t);if(!i)return;let o=this.state.addMessage(e.roomId,`agent_${e.id}`,i);if(!P(o)){let r={id:o.id,timestamp:Date.now(),message:i,content:i,createdAt:o.createdAt,from:{identity:`agent_${e.id}`,name:e.name,id:e.id,role:"agent"}};for(let n of this.messageListeners)n([r]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:p("call"),guestId:e.guestId||"guest_user",name:e.name||"Guest User",createdAt:new Date().toISOString(),status:e.status||"pending",...e},i=this.callRequestListeners.get("new");if(i)for(let o of i)o(t.id,t)}simulateParticipantJoin(e,t,i="user"){if(!this.room?.id)return;let o=this.state.addParticipant(this.room.id,e,t,i,"standard",!1);!P(o)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,o)}simulateParticipantLeave(e){if(!this.room?.id)return;this.state.removeParticipant(e)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,e)}simulateIncomingMessage(e,t){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,e,t);if(P(i))return;let o={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:e,id:e,role:"user"}};for(let r of this.messageListeners)r([o]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let e=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",e),this.room.emit("connectionStateChanged","disconnected")}reset(){this.state.reset(),this.events.clearHistory(),this.messageListeners.clear(),this.typingListeners.clear(),this.callRequestListeners.clear(),this.agents.clear(),this._authToken=null,this._registeredUser=null,this.room=new I(this),ye()}seed(e){this.config.seed=e,this.state.updateConfig({seed:e})}setScenario(e){this.config.scenario=e,this.applyScenario(e)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(e){return this.events.getHistory(e)}};var z={MODE:"LIVEKIT_MODE",USE_MOCK:"USE_LIVEKIT_MOCK",MOCK_LATENCY:"MOCK_LIVEKIT_LATENCY_MS",MOCK_STRICT:"MOCK_LIVEKIT_STRICT",MOCK_SCENARIO:"MOCK_LIVEKIT_SCENARIO",MOCK_SEED:"MOCK_LIVEKIT_SEED",API_URL:"LIVEKIT_API_URL",AUTH_URL:"LIVEKIT_AUTH_URL",ORG_ID:"LIVEKIT_ORGANIZATION_ID"};function xe(){let s=O(z.MODE);if(s==="mock"||s==="real")return s;let e=O(z.USE_MOCK);return e==="true"||e==="1"||Bi()?"mock":"real"}function Vi(){let s={},e=O(z.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=O(z.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=O(z.MOCK_SCENARIO);i&&(s.scenario=i);let o=O(z.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function Ji(){let s={},e=O(z.API_URL);e&&(s.apiUrl=e);let t=O(z.AUTH_URL);t&&(s.authUrl=t);let i=O(z.ORG_ID);return i&&(s.organizationId=i),s}function O(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof import.meta<"u"&&import.meta.env)return import.meta.env[`VITE_${s}`]||import.meta.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function Bi(){return!!(typeof process<"u"&&process.env&&(process.env.NODE_ENV==="test"||process.env.VITEST||process.env.JEST_WORKER_ID)||typeof globalThis.__vitest_index__<"u")}var $=class s{static create(e){if((e.mode??xe())==="mock"){let i={...Vi(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new E(i)}if(!e.organizationId||!e.apiUrl)throw new Error("ConversationService requires organizationId and apiUrl. Provide them in options or set LIVEKIT_ORGANIZATION_ID and LIVEKIT_API_URL environment variables.");return new Me(e)}static createFromEnv(e){let t=e?.mode??xe(),i=Ji();return s.create({...i,...e,mode:t})}static createMock(e){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new E({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return xe()}static isMockMode(){return xe()==="mock"}static isMockService(e){return e instanceof E}};function Pt(s){return $.createFromEnv(s)}function _e(s){return $.createMock(s)}function Ae(s){let e=s?.id??p("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:p("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:Q(e),token:C(e,"local_user",t),...s}}function Ce(s="local_user",e){let t=Ae(e);t.participantIds.push(s);let i={identity:s,name:"Local User",roomId:t.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:t,localParticipant:i}}function $e(s){let e=Ae(s),t=new Date().toISOString(),i={identity:"user_1",name:"User One",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},o={identity:"user_2",name:"User Two",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return e.participantIds.push(i.identity,o.identity),{room:e,participant1:i,participant2:o}}function Te(s,e){let{room:t,localParticipant:i}=Ce("local_user",e),o=new Date().toISOString(),r=p("agent"),n={id:r,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},a={identity:`agent_${r}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(a.identity),{room:t,localParticipant:i,agent:n,agentParticipant:a}}function Rt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Te(void 0,s),r={id:p("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(r.id),{room:e,localParticipant:t,agent:i,dataTrack:r}}function It(s){let{room:e,localParticipant:t}=Ce("local_user",s),i=new Date().toISOString(),o={id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},r={id:p("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,r.id),{room:e,participant:t,audioTrack:o,videoTrack:r}}function qe(s,e){let t=e?.identity??p("participant");return{identity:t,name:`Participant ${t}`,roomId:s,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...e}}function Et(s,e){let t=[];for(let i=0;i<e;i++)t.push(qe(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function Pe(s,e){return{id:e?.id??p("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function zt(s,e){return Pe(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Ot(s,e){return Pe(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Lt(s,e,t){return{id:p("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function Ne(s,e){return e.map((t,i)=>({id:p("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function ue(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Dt(s){return ue({strictMode:!0,...s})}function Ft(s,e){return ue({latencyMs:s,...e})}function Ut(s,e){return ue({seed:s,...e})}function $t(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Te(),o=Ne(s.id,[{identity:e.identity,content:"Hello, I need help"},{identity:i.identity,content:"Hi! How can I assist you today?"},{identity:e.identity,content:"I have a question about my order"},{identity:i.identity,content:"Of course! Please provide your order number."}]);return{room:s,user:e,agent:t,agentParticipant:i,messages:o}}function qt(){let{room:s,participant1:e,participant2:t}=$e(),i=new Date().toISOString(),o=[{id:p("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:p("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1}];return e.trackIds.push(o[0].id,o[1].id),t.trackIds.push(o[2].id,o[3].id),{room:s,participant1:e,participant2:t,tracks:o}}var me=class{constructor(e,t,i,o,r){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:r,timestamp:Date.now()},this.participantIdentity=t,this.topic=r,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((n,a)=>n+a.length,0)}get isComplete(){return this._complete}async*[Symbol.asyncIterator](){for(let e of this.chunks)yield e;this._complete=!0}async read(){return this.index>=this.chunks.length?(this._complete=!0,null):this.chunks[this.index++]}async readAll(){let e=this.chunks.slice(this.index).join("");return this.index=this.chunks.length,this._complete=!0,e}cancel(){this._complete=!0}};var q=null;function b(s){return q||(q=_e({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),q}function He(){q&&q.reset()}async function Nt(){q&&(await q.destroy(),q=null)}function Ht(s={}){return(e,t)=>{He();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=b({organizationId:s.organizationId,latencyMs:s.latencyMs??50,scenario:s.scenario?i[s.scenario]:void 0});return(async()=>{try{if(s.autoRegisterUser&&await o.registerUser(s.autoRegisterUser.identity,s.autoRegisterUser.secret||"storybook_secret",{name:s.autoRegisterUser.name||"Storybook User"}),s.autoCreateRoom){if(await o.createRoom({language:s.autoCreateRoom.language||"en",timezone:s.autoCreateRoom.timezone||"UTC"}),s.seedMessages)for(let r of s.seedMessages)o.simulateIncomingMessage(r.from,r.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(r){console.error("[Storybook Mock] Setup error:",r)}})(),window.__mockConversationService=o,e()}}function Vt(s){return $.isMockService(s)}var Jt={basicChat:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo"}},aiAssistant:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",cannedResponses:["Hello! How can I help you today?","I understand. Let me look into that for you.","Is there anything else you'd like to know?","Thank you for your patience!"]}},videoCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",type:["text","video"],nature:"ai",name:"Video Agent",cannedResponses:["I can see you! The video quality looks great.","Let me share my screen to show you what I mean.","Is the audio coming through clearly?"]},simulateVideo:!0},multiParticipantCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",type:["text","video"],name:"Video Agent"},simulateVideo:!0},multiTurnConversation:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"sequential",cannedResponses:["Welcome! I'm your virtual assistant.","I can help you with product information, orders, and support.","What would you like to know?"]},seedMessages:[{from:"agent",content:"Welcome! I'm your virtual assistant."}]},slowNetwork:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",responseDelayMs:2e3},latencyMs:500,scenario:"slow_network"},unreliable:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},scenario:"unreliable"}};function Bt(s){return()=>b(s)}var Ve={async receiveMessage(s,e){b().simulateIncomingMessage(s,e)},simulateJoin(s,e){b().simulateParticipantJoin(s,e)},simulateLeave(s){b().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=b().room;o&&await o.simulateParticipantJoin(s,{name:e||s,kind:"standard",withCamera:t?.withCamera??!0,withMicrophone:t?.withMicrophone??!0})},async simulateVideoAgent(s,e){let i=b().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=b().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=b().room;if(i)for(let o=0;o<Math.min(s,e.length);o++)await i.simulateParticipantJoin(`participant_${o+1}`,{name:e[o],kind:"standard",withCamera:!0,withMicrophone:!0}),await new Promise(r=>setTimeout(r,100))},clearParticipants(){let e=b().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){b().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await b().simulateDisconnect()},getEventHistory(){return b().getEventHistory()},exportState(){return b().exportState()},getRoom(){return b().room}};typeof window<"u"&&(window.MockServiceActions=Ve);var Je={OpenWidget:"openWidget",InitialStep:"initialStep"};var Be="ol",Kt={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},Wi=new Set(Object.values(Je)),Ke=class s{constructor(){this.params=s.parse()}get hasParams(){return Object.keys(this.params).length>0}getParams(){return{...this.params}}matchesInstallation(e){return this.params.installationId?this.params.installationId===e:!0}cleanUrl(){let e=new URL(window.location.href),t=!1;for(let i of Array.from(e.searchParams.keys()))i.startsWith(Be)&&i.substring(Be.length)in Kt&&(e.searchParams.delete(i),t=!0);t&&window.history.replaceState(window.history.state,"",e.toString())}static parse(){let e={},t=new URLSearchParams(window.location.search);for(let[i,o]of Object.entries(Kt)){let r=`${Be}${i}`,n=t.get(r);if(n!==null){if(o==="action"){Wi.has(n)&&(e.action=n);continue}e[o]=n}}return e}};export{ae as AgentNotFoundError,bi as Asset,$ as ConversationServiceFactory,Je as DeepLinkAction,Ke as DeepLinkService,de as InvalidOperationError,E as MockConversationService,Z as MockEventEmitter,f as MockLiveKitError,V as MockLocalParticipant,R as MockParticipant,I as MockRoom,Ve as MockServiceActions,ee as MockState,me as MockTextStreamReader,x as MockTrack,M as MockTrackPublication,ce as NetworkError,k as OSBAsset,v as OSBSideBar,_ as OSBUpload,se as ParticipantAlreadyJoinedError,re as ParticipantNotFoundError,oe as RoomEndedError,T as RoomNotFoundError,We as SYNTHETIC_MEDIA_PRESETS,ji as SideBar,Jt as StorybookScenarios,pe as TimeoutError,ne as TrackNotFoundError,le as UnauthorizedError,Mi as Upload,Pe as createAgentFixture,zt as createAgentWithCannedResponses,$t as createChatScenario,Ne as createConversationFixture,Pt as createConversationService,ue as createDefaultConfig,Ae as createDefaultRoomFixture,Ut as createDeterministicConfig,X as createErrorFromMockError,Ft as createLatencyConfig,Lt as createMessageFixture,_e as createMockConversationService,Bt as createMockServiceFactory,Et as createParticipantBatch,qe as createParticipantFixture,Te as createRoomWithAgent,Rt as createRoomWithAgentAndDataTrack,Ce as createRoomWithLocalParticipant,It as createRoomWithMediaTracks,$e as createRoomWithTwoParticipants,Ot as createSequentialAgent,Dt as createStrictConfig,Ye as createSyntheticAudioTrack,Qe as createSyntheticMedia,Xe as createSyntheticMediaFromPreset,Ge as createSyntheticVideoTrack,qt as createVideoCallScenario,dt as decodeMockToken,Nt as destroyStorybookMockService,vt as generateMockApiResponseId,ht as generateMockExternalId,p as generateMockId,ft as generateMockIdBatch,gt as generateMockMessageId,pt as generateMockParticipantIdentity,ut as generateMockRoomName,C as generateMockToken,mt as generateMockTrackSid,Q as generateMockWsUrl,ct as generateSeededMockId,b as getStorybookMockService,Vt as isMockConversationService,P as isMockError,bt as isMockLiveKitError,ye as resetIdCounter,He as resetStorybookMockService,lt as setIdCounter,Ht as withMockConversationService};
4678
- ,withCamera:!0,withMicrophone:!0}),await new Promise(n=>setTimeout(n,100))},clearParticipants(){let e=b().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){b().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await b().simulateDisconnect()},getEventHistory(){return b().getEventHistory()},exportState(){return b().exportState()},getRoom(){return b().room}};typeof window<"u"&&(window.MockServiceActions=st);var nt={OpenWidget:"openWidget",InitialStep:"initialStep"};var rt="ol",ri={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},vo=new Set(Object.values(nt)),at=class s{constructor(){this.params=s.parse()}get hasParams(){return Object.keys(this.params).length>0}getParams(){return{...this.params}}matchesInstallation(e){return this.params.installationId?this.params.installationId===e:!0}cleanUrl(){let e=new URL(window.location.href),t=!1;for(let i of Array.from(e.searchParams.keys()))i.startsWith(rt)&&i.substring(rt.length)in ri&&(e.searchParams.delete(i),t=!0);t&&window.history.replaceState(window.history.state,"",e.toString())}static parse(){let e={},t=new URLSearchParams(window.location.search);for(let[i,o]of Object.entries(ri)){let n=`${rt}${i}`,r=t.get(n);if(r!==null){if(o==="action"){vo.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{be as AgentNotFoundError,zi as Asset,B as ConversationServiceFactory,nt as DeepLinkAction,at as DeepLinkService,je as InvalidOperationError,L as MockConversationService,le as MockEventEmitter,f as MockLiveKitError,X as MockLocalParticipant,O as MockParticipant,z as MockRoom,st as MockServiceActions,de as MockState,Me as MockTextStreamReader,A as MockTrack,x as MockTrackPublication,ke as NetworkError,k as OSBAsset,h as OSBSideBar,T as OSBUpload,ve as ParticipantAlreadyJoinedError,he as ParticipantNotFoundError,ge as RoomEndedError,I as RoomNotFoundError,Ue as SYNTHETIC_MEDIA_PRESETS,Fi as SideBar,si as StorybookScenarios,we as TimeoutError,fe as TrackNotFoundError,ye as UnauthorizedError,qi as Upload,Je as createAgentFixture,Kt as createAgentWithCannedResponses,Zt as createChatScenario,it as createConversationFixture,Ht as createConversationService,Se as createDefaultConfig,Ne as createDefaultRoomFixture,Xt as createDeterministicConfig,ae as createErrorFromMockError,Wt as createLatencyConfig,Yt as createMessageFixture,qe as createMockConversationService,ni as createMockServiceFactory,Bt as createParticipantBatch,tt as createParticipantFixture,Ve as createRoomWithAgent,Vt as createRoomWithAgentAndDataTrack,He as createRoomWithLocalParticipant,Jt as createRoomWithMediaTracks,et as createRoomWithTwoParticipants,Gt as createSequentialAgent,Qt as createStrictConfig,De as createSyntheticAudioTrack,Fe as createSyntheticMedia,Ze as createSyntheticMediaFromPreset,Le as createSyntheticVideoTrack,ei as createVideoCallScenario,St as decodeMockToken,ti as destroyStorybookMockService,Ct as generateMockApiResponseId,Tt as generateMockExternalId,m as generateMockId,Pt as generateMockIdBatch,At as generateMockMessageId,Mt as generateMockParticipantIdentity,xt as generateMockRoomName,R as generateMockToken,_t as generateMockTrackSid,ne as generateMockWsUrl,wt as generateSeededMockId,b as getStorybookMockService,oi as isMockConversationService,E as isMockError,Rt as isMockLiveKitError,Pe as resetIdCounter,ot as resetStorybookMockService,jt as setIdCounter,ii as withMockConversationService};
4770
+ `}};h.styles=[kt],g([Pe({type:Object})],h.prototype,"config",2),g([Pe({type:Object})],h.prototype,"searchConfig",2),g([Pe({type:String})],h.prototype,"selectedCategory",2),g([Pe({type:Boolean})],h.prototype,"disabled",2),g([S()],h.prototype,"multimediaService",2),g([S()],h.prototype,"productService",2),g([S()],h.prototype,"faqsService",2),g([S()],h.prototype,"fileService",2),g([S()],h.prototype,"isUploading",2),g([S()],h.prototype,"uploadProgress",2),g([S()],h.prototype,"categoryStates",2),g([S()],h.prototype,"searchTimeout",2),g([S()],h.prototype,"unifiedSearchQuery",2),g([S()],h.prototype,"extraFilters",2),g([S()],h.prototype,"activeFilters",2),g([S()],h.prototype,"loadingFilters",2),h=g([N("osb-side-bar")],h);import{createComponent as Ei}from"@lit/react";import zi from"react";var Oi=Ei({tagName:"osb-asset",elementClass:y,react:zi,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as Li}from"@lit/react";import Di from"react";var Fi=Li({tagName:"osb-side-bar",elementClass:h,react:Di,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as Ui}from"@lit/react";import $i from"react";var qi=Ui({tagName:"osb-upload",elementClass:T,react:$i,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var w=0;function Re(){w=0}function jt(s){w=s}function m(s){return w++,`mock_${s}_${w}_${Date.now().toString(36)}`}function wt(s,e){return`mock_${s}_${e.toString(36)}`}function R(s,e,t){let i=t||new Date().toISOString(),o=typeof btoa=="function"?btoa(i).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,""):i.replace(/[^a-zA-Z0-9]/g,"");return`mock_token_${s}_${e}_${o}`}function St(s){if(!s.startsWith("mock_token_"))return null;let e=s.replace("mock_token_","").split("_");if(e.length<3)return null;let t=e[e.length-1],i=e[e.length-2],o=e.slice(0,-2).join("_");try{let a=t.replace(/-/g,"+").replace(/_/g,"/"),r=typeof atob=="function"?atob(a):t;return{roomId:o,identity:i,timestamp:r}}catch{return null}}function ae(s){return`wss://mock-livekit.local/room/${s}`}function _t(s="participant",e){let t=e??w++;return`${s}_${t}_${Date.now().toString(36)}`}function xt(s="room"){return w++,`${s}_${w}_${Date.now().toString(36)}`}function Mt(s,e){return w++,`TR_${s.toUpperCase()}_${e}_${w}`}function At(){return w++,`msg_${w}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function Ct(s){return w++,`api_${s}_${w}_${Date.now().toString(36)}`}function Tt(){return[Math.random().toString(16).slice(2,10),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,6),Math.random().toString(16).slice(2,14)].join("-")}function Pt(s,e){let t=[];for(let i=0;i<e;i++)t.push(m(s));return t}var Ie={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function Ee(s,e,t=[],i=0,o=Math.random){switch(s){case"echo":return{response:`Echo: ${e}`,nextIndex:i};case"canned":return{response:t[0]||"Default response",nextIndex:i};case"sequential":return{response:t[i]||"No more responses",nextIndex:(i+1)%Math.max(1,t.length)};case"random":{if(t.length===0)return{response:"Random response",nextIndex:i};let a=Math.floor(o()*t.length);return{response:t[a],nextIndex:i}}case"silent":return{response:"",nextIndex:i};case"error":throw new Error("Agent error");case"custom":return{response:"",nextIndex:i};default:return{response:"Default agent response",nextIndex:i}}}var re=class{constructor(e,t,i={}){this._state="idle";this.conversationHistory=[];this.responseIndex=0;this.eventListeners=new Set;this.randomFn=Math.random;this.messageCount=0;this.id=e,this.name=t,this.config={...Ie,...i}}get state(){return this._state}get isRunning(){return this._state==="running"}get history(){return[...this.conversationHistory]}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setStrategy(e){this.config.responseStrategy=e}setCannedResponses(e){this.config.cannedResponses=e,this.responseIndex=0}setCustomHandler(e){this.customHandler=e,this.config.responseStrategy="custom"}setRandomFunction(e){this.randomFn=e}async start(e){this._state!=="running"&&(this._state="starting",this.roomId=e,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0,await this.delay(50),this._state="running",this.emitEvent({type:"started",agentId:this.id}))}async stop(){this._state==="running"&&(this._state="stopping",await this.delay(50),this._state="stopped",this.roomId=void 0,this.emitEvent({type:"stopped",agentId:this.id}))}async processMessage(e){if(this._state!=="running")throw new Error("Agent is not running");if(this.config.maxMessages&&this.messageCount>=this.config.maxMessages)return await this.stop(),"";this.addMessage(e,"user"),this.emitEvent({type:"message_received",agentId:this.id,message:e});let t;try{if(this.config.responseStrategy==="custom"&&this.customHandler)t=await this.customHandler(this.id,e,this.conversationHistory);else{if(this.config.responseStrategy==="silent")return"";if(this.config.responseStrategy==="error"){let i=new Error("Agent error");throw this.emitEvent({type:"error",agentId:this.id,error:i}),i}else{let i=Ee(this.config.responseStrategy,e,this.config.cannedResponses,this.responseIndex,this.randomFn);t=i.response,this.responseIndex=i.nextIndex}}}catch(i){throw this._state="error",i}return this.config.simulateTyping&&this.config.typingDelayPerChar&&await this.delay(t.length*this.config.typingDelayPerChar),this.config.responseDelayMs&&await this.delay(this.config.responseDelayMs),this.addMessage(t,"agent"),this.messageCount++,this.emitEvent({type:"response_sent",agentId:this.id,response:t}),t}addEventListener(e){return this.eventListeners.add(e),()=>this.eventListeners.delete(e)}clearHistory(){this.conversationHistory=[],this.responseIndex=0}reset(){this._state="idle",this.roomId=void 0,this.conversationHistory=[],this.responseIndex=0,this.messageCount=0}toJSON(){return{id:this.id,name:this.name,state:this._state,roomId:this.roomId,config:this.config,historyLength:this.conversationHistory.length,messageCount:this.messageCount}}addMessage(e,t){let i={id:m("msg"),content:e,role:t,timestamp:Date.now()};return this.conversationHistory.push(i),i}emitEvent(e){for(let t of this.eventListeners)try{t(e)}catch(i){console.error("Error in agent event listener:",i)}}delay(e){return new Promise(t=>setTimeout(t,e))}};var f=class s extends Error{constructor(e,t,i){super(t),this.name="MockLiveKitError",this.code=e,this.details=i,typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}toMockError(){return{code:this.code,message:this.message,details:this.details}}static fromMockError(e){return new s(e.code,e.message,e.details)}},I=class extends f{constructor(e){super("ROOM_NOT_FOUND",`Room not found: ${e}`,{roomId:e}),this.name="RoomNotFoundError"}},ge=class extends f{constructor(e){super("ROOM_ENDED",`Room has ended: ${e}`,{roomId:e}),this.name="RoomEndedError"}},ve=class extends f{constructor(e,t){super("PARTICIPANT_ALREADY_JOINED",`Participant ${e} is already in room ${t}`,{identity:e,roomId:t}),this.name="ParticipantAlreadyJoinedError"}},he=class extends f{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},fe=class extends f{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},be=class extends f{constructor(e){super("AGENT_NOT_FOUND",`Agent not found: ${e}`,{agentId:e}),this.name="AgentNotFoundError"}},ye=class extends f{constructor(e="Unauthorized"){super("UNAUTHORIZED",e),this.name="UnauthorizedError"}},ke=class extends f{constructor(e="Network error occurred"){super("NETWORK_ERROR",e),this.name="NetworkError"}},je=class extends f{constructor(e,t){super("INVALID_OPERATION",e,t),this.name="InvalidOperationError"}},we=class extends f{constructor(e,t){super("TIMEOUT",`Operation timed out: ${e}`,{operation:e,timeoutMs:t}),this.name="TimeoutError"}};function ne(s){switch(s.code){case"ROOM_NOT_FOUND":return new I(s.details?.roomId??"unknown");case"ROOM_ENDED":return new ge(s.details?.roomId??"unknown");case"PARTICIPANT_ALREADY_JOINED":return new ve(s.details?.identity??"unknown",s.details?.roomId??"unknown");case"PARTICIPANT_NOT_FOUND":return new he(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new fe(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new be(s.details?.agentId??"unknown");case"UNAUTHORIZED":return new ye(s.message);case"NETWORK_ERROR":return new ke(s.message);case"INVALID_OPERATION":return new je(s.message,s.details);case"TIMEOUT":return new we(s.details?.operation??"unknown",s.details?.timeoutMs??0);default:return f.fromMockError(s)}}function E(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function Rt(s){return s instanceof f}var le=class{constructor(){this.listeners={};this.wildcardListeners=new Set;this.eventHistory=[];this.maxHistorySize=1e3;this.recordHistory=!0}setMaxHistorySize(e){this.maxHistorySize=e,this.trimHistory()}setRecordHistory(e){this.recordHistory=e}on(e,t){return this.listeners[e]||(this.listeners[e]=new Set),this.listeners[e].add(t),()=>{this.off(e,t)}}once(e,t){let i=o=>{this.off(e,i),t(o)};return this.on(e,i)}off(e,t){this.listeners[e]?.delete(t)}onAny(e){return this.wildcardListeners.add(e),()=>{this.wildcardListeners.delete(e)}}offAny(e){this.wildcardListeners.delete(e)}removeAllListeners(e){e?delete this.listeners[e]:(this.listeners={},this.wildcardListeners.clear())}emit(e){this.recordHistory&&(this.eventHistory.push(e),this.trimHistory());let t=this.listeners[e.type];if(t)for(let i of t)try{i(e)}catch(o){console.error(`Error in mock event listener for ${e.type}:`,o)}for(let i of this.wildcardListeners)try{i(e)}catch(o){console.error("Error in mock wildcard event listener:",o)}}trimHistory(){this.eventHistory.length>this.maxHistorySize&&(this.eventHistory=this.eventHistory.slice(-this.maxHistorySize))}emitRoomCreated(e){let t={type:"roomCreated",timestamp:new Date().toISOString(),roomId:e.id,room:e};this.emit(t)}emitRoomEnded(e){let t={type:"roomEnded",timestamp:new Date().toISOString(),roomId:e};this.emit(t)}emitRoomConnectionStateChanged(e,t,i){let o={type:"roomConnectionStateChanged",timestamp:new Date().toISOString(),roomId:e,state:t,previousState:i};this.emit(o)}emitParticipantJoined(e,t){let i={type:"participantJoined",timestamp:new Date().toISOString(),roomId:e,participant:t};this.emit(i)}emitParticipantLeft(e,t){let i={type:"participantLeft",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t};this.emit(i)}emitParticipantAttributesChanged(e,t,i,o){let a={type:"participantAttributesChanged",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,attributes:i,previousAttributes:o};this.emit(a)}emitTrackPublished(e,t,i){let o={type:"trackPublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,track:i};this.emit(o)}emitTrackUnpublished(e,t,i){let o={type:"trackUnpublished",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,trackId:i};this.emit(o)}emitTrackMuted(e,t){let i={type:"trackMuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitTrackUnmuted(e,t){let i={type:"trackUnmuted",timestamp:new Date().toISOString(),roomId:e,trackId:t};this.emit(i)}emitMessageReceived(e,t){let i={type:"messageReceived",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitMessageSent(e,t){let i={type:"messageSent",timestamp:new Date().toISOString(),roomId:e,message:t};this.emit(i)}emitTypingIndicator(e,t,i){let o={type:"typingIndicator",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,isTyping:i};this.emit(o)}emitAgentStarted(e,t){let i={type:"agentStarted",timestamp:new Date().toISOString(),roomId:e,agent:t};this.emit(i)}emitAgentStopped(e,t){let i={type:"agentStopped",timestamp:new Date().toISOString(),roomId:e,agentId:t};this.emit(i)}emitAgentMessage(e,t,i){let o={type:"agentMessage",timestamp:new Date().toISOString(),roomId:e,agentId:t,message:i};this.emit(o)}emitDataReceived(e,t,i,o){let a={type:"dataReceived",timestamp:new Date().toISOString(),roomId:e,participantIdentity:t,data:i,topic:o};this.emit(a)}emitError(e,t){let i={type:"error",timestamp:new Date().toISOString(),roomId:t,error:e};this.emit(i)}getHistory(e){return e?this.eventHistory.filter(t=>t.type===e):[...this.eventHistory]}getLastEvents(e,t){return(t?this.eventHistory.filter(o=>o.type===t):this.eventHistory).slice(-e)}clearHistory(){this.eventHistory=[]}listenerCount(e){return(this.listeners[e]?.size??0)+this.wildcardListeners.size}};import{Session as Qe}from"@onlive.ai/tracker/session";import{Room as ao,RoomEvent as We}from"livekit-client";import{initializeApp as Hi}from"firebase/app";import{query as V,endAt as Vi,equalTo as Ji,get as It,getDatabase as Bi,limitToFirst as Ki,limitToLast as Gi,onChildAdded as Et,onChildChanged as zt,onChildRemoved as Ot,onDisconnect as Lt,onValue as Dt,orderByChild as Yi,orderByKey as Qi,orderByValue as Wi,push as Xi,ref as Zi,remove as eo,runTransaction as to,set as Ft,startAt as io,update as oo}from"firebase/database";var ze=class{constructor(e){this.onChildChanged=(e,t)=>zt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>Ot(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>zt(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>Ot(e,i=>t(i.key||"",i.val(),i));let t=Hi(e.config);this.db=Bi(t)}ref(e){return Zi(this.db,e)}async getOnce(e){let t=await It(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await It(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return Dt(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return Dt(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return Et(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return Et(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return Ft(this.ref(e),t)}update(e,t){return oo(this.ref(e),t)}remove(e){return eo(this.ref(e))}async push(e,t){let i=Xi(this.ref(e));return await Ft(i,t),i.key}onDisconnectUpdate(e,t){return Lt(this.ref(e)).update(t)}cancelOnDisconnect(e){return Lt(this.ref(e)).cancel()}transaction(e,t){return to(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=V(i,Yi(t.childKey))),t.orderBy==="key"&&(i=V(i,Qi())),t.orderBy==="value"&&(i=V(i,Wi())),t.startAt!=null&&(i=V(i,io(t.startAt))),t.endAt!=null&&(i=V(i,Vi(t.endAt))),t.equalTo!=null&&(i=V(i,Ji(t.equalTo))),t.limitFirst!=null&&(i=V(i,Ki(t.limitFirst))),t.limitLast!=null&&(i=V(i,Gi(t.limitLast))),i}};var Ut=s=>{let e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",t="";for(let i=0;i<s;i++)t+=e.charAt(Math.floor(Math.random()*e.length));return t};import{Generator as so}from"@onlive.ai/tracker/generator";import{Session as _}from"@onlive.ai/tracker/session";var J="chatbot",Oe=class s{static hasSession(){return!!_.getCookie(J)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(_.id=so.uuid(),_.deleteCookie(J));let t=_.getCookie(J);return t&&s.isValidSession(t,e.role)?t:s.createSession(e.role)}static createSession(e){let t={externalId:e==="agent"?String(s.getUserId()||_.id):_.id,secret:Ut(16),createdAt:new Date().toISOString()};return _.setCookie(J,t,3600*24*365),t}static isValidSession(e,t){if(t==="guest")return!0;let i=s.getUserId();return!!(i&&String(i)===e.externalId)}static getUserId(){return _.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=_.getCookie(J);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};_.setCookie(J,i,3600*24*365)}}static hasRegistrationData(){return!!_.getCookie(J)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return _.getCookie(J)?.registrationData}};var $t="lk.chat",qt="lk.transcription",Nt="lk.events",Ye="typing-indicator";var Xe=class extends ao{},Le=class{constructor(e){this.listeners=new Set;this.typingListeners=new Set;this.transcriptionMap=new Map;this.abortControllers={register:new AbortController,createRoom:new AbortController,quickStart:new AbortController,closeRoom:new AbortController,evaluateRoom:new AbortController,persistMessage:new AbortController,sendMessageReport:new AbortController,deleteMessageReport:new AbortController,updateMessageReactions:new AbortController,getRooms:new AbortController};this.authToken=null;this.firebaseUnsubscribers={};this.seenRequestIds=new Set;this.lastSnapshotById=new Map;this.handleIncomingMessage=async(e,t)=>{let i=e?.info?.id,o=e.info?.attributes?.["lk.segment_id"];o&&(this.transcriptionMap.has(o)?i=this.transcriptionMap.get(o)||"":this.transcriptionMap.set(o,i));let a=t?.identity?this.room.getParticipantByIdentity(t.identity):void 0,r="";for await(let n of e)r+=n,this.emitMessage({id:i,timestamp:Date.now(),message:r,assets:JSON.parse(e.info?.attributes?.assets||"[]"),from:a});this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:r,externalId:i,identity:a?.identity,kind:a?.kind})};this.emitMessage=e=>{for(let t of this.listeners)t([e])};this.handleDataReceived=(e,t,i,o)=>{if(o===Ye)try{let a=JSON.parse(new TextDecoder().decode(e));if(a.type==="typing"&&a.participantId!==this.room.localParticipant.identity){let r={type:"typing",isTyping:a.isTyping,timestamp:a.timestamp,participantId:a.participantId};this.emitTypingIndicator(r)}}catch(a){console.warn("Failed to parse typing indicator:",a)}};this.emitTypingIndicator=e=>{for(let t of this.typingListeners)t(e)};this.apiUrl=e.apiUrl,this.authUrl=e.authUrl,this.organizationId=e.organizationId,this.channelTopic=e.channelTopic||$t,this.transcriptionTopic=e.transcriptionTopic||qt,this.eventsTopic=e.eventsTopic||Nt,this.messagePersistence=e.messagePersistence||"disabled",this.room=this.createRoomInstance(),e.firebaseConfig&&this.initializeFirebase(e.firebaseConfig)}createRoomInstance(){return new Xe({adaptiveStream:!0,dynacast:!0})}ensureRoom(){return this.room||(this.room=this.createRoomInstance()),this.room}initializeFirebase(e){this.firebaseApi=new ze({config:e}),this.presencePath=`orgs/${this.organizationId}/presence`,this.callsPath=`orgs/${this.organizationId}/calls`}initializeRoomHandlers(){try{this.room.unregisterTextStreamHandler(this.channelTopic),this.room.unregisterTextStreamHandler(this.transcriptionTopic)}catch{}this.room.off(We.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(We.DataReceived,this.handleDataReceived)}async registerUser(e,t,i,o){let a=await v(`${this.apiUrl}/users/register`,{method:"POST",body:JSON.stringify({externalId:e,secret:t,...i,metadata:o}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.register.signal});if(!a.token)throw new Error("Registration failed: No token received from server");return this.authToken=a.token,a}async registerAgent(e,t){let i=Qe.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;Qe.deleteCookie("livekit-agent-token")}let o=await v(`${this.authUrl}/admins/register`,{method:"POST",body:JSON.stringify({externalId:e,name:t.name,email:t.email,avatar:t.avatar}),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.register.signal});return Qe.setCookie("livekit-agent-token",o.token,1440*60),this.authToken=o.token,o.token}decodeJwtPayload(e){try{let t=e.split(".");if(t.length!==3)return null;let i=t[1],o=atob(i.replace(/-/g,"+").replace(/_/g,"/"));return JSON.parse(o)}catch{return null}}async quickStart(e){console.log("[ConversationService] Starting quickStart with options:",e),this.room=this.ensureRoom();let t=await v(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(e),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!t.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=t.user.token;let i={id:t.room.id,groupId:t.room.groupId||"",token:t.room.token,wsURL:t.room.wsURL,createdAt:t.room.createdAt||new Date().toISOString(),affinity:t.room.affinity};return this.setRoomMetadata(i),this.setupParticipantAttributesHandler(),this.room.connect(i.wsURL,i.token),this.initializeRoomHandlers(),this.room}async createRoom(e){if(!this.authToken)throw new Error("Cannot create room: No authentication token. Call registerUser() first.");this.room=this.ensureRoom();let{initialMessage:t,...i}=e,o=await v(`${this.apiUrl}/rooms`,{method:"POST",body:JSON.stringify(i),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.token).then(async()=>{if(t)try{await this.sendMessage(t)}catch(a){console.error("[ConversationService] Failed to send initial message:",a)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,o){let a=await v(`${this.apiUrl}/rooms/${e}/join`,{method:"POST",body:JSON.stringify({timezone:t,language:i,...o??{}}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal});return this.setRoomMetadata(a),this.setupParticipantAttributesHandler(),await this.room.connect(a.wsURL,a.token),this.initializeRoomHandlers(),this.room}setRoomMetadata(e){this.room.id=e.id,this.room.groupId=e.groupId,this.room.createdAt=e.createdAt,this.room.connectedAt=new Date().toISOString(),this.room.affinity=e.affinity}setupParticipantAttributesHandler(){this.room.on(We.ParticipantAttributesChanged,e=>{e.identity===this.room.localParticipant.identity&&Oe.updateSessionWithRegistrationData(e.attributes)})}async evaluateRoom(e){let t=e.roomId||this.room?.id;if(!t)throw new Error("Room ID is required for evaluation");return v(`${this.apiUrl}/rooms/${t}/evaluate`,{method:"POST",body:JSON.stringify({rating:e.rating,comment:e.comment}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.evaluateRoom.signal})}async closeRoom(){this.room&&(await v(`${this.apiUrl}/rooms/${this.room.id}/close`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.closeRoom.signal}),await this.stopAndUnpublishLocalTracks())}async disconnect(){this.room&&(await this.stopAndUnpublishLocalTracks(),this.room.removeAllListeners(),await this.room.disconnect(),this.room=null)}async stopAndUnpublishLocalTracks(){let e=this.room?.localParticipant;if(!e)return;await Promise.allSettled([e.setMicrophoneEnabled(!1),e.setCameraEnabled(!1),e.setScreenShareEnabled(!1)]);let t=Array.from(e.trackPublications.values());await Promise.all(t.map(async i=>{let o=i.track;if(o)try{await e.unpublishTrack(o,!0)}catch{o.stop()}}))}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){return v(`${this.apiUrl}/rooms/${e}/read`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getRooms(e){let t=new URLSearchParams;return e.page&&t.append("page",e.page.toString()),e.limit&&t.append("limit",e.limit.toString()),e.offset&&t.append("offset",e.offset.toString()),e.orderBy&&t.append("orderBy",e.orderBy),e.orderDir&&t.append("orderDir",e.orderDir),e.ids?.length&&t.append("ids",e.ids.join(",")),e.with?.length&&t.append("with",e.with.join(",")),e.count?.length&&t.append("count",e.count.join(",")),e.latestOnly&&t.append("latestOnly",e.latestOnly.toString()),e.includeUnread&&t.append("includeUnread",e.includeUnread.toString()),e.roomStatus&&t.append("roomStatus",e.roomStatus),e.archived&&t.append("archived",e.archived.toString()),e.participantIds?.length&&t.append("participantIds",e.participantIds.join(",")),e.participantExternalIds?.length&&t.append("participantExternalIds",e.participantExternalIds.join(",")),e.groupId&&t.append("groupId",e.groupId),e.hasMessages!==void 0&&t.append("hasMessages",e.hasMessages.toString()),v(`${this.authUrl}/rooms?${t}`,{method:"GET",headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},credentials:"include",signal:this.abortControllers.getRooms.signal})}async sendMessage(e,t){let i=await this.room.localParticipant.sendText(e,{topic:this.channelTopic,attributes:t});this.emitMessage({id:i.id,timestamp:Date.now(),message:e,assets:JSON.parse(t?.assets||"[]"),from:this.room.localParticipant}),this.messagePersistence==="client"&&this.persistMessage({roomId:this.room.id,content:e,externalId:i.id,identity:this.room.localParticipant?.identity,kind:this.room.localParticipant?.kind})}async persistMessage(e){return v(`${this.apiUrl}/messages/create`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.persistMessage.signal})}async getMessages(e){let t=new URLSearchParams;return e.limit&&t.append("limit",e.limit.toString()),e.with&&t.append("with",e.with.join(",")),(await v(`${this.apiUrl}/messages/search${t.size?`?${t.toString()}`:""}`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.createRoom.signal})).items}async sendMessageReport(e){try{return v(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.sendMessageReport.signal})}catch(t){console.error("Error sending message report:",t)}}async deleteMessageReport(e){try{return v(`${this.apiUrl}/messages/${e.messageId}/report`,{method:"DELETE",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.deleteMessageReport.signal})}catch(t){console.error("Error deleting message report:",t)}}async updateMessageReactions(e){try{return v(`${this.apiUrl}/messages/${e.messageId}/reactions`,{method:"PATCH",body:JSON.stringify({add:e.add||[],remove:e.remove||[]}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.updateMessageReactions.signal})}catch(t){console.error("Error updating message reactions:",t)}}subscribeMessages(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}async sendTypingIndicator(e){if(!(!this.room||this.room.state!=="connected"))try{let t=new TextEncoder().encode(JSON.stringify({type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity}));await this.room.localParticipant.publishData(t,{reliable:!1,topic:Ye})}catch(t){console.warn("Failed to send typing indicator:",t)}}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>{this.typingListeners.delete(e)}}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){try{let t=JSON.stringify(e);await this.room.localParticipant.sendText(t,{topic:this.eventsTopic})}catch(t){console.warn("Failed to send event:",t)}}async requestNewRoom(e){return v(`${this.apiUrl}/rooms/request-new`,{method:"POST",body:JSON.stringify(e),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async confirmRoomRequest(e){return v(`${this.apiUrl}/rooms/confirm-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async cancelRoomRequest(e){return v(`${this.apiUrl}/rooms/cancel-call`,{method:"POST",body:JSON.stringify({roomId:e}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}async finishCall(){if(this.room?.id)return v(`${this.apiUrl}/rooms/finish-call`,{method:"POST",body:JSON.stringify({roomId:this.room.id}),headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"}})}isFirebaseEnabled(){return!!(this.firebaseApi&&this.presencePath&&this.callsPath)}getFirebase(){if(!this.firebaseApi||!this.presencePath||!this.callsPath)throw new Error("Firebase is not initialized. Provide firebaseConfig in constructor.");return{api:this.firebaseApi,presencePath:this.presencePath,callsPath:this.callsPath}}buildAgentPresencePath(e){return`${this.presencePath}/${e}`}onPresenceChange(e){let{api:t,presencePath:i}=this.getFirebase();return t.onChildChanged(i,(o,a)=>e(o,a))}onPresenceAgentChange(e,t){let{api:i}=this.getFirebase();return i.onValue(this.buildAgentPresencePath(e),(o,a)=>t(o,a))}async createCallRequest(e){let{api:t,callsPath:i}=this.getFirebase(),a=(await v(`${this.apiUrl}/rooms/call-request`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify(e)})).id;return t.onDisconnectUpdate(`${i}/${a}`,{status:"disconnected"}),a}onNewCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildAdded(i,(o,a)=>e(o,{...a,id:o}))}onCallRequestChange(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildChanged(i,(o,a)=>e(o,{...a,id:o}))}onCallRequestRemoved(e){let{api:t,callsPath:i}=this.getFirebase();return t.onChildRemoved(i,o=>e(o))}async acceptCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();return await t.cancelOnDisconnect(`${i}/${e}`),t.update(`${i}/${e}`,{status:"accepted"})}async cancelCallRequest(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`),await v(`${this.apiUrl}/rooms/call-request/cancel`,{method:"POST",headers:{Authorization:`Bearer ${this.authToken}`,"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},body:JSON.stringify({callId:e})})}async cancelOnDisconnect(e){let{api:t,callsPath:i}=this.getFirebase();await t.cancelOnDisconnect(`${i}/${e}`)}subscribePendingRequests(e,t={}){let{api:i,callsPath:o}=this.getFirebase();t.resetSeen&&this.seenRequestIds.clear(),this.firebaseUnsubscribers["pending-requests"]?.();let a=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(a,(n,l)=>{if(!n||this.seenRequestIds.has(n))return;let c={...l,id:n};this.seenRequestIds.add(n),e(n,c)});return this.firebaseUnsubscribers["pending-requests"]=r,()=>{r?.(),delete this.firebaseUnsubscribers["pending-requests"]}}subscribeRequestChanges(e){let{api:t,callsPath:i}=this.getFirebase();this.firebaseUnsubscribers["request-changes"]?.();let o=t.onChildChanged(i,(a,r)=>{if(!a)return;let n=JSON.stringify(r);this.lastSnapshotById.get(a)!==n&&(this.lastSnapshotById.set(a,n),e(a,{...r,id:a}))});return this.firebaseUnsubscribers["request-changes"]=o,()=>{o?.(),delete this.firebaseUnsubscribers["request-changes"]}}async tryAcceptRequest(e){let{api:t,callsPath:i}=this.getFirebase(),o=`${i}/${e}`;return await t.transaction(o,r=>r&&(r.status==="pending"?{...r,status:"accepted"}:r)),(await t.getOnce(o))?.status==="accepted"}onRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;return i.onValue(o,(a,r)=>{t(r)})}async clearRoomSync(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/sync`;await i.write(o,{needsSync:!1,reason:t||null,timestamp:Date.now()})}onNewRoomRequest(e,t){let{api:i}=this.getFirebase(),o=`orgs/${this.organizationId}/rooms/${e}/call`;return i.onValue(o,(a,r)=>{t(r)})}unsubscribeAllFirebase(){Object.values(this.firebaseUnsubscribers).forEach(e=>e?.()),this.firebaseUnsubscribers={}}async destroy(){this.unsubscribeAllFirebase(),this.listeners.clear(),this.typingListeners.clear(),this.transcriptionMap.clear(),this.seenRequestIds.clear(),this.lastSnapshotById.clear(),Object.values(this.abortControllers).forEach(e=>e.abort()),await this.disconnect()}};var A=class{constructor(e,t,i,o){this.muted=!1;this.enabled=!0;this.attachedElements=new Set;this.kind=e,this.source=t,this.sid=m("TR"),this.mediaStreamTrack=i,this.mediaCleanup=o}get mediaTrack(){return this.mediaStreamTrack}attach(e){let t=e||document.createElement(this.kind==="video"?"video":"audio");if(this.mediaStreamTrack){let i=new MediaStream([this.mediaStreamTrack]);t.srcObject=i,t.autoplay=!0,this.kind==="video"&&(t.playsInline=!0,t.muted=!0)}return this.attachedElements.add(t),t}detach(e){if(e)return e.srcObject=null,this.attachedElements.delete(e),[e];let t=Array.from(this.attachedElements);for(let i of t)i.srcObject=null;return this.attachedElements.clear(),t}stop(){this.detach(),this.mediaCleanup&&this.mediaCleanup(),this.mediaStreamTrack&&this.mediaStreamTrack.stop(),this.enabled=!1}setMuted(e){this.muted=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=!e)}setEnabled(e){this.enabled=e,this.mediaStreamTrack&&(this.mediaStreamTrack.enabled=e)}},x=class{constructor(e,t){this.subscribed=!0;this.isEnabled=!0;this.track=e,this.trackSid=e.sid,this.trackName=t||`${e.kind}_${e.source}`,this.source=e.source,this.kind=e.kind}get isMuted(){return this.track?.muted??!1}get isSubscribed(){return this.subscribed&&this.track!==null}setSubscribed(e){this.subscribed=e}setEnabled(e){this.isEnabled=e,this.track&&(this.track.enabled=e)}setMuted(e){this.track&&this.track.setMuted(e)}};var X=class{constructor(e){this.identity="";this.sid="";this.name="";this.attributes={};this.kind="standard";this.trackPublications=new Map;this.audioTrackPublications=new Map;this.videoTrackPublications=new Map;this._cameraEnabled=!1;this._microphoneEnabled=!1;this._screenShareEnabled=!1;this.room=e,this.sid=m("PA"),this.joinedAt=new Date}get isCameraEnabled(){return this._cameraEnabled}get isMicrophoneEnabled(){return this._microphoneEnabled}get isScreenShareEnabled(){return this._screenShareEnabled}getTrackPublications(){return Array.from(this.trackPublications.values())}getTrackPublication(e){let i={camera:"camera",Camera:"camera",microphone:"microphone",Microphone:"microphone",screen_share:"screen_share",ScreenShare:"screen_share",screen_share_audio:"screen_share_audio",ScreenShareAudio:"screen_share_audio"}[e]||e;return this.trackPublications.get(i)}getTrackPublicationBySid(e){for(let t of this.trackPublications.values())if(t.trackSid===e)return t}setAttributes(e){this.attributes={...this.attributes,...e}}async setCameraEnabled(e,t){if(this._cameraEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(W(),ce)),{track:a,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),n=new A("video","camera",a,r),l=new x(n,t?.name);return this.trackPublications.set("camera",l),this.videoTrackPublications.set(n.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("camera");i&&(i.track?.stop(),this.trackPublications.delete("camera"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setMicrophoneEnabled(e,t){if(this._microphoneEnabled=e,e){let{createSyntheticAudioTrack:o}=await Promise.resolve().then(()=>(W(),ce)),{track:a,cleanup:r}=o({enabled:!1}),n=new A("audio","microphone",a,r),l=new x(n,t?.name);return this.trackPublications.set("microphone",l),this.audioTrackPublications.set(n.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("microphone");i&&(i.track?.stop(),this.trackPublications.delete("microphone"),this.audioTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async setScreenShareEnabled(e,t){if(this._screenShareEnabled=e,e){let{createSyntheticVideoTrack:o}=await Promise.resolve().then(()=>(W(),ce)),{track:a,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),n=new A("video","screen_share",a,r),l=new x(n,t?.name||"screen");return this.trackPublications.set("screen_share",l),this.videoTrackPublications.set(n.sid,l),this.room.emit("localTrackPublished",l,this),l}let i=this.trackPublications.get("screen_share");i&&(i.track?.stop(),this.trackPublications.delete("screen_share"),this.videoTrackPublications.delete(i.trackSid),this.room.emit("localTrackUnpublished",i,this))}async publishTrack(e,t){let i=new x(e,t?.name),o=t?.source||e.source;return this.trackPublications.set(o,i),e.kind==="audio"?this.audioTrackPublications.set(e.sid,i):e.kind==="video"&&this.videoTrackPublications.set(e.sid,i),this.room.emit("localTrackPublished",i,this),i}async unpublishTrack(e){e.stop();for(let[t,i]of this.trackPublications)if(i.track===e){this.trackPublications.delete(t),e.kind==="audio"?this.audioTrackPublications.delete(e.sid):e.kind==="video"&&this.videoTrackPublications.delete(e.sid),this.room.emit("localTrackUnpublished",i,this);break}}async sendText(e,t){return{id:m("msg")}}async publishData(e,t){}async setMetadata(e){this.attributes.metadata=e}async setName(e){this.name=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear(),this.audioTrackPublications.clear(),this.videoTrackPublications.clear(),this._cameraEnabled=!1,this._microphoneEnabled=!1,this._screenShareEnabled=!1}};function ro(s){switch(s){case"standard":return 0;case"ingress":return 1;case"egress":return 2;case"sip":return 3;case"agent":return 4;default:return 0}}var z=class{constructor(e,t,i={},o="standard"){this.connectionQuality="excellent";this.isSpeaking=!1;this.audioLevel=0;this.trackPublications=new Map;this.identity=e,this.sid=m("PA"),this.name=t,this.attributes=i,this._kindString=o,this.kind=ro(o),this.joinedAt=new Date}get isAgent(){return this.kind===4||this.attributes["lk.agent.name"]!==void 0}get kindString(){return this._kindString}get isCameraEnabled(){let e=this.getTrackPublication("camera");return!!(e?.track&&!e.isMuted)}get isMicrophoneEnabled(){let e=this.getTrackPublication("microphone");return!!(e?.track&&!e.isMuted)}getTrackPublication(e){for(let t of this.trackPublications.values())if(t.source===e)return t}getTrackPublicationBySid(e){return this.trackPublications.get(e)}getTrackPublications(){return Array.from(this.trackPublications.values())}getAudioTracks(){return this.getTrackPublications().filter(e=>e.kind==="audio")}getVideoTracks(){return this.getTrackPublications().filter(e=>e.kind==="video")}addTrackPublication(e){this.trackPublications.set(e.trackSid,e)}removeTrackPublication(e){let t=this.trackPublications.get(e);return t&&(this.trackPublications.delete(e),t.track?.stop()),t}setAttributes(e){this.attributes={...this.attributes,...e}}getAttribute(e){return this.attributes[e]}startSpeaking(e=.5){this.isSpeaking=!0,this.audioLevel=e}stopSpeaking(){this.isSpeaking=!1,this.audioLevel=0}setConnectionQuality(e){this.connectionQuality=e}cleanup(){for(let e of this.trackPublications.values())e.track?.stop();this.trackPublications.clear()}};var O=class{constructor(e){this.remoteParticipants=new Map;this._state="disconnected";this.eventHandlers=new Map;this.textStreamHandlers=new Map;this.rpcHandlers=new Map;this.mockService=e,this.localParticipant=new X(this),this.sid=m("RM")}get state(){return this._state}set state(e){let t=this._state;this._state=e,t!==e&&this.emit("connectionStateChanged",e,t)}get numParticipants(){return this.remoteParticipants.size+1}get isConnected(){return this._state==="connected"}async connect(e,t){this._state="connecting",this.emit("connectionStateChanged","connecting","disconnected"),await this.mockService.simulateLatency(),this._state="connected",this.connectedAt=new Date().toISOString(),this.emit("connectionStateChanged","connected","connecting"),this.emit("connected")}async disconnect(){for(let t of this.remoteParticipants.values())t.cleanup();this.remoteParticipants.clear(),this.localParticipant.cleanup();let e=this._state;this._state="disconnected",this.emit("connectionStateChanged","disconnected",e),this.emit("disconnected"),this.eventHandlers.clear()}async reconnect(){this._state="reconnecting",this.emit("connectionStateChanged","reconnecting","connected"),await this.mockService.simulateLatency(),this._state="connected",this.emit("connectionStateChanged","connected","reconnecting"),this.emit("reconnected")}on(e,t){return this.eventHandlers.has(e)||this.eventHandlers.set(e,new Set),this.eventHandlers.get(e).add(t),this}once(e,t){let i=(...o)=>{this.off(e,i),t(...o)};return this.on(e,i)}off(e,t){return this.eventHandlers.get(e)?.delete(t),this}removeAllListeners(){this.eventHandlers.clear()}emit(e,...t){let i=this.eventHandlers.get(e);if(i)for(let o of i)try{o(...t)}catch(a){console.error(`Error in mock room event handler for ${e}:`,a)}}registerRpcMethod(e,t){this.rpcHandlers.set(e,t)}unregisterRpcMethod(e){this.rpcHandlers.delete(e)}async callRpc(e,t,i,o=1e4){let a=this.rpcHandlers.get(e);if(!a)throw new Error(`RPC method not found: ${e}`);return a({callerIdentity:t,payload:i,responseTimeout:o})}registerTextStreamHandler(e,t){this.textStreamHandlers.set(e,t)}unregisterTextStreamHandler(e){this.textStreamHandlers.delete(e)}simulateTextStream(e,t){let i=this.textStreamHandlers.get(e);i&&i(t,{identity:t.participantIdentity})}getParticipantByIdentity(e){return e===this.localParticipant.identity?new z(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new z(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes);for(let t of this.remoteParticipants.values())if(t.sid===e)return t}async simulateParticipantJoin(e,t){let i=new z(e,t?.name,t?.attributes||{},t?.kind||"standard");return this.remoteParticipants.set(e,i),this.emit("participantConnected",i),t?.withCamera&&await this.simulateRemoteTrack(e,"video","camera"),t?.withMicrophone&&await this.simulateRemoteTrack(e,"audio","microphone"),i}simulateParticipantLeave(e){let t=this.remoteParticipants.get(e);if(t){for(let i of t.getTrackPublications())i.track?.stop(),this.emit("trackUnsubscribed",i.track,i,t);this.remoteParticipants.delete(e),this.emit("participantDisconnected",t)}}async simulateRemoteTrack(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let a,r;if(t==="video"){let{createSyntheticVideoTrack:c}=await Promise.resolve().then(()=>(W(),ce)),u=c({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});a=u.track,r=u.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:c}=await Promise.resolve().then(()=>(W(),ce)),u=c({enabled:!1});a=u.track,r=u.cleanup}let n=new A(t,i,a,r),l=new x(n);return o.addTrackPublication(l),this.emit("trackSubscribed",n,l,o),this.emit("trackPublished",l,o),n}simulateTrackUnpublished(e,t){let i=this.remoteParticipants.get(e);if(!i)return;let o=i.getTrackPublication(t);o&&(i.removeTrackPublication(o.trackSid),this.emit("trackUnpublished",o,i),this.emit("trackUnsubscribed",o.track,o,i))}async simulateAgentJoin(e,t="AI Agent"){return this.simulateParticipantJoin(e,{name:t,kind:"agent",withCamera:!0,withMicrophone:!0,attributes:{"lk.agent.name":t,"lk.agent.state":"active"}})}simulateAttributeChange(e,t){let i=this.remoteParticipants.get(e);if(i){let o={...i.attributes};i.setAttributes(t),this.emit("participantAttributesChanged",t,o,i)}}simulateTrackMuted(e,t,i){let o=this.remoteParticipants.get(e);if(!o)return;let a=o.getTrackPublication(t);a?.track&&(a.track.setMuted(i),this.emit(i?"trackMuted":"trackUnmuted",a,o))}simulateActiveSpeakersChanged(e){let t=[];for(let i of e){let o=this.remoteParticipants.get(i);o&&(o.startSpeaking(),t.push(o))}this.emit("activeSpeakersChanged",t)}simulateDataReceived(e,t,i,o){let a=this.remoteParticipants.get(t);this.emit("dataReceived",e,a,i,o)}};var de=class{constructor(e={}){this.rooms=new Map;this.participants=new Map;this.tracks=new Map;this.agents=new Map;this.messages=new Map;this.config=e,this.randomState=e.seed??Date.now()}updateConfig(e){this.config={...this.config,...e},e.seed!==void 0&&(this.randomState=e.seed)}getConfig(){return{...this.config}}random(){return this.randomState=(this.randomState*1103515245+12345)%2147483648,this.randomState/2147483648}createRoom(e,t,i){let o=m("room"),a=new Date().toISOString(),r={id:o,name:e,groupId:t||m("group"),createdAt:a,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:ae(o),token:R(o,"pending",a)};return this.rooms.set(o,r),this.messages.set(o,[]),r}getRoom(e){return this.rooms.get(e)}getRoomByName(e){for(let t of this.rooms.values())if(t.name===e)return t}listRooms(e=!1){let t=Array.from(this.rooms.values());return e?t.filter(i=>i.isActive):t}updateRoomConnectionState(e,t){let i=this.rooms.get(e);if(!i)return;let o=i.connectionState;return i.connectionState=t,o}endRoom(e){let t=this.rooms.get(e);if(!t||!t.isActive)return!1;t.isActive=!1,t.endedAt=new Date().toISOString(),t.connectionState="disconnected";for(let i of t.participantIds){let o=this.participants.get(i);o&&(o.isConnected=!1)}for(let i of this.agents.values())i.roomId===e&&i.status==="running"&&(i.status="stopped",i.stoppedAt=new Date().toISOString());return!0}deleteRoom(e){let t=this.rooms.get(e);if(!t)return!1;for(let i of t.participantIds)this.participants.delete(i);for(let[i,o]of this.tracks)o.roomId===e&&this.tracks.delete(i);for(let[i,o]of this.agents)o.roomId===e&&this.agents.delete(i);return this.messages.delete(e),this.rooms.delete(e),!0}addParticipant(e,t,i,o="user",a="standard",r=!1){let n=this.rooms.get(e);if(!n)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!n.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let l=this.participants.get(t);if(l&&l.roomId===e&&l.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`):l;let c={identity:t,name:i||t,roomId:e,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:o,attributes:{},kind:a,isLocal:r};return this.participants.set(t,c),n.participantIds.push(t),c}getParticipant(e){return this.participants.get(e)}listParticipants(e,t=!0){let i=this.rooms.get(e);if(!i)return[];let o=[];for(let a of i.participantIds){let r=this.participants.get(a);r&&(!t||r.isConnected)&&o.push(r)}return o}updateParticipantAttributes(e,t){let i=this.participants.get(e);if(!i)return;let o={...i.attributes};return i.attributes={...i.attributes,...t},o}removeParticipant(e){let t=this.participants.get(e);if(!t)return;t.isConnected=!1;for(let o of t.trackIds)this.tracks.delete(o);t.trackIds=[];let i=this.rooms.get(t.roomId);if(i){let o=i.participantIds.indexOf(e);o!==-1&&i.participantIds.splice(o,1)}return t}publishTrack(e,t,i="unknown",o){let a=this.participants.get(e);if(!a)return this.createError("PARTICIPANT_NOT_FOUND",`Participant ${e} not found`);if(!a.isConnected)return this.createError("INVALID_OPERATION",`Participant ${e} is not connected`);let r=this.rooms.get(a.roomId);if(!r||!r.isActive)return this.createError("ROOM_ENDED","Room is not active");let n=m("track"),l={id:n,kind:t,source:i,participantIdentity:e,roomId:a.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(n,l),a.trackIds.push(n),l}getTrack(e){return this.tracks.get(e)}listTracks(e,t){let i=[];for(let o of this.tracks.values())e&&o.roomId!==e||t&&o.participantIdentity!==t||i.push(o);return i}unpublishTrack(e){let t=this.tracks.get(e);if(!t)return;let i=this.participants.get(t.participantIdentity);if(i){let o=i.trackIds.indexOf(e);o!==-1&&i.trackIds.splice(o,1)}return this.tracks.delete(e),t}setTrackMuted(e,t){let i=this.tracks.get(e);return i?(i.muted=t,!0):!1}startAgent(e,t,i={}){let o=this.rooms.get(e);if(!o)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!o.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let a=m("agent"),r={id:a,roomId:e,name:t,status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",...i},messageHistory:[]};return this.agents.set(a,r),this.addParticipant(e,`agent_${a}`,t,"agent","agent",!1),r}getAgent(e){return this.agents.get(e)}listAgents(e){let t=[];for(let i of this.agents.values())i.roomId===e&&t.push(i);return t}stopAgent(e){let t=this.agents.get(e);if(t)return t.status="stopped",t.stoppedAt=new Date().toISOString(),this.removeParticipant(`agent_${e}`),t}updateAgentStatus(e,t){let i=this.agents.get(e);return i?(i.status=t,t==="stopped"&&(i.stoppedAt=new Date().toISOString()),!0):!1}addAgentMessage(e,t,i){let o=this.agents.get(e);if(!o)return;let a={id:m("msg"),content:t,role:i,timestamp:new Date().toISOString()};return o.messageHistory.push(a),a}addMessage(e,t,i,o="standard",a){if(!this.rooms.get(e))return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);let n={id:m("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:a},l=this.messages.get(e)||[];return l.push(n),this.messages.set(e,l),n}getMessages(e,t){let i=this.messages.get(e)||[];return t?i.slice(-t):i}createError(e,t,i){return{code:e,message:t,details:i}}isError(e){return typeof e=="object"&&e!==null&&"code"in e&&"message"in e}reset(){this.rooms.clear(),this.participants.clear(),this.tracks.clear(),this.agents.clear(),this.messages.clear(),this.randomState=this.config.seed??Date.now()}getSnapshot(){return{rooms:new Map(this.rooms),participants:new Map(this.participants),tracks:new Map(this.tracks),agents:new Map(this.agents),messages:new Map(this.messages),config:{...this.config},eventHistory:[]}}toJSON(){return{rooms:Object.fromEntries(this.rooms),participants:Object.fromEntries(this.participants),tracks:Object.fromEntries(this.tracks),agents:Object.fromEntries(this.agents),messages:Object.fromEntries(this.messages),config:this.config,eventHistory:[],exportedAt:new Date().toISOString()}}fromJSON(e){this.rooms=new Map(Object.entries(e.rooms)),this.participants=new Map(Object.entries(e.participants)),this.tracks=new Map(Object.entries(e.tracks)),this.agents=new Map(Object.entries(e.agents)),this.messages=new Map(Object.entries(e.messages).map(([t,i])=>[t,i])),this.config=e.config}};var L=class{constructor(e={}){this.messageListeners=new Set;this.typingListeners=new Set;this.callRequestListeners=new Map;this._authToken=null;this._registeredUser=null;this.agents=new Map;this.config={latencyMs:e.latencyMs??0,strictMode:e.strictMode??!1,seed:e.seed,scenario:e.scenario,errorConfig:e.errorConfig,autoEmitEvents:e.autoEmitEvents??!0,organizationId:e.organizationId??"mock_org",apiUrl:e.apiUrl??"https://mock-livekit.local"},this.state=new de(this.config),this.events=new le,this.room=new O(this),this.config.scenario&&this.applyScenario(this.config.scenario)}get authToken(){return this._authToken}get registeredUser(){return this._registeredUser}getState(){return this.state}getEvents(){return this.events}updateConfig(e){this.config={...this.config,...e},this.state.updateConfig(e)}getConfig(){return{...this.config}}async simulateLatency(){this.config.latencyMs&&this.config.latencyMs>0&&await new Promise(e=>setTimeout(e,this.config.latencyMs))}applyScenario(e){switch(e){case"happy_path":this.config.errorConfig={},this.config.latencyMs=0;break;case"slow_network":this.config.latencyMs=500;break;case"network_unstable":this.config.errorConfig={errorRate:30};break;default:break}}shouldThrowError(){return this.config.errorConfig?.errorRate?this.state.random()*100<this.config.errorConfig.errorRate:!1}ensureRoom(){return this.room||(this.room=new O(this)),this.room}async registerUser(e,t,i,o){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Registration failed");let a={id:m("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:R("pending",e,new Date().toISOString())};return this._authToken=a.token,this._registeredUser=a,this.room.localParticipant.identity=e,this.room.localParticipant.name=i?.name||e,a}async registerAgent(e,t){if(await this.simulateLatency(),this.config.errorConfig?.unauthorized)throw new f("UNAUTHORIZED","Agent registration failed");let i=R("agent",e,new Date().toISOString());return this._authToken=i,this.room.localParticipant.identity=e,this.room.localParticipant.name=t.name,i}async quickStart(e){let{externalId:t,secret:i,metadata:o,...a}=e.user;return await this.registerUser(t,i,a,o),this.createRoom({language:e.room.language,timezone:e.room.timezone,affinity:e.room.affinity,metadata:e.room.metadata,disablePersistence:e.room.disablePersistence,contextualEvents:e.room.contextualEvents,userGroupId:e.room.userGroupId??void 0})}async createRoom(e,t={}){if(await this.simulateLatency(),this.config.errorConfig?.networkError||this.shouldThrowError())throw new f("NETWORK_ERROR","Failed to create room");let i=this.state.createRoom(`room_${Date.now()}`,e.affinity?.agentId,e.metadata);this.room.id=i.id,this.room.groupId=i.groupId,this.room.createdAt=i.createdAt,this.room.connectedAt=new Date().toISOString();let o=this.room.localParticipant.identity||"local_user";return this.state.addParticipant(i.id,o,this.room.localParticipant.name,"user","standard",!0),Object.keys(t).length>0&&(this.state.updateParticipantAttributes(o,t),this.room.localParticipant.setAttributes(t)),this.state.updateRoomConnectionState(i.id,"connected"),this.config.autoEmitEvents&&(this.events.emitRoomCreated(i),this.events.emitRoomConnectionStateChanged(i.id,"connected","disconnected")),(e.affinity?.agentId||e.affinity?.agentType)&&await this.startMockAgent(i.id,{type:e.affinity?.agentType,nature:e.affinity?.nature??"ai"}),await this.room.connect(i.wsURL,i.token),this.room}async joinRoom(e,t,i,o){await this.simulateLatency();let a=this.state.getRoom(e);if(!a)throw new I(e);if(!a.isActive)throw new f("ROOM_ENDED",`Room ${e} has ended`);this.room.id=a.id,this.room.groupId=a.groupId,this.room.createdAt=a.createdAt,this.room.connectedAt=new Date().toISOString();let r=this.room.localParticipant.identity||"local_user",n=this.state.addParticipant(e,r,this.room.localParticipant.name,"user","standard",!0);if(E(n))throw ne(n);if(o){let l={};for(let[c,u]of Object.entries(o))l[c]=String(u);this.state.updateParticipantAttributes(r,l)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,n),this.events.emitRoomConnectionStateChanged(e,"connected","disconnected")),await this.room.connect(a.wsURL,a.token),this.room}async evaluateRoom(e){await this.simulateLatency();let t=e.roomId||this.room?.id;if(!t)throw new f("ROOM_NOT_FOUND","No room to evaluate");let i=this.state.getRoom(t);if(!i)throw new I(t);i.metadata||(i.metadata={}),i.metadata.evaluation={rating:e.rating,comment:e.comment,evaluatedAt:new Date().toISOString()}}async closeRoom(){await this.simulateLatency(),this.room?.id&&(this.state.endRoom(this.room.id),await this.stopLocalTracks(),this.config.autoEmitEvents&&this.events.emitRoomEnded(this.room.id))}async disconnect(){if(this.room){let e=this.room.id,t=this.room.localParticipant.identity;await this.stopLocalTracks(),this.state.removeParticipant(t),this.config.autoEmitEvents&&e&&this.events.emitParticipantLeft(e,t),this.room.removeAllListeners(),await this.room.disconnect()}}async stopLocalTracks(){let e=this.room?.localParticipant;e&&await Promise.all([e.setCameraEnabled(!1),e.setMicrophoneEnabled(!1),e.setScreenShareEnabled(!1)])}async disconnectAndCloseRoom(){await this.closeRoom(),await this.disconnect()}async readRoom(e){await this.simulateLatency();let t=this.state.getRoom(e);if(!t)throw new I(e);t.metadata||(t.metadata={}),t.metadata.lastReadAt=new Date().toISOString()}async getRooms(e){await this.simulateLatency();let t=this.state.listRooms();e.roomStatus==="active"?t=t.filter(n=>n.isActive):e.roomStatus==="closed"&&(t=t.filter(n=>!n.isActive)),e.ids?.length&&(t=t.filter(n=>e.ids.includes(n.id))),e.groupId&&(t=t.filter(n=>n.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(n=>({id:n.id,name:n.name,groupId:n.groupId,organizationId:this.config.organizationId,endedAt:n.endedAt??null,createdAt:n.createdAt,updatedAt:n.createdAt,status:n.isActive?"active":"ended",participants:this.state.listParticipants(n.id).map(l=>({id:l.identity,name:l.name||l.identity,role:l.role,isLocal:l.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(n.id).length,participants:n.participantIds.length}})),count:t.length,limit:o,offset:i}}async sendMessage(e,t){if(await this.simulateLatency(),!this.room?.id)throw new f("INVALID_OPERATION","Not connected to a room");let i=this.state.addMessage(this.room.id,this.room.localParticipant.identity,e,"standard",t);if(E(i))throw ne(i);let o={id:i.id,timestamp:Date.now(),message:e,content:e,createdAt:i.createdAt,from:{identity:this.room.localParticipant.identity,name:this.room.localParticipant.name,id:this.room.localParticipant.identity,role:"user"}};for(let a of this.messageListeners)a([o]);this.config.autoEmitEvents&&this.events.emitMessageSent(this.room.id,i);for(let a of this.agents.values())a.isRunning&&a.roomId===this.room.id&&this.triggerAgentResponse(a,e)}async persistMessage(e){await this.simulateLatency();let t=this.state.addMessage(e.roomId,e.identity||"system",e.content);if(E(t))throw ne(t);return{items:[{id:t.id,timestamp:Date.now(),message:t.content,content:t.content,createdAt:t.createdAt}],count:1,limit:1,offset:0}}async getMessages(e){await this.simulateLatency();let t=e.roomId||this.room?.id;return t?this.state.getMessages(t,e.limit).map(o=>({id:o.id,timestamp:Date.parse(o.createdAt),message:o.content,content:o.content,createdAt:o.createdAt,from:{identity:o.participantIdentity,id:o.participantIdentity,role:"user"}})):[]}async sendMessageReport(e){await this.simulateLatency()}async deleteMessageReport(e){await this.simulateLatency()}async updateMessageReactions(e){await this.simulateLatency()}subscribeMessages(e){return this.messageListeners.add(e),()=>{this.messageListeners.delete(e)}}async sendTypingIndicator(e){if(!this.room?.id)return;let t={type:"typing",isTyping:e,timestamp:Date.now(),participantId:this.room.localParticipant.identity};for(let i of this.typingListeners)i(t);this.config.autoEmitEvents&&this.events.emitTypingIndicator(this.room.id,this.room.localParticipant.identity,e)}subscribeTypingIndicators(e){return this.typingListeners.add(e),()=>this.typingListeners.delete(e)}unsubscribeTypingIndicators(e){this.typingListeners.delete(e)}async sendContextualEvent(e){await this.simulateLatency()}async requestNewRoom(e){await this.simulateLatency();let t=this.state.createRoom(`transfer_${Date.now()}`,void 0,{originRoom:e.originRoom});return{id:t.id,groupId:t.groupId,token:t.token,wsURL:t.wsURL,createdAt:t.createdAt}}async confirmRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request confirmed",roomId:e}}async cancelRoomRequest(e){return await this.simulateLatency(),{success:!0,message:"Request cancelled",roomId:e}}async finishCall(){await this.simulateLatency(),this.room?.id&&this.state.endRoom(this.room.id)}isFirebaseEnabled(){return!0}onPresenceChange(e){return()=>{}}onPresenceAgentChange(e,t){return()=>{}}async createCallRequest(e){return await this.simulateLatency(),m("call")}onNewCallRequest(e){return this.callRequestListeners.has("new")||this.callRequestListeners.set("new",new Set),this.callRequestListeners.get("new").add(e),()=>this.callRequestListeners.get("new")?.delete(e)}onCallRequestChange(e){return this.callRequestListeners.has("change")||this.callRequestListeners.set("change",new Set),this.callRequestListeners.get("change").add(e),()=>this.callRequestListeners.get("change")?.delete(e)}onCallRequestRemoved(e){return()=>{}}async acceptCallRequest(e){await this.simulateLatency()}async cancelCallRequest(e){await this.simulateLatency()}async cancelOnDisconnect(e){await this.simulateLatency()}subscribePendingRequests(e,t={}){return()=>{}}subscribeRequestChanges(e){return()=>{}}async tryAcceptRequest(e){return await this.simulateLatency(),!0}onRoomSync(e,t){return()=>{}}async clearRoomSync(e,t){await this.simulateLatency()}onNewRoomRequest(e,t){return()=>{}}unsubscribeAllFirebase(){this.callRequestListeners.clear()}async destroy(){this.unsubscribeAllFirebase(),this.messageListeners.clear(),this.typingListeners.clear(),await this.disconnect(),this.state.reset()}async startMockAgent(e,t){let i=t?.name||"AI Assistant",o=new re(m("agent"),i,{responseStrategy:t?.responseStrategy||"echo",responseDelayMs:t?.responseDelayMs||100,cannedResponses:t?.cannedResponses||[],type:t?.type,nature:t?.nature});await o.start(e),this.agents.set(o.id,o),this.customAgentHandler&&o.setCustomHandler((c,u)=>this.customAgentHandler(c,u));let a=t?.type,r=Array.isArray(a)?a:[a].filter(Boolean),n=r.includes("video"),l=r.includes("voice");return(n||l)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:n,withMicrophone:l||n,attributes:{"lk.agent.name":i,"lk.agent.state":"active",role:"agent"}}),this.config.autoEmitEvents&&this.events.emitAgentStarted(e,{id:o.id,name:o.name,roomId:e,status:"running",config:o.getConfig(),startedAt:new Date().toISOString(),messageHistory:[]}),o.id}async stopMockAgent(e){let t=this.agents.get(e);if(t){let i=t.roomId;await t.stop(),this.agents.delete(e),this.config.autoEmitEvents&&i&&this.events.emitAgentStopped(i,e)}}setAgentResponseHandler(e){this.customAgentHandler=e;for(let t of this.agents.values())t.setCustomHandler((i,o)=>e(i,o))}async triggerAgentResponse(e,t){if(this.config.scenario!=="agent_timeout")try{let i=await e.processMessage(t);if(!i)return;let o=this.state.addMessage(e.roomId,`agent_${e.id}`,i);if(!E(o)){let a={id:o.id,timestamp:Date.now(),message:i,content:i,createdAt:o.createdAt,from:{identity:`agent_${e.id}`,name:e.name,id:e.id,role:"agent"}};for(let r of this.messageListeners)r([a]);this.config.autoEmitEvents&&this.events.emitMessageReceived(e.roomId,o)}}catch(i){console.error("Agent response error:",i)}}simulateCallRequest(e){let t={id:m("call"),guestId:e.guestId||"guest_user",name:e.name||"Guest User",createdAt:new Date().toISOString(),status:e.status||"pending",...e},i=this.callRequestListeners.get("new");if(i)for(let o of i)o(t.id,t)}simulateParticipantJoin(e,t,i="user"){if(!this.room?.id)return;let o=this.state.addParticipant(this.room.id,e,t,i,"standard",!1);!E(o)&&this.config.autoEmitEvents&&this.events.emitParticipantJoined(this.room.id,o)}simulateParticipantLeave(e){if(!this.room?.id)return;this.state.removeParticipant(e)&&this.config.autoEmitEvents&&this.events.emitParticipantLeft(this.room.id,e)}simulateIncomingMessage(e,t){if(!this.room?.id)return;let i=this.state.addMessage(this.room.id,e,t);if(E(i))return;let o={id:i.id,timestamp:Date.now(),message:t,content:t,createdAt:i.createdAt,from:{identity:e,id:e,role:"user"}};for(let a of this.messageListeners)a([o]);this.config.autoEmitEvents&&this.events.emitMessageReceived(this.room.id,i)}async simulateDisconnect(){if(!this.room?.id)return;let e=this.room.state;this.room.state="disconnected",this.config.autoEmitEvents&&this.events.emitRoomConnectionStateChanged(this.room.id,"disconnected",e),this.room.emit("connectionStateChanged","disconnected")}reset(){this.state.reset(),this.events.clearHistory(),this.messageListeners.clear(),this.typingListeners.clear(),this.callRequestListeners.clear(),this.agents.clear(),this._authToken=null,this._registeredUser=null,this.room=new O(this),Re()}seed(e){this.config.seed=e,this.state.updateConfig({seed:e})}setScenario(e){this.config.scenario=e,this.applyScenario(e)}exportState(){return{...this.state.toJSON(),eventHistory:this.events.getHistory()}}getEventHistory(e){return this.events.getHistory(e)}};var D={MODE:"LIVEKIT_MODE",USE_MOCK:"USE_LIVEKIT_MOCK",MOCK_LATENCY:"MOCK_LIVEKIT_LATENCY_MS",MOCK_STRICT:"MOCK_LIVEKIT_STRICT",MOCK_SCENARIO:"MOCK_LIVEKIT_SCENARIO",MOCK_SEED:"MOCK_LIVEKIT_SEED",API_URL:"LIVEKIT_API_URL",AUTH_URL:"LIVEKIT_AUTH_URL",ORG_ID:"LIVEKIT_ORGANIZATION_ID"};function qe(){let s=F(D.MODE);if(s==="mock"||s==="real")return s;let e=F(D.USE_MOCK);return e==="true"||e==="1"||co()?"mock":"real"}function no(){let s={},e=F(D.MOCK_LATENCY);e&&(s.latencyMs=parseInt(e,10));let t=F(D.MOCK_STRICT);(t==="true"||t==="1")&&(s.strictMode=!0);let i=F(D.MOCK_SCENARIO);i&&(s.scenario=i);let o=F(D.MOCK_SEED);return o&&(s.seed=parseInt(o,10)),s}function lo(){let s={},e=F(D.API_URL);e&&(s.apiUrl=e);let t=F(D.AUTH_URL);t&&(s.authUrl=t);let i=F(D.ORG_ID);return i&&(s.organizationId=i),s}function F(s){if(typeof process<"u"&&process.env)return process.env[s];if(typeof import.meta<"u"&&import.meta.env)return import.meta.env[`VITE_${s}`]||import.meta.env[s];if(typeof window<"u"&&window.__ENV__)return window.__ENV__[s]}function co(){return!!(typeof process<"u"&&process.env&&(process.env.NODE_ENV==="test"||process.env.VITEST||process.env.JEST_WORKER_ID)||typeof globalThis.__vitest_index__<"u")}var B=class s{static create(e){if((e.mode??qe())==="mock"){let i={...no(),...e.mockConfig,organizationId:e.organizationId,apiUrl:e.apiUrl};return new L(i)}if(!e.organizationId||!e.apiUrl)throw new Error("ConversationService requires organizationId and apiUrl. Provide them in options or set LIVEKIT_ORGANIZATION_ID and LIVEKIT_API_URL environment variables.");return new Le(e)}static createFromEnv(e){let t=e?.mode??qe(),i=lo();return s.create({...i,...e,mode:t})}static createMock(e){return new L({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",...e})}static createDeterministicMock(e=12345){return new L({organizationId:"mock_org",apiUrl:"https://mock-livekit.local",seed:e,strictMode:!0})}static getCurrentMode(){return qe()}static isMockMode(){return qe()==="mock"}static isMockService(e){return e instanceof L}};function Ht(s){return B.createFromEnv(s)}function Ne(s){return B.createMock(s)}function He(s){let e=s?.id??m("room"),t=new Date().toISOString();return{id:e,name:`Test Room ${e}`,groupId:m("group"),createdAt:t,isActive:!0,participantIds:[],connectionState:"connected",wsURL:ae(e),token:R(e,"local_user",t),...s}}function Ve(s="local_user",e){let t=He(e);t.participantIds.push(s);let i={identity:s,name:"Local User",roomId:t.id,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0};return{room:t,localParticipant:i}}function et(s){let e=He(s),t=new Date().toISOString(),i={identity:"user_1",name:"User One",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!0},o={identity:"user_2",name:"User Two",roomId:e.id,joinedAt:t,isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1};return e.participantIds.push(i.identity,o.identity),{room:e,participant1:i,participant2:o}}function Je(s,e){let{room:t,localParticipant:i}=Ve("local_user",e),o=new Date().toISOString(),a=m("agent"),r={id:a,roomId:t.id,name:"AI Assistant",status:"running",startedAt:o,config:{responseStrategy:"echo",nature:"ai",...s},messageHistory:[]},n={identity:`agent_${a}`,name:"AI Assistant",roomId:t.id,joinedAt:o,isConnected:!0,trackIds:[],role:"agent",attributes:{},kind:"agent",isLocal:!1};return t.participantIds.push(n.identity),{room:t,localParticipant:i,agent:r,agentParticipant:n}}function Vt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Je(void 0,s),a={id:m("track"),kind:"data",source:"unknown",participantIdentity:o.identity,roomId:e.id,publishedAt:new Date().toISOString(),muted:!1};return o.trackIds.push(a.id),{room:e,localParticipant:t,agent:i,dataTrack:a}}function Jt(s){let{room:e,localParticipant:t}=Ve("local_user",s),i=new Date().toISOString(),o={id:m("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1},a={id:m("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:e.id,publishedAt:i,muted:!1};return t.trackIds.push(o.id,a.id),{room:e,participant:t,audioTrack:o,videoTrack:a}}function tt(s,e){let t=e?.identity??m("participant");return{identity:t,name:`Participant ${t}`,roomId:s,joinedAt:new Date().toISOString(),isConnected:!0,trackIds:[],role:"user",attributes:{},kind:"standard",isLocal:!1,...e}}function Bt(s,e){let t=[];for(let i=0;i<e;i++)t.push(tt(s,{identity:`participant_${i+1}`,name:`Participant ${i+1}`,isLocal:i===0}));return t}function Be(s,e){return{id:e?.id??m("agent"),roomId:s,name:"AI Assistant",status:"running",startedAt:new Date().toISOString(),config:{responseStrategy:"echo",nature:"ai",...e?.config},messageHistory:[],...e}}function Kt(s,e){return Be(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Gt(s,e){return Be(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Yt(s,e,t){return{id:m("msg"),roomId:s,content:"Test message",participantIdentity:e,createdAt:new Date().toISOString(),type:"standard",...t}}function it(s,e){return e.map((t,i)=>({id:m("msg"),roomId:s,content:t.content,participantIdentity:t.identity,createdAt:new Date(Date.now()+i*1e3).toISOString(),type:"standard"}))}function Se(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Qt(s){return Se({strictMode:!0,...s})}function Wt(s,e){return Se({latencyMs:s,...e})}function Xt(s,e){return Se({seed:s,...e})}function Zt(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Je(),o=it(s.id,[{identity:e.identity,content:"Hello, I need help"},{identity:i.identity,content:"Hi! How can I assist you today?"},{identity:e.identity,content:"I have a question about my order"},{identity:i.identity,content:"Of course! Please provide your order number."}]);return{room:s,user:e,agent:t,agentParticipant:i,messages:o}}function ei(){let{room:s,participant1:e,participant2:t}=et(),i=new Date().toISOString(),o=[{id:m("track"),kind:"audio",source:"microphone",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:m("track"),kind:"video",source:"camera",participantIdentity:e.identity,roomId:s.id,publishedAt:i,muted:!1},{id:m("track"),kind:"audio",source:"microphone",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1},{id:m("track"),kind:"video",source:"camera",participantIdentity:t.identity,roomId:s.id,publishedAt:i,muted:!1}];return e.trackIds.push(o[0].id,o[1].id),t.trackIds.push(o[2].id,o[3].id),{room:s,participant1:e,participant2:t,tracks:o}}var _e=class{constructor(e,t,i,o,a){this.index=0;this._complete=!1;this.info={id:e,attributes:o,topic:a,timestamp:Date.now()},this.participantIdentity=t,this.topic=a,this.chunks=Array.isArray(i)?i:[i],this.info.totalSize=this.chunks.reduce((r,n)=>r+n.length,0)}get isComplete(){return this._complete}async*[Symbol.asyncIterator](){for(let e of this.chunks)yield e;this._complete=!0}async read(){return this.index>=this.chunks.length?(this._complete=!0,null):this.chunks[this.index++]}async readAll(){let e=this.chunks.slice(this.index).join("");return this.index=this.chunks.length,this._complete=!0,e}cancel(){this._complete=!0}};W();var K=null;function b(s){return K||(K=Ne({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),K}function ot(){K&&K.reset()}async function ti(){K&&(await K.destroy(),K=null)}function ii(s={}){return(e,t)=>{ot();let i={default:void 0,slow_network:"slow_network",unreliable:"unreliable",agent_timeout:"agent_timeout"},o=b({organizationId:s.organizationId,latencyMs:s.latencyMs??50,scenario:s.scenario?i[s.scenario]:void 0});return(async()=>{try{if(s.autoRegisterUser&&await o.registerUser(s.autoRegisterUser.identity,s.autoRegisterUser.secret||"storybook_secret",{name:s.autoRegisterUser.name||"Storybook User"}),s.autoCreateRoom){if(await o.createRoom({language:s.autoCreateRoom.language||"en",timezone:s.autoCreateRoom.timezone||"UTC"}),s.seedMessages)for(let a of s.seedMessages)o.simulateIncomingMessage(a.from,a.content);s.autoStartAgent&&o.room?.id&&await o.startMockAgent(o.room.id,s.autoStartAgent)}}catch(a){console.error("[Storybook Mock] Setup error:",a)}})(),window.__mockConversationService=o,e()}}function oi(s){return B.isMockService(s)}var si={basicChat:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo"}},aiAssistant:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",cannedResponses:["Hello! How can I help you today?","I understand. Let me look into that for you.","Is there anything else you'd like to know?","Thank you for your patience!"]}},videoCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"canned",type:["text","video"],nature:"ai",name:"Video Agent",cannedResponses:["I can see you! The video quality looks great.","Let me share my screen to show you what I mean.","Is the audio coming through clearly?"]},simulateVideo:!0},multiParticipantCall:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",type:["text","video"],name:"Video Agent"},simulateVideo:!0},multiTurnConversation:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"sequential",cannedResponses:["Welcome! I'm your virtual assistant.","I can help you with product information, orders, and support.","What would you like to know?"]},seedMessages:[{from:"agent",content:"Welcome! I'm your virtual assistant."}]},slowNetwork:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},autoStartAgent:{responseStrategy:"echo",responseDelayMs:2e3},latencyMs:500,scenario:"slow_network"},unreliable:{autoRegisterUser:{identity:"sb_user",name:"User"},autoCreateRoom:{language:"en",timezone:"UTC"},scenario:"unreliable"}};function ai(s){return()=>b(s)}var st={async receiveMessage(s,e){b().simulateIncomingMessage(s,e)},simulateJoin(s,e){b().simulateParticipantJoin(s,e)},simulateLeave(s){b().simulateParticipantLeave(s)},async simulateVideoParticipant(s,e,t){let o=b().room;o&&await o.simulateParticipantJoin(s,{name:e||s,kind:"standard",withCamera:t?.withCamera??!0,withMicrophone:t?.withMicrophone??!0})},async simulateVideoAgent(s,e){let i=b().room;i&&await i.simulateAgentJoin(s,e||"AI Agent")},async enableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!0)},async disableLocalCamera(){let e=b().room;e&&await e.localParticipant.setCameraEnabled(!1)},async enableLocalMicrophone(){let e=b().room;e&&await e.localParticipant.setMicrophoneEnabled(!0)},async simulateMultipleParticipants(s){let e=["Alice","Bob","Carol","David","Eve","Frank","Grace","Henry","Ivy","Jack"],i=b().room;if(i)for(let o=0;o<Math.min(s,e.length);o++)await i.simulateParticipantJoin(`participant_${o+1}`,{name:e[o],kind:"standard",withCamera:!0,withMicrophone:!0}),await new Promise(a=>setTimeout(a,100))},clearParticipants(){let e=b().room;if(e)for(let t of e.remoteParticipants.keys())e.simulateParticipantLeave(t)},simulateCallRequest(s,e){b().simulateCallRequest({name:s,guestId:e||`guest_${Date.now()}`})},async simulateDisconnect(){await b().simulateDisconnect()},getEventHistory(){return b().getEventHistory()},exportState(){return b().exportState()},getRoom(){return b().room}};typeof window<"u"&&(window.MockServiceActions=st);var at={OpenWidget:"openWidget",InitialStep:"initialStep"};var rt="ol",ri={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},vo=new Set(Object.values(at)),nt=class s{constructor(){this.params=s.parse()}get hasParams(){return Object.keys(this.params).length>0}getParams(){return{...this.params}}matchesInstallation(e){return this.params.installationId?this.params.installationId===e:!0}cleanUrl(){let e=new URL(window.location.href),t=!1;for(let i of Array.from(e.searchParams.keys()))i.startsWith(rt)&&i.substring(rt.length)in ri&&(e.searchParams.delete(i),t=!0);t&&window.history.replaceState(window.history.state,"",e.toString())}static parse(){let e={},t=new URLSearchParams(window.location.search);for(let[i,o]of Object.entries(ri)){let a=`${rt}${i}`,r=t.get(a);if(r!==null){if(o==="action"){vo.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{be as AgentNotFoundError,Oi as Asset,B as ConversationServiceFactory,at as DeepLinkAction,nt as DeepLinkService,je as InvalidOperationError,L as MockConversationService,le as MockEventEmitter,f as MockLiveKitError,X as MockLocalParticipant,z as MockParticipant,O as MockRoom,st as MockServiceActions,de as MockState,_e as MockTextStreamReader,A as MockTrack,x as MockTrackPublication,ke as NetworkError,y as OSBAsset,h as OSBSideBar,T as OSBUpload,ve as ParticipantAlreadyJoinedError,he as ParticipantNotFoundError,ge as RoomEndedError,I as RoomNotFoundError,$e as SYNTHETIC_MEDIA_PRESETS,Fi as SideBar,si as StorybookScenarios,we as TimeoutError,fe as TrackNotFoundError,ye as UnauthorizedError,qi as Upload,Be as createAgentFixture,Kt as createAgentWithCannedResponses,Zt as createChatScenario,it as createConversationFixture,Ht as createConversationService,Se as createDefaultConfig,He as createDefaultRoomFixture,Xt as createDeterministicConfig,ne as createErrorFromMockError,Wt as createLatencyConfig,Yt as createMessageFixture,Ne as createMockConversationService,ai as createMockServiceFactory,Bt as createParticipantBatch,tt as createParticipantFixture,Je as createRoomWithAgent,Vt as createRoomWithAgentAndDataTrack,Ve as createRoomWithLocalParticipant,Jt as createRoomWithMediaTracks,et as createRoomWithTwoParticipants,Gt as createSequentialAgent,Qt as createStrictConfig,Fe as createSyntheticAudioTrack,Ue as createSyntheticMedia,Ze as createSyntheticMediaFromPreset,De as createSyntheticVideoTrack,ei as createVideoCallScenario,St as decodeMockToken,ti as destroyStorybookMockService,Ct as generateMockApiResponseId,Tt as generateMockExternalId,m as generateMockId,Pt as generateMockIdBatch,At as generateMockMessageId,_t as generateMockParticipantIdentity,xt as generateMockRoomName,R as generateMockToken,Mt as generateMockTrackSid,ae as generateMockWsUrl,wt as generateSeededMockId,b as getStorybookMockService,oi as isMockConversationService,E as isMockError,Rt as isMockLiveKitError,Re as resetIdCounter,ot as resetStorybookMockService,jt as setIdCounter,ii as withMockConversationService};