@qualified-salesforce/web 0.0.1-oidc-bootstrap

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 (560) hide show
  1. package/41842993ec71d6628e4949e9a22b146b.svg +3 -0
  2. package/7271f3433ed82fc7f56adcd9e30275f4.svg +17 -0
  3. package/LICENSE.txt +82 -0
  4. package/components/helpers/entriesStringValidations.js +69 -0
  5. package/components/helpers/languages.js +32 -0
  6. package/components/shared/assertUnreachable.js +5 -0
  7. package/components/shared/controls/imageCropperHelpers.js +43 -0
  8. package/components/shared/meetingLoadingProgressSpec.js +116 -0
  9. package/constants.generated.js +9883 -0
  10. package/css/widget/multimodal_v2/host.split-css.css +162 -0
  11. package/css/widget/multimodal_v2/index.split-css.panda.css +5240 -0
  12. package/css/widget/widget.split-css.css +100 -0
  13. package/fonts/inter/Inter-Black.woff +0 -0
  14. package/fonts/inter/Inter-Black.woff2 +0 -0
  15. package/fonts/inter/Inter-BlackItalic.woff +0 -0
  16. package/fonts/inter/Inter-BlackItalic.woff2 +0 -0
  17. package/fonts/inter/Inter-Bold.woff +0 -0
  18. package/fonts/inter/Inter-Bold.woff2 +0 -0
  19. package/fonts/inter/Inter-BoldItalic.woff +0 -0
  20. package/fonts/inter/Inter-BoldItalic.woff2 +0 -0
  21. package/fonts/inter/Inter-ExtraBold.woff +0 -0
  22. package/fonts/inter/Inter-ExtraBold.woff2 +0 -0
  23. package/fonts/inter/Inter-ExtraBoldItalic.woff +0 -0
  24. package/fonts/inter/Inter-ExtraBoldItalic.woff2 +0 -0
  25. package/fonts/inter/Inter-ExtraLight.woff +0 -0
  26. package/fonts/inter/Inter-ExtraLight.woff2 +0 -0
  27. package/fonts/inter/Inter-ExtraLightItalic.woff +0 -0
  28. package/fonts/inter/Inter-ExtraLightItalic.woff2 +0 -0
  29. package/fonts/inter/Inter-Italic.woff +0 -0
  30. package/fonts/inter/Inter-Italic.woff2 +0 -0
  31. package/fonts/inter/Inter-Light.woff +0 -0
  32. package/fonts/inter/Inter-Light.woff2 +0 -0
  33. package/fonts/inter/Inter-LightItalic.woff +0 -0
  34. package/fonts/inter/Inter-LightItalic.woff2 +0 -0
  35. package/fonts/inter/Inter-Medium.woff +0 -0
  36. package/fonts/inter/Inter-Medium.woff2 +0 -0
  37. package/fonts/inter/Inter-MediumItalic.woff +0 -0
  38. package/fonts/inter/Inter-MediumItalic.woff2 +0 -0
  39. package/fonts/inter/Inter-Regular.woff +0 -0
  40. package/fonts/inter/Inter-Regular.woff2 +0 -0
  41. package/fonts/inter/Inter-SemiBold.woff +0 -0
  42. package/fonts/inter/Inter-SemiBold.woff2 +0 -0
  43. package/fonts/inter/Inter-SemiBoldItalic.woff +0 -0
  44. package/fonts/inter/Inter-SemiBoldItalic.woff2 +0 -0
  45. package/fonts/inter/Inter-Thin.woff +0 -0
  46. package/fonts/inter/Inter-Thin.woff2 +0 -0
  47. package/fonts/inter/Inter-ThinItalic.woff +0 -0
  48. package/fonts/inter/Inter-ThinItalic.woff2 +0 -0
  49. package/fonts/inter/Inter-italic.var.woff2 +0 -0
  50. package/fonts/inter/Inter-roman.var.woff2 +0 -0
  51. package/images/close.js +63 -0
  52. package/images/logo.js +22 -0
  53. package/js/4101.js +19721 -0
  54. package/js/daily-esm.js +9948 -0
  55. package/js/date-fns.js +427 -0
  56. package/js/multimodal_v2.js +1653 -0
  57. package/js/runtime.js +109 -0
  58. package/media/Inter-Black.796be8d8bf.woff2 +0 -0
  59. package/media/Inter-Black.b254104c56.woff +0 -0
  60. package/media/Inter-BlackItalic.70306b0eae.woff +0 -0
  61. package/media/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
  62. package/media/Inter-Bold.579e0f95ca.woff2 +0 -0
  63. package/media/Inter-Bold.b1234477a5.woff +0 -0
  64. package/media/Inter-BoldItalic.3d0d804323.woff +0 -0
  65. package/media/Inter-BoldItalic.828a494e04.woff2 +0 -0
  66. package/media/Inter-ExtraBold.208a9e6c99.woff +0 -0
  67. package/media/Inter-ExtraBold.d65f028165.woff2 +0 -0
  68. package/media/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
  69. package/media/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
  70. package/media/Inter-ExtraLight.15c082a57d.woff +0 -0
  71. package/media/Inter-ExtraLight.6824177d1e.woff2 +0 -0
  72. package/media/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
  73. package/media/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
  74. package/media/Inter-Italic.9beab78452.woff +0 -0
  75. package/media/Inter-Italic.d593a8df79.woff2 +0 -0
  76. package/media/Inter-Light.27083fa637.woff2 +0 -0
  77. package/media/Inter-Light.91dfddd842.woff +0 -0
  78. package/media/Inter-LightItalic.0a783b89b3.woff2 +0 -0
  79. package/media/Inter-LightItalic.f8ccf2813f.woff +0 -0
  80. package/media/Inter-Medium.dc792b508e.woff2 +0 -0
  81. package/media/Inter-Medium.ec7dd2d9d8.woff +0 -0
  82. package/media/Inter-MediumItalic.17301e5b40.woff +0 -0
  83. package/media/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
  84. package/media/Inter-Regular.f1f0c35b32.woff2 +0 -0
  85. package/media/Inter-Regular.f356e84aa0.woff +0 -0
  86. package/media/Inter-SemiBold.55027e4724.woff +0 -0
  87. package/media/Inter-SemiBold.fcb100c760.woff2 +0 -0
  88. package/media/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
  89. package/media/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
  90. package/media/Inter-Thin.16325d9b0f.woff +0 -0
  91. package/media/Inter-Thin.dafaa44d99.woff2 +0 -0
  92. package/media/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
  93. package/media/Inter-ThinItalic.d3d8994788.woff +0 -0
  94. package/media/Inter-italic.var.958a0b9742.woff2 +0 -0
  95. package/media/Inter-roman.var.b2129c009c.woff2 +0 -0
  96. package/package.json +20 -0
  97. package/packs/widget/api/docking/docking_host.js +97 -0
  98. package/packs/widget/api/docking/index.js +294 -0
  99. package/packs/widget/api/docking/shared.js +164 -0
  100. package/packs/widget/api/docking/viewport_lock.js +488 -0
  101. package/packs/widget/api/docking/viewport_resize.js +1203 -0
  102. package/packs/widget/esm/fonts/Inter-Black.796be8d8bf.woff2 +0 -0
  103. package/packs/widget/esm/fonts/Inter-Black.b254104c56.woff +0 -0
  104. package/packs/widget/esm/fonts/Inter-BlackItalic.70306b0eae.woff +0 -0
  105. package/packs/widget/esm/fonts/Inter-BlackItalic.752f1e0aaa.woff2 +0 -0
  106. package/packs/widget/esm/fonts/Inter-Bold.579e0f95ca.woff2 +0 -0
  107. package/packs/widget/esm/fonts/Inter-Bold.b1234477a5.woff +0 -0
  108. package/packs/widget/esm/fonts/Inter-BoldItalic.3d0d804323.woff +0 -0
  109. package/packs/widget/esm/fonts/Inter-BoldItalic.828a494e04.woff2 +0 -0
  110. package/packs/widget/esm/fonts/Inter-ExtraBold.208a9e6c99.woff +0 -0
  111. package/packs/widget/esm/fonts/Inter-ExtraBold.d65f028165.woff2 +0 -0
  112. package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.30429962ec.woff +0 -0
  113. package/packs/widget/esm/fonts/Inter-ExtraBoldItalic.8c7eac5ce3.woff2 +0 -0
  114. package/packs/widget/esm/fonts/Inter-ExtraLight.15c082a57d.woff +0 -0
  115. package/packs/widget/esm/fonts/Inter-ExtraLight.6824177d1e.woff2 +0 -0
  116. package/packs/widget/esm/fonts/Inter-ExtraLightItalic.05138dddf3.woff2 +0 -0
  117. package/packs/widget/esm/fonts/Inter-ExtraLightItalic.3beee54f59.woff +0 -0
  118. package/packs/widget/esm/fonts/Inter-Italic.9beab78452.woff +0 -0
  119. package/packs/widget/esm/fonts/Inter-Italic.d593a8df79.woff2 +0 -0
  120. package/packs/widget/esm/fonts/Inter-Light.27083fa637.woff2 +0 -0
  121. package/packs/widget/esm/fonts/Inter-Light.91dfddd842.woff +0 -0
  122. package/packs/widget/esm/fonts/Inter-LightItalic.0a783b89b3.woff2 +0 -0
  123. package/packs/widget/esm/fonts/Inter-LightItalic.f8ccf2813f.woff +0 -0
  124. package/packs/widget/esm/fonts/Inter-Medium.dc792b508e.woff2 +0 -0
  125. package/packs/widget/esm/fonts/Inter-Medium.ec7dd2d9d8.woff +0 -0
  126. package/packs/widget/esm/fonts/Inter-MediumItalic.17301e5b40.woff +0 -0
  127. package/packs/widget/esm/fonts/Inter-MediumItalic.84d3493a9f.woff2 +0 -0
  128. package/packs/widget/esm/fonts/Inter-Regular.f1f0c35b32.woff2 +0 -0
  129. package/packs/widget/esm/fonts/Inter-Regular.f356e84aa0.woff +0 -0
  130. package/packs/widget/esm/fonts/Inter-SemiBold.55027e4724.woff +0 -0
  131. package/packs/widget/esm/fonts/Inter-SemiBold.fcb100c760.woff2 +0 -0
  132. package/packs/widget/esm/fonts/Inter-SemiBoldItalic.ab9105ed3b.woff +0 -0
  133. package/packs/widget/esm/fonts/Inter-SemiBoldItalic.d90f295d0c.woff2 +0 -0
  134. package/packs/widget/esm/fonts/Inter-Thin.16325d9b0f.woff +0 -0
  135. package/packs/widget/esm/fonts/Inter-Thin.dafaa44d99.woff2 +0 -0
  136. package/packs/widget/esm/fonts/Inter-ThinItalic.4fc662b3cf.woff2 +0 -0
  137. package/packs/widget/esm/fonts/Inter-ThinItalic.d3d8994788.woff +0 -0
  138. package/packs/widget/esm/fonts/Inter-italic.var.958a0b9742.woff2 +0 -0
  139. package/packs/widget/esm/fonts/Inter-roman.var.b2129c009c.woff2 +0 -0
  140. package/packs/widget/esm/index.js +183 -0
  141. package/packs/widget/esm/qualified.css +5502 -0
  142. package/routes/app/offers/scripts/OfferMainScript.js +154 -0
  143. package/routes/app/offers/scripts/constants.js +71 -0
  144. package/routes/app/offers/scripts/main/ButtonManager.js +65 -0
  145. package/routes/app/offers/scripts/main/FormManager.js +325 -0
  146. package/routes/app/offers/scripts/main/MainContext.js +19 -0
  147. package/routes/app/offers/scripts/main/OfferManager.js +91 -0
  148. package/routes/app/offers/scripts/main/TriggerManager.js +125 -0
  149. package/routes/app/offers/scripts/rendering/ContentManager.js +53 -0
  150. package/routes/app/offers/scripts/rendering/LocationManager.js +83 -0
  151. package/routes/app/offers/scripts/rendering/RenderedOffer.js +188 -0
  152. package/routes/app/offers/scripts/rendering/Renderer.js +69 -0
  153. package/routes/app/offers/scripts/rendering/RenderingInitializer.js +62 -0
  154. package/routes/app/offers/scripts/rendering/animations/AnimationManager.js +31 -0
  155. package/routes/app/offers/scripts/rendering/animations/AnimationManagerFooter.js +81 -0
  156. package/routes/app/offers/scripts/rendering/animations/AnimationManagerHeader.js +81 -0
  157. package/routes/app/offers/scripts/rendering/animations/AnimationManagerModal.js +117 -0
  158. package/routes/app/offers/scripts/rendering/animations/AnimationManagerSidebar.js +75 -0
  159. package/routes/app/offers/scripts/rendering/animations/AnimationResult.js +43 -0
  160. package/routes/app/offers/scripts/rendering/animations/Animator.js +78 -0
  161. package/routes/app/offers/scripts/rendering/animations/BaseAnimationManager.js +25 -0
  162. package/routes/app/offers/scripts/rendering/lib/BaseComponent.js +106 -0
  163. package/routes/app/offers/scripts/rendering/lib/FormComponent.js +134 -0
  164. package/routes/app/offers/scripts/rendering/lib/OfferComponent.js +144 -0
  165. package/routes/app/offers/scripts/rendering/lib/ScrollbarWidth.js +27 -0
  166. package/routes/app/offers/scripts/rendering/lib/decorators.js +20 -0
  167. package/routes/app/offers/scripts/rendering/locations/CSSVarsManager.js +66 -0
  168. package/routes/app/offers/scripts/rendering/locations/ElementResizeObserver.js +49 -0
  169. package/routes/app/offers/scripts/rendering/locations/footer.js +53 -0
  170. package/routes/app/offers/scripts/rendering/locations/header/AsyncBatchProcessor.js +70 -0
  171. package/routes/app/offers/scripts/rendering/locations/header/CSSTransitionObserver.js +182 -0
  172. package/routes/app/offers/scripts/rendering/locations/header/ElementStyleChangeObserver.js +138 -0
  173. package/routes/app/offers/scripts/rendering/locations/header/ExternalStyleManager.js +110 -0
  174. package/routes/app/offers/scripts/rendering/locations/header/Header.js +353 -0
  175. package/routes/app/offers/scripts/rendering/locations/header/InlineStyleManager.js +105 -0
  176. package/routes/app/offers/scripts/rendering/locations/header/MatchingElementsObserver.js +107 -0
  177. package/routes/app/offers/scripts/rendering/locations/header/NewElementsObserver.js +129 -0
  178. package/routes/app/offers/scripts/rendering/locations/header/RuleWrapper.js +46 -0
  179. package/routes/app/offers/scripts/rendering/locations/header/SelectorObservable.js +23 -0
  180. package/routes/app/offers/scripts/rendering/locations/header/SelectorObserver.js +61 -0
  181. package/routes/app/offers/scripts/rendering/locations/header/ShiftedElementsManager.js +45 -0
  182. package/routes/app/offers/scripts/rendering/locations/header/StyleElementManager.js +37 -0
  183. package/routes/app/offers/scripts/rendering/locations/header/StyleElementWrapper.js +62 -0
  184. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectorValue.js +45 -0
  185. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/ObservedSelectors.js +62 -0
  186. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/StyleSelectorObserver.js +294 -0
  187. package/routes/app/offers/scripts/rendering/locations/header/StyleSelectorObserver/constants.js +21 -0
  188. package/routes/app/offers/scripts/rendering/locations/header/WindowResizeObserver.js +43 -0
  189. package/routes/app/offers/scripts/rendering/locations/header/utils.js +25 -0
  190. package/routes/app/offers/scripts/rendering/locations/popup.js +66 -0
  191. package/routes/app/offers/scripts/rendering/locations/sidebar.js +21 -0
  192. package/routes/app/offers/scripts/rendering/variations/ButtonBanner.js +105 -0
  193. package/routes/app/offers/scripts/rendering/variations/ButtonModal.js +114 -0
  194. package/routes/app/offers/scripts/rendering/variations/FormBanner.js +214 -0
  195. package/routes/app/offers/scripts/rendering/variations/FormModal.js +325 -0
  196. package/routes/app/offers/scripts/rendering/variations/LinkBanner.js +105 -0
  197. package/routes/app/offers/scripts/rendering/variations/components/Body.js +29 -0
  198. package/routes/app/offers/scripts/rendering/variations/components/Button.js +128 -0
  199. package/routes/app/offers/scripts/rendering/variations/components/DismissButton.js +39 -0
  200. package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageBanner.js +110 -0
  201. package/routes/app/offers/scripts/rendering/variations/components/ForegroundImageModal.js +128 -0
  202. package/routes/app/offers/scripts/rendering/variations/components/Headline.js +94 -0
  203. package/routes/app/offers/scripts/rendering/variations/components/MultiFieldForm.js +302 -0
  204. package/routes/app/offers/scripts/rendering/variations/components/Tooltip.js +74 -0
  205. package/routes/app/offers/scripts/rendering/variations/icons.js +15 -0
  206. package/routes/app/offers/scripts/utils.js +115 -0
  207. package/routes/app/offers/utils/HTMLUtils.js +10 -0
  208. package/routes/app/offers/utils/createTypeGuard.js +32 -0
  209. package/routes/app/offers/utils/promise-utils.js +22 -0
  210. package/routes/app/websiteBuilder/stores/storeHelpers.js +18 -0
  211. package/sounds/message-initial.mp3 +0 -0
  212. package/sounds/message-received.mp3 +0 -0
  213. package/sounds/message-sent.mp3 +0 -0
  214. package/src/arrays.js +15 -0
  215. package/src/audio.js +106 -0
  216. package/src/bounded-set.js +16 -0
  217. package/src/bounding_box_observer.js +129 -0
  218. package/src/decorators.js +29 -0
  219. package/src/dom.js +128 -0
  220. package/src/dom_roots.js +26 -0
  221. package/src/embedded_forms/EmbeddedForm.js +638 -0
  222. package/src/embedded_forms/QualifiedEmbeddedForm.js +51 -0
  223. package/src/embedded_forms/QualifiedFormField.js +137 -0
  224. package/src/embedded_forms/utils.js +17 -0
  225. package/src/graphql-types.js +1686 -0
  226. package/src/iframes.js +86 -0
  227. package/src/localstorage.js +43 -0
  228. package/src/mirror/Shipper.js +133 -0
  229. package/src/mirror/constants.generated.js +13 -0
  230. package/src/mirror/constants.js +238 -0
  231. package/src/mirror/shipper/ChangeQueue.js +155 -0
  232. package/src/mirror/shipper/DOMSerializer.js +392 -0
  233. package/src/mirror/shipper/observers.js +441 -0
  234. package/src/mirror/shipper/utils.js +98 -0
  235. package/src/mixins/disposable.js +125 -0
  236. package/src/mixins/injectable.js +37 -0
  237. package/src/personalizations/personalization-manager.js +110 -0
  238. package/src/personalizations/strategies/node-freezing-strategy.js +174 -0
  239. package/src/personalizations/utils.js +187 -0
  240. package/src/promises.js +107 -0
  241. package/src/proxy.js +144 -0
  242. package/src/qualified_root.js +35 -0
  243. package/src/query_params.js +55 -0
  244. package/src/shadow-dom-helper.js +63 -0
  245. package/src/singleton_host.js +39 -0
  246. package/src/smart_website/trigger.js +49 -0
  247. package/src/smart_website/utils.js +149 -0
  248. package/src/string.js +53 -0
  249. package/src/timezone.js +57 -0
  250. package/src/timing.js +49 -0
  251. package/src/type-utils.js +76 -0
  252. package/src/url-utils.js +102 -0
  253. package/src/url.js +50 -0
  254. package/src/utils.js +72 -0
  255. package/src/validation.js.js +29 -0
  256. package/src/validation_ts.js +6 -0
  257. package/vendor/actioncable/adapters.js +6 -0
  258. package/vendor/actioncable/connection.js +204 -0
  259. package/vendor/actioncable/connection_monitor.js +129 -0
  260. package/vendor/actioncable/consumer.js +91 -0
  261. package/vendor/actioncable/index.js +34 -0
  262. package/vendor/actioncable/internal.js +22 -0
  263. package/vendor/actioncable/logger.js +28 -0
  264. package/vendor/actioncable/subscription.js +93 -0
  265. package/vendor/actioncable/subscriptions.js +89 -0
  266. package/vendor/open-telemetry-idgenerator.js +43 -0
  267. package/widget/analytics/facebook_tracker.js +8 -0
  268. package/widget/analytics/google_analytics_tracker.js +83 -0
  269. package/widget/analytics/google_tag_manager_tracker.js +22 -0
  270. package/widget/analytics.js +58 -0
  271. package/widget/api_handler/api_handler.js +730 -0
  272. package/widget/api_handler/base_api_handler.js +249 -0
  273. package/widget/booker_intent_tracker.js +391 -0
  274. package/widget/booker_outcome_tracker.js +329 -0
  275. package/widget/capture_widget_exceptions.js +150 -0
  276. package/widget/channel.js +282 -0
  277. package/widget/composite_experience_adapter.js +101 -0
  278. package/widget/constants.generated.js +350 -0
  279. package/widget/constants.js +21 -0
  280. package/widget/container.js +193 -0
  281. package/widget/content_activity_emitter.js +36 -0
  282. package/widget/data360_visitor.js +67 -0
  283. package/widget/date_provider.js +11 -0
  284. package/widget/debug_mode_state.js +175 -0
  285. package/widget/dummy_module.js +9 -0
  286. package/widget/eloqua_visitor.js +17 -0
  287. package/widget/form_cta_booker_intent.js +246 -0
  288. package/widget/hubspot_visitor.js +39 -0
  289. package/widget/inline_meeting_booker_page.js +90 -0
  290. package/widget/local_state/abstract_local_state.js +38 -0
  291. package/widget/local_state/debug_state/abstract_debug_flow.js +29 -0
  292. package/widget/local_state/debug_state/custom_form_flow.js +14 -0
  293. package/widget/local_state/debug_state/hubspot_form_flow.js +19 -0
  294. package/widget/local_state/debug_state/hubspot_v4_form_flow.js +19 -0
  295. package/widget/local_state/debug_state/marketo_form_flow.js +20 -0
  296. package/widget/local_state/debug_state/pardot_form_flow.js +18 -0
  297. package/widget/local_state/debug_state.js +362 -0
  298. package/widget/local_state/trace_state.js +20 -0
  299. package/widget/location_provider.js +9 -0
  300. package/widget/marketo_visitor.js +39 -0
  301. package/widget/meetings/tracing/buttons_forms_triggering_tracer.js +124 -0
  302. package/widget/meetings/tracing/spans/button_spans.js +18 -0
  303. package/widget/meetings/tracing/spans/form_spans.js +11 -0
  304. package/widget/multimodal_v2/assets_preloader.js +97 -0
  305. package/widget/multimodal_v2/components/AppLayout.js +93 -0
  306. package/widget/multimodal_v2/components/CursorOverlay.js +93 -0
  307. package/widget/multimodal_v2/components/PointerRectOverlay.js +74 -0
  308. package/widget/multimodal_v2/components/app/Artifact.js +109 -0
  309. package/widget/multimodal_v2/components/app/Background.js +27 -0
  310. package/widget/multimodal_v2/components/app/CalendarLoadingContent.js +255 -0
  311. package/widget/multimodal_v2/components/app/Chat.js +39 -0
  312. package/widget/multimodal_v2/components/app/CookieConsentModal.js +149 -0
  313. package/widget/multimodal_v2/components/app/Foreground.js +48 -0
  314. package/widget/multimodal_v2/components/app/HiddenInput.js +41 -0
  315. package/widget/multimodal_v2/components/app/Input.js +72 -0
  316. package/widget/multimodal_v2/components/app/LightboxExperience.js +769 -0
  317. package/widget/multimodal_v2/components/app/LoadingOverlay.js +97 -0
  318. package/widget/multimodal_v2/components/app/Main.js +985 -0
  319. package/widget/multimodal_v2/components/app/MessengerButton.js +160 -0
  320. package/widget/multimodal_v2/components/app/Multimodal.js +17 -0
  321. package/widget/multimodal_v2/components/app/OverlayControls.js +79 -0
  322. package/widget/multimodal_v2/components/app/Preview.js +32 -0
  323. package/widget/multimodal_v2/components/app/PrivacyDisclosure.js +57 -0
  324. package/widget/multimodal_v2/components/app/RotateDeviceOverlay.js +70 -0
  325. package/widget/multimodal_v2/components/app/Toolbar.js +156 -0
  326. package/widget/multimodal_v2/components/chat/ChatComposer.js +129 -0
  327. package/widget/multimodal_v2/components/chat/ChatInputForm.js +398 -0
  328. package/widget/multimodal_v2/components/chat/ColdStartQuestions.js +354 -0
  329. package/widget/multimodal_v2/components/chat/ComposerErrorBanner.js +62 -0
  330. package/widget/multimodal_v2/components/chat/PostCallSurvey.js +359 -0
  331. package/widget/multimodal_v2/components/chat/preview/FieldRequestRenderer.js +41 -0
  332. package/widget/multimodal_v2/components/chat/preview/PreviewMessageRenderer.js +60 -0
  333. package/widget/multimodal_v2/components/chat/preview/SharedOfferRenderer.js +143 -0
  334. package/widget/multimodal_v2/components/chat/preview/TextRenderer.js +27 -0
  335. package/widget/multimodal_v2/components/chat/preview/TimelinePreview.js +254 -0
  336. package/widget/multimodal_v2/components/chat/timeline/CalendarEventOfferRenderer.js +103 -0
  337. package/widget/multimodal_v2/components/chat/timeline/CalendarEventPickRenderer.js +148 -0
  338. package/widget/multimodal_v2/components/chat/timeline/FieldEntryRenderer.js +84 -0
  339. package/widget/multimodal_v2/components/chat/timeline/FieldRequestRenderer.js +56 -0
  340. package/widget/multimodal_v2/components/chat/timeline/InlinePrivacyDisclosure.js +66 -0
  341. package/widget/multimodal_v2/components/chat/timeline/LinkPreviewCard.js +70 -0
  342. package/widget/multimodal_v2/components/chat/timeline/MessageEntry.js +88 -0
  343. package/widget/multimodal_v2/components/chat/timeline/PresentContentRenderer.js +30 -0
  344. package/widget/multimodal_v2/components/chat/timeline/PresentDeckRenderer.js +279 -0
  345. package/widget/multimodal_v2/components/chat/timeline/PresentVideoRenderer.js +131 -0
  346. package/widget/multimodal_v2/components/chat/timeline/ShareContentRenderer.js +59 -0
  347. package/widget/multimodal_v2/components/chat/timeline/SharedOfferRenderer.js +131 -0
  348. package/widget/multimodal_v2/components/chat/timeline/SystemRenderer.js +82 -0
  349. package/widget/multimodal_v2/components/chat/timeline/TextRenderer.js +66 -0
  350. package/widget/multimodal_v2/components/chat/timeline/Timeline.js +158 -0
  351. package/widget/multimodal_v2/components/debug/DebugMultimodalPanel.js +327 -0
  352. package/widget/multimodal_v2/components/decks/index.js +160 -0
  353. package/widget/multimodal_v2/components/field_request/BooleanField.js +77 -0
  354. package/widget/multimodal_v2/components/field_request/FieldComponents.js +69 -0
  355. package/widget/multimodal_v2/components/field_request/Form.js +87 -0
  356. package/widget/multimodal_v2/components/field_request/MultiPicklistField.js +240 -0
  357. package/widget/multimodal_v2/components/field_request/PicklistField.js +166 -0
  358. package/widget/multimodal_v2/components/field_request/SingleLineInputField.js +69 -0
  359. package/widget/multimodal_v2/components/field_request/TextField.js +37 -0
  360. package/widget/multimodal_v2/components/field_request/index.js +170 -0
  361. package/widget/multimodal_v2/components/helpers/AutoScroll.js +37 -0
  362. package/widget/multimodal_v2/components/helpers/ErrorBoundary.js +53 -0
  363. package/widget/multimodal_v2/components/helpers/FocusTrapDialog.js +26 -0
  364. package/widget/multimodal_v2/components/helpers/ImpressionTracker.js +94 -0
  365. package/widget/multimodal_v2/components/helpers/ListRenderer.js +37 -0
  366. package/widget/multimodal_v2/components/helpers/Localization.js +76 -0
  367. package/widget/multimodal_v2/components/helpers/Persisted.js +166 -0
  368. package/widget/multimodal_v2/components/helpers/RichText.js +358 -0
  369. package/widget/multimodal_v2/components/helpers/ScreenReaderHeading.js +17 -0
  370. package/widget/multimodal_v2/components/helpers/Thumbnail.js +190 -0
  371. package/widget/multimodal_v2/components/helpers/VisuallyHidden.js +41 -0
  372. package/widget/multimodal_v2/components/helpers/content_click_payloads.js +58 -0
  373. package/widget/multimodal_v2/components/helpers/useDraggable.js +103 -0
  374. package/widget/multimodal_v2/components/helpers/useTextOverflow.js +44 -0
  375. package/widget/multimodal_v2/components/lightbox_gather/index.js +741 -0
  376. package/widget/multimodal_v2/components/meetings/ArtifactEntryPoint.js +252 -0
  377. package/widget/multimodal_v2/components/meetings/MeetingAdditionalAttendees.js +325 -0
  378. package/widget/multimodal_v2/components/meetings/MeetingBookerEntry.js +100 -0
  379. package/widget/multimodal_v2/components/meetings/MeetingDetailsCard.js +99 -0
  380. package/widget/multimodal_v2/components/meetings/MeetingErrorBanner.js +62 -0
  381. package/widget/multimodal_v2/components/meetings/MeetingOfferEmailStep.js +239 -0
  382. package/widget/multimodal_v2/components/meetings/MeetingOfferFooter.js +104 -0
  383. package/widget/multimodal_v2/components/meetings/MeetingOfferSelectionStep.js +60 -0
  384. package/widget/multimodal_v2/components/meetings/MeetingRepHeader.js +222 -0
  385. package/widget/multimodal_v2/components/meetings/MeetingStepShell.js +92 -0
  386. package/widget/multimodal_v2/components/meetings/MeetingSummaryRail.js +515 -0
  387. package/widget/multimodal_v2/components/meetings/MeetingTimeSelector.js +603 -0
  388. package/widget/multimodal_v2/components/meetings/MonthDatePicker.js +422 -0
  389. package/widget/multimodal_v2/components/meetings/NavigationButtons.js +76 -0
  390. package/widget/multimodal_v2/components/meetings/TimeSlotHeader.js +357 -0
  391. package/widget/multimodal_v2/components/meetings/WeekViewHeader.js +20 -0
  392. package/widget/multimodal_v2/components/meetings/constants.js +7 -0
  393. package/widget/multimodal_v2/components/meetings/index.js +47 -0
  394. package/widget/multimodal_v2/components/meetings/utils.js +328 -0
  395. package/widget/multimodal_v2/components/multimodal/Audio.js +28 -0
  396. package/widget/multimodal_v2/components/multimodal/Controls.js +188 -0
  397. package/widget/multimodal_v2/components/multimodal/LiveVideo.js +63 -0
  398. package/widget/multimodal_v2/components/multimodal/MultiModalComponent.js +424 -0
  399. package/widget/multimodal_v2/components/multimodal/MultimodalAvatar.js +36 -0
  400. package/widget/multimodal_v2/components/multimodal/OrbAvatar.js +326 -0
  401. package/widget/multimodal_v2/components/multimodal/Status.js +220 -0
  402. package/widget/multimodal_v2/components/multimodal/VideoAvatar.js +24 -0
  403. package/widget/multimodal_v2/components/multimodal/VideoPreview.js +114 -0
  404. package/widget/multimodal_v2/components/multimodal/useAudioLevelMonitoring.js +96 -0
  405. package/widget/multimodal_v2/components/multimodal/useMultimodal.js +434 -0
  406. package/widget/multimodal_v2/components/presentations/index.js +372 -0
  407. package/widget/multimodal_v2/components/shared/Avatar.js +92 -0
  408. package/widget/multimodal_v2/components/shared/AvatarGroup.js +135 -0
  409. package/widget/multimodal_v2/components/shared/Button.js +245 -0
  410. package/widget/multimodal_v2/components/shared/ButtonGroup.js +133 -0
  411. package/widget/multimodal_v2/components/shared/ComposerForm.js +98 -0
  412. package/widget/multimodal_v2/components/shared/SpeakingIndicator.js +239 -0
  413. package/widget/multimodal_v2/components/shared/ThinkingAnimation.js +165 -0
  414. package/widget/multimodal_v2/components/shared/Tooltip.js +266 -0
  415. package/widget/multimodal_v2/components/shared/controls/Dropdown.js +79 -0
  416. package/widget/multimodal_v2/components/shared/controls/PillToggle.js +142 -0
  417. package/widget/multimodal_v2/components/shared/controls/TextArea.js +114 -0
  418. package/widget/multimodal_v2/components/shared/toolCallLabels.js +12 -0
  419. package/widget/multimodal_v2/components/slides/SlidesThumbnail.js +47 -0
  420. package/widget/multimodal_v2/components/slides/index.js +61 -0
  421. package/widget/multimodal_v2/constants.js +88 -0
  422. package/widget/multimodal_v2/host.split-css.js +2 -0
  423. package/widget/multimodal_v2/host.string.js +96 -0
  424. package/widget/multimodal_v2/images/icons.js +582 -0
  425. package/widget/multimodal_v2/images/posters/piper_low_res.jpg +0 -0
  426. package/widget/multimodal_v2/index.js +23 -0
  427. package/widget/multimodal_v2/index.panda.js +28 -0
  428. package/widget/multimodal_v2/index.split-css.panda.js +2 -0
  429. package/widget/multimodal_v2/inline_meeting_booker.js +182 -0
  430. package/widget/multimodal_v2/locales/cs.js +196 -0
  431. package/widget/multimodal_v2/locales/da.js +196 -0
  432. package/widget/multimodal_v2/locales/de.js +196 -0
  433. package/widget/multimodal_v2/locales/en.js +196 -0
  434. package/widget/multimodal_v2/locales/en_AU.js +197 -0
  435. package/widget/multimodal_v2/locales/en_GB.js +197 -0
  436. package/widget/multimodal_v2/locales/es.js +197 -0
  437. package/widget/multimodal_v2/locales/es_LA.js +196 -0
  438. package/widget/multimodal_v2/locales/fi.js +196 -0
  439. package/widget/multimodal_v2/locales/fr.js +197 -0
  440. package/widget/multimodal_v2/locales/fr_CA.js +196 -0
  441. package/widget/multimodal_v2/locales/id.js +196 -0
  442. package/widget/multimodal_v2/locales/index.js +48 -0
  443. package/widget/multimodal_v2/locales/it.js +196 -0
  444. package/widget/multimodal_v2/locales/ja.js +196 -0
  445. package/widget/multimodal_v2/locales/ko.js +196 -0
  446. package/widget/multimodal_v2/locales/nb.js +196 -0
  447. package/widget/multimodal_v2/locales/nl.js +196 -0
  448. package/widget/multimodal_v2/locales/pl.js +196 -0
  449. package/widget/multimodal_v2/locales/pt_BR.js +196 -0
  450. package/widget/multimodal_v2/locales/ru.js +196 -0
  451. package/widget/multimodal_v2/locales/sv.js +196 -0
  452. package/widget/multimodal_v2/locales/th.js +196 -0
  453. package/widget/multimodal_v2/locales/tr.js +196 -0
  454. package/widget/multimodal_v2/locales/vi.js +196 -0
  455. package/widget/multimodal_v2/locales/zh_CN.js +196 -0
  456. package/widget/multimodal_v2/locales/zh_TW.js +196 -0
  457. package/widget/multimodal_v2/multimodal.js +633 -0
  458. package/widget/multimodal_v2/multimodal_channel.js +195 -0
  459. package/widget/multimodal_v2/signals/active_conversation_signal.js +33 -0
  460. package/widget/multimodal_v2/signals/allowed_conversation_mode_signal.js +38 -0
  461. package/widget/multimodal_v2/signals/artifact_signal.js +22 -0
  462. package/widget/multimodal_v2/signals/layout_signal.js +98 -0
  463. package/widget/multimodal_v2/signals/messages_signal.js +207 -0
  464. package/widget/multimodal_v2/signals/ui_state_signal.js +128 -0
  465. package/widget/multimodal_v2/stable_bundle_src.js +44 -0
  466. package/widget/multimodal_v2/stores/ai_conversation_store.js +221 -0
  467. package/widget/multimodal_v2/stores/artifact_store.js +205 -0
  468. package/widget/multimodal_v2/stores/base_store.js +16 -0
  469. package/widget/multimodal_v2/stores/call_store.js +770 -0
  470. package/widget/multimodal_v2/stores/call_ui_adapter.js +225 -0
  471. package/widget/multimodal_v2/stores/debug_multimodal_scenario_store.js +471 -0
  472. package/widget/multimodal_v2/stores/decks_store.js +285 -0
  473. package/widget/multimodal_v2/stores/device_store.js +63 -0
  474. package/widget/multimodal_v2/stores/docking_store.js +62 -0
  475. package/widget/multimodal_v2/stores/field_request_store.js +326 -0
  476. package/widget/multimodal_v2/stores/meeting_store.js +477 -0
  477. package/widget/multimodal_v2/stores/participant_store.js +73 -0
  478. package/widget/multimodal_v2/stores/post_call_survey_store.js +160 -0
  479. package/widget/multimodal_v2/stores/pounce_tracking_store.js +163 -0
  480. package/widget/multimodal_v2/stores/pounce_tracking_store_v2.js +511 -0
  481. package/widget/multimodal_v2/stores/presentations_store.js +111 -0
  482. package/widget/multimodal_v2/stores/root_store.js +1919 -0
  483. package/widget/multimodal_v2/stores/screen_share_store.js +217 -0
  484. package/widget/multimodal_v2/stores/slides_store.js +21 -0
  485. package/widget/multimodal_v2/stores/translation_store.js +185 -0
  486. package/widget/multimodal_v2/stores/ui_store.js +496 -0
  487. package/widget/multimodal_v2/stores/waiting_store.js +159 -0
  488. package/widget/multimodal_v2/stores/website_navigation_store.js +767 -0
  489. package/widget/multimodal_v2/styled-system/css/conditions.js +34 -0
  490. package/widget/multimodal_v2/styled-system/css/css.js +48 -0
  491. package/widget/multimodal_v2/styled-system/css/cva.js +96 -0
  492. package/widget/multimodal_v2/styled-system/css/cx.js +13 -0
  493. package/widget/multimodal_v2/styled-system/css/index.js +15 -0
  494. package/widget/multimodal_v2/styled-system/css/sva.js +69 -0
  495. package/widget/multimodal_v2/styled-system/helpers.js +384 -0
  496. package/widget/multimodal_v2/styled-system/jsx/create-style-context.js +96 -0
  497. package/widget/multimodal_v2/styled-system/jsx/factory-helper.js +19 -0
  498. package/widget/multimodal_v2/styled-system/jsx/factory.js +111 -0
  499. package/widget/multimodal_v2/styled-system/jsx/index.js +12 -0
  500. package/widget/multimodal_v2/styled-system/jsx/is-valid-prop.js +22 -0
  501. package/widget/multimodal_v2/types.js +105 -0
  502. package/widget/multimodal_v2/utils/auto_scroller.js +157 -0
  503. package/widget/multimodal_v2/utils/flip_animation.js +124 -0
  504. package/widget/multimodal_v2/utils/focus_gate.js +237 -0
  505. package/widget/multimodal_v2/utils/locale.js +16 -0
  506. package/widget/multimodal_v2/utils/media_queries.js +30 -0
  507. package/widget/multimodal_v2/utils/multimodal_cache.js +19 -0
  508. package/widget/multimodal_v2/utils/mutation_effect.js +14 -0
  509. package/widget/multimodal_v2/utils/navigation_interceptor.js +205 -0
  510. package/widget/multimodal_v2/utils/navigation_strategies/dom_swap.js +393 -0
  511. package/widget/multimodal_v2/utils/navigation_strategies/index.js +12 -0
  512. package/widget/multimodal_v2/utils/navigation_strategies/lwr.js +61 -0
  513. package/widget/multimodal_v2/utils/navigation_strategies/navigation_utils.js +46 -0
  514. package/widget/multimodal_v2/utils/navigation_strategies/next_js.js +24 -0
  515. package/widget/multimodal_v2/utils/navigation_strategies/wouter_v3.js +15 -0
  516. package/widget/multimodal_v2/utils/objects_map.js +38 -0
  517. package/widget/multimodal_v2/utils/perceived_voice_turn_tracker.js +345 -0
  518. package/widget/multimodal_v2/utils/sanitize_html.js +132 -0
  519. package/widget/multimodal_v2/utils/signals.js +97 -0
  520. package/widget/multimodal_v2/utils/slide_zoom.js +114 -0
  521. package/widget/multimodal_v2/utils/theme_styles.js +137 -0
  522. package/widget/multimodal_v2/utils/url_observer.js +52 -0
  523. package/widget/multimodal_v2/utils/voice_onset_detector.js +127 -0
  524. package/widget/page_mirror.js +89 -0
  525. package/widget/page_view_activity_emitter.js +71 -0
  526. package/widget/pardot_visitor.js +137 -0
  527. package/widget/personalization_observer.js +96 -0
  528. package/widget/personalizations_config.js +160 -0
  529. package/widget/qualified_form/constants.js +23 -0
  530. package/widget/qualified_form/phone_utils.js +38 -0
  531. package/widget/qualified_form/qualified_form_action.js +91 -0
  532. package/widget/qualified_form/qualified_form_action_orchestrator.js +21 -0
  533. package/widget/qualified_form/qualified_form_api.js +471 -0
  534. package/widget/scroll_disabler.js +109 -0
  535. package/widget/server-logger.js +156 -0
  536. package/widget/smart_website_config.js +112 -0
  537. package/widget/telemetry/context.js +75 -0
  538. package/widget/telemetry/index.js +16 -0
  539. package/widget/telemetry/messenger_uptime.js +80 -0
  540. package/widget/telemetry/metrics.js +120 -0
  541. package/widget/telemetry/span.js +82 -0
  542. package/widget/telemetry/telemetry.js +180 -0
  543. package/widget/telemetry/tracer.js +41 -0
  544. package/widget/telemetry/tracing_store.js +310 -0
  545. package/widget/tracker.js +916 -0
  546. package/widget/utils/native_globals.js +129 -0
  547. package/widget/v1_adapter.js +50 -0
  548. package/widget/v2_adapter.js +368 -0
  549. package/widget/visitor/base_visitor_state.js +11 -0
  550. package/widget/visitor/cookie_visitor_state.js +128 -0
  551. package/widget/visitor/in_memory_visitor_state.js +29 -0
  552. package/widget/visitor/visitor_state.js +384 -0
  553. package/widget/visitor.js +356 -0
  554. package/widget/widget/linked_widget_v2.js +227 -0
  555. package/widget/widget/page_mirror_factory.js +22 -0
  556. package/widget/widget/sentry.js +130 -0
  557. package/widget/widget/widget.js +1698 -0
  558. package/widget/widget.split-css.js +2 -0
  559. package/widget/widget_bootstrap.js +97 -0
  560. package/widget/widget_object.js +73 -0
