@nethesis/phone-island 1.0.14 → 1.0.15-dev.1

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 (732) 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/AlertGuard.js +1 -1
  6. package/dist/components/AlertGuard.js.map +1 -1
  7. package/dist/components/AlertView/index.js +1 -1
  8. package/dist/components/AlertView/index.js.map +1 -1
  9. package/dist/components/AudioBars.js +1 -1
  10. package/dist/components/AudioBars.js.map +1 -1
  11. package/dist/components/AudioPlayerView/Avatar.js +1 -1
  12. package/dist/components/AudioPlayerView/Avatar.js.map +1 -1
  13. package/dist/components/AudioPlayerView/PlayerFooterActions.js +1 -1
  14. package/dist/components/AudioPlayerView/PlayerFooterActions.js.map +1 -1
  15. package/dist/components/AudioPlayerView/Progress.js +1 -1
  16. package/dist/components/AudioPlayerView/Progress.js.map +1 -1
  17. package/dist/components/AudioPlayerView/index.js +1 -1
  18. package/dist/components/AudioPlayerView/index.js.map +1 -1
  19. package/dist/components/AvatarGroup.js +1 -1
  20. package/dist/components/AvatarGroup.js.map +1 -1
  21. package/dist/components/CallView/Actions.js +1 -1
  22. package/dist/components/CallView/Actions.js.map +1 -1
  23. package/dist/components/CallView/Avatar.js +1 -1
  24. package/dist/components/CallView/Avatar.js.map +1 -1
  25. package/dist/components/CallView/BackCall.js +1 -1
  26. package/dist/components/CallView/BackCall.js.map +1 -1
  27. package/dist/components/CallView/DeviceIcon.js +2 -0
  28. package/dist/components/CallView/DeviceIcon.js.map +1 -0
  29. package/dist/components/CallView/DisplayName.js +1 -1
  30. package/dist/components/CallView/DisplayName.js.map +1 -1
  31. package/dist/components/CallView/Number.js +1 -1
  32. package/dist/components/CallView/Number.js.map +1 -1
  33. package/dist/components/CallView/NumberPopover.js +2 -0
  34. package/dist/components/CallView/NumberPopover.js.map +1 -0
  35. package/dist/components/CallView/Timer.js +1 -1
  36. package/dist/components/CallView/Timer.js.map +1 -1
  37. package/dist/components/CallView/index.js +1 -1
  38. package/dist/components/CallView/index.js.map +1 -1
  39. package/dist/components/ConferenceView/ConferenceUsersList.js +1 -1
  40. package/dist/components/ConferenceView/ConferenceUsersList.js.map +1 -1
  41. package/dist/components/ConferenceView/index.js +1 -1
  42. package/dist/components/ConferenceView/index.js.map +1 -1
  43. package/dist/components/ContactView/ContactListView.js +1 -1
  44. package/dist/components/ContactView/ContactListView.js.map +1 -1
  45. package/dist/components/ContactView/ListAvatar.js +1 -1
  46. package/dist/components/ContactView/ListAvatar.js.map +1 -1
  47. package/dist/components/ContactView/SelectContactNumberView.js +1 -1
  48. package/dist/components/ContactView/SelectContactNumberView.js.map +1 -1
  49. package/dist/components/ContactView/TransferActions.js +1 -1
  50. package/dist/components/ContactView/TransferActions.js.map +1 -1
  51. package/dist/components/CustomThemedTooltip.js +1 -1
  52. package/dist/components/CustomThemedTooltip.js.map +1 -1
  53. package/dist/components/Dropdown.js +1 -1
  54. package/dist/components/Dropdown.js.map +1 -1
  55. package/dist/components/GenericAvatar.js +1 -1
  56. package/dist/components/GenericAvatar.js.map +1 -1
  57. package/dist/components/Hangup.js +1 -1
  58. package/dist/components/Hangup.js.map +1 -1
  59. package/dist/components/Island.js +1 -1
  60. package/dist/components/Island.js.map +1 -1
  61. package/dist/components/IslandDrag.js +1 -1
  62. package/dist/components/IslandDrag.js.map +1 -1
  63. package/dist/components/IslandMotion.js +1 -1
  64. package/dist/components/IslandMotion.js.map +1 -1
  65. package/dist/components/KeypadView/Actions.js +1 -1
  66. package/dist/components/KeypadView/Actions.js.map +1 -1
  67. package/dist/components/KeypadView/index.js +1 -1
  68. package/dist/components/KeypadView/index.js.map +1 -1
  69. package/dist/components/OperatorBusyView/index.js +1 -1
  70. package/dist/components/OperatorBusyView/index.js.map +1 -1
  71. package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js +1 -1
  72. package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js.map +1 -1
  73. package/dist/components/PhysicalRecorderView/index.js +1 -1
  74. package/dist/components/PhysicalRecorderView/index.js.map +1 -1
  75. package/dist/components/RecorderView/Actions.js +1 -1
  76. package/dist/components/RecorderView/Actions.js.map +1 -1
  77. package/dist/components/RecorderView/Bar.js +1 -1
  78. package/dist/components/RecorderView/Bar.js.map +1 -1
  79. package/dist/components/RecorderView/BarsGroup.js +1 -1
  80. package/dist/components/RecorderView/BarsGroup.js.map +1 -1
  81. package/dist/components/RecorderView/Timer.js +1 -1
  82. package/dist/components/RecorderView/Timer.js.map +1 -1
  83. package/dist/components/RecorderView/index.js +1 -1
  84. package/dist/components/RecorderView/index.js.map +1 -1
  85. package/dist/components/RestAPI.js +1 -1
  86. package/dist/components/RestAPI.js.map +1 -1
  87. package/dist/components/SettingsView/AudioView.js +1 -1
  88. package/dist/components/SettingsView/AudioView.js.map +1 -1
  89. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  90. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  91. package/dist/components/SettingsView/SettingsHeader.js +1 -1
  92. package/dist/components/SettingsView/SettingsHeader.js.map +1 -1
  93. package/dist/components/SettingsView/ThemeView.js +1 -1
  94. package/dist/components/SettingsView/ThemeView.js.map +1 -1
  95. package/dist/components/SettingsView/VideoInputView.js +1 -1
  96. package/dist/components/SettingsView/VideoInputView.js.map +1 -1
  97. package/dist/components/SettingsView/index.js +1 -1
  98. package/dist/components/SettingsView/index.js.map +1 -1
  99. package/dist/components/SideView/SideView.js +1 -1
  100. package/dist/components/SideView/SideView.js.map +1 -1
  101. package/dist/components/SideView/components/SideViewButton.js +1 -1
  102. package/dist/components/SideView/components/SideViewButton.js.map +1 -1
  103. package/dist/components/SideView/hooks/useSideViewLogic.js +1 -1
  104. package/dist/components/SideView/hooks/useSideViewLogic.js.map +1 -1
  105. package/dist/components/Socket.js +1 -1
  106. package/dist/components/Socket.js.map +1 -1
  107. package/dist/components/StreamingAnswerView/index.js +1 -1
  108. package/dist/components/StreamingAnswerView/index.js.map +1 -1
  109. package/dist/components/StreamingImage/index.js +1 -1
  110. package/dist/components/StreamingImage/index.js.map +1 -1
  111. package/dist/components/SwitchDeviceView/index.js +1 -1
  112. package/dist/components/SwitchDeviceView/index.js.map +1 -1
  113. package/dist/components/SwitchInputView/DropdownContent.js +1 -1
  114. package/dist/components/SwitchInputView/DropdownContent.js.map +1 -1
  115. package/dist/components/SwitchInputView/Index.js +1 -1
  116. package/dist/components/TextScroll.js +1 -1
  117. package/dist/components/TextScroll.js.map +1 -1
  118. package/dist/components/TranscriptionView/TranscriptionView.js +1 -1
  119. package/dist/components/TranscriptionView/TranscriptionView.js.map +1 -1
  120. package/dist/components/TransferButton.js +1 -1
  121. package/dist/components/TransferButton.js.map +1 -1
  122. package/dist/components/VideoStreamingEmptyState/index.js +1 -1
  123. package/dist/components/VideoStreamingEmptyState/index.js.map +1 -1
  124. package/dist/components/VideoStreamingSkeleton/index.js +1 -1
  125. package/dist/components/VideoStreamingSkeleton/index.js.map +1 -1
  126. package/dist/components/VideoView/index.js +1 -1
  127. package/dist/components/VideoView/index.js.map +1 -1
  128. package/dist/components/ViewsTransition.js +1 -1
  129. package/dist/components/ViewsTransition.js.map +1 -1
  130. package/dist/components/WebRTC.js +1 -1
  131. package/dist/components/WebRTC.js.map +1 -1
  132. package/dist/events/CallEvents.js +1 -1
  133. package/dist/events/CallEvents.js.map +1 -1
  134. package/dist/events/PlayerEvents.js +1 -1
  135. package/dist/events/PlayerEvents.js.map +1 -1
  136. package/dist/events/RecorderEvents.js +1 -1
  137. package/dist/events/RecorderEvents.js.map +1 -1
  138. package/dist/index.css +1 -1
  139. package/dist/lib/avatars/avatars.js +1 -1
  140. package/dist/lib/avatars/avatars.js.map +1 -1
  141. package/dist/lib/devices/devices.js +1 -1
  142. package/dist/lib/devices/devices.js.map +1 -1
  143. package/dist/lib/phone/audio.js +1 -1
  144. package/dist/lib/phone/audio.js.map +1 -1
  145. package/dist/lib/phone/call.js +1 -1
  146. package/dist/lib/phone/call.js.map +1 -1
  147. package/dist/lib/phone/conversation.js +1 -1
  148. package/dist/lib/phone/conversation.js.map +1 -1
  149. package/dist/lib/phone/counterpartDevice.js +2 -0
  150. package/dist/lib/phone/counterpartDevice.js.map +1 -0
  151. package/dist/lib/phone/queue.js +1 -1
  152. package/dist/lib/phone/queue.js.map +1 -1
  153. package/dist/lib/player/audio.js +1 -1
  154. package/dist/lib/player/audio.js.map +1 -1
  155. package/dist/lib/user/extensions.js +1 -1
  156. package/dist/lib/user/extensions.js.map +1 -1
  157. package/dist/lib/webrtc/janus.js +1 -1
  158. package/dist/lib/webrtc/janus.js.map +1 -1
  159. package/dist/lib/webrtc/messages.js +1 -1
  160. package/dist/lib/webrtc/messages.js.map +1 -1
  161. package/dist/models/conference.js +1 -1
  162. package/dist/models/conference.js.map +1 -1
  163. package/dist/models/currentCall.js +1 -1
  164. package/dist/models/currentCall.js.map +1 -1
  165. package/dist/models/mediaDevices.js +1 -1
  166. package/dist/models/mediaDevices.js.map +1 -1
  167. package/dist/models/player.js +1 -1
  168. package/dist/models/player.js.map +1 -1
  169. package/dist/models/queue.js +1 -1
  170. package/dist/models/queue.js.map +1 -1
  171. package/dist/models/ringtones.js +1 -1
  172. package/dist/models/ringtones.js.map +1 -1
  173. package/dist/models/streaming.js +1 -1
  174. package/dist/models/streaming.js.map +1 -1
  175. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +1 -1
  176. package/dist/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +1 -1
  177. package/dist/node_modules/@babel/runtime/helpers/esm/objectSpread2.js.map +1 -1
  178. package/dist/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js.map +1 -1
  179. package/dist/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -1
  180. package/dist/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js.map +1 -1
  181. package/dist/node_modules/@babel/runtime/helpers/toPrimitive.js.map +1 -1
  182. package/dist/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js.map +1 -1
  183. package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +1 -1
  184. package/dist/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -1
  185. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +1 -1
  186. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -1
  187. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js +1 -1
  188. package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js.map +1 -1
  189. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js +1 -1
  190. package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.js.map +1 -1
  191. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.mjs.js +1 -1
  192. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.mjs.js.map +1 -1
  193. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs.js +1 -1
  194. package/dist/node_modules/@floating-ui/react/dist/floating-ui.react.utils.mjs.js.map +1 -1
  195. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js +1 -1
  196. package/dist/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.js.map +1 -1
  197. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js +1 -1
  198. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.js.map +1 -1
  199. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js +1 -1
  200. package/dist/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.js.map +1 -1
  201. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +3 -3
  202. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
  203. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
  204. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
  205. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js +2 -0
  206. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js.map +1 -0
  207. package/dist/node_modules/@headlessui/react/dist/components/description/description.js +1 -1
  208. package/dist/node_modules/@headlessui/react/dist/components/description/description.js.map +1 -1
  209. package/dist/node_modules/@headlessui/react/dist/components/label/label.js +1 -1
  210. package/dist/node_modules/@headlessui/react/dist/components/label/label.js.map +1 -1
  211. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js +1 -1
  212. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine-glue.js.map +1 -1
  213. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js +1 -1
  214. package/dist/node_modules/@headlessui/react/dist/components/menu/menu-machine.js.map +1 -1
  215. package/dist/node_modules/@headlessui/react/dist/components/menu/menu.js +1 -1
  216. package/dist/node_modules/@headlessui/react/dist/components/menu/menu.js.map +1 -1
  217. package/dist/node_modules/@headlessui/react/dist/components/portal/portal.js +1 -1
  218. package/dist/node_modules/@headlessui/react/dist/components/portal/portal.js.map +1 -1
  219. package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js +1 -1
  220. package/dist/node_modules/@headlessui/react/dist/components/transition/transition.js.map +1 -1
  221. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js +1 -1
  222. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/handle-ios-locking.js.map +1 -1
  223. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js +1 -1
  224. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/overflow-store.js.map +1 -1
  225. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js +1 -1
  226. package/dist/node_modules/@headlessui/react/dist/hooks/document-overflow/use-document-overflow.js.map +1 -1
  227. package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js +1 -1
  228. package/dist/node_modules/@headlessui/react/dist/hooks/use-active-press.js.map +1 -1
  229. package/dist/node_modules/@headlessui/react/dist/hooks/use-disposables.js +1 -1
  230. package/dist/node_modules/@headlessui/react/dist/hooks/use-disposables.js.map +1 -1
  231. package/dist/node_modules/@headlessui/react/dist/hooks/use-document-event.js +1 -1
  232. package/dist/node_modules/@headlessui/react/dist/hooks/use-document-event.js.map +1 -1
  233. package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js +1 -1
  234. package/dist/node_modules/@headlessui/react/dist/hooks/use-element-size.js.map +1 -1
  235. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js +1 -1
  236. package/dist/node_modules/@headlessui/react/dist/hooks/use-event.js.map +1 -1
  237. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js +1 -1
  238. package/dist/node_modules/@headlessui/react/dist/hooks/use-flags.js.map +1 -1
  239. package/dist/node_modules/@headlessui/react/dist/hooks/use-handle-toggle.js +1 -1
  240. package/dist/node_modules/@headlessui/react/dist/hooks/use-handle-toggle.js.map +1 -1
  241. package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js +1 -1
  242. package/dist/node_modules/@headlessui/react/dist/hooks/use-inert-others.js.map +1 -1
  243. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-mounted.js +1 -1
  244. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-mounted.js.map +1 -1
  245. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-top-layer.js +1 -1
  246. package/dist/node_modules/@headlessui/react/dist/hooks/use-is-top-layer.js.map +1 -1
  247. package/dist/node_modules/@headlessui/react/dist/hooks/use-iso-morphic-effect.js.map +1 -1
  248. package/dist/node_modules/@headlessui/react/dist/hooks/use-latest-value.js +1 -1
  249. package/dist/node_modules/@headlessui/react/dist/hooks/use-latest-value.js.map +1 -1
  250. package/dist/node_modules/@headlessui/react/dist/hooks/use-on-disappear.js +1 -1
  251. package/dist/node_modules/@headlessui/react/dist/hooks/use-on-disappear.js.map +1 -1
  252. package/dist/node_modules/@headlessui/react/dist/hooks/use-on-unmount.js +1 -1
  253. package/dist/node_modules/@headlessui/react/dist/hooks/use-on-unmount.js.map +1 -1
  254. package/dist/node_modules/@headlessui/react/dist/hooks/use-outside-click.js +1 -1
  255. package/dist/node_modules/@headlessui/react/dist/hooks/use-outside-click.js.map +1 -1
  256. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js +1 -1
  257. package/dist/node_modules/@headlessui/react/dist/hooks/use-owner.js.map +1 -1
  258. package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js +1 -1
  259. package/dist/node_modules/@headlessui/react/dist/hooks/use-quick-release.js.map +1 -1
  260. package/dist/node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js +1 -1
  261. package/dist/node_modules/@headlessui/react/dist/hooks/use-resolve-button-type.js.map +1 -1
  262. package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js +1 -1
  263. package/dist/node_modules/@headlessui/react/dist/hooks/use-scroll-lock.js.map +1 -1
  264. package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js +1 -1
  265. package/dist/node_modules/@headlessui/react/dist/hooks/use-server-handoff-complete.js.map +1 -1
  266. package/dist/node_modules/@headlessui/react/dist/hooks/use-slot.js +1 -1
  267. package/dist/node_modules/@headlessui/react/dist/hooks/use-slot.js.map +1 -1
  268. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js +1 -1
  269. package/dist/node_modules/@headlessui/react/dist/hooks/use-sync-refs.js.map +1 -1
  270. package/dist/node_modules/@headlessui/react/dist/hooks/use-text-value.js +1 -1
  271. package/dist/node_modules/@headlessui/react/dist/hooks/use-text-value.js.map +1 -1
  272. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js +1 -1
  273. package/dist/node_modules/@headlessui/react/dist/hooks/use-transition.js.map +1 -1
  274. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js +1 -1
  275. package/dist/node_modules/@headlessui/react/dist/hooks/use-tree-walker.js.map +1 -1
  276. package/dist/node_modules/@headlessui/react/dist/hooks/use-window-event.js +1 -1
  277. package/dist/node_modules/@headlessui/react/dist/hooks/use-window-event.js.map +1 -1
  278. package/dist/node_modules/@headlessui/react/dist/internal/disabled.js.map +1 -1
  279. package/dist/node_modules/@headlessui/react/dist/internal/floating.js +1 -1
  280. package/dist/node_modules/@headlessui/react/dist/internal/floating.js.map +1 -1
  281. package/dist/node_modules/@headlessui/react/dist/internal/id.js.map +1 -1
  282. package/dist/node_modules/@headlessui/react/dist/machine.js +1 -1
  283. package/dist/node_modules/@headlessui/react/dist/machine.js.map +1 -1
  284. package/dist/node_modules/@headlessui/react/dist/machines/stack-machine.js +1 -1
  285. package/dist/node_modules/@headlessui/react/dist/machines/stack-machine.js.map +1 -1
  286. package/dist/node_modules/@headlessui/react/dist/react-glue.js +1 -1
  287. package/dist/node_modules/@headlessui/react/dist/react-glue.js.map +1 -1
  288. package/dist/node_modules/@headlessui/react/dist/utils/bugs.js.map +1 -1
  289. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js +1 -1
  290. package/dist/node_modules/@headlessui/react/dist/utils/class-names.js.map +1 -1
  291. package/dist/node_modules/@headlessui/react/dist/utils/default-map.js.map +1 -1
  292. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js +1 -1
  293. package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -1
  294. package/dist/node_modules/@headlessui/react/dist/utils/element-movement.js +1 -1
  295. package/dist/node_modules/@headlessui/react/dist/utils/element-movement.js.map +1 -1
  296. package/dist/node_modules/@headlessui/react/dist/utils/env.js.map +1 -1
  297. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +1 -1
  298. package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -1
  299. package/dist/node_modules/@headlessui/react/dist/utils/get-text-value.js +1 -1
  300. package/dist/node_modules/@headlessui/react/dist/utils/get-text-value.js.map +1 -1
  301. package/dist/node_modules/@headlessui/react/dist/utils/match.js +1 -1
  302. package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -1
  303. package/dist/node_modules/@headlessui/react/dist/utils/micro-task.js +1 -1
  304. package/dist/node_modules/@headlessui/react/dist/utils/micro-task.js.map +1 -1
  305. package/dist/node_modules/@headlessui/react/dist/utils/owner.js.map +1 -1
  306. package/dist/node_modules/@headlessui/react/dist/utils/render.js +1 -1
  307. package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -1
  308. package/dist/node_modules/@headlessui/react/dist/utils/store.js +1 -1
  309. package/dist/node_modules/@headlessui/react/dist/utils/store.js.map +1 -1
  310. package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js +1 -1
  311. package/dist/node_modules/@react-aria/focus/dist/FocusScope.mjs.js.map +1 -1
  312. package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js +1 -1
  313. package/dist/node_modules/@react-aria/focus/dist/useFocusRing.mjs.js.map +1 -1
  314. package/dist/node_modules/@react-aria/interactions/dist/useFocus.mjs.js +1 -1
  315. package/dist/node_modules/@react-aria/interactions/dist/useFocus.mjs.js.map +1 -1
  316. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.mjs.js +1 -1
  317. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.mjs.js.map +1 -1
  318. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.mjs.js +1 -1
  319. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.mjs.js.map +1 -1
  320. package/dist/node_modules/@react-aria/interactions/dist/useHover.mjs.js +1 -1
  321. package/dist/node_modules/@react-aria/interactions/dist/useHover.mjs.js.map +1 -1
  322. package/dist/node_modules/@react-aria/interactions/dist/utils.mjs.js +1 -1
  323. package/dist/node_modules/@react-aria/interactions/dist/utils.mjs.js.map +1 -1
  324. package/dist/node_modules/@react-aria/utils/dist/domHelpers.mjs.js.map +1 -1
  325. package/dist/node_modules/@react-aria/utils/dist/platform.mjs.js +1 -1
  326. package/dist/node_modules/@react-aria/utils/dist/platform.mjs.js.map +1 -1
  327. package/dist/node_modules/@react-aria/utils/dist/runAfterTransition.mjs.js +1 -1
  328. package/dist/node_modules/@react-aria/utils/dist/runAfterTransition.mjs.js.map +1 -1
  329. package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js +1 -1
  330. package/dist/node_modules/@react-aria/utils/dist/useEffectEvent.mjs.js.map +1 -1
  331. package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js +1 -1
  332. package/dist/node_modules/@react-aria/utils/dist/useGlobalListeners.mjs.js.map +1 -1
  333. package/dist/node_modules/@react-aria/utils/dist/useId.mjs.js +1 -1
  334. package/dist/node_modules/@react-aria/utils/dist/useId.mjs.js.map +1 -1
  335. package/dist/node_modules/@rematch/core/dist/core.esm.js +1 -1
  336. package/dist/node_modules/@rematch/core/dist/core.esm.js.map +1 -1
  337. package/dist/node_modules/@rematch/immer/dist/immer.esm.js +1 -1
  338. package/dist/node_modules/@rematch/immer/dist/immer.esm.js.map +1 -1
  339. package/dist/node_modules/@rematch/select/dist/select.esm.js +1 -1
  340. package/dist/node_modules/@rematch/select/dist/select.esm.js.map +1 -1
  341. package/dist/node_modules/bowser/es5.js +1 -1
  342. package/dist/node_modules/bowser/es5.js.map +1 -1
  343. package/dist/node_modules/ebml-block/index.js +1 -1
  344. package/dist/node_modules/ebml-block/index.js.map +1 -1
  345. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +1 -1
  346. package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -1
  347. package/dist/node_modules/engine.io-client/build/esm/globals.js +2 -0
  348. package/dist/node_modules/engine.io-client/build/esm/globals.js.map +1 -0
  349. package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
  350. package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
  351. package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
  352. package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
  353. package/dist/node_modules/engine.io-client/build/esm/transports/index.js +1 -1
  354. package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -1
  355. package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +2 -0
  356. package/dist/node_modules/engine.io-client/build/esm/transports/polling-xhr.js.map +1 -0
  357. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +1 -1
  358. package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -1
  359. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +1 -1
  360. package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -1
  361. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +1 -1
  362. package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -1
  363. package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
  364. package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
  365. package/dist/node_modules/engine.io-parser/build/esm/commons.js +1 -1
  366. package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -1
  367. package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -1
  368. package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -1
  369. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
  370. package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
  371. package/dist/node_modules/engine.io-parser/build/esm/index.js +1 -1
  372. package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -1
  373. package/dist/node_modules/events/events.js +1 -1
  374. package/dist/node_modules/events/events.js.map +1 -1
  375. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js +1 -1
  376. package/dist/node_modules/framer-motion/dist/es/animation/hooks/animation-controls.mjs.js.map +1 -1
  377. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js +1 -1
  378. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.mjs.js.map +1 -1
  379. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js +1 -1
  380. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.mjs.js.map +1 -1
  381. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js +1 -1
  382. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js.map +1 -1
  383. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js +1 -1
  384. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.mjs.js.map +1 -1
  385. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs.js +1 -1
  386. package/dist/node_modules/framer-motion/dist/es/components/AnimatePresence/utils.mjs.js.map +1 -1
  387. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs.js +1 -1
  388. package/dist/node_modules/framer-motion/dist/es/context/MotionContext/create.mjs.js.map +1 -1
  389. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js +1 -1
  390. package/dist/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.mjs.js.map +1 -1
  391. package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js +1 -1
  392. package/dist/node_modules/framer-motion/dist/es/gestures/drag/use-drag-controls.mjs.js.map +1 -1
  393. package/dist/node_modules/framer-motion/dist/es/gestures/focus.mjs.js +1 -1
  394. package/dist/node_modules/framer-motion/dist/es/gestures/focus.mjs.js.map +1 -1
  395. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js +1 -1
  396. package/dist/node_modules/framer-motion/dist/es/gestures/hover.mjs.js.map +1 -1
  397. package/dist/node_modules/framer-motion/dist/es/gestures/pan/PanSession.mjs.js.map +1 -1
  398. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js +1 -1
  399. package/dist/node_modules/framer-motion/dist/es/gestures/pan/index.mjs.js.map +1 -1
  400. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js +1 -1
  401. package/dist/node_modules/framer-motion/dist/es/gestures/press.mjs.js.map +1 -1
  402. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js +1 -1
  403. package/dist/node_modules/framer-motion/dist/es/motion/features/animation/exit.mjs.js.map +1 -1
  404. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js +1 -1
  405. package/dist/node_modules/framer-motion/dist/es/motion/features/definitions.mjs.js.map +1 -1
  406. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js +1 -1
  407. package/dist/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.mjs.js.map +1 -1
  408. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js +1 -1
  409. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/index.mjs.js.map +1 -1
  410. package/dist/node_modules/framer-motion/dist/es/motion/features/viewport/observers.mjs.js.map +1 -1
  411. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs.js +1 -1
  412. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.mjs.js.map +1 -1
  413. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js +1 -1
  414. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.mjs.js.map +1 -1
  415. package/dist/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.mjs.js.map +1 -1
  416. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js +1 -1
  417. package/dist/node_modules/framer-motion/dist/es/render/components/create-proxy.mjs.js.map +1 -1
  418. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js +1 -1
  419. package/dist/node_modules/framer-motion/dist/es/render/dom/use-render.mjs.js.map +1 -1
  420. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js +1 -1
  421. package/dist/node_modules/framer-motion/dist/es/render/html/use-props.mjs.js.map +1 -1
  422. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js +1 -1
  423. package/dist/node_modules/framer-motion/dist/es/render/svg/use-props.mjs.js.map +1 -1
  424. package/dist/node_modules/framer-motion/dist/es/utils/get-context-window.mjs.js.map +1 -1
  425. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js +1 -1
  426. package/dist/node_modules/framer-motion/dist/es/utils/use-composed-ref.mjs.js.map +1 -1
  427. package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +1 -1
  428. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js +1 -1
  429. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js +1 -1
  430. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
  431. package/dist/node_modules/i18next/dist/esm/i18next.js +1 -1
  432. package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
  433. package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js +1 -1
  434. package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js.map +1 -1
  435. package/dist/node_modules/immer/dist/immer.esm.mjs.js +1 -1
  436. package/dist/node_modules/immer/dist/immer.esm.mjs.js.map +1 -1
  437. package/dist/node_modules/int64-buffer/int64-buffer.js.map +1 -1
  438. package/dist/node_modules/js-base64/base64.mjs.js +1 -1
  439. package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
  440. package/dist/node_modules/mic-check/lib/index.js.map +1 -1
  441. package/dist/node_modules/mic-check/lib/requestMediaPermissions.js +1 -1
  442. package/dist/node_modules/mic-check/lib/requestMediaPermissions.js.map +1 -1
  443. package/dist/node_modules/moment/moment.js +1 -1
  444. package/dist/node_modules/moment/moment.js.map +1 -1
  445. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js +1 -1
  446. package/dist/node_modules/motion-dom/dist/es/animation/AsyncMotionValueAnimation.mjs.js.map +1 -1
  447. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js +1 -1
  448. package/dist/node_modules/motion-dom/dist/es/animation/JSAnimation.mjs.js.map +1 -1
  449. package/dist/node_modules/motion-dom/dist/es/animation/NativeAnimation.mjs.js.map +1 -1
  450. package/dist/node_modules/motion-dom/dist/es/animation/drivers/frame.mjs.js.map +1 -1
  451. package/dist/node_modules/motion-dom/dist/es/animation/generators/inertia.mjs.js.map +1 -1
  452. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js +1 -1
  453. package/dist/node_modules/motion-dom/dist/es/animation/generators/keyframes.mjs.js.map +1 -1
  454. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js +1 -1
  455. package/dist/node_modules/motion-dom/dist/es/animation/generators/spring.mjs.js.map +1 -1
  456. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js +1 -1
  457. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/motion-value.mjs.js.map +1 -1
  458. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js +1 -1
  459. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-target.mjs.js.map +1 -1
  460. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js +1 -1
  461. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element-variant.mjs.js.map +1 -1
  462. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js +1 -1
  463. package/dist/node_modules/motion-dom/dist/es/animation/interfaces/visual-element.mjs.js.map +1 -1
  464. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js +1 -1
  465. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/DOMKeyframesResolver.mjs.js.map +1 -1
  466. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js +1 -1
  467. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/KeyframesResolver.mjs.js.map +1 -1
  468. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs.js +1 -1
  469. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/offsets/time.mjs.js.map +1 -1
  470. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js +1 -1
  471. package/dist/node_modules/motion-dom/dist/es/animation/keyframes/utils/unit-conversion.mjs.js.map +1 -1
  472. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js +1 -1
  473. package/dist/node_modules/motion-dom/dist/es/animation/utils/WithPromise.mjs.js.map +1 -1
  474. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js +1 -1
  475. package/dist/node_modules/motion-dom/dist/es/animation/utils/calc-child-stagger.mjs.js.map +1 -1
  476. package/dist/node_modules/motion-dom/dist/es/animation/utils/default-transitions.mjs.js.map +1 -1
  477. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/cubic-bezier.mjs.js.map +1 -1
  478. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs.js +1 -1
  479. package/dist/node_modules/motion-dom/dist/es/animation/waapi/easing/map-easing.mjs.js.map +1 -1
  480. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js +1 -1
  481. package/dist/node_modules/motion-dom/dist/es/animation/waapi/supports/waapi.mjs.js.map +1 -1
  482. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js +1 -1
  483. package/dist/node_modules/motion-dom/dist/es/animation/waapi/utils/accelerated-values.mjs.js.map +1 -1
  484. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js +1 -1
  485. package/dist/node_modules/motion-dom/dist/es/frameloop/batcher.mjs.js.map +1 -1
  486. package/dist/node_modules/motion-dom/dist/es/frameloop/render-step.mjs.js.map +1 -1
  487. package/dist/node_modules/motion-dom/dist/es/frameloop/sync-time.mjs.js.map +1 -1
  488. package/dist/node_modules/motion-dom/dist/es/gestures/drag/state/set-active.mjs.js.map +1 -1
  489. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js +1 -1
  490. package/dist/node_modules/motion-dom/dist/es/gestures/hover.mjs.js.map +1 -1
  491. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js +1 -1
  492. package/dist/node_modules/motion-dom/dist/es/gestures/press/index.mjs.js.map +1 -1
  493. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js +1 -1
  494. package/dist/node_modules/motion-dom/dist/es/gestures/press/utils/keyboard.mjs.js.map +1 -1
  495. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js +1 -1
  496. package/dist/node_modules/motion-dom/dist/es/projection/geometry/delta-calc.mjs.js.map +1 -1
  497. package/dist/node_modules/motion-dom/dist/es/projection/node/HTMLProjectionNode.mjs.js.map +1 -1
  498. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js +1 -1
  499. package/dist/node_modules/motion-dom/dist/es/projection/node/create-projection-node.mjs.js.map +1 -1
  500. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.mjs.js +1 -1
  501. package/dist/node_modules/motion-dom/dist/es/projection/shared/stack.mjs.js.map +1 -1
  502. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-border-radius.mjs.js.map +1 -1
  503. package/dist/node_modules/motion-dom/dist/es/projection/styles/scale-box-shadow.mjs.js.map +1 -1
  504. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js +1 -1
  505. package/dist/node_modules/motion-dom/dist/es/render/VisualElement.mjs.js.map +1 -1
  506. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js +1 -1
  507. package/dist/node_modules/motion-dom/dist/es/render/dom/DOMVisualElement.mjs.js.map +1 -1
  508. package/dist/node_modules/motion-dom/dist/es/render/dom/parse-transform.mjs.js.map +1 -1
  509. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs.js +1 -1
  510. package/dist/node_modules/motion-dom/dist/es/render/dom/utils/camel-to-dash.mjs.js.map +1 -1
  511. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js +1 -1
  512. package/dist/node_modules/motion-dom/dist/es/render/html/HTMLVisualElement.mjs.js.map +1 -1
  513. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js +1 -1
  514. package/dist/node_modules/motion-dom/dist/es/render/utils/animation-state.mjs.js.map +1 -1
  515. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js +1 -1
  516. package/dist/node_modules/motion-dom/dist/es/render/utils/is-controlling-variants.mjs.js.map +1 -1
  517. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js +1 -1
  518. package/dist/node_modules/motion-dom/dist/es/render/utils/resolve-variants.mjs.js.map +1 -1
  519. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.mjs.js +1 -1
  520. package/dist/node_modules/motion-dom/dist/es/render/utils/setters.mjs.js.map +1 -1
  521. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js +1 -1
  522. package/dist/node_modules/motion-dom/dist/es/resize/handle-element.mjs.js.map +1 -1
  523. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.mjs.js +1 -1
  524. package/dist/node_modules/motion-dom/dist/es/resize/handle-window.mjs.js.map +1 -1
  525. package/dist/node_modules/motion-dom/dist/es/utils/delay.mjs.js.map +1 -1
  526. package/dist/node_modules/motion-dom/dist/es/utils/interpolate.mjs.js.map +1 -1
  527. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js +1 -1
  528. package/dist/node_modules/motion-dom/dist/es/utils/mix/color.mjs.js.map +1 -1
  529. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js +1 -1
  530. package/dist/node_modules/motion-dom/dist/es/utils/mix/complex.mjs.js.map +1 -1
  531. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js +1 -1
  532. package/dist/node_modules/motion-dom/dist/es/utils/resolve-elements.mjs.js.map +1 -1
  533. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs.js +1 -1
  534. package/dist/node_modules/motion-dom/dist/es/utils/supports/linear-easing.mjs.js.map +1 -1
  535. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs.js +1 -1
  536. package/dist/node_modules/motion-dom/dist/es/utils/supports/scroll-timeline.mjs.js.map +1 -1
  537. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js +1 -1
  538. package/dist/node_modules/motion-dom/dist/es/value/index.mjs.js.map +1 -1
  539. package/dist/node_modules/motion-dom/dist/es/value/types/color/hsla.mjs.js.map +1 -1
  540. package/dist/node_modules/motion-dom/dist/es/value/types/color/index.mjs.js.map +1 -1
  541. package/dist/node_modules/motion-dom/dist/es/value/types/color/rgba.mjs.js.map +1 -1
  542. package/dist/node_modules/motion-dom/dist/es/value/types/color/utils.mjs.js.map +1 -1
  543. package/dist/node_modules/motion-dom/dist/es/value/types/complex/filter.mjs.js.map +1 -1
  544. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js +1 -1
  545. package/dist/node_modules/motion-dom/dist/es/value/types/complex/index.mjs.js.map +1 -1
  546. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs.js +1 -1
  547. package/dist/node_modules/motion-dom/dist/es/value/types/complex/mask.mjs.js.map +1 -1
  548. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js +1 -1
  549. package/dist/node_modules/motion-utils/dist/es/easing/cubic-bezier.mjs.js.map +1 -1
  550. package/dist/node_modules/motion-utils/dist/es/easing/utils/map.mjs.js.map +1 -1
  551. package/dist/node_modules/motion-utils/dist/es/errors.mjs.js.map +1 -1
  552. package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js +1 -1
  553. package/dist/node_modules/motion-utils/dist/es/pipe.mjs.js.map +1 -1
  554. package/dist/node_modules/motion-utils/dist/es/progress.mjs.js.map +1 -1
  555. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +1 -1
  556. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -1
  557. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.js.map +1 -1
  558. package/dist/node_modules/react-i18next/dist/es/context.js +1 -1
  559. package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -1
  560. package/dist/node_modules/react-i18next/dist/es/defaults.js +1 -1
  561. package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -1
  562. package/dist/node_modules/react-i18next/dist/es/useTranslation.js +1 -1
  563. package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
  564. package/dist/node_modules/react-i18next/dist/es/utils.js +1 -1
  565. package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -1
  566. package/dist/node_modules/react-moment/dist/index.js +1 -1
  567. package/dist/node_modules/react-moment/dist/index.js.map +1 -1
  568. package/dist/node_modules/react-redux/es/components/Context.js +1 -1
  569. package/dist/node_modules/react-redux/es/components/Context.js.map +1 -1
  570. package/dist/node_modules/react-redux/es/components/Provider.js +1 -1
  571. package/dist/node_modules/react-redux/es/components/Provider.js.map +1 -1
  572. package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
  573. package/dist/node_modules/react-redux/es/utils/Subscription.js +1 -1
  574. package/dist/node_modules/react-redux/es/utils/Subscription.js.map +1 -1
  575. package/dist/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js +1 -1
  576. package/dist/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js.map +1 -1
  577. package/dist/node_modules/react-redux/es/utils/useSyncExternalStore.js.map +1 -1
  578. package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  579. package/dist/node_modules/react-redux/node_modules/react-is/index.js +1 -1
  580. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js +1 -1
  581. package/dist/node_modules/react-tooltip/dist/react-tooltip.min.mjs.js.map +1 -1
  582. package/dist/node_modules/redux/es/redux.js +1 -1
  583. package/dist/node_modules/redux/es/redux.js.map +1 -1
  584. package/dist/node_modules/reselect/es/defaultMemoize.js +1 -1
  585. package/dist/node_modules/reselect/es/defaultMemoize.js.map +1 -1
  586. package/dist/node_modules/reselect/es/index.js +1 -1
  587. package/dist/node_modules/reselect/es/index.js.map +1 -1
  588. package/dist/node_modules/sdp/sdp.js +1 -1
  589. package/dist/node_modules/sdp/sdp.js.map +1 -1
  590. package/dist/node_modules/socket.io-client/build/esm/index.js +1 -1
  591. package/dist/node_modules/socket.io-client/build/esm/index.js.map +1 -1
  592. package/dist/node_modules/socket.io-client/build/esm/manager.js +1 -1
  593. package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -1
  594. package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
  595. package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
  596. package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
  597. package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
  598. package/dist/node_modules/socket.io-parser/build/esm/binary.js +1 -1
  599. package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -1
  600. package/dist/node_modules/socket.io-parser/build/esm/index.js +1 -1
  601. package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -1
  602. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +1 -1
  603. package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -1
  604. package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +1 -1
  605. package/dist/node_modules/tslib/tslib.es6.js +1 -1
  606. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  607. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +2 -2
  608. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +1 -1
  609. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +2 -2
  610. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +1 -1
  611. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +1 -1
  612. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
  613. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +1 -1
  614. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +1 -1
  615. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js +1 -1
  616. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.development.js.map +1 -1
  617. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js +1 -1
  618. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-with-selector.production.js.map +1 -1
  619. package/dist/node_modules/use-sync-external-store/shim/index.js +1 -1
  620. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js +1 -1
  621. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLDecoder.js.map +1 -1
  622. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js +1 -1
  623. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLEncoder.js.map +1 -1
  624. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLReader.js +1 -1
  625. package/dist/node_modules/webm-duration-fix/lib/ebml/EBMLReader.js.map +1 -1
  626. package/dist/node_modules/webm-duration-fix/lib/ebml/ebmlID.js.map +1 -1
  627. package/dist/node_modules/webm-duration-fix/lib/ebml/index.js +1 -1
  628. package/dist/node_modules/webm-duration-fix/lib/ebml/index.js.map +1 -1
  629. package/dist/node_modules/webm-duration-fix/lib/ebml/tools-ebml.js +1 -1
  630. package/dist/node_modules/webm-duration-fix/lib/ebml/tools-ebml.js.map +1 -1
  631. package/dist/node_modules/webm-duration-fix/lib/ebml/tools.js +1 -1
  632. package/dist/node_modules/webm-duration-fix/lib/ebml/tools.js.map +1 -1
  633. package/dist/node_modules/webm-duration-fix/lib/index.js +1 -1
  634. package/dist/node_modules/webm-duration-fix/lib/index.js.map +1 -1
  635. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js +1 -1
  636. package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js.map +1 -1
  637. package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js +1 -1
  638. package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js.map +1 -1
  639. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +1 -1
  640. package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -1
  641. package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js +1 -1
  642. package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js.map +1 -1
  643. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js +1 -1
  644. package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
  645. package/dist/node_modules/webrtc-adapter/src/js/utils.js +1 -1
  646. package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -1
  647. package/dist/package.json.js +1 -1
  648. package/dist/public/locales/en/translation.json.js +1 -1
  649. package/dist/public/locales/it/translation.json.js +1 -1
  650. package/dist/services/astproxy.js +1 -1
  651. package/dist/services/astproxy.js.map +1 -1
  652. package/dist/services/history_call.js +1 -1
  653. package/dist/services/history_call.js.map +1 -1
  654. package/dist/services/offhour.js +1 -1
  655. package/dist/services/offhour.js.map +1 -1
  656. package/dist/services/phonebook.js +1 -1
  657. package/dist/services/phonebook.js.map +1 -1
  658. package/dist/services/user.js +1 -1
  659. package/dist/services/user.js.map +1 -1
  660. package/dist/services/voicemail.js +1 -1
  661. package/dist/services/voicemail.js.map +1 -1
  662. package/dist/store/index.js +1 -1
  663. package/dist/store/index.js.map +1 -1
  664. package/dist/styles/Island.styles.js +1 -1
  665. package/dist/styles/Island.styles.js.map +1 -1
  666. package/dist/utils/customHooks/useCommittedRef.js +1 -1
  667. package/dist/utils/customHooks/useCommittedRef.js.map +1 -1
  668. package/dist/utils/customHooks/useEventCallback.js +1 -1
  669. package/dist/utils/customHooks/useEventCallback.js.map +1 -1
  670. package/dist/utils/customHooks/useEventListener.js +1 -1
  671. package/dist/utils/customHooks/useEventListener.js.map +1 -1
  672. package/dist/utils/customHooks/useIntersectionObserver.js +1 -1
  673. package/dist/utils/customHooks/useIntersectionObserver.js.map +1 -1
  674. package/dist/utils/customHooks/useLocalStorage.js +1 -1
  675. package/dist/utils/customHooks/useLocalStorage.js.map +1 -1
  676. package/dist/utils/customHooks/useLongPress.js +1 -1
  677. package/dist/utils/customHooks/useLongPress.js.map +1 -1
  678. package/dist/utils/deviceUtils.js +1 -1
  679. package/dist/utils/deviceUtils.js.map +1 -1
  680. package/dist/utils/genericFunctions/checkConnection.js +1 -1
  681. package/dist/utils/genericFunctions/checkConnection.js.map +1 -1
  682. package/dist/utils/genericFunctions/isBackCallVisible.js +1 -1
  683. package/dist/utils/genericFunctions/isBackCallVisible.js.map +1 -1
  684. package/dist/utils/genericFunctions/withTimeout.js +1 -1
  685. package/dist/utils/genericFunctions/withTimeout.js.map +1 -1
  686. package/dist/utils/streaming/getStreamingSourceId.js +1 -1
  687. package/dist/utils/streaming/getStreamingSourceId.js.map +1 -1
  688. package/dist/utils/streaming/isFromStreaming.js +1 -1
  689. package/dist/utils/streaming/isFromStreaming.js.map +1 -1
  690. package/dist/utils/streaming/streamingUtils.js +1 -1
  691. package/dist/utils/streaming/streamingUtils.js.map +1 -1
  692. package/dist/workers/wake_up.js +1 -1
  693. package/dist/workers/wake_up.js.map +1 -1
  694. package/package.json +7 -7
  695. package/dist/_virtual/index10.js +0 -2
  696. package/dist/_virtual/index10.js.map +0 -1
  697. package/dist/_virtual/index11.js +0 -2
  698. package/dist/_virtual/index11.js.map +0 -1
  699. package/dist/_virtual/react-is.development4.js +0 -2
  700. package/dist/_virtual/react-is.development4.js.map +0 -1
  701. package/dist/_virtual/react-is.production.min4.js +0 -2
  702. package/dist/_virtual/react-is.production.min4.js.map +0 -1
  703. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +0 -2
  704. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +0 -1
  705. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js +0 -2
  706. package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js.map +0 -1
  707. package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js +0 -2
  708. package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js.map +0 -1
  709. package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js +0 -2
  710. package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js.map +0 -1
  711. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js +0 -2
  712. package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js.map +0 -1
  713. package/dist/node_modules/object-assign/index.js +0 -8
  714. package/dist/node_modules/object-assign/index.js.map +0 -1
  715. package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
  716. package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
  717. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
  718. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  719. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
  720. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  721. package/dist/node_modules/prop-types/index.js +0 -2
  722. package/dist/node_modules/prop-types/index.js.map +0 -1
  723. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
  724. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  725. package/dist/node_modules/prop-types/lib/has.js +0 -2
  726. package/dist/node_modules/prop-types/lib/has.js.map +0 -1
  727. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -10
  728. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  729. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -10
  730. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  731. package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
  732. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("./components/Events.js"),i=require("./components/Socket.js"),s=require("./components/WebRTC.js"),r=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),c=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./utils/genericFunctions/summaryEvents.js"),l=require("./store/index.js"),p=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),require("./components/TranscriptionView/TranscriptionView.js");var v=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),f=require("./lib/i18n.js"),g=require("./lib/webrtc/messages.js"),m=require("./lib/darkTheme.js"),w=require("./utils/genericFunctions/isEmpty.js"),b=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),S=require("./lib/phone/trunk.js"),E=require("./lib/phone/call.js"),y=require("./node_modules/react-redux/es/components/Provider.js");function D(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js");var k=D(t);if("undefined"!=typeof window&&window.location.hostname.includes(".support.my.")){var _=window.fetch;window.fetch=function(t,n){return _(t,e.__assign({credentials:"include"},n))}}var L=t.forwardRef((function(D,_){var L=D.dataConfig,U=D.showAlways,T=void 0!==U&&U,q=D.uaType,j=D.urlParamWithEvent,R=void 0!==j&&j,C=v.Base64.atob(L||"").split(":"),N=C[0],A=C[1],O=C[2],P=C[3],V=C[4],x=C[5],F=C[6],J=t.useState(!1),W=J[0],M=J[1],Q=t.useState(!1),z=Q[0],H=Q[1],$=t.useState(!1),B=$[0],G=$[1],K=t.useRef(0),X=t.useRef(null),Y=t.useRef(null);t.useImperativeHandle(_,(function(){return{reset:function(){console.info("PhoneIsland: Performing full component reset"),M(!0)}}}),[]),t.useEffect((function(){var e=Date.now(),t=function(){if(!document.hidden){var t=Date.now(),n=t-e;setTimeout((function(){c.eventDispatch("phone-island-emergency-stop-ringtone",{})}),2e3),n>3e5&&(console.info("Tab inactive for long period, performing soft reconnection"),M(!0)),e=t}},n=new Worker(h.default,{type:"module"});return n.onmessage=function(t){"ping"===t.data&&(e=Date.now())},document.addEventListener("visibilitychange",t),function(){n.terminate(),document.removeEventListener("visibilitychange",t)}}),[]),t.useEffect((function(){B&&z&&(M(!1),H(!1),G(!1),l.store.dispatch.island.setForceReload(!1))}),[B,z]),t.useEffect((function(){if(W){var e=setTimeout((function(){console.warn("Reload cycle did not complete within 30s, resetting reload state"),M(!1),H(!1),G(!1),l.store.dispatch.island.setForceReload(!1)}),3e4);return function(){return clearTimeout(e)}}}),[W]),t.useEffect((function(){var e=setInterval((function(){var e,t,n,i,s=l.store.getState().alerts.data,r=(null===(e=s.webrtc_down)||void 0===e?void 0:e.active)||!1,a=(null===(t=s.socket_down)||void 0===t?void 0:t.active)||!1,o=Date.now(),c=o-K.current,u=l.store.getState().webrtc.sipcall,d=l.store.getState().currentCall,p=d.accepted,v=d.outgoing,h=null===(i=null===(n=null==u?void 0:u.webrtcStuff)||void 0===n?void 0:n.pc)||void 0===i?void 0:i.iceConnectionState,f=p||v||"connected"===h||"completed"===h,g=navigator.onLine;if((r||a)&&!W&&c>1e4&&g){if(f)return void console.info("Alert detected but active call in progress - skipping automatic reload to let ICE recover",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a,iceState:h,accepted:p,outgoing:v});console.info("Alert detected (webrtc_down or socket_down), triggering automatic reload",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a}),K.current=o,M(!0)}}),1e3);return function(){return clearInterval(e)}}),[W]),o.useEventListener("phone-island-expand",(function(){l.store.dispatch.island.toggleIsOpen(!0),c.eventDispatch("phone-island-expanded",{})})),o.useEventListener("phone-island-compress",(function(){l.store.dispatch.island.toggleIsOpen(!1),c.eventDispatch("phone-island-compressed",{})})),o.useEventListener("phone-island-call-keypad-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-emergency-stop-ringtone",(function(){null===l.store.getState().island.view?(console.warn("Emergency stop ringtone triggered - phone island inactive"),l.store.dispatch.player.emergencyStopAudioPlayer(),c.eventDispatch("phone-island-emergency-stop-ringtone-completed",{})):console.log("Phone island is active, ringtone stop ignored")})),o.useEventListener("phone-island-detach",(function(e){g.detach(),l.store.dispatch.webrtc.updateWebRTC({sipcall:null,registered:!1,isDetached:!0,jsepGlobal:null}),l.store.dispatch.webrtc.updateRemoteAudioStream(null),l.store.dispatch.webrtc.updateLocalAudioStream(null),l.store.dispatch.webrtc.updateLocalVideoStream(null),l.store.dispatch.webrtc.updateRemoteVideoStream(null),c.eventDispatch("phone-island-detached",{})})),o.useEventListener("phone-island-reload-component",(function(e){(null==e?void 0:e.force)&&l.store.dispatch.island.setForceReload(!0),M(!0)})),o.useEventListener("phone-island-audio-input-change",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,ue(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Audio input device ".concat(n," not available, falling back to default device")),[4,de()]);case 2:n=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-audio-input-device",{deviceId:n}),c.eventDispatch("phone-island-audio-input-changed",{}),n!==t.deviceId&&console.info("Audio input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}}))}))})),o.useEventListener("phone-island-video-input-change",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n;return e.__generator(this,(function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,le(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Video input device ".concat(n," not available, falling back to default device")),[4,pe()]);case 2:n=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-video-input-device",{deviceId:n}),c.eventDispatch("phone-island-video-input-changed",{}),n!==t.deviceId&&console.info("Video input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}}))}))}));var Z=t.useState(!0),ee=Z[0],te=Z[1],ne=t.useState(!0),ie=ne[0],se=ne[1],re=t.useState(!1),ae=re[0],oe=re[1],ce=t.useSyncExternalStore(l.store.subscribe,(function(){return l.store.getState().fetchDefaults.fetchReady||!1}));t.useEffect((function(){ee&&(f.initI18n(),te(!1))}),[ee]),t.useEffect((function(){ce&&!ae&&(oe(!0),e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,p.getParamUrl()];case 1:return t=e.sent(),n=(null==t?void 0:t.url)||"",i=n&&""!==n.trim(),l.store.dispatch.paramUrl.setParamUrl({url:n,onlyQueues:(null==t?void 0:t.only_queues)||!1,hasValidUrl:i}),[3,3];case 2:return s=e.sent(),console.warn("Non-blocking param URL fetch failed:",s),l.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}}))})))}),[ce,ae]);var ue=function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter((function(e){return"audioinput"===e.kind})).some((function(e){return e.deviceId===t}))];case 2:return i=e.sent(),console.warn("Error checking audio input device availability:",i),[2,!1];case 3:return[2]}}))}))},de=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"audioinput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default audio input device:",s),[2,"default"];case 3:return[2]}}))}))},le=function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter((function(e){return"videoinput"===e.kind})).some((function(e){return e.deviceId===t}))];case 2:return i=e.sent(),console.warn("Error checking video input device availability:",i),[2,!1];case 3:return[2]}}))}))},pe=function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"videoinput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default video input device:",s),[2,"default"];case 3:return[2]}}))}))};o.useEventListener("phone-island-audio-output-change",(function(t){e.__awaiter(void 0,void 0,void 0,(function(){var n,i,s,r,a,o,d,p,v;return e.__generator(this,(function(h){switch(h.label){case 0:return(null==(n=l.store.getState().player.remoteAudio)?void 0:n.current)?(i=t.deviceId)&&"default"!==i?[4,(f=i,e.__awaiter(void 0,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return[2,e.sent().filter((function(e){return"audiooutput"===e.kind})).some((function(e){return e.deviceId===f}))];case 2:return t=e.sent(),console.warn("Error checking device availability:",t),[2,!1];case 3:return[2]}}))})))]:[3,3]:(console.warn("Remote audio element not available"),[2]);case 1:return h.sent()?[3,3]:(console.warn("Audio output device ".concat(i," not available, falling back to default device")),[4,e.__awaiter(void 0,void 0,void 0,(function(){var t,n,i,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter((function(e){return"audiooutput"===e.kind})),[2,(i=n.find((function(e){return"default"===e.deviceId||""===e.deviceId}))||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default device:",s),[2,"default"];case 3:return[2]}}))}))]);case 2:i=h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=3;case 3:return h.trys.push([3,5,,15]),[4,n.current.setSinkId(i)];case 4:return h.sent(),console.info("Default audio output device changed successfully!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,15];case 5:s=h.sent(),console.log("Direct setSinkId failed, trying with temporary stream:",s),h.label=6;case 6:return h.trys.push([6,7,,14]),r=new(window.AudioContext||window.webkitAudioContext),a=r.createOscillator(),o=r.createGain(),a.frequency.setValueAtTime(440,r.currentTime),o.gain.setValueAtTime(0,r.currentTime),a.connect(o),d=r.createMediaStreamDestination(),o.connect(d),n.current.srcObject=d.stream,a.start(),setTimeout((function(){return e.__awaiter(void 0,void 0,void 0,(function(){var t,s;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,7]),[4,n.current.setSinkId(i)];case 1:return e.sent(),console.info("Default audio output device changed successfully with temporary stream!"),a.stop(),r.close(),n.current.srcObject=null,u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 2:if(t=e.sent(),console.error("Final setSinkId attempt failed:",t),a.stop(),r.close(),n.current.srcObject=null,"default"===i)return[3,6];console.log("Trying fallback to default device"),e.label=3;case 3:return e.trys.push([3,5,,6]),[4,n.current.setSinkId("default")];case 4:return e.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Fallback to default audio device successful"),[3,6];case 5:return s=e.sent(),console.error("Even default device failed:",s),[3,6];case 6:return u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 7:return[2]}}))}))}),100),[3,14];case 7:if(p=h.sent(),console.error("Failed to create temporary audio stream:",p),"default"===i)return[3,12];h.label=8;case 8:return h.trys.push([8,10,,11]),[4,n.current.setSinkId("default")];case 9:return h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Emergency fallback to default audio device successful"),[3,11];case 10:return v=h.sent(),console.error("Emergency fallback to default device failed:",v),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),[3,11];case 11:return[3,13];case 12:u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=13;case 13:return c.eventDispatch("phone-island-audio-output-changed",{}),[3,14];case 14:return[3,15];case 15:return[2]}var f}))}))})),o.useEventListener("phone-island-presence-change",(function(e){p.changeOperatorStatus(e),c.eventDispatch("phone-island-presence-changed",{})})),o.useEventListener("phone-island-view-changed",(function(e){var t=null==e?void 0:e.viewType;l.store.dispatch.island.setIslandView(t)}));var ve=l.store.getState().player.remoteAudio;t.useEffect((function(){var e;if(ie&&ve){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;c.eventDispatch("phone-island-audio-output-change",{deviceId:t}),se(!1)}}),[ie,ve]),t.useEffect((function(){m.checkDarkTheme()}),[]),o.useEventListener("phone-island-theme-change",(function(e){m.setTheme(null==e?void 0:e.selectedTheme)})),o.useEventListener("phone-island-default-device-change",(function(e){l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),c.eventDispatch("phone-island-default-device-changed",{})})),o.useEventListener("phone-island-alert",(function(e){l.store.dispatch.alerts.setAlert(e.toString())})),o.useEventListener("phone-island-ringing-tone-list",(function(){var e=l.store.getState().ringtones.availableRingtones.map((function(e){return{name:e.name,displayName:e.displayName,base64Audio:e.base64Audio}}));c.eventDispatch("phone-island-ringing-tone-list-response",{ringtones:e})})),o.useEventListener("phone-island-ringing-tone-select",(function(e){(null==e?void 0:e.name)&&(u.setJSONItem("phone-island-selected-ringtone",{value:e.name}),l.store.dispatch.ringtones.setSelectedRingtone(e.name),c.eventDispatch("phone-island-ringing-tone-selected",{name:e.name}))})),o.useEventListener("phone-island-ringing-tone-output",(function(e){(null==e?void 0:e.deviceId)&&(u.setJSONItem("phone-island-ringtone-output-device",{value:e.deviceId}),l.store.dispatch.ringtones.setOutputDeviceId(e.deviceId),c.eventDispatch("phone-island-ringing-tone-output-changed",{deviceId:e.deviceId}))})),t.useEffect((function(){var e=u.getJSONItem("phone-island-selected-ringtone"),t=u.getJSONItem("phone-island-ringtone-output-device");(null==e?void 0:e.value)&&l.store.dispatch.ringtones.setSelectedRingtone(e.value),(null==t?void 0:t.value)&&l.store.dispatch.ringtones.setOutputDeviceId(t.value)}),[]),o.useEventListener("phone-island-check-connection",(function(){b.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})}))})),t.useEffect((function(){var e=setInterval((function(){b.checkInternetConnection().then((function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),o.useEventListener("phone-island-main-presence",(function(e){var t,n,i,s,r=null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username,a=l.store.getState().currentUser,o=null==a?void 0:a.mainPresence;if(void 0!==r&&""!==r&&!w.isEmpty(e[r])&&void 0!==(null===(n=e[r])||void 0===n?void 0:n.mainPresence)){var u=null===(i=e[r])||void 0===i?void 0:i.mainPresence;l.store.dispatch.currentUser.updateMainPresence(null===(s=e[r])||void 0===s?void 0:s.mainPresence),"online"===u&&"online"!==o&&c.eventDispatch("phone-island-call-ended",{})}})),o.useEventListener("phone-island-call-status",(function(){var e=l.store.getState().currentCall;console.log("Call status debug informations: ",e)}));var he=function(e,t,n,i,s){var r=l.store.getState().paramUrl;if(null==r?void 0:r.hasValidUrl){var a=r.url||"";if(a){var o=l.store.getState().island.urlOpened,u=r.openParamUrlType;if(!o||"button"===u){var d=a;d.includes("$CALLER_NUMBER")&&e&&(d=d.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),d.includes("$CALLER_NAME")&&t&&(d=d.replace(/\$CALLER_NAME/g,encodeURIComponent(t))),d.includes("$UNIQUEID")&&i&&(d=d.replace(/\$UNIQUEID/g,encodeURIComponent(i))),d.includes("$CALLED")&&n&&(d=d.replace(/\$CALLED/g,encodeURIComponent(n))),d.includes("{phone}")&&e&&(d=d.replace(/\{phone\}/g,encodeURIComponent(e)));var p=d.startsWith("http")?d:"https://".concat(d);if("mobile"!==q&&!R&&s){var v=window.open("about:blank","_blank");v&&(v.location.href=p,l.store.dispatch.island.setUrlOpened(!0))}else c.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:p})}}}};return o.useEventListener("phone-island-already-opened-external-page",(function(){l.store.dispatch.island.setUrlOpened(!0)})),o.useEventListener("phone-island-url-parameter-opened",(function(e){var t=l.store.getState().paramUrl;if(t.hasValidUrl&&!l.store.getState().island.urlOpened){var n=t.onlyQueues||!1,i=S.isFromTrunk(null==e?void 0:e.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(i);var s=l.store.getState().currentUser.default_device,r=!("desktop"===q&&"nethlink"===(null==s?void 0:s.type));"in"===(null==e?void 0:e.direction)&&(!0===n&&!0===(null==e?void 0:e.throughQueue)?he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r):!1!==n||!0!==i&&!0!==(null==e?void 0:e.throughQueue)||he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r))}})),o.useEventListener("phone-island-user-status",(function(){var e=l.store.getState().currentUser;console.log("User status debug informations: ",e)})),o.useEventListener("phone-island-all-users-status",(function(){var e=l.store.getState().users;console.log("Users status debug informations: ",e)})),o.useEventListener("phone-island-status",(function(){var e=l.store.getState().island;console.log("Phone island status debug informations: ",e)})),o.useEventListener("phone-island-webrtc-status",(function(){var e=l.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-player-status",(function(){var e=l.store.getState().player;console.log("Player status debug informations: ",e)})),o.useEventListener("phone-island-conference-status",(function(){var e=l.store.getState().conference;console.log("Webrtc status debug informations: ",e)})),o.useEventListener("phone-island-streaming-status",(function(){var e=l.store.getState().streaming;console.log("Streaming status debug informations: ",e)})),o.useEventListener("phone-island-paramurl-status",(function(){var e=l.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)})),o.useEventListener("phone-island-queue-status",(function(){var e=l.store.getState().queue;console.log("Queue status debug informations: ",e)})),o.useEventListener("phone-island-player-force-stop",(function(){l.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),o.useEventListener("phone-island-stores-download",(function(){l.downloadStoresAsJSON(),c.eventDispatch("phone-island-stores-downloaded",{})})),o.useEventListener("phone-island-sideview-open",(function(){l.store.dispatch.island.toggleSideViewVisible(!0),l.store.dispatch.island.setUrlOpened(!1),c.eventDispatch("phone-island-sideview-opened",{})})),o.useEventListener("phone-island-sideview-close",(function(){l.store.dispatch.island.toggleSideViewVisible(!1),c.eventDispatch("phone-island-sideview-closed",{})})),o.useEventListener("phone-island-transcription-close",(function(){l.store.dispatch.island.toggleTranscriptionViewVisible(!1),(X.current||Y.current)&&(c.eventDispatch("phone-island-stop-transcription",{uniqueid:X.current,linkedid:Y.current}),X.current=null,Y.current=null),c.eventDispatch("phone-island-transcription-closed",{})})),o.useEventListener("phone-island-transcription-open",(function(e){var t=null==e?void 0:e.linkedid,n=null==e?void 0:e.uniqueid;(t||n)&&(Y.current=t||null,X.current=n||null,c.eventDispatch("phone-island-start-transcription",{linkedid:t,uniqueid:n}),l.store.dispatch.island.toggleTranscriptionViewVisible(!0),c.eventDispatch("phone-island-transcription-opened",{}))})),o.useEventListener("phone-island-init-audio",(function(){var e=l.store.getState().currentCall,t=e.accepted,n=e.incoming,i=e.outgoing,s=e.incomingWebRTC,r=e.incomingSocket;if(t||n||i||s||r)console.log("[AUDIO-WARMUP] Skipping audio warm-up: active call in progress");else if(x&&"string"==typeof x&&0!==x.length){var a=l.store.getState().currentUser.featureCodes,o=null==a?void 0:a.audio_test,c=o&&"string"==typeof o&&o.length>0?o:"*41";console.log("[AUDIO-WARMUP] Starting audio warm-up test call",{codeToCall:c,SIP_HOST:x}),E.callNumber(c,x)}else console.warn("[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available",{SIP_HOST:x})})),o.useEventListener("phone-island-transcription-toggle",(function(){var e=!l.store.getState().island.transcriptionViewIsVisible;l.store.dispatch.island.toggleTranscriptionViewVisible(e),c.eventDispatch(e?"phone-island-transcription-opened":"phone-island-transcription-closed",{})})),o.useEventListener("phone-island-summary-call-check",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i,s,r,a,o,c,u,p,v,h;return e.__generator(this,(function(e){switch(e.label){case 0:return n=(null==t?void 0:t.linkedid)||(null==t?void 0:t.linkedId),i=(null==t?void 0:t.uniqueid)||(null==t?void 0:t.uniqueId),n?i?(s=l.store.getState().conference,r=s.isActive,a=s.usersList,o=s.conferenceStartedFrom,c=l.store.getState().currentUser,u=c.name,p=c.username,v=r&&(o===p||!!a&&Object.values(a).some((function(e){return e.name===u}))),v?[2]:[4,new Promise((function(e){return setTimeout(e,1e3)}))]):[2]:[2];case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 3:return[4,(0,e.sent().checkSummaryCall)(i,n)];case 4:return e.sent(),d.dispatchSummaryReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 5:return 204===(null==(h=e.sent())?void 0:h.status)&&d.dispatchSummaryNotReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 6:return[2]}}))}))})),o.useEventListener("phone-island-call-summary-notify",(function(t){return e.__awaiter(void 0,void 0,void 0,(function(){var n,i;return e.__generator(this,(function(e){switch(e.label){case 0:if(n=null==t?void 0:t.linkedid,i=null==t?void 0:t.uniqueid,!n)return[2];if(!i)return[2];e.label=1;case 1:return e.trys.push([1,4,,5]),[4,Promise.resolve().then((function(){return require("./services/user.js")}))];case 2:return[4,(0,e.sent().watchSummaryCall)(n,i)];case 3:return e.sent(),c.eventDispatch("phone-island-summary-call-notified",{linkedid:n,uniqueid:i}),[3,5];case 4:return e.sent(),[2];case 5:return[2]}}))}))})),o.useEventListener("phone-island-size-change",(function(t){var n=l.store.getState().island,i=n.sideViewIsVisible,s=n.transcriptionViewIsVisible,r=n.actionsExpanded,a=t.sizeInformation,o=e.__assign(e.__assign({},a),{right:i?"42px":"0px",top:I.isBackCallActive()?"40px":"0px",bottomTranscription:s&&r?"335px":s&&!r?"330px":"0px"});c.eventDispatch("phone-island-size-changed",{sizes:o})})),o.useEventListener("phone-island-call-ended",(function(){if("online"===l.store.getState().currentUser.mainPresence){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore(),l.store.dispatch.paramUrl.setThroughTrunk(!1)}})),o.useEventListener("phone-island-conference-list-open",(function(){l.store.dispatch.island.toggleConferenceList(!0),c.eventDispatch("phone-island-conference-list-opened",{})})),o.useEventListener("phone-island-alert-removed",(function(e){var t=l.store.getState().alerts.status.activeAlertsCount,n=l.store.getState().island,i=n.view,s=n.previousView,r=l.store.getState().conference.isActive,a=l.store.getState().alerts.data,o=l.store.getState().currentCall,u=o.incoming,d=o.outgoing,p=o.accepted,v=null==e?void 0:e.type,h=o.incoming||o.outgoing||o.accepted||""!==o.conversationId;if(!(u||d||p||t>0||"player"===i||"recorder"===i||"physicalPhoneRecorder"===i||"waitingConference"===i&&r||"transfer"===i&&r||"settings"===i&&r||"settings"===i&&("recorder"===s||"player"===s)||"operatorBusy"===i&&!r)&&0===t&&(!v||a[v]&&!a[v].active)&&!h){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore()}})),o.useEventListener("phone-island-conference-list-close",(function(){l.store.dispatch.island.toggleConferenceList(!1),c.eventDispatch("phone-island-conference-list-closed",{})})),o.useEventListener("phone-island-conversations",(function(e){var t,n=Object.keys(e)[0];if(n===(null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username)){var i=e[n].conversations,s=l.store.getState().paramUrl,r=l.store.getState().island.urlOpened;if(!s.hasValidUrl||r)return;if("answered"===s.openParamUrlType&&i&&Object.keys(i).length>0){var a=i[Object.keys(i)[0]],o=l.store.getState().currentUser.default_device,c=!("desktop"===q&&"nethlink"===(null==o?void 0:o.type));if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var u=s.onlyQueues||!1,d=S.isFromTrunk(a.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(d),!0===u&&!0===(null==a?void 0:a.throughQueue)?he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c):!1!==u||!0!==d&&!0!==(null==a?void 0:a.throughQueue)||he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c)}}}})),k.default.createElement(k.default.Fragment,null,k.default.createElement(y.default,{store:l.store},P&&""!==P.trim()?k.default.createElement(s.WebRTC,{hostName:N,sipExten:P,sipSecret:V,sipHost:x,sipPort:F,reload:W,reloadedCallback:function(){return H(!0)},uaType:q},k.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},k.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){return G(!0)},uaType:q},k.default.createElement(n.Events,{sipHost:x},k.default.createElement(r.Island,{showAlways:T,uaType:q}))))):k.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},k.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){G(!0),H(!0)},uaType:q},k.default.createElement(n.Events,{sipHost:x},k.default.createElement(r.Island,{showAlways:T,uaType:q}))))))}));L.displayName="PhoneIslandComponent";var U=t.forwardRef((function(t,n){return k.default.createElement(L,e.__assign({},t,{ref:n}))}));U.displayName="PhoneIsland",exports.PhoneIsland=U;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("./components/Events.js"),i=require("./components/Socket.js"),s=require("./components/WebRTC.js"),r=require("./components/Island.js"),a=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),c=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js"),d=require("./utils/genericFunctions/summaryEvents.js"),l=require("./store/index.js"),p=require("./services/user.js");require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/dist/index.js"),require("./node_modules/i18next/dist/esm/i18next.js"),require("./node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),require("./components/TranscriptionView/TranscriptionView.js");var v=require("./node_modules/js-base64/base64.mjs.js"),h=require("./workers/wake_up.js"),f=require("./lib/i18n.js"),g=require("./lib/webrtc/messages.js"),m=require("./lib/darkTheme.js"),w=require("./utils/genericFunctions/isEmpty.js"),b=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),S=require("./lib/phone/trunk.js"),E=require("./lib/phone/call.js"),y=require("./node_modules/react-redux/es/components/Provider.js");function D(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js");var k=D(t);if("undefined"!=typeof window&&window.location.hostname.includes(".support.my.")){var _=window.fetch;window.fetch=function(t,n){return _(t,e.__assign({credentials:"include"},n))}}var L=t.forwardRef(function(D,_){var L=D.dataConfig,U=D.showAlways,T=void 0!==U&&U,q=D.uaType,j=D.urlParamWithEvent,R=void 0!==j&&j,C=v.Base64.atob(L||"").split(":"),N=C[0],A=C[1],O=C[2],P=C[3],V=C[4],x=C[5],F=C[6],J=t.useState(!1),W=J[0],M=J[1],Q=t.useState(!1),z=Q[0],H=Q[1],$=t.useState(!1),B=$[0],G=$[1],K=t.useRef(0),X=t.useRef(null),Y=t.useRef(null);t.useImperativeHandle(_,function(){return{reset:function(){console.info("PhoneIsland: Performing full component reset"),M(!0)}}},[]),t.useEffect(function(){var e=Date.now(),t=function(){if(!document.hidden){var t=Date.now(),n=t-e;setTimeout(function(){c.eventDispatch("phone-island-emergency-stop-ringtone",{})},2e3),n>3e5&&(console.info("Tab inactive for long period, performing soft reconnection"),M(!0)),e=t}},n=new Worker(h.default,{type:"module"});return n.onmessage=function(t){"ping"===t.data&&(e=Date.now())},document.addEventListener("visibilitychange",t),function(){n.terminate(),document.removeEventListener("visibilitychange",t)}},[]),t.useEffect(function(){B&&z&&(M(!1),H(!1),G(!1),l.store.dispatch.island.setForceReload(!1))},[B,z]),t.useEffect(function(){if(W){var e=setTimeout(function(){console.warn("Reload cycle did not complete within 30s, resetting reload state"),M(!1),H(!1),G(!1),l.store.dispatch.island.setForceReload(!1)},3e4);return function(){return clearTimeout(e)}}},[W]),t.useEffect(function(){var e=setInterval(function(){var e,t,n,i,s=l.store.getState().alerts.data,r=(null===(e=s.webrtc_down)||void 0===e?void 0:e.active)||!1,a=(null===(t=s.socket_down)||void 0===t?void 0:t.active)||!1,o=Date.now(),c=o-K.current,u=l.store.getState().webrtc.sipcall,d=l.store.getState().currentCall,p=d.accepted,v=d.outgoing,h=null===(i=null===(n=null==u?void 0:u.webrtcStuff)||void 0===n?void 0:n.pc)||void 0===i?void 0:i.iceConnectionState,f=p||v||"connected"===h||"completed"===h,g=navigator.onLine;if((r||a)&&!W&&c>1e4&&g){if(f)return void console.info("Alert detected but active call in progress - skipping automatic reload to let ICE recover",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a,iceState:h,accepted:p,outgoing:v});console.info("Alert detected (webrtc_down or socket_down), triggering automatic reload",{timeSinceLastReload:Math.round(c/1e3)+"s",isWebRTCDown:r,isSocketDown:a}),K.current=o,M(!0)}},1e3);return function(){return clearInterval(e)}},[W]),o.useEventListener("phone-island-expand",function(){l.store.dispatch.island.toggleIsOpen(!0),c.eventDispatch("phone-island-expanded",{})}),o.useEventListener("phone-island-compress",function(){l.store.dispatch.island.toggleIsOpen(!1),c.eventDispatch("phone-island-compressed",{})}),o.useEventListener("phone-island-call-keypad-close",function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-keypad-closed",{})}),o.useEventListener("phone-island-call-transfer-close",function(){l.store.dispatch.island.setIslandView("call"),c.eventDispatch("phone-island-call-transfer-closed",{})}),o.useEventListener("phone-island-recording-close",function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-recording-closed",{})}),o.useEventListener("phone-island-audio-player-close",function(){l.store.dispatch.island.setIslandView(null),c.eventDispatch("phone-island-audio-player-closed",{})}),o.useEventListener("phone-island-emergency-stop-ringtone",function(){null===l.store.getState().island.view?(console.warn("Emergency stop ringtone triggered - phone island inactive"),l.store.dispatch.player.emergencyStopAudioPlayer(),c.eventDispatch("phone-island-emergency-stop-ringtone-completed",{})):console.log("Phone island is active, ringtone stop ignored")}),o.useEventListener("phone-island-detach",function(e){g.detach(),l.store.dispatch.webrtc.updateWebRTC({sipcall:null,registered:!1,isDetached:!0,jsepGlobal:null}),l.store.dispatch.webrtc.updateRemoteAudioStream(null),l.store.dispatch.webrtc.updateLocalAudioStream(null),l.store.dispatch.webrtc.updateLocalVideoStream(null),l.store.dispatch.webrtc.updateRemoteVideoStream(null),c.eventDispatch("phone-island-detached",{})}),o.useEventListener("phone-island-reload-component",function(e){(null==e?void 0:e.force)&&l.store.dispatch.island.setForceReload(!0),M(!0)}),o.useEventListener("phone-island-audio-input-change",function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n;return e.__generator(this,function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,ue(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Audio input device ".concat(n," not available, falling back to default device")),[4,de()]);case 2:n=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-audio-input-device",{deviceId:n}),c.eventDispatch("phone-island-audio-input-changed",{}),n!==t.deviceId&&console.info("Audio input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}})})}),o.useEventListener("phone-island-video-input-change",function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n;return e.__generator(this,function(e){switch(e.label){case 0:return(n=t.deviceId)&&"default"!==n?[4,le(n)]:[3,3];case 1:return e.sent()?[3,3]:(console.warn("Video input device ".concat(n," not available, falling back to default device")),[4,pe()]);case 2:n=e.sent(),e.label=3;case 3:return u.setJSONItem("phone-island-video-input-device",{deviceId:n}),c.eventDispatch("phone-island-video-input-changed",{}),n!==t.deviceId&&console.info("Video input device changed from ".concat(t.deviceId," to ").concat(n," (fallback)")),[2]}})})});var Z=t.useState(!0),ee=Z[0],te=Z[1],ne=t.useState(!0),ie=ne[0],se=ne[1],re=t.useState(!1),ae=re[0],oe=re[1],ce=t.useSyncExternalStore(l.store.subscribe,function(){return l.store.getState().fetchDefaults.fetchReady||!1});t.useEffect(function(){ee&&(f.initI18n(),te(!1))},[ee]),t.useEffect(function(){ce&&!ae&&(oe(!0),e.__awaiter(void 0,void 0,void 0,function(){var t,n,i,s;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,p.getParamUrl()];case 1:return t=e.sent(),n=(null==t?void 0:t.url)||"",i=n&&""!==n.trim(),l.store.dispatch.paramUrl.setParamUrl({url:n,onlyQueues:(null==t?void 0:t.only_queues)||!1,hasValidUrl:i}),[3,3];case 2:return s=e.sent(),console.warn("Non-blocking param URL fetch failed:",s),l.store.dispatch.paramUrl.setParamUrl({url:"",onlyQueues:!1,hasValidUrl:!1}),[3,3];case 3:return[2]}})}))},[ce,ae]);var ue=function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n,i;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter(function(e){return"audioinput"===e.kind}).some(function(e){return e.deviceId===t})];case 2:return i=e.sent(),console.warn("Error checking audio input device availability:",i),[2,!1];case 3:return[2]}})})},de=function(){return e.__awaiter(void 0,void 0,void 0,function(){var t,n,i,s;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter(function(e){return"audioinput"===e.kind}),[2,(i=n.find(function(e){return"default"===e.deviceId||""===e.deviceId})||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default audio input device:",s),[2,"default"];case 3:return[2]}})})},le=function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n,i;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return n=e.sent(),[2,n.filter(function(e){return"videoinput"===e.kind}).some(function(e){return e.deviceId===t})];case 2:return i=e.sent(),console.warn("Error checking video input device availability:",i),[2,!1];case 3:return[2]}})})},pe=function(){return e.__awaiter(void 0,void 0,void 0,function(){var t,n,i,s;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter(function(e){return"videoinput"===e.kind}),[2,(i=n.find(function(e){return"default"===e.deviceId||""===e.deviceId})||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default video input device:",s),[2,"default"];case 3:return[2]}})})};o.useEventListener("phone-island-audio-output-change",function(t){e.__awaiter(void 0,void 0,void 0,function(){var n,i,s,r,a,o,d,p,v;return e.__generator(this,function(h){switch(h.label){case 0:return(null==(n=l.store.getState().player.remoteAudio)?void 0:n.current)?(i=t.deviceId)&&"default"!==i?[4,(f=i,e.__awaiter(void 0,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,!1];case 1:return[2,e.sent().filter(function(e){return"audiooutput"===e.kind}).some(function(e){return e.deviceId===f})];case 2:return t=e.sent(),console.warn("Error checking device availability:",t),[2,!1];case 3:return[2]}})}))]:[3,3]:(console.warn("Remote audio element not available"),[2]);case 1:return h.sent()?[3,3]:(console.warn("Audio output device ".concat(i," not available, falling back to default device")),[4,e.__awaiter(void 0,void 0,void 0,function(){var t,n,i,s;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),navigator.mediaDevices&&navigator.mediaDevices.enumerateDevices?[4,navigator.mediaDevices.enumerateDevices()]:[2,"default"];case 1:return t=e.sent(),n=t.filter(function(e){return"audiooutput"===e.kind}),[2,(i=n.find(function(e){return"default"===e.deviceId||""===e.deviceId})||n[0])?i.deviceId:"default"];case 2:return s=e.sent(),console.warn("Error getting default device:",s),[2,"default"];case 3:return[2]}})})]);case 2:i=h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=3;case 3:return h.trys.push([3,5,,15]),[4,n.current.setSinkId(i)];case 4:return h.sent(),console.info("Default audio output device changed successfully!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,15];case 5:s=h.sent(),console.log("Direct setSinkId failed, trying with temporary stream:",s),h.label=6;case 6:return h.trys.push([6,7,,14]),r=new(window.AudioContext||window.webkitAudioContext),a=r.createOscillator(),o=r.createGain(),a.frequency.setValueAtTime(440,r.currentTime),o.gain.setValueAtTime(0,r.currentTime),a.connect(o),d=r.createMediaStreamDestination(),o.connect(d),n.current.srcObject=d.stream,a.start(),setTimeout(function(){return e.__awaiter(void 0,void 0,void 0,function(){var t,s;return e.__generator(this,function(e){switch(e.label){case 0:return e.trys.push([0,2,,7]),[4,n.current.setSinkId(i)];case 1:return e.sent(),console.info("Default audio output device changed successfully with temporary stream!"),a.stop(),r.close(),n.current.srcObject=null,u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 2:if(t=e.sent(),console.error("Final setSinkId attempt failed:",t),a.stop(),r.close(),n.current.srcObject=null,"default"===i)return[3,6];console.log("Trying fallback to default device"),e.label=3;case 3:return e.trys.push([3,5,,6]),[4,n.current.setSinkId("default")];case 4:return e.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Fallback to default audio device successful"),[3,6];case 5:return s=e.sent(),console.error("Even default device failed:",s),[3,6];case 6:return u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),c.eventDispatch("phone-island-audio-output-changed",{}),[3,7];case 7:return[2]}})})},100),[3,14];case 7:if(p=h.sent(),console.error("Failed to create temporary audio stream:",p),"default"===i)return[3,12];h.label=8;case 8:return h.trys.push([8,10,,11]),[4,n.current.setSinkId("default")];case 9:return h.sent(),u.setJSONItem("phone-island-audio-output-device",{deviceId:"default"}),console.info("Emergency fallback to default audio device successful"),[3,11];case 10:return v=h.sent(),console.error("Emergency fallback to default device failed:",v),u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),[3,11];case 11:return[3,13];case 12:u.setJSONItem("phone-island-audio-output-device",{deviceId:i}),h.label=13;case 13:return c.eventDispatch("phone-island-audio-output-changed",{}),[3,14];case 14:return[3,15];case 15:return[2]}var f})})}),o.useEventListener("phone-island-presence-change",function(e){p.changeOperatorStatus(e),c.eventDispatch("phone-island-presence-changed",{})}),o.useEventListener("phone-island-view-changed",function(e){var t=null==e?void 0:e.viewType;l.store.dispatch.island.setIslandView(t)});var ve=l.store.getState().player.remoteAudio;t.useEffect(function(){var e;if(ie&&ve){var t=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;c.eventDispatch("phone-island-audio-output-change",{deviceId:t}),se(!1)}},[ie,ve]),t.useEffect(function(){m.checkDarkTheme()},[]),o.useEventListener("phone-island-theme-change",function(e){m.setTheme(null==e?void 0:e.selectedTheme)}),o.useEventListener("phone-island-default-device-change",function(e){l.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),c.eventDispatch("phone-island-default-device-changed",{})}),o.useEventListener("phone-island-alert",function(e){l.store.dispatch.alerts.setAlert(e.toString())}),o.useEventListener("phone-island-ringing-tone-list",function(){var e=l.store.getState().ringtones.availableRingtones.map(function(e){return{name:e.name,displayName:e.displayName,base64Audio:e.base64Audio}});c.eventDispatch("phone-island-ringing-tone-list-response",{ringtones:e})}),o.useEventListener("phone-island-ringing-tone-select",function(e){(null==e?void 0:e.name)&&(u.setJSONItem("phone-island-selected-ringtone",{value:e.name}),l.store.dispatch.ringtones.setSelectedRingtone(e.name),c.eventDispatch("phone-island-ringing-tone-selected",{name:e.name}))}),o.useEventListener("phone-island-ringing-tone-output",function(e){(null==e?void 0:e.deviceId)&&(u.setJSONItem("phone-island-ringtone-output-device",{value:e.deviceId}),l.store.dispatch.ringtones.setOutputDeviceId(e.deviceId),c.eventDispatch("phone-island-ringing-tone-output-changed",{deviceId:e.deviceId}))}),t.useEffect(function(){var e=u.getJSONItem("phone-island-selected-ringtone"),t=u.getJSONItem("phone-island-ringtone-output-device");(null==e?void 0:e.value)&&l.store.dispatch.ringtones.setSelectedRingtone(e.value),(null==t?void 0:t.value)&&l.store.dispatch.ringtones.setOutputDeviceId(t.value)},[]),o.useEventListener("phone-island-check-connection",function(){b.checkInternetConnection().then(function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})})}),t.useEffect(function(){var e=setInterval(function(){b.checkInternetConnection().then(function(e){e?c.eventDispatch("phone-island-internet-connected",{}):c.eventDispatch("phone-island-internet-disconnected",{})})},5e3);return function(){return clearInterval(e)}},[]),o.useEventListener("phone-island-main-presence",function(e){var t,n,i,s,r=null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username,a=l.store.getState().currentUser,o=null==a?void 0:a.mainPresence;if(void 0!==r&&""!==r&&!w.isEmpty(e[r])&&void 0!==(null===(n=e[r])||void 0===n?void 0:n.mainPresence)){var u=null===(i=e[r])||void 0===i?void 0:i.mainPresence;l.store.dispatch.currentUser.updateMainPresence(null===(s=e[r])||void 0===s?void 0:s.mainPresence),"online"===u&&"online"!==o&&c.eventDispatch("phone-island-call-ended",{})}}),o.useEventListener("phone-island-call-status",function(){var e=l.store.getState().currentCall;console.log("Call status debug informations: ",e)});var he=function(e,t,n,i,s){var r=l.store.getState().paramUrl;if(null==r?void 0:r.hasValidUrl){var a=r.url||"";if(a){var o=l.store.getState().island.urlOpened,u=r.openParamUrlType;if(!o||"button"===u){var d=a;d.includes("$CALLER_NUMBER")&&e&&(d=d.replace(/\$CALLER_NUMBER/g,encodeURIComponent(e))),d.includes("$CALLER_NAME")&&t&&(d=d.replace(/\$CALLER_NAME/g,encodeURIComponent(t))),d.includes("$UNIQUEID")&&i&&(d=d.replace(/\$UNIQUEID/g,encodeURIComponent(i))),d.includes("$CALLED")&&n&&(d=d.replace(/\$CALLED/g,encodeURIComponent(n))),d.includes("{phone}")&&e&&(d=d.replace(/\{phone\}/g,encodeURIComponent(e)));var p=d.startsWith("http")?d:"https://".concat(d);if("mobile"!==q&&!R&&s){var v=window.open("about:blank","_blank");v&&(v.location.href=p,l.store.dispatch.island.setUrlOpened(!0))}else c.eventDispatch("phone-island-url-parameter-opened-external",{formattedUrl:p})}}}};return o.useEventListener("phone-island-already-opened-external-page",function(){l.store.dispatch.island.setUrlOpened(!0)}),o.useEventListener("phone-island-url-parameter-opened",function(e){var t=l.store.getState().paramUrl;if(t.hasValidUrl&&!l.store.getState().island.urlOpened){var n=t.onlyQueues||!1,i=S.isFromTrunk(null==e?void 0:e.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(i);var s=l.store.getState().currentUser.default_device,r=!("desktop"===q&&"nethlink"===(null==s?void 0:s.type));"in"===(null==e?void 0:e.direction)&&(!0===n&&!0===(null==e?void 0:e.throughQueue)?he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r):!1!==n||!0!==i&&!0!==(null==e?void 0:e.throughQueue)||he(null==e?void 0:e.counterpartNum,null==e?void 0:e.counterpartName,null==e?void 0:e.owner,null==e?void 0:e.linkedId,r))}}),o.useEventListener("phone-island-user-status",function(){var e=l.store.getState().currentUser;console.log("User status debug informations: ",e)}),o.useEventListener("phone-island-all-users-status",function(){var e=l.store.getState().users;console.log("Users status debug informations: ",e)}),o.useEventListener("phone-island-status",function(){var e=l.store.getState().island;console.log("Phone island status debug informations: ",e)}),o.useEventListener("phone-island-webrtc-status",function(){var e=l.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)}),o.useEventListener("phone-island-player-status",function(){var e=l.store.getState().player;console.log("Player status debug informations: ",e)}),o.useEventListener("phone-island-conference-status",function(){var e=l.store.getState().conference;console.log("Webrtc status debug informations: ",e)}),o.useEventListener("phone-island-streaming-status",function(){var e=l.store.getState().streaming;console.log("Streaming status debug informations: ",e)}),o.useEventListener("phone-island-paramurl-status",function(){var e=l.store.getState().paramUrl;console.log("Paramurl status debug informations: ",e)}),o.useEventListener("phone-island-queue-status",function(){var e=l.store.getState().queue;console.log("Queue status debug informations: ",e)}),o.useEventListener("phone-island-player-force-stop",function(){l.store.dispatch.player.reset(),console.log("Audio player is interrupted")}),o.useEventListener("phone-island-stores-download",function(){l.downloadStoresAsJSON(),c.eventDispatch("phone-island-stores-downloaded",{})}),o.useEventListener("phone-island-sideview-open",function(){l.store.dispatch.island.toggleSideViewVisible(!0),l.store.dispatch.island.setUrlOpened(!1),c.eventDispatch("phone-island-sideview-opened",{})}),o.useEventListener("phone-island-sideview-close",function(){l.store.dispatch.island.toggleSideViewVisible(!1),c.eventDispatch("phone-island-sideview-closed",{})}),o.useEventListener("phone-island-transcription-close",function(){l.store.dispatch.island.toggleTranscriptionViewVisible(!1),(X.current||Y.current)&&(c.eventDispatch("phone-island-stop-transcription",{uniqueid:X.current,linkedid:Y.current}),X.current=null,Y.current=null),c.eventDispatch("phone-island-transcription-closed",{})}),o.useEventListener("phone-island-transcription-open",function(e){var t=null==e?void 0:e.linkedid,n=null==e?void 0:e.uniqueid;(t||n)&&(Y.current=t||null,X.current=n||null,c.eventDispatch("phone-island-start-transcription",{linkedid:t,uniqueid:n}),l.store.dispatch.island.toggleTranscriptionViewVisible(!0),c.eventDispatch("phone-island-transcription-opened",{}))}),o.useEventListener("phone-island-init-audio",function(){var e=l.store.getState().currentCall,t=e.accepted,n=e.incoming,i=e.outgoing,s=e.incomingWebRTC,r=e.incomingSocket;if(t||n||i||s||r)console.log("[AUDIO-WARMUP] Skipping audio warm-up: active call in progress");else if(x&&"string"==typeof x&&0!==x.length){var a=l.store.getState().currentUser.featureCodes,o=null==a?void 0:a.audio_test,c=o&&"string"==typeof o&&o.length>0?o:"*41";console.log("[AUDIO-WARMUP] Starting audio warm-up test call",{codeToCall:c,SIP_HOST:x}),E.callNumber(c,x)}else console.warn("[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available",{SIP_HOST:x})}),o.useEventListener("phone-island-transcription-toggle",function(){var e=!l.store.getState().island.transcriptionViewIsVisible;l.store.dispatch.island.toggleTranscriptionViewVisible(e),c.eventDispatch(e?"phone-island-transcription-opened":"phone-island-transcription-closed",{})}),o.useEventListener("phone-island-summary-call-check",function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n,i,s,r,a,o,c,u,p,v,h;return e.__generator(this,function(e){switch(e.label){case 0:return n=(null==t?void 0:t.linkedid)||(null==t?void 0:t.linkedId),i=(null==t?void 0:t.uniqueid)||(null==t?void 0:t.uniqueId),n?i?(s=l.store.getState().conference,r=s.isActive,a=s.usersList,o=s.conferenceStartedFrom,c=l.store.getState().currentUser,u=c.name,p=c.username,v=r&&(o===p||!!a&&Object.values(a).some(function(e){return e.name===u})),v?[2]:[4,new Promise(function(e){return setTimeout(e,1e3)})]):[2]:[2];case 1:e.sent(),e.label=2;case 2:return e.trys.push([2,5,,6]),[4,Promise.resolve().then(function(){return require("./services/user.js")})];case 3:return[4,(0,e.sent().checkSummaryCall)(i,n)];case 4:return e.sent(),d.dispatchSummaryReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 5:return 204===(null==(h=e.sent())?void 0:h.status)&&d.dispatchSummaryNotReady({linkedid:n,uniqueid:i,source:"check"}),[3,6];case 6:return[2]}})})}),o.useEventListener("phone-island-call-summary-notify",function(t){return e.__awaiter(void 0,void 0,void 0,function(){var n,i;return e.__generator(this,function(e){switch(e.label){case 0:if(n=null==t?void 0:t.linkedid,i=null==t?void 0:t.uniqueid,!n)return[2];if(!i)return[2];e.label=1;case 1:return e.trys.push([1,4,,5]),[4,Promise.resolve().then(function(){return require("./services/user.js")})];case 2:return[4,(0,e.sent().watchSummaryCall)(n,i)];case 3:return e.sent(),c.eventDispatch("phone-island-summary-call-notified",{linkedid:n,uniqueid:i}),[3,5];case 4:return e.sent(),[2];case 5:return[2]}})})}),o.useEventListener("phone-island-size-change",function(t){var n=l.store.getState().island,i=n.sideViewIsVisible,s=n.transcriptionViewIsVisible,r=n.actionsExpanded,a=t.sizeInformation,o=e.__assign(e.__assign({},a),{right:i?"42px":"0px",top:I.isBackCallActive()?"40px":"0px",bottomTranscription:s&&r?"335px":s&&!r?"330px":"0px"});c.eventDispatch("phone-island-size-changed",{sizes:o})}),o.useEventListener("phone-island-call-ended",function(){if("online"===l.store.getState().currentUser.mainPresence){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore(),l.store.dispatch.paramUrl.setThroughTrunk(!1)}}),o.useEventListener("phone-island-conference-list-open",function(){l.store.dispatch.island.toggleConferenceList(!0),c.eventDispatch("phone-island-conference-list-opened",{})}),o.useEventListener("phone-island-alert-removed",function(e){var t=l.store.getState().alerts.status.activeAlertsCount,n=l.store.getState().island,i=n.view,s=n.previousView,r=l.store.getState().conference.isActive,a=l.store.getState().alerts.data,o=l.store.getState().currentCall,u=o.incoming,d=o.outgoing,p=o.accepted,v=null==e?void 0:e.type,h=o.incoming||o.outgoing||o.accepted||""!==o.conversationId;if(!(u||d||p||t>0||"player"===i||"recorder"===i||"physicalPhoneRecorder"===i||"waitingConference"===i&&r||"transfer"===i&&r||"settings"===i&&r||"settings"===i&&("recorder"===s||"player"===s)||"operatorBusy"===i&&!r)&&0===t&&(!v||a[v]&&!a[v].active)&&!h){c.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),c.eventDispatch("phone-island-sideview-close",{}),l.store.dispatch.island.handleResetIslandStore()}}),o.useEventListener("phone-island-conference-list-close",function(){l.store.dispatch.island.toggleConferenceList(!1),c.eventDispatch("phone-island-conference-list-closed",{})}),o.useEventListener("phone-island-conversations",function(e){var t,n=Object.keys(e)[0];if(n===(null===(t=l.store.getState().currentUser)||void 0===t?void 0:t.username)){var i=e[n].conversations,s=l.store.getState().paramUrl,r=l.store.getState().island.urlOpened;if(!s.hasValidUrl||r)return;if("answered"===s.openParamUrlType&&i&&Object.keys(i).length>0){var a=i[Object.keys(i)[0]],o=l.store.getState().currentUser.default_device,c=!("desktop"===q&&"nethlink"===(null==o?void 0:o.type));if((null==a?void 0:a.connected)&&"in"===(null==a?void 0:a.direction)){var u=s.onlyQueues||!1,d=S.isFromTrunk(a.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(d),!0===u&&!0===(null==a?void 0:a.throughQueue)?he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c):!1!==u||!0!==d&&!0!==(null==a?void 0:a.throughQueue)||he(a.counterpartNum,a.counterpartName,a.owner,a.uniqueId,c)}}}}),k.default.createElement(k.default.Fragment,null,k.default.createElement(y.default,{store:l.store},P&&""!==P.trim()?k.default.createElement(s.WebRTC,{hostName:N,sipExten:P,sipSecret:V,sipHost:x,sipPort:F,reload:W,reloadedCallback:function(){return H(!0)},uaType:q},k.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},k.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){return G(!0)},uaType:q},k.default.createElement(n.Events,{sipHost:x},k.default.createElement(r.Island,{showAlways:T,uaType:q}))))):k.default.createElement(a.RestAPI,{hostName:N,username:A,authToken:O},k.default.createElement(i.Socket,{hostName:N,username:A,authToken:O,reload:W,reloadedCallback:function(){G(!0),H(!0)},uaType:q},k.default.createElement(n.Events,{sipHost:x},k.default.createElement(r.Island,{showAlways:T,uaType:q}))))))});L.displayName="PhoneIslandComponent";var U=t.forwardRef(function(t,n){return k.default.createElement(L,e.__assign({},t,{ref:n}))});U.displayName="PhoneIsland",exports.PhoneIsland=U;
