@nethesis/phone-island 1.0.15 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/_virtual/index8.js +1 -1
  4. package/dist/_virtual/index9.js +1 -1
  5. package/dist/components/AlertView/index.js +1 -1
  6. package/dist/components/AlertView/index.js.map +1 -1
  7. package/dist/components/AudioPlayerView/Avatar.js +1 -1
  8. package/dist/components/AudioPlayerView/Avatar.js.map +1 -1
  9. package/dist/components/AudioPlayerView/PlayerFooterActions.js +1 -1
  10. package/dist/components/AudioPlayerView/PlayerFooterActions.js.map +1 -1
  11. package/dist/components/AudioPlayerView/Progress.js +1 -1
  12. package/dist/components/AudioPlayerView/Progress.js.map +1 -1
  13. package/dist/components/AudioPlayerView/index.js +1 -1
  14. package/dist/components/AudioPlayerView/index.js.map +1 -1
  15. package/dist/components/AvatarGroup.js +1 -1
  16. package/dist/components/AvatarGroup.js.map +1 -1
  17. package/dist/components/CallView/Actions.js +1 -1
  18. package/dist/components/CallView/Actions.js.map +1 -1
  19. package/dist/components/CallView/BackCall.js +1 -1
  20. package/dist/components/CallView/BackCall.js.map +1 -1
  21. package/dist/components/CallView/index.js +1 -1
  22. package/dist/components/CallView/index.js.map +1 -1
  23. package/dist/components/ConferenceView/ConferenceUsersList.js +1 -1
  24. package/dist/components/ConferenceView/ConferenceUsersList.js.map +1 -1
  25. package/dist/components/ConferenceView/index.js +1 -1
  26. package/dist/components/ConferenceView/index.js.map +1 -1
  27. package/dist/components/ContactView/ContactListView.js +1 -1
  28. package/dist/components/ContactView/ContactListView.js.map +1 -1
  29. package/dist/components/ContactView/ListAvatar.js +1 -1
  30. package/dist/components/ContactView/ListAvatar.js.map +1 -1
  31. package/dist/components/ContactView/SelectContactNumberView.js +1 -1
  32. package/dist/components/ContactView/SelectContactNumberView.js.map +1 -1
  33. package/dist/components/ContactView/TransferActions.js +1 -1
  34. package/dist/components/ContactView/TransferActions.js.map +1 -1
  35. package/dist/components/Dropdown.js +1 -1
  36. package/dist/components/Dropdown.js.map +1 -1
  37. package/dist/components/GenericAvatar.js +1 -1
  38. package/dist/components/GenericAvatar.js.map +1 -1
  39. package/dist/components/Hangup.js +1 -1
  40. package/dist/components/Hangup.js.map +1 -1
  41. package/dist/components/IslandMotion.js +1 -1
  42. package/dist/components/IslandMotion.js.map +1 -1
  43. package/dist/components/KeypadView/Actions.js +1 -1
  44. package/dist/components/KeypadView/Actions.js.map +1 -1
  45. package/dist/components/KeypadView/index.js +1 -1
  46. package/dist/components/KeypadView/index.js.map +1 -1
  47. package/dist/components/OperatorBusyView/index.js +1 -1
  48. package/dist/components/OperatorBusyView/index.js.map +1 -1
  49. package/dist/components/PhysicalRecorderView/index.js +1 -1
  50. package/dist/components/PhysicalRecorderView/index.js.map +1 -1
  51. package/dist/components/RecorderView/Actions.js +1 -1
  52. package/dist/components/RecorderView/Actions.js.map +1 -1
  53. package/dist/components/RecorderView/index.js +1 -1
  54. package/dist/components/RecorderView/index.js.map +1 -1
  55. package/dist/components/SettingsView/AudioView.js +1 -1
  56. package/dist/components/SettingsView/AudioView.js.map +1 -1
  57. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  58. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  59. package/dist/components/SettingsView/SettingsHeader.js +1 -1
  60. package/dist/components/SettingsView/SettingsHeader.js.map +1 -1
  61. package/dist/components/SettingsView/ThemeView.js +1 -1
  62. package/dist/components/SettingsView/ThemeView.js.map +1 -1
  63. package/dist/components/SettingsView/VideoInputView.js +1 -1
  64. package/dist/components/SettingsView/VideoInputView.js.map +1 -1
  65. package/dist/components/SettingsView/index.js +1 -1
  66. package/dist/components/SettingsView/index.js.map +1 -1
  67. package/dist/components/SideView/SideView.js.map +1 -1
  68. package/dist/components/SideView/components/SideViewButton.js +1 -1
  69. package/dist/components/SideView/components/SideViewButton.js.map +1 -1
  70. package/dist/components/Socket.js +1 -1
  71. package/dist/components/Socket.js.map +1 -1
  72. package/dist/components/StreamingAnswerView/index.js +1 -1
  73. package/dist/components/StreamingAnswerView/index.js.map +1 -1
  74. package/dist/components/SwitchDeviceView/index.js +1 -1
  75. package/dist/components/SwitchDeviceView/index.js.map +1 -1
  76. package/dist/components/SwitchInputView/DropdownContent.js +1 -1
  77. package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
  78. package/dist/components/SwitchInputView/Index.js +1 -1
  79. package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
  80. package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
  81. package/dist/components/TransferButton.js +1 -1
  82. package/dist/components/TransferButton.js.map +1 -1
  83. package/dist/components/VideoStreamingEmptyState/index.js +1 -1
  84. package/dist/components/VideoStreamingEmptyState/index.js.map +1 -1
  85. package/dist/components/VideoStreamingSkeleton/index.js +1 -1
  86. package/dist/components/VideoStreamingSkeleton/index.js.map +1 -1
  87. package/dist/components/VideoView/index.js +1 -1
  88. package/dist/components/VideoView/index.js.map +1 -1
  89. package/dist/components/WebRTC.js +1 -1
  90. package/dist/components/WebRTC.js.map +1 -1
  91. package/dist/events/CallEvents.js +1 -1
  92. package/dist/events/CallEvents.js.map +1 -1
  93. package/dist/events/RecorderEvents.js +1 -1
  94. package/dist/events/RecorderEvents.js.map +1 -1
  95. package/dist/index.css +1 -1
  96. package/dist/lib/devices/devices.js +1 -1
  97. package/dist/lib/devices/devices.js.map +1 -1
  98. package/dist/lib/phone/call.js +1 -1
  99. package/dist/lib/phone/call.js.map +1 -1
  100. package/dist/lib/phone/video.js +2 -0
  101. package/dist/lib/phone/video.js.map +1 -0
  102. package/dist/lib/webrtc/messages.js +1 -1
  103. package/dist/lib/webrtc/messages.js.map +1 -1
  104. package/dist/models/motions.js.map +1 -1
  105. package/dist/models/webrtc.js.map +1 -1
  106. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +3 -3
  107. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
  108. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
  109. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
  110. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js +2 -0
  111. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js.map +1 -0
  112. package/dist/node_modules/@headlessui/react/dist/components/label/label.js +1 -1
  113. package/dist/node_modules/@headlessui/react/dist/components/label/label.js.map +1 -1
  114. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js +1 -1
  115. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js.map +1 -1
  116. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js +1 -1
  117. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js.map +1 -1
  118. package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js +1 -1
  119. package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js.map +1 -1
  120. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js +1 -1
  121. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/adjust-scrollbar-padding.js.map +1 -1
  122. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js +1 -1
  123. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js.map +1 -1
  124. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js +1 -1
  125. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js.map +1 -1
  126. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js +1 -1
  127. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/prevent-scroll.js.map +1 -1
  128. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js +1 -1
  129. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js.map +1 -1
  130. package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js +1 -1
  131. package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js.map +1 -1
  132. package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js +1 -1
  133. package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js.map +1 -1
  134. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js +1 -1
  135. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js.map +1 -1
  136. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js +1 -1
  137. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js.map +1 -1
  138. package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js +1 -1
  139. package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js.map +1 -1
  140. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js +1 -1
  141. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js.map +1 -1
  142. package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js +1 -1
  143. package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js.map +1 -1
  144. package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js +1 -1
  145. package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js.map +1 -1
  146. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js +1 -1
  147. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js.map +1 -1
  148. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js +1 -1
  149. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -1
  150. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js +1 -1
  151. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js.map +1 -1
  152. package/dist/node_modules/@headlessui/react/dist/internal/floating.js +1 -1
  153. package/dist/node_modules/@headlessui/react/dist/internal/floating.js.map +1 -1
  154. package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js +1 -1
  155. package/dist/node_modules/@headlessui/react/dist/internal/open-closed.js.map +1 -1
  156. package/dist/node_modules/@headlessui/react/dist/machine.js +1 -1
  157. package/dist/node_modules/@headlessui/react/dist/machine.js.map +1 -1
  158. package/dist/node_modules/@headlessui/react/dist/react-glue.js +1 -1
  159. package/dist/node_modules/@headlessui/react/dist/react-glue.js.map +1 -1
  160. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js +1 -1
  161. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js.map +1 -1
  162. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js +1 -1
  163. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -1
  164. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +1 -1
  165. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -1
  166. package/dist/node_modules/@headlessui/react/dist/utils/match.js +1 -1
  167. package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -1
  168. package/dist/node_modules/@headlessui/react/dist/utils/render.js +1 -1
  169. package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -1
  170. package/dist/node_modules/@headlessui/react/dist/utils/store.js +1 -1
  171. package/dist/node_modules/@headlessui/react/dist/utils/store.js.map +1 -1
  172. package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js +1 -1
  173. package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js.map +1 -1
  174. package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js +1 -1
  175. package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js.map +1 -1
  176. package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.mjs.js +1 -1
  177. package/dist/node_modules/@react-aria/utils/dist/DOMFunctions.mjs.js.map +1 -1
  178. package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js +1 -1
  179. package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js.map +1 -1
  180. package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js +1 -1
  181. package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js.map +1 -1
  182. package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
  183. package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
  184. package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
  185. package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
  186. package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +1 -1
  187. package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js.map +1 -1
  188. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +1 -1
  189. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -1
  190. package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
  191. package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
  192. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
  193. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
  194. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
  195. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
  196. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
  197. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
  198. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
  199. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
  200. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js +1 -1
  201. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js.map +1 -1
  202. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +1 -1
  203. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -1
  204. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js +1 -1
  205. package/dist/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.mjs.js.map +1 -1
  206. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js +1 -1
  207. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +1 -1
  208. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
  209. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
  210. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js +1 -1
  211. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js.map +1 -1
  212. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js +1 -1
  213. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js.map +1 -1
  214. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js +1 -1
  215. package/dist/node_modules/framer-motion/dist/es/motion/index.mjs.js.map +1 -1
  216. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js +1 -1
  217. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js.map +1 -1
  218. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
  219. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
  220. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js +1 -1
  221. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js.map +1 -1
  222. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js +1 -1
  223. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +1 -1
  224. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js +1 -1
  225. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js.map +1 -1
  226. package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +1 -1
  227. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js +1 -1
  228. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js +1 -1
  229. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
  230. package/dist/node_modules/js-base64/base64.mjs.js +1 -1
  231. package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
  232. package/dist/node_modules/moment/moment.js +2 -2
  233. package/dist/node_modules/moment/moment.js.map +1 -1
  234. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
  235. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
  236. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
  237. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
  238. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js +1 -1
  239. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
  240. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js +1 -1
  241. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js.map +1 -1
  242. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js +1 -1
  243. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
  244. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js +1 -1
  245. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
  246. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js +1 -1
  247. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js.map +1 -1
  248. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js +1 -1
  249. package/dist/node_modules/motion-dom/dist/es/animation/generators/utils/create-generator-easing.mjs.js.map +1 -1
  250. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js +1 -1
  251. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -1
  252. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js +1 -1
  253. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -1
  254. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js +1 -1
  255. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -1
  256. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js +1 -1
  257. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -1
  258. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
  259. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
  260. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
  261. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
  262. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js +1 -1
  263. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/get-final.mjs.js.map +1 -1
  264. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
  265. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
  266. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js +1 -1
  267. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js.map +1 -1
  268. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js +1 -1
  269. package/dist/node_modules/motion-dom/dist/es/animation/utils/css-variables-conversion.mjs.js.map +1 -1
  270. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs.js +1 -1
  271. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs.js.map +1 -1
  272. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js +1 -1
  273. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js.map +1 -1
  274. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs.js +1 -1
  275. package/dist/node_modules/motion-dom/dist/es/animation/waapi/start-waapi-animation.mjs.js.map +1 -1
  276. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs.js +1 -1
  277. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/apply-generator.mjs.js.map +1 -1
  278. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js +1 -1
  279. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/linear.mjs.js.map +1 -1
  280. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.mjs.js +1 -1
  281. package/dist/node_modules/motion-dom/dist/es/events/add-dom-event.mjs.js.map +1 -1
  282. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
  283. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
  284. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js +1 -1
  285. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
  286. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
  287. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
  288. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
  289. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
  290. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.mjs.js +1 -1
  291. package/dist/node_modules/motion-dom/dist/es/projection/geometry/conversion.mjs.js.map +1 -1
  292. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js +1 -1
  293. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-apply.mjs.js.map +1 -1
  294. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js +1 -1
  295. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -1
  296. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js +1 -1
  297. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-remove.mjs.js.map +1 -1
  298. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js +1 -1
  299. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js.map +1 -1
  300. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs.js +1 -1
  301. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs.js.map +1 -1
  302. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js +1 -1
  303. package/dist/node_modules/motion-dom/dist/es/projection/utils/has-transform.mjs.js.map +1 -1
  304. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js +1 -1
  305. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js.map +1 -1
  306. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js +1 -1
  307. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -1
  308. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js +1 -1
  309. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -1
  310. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.mjs.js +1 -1
  311. package/dist/node_modules/motion-dom/dist/es/render/html/utils/render.mjs.js.map +1 -1
  312. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js +1 -1
  313. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/build-attrs.mjs.js.map +1 -1
  314. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.mjs.js +1 -1
  315. package/dist/node_modules/motion-dom/dist/es/render/svg/utils/path.mjs.js.map +1 -1
  316. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js +1 -1
  317. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js.map +1 -1
  318. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.mjs.js +1 -1
  319. package/dist/node_modules/motion-dom/dist/es/render/utils/is-forced-motion-value.mjs.js.map +1 -1
  320. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js +1 -1
  321. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js.map +1 -1
  322. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js +1 -1
  323. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js.map +1 -1
  324. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js +1 -1
  325. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
  326. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
  327. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
  328. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs.js +1 -1
  329. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla-to-rgba.mjs.js.map +1 -1
  330. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js +1 -1
  331. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js.map +1 -1
  332. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js +1 -1
  333. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js.map +1 -1
  334. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js +1 -1
  335. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js.map +1 -1
  336. package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js +1 -1
  337. package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js.map +1 -1
  338. package/dist/node_modules/react-redux/es/components/Provider.js +1 -1
  339. package/dist/node_modules/react-redux/es/components/Provider.js.map +1 -1
  340. package/dist/node_modules/react-redux/es/hooks/useDispatch.js +1 -1
  341. package/dist/node_modules/react-redux/es/hooks/useDispatch.js.map +1 -1
  342. package/dist/node_modules/react-redux/es/hooks/useReduxContext.js +1 -1
  343. package/dist/node_modules/react-redux/es/hooks/useReduxContext.js.map +1 -1
  344. package/dist/node_modules/react-redux/es/hooks/useSelector.js +1 -1
  345. package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
  346. package/dist/node_modules/react-redux/es/hooks/useStore.js +1 -1
  347. package/dist/node_modules/react-redux/es/hooks/useStore.js.map +1 -1
  348. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js +1 -1
  349. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js.map +1 -1
  350. package/dist/node_modules/redux/es/redux.js +1 -1
  351. package/dist/node_modules/redux/es/redux.js.map +1 -1
  352. package/dist/node_modules/socket.io-client/build/esm/index.js.map +1 -1
  353. package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
  354. package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
  355. package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
  356. package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
  357. package/dist/node_modules/webm-duration-fix/lib/ebml/index.js +1 -1
  358. package/dist/node_modules/webm-duration-fix/lib/ebml/index.js.map +1 -1
  359. package/dist/node_modules/webm-duration-fix/lib/index.js +1 -1
  360. package/dist/node_modules/webm-duration-fix/lib/index.js.map +1 -1
  361. package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js +1 -1
  362. package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js.map +1 -1
  363. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js +1 -1
  364. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
  365. package/dist/package.json.js +1 -1
  366. package/dist/services/astproxy.js.map +1 -1
  367. package/package.json +13 -28
  368. package/dist/_virtual/index10.js +0 -2
  369. package/dist/_virtual/index10.js.map +0 -1
  370. package/dist/_virtual/index11.js +0 -2
  371. package/dist/_virtual/index11.js.map +0 -1
  372. package/dist/_virtual/react-is.development4.js +0 -2
  373. package/dist/_virtual/react-is.development4.js.map +0 -1
  374. package/dist/_virtual/react-is.production.min4.js +0 -2
  375. package/dist/_virtual/react-is.production.min4.js.map +0 -1
  376. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +0 -2
  377. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +0 -1
  378. package/dist/node_modules/object-assign/index.js +0 -8
  379. package/dist/node_modules/object-assign/index.js.map +0 -1
  380. package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
  381. package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
  382. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
  383. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  384. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
  385. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  386. package/dist/node_modules/prop-types/index.js +0 -2
  387. package/dist/node_modules/prop-types/index.js.map +0 -1
  388. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
  389. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  390. package/dist/node_modules/prop-types/lib/has.js +0 -2
  391. package/dist/node_modules/prop-types/lib/has.js.map +0 -1
  392. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -10
  393. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  394. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -10
  395. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  396. package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
  397. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-invisible{visibility:hidden}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-16{top:4rem}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.pi-top-\[13rem\]{top:13rem}.pi-top-\[17rem\]{top:17rem}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-3{margin-left:.75rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-60{height:15rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1{width:.25rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-2\/5{width:40%}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-64{width:16rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-0{min-width:0}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-28{max-width:7rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-full{max-width:100%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-1\/2{--tw-translate-y:-50%}.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[20px_24px_24px\]{grid-template-rows:20px 24px 24px}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-flex-wrap{flex-wrap:wrap}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-0\.5{gap:.125rem}.pi-gap-1{gap:.25rem}.pi-gap-1\.5{gap:.375rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.pi-self-start{align-self:flex-start}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-left-radius:1.5rem;border-bottom-right-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-b{border-bottom-width:1px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.pi-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-iconSecondary{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.pi-bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-2{padding:.5rem}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-2\.5{padding-left:.625rem;padding-right:.625rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-py-3{padding-bottom:.75rem;padding-top:.75rem}.pi-py-4{padding-bottom:1rem;padding-top:1rem}.pi-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-4{padding-bottom:1rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pr-6{padding-right:1.5rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-italic{font-style:italic}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-leading-none{line-height:1}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconSecondary{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-bg-elevationL2Dark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-iconSecondaryDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.dark\:pi-bg-indigo-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-invisible{visibility:hidden}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-16{top:4rem}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.pi-top-\[13rem\]{top:13rem}.pi-top-\[17rem\]{top:17rem}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-3{margin-left:.75rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-60{height:15rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1{width:.25rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-2\/5{width:40%}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-64{width:16rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-0{min-width:0}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-28{max-width:7rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-full{max-width:100%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-1\/2{--tw-translate-y:-50%}.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{transform:scale(2);opacity:0}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[20px_24px_24px\]{grid-template-rows:20px 24px 24px}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-flex-wrap{flex-wrap:wrap}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-0\.5{gap:.125rem}.pi-gap-1{gap:.25rem}.pi-gap-1\.5{gap:.375rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(-.25rem*var(--tw-space-x-reverse));margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.pi-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1.5rem*var(--tw-space-x-reverse));margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.pi-self-start{align-self:flex-start}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-right-radius:1.5rem;border-bottom-left-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-b{border-bottom-width:1px}.pi-border-t{border-top-width:1px}.pi-border-solid{border-style:solid}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.pi-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-iconSecondary{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.pi-bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-2{padding:.5rem}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-2\.5{padding-left:.625rem;padding-right:.625rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-top:.25rem;padding-bottom:.25rem}.pi-py-2{padding-top:.5rem;padding-bottom:.5rem}.pi-py-3{padding-top:.75rem;padding-bottom:.75rem}.pi-py-4{padding-top:1rem;padding-bottom:1rem}.pi-py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-4{padding-bottom:1rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pr-6{padding-right:1.5rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-italic{font-style:italic}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-leading-none{line-height:1}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconSecondary{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.pi-transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.pi-transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.pi-transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.pi-transition-shadow{transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial)}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;width:8px;height:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-border-gray-800:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(31 41 55/var(--tw-border-opacity,1))}.dark\:pi-bg-elevationL2Dark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-iconSecondaryDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.dark\:pi-bg-indigo-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),i=require("../../store/index.js"),r=require("../user/default_device.js");require("react");var t=require("../../utils/genericFunctions/localStorage.js");require("../../node_modules/tslib/tslib.es6.js");var n=require("../../_virtual/index6.js"),o=e.default;exports.checkMediaPermissions=function(){if(r.isPhysical())return i.store.dispatch.alerts.removeAlert("browser_permissions"),i.store.dispatch.alerts.removeAlert("user_permissions"),i.store.dispatch.alerts.removeAlert("busy_camera"),void i.store.dispatch.alerts.removeAlert("unknown_media_permissions");n.__exports.requestMediaPermissions({audio:!0}).then(function(){}).catch(function(e){var r,t,s=e.type,d=null!==(t=((r={})[n.__exports.MediaPermissionsErrorType.SystemPermissionDenied]={alert:"browser_permissions",message:"WebRTC: browser does not have permission to access camera or microphone"},r[n.__exports.MediaPermissionsErrorType.UserPermissionDenied]={alert:"user_permissions",message:"WebRTC: user didn't allow app to access camera or microphone"},r)[s])&&void 0!==t?t:{alert:"unknown_media_permissions",message:"WebRTC: can't access audio or camera on this device. unknown error"};i.store.dispatch.alerts.setAlert(d.alert),o.error&&o.error(d.message)})},exports.checkWebCamPermission=function(){return new Promise(function(e){n.__exports.requestMediaPermissions({video:!0}).then(function(){e(!0)}).catch(function(i){console.error("Error requesting webcam permission:",i),e(!1)})})},exports.getCurrentAudioInputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-input-device").deviceId||null,r=i.store.select.mediaDevices.audioInputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Audio input device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-audio-input-device",{deviceId:o})),o},exports.getCurrentAudioOutputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-output-device").deviceId||null,r=i.store.select.mediaDevices.audioOutputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Audio output device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-audio-output-device",{deviceId:o})),o},exports.getCurrentVideoInputDeviceId=function(){var e=t.getJSONItem("phone-island-video-input-device").deviceId||null,r=i.store.select.mediaDevices.videoInputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Video input device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-video-input-device",{deviceId:o})),o},exports.getSupportedDevices=function(e){var i,r,t=!1,n=!1,s=!1,d=!1;i=function(){var i={audio:t,audioCap:s,video:n,videoCap:d};o.log&&o.log("supportedDevices=",i),e()},r=[],navigator.mediaDevices.enumerateDevices().then(function(e){e.forEach(function(e){var i=!1;r.forEach(function(r){r.deviceId===e.deviceId&&r.kind===e.kind&&(i=!0)}),i||("videoinput"!==e.kind||d||(d=!0),"audioinput"!==e.kind||s||(s=!0),"audioinput"===e.kind&&(t=!0),e.kind,"videoinput"===e.kind&&(n=!0),r.push(e))}),i&&i()})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),i=require("../../store/index.js"),r=require("../user/default_device.js");require("react");var t=require("../../utils/genericFunctions/localStorage.js");require("../../node_modules/tslib/tslib.es6.js");var n=require("../../_virtual/index6.js"),o=e.default;exports.checkMediaPermissions=function(){if(r.isPhysical())return i.store.dispatch.alerts.removeAlert("browser_permissions"),i.store.dispatch.alerts.removeAlert("user_permissions"),i.store.dispatch.alerts.removeAlert("busy_camera"),void i.store.dispatch.alerts.removeAlert("unknown_media_permissions");n.__exports.requestMediaPermissions({audio:!0}).then(function(){}).catch(function(e){var r,t,s=e.type,d=null!==(t=((r={})[n.__exports.MediaPermissionsErrorType.SystemPermissionDenied]={alert:"browser_permissions",message:"WebRTC: browser does not have permission to access camera or microphone"},r[n.__exports.MediaPermissionsErrorType.UserPermissionDenied]={alert:"user_permissions",message:"WebRTC: user didn't allow app to access camera or microphone"},r)[s])&&void 0!==t?t:{alert:"unknown_media_permissions",message:"WebRTC: can't access audio or camera on this device. unknown error"};i.store.dispatch.alerts.setAlert(d.alert),o.error&&o.error(d.message)})},exports.checkWebCamPermission=function(){return new Promise(function(e){n.__exports.requestMediaPermissions({video:!0}).then(function(){e(!0)}).catch(function(i){console.error("Error requesting webcam permission:",i),e(!1)})})},exports.getCurrentAudioInputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-input-device").deviceId||null,r=i.store.select.mediaDevices.audioInputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Audio input device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-audio-input-device",{deviceId:o})),o},exports.getCurrentAudioOutputDeviceId=function(){var e=t.getJSONItem("phone-island-audio-output-device").deviceId||null,r=i.store.select.mediaDevices.audioOutputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Audio output device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-audio-output-device",{deviceId:o})),o},exports.getCurrentVideoInputDeviceId=function(){var e=t.getJSONItem("phone-island-video-input-device").deviceId||null,r=i.store.select.mediaDevices.videoInputDevices(i.store.getState());if(r.find(function(i){return i.deviceId===e}))return e;var n=r.find(function(e){return"default"===e.deviceId||""===e.deviceId})||r[0],o=n?n.deviceId:"default";return null!==e&&o!==e&&(console.warn("Video input device ".concat(e," no longer available, falling back to default device")),t.setJSONItem("phone-island-video-input-device",{deviceId:o})),o},exports.getSupportedDevices=function(e){var i,r,t=!1,n=!1,s=!1,d=!1;i=function(){var i={audio:t,audioCap:s,video:n,videoCap:d};o.log&&o.log("supportedDevices=",i),e()},r=[],navigator.mediaDevices.enumerateDevices().then(function(e){e.forEach(function(e){var i=!1;r.forEach(function(r){r.deviceId===e.deviceId&&r.kind===e.kind&&(i=!0)}),i||("videoinput"!==e.kind||d||(d=!0),"audioinput"!==e.kind||s||(s=!0),"audioinput"===e.kind&&(t=!0),"videoinput"===e.kind&&(n=!0),r.push(e))}),i&&i()})};
2
2
  //# sourceMappingURL=devices.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"devices.js","sources":["../../../src/lib/devices/devices.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n MediaPermissionsError,\n MediaPermissionsErrorType,\n requestMediaPermissions,\n} from 'mic-check'\nimport JanusLib from '../webrtc/janus'\nimport { JanusTypes } from '../../types'\nimport { store } from '../../store'\nimport { isPhysical } from '../user/default_device'\nimport { getJSONItem, setJSONItem } from '../../utils'\nimport { eventDispatch} from '../../utils/genericFunctions/eventDispatch'\n\nconst Janus: JanusTypes = JanusLib\n\nexport const getSupportedDevices = function (origCallback: () => void) {\n let hasMicrophone = false\n let hasSpeakers = false\n let hasWebcam = false\n let isMicrophoneAlreadyCaptured = false\n let isWebcamAlreadyCaptured = false\n\n function checkDeviceSupport(callback: () => void) {\n const mediaDevices: MediaDeviceInfo[] = []\n\n navigator.mediaDevices.enumerateDevices().then((devices: MediaDeviceInfo[]) => {\n devices.forEach(function (device: MediaDeviceInfo) {\n let skip = false\n\n mediaDevices.forEach(function (d: MediaDeviceInfo) {\n if (d.deviceId === device.deviceId && d.kind === device.kind) {\n skip = true\n }\n })\n\n if (skip) {\n return\n }\n\n if (device.kind === 'videoinput' && !isWebcamAlreadyCaptured) {\n isWebcamAlreadyCaptured = true\n }\n if (device.kind === 'audioinput' && !isMicrophoneAlreadyCaptured) {\n isMicrophoneAlreadyCaptured = true\n }\n\n if (device.kind === 'audioinput') {\n hasMicrophone = true\n }\n\n if (device.kind === 'audiooutput') {\n hasSpeakers = true\n }\n\n if (device.kind === 'videoinput') {\n hasWebcam = true\n }\n\n mediaDevices.push(device)\n })\n\n if (callback) {\n callback()\n }\n })\n }\n\n // check for microphone/camera support!\n checkDeviceSupport(function () {\n const supportedDevices: any = {\n audio: hasMicrophone,\n audioCap: isMicrophoneAlreadyCaptured,\n video: hasWebcam,\n videoCap: isWebcamAlreadyCaptured,\n }\n\n Janus.log && Janus.log('supportedDevices=', supportedDevices)\n origCallback()\n })\n}\n\nexport const checkMediaPermissions = function () {\n //Remove all media alerts if default_device is physical\n if (isPhysical()) {\n store.dispatch.alerts.removeAlert('browser_permissions')\n store.dispatch.alerts.removeAlert('user_permissions')\n store.dispatch.alerts.removeAlert('busy_camera')\n store.dispatch.alerts.removeAlert('unknown_media_permissions')\n return\n }\n\n requestMediaPermissions({ audio: true })\n .then(() => {\n // Can successfully access camera and microphone streams\n // Save permissions state on rematch to get access globally on the app\n })\n .catch((err: any) => {\n const { type } = err\n\n // Define error mappings for different types of media permission errors\n const errorMap: any = {\n [MediaPermissionsErrorType.SystemPermissionDenied]: {\n alert: 'browser_permissions',\n message: 'WebRTC: browser does not have permission to access camera or microphone',\n },\n [MediaPermissionsErrorType.UserPermissionDenied]: {\n alert: 'user_permissions',\n message: \"WebRTC: user didn't allow app to access camera or microphone\",\n },\n }\n\n // Get error details from map or use default error\n const error = errorMap[type] ?? {\n alert: 'unknown_media_permissions',\n message: \"WebRTC: can't access audio or camera on this device. unknown error\",\n }\n\n // Display alert only for non-physical devices\n store.dispatch.alerts.setAlert(error.alert)\n\n // Log error message if Janus logger is available\n if (Janus.error) {\n Janus.error(error.message)\n }\n })\n}\n\nexport const checkWebCamPermission = function (): Promise<boolean> {\n return new Promise((resolve) => {\n requestMediaPermissions({ video: true })\n .then(() => {\n resolve(true)\n })\n .catch((err: any) => {\n console.error('Error requesting webcam permission:', err)\n resolve(false)\n })\n })\n}\n\nexport const getCurrentVideoInputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-video-input-device').deviceId || null\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = videoInputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = videoInputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || videoInputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Video input device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-video-input-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n\nexport const getCurrentAudioInputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-audio-input-device').deviceId || null\n const audioInputDevices = store.select.mediaDevices.audioInputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = audioInputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = audioInputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || audioInputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Audio input device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-input-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n\nexport const getCurrentAudioOutputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-audio-output-device').deviceId || null\n const audioOutputDevices = store.select.mediaDevices.audioOutputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = audioOutputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = audioOutputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || audioOutputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Audio output device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n"],"names":["Janus","JanusLib","isPhysical","store","dispatch","alerts","removeAlert","requestMediaPermissions","audio","then","catch","err","type","error","_b","_a","MediaPermissionsErrorType","SystemPermissionDenied","alert","message","UserPermissionDenied","setAlert","Promise","resolve","video","console","currentDeviceId","getJSONItem","deviceId","audioInputDevices","select","mediaDevices","getState","find","device","defaultDevice","fallbackDeviceId","warn","setJSONItem","audioOutputDevices","videoInputDevices","origCallback","callback","hasMicrophone","hasWebcam","isMicrophoneAlreadyCaptured","isWebcamAlreadyCaptured","supportedDevices","audioCap","videoCap","log","navigator","enumerateDevices","devices","forEach","skip","d","kind","push"],"mappings":"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"}
1
+ {"version":3,"file":"devices.js","sources":["../../../src/lib/devices/devices.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n MediaPermissionsErrorType,\n requestMediaPermissions,\n} from 'mic-check'\nimport JanusLib from '../webrtc/janus'\nimport { JanusTypes } from '../../types'\nimport { store } from '../../store'\nimport { isPhysical } from '../user/default_device'\nimport { getJSONItem, setJSONItem } from '../../utils'\n\nconst Janus: JanusTypes = JanusLib\n\nexport const getSupportedDevices = function (origCallback: () => void) {\n let hasMicrophone = false\n let hasWebcam = false\n let isMicrophoneAlreadyCaptured = false\n let isWebcamAlreadyCaptured = false\n\n function checkDeviceSupport(callback: () => void) {\n const mediaDevices: MediaDeviceInfo[] = []\n\n navigator.mediaDevices.enumerateDevices().then((devices: MediaDeviceInfo[]) => {\n devices.forEach(function (device: MediaDeviceInfo) {\n let skip = false\n\n mediaDevices.forEach(function (d: MediaDeviceInfo) {\n if (d.deviceId === device.deviceId && d.kind === device.kind) {\n skip = true\n }\n })\n\n if (skip) {\n return\n }\n\n if (device.kind === 'videoinput' && !isWebcamAlreadyCaptured) {\n isWebcamAlreadyCaptured = true\n }\n if (device.kind === 'audioinput' && !isMicrophoneAlreadyCaptured) {\n isMicrophoneAlreadyCaptured = true\n }\n\n if (device.kind === 'audioinput') {\n hasMicrophone = true\n }\n\n if (device.kind === 'videoinput') {\n hasWebcam = true\n }\n\n mediaDevices.push(device)\n })\n\n if (callback) {\n callback()\n }\n })\n }\n\n // check for microphone/camera support!\n checkDeviceSupport(function () {\n const supportedDevices: any = {\n audio: hasMicrophone,\n audioCap: isMicrophoneAlreadyCaptured,\n video: hasWebcam,\n videoCap: isWebcamAlreadyCaptured,\n }\n\n Janus.log && Janus.log('supportedDevices=', supportedDevices)\n origCallback()\n })\n}\n\nexport const checkMediaPermissions = function () {\n //Remove all media alerts if default_device is physical\n if (isPhysical()) {\n store.dispatch.alerts.removeAlert('browser_permissions')\n store.dispatch.alerts.removeAlert('user_permissions')\n store.dispatch.alerts.removeAlert('busy_camera')\n store.dispatch.alerts.removeAlert('unknown_media_permissions')\n return\n }\n\n requestMediaPermissions({ audio: true })\n .then(() => {\n // Can successfully access camera and microphone streams\n // Save permissions state on rematch to get access globally on the app\n })\n .catch((err: any) => {\n const { type } = err\n\n // Define error mappings for different types of media permission errors\n const errorMap: any = {\n [MediaPermissionsErrorType.SystemPermissionDenied]: {\n alert: 'browser_permissions',\n message: 'WebRTC: browser does not have permission to access camera or microphone',\n },\n [MediaPermissionsErrorType.UserPermissionDenied]: {\n alert: 'user_permissions',\n message: \"WebRTC: user didn't allow app to access camera or microphone\",\n },\n }\n\n // Get error details from map or use default error\n const error = errorMap[type] ?? {\n alert: 'unknown_media_permissions',\n message: \"WebRTC: can't access audio or camera on this device. unknown error\",\n }\n\n // Display alert only for non-physical devices\n store.dispatch.alerts.setAlert(error.alert)\n\n // Log error message if Janus logger is available\n if (Janus.error) {\n Janus.error(error.message)\n }\n })\n}\n\nexport const checkWebCamPermission = function (): Promise<boolean> {\n return new Promise((resolve) => {\n requestMediaPermissions({ video: true })\n .then(() => {\n resolve(true)\n })\n .catch((err: any) => {\n console.error('Error requesting webcam permission:', err)\n resolve(false)\n })\n })\n}\n\nexport const getCurrentVideoInputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-video-input-device').deviceId || null\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = videoInputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = videoInputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || videoInputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Video input device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-video-input-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n\nexport const getCurrentAudioInputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-audio-input-device').deviceId || null\n const audioInputDevices = store.select.mediaDevices.audioInputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = audioInputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = audioInputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || audioInputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Audio input device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-input-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n\nexport const getCurrentAudioOutputDeviceId = function () {\n const currentDeviceId = getJSONItem('phone-island-audio-output-device').deviceId || null\n const audioOutputDevices = store.select.mediaDevices.audioOutputDevices(store.getState())\n\n // Check if the current device is still available\n const deviceFound = audioOutputDevices.find((device) => device.deviceId === currentDeviceId)\n\n if (deviceFound) {\n return currentDeviceId\n } else {\n // Fallback to default device\n const defaultDevice = audioOutputDevices.find(device => device.deviceId === 'default' || device.deviceId === '') || audioOutputDevices[0]\n const fallbackDeviceId = defaultDevice ? defaultDevice.deviceId : 'default'\n\n if (currentDeviceId !== null && fallbackDeviceId !== currentDeviceId) {\n console.warn(`Audio output device ${currentDeviceId} no longer available, falling back to default device`)\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: fallbackDeviceId })\n }\n\n return fallbackDeviceId\n }\n}\n"],"names":["Janus","JanusLib","isPhysical","store","dispatch","alerts","removeAlert","requestMediaPermissions","audio","then","catch","err","type","error","_b","_a","MediaPermissionsErrorType","SystemPermissionDenied","alert","message","UserPermissionDenied","setAlert","Promise","resolve","video","console","currentDeviceId","getJSONItem","deviceId","audioInputDevices","select","mediaDevices","getState","find","device","defaultDevice","fallbackDeviceId","warn","setJSONItem","audioOutputDevices","videoInputDevices","origCallback","callback","hasMicrophone","hasWebcam","isMicrophoneAlreadyCaptured","isWebcamAlreadyCaptured","supportedDevices","audioCap","videoCap","log","navigator","enumerateDevices","devices","forEach","skip","d","kind","push"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,o=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=r.store.getState().island.isFromStreaming;if(o||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),d&&l){var p=u.getStreamingSourceId(l);p&&(a.unsubscribe({id:p}).then(function(){return console.debug("Unsubscribed from streaming source: ".concat(p))}).catch(function(e){return console.error("Error unsubscribing from streaming source:",e)}),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),i.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);i.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,function(){var n,o,i;return e.__generator(this,function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,o=r.store.getState().currentUser.default_device,i=(null==o?void 0:o.id)||(null==o?void 0:o.exten),n&&i&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:i})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})}function v(){var t;return e.__awaiter(this,void 0,void 0,function(){var n,o,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,function(e){switch(e.label){case 0:if(n=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.currentCall,o=n.accepted,a=n.chSource,u=n.chDest,l=n.incoming,d=n.outgoing,p=n.incomingSocket,v=n.outgoingSocket,f=n.conversationId,h=r.store.getState().currentUser.default_device,g=(null==h?void 0:h.id)||(null==h?void 0:h.exten),C="",o&&(l||p)&&!c.isEmpty(a)?C=null==a?void 0:a.callerNum:o&&(d||v)&&!c.isEmpty(u)&&(C=null==u?void 0:u.callerNum),""===g||""===f||""===C)return[3,4];if(!(m={convid:null==f?void 0:f.toString(),addEndpointId:null==C?void 0:C.toString(),ownerEndpointId:null==g?void 0:g.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(m)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),i.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return b=e.sent(),console.error(b),[2,!1];case 4:return[2,!1]}})})}function f(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o;return e.__generator(this,function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2,!1]}})})}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,o=n.conference,a=o.isActive,c=o.isOwnerInside,u=o.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find(function(t){return t.exten===e}):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame(function(){setTimeout(function(){i.eventDispatch("phone-island-call-start",{number:e})},1e3)})};function C(t,r){return e.__awaiter(this,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame(function(){r.player.playRemoteAudio(),i.eventDispatch("phone-island-call-transfered",{})})),[2]}})})}exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o;return e.__generator(this,function(e){switch(e.label){case 0:return(o=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:o,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})},exports.callNumber=function(e,o){var a="sip:".concat(e,"@").concat(o);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(a):s.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}})})},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})})};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.hangupConversation({convid:e,endpointId:t})})};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o,a;return e.__generator(this,function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(o={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(o)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}})})},exports.muteAllUsersConference=function(t,n){var o;return e.__awaiter(this,void 0,void 0,function(){var i,a,c,u,l,d,p,v;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(i=r.store.getState().conference.usersList)||0===Object.keys(i).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),a=Object.values(i),c=n?s.unmuteUserConf:s.muteUserConf,u=0,l=a,e.label=2;case 2:return u<l.length?(d=l[u],p={confId:null==t?void 0:t.toString(),userId:null===(o=d.id)||void 0===o?void 0:o.toString()},[4,c(p)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:d.extenId,muted:!n}),e.label=4;case 4:return u++,[3,2];case 5:return[2,!0];case 6:return v=e.sent(),console.error(v),[2,!1];case 7:return[2]}})})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),i.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,function(){var o,i;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];o={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(o)];case 2:return[2,!!e.sent()];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2]}})})},exports.parkCurrentCall=function(){var e,t,n,o,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,o,i,a;return e.__awaiter(this,void 0,void 0,function(){var c,u,l,d,p,v,f;return e.__generator(this,function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(c))?[3,1]:[2];case 1:switch(l=null===(i=null==u?void 0:u.id)||void 0===i?void 0:i.match(/\/(\d+)-/),d=l[1],p={convid:null===(a=null==u?void 0:u.id)||void 0===a?void 0:a.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return f=e.sent(),console.error(f),[2,[]];case 5:return[2]}})})},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o,i,a=this;return e.__generator(this,function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(o={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(o)];case 2:return c.sent()?(setTimeout(function(){return e.__awaiter(a,void 0,void 0,function(){var t,s;return e.__generator(this,function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter(function(e){return!e.owner&&e.extenId!==n}).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}})})},500),[2,!0]):[2,!1];case 3:return i=c.sent(),console.error(i),[2,!1];case 4:return[2,!1]}})})},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),s=require("../../services/astproxy.js"),o=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../services/user.js"),c=require("../../utils/genericFunctions/isEmpty.js"),u=require("../../utils/streaming/getStreamingSourceId.js");function l(){var e=r.store.getState().currentCall,o=e.outgoing,c=e.accepted,l=e.streamingSourceNumber,d=r.store.getState().island.isFromStreaming;if(o||c){if(n.isWebRTC()?t.hangup():s.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset(),d&&l){var p=u.getStreamingSourceId(l);p&&(a.unsubscribe({id:p}).then(function(){return console.debug("Unsubscribed from streaming source: ".concat(p))}).catch(function(e){return console.error("Error unsubscribing from streaming source:",e)}),r.store.dispatch.streaming.clearSourceImages())}r.store.dispatch.island.setIsFromStreaming(!1)}r.store.dispatch.island.resetOperatorBusy(),i.eventDispatch("phone-island-call-ended",{})}function d(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):s.pausePhysical(!1);i.eventDispatch("phone-island-call-unheld",{})}function p(t){return e.__awaiter(this,void 0,void 0,function(){var n,o,i;return e.__generator(this,function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,o=r.store.getState().currentUser.default_device,i=(null==o?void 0:o.id)||(null==o?void 0:o.exten),n&&i&&t?[4,s.attendedTransfer({convid:n,to:t,endpointId:i})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})}function v(){var t;return e.__awaiter(this,void 0,void 0,function(){var n,o,a,u,l,d,p,v,f,h,g,C,m,b;return e.__generator(this,function(e){switch(e.label){case 0:if(n=null===(t=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===t?void 0:t.currentCall,o=n.accepted,a=n.chSource,u=n.chDest,l=n.incoming,d=n.outgoing,p=n.incomingSocket,v=n.outgoingSocket,f=n.conversationId,h=r.store.getState().currentUser.default_device,g=(null==h?void 0:h.id)||(null==h?void 0:h.exten),C="",o&&(l||p)&&!c.isEmpty(a)?C=null==a?void 0:a.callerNum:o&&(d||v)&&!c.isEmpty(u)&&(C=null==u?void 0:u.callerNum),""===g||""===f||""===C)return[3,4];if(!(m={convid:null==f?void 0:f.toString(),addEndpointId:null==C?void 0:C.toString(),ownerEndpointId:null==g?void 0:g.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.startConf(m)];case 2:return e.sent()?(r.store.dispatch.currentCall.updateCurrentCall({conferencing:!0,paused:!1}),i.eventDispatch("phone-island-call-conferenced",{}),[2,!0]):[2,!1];case 3:return b=e.sent(),console.error(b),[2,!1];case 4:return[2,!1]}})})}function f(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o;return e.__generator(this,function(e){switch(e.label){case 0:if(""===(t=r.store.getState().conference.conferenceId))return[3,4];if(!(n={confId:null==t?void 0:t.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.endConf(n)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-finished",{}),[2,!0]):[2,!1];case 3:return o=e.sent(),console.error(o),[2,!1];case 4:return[2,!1]}})})}var h=function(){return!!r.store.getState().island.isConferenceList},g=function(e,t){var n=r.store.getState(),s=n.currentUser.username,o=n.conference,a=o.isActive,c=o.isOwnerInside,u=o.conferenceId,d=n.users.extensions;!a&&s&&(t.conference.setConferenceActive(!0),t.conference.setConferenceStartedFrom(s));var p=d?Object.values(d).find(function(t){return t.exten===e}):null,v=(null==p?void 0:p.name)||e;t.conference.addPendingUser({id:"".concat(u,"-").concat(e),name:v,owner:!1,muted:!1,extenId:e,joinTime:Date.now()}),c&&(l(),t.conference.toggleIsOwnerInside(!1)),requestAnimationFrame(function(){setTimeout(function(){i.eventDispatch("phone-island-call-start",{number:e})},1e3)})};function C(t,r){return e.__awaiter(this,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return d(),[4,p(t)];case 1:return e.sent()&&(r.currentCall.updateCurrentCall({transferring:!0,paused:!1}),requestAnimationFrame(function(){r.player.playRemoteAudio(),i.eventDispatch("phone-island-call-transfered",{})})),[2]}})})}exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():s.answerPhysical(),r.store.dispatch.island.resetOperatorBusyCompletely()},exports.attendedTransfer=p,exports.blindTransferFunction=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o;return e.__generator(this,function(e){switch(e.label){case 0:return(o=r.store.getState().currentCall.conversationId)&&n&&t?[4,s.blindTransfer({convid:o,to:t,endpointId:n})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}})})},exports.callNumber=function(e,o,a){void 0===a&&(a={});var c="sip:".concat(e,"@").concat(o);r.store.dispatch.island.resetOperatorBusy(),r.store.dispatch.island.setOperatorBusyCalledNumber(e),n.isWebRTC()?t.callSipURI(c,a):s.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.clickTransferOrConference=function(t,n){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return h()?r.store.getState().conference.isActive?[3,2]:[4,v()]:[3,3];case 1:if(!e.sent())return[2];e.label=2;case 2:return g(t,n),[3,4];case 3:C(t,n),e.label=4;case 4:return[2]}})})},exports.endConference=f,exports.forceHangupConversation=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.forceHangup({convid:e,endpointId:t,endpointType:"extension"})})};for(var n in e)t(n)},exports.handleAttendedTransfer=C,exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach(function(e){s.hangupConversation({convid:e,endpointId:t})})};for(var n in e)t(n)},exports.hangupCurrentCall=l,exports.hangupCurrentPhysicalRecording=function(){s.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.isInsideConferenceList=h,exports.joinConference=function(){return e.__awaiter(this,void 0,void 0,function(){var t,n,o,a;return e.__generator(this,function(e){switch(e.label){case 0:if(t=r.store.getState().currentUser.default_device,""===(n=(null==t?void 0:t.id)||(null==t?void 0:t.exten)))return[3,4];if(!(o={endpointId:null==n?void 0:n.toString()}))return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,s.joinMyConf(o)];case 2:return e.sent()?(i.eventDispatch("phone-island-owner-conference-enter",{}),[2,!0]):[2,!1];case 3:return a=e.sent(),console.error(a),[2,!1];case 4:return[2,!1]}})})},exports.muteAllUsersConference=function(t,n){var o;return e.__awaiter(this,void 0,void 0,function(){var i,a,c,u,l,d,p,v;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t)return[2,!1];if(!(i=r.store.getState().conference.usersList)||0===Object.keys(i).length)return[2,!1];e.label=1;case 1:e.trys.push([1,6,,7]),a=Object.values(i),c=n?s.unmuteUserConf:s.muteUserConf,u=0,l=a,e.label=2;case 2:return u<l.length?(d=l[u],p={confId:null==t?void 0:t.toString(),userId:null===(o=d.id)||void 0===o?void 0:o.toString()},[4,c(p)]):[3,5];case 3:e.sent()&&r.store.dispatch.conference.toggleUserMuted({extenId:d.extenId,muted:!n}),e.label=4;case 4:return u++,[3,2];case 5:return[2,!0];case 6:return v=e.sent(),console.error(v),[2,!1];case 7:return[2]}})})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):s.mutePhysical(!0),i.eventDispatch("phone-island-call-muted",{})},exports.muteUserConference=function(t,r,n){return e.__awaiter(this,void 0,void 0,function(){var o,i;return e.__generator(this,function(e){switch(e.label){case 0:if(""===t||""===r)return[2,!1];o={confId:null==t?void 0:t.toString(),userId:null==r?void 0:r.toString()},e.label=1;case 1:return e.trys.push([1,3,,4]),[4,(n?s.unmuteUserConf:s.muteUserConf)(o)];case 2:return[2,!!e.sent()];case 3:return i=e.sent(),console.error(i),[2,!1];case 4:return[2]}})})},exports.parkCurrentCall=function(){var e,t,n,o,a=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,u={};if(a){if(c)for(var l in c)if(c.hasOwnProperty(l)){var d=c[l];Object.keys(d).length>0&&(u={numberParkId:l,idConversation:a})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(s.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:a,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):s.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:o.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,o,i,a;return e.__awaiter(this,void 0,void 0,function(){var c,u,l,d,p,v,f;return e.__generator(this,function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),c=null===(o=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===o?void 0:o.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(c))?[3,1]:[2];case 1:switch(l=null===(i=null==u?void 0:u.id)||void 0===i?void 0:i.match(/\/(\d+)-/),d=l[1],p={convid:null===(a=null==u?void 0:u.id)||void 0===a?void 0:a.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,s.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return f=e.sent(),console.error(f),[2,[]];case 5:return[2]}})})},exports.removeUserConference=function(t,n){return e.__awaiter(this,void 0,void 0,function(){var o,i,a=this;return e.__generator(this,function(c){switch(c.label){case 0:if(""===t||""===n)return[3,4];if(!(o={confId:null==t?void 0:t.toString(),extenId:null==n?void 0:n.toString()}))return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,s.hangupUserConf(o)];case 2:return c.sent()?(setTimeout(function(){return e.__awaiter(a,void 0,void 0,function(){var t,s;return e.__generator(this,function(e){switch(e.label){case 0:return t=r.store.getState().conference.usersList,s=Object.values(t||{}).filter(function(e){return!e.owner&&e.extenId!==n}).length,0!==s?[3,2]:[4,f()];case 1:e.sent(),e.label=2;case 2:return[2]}})})},500),[2,!0]):[2,!1];case 3:return i=c.sent(),console.error(i),[2,!1];case 4:return[2,!1]}})})},exports.startConference=v,exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):s.mutePhysical(!1),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=d,exports.waitingConferenceView=g;
2
2
  //# sourceMappingURL=call.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber } = store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isFromStreaming","island","isWebRTC","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","setIsFromStreaming","resetOperatorBusy","eventDispatch","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","answerWebRTC","answerPhysical","resetOperatorBusyCompletely","endpointIdInConversation","blindTransferRequest","sipHost","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","setIslandView","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"mappings":"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"}
