@onlive.ai/common-121 0.2.228 → 0.2.230

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 (508) hide show
  1. package/{audi-dark.theme-C92mx6HX.d.cts → audi-dark.theme-BDa-xEbe.d.cts} +1 -1
  2. package/{audi-dark.theme-C92mx6HX.d.ts → audi-dark.theme-BDa-xEbe.d.ts} +1 -1
  3. package/{audi.theme-b5_HO8i0.d.cts → audi.theme-B-t6TJ4Q.d.cts} +1 -1
  4. package/{audi.theme-b5_HO8i0.d.ts → audi.theme-B-t6TJ4Q.d.ts} +1 -1
  5. package/{australia.theme-Cr_KZr4r.d.cts → australia.theme-Do8ilkFN.d.cts} +1 -1
  6. package/{australia.theme-Cr_KZr4r.d.ts → australia.theme-Do8ilkFN.d.ts} +1 -1
  7. package/{chunk-JB6NDWSG.js → chunk-5KMLMQ5U.js} +1 -1
  8. package/components/asset/asset-modal-portal.cjs +1 -1
  9. package/components/asset/asset-modal-portal.d.cts +1 -1
  10. package/components/asset/asset-modal-portal.d.ts +1 -1
  11. package/components/asset/asset-modal-portal.js +1 -1
  12. package/components/asset/asset.cjs +38 -39
  13. package/components/asset/asset.d.cts +1 -1
  14. package/components/asset/asset.d.ts +1 -1
  15. package/components/asset/asset.js +28 -29
  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 +77 -78
  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 +20 -21
  24. package/components/asset/asset.styles.cjs +1 -1
  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 +1 -1
  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 +38 -39
  33. package/components/asset/index.d.cts +1 -1
  34. package/components/asset/index.d.ts +1 -1
  35. package/components/asset/index.js +28 -29
  36. package/components/player/player.cjs +5 -6
  37. package/components/player/player.d.cts +6 -1
  38. package/components/player/player.d.ts +6 -1
  39. package/components/player/player.js +6 -7
  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 +15 -16
  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 +9 -10
  48. package/components/side-bar/side-bar.cjs +9 -10
  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 +9 -10
  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-gwX4a0qX.d.cts → cuernavaca.theme-C7eI43Ti.d.cts} +1 -1
  77. package/{cuernavaca.theme-gwX4a0qX.d.ts → cuernavaca.theme-C7eI43Ti.d.ts} +1 -1
  78. package/{cupra-diagonal.theme-YeEq5NNx.d.cts → cupra-diagonal.theme-CTnux7Xn.d.cts} +1 -1
  79. package/{cupra-diagonal.theme-YeEq5NNx.d.ts → cupra-diagonal.theme-CTnux7Xn.d.ts} +1 -1
  80. package/{cupra-events.theme-CZsQUILE.d.cts → cupra-events.theme-DVzhEs0S.d.cts} +1 -1
  81. package/{cupra-events.theme-CZsQUILE.d.ts → cupra-events.theme-DVzhEs0S.d.ts} +1 -1
  82. package/{cupra.theme-Dwf_KC9c.d.cts → cupra.theme-DGD1gXAe.d.cts} +1 -1
  83. package/{cupra.theme-Dwf_KC9c.d.ts → cupra.theme-DGD1gXAe.d.ts} +1 -1
  84. package/{dark-DSX5vBCc.d.cts → dark-Bp5g8THy.d.cts} +1 -1
  85. package/{dark-DSX5vBCc.d.ts → dark-Bp5g8THy.d.ts} +1 -1
  86. package/{germany.theme-BZHEis96.d.cts → germany.theme-Dr2KwHjU.d.cts} +1 -1
  87. package/{germany.theme-BZHEis96.d.ts → germany.theme-Dr2KwHjU.d.ts} +1 -1
  88. package/{hyundai.theme-CZ3-e75P.d.cts → hyundai.theme-a4zB1THd.d.cts} +1 -1
  89. package/{hyundai.theme-CZ3-e75P.d.ts → hyundai.theme-a4zB1THd.d.ts} +1 -1
  90. package/index.cjs +88 -90
  91. package/index.d.cts +7 -2
  92. package/index.d.ts +7 -2
  93. package/index.iife.js +99 -100
  94. package/index.js +116 -118
  95. package/{italy.theme-e_NIp9gB.d.cts → italy.theme-jr09Vs7Z.d.cts} +1 -1
  96. package/{italy.theme-e_NIp9gB.d.ts → italy.theme-jr09Vs7Z.d.ts} +1 -1
  97. package/{jac-dark.theme-CID5X7cE.d.cts → jac-dark.theme-CnuWig-V.d.cts} +1 -1
  98. package/{jac-dark.theme-CID5X7cE.d.ts → jac-dark.theme-CnuWig-V.d.ts} +1 -1
  99. package/{jac.theme-C7kaj89z.d.cts → jac.theme-CLx_Lx9m.d.cts} +1 -1
  100. package/{jac.theme-C7kaj89z.d.ts → jac.theme-CLx_Lx9m.d.ts} +1 -1
  101. package/{light-DNobHysW.d.cts → light-SRZLDwc5.d.cts} +1 -1
  102. package/{light-DNobHysW.d.ts → light-SRZLDwc5.d.ts} +1 -1
  103. package/{magimix.theme-_PJhrflU.d.cts → magimix.theme-BBI5gGGE.d.cts} +1 -1
  104. package/{magimix.theme-_PJhrflU.d.ts → magimix.theme-BBI5gGGE.d.ts} +1 -1
  105. package/{media-Z2KW3VEA.js → media-SMLGLG2N.js} +2 -2
  106. package/{onlive-ai.theme-DQYkXql5.d.cts → onlive-ai.theme-BzWL7xq-.d.cts} +1 -1
  107. package/{onlive-ai.theme-DQYkXql5.d.ts → onlive-ai.theme-BzWL7xq-.d.ts} +1 -1
  108. package/{onlive.theme-D_SLBReG.d.cts → onlive.theme-wChpAYgO.d.cts} +1 -1
  109. package/{onlive.theme-D_SLBReG.d.ts → onlive.theme-wChpAYgO.d.ts} +1 -1
  110. package/package.json +1 -1
  111. package/peugeot.theme-2goyfg2G.d.cts +11 -0
  112. package/peugeot.theme-2goyfg2G.d.ts +11 -0
  113. package/react/components/asset/Asset.cjs +1 -1
  114. package/react/components/asset/Asset.jsx +1 -1
  115. package/react/components/side-bar/SideBar.cjs +1 -1
  116. package/react/components/side-bar/SideBar.jsx +1 -1
  117. package/react/components/upload/Upload.cjs +1 -1
  118. package/react/components/upload/Upload.jsx +1 -1
  119. package/{seat-cupra.theme-DaKdJYyc.d.cts → seat-cupra.theme-CmR-q7Xu.d.cts} +1 -1
  120. package/{seat-cupra.theme-DaKdJYyc.d.ts → seat-cupra.theme-CmR-q7Xu.d.ts} +1 -1
  121. package/{seat.theme-BkE3lDxJ.d.cts → seat.theme-BCvHF65K.d.cts} +1 -1
  122. package/{seat.theme-BkE3lDxJ.d.ts → seat.theme-BCvHF65K.d.ts} +1 -1
  123. package/services/audio.service.cjs +1 -1
  124. package/services/audio.service.d.cts +1 -1
  125. package/services/audio.service.d.ts +1 -1
  126. package/services/audio.service.js +1 -1
  127. package/services/conversation/conversation.service.cjs +1 -1
  128. package/services/conversation/conversation.service.d.cts +1 -1
  129. package/services/conversation/conversation.service.d.ts +1 -1
  130. package/services/conversation/conversation.service.js +1 -1
  131. package/services/conversation/conversation.types.cjs +1 -1
  132. package/services/conversation/conversation.types.d.cts +1 -1
  133. package/services/conversation/conversation.types.d.ts +1 -1
  134. package/services/conversation/conversation.types.js +1 -1
  135. package/services/conversation/index.cjs +1 -1
  136. package/services/conversation/index.d.cts +1 -1
  137. package/services/conversation/index.d.ts +1 -1
  138. package/services/conversation/index.js +1 -1
  139. package/services/conversation/mock/actor/agent.cjs +1 -1
  140. package/services/conversation/mock/actor/agent.d.cts +1 -1
  141. package/services/conversation/mock/actor/agent.d.ts +1 -1
  142. package/services/conversation/mock/actor/agent.js +1 -1
  143. package/services/conversation/mock/actor/index.cjs +1 -1
  144. package/services/conversation/mock/actor/index.d.cts +1 -1
  145. package/services/conversation/mock/actor/index.d.ts +1 -1
  146. package/services/conversation/mock/actor/index.js +1 -1
  147. package/services/conversation/mock/actor/strategies.cjs +1 -1
  148. package/services/conversation/mock/actor/strategies.d.cts +1 -1
  149. package/services/conversation/mock/actor/strategies.d.ts +1 -1
  150. package/services/conversation/mock/actor/strategies.js +1 -1
  151. package/services/conversation/mock/errors.cjs +1 -1
  152. package/services/conversation/mock/errors.d.cts +1 -1
  153. package/services/conversation/mock/errors.d.ts +1 -1
  154. package/services/conversation/mock/errors.js +1 -1
  155. package/services/conversation/mock/events.cjs +1 -1
  156. package/services/conversation/mock/events.d.cts +1 -1
  157. package/services/conversation/mock/events.d.ts +1 -1
  158. package/services/conversation/mock/events.js +1 -1
  159. package/services/conversation/mock/factory.cjs +1 -1
  160. package/services/conversation/mock/factory.d.cts +1 -1
  161. package/services/conversation/mock/factory.d.ts +1 -1
  162. package/services/conversation/mock/factory.js +1 -1
  163. package/services/conversation/mock/fixtures.cjs +1 -1
  164. package/services/conversation/mock/fixtures.d.cts +1 -1
  165. package/services/conversation/mock/fixtures.d.ts +1 -1
  166. package/services/conversation/mock/fixtures.js +1 -1
  167. package/services/conversation/mock/generators.cjs +1 -1
  168. package/services/conversation/mock/generators.d.cts +1 -1
  169. package/services/conversation/mock/generators.d.ts +1 -1
  170. package/services/conversation/mock/generators.js +1 -1
  171. package/services/conversation/mock/index.cjs +1 -1
  172. package/services/conversation/mock/index.d.cts +1 -1
  173. package/services/conversation/mock/index.d.ts +1 -1
  174. package/services/conversation/mock/index.js +1 -1
  175. package/services/conversation/mock/livekit/index.cjs +1 -1
  176. package/services/conversation/mock/livekit/index.d.cts +1 -1
  177. package/services/conversation/mock/livekit/index.d.ts +1 -1
  178. package/services/conversation/mock/livekit/index.js +1 -1
  179. package/services/conversation/mock/livekit/local-participant.cjs +1 -1
  180. package/services/conversation/mock/livekit/local-participant.d.cts +1 -1
  181. package/services/conversation/mock/livekit/local-participant.d.ts +1 -1
  182. package/services/conversation/mock/livekit/local-participant.js +1 -1
  183. package/services/conversation/mock/livekit/participant.cjs +1 -1
  184. package/services/conversation/mock/livekit/participant.d.cts +1 -1
  185. package/services/conversation/mock/livekit/participant.d.ts +1 -1
  186. package/services/conversation/mock/livekit/participant.js +1 -1
  187. package/services/conversation/mock/livekit/room.cjs +1 -1
  188. package/services/conversation/mock/livekit/room.d.cts +1 -1
  189. package/services/conversation/mock/livekit/room.d.ts +1 -1
  190. package/services/conversation/mock/livekit/room.js +1 -1
  191. package/services/conversation/mock/livekit/streams.cjs +1 -1
  192. package/services/conversation/mock/livekit/streams.d.cts +1 -1
  193. package/services/conversation/mock/livekit/streams.d.ts +1 -1
  194. package/services/conversation/mock/livekit/streams.js +1 -1
  195. package/services/conversation/mock/livekit/tracks.cjs +1 -1
  196. package/services/conversation/mock/livekit/tracks.d.cts +1 -1
  197. package/services/conversation/mock/livekit/tracks.d.ts +1 -1
  198. package/services/conversation/mock/livekit/tracks.js +1 -1
  199. package/services/conversation/mock/media.cjs +1 -1
  200. package/services/conversation/mock/media.d.cts +1 -1
  201. package/services/conversation/mock/media.d.ts +1 -1
  202. package/services/conversation/mock/media.js +1 -1
  203. package/services/conversation/mock/service.cjs +1 -1
  204. package/services/conversation/mock/service.d.cts +1 -1
  205. package/services/conversation/mock/service.d.ts +1 -1
  206. package/services/conversation/mock/service.js +1 -1
  207. package/services/conversation/mock/service.test.cjs +1 -1
  208. package/services/conversation/mock/service.test.d.cts +1 -1
  209. package/services/conversation/mock/service.test.d.ts +1 -1
  210. package/services/conversation/mock/service.test.js +1 -1
  211. package/services/conversation/mock/state.cjs +1 -1
  212. package/services/conversation/mock/state.d.cts +1 -1
  213. package/services/conversation/mock/state.d.ts +1 -1
  214. package/services/conversation/mock/state.js +1 -1
  215. package/services/conversation/mock/storybook.cjs +1 -1
  216. package/services/conversation/mock/storybook.d.cts +1 -1
  217. package/services/conversation/mock/storybook.d.ts +1 -1
  218. package/services/conversation/mock/storybook.js +1 -1
  219. package/services/conversation/mock/types.cjs +1 -1
  220. package/services/conversation/mock/types.d.cts +1 -1
  221. package/services/conversation/mock/types.d.ts +1 -1
  222. package/services/conversation/mock/types.js +1 -1
  223. package/services/deep-link.service.cjs +1 -1
  224. package/services/deep-link.service.d.cts +1 -1
  225. package/services/deep-link.service.d.ts +1 -1
  226. package/services/deep-link.service.js +1 -1
  227. package/services/faqs/faqs.service.cjs +1 -1
  228. package/services/faqs/faqs.service.d.cts +1 -1
  229. package/services/faqs/faqs.service.d.ts +1 -1
  230. package/services/faqs/faqs.service.js +1 -1
  231. package/services/faqs/faqs.types.cjs +1 -1
  232. package/services/faqs/faqs.types.d.cts +1 -1
  233. package/services/faqs/faqs.types.d.ts +1 -1
  234. package/services/faqs/faqs.types.js +1 -1
  235. package/services/faqs/index.cjs +1 -1
  236. package/services/faqs/index.d.cts +1 -1
  237. package/services/faqs/index.d.ts +1 -1
  238. package/services/faqs/index.js +1 -1
  239. package/services/file/file.service.cjs +1 -1
  240. package/services/file/file.service.d.cts +1 -1
  241. package/services/file/file.service.d.ts +1 -1
  242. package/services/file/file.service.js +1 -1
  243. package/services/file/file.types.cjs +1 -1
  244. package/services/file/file.types.d.cts +1 -1
  245. package/services/file/file.types.d.ts +1 -1
  246. package/services/file/file.types.js +1 -1
  247. package/services/file/index.cjs +1 -1
  248. package/services/file/index.d.cts +1 -1
  249. package/services/file/index.d.ts +1 -1
  250. package/services/file/index.js +1 -1
  251. package/services/firebase/firebase-api.cjs +1 -1
  252. package/services/firebase/firebase-api.d.cts +1 -1
  253. package/services/firebase/firebase-api.d.ts +1 -1
  254. package/services/firebase/firebase-api.js +1 -1
  255. package/services/multimedia/config.example.cjs +1 -1
  256. package/services/multimedia/config.example.d.cts +1 -1
  257. package/services/multimedia/config.example.d.ts +1 -1
  258. package/services/multimedia/config.example.js +1 -1
  259. package/services/multimedia/index.cjs +1 -1
  260. package/services/multimedia/index.d.cts +1 -1
  261. package/services/multimedia/index.d.ts +1 -1
  262. package/services/multimedia/index.js +1 -1
  263. package/services/multimedia/multimedia.service.cjs +1 -1
  264. package/services/multimedia/multimedia.service.d.cts +1 -1
  265. package/services/multimedia/multimedia.service.d.ts +1 -1
  266. package/services/multimedia/multimedia.service.js +1 -1
  267. package/services/multimedia/multimedia.types.cjs +1 -1
  268. package/services/multimedia/multimedia.types.d.cts +1 -1
  269. package/services/multimedia/multimedia.types.d.ts +1 -1
  270. package/services/multimedia/multimedia.types.js +1 -1
  271. package/services/product/index.cjs +1 -1
  272. package/services/product/index.d.cts +1 -1
  273. package/services/product/index.d.ts +1 -1
  274. package/services/product/index.js +1 -1
  275. package/services/product/product.service.cjs +1 -1
  276. package/services/product/product.service.d.cts +1 -1
  277. package/services/product/product.service.d.ts +1 -1
  278. package/services/product/product.service.js +1 -1
  279. package/services/product/product.types.cjs +1 -1
  280. package/services/product/product.types.d.cts +1 -1
  281. package/services/product/product.types.d.ts +1 -1
  282. package/services/product/product.types.js +1 -1
  283. package/services/request.provider.cjs +1 -1
  284. package/services/request.provider.d.cts +1 -1
  285. package/services/request.provider.d.ts +1 -1
  286. package/services/request.provider.js +1 -1
  287. package/services/session.service.cjs +1 -1
  288. package/services/session.service.d.cts +1 -1
  289. package/services/session.service.d.ts +1 -1
  290. package/services/session.service.js +1 -1
  291. package/services/sessions-api.service.cjs +1 -1
  292. package/services/sessions-api.service.d.cts +1 -1
  293. package/services/sessions-api.service.d.ts +1 -1
  294. package/services/sessions-api.service.js +1 -1
  295. package/services/sessions.controller.cjs +1 -1
  296. package/services/sessions.controller.d.cts +1 -1
  297. package/services/sessions.controller.d.ts +1 -1
  298. package/services/sessions.controller.js +1 -1
  299. package/services/sessions.types.cjs +1 -1
  300. package/services/sessions.types.d.cts +1 -1
  301. package/services/sessions.types.d.ts +1 -1
  302. package/services/sessions.types.js +1 -1
  303. package/services/upload/index.cjs +1 -1
  304. package/services/upload/index.d.cts +1 -1
  305. package/services/upload/index.d.ts +1 -1
  306. package/services/upload/index.js +1 -1
  307. package/services/upload/upload.service.cjs +1 -1
  308. package/services/upload/upload.service.d.cts +1 -1
  309. package/services/upload/upload.service.d.ts +1 -1
  310. package/services/upload/upload.service.js +1 -1
  311. package/{skoda.theme-BhoWwnaO.d.cts → skoda.theme-BCNfnrlu.d.cts} +1 -1
  312. package/{skoda.theme-BhoWwnaO.d.ts → skoda.theme-BCNfnrlu.d.ts} +1 -1
  313. package/themes/custom/audi-dark.theme.cjs +1 -1
  314. package/themes/custom/audi-dark.theme.d.cts +2 -2
  315. package/themes/custom/audi-dark.theme.d.ts +2 -2
  316. package/themes/custom/audi-dark.theme.js +1 -1
  317. package/themes/custom/audi.theme.cjs +1 -1
  318. package/themes/custom/audi.theme.d.cts +2 -2
  319. package/themes/custom/audi.theme.d.ts +2 -2
  320. package/themes/custom/audi.theme.js +1 -1
  321. package/themes/custom/australia.theme.cjs +1 -1
  322. package/themes/custom/australia.theme.d.cts +2 -2
  323. package/themes/custom/australia.theme.d.ts +2 -2
  324. package/themes/custom/australia.theme.js +1 -1
  325. package/themes/custom/cuernavaca.theme.cjs +1 -1
  326. package/themes/custom/cuernavaca.theme.d.cts +2 -2
  327. package/themes/custom/cuernavaca.theme.d.ts +2 -2
  328. package/themes/custom/cuernavaca.theme.js +1 -1
  329. package/themes/custom/cupra-diagonal.theme.cjs +1 -1
  330. package/themes/custom/cupra-diagonal.theme.d.cts +2 -2
  331. package/themes/custom/cupra-diagonal.theme.d.ts +2 -2
  332. package/themes/custom/cupra-diagonal.theme.js +1 -1
  333. package/themes/custom/cupra-events.theme.cjs +1 -1
  334. package/themes/custom/cupra-events.theme.d.cts +2 -2
  335. package/themes/custom/cupra-events.theme.d.ts +2 -2
  336. package/themes/custom/cupra-events.theme.js +1 -1
  337. package/themes/custom/cupra.theme.cjs +1 -1
  338. package/themes/custom/cupra.theme.d.cts +2 -2
  339. package/themes/custom/cupra.theme.d.ts +2 -2
  340. package/themes/custom/cupra.theme.js +1 -1
  341. package/themes/custom/germany.theme.cjs +1 -1
  342. package/themes/custom/germany.theme.d.cts +2 -2
  343. package/themes/custom/germany.theme.d.ts +2 -2
  344. package/themes/custom/germany.theme.js +1 -1
  345. package/themes/custom/glass.theme.cjs +1 -1
  346. package/themes/custom/glass.theme.d.cts +1 -1
  347. package/themes/custom/glass.theme.d.ts +1 -1
  348. package/themes/custom/glass.theme.js +1 -1
  349. package/themes/custom/hyundai.theme.cjs +1 -1
  350. package/themes/custom/hyundai.theme.d.cts +2 -2
  351. package/themes/custom/hyundai.theme.d.ts +2 -2
  352. package/themes/custom/hyundai.theme.js +1 -1
  353. package/themes/custom/italy.theme.cjs +1 -1
  354. package/themes/custom/italy.theme.d.cts +2 -2
  355. package/themes/custom/italy.theme.d.ts +2 -2
  356. package/themes/custom/italy.theme.js +1 -1
  357. package/themes/custom/jac-dark.theme.cjs +1 -1
  358. package/themes/custom/jac-dark.theme.d.cts +2 -2
  359. package/themes/custom/jac-dark.theme.d.ts +2 -2
  360. package/themes/custom/jac-dark.theme.js +1 -1
  361. package/themes/custom/jac.theme.cjs +1 -1
  362. package/themes/custom/jac.theme.d.cts +2 -2
  363. package/themes/custom/jac.theme.d.ts +2 -2
  364. package/themes/custom/jac.theme.js +1 -1
  365. package/themes/custom/magimix.theme.cjs +1 -1
  366. package/themes/custom/magimix.theme.d.cts +2 -2
  367. package/themes/custom/magimix.theme.d.ts +2 -2
  368. package/themes/custom/magimix.theme.js +1 -1
  369. package/themes/custom/onlive-ai.theme.cjs +1 -1
  370. package/themes/custom/onlive-ai.theme.d.cts +2 -2
  371. package/themes/custom/onlive-ai.theme.d.ts +2 -2
  372. package/themes/custom/onlive-ai.theme.js +1 -1
  373. package/themes/custom/onlive.theme.cjs +1 -1
  374. package/themes/custom/onlive.theme.d.cts +2 -2
  375. package/themes/custom/onlive.theme.d.ts +2 -2
  376. package/themes/custom/onlive.theme.js +1 -1
  377. package/themes/custom/peugeot.theme.cjs +372 -0
  378. package/themes/custom/peugeot.theme.css +369 -0
  379. package/themes/custom/peugeot.theme.d.cts +3 -0
  380. package/themes/custom/peugeot.theme.d.ts +3 -0
  381. package/themes/custom/peugeot.theme.js +372 -0
  382. package/themes/custom/seat-cupra.theme.cjs +1 -1
  383. package/themes/custom/seat-cupra.theme.d.cts +2 -2
  384. package/themes/custom/seat-cupra.theme.d.ts +2 -2
  385. package/themes/custom/seat-cupra.theme.js +1 -1
  386. package/themes/custom/seat.theme.cjs +36 -31
  387. package/themes/custom/seat.theme.css +36 -31
  388. package/themes/custom/seat.theme.d.cts +2 -2
  389. package/themes/custom/seat.theme.d.ts +2 -2
  390. package/themes/custom/seat.theme.js +36 -31
  391. package/themes/custom/skoda.theme.cjs +1 -1
  392. package/themes/custom/skoda.theme.d.cts +2 -2
  393. package/themes/custom/skoda.theme.d.ts +2 -2
  394. package/themes/custom/skoda.theme.js +1 -1
  395. package/themes/custom/transparency.theme.cjs +1 -1
  396. package/themes/custom/transparency.theme.d.cts +2 -2
  397. package/themes/custom/transparency.theme.d.ts +2 -2
  398. package/themes/custom/transparency.theme.js +1 -1
  399. package/themes/dark.cjs +1 -1
  400. package/themes/dark.d.cts +2 -2
  401. package/themes/dark.d.ts +2 -2
  402. package/themes/dark.js +1 -1
  403. package/themes/light.cjs +1 -1
  404. package/themes/light.d.cts +2 -2
  405. package/themes/light.d.ts +2 -2
  406. package/themes/light.js +1 -1
  407. package/{transparency.theme-CbIjRfrj.d.cts → transparency.theme-CGmZFrjm.d.cts} +1 -1
  408. package/{transparency.theme-CbIjRfrj.d.ts → transparency.theme-CGmZFrjm.d.ts} +1 -1
  409. package/types/deep-link.types.cjs +1 -1
  410. package/types/deep-link.types.d.cts +1 -1
  411. package/types/deep-link.types.d.ts +1 -1
  412. package/types/deep-link.types.js +1 -1
  413. package/types/globals.cjs +1 -1
  414. package/types/globals.d.cts +1 -1
  415. package/types/globals.d.ts +1 -1
  416. package/types/globals.js +1 -1
  417. package/types/tracking-options.cjs +1 -1
  418. package/types/tracking-options.d.cts +1 -1
  419. package/types/tracking-options.d.ts +1 -1
  420. package/types/tracking-options.js +1 -1
  421. package/utils/adopt-styles.cjs +1 -1
  422. package/utils/adopt-styles.d.cts +1 -1
  423. package/utils/adopt-styles.d.ts +1 -1
  424. package/utils/adopt-styles.js +1 -1
  425. package/utils/apply-optional-styles.cjs +428 -53
  426. package/utils/apply-optional-styles.d.cts +25 -23
  427. package/utils/apply-optional-styles.d.ts +25 -23
  428. package/utils/apply-optional-styles.js +428 -53
  429. package/utils/browser-preferences.cjs +1 -1
  430. package/utils/browser-preferences.d.cts +1 -1
  431. package/utils/browser-preferences.d.ts +1 -1
  432. package/utils/browser-preferences.js +1 -1
  433. package/utils/classify-media.cjs +1 -1
  434. package/utils/classify-media.d.cts +1 -1
  435. package/utils/classify-media.d.ts +1 -1
  436. package/utils/classify-media.js +1 -1
  437. package/utils/decorators.cjs +1 -1
  438. package/utils/decorators.d.cts +1 -1
  439. package/utils/decorators.d.ts +1 -1
  440. package/utils/decorators.js +1 -1
  441. package/utils/detected-lang.cjs +1 -1
  442. package/utils/detected-lang.d.cts +1 -1
  443. package/utils/detected-lang.d.ts +1 -1
  444. package/utils/detected-lang.js +1 -1
  445. package/utils/fullscreen.cjs +1 -1
  446. package/utils/fullscreen.d.cts +1 -1
  447. package/utils/fullscreen.d.ts +1 -1
  448. package/utils/fullscreen.js +1 -1
  449. package/utils/insert-script.cjs +1 -1
  450. package/utils/insert-script.d.cts +1 -1
  451. package/utils/insert-script.d.ts +1 -1
  452. package/utils/insert-script.js +1 -1
  453. package/utils/is-map-compatible.cjs +1 -1
  454. package/utils/is-map-compatible.d.cts +1 -1
  455. package/utils/is-map-compatible.d.ts +1 -1
  456. package/utils/is-map-compatible.js +1 -1
  457. package/utils/markdown.cjs +1 -1
  458. package/utils/markdown.d.cts +1 -1
  459. package/utils/markdown.d.ts +1 -1
  460. package/utils/markdown.js +1 -1
  461. package/utils/merge.cjs +1 -1
  462. package/utils/merge.d.cts +1 -1
  463. package/utils/merge.d.ts +1 -1
  464. package/utils/merge.js +1 -1
  465. package/utils/multiband-track-volume.cjs +1 -1
  466. package/utils/multiband-track-volume.d.cts +1 -1
  467. package/utils/multiband-track-volume.d.ts +1 -1
  468. package/utils/multiband-track-volume.js +1 -1
  469. package/utils/onlive-url-params.cjs +1 -1
  470. package/utils/onlive-url-params.d.cts +1 -1
  471. package/utils/onlive-url-params.d.ts +1 -1
  472. package/utils/onlive-url-params.js +1 -1
  473. package/utils/pretty-distance.cjs +1 -1
  474. package/utils/pretty-distance.d.cts +1 -1
  475. package/utils/pretty-distance.d.ts +1 -1
  476. package/utils/pretty-distance.js +1 -1
  477. package/utils/pretty-time.cjs +1 -1
  478. package/utils/pretty-time.d.cts +1 -1
  479. package/utils/pretty-time.d.ts +1 -1
  480. package/utils/pretty-time.js +1 -1
  481. package/utils/random-string.cjs +1 -1
  482. package/utils/random-string.d.cts +1 -1
  483. package/utils/random-string.d.ts +1 -1
  484. package/utils/random-string.js +1 -1
  485. package/utils/resource-type.cjs +1 -1
  486. package/utils/resource-type.d.cts +1 -1
  487. package/utils/resource-type.d.ts +1 -1
  488. package/utils/resource-type.js +1 -1
  489. package/utils/round-number.cjs +1 -1
  490. package/utils/round-number.d.cts +1 -1
  491. package/utils/round-number.d.ts +1 -1
  492. package/utils/round-number.js +1 -1
  493. package/utils/safe-html.cjs +1 -1
  494. package/utils/safe-html.d.cts +1 -1
  495. package/utils/safe-html.d.ts +1 -1
  496. package/utils/safe-html.js +1 -1
  497. package/utils/sanitize.cjs +1 -1
  498. package/utils/sanitize.d.cts +1 -1
  499. package/utils/sanitize.d.ts +1 -1
  500. package/utils/sanitize.js +1 -1
  501. package/utils/spread.cjs +1 -1
  502. package/utils/spread.d.cts +1 -1
  503. package/utils/spread.d.ts +1 -1
  504. package/utils/spread.js +1 -1
  505. package/utils/watch.cjs +1 -1
  506. package/utils/watch.d.cts +1 -1
  507. package/utils/watch.d.ts +1 -1
  508. package/utils/watch.js +1 -1
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! @onlive.ai/common-121 v0.2.228 | © 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-JB6NDWSG.js";import{html as fe,LitElement as hi}from"lit";import{property as be,state as K}from"lit/decorators.js";import{classMap as fi}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)}}},H=s=>e=>typeof e=="function"?Yt(s,e):Qt(s,e);var V=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 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 J=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),g(e,{...t,headers:i})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var B=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 g(e,{method:"GET",headers:i,credentials:t?"include":void 0})}updateConfig(e){this.config={...this.config,...e}}getConfig(){return{...this.config}}};var q=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=B.initialize(e.multimediaService)),e?.faqsService&&(this.faqsService=V.initialize(e.faqsService)),e?.productService&&(this.productService=q.initialize(e.productService)),e?.fileService&&(this.fileService=J.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 c}from"lit";import{classMap as gi}from"lit/directives/class-map.js";import{ifDefined as te}from"lit/directives/if-defined.js";import{when as L}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","content","variant","size"],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 it,LitElement as ai}from"lit";import{property as ri,query as ni}from"lit/decorators.js";import{repeat as li}from"lit/directives/repeat.js";import ci from"video.js";import{css as di,unsafeCSS as pi}from"lit";import mi from"video.js/dist/video-js.min.css?inline";var ei=Object.defineProperty,ti=Object.getOwnPropertyDescriptor,Ee=(s,e,t,i)=>{for(var o=i>1?void 0:i?ti(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&&ei(e,t,o),o},ii=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),oi=(s,e)=>{let{kind:t,elements:i}=e;return{kind:t,elements:i,finisher(o){customElements.get(s)||window.customElements.define(s,o)}}},si=s=>e=>typeof e=="function"?ii(s,e):oi(s,e),ui=di`
3
- ${pi(mi)}
1
+ /*! @onlive.ai/common-121 v0.2.230 | © 2026 Onlive.ai */
2
+ var pt=Object.defineProperty;var li=Object.getOwnPropertyDescriptor;var ci=(s,e)=>()=>(s&&(e=s(s=0)),e);var di=(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?li(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={};di(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:l="wave"}=s,n=document.createElement("canvas");n.width=e,n.height=t;let d=n.getContext("2d"),u,U=Date.now(),$={wave:C=>{d.fillStyle=o,d.fillRect(0,0,e,t),d.strokeStyle=a,d.lineWidth=3,d.beginPath();for(let j=0;j<e;j++){let x=t/2+Math.sin(j/e*4*Math.PI+C*.002)*(t/4);j===0?d.moveTo(j,x):d.lineTo(j,x)}d.stroke()},pulse:C=>{d.fillStyle=o,d.fillRect(0,0,e,t);let j=Math.sin(C*.003)*.3+.7,x=Math.min(e,t)*.3*j;d.beginPath(),d.arc(e/2,t/2,x,0,Math.PI*2),d.fillStyle=a,d.fill()},bars:C=>{d.fillStyle=o,d.fillRect(0,0,e,t);let j=20,x=e/j,G=t*.7;d.fillStyle=a;for(let pe=0;pe<j;pe++){let dt=Math.abs(Math.sin(pe/j*Math.PI*2+C*.004))*G,ri=pe*x,ni=t-dt;d.fillRect(ri+2,ni,x-4,dt)}},avatar:C=>{d.fillStyle=o,d.fillRect(0,0,e,t);let j=e/2,x=t/2-20,G=Math.min(e,t)*.15;d.beginPath(),d.arc(j,x,G,0,Math.PI*2),d.fillStyle=a,d.fill(),d.beginPath(),d.ellipse(j,x+G*2.2,G*1.5,G,0,Math.PI,0),d.fill(),Math.sin(C*.01)>0&&(d.beginPath(),d.arc(j,x+G*3,5+Math.sin(C*.02)*3,0,Math.PI*2),d.fillStyle="#22c55e",d.fill())},none:()=>{d.fillStyle=o,d.fillRect(0,0,e,t)}},q=()=>{d.fillStyle="rgba(255, 255, 255, 0.8)",d.font=`${Math.floor(t*.04)}px system-ui, sans-serif`,d.textAlign="center",d.fillText(r,e/2,t-20)},Z=()=>{let C=Date.now()-U;$[l](C),q(),u=requestAnimationFrame(Z)};Z();let lt=n.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,l=r.createMediaStreamDestination(),n=r.createOscillator();n.type=i,n.frequency.value=e;let d=r.createGain();d.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(n.frequency),u.start()),n.connect(d),d.connect(l),n.start();let $=l.stream,q=$.getAudioTracks()[0];return{track:q,stream:$,setVolume:Z=>{d.gain.value=Math.max(0,Math.min(1,Z))},setEnabled:Z=>{d.gain.value=Z?t:0},cleanup:()=>{n.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,Q=ci(()=>{"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 xi}from"lit";import{property as Te,state as oe}from"lit/decorators.js";import{classMap as Ai}from"lit/directives/class-map.js";var pi=(s,e)=>(customElements.get(s)?console.debug(`Custom element <${s}> is already defined, skipping definition of ${e.name}.`):window.customElements.define(s,e),e),ui=(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"?pi(s,e):ui(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 l=Array.isArray(r)?r.join(","):r.toString();t.append(`extra_${a}`,l)}}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 l=2**a*1e3;await new Promise(n=>setTimeout(n,l))}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)]),l=[...o.items,...a.items,...r.items];return{items:l,total:l.length,count:l.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 _e=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 c}from"lit";import{classMap as Mi}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 gi}from"lit/directives/unsafe-html.js";import ut from"dompurify";var mi={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=mi)=>ut.sanitize(s,e);function gt(s=""){return gi(vi(s))}function vi(s=""){return mt(s,{ADD_ATTR:["target","rel","content","variant","size"],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 yi,LitElement as ki}from"lit";import{property as ji,query as wi}from"lit/decorators.js";import Si from"video.js";import{css as hi,unsafeCSS as fi}from"lit";import bi from"video.js/dist/video-js.min.css?inline";var vt=hi`
3
+ ${fi(bi)}
4
4
  .och__player {
5
5
  width: 100%;
6
6
  height: auto;
@@ -13,18 +13,17 @@ import{a as u,b as Ge,c as Ye,d as Qe,e as We,f as Xe}from"./chunk-JB6NDWSG.js";
13
13
  background: transparent;
14
14
  transition: all 0.2s ease;
15
15
  }
16
- `,ee=class extends ai{constructor(){super(...arguments),this.sources=[],this.player=null}connectedCallback(){super.connectedCallback();let s="videojs-font-face";if(!document.head.querySelector(`#${s}`)){let e=document.createElement("style");e.id=s,e.innerHTML=`
16
+ `;var W=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(e)}}firstUpdated(){this.$player&&(this.player=ci(this.$player,{controls:!0,controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}))}play(){this.player?.play()}pause(){this.player?.pause()}render(){return it`
22
+ }`,document.head.appendChild(i)}}disconnectedCallback(){this.player?.dispose(),this.player=null,super.disconnectedCallback()}inferMimeType(t,i){let o=t.split("?")[0]?.toLowerCase()||"";if(o.endsWith(".m3u8")||o.endsWith(".m3u"))return"application/x-mpegURL";if(o.endsWith(".mpd"))return"application/dash+xml";if(i){let a=i.toLowerCase();return a==="application/x-mpegurl"||a==="application/vnd.apple.mpegurl"||a==="audio/mpegurl"||a==="audio/x-mpegurl"?"application/x-mpegURL":i}return o.endsWith(".webm")?"video/webm":o.endsWith(".ogv")?"video/ogg":o.endsWith(".mov")?"video/quicktime":o.endsWith(".mp3")?"audio/mpeg":o.endsWith(".m4a")?"audio/mp4":o.endsWith(".aac")?"audio/aac":o.endsWith(".wav")?"audio/wav":o.endsWith(".ogg")||o.endsWith(".oga")?"audio/ogg":(o.endsWith(".mp4")||o.endsWith(".m4v"),"video/mp4")}get normalizedSources(){return this.sources.map(t=>{let i=t.src;return{src:i,type:this.inferMimeType(i,t.type)}})}emitPlayerErrorDiagnostics(){if(!this.player)return;let t=this.player.error(),i={code:t?.code??null,message:t?.message??"unknown-error",currentSrc:this.player.currentSrc()||null,browser:navigator.userAgent,sources:this.normalizedSources};this.dispatchEvent(new CustomEvent("och-player-error",{detail:i,bubbles:!0,composed:!0}))}firstUpdated(){this.$player&&(this.player=Si(this.$player,{controls:!0,sources:this.normalizedSources,html5:{vhs:{overrideNative:!0}},controlBar:{children:["playToggle","progressControl","volumePanel","fullscreenToggle"]}}),this.player.on("error",()=>this.emitPlayerErrorDiagnostics()))}updated(t){if(!this.player||!t.has("sources"))return;let i=this.normalizedSources;if(i.length>0){this.player.src(i);return}this.player.reset()}play(){this.player?.play()}pause(){this.player?.pause()}render(){return yi`
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
- ${li(this.sources,s=>s.src,s=>it`<source src=${s.src} type=${s.type}></source>`)}
28
27
  <p class="vjs-no-js">