2
2
  //# sourceMappingURL=App.js.map
package/dist/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store, downloadStoresAsJSON } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\n// Enable cookie sending for cross-origin requests when behind the support proxy\nif (typeof window !== 'undefined' && window.location.hostname.includes('.support.my.')) {\n const originalFetch = window.fetch\n window.fetch = function (input: RequestInfo | URL, init?: RequestInit) {\n return originalFetch(input, { credentials: 'include', ...init })\n }\n}\n\nimport {\n useEventListener,\n eventDispatch,\n setJSONItem,\n getJSONItem,\n dispatchSummaryReady,\n dispatchSummaryNotReady,\n} from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\nimport { callNumber } from './lib/phone/call'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n urlParamWithEvent?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport interface PhoneIslandRef {\n reset: () => void\n}\n\nconst PhoneIslandComponent = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (\n {\n dataConfig,\n showAlways = false,\n uaType,\n urlParamWithEvent = false,\n }: PhoneIslandProps,\n ref,\n ) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n // Cooldown to prevent reload loop when network is down\n const lastReloadTime = useRef<number>(0)\n const RELOAD_COOLDOWN = 10 * 1000 // 10 seconds between reload attempts\n const activeTranscriptionUniqueIdRef = useRef<string | null>(null)\n const activeTranscriptionLinkedIdRef = useRef<string | null>(null)\n\n // Expose reset method via imperativeHandle\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n console.info('PhoneIsland: Performing full component reset')\n setReload(true)\n },\n }),\n [],\n )\n\n // Keepalive system to maintain tab active without heavy reload\n useEffect(() => {\n let lastActiveTime = Date.now()\n const INACTIVITY_THRESHOLD = 5 * 60 * 1000 // 5 minutes\n\n // Handle visibility change (tab becomes visible/hidden)\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n const now = Date.now()\n const timeSinceLastActive = now - lastActiveTime\n // Trigger emergency stop ringtone after 2 seconds when tab becomes active again\n setTimeout(() => {\n eventDispatch('phone-island-emergency-stop-ringtone', {})\n }, 2000)\n\n // Only reload if tab was hidden for more than threshold\n if (timeSinceLastActive > INACTIVITY_THRESHOLD) {\n console.info('Tab inactive for long period, performing soft reconnection')\n setReload(true)\n }\n lastActiveTime = now\n }\n }\n\n // Lightweight worker for keepalive ping\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n if (event.data === 'ping') {\n // Simple ping to keep tab active - no action needed\n lastActiveTime = Date.now()\n }\n }\n\n // Listen for visibility changes\n document.addEventListener('visibilitychange', handleVisibilityChange)\n\n return () => {\n worker.terminate()\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n store.dispatch.island.setForceReload(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n // Failsafe: if a reload cycle never completes (a reload effect returning\n // without calling its reloaded callback), reload would stay true forever,\n // making both the automatic monitor and the manual refresh button no-ops\n useEffect(() => {\n if (!reload) return\n const failsafe = setTimeout(() => {\n console.warn('Reload cycle did not complete within 30s, resetting reload state')\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n store.dispatch.island.setForceReload(false)\n }, 30000)\n return () => clearTimeout(failsafe)\n }, [reload])\n\n // Monitor alerts and trigger automatic reload when webrtc_down or socket_down become active\n useEffect(() => {\n const checkInterval = setInterval(() => {\n const { data } = store.getState().alerts\n const isWebRTCDown = data.webrtc_down?.active || false\n const isSocketDown = data.socket_down?.active || false\n const now = Date.now()\n const timeSinceLastReload = now - lastReloadTime.current\n\n // Check if there's an active call - if so, don't reload automatically\n // WebRTC/ICE is designed to recover from brief network interruptions\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCall = accepted || outgoing || iceState === 'connected' || iceState === 'completed'\n\n // If either alert is active and we're not already reloading and cooldown has passed\n // Don't trigger reload if we're completely offline - wait for network to come back\n // Don't trigger reload if there's an active call - let ICE try to recover\n const isOnline = navigator.onLine\n if ((isWebRTCDown || isSocketDown) && !reload && timeSinceLastReload > RELOAD_COOLDOWN && isOnline) {\n if (hasActiveCall) {\n console.info('Alert detected but active call in progress - skipping automatic reload to let ICE recover', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown,\n iceState,\n accepted,\n outgoing\n })\n // Don't reload - let ICE try to recover the call\n return\n }\n console.info('Alert detected (webrtc_down or socket_down), triggering automatic reload', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown\n })\n lastReloadTime.current = now\n setReload(true)\n }\n }, 1000) // Check every second\n\n return () => clearInterval(checkInterval)\n }, [reload])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-emergency-stop-ringtone', () => {\n const { view } = store.getState().island\n\n // If phone-island is active (view is not null), don't stop the ringtone\n if (view !== null) {\n console.log('Phone island is active, ringtone stop ignored')\n return\n }\n\n // Phone-island is not active (view is null), force stop ringtone\n console.warn('Emergency stop ringtone triggered - phone island inactive')\n store.dispatch.player.emergencyStopAudioPlayer()\n eventDispatch('phone-island-emergency-stop-ringtone-completed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.webrtc.updateWebRTC({\n sipcall: null,\n registered: false,\n isDetached: true,\n jsepGlobal: null,\n })\n store.dispatch.webrtc.updateRemoteAudioStream(null)\n store.dispatch.webrtc.updateLocalAudioStream(null)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.webrtc.updateRemoteVideoStream(null)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-reload-component', (data: any) => {\n if (data?.force) {\n store.dispatch.island.setForceReload(true)\n }\n setReload(true)\n })\n\n useEventListener('phone-island-audio-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-audio-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Audio input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n useEventListener('phone-island-video-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isVideoInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Video input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultVideoInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-video-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-video-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Video input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n const [paramUrlInitialized, setParamUrlInitialized] = useState(false)\n const fetchReady = useSyncExternalStore(\n store.subscribe,\n () => store.getState().fetchDefaults.fetchReady || false,\n )\n\n // Initialize application on first render\n useEffect(() => {\n if (firstRender) {\n // Initialize i18n\n initI18n()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n store.dispatch.paramUrl.setParamUrl({\n url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.warn('Non-blocking param URL fetch failed:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (!fetchReady || paramUrlInitialized) {\n return\n }\n\n setParamUrlInitialized(true)\n initParamUrl()\n }, [fetchReady, paramUrlInitialized])\n\n // Helper function to check if an audio output device is available\n const isAudioOutputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n return audioOutputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio output device\n const getDefaultAudioOutputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioOutputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioOutputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if an audio input device is available\n const isAudioInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n return audioInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking audio input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio input device\n const getDefaultAudioInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default audio input device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if a video input device is available\n const isVideoInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n return videoInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking video input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default video input device\n const getDefaultVideoInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n videoInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || videoInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default video input device:', err)\n return 'default'\n }\n }\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const trySetSinkId = async () => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n if (!remoteAudioElement?.current) {\n console.warn('Remote audio element not available')\n return\n }\n\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioOutputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio output device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioOutputDevice()\n\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n }\n\n try {\n // Try to set sink ID directly first (works if audio element is already active)\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info('Default audio output device changed successfully!')\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (err) {\n console.log('Direct setSinkId failed, trying with temporary stream:', err)\n\n try {\n // Create a temporary silent audio stream to activate the audio element\n const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()\n const oscillator = audioContext.createOscillator()\n const gainNode = audioContext.createGain()\n\n // Create silent audio\n oscillator.frequency.setValueAtTime(440, audioContext.currentTime)\n gainNode.gain.setValueAtTime(0, audioContext.currentTime) // Silent\n\n oscillator.connect(gainNode)\n\n // Get MediaStream from audio context\n const destination = audioContext.createMediaStreamDestination()\n gainNode.connect(destination)\n\n // Set the stream to the audio element\n remoteAudioElement.current.srcObject = destination.stream\n\n // Start the oscillator\n oscillator.start()\n\n // Try setSinkId again after a short delay\n setTimeout(async () => {\n try {\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info(\n 'Default audio output device changed successfully with temporary stream!',\n )\n\n // Clean up temporary stream\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (finalErr) {\n console.error('Final setSinkId attempt failed:', finalErr)\n\n // Clean up on failure\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // If original device failed and we're not already using default, try default\n if (targetDeviceId !== 'default') {\n console.log('Trying fallback to default device')\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Even default device failed:', defaultErr)\n }\n }\n\n // Save device preference anyway for future calls\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }, 100)\n } catch (streamErr) {\n console.error('Failed to create temporary audio stream:', streamErr)\n\n // Final fallback: try default device\n if (targetDeviceId !== 'default') {\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Emergency fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Emergency fallback to default device failed:', defaultErr)\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n } else {\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }\n }\n\n trySetSinkId()\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (data: any) => {\n setTheme(data?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (data: any) => {\n store.dispatch.alerts.setAlert(data.toString())\n })\n\n // Ringtone management events\n useEventListener('phone-island-ringing-tone-list', () => {\n const ringtones = store.getState().ringtones.availableRingtones\n const ringtoneList = ringtones.map((r) => ({\n name: r.name,\n displayName: r.displayName,\n base64Audio: r.base64Audio,\n }))\n eventDispatch('phone-island-ringing-tone-list-response', { ringtones: ringtoneList })\n })\n\n useEventListener('phone-island-ringing-tone-select', (data: { name: string }) => {\n if (data?.name) {\n // Save to localStorage\n setJSONItem('phone-island-selected-ringtone', { value: data.name })\n // Update store\n store.dispatch.ringtones.setSelectedRingtone(data.name)\n eventDispatch('phone-island-ringing-tone-selected', { name: data.name })\n }\n })\n\n useEventListener('phone-island-ringing-tone-output', (data: { deviceId: string }) => {\n if (data?.deviceId) {\n // Save to localStorage\n setJSONItem('phone-island-ringtone-output-device', { value: data.deviceId })\n // Update store\n store.dispatch.ringtones.setOutputDeviceId(data.deviceId)\n eventDispatch('phone-island-ringing-tone-output-changed', { deviceId: data.deviceId })\n }\n })\n\n // Load ringtone preferences from localStorage on mount\n useEffect(() => {\n const savedRingtone = getJSONItem('phone-island-selected-ringtone')\n const savedOutputDevice = getJSONItem('phone-island-ringtone-output-device')\n\n if (savedRingtone?.value) {\n store.dispatch.ringtones.setSelectedRingtone(savedRingtone.value)\n }\n if (savedOutputDevice?.value) {\n store.dispatch.ringtones.setOutputDeviceId(savedOutputDevice.value)\n }\n }, [])\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any, automatic?: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile' && !urlParamWithEvent && automatic) {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n // Calculate automatic flag: false when desktop with nethlink device, true otherwise\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-queue-status', () => {\n const queueInformation = store.getState().queue\n console.log('Queue status debug informations: ', queueInformation)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n // Download all stores as JSON file - for debugging and backup\n useEventListener('phone-island-stores-download', () => {\n downloadStoresAsJSON()\n eventDispatch('phone-island-stores-downloaded', {})\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-transcription-close', () => {\n store.dispatch.island.toggleTranscriptionViewVisible(false)\n if (activeTranscriptionUniqueIdRef.current || activeTranscriptionLinkedIdRef.current) {\n eventDispatch('phone-island-stop-transcription', {\n uniqueid: activeTranscriptionUniqueIdRef.current,\n linkedid: activeTranscriptionLinkedIdRef.current,\n })\n activeTranscriptionUniqueIdRef.current = null\n activeTranscriptionLinkedIdRef.current = null\n }\n eventDispatch('phone-island-transcription-closed', {})\n })\n\n useEventListener('phone-island-transcription-open', (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n if (!linkedid && !uniqueid) {\n return\n }\n activeTranscriptionLinkedIdRef.current = linkedid || null\n activeTranscriptionUniqueIdRef.current = uniqueid || null\n eventDispatch('phone-island-start-transcription', {\n linkedid,\n uniqueid,\n })\n store.dispatch.island.toggleTranscriptionViewVisible(true)\n eventDispatch('phone-island-transcription-opened', {})\n })\n\n useEventListener('phone-island-init-audio', () => {\n // Check if there's an active call - don't interrupt it with audio warm-up\n const { accepted, incoming, outgoing, incomingWebRTC, incomingSocket } = store.getState().currentCall\n const hasActiveCall = accepted || incoming || outgoing || incomingWebRTC || incomingSocket\n\n if (hasActiveCall) {\n console.log('[AUDIO-WARMUP] Skipping audio warm-up: active call in progress')\n return\n }\n\n // Validate SIP_HOST before attempting call\n if (!SIP_HOST || typeof SIP_HOST !== 'string' || SIP_HOST.length === 0) {\n console.warn('[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available', { SIP_HOST })\n return\n }\n\n const { featureCodes } = store.getState().currentUser\n const audioTestCode = featureCodes?.audio_test\n // Always fallback to *41 if audio_test is not available\n const codeToCall = (audioTestCode && typeof audioTestCode === 'string' && audioTestCode.length > 0)\n ? audioTestCode\n : '*41'\n\n console.log('[AUDIO-WARMUP] Starting audio warm-up test call', { codeToCall, SIP_HOST })\n callNumber(codeToCall, SIP_HOST)\n })\n\n useEventListener('phone-island-transcription-toggle', () => {\n const { transcriptionViewIsVisible } = store.getState().island\n const newState = !transcriptionViewIsVisible\n store.dispatch.island.toggleTranscriptionViewVisible(newState)\n eventDispatch(\n newState ? 'phone-island-transcription-opened' : 'phone-island-transcription-closed',\n {},\n )\n })\n\n // Check if call summary/transcription exists\n useEventListener(\n 'phone-island-summary-call-check',\n async (data: { linkedid?: string; uniqueid?: string; linkedId?: string; uniqueId?: string }) => {\n const linkedid = data?.linkedid || data?.linkedId\n const uniqueid = data?.uniqueid || data?.uniqueId\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n const { isActive, usersList, conferenceStartedFrom } = store.getState().conference\n const { name, username } = store.getState().currentUser\n const isUserInConference =\n isActive &&\n (conferenceStartedFrom === username ||\n (!!usersList && Object.values(usersList).some((user: any) => user.name === name)))\n\n if (isUserInConference) {\n return\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n try {\n const { checkSummaryCall } = await import('./services/user')\n await checkSummaryCall(uniqueid, linkedid)\n dispatchSummaryReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n } catch (error: any) {\n // 204 means summary not present yet - not an error, just not ready\n if (error?.status === 204) {\n dispatchSummaryNotReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n }\n }\n },\n )\n\n // Watch for call summary/transcription notifications\n useEventListener(\n 'phone-island-call-summary-notify',\n async (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n try {\n const { watchSummaryCall } = await import('./services/user')\n await watchSummaryCall(linkedid, uniqueid)\n\n eventDispatch('phone-island-summary-call-notified', {\n linkedid,\n uniqueid,\n })\n } catch {\n return\n }\n },\n )\n\n useEventListener('phone-island-size-change', (data: any) => {\n const { sideViewIsVisible, transcriptionViewIsVisible, actionsExpanded } =\n store.getState().island\n\n // Get current dimensions from data\n const { sizeInformation } = data\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n bottomTranscription:\n transcriptionViewIsVisible && actionsExpanded\n ? '335px'\n : transcriptionViewIsVisible && !actionsExpanded\n ? '330px'\n : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (data) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = data?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player')) ||\n (view === 'operatorBusy' && !isActive)\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n {SIP_EXTEN && SIP_EXTEN.trim() !== '' ? (\n // Full stack with WebRTC when SIP extension is provided\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n ) : (\n // Minimal stack without WebRTC when no SIP extension\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => {\n setReloadedSocket(true)\n setReloadedWebRTC(true)\n }}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n )}\n </Provider>\n </>\n )\n})\n\nPhoneIslandComponent.displayName = 'PhoneIslandComponent'\n\nexport const PhoneIsland = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (props, ref) => <PhoneIslandComponent {...props} ref={ref} />,\n)\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["window","location","hostname","includes","originalFetch_1","fetch","input","init","__assign","credentials","PhoneIslandComponent","forwardRef","_a","ref","dataConfig","_b","showAlways","uaType","_c","urlParamWithEvent","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","lastReloadTime","useRef","activeTranscriptionUniqueIdRef","activeTranscriptionLinkedIdRef","useImperativeHandle","reset","console","info","useEffect","lastActiveTime","Date","now","handleVisibilityChange","document","hidden","timeSinceLastActive","setTimeout","eventDispatch","worker","Worker","wakeUpWorker","type","onmessage","event","data","addEventListener","terminate","removeEventListener","store","dispatch","island","setForceReload","failsafe","warn","clearTimeout","checkInterval","setInterval","getState","alerts","isWebRTCDown","webrtc_down","active","isSocketDown","socket_down","timeSinceLastReload","current","sipcall","webrtc","currentCall","accepted","outgoing","iceState","webrtcStuff","pc","iceConnectionState","hasActiveCall","isOnline","navigator","onLine","Math","round","clearInterval","useEventListener","toggleIsOpen","setIslandView","view","player","emergencyStopAudioPlayer","log","detach","updateWebRTC","registered","isDetached","jsepGlobal","updateRemoteAudioStream","updateLocalAudioStream","updateLocalVideoStream","updateRemoteVideoStream","force","__awaiter","targetDeviceId","deviceId","isAudioInputDeviceAvailable","sent","getDefaultAudioInputDevice","setJSONItem","concat","isVideoInputDeviceAvailable","getDefaultVideoInputDevice","_g","firstRender","setFirstRender","_h","firstAudioOutputInit","setFirstAudioOutputInit","_j","paramUrlInitialized","setParamUrlInitialized","fetchReady","useSyncExternalStore","subscribe","fetchDefaults","initI18n","getParamUrl","paramUrlResponse","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","error_1","mediaDevices","enumerateDevices","devices","filter","device","kind","some","err_3","audioInputDevices","defaultDevice","find","err_4","err_5","videoInputDevices","err_6","remoteAudioElement","remoteAudio","err_1","audioOutputDevices","err_2","setSinkId","err_7","audioContext_1","AudioContext","webkitAudioContext","oscillator_1","createOscillator","gainNode","createGain","frequency","setValueAtTime","currentTime","gain","connect","destination","createMediaStreamDestination","srcObject","stream","start","stop","close","error","finalErr_1","defaultErr_2","streamErr_1","defaultErr_1","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setAlert","toString","ringtoneList","ringtones","availableRingtones","map","r","name","displayName","base64Audio","value","setSelectedRingtone","setOutputDeviceId","savedRingtone","savedOutputDevice","checkInternetConnection","then","internetIsActive","intervalId","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","openParameterizedUrl","callerNum","callerName","called","uniqueId","automatic","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","replace","encodeURIComponent","formattedUrl","startsWith","newWindow","open","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","default_device","direction","throughQueue","counterpartName","owner","linkedId","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","queueInformation","queue","downloadStoresAsJSON","toggleSideViewVisible","toggleTranscriptionViewVisible","uniqueid","linkedid","incoming","incomingWebRTC","incomingSocket","length","featureCodes","audioTestCode","audio_test","codeToCall","callNumber","newState","transcriptionViewIsVisible","isActive","usersList","conferenceStartedFrom","isUserInConference","Object","values","user","Promise","resolve","checkSummaryCall","dispatchSummaryReady","source","error_2","status","dispatchSummaryNotReady","watchSummaryCall","sideViewIsVisible","actionsExpanded","sizeInformation","updatedSizeInformation","right","top","isBackCallActive","bottomTranscription","sizes","width","height","handleResetIslandStore","toggleConferenceList","activeAlertsCount","previousView","alertsData","alertType","isInCall","conversationId","keys","conversations","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","PhoneIsland","props"],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, {\n useState,\n useEffect,\n forwardRef,\n useImperativeHandle,\n useRef,\n useSyncExternalStore,\n} from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store, downloadStoresAsJSON } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\n// Enable cookie sending for cross-origin requests when behind the support proxy\nif (typeof window !== 'undefined' && window.location.hostname.includes('.support.my.')) {\n const originalFetch = window.fetch\n window.fetch = function (input: RequestInfo | URL, init?: RequestInit) {\n return originalFetch(input, { credentials: 'include', ...init })\n }\n}\n\nimport {\n useEventListener,\n eventDispatch,\n setJSONItem,\n getJSONItem,\n dispatchSummaryReady,\n dispatchSummaryNotReady,\n} from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { getParamUrl } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { isFromTrunk } from './lib/user/extensions'\nimport { callNumber } from './lib/phone/call'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n urlParamWithEvent?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport interface PhoneIslandRef {\n reset: () => void\n}\n\nconst PhoneIslandComponent = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (\n {\n dataConfig,\n showAlways = false,\n uaType,\n urlParamWithEvent = false,\n }: PhoneIslandProps,\n ref,\n ) => {\n const CONFIG: string[] = Base64.atob(dataConfig || '').split(':')\n const HOST_NAME: string = CONFIG[0]\n const USERNAME: string = CONFIG[1]\n const AUTH_TOKEN: string = CONFIG[2]\n const SIP_EXTEN: string = CONFIG[3]\n const SIP_SECRET: string = CONFIG[4]\n const SIP_HOST: string = CONFIG[5]\n const SIP_PORT: string = CONFIG[6]\n\n // Initialize the state to manage the reload events\n const [reload, setReload] = useState<boolean>(false)\n const [reloadedWebRTC, setReloadedWebRTC] = useState<boolean>(false)\n const [reloadedSocket, setReloadedSocket] = useState<boolean>(false)\n\n // Cooldown to prevent reload loop when network is down\n const lastReloadTime = useRef<number>(0)\n const RELOAD_COOLDOWN = 10 * 1000 // 10 seconds between reload attempts\n const activeTranscriptionUniqueIdRef = useRef<string | null>(null)\n const activeTranscriptionLinkedIdRef = useRef<string | null>(null)\n\n // Expose reset method via imperativeHandle\n useImperativeHandle(\n ref,\n () => ({\n reset: () => {\n console.info('PhoneIsland: Performing full component reset')\n setReload(true)\n },\n }),\n [],\n )\n\n // Keepalive system to maintain tab active without heavy reload\n useEffect(() => {\n let lastActiveTime = Date.now()\n const INACTIVITY_THRESHOLD = 5 * 60 * 1000 // 5 minutes\n\n // Handle visibility change (tab becomes visible/hidden)\n const handleVisibilityChange = () => {\n if (!document.hidden) {\n const now = Date.now()\n const timeSinceLastActive = now - lastActiveTime\n // Trigger emergency stop ringtone after 2 seconds when tab becomes active again\n setTimeout(() => {\n eventDispatch('phone-island-emergency-stop-ringtone', {})\n }, 2000)\n\n // Only reload if tab was hidden for more than threshold\n if (timeSinceLastActive > INACTIVITY_THRESHOLD) {\n console.info('Tab inactive for long period, performing soft reconnection')\n setReload(true)\n }\n lastActiveTime = now\n }\n }\n\n // Lightweight worker for keepalive ping\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n if (event.data === 'ping') {\n // Simple ping to keep tab active - no action needed\n lastActiveTime = Date.now()\n }\n }\n\n // Listen for visibility changes\n document.addEventListener('visibilitychange', handleVisibilityChange)\n\n return () => {\n worker.terminate()\n document.removeEventListener('visibilitychange', handleVisibilityChange)\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n store.dispatch.island.setForceReload(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\n\n // Failsafe: if a reload cycle never completes (a reload effect returning\n // without calling its reloaded callback), reload would stay true forever,\n // making both the automatic monitor and the manual refresh button no-ops\n useEffect(() => {\n if (!reload) return\n const failsafe = setTimeout(() => {\n console.warn('Reload cycle did not complete within 30s, resetting reload state')\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n store.dispatch.island.setForceReload(false)\n }, 30000)\n return () => clearTimeout(failsafe)\n }, [reload])\n\n // Monitor alerts and trigger automatic reload when webrtc_down or socket_down become active\n useEffect(() => {\n const checkInterval = setInterval(() => {\n const { data } = store.getState().alerts\n const isWebRTCDown = data.webrtc_down?.active || false\n const isSocketDown = data.socket_down?.active || false\n const now = Date.now()\n const timeSinceLastReload = now - lastReloadTime.current\n\n // Check if there's an active call - if so, don't reload automatically\n // WebRTC/ICE is designed to recover from brief network interruptions\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCall = accepted || outgoing || iceState === 'connected' || iceState === 'completed'\n\n // If either alert is active and we're not already reloading and cooldown has passed\n // Don't trigger reload if we're completely offline - wait for network to come back\n // Don't trigger reload if there's an active call - let ICE try to recover\n const isOnline = navigator.onLine\n if ((isWebRTCDown || isSocketDown) && !reload && timeSinceLastReload > RELOAD_COOLDOWN && isOnline) {\n if (hasActiveCall) {\n console.info('Alert detected but active call in progress - skipping automatic reload to let ICE recover', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown,\n iceState,\n accepted,\n outgoing\n })\n // Don't reload - let ICE try to recover the call\n return\n }\n console.info('Alert detected (webrtc_down or socket_down), triggering automatic reload', {\n timeSinceLastReload: Math.round(timeSinceLastReload / 1000) + 's',\n isWebRTCDown,\n isSocketDown\n })\n lastReloadTime.current = now\n setReload(true)\n }\n }, 1000) // Check every second\n\n return () => clearInterval(checkInterval)\n }, [reload])\n\n useEventListener('phone-island-expand', () => {\n store.dispatch.island.toggleIsOpen(true)\n eventDispatch('phone-island-expanded', {})\n })\n useEventListener('phone-island-compress', () => {\n store.dispatch.island.toggleIsOpen(false)\n eventDispatch('phone-island-compressed', {})\n })\n\n useEventListener('phone-island-call-keypad-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-keypad-closed', {})\n })\n useEventListener('phone-island-call-transfer-close', () => {\n store.dispatch.island.setIslandView('call')\n eventDispatch('phone-island-call-transfer-closed', {})\n })\n useEventListener('phone-island-recording-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-recording-closed', {})\n })\n useEventListener('phone-island-audio-player-close', () => {\n store.dispatch.island.setIslandView(null)\n eventDispatch('phone-island-audio-player-closed', {})\n })\n\n useEventListener('phone-island-emergency-stop-ringtone', () => {\n const { view } = store.getState().island\n\n // If phone-island is active (view is not null), don't stop the ringtone\n if (view !== null) {\n console.log('Phone island is active, ringtone stop ignored')\n return\n }\n\n // Phone-island is not active (view is null), force stop ringtone\n console.warn('Emergency stop ringtone triggered - phone island inactive')\n store.dispatch.player.emergencyStopAudioPlayer()\n eventDispatch('phone-island-emergency-stop-ringtone-completed', {})\n })\n\n useEventListener('phone-island-detach', (data) => {\n detach()\n store.dispatch.webrtc.updateWebRTC({\n sipcall: null,\n registered: false,\n isDetached: true,\n jsepGlobal: null,\n })\n store.dispatch.webrtc.updateRemoteAudioStream(null)\n store.dispatch.webrtc.updateLocalAudioStream(null)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.webrtc.updateRemoteVideoStream(null)\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-reload-component', (data: any) => {\n if (data?.force) {\n store.dispatch.island.setForceReload(true)\n }\n setReload(true)\n })\n\n useEventListener('phone-island-audio-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-audio-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Audio input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n useEventListener('phone-island-video-input-change', async (data: DeviceInputOutputTypes) => {\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isVideoInputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Video input device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultVideoInputDevice()\n }\n }\n\n // Save the final device choice\n setJSONItem('phone-island-video-input-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-video-input-changed', {})\n\n if (targetDeviceId !== data.deviceId) {\n console.info(\n `Video input device changed from ${data.deviceId} to ${targetDeviceId} (fallback)`,\n )\n }\n })\n\n const [firstRender, setFirstRender] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n const [paramUrlInitialized, setParamUrlInitialized] = useState(false)\n const fetchReady = useSyncExternalStore(\n store.subscribe,\n () => store.getState().fetchDefaults.fetchReady || false,\n )\n\n // Initialize application on first render\n useEffect(() => {\n if (firstRender) {\n // Initialize i18n\n initI18n()\n setFirstRender(false)\n }\n }, [firstRender])\n\n useEffect(() => {\n const initParamUrl = async () => {\n try {\n const paramUrlResponse: any = await getParamUrl()\n const url = paramUrlResponse?.url || ''\n const isValid = url && url.trim() !== ''\n\n store.dispatch.paramUrl.setParamUrl({\n url,\n onlyQueues: paramUrlResponse?.only_queues || false,\n hasValidUrl: isValid,\n })\n } catch (error) {\n console.warn('Non-blocking param URL fetch failed:', error)\n store.dispatch.paramUrl.setParamUrl({\n url: '',\n onlyQueues: false,\n hasValidUrl: false,\n })\n }\n }\n\n if (!fetchReady || paramUrlInitialized) {\n return\n }\n\n setParamUrlInitialized(true)\n initParamUrl()\n }, [fetchReady, paramUrlInitialized])\n\n // Helper function to check if an audio output device is available\n const isAudioOutputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n return audioOutputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio output device\n const getDefaultAudioOutputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioOutputDevices = devices.filter((device) => device.kind === 'audiooutput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioOutputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioOutputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if an audio input device is available\n const isAudioInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n return audioInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking audio input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default audio input device\n const getDefaultAudioInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const audioInputDevices = devices.filter((device) => device.kind === 'audioinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n audioInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || audioInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default audio input device:', err)\n return 'default'\n }\n }\n\n // Helper function to check if a video input device is available\n const isVideoInputDeviceAvailable = async (deviceId: string): Promise<boolean> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return false\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n return videoInputDevices.some((device) => device.deviceId === deviceId)\n } catch (err) {\n console.warn('Error checking video input device availability:', err)\n return false\n }\n }\n\n // Helper function to get default video input device\n const getDefaultVideoInputDevice = async (): Promise<string> => {\n try {\n if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {\n return 'default'\n }\n\n const devices = await navigator.mediaDevices.enumerateDevices()\n const videoInputDevices = devices.filter((device) => device.kind === 'videoinput')\n\n // Find the default device (usually has deviceId 'default' or is the first one)\n const defaultDevice =\n videoInputDevices.find(\n (device) => device.deviceId === 'default' || device.deviceId === '',\n ) || videoInputDevices[0]\n\n return defaultDevice ? defaultDevice.deviceId : 'default'\n } catch (err) {\n console.warn('Error getting default video input device:', err)\n return 'default'\n }\n }\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const trySetSinkId = async () => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n if (!remoteAudioElement?.current) {\n console.warn('Remote audio element not available')\n return\n }\n\n let targetDeviceId = data.deviceId\n\n // Check if the requested device is available\n if (targetDeviceId && targetDeviceId !== 'default') {\n const isAvailable = await isAudioOutputDeviceAvailable(targetDeviceId)\n\n if (!isAvailable) {\n console.warn(\n `Audio output device ${targetDeviceId} not available, falling back to default device`,\n )\n targetDeviceId = await getDefaultAudioOutputDevice()\n\n // Update localStorage with the fallback device\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n }\n\n try {\n // Try to set sink ID directly first (works if audio element is already active)\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info('Default audio output device changed successfully!')\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (err) {\n console.log('Direct setSinkId failed, trying with temporary stream:', err)\n\n try {\n // Create a temporary silent audio stream to activate the audio element\n const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)()\n const oscillator = audioContext.createOscillator()\n const gainNode = audioContext.createGain()\n\n // Create silent audio\n oscillator.frequency.setValueAtTime(440, audioContext.currentTime)\n gainNode.gain.setValueAtTime(0, audioContext.currentTime) // Silent\n\n oscillator.connect(gainNode)\n\n // Get MediaStream from audio context\n const destination = audioContext.createMediaStreamDestination()\n gainNode.connect(destination)\n\n // Set the stream to the audio element\n remoteAudioElement.current.srcObject = destination.stream\n\n // Start the oscillator\n oscillator.start()\n\n // Try setSinkId again after a short delay\n setTimeout(async () => {\n try {\n await remoteAudioElement.current.setSinkId(targetDeviceId)\n console.info(\n 'Default audio output device changed successfully with temporary stream!',\n )\n\n // Clean up temporary stream\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // Save device to localStorage\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n } catch (finalErr) {\n console.error('Final setSinkId attempt failed:', finalErr)\n\n // Clean up on failure\n oscillator.stop()\n audioContext.close()\n remoteAudioElement.current.srcObject = null\n\n // If original device failed and we're not already using default, try default\n if (targetDeviceId !== 'default') {\n console.log('Trying fallback to default device')\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Even default device failed:', defaultErr)\n }\n }\n\n // Save device preference anyway for future calls\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }, 100)\n } catch (streamErr) {\n console.error('Failed to create temporary audio stream:', streamErr)\n\n // Final fallback: try default device\n if (targetDeviceId !== 'default') {\n try {\n await remoteAudioElement.current.setSinkId('default')\n setJSONItem('phone-island-audio-output-device', { deviceId: 'default' })\n console.info('Emergency fallback to default audio device successful')\n } catch (defaultErr) {\n console.error('Emergency fallback to default device failed:', defaultErr)\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n } else {\n setJSONItem('phone-island-audio-output-device', { deviceId: targetDeviceId })\n }\n\n eventDispatch('phone-island-audio-output-changed', {})\n }\n }\n }\n\n trySetSinkId()\n })\n\n // Listen for the operator status change\n useEventListener('phone-island-presence-change', (data: any) => {\n changeOperatorStatus(data)\n eventDispatch('phone-island-presence-changed', {})\n })\n\n useEventListener('phone-island-view-changed', (data) => {\n const viewType = data?.viewType\n store.dispatch.island.setIslandView(viewType)\n })\n\n const remoteAudioElement: any = store.getState().player.remoteAudio\n\n //get output device from localstorage\n useEffect(() => {\n if (firstAudioOutputInit && remoteAudioElement) {\n const defaultAudioOutputDevice: any = getJSONItem(\n `phone-island-audio-output-device`,\n )?.deviceId\n eventDispatch('phone-island-audio-output-change', {\n deviceId: defaultAudioOutputDevice,\n })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (data: any) => {\n setTheme(data?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (data: any) => {\n store.dispatch.alerts.setAlert(data.toString())\n })\n\n // Ringtone management events\n useEventListener('phone-island-ringing-tone-list', () => {\n const ringtones = store.getState().ringtones.availableRingtones\n const ringtoneList = ringtones.map((r) => ({\n name: r.name,\n displayName: r.displayName,\n base64Audio: r.base64Audio,\n }))\n eventDispatch('phone-island-ringing-tone-list-response', { ringtones: ringtoneList })\n })\n\n useEventListener('phone-island-ringing-tone-select', (data: { name: string }) => {\n if (data?.name) {\n // Save to localStorage\n setJSONItem('phone-island-selected-ringtone', { value: data.name })\n // Update store\n store.dispatch.ringtones.setSelectedRingtone(data.name)\n eventDispatch('phone-island-ringing-tone-selected', { name: data.name })\n }\n })\n\n useEventListener('phone-island-ringing-tone-output', (data: { deviceId: string }) => {\n if (data?.deviceId) {\n // Save to localStorage\n setJSONItem('phone-island-ringtone-output-device', { value: data.deviceId })\n // Update store\n store.dispatch.ringtones.setOutputDeviceId(data.deviceId)\n eventDispatch('phone-island-ringing-tone-output-changed', { deviceId: data.deviceId })\n }\n })\n\n // Load ringtone preferences from localStorage on mount\n useEffect(() => {\n const savedRingtone = getJSONItem('phone-island-selected-ringtone')\n const savedOutputDevice = getJSONItem('phone-island-ringtone-output-device')\n\n if (savedRingtone?.value) {\n store.dispatch.ringtones.setSelectedRingtone(savedRingtone.value)\n }\n if (savedOutputDevice?.value) {\n store.dispatch.ringtones.setOutputDeviceId(savedOutputDevice.value)\n }\n }, [])\n\n // Manually check if internet connection is enabled or not\n useEventListener('phone-island-check-connection', () => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n })\n\n // Check internet connection every 5 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n checkInternetConnection().then((internetIsActive) => {\n if (internetIsActive) {\n eventDispatch('phone-island-internet-connected', {})\n } else {\n eventDispatch('phone-island-internet-disconnected', {})\n }\n })\n }, 5000)\n\n return () => clearInterval(intervalId)\n }, [])\n\n useEventListener('phone-island-main-presence', (data: any) => {\n const currentUsernameInformation: any = store.getState().currentUser?.username\n const currentUserObject: any = store.getState().currentUser\n let mainPresenceValueBeforeUpdate = currentUserObject?.mainPresence\n if (\n currentUsernameInformation !== undefined &&\n currentUsernameInformation !== '' &&\n !isEmpty(data[currentUsernameInformation]) &&\n data[currentUsernameInformation]?.mainPresence !== undefined\n ) {\n let newMainPresenceValue = data[currentUsernameInformation]?.mainPresence\n store.dispatch.currentUser.updateMainPresence(data[currentUsernameInformation]?.mainPresence)\n let mainPresenceValueAfterUpdate = newMainPresenceValue\n if (mainPresenceValueAfterUpdate === 'online' && mainPresenceValueBeforeUpdate !== 'online') {\n eventDispatch('phone-island-call-ended', {})\n }\n }\n })\n\n useEventListener('phone-island-call-status', () => {\n const callInformation = store.getState().currentCall\n console.log('Call status debug informations: ', callInformation)\n })\n\n const openParameterizedUrl = (callerNum: any, callerName: any, called: any, uniqueId: any, automatic?: any) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo?.hasValidUrl) {\n return\n }\n\n const paramUrl = paramUrlInfo.url || ''\n\n if (!paramUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n const openParamUrlType = paramUrlInfo.openParamUrlType\n\n if (urlOpened && openParamUrlType !== 'button') {\n return\n }\n\n let processedUrl = paramUrl\n\n if (processedUrl.includes('$CALLER_NUMBER') && callerNum) {\n processedUrl = processedUrl.replace(/\\$CALLER_NUMBER/g, encodeURIComponent(callerNum))\n }\n if (processedUrl.includes('$CALLER_NAME') && callerName) {\n processedUrl = processedUrl.replace(/\\$CALLER_NAME/g, encodeURIComponent(callerName))\n }\n if (processedUrl.includes('$UNIQUEID') && uniqueId) {\n processedUrl = processedUrl.replace(/\\$UNIQUEID/g, encodeURIComponent(uniqueId))\n }\n if (processedUrl.includes('$CALLED') && called) {\n processedUrl = processedUrl.replace(/\\$CALLED/g, encodeURIComponent(called))\n }\n if (processedUrl.includes('{phone}') && callerNum) {\n processedUrl = processedUrl.replace(/\\{phone\\}/g, encodeURIComponent(callerNum))\n }\n\n const formattedUrl = processedUrl.startsWith('http') ? processedUrl : `https://${processedUrl}`\n\n if (uaType !== 'mobile' && !urlParamWithEvent && automatic) {\n const newWindow = window.open('about:blank', '_blank')\n if (newWindow) {\n newWindow.location.href = formattedUrl\n store.dispatch.island.setUrlOpened(true)\n }\n } else {\n eventDispatch('phone-island-url-parameter-opened-external', { formattedUrl })\n }\n }\n\n useEventListener('phone-island-already-opened-external-page', () => {\n store.dispatch.island.setUrlOpened(true)\n })\n\n useEventListener('phone-island-url-parameter-opened', (data) => {\n const paramUrlInfo = store.getState().paramUrl\n\n if (!paramUrlInfo.hasValidUrl) {\n return\n }\n\n const { urlOpened } = store.getState().island\n if (urlOpened) {\n return\n }\n\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const throughTrunk = isFromTrunk(data?.counterpartNum)\n store.dispatch.paramUrl.setThroughTrunk(throughTrunk)\n\n // Calculate automatic flag: false when desktop with nethlink device, true otherwise\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n if (data?.direction === 'in') {\n if (onlyQueues === true && data?.throughQueue === true) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n } else if (onlyQueues === false && (throughTrunk === true || data?.throughQueue === true)) {\n openParameterizedUrl(\n data?.counterpartNum,\n data?.counterpartName,\n data?.owner,\n data?.linkedId,\n automatic,\n )\n }\n }\n })\n\n useEventListener('phone-island-user-status', () => {\n const userInformation = store.getState().currentUser\n console.log('User status debug informations: ', userInformation)\n })\n\n useEventListener('phone-island-all-users-status', () => {\n const allUsersInformation = store.getState().users\n console.log('Users status debug informations: ', allUsersInformation)\n })\n\n useEventListener('phone-island-status', () => {\n const phoneIslandInformation = store.getState().island\n console.log('Phone island status debug informations: ', phoneIslandInformation)\n })\n\n useEventListener('phone-island-webrtc-status', () => {\n const webrtcInformation = store.getState().webrtc\n console.log('Webrtc status debug informations: ', webrtcInformation)\n })\n\n useEventListener('phone-island-player-status', () => {\n const playerInformation = store.getState().player\n console.log('Player status debug informations: ', playerInformation)\n })\n\n useEventListener('phone-island-conference-status', () => {\n const conferenceInformation = store.getState().conference\n console.log('Webrtc status debug informations: ', conferenceInformation)\n })\n\n useEventListener('phone-island-streaming-status', () => {\n const streamingInformation = store.getState().streaming\n console.log('Streaming status debug informations: ', streamingInformation)\n })\n\n useEventListener('phone-island-paramurl-status', () => {\n const paramurl = store.getState().paramUrl\n console.log('Paramurl status debug informations: ', paramurl)\n })\n\n useEventListener('phone-island-queue-status', () => {\n const queueInformation = store.getState().queue\n console.log('Queue status debug informations: ', queueInformation)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n // Download all stores as JSON file - for debugging and backup\n useEventListener('phone-island-stores-download', () => {\n downloadStoresAsJSON()\n eventDispatch('phone-island-stores-downloaded', {})\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-sideview-opened', {})\n })\n\n useEventListener('phone-island-sideview-close', () => {\n store.dispatch.island.toggleSideViewVisible(false)\n eventDispatch('phone-island-sideview-closed', {})\n })\n\n useEventListener('phone-island-transcription-close', () => {\n store.dispatch.island.toggleTranscriptionViewVisible(false)\n if (activeTranscriptionUniqueIdRef.current || activeTranscriptionLinkedIdRef.current) {\n eventDispatch('phone-island-stop-transcription', {\n uniqueid: activeTranscriptionUniqueIdRef.current,\n linkedid: activeTranscriptionLinkedIdRef.current,\n })\n activeTranscriptionUniqueIdRef.current = null\n activeTranscriptionLinkedIdRef.current = null\n }\n eventDispatch('phone-island-transcription-closed', {})\n })\n\n useEventListener('phone-island-transcription-open', (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n if (!linkedid && !uniqueid) {\n return\n }\n activeTranscriptionLinkedIdRef.current = linkedid || null\n activeTranscriptionUniqueIdRef.current = uniqueid || null\n eventDispatch('phone-island-start-transcription', {\n linkedid,\n uniqueid,\n })\n store.dispatch.island.toggleTranscriptionViewVisible(true)\n eventDispatch('phone-island-transcription-opened', {})\n })\n\n useEventListener('phone-island-init-audio', () => {\n // Check if there's an active call - don't interrupt it with audio warm-up\n const { accepted, incoming, outgoing, incomingWebRTC, incomingSocket } = store.getState().currentCall\n const hasActiveCall = accepted || incoming || outgoing || incomingWebRTC || incomingSocket\n\n if (hasActiveCall) {\n console.log('[AUDIO-WARMUP] Skipping audio warm-up: active call in progress')\n return\n }\n\n // Validate SIP_HOST before attempting call\n if (!SIP_HOST || typeof SIP_HOST !== 'string' || SIP_HOST.length === 0) {\n console.warn('[AUDIO-WARMUP] Skipping audio warm-up: SIP_HOST not available', { SIP_HOST })\n return\n }\n\n const { featureCodes } = store.getState().currentUser\n const audioTestCode = featureCodes?.audio_test\n // Always fallback to *41 if audio_test is not available\n const codeToCall = (audioTestCode && typeof audioTestCode === 'string' && audioTestCode.length > 0)\n ? audioTestCode\n : '*41'\n\n console.log('[AUDIO-WARMUP] Starting audio warm-up test call', { codeToCall, SIP_HOST })\n callNumber(codeToCall, SIP_HOST)\n })\n\n useEventListener('phone-island-transcription-toggle', () => {\n const { transcriptionViewIsVisible } = store.getState().island\n const newState = !transcriptionViewIsVisible\n store.dispatch.island.toggleTranscriptionViewVisible(newState)\n eventDispatch(\n newState ? 'phone-island-transcription-opened' : 'phone-island-transcription-closed',\n {},\n )\n })\n\n // Check if call summary/transcription exists\n useEventListener(\n 'phone-island-summary-call-check',\n async (data: { linkedid?: string; uniqueid?: string; linkedId?: string; uniqueId?: string }) => {\n const linkedid = data?.linkedid || data?.linkedId\n const uniqueid = data?.uniqueid || data?.uniqueId\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n const { isActive, usersList, conferenceStartedFrom } = store.getState().conference\n const { name, username } = store.getState().currentUser\n const isUserInConference =\n isActive &&\n (conferenceStartedFrom === username ||\n (!!usersList && Object.values(usersList).some((user: any) => user.name === name)))\n\n if (isUserInConference) {\n return\n }\n\n await new Promise(resolve => setTimeout(resolve, 1000))\n\n try {\n const { checkSummaryCall } = await import('./services/user')\n await checkSummaryCall(uniqueid, linkedid)\n dispatchSummaryReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n } catch (error: any) {\n // 204 means summary not present yet - not an error, just not ready\n if (error?.status === 204) {\n dispatchSummaryNotReady({\n linkedid,\n uniqueid,\n source: 'check',\n })\n }\n }\n },\n )\n\n // Watch for call summary/transcription notifications\n useEventListener(\n 'phone-island-call-summary-notify',\n async (data: { linkedid?: string; uniqueid?: string }) => {\n const linkedid = data?.linkedid\n const uniqueid = data?.uniqueid\n\n if (!linkedid) {\n return\n }\n\n if (!uniqueid) {\n return\n }\n\n try {\n const { watchSummaryCall } = await import('./services/user')\n await watchSummaryCall(linkedid, uniqueid)\n\n eventDispatch('phone-island-summary-call-notified', {\n linkedid,\n uniqueid,\n })\n } catch {\n return\n }\n },\n )\n\n useEventListener('phone-island-size-change', (data: any) => {\n const { sideViewIsVisible, transcriptionViewIsVisible, actionsExpanded } =\n store.getState().island\n\n // Get current dimensions from data\n const { sizeInformation } = data\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n bottomTranscription:\n transcriptionViewIsVisible && actionsExpanded\n ? '335px'\n : transcriptionViewIsVisible && !actionsExpanded\n ? '330px'\n : '0px',\n }\n eventDispatch('phone-island-size-changed', { sizes: updatedSizeInformation })\n })\n\n // Listen for the call end event and set the island size to 0\n useEventListener('phone-island-call-ended', () => {\n const { mainPresence } = store.getState().currentUser\n if (mainPresence === 'online') {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n store.dispatch.paramUrl.setThroughTrunk(false)\n }\n })\n\n useEventListener('phone-island-conference-list-open', () => {\n store.dispatch.island.toggleConferenceList(true)\n eventDispatch('phone-island-conference-list-opened', {})\n })\n\n useEventListener('phone-island-alert-removed', (data) => {\n // Get current alerts status\n const { activeAlertsCount } = store.getState().alerts.status\n const { view, previousView } = store.getState().island\n const { isActive } = store.getState().conference\n const alertsData = store.getState().alerts.data\n const currentCall = store.getState().currentCall\n const { incoming, outgoing, accepted } = currentCall\n\n // Check if alert type was provided\n const alertType = data?.type\n\n // Check if user is in a call\n const isInCall =\n currentCall.incoming ||\n currentCall.outgoing ||\n currentCall.accepted ||\n currentCall.conversationId !== ''\n\n // Determine if the island should remain visible\n const shouldKeepVisible =\n incoming ||\n outgoing ||\n accepted ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder' ||\n (view === 'waitingConference' && isActive) ||\n (view === 'transfer' && isActive) ||\n (view === 'settings' && isActive) ||\n (view === 'settings' && (previousView === 'recorder' || previousView === 'player')) ||\n (view === 'operatorBusy' && !isActive)\n\n // Reset the island store only if:\n // 1. The island should not remain visible\n // 2. No more active alerts\n // 3. The specific alert is not active anymore\n // 4. User is not currently in a call\n if (\n !shouldKeepVisible &&\n activeAlertsCount === 0 &&\n (!alertType || (alertsData[alertType] && !alertsData[alertType].active)) &&\n !isInCall\n ) {\n const sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n store.dispatch.island.handleResetIslandStore()\n }\n })\n\n useEventListener('phone-island-conference-list-close', () => {\n store.dispatch.island.toggleConferenceList(false)\n eventDispatch('phone-island-conference-list-closed', {})\n })\n\n // Listen for conversations updates to handle 'answered' preference for parameterized URL\n useEventListener('phone-island-conversations', (data: any) => {\n // Get the current username (first key in the data object)\n const username = Object.keys(data)[0]\n const currentUsernameInformation: any = store.getState().currentUser?.username\n\n if (username === currentUsernameInformation) {\n const conversations = data[username].conversations\n const paramUrlInfo = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n\n // Only proceed if URL is valid and not already opened\n if (!paramUrlInfo.hasValidUrl || urlOpened) {\n return\n }\n\n // Check if the openParamUrlType is set to 'answered'\n if (paramUrlInfo.openParamUrlType === 'answered') {\n // Check if there are any conversations\n if (conversations && Object.keys(conversations).length > 0) {\n // Get the first conversation (usually there's only one active call)\n const convId = Object.keys(conversations)[0]\n const conv = conversations[convId]\n const { default_device } = store.getState().currentUser\n const automatic = !(uaType === 'desktop' && default_device?.type === 'nethlink')\n\n // Check conditions: must be connected and incoming\n if (conv?.connected && conv?.direction === 'in') {\n const onlyQueues = paramUrlInfo.onlyQueues || false\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n // Check queue conditions based on preferences\n if (onlyQueues === true && conv?.throughQueue === true) {\n // Open URL only for queue calls when onlyQueues is true\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n } else if (\n onlyQueues === false &&\n (calculatedThroughTrunk === true || conv?.throughQueue === true)\n ) {\n // Open URL for both trunk and queue calls when onlyQueues is false\n openParameterizedUrl(\n conv.counterpartNum,\n conv.counterpartName,\n conv.owner,\n conv.uniqueId,\n automatic\n )\n }\n }\n }\n }\n }\n })\n\n return (\n <>\n <Provider store={store}>\n {SIP_EXTEN && SIP_EXTEN.trim() !== '' ? (\n // Full stack with WebRTC when SIP extension is provided\n <WebRTC\n hostName={HOST_NAME}\n sipExten={SIP_EXTEN}\n sipSecret={SIP_SECRET}\n sipHost={SIP_HOST}\n sipPort={SIP_PORT}\n reload={reload}\n reloadedCallback={() => setReloadedWebRTC(true)}\n uaType={uaType}\n >\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => setReloadedSocket(true)}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n ) : (\n // Minimal stack without WebRTC when no SIP extension\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket\n hostName={HOST_NAME}\n username={USERNAME}\n authToken={AUTH_TOKEN}\n reload={reload}\n reloadedCallback={() => {\n setReloadedSocket(true)\n setReloadedWebRTC(true)\n }}\n uaType={uaType}\n >\n <Events sipHost={SIP_HOST}>\n <Island showAlways={showAlways} uaType={uaType} />\n </Events>\n </Socket>\n </RestAPI>\n )}\n </Provider>\n </>\n )\n})\n\nPhoneIslandComponent.displayName = 'PhoneIslandComponent'\n\nexport const PhoneIsland = forwardRef<PhoneIslandRef, PhoneIslandProps>(\n (props, ref) => <PhoneIslandComponent {...props} ref={ref} />,\n)\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["window","location","hostname","includes","originalFetch_1","fetch","input","init","__assign","credentials","PhoneIslandComponent","forwardRef","_a","ref","dataConfig","_b","showAlways","uaType","_c","urlParamWithEvent","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","lastReloadTime","useRef","activeTranscriptionUniqueIdRef","activeTranscriptionLinkedIdRef","useImperativeHandle","reset","console","info","useEffect","lastActiveTime","Date","now","handleVisibilityChange","document","hidden","timeSinceLastActive","setTimeout","eventDispatch","worker","Worker","wakeUpWorker","type","onmessage","event","data","addEventListener","terminate","removeEventListener","store","dispatch","island","setForceReload","failsafe","warn","clearTimeout","checkInterval","setInterval","getState","alerts","isWebRTCDown","webrtc_down","active","isSocketDown","socket_down","timeSinceLastReload","current","sipcall","webrtc","currentCall","accepted","outgoing","iceState","webrtcStuff","pc","iceConnectionState","hasActiveCall","isOnline","navigator","onLine","Math","round","clearInterval","useEventListener","toggleIsOpen","setIslandView","view","player","emergencyStopAudioPlayer","log","detach","updateWebRTC","registered","isDetached","jsepGlobal","updateRemoteAudioStream","updateLocalAudioStream","updateLocalVideoStream","updateRemoteVideoStream","force","__awaiter","targetDeviceId","deviceId","isAudioInputDeviceAvailable","sent","getDefaultAudioInputDevice","setJSONItem","concat","isVideoInputDeviceAvailable","getDefaultVideoInputDevice","_g","firstRender","setFirstRender","_h","firstAudioOutputInit","setFirstAudioOutputInit","_j","paramUrlInitialized","setParamUrlInitialized","fetchReady","useSyncExternalStore","subscribe","fetchDefaults","initI18n","getParamUrl","paramUrlResponse","url","isValid","trim","paramUrl","setParamUrl","onlyQueues","only_queues","hasValidUrl","error_1","mediaDevices","enumerateDevices","devices","filter","device","kind","some","err_3","audioInputDevices","defaultDevice","find","err_4","err_5","videoInputDevices","err_6","remoteAudioElement","remoteAudio","err_1","audioOutputDevices","err_2","setSinkId","err_7","audioContext_1","AudioContext","webkitAudioContext","oscillator_1","createOscillator","gainNode","createGain","frequency","setValueAtTime","currentTime","gain","connect","destination","createMediaStreamDestination","srcObject","stream","start","stop","close","error","finalErr_1","defaultErr_2","streamErr_1","defaultErr_1","changeOperatorStatus","viewType","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setAlert","toString","ringtoneList","ringtones","availableRingtones","map","r","name","displayName","base64Audio","value","setSelectedRingtone","setOutputDeviceId","savedRingtone","savedOutputDevice","checkInternetConnection","then","internetIsActive","intervalId","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","openParameterizedUrl","callerNum","callerName","called","uniqueId","automatic","paramUrlInfo","urlOpened","openParamUrlType","processedUrl","replace","encodeURIComponent","formattedUrl","startsWith","newWindow","open","href","setUrlOpened","throughTrunk","isFromTrunk","counterpartNum","setThroughTrunk","default_device","direction","throughQueue","counterpartName","owner","linkedId","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","playerInformation","conferenceInformation","conference","streamingInformation","streaming","paramurl","queueInformation","queue","downloadStoresAsJSON","toggleSideViewVisible","toggleTranscriptionViewVisible","uniqueid","linkedid","incoming","incomingWebRTC","incomingSocket","length","featureCodes","audioTestCode","audio_test","codeToCall","callNumber","newState","transcriptionViewIsVisible","isActive","usersList","conferenceStartedFrom","isUserInConference","Object","values","user","Promise","resolve","checkSummaryCall","dispatchSummaryReady","source","error_2","status","dispatchSummaryNotReady","watchSummaryCall","sideViewIsVisible","actionsExpanded","sizeInformation","updatedSizeInformation","right","top","isBackCallActive","bottomTranscription","sizes","width","height","handleResetIslandStore","toggleConferenceList","activeAlertsCount","previousView","alertsData","alertType","isInCall","conversationId","keys","conversations","conv","connected","calculatedThroughTrunk","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","PhoneIsland","props"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.exports={};var e={get exports(){return exports.exports},set exports(e){exports.exports=e}};exports.__module=e;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
2
  //# sourceMappingURL=index8.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.exports={};var e={get exports(){return exports.exports},set exports(e){exports.exports=e}};exports.__module=e;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