1
+ {"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { Dispatch, store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n startConf,\n joinMyConf,\n endConf,\n muteUserConf,\n unmuteUserConf,\n hangupUserConf,\n forceHangup,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\nimport { isEmpty } from '../../utils/genericFunctions/isEmpty'\nimport { getStreamingSourceId } from '../../utils/streaming/getStreamingSourceId'\nimport { unsubscribe } from '../../services/user'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string, options: { video?: boolean } = {}) {\n const sipURI = `sip:${number}@${sipHost}`\n\n // Reset any previous operator busy state when starting a new call\n store.dispatch.island.resetOperatorBusy()\n // Save the called number for potential operator busy scenarios\n store.dispatch.island.setOperatorBusyCalledNumber(number)\n\n if (isWebRTC()) {\n callSipURI(sipURI, options)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n // Reset operator busy completely when call is answered successfully\n store.dispatch.island.resetOperatorBusyCompletely()\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\nexport function forceHangupConversation() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n forceHangup({\n convid: id,\n endpointId: extension,\n endpointType: 'extension',\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted, streamingSourceNumber } = store.getState().currentCall\n const { isFromStreaming } = store.getState().island\n\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n\n // If call was from a streaming source, unsubscribe and clear images\n if (isFromStreaming && streamingSourceNumber) {\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n if (sourceId) {\n // Unsubscribe from streaming updates\n unsubscribe({ id: sourceId })\n .then(() => console.debug(`Unsubscribed from streaming source: ${sourceId}`))\n .catch((error) => console.error('Error unsubscribing from streaming source:', error))\n\n // Clear source images to free up memory\n store.dispatch.streaming.clearSourceImages()\n }\n }\n\n // Reset isFromStreaming flag\n store.dispatch.island.setIsFromStreaming(false)\n }\n // Reset operator busy state when call ends\n store.dispatch.island.resetOperatorBusy()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical(true)\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n mutePhysical(false)\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransferFunction(number: string, endpointIdInConversation: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n // Transfer the call through blind transfer\n if (conversationId && endpointIdInConversation && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: endpointIdInConversation,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n let default_device_details = default_device?.id || default_device?.exten\n // Transfer the call through attended transfer\n if (conversationId && default_device_details && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device_details,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n\nexport async function startConference() {\n const {\n accepted,\n chSource,\n chDest,\n incoming,\n outgoing,\n incomingSocket,\n outgoingSocket,\n conversationId,\n }: any = store?.getState()?.currentCall\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n let addedUserExtension = ''\n if (accepted && (incoming || incomingSocket) && !isEmpty(chSource)) {\n addedUserExtension = chSource?.callerNum\n } else if (accepted && (outgoing || outgoingSocket) && !isEmpty(chDest)) {\n addedUserExtension = chDest?.callerNum\n }\n\n if (defaultDeviceId !== '' && conversationId !== '' && addedUserExtension !== '') {\n const startConferenceInformations = {\n convid: conversationId?.toString(),\n addEndpointId: addedUserExtension?.toString(),\n ownerEndpointId: defaultDeviceId?.toString(),\n }\n\n if (startConferenceInformations) {\n try {\n const result = await startConf(startConferenceInformations)\n if (result) {\n // Set conferencing and disable pause\n store.dispatch.currentCall.updateCurrentCall({\n conferencing: true,\n paused: false,\n })\n\n eventDispatch('phone-island-call-conferenced', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function joinConference() {\n const { default_device } = store.getState().currentUser\n const defaultDeviceId = default_device?.id || default_device?.exten\n\n if (defaultDeviceId !== '') {\n const joinConferenceInformation = {\n endpointId: defaultDeviceId?.toString(),\n }\n\n if (joinConferenceInformation) {\n try {\n const result = await joinMyConf(joinConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-enter', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function endConference() {\n const { conferenceId } = store.getState().conference\n\n if (conferenceId !== '') {\n const endConferenceInformation = {\n confId: conferenceId?.toString(),\n }\n\n if (endConferenceInformation) {\n try {\n const result = await endConf(endConferenceInformation)\n if (result) {\n eventDispatch('phone-island-owner-conference-finished', {})\n return true\n }\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport async function muteUserConference(confId, userId, isAlreadyMuted) {\n if (confId === '' || userId === '') {\n return false\n }\n\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: userId?.toString(),\n }\n\n try {\n // Check if the user is already muted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n const result = await actionFunction(muteUnmuteUserInformation)\n return !!result\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function muteAllUsersConference(confId, isAlreadyMuted) {\n if (confId === '') {\n return false\n }\n\n // Get the conference users from the store\n const { usersList } = store.getState().conference\n\n if (!usersList || Object.keys(usersList).length === 0) {\n return false\n }\n\n try {\n // Iterate through all users (except the owner) and mute/unmute them\n const nonOwnerUsers = Object.values(usersList)\n\n // Determine which function to use based on isAlreadyMuted\n const actionFunction = isAlreadyMuted ? unmuteUserConf : muteUserConf\n\n // For each user, call the appropriate function directly\n for (const user of nonOwnerUsers) {\n const muteUnmuteUserInformation = {\n confId: confId?.toString(),\n userId: user.id?.toString(),\n }\n\n const result = await actionFunction(muteUnmuteUserInformation)\n\n if (result) {\n store.dispatch.conference.toggleUserMuted({\n extenId: user.extenId,\n muted: !isAlreadyMuted,\n })\n }\n }\n\n return true\n } catch (e) {\n console.error(e)\n return false\n }\n}\n\nexport async function removeUserConference(conferenceId, extensionId) {\n if (conferenceId !== '' && extensionId !== '') {\n const removeUserInformation = {\n confId: conferenceId?.toString(),\n extenId: extensionId?.toString(),\n }\n\n if (removeUserInformation) {\n try {\n const result = await hangupUserConf(removeUserInformation)\n if (result) {\n // Check if this was the last participant (excluding owner)\n setTimeout(async () => {\n const { usersList } = store.getState().conference\n const remainingParticipants = Object.values(usersList || {}).filter(\n (user) => !user.owner && user.extenId !== extensionId,\n ).length\n\n // If no more participants left, end the conference\n if (remainingParticipants === 0) {\n await endConference()\n }\n }, 500)\n\n return true\n }\n\n return false\n } catch (e) {\n console.error(e)\n return false\n }\n }\n }\n return false\n}\n\nexport const clickTransferOrConference = async (number: string, dispatch: Dispatch) => {\n if (isInsideConferenceList()) {\n const { isActive } = store.getState().conference\n\n // Put current call user inside conference mode (only for first user to add not for the second one)\n // If conference is not active, start it first, otherwise proceed directly\n if (!isActive) {\n const conferenceStarted = await startConference()\n if (!conferenceStarted) {\n return // Early return if conference failed to start\n }\n }\n\n // Proceed to waiting conference view (common path for both cases)\n waitingConferenceView(number, dispatch)\n } else {\n handleAttendedTransfer(number, dispatch)\n }\n}\n\nexport const isInsideConferenceList = () => {\n const { isConferenceList } = store.getState().island\n if (isConferenceList) {\n return true\n }\n return false\n}\n\nexport const waitingConferenceView = (numberToCall, dispatch: Dispatch) => {\n // Get all required state in one call to minimize store access\n const state = store.getState()\n const { username } = state.currentUser\n const { isActive, isOwnerInside, conferenceId } = state.conference\n const { extensions } = state.users\n\n // Show current waiting user in back view (only on first)\n if (!isActive && username) {\n dispatch.conference.setConferenceActive(true)\n dispatch.conference.setConferenceStartedFrom(username)\n }\n\n // Add pending user to track the participant being added (before socket confirms)\n const extension = extensions\n ? Object.values(extensions).find((ext: any) => ext.exten === numberToCall)\n : null\n const extensionName = extension?.name || numberToCall\n\n dispatch.conference.addPendingUser({\n id: `${conferenceId}-${numberToCall}`,\n name: extensionName,\n owner: false,\n muted: false,\n extenId: numberToCall,\n joinTime: Date.now(),\n })\n\n // If owner has already started the conference, hangup before making a new call\n if (isOwnerInside) {\n hangupCurrentCall()\n dispatch.conference.toggleIsOwnerInside(false)\n }\n\n // Start new call with selected user from conference list\n // Use requestAnimationFrame to ensure state updates are complete before dispatching event\n requestAnimationFrame(() => {\n setTimeout(() => {\n eventDispatch('phone-island-call-start', { number: numberToCall })\n }, 1000)\n })\n}\n\nexport async function handleAttendedTransfer(number: string, dispatch: Dispatch) {\n // Send attended transfer message\n unpauseCurrentCall()\n const transferringMessageSent = await attendedTransfer(number)\n if (transferringMessageSent) {\n // Set transferring and disable pause\n dispatch.currentCall.updateCurrentCall({\n transferring: true,\n paused: false,\n })\n\n // Use requestAnimationFrame to ensure state update is complete before audio operations\n requestAnimationFrame(() => {\n dispatch.player.playRemoteAudio()\n eventDispatch('phone-island-call-transfered', {})\n })\n }\n}\n"],"names":["hangupCurrentCall","_a","store","getState","currentCall","outgoing","accepted","streamingSourceNumber","isFromStreaming","island","isWebRTC","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","sourceId_1","getStreamingSourceId","unsubscribe","id","then","console","debug","concat","catch","error","streaming","clearSourceImages","setIsFromStreaming","resetOperatorBusy","eventDispatch","unpauseCurrentCall","unpauseWebRTC","updateCurrentCall","paused","playRemoteAudio","pausePhysical","attendedTransfer","number","conversationId","default_device","currentUser","default_device_details","exten","attendedTransferRequest","convid","to","endpointId","startConference","_b","chSource","chDest","incoming","incomingSocket","outgoingSocket","defaultDeviceId","addedUserExtension","isEmpty","callerNum","startConferenceInformations","toString","addEndpointId","ownerEndpointId","startConf","_c","sent","conferencing","e_2","endConference","conferenceId","conference","endConferenceInformation","confId","endConf","e_4","isInsideConferenceList","isConferenceList","waitingConferenceView","numberToCall","state","username","isActive","isOwnerInside","extensions","users","setConferenceActive","setConferenceStartedFrom","extension","Object","values","find","ext","extensionName","name","addPendingUser","owner","muted","extenId","joinTime","Date","now","toggleIsOwnerInside","requestAnimationFrame","setTimeout","handleAttendedTransfer","transferring","answerWebRTC","answerPhysical","resetOperatorBusyCompletely","endpointIdInConversation","blindTransferRequest","sipHost","options","sipURI","setOperatorBusyCalledNumber","callSipURI","callPhysical","__awaiter","conversations","keys","forEach","forceHangup","endpointType","hangupConversation","hangupPhysicalRecordingCall","physicalRecorder","setRecording","setIslandView","joinConferenceInformation","joinMyConf","e_3","isAlreadyMuted","usersList","length","nonOwnerUsers","actionFunction","unmuteUserConf","muteUserConf","_i","nonOwnerUsers_1","user","muteUnmuteUserInformation","userId","toggleUserMuted","e_6","muteWebRTC","mutePhysical","e_5","userConversationInformations","_d","parkingInformation","key","hasOwnProperty","conversation","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","pauseRemoteAudio","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","recordingValues","toggleRecord","_e","e_1","extensionId","removeUserInformation","hangupUserConf","_this","remainingParticipants","filter","e_7","unmuteWebRTC"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../store/index.js"),t=require("../webrtc/janus.js");require("react");var r=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js"),exports.notifyPeerVideoStart=function(){var t=e.store.getState().websocket.socket,r=e.store.getState().currentCall.username,s=e.store.getState().currentUser.username;t&&r&&s&&t.emit("message",{message:"videoCallStart",destUser:r,callUser:s})},exports.releaseLocalVideo=function(){var s,i,o,a,l=e.store.getState().webrtc,n=l.localVideoStream,d=l.sipcall;n&&t.default.stopAllTracks(n),e.store.dispatch.webrtc.updateLocalVideoStream(null),(null!==(a=null===(o=null===(i=null===(s=null==d?void 0:d.webrtcStuff)||void 0===s?void 0:s.pc)||void 0===i?void 0:i.getSenders)||void 0===o?void 0:o.call(i))&&void 0!==a?a:[]).forEach(function(e){var t;"video"===(null===(t=e.track)||void 0===t?void 0:t.kind)&&(e.track.stop(),e.replaceTrack(null).catch(function(){}))}),e.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!1}),"video"===e.store.getState().island.view&&e.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-video-disabled",{})},exports.sdpDeclinesVideo=function(e){return"string"==typeof e&&/^m=video 0 /m.test(e)},exports.sdpHasActiveVideo=function(e){return"string"==typeof e&&/^m=video (?!0 )/m.test(e)};
2
+ //# sourceMappingURL=video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video.js","sources":["../../../src/lib/phone/video.ts"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\nimport Janus from '../webrtc/janus'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Tells the peer (through the websocket) that a video call started, so that\n * a WebRTC peer opens its video view\n */\nexport function notifyPeerVideoStart() {\n const { socket } = store.getState().websocket\n const { username: destUser } = store.getState().currentCall\n const { username: callUser } = store.getState().currentUser\n\n if (!socket || !destUser || !callUser) {\n return\n }\n\n socket.emit('message', {\n message: 'videoCallStart',\n destUser,\n callUser,\n })\n}\n\n/**\n * True when the SDP answer carries an active video stream\n */\nexport function sdpHasActiveVideo(sdp: string | undefined): boolean {\n if (typeof sdp !== 'string') {\n return false\n }\n return /^m=video (?!0 )/m.test(sdp)\n}\n\n/**\n * True when the SDP declines the video stream (m=video with port 0)\n */\nexport function sdpDeclinesVideo(sdp: string | undefined): boolean {\n return typeof sdp === 'string' && /^m=video 0 /m.test(sdp)\n}\n\n/**\n * Stops the local camera and brings the island back to an audio call: used when the\n * remote party, or Asterisk on its behalf, declines the video stream\n */\nexport function releaseLocalVideo() {\n const { localVideoStream, sipcall }: { localVideoStream: MediaStream | null; sipcall: any } =\n store.getState().webrtc\n if (localVideoStream) {\n // @ts-ignore\n Janus.stopAllTracks(localVideoStream)\n }\n store.dispatch.webrtc.updateLocalVideoStream(null)\n const senders: RTCRtpSender[] = sipcall?.webrtcStuff?.pc?.getSenders?.() ?? []\n senders.forEach((sender) => {\n if (sender.track?.kind === 'video') {\n sender.track.stop()\n sender.replaceTrack(null).catch(() => {})\n }\n })\n store.dispatch.currentCall.updateCurrentCall({ isLocalVideoEnabled: false })\n if (store.getState().island.view === 'video') {\n store.dispatch.island.setIslandView('call')\n }\n eventDispatch('phone-island-video-disabled', {})\n}\n"],"names":["socket","store","getState","websocket","destUser","currentCall","username","callUser","currentUser","emit","message","_e","webrtc","localVideoStream","sipcall","Janus","stopAllTracks","dispatch","updateLocalVideoStream","_d","_c","_a","webrtcStuff","pc","_b","getSenders","call","forEach","sender","track","kind","stop","replaceTrack","catch","updateCurrentCall","isLocalVideoEnabled","island","view","setIslandView","eventDispatch","sdp","test"],"mappings":"mTAYU,IAAAA,EAAWC,EAAKA,MAACC,WAAWC,UAASH,OAC3BI,EAAaH,EAAKA,MAACC,WAAWG,YAAWC,SACzCC,EAAaN,EAAKA,MAACC,WAAWM,YAAWF,SAEtDN,GAAWI,GAAaG,GAI7BP,EAAOS,KAAK,UAAW,CACrBC,QAAS,iBACTN,SAAQA,EACRG,SAAQA,GAEZ,mDAwBQI,EACJV,EAAAA,MAAMC,WAAWU,OADXC,EAAgBF,EAAAE,iBAAEC,YAEtBD,GAEFE,UAAMC,cAAcH,GAEtBZ,EAAAA,MAAMgB,SAASL,OAAOM,uBAAuB,OAC2B,QAAxCC,EAAwC,QAAxCC,EAAwB,kBAAxBC,EAAAP,aAAO,EAAPA,EAASQ,kCAAaC,UAAE,IAAAC,OAAA,EAAAA,EAAEC,kBAAc,IAAAL,OAAA,EAAAA,EAAAM,KAAAF,UAAA,IAAAL,EAAAA,EAAI,IACpEQ,QAAQ,SAACC,SACY,WAAT,UAAdA,EAAOC,aAAO,IAAAR,OAAA,EAAAA,EAAAS,QAChBF,EAAOC,MAAME,OACbH,EAAOI,aAAa,MAAMC,MAAM,WAAQ,GAE5C,GACAhC,EAAKA,MAACgB,SAASZ,YAAY6B,kBAAkB,CAAEC,qBAAqB,IAC/B,UAAjClC,EAAKA,MAACC,WAAWkC,OAAOC,MAC1BpC,EAAAA,MAAMgB,SAASmB,OAAOE,cAAc,QAEtCC,gBAAc,8BAA+B,CAAA,EAC/C,2BA5BM,SAA2BC,GAC/B,MAAsB,iBAARA,GAAoB,eAAeC,KAAKD,EACxD,4BAZM,SAA4BA,GAChC,MAAmB,iBAARA,GAGJ,mBAAmBC,KAAKD,EACjC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("./janus.js"),r=require("../../store/index.js"),s=require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),a=require("../devices/devices.js");function n(e){return e?e.replace(/["\\\r\n\t]/g,"").trim().replace(/^\*+\s*/,""):""}function o(e,s){return new Promise(function(a,n){var o=r.store.getState().webrtc.sipcall;o.createOffer({tracks:s,success:function(r){t.default.debug("Got SDP!"),t.default.debug(r),o.send({message:{request:"call",uri:e,autoaccept_reinvites:!1},jsep:r}),a(!0)},error:function(e){t.default.error("WebRTC error...",e),t.default.error("WebRTC error call on createOffer: ",e),n(!1)}})})}exports.answerWebRTC=function(){var e,s=r.store.getState().webrtc,n=s.sipcall,o=s.jsepGlobal;if(console.log("[JSEP] answerWebRTC called",{hasSipcall:!!n,hasJsepGlobal:!!o,sipcallId:null===(e=null==n?void 0:n.getId)||void 0===e?void 0:e.call(n),timestamp:(new Date).toISOString()}),n&&o){var c=a.getCurrentAudioInputDeviceId(),i=[];c?i.push({type:"audio",capture:{deviceId:{exact:c}},recv:!0}):i.push({type:"audio",capture:!0,recv:!0});try{n.createAnswer({jsep:o,tracks:i,success:function(e){n.send({message:{request:"accept",autoaccept_reinvites:!1},jsep:e})},error:function(e){t.default.error("WebRTC error:",e),e&&("object"==typeof e&&469===e.code||"string"==typeof e&&e.includes("Unexpected ANSWER"))?(console.warn('Got "Unexpected ANSWER" error, forcing the answer anyway'),n.send({message:{request:"accept",autoaccept_reinvites:!1}})):n.send({message:{request:"decline",code:480}})}})}catch(e){console.error("Exception in createAnswer:",e),n.send({message:{request:"accept",autoaccept_reinvites:!1}})}}},exports.call=o,exports.callSipURI=function(r){var s=this;a.getSupportedDevices(function(){return e.__awaiter(s,void 0,void 0,function(){var s,n;return e.__generator(this,function(e){switch(e.label){case 0:return t.default.log("This is a SIP call"),s=a.getCurrentAudioInputDeviceId(),n=[],s?n.push({type:"audio",capture:{deviceId:{exact:s}},recv:!0}):n.push({type:"audio",capture:!0,recv:!0}),[4,o(r,n)];case 1:return e.sent(),[2]}})})})},exports.detach=function(){var e=r.store.getState().webrtc.sipcall;if(e)return e.detach()},exports.handleRemote=function(e){var t=r.store.getState().webrtc.sipcall;t&&t.handleRemoteJsep({jsep:e,error:function(e){console.error("WebRTC error... "+JSON.stringify(e));t.send({message:{request:"hangup"}}),t.hangup()}})},exports.hangup=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"hangup"}})},exports.muteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.muteAudio(),e.isAudioMuted()},exports.pauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"hold"}}),!0}catch(e){return console.error(e),!1}},exports.register=function(e){var t=e.sipExten,s=e.sipSecret,a=e.sipHost,o=e.sipPort,c=r.store.getState().webrtc,i=c.sipcall,u=c.registered,p=r.store.getState().currentUser.name;u?console.log("[REGISTER] Already registered, skipping registration request",{sipExten:t,timestamp:(new Date).toISOString()}):i&&(console.log("[REGISTER] Sending registration request",{sipExten:t,timestamp:(new Date).toISOString()}),i.send({message:{request:"register",username:"sip:".concat(t,"@").concat(a),display_name:n(p),secret:s,proxy:"sip:".concat(a,":").concat(o),outbound_proxy:"sip:".concat(a,":").concat(o),sips:!1,refresh:!1}}))},exports.sendDTMF=function(e){var t=r.store.getState().webrtc.sipcall;"chrome"===s.default.browserDetails.browser?t.dtmf({dtmf:{tones:e}}):t.send({message:{request:"dtmf_info",digit:"".concat(e)}})},exports.toSipDisplayName=n,exports.unmuteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.unmuteAudio(),!e.isAudioMuted()},exports.unpauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"unhold"}}),!0}catch(e){return console.error(e),!1}},exports.unregister=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"unregister"}})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("./janus.js"),r=require("../../store/index.js"),s=require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),a=require("../devices/devices.js");function o(e){return e?e.replace(/["\\\r\n\t]/g,"").trim().replace(/^\*+\s*/,""):""}function c(e,s){return new Promise(function(a,o){var c=r.store.getState().webrtc.sipcall;c.createOffer({tracks:s,success:function(r){t.default.debug("Got SDP!"),t.default.debug(r),c.send({message:{request:"call",uri:e,autoaccept_reinvites:!1},jsep:r}),a(!0)},error:function(e){t.default.error("WebRTC error...",e),t.default.error("WebRTC error call on createOffer: ",e),o(!1)}})})}exports.answerWebRTC=function(){var e,s=r.store.getState().webrtc,o=s.sipcall,c=s.jsepGlobal;if(console.log("[JSEP] answerWebRTC called",{hasSipcall:!!o,hasJsepGlobal:!!c,sipcallId:null===(e=null==o?void 0:o.getId)||void 0===e?void 0:e.call(o),timestamp:(new Date).toISOString()}),o&&c){var n=a.getCurrentAudioInputDeviceId(),i=[];n?i.push({type:"audio",capture:{deviceId:{exact:n}},recv:!0}):i.push({type:"audio",capture:!0,recv:!0});try{o.createAnswer({jsep:c,tracks:i,success:function(e){o.send({message:{request:"accept",autoaccept_reinvites:!1},jsep:e})},error:function(e){t.default.error("WebRTC error:",e),e&&("object"==typeof e&&469===e.code||"string"==typeof e&&e.includes("Unexpected ANSWER"))?(console.warn('Got "Unexpected ANSWER" error, forcing the answer anyway'),o.send({message:{request:"accept",autoaccept_reinvites:!1}})):o.send({message:{request:"decline",code:480}})}})}catch(e){console.error("Exception in createAnswer:",e),o.send({message:{request:"accept",autoaccept_reinvites:!1}})}}},exports.call=c,exports.callSipURI=function(s,o){var n=this;void 0===o&&(o={}),a.getSupportedDevices(function(){return e.__awaiter(n,void 0,void 0,function(){var n,i,u;return e.__generator(this,function(e){switch(e.label){case 0:return t.default.log(o.video?"This is a SIP video call":"This is a SIP call"),n=a.getCurrentAudioInputDeviceId(),i=[],n?i.push({type:"audio",capture:{deviceId:{exact:n}},recv:!0}):i.push({type:"audio",capture:!0,recv:!0}),o.video&&(u=a.getCurrentVideoInputDeviceId(),i.push({type:"video",capture:!u||{deviceId:{exact:u}},recv:!0}),r.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0}),r.store.dispatch.currentCall.setVideoTrackAdded(!0)),[4,c(s,i)];case 1:return e.sent(),[2]}})})})},exports.detach=function(){var e=r.store.getState().webrtc.sipcall;if(e)return e.detach()},exports.handleRemote=function(e){var t=r.store.getState().webrtc.sipcall;t&&t.handleRemoteJsep({jsep:e,error:function(e){console.error("WebRTC error... "+JSON.stringify(e));t.send({message:{request:"hangup"}}),t.hangup()}})},exports.hangup=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"hangup"}})},exports.muteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.muteAudio(),e.isAudioMuted()},exports.pauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"hold"}}),!0}catch(e){return console.error(e),!1}},exports.register=function(e){var t=e.sipExten,s=e.sipSecret,a=e.sipHost,c=e.sipPort,n=r.store.getState().webrtc,i=n.sipcall,u=n.registered,p=r.store.getState().currentUser.name;u?console.log("[REGISTER] Already registered, skipping registration request",{sipExten:t,timestamp:(new Date).toISOString()}):i&&(console.log("[REGISTER] Sending registration request",{sipExten:t,timestamp:(new Date).toISOString()}),i.send({message:{request:"register",username:"sip:".concat(t,"@").concat(a),display_name:o(p),secret:s,proxy:"sip:".concat(a,":").concat(c),outbound_proxy:"sip:".concat(a,":").concat(c),sips:!1,refresh:!1}}))},exports.sendDTMF=function(e){var t=r.store.getState().webrtc.sipcall;"chrome"===s.default.browserDetails.browser?t.dtmf({dtmf:{tones:e}}):t.send({message:{request:"dtmf_info",digit:"".concat(e)}})},exports.toSipDisplayName=o,exports.unmuteWebRTC=function(){var e=r.store.getState().webrtc.sipcall;return e.unmuteAudio(),!e.isAudioMuted()},exports.unpauseWebRTC=function(){var e=r.store.getState().webrtc.sipcall;try{return e.send({message:{request:"unhold"}}),!0}catch(e){return console.error(e),!1}},exports.unregister=function(){var e=r.store.getState().webrtc.sipcall;e&&e.send({message:{request:"unregister"}})};
2
2
  //# sourceMappingURL=messages.js.map