@nethesis/phone-island 1.0.9 → 1.0.10
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.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/_virtual/index6.js +1 -1
- package/dist/_virtual/index8.js +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
- package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
- package/dist/lib/devices/devices.js +1 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +7 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/animation/hooks/use-animation.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/LayoutGroupContext.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/LazyContext.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionConfigContext.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/MotionContext/utils.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/PresenceContext.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/events/add-pointer-event.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/events/event-info.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/focus.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animation/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/animations.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/drag.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/gestures.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/layout.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/load-features.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/symbol.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/valid-prop.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js +2 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/feature-bundle.mjs.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/create-visual-element.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.mjs.js +2 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-html-visual-state.mjs.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.mjs.js +2 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/use-svg-visual-state.mjs.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/distance.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/is-browser.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/is-ref-object.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js +2 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js.map +1 -0
- package/dist/node_modules/framer-motion/dist/es/utils/use-constant.mjs.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.mjs.js.map +1 -1
- package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js +1 -1
- package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js.map +1 -1
- package/dist/node_modules/mic-check/lib/index.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimationExtended.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/animate/single-value.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/calc-duration.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/is-generator.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/velocity.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/default.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/fill.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/fill-wildcards.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/is-none.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/make-none-animatable.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/data-id.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/optimized-appear/get-appear-id.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/can-animate.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/get-value-transition.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-animatable.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-css-variable.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/is-transition-defined.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/make-animation-instant.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/replace-transition-type.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/utils/resolve-transition.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/supported.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/is-browser-color.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/unsupported-easing.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/frame.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/microtask.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/order.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/is-active.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/is-keyboard-accessible.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/state.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-node-or-child.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/is-primary-pointer.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/gestures/utils/setup.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/animation/mix-values.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/copy.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/models.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/geometry/utils.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/DocumentProjectionNode.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/node/state.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-correction.mjs.js.map +1 -0
- package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/styles/transform.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/projection/styles/transform.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/compare-by-depth.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/each-axis.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/flat-tree.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/projection/utils/measure.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/Feature.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/dom/is-css-var.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/dom/style-set.mjs.js.map +1 -1
- package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/dom/utils/camel-to-dash.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-styles.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/build-transform.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/html/utils/scrape-motion-values.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/store.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/SVGVisualElement.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/camel-case-attrs.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/is-svg-tag.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/render.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/svg/utils/scrape-motion-values.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/get-variant-context.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-animation-controls.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-keyframes-target.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/is-variant-label.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-position.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/utils/keys-transform.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/motion-values.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/index.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/reduced-motion/state.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-dynamic-variants.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/setters.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/shallow-compare.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/render/utils/variant-props.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/resize/handle-window.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/resize/index.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/stats/buffer.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-html-element.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-element.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/utils/is-svg-svg-element.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/immediate.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/number.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/mix/visibility.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/flags.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/memo.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/auto.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hex.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs.js +2 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/types/dimensions.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/int.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/defaults.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/number.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/maps/transform.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/index.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/numbers/units.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/test.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/animatable-none.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/color-regex.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/find.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/float-regex.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/get-as-type.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/is-nullish.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/sanitize.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/types/utils/single-color-regex.mjs.js.map +1 -1
- package/dist/node_modules/motion-dom/dist/es/value/utils/is-motion-value.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/utils/resolve-motion-value.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/add-will-change.mjs.js.map +1 -0
- package/dist/node_modules/motion-dom/dist/es/value/will-change/is.mjs.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/array.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/clamp.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/anticipate.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/back.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/circ.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/ease.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/mirror.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/modifiers/reverse.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-bezier-definition.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/utils/is-easing-array.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/errors.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/errors.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/format-error-message.mjs.js +2 -0
- package/dist/node_modules/motion-utils/dist/es/format-error-message.mjs.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/global-config.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/is-numerical-string.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/is-object.mjs.js +2 -0
- package/dist/node_modules/motion-utils/dist/es/is-object.mjs.js.map +1 -0
- package/dist/node_modules/motion-utils/dist/es/is-zero-value-string.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/memo.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/noop.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/progress.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/progress.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/subscription-manager.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/time-conversion.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/velocity-per-second.mjs.js.map +1 -1
- package/dist/node_modules/motion-utils/dist/es/warn-once.mjs.js +1 -1
- package/dist/node_modules/motion-utils/dist/es/warn-once.mjs.js.map +1 -1
- package/dist/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +1 -1
- package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/services/user.js +1 -1
- package/dist/services/user.js.map +1 -1
- package/dist/utils/genericFunctions/summaryEvents.js +2 -0
- package/dist/utils/genericFunctions/summaryEvents.js.map +1 -0
- package/package.json +4 -4
- package/dist/node_modules/framer-motion/dist/es/animation/animate/single-value.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/animate/single-value.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/utils/default-transitions.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/animation/utils/is-transition-defined.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/events/add-dom-event.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/motion/features/Feature.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/animation/mix-values.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/conversion.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/copy.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/models.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/geometry/utils.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/node/state.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/shared/stack.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/shared/stack.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/projection/styles/scale-correction.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/styles/transform.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/utils/each-axis.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/utils/has-transform.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/projection/utils/measure.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/VisualElement.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/VisualElement.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/components/create-factory.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/create.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/components/motion/create.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/config-motion.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/config-motion.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-styles.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/build-transform.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/render.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/render.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/store.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/config-motion.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/svg/config-motion.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/path.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/render.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/utils/animation-state.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/compare-by-depth.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/flat-tree.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/get-variant-context.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/is-variant-label.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/resolve-variants.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/setters.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/render/utils/setters.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/render/utils/variant-props.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/utils/delay.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/utils/delay.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs.js +0 -2
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/index.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/state.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/utils/shallow-compare.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/value/use-will-change/add-will-change.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/value/use-will-change/is.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/value/utils/is-motion-value.mjs.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.mjs.js.map +0 -1
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/driver-frameloop.mjs.js +0 -2
- package/dist/node_modules/motion-dom/dist/es/animation/drivers/driver-frameloop.mjs.js.map +0 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/defaults.mjs.js +0 -2
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/defaults.mjs.js.map +0 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/find.mjs.js +0 -2
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/find.mjs.js.map +0 -1
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/index.mjs.js +0 -2
- package/dist/node_modules/motion-dom/dist/es/animation/generators/spring/index.mjs.js.map +0 -1
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/animation/interfaces/visual-element.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/animation/optimized-appear/data-id.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/animation/optimized-appear/get-appear-id.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/events/add-dom-event.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/geometry/conversion.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/geometry/copy.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/geometry/models.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/geometry/utils.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/node/HTMLProjectionNode.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/node/state.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/render → motion-dom/dist/es/projection}/utils/compare-by-depth.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/utils/each-axis.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/render → motion-dom/dist/es/projection}/utils/flat-tree.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/utils/has-transform.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/projection/utils/measure.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/motion/features → motion-dom/dist/es/render}/Feature.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/store.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/svg/utils/camel-case-attrs.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/svg/utils/is-svg-tag.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/svg/utils/render.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/utils/get-variant-context.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/animation → motion-dom/dist/es/render}/utils/is-animation-controls.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/animation → motion-dom/dist/es/render}/utils/is-keyframes-target.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/utils/is-variant-label.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es → motion-dom/dist/es/render}/utils/reduced-motion/state.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/utils/resolve-dynamic-variants.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/utils/resolve-variants.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es → motion-dom/dist/es/render}/utils/shallow-compare.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/render/utils/variant-props.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/value/utils/is-motion-value.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion → motion-dom}/dist/es/value/utils/resolve-motion-value.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/value/use-will-change → motion-dom/dist/es/value/will-change}/add-will-change.mjs.js +0 -0
- /package/dist/node_modules/{framer-motion/dist/es/value/use-will-change → motion-dom/dist/es/value/will-change}/is.mjs.js +0 -0
package/dist/App.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),i=require("./components/Socket.js"),s=require("./components/WebRTC.js"),r=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),c=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),l=require("./store/index.js"),d=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),require("./components/TranscriptionView/TranscriptionView.js");var p=require("./node_modules/js-base64/base64.mjs.js"),v=require("./workers/wake_up.js"),h=require("./lib/i18n.js"),f=require("./lib/webrtc/messages.js"),m=require("./lib/darkTheme.js"),g=require("./utils/genericFunctions/isEmpty.js"),w=require("./utils/genericFunctions/checkConnection.js"),b=require("./utils/genericFunctions/isBackCallVisible.js"),S=require("./lib/phone/trunk.js"),I=require("./lib/phone/call.js"),y=require("./node_modules/react-redux/es/components/Provider.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var D=E(n);if("undefined"!=typeof window&&window.location.hostname.includes(".support.my.")){var k=window.fetch;window.fetch=function(n,t){return k(n,e.__assign({credentials:"include"},t))}}var _=n.forwardRef((function(E,k){var _=E.dataConfig,L=E.showAlways,U=void 0!==L&&L,C=E.uaType,T=E.urlParamWithEvent,j=void 0!==T&&T,q=p.Base64.atob(_||"").split(":"),N=q[0],A=q[1],O=q[2],R=q[3],P=q[4],V=q[5],x=q[6],J=n.useState(!1),W=J[0],F=J[1],M=n.useState(!1),Q=M[0],z=M[1],H=n.useState(!1),$=H[0],B=H[1],G=n.useRef(0),K=n.useRef(null);n.useImperativeHandle(k,(function(){return{reset:function(){console.info("PhoneIsland: Performing full component reset"),F(!0)}}}),[]),n.useEffect((function(){var e=Date.now(),n=function(){if(!document.hidden){var n=Date.now(),t=n-e;setTimeout((function(){c.eventDispatch("phone-island-emergency-stop-ringtone",{})}),2e3),t>3e5&&(console.info("Tab inactive for long period, performing soft reconnection"),F(!0)),e=n}},t=new Worker(v.default,{type:"module"});return t.onmessage=function(n){"ping"===n.data&&(e=Date.now())},document.addEventListener("visibilitychange",n),function(){t.terminate(),document.removeEventListener("visibilitychange",n)}}),[]),n.useEffect((function(){$&&Q&&(F(!1),z(!1),B(!1))}),[$,Q]),n.useEffect((function(){var e=setInterval((function(){var e,n,t,i,s=l.store.getState().alerts.data,r=(null===(e=s.webrtc_down)||void 0===e?void 0:e.active)||!1,a=(null===(n=s.socket_down)||void 0===n?void 0:n.active)||!1,o=Date.now(),c=o-G.current,u=l.store.getState().webrtc.sipcall,d=l.store.getState().currentCall,p=d.accepted,v=d.outgoing,h=null===(i=null===(t=null==u?void 0:u.webrtcStuff)||void 0===t?void 0:t.pc)||void 0===i?void 0:i.iceConnectionState,f=p||v||"connected"===h||"completed"===h,m=navigator.onLine;if((r||a)&&!W&&c>1e4&&m){if(f)return void console.info("Alert detected but active call in progress - skipping automatic reload to let ICE recover",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a,iceState:h,accepted:p,outgoing:v});console.info("Alert detected (webrtc_down or socket_down), triggering automatic reload",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a}),G.current=o,F(!0)}}),1e3);return function(){return clearInterval(e)}}),[W]),o.useEventListener("phone-island-expand",(function(){l.store.dispatch.island.toggleIsOpen(!0),c.eventDispatch("phone-island-expanded",{})})),o.useEventListener("phone-island-compress",(function(){l.store.dispatch.island.toggleIsOpen(!1),c.eventDispatch("phone-island-compressed",{})})),o.useEventListener("phone-island-call-keypad-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-emergency-stop-ringtone",(function(){null===l.store.getState().island.view?(console.warn("Emergency stop ringtone triggered - phone island inactive"),l.store.dispatch.player.emergencyStopAudioPlayer(),c.eventDispatch("phone-island-emergency-stop-ringtone-completed",{})):console.log("Phone island is active, ringtone stop ignored")})),o.useEventListener("phone-island-detach",(function(e){f.detach(),l.store.dispatch.webrtc.updateWebRTC({sipcall:null,registered:!1,isDetached:!0,jsepGlobal:null}),l.store.dispatch.webrtc.updateRemoteAudioStream(null),l.store.dispatch.webrtc.updateLocalAudioStream(null),l.store.dispatch.webrtc.updateLocalVideoStream(null),l.store.dispatch.webrtc.updateRemoteVideoStream(null),c.eventDispatch("phone-island-detached",{})})),o.useEventListener("phone-island-reload-component",(function(e){(null==e?void 0:e.force)&&l.store.dispatch.island.setForceReload(!0),F(!0)})),o.useEventListener("phone-island-audio-input-change",(function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return(t=n.deviceId)&&"default"!==t?[4,oe(t)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Audio input device ".concat(t," not available, falling back to default device")),[4,ce()]);case 2:t=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-audio-input-device",{deviceId:t}),c.eventDispatch("phone-island-audio-input-changed",{}),t!==n.deviceId&&console.info("Audio input device changed from ".concat(n.deviceId," to ").concat(t," (fallback)")),[2]}}))}))})),o.useEventListener("phone-island-video-input-change",(function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return(t=n.deviceId)&&"default"!==t?[4,ue(t)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Video input device ".concat(t," not available, falling back to default device")),[4,le()]);case 2:t=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-video-input-device",{deviceId:t}),c.eventDispatch("phone-island-video-input-changed",{}),t!==n.deviceId&&console.info("Video input device changed from ".concat(n.deviceId," to ").concat(t," (fallback)")),[2]}}))}))}));var X=n.useState(!0),Y=X[0],Z=X[1],ee=n.useState(!0),ne=ee[0],te=ee[1],ie=n.useState(!1),se=ie[0],re=ie[1],ae=n.useSyncExternalStore(l.store.subscribe,(function(){return l.store.getState().fetchDefaults.fetchReady||!1}));n.useEffect((function(){Y&&(h.initI18n(),Z(!1))}),[Y]),n.useEffect((function(){ae&&!se&&(re(!0),e.__awaiter(void 0,void 0,void 0,(function(){var n,t,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,d.getParamUrl()];case 1:return n=e.sent(),t=(null==n?void 0:n.url)||"",i=t&&""!==t.trim(),l.store.dispatch.paramUrl.setParamUrl({url:t,onlyQueues:(null==n?void 0:n.only_queues)||!1,hasValidUrl:i}),[3,3];case 2:return s=e.sent(),console.warn("Non-blocking param URL fetch failed:",s),l.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})))}),[ae,se]);var oe=function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return t=e.sent(),[2,t.filter((function(e){return"audioinput"===e.kind})).some((function(e){return e.deviceId===n}))];case 2:return i=e.sent(),console.warn("Error checking audio input device availability:",i),[2,!1];case 3:return[2]}}))}))},ce=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var n,t,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return n=e.sent(),t=n.filter((function(e){return"audioinput"===e.kind})),[2,(i=t.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||t[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default audio input device:",s),[2,"default"];case 3:return[2]}}))}))},ue=function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return t=e.sent(),[2,t.filter((function(e){return"videoinput"===e.kind})).some((function(e){return e.deviceId===n}))];case 2:return i=e.sent(),console.warn("Error checking video input device availability:",i),[2,!1];case 3:return[2]}}))}))},le=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var n,t,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return n=e.sent(),t=n.filter((function(e){return"videoinput"===e.kind})),[2,(i=t.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||t[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default video input device:",s),[2,"default"];case 3:return[2]}}))}))};o.useEventListener("phone-island-audio-output-change",(function(n){e.__awaiter(void 0,void 0,void 0,(function(){var t,i,s,r,a,o,d,p,v;return e.__generator(this,(function(h){switch(h.label){case 0:return(null==(t=l.store.getState().player.remoteAudio)?void 0:t.current)?(i=n.deviceId)&&"default"!==i?[4,(f=i,e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return[2,e.sent().filter((function(e){return"audiooutput"===e.kind})).some((function(e){return e.deviceId===f}))];case 2:return n=e.sent(),console.warn("Error checking device availability:",n),[2,!1];case 3:return[2]}}))})))]:[3,3]:(console.warn("Remote audio element not available"),[2]);case 1:return h.sent()?[3,3]:(console.warn("Audio output device ".concat(i," not available, falling back to default device")),[4,e.__awaiter(void 0,void 0,void 0,(function(){var n,t,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return n=e.sent(),t=n.filter((function(e){return"audiooutput"===e.kind})),[2,(i=t.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||t[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default device:",s),[2,"default"];case 3:return[2]}}))}))]);case 2:i=h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=3;case 3:return h.trys.push([3,5,,15]),[4,t.current.setSinkId(i)];case 4:return h.sent(),console.info("Default audio output device changed successfully!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,15];case 5:s=h.sent(),console.log("Direct setSinkId failed, trying with temporary stream:",s),h.label=6;case 6:return h.trys.push([6,7,,14]),r=new(window.AudioContext||window.webkitAudioContext),a=r.createOscillator(),o=r.createGain(),a.frequency.setValueAtTime(440,r.currentTime),o.gain.setValueAtTime(0,r.currentTime),a.connect(o),d=r.createMediaStreamDestination(),o.connect(d),t.current.srcObject=d.stream,a.start(),setTimeout((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var n,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,7]),[4,t.current.setSinkId(i)];case 1:return e.sent(),console.info("Default audio output device changed successfully with temporary stream!"),a.stop(),r.close(),t.current.srcObject=null,u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 2:if(n=e.sent(),console.error("Final setSinkId attempt failed:",n),a.stop(),r.close(),t.current.srcObject=null,"default"===i)return[3,6];console.log("Trying fallback to default device"),e.label=3;case 3:return e.trys.push([3,5,,6]),[4,t.current.setSinkId("default")];case 4:return e.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Fallback to default audio device successful"),[3,6];case 5:return s=e.sent(),console.error("Even default device failed:",s),[3,6];case 6:return u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 7:return[2]}}))}))}),100),[3,14];case 7:if(p=h.sent(),console.error("Failed to create temporary audio stream:",p),"default"===i)return[3,12];h.label=8;case 8:return h.trys.push([8,10,,11]),[4,t.current.setSinkId("default")];case 9:return h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Emergency fallback to default audio device successful"),[3,11];case 10:return v=h.sent(),console.error("Emergency fallback to default device failed:",v),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),[3,11];case 11:return[3,13];case 12:u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=13;case 13:return c.eventDispatch("phone-island-audio-output-changed",{}),[3,14];case 14:return[3,15];case 15:return[2]}var f}))}))})),o.useEventListener("phone-island-presence-change",(function(e){d.changeOperatorStatus(e),c.eventDispatch("phone-island-presence-changed",{})})),o.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;l.store.dispatch.island.setIslandView(n)}));var de=l.store.getState().player.remoteAudio;n.useEffect((function(){var e;if(ne&&de){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;c.eventDispatch("phone-island-audio-output-change",{deviceId:n}),te(!1)}}),[ne,de]),n.useEffect((function(){m.checkDarkTheme()}),[]),o.useEventListener("phone-island-theme-change",(function(e){m.setTheme(null==e?void 0:e.selectedTheme)})),o.useEventListener("phone-island-default-device-change",(function(e){l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),c.eventDispatch("phone-island-default-device-changed",{})})),o.useEventListener("phone-island-alert",(function(e){l.store.dispatch.alerts.setAlert(e.toString())})),o.useEventListener("phone-island-ringing-tone-list",(function(){var e=l.store.getState().ringtones.availableRingtones.map((function(e){return{name:e.name,displayName:e.displayName,base64Audio:e.base64Audio}}));c.eventDispatch("phone-island-ringing-tone-list-response",{ringtones:e})})),o.useEventListener("phone-island-ringing-tone-select",(function(e){(null==e?void 0:e.name)&&(u.setJSONItem("phone-island-selected-ringtone",{value:e.name}),l.store.dispatch.ringtones.setSelectedRingtone(e.name),c.eventDispatch("phone-island-ringing-tone-selected",{name:e.name}))})),o.useEventListener("phone-island-ringing-tone-output",(function(e){(null==e?void 0:e.deviceId)&&(u.setJSONItem("phone-island-ringtone-output-device",{value:e.deviceId}),l.store.dispatch.ringtones.setOutputDeviceId(e.deviceId),c.eventDispatch("phone-island-ringing-tone-output-changed",{deviceId:e.deviceId}))})),n.useEffect((function(){var e=u.getJSONItem("phone-island-selected-ringtone"),n=u.getJSONItem("phone-island-ringtone-output-device");(null==e?void 0:e.value)&&l.store.dispatch.ringtones.setSelectedRingtone(e.value),(null==n?void 0:n.value)&&l.store.dispatch.ringtones.setOutputDeviceId(n.value)}),[]),o.useEventListener("phone-island-check-connection",(function(){w.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){w.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),o.useEventListener("phone-island-main-presence",(function(e){var n,t,i,s,r=null===(n=l.store.getState().currentUser)||void 0===n?void 0:n.username,a=l.store.getState().currentUser,o=null==a?void 0:a.mainPresence;if(void 0!==r&&""!==r&&!g.isEmpty(e[r])&&void 0!==(null===(t=e[r])||void 0===t?void 0:t.mainPresence)){var u=null===(i=e[r])||void 0===i?void 0:i.mainPresence;l.store.dispatch.currentUser.updateMainPresence(null===(s=e[r])||void 0===s?void 0:s.mainPresence),"online"===u&&"online"!==o&&c.eventDispatch("phone-island-call-ended",{})}})),o.useEventListener("phone-island-call-status",(function(){var e=l.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var pe=function(e,n,t,i,s){var r=l.store.getState().paramUrl;if(null==r?void 0:r.hasValidUrl){var a=r.url||"";if(a){var o=l.store.getState().island.urlOpened,u=r.openParamUrlType;if(!o||"button"===u){var d=a;d.includes("$CALLER_NUMBER")&&e&&(d=d.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),d.includes("$CALLER_NAME")&&n&&(d=d.replace(/\$CALLER_NAME/g,encodeURIComponent(n))),d.includes("$UNIQUEID")&&i&&(d=d.replace(/\$UNIQUEID/g,encodeURIComponent(i))),d.includes("$CALLED")&&t&&(d=d.replace(/\$CALLED/g,encodeURIComponent(t))),d.includes("{phone}")&&e&&(d=d.replace(/\{phone\}/g,encodeURIComponent(e)));var p=d.startsWith("http")?d:"https://".concat(d);if("mobile"!==C&&!j&&s){var v=window.open("about:blank","_blank");v&&(v.location.href=p,l.store.dispatch.island.setUrlOpened(!0))}else c.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:p})}}}};return o.useEventListener("phone-island-already-opened-external-page",(function(){l.store.dispatch.island.setUrlOpened(!0)})),o.useEventListener("phone-island-url-parameter-opened",(function(e){var n=l.store.getState().paramUrl;if(n.hasValidUrl&&!l.store.getState().island.urlOpened){var t=n.onlyQueues||!1,i=S.isFromTrunk(null==e?void 0:e.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(i);var s=l.store.getState().currentUser.default_device,r=!("desktop"===C&&"nethlink"===(null==s?void 0:s.type));"in"===(null==e?void 0:e.direction)&&(!0===t&&!0===(null==e?void 0:e.throughQueue)?pe(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r):!1!==t||!0!==i&&!0!==(null==e?void 0:e.throughQueue)||pe(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r))}})),o.useEventListener("phone-island-user-status",(function(){var e=l.store.getState().currentUser;console.log("User status debug informations: ",e)})),o.useEventListener("phone-island-all-users-status",(function(){var e=l.store.getState().users;console.log("Users status debug informations: ",e)})),o.useEventListener("phone-island-status",(function(){var e=l.store.getState().island;console.log("Phone island status debug informations: ",e)})),o.useEventListener("phone-island-webrtc-status",(function(){var e=l.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-player-status",(function(){var e=l.store.getState().player;console.log("Player status debug informations: ",e)})),o.useEventListener("phone-island-conference-status",(function(){var e=l.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-streaming-status",(function(){var e=l.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),o.useEventListener("phone-island-paramurl-status",(function(){var e=l.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),o.useEventListener("phone-island-queue-status",(function(){var e=l.store.getState().queue;console.log("Queue status debug informations: ",e)})),o.useEventListener("phone-island-player-force-stop",(function(){l.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),o.useEventListener("phone-island-stores-download",(function(){l.downloadStoresAsJSON(),c.eventDispatch("phone-island-stores-downloaded",{})})),o.useEventListener("phone-island-sideview-open",(function(){l.store.dispatch.island.toggleSideViewVisible(!0),l.store.dispatch.island.setUrlOpened(!1),c.eventDispatch("phone-island-sideview-opened",{})})),o.useEventListener("phone-island-sideview-close",(function(){l.store.dispatch.island.toggleSideViewVisible(!1),c.eventDispatch("phone-island-sideview-closed",{})})),o.useEventListener("phone-island-transcription-close",(function(){l.store.dispatch.island.toggleTranscriptionViewVisible(!1),K.current&&(c.eventDispatch("phone-island-stop-transcription",{uniqueid:K.current,linkedid:K.current}),K.current=null),c.eventDispatch("phone-island-transcription-closed",{})})),o.useEventListener("phone-island-transcription-open",(function(e){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;n&&(K.current=n,c.eventDispatch("phone-island-start-transcription",{linkedid:n,uniqueid:n}),l.store.dispatch.island.toggleTranscriptionViewVisible(!0),c.eventDispatch("phone-island-transcription-opened",{}))})),o.useEventListener("phone-island-init-audio",(function(){var e=l.store.getState().currentCall,n=e.accepted,t=e.incoming,i=e.outgoing,s=e.incomingWebRTC,r=e.incomingSocket;if(n||t||i||s||r)console.log("[AUDIO-WARMUP] Skipping audio warm-up: active call in progress");else if(V&&"string"==typeof V&&0!==V.length){var a=l.store.getState().currentUser.featureCodes,o=null==a?void 0:a.audio_test,c=o&&"string"==typeof o&&o.length>0?o:"*41";console.log("[AUDIO-WARMUP] Starting audio warm-up test call",{codeToCall:c,SIP_HOST:V}),I.callNumber(c,V)}else console.warn("[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available",{SIP_HOST:V})})),o.useEventListener("phone-island-transcription-toggle",(function(){var e=!l.store.getState().island.transcriptionViewIsVisible;l.store.dispatch.island.toggleTranscriptionViewVisible(e),c.eventDispatch(e?"phone-island-transcription-opened":"phone-island-transcription-closed",{})})),o.useEventListener("phone-island-summary-call-check",(function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t,i,s,r,a,o,u,d,p,v;return e.__generator(this,(function(e){switch(e.label){case 0:return(t=(null==n?void 0:n.linkedid)||(null==n?void 0:n.uniqueid)||(null==n?void 0:n.uniqueId))?(i=l.store.getState().conference,s=i.isActive,r=i.usersList,a=i.conferenceStartedFrom,o=l.store.getState().currentUser,u=o.name,d=o.username,p=s&&(a===d||!!r&&Object.values(r).some((function(e){return e.name===u}))),p?[2]:[4,new Promise((function(e){return setTimeout(e,1e3)}))]):(console.warn("[Summary Check] No call identifier provided"),[2]);case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 3:return[4,(0,e.sent().checkSummaryCall)(t)];case 4:return e.sent(),c.eventDispatch("phone-island-summary-ready",{linkedid:t}),[3,6];case 5:return 204===(null==(v=e.sent())?void 0:v.status)?(console.log("[Summary Check] Summary not ready for ".concat(t)),c.eventDispatch("phone-island-summary-not-ready",{linkedid:t})):console.warn("[Summary Check] Non-blocking summary check failed:",v),[3,6];case 6:return[2]}}))}))})),o.useEventListener("phone-island-call-summary-notify",(function(n){return e.__awaiter(void 0,void 0,void 0,(function(){var t,i;return e.__generator(this,(function(e){switch(e.label){case 0:if(!(t=(null==n?void 0:n.linkedid)||(null==n?void 0:n.uniqueid)||(null==n?void 0:n.uniqueId)))return[3,5];e.label=1;case 1:return e.trys.push([1,4,,5]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 2:return[4,(0,e.sent().watchSummaryCall)(t)];case 3:return e.sent(),c.eventDispatch("phone-island-summary-call-notified",{linkedid:t}),[3,5];case 4:return i=e.sent(),console.warn("[Summary Check] Non-blocking summary watch failed:",i),[3,5];case 5:return[2]}}))}))})),o.useEventListener("phone-island-size-change",(function(n){var t=l.store.getState().island,i=t.sideViewIsVisible,s=t.transcriptionViewIsVisible,r=t.actionsExpanded,a=n.sizeInformation,o=e.__assign(e.__assign({},a),{right:i?"42px":"0px",top:b.isBackCallActive()?"40px":"0px",bottomTranscription:s&&r?"335px":s&&!r?"330px":"0px"});c.eventDispatch("phone-island-size-changed",{sizes:o})})),o.useEventListener("phone-island-call-ended",(function(){if("online"===l.store.getState().currentUser.mainPresence){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore(),l.store.dispatch.paramUrl.setThroughTrunk(!1)}})),o.useEventListener("phone-island-conference-list-open",(function(){l.store.dispatch.island.toggleConferenceList(!0),c.eventDispatch("phone-island-conference-list-opened",{})})),o.useEventListener("phone-island-alert-removed",(function(e){var n=l.store.getState().alerts.status.activeAlertsCount,t=l.store.getState().island,i=t.view,s=t.previousView,r=l.store.getState().conference.isActive,a=l.store.getState().alerts.data,o=l.store.getState().currentCall,u=o.incoming,d=o.outgoing,p=o.accepted,v=null==e?void 0:e.type,h=o.incoming||o.outgoing||o.accepted||""!==o.conversationId;if(!(u||d||p||n>0||"player"===i||"recorder"===i||"physicalPhoneRecorder"===i||"waitingConference"===i&&r||"transfer"===i&&r||"settings"===i&&r||"settings"===i&&("recorder"===s||"player"===s)||"operatorBusy"===i&&!r)&&0===n&&(!v||a[v]&&!a[v].active)&&!h){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore()}})),o.useEventListener("phone-island-conference-list-close",(function(){l.store.dispatch.island.toggleConferenceList(!1),c.eventDispatch("phone-island-conference-list-closed",{})})),o.useEventListener("phone-island-conversations",(function(e){var n,t=Object.keys(e)[0];if(t===(null===(n=l.store.getState().currentUser)||void 0===n?void 0:n.username)){var i=e[t].conversations,s=l.store.getState().paramUrl,r=l.store.getState().island.urlOpened;if(!s.hasValidUrl||r)return;if("answered"===s.openParamUrlType&&i&&Object.keys(i).length>0){var a=i[Object.keys(i)[0]],o=l.store.getState().currentUser.default_device,c=!("desktop"===C&&"nethlink"===(null==o?void 0:o.type));if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var u=s.onlyQueues||!1,d=S.isFromTrunk(a.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(d),!0===u&&!0===(null==a?void 0:a.throughQueue)?pe(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c):!1!==u||!0!==d&&!0!==(null==a?void 0:a.throughQueue)||pe(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c)}}}})),D.default.createElement(D.default.Fragment,null,D.default.createElement(y.default,{store:l.store},R&&""!==R.trim()?D.default.createElement(s.WebRTC,{hostName:N,sipExten:R,sipSecret:P,sipHost:V,sipPort:x,reload:W,reloadedCallback:function(){return z(!0)},uaType:C},D.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},D.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){return B(!0)},uaType:C},D.default.createElement(t.Events,{sipHost:V},D.default.createElement(r.Island,{showAlways:U,uaType:C}))))):D.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},D.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){B(!0),z(!0)},uaType:C},D.default.createElement(t.Events,{sipHost:V},D.default.createElement(r.Island,{showAlways:U,uaType:C}))))))}));_.displayName="PhoneIslandComponent";var L=n.forwardRef((function(n,t){return D.default.createElement(_,e.__assign({},n,{ref:t}))}));L.displayName="PhoneIsland",exports.PhoneIsland=L;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("./components/Events.js"),i=require("./components/Socket.js"),s=require("./components/WebRTC.js"),r=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),u=require("./utils/genericFunctions/eventDispatch.js"),c=require("./utils/genericFunctions/localStorage.js"),d=require("./utils/genericFunctions/summaryEvents.js"),l=require("./store/index.js"),p=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),require("./components/TranscriptionView/TranscriptionView.js");var v=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),f=require("./lib/i18n.js"),g=require("./lib/webrtc/messages.js"),m=require("./lib/darkTheme.js"),w=require("./utils/genericFunctions/isEmpty.js"),b=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),S=require("./lib/phone/trunk.js"),E=require("./lib/phone/call.js"),y=require("./node_modules/react-redux/es/components/Provider.js");function D(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var _=D(t);if("undefined"!=typeof window&&window.location.hostname.includes(".support.my.")){var k=window.fetch;window.fetch=function(t,n){return k(t,e.__assign({credentials:"include"},n))}}var L=t.forwardRef((function(D,k){var L=D.dataConfig,U=D.showAlways,T=void 0!==U&&U,q=D.uaType,j=D.urlParamWithEvent,C=void 0!==j&&j,N=v.Base64.atob(L||"").split(":"),R=N[0],A=N[1],O=N[2],P=N[3],V=N[4],x=N[5],J=N[6],F=t.useState(!1),W=F[0],M=F[1],Q=t.useState(!1),z=Q[0],H=Q[1],$=t.useState(!1),B=$[0],G=$[1],K=t.useRef(0),X=t.useRef(null),Y=t.useRef(null);t.useImperativeHandle(k,(function(){return{reset:function(){console.info("PhoneIsland: Performing full component reset"),M(!0)}}}),[]),t.useEffect((function(){var e=Date.now(),t=function(){if(!document.hidden){var t=Date.now(),n=t-e;setTimeout((function(){u.eventDispatch("phone-island-emergency-stop-ringtone",{})}),2e3),n>3e5&&(console.info("Tab inactive for long period, performing soft reconnection"),M(!0)),e=t}},n=new Worker(h.default,{type:"module"});return n.onmessage=function(t){"ping"===t.data&&(e=Date.now())},document.addEventListener("visibilitychange",t),function(){n.terminate(),document.removeEventListener("visibilitychange",t)}}),[]),t.useEffect((function(){B&&z&&(M(!1),H(!1),G(!1))}),[B,z]),t.useEffect((function(){var e=setInterval((function(){var e,t,n,i,s=l.store.getState().alerts.data,r=(null===(e=s.webrtc_down)||void 0===e?void 0:e.active)||!1,a=(null===(t=s.socket_down)||void 0===t?void 0:t.active)||!1,o=Date.now(),u=o-K.current,c=l.store.getState().webrtc.sipcall,d=l.store.getState().currentCall,p=d.accepted,v=d.outgoing,h=null===(i=null===(n=null==c?void 0:c.webrtcStuff)||void 0===n?void 0:n.pc)||void 0===i?void 0:i.iceConnectionState,f=p||v||"connected"===h||"completed"===h,g=navigator.onLine;if((r||a)&&!W&&u>1e4&&g){if(f)return void console.info("Alert detected but active call in progress - skipping automatic reload to let ICE recover",{timeSinceLastReload:Math.round(u/1e3)+"s",isWebRTCDown:r,isSocketDown:a,iceState:h,accepted:p,outgoing:v});console.info("Alert detected (webrtc_down or socket_down), triggering automatic reload",{timeSinceLastReload:Math.round(u/1e3)+"s",isWebRTCDown:r,isSocketDown:a}),K.current=o,M(!0)}}),1e3);return function(){return clearInterval(e)}}),[W]),o.useEventListener("phone-island-expand",(function(){l.store.dispatch.island.toggleIsOpen(!0),u.eventDispatch("phone-island-expanded",{})})),o.useEventListener("phone-island-compress",(function(){l.store.dispatch.island.toggleIsOpen(!1),u.eventDispatch("phone-island-compressed",{})})),o.useEventListener("phone-island-call-keypad-close",(function(){l.store.dispatch.island.setIslandView("call"),u.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){l.store.dispatch.island.setIslandView("call"),u.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){l.store.dispatch.island.setIslandView(null),u.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){l.store.dispatch.island.setIslandView(null),u.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-emergency-stop-ringtone",(function(){null===l.store.getState().island.view?(console.warn("Emergency stop ringtone triggered - phone island inactive"),l.store.dispatch.player.emergencyStopAudioPlayer(),u.eventDispatch("phone-island-emergency-stop-ringtone-completed",{})):console.log("Phone island is active, ringtone stop ignored")})),o.useEventListener("phone-island-detach",(function(e){g.detach(),l.store.dispatch.webrtc.updateWebRTC({sipcall:null,registered:!1,isDetached:!0,jsepGlobal:null}),l.store.dispatch.webrtc.updateRemoteAudioStream(null),l.store.dispatch.webrtc.updateLocalAudioStream(null),l.store.dispatch.webrtc.updateLocalVideoStream(null),l.store.dispatch.webrtc.updateRemoteVideoStream(null),u.eventDispatch("phone-island-detached",{})})),o.useEventListener("phone-island-reload-component",(function(e){(null==e?void 0:e.force)&&l.store.dispatch.island.setForceReload(!0),M(!0)})),o.useEventListener("phone-island-audio-input-change",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,ce(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Audio input device ".concat(n," not available, falling back to default device")),[4,de()]);case 2:n=e.sent(),e.label=3;case 3:return c.setJSONItem("phone-island-audio-input-device",{deviceId:n}),u.eventDispatch("phone-island-audio-input-changed",{}),n!==t.deviceId&&console.info("Audio input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}}))}))})),o.useEventListener("phone-island-video-input-change",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,le(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Video input device ".concat(n," not available, falling back to default device")),[4,pe()]);case 2:n=e.sent(),e.label=3;case 3:return c.setJSONItem("phone-island-video-input-device",{deviceId:n}),u.eventDispatch("phone-island-video-input-changed",{}),n!==t.deviceId&&console.info("Video input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}}))}))}));var Z=t.useState(!0),ee=Z[0],te=Z[1],ne=t.useState(!0),ie=ne[0],se=ne[1],re=t.useState(!1),ae=re[0],oe=re[1],ue=t.useSyncExternalStore(l.store.subscribe,(function(){return l.store.getState().fetchDefaults.fetchReady||!1}));t.useEffect((function(){ee&&(f.initI18n(),te(!1))}),[ee]),t.useEffect((function(){ue&&!ae&&(oe(!0),e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,p.getParamUrl()];case 1:return t=e.sent(),n=(null==t?void 0:t.url)||"",i=n&&""!==n.trim(),l.store.dispatch.paramUrl.setParamUrl({url:n,onlyQueues:(null==t?void 0:t.only_queues)||!1,hasValidUrl:i}),[3,3];case 2:return s=e.sent(),console.warn("Non-blocking param URL fetch failed:",s),l.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})))}),[ue,ae]);var ce=function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter((function(e){return"audioinput"===e.kind})).some((function(e){return e.deviceId===t}))];case 2:return i=e.sent(),console.warn("Error checking audio input device availability:",i),[2,!1];case 3:return[2]}}))}))},de=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"audioinput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default audio input device:",s),[2,"default"];case 3:return[2]}}))}))},le=function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter((function(e){return"videoinput"===e.kind})).some((function(e){return e.deviceId===t}))];case 2:return i=e.sent(),console.warn("Error checking video input device availability:",i),[2,!1];case 3:return[2]}}))}))},pe=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"videoinput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default video input device:",s),[2,"default"];case 3:return[2]}}))}))};o.useEventListener("phone-island-audio-output-change",(function(t){e.__awaiter(void 0,void 0,void 0,(function(){var n,i,s,r,a,o,d,p,v;return e.__generator(this,(function(h){switch(h.label){case 0:return(null==(n=l.store.getState().player.remoteAudio)?void 0:n.current)?(i=t.deviceId)&&"default"!==i?[4,(f=i,e.__awaiter(void 0,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return[2,e.sent().filter((function(e){return"audiooutput"===e.kind})).some((function(e){return e.deviceId===f}))];case 2:return t=e.sent(),console.warn("Error checking device availability:",t),[2,!1];case 3:return[2]}}))})))]:[3,3]:(console.warn("Remote audio element not available"),[2]);case 1:return h.sent()?[3,3]:(console.warn("Audio output device ".concat(i," not available, falling back to default device")),[4,e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"audiooutput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default device:",s),[2,"default"];case 3:return[2]}}))}))]);case 2:i=h.sent(),c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=3;case 3:return h.trys.push([3,5,,15]),[4,n.current.setSinkId(i)];case 4:return h.sent(),console.info("Default audio output device changed successfully!"),c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),u.eventDispatch("phone-island-audio-output-changed",{}),[3,15];case 5:s=h.sent(),console.log("Direct setSinkId failed, trying with temporary stream:",s),h.label=6;case 6:return h.trys.push([6,7,,14]),r=new(window.AudioContext||window.webkitAudioContext),a=r.createOscillator(),o=r.createGain(),a.frequency.setValueAtTime(440,r.currentTime),o.gain.setValueAtTime(0,r.currentTime),a.connect(o),d=r.createMediaStreamDestination(),o.connect(d),n.current.srcObject=d.stream,a.start(),setTimeout((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,7]),[4,n.current.setSinkId(i)];case 1:return e.sent(),console.info("Default audio output device changed successfully with temporary stream!"),a.stop(),r.close(),n.current.srcObject=null,c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),u.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 2:if(t=e.sent(),console.error("Final setSinkId attempt failed:",t),a.stop(),r.close(),n.current.srcObject=null,"default"===i)return[3,6];console.log("Trying fallback to default device"),e.label=3;case 3:return e.trys.push([3,5,,6]),[4,n.current.setSinkId("default")];case 4:return e.sent(),c.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Fallback to default audio device successful"),[3,6];case 5:return s=e.sent(),console.error("Even default device failed:",s),[3,6];case 6:return c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),u.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 7:return[2]}}))}))}),100),[3,14];case 7:if(p=h.sent(),console.error("Failed to create temporary audio stream:",p),"default"===i)return[3,12];h.label=8;case 8:return h.trys.push([8,10,,11]),[4,n.current.setSinkId("default")];case 9:return h.sent(),c.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Emergency fallback to default audio device successful"),[3,11];case 10:return v=h.sent(),console.error("Emergency fallback to default device failed:",v),c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),[3,11];case 11:return[3,13];case 12:c.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=13;case 13:return u.eventDispatch("phone-island-audio-output-changed",{}),[3,14];case 14:return[3,15];case 15:return[2]}var f}))}))})),o.useEventListener("phone-island-presence-change",(function(e){p.changeOperatorStatus(e),u.eventDispatch("phone-island-presence-changed",{})})),o.useEventListener("phone-island-view-changed",(function(e){var t=null==e?void 0:e.viewType;l.store.dispatch.island.setIslandView(t)}));var ve=l.store.getState().player.remoteAudio;t.useEffect((function(){var e;if(ie&&ve){var t=null===(e=c.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;u.eventDispatch("phone-island-audio-output-change",{deviceId:t}),se(!1)}}),[ie,ve]),t.useEffect((function(){m.checkDarkTheme()}),[]),o.useEventListener("phone-island-theme-change",(function(e){m.setTheme(null==e?void 0:e.selectedTheme)})),o.useEventListener("phone-island-default-device-change",(function(e){l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),u.eventDispatch("phone-island-default-device-changed",{})})),o.useEventListener("phone-island-alert",(function(e){l.store.dispatch.alerts.setAlert(e.toString())})),o.useEventListener("phone-island-ringing-tone-list",(function(){var e=l.store.getState().ringtones.availableRingtones.map((function(e){return{name:e.name,displayName:e.displayName,base64Audio:e.base64Audio}}));u.eventDispatch("phone-island-ringing-tone-list-response",{ringtones:e})})),o.useEventListener("phone-island-ringing-tone-select",(function(e){(null==e?void 0:e.name)&&(c.setJSONItem("phone-island-selected-ringtone",{value:e.name}),l.store.dispatch.ringtones.setSelectedRingtone(e.name),u.eventDispatch("phone-island-ringing-tone-selected",{name:e.name}))})),o.useEventListener("phone-island-ringing-tone-output",(function(e){(null==e?void 0:e.deviceId)&&(c.setJSONItem("phone-island-ringtone-output-device",{value:e.deviceId}),l.store.dispatch.ringtones.setOutputDeviceId(e.deviceId),u.eventDispatch("phone-island-ringing-tone-output-changed",{deviceId:e.deviceId}))})),t.useEffect((function(){var e=c.getJSONItem("phone-island-selected-ringtone"),t=c.getJSONItem("phone-island-ringtone-output-device");(null==e?void 0:e.value)&&l.store.dispatch.ringtones.setSelectedRingtone(e.value),(null==t?void 0:t.value)&&l.store.dispatch.ringtones.setOutputDeviceId(t.value)}),[]),o.useEventListener("phone-island-check-connection",(function(){b.checkInternetConnection().then((function(e){e?u.eventDispatch("phone-island-internet-connected",{}):u.eventDispatch("phone-island-internet-disconnected",{})}))})),t.useEffect((function(){var e=setInterval((function(){b.checkInternetConnection().then((function(e){e?u.eventDispatch("phone-island-internet-connected",{}):u.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),o.useEventListener("phone-island-main-presence",(function(e){var t,n,i,s,r=null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username,a=l.store.getState().currentUser,o=null==a?void 0:a.mainPresence;if(void 0!==r&&""!==r&&!w.isEmpty(e[r])&&void 0!==(null===(n=e[r])||void 0===n?void 0:n.mainPresence)){var c=null===(i=e[r])||void 0===i?void 0:i.mainPresence;l.store.dispatch.currentUser.updateMainPresence(null===(s=e[r])||void 0===s?void 0:s.mainPresence),"online"===c&&"online"!==o&&u.eventDispatch("phone-island-call-ended",{})}})),o.useEventListener("phone-island-call-status",(function(){var e=l.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var he=function(e,t,n,i,s){var r=l.store.getState().paramUrl;if(null==r?void 0:r.hasValidUrl){var a=r.url||"";if(a){var o=l.store.getState().island.urlOpened,c=r.openParamUrlType;if(!o||"button"===c){var d=a;d.includes("$CALLER_NUMBER")&&e&&(d=d.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),d.includes("$CALLER_NAME")&&t&&(d=d.replace(/\$CALLER_NAME/g,encodeURIComponent(t))),d.includes("$UNIQUEID")&&i&&(d=d.replace(/\$UNIQUEID/g,encodeURIComponent(i))),d.includes("$CALLED")&&n&&(d=d.replace(/\$CALLED/g,encodeURIComponent(n))),d.includes("{phone}")&&e&&(d=d.replace(/\{phone\}/g,encodeURIComponent(e)));var p=d.startsWith("http")?d:"https://".concat(d);if("mobile"!==q&&!C&&s){var v=window.open("about:blank","_blank");v&&(v.location.href=p,l.store.dispatch.island.setUrlOpened(!0))}else u.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:p})}}}};return o.useEventListener("phone-island-already-opened-external-page",(function(){l.store.dispatch.island.setUrlOpened(!0)})),o.useEventListener("phone-island-url-parameter-opened",(function(e){var t=l.store.getState().paramUrl;if(t.hasValidUrl&&!l.store.getState().island.urlOpened){var n=t.onlyQueues||!1,i=S.isFromTrunk(null==e?void 0:e.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(i);var s=l.store.getState().currentUser.default_device,r=!("desktop"===q&&"nethlink"===(null==s?void 0:s.type));"in"===(null==e?void 0:e.direction)&&(!0===n&&!0===(null==e?void 0:e.throughQueue)?he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r):!1!==n||!0!==i&&!0!==(null==e?void 0:e.throughQueue)||he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r))}})),o.useEventListener("phone-island-user-status",(function(){var e=l.store.getState().currentUser;console.log("User status debug informations: ",e)})),o.useEventListener("phone-island-all-users-status",(function(){var e=l.store.getState().users;console.log("Users status debug informations: ",e)})),o.useEventListener("phone-island-status",(function(){var e=l.store.getState().island;console.log("Phone island status debug informations: ",e)})),o.useEventListener("phone-island-webrtc-status",(function(){var e=l.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-player-status",(function(){var e=l.store.getState().player;console.log("Player status debug informations: ",e)})),o.useEventListener("phone-island-conference-status",(function(){var e=l.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-streaming-status",(function(){var e=l.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),o.useEventListener("phone-island-paramurl-status",(function(){var e=l.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),o.useEventListener("phone-island-queue-status",(function(){var e=l.store.getState().queue;console.log("Queue status debug informations: ",e)})),o.useEventListener("phone-island-player-force-stop",(function(){l.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),o.useEventListener("phone-island-stores-download",(function(){l.downloadStoresAsJSON(),u.eventDispatch("phone-island-stores-downloaded",{})})),o.useEventListener("phone-island-sideview-open",(function(){l.store.dispatch.island.toggleSideViewVisible(!0),l.store.dispatch.island.setUrlOpened(!1),u.eventDispatch("phone-island-sideview-opened",{})})),o.useEventListener("phone-island-sideview-close",(function(){l.store.dispatch.island.toggleSideViewVisible(!1),u.eventDispatch("phone-island-sideview-closed",{})})),o.useEventListener("phone-island-transcription-close",(function(){l.store.dispatch.island.toggleTranscriptionViewVisible(!1),(X.current||Y.current)&&(u.eventDispatch("phone-island-stop-transcription",{uniqueid:X.current,linkedid:Y.current}),X.current=null,Y.current=null),u.eventDispatch("phone-island-transcription-closed",{})})),o.useEventListener("phone-island-transcription-open",(function(e){var t=null==e?void 0:e.linkedid,n=null==e?void 0:e.uniqueid;(t||n)&&(Y.current=t||null,X.current=n||null,u.eventDispatch("phone-island-start-transcription",{linkedid:t,uniqueid:n}),l.store.dispatch.island.toggleTranscriptionViewVisible(!0),u.eventDispatch("phone-island-transcription-opened",{}))})),o.useEventListener("phone-island-init-audio",(function(){var e=l.store.getState().currentCall,t=e.accepted,n=e.incoming,i=e.outgoing,s=e.incomingWebRTC,r=e.incomingSocket;if(t||n||i||s||r)console.log("[AUDIO-WARMUP] Skipping audio warm-up: active call in progress");else if(x&&"string"==typeof x&&0!==x.length){var a=l.store.getState().currentUser.featureCodes,o=null==a?void 0:a.audio_test,u=o&&"string"==typeof o&&o.length>0?o:"*41";console.log("[AUDIO-WARMUP] Starting audio warm-up test call",{codeToCall:u,SIP_HOST:x}),E.callNumber(u,x)}else console.warn("[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available",{SIP_HOST:x})})),o.useEventListener("phone-island-transcription-toggle",(function(){var e=!l.store.getState().island.transcriptionViewIsVisible;l.store.dispatch.island.toggleTranscriptionViewVisible(e),u.eventDispatch(e?"phone-island-transcription-opened":"phone-island-transcription-closed",{})})),o.useEventListener("phone-island-summary-call-check",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i,s,r,a,o,u,c,p,v,h;return e.__generator(this,(function(e){switch(e.label){case 0:return n=(null==t?void 0:t.linkedid)||(null==t?void 0:t.linkedId),i=(null==t?void 0:t.uniqueid)||(null==t?void 0:t.uniqueId),n?i?(s=l.store.getState().conference,r=s.isActive,a=s.usersList,o=s.conferenceStartedFrom,u=l.store.getState().currentUser,c=u.name,p=u.username,v=r&&(o===p||!!a&&Object.values(a).some((function(e){return e.name===c}))),v?[2]:[4,new Promise((function(e){return setTimeout(e,1e3)}))]):[2]:[2];case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 3:return[4,(0,e.sent().checkSummaryCall)(i,n)];case 4:return e.sent(),d.dispatchSummaryReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 5:return 204===(null==(h=e.sent())?void 0:h.status)&&d.dispatchSummaryNotReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 6:return[2]}}))}))})),o.useEventListener("phone-island-call-summary-notify",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:if(n=null==t?void 0:t.linkedid,i=null==t?void 0:t.uniqueid,!n)return[2];if(!i)return[2];e.label=1;case 1:return e.trys.push([1,4,,5]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 2:return[4,(0,e.sent().watchSummaryCall)(n,i)];case 3:return e.sent(),u.eventDispatch("phone-island-summary-call-notified",{linkedid:n,uniqueid:i}),[3,5];case 4:return e.sent(),[2];case 5:return[2]}}))}))})),o.useEventListener("phone-island-size-change",(function(t){var n=l.store.getState().island,i=n.sideViewIsVisible,s=n.transcriptionViewIsVisible,r=n.actionsExpanded,a=t.sizeInformation,o=e.__assign(e.__assign({},a),{right:i?"42px":"0px",top:I.isBackCallActive()?"40px":"0px",bottomTranscription:s&&r?"335px":s&&!r?"330px":"0px"});u.eventDispatch("phone-island-size-changed",{sizes:o})})),o.useEventListener("phone-island-call-ended",(function(){if("online"===l.store.getState().currentUser.mainPresence){u.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),u.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore(),l.store.dispatch.paramUrl.setThroughTrunk(!1)}})),o.useEventListener("phone-island-conference-list-open",(function(){l.store.dispatch.island.toggleConferenceList(!0),u.eventDispatch("phone-island-conference-list-opened",{})})),o.useEventListener("phone-island-alert-removed",(function(e){var t=l.store.getState().alerts.status.activeAlertsCount,n=l.store.getState().island,i=n.view,s=n.previousView,r=l.store.getState().conference.isActive,a=l.store.getState().alerts.data,o=l.store.getState().currentCall,c=o.incoming,d=o.outgoing,p=o.accepted,v=null==e?void 0:e.type,h=o.incoming||o.outgoing||o.accepted||""!==o.conversationId;if(!(c||d||p||t>0||"player"===i||"recorder"===i||"physicalPhoneRecorder"===i||"waitingConference"===i&&r||"transfer"===i&&r||"settings"===i&&r||"settings"===i&&("recorder"===s||"player"===s)||"operatorBusy"===i&&!r)&&0===t&&(!v||a[v]&&!a[v].active)&&!h){u.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),u.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore()}})),o.useEventListener("phone-island-conference-list-close",(function(){l.store.dispatch.island.toggleConferenceList(!1),u.eventDispatch("phone-island-conference-list-closed",{})})),o.useEventListener("phone-island-conversations",(function(e){var t,n=Object.keys(e)[0];if(n===(null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username)){var i=e[n].conversations,s=l.store.getState().paramUrl,r=l.store.getState().island.urlOpened;if(!s.hasValidUrl||r)return;if("answered"===s.openParamUrlType&&i&&Object.keys(i).length>0){var a=i[Object.keys(i)[0]],o=l.store.getState().currentUser.default_device,u=!("desktop"===q&&"nethlink"===(null==o?void 0:o.type));if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var c=s.onlyQueues||!1,d=S.isFromTrunk(a.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(d),!0===c&&!0===(null==a?void 0:a.throughQueue)?he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,u):!1!==c||!0!==d&&!0!==(null==a?void 0:a.throughQueue)||he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,u)}}}})),_.default.createElement(_.default.Fragment,null,_.default.createElement(y.default,{store:l.store},P&&""!==P.trim()?_.default.createElement(s.WebRTC,{hostName:R,sipExten:P,sipSecret:V,sipHost:x,sipPort:J,reload:W,reloadedCallback:function(){return H(!0)},uaType:q},_.default.createElement(a.RestAPI,{hostName:R,username:A,authToken:O},_.default.createElement(i.Socket,{hostName:R,username:A,authToken:O,reload:W,reloadedCallback:function(){return G(!0)},uaType:q},_.default.createElement(n.Events,{sipHost:x},_.default.createElement(r.Island,{showAlways:T,uaType:q}))))):_.default.createElement(a.RestAPI,{hostName:R,username:A,authToken:O},_.default.createElement(i.Socket,{hostName:R,username:A,authToken:O,reload:W,reloadedCallback:function(){G(!0),H(!0)},uaType:q},_.default.createElement(n.Events,{sipHost:x},_.default.createElement(r.Island,{showAlways:T,uaType:q}))))))}));L.displayName="PhoneIslandComponent";var U=t.forwardRef((function(t,n){return _.default.createElement(L,e.__assign({},t,{ref:n}))}));U.displayName="PhoneIsland",exports.PhoneIsland=U;
|
|
2
2
|
//# sourceMappingURL=App.js.map
|
package/dist/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store, downloadStoresAsJSON } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\n// Enable cookie sending for cross-origin requests when behind the support proxy\nif (typeof window !== 'undefined' && window.location.hostname.includes('.support.my.')) {\n const originalFetch = window.fetch\n window.fetch = function (input: RequestInfo | URL, init?: RequestInit) {\n return originalFetch(input, { credentials: 'include', ...init })\n }\n}\n\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\nimport { callNumber } from './lib/phone/call'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n urlParamWithEvent?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport interface PhoneIslandRef {\n reset: () => void\n}\n\nconst PhoneIslandComponent = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (\n {\n dataConfig,\n showAlways = false,\n uaType,\n urlParamWithEvent = false,\n }: PhoneIslandProps,\n ref,\n ) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n // Cooldown to prevent reload loop when network is down\n const lastReloadTime = useRef<number>(0)\n const RELOAD_COOLDOWN = 10 * 1000 // 10 seconds between reload attempts\n const activeTranscriptionUniqueIdRef = useRef<string | null>(null)\n\n // Expose reset method via imperativeHandle\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n console.info('PhoneIsland: Performing full component reset')\n setReload(true)\n },\n }),\n [],\n )\n\n // Keepalive system to maintain tab active without heavy reload\n useEffect(() => {\n let lastActiveTime = Date.now()\n const INACTIVITY_THRESHOLD = 5 * 60 * 1000 // 5 minutes\n\n // Handle visibility change (tab becomes visible/hidden)\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n const now = Date.now()\n const timeSinceLastActive = now - lastActiveTime\n // Trigger emergency stop ringtone after 2 seconds when tab becomes active again\n setTimeout(() => {\n eventDispatch('phone-island-emergency-stop-ringtone', {})\n }, 2000)\n\n // Only reload if tab was hidden for more than threshold\n if (timeSinceLastActive > INACTIVITY_THRESHOLD) {\n console.info('Tab inactive for long period, performing soft reconnection')\n setReload(true)\n }\n lastActiveTime = now\n }\n }\n\n // Lightweight worker for keepalive ping\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n if (event.data === 'ping') {\n // Simple ping to keep tab active - no action needed\n lastActiveTime = Date.now()\n }\n }\n\n // Listen for visibility changes\n document.addEventListener('visibilitychange', handleVisibilityChange)\n\n return () => {\n worker.terminate()\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n // Monitor alerts and trigger automatic reload when webrtc_down or socket_down become active\n useEffect(() => {\n const checkInterval = setInterval(() => {\n const { data } = store.getState().alerts\n const isWebRTCDown = data.webrtc_down?.active || false\n const isSocketDown = data.socket_down?.active || false\n const now = Date.now()\n const timeSinceLastReload = now - lastReloadTime.current\n\n // Check if there's an active call - if so, don't reload automatically\n // WebRTC/ICE is designed to recover from brief network interruptions\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCall = accepted || outgoing || iceState === 'connected' || iceState === 'completed'\n\n // If either alert is active and we're not already reloading and cooldown has passed\n // Don't trigger reload if we're completely offline - wait for network to come back\n // Don't trigger reload if there's an active call - let ICE try to recover\n const isOnline = navigator.onLine\n if ((isWebRTCDown || isSocketDown) && !reload && timeSinceLastReload > RELOAD_COOLDOWN && isOnline) {\n if (hasActiveCall) {\n console.info('Alert detected but active call in progress - skipping automatic reload to let ICE recover', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown,\n iceState,\n accepted,\n outgoing\n })\n // Don't reload - let ICE try to recover the call\n return\n }\n console.info('Alert detected (webrtc_down or socket_down), triggering automatic reload', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown\n })\n lastReloadTime.current = now\n setReload(true)\n }\n }, 1000) // Check every second\n\n return () => clearInterval(checkInterval)\n }, [reload])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-emergency-stop-ringtone', () => {\n const { view } = store.getState().island\n\n // If phone-island is active (view is not null), don't stop the ringtone\n if (view !== null) {\n console.log('Phone island is active, ringtone stop ignored')\n return\n }\n\n // Phone-island is not active (view is null), force stop ringtone\n console.warn('Emergency stop ringtone triggered - phone island inactive')\n store.dispatch.player.emergencyStopAudioPlayer()\n eventDispatch('phone-island-emergency-stop-ringtone-completed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.webrtc.updateWebRTC({\n sipcall: null,\n registered: false,\n isDetached: true,\n jsepGlobal: null,\n })\n store.dispatch.webrtc.updateRemoteAudioStream(null)\n store.dispatch.webrtc.updateLocalAudioStream(null)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.webrtc.updateRemoteVideoStream(null)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-reload-component', (data: any) => {\n if (data?.force) {\n store.dispatch.island.setForceReload(true)\n }\n setReload(true)\n })\n\n useEventListener('phone-island-audio-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-audio-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Audio input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n useEventListener('phone-island-video-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isVideoInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Video input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultVideoInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-video-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-video-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Video input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n const [paramUrlInitialized, setParamUrlInitialized] = useState(false)\n const fetchReady = useSyncExternalStore(\n store.subscribe,\n () => store.getState().fetchDefaults.fetchReady || false,\n )\n\n // Initialize application on first render\n useEffect(() => {\n if (firstRender) {\n // Initialize i18n\n initI18n()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n store.dispatch.paramUrl.setParamUrl({\n url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.warn('Non-blocking param URL fetch failed:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (!fetchReady || paramUrlInitialized) {\n return\n }\n\n setParamUrlInitialized(true)\n initParamUrl()\n }, [fetchReady, paramUrlInitialized])\n\n // Helper function to check if an audio output device is available\n const isAudioOutputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n return audioOutputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio output device\n const getDefaultAudioOutputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioOutputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioOutputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if an audio input device is available\n const isAudioInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n return audioInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking audio input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio input device\n const getDefaultAudioInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default audio input device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if a video input device is available\n const isVideoInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n return videoInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking video input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default video input device\n const getDefaultVideoInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n videoInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || videoInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default video input device:', err)\n return 'default'\n }\n }\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const trySetSinkId = async () => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n if (!remoteAudioElement?.current) {\n console.warn('Remote audio element not available')\n return\n }\n\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioOutputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio output device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioOutputDevice()\n\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n }\n\n try {\n // Try to set sink ID directly first (works if audio element is already active)\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info('Default audio output device changed successfully!')\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (err) {\n console.log('Direct setSinkId failed, trying with temporary stream:', err)\n\n try {\n // Create a temporary silent audio stream to activate the audio element\n const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()\n const oscillator = audioContext.createOscillator()\n const gainNode = audioContext.createGain()\n\n // Create silent audio\n oscillator.frequency.setValueAtTime(440, audioContext.currentTime)\n gainNode.gain.setValueAtTime(0, audioContext.currentTime) // Silent\n\n oscillator.connect(gainNode)\n\n // Get MediaStream from audio context\n const destination = audioContext.createMediaStreamDestination()\n gainNode.connect(destination)\n\n // Set the stream to the audio element\n remoteAudioElement.current.srcObject = destination.stream\n\n // Start the oscillator\n oscillator.start()\n\n // Try setSinkId again after a short delay\n setTimeout(async () => {\n try {\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info(\n 'Default audio output device changed successfully with temporary stream!',\n )\n\n // Clean up temporary stream\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (finalErr) {\n console.error('Final setSinkId attempt failed:', finalErr)\n\n // Clean up on failure\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // If original device failed and we're not already using default, try default\n if (targetDeviceId !== 'default') {\n console.log('Trying fallback to default device')\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Even default device failed:', defaultErr)\n }\n }\n\n // Save device preference anyway for future calls\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }, 100)\n } catch (streamErr) {\n console.error('Failed to create temporary audio stream:', streamErr)\n\n // Final fallback: try default device\n if (targetDeviceId !== 'default') {\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Emergency fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Emergency fallback to default device failed:', defaultErr)\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n } else {\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }\n }\n\n trySetSinkId()\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // Ringtone management events\n useEventListener('phone-island-ringing-tone-list', () => {\n const ringtones = store.getState().ringtones.availableRingtones\n const ringtoneList = ringtones.map((r) => ({\n name: r.name,\n displayName: r.displayName,\n base64Audio: r.base64Audio,\n }))\n eventDispatch('phone-island-ringing-tone-list-response', { ringtones: ringtoneList })\n })\n\n useEventListener('phone-island-ringing-tone-select', (data: { name: string }) => {\n if (data?.name) {\n // Save to localStorage\n setJSONItem('phone-island-selected-ringtone', { value: data.name })\n // Update store\n store.dispatch.ringtones.setSelectedRingtone(data.name)\n eventDispatch('phone-island-ringing-tone-selected', { name: data.name })\n }\n })\n\n useEventListener('phone-island-ringing-tone-output', (data: { deviceId: string }) => {\n if (data?.deviceId) {\n // Save to localStorage\n setJSONItem('phone-island-ringtone-output-device', { value: data.deviceId })\n // Update store\n store.dispatch.ringtones.setOutputDeviceId(data.deviceId)\n eventDispatch('phone-island-ringing-tone-output-changed', { deviceId: data.deviceId })\n }\n })\n\n // Load ringtone preferences from localStorage on mount\n useEffect(() => {\n const savedRingtone = getJSONItem('phone-island-selected-ringtone')\n const savedOutputDevice = getJSONItem('phone-island-ringtone-output-device')\n\n if (savedRingtone?.value) {\n store.dispatch.ringtones.setSelectedRingtone(savedRingtone.value)\n }\n if (savedOutputDevice?.value) {\n store.dispatch.ringtones.setOutputDeviceId(savedOutputDevice.value)\n }\n }, [])\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any, automatic?: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile' && !urlParamWithEvent && automatic) {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n // Calculate automatic flag: false when desktop with nethlink device, true otherwise\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-queue-status', () => {\n const queueInformation = store.getState().queue\n console.log('Queue status debug informations: ', queueInformation)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n // Download all stores as JSON file - for debugging and backup\n useEventListener('phone-island-stores-download', () => {\n downloadStoresAsJSON()\n eventDispatch('phone-island-stores-downloaded', {})\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-transcription-close', () => {\n store.dispatch.island.toggleTranscriptionViewVisible(false)\n if (activeTranscriptionUniqueIdRef.current) {\n eventDispatch('phone-island-stop-transcription', {\n uniqueid: activeTranscriptionUniqueIdRef.current,\n linkedid: activeTranscriptionUniqueIdRef.current,\n })\n activeTranscriptionUniqueIdRef.current = null\n }\n eventDispatch('phone-island-transcription-closed', {})\n })\n\n useEventListener('phone-island-transcription-open', (args: any) => {\n const uniqueid = args?.linkedid || args?.uniqueid || null\n if (!uniqueid) {\n return\n }\n activeTranscriptionUniqueIdRef.current = uniqueid\n eventDispatch('phone-island-start-transcription', {\n linkedid: uniqueid,\n uniqueid,\n })\n store.dispatch.island.toggleTranscriptionViewVisible(true)\n eventDispatch('phone-island-transcription-opened', {})\n })\n\n useEventListener('phone-island-init-audio', () => {\n // Check if there's an active call - don't interrupt it with audio warm-up\n const { accepted, incoming, outgoing, incomingWebRTC, incomingSocket } = store.getState().currentCall\n const hasActiveCall = accepted || incoming || outgoing || incomingWebRTC || incomingSocket\n\n if (hasActiveCall) {\n console.log('[AUDIO-WARMUP] Skipping audio warm-up: active call in progress')\n return\n }\n\n // Validate SIP_HOST before attempting call\n if (!SIP_HOST || typeof SIP_HOST !== 'string' || SIP_HOST.length === 0) {\n console.warn('[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available', { SIP_HOST })\n return\n }\n\n const { featureCodes } = store.getState().currentUser\n const audioTestCode = featureCodes?.audio_test\n // Always fallback to *41 if audio_test is not available\n const codeToCall = (audioTestCode && typeof audioTestCode === 'string' && audioTestCode.length > 0)\n ? audioTestCode\n : '*41'\n\n console.log('[AUDIO-WARMUP] Starting audio warm-up test call', { codeToCall, SIP_HOST })\n callNumber(codeToCall, SIP_HOST)\n })\n\n useEventListener('phone-island-transcription-toggle', () => {\n const { transcriptionViewIsVisible } = store.getState().island\n const newState = !transcriptionViewIsVisible\n store.dispatch.island.toggleTranscriptionViewVisible(newState)\n eventDispatch(\n newState ? 'phone-island-transcription-opened' : 'phone-island-transcription-closed',\n {},\n )\n })\n\n // Check if call summary/transcription exists\n useEventListener(\n 'phone-island-summary-call-check',\n async (data: { linkedid?: string; uniqueid?: string; uniqueId?: string }) => {\n const callId = data?.linkedid || data?.uniqueid || data?.uniqueId\n if (!callId) {\n console.warn('[Summary Check] No call identifier provided')\n return\n }\n\n const { isActive, usersList, conferenceStartedFrom } = store.getState().conference\n const { name, username } = store.getState().currentUser\n const isUserInConference =\n isActive &&\n (conferenceStartedFrom === username ||\n (!!usersList && Object.values(usersList).some((user: any) => user.name === name)))\n\n if (isUserInConference) {\n return\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n try {\n const { checkSummaryCall } = await import('./services/user')\n await checkSummaryCall(callId)\n eventDispatch('phone-island-summary-ready', {\n linkedid: callId,\n })\n } catch (error: any) {\n // 204 means summary not present yet - not an error, just not ready\n if (error?.status === 204) {\n console.log(`[Summary Check] Summary not ready for ${callId}`)\n eventDispatch('phone-island-summary-not-ready', {\n linkedid: callId,\n })\n } else {\n console.warn('[Summary Check] Non-blocking summary check failed:', error)\n }\n }\n },\n )\n\n // Watch for call summary/transcription notifications\n useEventListener(\n 'phone-island-call-summary-notify',\n async (data: { linkedid?: string; uniqueid?: string; uniqueId?: string }) => {\n const callId = data?.linkedid || data?.uniqueid || data?.uniqueId\n if (callId) {\n try {\n const { watchSummaryCall } = await import('./services/user')\n await watchSummaryCall(callId)\n\n // Dispatch event to confirm the watch request was sent\n eventDispatch('phone-island-summary-call-notified', { linkedid: callId })\n } catch (error) {\n console.warn('[Summary Check] Non-blocking summary watch failed:', error)\n }\n }\n },\n )\n\n useEventListener('phone-island-size-change', (args: any) => {\n const { sideViewIsVisible, transcriptionViewIsVisible, actionsExpanded } =\n store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n bottomTranscription:\n transcriptionViewIsVisible && actionsExpanded\n ? '335px'\n : transcriptionViewIsVisible && !actionsExpanded\n ? '330px'\n : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (alertRemovedType) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = alertRemovedType?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player')) ||\n (view === 'operatorBusy' && !isActive)\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n {SIP_EXTEN && SIP_EXTEN.trim() !== '' ? (\n // Full stack with WebRTC when SIP extension is provided\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n ) : (\n // Minimal stack without WebRTC when no SIP extension\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => {\n setReloadedSocket(true)\n setReloadedWebRTC(true)\n }}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n )}\n </Provider>\n </>\n )\n})\n\nPhoneIslandComponent.displayName = 'PhoneIslandComponent'\n\nexport const PhoneIsland = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (props, ref) => <PhoneIslandComponent {...props} ref={ref} />,\n)\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["window","location","hostname","includes","originalFetch_1","fetch","input","init","__assign","credentials","PhoneIslandComponent","forwardRef","_a","ref","dataConfig","_b","showAlways","uaType","_c","urlParamWithEvent","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","lastReloadTime","useRef","activeTranscriptionUniqueIdRef","useImperativeHandle","reset","console","info","useEffect","lastActiveTime","Date","now","handleVisibilityChange","document","hidden","timeSinceLastActive","setTimeout","eventDispatch","worker","Worker","wakeUpWorker","type","onmessage","event","data","addEventListener","terminate","removeEventListener","checkInterval","setInterval","store","getState","alerts","isWebRTCDown","webrtc_down","active","isSocketDown","socket_down","timeSinceLastReload","current","sipcall","webrtc","currentCall","accepted","outgoing","iceState","webrtcStuff","pc","iceConnectionState","hasActiveCall","isOnline","navigator","onLine","Math","round","clearInterval","useEventListener","dispatch","island","toggleIsOpen","setIslandView","view","warn","player","emergencyStopAudioPlayer","log","detach","updateWebRTC","registered","isDetached","jsepGlobal","updateRemoteAudioStream","updateLocalAudioStream","updateLocalVideoStream","updateRemoteVideoStream","force","setForceReload","__awaiter","targetDeviceId","deviceId","isAudioInputDeviceAvailable","sent","getDefaultAudioInputDevice","setJSONItem","concat","isVideoInputDeviceAvailable","getDefaultVideoInputDevice","_g","firstRender","setFirstRender","_h","firstAudioOutputInit","setFirstAudioOutputInit","_j","paramUrlInitialized","setParamUrlInitialized","fetchReady","useSyncExternalStore","subscribe","fetchDefaults","initI18n","getParamUrl","paramUrlResponse","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","error_1","mediaDevices","enumerateDevices","devices","filter","device","kind","some","err_3","audioInputDevices","defaultDevice","find","err_4","err_5","videoInputDevices","err_6","remoteAudioElement","remoteAudio","err_1","audioOutputDevices","err_2","setSinkId","err_7","audioContext_1","AudioContext","webkitAudioContext","oscillator_1","createOscillator","gainNode","createGain","frequency","setValueAtTime","currentTime","gain","connect","destination","createMediaStreamDestination","srcObject","stream","start","stop","close","error","finalErr_1","defaultErr_2","streamErr_1","defaultErr_1","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","setAlert","toString","ringtoneList","ringtones","availableRingtones","map","r","name","displayName","base64Audio","value","setSelectedRingtone","setOutputDeviceId","savedRingtone","savedOutputDevice","checkInternetConnection","then","internetIsActive","intervalId","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","openParameterizedUrl","callerNum","callerName","called","uniqueId","automatic","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","replace","encodeURIComponent","formattedUrl","startsWith","newWindow","open","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","default_device","direction","throughQueue","counterpartName","owner","linkedId","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","queueInformation","queue","downloadStoresAsJSON","toggleSideViewVisible","toggleTranscriptionViewVisible","uniqueid","linkedid","args","incoming","incomingWebRTC","incomingSocket","length","featureCodes","audioTestCode","audio_test","codeToCall","callNumber","newState","transcriptionViewIsVisible","callId","isActive","usersList","conferenceStartedFrom","isUserInConference","Object","values","user","Promise","resolve","checkSummaryCall","error_2","status","watchSummaryCall","error_3","sideViewIsVisible","actionsExpanded","sizeInformation","updatedSizeInformation","right","top","isBackCallActive","bottomTranscription","sizes","width","height","handleResetIslandStore","toggleConferenceList","alertRemovedType","activeAlertsCount","previousView","alertsData","isInCall","conversationId","keys","conversations","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","PhoneIsland","props"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store, downloadStoresAsJSON } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\n// Enable cookie sending for cross-origin requests when behind the support proxy\nif (typeof window !== 'undefined' && window.location.hostname.includes('.support.my.')) {\n const originalFetch = window.fetch\n window.fetch = function (input: RequestInfo | URL, init?: RequestInit) {\n return originalFetch(input, { credentials: 'include', ...init })\n }\n}\n\nimport {\n useEventListener,\n eventDispatch,\n setJSONItem,\n getJSONItem,\n dispatchSummaryReady,\n dispatchSummaryNotReady,\n} from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\nimport { callNumber } from './lib/phone/call'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n urlParamWithEvent?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport interface PhoneIslandRef {\n reset: () => void\n}\n\nconst PhoneIslandComponent = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (\n {\n dataConfig,\n showAlways = false,\n uaType,\n urlParamWithEvent = false,\n }: PhoneIslandProps,\n ref,\n ) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n // Cooldown to prevent reload loop when network is down\n const lastReloadTime = useRef<number>(0)\n const RELOAD_COOLDOWN = 10 * 1000 // 10 seconds between reload attempts\n const activeTranscriptionUniqueIdRef = useRef<string | null>(null)\n const activeTranscriptionLinkedIdRef = useRef<string | null>(null)\n\n // Expose reset method via imperativeHandle\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n console.info('PhoneIsland: Performing full component reset')\n setReload(true)\n },\n }),\n [],\n )\n\n // Keepalive system to maintain tab active without heavy reload\n useEffect(() => {\n let lastActiveTime = Date.now()\n const INACTIVITY_THRESHOLD = 5 * 60 * 1000 // 5 minutes\n\n // Handle visibility change (tab becomes visible/hidden)\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n const now = Date.now()\n const timeSinceLastActive = now - lastActiveTime\n // Trigger emergency stop ringtone after 2 seconds when tab becomes active again\n setTimeout(() => {\n eventDispatch('phone-island-emergency-stop-ringtone', {})\n }, 2000)\n\n // Only reload if tab was hidden for more than threshold\n if (timeSinceLastActive > INACTIVITY_THRESHOLD) {\n console.info('Tab inactive for long period, performing soft reconnection')\n setReload(true)\n }\n lastActiveTime = now\n }\n }\n\n // Lightweight worker for keepalive ping\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n if (event.data === 'ping') {\n // Simple ping to keep tab active - no action needed\n lastActiveTime = Date.now()\n }\n }\n\n // Listen for visibility changes\n document.addEventListener('visibilitychange', handleVisibilityChange)\n\n return () => {\n worker.terminate()\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n // Monitor alerts and trigger automatic reload when webrtc_down or socket_down become active\n useEffect(() => {\n const checkInterval = setInterval(() => {\n const { data } = store.getState().alerts\n const isWebRTCDown = data.webrtc_down?.active || false\n const isSocketDown = data.socket_down?.active || false\n const now = Date.now()\n const timeSinceLastReload = now - lastReloadTime.current\n\n // Check if there's an active call - if so, don't reload automatically\n // WebRTC/ICE is designed to recover from brief network interruptions\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCall = accepted || outgoing || iceState === 'connected' || iceState === 'completed'\n\n // If either alert is active and we're not already reloading and cooldown has passed\n // Don't trigger reload if we're completely offline - wait for network to come back\n // Don't trigger reload if there's an active call - let ICE try to recover\n const isOnline = navigator.onLine\n if ((isWebRTCDown || isSocketDown) && !reload && timeSinceLastReload > RELOAD_COOLDOWN && isOnline) {\n if (hasActiveCall) {\n console.info('Alert detected but active call in progress - skipping automatic reload to let ICE recover', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown,\n iceState,\n accepted,\n outgoing\n })\n // Don't reload - let ICE try to recover the call\n return\n }\n console.info('Alert detected (webrtc_down or socket_down), triggering automatic reload', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown\n })\n lastReloadTime.current = now\n setReload(true)\n }\n }, 1000) // Check every second\n\n return () => clearInterval(checkInterval)\n }, [reload])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-emergency-stop-ringtone', () => {\n const { view } = store.getState().island\n\n // If phone-island is active (view is not null), don't stop the ringtone\n if (view !== null) {\n console.log('Phone island is active, ringtone stop ignored')\n return\n }\n\n // Phone-island is not active (view is null), force stop ringtone\n console.warn('Emergency stop ringtone triggered - phone island inactive')\n store.dispatch.player.emergencyStopAudioPlayer()\n eventDispatch('phone-island-emergency-stop-ringtone-completed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.webrtc.updateWebRTC({\n sipcall: null,\n registered: false,\n isDetached: true,\n jsepGlobal: null,\n })\n store.dispatch.webrtc.updateRemoteAudioStream(null)\n store.dispatch.webrtc.updateLocalAudioStream(null)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.webrtc.updateRemoteVideoStream(null)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-reload-component', (data: any) => {\n if (data?.force) {\n store.dispatch.island.setForceReload(true)\n }\n setReload(true)\n })\n\n useEventListener('phone-island-audio-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-audio-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Audio input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n useEventListener('phone-island-video-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isVideoInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Video input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultVideoInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-video-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-video-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Video input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n const [paramUrlInitialized, setParamUrlInitialized] = useState(false)\n const fetchReady = useSyncExternalStore(\n store.subscribe,\n () => store.getState().fetchDefaults.fetchReady || false,\n )\n\n // Initialize application on first render\n useEffect(() => {\n if (firstRender) {\n // Initialize i18n\n initI18n()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n store.dispatch.paramUrl.setParamUrl({\n url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.warn('Non-blocking param URL fetch failed:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (!fetchReady || paramUrlInitialized) {\n return\n }\n\n setParamUrlInitialized(true)\n initParamUrl()\n }, [fetchReady, paramUrlInitialized])\n\n // Helper function to check if an audio output device is available\n const isAudioOutputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n return audioOutputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio output device\n const getDefaultAudioOutputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioOutputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioOutputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if an audio input device is available\n const isAudioInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n return audioInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking audio input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio input device\n const getDefaultAudioInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default audio input device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if a video input device is available\n const isVideoInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n return videoInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking video input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default video input device\n const getDefaultVideoInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n videoInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || videoInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default video input device:', err)\n return 'default'\n }\n }\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const trySetSinkId = async () => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n if (!remoteAudioElement?.current) {\n console.warn('Remote audio element not available')\n return\n }\n\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioOutputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio output device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioOutputDevice()\n\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n }\n\n try {\n // Try to set sink ID directly first (works if audio element is already active)\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info('Default audio output device changed successfully!')\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (err) {\n console.log('Direct setSinkId failed, trying with temporary stream:', err)\n\n try {\n // Create a temporary silent audio stream to activate the audio element\n const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()\n const oscillator = audioContext.createOscillator()\n const gainNode = audioContext.createGain()\n\n // Create silent audio\n oscillator.frequency.setValueAtTime(440, audioContext.currentTime)\n gainNode.gain.setValueAtTime(0, audioContext.currentTime) // Silent\n\n oscillator.connect(gainNode)\n\n // Get MediaStream from audio context\n const destination = audioContext.createMediaStreamDestination()\n gainNode.connect(destination)\n\n // Set the stream to the audio element\n remoteAudioElement.current.srcObject = destination.stream\n\n // Start the oscillator\n oscillator.start()\n\n // Try setSinkId again after a short delay\n setTimeout(async () => {\n try {\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info(\n 'Default audio output device changed successfully with temporary stream!',\n )\n\n // Clean up temporary stream\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (finalErr) {\n console.error('Final setSinkId attempt failed:', finalErr)\n\n // Clean up on failure\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // If original device failed and we're not already using default, try default\n if (targetDeviceId !== 'default') {\n console.log('Trying fallback to default device')\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Even default device failed:', defaultErr)\n }\n }\n\n // Save device preference anyway for future calls\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }, 100)\n } catch (streamErr) {\n console.error('Failed to create temporary audio stream:', streamErr)\n\n // Final fallback: try default device\n if (targetDeviceId !== 'default') {\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Emergency fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Emergency fallback to default device failed:', defaultErr)\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n } else {\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }\n }\n\n trySetSinkId()\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (data: any) => {\n setTheme(data?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (data: any) => {\n store.dispatch.alerts.setAlert(data.toString())\n })\n\n // Ringtone management events\n useEventListener('phone-island-ringing-tone-list', () => {\n const ringtones = store.getState().ringtones.availableRingtones\n const ringtoneList = ringtones.map((r) => ({\n name: r.name,\n displayName: r.displayName,\n base64Audio: r.base64Audio,\n }))\n eventDispatch('phone-island-ringing-tone-list-response', { ringtones: ringtoneList })\n })\n\n useEventListener('phone-island-ringing-tone-select', (data: { name: string }) => {\n if (data?.name) {\n // Save to localStorage\n setJSONItem('phone-island-selected-ringtone', { value: data.name })\n // Update store\n store.dispatch.ringtones.setSelectedRingtone(data.name)\n eventDispatch('phone-island-ringing-tone-selected', { name: data.name })\n }\n })\n\n useEventListener('phone-island-ringing-tone-output', (data: { deviceId: string }) => {\n if (data?.deviceId) {\n // Save to localStorage\n setJSONItem('phone-island-ringtone-output-device', { value: data.deviceId })\n // Update store\n store.dispatch.ringtones.setOutputDeviceId(data.deviceId)\n eventDispatch('phone-island-ringing-tone-output-changed', { deviceId: data.deviceId })\n }\n })\n\n // Load ringtone preferences from localStorage on mount\n useEffect(() => {\n const savedRingtone = getJSONItem('phone-island-selected-ringtone')\n const savedOutputDevice = getJSONItem('phone-island-ringtone-output-device')\n\n if (savedRingtone?.value) {\n store.dispatch.ringtones.setSelectedRingtone(savedRingtone.value)\n }\n if (savedOutputDevice?.value) {\n store.dispatch.ringtones.setOutputDeviceId(savedOutputDevice.value)\n }\n }, [])\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any, automatic?: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile' && !urlParamWithEvent && automatic) {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n // Calculate automatic flag: false when desktop with nethlink device, true otherwise\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-queue-status', () => {\n const queueInformation = store.getState().queue\n console.log('Queue status debug informations: ', queueInformation)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n // Download all stores as JSON file - for debugging and backup\n useEventListener('phone-island-stores-download', () => {\n downloadStoresAsJSON()\n eventDispatch('phone-island-stores-downloaded', {})\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-transcription-close', () => {\n store.dispatch.island.toggleTranscriptionViewVisible(false)\n if (activeTranscriptionUniqueIdRef.current || activeTranscriptionLinkedIdRef.current) {\n eventDispatch('phone-island-stop-transcription', {\n uniqueid: activeTranscriptionUniqueIdRef.current,\n linkedid: activeTranscriptionLinkedIdRef.current,\n })\n activeTranscriptionUniqueIdRef.current = null\n activeTranscriptionLinkedIdRef.current = null\n }\n eventDispatch('phone-island-transcription-closed', {})\n })\n\n useEventListener('phone-island-transcription-open', (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n if (!linkedid && !uniqueid) {\n return\n }\n activeTranscriptionLinkedIdRef.current = linkedid || null\n activeTranscriptionUniqueIdRef.current = uniqueid || null\n eventDispatch('phone-island-start-transcription', {\n linkedid,\n uniqueid,\n })\n store.dispatch.island.toggleTranscriptionViewVisible(true)\n eventDispatch('phone-island-transcription-opened', {})\n })\n\n useEventListener('phone-island-init-audio', () => {\n // Check if there's an active call - don't interrupt it with audio warm-up\n const { accepted, incoming, outgoing, incomingWebRTC, incomingSocket } = store.getState().currentCall\n const hasActiveCall = accepted || incoming || outgoing || incomingWebRTC || incomingSocket\n\n if (hasActiveCall) {\n console.log('[AUDIO-WARMUP] Skipping audio warm-up: active call in progress')\n return\n }\n\n // Validate SIP_HOST before attempting call\n if (!SIP_HOST || typeof SIP_HOST !== 'string' || SIP_HOST.length === 0) {\n console.warn('[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available', { SIP_HOST })\n return\n }\n\n const { featureCodes } = store.getState().currentUser\n const audioTestCode = featureCodes?.audio_test\n // Always fallback to *41 if audio_test is not available\n const codeToCall = (audioTestCode && typeof audioTestCode === 'string' && audioTestCode.length > 0)\n ? audioTestCode\n : '*41'\n\n console.log('[AUDIO-WARMUP] Starting audio warm-up test call', { codeToCall, SIP_HOST })\n callNumber(codeToCall, SIP_HOST)\n })\n\n useEventListener('phone-island-transcription-toggle', () => {\n const { transcriptionViewIsVisible } = store.getState().island\n const newState = !transcriptionViewIsVisible\n store.dispatch.island.toggleTranscriptionViewVisible(newState)\n eventDispatch(\n newState ? 'phone-island-transcription-opened' : 'phone-island-transcription-closed',\n {},\n )\n })\n\n // Check if call summary/transcription exists\n useEventListener(\n 'phone-island-summary-call-check',\n async (data: { linkedid?: string; uniqueid?: string; linkedId?: string; uniqueId?: string }) => {\n const linkedid = data?.linkedid || data?.linkedId\n const uniqueid = data?.uniqueid || data?.uniqueId\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n const { isActive, usersList, conferenceStartedFrom } = store.getState().conference\n const { name, username } = store.getState().currentUser\n const isUserInConference =\n isActive &&\n (conferenceStartedFrom === username ||\n (!!usersList && Object.values(usersList).some((user: any) => user.name === name)))\n\n if (isUserInConference) {\n return\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n try {\n const { checkSummaryCall } = await import('./services/user')\n await checkSummaryCall(uniqueid, linkedid)\n dispatchSummaryReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n } catch (error: any) {\n // 204 means summary not present yet - not an error, just not ready\n if (error?.status === 204) {\n dispatchSummaryNotReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n }\n }\n },\n )\n\n // Watch for call summary/transcription notifications\n useEventListener(\n 'phone-island-call-summary-notify',\n async (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n try {\n const { watchSummaryCall } = await import('./services/user')\n await watchSummaryCall(linkedid, uniqueid)\n\n eventDispatch('phone-island-summary-call-notified', {\n linkedid,\n uniqueid,\n })\n } catch {\n return\n }\n },\n )\n\n useEventListener('phone-island-size-change', (data: any) => {\n const { sideViewIsVisible, transcriptionViewIsVisible, actionsExpanded } =\n store.getState().island\n\n // Get current dimensions from data\n const { sizeInformation } = data\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n bottomTranscription:\n transcriptionViewIsVisible && actionsExpanded\n ? '335px'\n : transcriptionViewIsVisible && !actionsExpanded\n ? '330px'\n : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (data) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = data?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player')) ||\n (view === 'operatorBusy' && !isActive)\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n {SIP_EXTEN && SIP_EXTEN.trim() !== '' ? (\n // Full stack with WebRTC when SIP extension is provided\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n ) : (\n // Minimal stack without WebRTC when no SIP extension\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => {\n setReloadedSocket(true)\n setReloadedWebRTC(true)\n }}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n )}\n </Provider>\n </>\n )\n})\n\nPhoneIslandComponent.displayName = 'PhoneIslandComponent'\n\nexport const PhoneIsland = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (props, ref) => <PhoneIslandComponent {...props} ref={ref} />,\n)\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["window","location","hostname","includes","originalFetch_1","fetch","input","init","__assign","credentials","PhoneIslandComponent","forwardRef","_a","ref","dataConfig","_b","showAlways","uaType","_c","urlParamWithEvent","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","lastReloadTime","useRef","activeTranscriptionUniqueIdRef","activeTranscriptionLinkedIdRef","useImperativeHandle","reset","console","info","useEffect","lastActiveTime","Date","now","handleVisibilityChange","document","hidden","timeSinceLastActive","setTimeout","eventDispatch","worker","Worker","wakeUpWorker","type","onmessage","event","data","addEventListener","terminate","removeEventListener","checkInterval","setInterval","store","getState","alerts","isWebRTCDown","webrtc_down","active","isSocketDown","socket_down","timeSinceLastReload","current","sipcall","webrtc","currentCall","accepted","outgoing","iceState","webrtcStuff","pc","iceConnectionState","hasActiveCall","isOnline","navigator","onLine","Math","round","clearInterval","useEventListener","dispatch","island","toggleIsOpen","setIslandView","view","warn","player","emergencyStopAudioPlayer","log","detach","updateWebRTC","registered","isDetached","jsepGlobal","updateRemoteAudioStream","updateLocalAudioStream","updateLocalVideoStream","updateRemoteVideoStream","force","setForceReload","__awaiter","targetDeviceId","deviceId","isAudioInputDeviceAvailable","sent","getDefaultAudioInputDevice","setJSONItem","concat","isVideoInputDeviceAvailable","getDefaultVideoInputDevice","_g","firstRender","setFirstRender","_h","firstAudioOutputInit","setFirstAudioOutputInit","_j","paramUrlInitialized","setParamUrlInitialized","fetchReady","useSyncExternalStore","subscribe","fetchDefaults","initI18n","getParamUrl","paramUrlResponse","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","error_1","mediaDevices","enumerateDevices","devices","filter","device","kind","some","err_3","audioInputDevices","defaultDevice","find","err_4","err_5","videoInputDevices","err_6","remoteAudioElement","remoteAudio","err_1","audioOutputDevices","err_2","setSinkId","err_7","audioContext_1","AudioContext","webkitAudioContext","oscillator_1","createOscillator","gainNode","createGain","frequency","setValueAtTime","currentTime","gain","connect","destination","createMediaStreamDestination","srcObject","stream","start","stop","close","error","finalErr_1","defaultErr_2","streamErr_1","defaultErr_1","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setAlert","toString","ringtoneList","ringtones","availableRingtones","map","r","name","displayName","base64Audio","value","setSelectedRingtone","setOutputDeviceId","savedRingtone","savedOutputDevice","checkInternetConnection","then","internetIsActive","intervalId","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","openParameterizedUrl","callerNum","callerName","called","uniqueId","automatic","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","replace","encodeURIComponent","formattedUrl","startsWith","newWindow","open","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","default_device","direction","throughQueue","counterpartName","owner","linkedId","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","queueInformation","queue","downloadStoresAsJSON","toggleSideViewVisible","toggleTranscriptionViewVisible","uniqueid","linkedid","incoming","incomingWebRTC","incomingSocket","length","featureCodes","audioTestCode","audio_test","codeToCall","callNumber","newState","transcriptionViewIsVisible","isActive","usersList","conferenceStartedFrom","isUserInConference","Object","values","user","Promise","resolve","checkSummaryCall","dispatchSummaryReady","source","error_2","status","dispatchSummaryNotReady","watchSummaryCall","sideViewIsVisible","actionsExpanded","sizeInformation","updatedSizeInformation","right","top","isBackCallActive","bottomTranscription","sizes","width","height","handleResetIslandStore","toggleConferenceList","activeAlertsCount","previousView","alertsData","alertType","isInCall","conversationId","keys","conversations","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","PhoneIsland","props"],"mappings":"0pDAgBA,GAAsB,oBAAXA,QAA0BA,OAAOC,SAASC,SAASC,SAAS,gBAAiB,CACtF,IAAMC,EAAgBJ,OAAOK,MAC7BL,OAAOK,MAAQ,SAAUC,EAA0BC,GACjD,OAAOH,EAAcE,EAASE,WAAA,CAAAC,YAAa,WAAcF,GAC3D,CACD,CAmCD,IAAMG,EAAuBC,EAAUA,YACrC,SACEC,EAMAC,GALE,IAAAC,eACAC,EAAAH,EAAAI,WAAAA,cAAkBD,EAClBE,WACAC,EAAAN,EAAAO,kBAAAA,OAAiB,IAAAD,GAAQA,EAIrBE,EAAmBC,EAAMA,OAACC,KAAKR,GAAc,IAAIS,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAC5BS,EAAmBT,EAAO,GAC1BU,EAAmBV,EAAO,GAG1BW,EAAsBC,EAAAA,UAAkB,GAAvCC,EAAMF,EAAA,GAAEG,EAASH,EAAA,GAClBI,EAAsCH,EAAAA,UAAkB,GAAvDI,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAClCG,EAAsCN,EAAAA,UAAkB,GAAvDO,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAGlCG,EAAiBC,SAAe,GAEhCC,EAAiCD,SAAsB,MACvDE,EAAiCF,SAAsB,MAG7DG,sBACEhC,GACA,WAAM,MAAC,CACLiC,MAAO,WACLC,QAAQC,KAAK,gDACbd,GAAU,EACX,EAJG,GAMN,IAIJe,EAAAA,WAAU,WACR,IAAIC,EAAiBC,KAAKC,MAIpBC,EAAyB,WAC7B,IAAKC,SAASC,OAAQ,CACpB,IAAMH,EAAMD,KAAKC,MACXI,EAAsBJ,EAAMF,EAElCO,YAAW,WACPC,gBAAc,uCAAwC,CAAA,EACvD,GAAE,KAGDF,EAbqB,MAcvBT,QAAQC,KAAK,8DACbd,GAAU,IAEZgB,EAAiBE,CAClB,CACH,EAGMO,EAAS,IAAIC,OAAOC,EAAAA,QAAc,CAAEC,KAAM,WAWhD,OAVAH,EAAOI,UAAY,SAACC,GACC,SAAfA,EAAMC,OAERf,EAAiBC,KAAKC,MAE1B,EAGAE,SAASY,iBAAiB,mBAAoBb,GAEvC,WACLM,EAAOQ,YACPb,SAASc,oBAAoB,mBAAoBf,EACnD,CACD,GAAE,IAEHJ,EAAAA,WAAU,WACJV,GAAkBH,IACpBF,GAAU,GACVG,GAAkB,GAClBG,GAAkB,GAEtB,GAAG,CAACD,EAAgBH,IAGpBa,EAAAA,WAAU,WACR,IAAMoB,EAAgBC,aAAY,uBACxBL,EAASM,EAAKA,MAACC,WAAWC,OAAMR,KAClCS,GAAiC,QAAlB9D,EAAAqD,EAAKU,mBAAa,IAAA/D,OAAA,EAAAA,EAAAgE,UAAU,EAC3CC,GAAiC,QAAlB9D,EAAAkD,EAAKa,mBAAa,IAAA/D,OAAA,EAAAA,EAAA6D,UAAU,EAC3CxB,EAAMD,KAAKC,MACX2B,EAAsB3B,EAAMX,EAAeuC,QAIzCC,EAA8BV,EAAKA,MAACC,WAAWU,OAAMD,QACvD9C,EAAyBoC,EAAAA,MAAMC,WAAWW,YAAxCC,EAAQjD,EAAAiD,SAAEC,aACZC,EAAmC,QAAxBvD,EAAoB,QAApBb,EAAA+D,aAAA,EAAAA,EAASM,mBAAW,IAAArE,OAAA,EAAAA,EAAEsE,UAAE,IAAAzD,OAAA,EAAAA,EAAE0D,mBACrCC,EAAgBN,GAAYC,GAAyB,cAAbC,GAAyC,cAAbA,EAKpEK,EAAWC,UAAUC,OAC3B,IAAKnB,GAAgBG,KAAkB5C,GAAU8C,EAtF3B,KAsFoEY,EAAU,CAClG,GAAID,EAUF,YATA3C,QAAQC,KAAK,4FAA6F,CACxG+B,oBAAqBe,KAAKC,MAAMhB,EAAsB,KAAQ,IAC9DL,aAAYA,EACZG,aAAYA,EACZS,SAAQA,EACRF,SAAQA,EACRC,SAAQA,IAKZtC,QAAQC,KAAK,2EAA4E,CACvF+B,oBAAqBe,KAAKC,MAAMhB,EAAsB,KAAQ,IAC9DL,aAAYA,EACZG,aAAYA,IAEdpC,EAAeuC,QAAU5B,EACzBlB,GAAU,EACX,CACF,GAAE,KAEH,OAAO,WAAM,OAAA8D,cAAc3B,EAAc,CAC3C,GAAG,CAACpC,IAEJgE,EAAgBA,iBAAC,uBAAuB,WACtC1B,EAAAA,MAAM2B,SAASC,OAAOC,cAAa,GACnC1C,gBAAc,wBAAyB,CAAA,EACzC,IACAuC,EAAgBA,iBAAC,yBAAyB,WACxC1B,EAAAA,MAAM2B,SAASC,OAAOC,cAAa,GACnC1C,gBAAc,0BAA2B,CAAA,EAC3C,IAEAuC,EAAgBA,iBAAC,kCAAkC,WACjD1B,EAAAA,MAAM2B,SAASC,OAAOE,cAAc,QACpC3C,gBAAc,kCAAmC,CAAA,EACnD,IACAuC,EAAgBA,iBAAC,oCAAoC,WACnD1B,EAAAA,MAAM2B,SAASC,OAAOE,cAAc,QACpC3C,gBAAc,oCAAqC,CAAA,EACrD,IACAuC,EAAgBA,iBAAC,gCAAgC,WAC/C1B,EAAAA,MAAM2B,SAASC,OAAOE,cAAc,MACpC3C,gBAAc,gCAAiC,CAAA,EACjD,IACAuC,EAAgBA,iBAAC,mCAAmC,WAClD1B,EAAAA,MAAM2B,SAASC,OAAOE,cAAc,MACpC3C,gBAAc,mCAAoC,CAAA,EACpD,IAEAuC,EAAgBA,iBAAC,wCAAwC,WAI1C,OAHI1B,EAAKA,MAACC,WAAW2B,OAAMG,MASxCvD,QAAQwD,KAAK,6DACbhC,EAAAA,MAAM2B,SAASM,OAAOC,2BACtB/C,gBAAc,iDAAkD,CAAA,IAP9DX,QAAQ2D,IAAI,gDAQhB,IAEAT,mBAAiB,uBAAuB,SAAChC,GACvC0C,EAAAA,SACApC,QAAM2B,SAAShB,OAAO0B,aAAa,CACjC3B,QAAS,KACT4B,YAAY,EACZC,YAAY,EACZC,WAAY,OAEdxC,EAAAA,MAAM2B,SAAShB,OAAO8B,wBAAwB,MAC9CzC,EAAAA,MAAM2B,SAAShB,OAAO+B,uBAAuB,MAC7C1C,EAAAA,MAAM2B,SAAShB,OAAOgC,uBAAuB,MAC7C3C,EAAAA,MAAM2B,SAAShB,OAAOiC,wBAAwB,MAC9CzD,gBAAc,wBAAyB,CAAA,EACzC,IAEAuC,mBAAiB,iCAAiC,SAAChC,IAC7CA,eAAAA,EAAMmD,QACR7C,EAAAA,MAAM2B,SAASC,OAAOkB,gBAAe,GAEvCnF,GAAU,EACZ,IAEA+D,EAAAA,iBAAiB,mCAAmC,SAAOhC,GAA4B,OAAAqD,EAAAA,eAAA,OAAA,OAAA,GAAA,+EAIjF,OAHAC,EAAiBtD,EAAKuD,WAGe,YAAnBD,EACA,CAAA,EAAME,GAA4BF,IADN,CAAA,EAAA,iBAC5B3G,EAAiD8G,OAErD,CAAA,EAAA,IACd3E,QAAQwD,KACN,6BAAsBgB,EAAc,mDAEf,CAAA,EAAAI,cAAvBJ,EAAiB3G,iCAKrBgH,EAAAA,YAAY,kCAAmC,CAAEJ,SAAUD,IAC3D7D,gBAAc,mCAAoC,CAAA,GAE9C6D,IAAmBtD,EAAKuD,UAC1BzE,QAAQC,KACN,mCAAmC6E,OAAA5D,EAAKuD,SAAe,QAAAK,OAAAN,EAA2B,uBAGvF,GAAA,IAEDtB,EAAAA,iBAAiB,mCAAmC,SAAOhC,GAA4B,OAAAqD,EAAAA,eAAA,OAAA,OAAA,GAAA,+EAIjF,OAHAC,EAAiBtD,EAAKuD,WAGe,YAAnBD,EACA,CAAA,EAAMO,GAA4BP,IADN,CAAA,EAAA,iBAC5B3G,EAAiD8G,OAErD,CAAA,EAAA,IACd3E,QAAQwD,KACN,6BAAsBgB,EAAc,mDAEf,CAAA,EAAAQ,cAAvBR,EAAiB3G,iCAKrBgH,EAAAA,YAAY,kCAAmC,CAAEJ,SAAUD,IAC3D7D,gBAAc,mCAAoC,CAAA,GAE9C6D,IAAmBtD,EAAKuD,UAC1BzE,QAAQC,KACN,mCAAmC6E,OAAA5D,EAAKuD,SAAe,QAAAK,OAAAN,EAA2B,uBAGvF,GAAA,IAEK,IAAAS,EAAgChG,EAAAA,UAAS,GAAxCiG,GAAWD,EAAA,GAAEE,GAAcF,EAAA,GAC5BG,GAAkDnG,EAAAA,UAAS,GAA1DoG,GAAoBD,GAAA,GAAEE,GAAuBF,GAAA,GAC9CG,GAAgDtG,EAAAA,UAAS,GAAxDuG,GAAmBD,GAAA,GAAEE,GAAsBF,GAAA,GAC5CG,GAAaC,EAAoBA,qBACrCnE,QAAMoE,WACN,WAAM,OAAApE,QAAMC,WAAWoE,cAAcH,aAAc,CAAK,IAI1DxF,EAAAA,WAAU,WACJgF,KAEFY,EAAAA,WACAX,IAAe,GAEnB,GAAG,CAACD,KAEJhF,EAAAA,WAAU,WAsBHwF,KAAcF,KAInBC,IAAuB,GAzBFlB,EAAAA,eAAA,OAAA,OAAA,GAAA,qFAEa,6BAAM,CAAA,EAAAwB,EAAWA,6BAAzCC,EAAwBnI,EAAmB8G,OAC3CsB,GAAMD,aAAA,EAAAA,EAAkBC,MAAO,GAC/BC,EAAUD,GAAsB,KAAfA,EAAIE,OAE3B3E,QAAM2B,SAASiD,SAASC,YAAY,CAClCJ,IAAGA,EACHK,YAAYN,eAAAA,EAAkBO,eAAe,EAC7CC,YAAaN,mCAGflG,QAAQwD,KAAK,uCAAwCiD,GACrDjF,QAAM2B,SAASiD,SAASC,YAAY,CAClCJ,IAAK,GACLK,YAAY,EACZE,aAAa,kCAWrB,GAAG,CAACd,GAAYF,KAGhB,IAwCMd,GAA8B,SAAOD,GAAgB,OAAAF,EAAAA,eAAA,OAAA,OAAA,GAAA,iFAEvD,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,GAAO,UAMT,OAHMC,EAAU/I,EAA+C8G,OAG/D,CAAA,EAF0BiC,EAAQC,QAAO,SAACC,GAAW,MAAgB,eAAhBA,EAAOC,IAAP,IAE5BC,MAAK,SAACF,GAAW,OAAAA,EAAOrC,WAAaA,CAApB,YAG1C,kBADAzE,QAAQwD,KAAK,kDAAmDyD,GAChE,CAAA,GAAO,4BAKLrC,GAA6B,WAAA,OAAAL,EAAAA,eAAA,OAAA,OAAA,GAAA,qFAE/B,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,EAAO,kBAYT,OATMC,EAAU/I,EAA+C8G,OACzDuC,EAAoBN,EAAQC,QAAO,SAACC,GAAW,MAAgB,eAAhBA,EAAOC,IAAP,IAQ9C,CAAA,GALDI,EACJD,EAAkBE,MAChB,SAACN,GAAW,MAAoB,YAApBA,EAAOrC,UAA8C,KAApBqC,EAAOrC,QAAe,KAChEyC,EAAkB,IAEFC,EAAc1C,SAAW,kBAGhD,kBADAzE,QAAQwD,KAAK,4CAA6C6D,GAC1D,CAAA,EAAO,oCAKLtC,GAA8B,SAAON,GAAgB,OAAAF,EAAAA,eAAA,OAAA,OAAA,GAAA,iFAEvD,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,GAAO,UAMT,OAHMC,EAAU/I,EAA+C8G,OAG/D,CAAA,EAF0BiC,EAAQC,QAAO,SAACC,GAAW,MAAgB,eAAhBA,EAAOC,IAAP,IAE5BC,MAAK,SAACF,GAAW,OAAAA,EAAOrC,WAAaA,CAApB,YAG1C,kBADAzE,QAAQwD,KAAK,kDAAmD8D,GAChE,CAAA,GAAO,4BAKLtC,GAA6B,WAAA,OAAAT,EAAAA,eAAA,OAAA,OAAA,GAAA,qFAE/B,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,EAAO,kBAYT,OATMC,EAAU/I,EAA+C8G,OACzD4C,EAAoBX,EAAQC,QAAO,SAACC,GAAW,MAAgB,eAAhBA,EAAOC,IAAP,IAQ9C,CAAA,GALDI,EACJI,EAAkBH,MAChB,SAACN,GAAW,MAAoB,YAApBA,EAAOrC,UAA8C,KAApBqC,EAAOrC,QAAe,KAChE8C,EAAkB,IAEFJ,EAAc1C,SAAW,kBAGhD,kBADAzE,QAAQwD,KAAK,4CAA6CgE,GAC1D,CAAA,EAAO,oCAIXtE,mBAAiB,oCAAoC,SAAChC,GAC/BqD,EAAAA,eAAA,OAAA,OAAA,GAAA,+FAGnB,OAAKkD,OAFCA,EAA0BjG,EAAAA,MAAMC,WAAWgC,OAAOiE,oBAEnDD,EAAoBxF,UAKrBuC,EAAiBtD,EAAKuD,WAGe,YAAnBD,EACA,CAAA,GApIkBC,EAoIiBD,EApIDD,EAAAA,eAAA,OAAA,OAAA,GAAA,+EAExD,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,GAAO,UAMT,MAAA,CAAA,EAHgB9I,EAA+C8G,OAC5BkC,QAAO,SAACC,GAAW,MAAgB,gBAAhBA,EAAOC,IAAP,IAE5BC,MAAK,SAACF,GAAW,OAAAA,EAAOrC,WAAaA,CAApB,YAG3C,kBADAzE,QAAQwD,KAAK,sCAAuCmE,GACpD,CAAA,GAAO,6BAuH2C,CAAA,EAAA,IAPhD3H,QAAQwD,KAAK,sCACP,CAAA,kBAOc3F,EAAkD8G,OAEtD,CAAA,EAAA,IACd3E,QAAQwD,KACN,8BAAuBgB,EAAc,mDAEtB,CAAA,EAzHWD,EAAAA,eAAA,OAAA,OAAA,GAAA,qFAEhC,6BAAK1B,UAAU6D,cAAiB7D,UAAU6D,aAAaC,iBAIvC,CAAA,EAAM9D,UAAU6D,aAAaC,oBAH3C,CAAA,EAAO,kBAYT,OATMC,EAAU/I,EAA+C8G,OACzDiD,EAAqBhB,EAAQC,QAAO,SAACC,GAAW,MAAgB,gBAAhBA,EAAOC,IAAP,IAQ/C,CAAA,GALDI,EACJS,EAAmBR,MACjB,SAACN,GAAW,MAAoB,YAApBA,EAAOrC,UAA8C,KAApBqC,EAAOrC,QAAe,KAChEmD,EAAmB,IAEHT,EAAc1C,SAAW,kBAGhD,kBADAzE,QAAQwD,KAAK,gCAAiCqE,GAC9C,CAAA,EAAO,4CAuGHrD,EAAiB3G,SAGjBgH,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,qBAM9D,8BAAM,CAAA,EAAAiD,EAAmBxF,QAAQ6F,UAAUtD,kBAA3C3G,EAAA8G,OACA3E,QAAQC,KAAK,qDAGb4E,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,IAC5D7D,gBAAc,oCAAqC,CAAA,4BAEnDX,QAAQ2D,IAAI,yDAA0DoE,kDAI9DC,EAAe,IAAK/K,OAAOgL,cAAiBhL,OAAeiL,oBAC3DC,EAAaH,EAAaI,mBAC1BC,EAAWL,EAAaM,aAG9BH,EAAWI,UAAUC,eAAe,IAAKR,EAAaS,aACtDJ,EAASK,KAAKF,eAAe,EAAGR,EAAaS,aAE7CN,EAAWQ,QAAQN,GAGbO,EAAcZ,EAAaa,+BACjCR,EAASM,QAAQC,GAGjBnB,EAAmBxF,QAAQ6G,UAAYF,EAAYG,OAGnDZ,EAAWa,QAGXtI,YAAW,WAAA,OAAA6D,iBAAA,OAAA,OAAA,GAAA,iFAEP,6BAAM,CAAA,EAAAkD,EAAmBxF,QAAQ6F,UAAUtD,kBAA3C3G,EAAA8G,OACA3E,QAAQC,KACN,2EAIFkI,EAAWc,OACXjB,EAAakB,QACbzB,EAAmBxF,QAAQ6G,UAAY,KAGvCjE,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,IAC5D7D,gBAAc,oCAAqC,CAAA,gBAU/C,cARJX,QAAQmJ,MAAM,kCAAmCC,GAGjDjB,EAAWc,OACXjB,EAAakB,QACbzB,EAAmBxF,QAAQ6G,UAAY,KAGhB,YAAnBtE,EAAA,MAA4B,CAAA,EAAA,GAC9BxE,QAAQ2D,IAAI,sDAEV,6BAAM,CAAA,EAAA8D,EAAmBxF,QAAQ6F,UAAU,0BAA3CjK,EAAA8G,OACAE,EAAAA,YAAY,mCAAoC,CAAEJ,SAAU,YAC5DzE,QAAQC,KAAK,8EAEbD,QAAQmJ,MAAM,8BAA+BE,uBAKjDxE,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,IAC5D7D,gBAAc,oCAAqC,CAAA,mCAEpD,mBAKC,cAHJX,QAAQmJ,MAAM,2CAA4CG,GAGnC,YAAnB9E,EAAA,MAA4B,CAAA,EAAA,qBAE5B,+BAAM,CAAA,EAAAiD,EAAmBxF,QAAQ6F,UAAU,0BAA3CjK,EAAA8G,OACAE,EAAAA,YAAY,mCAAoC,CAAEJ,SAAU,YAC5DzE,QAAQC,KAAK,0FAEbD,QAAQmJ,MAAM,+CAAgDI,GAC9D1E,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,wCAG9DK,EAAAA,YAAY,mCAAoC,CAAEJ,SAAUD,8BAG9D7D,gBAAc,oCAAqC,CAAA,iDA5OtB,IAAO8D,OAkP5C,IAGAvB,mBAAiB,gCAAgC,SAAChC,GAChDsI,EAAoBA,qBAACtI,GACrBP,gBAAc,gCAAiC,CAAA,EACjD,IAEAuC,mBAAiB,6BAA6B,SAAChC,GAC7C,IAAMuI,EAAWvI,aAAA,EAAAA,EAAMuI,SACvBjI,EAAAA,MAAM2B,SAASC,OAAOE,cAAcmG,EACtC,IAEA,IAAMhC,GAA0BjG,EAAKA,MAACC,WAAWgC,OAAOiE,YAGxDxH,EAAAA,WAAU,iBACR,GAAImF,IAAwBoC,GAAoB,CAC9C,IAAMiC,EAEH,QAFmC7L,EAAA8L,EAAWA,YAC/C,2CACC,IAAA9L,OAAA,EAAAA,EAAA4G,SACH9D,EAAAA,cAAc,mCAAoC,CAChD8D,SAAUiF,IAEZpE,IAAwB,EACzB,CACH,GAAG,CAACD,GAAsBoC,KAE1BvH,EAAAA,WAAU,WACR0J,EAAAA,gBACD,GAAE,IAEH1G,mBAAiB,6BAA6B,SAAChC,GAC7C2I,WAAS3I,eAAAA,EAAM4I,cACjB,IAEA5G,mBAAiB,sCAAsC,SAAChC,GACtDM,EAAAA,MAAM2B,SAAS4G,YAAYC,2BAA2B9I,aAAA,EAAAA,EAAM+I,yBAC5DtJ,gBAAc,sCAAuC,CAAA,EACvD,IAEAuC,mBAAiB,sBAAsB,SAAChC,GACtCM,EAAKA,MAAC2B,SAASzB,OAAOwI,SAAShJ,EAAKiJ,WACtC,IAGAjH,EAAgBA,iBAAC,kCAAkC,WACjD,IACMkH,EADY5I,EAAKA,MAACC,WAAW4I,UAAUC,mBACdC,KAAI,SAACC,GAAM,MAAC,CACzCC,KAAMD,EAAEC,KACRC,YAAaF,EAAEE,YACfC,YAAaH,EAAEG,YACf,IACFhK,EAAAA,cAAc,0CAA2C,CAAE0J,UAAWD,GACxE,IAEAlH,mBAAiB,oCAAoC,SAAChC,IAChDA,eAAAA,EAAMuJ,QAER5F,EAAWA,YAAC,iCAAkC,CAAE+F,MAAO1J,EAAKuJ,OAE5DjJ,EAAKA,MAAC2B,SAASkH,UAAUQ,oBAAoB3J,EAAKuJ,MAClD9J,EAAaA,cAAC,qCAAsC,CAAE8J,KAAMvJ,EAAKuJ,OAErE,IAEAvH,mBAAiB,oCAAoC,SAAChC,IAChDA,eAAAA,EAAMuD,YAERI,EAAWA,YAAC,sCAAuC,CAAE+F,MAAO1J,EAAKuD,WAEjEjD,EAAKA,MAAC2B,SAASkH,UAAUS,kBAAkB5J,EAAKuD,UAChD9D,EAAaA,cAAC,2CAA4C,CAAE8D,SAAUvD,EAAKuD,WAE/E,IAGAvE,EAAAA,WAAU,WACR,IAAM6K,EAAgBpB,cAAY,kCAC5BqB,EAAoBrB,cAAY,wCAElCoB,eAAAA,EAAeH,QACjBpJ,EAAKA,MAAC2B,SAASkH,UAAUQ,oBAAoBE,EAAcH,QAEzDI,eAAAA,EAAmBJ,QACrBpJ,EAAKA,MAAC2B,SAASkH,UAAUS,kBAAkBE,EAAkBJ,MAEhE,GAAE,IAGH1H,EAAgBA,iBAAC,iCAAiC,WAChD+H,4BAA0BC,MAAK,SAACC,GAC1BA,EACFxK,gBAAc,kCAAmC,CAAA,GAEjDA,gBAAc,qCAAsC,CAAA,EAExD,GACF,IAGAT,EAAAA,WAAU,WACR,IAAMkL,EAAa7J,aAAY,WAC7B0J,4BAA0BC,MAAK,SAACC,GAC1BA,EACFxK,gBAAc,kCAAmC,CAAA,GAEjDA,gBAAc,qCAAsC,CAAA,EAExD,GACD,GAAE,KAEH,OAAO,WAAM,OAAAsC,cAAcmI,EAAW,CACvC,GAAE,IAEHlI,mBAAiB,8BAA8B,SAAChC,eACxCmK,EAAgE,QAA9BxN,EAAA2D,EAAAA,MAAMC,WAAWsI,mBAAa,IAAAlM,OAAA,EAAAA,EAAAyN,SAChEC,EAAyB/J,EAAAA,MAAMC,WAAWsI,YAC5CyB,EAAgCD,aAAA,EAAAA,EAAmBE,aACvD,QACiCC,IAA/BL,GAC+B,KAA/BA,IACCM,EAAOA,QAACzK,EAAKmK,UACqCK,KAAjB,QAAlC1N,EAAAkD,EAAKmK,UAA6B,IAAArN,OAAA,EAAAA,EAAAyN,cAClC,CACA,IAAIG,EAAyD,QAAlCzN,EAAA+C,EAAKmK,UAA6B,IAAAlN,OAAA,EAAAA,EAAAsN,aAC7DjK,EAAKA,MAAC2B,SAAS4G,YAAY8B,mBAAqD,QAAlC7M,EAAAkC,EAAKmK,UAA6B,IAAArM,OAAA,EAAAA,EAAAyM,cAE3C,WADFG,GACgD,WAAlCJ,GAC/C7K,gBAAc,0BAA2B,CAAA,EAE5C,CACH,IAEAuC,EAAgBA,iBAAC,4BAA4B,WAC3C,IAAM4I,EAAkBtK,EAAAA,MAAMC,WAAWW,YACzCpC,QAAQ2D,IAAI,mCAAoCmI,EAClD,IAEA,IAAMC,GAAuB,SAACC,EAAgBC,EAAiBC,EAAaC,EAAeC,GACzF,IAAMC,EAAe7K,EAAAA,MAAMC,WAAW2E,SAEtC,GAAKiG,eAAAA,EAAc7F,YAAnB,CAIA,IAAMJ,EAAWiG,EAAapG,KAAO,GAErC,GAAKG,EAAL,CAIQ,IAAAkG,EAAc9K,EAAKA,MAACC,WAAW2B,OAAMkJ,UACvCC,EAAmBF,EAAaE,iBAEtC,IAAID,GAAkC,WAArBC,EAAjB,CAIA,IAAIC,EAAepG,EAEfoG,EAAapP,SAAS,mBAAqB4O,IAC7CQ,EAAeA,EAAaC,QAAQ,mBAAoBC,mBAAmBV,KAEzEQ,EAAapP,SAAS,iBAAmB6O,IAC3CO,EAAeA,EAAaC,QAAQ,iBAAkBC,mBAAmBT,KAEvEO,EAAapP,SAAS,cAAgB+O,IACxCK,EAAeA,EAAaC,QAAQ,cAAeC,mBAAmBP,KAEpEK,EAAapP,SAAS,YAAc8O,IACtCM,EAAeA,EAAaC,QAAQ,YAAaC,mBAAmBR,KAElEM,EAAapP,SAAS,YAAc4O,IACtCQ,EAAeA,EAAaC,QAAQ,aAAcC,mBAAmBV,KAGvE,IAAMW,EAAeH,EAAaI,WAAW,QAAUJ,EAAe,WAAW1H,OAAA0H,GAEjF,GAAe,WAAXtO,IAAwBE,GAAqBgO,EAAW,CAC1D,IAAMS,EAAY5P,OAAO6P,KAAK,cAAe,UACzCD,IACFA,EAAU3P,SAAS6P,KAAOJ,EAC1BnL,EAAAA,MAAM2B,SAASC,OAAO4J,cAAa,GAEtC,MACCrM,EAAAA,cAAc,6CAA8C,CAAEgM,aAAYA,GA7B3E,CAPA,CANA,CA4CH,EAqaA,OAnaAzJ,EAAgBA,iBAAC,6CAA6C,WAC5D1B,EAAAA,MAAM2B,SAASC,OAAO4J,cAAa,EACrC,IAEA9J,mBAAiB,qCAAqC,SAAChC,GACrD,IAAMmL,EAAe7K,EAAAA,MAAMC,WAAW2E,SAEtC,GAAKiG,EAAa7F,cAIIhF,EAAKA,MAACC,WAAW2B,OAAMkJ,UAC7C,CAIA,IAAMhG,EAAa+F,EAAa/F,aAAc,EACxC2G,EAAeC,EAAAA,YAAYhM,aAAI,EAAJA,EAAMiM,gBACvC3L,EAAAA,MAAM2B,SAASiD,SAASgH,gBAAgBH,GAGhC,IAAAI,EAAmB7L,EAAKA,MAACC,WAAWsI,YAAWsD,eACjDjB,IAAyB,YAAXlO,GAAiD,cAAzBmP,eAAAA,EAAgBtM,OAEpC,QAApBG,aAAI,EAAJA,EAAMoM,cACW,IAAfhH,IAA8C,KAAvBpF,aAAI,EAAJA,EAAMqM,cAC/BxB,GACE7K,eAAAA,EAAMiM,eACNjM,aAAA,EAAAA,EAAMsM,gBACNtM,aAAA,EAAAA,EAAMuM,MACNvM,aAAI,EAAJA,EAAMwM,SACNtB,IAEsB,IAAf9F,IAA0C,IAAjB2G,IAAgD,KAAvB/L,eAAAA,EAAMqM,eACjExB,GACE7K,eAAAA,EAAMiM,eACNjM,aAAA,EAAAA,EAAMsM,gBACNtM,aAAA,EAAAA,EAAMuM,MACNvM,aAAI,EAAJA,EAAMwM,SACNtB,GAzBL,CA6BH,IAEAlJ,EAAgBA,iBAAC,4BAA4B,WAC3C,IAAMyK,EAAkBnM,EAAAA,MAAMC,WAAWsI,YACzC/J,QAAQ2D,IAAI,mCAAoCgK,EAClD,IAEAzK,EAAgBA,iBAAC,iCAAiC,WAChD,IAAM0K,EAAsBpM,EAAAA,MAAMC,WAAWoM,MAC7C7N,QAAQ2D,IAAI,oCAAqCiK,EACnD,IAEA1K,EAAgBA,iBAAC,uBAAuB,WACtC,IAAM4K,EAAyBtM,EAAAA,MAAMC,WAAW2B,OAChDpD,QAAQ2D,IAAI,2CAA4CmK,EAC1D,IAEA5K,EAAgBA,iBAAC,8BAA8B,WAC7C,IAAM6K,EAAoBvM,EAAAA,MAAMC,WAAWU,OAC3CnC,QAAQ2D,IAAI,qCAAsCoK,EACpD,IAEA7K,EAAgBA,iBAAC,8BAA8B,WAC7C,IAAM8K,EAAoBxM,EAAAA,MAAMC,WAAWgC,OAC3CzD,QAAQ2D,IAAI,qCAAsCqK,EACpD,IAEA9K,EAAgBA,iBAAC,kCAAkC,WACjD,IAAM+K,EAAwBzM,EAAAA,MAAMC,WAAWyM,WAC/ClO,QAAQ2D,IAAI,qCAAsCsK,EACpD,IAEA/K,EAAgBA,iBAAC,iCAAiC,WAChD,IAAMiL,EAAuB3M,EAAAA,MAAMC,WAAW2M,UAC9CpO,QAAQ2D,IAAI,wCAAyCwK,EACvD,IAEAjL,EAAgBA,iBAAC,gCAAgC,WAC/C,IAAMmL,EAAW7M,EAAAA,MAAMC,WAAW2E,SAClCpG,QAAQ2D,IAAI,uCAAwC0K,EACtD,IAEAnL,EAAgBA,iBAAC,6BAA6B,WAC5C,IAAMoL,EAAmB9M,EAAAA,MAAMC,WAAW8M,MAC1CvO,QAAQ2D,IAAI,oCAAqC2K,EACnD,IAEApL,EAAgBA,iBAAC,kCAAkC,WACjD1B,EAAAA,MAAM2B,SAASM,OAAO1D,QACtBC,QAAQ2D,IAAI,8BACd,IAGAT,EAAgBA,iBAAC,gCAAgC,WAC/CsL,EAAAA,uBACA7N,gBAAc,iCAAkC,CAAA,EAClD,IAEAuC,EAAgBA,iBAAC,8BAA8B,WAC7C1B,EAAAA,MAAM2B,SAASC,OAAOqL,uBAAsB,GAC5CjN,EAAAA,MAAM2B,SAASC,OAAO4J,cAAa,GACnCrM,gBAAc,+BAAgC,CAAA,EAChD,IAEAuC,EAAgBA,iBAAC,+BAA+B,WAC9C1B,EAAAA,MAAM2B,SAASC,OAAOqL,uBAAsB,GAC5C9N,gBAAc,+BAAgC,CAAA,EAChD,IAEAuC,EAAgBA,iBAAC,oCAAoC,WACnD1B,EAAAA,MAAM2B,SAASC,OAAOsL,gCAA+B,IACjD9O,EAA+BqC,SAAWpC,EAA+BoC,WAC3EtB,EAAAA,cAAc,kCAAmC,CAC/CgO,SAAU/O,EAA+BqC,QACzC2M,SAAU/O,EAA+BoC,UAE3CrC,EAA+BqC,QAAU,KACzCpC,EAA+BoC,QAAU,MAE3CtB,gBAAc,oCAAqC,CAAA,EACrD,IAEAuC,mBAAiB,mCAAmC,SAAChC,GACnD,IAAM0N,EAAW1N,aAAA,EAAAA,EAAM0N,SACjBD,EAAWzN,aAAA,EAAAA,EAAMyN,UAClBC,GAAaD,KAGlB9O,EAA+BoC,QAAU2M,GAAY,KACrDhP,EAA+BqC,QAAU0M,GAAY,KACrDhO,EAAAA,cAAc,mCAAoC,CAChDiO,SAAQA,EACRD,SAAQA,IAEVnN,EAAAA,MAAM2B,SAASC,OAAOsL,gCAA+B,GACrD/N,gBAAc,oCAAqC,CAAA,GACrD,IAEAuC,EAAgBA,iBAAC,2BAA2B,WAEpC,IAAArF,EAAmE2D,EAAKA,MAACC,WAAWW,YAAlFC,EAAQxE,EAAAwE,SAAEwM,EAAQhR,EAAAgR,SAAEvM,EAAQzE,EAAAyE,SAAEwM,EAAcjR,EAAAiR,eAAEC,EAAclR,EAAAkR,eAGpE,GAFsB1M,GAAYwM,GAAYvM,GAAYwM,GAAkBC,EAG1E/O,QAAQ2D,IAAI,uEAKd,GAAK7E,GAAgC,iBAAbA,GAA6C,IAApBA,EAASkQ,OAA1D,CAKQ,IAAAC,EAAiBzN,EAAKA,MAACC,WAAWsI,YAAWkF,aAC/CC,EAAgBD,aAAA,EAAAA,EAAcE,WAE9BC,EAAcF,GAA0C,iBAAlBA,GAA8BA,EAAcF,OAAS,EAC7FE,EACA,MAEJlP,QAAQ2D,IAAI,kDAAmD,CAAEyL,WAAUA,EAAEtQ,SAAQA,IACrFuQ,aAAWD,EAAYtQ,EAVtB,MAFCkB,QAAQwD,KAAK,gEAAiE,CAAE1E,SAAQA,GAa5F,IAEAoE,EAAgBA,iBAAC,qCAAqC,WAC5C,IACFoM,GADiC9N,EAAKA,MAACC,WAAW2B,OAAMmM,2BAE9D/N,EAAAA,MAAM2B,SAASC,OAAOsL,+BAA+BY,GACrD3O,EAAAA,cACE2O,EAAW,oCAAsC,oCACjD,CAAE,EAEN,IAGApM,EAAAA,iBACE,mCACA,SAAOhC,GAAoF,OAAAqD,EAAAA,eAAA,OAAA,OAAA,GAAA,mGAGzF,OAFMqK,GAAW1N,aAAI,EAAJA,EAAM0N,YAAY1N,aAAI,EAAJA,EAAMwM,UACnCiB,GAAWzN,aAAI,EAAJA,EAAMyN,YAAYzN,aAAI,EAAJA,EAAMiL,UACpCyC,EAIAD,GAIC9Q,EAAiD2D,EAAAA,MAAMC,WAAWyM,WAAhEsB,EAAQ3R,EAAA2R,SAAEC,EAAS5R,EAAA4R,UAAEC,0BACvB1R,EAAqBwD,EAAKA,MAACC,WAAWsI,YAApCU,EAAIzM,EAAAyM,KAAEa,EAAQtN,EAAAsN,SAChBqE,EACJH,IACCE,IAA0BpE,KACtBmE,GAAaG,OAAOC,OAAOJ,GAAWzI,MAAK,SAAC8I,GAAc,OAAAA,EAAKrF,OAASA,CAAI,KAE/EkF,EACI,CAAA,GAGR,CAAA,EAAM,IAAII,SAAQ,SAAAC,GAAW,OAAAtP,WAAWsP,EAAS,IAApB,MAdrB,CAAA,GAJA,CAAA,UAkBR7R,EAAAwG,wBAG+B,6BAAA,CAAA,EAAMoL,kDAAO,qBAAiB,YAC3D,MAAA,CAAA,GADQE,EAAqB9R,EAA+BwG,OAApCsL,kBACDtB,EAAUC,kBAAjCzQ,EAAAwG,OACAuL,uBAAqB,CACnBtB,SAAQA,EACRD,SAAQA,EACRwB,OAAQ,8BAIY,OAAlBC,wBAAK,EAALA,EAAOC,SACTC,0BAAwB,CACtB1B,SAAQA,EACRD,SAAQA,EACRwB,OAAQ,oCAIf,GAAA,IAIHjN,EAAAA,iBACE,oCACA,SAAOhC,GAA8C,OAAAqD,EAAAA,eAAA,OAAA,OAAA,GAAA,iFAInD,GAHMqK,EAAW1N,eAAAA,EAAM0N,SACjBD,EAAWzN,eAAAA,EAAMyN,UAElBC,EACH,MAAM,CAAA,GAGR,IAAKD,EACH,MAAM,CAAA,oBAIuB,6BAAA,CAAA,EAAMoB,kDAAO,qBAAiB,YAC3D,MAAA,CAAA,GADQQ,EAAqBvS,EAA+B2G,OAApC4L,kBACD3B,EAAUD,kBAAjC3Q,EAAA2G,OAEAhE,EAAAA,cAAc,qCAAsC,CAClDiO,SAAQA,EACRD,SAAQA,iBAGV,gBAAM,CAAA,uBAET,GAAA,IAGHzL,mBAAiB,4BAA4B,SAAChC,GACtC,IAAArD,EACJ2D,EAAKA,MAACC,WAAW2B,OADXoN,EAAiB3S,EAAA2S,kBAAEjB,EAA0B1R,EAAA0R,2BAAEkB,oBAI/CC,EAAoBxP,EAAIwP,gBAG1BC,EAAsBlT,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACvBiT,GAAe,CAClBE,MAAOJ,EAAoB,OAAS,MACpCK,IAAKC,qBAAqB,OAAS,MACnCC,oBACExB,GAA8BkB,EAC1B,QACAlB,IAA+BkB,EAC/B,QACA,QAER9P,EAAAA,cAAc,4BAA6B,CAAEqQ,MAAOL,GACtD,IAGAzN,EAAgBA,iBAAC,2BAA2B,WAE1C,GAAqB,WADI1B,EAAKA,MAACC,WAAWsI,YAAW0B,aACtB,CAK7B9K,EAAAA,cAAc,2BAA4B,CAAE+P,gBAJf,CAC3BO,MAAO,MACPC,OAAQ,SAGVvQ,gBAAc,8BAA+B,CAAA,GAC7Ca,EAAAA,MAAM2B,SAASC,OAAO+N,yBACtB3P,EAAAA,MAAM2B,SAASiD,SAASgH,iBAAgB,EACzC,CACH,IAEAlK,EAAgBA,iBAAC,qCAAqC,WACpD1B,EAAAA,MAAM2B,SAASC,OAAOgO,sBAAqB,GAC3CzQ,gBAAc,sCAAuC,CAAA,EACvD,IAEAuC,mBAAiB,8BAA8B,SAAChC,GAEtC,IAAAmQ,EAAsB7P,EAAAA,MAAMC,WAAWC,OAAO2O,OAAMgB,kBACtDxT,EAAyB2D,EAAAA,MAAMC,WAAW2B,OAAxCG,EAAI1F,EAAA0F,KAAE+N,iBACN9B,EAAahO,EAAKA,MAACC,WAAWyM,WAAUsB,SAC1C+B,EAAa/P,EAAKA,MAACC,WAAWC,OAAOR,KACrCkB,EAAcZ,EAAAA,MAAMC,WAAWW,YAC7ByM,EAAiCzM,EAAWyM,SAAlCvM,EAAuBF,EAAWE,SAAxBD,EAAaD,WAGnCoP,EAAYtQ,aAAA,EAAAA,EAAMH,KAGlB0Q,EACJrP,EAAYyM,UACZzM,EAAYE,UACZF,EAAYC,UACmB,KAA/BD,EAAYsP,eAsBd,KAlBE7C,GACAvM,GACAD,GACAgP,EAAoB,GACX,WAAT9N,GACS,aAATA,GACS,0BAATA,GACU,sBAATA,GAAgCiM,GACvB,aAATjM,GAAuBiM,GACd,aAATjM,GAAuBiM,GACd,aAATjM,IAAyC,aAAjB+N,GAAgD,WAAjBA,IAC9C,iBAAT/N,IAA4BiM,IASP,IAAtB6B,KACEG,GAAcD,EAAWC,KAAeD,EAAWC,GAAW3P,UAC/D4P,EACD,CAKA9Q,EAAAA,cAAc,2BAA4B,CAAE+P,gBAJf,CAC3BO,MAAO,MACPC,OAAQ,SAGVvQ,gBAAc,8BAA+B,CAAA,GAC7Ca,EAAAA,MAAM2B,SAASC,OAAO+N,wBACvB,CACH,IAEAjO,EAAgBA,iBAAC,sCAAsC,WACrD1B,EAAAA,MAAM2B,SAASC,OAAOgO,sBAAqB,GAC3CzQ,gBAAc,sCAAuC,CAAA,EACvD,IAGAuC,mBAAiB,8BAA8B,SAAChC,SAExCoK,EAAWsE,OAAO+B,KAAKzQ,GAAM,GAGnC,GAAIoK,KAFkE,QAA9BzN,EAAA2D,EAAAA,MAAMC,WAAWsI,mBAAa,IAAAlM,OAAA,EAAAA,EAAAyN,UAEzB,CAC3C,IAAMsG,EAAgB1Q,EAAKoK,GAAUsG,cAC/BvF,EAAe7K,EAAAA,MAAMC,WAAW2E,SAC9BkG,EAAc9K,EAAKA,MAACC,WAAW2B,OAAMkJ,UAG7C,IAAKD,EAAa7F,aAAe8F,EAC/B,OAIF,GAAsC,aAAlCD,EAAaE,kBAEXqF,GAAiBhC,OAAO+B,KAAKC,GAAe5C,OAAS,EAAG,CAE1D,IACM6C,EAAOD,EADEhC,OAAO+B,KAAKC,GAAe,IAElCvE,EAAmB7L,EAAKA,MAACC,WAAWsI,YAAWsD,eACjDjB,IAAyB,YAAXlO,GAAiD,cAAzBmP,eAAAA,EAAgBtM,OAG5D,IAAI8Q,aAAA,EAAAA,EAAMC,YAAiC,QAApBD,aAAA,EAAAA,EAAMvE,WAAoB,CAC/C,IAAMhH,EAAa+F,EAAa/F,aAAc,EACxCyL,EAAyB7E,EAAAA,YAAY2E,EAAK1E,gBAEhD3L,EAAAA,MAAM2B,SAASiD,SAASgH,gBAAgB2E,IAGrB,IAAfzL,IAA8C,KAAvBuL,aAAI,EAAJA,EAAMtE,cAE/BxB,GACE8F,EAAK1E,eACL0E,EAAKrE,gBACLqE,EAAKpE,MACLoE,EAAK1F,SACLC,IAGa,IAAf9F,IAC4B,IAA3ByL,IAA0D,KAAvBF,aAAI,EAAJA,EAAMtE,eAG1CxB,GACE8F,EAAK1E,eACL0E,EAAKrE,gBACLqE,EAAKpE,MACLoE,EAAK1F,SACLC,EAGL,CACF,CAEJ,CACH,IAGE4F,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,UAAAC,cAACE,EAAQ,QAAC,CAAA3Q,MAAOA,SACd5C,GAAkC,KAArBA,EAAUuH,OAEtB6L,EAAAA,QAAAC,cAACG,SACC,CAAAC,SAAU5T,EACV6T,SAAU1T,EACV2T,UAAW1T,EACX2T,QAAS1T,EACT2T,QAAS1T,EACTG,OAAQA,EACRwT,iBAAkB,WAAM,OAAApT,GAAkB,IAC1CpB,OAAQA,GAER8T,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAU5T,EAAW6M,SAAU5M,EAAUkU,UAAWjU,GAC3DqT,UAAAC,cAACY,EAAAA,OAAM,CACLR,SAAU5T,EACV6M,SAAU5M,EACVkU,UAAWjU,EACXO,OAAQA,EACRwT,iBAAkB,WAAM,OAAAjT,GAAkB,EAAlB,EACxBvB,OAAQA,GAER8T,EAAAA,QAAAC,cAACa,EAAAA,OAAM,CAACN,QAAS1T,GACfkT,UAAAC,cAACc,EAAMA,OAAC,CAAA9U,WAAYA,EAAYC,OAAQA,QAOhD8T,UAAAC,cAACU,EAAOA,QAAA,CAACN,SAAU5T,EAAW6M,SAAU5M,EAAUkU,UAAWjU,GAC3DqT,EAAAA,QAAAC,cAACY,EAAAA,OACC,CAAAR,SAAU5T,EACV6M,SAAU5M,EACVkU,UAAWjU,EACXO,OAAQA,EACRwT,iBAAkB,WAChBjT,GAAkB,GAClBH,GAAkB,IAEpBpB,OAAQA,GAER8T,EAAAA,QAAAC,cAACa,EAAAA,OAAM,CAACN,QAAS1T,GACfkT,EAAAA,QAAAC,cAACc,SAAO,CAAA9U,WAAYA,EAAYC,OAAQA,QAQxD,IAEAP,EAAqB+M,YAAc,uBAEtB,IAAAsI,EAAcpV,EAAUA,YACnC,SAACqV,EAAOnV,GAAQ,OAAAkU,wBAACrU,EAAoBF,EAAAA,SAAA,CAAA,EAAKwV,EAAK,CAAEnV,IAAKA,QAGxDkV,EAAYtI,YAAc"}
|
package/dist/_virtual/index6.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0})
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
2
2
|
//# sourceMappingURL=index6.js.map
|
package/dist/_virtual/index8.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0})
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.exports={};var e={get exports(){return exports.exports},set exports(e){exports.exports=e}};exports.__module=e;
|
|
2
2
|
//# sourceMappingURL=index8.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../node_modules/tslib/tslib.es6.js"),i=require("react");require("../../../node_modules/react-redux/es/index.js");var n=require("../../../store/index.js"),r=require("../../../utils/deviceUtils.js"),u=require("../../../lib/webrtc/janus.js"),o=require("../../../lib/phone/trunk.js"),l=require("../../../lib/devices/devices.js"),t=require("../../../utils/genericFunctions/eventDispatch.js"),s=require("../../../node_modules/react-redux/es/hooks/useDispatch.js"),d=require("../../../node_modules/react-redux/es/hooks/useSelector.js");exports.useSideViewLogic=function(a){var c,v,p,h,f,b,g,m,_=s.useDispatch(),S=d.useSelector((function(e){return e.currentUser})),k=d.useSelector((function(e){return e.users})),j=d.useSelector((function(e){return e.paramUrl})),w=n.store.select.mediaDevices.videoInputDevices(n.store.getState()),q=i.useRef(u.default),V=d.useSelector((function(e){return e.currentUser.conversations})),C=i.useState([]),D=C[0],T=C[1],U=i.useState(!0),y=U[0],I=U[1],x=i.useCallback((function(){var e=Object.values(V).find((function(e){return Object.keys(e).length>0}));return e?Object.values(e)[0]:null}),[V]),O=i.useCallback((function(e){if(_.island.toggleSideViewVisible(!1),"openUrl"===e){var i=Object.values(V).find((function(e){return Object.keys(e).length>0})),n=i?Object.values(i)[0]:null;if((null==n?void 0:n.connected)&&"in"===(null==n?void 0:n.direction)){var r={counterpartNum:n.counterpartNum,counterpartName:n.counterpartName,owner:n.owner,uniqueId:n.uniqueId,linkedId:n.linkedId,throughQueue:n.throughQueue,throughTrunk:n.throughTrunk,direction:n.direction,connected:n.connected};t.eventDispatch("phone-island-url-parameter-opened",r)}}else null!==e&&_.island.setIslandView(e)}),[_.island,V]),Q=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var i;return e.__generator(this,(function(e){switch(e.label){case 0:return w.length>0?[4,l.checkWebCamPermission()]:[3,2];case 1:return i=e.sent(),I(i),[2,i];case 2:return I(!1),[2,!1]}}))}))}),[w.length]),E=i.useCallback((function(){return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,Q()];case 1:return e.sent()&&(O("video"),n.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0,isStartingVideoCall:!0})),[2]}}))}))}),[Q,O]),M=i.useCallback((function(){O("video"),n.store.dispatch.screenShare.update({isStartingScreenShare:!0})}),[O]),N=i.useMemo((function(){var e;return(null===(e=null==S?void 0:S.profile)||void 0===e?void 0:e.macro_permissions)||{}}),[null===(c=null==S?void 0:S.profile)||void 0===c?void 0:c.macro_permissions]),P=i.useMemo((function(){var e,i,n,r,u,o,l,t,s;return{canRecord:(null===(n=null===(i=null===(e=null==N?void 0:N.settings)||void 0===e?void 0:e.permissions)||void 0===i?void 0:i.recording)||void 0===n?void 0:n.value)||!1,canShareScreen:"safari"!==(null===(o=null===(u=null===(r=null==q?void 0:q.current)||void 0===r?void 0:r.webRTCAdapter)||void 0===u?void 0:u.browserDetails)||void 0===o?void 0:o.browser)&&((null===(s=null===(t=null===(l=null==N?void 0:N.nethvoice_cti)||void 0===l?void 0:l.permissions)||void 0===t?void 0:t.screen_sharing)||void 0===s?void 0:s.value)||!1),canSwitchDevice:(null==D?void 0:D.length)>0}}),[null===(h=null===(p=null===(v=null==N?void 0:N.settings)||void 0===v?void 0:v.permissions)||void 0===p?void 0:p.recording)||void 0===h?void 0:h.value,null===(g=null===(b=null===(f=null==N?void 0:N.nethvoice_cti)||void 0===f?void 0:f.permissions)||void 0===b?void 0:b.screen_sharing)||void 0===g?void 0:g.value,null==D?void 0:D.length,null===(m=null==S?void 0:S.default_device)||void 0===m?void 0:m.type,a]),A=i.useMemo((function(){var e=x();if("never"===j.openParamUrlType)return!1;if(!(null==e?void 0:e.connected)||"in"!==(null==e?void 0:e.direction))return!1;if("button"===j.openParamUrlType){if(j.onlyQueues&&(null==e?void 0:e.throughQueue))return!0;if(!j.onlyQueues&&(o.isFromTrunk(e.counterpartNum)||(null==e?void 0:e.throughQueue)))return!0}return!1}),[x,j.onlyQueues,j.openParamUrlType]);i.useEffect((function(){if(S&&k){var e=r.getAvailableDevices(S,k);T(e)}}),[S,k]);var L=i.useCallback((function(){var e=x(),i=(null==e?void 0:e.linkedId)||(null==e?void 0:e.linkedid),n=(null==e?void 0:e.uniqueId)||(null==e?void 0:e.uniqueid);(i||n)&&(_.island.toggleSideViewVisible(!1),t.eventDispatch("phone-island-transcription-open",{linkedid:i,uniqueid:n}))}),[_.island,x]),R=i.useMemo((function(){return(null==S?void 0:S.call_transcription_enabled)||!1}),[null==S?void 0:S.call_transcription_enabled]);return e.__assign(e.__assign({userInformation:S,availableDevices:D,videoInputDevices:w,isVideoCallButtonVisible:y,isUrlButtonEnabled:A,hasValidUrl:j.hasValidUrl,isTranscriptionEnabled:R},P),{goToVideoCall:E,goToScreenSharing:M,closeSideViewAndLaunchEvent:O,openTranscriptionView:L})};
|
|
2
2
|
//# sourceMappingURL=useSideViewLogic.js.map
|