2
  //# sourceMappingURL=index9.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("./AlertView/index.js"),r=require("../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(e);exports.AlertGuard=function(e){var u=e.children,n=e.uaType,l=r.useSelector((function(e){return e.alerts.status})),s=l.activeAlertsCount,o=l.breakActiveAlertsCount,c=r.useSelector((function(e){return e.alerts.data})).call_transfered,d=r.useSelector((function(e){return e.island})).isOpen;return a.default.createElement(a.default.Fragment,null,s>0&&d&&a.default.createElement(t.default,{uaType:n}),0===o&&!c.active&&u)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("./AlertView/index.js"),r=require("../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(e);exports.AlertGuard=function(e){var u=e.children,n=e.uaType,l=r.useSelector(function(e){return e.alerts.status}),s=l.activeAlertsCount,o=l.breakActiveAlertsCount,c=r.useSelector(function(e){return e.alerts.data}).call_transfered,d=r.useSelector(function(e){return e.island}).isOpen;return a.default.createElement(a.default.Fragment,null,s>0&&d&&a.default.createElement(t.default,{uaType:n}),0===o&&!c.active&&u)};
2
2
  //# sourceMappingURL=AlertGuard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AlertGuard.js","sources":["../../src/components/AlertGuard.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, type ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport AlertView from './AlertView'\n\n/**\n * Manages the logic of alerts as connection errors or permissions\n *\n * @param children\n * @returns\n */\n\nexport const AlertGuard: FC<AlertGuard> = ({ children, uaType}) => {\n // Get alert status from alerts store\n const { activeAlertsCount, breakActiveAlertsCount } = useSelector(\n (state: RootState) => state.alerts.status,\n )\n // Get alerts status from alerts store\n const { call_transfered } = useSelector((state: RootState) => state.alerts.data)\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <>\n {activeAlertsCount > 0 && isOpen && <AlertView uaType={uaType}/>}\n {breakActiveAlertsCount === 0 && !call_transfered.active && children}\n </>\n )\n}\n\ninterface AlertGuard {\n children: ReactNode\n uaType?: string\n}\n"],"names":["_a","children","uaType","_b","useSelector","state","alerts","status","activeAlertsCount","breakActiveAlertsCount","call_transfered","data","isOpen","island","React","createElement","Fragment","AlertView","active"],"mappings":"2VAe0C,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAMF,EAAAE,OAErDC,EAAgDC,EAAAA,aACpD,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,MAAM,IADnCC,EAAiBL,EAAAK,kBAAEC,EAAsBN,EAAAM,uBAIzCC,EAAoBN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOK,wBACnEC,EAAWR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,iBAE3D,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGR,EAAoB,GAAKI,GAAUE,EAAC,QAAAC,cAAAE,UAAU,CAAAf,OAAQA,IAC3B,IAA3BO,IAAiCC,EAAgBQ,QAAUjB,EAGlE"}