@@ -0,0 +1,128 @@
1
+ import { signals_core_module_d, signals_core_module_w } from "../../../js/multimodal_v2.js";
2
+ import { createArtifactSignal } from "./artifact_signal.js";
3
+ import { ConversationMode as types_ConversationMode, OpenedDisplayMode as types_OpenedDisplayMode, DisplayMode as types_DisplayMode, InputHiddenReason as types_InputHiddenReason, InputState as types_InputState } from "../types.js";
4
+
5
+
6
+
7
+
8
+ function createUIStateSignal(rootStore) {
9
+ const state = signals_core_module_d({
10
+ displayMode: types_DisplayMode.COLLAPSED_CENTER,
11
+ openedDisplayMode: types_OpenedDisplayMode.SIDEBAR,
12
+ conversationMode: types_ConversationMode.TEXT,
13
+ inputMessageId: null,
14
+ artifactMessageId: null,
15
+ userHasDismissed: false,
16
+ userHasIgnoredMultimodal: false
17
+ });
18
+ return Object.assign(state, {
19
+ displayMode: createDisplayModeSignal(state),
20
+ openedDisplayMode: signals_core_module_w(()=>{
21
+ var _state_value_openedDisplayMode;
22
+ return (_state_value_openedDisplayMode = state.value.openedDisplayMode) != null ? _state_value_openedDisplayMode : types_OpenedDisplayMode.SIDEBAR;
23
+ }),
24
+ conversationMode: createConversationModeSignal(state),
25
+ input: createInputSignal(rootStore, state),
26
+ artifact: createArtifactSignal(rootStore, state),
27
+ userHasDismissed: signals_core_module_w(()=>{
28
+ var _state_value_userHasDismissed;
29
+ return (_state_value_userHasDismissed = state.value.userHasDismissed) != null ? _state_value_userHasDismissed : false;
30
+ }),
31
+ userHasIgnoredMultimodal: signals_core_module_w(()=>{
32
+ var _state_value_userHasIgnoredMultimodal;
33
+ return (_state_value_userHasIgnoredMultimodal = state.value.userHasIgnoredMultimodal) != null ? _state_value_userHasIgnoredMultimodal : false;
34
+ }),
35
+ // Persisted UI state is used to save the UI state to DB
36
+ persisted: signals_core_module_w(()=>extractPersistedUIState(state.value))
37
+ });
38
+ }
39
+ function createConversationModeSignal(state) {
40
+ const conversationMode = signals_core_module_w(()=>state.value.conversationMode);
41
+ return Object.assign(conversationMode, {
42
+ text: signals_core_module_w(()=>conversationMode.value === types_ConversationMode.TEXT),
43
+ voice: signals_core_module_w(()=>conversationMode.value === types_ConversationMode.VOICE),
44
+ video: signals_core_module_w(()=>conversationMode.value === types_ConversationMode.VIDEO),
45
+ multimodal: signals_core_module_w(()=>conversationMode.value !== types_ConversationMode.TEXT)
46
+ });
47
+ }
48
+ function createDisplayModeSignal(state) {
49
+ const displayMode = signals_core_module_w(()=>state.value.displayMode);
50
+ const collapsedCenter = signals_core_module_w(()=>displayMode.value === types_DisplayMode.COLLAPSED_CENTER);
51
+ const collapsedRight = signals_core_module_w(()=>displayMode.value === types_DisplayMode.COLLAPSED_RIGHT);
52
+ const closed = signals_core_module_w(()=>displayMode.value === types_DisplayMode.CLOSED);
53
+ const sidebar = signals_core_module_w(()=>displayMode.value === types_DisplayMode.SIDEBAR);
54
+ const docked = signals_core_module_w(()=>displayMode.value === types_DisplayMode.DOCKED);
55
+ // Convenience computed signals
56
+ const collapsed = signals_core_module_w(()=>collapsedCenter.value || collapsedRight.value);
57
+ const minimized = signals_core_module_w(()=>collapsed.value || closed.value);
58
+ const opened = signals_core_module_w(()=>sidebar.value || docked.value);
59
+ return Object.assign(displayMode, {
60
+ collapsedCenter,
61
+ collapsedRight,
62
+ collapsed,
63
+ closed,
64
+ sidebar,
65
+ docked,
66
+ minimized,
67
+ opened
68
+ });
69
+ }
70
+ function createInputSignal(rootStore, uiState) {
71
+ const messageId = signals_core_module_w(()=>uiState.value.inputMessageId);
72
+ const message = signals_core_module_w(()=>{
73
+ var _rootStore_messages_visible_value_find;
74
+ if (!messageId.value) return null;
75
+ const message = (_rootStore_messages_visible_value_find = rootStore.messages.visible.value.find((m)=>m.id === messageId.value)) != null ? _rootStore_messages_visible_value_find : null;
76
+ if (!message) return null;
77
+ if (message.type === "field_request") {
78
+ return message;
79
+ }
80
+ return null;
81
+ });
82
+ const hiddenReason = signals_core_module_w(()=>{
83
+ if (rootStore.isVisitorBlocked.value) {
84
+ return types_InputHiddenReason.VISITOR_BLOCKED;
85
+ }
86
+ if (!rootStore.agentsAvailable.value && rootStore.userEngaged.value) {
87
+ return types_InputHiddenReason.REPS_OFFLINE;
88
+ }
89
+ if (!rootStore.messages.hasStartChatBotEvent.value && !rootStore.activeConversation.user.value) {
90
+ return types_InputHiddenReason.CONVERSATION_NOT_STARTED;
91
+ }
92
+ return null;
93
+ });
94
+ const state = signals_core_module_w(()=>{
95
+ var _message_value;
96
+ if (hiddenReason.value === types_InputHiddenReason.VISITOR_BLOCKED) return types_InputState.HIDDEN;
97
+ if (((_message_value = message.value) == null ? void 0 : _message_value.type) === "field_request") return types_InputState.FIELD_REQUEST;
98
+ if (hiddenReason.value) return types_InputState.HIDDEN;
99
+ return types_InputState.CHAT;
100
+ });
101
+ const isAnchored = signals_core_module_w(()=>{
102
+ const msg = message.value;
103
+ return (msg == null ? void 0 : msg.type) === "field_request" && (msg.fieldType === "picklist" || msg.fieldType === "multi_picklist") && !rootStore.displayMode.minimized.value;
104
+ });
105
+ return {
106
+ messageId,
107
+ message,
108
+ state,
109
+ hiddenReason,
110
+ isAnchored
111
+ };
112
+ }
113
+ function extractPersistedUIState(uiState) {
114
+ const persisted = {
115
+ displayMode: uiState.displayMode,
116
+ openedDisplayMode: uiState.openedDisplayMode,
117
+ userHasDismissed: uiState.userHasDismissed,
118
+ userHasIgnoredMultimodal: uiState.userHasIgnoredMultimodal
119
+ };
120
+ // Drop null/undefined so restoring partial/older sessions (e.g. state that
121
+ // predates openedDisplayMode) doesn't clobber existing values with nullish.
122
+ return Object.fromEntries(Object.entries(persisted).filter((param)=>{
123
+ let [, value] = param;
124
+ return value != null;
125
+ }));
126
+ }
127
+
128
+ export { createUIStateSignal, extractPersistedUIState };
@@ -0,0 +1,44 @@
1
+ var _ref;
2
+ var _document_currentScript;
3
+ /**
4
+ * Resolves the base URL this bundle was loaded from, so sibling artifacts (e.g.
5
+ * call-machine-object-bundle.js) can be resolved relative to it.
6
+ *
7
+ * Two resolution sources, tried in this order:
8
+ *
9
+ * 1. `globalThis.__qualifiedBundleBaseUrl` — a runtime override, set by `setup()`
10
+ * before any call object is created. This is how the unbundled ESM package supplies
11
+ * its base: the entry resolves `import.meta.url` and assigns it here. It cannot be a
12
+ * build-time constant read at module-evaluation time — the widget graph is reached by
13
+ * static imports that run in full before the entry's first statement, so a value
14
+ * captured then would always be too late. Reading it on demand is what lets `setup()`
15
+ * set it in time.
16
+ * 2. `document.currentScript.src` — classic-script builds: the hosted snippet and
17
+ * today's self-hosted zip. Only readable during synchronous script execution,
18
+ * which is why it is captured at module-evaluation time below and why this module
19
+ * must be imported at the very top of a classic entry pack.
20
+ *
21
+ * Under ESM, source 2 is always null, because `document.currentScript` is only set
22
+ * while a classic script tag is executing. That is the defect this ordering exists to
23
+ * fix: a null base URL used to fall through to a remote call-machine bundle without
24
+ * erroring. See the TDD, "Verified blockers", blocker 1.
25
+ *
26
+ * Hosted snippets legitimately have no sibling artifact and keep using the
27
+ * backend-provided CDN URL; only self-hosted builds require this to resolve.
28
+ */ /**
29
+ * Source 3, captured while the classic script tag is still executing.
30
+ *
31
+ * This one cannot be deferred: `document.currentScript` is non-null only during
32
+ * synchronous execution of the script that set it, and reads `null` from any later
33
+ * task. Null throughout an ES module's evaluation by design, which is the ESM shape
34
+ * blocker 1 describes.
35
+ */ const CURRENT_SCRIPT_SRC = typeof document !== "undefined" ? (_ref = (_document_currentScript = document.currentScript) == null ? void 0 : _document_currentScript.src) != null ? _ref : null : null;
36
+ /** The base URL sibling assets resolve against, or null when nothing supplies one. */ function resolveBundleBaseUrl() {
37
+ const runtimeOverride = globalThis.__qualifiedBundleBaseUrl;
38
+ if (runtimeOverride) {
39
+ return runtimeOverride;
40
+ }
41
+ return CURRENT_SCRIPT_SRC;
42
+ }
43
+
44
+ export { resolveBundleBaseUrl };
@@ -0,0 +1,221 @@
1
+ import { __webpack_require__ } from "../../../js/runtime.js";
2
+ import { signals_core_module_r, signals_core_module_d } from "../../../js/multimodal_v2.js";
3
+ import { snakify } from "../../../src/utils.js";
4
+ import "../../telemetry/index.js";
5
+ import "../../utils/native_globals.js";
6
+ import { ConversationMode as types_ConversationMode } from "../types.js";
7
+ import { metrics } from "../../telemetry/metrics.js";
8
+
9
+ /* provided dependency */ var ai_conversation_store_clearTimeout = __webpack_require__(68034).Kj;
10
+ /* provided dependency */ var ai_conversation_store_setTimeout = __webpack_require__(68034).pS;
11
+ function _extends() {
12
+ _extends = Object.assign || function(target) {
13
+ for(var i = 1; i < arguments.length; i++){
14
+ var source = arguments[i];
15
+ for(var key in source){
16
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
17
+ target[key] = source[key];
18
+ }
19
+ }
20
+ }
21
+ return target;
22
+ };
23
+ return _extends.apply(this, arguments);
24
+ }
25
+
26
+
27
+
28
+
29
+ class AiConversationStore {
30
+ emitAvailabilityFailed() {
31
+ if (this.availabilityTimeoutId === null) return;
32
+ ai_conversation_store_clearTimeout(this.availabilityTimeoutId);
33
+ this.availabilityTimeoutId = null;
34
+ metrics.emitIncrement("multimodal_session_failed");
35
+ }
36
+ dispose() {
37
+ if (this.startConversationTimeoutId !== null) {
38
+ ai_conversation_store_clearTimeout(this.startConversationTimeoutId);
39
+ this.startConversationTimeoutId = null;
40
+ }
41
+ if (this.availabilityTimeoutId !== null) {
42
+ ai_conversation_store_clearTimeout(this.availabilityTimeoutId);
43
+ this.availabilityTimeoutId = null;
44
+ }
45
+ }
46
+ constructor(callStore){
47
+ this.callStore = callStore;
48
+ this.conversation = signals_core_module_d(null);
49
+ this.isCoffeeReady = signals_core_module_d(false);
50
+ this.error = signals_core_module_d(false);
51
+ this.alreadyInCall = signals_core_module_d(false);
52
+ this.startConversationTimestamp = null;
53
+ this.startConversationTimeoutId = null;
54
+ this.availabilityTimeoutId = null;
55
+ this.startConversation = async (restart, startCallContext)=>{
56
+ if (restart === void 0) restart = false;
57
+ if (startCallContext === void 0) startCallContext = null;
58
+ this.rootStore.isVideoLoading.value = true;
59
+ this.isCoffeeReady.value = false;
60
+ this.alreadyInCall.value = false;
61
+ this.startConversationTimestamp = performance.now();
62
+ if (this.startConversationTimeoutId !== null) {
63
+ ai_conversation_store_clearTimeout(this.startConversationTimeoutId);
64
+ }
65
+ if (this.availabilityTimeoutId !== null) {
66
+ ai_conversation_store_clearTimeout(this.availabilityTimeoutId);
67
+ }
68
+ if (!restart) {
69
+ this.callStore.resetCallAvailabilityMetric();
70
+ }
71
+ // Set up 30s timeout to log metric if all_participants_joined doesn't fire
72
+ this.startConversationTimeoutId = ai_conversation_store_setTimeout(()=>{
73
+ if (this.startConversationTimestamp !== null) {
74
+ metrics.emitTiming("multimodal_time_to_all_participants_joined_ms", 30000);
75
+ this.startConversationTimestamp = null;
76
+ }
77
+ this.startConversationTimeoutId = null;
78
+ }, 30000);
79
+ this.availabilityTimeoutId = ai_conversation_store_setTimeout(()=>{
80
+ this.availabilityTimeoutId = null;
81
+ metrics.emitIncrement("multimodal_session_failed");
82
+ }, AiConversationStore.AVAILABILITY_BUDGET_MS);
83
+ this.callStore.preload();
84
+ // Forward the start-call context (set when the call was started with a specific
85
+ // trigger, e.g. from a "present_video" card). Skipped on restart/reconnect so
86
+ // re-joins don't re-trigger the opening intent.
87
+ const context = restart ? null : startCallContext;
88
+ const response = await this.rootStore.channel.perform("start_ai_sdr_conversation", _extends({
89
+ restart,
90
+ call_type: this.rootStore.allowVoiceVideoToggle.value ? types_ConversationMode.VIDEO : this.rootStore.conversationMode.value
91
+ }, this.rootStore.featureFlags.piperXAnam && {
92
+ avatar_provider: "anam"
93
+ }, context && {
94
+ start_call_context: snakify(context)
95
+ }));
96
+ if (response.error) {
97
+ if (this.startConversationTimeoutId !== null) {
98
+ ai_conversation_store_clearTimeout(this.startConversationTimeoutId);
99
+ this.startConversationTimeoutId = null;
100
+ }
101
+ this.startConversationTimestamp = null;
102
+ this.emitAvailabilityFailed();
103
+ // Degrade gracefully to text instead of surfacing a hard error, so the
104
+ // visitor can keep talking to us when room creation can't be recovered.
105
+ this.failoverToText();
106
+ } else if ("active_call_exists" in response.data) {
107
+ this.alreadyInCall.value = true;
108
+ this.rootStore.isVideoLoading.value = false;
109
+ } else {
110
+ this.handleStartResponse(response.data);
111
+ }
112
+ try {
113
+ // Initialize navigation interception only when we know the conversation was created successfully
114
+ if (this.conversation.value) {
115
+ const store = await this.rootStore.websiteNavigationStore.load();
116
+ // Guard: conversation may have been cleared while we were waiting for the response
117
+ if (this.conversation.value) {
118
+ store.initNavigationInterceptor();
119
+ }
120
+ }
121
+ } catch (error) {
122
+ // Suppress error - we'll handle it later
123
+ // TODO: report to sentry when sentry is available within stores
124
+ }
125
+ };
126
+ /**
127
+ * End the current conversation.
128
+ */ this.endConversation = async ()=>{
129
+ if (!this.conversation.value) return;
130
+ // We don't need to await this we can assume the backend will end it correctly
131
+ this.rootStore.channel.perform("end_ai_sdr_conversation", {
132
+ conversation_id: this.conversation.value.conversation_id
133
+ });
134
+ await this.handleEndResponse();
135
+ };
136
+ this.handleEndResponse = async ()=>{
137
+ var _ref;
138
+ var _this_conversation_value;
139
+ const conversationId = (_ref = (_this_conversation_value = this.conversation.value) == null ? void 0 : _this_conversation_value.conversation_id) != null ? _ref : null;
140
+ if (this.availabilityTimeoutId !== null) {
141
+ ai_conversation_store_clearTimeout(this.availabilityTimeoutId);
142
+ this.availabilityTimeoutId = null;
143
+ }
144
+ await this.callStore.leaveCall();
145
+ signals_core_module_r(()=>{
146
+ this.conversation.value = null;
147
+ this.rootStore.isVideoLoading.value = false;
148
+ this.rootStore.isBlurredVideoActive.value = false;
149
+ this.rootStore.setTypingIndicator(false);
150
+ try {
151
+ var _this_rootStore_websiteNavigationStore_value;
152
+ (_this_rootStore_websiteNavigationStore_value = this.rootStore.websiteNavigationStore.value) == null ? void 0 : _this_rootStore_websiteNavigationStore_value.disposeNavigationInterceptor();
153
+ } catch (error) {
154
+ // Suppress error - we'll handle it later
155
+ // TODO: report to sentry when sentry is available within stores
156
+ }
157
+ });
158
+ if (conversationId && this.rootStore.featureFlags.piperXPostCallSurvey) {
159
+ const surveyStore = await this.rootStore.postCallSurveyStore.load();
160
+ surveyStore.show(conversationId);
161
+ }
162
+ };
163
+ /**
164
+ * End a conversation by ID without requiring conversation.value to be set.
165
+ * Used to clean up conversations created on the backend when the user cancels
166
+ * before the start response is processed.
167
+ */ this.endConversationById = async (conversationId)=>{
168
+ // Fire and forget - we don't need to handle the response since we're just cleaning up
169
+ this.rootStore.channel.perform("end_ai_sdr_conversation", {
170
+ conversation_id: conversationId
171
+ });
172
+ };
173
+ this.failoverToText = ()=>{
174
+ this.rootStore.isVideoLoading.value = false;
175
+ this.rootStore.setConversationMode(types_ConversationMode.TEXT);
176
+ // There is no call to sit behind a picture-in-picture widget any more, so a
177
+ // widget parked for one would hide the fallback notice below with nothing in
178
+ // its place.
179
+ if (this.rootStore.displayMode.minimized.peek()) {
180
+ this.rootStore.setOpenedDisplayMode();
181
+ }
182
+ this.rootStore.displayLocalNotice("Voice and video are temporarily unavailable. Let's keep chatting here.");
183
+ this.callStore.resolveCallAvailabilityMetric("success");
184
+ };
185
+ // Handlers
186
+ this.handleStartResponse = (payload)=>{
187
+ // If isVideoLoading was set to false while we were waiting for the response,
188
+ // it means the user canceled the connection - don't proceed
189
+ if (!this.rootStore.isVideoLoading.value) {
190
+ // The conversation was created on the backend, so we need to send an end message
191
+ // to clean it up. This handles the race condition where user clicks X before
192
+ // the start response comes back.
193
+ if (payload.conversation_id) {
194
+ this.endConversationById(payload.conversation_id);
195
+ }
196
+ return;
197
+ }
198
+ if (payload.forced_voice_only) {
199
+ this.rootStore.setConversationMode(types_ConversationMode.VOICE);
200
+ }
201
+ const { conversation_id, conversation_url, visitor_token } = payload;
202
+ if (!conversation_id || !conversation_url) {
203
+ // eslint-disable-next-line no-console
204
+ console.error("Conversation Id or URL is missing");
205
+ this.error.value = true;
206
+ this.rootStore.isVideoLoading.value = false;
207
+ return;
208
+ }
209
+ this.conversation.value = {
210
+ conversation_id,
211
+ conversation_url,
212
+ visitor_token
213
+ };
214
+ };
215
+ this.rootStore = callStore.rootStore;
216
+ }
217
+ }
218
+ AiConversationStore.AVAILABILITY_BUDGET_MS = 15000;
219
+
220
+
221
+ export default AiConversationStore;
@@ -0,0 +1,205 @@
1
+ import { __webpack_require__ } from "../../../js/runtime.js";
2
+ import { signals_core_module_r, signals_core_module_d } from "../../../js/multimodal_v2.js";
3
+ import { BaseStore } from "./base_store.js";
4
+ import "../../utils/native_globals.js";
5
+ import { MaximizedState as types_MaximizedState } from "../types.js";
6
+
7
+ /* provided dependency */ var artifact_store_setTimeout = __webpack_require__(68034).pS;
8
+
9
+
10
+
11
+ /**
12
+ * Owns artifact orchestration: presenting slides / presentation videos / the
13
+ * meeting booker in the maximized ARTIFACT overlay, navigating the host page
14
+ * (co-browsing), and tearing down the overlay. The underlying signal lives in the
15
+ * UI state (see `createArtifactSignal`); this store exposes it via `current`
16
+ * and drives the side effects that show/hide it.
17
+ */ class ArtifactStore extends BaseStore {
18
+ /** The currently presented artifact (slide, presentation video, deck or meeting), if any. */ get current() {
19
+ return this.rootStore.uiStore.artifact;
20
+ }
21
+ constructor(rootStore){
22
+ super(rootStore), this.rootStore = rootStore, /** Deck/video message ids already hidden, including ones still loading. */ this.hiddenArtifactIds = new Set(), /**
23
+ * Messages whose artifact is on its way into the overlay: queued, and still
24
+ * waiting on the chunk it needs (or on a deliberate delay) before it can be
25
+ * shown. The timeline reads this to withhold the entry point it would otherwise
26
+ * draw for a message that is about to fill the overlay anyway — see
27
+ * CalendarEventOfferRenderer, where the "continue booking" card would flash in
28
+ * front of a booker already coming up.
29
+ *
30
+ * A set rather than one id because the waits overlap: two messages arriving
31
+ * within a delay of each other are both on their way, and only the overlay
32
+ * itself is exclusive. Held as one id, the second to be queued would take the
33
+ * first's slot back out of hiding, and the first to open would then release the
34
+ * second's.
35
+ */ this.pending = signals_core_module_d(new Set()), /**
36
+ * Queues an incoming message for the overlay, optionally after a delay.
37
+ *
38
+ * The id is marked pending synchronously, before any of the waiting starts, so
39
+ * the timeline can withhold this message's own entry point for the whole of it.
40
+ * Getting to the overlay is asynchronous — it waits on the artifact's lazy chunk,
41
+ * and on this delay — and until it lands the timeline would otherwise draw a card
42
+ * in front of an artifact that is on its way up anyway.
43
+ *
44
+ * Awaitable, but callers reacting to an incoming message have nothing to wait
45
+ * for: hand it over and let it come up on its own.
46
+ */ this.queueArtifactMessage = async (message, param)=>{
47
+ let { delayMs = 0 } = param === void 0 ? {} : param;
48
+ this.markPending(message.id);
49
+ try {
50
+ if (delayMs > 0) await new Promise((resolve)=>artifact_store_setTimeout(resolve, delayMs));
51
+ await this.presentArtifactMessage(message);
52
+ } finally{
53
+ // Safe to release the slot now: on the way through here the artifact id has
54
+ // been set, so the renderer is already withholding it for that reason
55
+ // instead. On the way out of a failure nothing is coming, and the card is
56
+ // the only entry point left. Either way it says nothing about any other
57
+ // message still on its way.
58
+ this.clearPending(message.id);
59
+ }
60
+ }, /**
61
+ * Shows a message's artifact now, loading whatever its body needs first so the
62
+ * overlay never flashes empty.
63
+ *
64
+ * Unlike {@link queueArtifactMessage} this leaves the timeline alone, for the
65
+ * visitor asking to (re)open an artifact from a card that is already on screen:
66
+ * hiding it mid-load would blank the spot they just clicked.
67
+ */ this.presentArtifactMessage = async (message)=>{
68
+ switch(message.type){
69
+ case "present_content":
70
+ await this.rootStore.slidesStore.load();
71
+ // Mirror the on-screen slide into the voice agent's perception loop
72
+ // (ScreenShareStore ships it via the update_perception channel action).
73
+ this.loadSlidePerception();
74
+ this.showArtifact(message);
75
+ break;
76
+ case "present_video":
77
+ if (this.rootStore.callInProgress.value) {
78
+ await this.rootStore.presentationsStore.load();
79
+ if (!this.hiddenArtifactIds.has(message.id)) this.showArtifact(message);
80
+ }
81
+ break;
82
+ case "present_deck":
83
+ // Like present_video, a deck only opens in the overlay during a call.
84
+ // Off-call the visitor gets a "join call" prompt (see PresentDeckRenderer).
85
+ if (this.rootStore.callInProgress.value) {
86
+ var _message_slides;
87
+ await this.rootStore.decksStore.load();
88
+ // Only open the overlay for a LIVE presentation. Once narration finishes
89
+ // the deck re-broadcasts (PyperxController#absorb_deck_narration!) with
90
+ // per-slide talk tracks populated — that update is for the timeline
91
+ // record, not a fresh present, so it must not (re)open the overlay, least
92
+ // of all one the visitor has already dismissed. A live present arrives
93
+ // with talk tracks withheld (awaiting_narration), so this distinguishes
94
+ // the two without needing to track dismissal separately.
95
+ const narrationAbsorbed = ((_message_slides = message.slides) != null ? _message_slides : []).some((slide)=>!!slide.talkTrack);
96
+ if (!narrationAbsorbed && !this.hiddenArtifactIds.has(message.id)) {
97
+ // Mirror the slide to the voice agent's perception loop
98
+ // (ScreenShareStore ships it via the update_perception channel action).
99
+ // Gated with the present so we only mirror a live, on-screen slide.
100
+ this.loadSlidePerception();
101
+ this.showArtifact(message);
102
+ }
103
+ }
104
+ break;
105
+ case "calendar_event_offer":
106
+ // The overlay is the booker's only surface in the messenger. (The
107
+ // element-conversation lightbox is a separate flow; see
108
+ // RootStore#elementConversationOffer.)
109
+ await this.rootStore.meetingStore.load();
110
+ this.showArtifact(message);
111
+ break;
112
+ case "navigate_content":
113
+ // The one kind that never reaches the overlay: it drives the host page
114
+ // instead, so no timeline card stands in for it and nothing is withheld.
115
+ await this.rootStore.websiteNavigationStore.load().then((store)=>store.navigateToContent(message));
116
+ break;
117
+ }
118
+ }, // fresh presentation this is a static single-slide view (no auto-advance) and
119
+ // is allowed regardless of call state — it's a review of an already-shown
120
+ // slide, not the agent presenting.
121
+ this.revisitDeckSlide = async (message, slideIndex, pageTitle)=>{
122
+ const store = await this.rootStore.decksStore.load();
123
+ // Pass the clicked slide's own title: on a consolidated resume record `message`
124
+ // is the last share, whose `slides` may not include this slide, so the store
125
+ // can't look the title up from it.
126
+ store.prepareRevisit(message.id, slideIndex, pageTitle);
127
+ this.showArtifact(message);
128
+ }, /**
129
+ * Tears down the overlay for whatever artifact is in it. Deliberately says
130
+ * nothing about the meeting booker: clearing the artifact message is the whole
131
+ * of what dismissing the booker means, since the overlay is the only surface it
132
+ * has. Meeting-aware teardown — which also has the element conversation to let
133
+ * go of — belongs to `closeMeetingBooker` and `clearMeetingArtifact`.
134
+ */ this.clearArtifact = ()=>{
135
+ const artifactMessage = this.current.message.value;
136
+ const closedArtifact = this.rootStore.maximizedState.value === types_MaximizedState.ARTIFACT && ((artifactMessage == null ? void 0 : artifactMessage.type) === "present_video" || (artifactMessage == null ? void 0 : artifactMessage.type) === "present_deck") ? artifactMessage : null;
137
+ if (closedArtifact) {
138
+ this.hiddenArtifactIds.add(closedArtifact.id);
139
+ }
140
+ this.rootStore.clearMaximizedState({
141
+ when: types_MaximizedState.ARTIFACT
142
+ });
143
+ // Closing the presentation overlay mid-call: let the agent know so it stops
144
+ // narrating and acknowledges that the visitor dismissed the presentation.
145
+ if (closedArtifact && this.rootStore.callInProgress.value) {
146
+ this.channel.perform("notify_artifact_closed", {
147
+ artifact_type: closedArtifact.type === "present_video" ? "presentation" : "deck",
148
+ artifact_message_id: closedArtifact.id
149
+ });
150
+ }
151
+ }, /** Silently hides the live deck/demo targeted by Piper's hide event. */ this.hideArtifact = (artifactMessageId)=>{
152
+ var _this_rootStore_decksStore_value;
153
+ // Record the hide before checking the current overlay. The matching artifact
154
+ // may still be waiting on a lazy store; when that wait resolves,
155
+ // presentArtifactMessage checks this set and does not open stale content.
156
+ this.hiddenArtifactIds.add(artifactMessageId);
157
+ const artifactMessage = this.current.message.value;
158
+ if (this.rootStore.maximizedState.value !== types_MaximizedState.ARTIFACT) return;
159
+ if ((artifactMessage == null ? void 0 : artifactMessage.id) !== artifactMessageId) return;
160
+ if (artifactMessage.type !== "present_video" && artifactMessage.type !== "present_deck") return;
161
+ // A visitor may reopen an old deck slide from the timeline after Piper has
162
+ // finished. A late/replayed completion event must not close that review.
163
+ if (artifactMessage.type === "present_deck" && ((_this_rootStore_decksStore_value = this.rootStore.decksStore.value) == null ? void 0 : _this_rootStore_decksStore_value.isRevisiting(artifactMessageId))) {
164
+ return;
165
+ }
166
+ // Do not call clearArtifact: that path represents a visitor dismissal and
167
+ // notifies Piper when a video is closed mid-presentation.
168
+ this.rootStore.clearMaximizedState({
169
+ when: types_MaximizedState.ARTIFACT
170
+ });
171
+ }, /**
172
+ * Instantiate ScreenShareStore so it mirrors the on-screen slide to the agent's
173
+ * perception loop. Gated on `piper_perception_slides`: without the flag the server
174
+ * drops perception frames, so skip the store entirely rather than canvas-encoding
175
+ * and shipping ~100-500KB base64 frames over ActionCable for nothing.
176
+ */ this.loadSlidePerception = ()=>{
177
+ if (!this.rootStore.featureFlags.piperPerceptionSlides) return;
178
+ void this.rootStore.screenShareStore.load();
179
+ }, this.markPending = (messageId)=>{
180
+ const pending = new Set(this.pending.peek());
181
+ pending.add(messageId);
182
+ this.pending.value = pending;
183
+ }, this.clearPending = (messageId)=>{
184
+ const pending = new Set(this.pending.peek());
185
+ if (!pending.delete(messageId)) return;
186
+ this.pending.value = pending;
187
+ }, this.showArtifact = (message)=>{
188
+ if (this.current.messageId.value === message.id) {
189
+ this.rootStore.setMaximizedState(types_MaximizedState.ARTIFACT);
190
+ return;
191
+ }
192
+ signals_core_module_r(()=>{
193
+ this.rootStore.setUIState({
194
+ artifactMessageId: message.id
195
+ });
196
+ this.rootStore.setMaximizedState(types_MaximizedState.ARTIFACT);
197
+ if (this.rootStore.displayMode.minimized.value && !this.rootStore.conversationMode.video.value) {
198
+ this.rootStore.setOpenedDisplayMode();
199
+ }
200
+ });
201
+ };
202
+ }
203
+ }
204
+
205
+ export { ArtifactStore };
@@ -0,0 +1,16 @@
1
+ class BaseStore {
2
+ get experienceAdapter() {
3
+ return this.context.experienceAdapter;
4
+ }
5
+ get channel() {
6
+ return this.context.channel;
7
+ }
8
+ get visitor() {
9
+ return this.context.visitor;
10
+ }
11
+ constructor(contextOrInstance){
12
+ this.context = contextOrInstance instanceof BaseStore ? contextOrInstance.context : contextOrInstance;
13
+ }
14
+ }
15
+
16
+ export { BaseStore };