@nethesis/phone-island 0.11.1 → 0.12.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 (66) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/CallView/Actions.js.map +1 -1
  4. package/dist/components/CallView/BackCall.js +1 -1
  5. package/dist/components/CallView/BackCall.js.map +1 -1
  6. package/dist/components/Dropdown.js +2 -0
  7. package/dist/components/Dropdown.js.map +1 -0
  8. package/dist/components/Island.js +1 -1
  9. package/dist/components/Island.js.map +1 -1
  10. package/dist/components/IslandMotion.js +1 -1
  11. package/dist/components/IslandMotion.js.map +1 -1
  12. package/dist/components/SettingsView/AudioView.js +1 -1
  13. package/dist/components/SettingsView/AudioView.js.map +1 -1
  14. package/dist/components/SettingsView/MicrophoneView.js +1 -1
  15. package/dist/components/SettingsView/MicrophoneView.js.map +1 -1
  16. package/dist/components/SettingsView/VideoInputView.js +1 -1
  17. package/dist/components/SettingsView/VideoInputView.js.map +1 -1
  18. package/dist/components/SideView/SideView.js +1 -1
  19. package/dist/components/SideView/SideView.js.map +1 -1
  20. package/dist/components/Socket.js +1 -1
  21. package/dist/components/Socket.js.map +1 -1
  22. package/dist/components/VideoView/index.js +1 -1
  23. package/dist/components/VideoView/index.js.map +1 -1
  24. package/dist/components/WebRTC.js +1 -1
  25. package/dist/components/WebRTC.js.map +1 -1
  26. package/dist/events/SocketEvents.js.map +1 -1
  27. package/dist/index.css +1 -1
  28. package/dist/lib/avatars/avatars.js +1 -1
  29. package/dist/lib/avatars/avatars.js.map +1 -1
  30. package/dist/lib/devices/devices.js +1 -1
  31. package/dist/lib/devices/devices.js.map +1 -1
  32. package/dist/lib/webrtc/messages.js +1 -1
  33. package/dist/lib/webrtc/messages.js.map +1 -1
  34. package/dist/models/currentCall.js +1 -1
  35. package/dist/models/currentCall.js.map +1 -1
  36. package/dist/models/index.js +1 -1
  37. package/dist/models/index.js.map +1 -1
  38. package/dist/models/island.js +1 -1
  39. package/dist/models/island.js.map +1 -1
  40. package/dist/models/mediaDevices.js +2 -0
  41. package/dist/models/mediaDevices.js.map +1 -0
  42. package/dist/models/motions.js +1 -1
  43. package/dist/models/motions.js.map +1 -1
  44. package/dist/models/player.js +1 -1
  45. package/dist/models/player.js.map +1 -1
  46. package/dist/models/screenShare.js +2 -0
  47. package/dist/models/screenShare.js.map +1 -0
  48. package/dist/models/webrtc.js +1 -1
  49. package/dist/models/webrtc.js.map +1 -1
  50. package/dist/models/websocket.js +2 -0
  51. package/dist/models/websocket.js.map +1 -0
  52. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +1 -1
  53. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -1
  54. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js +1 -1
  55. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js.map +1 -1
  56. package/dist/node_modules/@rematch/select/dist/select.esm.js +2 -0
  57. package/dist/node_modules/@rematch/select/dist/select.esm.js.map +1 -0
  58. package/dist/node_modules/reselect/es/defaultMemoize.js +2 -0
  59. package/dist/node_modules/reselect/es/defaultMemoize.js.map +1 -0
  60. package/dist/node_modules/reselect/es/index.js +2 -0
  61. package/dist/node_modules/reselect/es/index.js.map +1 -0
  62. package/dist/public/locales/en/translation.json.js +1 -1
  63. package/dist/public/locales/it/translation.json.js +1 -1
  64. package/dist/store/index.js +1 -1
  65. package/dist/store/index.js.map +1 -1
  66. package/package.json +2 -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"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),d=require("./utils/genericFunctions/eventDispatch.js"),c=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var u=require("./store/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");var l=require("./node_modules/js-base64/base64.mjs.js"),p=require("./workers/wake_up.js"),h=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var v=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),m=require("./services/user.js"),g=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),j=require("./node_modules/react-redux/es/components/Provider.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var b=w(n),q=function(w){var q=w.dataConfig,D=w.showAlways,L=void 0!==D&&D,S=w.uaType,y=l.Base64.atob(q||"").split(":"),k=y[0],x=y[1],_=y[2],C=y[3],P=y[4],T=y[5],V=y[6],A=n.useState(!1),O=A[0],N=A[1],U=n.useState(!1),z=U[0],F=U[1],J=n.useState(!1),R=J[0],W=J[1];n.useEffect((function(){var e=new Worker(p.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&N(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){R&&z&&(N(!1),F(!1),W(!1))}),[R,z]),r.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),d.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),d.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){v.detach(),d.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){c.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){c.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-video-input-changed",{})})),r.useEventListener("phone-island-audio-output-change",(function(e){var n=u.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),c.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),r.useEventListener("phone-island-presence-change",(function(e){m.changeOperatorStatus(e),d.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;u.store.dispatch.island.setIslandView(n)}));var B=n.useState(!0),H=B[0],M=B[1],G=n.useState(!0),K=G[0],Q=G[1];n.useEffect((function(){H&&(h.initI18n(),M(!1))}),[H]);var X=u.store.getState().player.remoteAudio;return n.useEffect((function(){var e;if(K&&X){var n=null===(e=c.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;d.eventDispatch("phone-island-audio-output-change",{deviceId:n}),Q(!1)}}),[K,X]),n.useEffect((function(){f.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){f.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),d.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){u.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=u.store.getState().currentUser)||void 0===n?void 0:n.username,a=u.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!g.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var c=null===(s=e[o])||void 0===s?void 0:s.mainPresence;u.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===c&&"online"!==r&&d.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=u.store.getState().currentCall;console.log("Call status debug informations: ",e)})),r.useEventListener("phone-island-user-status",(function(){var e=u.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=u.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=u.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=u.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=u.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){u.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){u.store.dispatch.island.toggleSideViewVisible(!0),d.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){u.store.dispatch.island.toggleSideViewVisible(!1),d.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=u.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});d.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){d.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),d.eventDispatch("phone-island-sideview-close",{})})),b.default.createElement(b.default.Fragment,null,b.default.createElement(j.default,{store:u.store},b.default.createElement(i.WebRTC,{hostName:k,sipExten:C,sipSecret:P,sipHost:T,sipPort:V,reload:O,reloadedCallback:function(){return F(!0)},uaType:S},b.default.createElement(a.RestAPI,{hostName:k,username:x,authToken:_},b.default.createElement(s.Socket,{hostName:k,username:x,authToken:_,reload:O,reloadedCallback:function(){return W(!0)},uaType:S},b.default.createElement(t.Events,{sipHost:T},b.default.createElement(o.Island,{showAlways:L})))))))};q.displayName="PhoneIsland",exports.PhoneIsland=q;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./node_modules/tslib/tslib.es6.js"),n=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),i=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),r=require("./utils/customHooks/useEventListener.js"),d=require("./utils/genericFunctions/eventDispatch.js"),c=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var u=require("./store/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");var l=require("./node_modules/js-base64/base64.mjs.js"),p=require("./workers/wake_up.js"),h=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var v=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),m=require("./services/user.js"),g=require("./utils/genericFunctions/isEmpty.js"),E=require("./utils/genericFunctions/checkConnection.js"),I=require("./utils/genericFunctions/isBackCallVisible.js"),j=require("./node_modules/react-redux/es/components/Provider.js");function S(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("./node_modules/react-redux/node_modules/react-is/index.js"),require("./node_modules/react-redux/es/components/Context.js");var b=S(n),w=function(S){var w=S.dataConfig,L=S.showAlways,q=void 0!==L&&L,D=S.uaType,y=l.Base64.atob(w||"").split(":"),k=y[0],x=y[1],_=y[2],C=y[3],P=y[4],T=y[5],V=y[6],A=n.useState(!1),O=A[0],N=A[1],U=n.useState(!1),z=U[0],F=U[1],J=n.useState(!1),R=J[0],W=J[1];n.useEffect((function(){var e=new Worker(p.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&N(!0)},function(){e.terminate()}}),[]),n.useEffect((function(){R&&z&&(N(!1),F(!1),W(!1))}),[R,z]),r.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),d.eventDispatch("phone-island-expanded",{})})),r.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),d.eventDispatch("phone-island-compressed",{})})),r.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-keypad-closed",{})})),r.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),d.eventDispatch("phone-island-call-transfer-closed",{})})),r.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-recording-closed",{})})),r.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),d.eventDispatch("phone-island-audio-player-closed",{})})),r.useEventListener("phone-island-detach",(function(e){v.detach(),d.eventDispatch("phone-island-detached",{})})),r.useEventListener("phone-island-audio-input-change",(function(e){c.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-audio-input-changed",{})})),r.useEventListener("phone-island-video-input-change",(function(e){c.setJSONItem("phone-island-video-input-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-video-input-changed",{})})),r.useEventListener("phone-island-audio-output-change",(function(e){var n=u.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),c.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),d.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),r.useEventListener("phone-island-presence-change",(function(e){m.changeOperatorStatus(e),d.eventDispatch("phone-island-presence-changed",{})})),r.useEventListener("phone-island-view-changed",(function(e){var n=null==e?void 0:e.viewType;u.store.dispatch.island.setIslandView(n)}));var B=n.useState(!0),H=B[0],M=B[1],G=n.useState(!0),K=G[0],Q=G[1];n.useEffect((function(){H&&(h.initI18n(),M(!1))}),[H]);var X=u.store.getState().player.remoteAudio;return n.useEffect((function(){var e;if(K&&X){var n=null===(e=c.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;d.eventDispatch("phone-island-audio-output-change",{deviceId:n}),Q(!1)}}),[K,X]),n.useEffect((function(){f.checkDarkTheme()}),[]),r.useEventListener("phone-island-theme-change",(function(e){f.setTheme(null==e?void 0:e.selectedTheme)})),r.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),d.eventDispatch("phone-island-default-device-changed",{})})),r.useEventListener("phone-island-alert",(function(e){u.store.dispatch.alerts.setAlert(e.toString())})),r.useEventListener("phone-island-check-connection",(function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.eventDispatch("phone-island-internet-disconnected",{})}))})),n.useEffect((function(){var e=setInterval((function(){E.checkInternetConnection().then((function(e){e?d.eventDispatch("phone-island-internet-connected",{}):d.eventDispatch("phone-island-internet-disconnected",{})}))}),5e3);return function(){return clearInterval(e)}}),[]),r.useEventListener("phone-island-main-presence",(function(e){var n,t,s,i,o=null===(n=u.store.getState().currentUser)||void 0===n?void 0:n.username,a=u.store.getState().currentUser,r=null==a?void 0:a.mainPresence;if(void 0!==o&&""!==o&&!g.isEmpty(e[o])&&void 0!==(null===(t=e[o])||void 0===t?void 0:t.mainPresence)){var c=null===(s=e[o])||void 0===s?void 0:s.mainPresence;u.store.dispatch.currentUser.updateMainPresence(null===(i=e[o])||void 0===i?void 0:i.mainPresence),"online"===c&&"online"!==r&&d.eventDispatch("phone-island-call-ended",{})}})),r.useEventListener("phone-island-call-status",(function(){var e=u.store.getState().currentCall;console.log("Call status debug informations: ",e)})),r.useEventListener("phone-island-user-status",(function(){var e=u.store.getState().currentUser;console.log("User status debug informations: ",e)})),r.useEventListener("phone-island-all-users-status",(function(){var e=u.store.getState().users;console.log("Users status debug informations: ",e)})),r.useEventListener("phone-island-status",(function(){var e=u.store.getState().island;console.log("Phone island status debug informations: ",e)})),r.useEventListener("phone-island-webrtc-status",(function(){var e=u.store.getState().webrtc;console.log("Webrtc status debug informations: ",e)})),r.useEventListener("phone-island-player-status",(function(){var e=u.store.getState().player;console.log("Player status debug informations: ",e)})),r.useEventListener("phone-island-screen-share-status",(function(){var e=u.store.getState().screenShare;console.log("Screen share status debug information: ",e)})),r.useEventListener("phone-island-player-force-stop",(function(){u.store.dispatch.player.reset(),console.log("Audio player is interrupted")})),r.useEventListener("phone-island-sideview-open",(function(){u.store.dispatch.island.toggleSideViewVisible(!0),d.eventDispatch("phone-island-sideview-opened",{})})),r.useEventListener("phone-island-sideview-close",(function(){u.store.dispatch.island.toggleSideViewVisible(!1),d.eventDispatch("phone-island-sideview-closed",{})})),r.useEventListener("phone-island-size-change",(function(n){var t=u.store.getState().island.sideViewIsVisible,s=n.sizeInformation,i=e.__assign(e.__assign({},s),{right:t?"42px":"0px",top:I.isBackCallActive()?"40px":"0px"});d.eventDispatch("phone-island-size-changed",{sizes:i})})),r.useEventListener("phone-island-call-ended",(function(){d.eventDispatch("phone-island-size-change",{sizeInformation:{width:"0px",height:"0px"}}),d.eventDispatch("phone-island-sideview-close",{}),u.store.dispatch.island.resetIslandStore()})),b.default.createElement(b.default.Fragment,null,b.default.createElement(j.default,{store:u.store},b.default.createElement(i.WebRTC,{hostName:k,sipExten:C,sipSecret:P,sipHost:T,sipPort:V,reload:O,reloadedCallback:function(){return F(!0)},uaType:D},b.default.createElement(a.RestAPI,{hostName:k,username:x,authToken:_},b.default.createElement(s.Socket,{hostName:k,username:x,authToken:_,reload:O,reloadedCallback:function(){return W(!0)},uaType:D},b.default.createElement(t.Events,{sipHost:T},b.default.createElement(o.Island,{showAlways:q})))))))};w.displayName="PhoneIsland",exports.PhoneIsland=w;
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, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\nimport { JanusTrack } from './types/webrtc'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\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 useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\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-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\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 [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n initI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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', { deviceId: defaultAudioOutputDevice })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // 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 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-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\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-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\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 sizeInformation: any = {\n width: '0px',\n height: '0px',\n }\n eventDispatch('phone-island-size-change', { sizeInformation })\n eventDispatch('phone-island-sideview-close', {})\n })\n\n return (\n <>\n <Provider store={store}>\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} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","viewType","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\nimport wakeUpWorker from './workers/wake_up'\nimport { initI18n } from './lib/i18n'\n\nimport 'react-tooltip/dist/react-tooltip.css'\nimport { useEventListener, eventDispatch, setJSONItem, getJSONItem } from './utils'\nimport { detach } from './lib/webrtc/messages'\nimport { checkDarkTheme, setTheme } from './lib/darkTheme'\nimport { changeOperatorStatus } from './services/user'\nimport { isEmpty } from './utils/genericFunctions/isEmpty'\nimport { checkInternetConnection } from './utils/genericFunctions/checkConnection'\nimport { isBackCallActive } from './utils/genericFunctions/isBackCallVisible'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n showAlways = false,\n uaType,\n}: PhoneIslandProps) => {\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 useEffect(() => {\n const worker = new Worker(wakeUpWorker, { type: 'module' })\n worker.onmessage = (event: MessageEvent<string>) => {\n // Handle wakeup message\n if (event.data === 'wakeup') {\n setReload(true)\n }\n }\n\n return () => {\n worker.terminate()\n }\n }, [])\n\n useEffect(() => {\n if (reloadedSocket && reloadedWebRTC) {\n setReload(false)\n setReloadedWebRTC(false)\n setReloadedSocket(false)\n }\n }, [reloadedSocket, reloadedWebRTC])\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-detach', (data) => {\n detach()\n eventDispatch('phone-island-detached', {})\n })\n\n useEventListener('phone-island-audio-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-audio-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-audio-input-changed', {})\n })\n\n useEventListener('phone-island-video-input-change', (data: DeviceInputOutputTypes) => {\n setJSONItem('phone-island-video-input-device', { deviceId: data.deviceId })\n eventDispatch('phone-island-video-input-changed', {})\n })\n\n useEventListener('phone-island-audio-output-change', (data: DeviceInputOutputTypes) => {\n const remoteAudioElement: any = store.getState().player.remoteAudio\n // set audio output\n remoteAudioElement?.current\n .setSinkId(data.deviceId)\n .then(function () {\n console.info('Default audio output device change with success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: data.deviceId })\n\n // dispatch event\n eventDispatch('phone-island-audio-output-changed', {})\n })\n .catch(function (err) {\n console.error('Default audio output device change error:', err)\n })\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 [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n initI18n()\n setFirstRenderI18n(false)\n }\n }, [firstRenderI18n])\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', { deviceId: defaultAudioOutputDevice })\n setFirstAudioOutputInit(false)\n }\n }, [firstAudioOutputInit, remoteAudioElement])\n\n useEffect(() => {\n checkDarkTheme()\n }, [])\n\n useEventListener('phone-island-theme-change', (theme: any) => {\n setTheme(theme?.selectedTheme)\n })\n\n useEventListener('phone-island-default-device-change', (data) => {\n store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\n eventDispatch('phone-island-default-device-changed', {})\n })\n\n useEventListener('phone-island-alert', (alertType: any) => {\n store.dispatch.alerts.setAlert(alertType.toString())\n })\n\n // 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 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-screen-share-status', () => {\n const screenShareInformation = store.getState().screenShare\n console.log('Screen share status debug information: ', screenShareInformation)\n })\n\n useEventListener('phone-island-player-force-stop', () => {\n store.dispatch.player.reset()\n console.log('Audio player is interrupted')\n })\n\n useEventListener('phone-island-sideview-open', () => {\n store.dispatch.island.toggleSideViewVisible(true)\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-size-change', (args: any) => {\n const { sideViewIsVisible } = store.getState().island\n\n // Get current dimensions from args\n const { sizeInformation } = args\n\n // // Calculate extra row dimension ( side view and back call )\n const updatedSizeInformation = {\n ...sizeInformation,\n right: sideViewIsVisible ? '42px' : '0px',\n top: isBackCallActive() ? '40px' : '0px',\n }\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 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.resetIslandStore()\n })\n\n return (\n <>\n <Provider store={store}>\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} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_c","useState","reload","setReload","_d","reloadedWebRTC","setReloadedWebRTC","_e","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","viewType","_f","firstRenderI18n","setFirstRenderI18n","_g","firstAudioOutputInit","setFirstAudioOutputInit","initI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","currentUser","updateCurrentDefaultDevice","deviceInformationObject","alertType","alerts","setAlert","toString","checkInternetConnection","internetIsActive","intervalId","setInterval","clearInterval","currentUsernameInformation","username","currentUserObject","mainPresenceValueBeforeUpdate","mainPresence","undefined","isEmpty","newMainPresenceValue","updateMainPresence","callInformation","currentCall","log","userInformation","allUsersInformation","users","phoneIslandInformation","webrtcInformation","webrtc","playerInformation","screenShareInformation","screenShare","reset","toggleSideViewVisible","args","sideViewIsVisible","sizeInformation","updatedSizeInformation","__assign","right","top","isBackCallActive","sizes","width","height","resetIslandStore","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","authToken","Socket","Events","Island","displayName"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faArrowDownUpAcrossLine,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n faArrowRightArrowLeft,\n faUserPlus,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faClose, faGridRound, faOpen } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport TransferButton from '../TransferButton'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted, isRecording } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded, sideViewIsVisible, isConferenceList } = useSelector(\n (state: RootState) => state.island,\n )\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-keypad-opened', {})\n }\n useEventListener('phone-island-call-keypad-open', () => {\n openKeypad()\n })\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-transfer-opened', {})\n }\n\n useEventListener('phone-island-call-transfer-open', () => {\n transfer()\n })\n useEventListener('phone-island-call-transfer-cancel', () => {\n cancelTransfer()\n })\n\n // Cancels the current transfer through dtmfs\n function cancelTransfer() {\n if (isWebRTC()) {\n sendDTMF('*')\n } else {\n sendPhysicalDTMF('*')\n }\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n if (isWebRTC()) {\n sendDTMF('1')\n } else {\n sendPhysicalDTMF('1')\n }\n\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }\n\n useEventListener('phone-island-call-actions-open', () => {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n })\n useEventListener('phone-island-call-actions-close', () => {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n })\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n eventDispatch('phone-island-sideview-close', {})\n } else {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n }\n }\n\n const addUserConference = () => {\n // Update island store and set conference list view to true\n dispatch.island.toggleConferenceList(isConferenceList ? false : true)\n // Set the island view to transfer list\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-conference-list-opened', {})\n }\n\n const { t } = useTranslation()\n // Phone island header section\n return (\n <>\n <div\n className={`${\n !intrudeListenStatus?.isListen && !intrudeListenStatus?.isIntrude\n ? 'pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : intrudeListenStatus.isIntrude\n ? 'pi-mb-6 pi-grid pi-grid-cols-1 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : 'pi-hidden'\n } `}\n >\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) && (\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip-pause'\n data-tooltip-content={paused ? `${t('Tooltip.Play')}` : `${t('Tooltip.Pause')}`}\n >\n {paused ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPlay} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPause} />\n )}\n </Button>\n )}\n {!intrudeListenStatus?.isListen && (\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip-mute'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophone} />\n )}\n </Button>\n )}\n\n <TransferButton />\n\n {!(intrudeListenStatus.isIntrude || intrudeListenStatus.isListen) && (\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip-expand'\n data-tooltip-content={\n actionsExpanded ? `${t('Tooltip.Collapse')}` : `${t('Tooltip.Expand')}`\n }\n >\n {actionsExpanded ? (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronUp}\n />\n ) : (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronDown}\n />\n )}\n </Button>\n )}\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip-keyboard'\n data-tooltip-content={t('Tooltip.Keyboard') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faGridRound} />\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkCurrentCall}\n data-tooltip-id='tooltip-park'\n data-tooltip-content={t('Tooltip.Park') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faSquareParking} />\n </Button>\n {/* Hidden at the moment waiting for the conference feature to be implemented */}\n {/* <Button\n data-stop-propagation={true}\n disabled={true}\n variant='default'\n onClick={() => addUserConference()}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={t('Tooltip.Conference') || ''}\n >\n <FontAwesomeIcon icon={faUserPlus} className='pi-h-6 pi-w-6' />\n </Button> */}\n <Button\n variant='default'\n onClick={() =>\n sideViewIsVisible\n ? eventDispatch('phone-island-sideview-close', {})\n : eventDispatch('phone-island-sideview-open', {})\n }\n data-tooltip-id='tooltip-sideView'\n data-tooltip-content={t('Tooltip.Other actions') || ''}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={sideViewIsVisible ? faClose : faOpen}\n />\n </Button>\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <CustomThemedTooltip id='tooltip-transfer' place='bottom' />\n <CustomThemedTooltip id='tooltip-pause' place='bottom' />\n <CustomThemedTooltip id='tooltip-mute' place='bottom' />\n <CustomThemedTooltip id='tooltip-expand' place='bottom' />\n <CustomThemedTooltip id='tooltip-keyboard' place='bottom' />\n <CustomThemedTooltip id='tooltip-conference' place='bottom' />\n <CustomThemedTooltip id='tooltip-park' place='bottom' />\n <CustomThemedTooltip id='tooltip-sideView' place='left' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","isRecording","parked","_b","island","view","actionsExpanded","sideViewIsVisible","isConferenceList","transferring","intrudeListenStatus","listen","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","useEventListener","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","cancelTransfer","toggleActionsExpanded","t","useTranslation","React","createElement","Fragment","className","concat","isListen","isIntrude","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","TransferButton","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","faClose","faOpen","CustomThemedTooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n parkCurrentCall,\n} from '../../lib/phone/call'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPause,\n faPlay,\n faMicrophone,\n faMicrophoneSlash,\n faSquareParking,\n faChevronDown,\n faChevronUp,\n} from '@fortawesome/free-solid-svg-icons'\nimport { faClose, faGridRound, faOpen } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { useTranslation } from 'react-i18next'\nimport { useEventListener, eventDispatch } from '../../utils'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport TransferButton from '../TransferButton'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { sendPhysicalDTMF } from '../../services/astproxy'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted, isRecording } = useSelector((state: RootState) => state.currentCall)\n const parked = useSelector((state: RootState) => state.currentCall.parked)\n\n // Get isOpen and view from island store\n const { view, actionsExpanded, sideViewIsVisible, isConferenceList } = useSelector(\n (state: RootState) => state.island,\n )\n const transferring = useSelector((state: RootState) => state.currentCall.transferring)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-keypad-opened', {})\n }\n useEventListener('phone-island-call-keypad-open', () => {\n openKeypad()\n })\n\n function transfer() {\n // Open the transfer view\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-transfer-opened', {})\n }\n\n useEventListener('phone-island-call-transfer-open', () => {\n transfer()\n })\n useEventListener('phone-island-call-transfer-cancel', () => {\n cancelTransfer()\n })\n\n // Cancels the current transfer through dtmfs\n function cancelTransfer() {\n if (isWebRTC()) {\n sendDTMF('*')\n } else {\n sendPhysicalDTMF('*')\n }\n\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n if (isWebRTC()) {\n sendDTMF('1')\n } else {\n sendPhysicalDTMF('1')\n }\n\n dispatch.player.stopAudioPlayer()\n // The workarround to disable transfer because of the wrong conv.connection value from ws\n if (transferring) {\n setTimeout(() => {\n dispatch.currentCall.updateTransferring(false)\n }, 500)\n }\n\n eventDispatch('phone-island-call-transfer-canceled', {})\n }, 500)\n }\n\n useEventListener('phone-island-call-actions-open', () => {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n })\n useEventListener('phone-island-call-actions-close', () => {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n })\n function toggleActionsExpanded() {\n if (actionsExpanded) {\n dispatch.island.toggleActionsExpanded(false)\n eventDispatch('phone-island-call-actions-closed', {})\n eventDispatch('phone-island-sideview-close', {})\n } else {\n dispatch.island.toggleActionsExpanded(true)\n eventDispatch('phone-island-call-actions-opened', {})\n }\n }\n\n const addUserConference = () => {\n // Update island store and set conference list view to true\n dispatch.island.toggleConferenceList(isConferenceList ? false : true)\n // Set the island view to transfer list\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n // Check if sideView is visible and close it\n if (sideViewIsVisible) {\n eventDispatch('phone-island-sideview-close', {})\n }\n eventDispatch('phone-island-call-conference-list-opened', {})\n }\n\n const { t } = useTranslation()\n // Phone island header section\n return (\n <>\n <div\n className={`${\n !intrudeListenStatus?.isListen && !intrudeListenStatus?.isIntrude\n ? 'pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : intrudeListenStatus.isIntrude\n ? 'pi-mb-6 pi-grid pi-grid-cols-1 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'\n : 'pi-hidden'\n } `}\n >\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) && (\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n data-tooltip-id='tooltip-pause'\n data-tooltip-content={paused ? `${t('Tooltip.Play')}` : `${t('Tooltip.Pause')}`}\n >\n {paused ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPlay} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faPause} />\n )}\n </Button>\n )}\n {!intrudeListenStatus?.isListen && (\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip-mute'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophone} />\n )}\n </Button>\n )}\n\n <TransferButton />\n\n {!(intrudeListenStatus.isIntrude || intrudeListenStatus.isListen) && (\n <Button\n active={actionsExpanded}\n variant='transparent'\n onClick={() => toggleActionsExpanded()}\n data-tooltip-id='tooltip-expand'\n data-tooltip-content={\n actionsExpanded ? `${t('Tooltip.Collapse')}` : `${t('Tooltip.Expand')}`\n }\n >\n {actionsExpanded ? (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronUp}\n />\n ) : (\n <FontAwesomeIcon\n className='pi-text-gray-700 dark:pi-text-gray-200 pi-h-6 pi-w-6'\n icon={faChevronDown}\n />\n )}\n </Button>\n )}\n </div>\n {/* Actions expanded section */}\n {actionsExpanded ? (\n <>\n {' '}\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n active={view === 'keypad'}\n variant='default'\n onClick={openKeypad}\n data-tooltip-id='tooltip-keyboard'\n data-tooltip-content={t('Tooltip.Keyboard') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faGridRound} />\n </Button>\n <Button\n active={parked}\n variant='default'\n onClick={parkCurrentCall}\n data-tooltip-id='tooltip-park'\n data-tooltip-content={t('Tooltip.Park') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faSquareParking} />\n </Button>\n {/* Hidden at the moment waiting for the conference feature to be implemented */}\n {/* <Button\n data-stop-propagation={true}\n disabled={true}\n variant='default'\n onClick={() => addUserConference()}\n data-tooltip-id='tooltip-conference'\n data-tooltip-content={t('Tooltip.Conference') || ''}\n >\n <FontAwesomeIcon icon={faUserPlus} className='pi-h-6 pi-w-6' />\n </Button> */}\n <Button\n variant='default'\n onClick={() =>\n sideViewIsVisible\n ? eventDispatch('phone-island-sideview-close', {})\n : eventDispatch('phone-island-sideview-open', {})\n }\n data-tooltip-id='tooltip-sideView'\n data-tooltip-content={t('Tooltip.Other actions') || ''}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={sideViewIsVisible ? faClose : faOpen}\n />\n </Button>\n </div>\n </>\n ) : (\n <></>\n )}\n {/* Buttons tooltips */}\n <CustomThemedTooltip id='tooltip-transfer' place='bottom' />\n <CustomThemedTooltip id='tooltip-pause' place='bottom' />\n <CustomThemedTooltip id='tooltip-mute' place='bottom' />\n <CustomThemedTooltip id='tooltip-expand' place='bottom' />\n <CustomThemedTooltip id='tooltip-keyboard' place='bottom' />\n <CustomThemedTooltip id='tooltip-conference' place='bottom' />\n <CustomThemedTooltip id='tooltip-park' place='bottom' />\n <CustomThemedTooltip id='tooltip-sideView' place='left' />\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","isRecording","parked","_b","island","view","actionsExpanded","sideViewIsVisible","isConferenceList","transferring","intrudeListenStatus","listen","dispatch","useDispatch","openKeypad","setIslandView","eventDispatch","useEventListener","isWebRTC","sendDTMF","sendPhysicalDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","updateTransferring","cancelTransfer","toggleActionsExpanded","t","useTranslation","React","createElement","Fragment","className","concat","isListen","isIntrude","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","icon","faPlay","faPause","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophone","TransferButton","faChevronUp","faChevronDown","faGridRound","parkCurrentCall","faSquareParking","faClose","faOpen","CustomThemedTooltip","id","place"],"mappings":"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"}
@@ -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("./Timer.js"),r=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),i=require("../../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js"),n=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(e);exports.default=function(s){var o=s.isVisible,u=a.useSelector((function(e){return e.currentCall})),d=u.number,p=u.displayName,m=u.transferring,c=u.transferringName,f=u.startTime,x=u.transferringStartTime,g=u.transferCalls,y=n.useDispatch(),b=a.useSelector((function(e){return e.island})).isOpen;return e.useEffect((function(){var e=g.find((function(e){return e.number!==d}));e&&y.currentCall.updateCurrentCall({transferringName:e.displayName,transferringStartTime:e.startTime})}),[d]),l.default.createElement(r.AnimatePresence,null,o&&l.default.createElement(i.motion.div,{className:"pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-items-top ".concat(b?"pi-px-6":"pi-px-4"," pi-pt-3"),style:{borderTopLeftRadius:"20px",borderTopRightRadius:"20px",height:"60px"},initial:{y:60},animate:{y:0},exit:{y:60,transitionEnd:{display:"none"}},transition:{duration:.3}},l.default.createElement("div",{className:"pi-font-bold pi-text-sm pi-relative"},l.default.createElement("div",{className:"pi-whitespace-nowrap pi-overflow-hidden ".concat(b?"pi-w-44":"pi-w-16")},m?c:p),l.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700"})),l.default.createElement("div",{className:""},l.default.createElement(t.default,{size:"small",startTime:m?x:f}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("./Timer.js"),t=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var s=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var a=require("../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs.js"),n=require("../../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),o=require("../../node_modules/react-redux/es/hooks/useSelector.js"),l=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);exports.default=function(u){var p=u.isVisible,m=o.useSelector((function(e){return e.currentCall})),c=m.number,f=m.displayName,x=m.transferring,b=m.transferringName,g=m.startTime,h=m.transferringStartTime,j=m.transferCalls,v=l.useDispatch(),y=s.useTranslation().t,q=o.useSelector((function(e){return e.island})),_=q.isOpen,w=q.previousView,E=o.useSelector((function(e){return e.screenShare})),N=E.active,T=E.role;return e.useEffect((function(){var e=j.find((function(e){return e.number!==c}));e&&v.currentCall.updateCurrentCall({transferringName:e.displayName,transferringStartTime:e.startTime})}),[c]),d.default.createElement(a.AnimatePresence,null,p&&d.default.createElement(n.motion.div,{className:"pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-items-start ".concat(_?"pi-px-6":"pi-px-4"," pi-pt-3"),style:{borderTopLeftRadius:"20px",borderTopRightRadius:"20px",height:"60px"},initial:{y:60},animate:{y:0},exit:{y:60,transitionEnd:{display:"none"}},transition:{duration:.3}},d.default.createElement("div",{className:"pi-font-medium pi-text-sm pi-relative"},d.default.createElement("div",{className:"pi-whitespace-nowrap pi-overflow-hidden ".concat(_&&"video"!==w?"pi-w-44":"pi-w-16")},x?b:f),d.default.createElement("div",{className:"pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700"})),d.default.createElement("div",{className:"pi-flex pi-gap-2"},N&&"publisher"===T&&d.default.createElement("div",{className:"pi-flex pi-gap-2 pi-font-medium pi-items-center pi-rounded-full pi-px-2 pi-py-1 pi-text-xs pi-relative -pi-top-0.5 pi-bg-emerald-700 pi-text-emerald-50"},d.default.createElement(i.FontAwesomeIcon,{icon:t.faDisplay,className:"pi-w-4 pi-h-4"}),y("Screen sharing.Sharing")),d.default.createElement("div",{className:"pi-w-16 pi-flex pi-justify-end"},d.default.createElement(r.default,{size:"small",startTime:x?h:g})))))};
2
2
  //# sourceMappingURL=BackCall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-items-top ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.3 }}\n >\n <div className='pi-font-bold pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring ? transferringName : displayName}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700'></div>\n </div>\n <div className=''>\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","isOpen","island","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","Timer","size"],"mappings":"qkBAUoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAWZ,eAAY,SAACC,GAAqB,OAAAA,EAAMY,iBAa3D,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+BN,EAAcO,MAAK,SAACC,GAAS,OAAAA,EAAKd,SAAWA,CAAhB,IAE9DY,GACFL,EAASR,YAAYgB,kBAAkB,CACrCZ,iBAAkBS,EAASX,YAC3BI,sBAAuBO,EAASR,WAGtC,GAAG,CAACJ,IAGFgB,EAAAA,QAACC,cAAAC,EAAeA,gBACb,KAAAvB,GACCqB,EAAC,QAAAC,cAAAE,EAAAA,OAAOC,IACN,CAAAC,UAAW,wIAAAC,OACTb,EAAS,UAAY,UAAS,YAEhCc,MAAO,CAAEC,oBAAqB,OAAQC,qBAAsB,OAAQC,OAAQ,QAC5EC,QAAS,CAAEC,EAAG,IACdC,QAAS,CAAED,EAAG,GACdE,KAAM,CACJF,EAAG,GACHG,cAAe,CACbC,QAAS,SAGbC,WAAY,CAAEC,SAAU,KAExBlB,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,uCACbL,EAAAA,QACEC,cAAA,MAAA,CAAAI,UAAW,2CACTC,OAAAb,EAAS,UAAY,YAGtBP,EAAeC,EAAmBF,GAErCe,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,6GAEjBL,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,IACbL,EAAAA,QAACC,cAAAkB,EAAAA,SAAMC,KAAK,QAAQhC,UAAWF,EAAeG,EAAwBD,MAMlF"}
1
+ {"version":3,"file":"BackCall.js","sources":["../../../src/components/CallView/BackCall.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport Timer from './Timer'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { TransferCallsTypes } from '../../models/currentCall'\nimport { faDisplay } from '@fortawesome/free-solid-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { useTranslation } from 'react-i18next'\n\nconst BackCall: FC<BackCallTypes> = ({ isVisible }) => {\n const {\n number,\n displayName,\n transferring,\n transferringName,\n startTime,\n transferringStartTime,\n transferCalls,\n } = useSelector((state: RootState) => state.currentCall)\n const dispatch = useDispatch<Dispatch>()\n\n const { t } = useTranslation()\n const { isOpen, previousView } = useSelector((state: RootState) => state.island)\n const { active: screenShareActive, role: screenShareRole } = useSelector(\n (state: RootState) => state.screenShare,\n )\n\n useEffect(() => {\n const callData: TransferCallsTypes = transferCalls.find((item) => item.number !== number)\n // Handle call switch during transfer\n if (callData) {\n dispatch.currentCall.updateCurrentCall({\n transferringName: callData.displayName,\n transferringStartTime: callData.startTime,\n })\n }\n }, [number])\n\n return (\n <AnimatePresence>\n {isVisible && (\n <motion.div\n className={`pi-absolute pi-w-full pi-bg-gray-700 pi-flex pi-justify-between pi-text-gray-50 dark:pi-text-gray-50 -pi-mt-10 -pi-z-10 pi-items-start ${\n isOpen ? 'pi-px-6' : 'pi-px-4'\n } pi-pt-3`}\n style={{ borderTopLeftRadius: '20px', borderTopRightRadius: '20px', height: '60px' }}\n initial={{ y: 60 }}\n animate={{ y: 0 }}\n exit={{\n y: 60,\n transitionEnd: {\n display: 'none',\n },\n }}\n transition={{ duration: 0.3 }}\n >\n <div className='pi-font-medium pi-text-sm pi-relative'>\n <div\n className={`pi-whitespace-nowrap pi-overflow-hidden ${\n isOpen && previousView !== 'video' ? 'pi-w-44' : 'pi-w-16'\n }`}\n >\n {transferring ? transferringName : displayName}\n </div>\n <div className='pi-w-6 pi-absolute pi-right-0 pi-top-0 pi-h-full pi-bg-gradient-to-r pi-from-transparent pi-to-gray-700'></div>\n </div>\n <div className='pi-flex pi-gap-2'>\n {/* Screen sharing badge */}\n {screenShareActive && screenShareRole === 'publisher' && (\n <div className='pi-flex pi-gap-2 pi-font-medium pi-items-center pi-rounded-full pi-px-2 pi-py-1 pi-text-xs pi-relative -pi-top-0.5 pi-bg-emerald-700 pi-text-emerald-50'>\n <FontAwesomeIcon icon={faDisplay} className='pi-w-4 pi-h-4' />\n {t('Screen sharing.Sharing')}\n </div>\n )}\n <div className='pi-w-16 pi-flex pi-justify-end'>\n <Timer size='small' startTime={transferring ? transferringStartTime : startTime} />\n </div>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default BackCall\n\ninterface BackCallTypes {\n isVisible: boolean\n}\n"],"names":["_a","isVisible","_b","useSelector","state","currentCall","number","displayName","transferring","transferringName","startTime","transferringStartTime","transferCalls","dispatch","useDispatch","t","useTranslation","_c","island","isOpen","previousView","_d","screenShare","screenShareActive","screenShareRole","useEffect","callData","find","item","updateCurrentCall","React","createElement","AnimatePresence","motion","div","className","concat","style","borderTopLeftRadius","borderTopRightRadius","height","initial","y","animate","exit","transitionEnd","display","transition","duration","FontAwesomeIcon","icon","faDisplay","Timer","size"],"mappings":"0tCAaoC,SAACA,GAAE,IAAAC,EAASD,EAAAC,UACxCC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAMJ,EAAAI,OACNC,EAAWL,EAAAK,YACXC,EAAYN,EAAAM,aACZC,EAAgBP,EAAAO,iBAChBC,EAASR,EAAAQ,UACTC,EAAqBT,EAAAS,sBACrBC,kBAEIC,EAAWC,EAAAA,cAETC,EAAMC,qBACRC,EAA2Bd,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMc,MAAM,IAAvEC,WAAQC,iBACVC,EAAuDlB,EAAAA,aAC3D,SAACC,GAAqB,OAAAA,EAAMkB,WAAW,IADzBC,WAAyBC,SAezC,OAXAC,EAAAA,WAAU,WACR,IAAMC,EAA+Bd,EAAce,MAAK,SAACC,GAAS,OAAAA,EAAKtB,SAAWA,CAAhB,IAE9DoB,GACFb,EAASR,YAAYwB,kBAAkB,CACrCpB,iBAAkBiB,EAASnB,YAC3BI,sBAAuBe,EAAShB,WAGtC,GAAG,CAACJ,IAGFwB,EAAAA,QAACC,cAAAC,EAAeA,gBACb,KAAA/B,GACC6B,EAAC,QAAAC,cAAAE,EAAAA,OAAOC,IACN,CAAAC,UAAW,0IAAAC,OACTjB,EAAS,UAAY,UAAS,YAEhCkB,MAAO,CAAEC,oBAAqB,OAAQC,qBAAsB,OAAQC,OAAQ,QAC5EC,QAAS,CAAEC,EAAG,IACdC,QAAS,CAAED,EAAG,GACdE,KAAM,CACJF,EAAG,GACHG,cAAe,CACbC,QAAS,SAGbC,WAAY,CAAEC,SAAU,KAExBlB,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,yCACbL,EACE,QAAAC,cAAA,MAAA,CAAAI,UAAW,2CAAAC,OACTjB,GAA2B,UAAjBC,EAA2B,UAAY,YAGlDZ,EAAeC,EAAmBF,GAErCuB,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,6GAEjBL,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,oBAEZZ,GAAyC,cAApBC,GACpBM,EAAA,QAAAC,cAAA,MAAA,CAAKI,UAAU,2JACbL,EAAC,QAAAC,cAAAkB,mBAAgBC,KAAMC,YAAWhB,UAAU,kBAC3CpB,EAAE,2BAGPe,EAAAA,QAAKC,cAAA,MAAA,CAAAI,UAAU,kCACbL,EAAAA,QAACC,cAAAqB,EAAAA,QAAM,CAAAC,KAAK,QAAQ3C,UAAWF,EAAeG,EAAwBD,OAOpF"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),r=require("../node_modules/@headlessui/react/dist/components/menu/menu.js"),o=require("../node_modules/@headlessui/react/dist/components/transition/transition.js"),i=require("./CustomThemedTooltip.js"),n=require("./Button.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=l(e);exports.default=function(l){var s=l.items,c=l.buttonTooltip,d=l.buttonTooltipPlace,u=void 0===d?"bottom":d,m=l.buttonContent;return p.default.createElement(p.default.Fragment,null,p.default.createElement(r.Menu,{as:"div",className:"pi-relative","data-stop-propagation":!0,"data-tooltip-id":"tooltip-button","data-tooltip-content":c},p.default.createElement(r.MenuButton,{as:"div","data-stop-propagation":!0},m||p.default.createElement(n.Button,{variant:"default"},p.default.createElement(t.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:a.faEllipsis,"data-stop-propagation":!0}))),p.default.createElement(o.Transition,{as:e.Fragment,enter:"transition ease-out duration-100",enterFrom:"transform opacity-0 scale-95",enterTo:"transform opacity-100 scale-100",leave:"transition ease-in duration-75",leaveFrom:"transform opacity-100 scale-100",leaveTo:"transform opacity-0 scale-95"},p.default.createElement(r.MenuItems,{className:"pi-right-0 pi-bottom-14 pi-max-h-48 pi-z-50 pi-absolute pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 dark:pi-bg-gray-950 pi-bg-gray-50 pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-300 dark:pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25 pi-text-sm","data-stop-propagation":!0},p.default.createElement("div",{"data-stop-propagation":!0},p.default.createElement(p.default.Fragment,null," ",s.map((function(e){return p.default.createElement(r.MenuItem,{key:e.id,disabled:e.disabled},(function(a){var r=a.active,o=a.disabled;return p.default.createElement("div",{className:"pi-flex pi-items-center pi-p-3 ".concat(r?"pi-bg-gray-200 dark:pi-bg-gray-700":""," ").concat(o?"pi-opacity-50 pi-cursor-not-allowed":"pi-cursor-pointer"),onClick:function(){return e.onClick()},"data-stop-propagation":!0},e.icon&&p.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:e.icon,className:"dark:pi-text-gray-100 pi-text-gray-600 pi-mr-2 pi-w-4 pi-h-4"}),p.default.createElement("div",{className:"".concat(r?"dark:pi-text-gray-50 pi-text-gray-900":"dark:pi-text-gray-50 pi-text-gray-700")},e.label))}))}))))))),p.default.createElement(i.CustomThemedTooltip,{id:"tooltip-button",place:u}))};
2
+ //# sourceMappingURL=Dropdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dropdown.js","sources":["../../src/components/Dropdown.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment } from 'react'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faEllipsis, IconDefinition } from '@fortawesome/free-solid-svg-icons'\nimport { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'\nimport { CustomThemedTooltip } from './CustomThemedTooltip'\nimport { Button } from './Button'\n\nconst Dropdown: FC<DropdownProps> = ({\n items,\n buttonTooltip,\n buttonTooltipPlace = 'bottom',\n buttonContent,\n}) => {\n return (\n <>\n <Menu\n as='div'\n className='pi-relative'\n data-stop-propagation={true}\n data-tooltip-id='tooltip-button'\n data-tooltip-content={buttonTooltip}\n >\n <MenuButton as='div' data-stop-propagation={true}>\n {buttonContent || (\n <Button variant='default'>\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={faEllipsis}\n data-stop-propagation={true}\n />\n </Button>\n )}\n </MenuButton>\n\n <Transition\n as={Fragment}\n enter='transition ease-out duration-100'\n enterFrom='transform opacity-0 scale-95'\n enterTo='transform opacity-100 scale-100'\n leave='transition ease-in duration-75'\n leaveFrom='transform opacity-100 scale-100'\n leaveTo='transform opacity-0 scale-95'\n >\n <MenuItems\n className={`pi-right-0 pi-bottom-14 pi-max-h-48 pi-z-50 pi-absolute pi-w-56 pi-origin-top-right pi-rounded-md pi-shadow-lg pi-ring-1 dark:pi-bg-gray-950 pi-bg-gray-50 pi-ring-black pi-ring-opacity-5 pi-focus:outline-none pi-cursor-auto pi-border-gray-300 dark:pi-border-gray-600 pi-border pi-py-2 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25 pi-text-sm`}\n data-stop-propagation={true}\n >\n <div data-stop-propagation={true}>\n <>\n {' '}\n {items.map((item) => (\n <MenuItem key={item.id} disabled={item.disabled}>\n {({ active, disabled }: any) => (\n <div\n className={`pi-flex pi-items-center pi-p-3 ${\n active ? 'pi-bg-gray-200 dark:pi-bg-gray-700' : ''\n } ${\n disabled ? 'pi-opacity-50 pi-cursor-not-allowed' : 'pi-cursor-pointer'\n }`}\n onClick={() => item.onClick()}\n data-stop-propagation={true}\n >\n {item.icon && (\n <FontAwesomeIcon\n size='lg'\n icon={item.icon}\n className={`dark:pi-text-gray-100 pi-text-gray-600 pi-mr-2 pi-w-4 pi-h-4`}\n />\n )}\n <div\n className={`${\n active\n ? 'dark:pi-text-gray-50 pi-text-gray-900'\n : 'dark:pi-text-gray-50 pi-text-gray-700'\n }`}\n >\n {item.label}\n </div>\n </div>\n )}\n </MenuItem>\n ))}\n </>\n </div>\n </MenuItems>\n </Transition>\n </Menu>\n <CustomThemedTooltip id='tooltip-button' place={buttonTooltipPlace} />\n </>\n )\n}\n\ninterface DropdownProps extends ComponentProps<'div'> {\n items: DropdownItem[]\n buttonTooltip?: string | null\n buttonTooltipPlace?: 'bottom' | 'top' | 'right' | 'left' | undefined\n buttonContent?: React.ReactNode\n}\n\ninterface DropdownItem {\n id: string\n label: string\n onClick: () => void\n icon?: IconDefinition\n disabled?: boolean\n}\n\nexport default Dropdown\n"],"names":["_a","items","buttonTooltip","_b","buttonTooltipPlace","buttonContent","React","createElement","Fragment","Menu","as","className","MenuButton","Button","variant","FontAwesomeIcon","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","MenuItems","map","item","MenuItem","key","id","disabled","active","concat","onClick","size","label","CustomThemedTooltip","place"],"mappings":"qjBAUoC,SAACA,GACnC,IAAAC,EAAKD,EAAAC,MACLC,EAAaF,EAAAE,cACbC,EAAAH,EAAAI,mBAAAA,OAAqB,IAAAD,EAAA,SAAQA,EAC7BE,EAAaL,EAAAK,cAEb,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,KAAI,CACHC,GAAG,MACHC,UAAU,cACa,yBAAA,EACP,kBAAA,wCACMT,GAEtBI,EAAA,QAAAC,cAACK,EAAUA,WAAC,CAAAF,GAAG,+BAA6B,GACzCL,GACCC,EAAC,QAAAC,cAAAM,EAAMA,OAAC,CAAAC,QAAQ,WACdR,EAAAA,QAAAC,cAACQ,kBAAe,CACdJ,UAAU,gBACVK,KAAMC,EAAAA,WACiB,yBAAA,MAM/BX,EAAA,QAAAC,cAACW,aAAU,CACTR,GAAIF,WACJW,MAAM,mCACNC,UAAU,+BACVC,QAAQ,kCACRC,MAAM,iCACNC,UAAU,kCACVC,QAAQ,gCAERlB,EAAA,QAAAC,cAACkB,YACC,CAAAd,UAAW,+nBACY,GAEvBL,EAAAA,QAAAC,cAAA,MAAA,CAAA,yBAA4B,GAC1BD,EAAAA,QAAAC,cAAAD,UAAAE,SAAA,KACG,IACAP,EAAMyB,KAAI,SAACC,GAAS,OACnBrB,EAAAA,QAACC,cAAAqB,EAAQA,SAAC,CAAAC,IAAKF,EAAKG,GAAIC,SAAUJ,EAAKI,WACpC,SAAC/B,OAAEgC,EAAMhC,EAAAgC,OAAED,EAAQ/B,EAAA+B,SAAY,OAC9BzB,UACEC,cAAA,MAAA,CAAAI,UAAW,kCAAAsB,OACTD,EAAS,qCAAuC,GAAE,KAAAC,OAElDF,EAAW,sCAAwC,qBAErDG,QAAS,WAAM,OAAAP,EAAKO,oCACG,GAEtBP,EAAKX,MACJV,EAAAA,sBAACS,EAAAA,gBAAe,CACdoB,KAAK,KACLnB,KAAMW,EAAKX,KACXL,UAAW,iEAGfL,EACE,QAAAC,cAAA,MAAA,CAAAI,UAAW,GAAAsB,OACTD,EACI,wCACA,0CAGLL,EAAKS,OAGX,GAEJ,SAMX9B,UAAAC,cAAC8B,EAAAA,oBAAmB,CAACP,GAAG,iBAAiBQ,MAAOlC,IAGtD"}
@@ -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 r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),i=require("./KeypadView/index.js"),l=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),s=require("./SideView/SideView.js"),a=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js"),require("../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/@babel/runtime/helpers/typeof.js"),require("../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../node_modules/react-i18next/dist/es/context.js"),require("../node_modules/@babel/runtime/helpers/slicedToArray.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var o=require("./TransferView/TransferList.js"),d=require("./RecorderView/index.js"),c=require("./IslandMotion.js"),f=require("./IslandDrag.js"),m=require("./Close.js"),p=require("./PhysicalRecorderView/index.js"),j=require("./SettingsView/index.js"),w=require("./VideoView/index.js"),q=require("./SwitchDeviceView/index.js"),h=require("../utils/genericFunctions/isBackCallVisible.js"),y=require("../node_modules/react-redux/es/hooks/useSelector.js"),V=require("../node_modules/react-redux/es/hooks/useDispatch.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=E(e),x=function(E){var x=E.showAlways,v=y.useSelector((function(e){return e.currentCall})),g=v.incoming,_=v.accepted,S=v.outgoing,P=y.useSelector((function(e){return e.island})),R=P.view,I=P.sideViewIsVisible,C=P.avoidToShow,A=y.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,k=y.useSelector((function(e){return e.alerts.status})).activeAlertsCount,D=y.useSelector((function(e){return e.player})).audioPlayerLoop,T=e.useRef(null),L=V.useDispatch(),B=e.useRef(null),F=e.useRef(null),M=e.useRef(null);r.useIsomorphicLayoutEffect((function(){L.player.updatePlayer({audioPlayer:B,localAudio:F,remoteAudio:M})}),[]),e.useEffect((function(){(g||S)&&L.island.setIslandView("call")}),[g,S]),e.useEffect((function(){A&&L.island.setIslandView("physicalPhoneRecorder")}),[R]);var N,G=e.useState(""),K=G[0],z=G[1];return e.useEffect((function(){setTimeout((function(){z(R)}),200)}),[R]),b.default.createElement("div",{ref:T,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(g||S||_||x||k>0||"player"===R||"recorder"===R||"physicalPhoneRecorder"===R)&&!C&&b.default.createElement(b.default.Fragment,null,b.default.createElement(f.IslandDrag,{islandContainerRef:T},b.default.createElement(n.default,{isVisible:h.isBackCallActive()}),b.default.createElement(s.default,{isVisible:I}),b.default.createElement(c.IslandMotion,null,b.default.createElement(u.AlertGuard,null,(N={call:b.default.createElement(t.default,null),keypad:b.default.createElement(i.default,null),transfer:b.default.createElement(o.TransferListView,null),player:b.default.createElement(l.KeypadView,null),recorder:b.default.createElement(d.RecorderView,null),physicalPhoneRecorder:b.default.createElement(p.PhysicalRecorderView,null),settings:b.default.createElement(j.SettingsView,null),video:b.default.createElement(w.VideoView,null),switchDevice:b.default.createElement(q.SwitchDeviceView,null)},K in N?b.default.createElement(a.default,{forView:K},N[K]):b.default.createElement(b.default.Fragment,null)))),b.default.createElement(m.Close,null))),b.default.createElement("div",{className:"pi-hidden"},b.default.createElement("audio",{loop:D,ref:B}),b.default.createElement("audio",{muted:!0,ref:F}),b.default.createElement("audio",{autoPlay:!0,ref:M})))};x.displayName="Island",exports.Island=x;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),t=require("./CallView/index.js"),i=require("./KeypadView/index.js"),l=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),s=require("./SideView/SideView.js"),a=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js"),require("../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../node_modules/@babel/runtime/helpers/typeof.js"),require("../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../node_modules/react-i18next/dist/es/context.js"),require("../node_modules/@babel/runtime/helpers/slicedToArray.js"),require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js");var o=require("./TransferView/TransferList.js"),d=require("./RecorderView/index.js"),c=require("./IslandMotion.js"),f=require("./IslandDrag.js"),m=require("./Close.js"),p=require("./PhysicalRecorderView/index.js"),j=require("./SettingsView/index.js"),w=require("./SwitchDeviceView/index.js"),q=require("../utils/genericFunctions/isBackCallVisible.js"),h=require("./VideoView/index.js"),y=require("../node_modules/react-redux/es/hooks/useSelector.js"),V=require("../node_modules/react-redux/es/hooks/useDispatch.js");function E(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var b=E(e),x=function(E){var x=E.showAlways,v=y.useSelector((function(e){return e.currentCall})),g=v.incoming,_=v.accepted,S=v.outgoing,P=y.useSelector((function(e){return e.island})),R=P.view,I=P.sideViewIsVisible,C=P.avoidToShow,A=y.useSelector((function(e){return{recording:e.physicalRecorder.recording}})).recording,k=y.useSelector((function(e){return e.alerts.status})).activeAlertsCount,D=y.useSelector((function(e){return e.player})).audioPlayerLoop,T=e.useRef(null),L=V.useDispatch(),B=e.useRef(null),F=e.useRef(null),M=e.useRef(null);r.useIsomorphicLayoutEffect((function(){L.player.updatePlayer({audioPlayer:B,localAudio:F,remoteAudio:M})}),[]),e.useEffect((function(){(g||S)&&L.island.setIslandView("call")}),[g,S]),e.useEffect((function(){A&&L.island.setIslandView("physicalPhoneRecorder")}),[R]);var N,G=e.useState(""),K=G[0],z=G[1];return e.useEffect((function(){setTimeout((function(){z(R)}),200)}),[R]),b.default.createElement("div",{ref:T,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(g||S||_||x||k>0||"player"===R||"recorder"===R||"physicalPhoneRecorder"===R)&&!C&&b.default.createElement(b.default.Fragment,null,b.default.createElement(f.IslandDrag,{islandContainerRef:T},b.default.createElement(n.default,{isVisible:q.isBackCallActive()}),b.default.createElement(s.default,{isVisible:I}),b.default.createElement(c.IslandMotion,null,b.default.createElement(u.AlertGuard,null,(N={call:b.default.createElement(t.default,null),keypad:b.default.createElement(i.default,null),transfer:b.default.createElement(o.TransferListView,null),player:b.default.createElement(l.KeypadView,null),recorder:b.default.createElement(d.RecorderView,null),physicalPhoneRecorder:b.default.createElement(p.PhysicalRecorderView,null),settings:b.default.createElement(j.SettingsView,null),video:b.default.createElement(h.VideoView,null),switchDevice:b.default.createElement(w.SwitchDeviceView,null)},K in N?b.default.createElement(a.default,{forView:K},N[K]):b.default.createElement(b.default.Fragment,null)))),b.default.createElement(m.Close,null))),b.default.createElement("div",{className:"pi-hidden"},b.default.createElement("audio",{loop:D,ref:B}),b.default.createElement("audio",{muted:!0,ref:F}),b.default.createElement("audio",{autoPlay:!0,ref:M})))};x.displayName="Island",exports.Island=x;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { VideoView } from './VideoView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const { view, sideViewIsVisible, avoidToShow } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder') &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {(() => {\n const views = {\n call: <CallView />,\n keypad: <KeyboardView />,\n transfer: <TransferListView />,\n player: <AudioPlayerView />,\n recorder: <RecorderView />,\n physicalPhoneRecorder: <PhysicalRecorderView />,\n settings: <SettingsView />,\n video: <VideoView />,\n switchDevice: <SwitchDeviceView />,\n }\n\n return currentView in views ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","avoidToShow","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","views","_d","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","TransferListView","AudioPlayerView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","ViewsTransition","forView","Close","loop","muted","autoPlay","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport SideView from './SideView/SideView'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport { RecorderView } from './RecorderView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\nimport { PhysicalRecorderView } from './PhysicalRecorderView'\nimport { SettingsView } from './SettingsView'\nimport { SwitchDeviceView } from './SwitchDeviceView'\nimport { isBackCallActive } from '../utils/genericFunctions/isBackCallVisible'\nimport VideoView from './VideoView'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const { view, sideViewIsVisible, avoidToShow } = useSelector((state: RootState) => state.island)\n const { recording } = useSelector((state: RootState) => ({\n recording: state.physicalRecorder.recording,\n }))\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n // ...set callview as the current view\n useEffect(() => {\n // Check and switch the view\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n useEffect(() => {\n if (recording) {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n }\n }, [view])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player' ||\n view === 'recorder' ||\n view === 'physicalPhoneRecorder') &&\n !avoidToShow && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={isBackCallActive()} />\n <SideView isVisible={sideViewIsVisible} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {(() => {\n const views = {\n call: <CallView />,\n keypad: <KeyboardView />,\n transfer: <TransferListView />,\n player: <AudioPlayerView />,\n recorder: <RecorderView />,\n physicalPhoneRecorder: <PhysicalRecorderView />,\n settings: <SettingsView />,\n video: <VideoView />,\n switchDevice: <SwitchDeviceView />,\n }\n\n return currentView in views ? (\n <ViewsTransition forView={currentView}>\n {views[currentView as keyof typeof views]}\n </ViewsTransition>\n ) : (\n <></>\n )\n })()}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","_c","island","view","sideViewIsVisible","avoidToShow","recording","physicalRecorder","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","views","_d","useState","currentView","setCurrentView","setTimeout","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","isBackCallActive","SideView","IslandMotions","AlertGuard","call","CallView","keypad","KeyboardView","transfer","TransferListView","AudioPlayerView","recorder","RecorderView","physicalPhoneRecorder","PhysicalRecorderView","settings","SettingsView","video","VideoView","switchDevice","SwitchDeviceView","ViewsTransition","forView","Close","loop","muted","autoPlay","displayName"],"mappings":"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"}
@@ -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 i=require("../utils/genericFunctions/eventDispatch.js"),t=require("../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),h=function(a){var h=a.children,c=d.useSelector((function(e){return e.currentCall})),r=c.incoming,o=c.outgoing,s=c.accepted,l=c.transferring,p=c.incomingWebRTC,g=c.incomingSocket,u=d.useSelector((function(e){return e.listen})).isListen,w=d.useSelector((function(e){return e.island})),x=w.view,f=w.isOpen,v=w.actionsExpanded,m=w.sideViewIsVisible,_=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,b=d.useSelector((function(e){return e.motions})),k=b.variants,y=b.border_radius_collapsed,j=b.border_radius_expanded,E=b.padding_x_collapsed,S=b.padding_y_collapsed,q=b.padding_expanded,D=b.alert_padding_expanded,C=e.useMemo((function(){var e={width:0,height:0,padding:q};switch(x){case"call":f?s&&l?e=v?{width:k.call.expanded.transfer.actionsExpanded.width,height:k.call.expanded.transfer.actionsExpanded.height}:{width:k.call.expanded.transfer.width,height:k.call.expanded.transfer.height}:s&&v?e={width:k.call.expanded.accepted.actionsExpanded.width,height:k.call.expanded.accepted.actionsExpanded.height}:s&&!u?e={width:k.call.expanded.accepted.width,height:k.call.expanded.accepted.height}:s&&u?e={width:k.call.expanded.listening.width,height:k.call.expanded.listening.height}:r?e={width:k.call.expanded.incoming.width,height:k.call.expanded.incoming.height}:o&&(e={width:k.call.expanded.outgoing.width,height:k.call.expanded.outgoing.height}):e={width:k.call.collapsed.width,height:k.call.collapsed.height};break;case"keypad":e=f?{width:k.keypad.expanded.width,height:k.keypad.expanded.height}:{width:k.transfer.collapsed.width,height:k.transfer.collapsed.height};break;case"video":e=f?{width:k.video.expanded.width,height:k.video.expanded.height,padding:0}:{width:k.video.collapsed.width,height:k.video.collapsed.height};break;case"transfer":case"player":case"recorder":case"physicalPhoneRecorder":case"settings":case"conference":e=f?{width:k[x].expanded.width,height:k[x].expanded.height}:{width:k[x].collapsed.width,height:k[x].collapsed.height};break;case"switchDevice":e=f?{width:k.switchDevice.expanded.width,height:k.switchDevice.expanded.height}:{width:k.video.collapsed.width,height:k.video.collapsed.height}}var i=_>0;return{width:"".concat(0===e.width&&i?k.alerts.width:e.width,"px"),height:"".concat(i&&f?k.alerts.height+(0===e.height?2*D:D):e.height,"px"),borderRadius:"".concat(f?j:y,"px"),padding:f?null!=e.padding?e.padding:"".concat(q,"px"):"".concat(E,"px ").concat(S,"px")}}),[x,f,s,l,v,u,r,o,_,k,y,j,E,S,q,D,p,g]);return e.useEffect((function(){var e={};e.width=null==C?void 0:C.width,e.height=null==C?void 0:C.height,i.eventDispatch("phone-island-size-change",{sizeInformation:e})}),[C,x,f,s,l,v,u,r,o,_,k,y,j,E,S,q,D,m,g,p]),n.default.createElement(t.motion.div,{className:"".concat(f?"pi-cursor-grab":"pi-cursor-pointer"," pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow"),animate:C},h)};exports.IslandMotion=h,exports.default=h;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var i=require("../utils/genericFunctions/eventDispatch.js"),t=require("../node_modules/framer-motion/dist/es/render/dom/motion.mjs.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),h=function(a){var h=a.children,c=d.useSelector((function(e){return e.currentCall})),r=c.incoming,o=c.outgoing,s=c.accepted,l=c.transferring,p=c.incomingWebRTC,g=c.incomingSocket,u=d.useSelector((function(e){return e.listen})).isListen,x=d.useSelector((function(e){return e.island})),w=x.view,v=x.isOpen,f=x.actionsExpanded,m=x.sideViewIsVisible,_=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,b=d.useSelector((function(e){return e.motions})),k=b.variants,y=b.border_radius_collapsed,j=b.border_radius_expanded,E=b.padding_x_collapsed,S=b.padding_y_collapsed,q=b.padding_expanded,D=b.alert_padding_expanded,C=e.useMemo((function(){var e={width:0,height:0,padding:q};switch(w){case"call":v?s&&l?e=f?{width:k.call.expanded.transfer.actionsExpanded.width,height:k.call.expanded.transfer.actionsExpanded.height}:{width:k.call.expanded.transfer.width,height:k.call.expanded.transfer.height}:s&&f?e={width:k.call.expanded.accepted.actionsExpanded.width,height:k.call.expanded.accepted.actionsExpanded.height}:s&&!u?e={width:k.call.expanded.accepted.width,height:k.call.expanded.accepted.height}:s&&u?e={width:k.call.expanded.listening.width,height:k.call.expanded.listening.height}:r?e={width:k.call.expanded.incoming.width,height:k.call.expanded.incoming.height}:o&&(e={width:k.call.expanded.outgoing.width,height:k.call.expanded.outgoing.height}):e={width:k.call.collapsed.width,height:k.call.collapsed.height};break;case"keypad":e=v?{width:k.keypad.expanded.width,height:k.keypad.expanded.height}:{width:k.transfer.collapsed.width,height:k.transfer.collapsed.height};break;case"video":e=v?{width:k.video.expanded.width,height:k.video.expanded.height,padding:k.video.expanded.padding}:{width:k.video.collapsed.width,height:k.video.collapsed.height};break;case"transfer":case"player":case"recorder":case"physicalPhoneRecorder":case"settings":case"conference":e=v?{width:k[w].expanded.width,height:k[w].expanded.height}:{width:k[w].collapsed.width,height:k[w].collapsed.height};break;case"switchDevice":e=v?{width:k.switchDevice.expanded.width,height:k.switchDevice.expanded.height}:{width:k.video.collapsed.width,height:k.video.collapsed.height}}var i=_>0;return{width:"".concat(0===e.width&&i?k.alerts.width:e.width,"px"),height:"".concat(i&&v?k.alerts.height+(0===e.height?2*D:D):e.height,"px"),borderRadius:"".concat(v?j:y,"px"),padding:v?null!=e.padding?"".concat(e.padding,"px"):"".concat(q,"px"):"".concat(E,"px ").concat(S,"px")}}),[w,v,s,l,f,u,r,o,_,k,y,j,E,S,q,D,p,g]);return e.useEffect((function(){var e={};e.width=null==C?void 0:C.width,e.height=null==C?void 0:C.height,i.eventDispatch("phone-island-size-change",{sizeInformation:e})}),[C,w,v,s,l,f,u,r,o,_,k,y,j,E,S,q,D,m,g,p]),n.default.createElement(t.motion.div,{className:"".concat(v?"pi-cursor-grab":"pi-cursor-pointer"," pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow"),animate:C},h)};exports.IslandMotion=h,exports.default=h;
2
2
  //# sourceMappingURL=IslandMotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useMemo, useEffect } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\nimport { eventDispatch } from '../utils'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring, incomingWebRTC, incomingSocket } =\n useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded, sideViewIsVisible } = useSelector(\n (state: RootState) => state.island,\n )\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n const motionVariants = useMemo(() => {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n padding: padding_expanded,\n }\n\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && isListen) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n\n case 'keypad':\n size = isOpen\n ? {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n : {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n break\n\n case 'video':\n if (isOpen) {\n size = {\n width: variants.video.expanded.width,\n height: variants.video.expanded.height,\n padding: 0,\n }\n } else {\n size = {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n }\n break\n case 'transfer':\n case 'player':\n case 'recorder':\n case 'physicalPhoneRecorder':\n case 'settings':\n case 'conference':\n size = isOpen\n ? {\n width: variants[view].expanded.width,\n height: variants[view].expanded.height,\n }\n : {\n width: variants[view].collapsed.width,\n height: variants[view].collapsed.height,\n }\n break\n\n case 'switchDevice':\n size = isOpen\n ? {\n width: variants.switchDevice.expanded.width,\n height: variants.switchDevice.expanded.height,\n }\n : {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n // If there is an alert and the island is open put the correct height\n isAlert && isOpen\n ? variants.alerts.height +\n (size.height === 0 ? alert_padding_expanded * 2 : alert_padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? size.padding != undefined\n ? size.padding\n : `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }, [\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n incomingWebRTC,\n incomingSocket,\n ])\n\n useEffect(() => {\n let sizeInformation: any = {}\n sizeInformation.width = motionVariants?.width\n sizeInformation.height = motionVariants?.height\n eventDispatch('phone-island-size-change', {\n sizeInformation,\n })\n }, [\n motionVariants,\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n sideViewIsVisible,\n incomingSocket,\n incomingWebRTC,\n ])\n\n return (\n <motion.div\n className={`${\n isOpen ? 'pi-cursor-grab' : 'pi-cursor-pointer'\n } pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow`}\n animate={motionVariants}\n >\n {children}\n </motion.div>\n )\n}\n\ninterface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n padding?: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","incomingWebRTC","incomingSocket","isListen","listen","_c","island","view","isOpen","actionsExpanded","sideViewIsVisible","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","alert_padding_expanded","motionVariants","useMemo","size","width","height","padding","call","expanded","transfer","listening","collapsed","keypad","video","switchDevice","isAlert","concat","borderRadius","undefined","useEffect","sizeInformation","eventDispatch","React","createElement","motion","div","className","animate"],"mappings":"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"}
1
+ {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useMemo, useEffect } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\nimport { eventDispatch } from '../utils'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring, incomingWebRTC, incomingSocket } =\n useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded, sideViewIsVisible } = useSelector(\n (state: RootState) => state.island,\n )\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n\n const motionVariants = useMemo(() => {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n padding: padding_expanded,\n }\n\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && isListen) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (outgoing) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n\n case 'keypad':\n size = isOpen\n ? {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n : {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n break\n\n case 'video':\n if (isOpen) {\n size = {\n width: variants.video.expanded.width,\n height: variants.video.expanded.height,\n padding: variants.video.expanded.padding,\n }\n } else {\n size = {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n }\n break\n case 'transfer':\n case 'player':\n case 'recorder':\n case 'physicalPhoneRecorder':\n case 'settings':\n case 'conference':\n size = isOpen\n ? {\n width: variants[view].expanded.width,\n height: variants[view].expanded.height,\n }\n : {\n width: variants[view].collapsed.width,\n height: variants[view].collapsed.height,\n }\n break\n\n case 'switchDevice':\n size = isOpen\n ? {\n width: variants.switchDevice.expanded.width,\n height: variants.switchDevice.expanded.height,\n }\n : {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n // If there is an alert and the island is open put the correct height\n isAlert && isOpen\n ? variants.alerts.height +\n (size.height === 0 ? alert_padding_expanded * 2 : alert_padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? size.padding != undefined\n ? `${size.padding}px`\n : `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }, [\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n incomingWebRTC,\n incomingSocket,\n ])\n\n useEffect(() => {\n let sizeInformation: any = {}\n sizeInformation.width = motionVariants?.width\n sizeInformation.height = motionVariants?.height\n eventDispatch('phone-island-size-change', {\n sizeInformation,\n })\n }, [\n motionVariants,\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n sideViewIsVisible,\n incomingSocket,\n incomingWebRTC,\n ])\n\n return (\n <motion.div\n className={`${\n isOpen ? 'pi-cursor-grab' : 'pi-cursor-pointer'\n } pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow`}\n animate={motionVariants}\n >\n {children}\n </motion.div>\n )\n}\n\ninterface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n padding?: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","incomingWebRTC","incomingSocket","isListen","listen","_c","island","view","isOpen","actionsExpanded","sideViewIsVisible","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","alert_padding_expanded","motionVariants","useMemo","size","width","height","padding","call","expanded","transfer","listening","collapsed","keypad","video","switchDevice","isAlert","concat","borderRadius","undefined","useEffect","sizeInformation","eventDispatch","React","createElement","motion","div","className","animate"],"mappings":"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"}
@@ -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"),i=require("../../utils/customHooks/useEventListener.js"),n=require("../../utils/genericFunctions/eventDispatch.js"),o=require("../../utils/genericFunctions/localStorage.js"),a=require("./SettingsHeader.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var l=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=s(e);exports.default=function(){var s=l.useSelector((function(e){return e.player.remoteAudio})),d=u.useTranslation().t,p=e.useState(o.getJSONItem("phone-island-audio-output-device").deviceId||null),m=p[0],f=p[1],v=function(e){f(e),null==s||s.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),o.setJSONItem("phone-island-audio-output-device",{deviceId:e}),n.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};i.useEventListener("phone-island-call-audio-output-switch",(function(e){v(e.deviceId)}));var h=e.useState([]),g=h[0],b=h[1];e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){b(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[m]);var y=e.useState(null),x=y[0],k=y[1];return c.default.createElement("div",{className:"pi-flex pi-flex-col pi-w-full"},c.default.createElement(a.SettingsHeader,{title:d("Settings.Speakers"),tooltipPrefix:"audio"}),c.default.createElement("div",{className:"pi-flex pi-flex-col pi-mt-2 pi-space-y-1 pi-max-h-48 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25"},g.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,i){return c.default.createElement("div",{key:i,className:"pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md pi-cursor-pointer",onClick:function(){return v(null==e?void 0:e.deviceId)},onMouseEnter:function(){return k(null==e?void 0:e.deviceId)},onMouseLeave:function(){return k(null)}},c.default.createElement("div",{className:"pi-flex pi-items-center"},c.default.createElement(t.FontAwesomeIcon,{icon:r.faVolumeHigh,className:"pi-mr-2 pi-w-5 pi-h-5"}),c.default.createElement("span",null,(null==e?void 0:e.label)||"Input device ".concat(i+1))),c.default.createElement("div",{className:"pi-flex pi-items-center"},m===(null==e?void 0:e.deviceId)&&c.default.createElement(t.FontAwesomeIcon,{icon:r.faCheck,className:"".concat(x===(null==e?void 0:e.deviceId)?"pi-text-gray-700 dark:pi-text-gray-200":"pi-text-emerald-700 dark:pi-text-emerald-500"," pi-w-5 pi-h-5")})))}))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../store/index.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../utils/customHooks/useEventListener.js"),s=require("../../utils/genericFunctions/eventDispatch.js"),a=require("../../utils/genericFunctions/localStorage.js"),l=require("./SettingsHeader.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var u=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var n=require("../../lib/devices/devices.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(e);exports.default=function(){var d=c.useSelector((function(e){return e.player.remoteAudio})),m=u.useTranslation().t,f=t.store.select.mediaDevices.audioOutputDevices(t.store.getState()),v=e.useState(n.getCurrentAudioOutputDeviceId()||null),b=v[0],h=v[1],g=function(e){h(e),null==d||d.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),a.setJSONItem("phone-island-audio-output-device",{deviceId:e}),s.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};o.useEventListener("phone-island-call-audio-output-switch",(function(e){g(e.deviceId)}));var x=e.useState(null),y=x[0],j=x[1];return p.default.createElement("div",{className:"pi-flex pi-flex-col pi-w-full"},p.default.createElement(l.SettingsHeader,{title:m("Settings.Speakers"),tooltipPrefix:"audio"}),p.default.createElement("div",{className:"pi-flex pi-flex-col pi-mt-2 pi-space-y-1 pi-max-h-48 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25"},f.map((function(e,t){return p.default.createElement("div",{key:t,className:"pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md pi-cursor-pointer",onClick:function(){return g(null==e?void 0:e.deviceId)},onMouseEnter:function(){return j(null==e?void 0:e.deviceId)},onMouseLeave:function(){return j(null)}},p.default.createElement("div",{className:"pi-flex pi-items-center"},p.default.createElement(r.FontAwesomeIcon,{icon:i.faVolumeHigh,className:"pi-mr-2 pi-w-5 pi-h-5"}),p.default.createElement("span",null,(null==e?void 0:e.label)||"Input device ".concat(t+1))),p.default.createElement("div",{className:"pi-flex pi-items-center"},b===(null==e?void 0:e.deviceId)&&p.default.createElement(r.FontAwesomeIcon,{icon:i.faCheck,className:"".concat(y===(null==e?void 0:e.deviceId)?"pi-text-gray-700 dark:pi-text-gray-200":"pi-text-emerald-700 dark:pi-text-emerald-500"," pi-w-5 pi-h-5")})))}))))};
2
2
  //# sourceMappingURL=AudioView.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioView.js","sources":["../../../src/components/SettingsView/AudioView.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { eventDispatch, getJSONItem, setJSONItem, useEventListener } from '../../utils'\nimport { SettingsHeader } from './SettingsHeader'\nimport { useTranslation } from 'react-i18next'\n\nconst AudioView = () => {\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const { t } = useTranslation()\n\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getJSONItem('phone-island-audio-output-device').deviceId || null,\n )\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {\n console.info('Audio output device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: audioOutputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-output-switched', {})\n })\n .catch(function (err) {\n console.error('Audio output device switch error:', err)\n })\n }\n useEventListener('phone-island-call-audio-output-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioOutput(data.deviceId)\n })\n\n const [actualDevice, setActualDevice]: any = useState([])\n\n useEffect(() => {\n const checkInputOutputDevices = () => {\n navigator.mediaDevices\n .enumerateDevices()\n .then((deviceInfos) => {\n setActualDevice(deviceInfos)\n })\n .catch((error) => {\n console.error('error', error)\n })\n }\n\n checkInputOutputDevices()\n\n navigator.mediaDevices.addEventListener('devicechange', checkInputOutputDevices)\n\n return () => {\n navigator.mediaDevices.removeEventListener('devicechange', checkInputOutputDevices)\n }\n }, [selectedAudioOutput])\n\n const [hoveredDevice, setHoveredDevice] = useState<string | null>(null)\n\n return (\n <div className='pi-flex pi-flex-col pi-w-full'>\n {/* Title */}\n <SettingsHeader title={t('Settings.Speakers')} tooltipPrefix='audio' />\n {/* Audio List */}\n <div className='pi-flex pi-flex-col pi-mt-2 pi-space-y-1 pi-max-h-48 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <div\n key={index}\n className='pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md pi-cursor-pointer'\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n onMouseEnter={() => setHoveredDevice(audioDevice?.deviceId)}\n onMouseLeave={() => setHoveredDevice(null)}\n >\n <div className='pi-flex pi-items-center'>\n <FontAwesomeIcon icon={faVolumeHigh} className='pi-mr-2 pi-w-5 pi-h-5' />\n <span>{audioDevice?.label || `Input device ${index + 1}`}</span>\n </div>\n <div className='pi-flex pi-items-center'>\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n icon={faCheck}\n className={`${\n hoveredDevice === audioDevice?.deviceId\n ? 'pi-text-gray-700 dark:pi-text-gray-200'\n : 'pi-text-emerald-700 dark:pi-text-emerald-500'\n } pi-w-5 pi-h-5`}\n />\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default AudioView\n"],"names":["remoteAudioElement","useSelector","state","player","remoteAudio","t","useTranslation","_a","useState","getJSONItem","deviceId","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","console","info","setJSONItem","eventDispatch","catch","err","error","useEventListener","data","_b","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","deviceInfos","addEventListener","removeEventListener","_c","hoveredDevice","setHoveredDevice","React","createElement","className","SettingsHeader","title","tooltipPrefix","filter","device","kind","map","audioDevice","index","key","onClick","onMouseEnter","onMouseLeave","FontAwesomeIcon","icon","faVolumeHigh","label","faCheck","concat"],"mappings":"gqCAYkB,WAChB,IAAMA,EAA0BC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,WAAb,IAE1DC,EAAMC,qBAERC,EAAgDC,EAAAA,SACpDC,EAAAA,YAAY,oCAAoCC,UAAY,MADvDC,OAAqBC,OAGtBC,EAAyB,SAACC,GAC9BF,EAAuBE,GAEvBd,SAAAA,EAAoBe,QACjBC,UAAUF,GACVG,MAAK,WACJC,QAAQC,KAAK,uCAEbC,EAAAA,YAAY,mCAAoC,CAAEV,SAAUI,IAG5DO,gBAAc,0CAA2C,CAAA,EAC3D,IACCC,OAAM,SAAUC,GACfL,QAAQM,MAAM,oCAAqCD,EACrD,GACJ,EACAE,mBAAiB,yCAAyC,SAACC,GACzDb,EAAuBa,EAAKhB,SAC9B,IAEM,IAAAiB,EAAuCnB,EAAAA,SAAS,IAA/CoB,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GAEpCG,EAAAA,WAAU,WACR,IAAMC,EAA0B,WAC9BC,UAAUC,aACPC,mBACAjB,MAAK,SAACkB,GACLN,EAAgBM,EAClB,IACCb,OAAM,SAACE,GACNN,QAAQM,MAAM,QAASA,EACzB,GACJ,EAMA,OAJAO,IAEAC,UAAUC,aAAaG,iBAAiB,eAAgBL,GAEjD,WACLC,UAAUC,aAAaI,oBAAoB,eAAgBN,EAC7D,CACF,GAAG,CAACpB,IAEE,IAAA2B,EAAoC9B,EAAAA,SAAwB,MAA3D+B,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAEtC,OACEG,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,iCAEbF,UAAAC,cAACE,EAAcA,eAAA,CAACC,MAAOxC,EAAE,qBAAsByC,cAAc,UAE7DL,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,oXACZf,EACEmB,QAAO,SAACC,GAAW,MAAiB,iBAAjBA,aAAM,EAANA,EAAQC,KAAsB,IACjDC,KAAI,SAACC,EAAaC,GAAU,OAC3BX,EACE,QAAAC,cAAA,MAAA,CAAAW,IAAKD,EACLT,UAAU,8PACVW,QAAS,WAAM,OAAAzC,EAAuBsC,aAAA,EAAAA,EAAazC,WACnD6C,aAAc,WAAM,OAAAf,EAAiBW,aAAW,EAAXA,EAAazC,WAClD8C,aAAc,WAAM,OAAAhB,EAAiB,QAErCC,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,2BACbF,EAAC,QAAAC,cAAAe,mBAAgBC,KAAMC,eAAchB,UAAU,0BAC/CF,EAAA,QAAAC,cAAA,OAAA,MAAOS,eAAAA,EAAaS,QAAS,uBAAgBR,EAAQ,KAEvDX,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,2BACZhC,KAAwBwC,eAAAA,EAAazC,WACpC+B,EAAAA,QAAAC,cAACe,EAAAA,gBAAe,CACdC,KAAMG,EAAOA,QACblB,UAAW,GACTmB,OAAAvB,KAAkBY,aAAW,EAAXA,EAAazC,UAC3B,yCACA,+CACU,qBAKzB,KAIX"}
1
+ {"version":3,"file":"AudioView.js","sources":["../../../src/components/SettingsView/AudioView.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, store } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'\nimport { eventDispatch, setJSONItem, useEventListener } from '../../utils'\nimport { SettingsHeader } from './SettingsHeader'\nimport { useTranslation } from 'react-i18next'\nimport { getCurrentAudioOutputDeviceId } from '../../lib/devices/devices'\n\nconst AudioView = () => {\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const { t } = useTranslation()\n const audioOutputDevices = store.select.mediaDevices.audioOutputDevices(store.getState())\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getCurrentAudioOutputDeviceId() || null,\n )\n const handleClickAudioOutput = (audioOutputDevice: string) => {\n setSelectedAudioOutput(audioOutputDevice)\n\n remoteAudioElement?.current\n .setSinkId(audioOutputDevice)\n .then(function () {\n console.info('Audio output device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-output-device', { deviceId: audioOutputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-output-switched', {})\n })\n .catch(function (err) {\n console.error('Audio output device switch error:', err)\n })\n }\n useEventListener('phone-island-call-audio-output-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioOutput(data.deviceId)\n })\n\n const [hoveredDevice, setHoveredDevice] = useState<string | null>(null)\n\n return (\n <div className='pi-flex pi-flex-col pi-w-full'>\n {/* Title */}\n <SettingsHeader title={t('Settings.Speakers')} tooltipPrefix='audio' />\n {/* Audio List */}\n <div className='pi-flex pi-flex-col pi-mt-2 pi-space-y-1 pi-max-h-48 pi-overflow-y-auto pi-scrollbar-thin pi-scrollbar-thumb-gray-400 pi-dark:scrollbar-thumb-gray-400 pi-scrollbar-thumb-rounded-full pi-scrollbar-thumb-opacity-50 dark:pi-scrollbar-track-gray-900 pi-scrollbar-track-gray-200 pi-dark:scrollbar-track-gray-900 pi-scrollbar-track-rounded-full pi-scrollbar-track-opacity-25'>\n {audioOutputDevices.map((audioDevice, index) => (\n <div\n key={index}\n className='pi-flex pi-items-center pi-justify-between pi-px-4 pi-py-3 pi-text-base pi-font-normal pi-leading-6 dark:pi-text-gray-200 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700 dark:pi-bg-gray-950 pi-bg-gray-50 pi-rounded-md pi-cursor-pointer'\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n onMouseEnter={() => setHoveredDevice(audioDevice?.deviceId)}\n onMouseLeave={() => setHoveredDevice(null)}\n >\n <div className='pi-flex pi-items-center'>\n <FontAwesomeIcon icon={faVolumeHigh} className='pi-mr-2 pi-w-5 pi-h-5' />\n <span>{audioDevice?.label || `Input device ${index + 1}`}</span>\n </div>\n <div className='pi-flex pi-items-center'>\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n icon={faCheck}\n className={`${\n hoveredDevice === audioDevice?.deviceId\n ? 'pi-text-gray-700 dark:pi-text-gray-200'\n : 'pi-text-emerald-700 dark:pi-text-emerald-500'\n } pi-w-5 pi-h-5`}\n />\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default AudioView\n"],"names":["remoteAudioElement","useSelector","state","player","remoteAudio","t","useTranslation","audioOutputDevices","store","select","mediaDevices","getState","_a","useState","getCurrentAudioOutputDeviceId","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","console","info","setJSONItem","deviceId","eventDispatch","catch","err","error","useEventListener","data","_b","hoveredDevice","setHoveredDevice","React","createElement","className","SettingsHeader","title","tooltipPrefix","map","audioDevice","index","key","onClick","onMouseEnter","onMouseLeave","FontAwesomeIcon","icon","faVolumeHigh","label","faCheck","concat"],"mappings":"4uCAakB,WAChB,IAAMA,EAA0BC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,WAAb,IAE1DC,EAAMC,qBACRC,EAAqBC,EAAKA,MAACC,OAAOC,aAAaH,mBAAmBC,EAAKA,MAACG,YACxEC,EAAgDC,EAAQA,SAC5DC,mCAAmC,MAD9BC,EAAmBH,EAAA,GAAEI,OAGtBC,EAAyB,SAACC,GAC9BF,EAAuBE,GAEvBlB,SAAAA,EAAoBmB,QACjBC,UAAUF,GACVG,MAAK,WACJC,QAAQC,KAAK,uCAEbC,EAAAA,YAAY,mCAAoC,CAAEC,SAAUP,IAG5DQ,gBAAc,0CAA2C,CAAA,EAC3D,IACCC,OAAM,SAAUC,GACfN,QAAQO,MAAM,oCAAqCD,EACrD,GACJ,EACAE,mBAAiB,yCAAyC,SAACC,GACzDd,EAAuBc,EAAKN,SAC9B,IAEM,IAAAO,EAAoCnB,EAAAA,SAAwB,MAA3DoB,EAAaD,EAAA,GAAEE,EAAgBF,EAAA,GAEtC,OACEG,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,iCAEbF,UAAAC,cAACE,EAAcA,eAAA,CAACC,MAAOlC,EAAE,qBAAsBmC,cAAc,UAE7DL,EAAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,oXACZ9B,EAAmBkC,KAAI,SAACC,EAAaC,GAAU,OAC9CR,EAAAA,QACEC,cAAA,MAAA,CAAAQ,IAAKD,EACLN,UAAU,8PACVQ,QAAS,WAAM,OAAA5B,EAAuByB,aAAA,EAAAA,EAAajB,SAAS,EAC5DqB,aAAc,WAAM,OAAAZ,EAAiBQ,aAAW,EAAXA,EAAajB,SAA9B,EACpBsB,aAAc,WAAM,OAAAb,EAAiB,QAErCC,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,2BACbF,EAAC,QAAAC,cAAAY,mBAAgBC,KAAMC,eAAcb,UAAU,0BAC/CF,EAAA,QAAAC,cAAA,OAAA,MAAOM,eAAAA,EAAaS,QAAS,uBAAgBR,EAAQ,KAEvDR,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,2BACZtB,KAAwB2B,eAAAA,EAAajB,WACpCU,EAAAA,QAAAC,cAACY,EAAAA,gBAAe,CACdC,KAAMG,EAAOA,QACbf,UAAW,GACTgB,OAAApB,KAAkBS,aAAW,EAAXA,EAAajB,UAC3B,yCACA,+CACU,qBAKzB,KAIT"}