1
+ {"version":3,"file":"AlertGuard.js","sources":["../../src/components/AlertGuard.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, type ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport AlertView from './AlertView'\n\n/**\n * Manages the logic of alerts as connection errors or permissions\n *\n * @param children\n * @returns\n */\n\nexport const AlertGuard: FC<AlertGuard> = ({ children, uaType}) => {\n // Get alert status from alerts store\n const { activeAlertsCount, breakActiveAlertsCount } = useSelector(\n (state: RootState) => state.alerts.status,\n )\n // Get alerts status from alerts store\n const { call_transfered } = useSelector((state: RootState) => state.alerts.data)\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <>\n {activeAlertsCount > 0 && isOpen && <AlertView uaType={uaType}/>}\n {breakActiveAlertsCount === 0 && !call_transfered.active && children}\n </>\n )\n}\n\ninterface AlertGuard {\n children: ReactNode\n uaType?: string\n}\n"],"names":["_a","children","uaType","_b","useSelector","state","alerts","status","activeAlertsCount","breakActiveAlertsCount","call_transfered","data","isOpen","island","React","createElement","Fragment","AlertView","active"],"mappings":"2VAe0C,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAMF,EAAAE,OAErDC,EAAgDC,EAAAA,YACpD,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,MAAM,GADnCC,EAAiBL,EAAAK,kBAAEC,EAAsBN,EAAAM,uBAIzCC,EAAoBN,EAAAA,YAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOK,uBACnEC,EAAWR,cAAY,SAACC,GAAqB,OAAAA,EAAMQ,gBAE3D,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGR,EAAoB,GAAKI,GAAUE,EAAC,QAAAC,cAAAE,UAAU,CAAAf,OAAQA,IAC3B,IAA3BO,IAAiCC,EAAgBQ,QAAUjB,EAGlE"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),r=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),l=require("../Button.js"),i=require("../../node_modules/i18next/dist/esm/i18next.js"),a=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js");var o=require("../CustomThemedTooltip.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js"),s=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(e);exports.default=function(e){var d=e.uaType,u=n.useSelector((function(e){return e.alerts})).data,p=n.useSelector((function(e){return e.currentUser})).default_device,m=s.useDispatch(),f=Object.values(u).filter((function(e){return e.active})),v=f.length>0?f[f.length-1]:null;return v&&c.default.createElement("div",{className:"pi-relative pi-rounded-md pi-w-full pi-flex"},c.default.createElement("div",{className:"pi-flex pi-items-center"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ".concat("call_transfered"===(null==v?void 0:v.type)?"pi-bg-green-200 dark:pi-bg-green-900":"pi-bg-rose-200 dark:pi-bg-rose-900")},c.default.createElement(t.FontAwesomeIcon,{icon:"call_transfered"===(null==v?void 0:v.type)?r.faCircleCheck:r.faCircleXmark,className:"pi-h-5 pi-w-10 ".concat("call_transfered"===(null==v?void 0:v.type)?"pi-text-green-700 dark:pi-text-green-200":"pi-text-rose-700 dark:pi-text-rose-200"),"aria-hidden":"true"})),c.default.createElement("div",{className:"ml-3"},c.default.createElement("h3",{className:"pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property"},i.t("Errors.".concat(null==v?void 0:v.type))),c.default.createElement("div",{className:"pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5"},i.t("Errors.".concat(null==v?void 0:v.message))))),c.default.createElement(l.Button,{variant:"transparent",onClick:function(){"nethlink"===(null==p?void 0:p.type)&&"mobile"===d&&"call_transfered"!==(null==v?void 0:v.type)?window.location.reload():"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?a.eventDispatch("phone-island-reload-component",{force:!0}):(m.alerts.removeAllAlerts(),a.eventDispatch("phone-island-all-alerts-removed",{}))},className:"pi-absolute pi--right-6 pi-transform pi--translate-y-1/2","data-tooltip-id":"tooltip-close-alert","data-tooltip-content":"nethlink"===(null==p?void 0:p.type)&&"mobile"===d&&"call_transfered"!==(null==v?void 0:v.type)||"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?"".concat(i.t("Tooltip.Reload")):"".concat(i.t("Tooltip.Close alert"))},c.default.createElement(t.FontAwesomeIcon,{icon:"nethlink"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)||"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?r.faArrowRotateRight:r.faTimes,className:"pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4"})),c.default.createElement(o.CustomThemedTooltip,{id:"tooltip-close-alert",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),r=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),l=require("../Button.js"),i=require("../../node_modules/i18next/dist/esm/i18next.js"),a=require("../../utils/genericFunctions/eventDispatch.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js");var o=require("../CustomThemedTooltip.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js"),s=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=d(e);exports.default=function(e){var d=e.uaType,u=n.useSelector(function(e){return e.alerts}).data,p=n.useSelector(function(e){return e.currentUser}).default_device,m=s.useDispatch(),f=Object.values(u).filter(function(e){return e.active}),v=f.length>0?f[f.length-1]:null;return v&&c.default.createElement("div",{className:"pi-relative pi-rounded-md pi-w-full pi-flex"},c.default.createElement("div",{className:"pi-flex pi-items-center"},c.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ".concat("call_transfered"===(null==v?void 0:v.type)?"pi-bg-green-200 dark:pi-bg-green-900":"pi-bg-rose-200 dark:pi-bg-rose-900")},c.default.createElement(t.FontAwesomeIcon,{icon:"call_transfered"===(null==v?void 0:v.type)?r.faCircleCheck:r.faCircleXmark,className:"pi-h-5 pi-w-10 ".concat("call_transfered"===(null==v?void 0:v.type)?"pi-text-green-700 dark:pi-text-green-200":"pi-text-rose-700 dark:pi-text-rose-200"),"aria-hidden":"true"})),c.default.createElement("div",{className:"ml-3"},c.default.createElement("h3",{className:"pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property"},i.t("Errors.".concat(null==v?void 0:v.type))),c.default.createElement("div",{className:"pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5"},i.t("Errors.".concat(null==v?void 0:v.message))))),c.default.createElement(l.Button,{variant:"transparent",onClick:function(){"nethlink"===(null==p?void 0:p.type)&&"mobile"===d&&"call_transfered"!==(null==v?void 0:v.type)?window.location.reload():"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?a.eventDispatch("phone-island-reload-component",{force:!0}):(m.alerts.removeAllAlerts(),a.eventDispatch("phone-island-all-alerts-removed",{}))},className:"pi-absolute pi--right-6 pi-transform pi--translate-y-1/2","data-tooltip-id":"tooltip-close-alert","data-tooltip-content":"nethlink"===(null==p?void 0:p.type)&&"mobile"===d&&"call_transfered"!==(null==v?void 0:v.type)||"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?"".concat(i.t("Tooltip.Reload")):"".concat(i.t("Tooltip.Close alert"))},c.default.createElement(t.FontAwesomeIcon,{icon:"nethlink"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)||"webrtc"===(null==p?void 0:p.type)&&"call_transfered"!==(null==v?void 0:v.type)?r.faArrowRotateRight:r.faTimes,className:"pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4"})),c.default.createElement(o.CustomThemedTooltip,{id:"tooltip-close-alert",place:"left"}))};
2
2
  //# sourceMappingURL=index.js.map