29
28
  To view this video please enable JavaScript, and consider upgrading to a web browser that
30
29
  <a href="https://videojs.com/html5-video-support/" target="_blank"> supports HTML5 video </a>
@@ -2041,7 +2040,7 @@ video::-webkit-media-text-track-display {
2041
2040
  transition: all 0.2s ease;
2042
2041
  }
2043
2042
  </style>
2044
- `}};ee.styles=[ui],Ee([ri({type:Array})],ee.prototype,"sources",2),Ee([ni("#player")],ee.prototype,"$player",2),ee=Ee([si("och-player")],ee);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,a,r){return!t.showThumbnail||e.type==="faq"?c``:c`
2043
+ `}};W.styles=[vt],g([ji({type:Array})],W.prototype,"sources",2),g([wi("#player")],W.prototype,"$player",2),W=g([N("och-player")],W);var xe=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,r){return!t.showThumbnail||e.type==="faq"?c``:c`
2045
2044
  <div class="ol-asset__thumbnail">
2046
2045
  ${this.renderThumbnailContent(e)}
2047
2046
  ${this.renderMetadata(e,t)}
@@ -2050,19 +2049,19 @@ video::-webkit-media-text-track-display {
2050
2049
  </div>
2051
2050
  `}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`
2052
2051
  <img
2053
- src="${te(t.thumbnail||t.url)}"
2052
+ src="${ue(t.thumbnail||t.url)}"
2054
2053
  alt="${t.name}"
2055
2054
  class="ol-asset__image"
2056
2055
  />
2057
2056
  `}}case"file":{let t=e;switch(this.getMultimediaSubtype(t)){case"video":return this.renderVideoThumbnail(t);case"presentation":return this.renderPresentationThumbnail(t);default:return c`
2058
2057
  <img
2059
- src="${te(t.thumbnail||t.url)}"
2058
+ src="${ue(t.thumbnail||t.url)}"
2060
2059
  alt="${t.name}"
2061
2060
  class="ol-asset__image"
2062
2061
  />
2063
2062
  `}}default:return c`
2064
2063
  <img
2065
- src="${te(e.thumbnail||e.url)}"
2064
+ src="${ue(e.thumbnail||e.url)}"
2066
2065
  alt="${e.name}"
2067
2066
  class="ol-asset__image"
2068
2067
  />
@@ -2073,7 +2072,7 @@ video::-webkit-media-text-track-display {
2073
2072
  ></och-player>
2074
2073
  `}renderPresentationThumbnail(e){return c`
2075
2074
  <div class="ol-asset__presentation-preview">
2076
- ${L(e.slides&&e.slides.length>0,()=>c`
2075
+ ${H(e.slides&&e.slides.length>0,()=>c`
2077
2076
  <img
2078
2077
  src="${e.slides[0]}"
2079
2078
  alt="Presentation preview"
@@ -2097,7 +2096,7 @@ video::-webkit-media-text-track-display {
2097
2096
  `}renderThumbnailOverlay(e){let t=[];if(e.type==="multimedia"||e.type==="file"){let i=e;this.getMultimediaSubtype(i)==="video"&&i.duration&&t.push(c`
2098
2097
  <div class="ol-asset__duration">${this.formatDuration(i.duration)}</div>
2099
2098
  `)}return c`${t}`}renderContent(e,t){let i=!t.showName&&!t.showDescription&&!t.showTags&&(e.type!=="product"||!t.showPrice);return c`
2100
- <div class=${gi({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2099
+ <div class=${Mi({"ol-asset__content":!0,"ol-asset__content--assets":!!i})}>
2101
2100
  ${this.renderName(e,t)}
2102
2101
  ${this.renderDescription(e,t)}
2103
2102
  ${this.renderPrice(e,t)}
@@ -2112,7 +2111,7 @@ video::-webkit-media-text-track-display {
2112
2111
  `:c``}renderDescription(e,t){if(e.type==="faq"){let o=e;return o.answer?c`
2113
2112
  <div class="ol-asset__description ol-asset__answer">${o.answer}</div>
2114
2113
  `:c``}return e.description?e.type==="product"?t.showDescription?c`
2115
- <div class="ol-asset__description">${tt(e.description)}</div>
2114
+ <div class="ol-asset__description">${gt(e.description)}</div>
2116
2115
  `:c``:t.showDescription?c`
2117
2116
  <div class="ol-asset__description">${e.description}</div>
2118
2117
  `:c``:c``}renderPrice(e,t){if(e.type!=="product"||!t.showPrice)return c``;let i=e;return i.price?c`
@@ -2164,7 +2163,7 @@ video::-webkit-media-text-track-display {
2164
2163
  </div>
2165
2164
  `:c``}renderModalContent(e){switch(e.type){case"multimedia":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?c`
2166
2165
  <img
2167
- src="${te(t.url)}"
2166
+ src="${ue(t.url)}"
2168
2167
  alt="${t.name}"
2169
2168
  class="ol-asset__modal-image"
2170
2169
  />
@@ -2180,7 +2179,7 @@ video::-webkit-media-text-track-display {
2180
2179
  </div>
2181
2180
  `}case"file":{let t=e,i=this.getMultimediaSubtype(t);return i==="image"?c`
2182
2181
  <img
2183
- src="${te(t.url)}"
2182
+ src="${ue(t.url)}"
2184
2183
  alt="${t.name}"
2185
2184
  class="ol-asset__modal-image"
2186
2185
  />
@@ -2203,12 +2202,12 @@ video::-webkit-media-text-track-display {
2203
2202
  <h3 class="ol-asset__modal-title">${e.name}</h3>
2204
2203
  ${e.description?c`<p class="ol-asset__modal-description">${e.description}</p>`:c``}
2205
2204
  </div>
2206
- `}}renderHoverOverlay(e,t,i,o,a){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`
2205
+ `}}renderHoverOverlay(e,t,i,o,a){let r=e.type==="multimedia"&&this.getMultimediaSubtype(e)==="video",l=(e.type==="multimedia"||e.type==="file")&&this.getMultimediaSubtype(e)==="presentation"&&(!e.slides||e.slides.length===0);return r?c`
2207
2206
  <div class="ol-asset__video-controls">
2208
- ${L(i,()=>c`
2207
+ ${H(i,()=>c`
2209
2208
  <ol-button
2210
2209
  class="ol-asset__video-btn ol-asset__video-btn--maximize"
2211
- @click=${l=>{l.stopPropagation(),i(e)}}
2210
+ @click=${n=>{n.stopPropagation(),i(e)}}
2212
2211
  title="Maximize ${e.name}"
2213
2212
  >
2214
2213
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2216,14 +2215,14 @@ video::-webkit-media-text-track-display {
2216
2215
  </svg>
2217
2216
  </ol-button>
2218
2217
  `)}
2219
- ${L(t,()=>c`
2218
+ ${H(t,()=>c`
2220
2219
  <ol-button
2221
2220
  class="ol-asset__video-btn ol-asset__video-btn--download ${o?"ol-asset__video-btn--downloading":""}"
2222
- @click=${l=>{l.stopPropagation(),t(e)}}
2221
+ @click=${n=>{n.stopPropagation(),t(e)}}
2223
2222
  title="Download ${e.name}"
2224
2223
  ?disabled=${o}
2225
2224
  >
2226
- ${L(o,()=>c`
2225
+ ${H(o,()=>c`
2227
2226
  <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2228
2227
  <circle cx="12" cy="12" r="10"></circle>
2229
2228
  <path d="M12 2a10 10 0 0 1 10 10"></path>
@@ -2241,10 +2240,10 @@ video::-webkit-media-text-track-display {
2241
2240
  `:c`
2242
2241
  <div class="ol-asset__hover-overlay">
2243
2242
  <div class="ol-asset__hover-buttons">
2244
- ${L(e.type==="product",()=>c`
2243
+ ${H(e.type==="product",()=>c`
2245
2244
  <ol-button
2246
2245
  class="ol-asset__hover-btn ol-asset__hover-btn--external"
2247
- @click=${l=>{l.stopPropagation(),e.url&&(a?a(e.url):window.open(e.url,"_blank","noopener,noreferrer"))}}
2246
+ @click=${n=>{n.stopPropagation(),e.url&&(a?a(e.url):window.open(e.url,"_blank","noopener,noreferrer"))}}
2248
2247
  title="Open ${e.name} in new window"
2249
2248
  >
2250
2249
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2254,10 +2253,10 @@ video::-webkit-media-text-track-display {
2254
2253
  </svg>
2255
2254
  </ol-button>
2256
2255
  `,()=>c`
2257
- ${L(i&&!n,()=>c`
2256
+ ${H(i&&!l,()=>c`
2258
2257
  <ol-button
2259
2258
  class="ol-asset__hover-btn ol-asset__hover-btn--maximize"
2260
- @click=${l=>{l.stopPropagation(),i(e)}}
2259
+ @click=${n=>{n.stopPropagation(),i(e)}}
2261
2260
  title="Maximize ${e.name}"
2262
2261
  >
2263
2262
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -2265,14 +2264,14 @@ video::-webkit-media-text-track-display {
2265
2264
  </svg>
2266
2265
  </ol-button>
2267
2266
  `)}
2268
- ${L(t&&["multimedia","file"].includes(e.type),()=>c`
2267
+ ${H(t&&["multimedia","file"].includes(e.type),()=>c`
2269
2268
  <ol-button
2270
2269
  class="ol-asset__hover-btn ol-asset__hover-btn--download ${o?"ol-asset__hover-btn--downloading":""}"
2271
- @click=${l=>{l.stopPropagation(),t(e)}}
2270
+ @click=${n=>{n.stopPropagation(),t(e)}}
2272
2271
  title="Download ${e.name}"
2273
2272
  ?disabled=${o}
2274
2273
  >
2275
- ${L(o,()=>c`
2274
+ ${H(o,()=>c`
2276
2275
  <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="ol-asset__download-spinner">
2277
2276
  <circle cx="12" cy="12" r="10"></circle>
2278
2277
  <path d="M12 2a10 10 0 0 1 10 10"></path>
@@ -2289,7 +2288,7 @@ video::-webkit-media-text-track-display {
2289
2288
  `)}
2290
2289
  </div>
2291
2290
  </div>
2292
- `}};import{css as vi}from"lit";var ot=vi`
2291
+ `}};import{css as _i}from"lit";var ht=_i`
2293
2292
  :host {
2294
2293
  display: block;
2295
2294
  --asset-border-radius: 8px;
@@ -2989,7 +2988,7 @@ video::-webkit-media-text-track-display {
2989
2988
  opacity: 0;
2990
2989
  visibility: hidden;
2991
2990
  }
2992
- `;var he=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`
2991
+ `;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`
2993
2992
 
2994
2993
  ol-dialog::part(base){
2995
2994
  z-index: 1000000;
@@ -3403,7 +3402,7 @@ video::-webkit-media-text-track-display {
3403
3402
  ol-dialog.ol-asset__dialog[data-display-state="maximized"] .ol-asset__modal-question {
3404
3403
  color: rgba(130, 170, 255, 1);
3405
3404
  }
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,h=this.getMultimediaSubtype(l);if(h==="image")a=`
3405
+ `}createDialogHTML(){if(!this.asset)return"";let{name:e,description:t,url:i,type:o}=this.asset,a="";if(o==="multimedia"){let n=this.asset,d=this.getMultimediaSubtype(n);if(d==="image")a=`
3407
3406
  <div class="ol-asset__modal-media-container">
3408
3407
  <div class="ol-asset__modal-image-container">
3409
3408
  <img
@@ -3424,11 +3423,11 @@ video::-webkit-media-text-track-display {
3424
3423
  </div>
3425
3424
  </div>
3426
3425
  </div>
3427
- `;else if(h==="video")a=`
3426
+ `;else if(d==="video")a=`
3428
3427
  <div class="ol-asset__modal-media-container">
3429
3428
  <div class="ol-asset__modal-video-container">
3430
3429
  <video
3431
- src="${i||l.vodUrl||""}"
3430
+ src="${i||n.vodUrl||""}"
3432
3431
  controls
3433
3432
  class="ol-asset__modal-video-player"
3434
3433
  preload="metadata"
@@ -3445,23 +3444,23 @@ video::-webkit-media-text-track-display {
3445
3444
  <ol-icon name="video"></ol-icon>
3446
3445
  <span class="ol-asset__modal-type">Video</span>
3447
3446
  </div>
3448
- ${l.duration?`
3447
+ ${n.duration?`
3449
3448
  <div class="ol-asset__modal-metadata-item">
3450
3449
  <ol-icon name="clock"></ol-icon>
3451
- <span class="ol-asset__modal-duration">${this.formatDuration(l.duration)}</span>
3450
+ <span class="ol-asset__modal-duration">${this.formatDuration(n.duration)}</span>
3452
3451
  </div>
3453
3452
  `:""}
3454
3453
  </div>
3455
3454
  </div>
3456
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;a=`
3455
+ `;else if(d==="presentation")if(n.slides&&n.slides.length>0){let u=n.slides;a=`
3457
3456
  <div class="ol-asset__modal-media-container" data-type="presentation">
3458
3457
  <div class="ol-asset__modal-presentation">
3459
3458
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
3460
- ${m.map((Te,Ie)=>`
3459
+ ${u.map(($,q)=>`
3461
3460
  <ol-carousel-item>
3462
3461
  <img
3463
- src="${Te}"
3464
- alt="Slide ${Ie+1} of ${m.length}"
3462
+ src="${$}"
3463
+ alt="Slide ${q+1} of ${u.length}"
3465
3464
  class="ol-asset__modal-slide-image"
3466
3465
  />
3467
3466
  </ol-carousel-item>
@@ -3479,7 +3478,7 @@ video::-webkit-media-text-track-display {
3479
3478
  </div>
3480
3479
  <div class="ol-asset__modal-metadata-item">
3481
3480
  <ol-icon name="layers"></ol-icon>
3482
- <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3481
+ <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3483
3482
  </div>
3484
3483
  </div>
3485
3484
  </div>
@@ -3495,7 +3494,7 @@ video::-webkit-media-text-track-display {
3495
3494
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3496
3495
  <p class="ol-asset__modal-type">Type: Presentation</p>
3497
3496
  </div>
3498
- `}else if(o==="file"){let l=this.asset,h=this.getMultimediaSubtype(l);if(h==="image")a=`
3497
+ `}else if(o==="file"){let n=this.asset,d=this.getMultimediaSubtype(n);if(d==="image")a=`
3499
3498
  <div class="ol-asset__modal-media-container">
3500
3499
  <div class="ol-asset__modal-image-container">
3501
3500
  <img
@@ -3516,11 +3515,11 @@ video::-webkit-media-text-track-display {
3516
3515
  </div>
3517
3516
  </div>
3518
3517
  </div>
3519
- `;else if(h==="video")a=`
3518
+ `;else if(d==="video")a=`
3520
3519
  <div class="ol-asset__modal-media-container">
3521
3520
  <div class="ol-asset__modal-video-container">
3522
3521
  <video
3523
- src="${i||l.vodUrl||""}"
3522
+ src="${i||n.vodUrl||""}"
3524
3523
  controls
3525
3524
  class="ol-asset__modal-video-player"
3526
3525
  preload="metadata"
@@ -3537,23 +3536,23 @@ video::-webkit-media-text-track-display {
3537
3536
  <ol-icon name="video"></ol-icon>
3538
3537
  <span class="ol-asset__modal-type">Video File</span>
3539
3538
  </div>
3540
- ${l.duration?`
3539
+ ${n.duration?`
3541
3540
  <div class="ol-asset__modal-metadata-item">
3542
3541
  <ol-icon name="clock"></ol-icon>
3543
- <span class="ol-asset__modal-duration">${this.formatDuration(l.duration)}</span>
3542
+ <span class="ol-asset__modal-duration">${this.formatDuration(n.duration)}</span>
3544
3543
  </div>
3545
3544
  `:""}
3546
3545
  </div>
3547
3546
  </div>
3548
- `;else if(h==="presentation")if(l.slides&&l.slides.length>0){let m=l.slides;a=`
3547
+ `;else if(d==="presentation")if(n.slides&&n.slides.length>0){let u=n.slides;a=`
3549
3548
  <div class="ol-asset__modal-media-container" data-type="presentation">
3550
3549
  <div class="ol-asset__modal-presentation">
3551
3550
  <ol-carousel pagination navigation loop class="ol-asset__modal-carousel">
3552
- ${m.map((Te,Ie)=>`
3551
+ ${u.map(($,q)=>`
3553
3552
  <ol-carousel-item>
3554
3553
  <img
3555
- src="${Te}"
3556
- alt="Slide ${Ie+1} of ${m.length}"
3554
+ src="${$}"
3555
+ alt="Slide ${q+1} of ${u.length}"
3557
3556
  class="ol-asset__modal-slide-image"
3558
3557
  />
3559
3558
  </ol-carousel-item>
@@ -3571,7 +3570,7 @@ video::-webkit-media-text-track-display {
3571
3570
  </div>
3572
3571
  <div class="ol-asset__modal-metadata-item">
3573
3572
  <ol-icon name="layers"></ol-icon>
3574
- <span class="ol-asset__modal-slides">${m.length} ${m.length===1?"slide":"slides"}</span>
3573
+ <span class="ol-asset__modal-slides">${u.length} ${u.length===1?"slide":"slides"}</span>
3575
3574
  </div>
3576
3575
  </div>
3577
3576
  </div>
@@ -3587,19 +3586,19 @@ video::-webkit-media-text-track-display {
3587
3586
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3588
3587
  <p class="ol-asset__modal-type">Type: Presentation File</p>
3589
3588
  </div>
3590
- `}else if(o==="faq"){let l=this.asset;a=`
3589
+ `}else if(o==="faq"){let n=this.asset;a=`
3591
3590
  <div class="ol-asset__modal-faq">
3592
- <h3 class="ol-asset__modal-question">${l.question||e}</h3>
3593
- <div class="ol-asset__modal-answer">${l.answer||t}</div>
3591
+ <h3 class="ol-asset__modal-question">${n.question||e}</h3>
3592
+ <div class="ol-asset__modal-answer">${n.answer||t}</div>
3594
3593
  </div>
3595
3594
  `}else a=`
3596
3595
  <div class="ol-asset__modal-info">
3597
3596
  <h3 class="ol-asset__modal-title">${e}</h3>
3598
3597
  ${t?`<p class="ol-asset__modal-description">${t}</p>`:""}
3599
3598
  </div>
3600
- `;let r=o==="multimedia"||o==="file",n=o==="faq"&&this.asset.question||e;return`
3599
+ `;let r=o==="multimedia"||o==="file",l=o==="faq"&&this.asset.question||e;return`
3601
3600
  <ol-dialog
3602
- label="${this.escapeHtml(n)}"
3601
+ label="${this.escapeHtml(l)}"
3603
3602
  class="ol-asset__dialog"
3604
3603
  data-fullscreen="${r}"
3605
3604
  data-display-state="${this.displayState}"
@@ -3611,22 +3610,22 @@ video::-webkit-media-text-track-display {
3611
3610
  </div>
3612
3611
  </div>
3613
3612
  </ol-dialog>
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 hi{constructor(){super(...arguments);this.displayState="normal";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(),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 he(this.asset,this.closeModal.bind(this),this.displayState),await this.modalPortal.open())}onOpenLink(t){this.dispatchEvent(new CustomEvent("open-link",{detail:{url:t},bubbles:!0,composed:!0}))}onMaximize(){if(console.debug("Maximize clicked for asset:",this.asset),!!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`
3613
+ `}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 xi{constructor(){super(...arguments);this.displayState="normal";this.loadingState="idle";this.assetRenderer=new xe;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 _e(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())}onOpenLink(t){this.dispatchEvent(new CustomEvent("open-link",{detail:{url:t},bubbles:!0,composed:!0}))}onMaximize(){if(console.debug("Maximize clicked for asset:",this.asset),!!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`
3615
3614
  <div class="ol-asset ol-asset--loading">
3616
3615
  ${this.assetRenderer.renderLoading()}
3617
3616
  </div>
3618
- `:this.loadingState==="error"?fe`
3617
+ `:this.loadingState==="error"?Ce`
3619
3618
  <div class="ol-asset ol-asset--error">
3620
3619
  ${this.assetRenderer.renderError(this.error)}
3621
3620
  </div>
3622
- `:this.asset?fe`
3621
+ `:this.asset?Ce`
3623
3622
  <div
3624
- class="ol-asset ${fi({"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"})}"
3623
+ class="ol-asset ${Ai({"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"})}"
3625
3624
  >
3626
3625
  ${this.assetRenderer.renderThumbnail(this.asset,t,this.onDownload.bind(this),this.isDownloading,this.onMaximize.bind(this),this.onOpenLink.bind(this))}
3627
3626
  ${this.assetRenderer.renderContent(this.asset,t)}
3628
3627
  </div>
3629
- `:fe``}};y.styles=[ot],u([be({type:String})],y.prototype,"type",2),u([be({type:String})],y.prototype,"externalId",2),u([be({type:Object})],y.prototype,"config",2),u([be({type:String,attribute:"display-state"})],y.prototype,"displayState",2),u([K()],y.prototype,"asset",2),u([K()],y.prototype,"loadingState",2),u([K()],y.prototype,"error",2),u([K()],y.prototype,"assetLoader",2),u([K()],y.prototype,"assetRenderer",2),u([K()],y.prototype,"isDownloading",2),y=u([H("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 d,LitElement as ji}from"lit";import{property as ye,state as w}from"lit/decorators.js";import{classMap as G}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 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 ze,LitElement as yi}from"lit";import{property as at}from"lit/decorators.js";import{css as bi}from"lit";var st=bi`
3628
+ `:Ce``}};y.styles=[ht],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 Ri}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 Ti}from"lit";import{property as bt}from"lit/decorators.js";import{css as Ci}from"lit";var ft=Ci`
3630
3629
  :host {
3631
3630
  display: inline-block;
3632
3631
  }
@@ -3689,7 +3688,7 @@ video::-webkit-media-text-track-display {
3689
3688
  background: var(--ol-color-success-300, #86efac);
3690
3689
  transform: scale(1.1);
3691
3690
  }
3692
- `;var x=class extends yi{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?ze`<div class="ol-upload ol-upload--empty">No hay tipos de archivo disponibles</div>`:ze`
3691
+ `;var T=class extends Ti{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(n=>a.endsWith(n.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`
3693
3692
  <div class="ol-upload">
3694
3693
  <ol-dropdown placement="bottom-start" distance="8">
3695
3694
  <div slot="trigger">
@@ -3698,7 +3697,7 @@ video::-webkit-media-text-track-display {
3698
3697
  </div>
3699
3698
 
3700
3699
  <ol-menu>
3701
- ${t.map(i=>ze`
3700
+ ${t.map(i=>Ke`
3702
3701
  <ol-menu-item @click="${()=>this.onTypeSelect(i)}">
3703
3702
  <ol-icon slot="prefix" name="${this.getIconName(i)}"></ol-icon>
3704
3703
  ${this.getFileTypeLabel(i)}
@@ -3707,7 +3706,7 @@ video::-webkit-media-text-track-display {
3707
3706
  </ol-menu>
3708
3707
  </ol-dropdown>
3709
3708
  </div>
3710
- `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};x.styles=[st],u([at({type:Object})],x.prototype,"config",2),u([at({type:Object})],x.prototype,"events",2),x=u([H("osb-upload")],x);import{css as ki}from"lit";var rt=ki`
3709
+ `}getIconName(t){switch(t){case"image":return"image";case"video":return"file-play";case"document":return"file-text";default:return"file"}}};T.styles=[ft],g([bt({type:Object})],T.prototype,"config",2),g([bt({type:Object})],T.prototype,"events",2),T=g([N("osb-upload")],T);import{css as Pi}from"lit";var yt=Pi`
3711
3710
  :host {
3712
3711
  display: block;
3713
3712
  position: fixed;
@@ -4506,33 +4505,33 @@ video::-webkit-media-text-track-display {
4506
4505
  height: 120px;
4507
4506
  }
4508
4507
  }
4509
- `;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 ji{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=B.initialize(this.config.multimediaService)),this.config?.productService&&(this.productService=q.initialize(this.config.productService)),this.config?.faqsService&&(this.faqsService=V.initialize(this.config.faqsService)),this.config?.fileService&&(this.fileService=J.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,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 m=await this.productService.getProducts({title:i,limit:a.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});n=this.mapProductsToAssetItems(m),l=m.length;break}case"images":{let m=await this.multimediaService.getImages({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(m.items,"images"),l=m.total;break}case"videos":{let m=await this.multimediaService.getVideos({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=this.mapMultimediaToAssetItems(m.items,"videos"),l=m.total;break}case"presentations":{let m=await this.multimediaService.getPresentations({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});n=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:a.pagination.limit,sortBy:"priority",sortOrder:"desc",extraFilters:r});n=this.mapFaqsToAssetItems(m.data),l=m.total;break}}let h=o===1?n:[...a.items,...n];this.updateCategoryState(t,{items:h,pagination:{...a.pagination,page:o,total:l,hasMore:h.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(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,...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(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`
4508
+ `;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 Ri{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 l=[],n=0;switch(t){case"products":{let u=await this.productService.getProducts({title:i,limit:a.pagination.limit,includeSecureToken:!0,extraFields:this.convertToExtraFields(r)});l=this.mapProductsToAssetItems(u),n=u.length;break}case"images":{let u=await this.multimediaService.getImages({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});l=this.mapMultimediaToAssetItems(u.items,"images"),n=u.total;break}case"videos":{let u=await this.multimediaService.getVideos({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});l=this.mapMultimediaToAssetItems(u.items,"videos"),n=u.total;break}case"presentations":{let u=await this.multimediaService.getPresentations({search:i,page:o,limit:a.pagination.limit,includeSecureToken:!0,extraFilters:r});l=this.mapMultimediaToAssetItems(u.items,"presentations"),n=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});l=this.mapFaqsToAssetItems(u.data),n=u.total;break}}let d=o===1?l:[...a.items,...l];this.updateCategoryState(t,{items:d,pagination:{...a.pagination,page:o,total:n,hasMore:d.length<n,loading:!1},searchQuery:i,loading:!1})}catch(l){console.error(`Error loading ${t} data:`,l),this.updateCategoryState(t,{loading:!1,error:l instanceof Error?l.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`
4510
4509
  <div class="ol-sidebar__extra-filters">
4511
- ${Oe(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4510
+ ${Ge(this.extraFilters,t=>t.name,t=>this.renderFilter(t))}
4512
4511
  </div>
4513
- `: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`
4512
+ `: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`
4514
4513
  <div class="ol-sidebar__filter">
4515
4514
  <label class="ol-sidebar__filter-label">${t.label}</label>
4516
4515
  <ol-select
4517
4516
  class="ol-sidebar__filter-select"
4518
- placeholder=${ie(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4517
+ placeholder=${me(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4519
4518
  clearable
4520
4519
  size="small"
4521
4520
  ?disabled=${this.disabled}
4522
4521
  .value=${i||""}
4523
4522
  @ol-change=${o=>{let a=o.target;this.onFilterChange(t.name,a.value)}}
4524
4523
  >
4525
- ${t.values?.map(o=>d`
4524
+ ${t.values?.map(o=>p`
4526
4525
  <ol-option value=${o}>${o}</ol-option>
4527
4526
  `)}
4528
4527
  </ol-select>
4529
4528
  </div>
4530
- `}renderMultiselectFilter(t){let i=this.activeFilters[t.name]||[];return d`
4529
+ `}renderMultiselectFilter(t){let i=this.activeFilters[t.name]||[];return p`
4531
4530
  <div class="ol-sidebar__filter">
4532
4531
  <label class="ol-sidebar__filter-label">${t.label}</label>
4533
4532
  <ol-select
4534
4533
  class="ol-sidebar__filter-select"
4535
- placeholder=${ie(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4534
+ placeholder=${me(t.placeholder||`Select ${t.label.toLowerCase()}`)}
4536
4535
  multiple
4537
4536
  clearable
4538
4537
  size="small"
@@ -4540,43 +4539,43 @@ video::-webkit-media-text-track-display {
4540
4539
  .value=${i}
4541
4540
  @ol-change=${o=>{let a=o.target,r=Array.isArray(a.value)?a.value:[a.value].filter(Boolean);this.onFilterChange(t.name,r)}}
4542
4541
  >
4543
- ${t.values?.map(o=>d`
4542
+ ${t.values?.map(o=>p`
4544
4543
  <ol-option value=${o}>${o}</ol-option>
4545
4544
  `)}
4546
4545
  </ol-select>
4547
4546
  </div>
4548
- `}renderTextFilter(t){let i=this.activeFilters[t.name]||"";return d`
4547
+ `}renderTextFilter(t){let i=this.activeFilters[t.name]||"";return p`
4549
4548
  <div class="ol-sidebar__filter">
4550
4549
  <label class="ol-sidebar__filter-label">${t.label}</label>
4551
4550
  <ol-input
4552
4551
  class="ol-sidebar__filter-input"
4553
- placeholder=${ie(t.placeholder||`Enter ${t.label.toLowerCase()}`)}
4552
+ placeholder=${me(t.placeholder||`Enter ${t.label.toLowerCase()}`)}
4554
4553
  size="small"
4555
4554
  ?disabled=${this.disabled}
4556
4555
  .value=${i}
4557
4556
  @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)}}
4558
4557
  ></ol-input>
4559
4558
  </div>
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=A[t],a=this.categoryStates.get(t)?.items.length||0;return d`
4559
+ `}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`
4561
4560
  <div class="ol-sidebar__category-header">
4562
4561
  <div class="ol-sidebar__category-info">
4563
4562
  <span class="ol-sidebar__category-label">${i.label}</span>
4564
- ${k(a>0,()=>d`
4563
+ ${k(a>0,()=>p`
4565
4564
  <span class="ol-sidebar__category-count">(${a})</span>
4566
4565
  `)}
4567
4566
  </div>
4568
4567
 
4569
4568
  </div>
4570
- `}renderAssetItem(t,i){return d`
4569
+ `}renderAssetItem(t,i){return p`
4571
4570
  <div
4572
- class="ol-sidebar__asset-item ${G({"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})}"
4571
+ 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})}"
4573
4572
  @click=${()=>this.onItemSelect(t)}
4574
4573
  >
4575
4574
  ${this.renderAssetThumbnail(t)}
4576
4575
  ${this.renderAssetContent(t,i)}
4577
4576
  </div>
4578
- `}renderAssetThumbnail(t){return t.type==="faqs"?d``:d`
4579
- ${k(t.type==="videos",()=>d`
4577
+ `}renderAssetThumbnail(t){return t.type==="faqs"?p``:p`
4578
+ ${k(t.type==="videos",()=>p`
4580
4579
  <div class="ol-sidebar__asset-thumbnail">
4581
4580
  <och-player
4582
4581
  class="och__media-visualizer__item--video"
@@ -4586,16 +4585,16 @@ video::-webkit-media-text-track-display {
4586
4585
  ${this.formatDuration(t.duration)}
4587
4586
  </div>
4588
4587
  </div>
4589
- `,()=>d`
4588
+ `,()=>p`
4590
4589
  <div class="ol-sidebar__asset-thumbnail">
4591
4590
  <img
4592
- src="${ie(t.thumbnail)}"
4591
+ src="${me(t.thumbnail)}"
4593
4592
  alt="${t.name}"
4594
4593
  class="ol-sidebar__asset-image"
4595
4594
  />
4596
4595
  </div>
4597
4596
  `)}
4598
- `}renderAssetContent(t,i){return d`
4597
+ `}renderAssetContent(t,i){return p`
4599
4598
  <div class="ol-sidebar__asset-content">
4600
4599
  ${this.renderAssetName(t)}
4601
4600
  ${this.renderAssetPrice(t)}
@@ -4604,20 +4603,20 @@ video::-webkit-media-text-track-display {
4604
4603
  ${this.renderAssetMeta(t,i)}
4605
4604
  ${this.renderAssetTags(t,i)}
4606
4605
  </div>
4607
- `}renderAssetName(t){return d`
4608
- <div class="ol-sidebar__asset-name ${G({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4606
+ `}renderAssetName(t){return p`
4607
+ <div class="ol-sidebar__asset-name ${se({"ol-sidebar__asset-name--faq":t.type==="faqs"})}">
4609
4608
  ${t.name}
4610
4609
  </div>
4611
- `}renderAssetPrice(t){return d`
4612
- ${k(t.type==="products"&&t.price,()=>d`
4610
+ `}renderAssetPrice(t){return p`
4611
+ ${k(t.type==="products"&&t.price,()=>p`
4613
4612
  <div class="ol-sidebar__asset-price">
4614
4613
  ${t.currency} ${t.price}
4615
4614
  </div>
4616
4615
  `)}
4617
- `}renderAssetPresentation(t){return d`
4618
- ${k(t.type==="presentations",()=>d`
4616
+ `}renderAssetPresentation(t){return p`
4617
+ ${k(t.type==="presentations",()=>p`
4619
4618
  <div class="ol-sidebar__asset-presentation">
4620
- ${k(t.metadata?.slides&&t.metadata.slides.length>0,()=>d`
4619
+ ${k(t.metadata?.slides&&t.metadata.slides.length>0,()=>p`
4621
4620
  <div class="ol-sidebar__asset-presentation-preview">
4622
4621
  <img
4623
4622
  src=${t.metadata?.slides[0]}
@@ -4628,7 +4627,7 @@ video::-webkit-media-text-track-display {
4628
4627
  ${this.getFormat(t.format)}
4629
4628
  </div>
4630
4629
  </div>
4631
- `,()=>d`
4630
+ `,()=>p`
4632
4631
  <div class="ol-sidebar__asset-presentation-fallback">
4633
4632
  <div class="ol-sidebar__asset-presentation-icon">📄</div>
4634
4633
  <div class="ol-sidebar__asset-presentation-format">
@@ -4638,52 +4637,52 @@ video::-webkit-media-text-track-display {
4638
4637
  `)}
4639
4638
  </div>
4640
4639
  `)}
4641
- `}renderAssetDescription(t,i){return d`
4642
- ${k(i.showDescription&&t.description&&t.type!=="products",()=>d`
4643
- <div class="ol-sidebar__asset-description ${G({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4640
+ `}renderAssetDescription(t,i){return p`
4641
+ ${k(i.showDescription&&t.description&&t.type!=="products",()=>p`
4642
+ <div class="ol-sidebar__asset-description ${se({"ol-sidebar__asset-description--faq":t.type==="faqs"})}">
4644
4643
  ${t.description}
4645
4644
  </div>
4646
4645
  `)}
4647
- `}renderAssetMeta(t,i){return d`
4646
+ `}renderAssetMeta(t,i){return p`
4648
4647
  <div class="ol-sidebar__asset-meta">
4649
- ${k(i.showSize&&t.size,()=>d`
4648
+ ${k(i.showSize&&t.size,()=>p`
4650
4649
  <span class="ol-sidebar__asset-size">
4651
4650
  ${this.formatFileSize(t.size)}
4652
4651
  </span>
4653
4652
  `)}
4654
4653
  </div>
4655
- `}renderAssetTags(t,i){return d`
4656
- ${k(i.showTags&&t.tags&&t.tags.length>0,()=>d`
4654
+ `}renderAssetTags(t,i){return p`
4655
+ ${k(i.showTags&&t.tags&&t.tags.length>0,()=>p`
4657
4656
  <div class="ol-sidebar__asset-tags">
4658
- ${t.tags?.map(o=>d`
4657
+ ${t.tags?.map(o=>p`
4659
4658
  <span class="ol-sidebar__asset-tag">${o}</span>
4660
4659
  `)}
4661
4660
  </div>
4662
4661
  `)}
4663
- `}renderCategoryContent(t){let i=this.categoryStates.get(t),o=A[t];return i?d`
4662
+ `}renderCategoryContent(t){let i=this.categoryStates.get(t),o=P[t];return i?p`
4664
4663
  <div class="ol-sidebar__category-content">
4665
4664
 
4666
- ${k(i.loading&&i.items.length===0,()=>d`
4665
+ ${k(i.loading&&i.items.length===0,()=>p`
4667
4666
  <div class="ol-sidebar__loading">
4668
4667
  <div class="ol-sidebar__spinner"></div>
4669
4668
  <span>Loading ${o.label.toLowerCase()}...</span>
4670
4669
  </div>
4671
4670
  `)}
4672
4671
 
4673
- ${k(i.error,()=>d`
4672
+ ${k(i.error,()=>p`
4674
4673
  <div class="ol-sidebar__error">
4675
4674
  <span class="ol-sidebar__error-icon">⚠</span>
4676
4675
  <span>${i.error}</span>
4677
4676
  </div>
4678
4677
  `)}
4679
4678
 
4680
- ${k(i.items.length>0,()=>d`
4681
- <div class="ol-sidebar__assets ${G({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4682
- ${Oe(i.items,a=>a.id,a=>this.renderAssetItem(a,o.displayOptions))}
4679
+ ${k(i.items.length>0,()=>p`
4680
+ <div class="ol-sidebar__assets ${se({"ol-sidebar__assets--list":o.displayOptions.layout==="list"})}">
4681
+ ${Ge(i.items,a=>a.id,a=>this.renderAssetItem(a,o.displayOptions))}
4683
4682
  </div>
4684
4683
  `)}
4685
4684
 
4686
- ${k(i.pagination.hasMore,()=>d`
4685
+ ${k(i.pagination.hasMore,()=>p`
4687
4686
  <div class="ol-sidebar__load-more">
4688
4687
  <ol-button
4689
4688
  class="ol-sidebar__load-more-button"
@@ -4695,18 +4694,18 @@ video::-webkit-media-text-track-display {
4695
4694
  </div>
4696
4695
  `)}
4697
4696
 
4698
- ${k(!i.loading&&i.items.length===0&&!i.error,()=>d`
4697
+ ${k(!i.loading&&i.items.length===0&&!i.error,()=>p`
4699
4698
  <div class="ol-sidebar__empty">
4700
4699
  <span>No ${o.label.toLowerCase()}s found</span>
4701
4700
  </div>
4702
4701
  `)}
4703
4702
  </div>
4704
- `: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`
4705
- <div class="ol-sidebar ${G({"ol-sidebar--disabled":this.disabled})}">
4703
+ `: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`
4704
+ <div class="ol-sidebar ${se({"ol-sidebar--disabled":this.disabled})}">
4706
4705
  <div class="ol-sidebar__header">
4707
4706
  <div class="ol-sidebar__header-top">
4708
4707
  <h2 class="ol-sidebar__title">Assets</h2>
4709
- ${k(this.config?.enableUpload&&this.fileService&&!this.disabled,()=>d`
4708
+ ${k(this.config?.enableUpload&&this.fileService&&!this.disabled,()=>p`
4710
4709
  <osb-upload
4711
4710
  .config=${{maxFileSize:10*1024*1024,showImage:!0,showVideo:!0,showDocument:!0}}
4712
4711
  @osb-file-selected=${this.onFileSelected}
@@ -4715,7 +4714,7 @@ video::-webkit-media-text-track-display {
4715
4714
  <ol-icon name="plus"></ol-icon>
4716
4715
  </ol-button>
4717
4716
  </osb-upload>
4718
- ${k(this.isUploading,()=>d`
4717
+ ${k(this.isUploading,()=>p`
4719
4718
  <div class="ol-sidebar__upload-progress">
4720
4719
  <div class="ol-sidebar__upload-progress-bar">
4721
4720
  <div
@@ -4730,12 +4729,12 @@ video::-webkit-media-text-track-display {
4730
4729
  `)}
4731
4730
  `)}
4732
4731
  </div>
4733
- ${k(this.config?.showSearch,()=>d`
4732
+ ${k(this.config?.showSearch,()=>p`
4734
4733
  <div class="ol-sidebar__unified-search">
4735
4734
  <input
4736
4735
  class="ol-sidebar__unified-search-input"
4737
4736
  type="text"
4738
- placeholder="${ie(this.searchConfig?.placeholder||this.defaultSearchConfig.placeholder)}"
4737
+ placeholder="${me(this.searchConfig?.placeholder||this.defaultSearchConfig.placeholder)}"
4739
4738
  .value=${this.unifiedSearchQuery}
4740
4739
  ?disabled=${this.disabled}
4741
4740
  @input=${this.onUnifiedSearchInput}
@@ -4743,7 +4742,7 @@ video::-webkit-media-text-track-display {
4743
4742
  </div>
4744
4743
  `)}
4745
4744
  ${k(this.config?.enableExtraFilters&&this.extraFilters.length>0,()=>this.renderExtraFilters())}
4746
- ${k(this.loadingFilters,()=>d`
4745
+ ${k(this.loadingFilters,()=>p`
4747
4746
  <div class="ol-sidebar__filters-loading">
4748
4747
  <div class="ol-sidebar__spinner ol-sidebar__spinner--small"></div>
4749
4748
  <span>Loading filters...</span>
@@ -4752,9 +4751,9 @@ video::-webkit-media-text-track-display {
4752
4751
  </div>
4753
4752
 
4754
4753
  <div class="ol-sidebar__content">
4755
- ${Oe(t,i=>i,i=>A[i].enabled?d`
4754
+ ${Ge(t,i=>i,i=>P[i].enabled?p`
4756
4755
  <ol-details
4757
- class="ol-sidebar__category ${G({"ol-sidebar__category--disabled":this.disabled})}"
4756
+ class="ol-sidebar__category ${se({"ol-sidebar__category--disabled":this.disabled})}"
4758
4757
  summary=""
4759
4758
  ?disabled=${this.disabled}
4760
4759
  @ol-show=${()=>this.onCategoryToggle(i)}
@@ -4764,8 +4763,7 @@ video::-webkit-media-text-track-display {
4764
4763
  </div>
4765
4764
  ${this.renderCategoryContent(i)}
4766
4765
  </ol-details>
4767
- `:d``)}
4766
+ `:p``)}
4768
4767
  </div>
4769
4768
  </div>
4770
- `}};v.styles=[rt],u([ye({type:Object})],v.prototype,"config",2),u([ye({type:Object})],v.prototype,"searchConfig",2),u([ye({type:String})],v.prototype,"selectedCategory",2),u([ye({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([H("osb-side-bar")],v);import{createComponent as wi}from"@lit/react";import Si from"react";var _i=wi({tagName:"osb-asset",elementClass:y,react:Si,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as Mi}from"@lit/react";import xi from"react";var Ai=Mi({tagName:"osb-side-bar",elementClass:v,react:xi,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as Ci}from"@lit/react";import Pi from"react";var Ri=Ci({tagName:"osb-upload",elementClass:x,react:Pi,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var j=0;function ke(){j=0}function nt(s){j=s}function p(s){return j++,`mock_${s}_${j}_${Date.now().toString(36)}`}function lt(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 ct(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 Y(s){return`wss://mock-livekit.local/room/${s}`}function dt(s="participant",e){let t=e??j++;return`${s}_${t}_${Date.now().toString(36)}`}function pt(s="room"){return j++,`${s}_${j}_${Date.now().toString(36)}`}function mt(s,e){return j++,`TR_${s.toUpperCase()}_${e}_${j}`}function ut(){return j++,`msg_${j}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function gt(s){return j++,`api_${s}_${j}_${Date.now().toString(36)}`}function vt(){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 ht(s,e){let t=[];for(let i=0;i<e;i++)t.push(p(s));return t}var je={responseStrategy:"echo",responseDelayMs:100,cannedResponses:[],type:"text",nature:"ai",simulateTyping:!1,typingDelayPerChar:20};function we(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 Q=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={...je,...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=we(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)}},P=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"}},ae=class extends f{constructor(e){super("PARTICIPANT_NOT_FOUND",`Participant not found: ${e}`,{identity:e}),this.name="ParticipantNotFoundError"}},re=class extends f{constructor(e){super("TRACK_NOT_FOUND",`Track not found: ${e}`,{trackId:e}),this.name="TrackNotFoundError"}},ne=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 W(s){switch(s.code){case"ROOM_NOT_FOUND":return new P(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 ae(s.details?.identity??"unknown");case"TRACK_NOT_FOUND":return new re(s.details?.trackId??"unknown");case"AGENT_NOT_FOUND":return new ne(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 R(s){return typeof s=="object"&&s!==null&&"code"in s&&"message"in s&&typeof s.code=="string"&&typeof s.message=="string"}function ft(s){return s instanceof f}var X=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 De}from"@onlive.ai/tracker/session";import{Room as Gi,RoomEvent as Fe}from"livekit-client";import{initializeApp as Ii}from"firebase/app";import{query as D,endAt as Ei,equalTo as zi,get as bt,getDatabase as Oi,limitToFirst as Li,limitToLast as Di,onChildAdded as yt,onChildChanged as kt,onChildRemoved as jt,onDisconnect as wt,onValue as St,orderByChild as Fi,orderByKey as Ui,orderByValue as $i,push as qi,ref as Ni,remove as Hi,runTransaction as Vi,set as _t,startAt as Ji,update as Bi}from"firebase/database";var Mt=class{constructor(s){this.onChildChanged=(t,i)=>kt(this.ref(t),o=>i(o.key||"",o.val(),o)),this.onChildRemoved=(t,i)=>jt(this.ref(t),o=>i(o.key||"",o.val(),o)),this.onChildChangedQuery=(t,i)=>kt(t,o=>i(o.key||"",o.val(),o)),this.onChildRemovedQuery=(t,i)=>jt(t,o=>i(o.key||"",o.val(),o));let e=Ii(s.config);this.db=Oi(e)}ref(s){return Ni(this.db,s)}async getOnce(s){let e=await bt(this.ref(s));return e.exists()?e.val():null}async getOnceQuery(s){let e=await bt(s),t=[];return e.exists()&&e.forEach(i=>{t.push({key:i.key||"",value:i.val()})}),t}onValue(s,e){return St(this.ref(s),t=>e(t.key??"",t.val(),t),t=>console.error("onValue error",t))}onValueQuery(s,e){return St(s,t=>e(t.key??"",t.val(),t),t=>console.error("onValueQuery error",t))}onChildAdded(s,e){return yt(this.ref(s),t=>e(t.key||"",t.val(),t),t=>console.error("onChildAdded error",t))}onChildAddedQuery(s,e){return yt(s,t=>e(t.key||"",t.val(),t),t=>console.error("onChildAddedQuery error",t))}write(s,e){return _t(this.ref(s),e)}update(s,e){return Bi(this.ref(s),e)}remove(s){return Hi(this.ref(s))}async push(s,e){let t=qi(this.ref(s));return await _t(t,e),t.key}onDisconnectUpdate(s,e){return wt(this.ref(s)).update(e)}cancelOnDisconnect(s){return wt(this.ref(s)).cancel()}transaction(s,e){return Vi(this.ref(s),t=>e(t))}query(s,e={}){let t=this.ref(s);return e.orderBy==="child"&&e.childKey&&(t=D(t,Fi(e.childKey))),e.orderBy==="key"&&(t=D(t,Ui())),e.orderBy==="value"&&(t=D(t,$i())),e.startAt!=null&&(t=D(t,Ji(e.startAt))),e.endAt!=null&&(t=D(t,Ei(e.endAt))),e.equalTo!=null&&(t=D(t,zi(e.equalTo))),e.limitFirst!=null&&(t=D(t,Li(e.limitFirst))),e.limitLast!=null&&(t=D(t,Di(e.limitLast))),t}};var xt=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 Ki}from"@onlive.ai/tracker/generator";import{Session as S}from"@onlive.ai/tracker/session";var F="chatbot",Se=class s{static hasSession(){return!!S.getCookie(F)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(S.id=Ki.uuid(),S.deleteCookie(F));let t=S.getCookie(F);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:xt(16),createdAt:new Date().toISOString()};return S.setCookie(F,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(F);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};S.setCookie(F,i,3600*24*365)}}static hasRegistrationData(){return!!S.getCookie(F)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return S.getCookie(F)?.registrationData}};var At="lk.chat",Ct="lk.transcription",Pt="lk.events",Le="typing-indicator";var Ue=class extends Gi{},_e=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===Le)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||At,this.transcriptionTopic=e.transcriptionTopic||Ct,this.eventsTopic=e.eventsTopic||Pt,this.messagePersistence=e.messagePersistence||"disabled",this.agentInitialModalities=e.agentInitialModalities,this.agentModalities=e.agentModalities,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 Mt({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 a=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(!a.token)throw new Error("Registration failed: No token received from server");return this.authToken=a.token,a}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){let t=e;console.log("[ConversationService] Starting quickStart with options:",t),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(t={...t,room:{...t.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...t.room.metadata}}});let i=await g(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(t),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let o={id:i.room.id,groupId:i.room.groupId||"",token:i.room.token,wsURL:i.room.wsURL,createdAt:i.room.createdAt||new Date().toISOString(),affinity:i.room.affinity};return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let 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(a){console.error("[ConversationService] Failed to send initial message:",a)}}),this.initializeRoomHandlers(),this.room}async joinRoom(e,t,i,o){let a=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(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(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,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 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}/${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 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 a=i.query(o,{orderBy:"child",childKey:"status",equalTo:"pending"}),r=i.onChildAddedQuery(a,(n,l)=>{if(!n||this.seenRequestIds.has(n))return;let h={...l,id:n};this.seenRequestIds.add(n),e(n,h)});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 M=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)}},_=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 N=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-Z2KW3VEA.js"),{track:a,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),n=new M("video","camera",a,r),l=new _(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 import("./media-Z2KW3VEA.js"),{track:a,cleanup:r}=o({enabled:!1}),n=new M("audio","microphone",a,r),l=new _(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 import("./media-Z2KW3VEA.js"),{track:a,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),n=new M("video","screen_share",a,r),l=new _(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 _(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 Yi(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 T=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=Yi(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 N(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(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 T(this.localParticipant.identity,this.localParticipant.name,this.localParticipant.attributes):this.remoteParticipants.get(e)}getParticipantBySid(e){if(e===this.localParticipant.sid)return new T(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 T(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:h}=await import("./media-Z2KW3VEA.js"),m=h({animation:o.isAgent?"avatar":"pulse",label:o.name||e,foregroundColor:o.isAgent?"#22c55e":"#4361ee"});a=m.track,r=m.cleanup}else if(t==="audio"){let{createSyntheticAudioTrack:h}=await import("./media-Z2KW3VEA.js"),m=h({enabled:!1});a=m.track,r=m.cleanup}let n=new M(t,i,a,r),l=new _(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 Z=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"),a=new Date().toISOString(),r={id:o,name:e,groupId:t||p("group"),createdAt:a,metadata:i,isActive:!0,participantIds:[],connectionState:"disconnected",wsURL:Y(o),token:C(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 h={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,h),n.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 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=p("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=p("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:p("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:p("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 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 Z(this.config),this.events=new X,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 a={id:p("user"),externalId:e,organizationId:this.config.organizationId,role:"user",token:C("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=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,...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 P(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(R(n))throw W(n);if(o){let l={};for(let[h,m]of Object.entries(o))l[h]=String(m);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 P(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 P(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(R(i))throw W(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(R(t))throw W(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 Q(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 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(!R(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: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);!R(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(R(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 I(this),ke()}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 Me(){let s=O(z.MODE);if(s==="mock"||s==="real")return s;let e=O(z.USE_MOCK);return e==="true"||e==="1"||Xi()?"mock":"real"}function Qi(){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 Wi(){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 Xi(){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 U=class s{static create(e){if((e.mode??Me())==="mock"){let i={...Qi(),...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 _e(e)}static createFromEnv(e){let t=e?.mode??Me(),i=Wi();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 Me()}static isMockMode(){return Me()==="mock"}static isMockService(e){return e instanceof E}};function Rt(s){return U.createFromEnv(s)}function xe(s){return U.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:Y(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 Pe(s,e){let{room:t,localParticipant:i}=Ce("local_user",e),o=new Date().toISOString(),a=p("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 Tt(s){let{room:e,localParticipant:t,agent:i,agentParticipant:o}=Pe(void 0,s),a={id:p("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 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},a={id:p("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 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 Re(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 Re(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Ot(s,e){return Re(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 me(s){return{latencyMs:0,strictMode:!1,autoEmitEvents:!0,organizationId:"test_org",apiUrl:"https://mock-api.local",...s}}function Dt(s){return me({strictMode:!0,...s})}function Ft(s,e){return me({latencyMs:s,...e})}function Ut(s,e){return me({seed:s,...e})}function $t(){let{room:s,localParticipant:e,agent:t,agentParticipant:i}=Pe(),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 ue=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}};var $=null;function b(s){return $||($=xe({organizationId:"storybook_org",apiUrl:"https://storybook.mock",latencyMs:50,autoEmitEvents:!0,...s})),$}function He(){$&&$.reset()}async function Nt(){$&&(await $.destroy(),$=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 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 Vt(s){return U.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(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=Ve);var Je={OpenWidget:"openWidget",InitialStep:"initialStep"};var Be="ol",Kt={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},oo=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 a=`${Be}${i}`,r=t.get(a);if(r!==null){if(o==="action"){oo.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{ne as AgentNotFoundError,_i as Asset,U as ConversationServiceFactory,Je as DeepLinkAction,Ke as DeepLinkService,de as InvalidOperationError,E as MockConversationService,X as MockEventEmitter,f as MockLiveKitError,N as MockLocalParticipant,T as MockParticipant,I as MockRoom,Ve as MockServiceActions,Z as MockState,ue as MockTextStreamReader,M as MockTrack,_ as MockTrackPublication,ce as NetworkError,y as OSBAsset,v as OSBSideBar,x as OSBUpload,se as ParticipantAlreadyJoinedError,ae as ParticipantNotFoundError,oe as RoomEndedError,P as RoomNotFoundError,We as SYNTHETIC_MEDIA_PRESETS,Ai as SideBar,Jt as StorybookScenarios,pe as TimeoutError,re as TrackNotFoundError,le as UnauthorizedError,Ri as Upload,Re as createAgentFixture,zt as createAgentWithCannedResponses,$t as createChatScenario,Ne as createConversationFixture,Rt as createConversationService,me as createDefaultConfig,Ae as createDefaultRoomFixture,Ut as createDeterministicConfig,W as createErrorFromMockError,Ft as createLatencyConfig,Lt as createMessageFixture,xe as createMockConversationService,Bt as createMockServiceFactory,Et as createParticipantBatch,qe as createParticipantFixture,Pe as createRoomWithAgent,Tt 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,ct as decodeMockToken,Nt as destroyStorybookMockService,gt as generateMockApiResponseId,vt as generateMockExternalId,p as generateMockId,ht as generateMockIdBatch,ut as generateMockMessageId,dt as generateMockParticipantIdentity,pt as generateMockRoomName,C as generateMockToken,mt as generateMockTrackSid,Y as generateMockWsUrl,lt as generateSeededMockId,b as getStorybookMockService,Vt as isMockConversationService,R as isMockError,ft as isMockLiveKitError,ke as resetIdCounter,He as resetStorybookMockService,nt as setIdCounter,Ht as withMockConversationService};
4771
- /*! @onlive.ai/common-121 v0.2.228 | © 2026 Onlive.ai */
4769
+ `}};h.styles=[yt],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 Ii}from"@lit/react";import Ei from"react";var zi=Ii({tagName:"osb-asset",elementClass:y,react:Ei,events:{onAssetClick:"asset-click",onAssetDownload:"asset-download",onAssetLoad:"asset-load",onAssetError:"asset-error",onContentClick:"content-click"}});import{createComponent as Oi}from"@lit/react";import Li from"react";var Di=Oi({tagName:"osb-side-bar",elementClass:h,react:Li,events:{onSearch:"search",onLoadMore:"load-more",onItemAdd:"item-add",onCategoryChange:"category-change",onItemSelect:"item-select",onFileUpload:"file-uploaded"}});import{createComponent as Fi}from"@lit/react";import Ui from"react";var $i=Fi({tagName:"osb-upload",elementClass:T,react:Ui,events:{onFileSelected:"osb-file-selected",onUploadError:"osb-upload-error"}});var w=0;function Re(){w=0}function kt(s){w=s}function m(s){return w++,`mock_${s}_${w}_${Date.now().toString(36)}`}function jt(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 wt(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 St(s="participant",e){let t=e??w++;return`${s}_${t}_${Date.now().toString(36)}`}function Mt(s="room"){return w++,`${s}_${w}_${Date.now().toString(36)}`}function _t(s,e){return w++,`TR_${s.toUpperCase()}_${e}_${w}`}function xt(){return w++,`msg_${w}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function At(s){return w++,`api_${s}_${w}_${Date.now().toString(36)}`}function Ct(){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 Tt(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 Pt(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 We}from"@onlive.ai/tracker/session";import{Room as so,RoomEvent as Qe}from"livekit-client";import{initializeApp as Ni}from"firebase/app";import{query as V,endAt as Hi,equalTo as Vi,get as Rt,getDatabase as Ji,limitToFirst as Bi,limitToLast as Ki,onChildAdded as It,onChildChanged as Et,onChildRemoved as zt,onDisconnect as Ot,onValue as Lt,orderByChild as Gi,orderByKey as Yi,orderByValue as Wi,push as Qi,ref as Xi,remove as Zi,runTransaction as eo,set as Dt,startAt as to,update as io}from"firebase/database";var ze=class{constructor(e){this.onChildChanged=(e,t)=>Et(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildRemoved=(e,t)=>zt(this.ref(e),i=>t(i.key||"",i.val(),i));this.onChildChangedQuery=(e,t)=>Et(e,i=>t(i.key||"",i.val(),i));this.onChildRemovedQuery=(e,t)=>zt(e,i=>t(i.key||"",i.val(),i));let t=Ni(e.config);this.db=Ji(t)}ref(e){return Xi(this.db,e)}async getOnce(e){let t=await Rt(this.ref(e));return t.exists()?t.val():null}async getOnceQuery(e){let t=await Rt(e),i=[];return t.exists()&&t.forEach(o=>{i.push({key:o.key||"",value:o.val()})}),i}onValue(e,t){return Lt(this.ref(e),i=>t(i.key??"",i.val(),i),i=>console.error("onValue error",i))}onValueQuery(e,t){return Lt(e,i=>t(i.key??"",i.val(),i),i=>console.error("onValueQuery error",i))}onChildAdded(e,t){return It(this.ref(e),i=>t(i.key||"",i.val(),i),i=>console.error("onChildAdded error",i))}onChildAddedQuery(e,t){return It(e,i=>t(i.key||"",i.val(),i),i=>console.error("onChildAddedQuery error",i))}write(e,t){return Dt(this.ref(e),t)}update(e,t){return io(this.ref(e),t)}remove(e){return Zi(this.ref(e))}async push(e,t){let i=Qi(this.ref(e));return await Dt(i,t),i.key}onDisconnectUpdate(e,t){return Ot(this.ref(e)).update(t)}cancelOnDisconnect(e){return Ot(this.ref(e)).cancel()}transaction(e,t){return eo(this.ref(e),i=>t(i))}query(e,t={}){let i=this.ref(e);return t.orderBy==="child"&&t.childKey&&(i=V(i,Gi(t.childKey))),t.orderBy==="key"&&(i=V(i,Yi())),t.orderBy==="value"&&(i=V(i,Wi())),t.startAt!=null&&(i=V(i,to(t.startAt))),t.endAt!=null&&(i=V(i,Hi(t.endAt))),t.equalTo!=null&&(i=V(i,Vi(t.equalTo))),t.limitFirst!=null&&(i=V(i,Bi(t.limitFirst))),t.limitLast!=null&&(i=V(i,Ki(t.limitLast))),i}};var Ft=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 oo}from"@onlive.ai/tracker/generator";import{Session as M}from"@onlive.ai/tracker/session";var J="chatbot",Oe=class s{static hasSession(){return!!M.getCookie(J)}static getSession(e={role:"guest",regenerate:!1}){e.regenerate&&(M.id=oo.uuid(),M.deleteCookie(J));let t=M.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()||M.id):M.id,secret:Ft(16),createdAt:new Date().toISOString()};return M.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 M.getCookie("user-id",{objectKey:"userId",storageKey:"user",storageType:"localStorage",ttl:3600*24*365,preserveData:!0})}static updateSessionWithRegistrationData(e){let t=M.getCookie(J);if(t||(t=s.createSession("guest")),t){let i={...t,registrationData:e};M.setCookie(J,i,3600*24*365)}}static hasRegistrationData(){return!!M.getCookie(J)?.registrationData}static async getAgentInfo(e){return fetch(`${e}/api/v1/auth/user-info`,{credentials:"include"}).then(t=>t.json())}static getRegistrationData(){return M.getCookie(J)?.registrationData}};var Ut="lk.chat",$t="lk.transcription",qt="lk.events",Ye="typing-indicator";var Xe=class extends so{},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 l of e)r+=l,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||Ut,this.transcriptionTopic=e.transcriptionTopic||$t,this.eventsTopic=e.eventsTopic||qt,this.messagePersistence=e.messagePersistence||"disabled",this.agentInitialModalities=e.agentInitialModalities,this.agentModalities=e.agentModalities,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(Qe.DataReceived,this.handleDataReceived),this.room.registerTextStreamHandler(this.channelTopic,this.handleIncomingMessage),this.room.registerTextStreamHandler(this.transcriptionTopic,this.handleIncomingMessage),this.room.on(Qe.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=We.getCookie("livekit-agent-token");if(i){if(this.decodeJwtPayload(i)?.username===t.name)return this.authToken=i,i;We.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 We.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){let t=e;console.log("[ConversationService] Starting quickStart with options:",t),this.room=this.ensureRoom(),(this.agentInitialModalities||this.agentModalities)&&(t={...t,room:{...t.room,metadata:{...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...t.room.metadata}}});let i=await v(`${this.apiUrl}/rooms/quick-start`,{method:"POST",body:JSON.stringify(t),headers:{"X-Onlive-Organization-Id":this.organizationId,"Content-Type":"application/json"},signal:this.abortControllers.quickStart.signal});if(!i.user?.token)throw new Error("Quick start failed: No user token received from server");this.authToken=i.user.token;let o={id:i.room.id,groupId:i.room.groupId||"",token:i.room.token,wsURL:i.room.wsURL,createdAt:i.room.createdAt||new Date().toISOString(),affinity:i.room.affinity};return this.setRoomMetadata(o),this.setupParticipantAttributesHandler(),this.room.connect(o.wsURL,o.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;(this.agentInitialModalities||this.agentModalities)&&(i.metadata={...this.agentInitialModalities&&{agentInitialModalities:this.agentInitialModalities},...this.agentModalities&&{agentModalities:this.agentModalities},...i.metadata});let 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(Qe.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,(l,n)=>{if(!l||this.seenRequestIds.has(l))return;let d={...n,id:l};this.seenRequestIds.add(l),e(l,d)});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 l=JSON.stringify(r);this.lastSnapshotById.get(a)!==l&&(this.lastSnapshotById.set(a,l),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)}},_=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(()=>(Q(),ce)),{track:a,cleanup:r}=o({animation:"avatar",label:this.name||"Local Camera"}),l=new A("video","camera",a,r),n=new _(l,t?.name);return this.trackPublications.set("camera",n),this.videoTrackPublications.set(l.sid,n),this.room.emit("localTrackPublished",n,this),n}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(()=>(Q(),ce)),{track:a,cleanup:r}=o({enabled:!1}),l=new A("audio","microphone",a,r),n=new _(l,t?.name);return this.trackPublications.set("microphone",n),this.audioTrackPublications.set(l.sid,n),this.room.emit("localTrackPublished",n,this),n}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(()=>(Q(),ce)),{track:a,cleanup:r}=o({animation:"bars",label:"Screen Share",width:1920,height:1080}),l=new A("video","screen_share",a,r),n=new _(l,t?.name||"screen");return this.trackPublications.set("screen_share",n),this.videoTrackPublications.set(l.sid,n),this.room.emit("localTrackPublished",n,this),n}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 _(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 ao(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=ao(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:d}=await Promise.resolve().then(()=>(Q(),ce)),u=d({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:d}=await Promise.resolve().then(()=>(Q(),ce)),u=d({enabled:!1});a=u.track,r=u.cleanup}let l=new A(t,i,a,r),n=new _(l);return o.addTrackPublication(n),this.emit("trackSubscribed",l,n,o),this.emit("trackPublished",n,o),l}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 l=this.rooms.get(e);if(!l)return this.createError("ROOM_NOT_FOUND",`Room ${e} not found`);if(!l.isActive)return this.createError("ROOM_ENDED",`Room ${e} has ended`);let n=this.participants.get(t);if(n&&n.roomId===e&&n.isConnected)return this.config.strictMode?this.createError("PARTICIPANT_ALREADY_JOINED",`Participant ${t} is already in room ${e}`):n;let d={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,d),l.participantIds.push(t),d}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 l=m("track"),n={id:l,kind:t,source:i,participantIdentity:e,roomId:a.roomId,publishedAt:new Date().toISOString(),muted:!1,metadata:o};return this.tracks.set(l,n),a.trackIds.push(l),n}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 l={id:m("msg"),roomId:e,content:i,participantIdentity:t,createdAt:new Date().toISOString(),type:o,attributes:a},n=this.messages.get(e)||[];return n.push(l),this.messages.set(e,n),l}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",l=this.state.addParticipant(e,r,this.room.localParticipant.name,"user","standard",!0);if(E(l))throw ne(l);if(o){let n={};for(let[d,u]of Object.entries(o))n[d]=String(u);this.state.updateParticipantAttributes(r,n)}return this.state.updateRoomConnectionState(e,"connected"),this.config.autoEmitEvents&&(this.events.emitParticipantJoined(e,l),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(l=>l.isActive):e.roomStatus==="closed"&&(t=t.filter(l=>!l.isActive)),e.ids?.length&&(t=t.filter(l=>e.ids.includes(l.id))),e.groupId&&(t=t.filter(l=>l.groupId===e.groupId));let i=e.offset??0,o=e.limit??20;return{items:t.slice(i,i+o).map(l=>({id:l.id,name:l.name,groupId:l.groupId,organizationId:this.config.organizationId,endedAt:l.endedAt??null,createdAt:l.createdAt,updatedAt:l.createdAt,status:l.isActive?"active":"ended",participants:this.state.listParticipants(l.id).map(n=>({id:n.identity,name:n.name||n.identity,role:n.role,isLocal:n.isLocal})),evaluations:[],_count:{messages:this.state.getMessages(l.id).length,participants:l.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((d,u)=>this.customAgentHandler(d,u));let a=t?.type,r=Array.isArray(a)?a:[a].filter(Boolean),l=r.includes("video"),n=r.includes("voice");return(l||n)&&this.room.isConnected&&await this.room.simulateParticipantJoin(o.id,{name:i,kind:"agent",withCamera:l,withMicrophone:n||l,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"||lo()?"mock":"real"}function ro(){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 no(){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 lo(){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={...ro(),...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=no();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 Nt(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:[]},l={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(l.identity),{room:t,localParticipant:i,agent:r,agentParticipant:l}}function Ht(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 Vt(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 Jt(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 Bt(s,e){return Be(s,{config:{responseStrategy:"canned",cannedResponses:e}})}function Kt(s,e){return Be(s,{config:{responseStrategy:"sequential",cannedResponses:e}})}function Gt(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 Yt(s){return Se({strictMode:!0,...s})}function Wt(s,e){return Se({latencyMs:s,...e})}function Qt(s,e){return Se({seed:s,...e})}function Xt(){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 Zt(){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 Me=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,l)=>r+l.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}};Q();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 ei(){K&&(await K.destroy(),K=null)}function ti(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 ii(s){return B.isMockService(s)}var oi={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 si(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",ai={Action:"action",Message:"message",StepId:"stepId",InstallationId:"installationId"},go=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 ai&&(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(ai)){let a=`${rt}${i}`,r=t.get(a);if(r!==null){if(o==="action"){go.has(r)&&(e.action=r);continue}e[o]=r}}return e}};export{be as AgentNotFoundError,zi 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,Me as MockTextStreamReader,A as MockTrack,_ 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,Di as SideBar,oi as StorybookScenarios,we as TimeoutError,fe as TrackNotFoundError,ye as UnauthorizedError,$i as Upload,Be as createAgentFixture,Bt as createAgentWithCannedResponses,Xt as createChatScenario,it as createConversationFixture,Nt as createConversationService,Se as createDefaultConfig,He as createDefaultRoomFixture,Qt as createDeterministicConfig,ne as createErrorFromMockError,Wt as createLatencyConfig,Gt as createMessageFixture,Ne as createMockConversationService,si as createMockServiceFactory,Jt as createParticipantBatch,tt as createParticipantFixture,Je as createRoomWithAgent,Ht as createRoomWithAgentAndDataTrack,Ve as createRoomWithLocalParticipant,Vt as createRoomWithMediaTracks,et as createRoomWithTwoParticipants,Kt as createSequentialAgent,Yt as createStrictConfig,Fe as createSyntheticAudioTrack,Ue as createSyntheticMedia,Ze as createSyntheticMediaFromPreset,De as createSyntheticVideoTrack,Zt as createVideoCallScenario,wt as decodeMockToken,ei as destroyStorybookMockService,At as generateMockApiResponseId,Ct as generateMockExternalId,m as generateMockId,Tt as generateMockIdBatch,xt as generateMockMessageId,St as generateMockParticipantIdentity,Mt as generateMockRoomName,R as generateMockToken,_t as generateMockTrackSid,ae as generateMockWsUrl,jt as generateSeededMockId,b as getStorybookMockService,ii as isMockConversationService,E as isMockError,Pt as isMockLiveKitError,Re as resetIdCounter,ot as resetStorybookMockService,kt as setIdCounter,ti as withMockConversationService};