@nethesis/phone-island 0.8.25 → 0.8.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("./components/Events.js"),t=require("./components/Socket.js"),s=require("./components/WebRTC.js"),o=require("./components/Island.js"),a=require("./components/RestAPI.js"),i=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),u=require("./utils/genericFunctions/localStorage.js");require("./node_modules/react-redux/es/index.js");var d=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/i18next/dist/esm/i18next.js");var l=require("./node_modules/js-base64/base64.mjs.js"),c=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),f=require("./lib/darkTheme.js"),v=require("./services/user.js"),m=require("./node_modules/react-redux/es/components/Provider.js");function g(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 E=g(e),j=function(g){var j=g.dataConfig,I=g.i18nLoadPath,q=void 0===I?void 0:I,D=g.showAlways,y=void 0!==D&&D,L=g.uaType,k=l.Base64.atob(j||"").split(":"),w=k[0],x=k[1],S=k[2],b=k[3],_=k[4],T=k[5],C=k[6],O=e.useState(!1),P=O[0],A=O[1],N=e.useState(!1),R=N[0],V=N[1],F=e.useState(!1),H=F[0],J=F[1];e.useEffect((function(){var e=new Worker(c.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&A(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){H&&R&&(A(!1),V(!1),J(!1))}),[H,R]),i.useEventListener("phone-island-expand",(function(){d.store.dispatch.island.toggleIsOpen(!0),r.eventDispatch("phone-island-expanded",{})})),i.useEventListener("phone-island-compress",(function(){d.store.dispatch.island.toggleIsOpen(!1),r.eventDispatch("phone-island-compressed",{})})),i.useEventListener("phone-island-call-keypad-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),i.useEventListener("phone-island-call-transfer-close",(function(){d.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),i.useEventListener("phone-island-recording-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),i.useEventListener("phone-island-audio-player-close",(function(){d.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),i.useEventListener("phone-island-detach",(function(e){h.detach(),d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),i.useEventListener("phone-island-audio-input-change",(function(e){u.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),i.useEventListener("phone-island-audio-output-change",(function(e){var n=d.store.getState().player.remoteAudio;null==n||n.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),u.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),i.useEventListener("phone-island-presence-change",(function(e){v.changeOperatorStatus(e),r.eventDispatch("phone-island-presence-changed",{})}));var W=e.useState(!0),U=W[0],B=W[1],M=e.useState(!0),z=M[0],G=M[1];e.useEffect((function(){U&&(p.loadI18n(q),B(!1))}),[U]);var K=d.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(z&&K){var n=null===(e=u.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:n}),G(!1)}}),[z,K]),e.useEffect((function(){f.checkDarkTheme()}),[]),i.useEventListener("phone-island-theme-change",(function(e){f.setTheme(null==e?void 0:e.selectedTheme)})),i.useEventListener("phone-island-default-device-change",(function(e){d.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-default-device-changed",{})})),i.useEventListener("phone-island-call-transfer-successfully-popup-open",(function(){console.log("Call transferred successfully and popup opened")})),i.useEventListener("phone-island-call-transfer-successfully-popup-close",(function(){console.log("Call transferred successfully and popup closed")})),i.useEventListener("phone-island-call-transfer-failed",(function(){console.log("Transfer failed")})),i.useEventListener("phone-island-all-alerts-removed",(function(){console.log("All alerts removed")})),E.default.createElement(E.default.Fragment,null,E.default.createElement(m.default,{store:d.store},E.default.createElement(s.WebRTC,{hostName:w,sipExten:b,sipSecret:_,sipHost:T,sipPort:C,reload:P,reloadedCallback:function(){return V(!0)},uaType:L},E.default.createElement(a.RestAPI,{hostName:w,username:x,authToken:S},E.default.createElement(t.Socket,{hostName:w,username:x,authToken:S,reload:P,reloadedCallback:function(){return J(!0)},uaType:L},E.default.createElement(n.Events,{sipHost:T},E.default.createElement(o.Island,{showAlways:y})))))))};j.displayName="PhoneIsland",exports.PhoneIsland=j;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),n=require("./components/Socket.js"),s=require("./components/WebRTC.js"),a=require("./components/Island.js"),i=require("./components/RestAPI.js"),o=require("./utils/customHooks/useEventListener.js"),r=require("./utils/genericFunctions/eventDispatch.js"),d=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");var c=require("./node_modules/js-base64/base64.mjs.js"),l=require("./workers/wake_up.js"),p=require("./lib/i18n.js");require("./node_modules/react-tooltip/dist/react-tooltip.min.css.js");var h=require("./lib/webrtc/messages.js"),v=require("./lib/darkTheme.js"),f=require("./services/user.js"),m=require("./node_modules/react-redux/es/components/Provider.js");function g(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 j=g(e),E=function(g){var E=g.dataConfig,I=g.i18nLoadPath,q=void 0===I?void 0:I,D=g.showAlways,k=void 0!==D&&D,S=g.uaType,w=c.Base64.atob(E||"").split(":"),x=w[0],b=w[1],y=w[2],L=w[3],_=w[4],T=w[5],O=w[6],C=e.useState(!1),P=C[0],A=C[1],N=e.useState(!1),R=N[0],V=N[1],F=e.useState(!1),H=F[0],J=F[1];e.useEffect((function(){var e=new Worker(l.default,{type:"module"});return e.onmessage=function(e){"wakeup"===e.data&&A(!0)},function(){e.terminate()}}),[]),e.useEffect((function(){H&&R&&(A(!1),V(!1),J(!1))}),[H,R]),o.useEventListener("phone-island-expand",(function(){u.store.dispatch.island.toggleIsOpen(!0),r.eventDispatch("phone-island-expanded",{})})),o.useEventListener("phone-island-compress",(function(){u.store.dispatch.island.toggleIsOpen(!1),r.eventDispatch("phone-island-compressed",{})})),o.useEventListener("phone-island-call-keypad-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-keypad-closed",{})})),o.useEventListener("phone-island-call-transfer-close",(function(){u.store.dispatch.island.setIslandView("call"),r.eventDispatch("phone-island-call-transfer-closed",{})})),o.useEventListener("phone-island-recording-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-recording-closed",{})})),o.useEventListener("phone-island-audio-player-close",(function(){u.store.dispatch.island.setIslandView(null),r.eventDispatch("phone-island-audio-player-closed",{})})),o.useEventListener("phone-island-detach",(function(e){h.detach(),u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-detached",{})})),o.useEventListener("phone-island-audio-input-change",(function(e){d.setJSONItem("phone-island-audio-input-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-input-changed",{})})),o.useEventListener("phone-island-audio-output-change",(function(e){var t=u.store.getState().player.remoteAudio;null==t||t.current.setSinkId(e.deviceId).then((function(){console.info("Default audio output device change with success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e.deviceId}),r.eventDispatch("phone-island-audio-output-changed",{})})).catch((function(e){console.error("Default audio output device change error:",e)}))})),o.useEventListener("phone-island-presence-change",(function(e){f.changeOperatorStatus(e),r.eventDispatch("phone-island-presence-changed",{})}));var W=e.useState(!0),U=W[0],B=W[1],M=e.useState(!0),z=M[0],G=M[1];e.useEffect((function(){U&&(p.loadI18n(q),B(!1))}),[U]);var K=u.store.getState().player.remoteAudio;return e.useEffect((function(){var e;if(z&&K){var t=null===(e=d.getJSONItem("phone-island-audio-output-device"))||void 0===e?void 0:e.deviceId;r.eventDispatch("phone-island-audio-output-change",{deviceId:t}),G(!1)}}),[z,K]),e.useEffect((function(){v.checkDarkTheme()}),[]),o.useEventListener("phone-island-theme-change",(function(e){v.setTheme(null==e?void 0:e.selectedTheme)})),o.useEventListener("phone-island-default-device-change",(function(e){u.store.dispatch.currentUser.updateCurrentDefaultDevice(null==e?void 0:e.deviceInformationObject),r.eventDispatch("phone-island-default-device-changed",{})})),o.useEventListener("phone-island-alert",(function(e){u.store.dispatch.alerts.setAlert(e.toString())})),j.default.createElement(j.default.Fragment,null,j.default.createElement(m.default,{store:u.store},j.default.createElement(s.WebRTC,{hostName:x,sipExten:L,sipSecret:_,sipHost:T,sipPort:O,reload:P,reloadedCallback:function(){return V(!0)},uaType:S},j.default.createElement(i.RestAPI,{hostName:x,username:b,authToken:y},j.default.createElement(n.Socket,{hostName:x,username:b,authToken:y,reload:P,reloadedCallback:function(){return J(!0)},uaType:S},j.default.createElement(t.Events,{sipHost:T},j.default.createElement(a.Island,{showAlways:k})))))))};E.displayName="PhoneIsland",exports.PhoneIsland=E;
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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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-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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\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-call-transfer-successfully-popup-open', () => {\n console.log('Call transferred successfully and popup opened')\n })\n\n useEventListener('phone-island-call-transfer-successfully-popup-close', () => {\n console.log('Call transferred successfully and popup closed')\n })\n\n useEventListener('phone-island-call-transfer-failed', () => {\n console.log('Transfer failed')\n })\n\n useEventListener('phone-island-all-alerts-removed', () => {\n console.log('All alerts removed')\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","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","log","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","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 loadI18n from './lib/i18n'\nimport i18next, { i18n } from 'i18next'\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'\n\ninterface PhoneIslandProps {\n dataConfig: string\n i18nLoadPath?: string\n showAlways?: boolean\n uaType: string\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({\n dataConfig,\n i18nLoadPath = undefined,\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 store.dispatch.currentUser.updateCurrentDefaultDevice(data?.deviceInformationObject)\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-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 const [firstRenderI18n, setFirstRenderI18n] = useState(true)\n const [firstAudioOutputInit, setFirstAudioOutputInit] = useState(true)\n\n //initialize i18n\n useEffect(() => {\n if (firstRenderI18n) {\n loadI18n(i18nLoadPath)\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 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","i18nLoadPath","undefined","_c","showAlways","uaType","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","SIP_HOST","SIP_PORT","_d","useState","reload","setReload","_e","reloadedWebRTC","setReloadedWebRTC","_f","reloadedSocket","setReloadedSocket","useEffect","worker","Worker","wakeUpWorker","type","onmessage","event","data","terminate","useEventListener","store","dispatch","island","toggleIsOpen","eventDispatch","setIslandView","detach","currentUser","updateCurrentDefaultDevice","deviceInformationObject","setJSONItem","deviceId","remoteAudioElement","getState","player","remoteAudio","current","setSinkId","then","console","info","catch","err","error","changeOperatorStatus","_g","firstRenderI18n","setFirstRenderI18n","_h","firstAudioOutputInit","setFirstAudioOutputInit","loadI18n","defaultAudioOutputDevice","getJSONItem","checkDarkTheme","theme","setTheme","selectedTheme","alertType","alerts","setAlert","toString","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","sipHost","sipPort","reloadedCallback","RestAPI","username","authToken","Socket","Events","Island","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 t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),r=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("../Button.js"),i=require("../../node_modules/i18next/dist/esm/i18next.js"),s=require("../../utils/genericFunctions/eventDispatch.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),n=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=o(e);exports.default=function(){var e=l.useSelector((function(e){return e.alerts})).data,o=n.useDispatch(),u=Object.values(e).filter((function(e){return e.active})),c=u.length>0?u[u.length-1]:null;return c&&d.default.createElement("div",{className:"pi-relative pi-rounded-md pi-w-full pi-flex"},d.default.createElement("div",{className:"pi-flex pi-items-center"},d.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 pi-mt-[-0.8rem] ".concat("call_transfered"===(null==c?void 0:c.type)?"pi-bg-green-200 dark:pi-bg-green-900":"pi-bg-rose-200 dark:pi-bg-rose-900")},d.default.createElement(t.FontAwesomeIcon,{icon:"call_transfered"===(null==c?void 0:c.type)?r.faCircleCheck:r.faCircleXmark,className:"pi-h-4 pi-w-4 ".concat("call_transfered"===(null==c?void 0:c.type)?"pi-text-green-700 dark:pi-text-green-200":"pi-text-rose-700 dark:pi-text-rose-200"),"aria-hidden":"true"})),d.default.createElement("div",{className:"ml-3"},d.default.createElement("h3",{className:"pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100"},i.t("Errors.".concat(null==c?void 0:c.type))),d.default.createElement("div",{className:"pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5"},i.t("Errors.".concat(null==c?void 0:c.message))))),d.default.createElement(a.Button,{variant:"transparent",onClick:function(){return o.alerts.removeAllAlerts(),void s.eventDispatch("phone-island-all-alerts-removed",{})},className:"pi-absolute pi-right-[-0.5rem] pi-top-[38%] pi-transform pi--translate-y-1/2"},d.default.createElement(t.FontAwesomeIcon,{icon:r.faTimes,className:"pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4"})))};
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"),a=require("../Button.js"),i=require("../../node_modules/i18next/dist/esm/i18next.js"),s=require("../../utils/genericFunctions/eventDispatch.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js"),n=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=o(e);exports.default=function(){var e=l.useSelector((function(e){return e.alerts})).data,o=n.useDispatch(),u=Object.values(e).filter((function(e){return e.active})),c=u.length>0?u[u.length-1]:null;return c&&d.default.createElement("div",{className:"pi-relative pi-rounded-md pi-w-full pi-flex"},d.default.createElement("div",{className:"pi-flex pi-items-center"},d.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ".concat("call_transfered"===(null==c?void 0:c.type)?"pi-bg-green-200 dark:pi-bg-green-900":"pi-bg-rose-200 dark:pi-bg-rose-900")},d.default.createElement(t.FontAwesomeIcon,{icon:"call_transfered"===(null==c?void 0:c.type)?r.faCircleCheck:r.faCircleXmark,className:"pi-h-[1.1rem] pi-w-10 ".concat("call_transfered"===(null==c?void 0:c.type)?"pi-text-green-700 dark:pi-text-green-200":"pi-text-rose-700 dark:pi-text-rose-200"),"aria-hidden":"true"})),d.default.createElement("div",{className:"ml-3"},d.default.createElement("h3",{className:"pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property"},i.t("Errors.".concat(null==c?void 0:c.type))),d.default.createElement("div",{className:"pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5"},i.t("Errors.".concat(null==c?void 0:c.message))))),d.default.createElement(a.Button,{variant:"transparent",onClick:function(){return o.alerts.removeAllAlerts(),void s.eventDispatch("phone-island-all-alerts-removed",{})},className:"pi-absolute pi-right-[-1.28rem] pi-top-[8%] pi-transform pi--translate-y-[57%]"},d.default.createElement(t.FontAwesomeIcon,{icon:r.faTimes,className:"pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4"})))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTimes, faCircleXmark, faCircleCheck } from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport { t } from 'i18next'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const { data } = useSelector((state: RootState) => state.alerts)\n const dispatch = useDispatch<Dispatch>()\n\n // Extract active alerts\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n\n // Display the latest active alert\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n\n const handleClearAllAlerts = () => {\n dispatch.alerts.removeAllAlerts()\n eventDispatch('phone-island-all-alerts-removed', {})\n }\n\n return (\n latestAlert && (\n <div className='pi-relative pi-rounded-md pi-w-full pi-flex'>\n <div className='pi-flex pi-items-center'>\n <div\n className={`pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 pi-mt-[-0.8rem] ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-bg-green-200 dark:pi-bg-green-900'\n : 'pi-bg-rose-200 dark:pi-bg-rose-900'\n }`}\n >\n {/* Icon */}\n <FontAwesomeIcon\n icon={latestAlert?.type === 'call_transfered' ? faCircleCheck : faCircleXmark}\n className={`pi-h-4 pi-w-4 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-text-green-700 dark:pi-text-green-200'\n : 'pi-text-rose-700 dark:pi-text-rose-200'\n }`}\n aria-hidden='true'\n />\n </div>\n\n <div className='ml-3'>\n <h3 className='pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100'>\n {t(`Errors.${latestAlert?.type}`)}\n </h3>\n <div className='pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5'>\n {t(`Errors.${latestAlert?.message}`)}\n </div>\n </div>\n </div>\n\n {/* Close button */}\n <Button\n variant='transparent'\n onClick={() => handleClearAllAlerts()}\n className='pi-absolute pi-right-[-0.5rem] pi-top-[38%] pi-transform pi--translate-y-1/2'\n >\n <FontAwesomeIcon icon={faTimes} className='pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4' />\n </Button>\n </div>\n )\n )\n}\n\nexport default AlertView\n"],"names":["data","useSelector","state","alerts","dispatch","useDispatch","activeAlerts","Object","values","filter","alert","active","latestAlert","length","React","createElement","className","concat","type","FontAwesomeIcon","icon","faCircleCheck","faCircleXmark","t","message","Button","variant","onClick","removeAllAlerts","eventDispatch","faTimes"],"mappings":"2qBAesB,WACZ,IAAAA,EAASC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,eACnDC,EAAWC,EAAAA,cAGXC,EAAeC,OAAOC,OAAOR,GAAMS,QAAO,SAACC,GAAe,OAAAA,EAAMC,MAAM,IAGtEC,EAAcN,EAAaO,OAAS,EAAIP,EAAaA,EAAaO,OAAS,GAAK,KAOtF,OACED,GACEE,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+CACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,2BACbF,EAAA,QAAAC,cAAA,MAAA,CACEC,UAAW,sHACTC,OAAsB,qBAAtBL,aAAW,EAAXA,EAAaM,MACT,uCACA,uCAINJ,EAAAA,QAAAC,cAACI,EAAAA,gBAAe,CACdC,KAA4B,qBAAtBR,aAAW,EAAXA,EAAaM,MAA6BG,EAAaA,cAAGC,EAAaA,cAC7EN,UAAW,iBACTC,OAAsB,qBAAtBL,aAAA,EAAAA,EAAaM,MACT,2CACA,0CAEM,cAAA,UAIhBJ,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,QACbF,EAAA,QAAAC,cAAA,KAAA,CAAIC,UAAU,yFACXO,EAACA,EAAC,UAAUN,OAAAL,eAAAA,EAAaM,QAE5BJ,UAAAC,cAAA,MAAA,CAAKC,UAAU,uGACZO,EAAAA,EAAE,iBAAUX,aAAW,EAAXA,EAAaY,aAMhCV,EAAAA,QAAAC,cAACU,EAAAA,OACC,CAAAC,QAAQ,cACRC,QAAS,WAAM,OAxCrBvB,EAASD,OAAOyB,uBAChBC,gBAAc,kCAAmC,CAAA,IAwC3Cb,UAAU,gFAEVF,UAAAC,cAACI,EAAeA,gBAAA,CAACC,KAAMU,UAASd,UAAU,yDAKpD"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTimes, faCircleXmark, faCircleCheck } from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../Button'\nimport { t } from 'i18next'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const { data } = useSelector((state: RootState) => state.alerts)\n const dispatch = useDispatch<Dispatch>()\n\n // Extract active alerts\n const activeAlerts = Object.values(data).filter((alert: any) => alert.active)\n\n // Display the latest active alert\n const latestAlert = activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null\n\n const handleClearAllAlerts = () => {\n dispatch.alerts.removeAllAlerts()\n eventDispatch('phone-island-all-alerts-removed', {})\n }\n\n return (\n latestAlert && (\n <div className='pi-relative pi-rounded-md pi-w-full pi-flex'>\n <div className='pi-flex pi-items-center'>\n <div\n className={`pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-mr-4 pi-rounded-full pi-h-10 pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-bg-green-200 dark:pi-bg-green-900'\n : 'pi-bg-rose-200 dark:pi-bg-rose-900'\n }`}\n >\n {/* Icon */}\n <FontAwesomeIcon\n icon={latestAlert?.type === 'call_transfered' ? faCircleCheck : faCircleXmark}\n className={`pi-h-[1.1rem] pi-w-10 ${\n latestAlert?.type === 'call_transfered'\n ? 'pi-text-green-700 dark:pi-text-green-200'\n : 'pi-text-rose-700 dark:pi-text-rose-200'\n }`}\n aria-hidden='true'\n />\n </div>\n\n <div className='ml-3'>\n <h3 className='pi-text-lg pi-font-medium pi-text-gray-900 dark:pi-text-gray-50 pi-dark:text-rose-100 margin-block-property'>\n {t(`Errors.${latestAlert?.type}`)}\n </h3>\n <div className='pi-text-sm pi-font-normal pi-text-gray-700 dark:pi-text-gray-200 pi-dark:text-rose-200 pi-leading-5'>\n {t(`Errors.${latestAlert?.message}`)}\n </div>\n </div>\n </div>\n\n {/* Close button */}\n <Button\n variant='transparent'\n onClick={() => handleClearAllAlerts()}\n className='pi-absolute pi-right-[-1.28rem] pi-top-[8%] pi-transform pi--translate-y-[57%]'\n >\n <FontAwesomeIcon\n icon={faTimes}\n className='pi-text-gray-700 dark:pi-text-gray-50 pi-w-4 pi-h-4'\n />\n </Button>\n </div>\n )\n )\n}\n\nexport default AlertView\n"],"names":["data","useSelector","state","alerts","dispatch","useDispatch","activeAlerts","Object","values","filter","alert","active","latestAlert","length","React","createElement","className","concat","type","FontAwesomeIcon","icon","faCircleCheck","faCircleXmark","t","message","Button","variant","onClick","removeAllAlerts","eventDispatch","faTimes"],"mappings":"2qBAesB,WACZ,IAAAA,EAASC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,eACnDC,EAAWC,EAAAA,cAGXC,EAAeC,OAAOC,OAAOR,GAAMS,QAAO,SAACC,GAAe,OAAAA,EAAMC,MAAM,IAGtEC,EAAcN,EAAaO,OAAS,EAAIP,EAAaA,EAAaO,OAAS,GAAK,KAOtF,OACED,GACEE,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+CACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,2BACbF,EAAA,QAAAC,cAAA,MAAA,CACEC,UAAW,sGACTC,OAAsB,qBAAtBL,aAAW,EAAXA,EAAaM,MACT,uCACA,uCAINJ,EAAAA,QAAAC,cAACI,EAAAA,gBAAe,CACdC,KAA4B,qBAAtBR,aAAW,EAAXA,EAAaM,MAA6BG,EAAaA,cAAGC,EAAaA,cAC7EN,UAAW,yBACTC,OAAsB,qBAAtBL,aAAA,EAAAA,EAAaM,MACT,2CACA,0CAEM,cAAA,UAIhBJ,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,QACbF,EAAA,QAAAC,cAAA,KAAA,CAAIC,UAAU,+GACXO,EAACA,EAAC,UAAUN,OAAAL,eAAAA,EAAaM,QAE5BJ,UAAAC,cAAA,MAAA,CAAKC,UAAU,uGACZO,EAAAA,EAAE,iBAAUX,aAAW,EAAXA,EAAaY,aAMhCV,EAAAA,QAAAC,cAACU,EAAAA,OACC,CAAAC,QAAQ,cACRC,QAAS,WAAM,OAxCrBvB,EAASD,OAAOyB,uBAChBC,gBAAc,kCAAmC,CAAA,IAwC3Cb,UAAU,kFAEVF,UAAAC,cAACI,EAAeA,gBAAA,CACdC,KAAMU,UACNd,UAAU,yDAMtB"}
@@ -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/framer-motion/dist/es/render/dom/motion.mjs.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=i(e),r=function(e){var i=e.children,r=d.useSelector((function(e){return e.currentCall})),h=r.incoming,n=r.outgoing,c=r.accepted,l=r.transferring,o=d.useSelector((function(e){return e.listen})).isListen,s=d.useSelector((function(e){return e.island})),p=s.view,g=s.isOpen,u=s.actionsExpanded,x=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,w=d.useSelector((function(e){return e.motions})),f=w.variants,y=w.border_radius_collapsed,m=w.border_radius_expanded,v=w.padding_x_collapsed,_=w.padding_y_collapsed,b=w.padding_expanded;var k=function(){var e={width:0,height:0};switch(p){case"call":g?c&&l?e=u?{width:f.call.expanded.transfer.actionsExpanded.width,height:f.call.expanded.transfer.actionsExpanded.height}:{width:f.call.expanded.transfer.width,height:f.call.expanded.transfer.height}:c&&u?e={width:f.call.expanded.accepted.actionsExpanded.width,height:f.call.expanded.accepted.actionsExpanded.height}:c&&!o?e={width:f.call.expanded.accepted.width,height:f.call.expanded.accepted.height}:c&&o?e={width:f.call.expanded.listening.width,height:f.call.expanded.listening.height}:h?e={width:f.call.expanded.incoming.width,height:f.call.expanded.incoming.height}:n&&(e={width:f.call.expanded.outgoing.width,height:f.call.expanded.outgoing.height}):e={width:f.call.collapsed.width,height:f.call.collapsed.height};break;case"keypad":e=g?{width:f.keypad.expanded.width,height:f.keypad.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"transfer":e=g?{width:f.transfer.expanded.width,height:f.transfer.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"player":e=g?{width:f.player.expanded.width,height:f.player.expanded.height}:{width:f.player.collapsed.width,height:f.player.collapsed.height};break;case"recorder":e=g?{width:f.recorder.expanded.width,height:f.recorder.expanded.height}:{width:f.recorder.collapsed.width,height:f.recorder.collapsed.height};break;case"physicalPhoneRecorder":e=g?{width:f.physicalPhoneRecorder.expanded.width,height:f.physicalPhoneRecorder.expanded.height}:{width:f.physicalPhoneRecorder.collapsed.width,height:f.physicalPhoneRecorder.collapsed.height}}var t=x>0;return{width:"".concat(0===e.width&&t?f.alerts.width:e.width,"px"),height:"".concat(t&&g?f.alerts.height+(0===e.height?2*b:b):e.height,"px"),borderRadius:"".concat(g?m:y,"px"),padding:g?"".concat(b,"px"):"".concat(v,"px ").concat(_,"px")}}();return a.default.createElement(t.motion.div,{className:"pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:k},i&&i)};exports.IslandMotion=r,exports.default=r;
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/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 i=a(e),r=function(e){var a=e.children,r=d.useSelector((function(e){return e.currentCall})),h=r.incoming,n=r.outgoing,c=r.accepted,l=r.transferring,o=d.useSelector((function(e){return e.listen})).isListen,p=d.useSelector((function(e){return e.island})),s=p.view,g=p.isOpen,x=p.actionsExpanded,u=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,w=d.useSelector((function(e){return e.motions})),f=w.variants,y=w.border_radius_collapsed,m=w.border_radius_expanded,_=w.padding_x_collapsed,v=w.padding_y_collapsed,b=w.padding_expanded,k=w.alert_padding_expanded;var j=function(){var e={width:0,height:0};switch(s){case"call":g?c&&l?e=x?{width:f.call.expanded.transfer.actionsExpanded.width,height:f.call.expanded.transfer.actionsExpanded.height}:{width:f.call.expanded.transfer.width,height:f.call.expanded.transfer.height}:c&&x?e={width:f.call.expanded.accepted.actionsExpanded.width,height:f.call.expanded.accepted.actionsExpanded.height}:c&&!o?e={width:f.call.expanded.accepted.width,height:f.call.expanded.accepted.height}:c&&o?e={width:f.call.expanded.listening.width,height:f.call.expanded.listening.height}:h?e={width:f.call.expanded.incoming.width,height:f.call.expanded.incoming.height}:n&&(e={width:f.call.expanded.outgoing.width,height:f.call.expanded.outgoing.height}):e={width:f.call.collapsed.width,height:f.call.collapsed.height};break;case"keypad":e=g?{width:f.keypad.expanded.width,height:f.keypad.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"transfer":e=g?{width:f.transfer.expanded.width,height:f.transfer.expanded.height}:{width:f.transfer.collapsed.width,height:f.transfer.collapsed.height};break;case"player":e=g?{width:f.player.expanded.width,height:f.player.expanded.height}:{width:f.player.collapsed.width,height:f.player.collapsed.height};break;case"recorder":e=g?{width:f.recorder.expanded.width,height:f.recorder.expanded.height}:{width:f.recorder.collapsed.width,height:f.recorder.collapsed.height};break;case"physicalPhoneRecorder":e=g?{width:f.physicalPhoneRecorder.expanded.width,height:f.physicalPhoneRecorder.expanded.height}:{width:f.physicalPhoneRecorder.collapsed.width,height:f.physicalPhoneRecorder.collapsed.height}}var t=u>0;return{width:"".concat(0===e.width&&t?f.alerts.width:e.width,"px"),height:"".concat(t&&g?f.alerts.height+(0===e.height?2*k:k):e.height,"px"),borderRadius:"".concat(g?m:y,"px"),padding:g?"".concat(b,"px"):"".concat(_,"px ").concat(v,"px")}}();return i.default.createElement(t.motion.div,{className:"pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow",animate:j},a&&a)};exports.IslandMotion=r,exports.default=r;
2
2
  //# sourceMappingURL=IslandMotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded } = useSelector((state: RootState) => state.island)\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 } = useSelector((state: RootState) => state.motions)\n\n function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\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 case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n case 'physicalPhoneRecorder':\n if (isOpen) {\n size = {\n width: variants.physicalPhoneRecorder.expanded.width,\n height: variants.physicalPhoneRecorder.expanded.height,\n }\n } else {\n size = {\n width: variants.physicalPhoneRecorder.collapsed.width,\n height: variants.physicalPhoneRecorder.collapsed.height,\n }\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 + (size.height === 0 ? padding_expanded * 2 : padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen ? `${border_radius_expanded}px` : `${border_radius_collapsed}px`,\n padding: isOpen\n ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","isListen","listen","_c","island","view","isOpen","actionsExpanded","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","motionVariants","size","width","height","call","expanded","transfer","listening","collapsed","keypad","player","recorder","physicalPhoneRecorder","isAlert","concat","borderRadius","padding","getVariant","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) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const { incoming, outgoing, accepted, transferring } = useSelector(\n (state: RootState) => state.currentCall,\n )\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded } = useSelector((state: RootState) => state.island)\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 function getVariant() {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\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 case 'keypad':\n if (isOpen) {\n size = {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'transfer':\n if (isOpen) {\n size = {\n width: variants.transfer.expanded.width,\n height: variants.transfer.expanded.height,\n }\n } else {\n size = {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n }\n break\n case 'player':\n if (isOpen) {\n size = {\n width: variants.player.expanded.width,\n height: variants.player.expanded.height,\n }\n } else {\n size = {\n width: variants.player.collapsed.width,\n height: variants.player.collapsed.height,\n }\n }\n break\n case 'recorder':\n if (isOpen) {\n size = {\n width: variants.recorder.expanded.width,\n height: variants.recorder.expanded.height,\n }\n } else {\n size = {\n width: variants.recorder.collapsed.width,\n height: variants.recorder.collapsed.height,\n }\n }\n break\n case 'physicalPhoneRecorder':\n if (isOpen) {\n size = {\n width: variants.physicalPhoneRecorder.expanded.width,\n height: variants.physicalPhoneRecorder.expanded.height,\n }\n } else {\n size = {\n width: variants.physicalPhoneRecorder.collapsed.width,\n height: variants.physicalPhoneRecorder.collapsed.height,\n }\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 + (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 ? `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }\n\n const motionVariants = getVariant()\n\n return (\n <motion.div\n className='pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs pi-cursor-pointer dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow'\n animate={motionVariants}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport interface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","isListen","listen","_c","island","view","isOpen","actionsExpanded","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","padding_x_collapsed","padding_y_collapsed","padding_expanded","alert_padding_expanded","motionVariants","size","width","height","call","expanded","transfer","listening","collapsed","keypad","player","recorder","physicalPhoneRecorder","isAlert","concat","borderRadius","padding","getVariant","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("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),i=require("../utils/genericFunctions/timestamp.js"),u=require("../lib/user/extensions.js"),d=require("../utils/genericFunctions/isEmpty.js"),l=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(n);exports.Socket=function(m){var h=m.hostName,v=m.username,g=m.authToken,k=m.reload,b=m.reloadedCallback,y=m.children,C=m.uaType,S=p.useDispatch(),_=n.useRef(),N=n.useRef(),j=l.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=a.store.getState().currentCall,s=o.transferring,d=o.transferSwitching,l=o.transferCalls,p=a.store.getState().island.view;if(Object.keys(n).length>0){if(e.status){var m=a.store.getState().users.extensions;switch(e.status){case"ringing":S.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected)S.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),ownerExtension:n.owner,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""}),S.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),S.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(i.getTimestampInSeconds())}),"physical"===(null===(t=null==j?void 0:j.default_device)||void 0===t?void 0:t.type)&&function(e){S.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),c.eventDispatch("phone-island-call-answered",{}),a.store.dispatch.player.stopAudioPlayer()}(n),"call"===p&&s&&S.currentCall.updateCurrentCall({transferring:!1});else if(n&&!n.connected){if(s&&!d){var f=l.find((function(e){return e.number===n.counterpartNum}));!n.connected&&f&&(S.currentCall.updateCurrentCall({transferring:!1}),c.eventDispatch("phone-island-call-transfer-failed",{}),S.currentCall.updateTransferSwitching(!1))}"REC"===(null==n?void 0:n.counterpartName)&&S.physicalRecorder.setRecordingTempVariable(!0)}n&&!n.connected&&"out"===n.direction&&S.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""});case"onhold":var h=n.counterpartName,v=n.counterpartNum,g=n.startTime;s&&v&&h&&"<unknown>"!==h&&(S.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:v,startTime:"".concat(i.getTimestampInSeconds())}),S.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:v,startTime:"".concat(g/1e3),conversationId:n.id}),S.island.setIslandView("call"));break;case"busy_ringing":c.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&u.userTotallyFree()&&(S.player.stopAudioPlayer(),S.currentCall.reset(),S.physicalRecorder.setRecordingTempVariable(!1))};return N.current=t.io("https://"+h,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),N.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(N.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),N.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),N.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),N.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),N.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(N.current.id,")"))})),N.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),N.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),N.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();N.current.volatile.emit("ping",o.withTimeout((function(){S.alerts.removeAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-close",{});var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){S.alerts.setAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.debug("Socket is unreachable!")}),7e3))}),7e3),N.current.on("connect",(function(){console.debug("Socket on: "+h+" is connected!"),N.current.emit("login",{accessKeyId:"".concat(v),token:g,uaType:C})})),N.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),N.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),N.current.on("extenUpdate",(function(e){S.users.updateExtension(e);var t=a.store.getState().users.extensions,r={};for(var c in t){var o=t[c].username,i=t[c].exten;r[o]||(r[o]=[]),r[o].push(i)}var u=r[e.username],l=e.conversations[Object.keys(e.conversations)[0]]||{};if(s.dispatchExtensions(e),d.isEmpty(l)){var p=null==u?void 0:u.some((function(e){var n,r=null===(n=t[e])||void 0===n?void 0:n.conversations;return!d.isEmpty(r)}));p||s.dispatchConversations(e)}else s.dispatchConversations(e);e.username===v&&(n(e,l),S.currentUser.updateConversations(e))})),N.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),N.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),N.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),N.current.on("serverReloaded",(function(){s.dispatchServerReload()})),N.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),N.current.on("actionNethLink",(function(e,n){s.dispatchUrlCall(e,n)})),function(){clearInterval(_.current),N.current.close()}}),[]),n.useEffect((function(){k&&(console.info("websocket reconnection"),N.current.disconnect(),N.current.connect(),b())}),[k]),f.default.createElement(f.default.Fragment,null,y)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),i=require("../utils/genericFunctions/timestamp.js"),u=require("../lib/user/extensions.js"),l=require("../utils/genericFunctions/isEmpty.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var p=require("../node_modules/react-redux/es/hooks/useDispatch.js");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=m(n);exports.Socket=function(m){var h=m.hostName,v=m.username,g=m.authToken,k=m.reload,b=m.reloadedCallback,y=m.children,C=m.uaType,S=p.useDispatch(),_=n.useRef(),N=n.useRef(),j=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=a.store.getState().currentCall,s=o.transferring,l=o.transferSwitching,d=o.transferCalls,p=a.store.getState().island.view;if(Object.keys(n).length>0){if(e.status){var m=a.store.getState().users.extensions;switch(e.status){case"ringing":S.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected&&(S.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),ownerExtension:n.owner,username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""}),S.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),S.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(i.getTimestampInSeconds())}),"physical"===(null===(t=null==j?void 0:j.default_device)||void 0===t?void 0:t.type)&&function(e){S.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),c.eventDispatch("phone-island-call-answered",{}),a.store.dispatch.player.stopAudioPlayer()}(n),"call"===p&&s&&S.currentCall.updateCurrentCall({transferring:!1})),d.length>1)S.currentCall.deleteTransferCalls();else if(n&&!n.connected){if(s&&!l){var f=d.find((function(e){return e.number===n.counterpartNum}));!n.connected&&f&&(S.currentCall.updateCurrentCall({transferring:!1}),c.eventDispatch("phone-island-call-transfer-failed",{}),S.currentCall.updateTransferSwitching(!1))}"REC"===(null==n?void 0:n.counterpartName)&&S.physicalRecorder.setRecordingTempVariable(!0)}n&&!n.connected&&"out"===n.direction&&S.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(m&&m[n.counterpartNum]&&m[n.counterpartNum].username)||""});case"onhold":var h=n.counterpartName,v=n.counterpartNum,g=n.startTime;s&&v&&h&&"<unknown>"!==h&&(S.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:v,startTime:"".concat(i.getTimestampInSeconds())}),S.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:v,startTime:"".concat(g/1e3),conversationId:n.id}),S.island.setIslandView("call"));break;case"busy_ringing":c.eventDispatch("phone-island-call-ringing",{})}}}else"online"==e.status&&u.userTotallyFree()&&(S.player.stopAudioPlayer(),S.currentCall.reset(),S.physicalRecorder.setRecordingTempVariable(!1))};return N.current=t.io("https://"+h,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),N.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(N.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),N.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),N.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),N.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),N.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(N.current.id,")"))})),N.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),N.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),N.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),_.current=setInterval((function(){var e=Date.now();N.current.volatile.emit("ping",o.withTimeout((function(){S.alerts.removeAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-close",{});var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){S.alerts.setAlert("socket_down"),c.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.debug("Socket is unreachable!")}),7e3))}),7e3),N.current.on("connect",(function(){console.debug("Socket on: "+h+" is connected!"),N.current.emit("login",{accessKeyId:"".concat(v),token:g,uaType:C})})),N.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),N.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),N.current.on("extenUpdate",(function(e){S.users.updateExtension(e);var t=a.store.getState().users.extensions,r={};for(var c in t){var o=t[c].username,i=t[c].exten;r[o]||(r[o]=[]),r[o].push(i)}var u=r[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{};if(s.dispatchExtensions(e),l.isEmpty(d)){var p=null==u?void 0:u.some((function(e){var n,r=null===(n=t[e])||void 0===n?void 0:n.conversations;return!l.isEmpty(r)}));p||s.dispatchConversations(e)}else s.dispatchConversations(e);e.username===v&&(n(e,d),S.currentUser.updateConversations(e))})),N.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),N.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),N.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),N.current.on("serverReloaded",(function(){s.dispatchServerReload()})),N.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),N.current.on("actionNethLink",(function(e,n){s.dispatchUrlCall(e,n)})),function(){clearInterval(_.current),N.current.close()}}),[]),n.useEffect((function(){k&&(console.info("websocket reconnection"),N.current.disconnect(),N.current.connect(),b())}),[k]),f.default.createElement(f.default.Fragment,null,y)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","view","island","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","checkAcceptedUpdate","acceptedSocket","addTransferCalls","type","startTime","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","inTransferCalls","find","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","deviceMap","key","user","ext","exten","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","some","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","view","island","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","checkAcceptedUpdate","acceptedSocket","addTransferCalls","type","startTime","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","find","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","deviceMap","key","user","ext","exten","push","associatedExtensions","conversations","dispatchExtensions","isEmpty","hasNonEmptyConversation","some","extConversations","dispatchConversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","link","urlType","dispatchUrlCall","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"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"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("../../node_modules/@headlessui/react/dist/components/menu/menu.js"),r=require("../../node_modules/@headlessui/react/dist/components/transition/transition.js"),n=require("../../node_modules/i18next/dist/esm/i18next.js"),o=require("../../lib/user/default_device.js"),l=require("../../utils/customHooks/useEventListener.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),d=require("../../utils/genericFunctions/localStorage.js"),p=require("../../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=u(e);exports.default=function(u){u.isTransferView;var f=s.useSelector((function(e){return e.webrtc})).sipcall,g=s.useSelector((function(e){return e.player.remoteAudio})),v=e.useState(d.getJSONItem("phone-island-audio-input-device").deviceId||null),y=v[0],h=v[1],x=e.useState(d.getJSONItem("phone-island-audio-output-device").deviceId||null),k=x[0],b=x[1],E=function(e){h(e),f.webrtcStuff.myStream?null==f||f.replaceTracks({tracks:[{type:"audio",mid:"0",capture:{deviceId:{exact:e}}}],success:function(){console.info("Audio input device switch success!"),d.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{})},error:function(e){console.error("Audio input device switch error:",e)}}):(d.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{}))};l.useEventListener("phone-island-call-audio-input-switch",(function(e){E(e.deviceId)}));var I=function(e){b(e),null==g||g.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};l.useEventListener("phone-island-call-audio-output-switch",(function(e){I(e.deviceId)}));var w=e.useState([]),N=w[0],S=w[1];e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){S(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[k,y]);var F=s.useSelector((function(e){return e.darkTheme})).theme,j=function(e){c.eventDispatch("phone-island-theme-change",{selectedTheme:e})},C=s.useSelector((function(e){return e.currentCall})).transferring,A=s.useSelector((function(e){return e.listen})).isListen;return m.default.createElement(m.default.Fragment,null,o.isWebRTC()?m.default.createElement(a.Menu,{as:"div",className:"relative inline-block text-left","data-stop-propagation":!0,"data-tooltip-id":"tooltip-left-settings-devices","data-tooltip-content":n.t("Tooltip.Settings")},m.default.createElement(a.MenuButton,{className:"pi-bg-transparent dark:enabled:hover:pi-bg-gray-600/30 enabled:hover:pi-bg-gray-200/70 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-flex pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 dark:pi-text-white pi-text-gray-600 pi-border pi-border-transparent focus:pi-ring-offset-gray-200 dark:focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0","data-stop-propagation":!0},m.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faEllipsis,className:"dark:pi-text-gray-200 pi-text-gray-700","data-stop-propagation":!0})),m.default.createElement(r.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"},m.default.createElement(a.MenuItems,{className:"".concat(C?"pi-right-[1.5rem]":"pi-right-[4.5rem]"," \n ").concat(A?"pi-max-h-[9.125rem] pi-mt-[-5.5rem]":"pi-max-h-[13.125rem] pi-mt-[-9.5rem]","\n pi-z-50 pi-absolute pi-top-0 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-bg-opacity-[0.99] dark:pi-bg-opacity-[0.99] 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"),"data-stop-propagation":!0},m.default.createElement("div",{className:"","data-stop-propagation":!0},!A&&m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4"},n.t("DropdownContent.Microphones")),N.filter((function(e){return"audioinput"===(null==e?void 0:e.kind)})).map((function(e,r){return m.default.createElement(a.MenuItem,{key:r},(function(a){var n=a.active;return m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(n?"pi-bg-gray-200 dark:pi-bg-gray-700":""),onClick:function(){return E(e.deviceId)},"data-stop-propagation":!0},y===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),!y&&"default"===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMicrophone,className:"".concat(null!==y&&""!==y&&y!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==y&&null!==y&&y===(null==e?void 0:e.deviceId)?"":null===y&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1")}),m.default.createElement("div",{className:"".concat(n?"dark:pi-text-gray-50 pi-text-gray-900":"dark:pi-text-gray-50 pi-text-gray-700")},(null==e?void 0:e.label)||"Input device ".concat(r+1)))}))})),m.default.createElement("div",{className:"pi-relative pi-py-2"},m.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},m.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600"})))),m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4","data-stop-propagation":!0},n.t("DropdownContent.Speakers")),N.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,r){return m.default.createElement(a.MenuItem,{key:r},(function(a){var n=a.active;return m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(n?"pi-bg-gray-200 dark:pi-bg-gray-700":""),onClick:function(){return I(null==e?void 0:e.deviceId)},"data-stop-propagation":!0},k===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),!k&&"default"===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faVolumeHigh,className:"".concat(null!==k&&""!==k&&k!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==k&&null!==k&&k===(null==e?void 0:e.deviceId)?"":null===k&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1")}),m.default.createElement("div",{className:"".concat(n?"dark:pi-text-gray-50 pi-text-gray-900":"dark:pi-text-gray-50 pi-text-gray-700")},(null==e?void 0:e.label)||"Output device ".concat(r+1)))}))})),m.default.createElement("div",{className:"pi-relative pi-py-2"},m.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},m.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600"}))),m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4","data-stop-propagation":!0},n.t("DropdownContent.Theme")),m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700",onClick:function(){return j("dark")},"data-stop-propagation":!0},"dark"===F&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.57rem]"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMoon,className:"".concat("dark"!==F?"pi-ml-[1.49rem] pi-mr-[0.42rem]":"pi-mr-[0.4rem]"," dark:pi-text-gray-100 pi-text-gray-600 ")}),m.default.createElement("div",null,n.t("DropdownContent.Dark"))),m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700",onClick:function(){return j("light")},"data-stop-propagation":!0},"light"===F&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.4rem]"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faSun,className:"".concat("light"!==F?"pi-ml-[1.4rem] pi-mr-[0.27rem]":"pi-mr-[0.28rem]"," dark:pi-text-gray-100 pi-text-gray-600 ")}),m.default.createElement("div",null,n.t("DropdownContent.Light"))))))):m.default.createElement("div",null),m.default.createElement(p.Tooltip,{className:"pi-z-20",id:"tooltip-left-settings-devices",place:"left"}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("../../node_modules/@headlessui/react/dist/components/menu/menu.js"),r=require("../../node_modules/@headlessui/react/dist/components/transition/transition.js"),n=require("../../node_modules/i18next/dist/esm/i18next.js"),o=require("../../lib/user/default_device.js"),l=require("../../utils/customHooks/useEventListener.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),d=require("../../utils/genericFunctions/localStorage.js"),p=require("../../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),s=require("../../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=u(e);exports.default=function(u){u.isTransferView;var f=s.useSelector((function(e){return e.webrtc})).sipcall,g=s.useSelector((function(e){return e.player.remoteAudio})),v=e.useState(d.getJSONItem("phone-island-audio-input-device").deviceId||null),y=v[0],h=v[1],x=e.useState(d.getJSONItem("phone-island-audio-output-device").deviceId||null),k=x[0],b=x[1],E=function(e){h(e),f.webrtcStuff.myStream?null==f||f.replaceTracks({tracks:[{type:"audio",mid:"0",capture:{deviceId:{exact:e}}}],success:function(){console.info("Audio input device switch success!"),d.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{})},error:function(e){console.error("Audio input device switch error:",e)}}):(d.setJSONItem("phone-island-audio-input-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-input-switched",{}))};l.useEventListener("phone-island-call-audio-input-switch",(function(e){E(e.deviceId)}));var I=function(e){b(e),null==g||g.current.setSinkId(e).then((function(){console.info("Audio output device switch success!"),d.setJSONItem("phone-island-audio-output-device",{deviceId:e}),c.eventDispatch("phone-island-call-audio-output-switched",{})})).catch((function(e){console.error("Audio output device switch error:",e)}))};l.useEventListener("phone-island-call-audio-output-switch",(function(e){I(e.deviceId)}));var w=e.useState([]),N=w[0],S=w[1];e.useEffect((function(){var e=function(){navigator.mediaDevices.enumerateDevices().then((function(e){S(e)})).catch((function(e){console.error("error",e)}))};return e(),navigator.mediaDevices.addEventListener("devicechange",e),function(){navigator.mediaDevices.removeEventListener("devicechange",e)}}),[k,y]);var F=s.useSelector((function(e){return e.darkTheme})).theme,j=function(e){c.eventDispatch("phone-island-theme-change",{selectedTheme:e})},C=s.useSelector((function(e){return e.currentCall})).transferring,A=s.useSelector((function(e){return e.listen})).isListen;return m.default.createElement(m.default.Fragment,null,o.isWebRTC()?m.default.createElement(a.Menu,{as:"div",className:"relative inline-block text-left","data-stop-propagation":!0,"data-tooltip-id":"tooltip-left-settings-devices","data-tooltip-content":n.t("Tooltip.Settings")},m.default.createElement(a.MenuButton,{className:"pi-bg-transparent dark:enabled:hover:pi-bg-gray-600/30 enabled:hover:pi-bg-gray-200/70 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-flex pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 dark:pi-text-white pi-text-gray-600 pi-border pi-border-transparent focus:pi-ring-offset-gray-200 dark:focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0","data-stop-propagation":!0},m.default.createElement(t.FontAwesomeIcon,{size:"xl",icon:i.faEllipsis,className:"dark:pi-text-gray-200 pi-text-gray-700","data-stop-propagation":!0})),m.default.createElement(r.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"},m.default.createElement(a.MenuItems,{className:"".concat(C?"pi-right-[1.5rem]":"pi-right-[4.5rem]"," \n ").concat(A?"pi-max-h-[9.125rem] pi-mt-[-8.5rem]":"pi-max-h-[13.125rem] pi-mt-[-12.5rem]","\n 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-bg-opacity-[0.99] dark:pi-bg-opacity-[0.99] 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"),"data-stop-propagation":!0},m.default.createElement("div",{className:"","data-stop-propagation":!0},!A&&m.default.createElement(m.default.Fragment,null," ",m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4"},n.t("DropdownContent.Microphones")),N.filter((function(e){return"audioinput"===(null==e?void 0:e.kind)})).map((function(e,r){return m.default.createElement(a.MenuItem,{key:r},(function(a){var n=a.active;return m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(n?"pi-bg-gray-200 dark:pi-bg-gray-700":""),onClick:function(){return E(e.deviceId)},"data-stop-propagation":!0},y===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),!y&&"default"===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMicrophone,className:"".concat(null!==y&&""!==y&&y!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==y&&null!==y&&y===(null==e?void 0:e.deviceId)?"":null===y&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1")}),m.default.createElement("div",{className:"".concat(n?"dark:pi-text-gray-50 pi-text-gray-900":"dark:pi-text-gray-50 pi-text-gray-700")},(null==e?void 0:e.label)||"Input device ".concat(r+1)))}))})),m.default.createElement("div",{className:"pi-relative pi-py-2"},m.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},m.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600"})))),m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4","data-stop-propagation":!0},n.t("DropdownContent.Speakers")),N.filter((function(e){return"audiooutput"===(null==e?void 0:e.kind)})).map((function(e,r){return m.default.createElement(a.MenuItem,{key:r},(function(a){var n=a.active;return m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 ".concat(n?"pi-bg-gray-200 dark:pi-bg-gray-700":""),onClick:function(){return I(null==e?void 0:e.deviceId)},"data-stop-propagation":!0},k===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),!k&&"default"===(null==e?void 0:e.deviceId)&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-2"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faVolumeHigh,className:"".concat(null!==k&&""!==k&&k!==(null==e?void 0:e.deviceId)?"pi-ml-6":""!==k&&null!==k&&k===(null==e?void 0:e.deviceId)?"":null===k&&"default"!==(null==e?void 0:e.deviceId)?"pi-ml-6":""," dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1")}),m.default.createElement("div",{className:"".concat(n?"dark:pi-text-gray-50 pi-text-gray-900":"dark:pi-text-gray-50 pi-text-gray-700")},(null==e?void 0:e.label)||"Output device ".concat(r+1)))}))})),m.default.createElement("div",{className:"pi-relative pi-py-2"},m.default.createElement("div",{className:"pi-absolute pi-inset-0 pi-flex pi-items-center","aria-hidden":"true"},m.default.createElement("div",{className:"pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600"}))),m.default.createElement("div",{className:"pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4","data-stop-propagation":!0},n.t("DropdownContent.Theme")),m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700",onClick:function(){return j("dark")},"data-stop-propagation":!0},"dark"===F&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.57rem]"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faMoon,className:"".concat("dark"!==F?"pi-ml-[1.49rem] pi-mr-[0.42rem]":"pi-mr-[0.4rem]"," dark:pi-text-gray-100 pi-text-gray-600 ")}),m.default.createElement("div",null,n.t("DropdownContent.Dark"))),m.default.createElement("div",{className:"pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700",onClick:function(){return j("light")},"data-stop-propagation":!0},"light"===F&&m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faCheck,className:"pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.4rem]"}),m.default.createElement(t.FontAwesomeIcon,{size:"lg",icon:i.faSun,className:"".concat("light"!==F?"pi-ml-[1.4rem] pi-mr-[0.27rem]":"pi-mr-[0.28rem]"," dark:pi-text-gray-100 pi-text-gray-600 ")}),m.default.createElement("div",null,n.t("DropdownContent.Light"))))))):m.default.createElement("div",null),m.default.createElement(p.Tooltip,{className:"pi-z-20",id:"tooltip-left-settings-devices",place:"left"}))};
2
2
  //# sourceMappingURL=DropdownContent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faCheck,\n faEllipsis,\n faMicrophone,\n faMoon,\n faSun,\n faVolumeHigh,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { eventDispatch, getJSONItem, setJSONItem, useEventListener } from '../../utils'\nimport { Tooltip } from 'react-tooltip'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ isTransferView }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(\n getJSONItem('phone-island-audio-input-device').deviceId || null,\n )\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getJSONItem('phone-island-audio-output-device').deviceId || null,\n )\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n if (sipcall.webrtcStuff.myStream) {\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n success: function () {\n console.info('Audio input device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n },\n error: function (err) {\n console.error('Audio input device switch error:', err)\n },\n })\n } else {\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n }\n }\n useEventListener('phone-island-call-audio-input-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioInput(data.deviceId)\n })\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, selectedAudioInput])\n\n const { theme } = useSelector((state: RootState) => state.darkTheme)\n\n const handleSelectTheme = (clickedTheme: string) => {\n eventDispatch('phone-island-theme-change', { selectedTheme: clickedTheme })\n }\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n\n return (\n <>\n {isWebRTC() ? (\n <Menu\n as='div'\n className='relative inline-block text-left'\n data-stop-propagation={true}\n data-tooltip-id='tooltip-left-settings-devices'\n data-tooltip-content={t('Tooltip.Settings')}\n >\n <MenuButton\n className='pi-bg-transparent dark:enabled:hover:pi-bg-gray-600/30 enabled:hover:pi-bg-gray-200/70 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-flex pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 dark:pi-text-white pi-text-gray-600 pi-border pi-border-transparent focus:pi-ring-offset-gray-200 dark:focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='dark:pi-text-gray-200 pi-text-gray-700'\n data-stop-propagation={true}\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={`${transferring ? 'pi-right-[1.5rem]' : 'pi-right-[4.5rem]'} \n ${\n isListen\n ? 'pi-max-h-[9.125rem] pi-mt-[-5.5rem]'\n : 'pi-max-h-[13.125rem] pi-mt-[-9.5rem]'\n }\n pi-z-50 pi-absolute pi-top-0 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-bg-opacity-[0.99] dark:pi-bg-opacity-[0.99] 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`}\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {!isListen && (\n <>\n {' '}\n {/* Microphones */}\n <div className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <MenuItem key={index}>\n {({ active }: any) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${\n active ? 'pi-bg-gray-200 dark:pi-bg-gray-700' : ''\n }`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1`}\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 {audioDevice?.label || `Input device ${index + 1}`}\n </div>\n </div>\n )}\n </MenuItem>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600' />\n </div>\n </div>\n </>\n )}\n\n {/* Speaker */}\n <div\n className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <MenuItem key={index}>\n {({ active }: any) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${\n active ? 'pi-bg-gray-200 dark:pi-bg-gray-700' : ''\n }`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1`}\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 {audioDevice?.label || `Output device ${index + 1}`}\n </div>\n </div>\n )}\n </MenuItem>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600' />\n </div>\n </div>\n {/* theme selection */}\n <div\n className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Theme')}\n </div>\n\n {/* dark theme */}\n <div\n className={`pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700`}\n onClick={() => handleSelectTheme('dark')}\n data-stop-propagation={true}\n >\n {theme === 'dark' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.57rem]'\n />\n )}\n <FontAwesomeIcon\n size='lg'\n icon={faMoon}\n className={`${\n theme !== 'dark' ? 'pi-ml-[1.49rem] pi-mr-[0.42rem]' : 'pi-mr-[0.4rem]'\n } dark:pi-text-gray-100 pi-text-gray-600 `}\n />\n\n <div>{t('DropdownContent.Dark')}</div>\n </div>\n\n {/* light theme */}\n <div\n className={`pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700`}\n onClick={() => handleSelectTheme('light')}\n data-stop-propagation={true}\n >\n {theme === 'light' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.4rem]'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faSun}\n className={`${\n theme !== 'light' ? 'pi-ml-[1.4rem] pi-mr-[0.27rem]' : 'pi-mr-[0.28rem]'\n } dark:pi-text-gray-100 pi-text-gray-600 `}\n />\n <div>{t('DropdownContent.Light')}</div>\n </div>\n\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <MenuItem key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </MenuItem>\n ))}*/}\n </div>\n </MenuItems>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n <Tooltip className='pi-z-20' id='tooltip-left-settings-devices' place='left' />\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n isTransferView?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default DropdownContent\n"],"names":["_a","isTransferView","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","getJSONItem","deviceId","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioInput","audioInputDevice","webrtcStuff","myStream","replaceTracks","tracks","type","mid","capture","exact","success","console","info","setJSONItem","eventDispatch","error","err","useEventListener","data","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","catch","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","deviceInfos","addEventListener","removeEventListener","theme","darkTheme","handleSelectTheme","clickedTheme","selectedTheme","transferring","currentCall","isListen","listen","React","createElement","Fragment","isWebRTC","Menu","as","className","t","MenuButton","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","MenuItems","filter","device","kind","map","audioDevice","index","MenuItem","key","active","concat","onClick","faCheck","faMicrophone","label","faVolumeHigh","faMoon","faSun","Tooltip","id","place"],"mappings":"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"}
1
+ {"version":3,"file":"DropdownContent.js","sources":["../../../src/components/SwitchInputView/DropdownContent.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps, Fragment, useState, useEffect } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faCheck,\n faEllipsis,\n faMicrophone,\n faMoon,\n faSun,\n faVolumeHigh,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Menu, MenuButton, MenuItem, MenuItems, Transition } from '@headlessui/react'\nimport { t } from 'i18next'\nimport { isWebRTC } from '../../lib/user/default_device'\nimport { eventDispatch, getJSONItem, setJSONItem, useEventListener } from '../../utils'\nimport { Tooltip } from 'react-tooltip'\n\nconst DropdownContent: FC<DropdownContentProps> = ({ isTransferView }) => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n const remoteAudioElement: any = useSelector((state: RootState) => state.player.remoteAudio)\n\n const [selectedAudioInput, setSelectedAudioInput] = useState<string | null>(\n getJSONItem('phone-island-audio-input-device').deviceId || null,\n )\n const [selectedAudioOutput, setSelectedAudioOutput] = useState<string | null>(\n getJSONItem('phone-island-audio-output-device').deviceId || null,\n )\n\n const handleClickAudioInput = (audioInputDevice: string) => {\n setSelectedAudioInput(audioInputDevice)\n\n if (sipcall.webrtcStuff.myStream) {\n sipcall?.replaceTracks({\n tracks: [\n {\n type: 'audio',\n mid: '0', // We assume mid 0 is audio\n capture: { deviceId: { exact: audioInputDevice } },\n },\n ],\n success: function () {\n console.info('Audio input device switch success!')\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n },\n error: function (err) {\n console.error('Audio input device switch error:', err)\n },\n })\n } else {\n // set device to localstorage\n setJSONItem('phone-island-audio-input-device', { deviceId: audioInputDevice })\n\n // dispatch event\n eventDispatch('phone-island-call-audio-input-switched', {})\n }\n }\n useEventListener('phone-island-call-audio-input-switch', (data: DeviceInputOutputTypes) => {\n handleClickAudioInput(data.deviceId)\n })\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, selectedAudioInput])\n\n const { theme } = useSelector((state: RootState) => state.darkTheme)\n\n const handleSelectTheme = (clickedTheme: string) => {\n eventDispatch('phone-island-theme-change', { selectedTheme: clickedTheme })\n }\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n\n return (\n <>\n {isWebRTC() ? (\n <Menu\n as='div'\n className='relative inline-block text-left'\n data-stop-propagation={true}\n data-tooltip-id='tooltip-left-settings-devices'\n data-tooltip-content={t('Tooltip.Settings')}\n >\n <MenuButton\n className='pi-bg-transparent dark:enabled:hover:pi-bg-gray-600/30 enabled:hover:pi-bg-gray-200/70 dark:focus:pi-ring-gray-500 focus:pi-ring-gray-400 pi-flex pi-font-light pi-content-center pi-items-center pi-justify-center pi-tracking-wide pi-duration-200 pi-transform pi-outline-none focus:pi-ring-2 focus:pi-z-20 focus:pi-ring-offset-2 disabled:pi-opacity-75 dark:pi-text-white pi-text-gray-600 pi-border pi-border-transparent focus:pi-ring-offset-gray-200 dark:focus:pi-ring-offset-black pi-rounded-full pi-text-sm pi-leading-4 pi-h-12 pi-w-12 pi-col-start-auto pi-transition-color pi-shrink-0'\n data-stop-propagation={true}\n >\n <FontAwesomeIcon\n size='xl'\n icon={faEllipsis}\n className='dark:pi-text-gray-200 pi-text-gray-700'\n data-stop-propagation={true}\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={`${transferring ? 'pi-right-[1.5rem]' : 'pi-right-[4.5rem]'} \n ${\n isListen\n ? 'pi-max-h-[9.125rem] pi-mt-[-8.5rem]'\n : 'pi-max-h-[13.125rem] pi-mt-[-12.5rem]'\n }\n 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-bg-opacity-[0.99] dark:pi-bg-opacity-[0.99] 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`}\n data-stop-propagation={true}\n >\n <div className='' data-stop-propagation={true}>\n {!isListen && (\n <>\n {' '}\n {/* Microphones */}\n <div className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'>\n {t('DropdownContent.Microphones')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audioinput')\n .map((audioDevice, index) => (\n <MenuItem key={index}>\n {({ active }: any) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${\n active ? 'pi-bg-gray-200 dark:pi-bg-gray-700' : ''\n }`}\n onClick={() => handleClickAudioInput(audioDevice.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioInput */}\n {selectedAudioInput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioInput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faMicrophone}\n className={`${\n selectedAudioInput !== null &&\n selectedAudioInput !== '' &&\n selectedAudioInput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioInput !== '' &&\n selectedAudioInput !== null &&\n selectedAudioInput === audioDevice?.deviceId\n ? ''\n : selectedAudioInput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1`}\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 {audioDevice?.label || `Input device ${index + 1}`}\n </div>\n </div>\n )}\n </MenuItem>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600' />\n </div>\n </div>\n </>\n )}\n\n {/* Speaker */}\n <div\n className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Speakers')}\n </div>\n {actualDevice\n .filter((device) => device?.kind === 'audiooutput')\n .map((audioDevice, index) => (\n <MenuItem key={index}>\n {({ active }: any) => (\n <div\n className={`pi-flex pi-py-2 pi-px-2 ${\n active ? 'pi-bg-gray-200 dark:pi-bg-gray-700' : ''\n }`}\n onClick={() => handleClickAudioOutput(audioDevice?.deviceId)}\n data-stop-propagation={true}\n >\n {/* faCheck on selectedAudioOutput */}\n {selectedAudioOutput === audioDevice?.deviceId && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n {/* faCheck if user has no selectedAudioInput and audioDevice is default */}\n {!selectedAudioOutput && audioDevice?.deviceId === 'default' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-2'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faVolumeHigh}\n className={`${\n selectedAudioOutput !== null &&\n selectedAudioOutput !== '' &&\n selectedAudioOutput !== audioDevice?.deviceId\n ? 'pi-ml-6'\n : selectedAudioOutput !== '' &&\n selectedAudioOutput !== null &&\n selectedAudioOutput === audioDevice?.deviceId\n ? ''\n : selectedAudioOutput === null &&\n audioDevice?.deviceId !== 'default'\n ? 'pi-ml-6'\n : ''\n } dark:pi-text-gray-100 pi-text-gray-600 pi-mr-1`}\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 {audioDevice?.label || `Output device ${index + 1}`}\n </div>\n </div>\n )}\n </MenuItem>\n ))}\n {/* Divider */}\n <div className='pi-relative pi-py-2'>\n <div\n className='pi-absolute pi-inset-0 pi-flex pi-items-center'\n aria-hidden='true'\n >\n <div className='pi-w-full pi-border-t pi-border-gray-400 dark:pi-border-gray-600' />\n </div>\n </div>\n {/* theme selection */}\n <div\n className='pi-font-semibold dark:pi-text-gray-50 pi-text-gray-600 pi-py-1 pi-px-4'\n data-stop-propagation={true}\n >\n {t('DropdownContent.Theme')}\n </div>\n\n {/* dark theme */}\n <div\n className={`pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700`}\n onClick={() => handleSelectTheme('dark')}\n data-stop-propagation={true}\n >\n {theme === 'dark' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.57rem]'\n />\n )}\n <FontAwesomeIcon\n size='lg'\n icon={faMoon}\n className={`${\n theme !== 'dark' ? 'pi-ml-[1.49rem] pi-mr-[0.42rem]' : 'pi-mr-[0.4rem]'\n } dark:pi-text-gray-100 pi-text-gray-600 `}\n />\n\n <div>{t('DropdownContent.Dark')}</div>\n </div>\n\n {/* light theme */}\n <div\n className={`pi-flex pi-py-2 pi-px-2 dark:hover:pi-text-gray-50 hover:pi-text-gray-900 dark:pi-text-gray-50 pi-text-gray-700 hover:pi-bg-gray-200 dark:hover:pi-bg-gray-700`}\n onClick={() => handleSelectTheme('light')}\n data-stop-propagation={true}\n >\n {theme === 'light' && (\n <FontAwesomeIcon\n size='lg'\n icon={faCheck}\n className='pi-text-green-600 dark:pi-text-green-400 pi-mr-[0.4rem]'\n />\n )}\n\n <FontAwesomeIcon\n size='lg'\n icon={faSun}\n className={`${\n theme !== 'light' ? 'pi-ml-[1.4rem] pi-mr-[0.27rem]' : 'pi-mr-[0.28rem]'\n } dark:pi-text-gray-100 pi-text-gray-600 `}\n />\n <div>{t('DropdownContent.Light')}</div>\n </div>\n\n {/* Video\n <div className='pi-font-semibold pi-text-gray-700 pi-py-1 pi-px-4'>\n Video\n </div>\n {actualDevice\n .filter((device) => device.kind === 'videoinput')\n .map((videoDevice, index) => (\n <MenuItem key={index}>\n {({ active }) => (\n <div className='pi-text-gray-700'>\n Webcam: {videoDevice.label || `Device ${index + 1}`}\n </div>\n )}\n </MenuItem>\n ))}*/}\n </div>\n </MenuItems>\n </Transition>\n </Menu>\n ) : (\n <div></div>\n )}\n <Tooltip className='pi-z-20' id='tooltip-left-settings-devices' place='left' />\n </>\n )\n}\n\ninterface DropdownContentProps extends ComponentProps<'div'> {\n isTransferView?: boolean\n}\n\ninterface DeviceInputOutputTypes {\n deviceId: string\n}\n\nexport default DropdownContent\n"],"names":["_a","isTransferView","sipcall","useSelector","state","webrtc","remoteAudioElement","player","remoteAudio","_b","useState","getJSONItem","deviceId","selectedAudioInput","setSelectedAudioInput","_c","selectedAudioOutput","setSelectedAudioOutput","handleClickAudioInput","audioInputDevice","webrtcStuff","myStream","replaceTracks","tracks","type","mid","capture","exact","success","console","info","setJSONItem","eventDispatch","error","err","useEventListener","data","handleClickAudioOutput","audioOutputDevice","current","setSinkId","then","catch","_d","actualDevice","setActualDevice","useEffect","checkInputOutputDevices","navigator","mediaDevices","enumerateDevices","deviceInfos","addEventListener","removeEventListener","theme","darkTheme","handleSelectTheme","clickedTheme","selectedTheme","transferring","currentCall","isListen","listen","React","createElement","Fragment","isWebRTC","Menu","as","className","t","MenuButton","FontAwesomeIcon","size","icon","faEllipsis","Transition","enter","enterFrom","enterTo","leave","leaveFrom","leaveTo","MenuItems","filter","device","kind","map","audioDevice","index","MenuItem","key","active","concat","onClick","faCheck","faMicrophone","label","faVolumeHigh","faMoon","faSun","Tooltip","id","place"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-4{right:1rem}.pi-right-\[-0\.5rem\]{right:-.5rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-\[38\%\]{top:38%}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-auto{margin-left:auto;margin-right:auto}.pi-my-4{margin-bottom:1rem;margin-top:1rem}.-pi-mt-10{margin-top:-2.5rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-11{margin-left:2.75rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-4{margin-left:1rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-8{margin-left:2rem}.pi-ml-\[-0\.15rem\]{margin-left:-.15rem}.pi-ml-\[-7\.05rem\]{margin-left:-7.05rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-0\.25rem\]{margin-top:-.25rem}.pi-mt-\[-0\.8rem\]{margin-top:-.8rem}.pi-mt-\[-5\.5rem\]{margin-top:-5.5rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mt-\[3rem\]{margin-top:3rem}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-3{height:.75rem}.pi-h-4{height:1rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-3{width:.75rem}.pi-w-4{width:1rem}.pi-w-44{width:11rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-9{width:2.25rem}.pi-w-fit{width:-moz-fit-content;width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-40{max-width:10rem}.pi-max-w-lg{max-width:32rem}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-1\/2{--tw-translate-y:-50%}.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-scroll{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.pi-animate-scroll-text{animation:pi-scroll 10s linear infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-auto{overflow:auto}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.pi-bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.pi-bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-500{--tw-gradient-to:#6b7280 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-9{padding-top:2.25rem}.pi-text-center{text-align:center}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.pi-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.pi-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-placeholder-gray-800::placeholder{--tw-placeholder-opacity:1;color:rgb(31 41 55/var(--tw-placeholder-opacity))}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.pi-shadow-lg,.pi-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.hover\:pi-bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:pi-text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:pi-text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.dark\:pi-bg-green-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity))}.dark\:pi-bg-red-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.dark\:pi-text-red-700:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:pi-placeholder-gray-200:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(229 231 235/var(--tw-placeholder-opacity))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:hover\:pi-bg-green-300:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity))}.dark\:hover\:pi-bg-red-300:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-4{right:1rem}.pi-right-\[-1\.28rem\]{right:-1.28rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-\[8\%\]{top:8%}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-auto{margin-left:auto;margin-right:auto}.pi-my-4{margin-bottom:1rem;margin-top:1rem}.-pi-mt-10{margin-top:-2.5rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-11{margin-left:2.75rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-4{margin-left:1rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-8{margin-left:2rem}.pi-ml-\[-0\.15rem\]{margin-left:-.15rem}.pi-ml-\[-7\.05rem\]{margin-left:-7.05rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-0\.25rem\]{margin-top:-.25rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-\[3rem\]{margin-top:3rem}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-3{height:.75rem}.pi-h-4{height:1rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-\[1\.1rem\]{height:1.1rem}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-3{width:.75rem}.pi-w-4{width:1rem}.pi-w-44{width:11rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-9{width:2.25rem}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-40{max-width:10rem}.pi-max-w-lg{max-width:32rem}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-\[57\%\]{--tw-translate-y:-57%}.pi--rotate-45,.pi--translate-y-\[57\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-scroll{0%{transform:translateX(0)}to{transform:translateX(-100%)}}.pi-animate-scroll-text{animation:pi-scroll 10s linear infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-auto{overflow:auto}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-500{--tw-gradient-to:#6b7280 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-4{padding-right:1rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-9{padding-top:2.25rem}.pi-text-center{text-align:center}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.pi-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-800::placeholder{--tw-placeholder-opacity:1;color:rgb(31 41 55/var(--tw-placeholder-opacity,1))}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.pi-shadow-lg,.pi-shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.hover\:pi-text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-text-red-800:hover{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-red-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-red-700:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-200:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(229 231 235/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-green-300:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-red-300:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),s=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{data:{browser_permissions:{active:!1,break:!0,message:"The browser doesn't have permission to access camera or microphone.",type:"browser_permissions"},user_permissions:{active:!1,break:!0,message:"You must accept audio and video permissions.",type:"user_permissions"},unknown_media_permissions:{active:!1,break:!0,message:"Web Phone can't access audio or camera on this device.",type:"unknown_media_permissions"},webrtc_down:{active:!1,break:!0,message:"Web Phone connection is down.",type:"webrtc_down"},socket_down:{active:!1,break:!1,message:"Server connection is down.",type:"socket_down"},busy_camera:{active:!1,message:"Camera is used by another application.",type:"busy_camera"},call_transfered:{active:!1,success:!0,message:"Call transferred successfully.",type:"call_transfered"}},status:{activeAlertsCount:0,breakActiveAlertsCount:0}},reducers:{setAlert:function(s,t){var a;if(!s.data[t].active){var r=s.status.activeAlertsCount+1,i=s.data[t].break?s.status.breakActiveAlertsCount+1:s.status.breakActiveAlertsCount;return e.__assign(e.__assign({},s),{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!0}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})})}},removeAlert:function(s,t){var a;if(s.data[t].active){var r=s.status.activeAlertsCount-1,i=s.data[t].break?s.status.breakActiveAlertsCount-1:s.status.breakActiveAlertsCount;return{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!1,activeAlertsCount:r,breakActiveAlertsCount:i}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})}}},removeAllAlerts:function(e){for(var s in e.data)e.data[s].active=!1;e.status.activeAlertsCount=0,e.status.breakActiveAlertsCount=0}}});exports.alerts=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),s=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{data:{browser_permissions:{active:!1,break:!0,message:"No microphone or camera permissions.",type:"browser_permissions"},user_permissions:{active:!1,break:!0,message:"You must accept audio and video permissions.",type:"user_permissions"},unknown_media_permissions:{active:!1,break:!0,message:"Unknown audio or camera permissions.",type:"unknown_media_permissions"},webrtc_down:{active:!1,break:!0,message:"Web Phone connection is down.",type:"webrtc_down"},socket_down:{active:!1,break:!1,message:"Server connection is down.",type:"socket_down"},busy_camera:{active:!1,message:"Camera is already used.",type:"busy_camera"},call_transfered:{active:!1,success:!0,message:"Call transferred successfully.",type:"call_transfered"}},status:{activeAlertsCount:0,breakActiveAlertsCount:0}},reducers:{setAlert:function(s,t){var a;if(!s.data[t].active){var r=s.status.activeAlertsCount+1,i=s.data[t].break?s.status.breakActiveAlertsCount+1:s.status.breakActiveAlertsCount;return e.__assign(e.__assign({},s),{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!0}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})})}},removeAlert:function(s,t){var a;if(s.data[t].active){var r=s.status.activeAlertsCount-1,i=s.data[t].break?s.status.breakActiveAlertsCount-1:s.status.breakActiveAlertsCount;return{data:e.__assign(e.__assign({},s.data),(a={},a[t]=e.__assign(e.__assign({},s.data[t]),{active:!1,activeAlertsCount:r,breakActiveAlertsCount:i}),a)),status:e.__assign(e.__assign({},s.status),{activeAlertsCount:r,breakActiveAlertsCount:i})}}},removeAllAlerts:function(e){for(var s in e.data)e.data[s].active=!1;e.status.activeAlertsCount=0,e.status.breakActiveAlertsCount=0}}});exports.alerts=s;
2
2
  //# sourceMappingURL=alerts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"alerts.js","sources":["../../src/models/alerts.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: AlertsTypes = {\n data: {\n // Alerts that break calls\n browser_permissions: {\n active: false,\n break: true,\n message: \"The browser doesn't have permission to access camera or microphone.\",\n type: 'browser_permissions',\n },\n user_permissions: {\n active: false,\n break: true,\n message: 'You must accept audio and video permissions.',\n type: 'user_permissions',\n },\n unknown_media_permissions: {\n active: false,\n break: true,\n message: \"Web Phone can't access audio or camera on this device.\",\n type: 'unknown_media_permissions',\n },\n webrtc_down: {\n active: false,\n break: true,\n message: 'Web Phone connection is down.',\n type: 'webrtc_down',\n },\n socket_down: {\n active: false,\n break: false,\n message: 'Server connection is down.',\n type: 'socket_down',\n },\n // Warning alerts\n busy_camera: {\n active: false,\n message: 'Camera is used by another application.',\n type: 'busy_camera',\n },\n // Success alerts\n call_transfered: {\n active: false,\n success: true,\n message: 'Call transferred successfully.',\n type: 'call_transfered',\n },\n },\n status: {\n activeAlertsCount: 0,\n breakActiveAlertsCount: 0,\n },\n}\n\nexport const alerts = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setAlert: (state, payload: AlertsKeys) => {\n if (!state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount + 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount + 1\n : state.status.breakActiveAlertsCount\n\n return {\n ...state,\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: true,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n removeAlert: (state, payload: AlertsKeys) => {\n if (state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount - 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount - 1\n : state.status.breakActiveAlertsCount\n\n return {\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: false,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n //remove all alerts\n removeAllAlerts: (state) => {\n for (const key in state.data) {\n state.data[key].active = false\n }\n state.status.activeAlertsCount = 0\n state.status.breakActiveAlertsCount = 0\n },\n },\n})\n\nexport type AlertsTypes = {\n data: { [key in AlertsKeys]: AlertTypes }\n status: {\n activeAlertsCount: number\n breakActiveAlertsCount: number\n }\n}\n\ntype AlertsKeys =\n | 'browser_permissions'\n | 'user_permissions'\n | 'busy_camera'\n | 'unknown_media_permissions'\n | 'webrtc_down'\n | 'socket_down'\n | 'call_transfered'\n\nexport interface AlertTypes {\n active: boolean\n message: string\n break?: boolean // This means that it brokes WebRTC audio calls or Socket connection\n success?: boolean\n type: string\n}\n"],"names":["alerts","createModel","state","data","browser_permissions","active","break","message","type","user_permissions","unknown_media_permissions","webrtc_down","socket_down","busy_camera","call_transfered","success","status","activeAlertsCount","breakActiveAlertsCount","reducers","setAlert","payload","newActiveAlertsCount","newBreakActiveAlertsCount","__assign","_a","removeAlert","removeAllAlerts","key"],"mappings":"wHA2DaA,4DAAoBC,aAAXA,CAAyB,CAC7CC,MAtDgC,CAChCC,KAAM,CAEJC,oBAAqB,CACnBC,QAAQ,EACRC,OAAO,EACPC,QAAS,sEACTC,KAAM,uBAERC,iBAAkB,CAChBJ,QAAQ,EACRC,OAAO,EACPC,QAAS,+CACTC,KAAM,oBAERE,0BAA2B,CACzBL,QAAQ,EACRC,OAAO,EACPC,QAAS,yDACTC,KAAM,6BAERG,YAAa,CACXN,QAAQ,EACRC,OAAO,EACPC,QAAS,gCACTC,KAAM,eAERI,YAAa,CACXP,QAAQ,EACRC,OAAO,EACPC,QAAS,6BACTC,KAAM,eAGRK,YAAa,CACXR,QAAQ,EACRE,QAAS,yCACTC,KAAM,eAGRM,gBAAiB,CACfT,QAAQ,EACRU,SAAS,EACTR,QAAS,iCACTC,KAAM,oBAGVQ,OAAQ,CACNC,kBAAmB,EACnBC,uBAAwB,IAM1BC,SAAU,CACRC,SAAU,SAAClB,EAAOmB,SAChB,IAAKnB,EAAMC,KAAKkB,GAAShB,OAAQ,CAC/B,IAAMiB,EAAuBpB,EAAMc,OAAOC,kBAAoB,EACxDM,EAA4BrB,EAAMC,KAAKkB,GAASf,MAClDJ,EAAMc,OAAOE,uBAAyB,EACtChB,EAAMc,OAAOE,uBAEjB,OAAAM,EAAAA,SAAAA,EAAAA,SAAA,GACKtB,GAAK,CACRC,KAAIqB,WAAAA,EAAAA,SAAA,CAAA,EACCtB,EAAMC,OACRsB,EAAA,CAAA,EAAAA,EAAAJ,4BACInB,EAAMC,KAAKkB,IAAQ,CACtBhB,QAAQ,IAAIoB,IAGhBT,OAAMQ,WAAAA,EAAAA,SAAA,CAAA,EACDtB,EAAMc,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,KAG7B,CACF,EACDG,YAAa,SAACxB,EAAOmB,SACnB,GAAInB,EAAMC,KAAKkB,GAAShB,OAAQ,CAC9B,IAAMiB,EAAuBpB,EAAMc,OAAOC,kBAAoB,EACxDM,EAA4BrB,EAAMC,KAAKkB,GAASf,MAClDJ,EAAMc,OAAOE,uBAAyB,EACtChB,EAAMc,OAAOE,uBAEjB,MAAO,CACLf,KAAIqB,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACCtB,EAAMC,OAAIsB,EAAA,CAAA,EAAAA,EACZJ,GACIG,EAAAA,SAAAA,EAAAA,SAAA,GAAAtB,EAAMC,KAAKkB,IACd,CAAAhB,QAAQ,EACRY,kBAAmBK,EACnBJ,uBAAwBK,IAE3BE,IACDT,OACKQ,EAAAA,SAAAA,WAAA,CAAA,EAAAtB,EAAMc,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,IAG7B,CACF,EAEDI,gBAAiB,SAACzB,GAChB,IAAK,IAAM0B,KAAO1B,EAAMC,KACtBD,EAAMC,KAAKyB,GAAKvB,QAAS,EAE3BH,EAAMc,OAAOC,kBAAoB,EACjCf,EAAMc,OAAOE,uBAAyB,CACvC"}
1
+ {"version":3,"file":"alerts.js","sources":["../../src/models/alerts.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState: AlertsTypes = {\n data: {\n // Alerts that break calls\n browser_permissions: {\n active: false,\n break: true,\n message: \"No microphone or camera permissions.\",\n type: 'browser_permissions',\n },\n user_permissions: {\n active: false,\n break: true,\n message: 'You must accept audio and video permissions.',\n type: 'user_permissions',\n },\n unknown_media_permissions: {\n active: false,\n break: true,\n message: \"Unknown audio or camera permissions.\",\n type: 'unknown_media_permissions',\n },\n webrtc_down: {\n active: false,\n break: true,\n message: 'Web Phone connection is down.',\n type: 'webrtc_down',\n },\n socket_down: {\n active: false,\n break: false,\n message: 'Server connection is down.',\n type: 'socket_down',\n },\n // Warning alerts\n busy_camera: {\n active: false,\n message: 'Camera is already used.',\n type: 'busy_camera',\n },\n // Success alerts\n call_transfered: {\n active: false,\n success: true,\n message: 'Call transferred successfully.',\n type: 'call_transfered',\n },\n },\n status: {\n activeAlertsCount: 0,\n breakActiveAlertsCount: 0,\n },\n}\n\nexport const alerts = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n setAlert: (state, payload: AlertsKeys) => {\n if (!state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount + 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount + 1\n : state.status.breakActiveAlertsCount\n\n return {\n ...state,\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: true,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n removeAlert: (state, payload: AlertsKeys) => {\n if (state.data[payload].active) {\n const newActiveAlertsCount = state.status.activeAlertsCount - 1\n const newBreakActiveAlertsCount = state.data[payload].break\n ? state.status.breakActiveAlertsCount - 1\n : state.status.breakActiveAlertsCount\n\n return {\n data: {\n ...state.data,\n [payload]: {\n ...state.data[payload],\n active: false,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n },\n status: {\n ...state.status,\n activeAlertsCount: newActiveAlertsCount,\n breakActiveAlertsCount: newBreakActiveAlertsCount,\n },\n }\n }\n },\n //remove all alerts\n removeAllAlerts: (state) => {\n for (const key in state.data) {\n state.data[key].active = false\n }\n state.status.activeAlertsCount = 0\n state.status.breakActiveAlertsCount = 0\n },\n },\n})\n\nexport type AlertsTypes = {\n data: { [key in AlertsKeys]: AlertTypes }\n status: {\n activeAlertsCount: number\n breakActiveAlertsCount: number\n }\n}\n\ntype AlertsKeys =\n | 'browser_permissions'\n | 'user_permissions'\n | 'busy_camera'\n | 'unknown_media_permissions'\n | 'webrtc_down'\n | 'socket_down'\n | 'call_transfered'\n\nexport interface AlertTypes {\n active: boolean\n message: string\n break?: boolean // This means that it brokes WebRTC audio calls or Socket connection\n success?: boolean\n type: string\n}\n"],"names":["alerts","createModel","state","data","browser_permissions","active","break","message","type","user_permissions","unknown_media_permissions","webrtc_down","socket_down","busy_camera","call_transfered","success","status","activeAlertsCount","breakActiveAlertsCount","reducers","setAlert","payload","newActiveAlertsCount","newBreakActiveAlertsCount","__assign","_a","removeAlert","removeAllAlerts","key"],"mappings":"wHA2DaA,4DAAoBC,aAAXA,CAAyB,CAC7CC,MAtDgC,CAChCC,KAAM,CAEJC,oBAAqB,CACnBC,QAAQ,EACRC,OAAO,EACPC,QAAS,uCACTC,KAAM,uBAERC,iBAAkB,CAChBJ,QAAQ,EACRC,OAAO,EACPC,QAAS,+CACTC,KAAM,oBAERE,0BAA2B,CACzBL,QAAQ,EACRC,OAAO,EACPC,QAAS,uCACTC,KAAM,6BAERG,YAAa,CACXN,QAAQ,EACRC,OAAO,EACPC,QAAS,gCACTC,KAAM,eAERI,YAAa,CACXP,QAAQ,EACRC,OAAO,EACPC,QAAS,6BACTC,KAAM,eAGRK,YAAa,CACXR,QAAQ,EACRE,QAAS,0BACTC,KAAM,eAGRM,gBAAiB,CACfT,QAAQ,EACRU,SAAS,EACTR,QAAS,iCACTC,KAAM,oBAGVQ,OAAQ,CACNC,kBAAmB,EACnBC,uBAAwB,IAM1BC,SAAU,CACRC,SAAU,SAAClB,EAAOmB,SAChB,IAAKnB,EAAMC,KAAKkB,GAAShB,OAAQ,CAC/B,IAAMiB,EAAuBpB,EAAMc,OAAOC,kBAAoB,EACxDM,EAA4BrB,EAAMC,KAAKkB,GAASf,MAClDJ,EAAMc,OAAOE,uBAAyB,EACtChB,EAAMc,OAAOE,uBAEjB,OAAAM,EAAAA,SAAAA,EAAAA,SAAA,GACKtB,GAAK,CACRC,KAAIqB,WAAAA,EAAAA,SAAA,CAAA,EACCtB,EAAMC,OACRsB,EAAA,CAAA,EAAAA,EAAAJ,4BACInB,EAAMC,KAAKkB,IAAQ,CACtBhB,QAAQ,IAAIoB,IAGhBT,OAAMQ,WAAAA,EAAAA,SAAA,CAAA,EACDtB,EAAMc,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,KAG7B,CACF,EACDG,YAAa,SAACxB,EAAOmB,SACnB,GAAInB,EAAMC,KAAKkB,GAAShB,OAAQ,CAC9B,IAAMiB,EAAuBpB,EAAMc,OAAOC,kBAAoB,EACxDM,EAA4BrB,EAAMC,KAAKkB,GAASf,MAClDJ,EAAMc,OAAOE,uBAAyB,EACtChB,EAAMc,OAAOE,uBAEjB,MAAO,CACLf,KAAIqB,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EACCtB,EAAMC,OAAIsB,EAAA,CAAA,EAAAA,EACZJ,GACIG,EAAAA,SAAAA,EAAAA,SAAA,GAAAtB,EAAMC,KAAKkB,IACd,CAAAhB,QAAQ,EACRY,kBAAmBK,EACnBJ,uBAAwBK,IAE3BE,IACDT,OACKQ,EAAAA,SAAAA,WAAA,CAAA,EAAAtB,EAAMc,QACT,CAAAC,kBAAmBK,EACnBJ,uBAAwBK,IAG7B,CACF,EAEDI,gBAAiB,SAACzB,GAChB,IAAK,IAAM0B,KAAO1B,EAAMC,KACtBD,EAAMC,KAAKyB,GAAKvB,QAAS,EAE3BH,EAAMc,OAAOC,kBAAoB,EACjCf,EAAMc,OAAOE,uBAAyB,CACvC"}
@@ -312,6 +312,61 @@ export declare const currentCall: {
312
312
  ownerExtension: string;
313
313
  isRecording: boolean;
314
314
  };
315
+ deleteTransferCalls: (state: {
316
+ displayName: string;
317
+ username: string;
318
+ number: string;
319
+ incomingSocket: boolean;
320
+ incomingWebRTC: boolean;
321
+ incoming: boolean;
322
+ acceptedSocket: boolean;
323
+ acceptedWebRTC: boolean;
324
+ accepted: boolean;
325
+ outgoingSocket: boolean;
326
+ outgoingWebRTC: boolean;
327
+ parked: boolean;
328
+ outgoing: boolean;
329
+ startTime: string;
330
+ muted: boolean;
331
+ paused: boolean;
332
+ keypadValue: string;
333
+ conversationId: string;
334
+ transferring: boolean;
335
+ transferringName: string;
336
+ transferringNumber: string;
337
+ transferringStartTime: string;
338
+ transferSwitching: boolean;
339
+ transferCalls: any[];
340
+ ownerExtension: string;
341
+ isRecording: boolean;
342
+ }) => {
343
+ transferCalls: any[];
344
+ displayName: string;
345
+ username: string;
346
+ number: string;
347
+ incomingSocket: boolean;
348
+ incomingWebRTC: boolean;
349
+ incoming: boolean;
350
+ acceptedSocket: boolean;
351
+ acceptedWebRTC: boolean;
352
+ accepted: boolean;
353
+ outgoingSocket: boolean;
354
+ outgoingWebRTC: boolean;
355
+ parked: boolean;
356
+ outgoing: boolean;
357
+ startTime: string;
358
+ muted: boolean;
359
+ paused: boolean;
360
+ keypadValue: string;
361
+ conversationId: string;
362
+ transferring: boolean;
363
+ transferringName: string;
364
+ transferringNumber: string;
365
+ transferringStartTime: string;
366
+ transferSwitching: boolean;
367
+ ownerExtension: string;
368
+ isRecording: boolean;
369
+ };
315
370
  setParked: (state: {
316
371
  displayName: string;
317
372
  username: string;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),n=require("../static/incoming_ringtone.js"),t=require("../events/CallEvents.js");require("react");var i=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js"),require("../node_modules/react-redux/es/index.js");var a={displayName:"",username:"",number:"",incomingSocket:!1,incomingWebRTC:!1,incoming:!1,acceptedSocket:!1,acceptedWebRTC:!1,accepted:!1,outgoingSocket:!1,outgoingWebRTC:!1,parked:!1,outgoing:!1,startTime:"",muted:!1,paused:!1,keypadValue:"",conversationId:"",transferring:!1,transferringName:"",transferringNumber:"",transferringStartTime:"",transferSwitching:!1,transferCalls:new Array,ownerExtension:"",isRecording:!1},s=r.createModel()({state:a,reducers:{updateCurrentCall:function(r,n){return e.__assign(e.__assign(e.__assign({},r),n),{transferCalls:r.transferCalls})},updateKeypadValue:function(r,n){return e.__assign(e.__assign({},r),{keypadValue:n})},updateTransferring:function(r,n){return e.__assign(e.__assign({},r),{transferring:n})},updateTransferSwitching:function(r,n){return e.__assign(e.__assign({},r),{transferSwitching:n})},addTransferCalls:function(r,n){return r.transferCalls.find((function(e){return e.number===n.number}))?r:e.__assign(e.__assign({},r),{transferCalls:e.__spreadArray(e.__spreadArray([],r.transferCalls,!0),[n],!1)})},setParked:function(e,r){return e.parked=r,e},updateRecordingStatus:function(e,r){return e.isRecording=r,e},updateStartTime:function(e,r){return e.startTime=r,e},reset:function(){return a}},effects:function(r){return{checkIncomingUpdatePlay:function(t,i){var a,s,u,c;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&t.incomingWebRTC||"physical"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&t.incomingSocket||"nethlink"===(null===(c=null===(u=null==i?void 0:i.currentUser)||void 0===u?void 0:u.default_device)||void 0===c?void 0:c.type)&&(null==t?void 0:t.incomingWebRTC))&&(t.incoming=!0,r.player.updateStartAudioPlayer({src:n.default,loop:!0})),r.currentCall.updateCurrentCall(e.__assign({},t))},checkOutgoingUpdate:function(n,i){var a,s,u;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&n.outgoingWebRTC||"physical"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&n.outgoingSocket||"nethlink"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&n.outgoingWebRTC)&&(n.outgoing=!0,t.dispatchOutgoingCallStarted(n.displayName,n.number)),r.currentCall.updateCurrentCall(e.__assign({},n))},checkAcceptedUpdate:function(n,t){var a,s,u;("webrtc"===(null===(a=t.currentUser.default_device)||void 0===a?void 0:a.type)&&n.acceptedWebRTC||"physical"===(null===(s=t.currentUser.default_device)||void 0===s?void 0:s.type)&&n.acceptedSocket||"nethlink"===(null===(u=t.currentUser.default_device)||void 0===u?void 0:u.type)&&n.acceptedWebRTC)&&(n.accepted=!0,i.eventDispatch("phone-island-call-answered",{})),r.currentCall.updateCurrentCall(e.__assign({},n))}}}});exports.currentCall=s;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),r=require("../node_modules/@rematch/core/dist/core.esm.js"),n=require("../static/incoming_ringtone.js"),t=require("../events/CallEvents.js");require("react");var i=require("../utils/genericFunctions/eventDispatch.js");require("../store/index.js"),require("../node_modules/react-redux/es/index.js");var a={displayName:"",username:"",number:"",incomingSocket:!1,incomingWebRTC:!1,incoming:!1,acceptedSocket:!1,acceptedWebRTC:!1,accepted:!1,outgoingSocket:!1,outgoingWebRTC:!1,parked:!1,outgoing:!1,startTime:"",muted:!1,paused:!1,keypadValue:"",conversationId:"",transferring:!1,transferringName:"",transferringNumber:"",transferringStartTime:"",transferSwitching:!1,transferCalls:new Array,ownerExtension:"",isRecording:!1},s=r.createModel()({state:a,reducers:{updateCurrentCall:function(r,n){return e.__assign(e.__assign(e.__assign({},r),n),{transferCalls:r.transferCalls})},updateKeypadValue:function(r,n){return e.__assign(e.__assign({},r),{keypadValue:n})},updateTransferring:function(r,n){return e.__assign(e.__assign({},r),{transferring:n})},updateTransferSwitching:function(r,n){return e.__assign(e.__assign({},r),{transferSwitching:n})},addTransferCalls:function(r,n){return r.transferCalls.find((function(e){return e.number===n.number}))?r:e.__assign(e.__assign({},r),{transferCalls:e.__spreadArray(e.__spreadArray([],r.transferCalls,!0),[n],!1)})},deleteTransferCalls:function(r){return e.__assign(e.__assign({},r),{transferCalls:r.transferCalls.filter((function(e){return"transferred"!==e.type}))})},setParked:function(e,r){return e.parked=r,e},updateRecordingStatus:function(e,r){return e.isRecording=r,e},updateStartTime:function(e,r){return e.startTime=r,e},reset:function(){return a}},effects:function(r){return{checkIncomingUpdatePlay:function(t,i){var a,s,u,c;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&t.incomingWebRTC||"physical"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&t.incomingSocket||"nethlink"===(null===(c=null===(u=null==i?void 0:i.currentUser)||void 0===u?void 0:u.default_device)||void 0===c?void 0:c.type)&&(null==t?void 0:t.incomingWebRTC))&&(t.incoming=!0,r.player.updateStartAudioPlayer({src:n.default,loop:!0})),r.currentCall.updateCurrentCall(e.__assign({},t))},checkOutgoingUpdate:function(n,i){var a,s,u;("webrtc"===(null===(a=i.currentUser.default_device)||void 0===a?void 0:a.type)&&n.outgoingWebRTC||"physical"===(null===(s=i.currentUser.default_device)||void 0===s?void 0:s.type)&&n.outgoingSocket||"nethlink"===(null===(u=i.currentUser.default_device)||void 0===u?void 0:u.type)&&n.outgoingWebRTC)&&(n.outgoing=!0,t.dispatchOutgoingCallStarted(n.displayName,n.number)),r.currentCall.updateCurrentCall(e.__assign({},n))},checkAcceptedUpdate:function(n,t){var a,s,u;("webrtc"===(null===(a=t.currentUser.default_device)||void 0===a?void 0:a.type)&&n.acceptedWebRTC||"physical"===(null===(s=t.currentUser.default_device)||void 0===s?void 0:s.type)&&n.acceptedSocket||"nethlink"===(null===(u=t.currentUser.default_device)||void 0===u?void 0:u.type)&&n.acceptedWebRTC)&&(n.accepted=!0,i.eventDispatch("phone-island-call-answered",{})),r.currentCall.updateCurrentCall(e.__assign({},n))}}}});exports.currentCall=s;
2
2
  //# sourceMappingURL=currentCall.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport incomingRingtone from '../static/incoming_ringtone'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.incomingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Update local player and play the audio\n dispatch.player.updateStartAudioPlayer({ src: incomingRingtone, loop: true })\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","currentCall","createModel","state","reducers","updateCurrentCall","payload","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","setParked","updateRecordingStatus","updateStartTime","reset","effects","dispatch","checkIncomingUpdatePlay","rootState","_a","currentUser","default_device","type","_b","_d","_c","player","updateStartAudioPlayer","src","incomingRingtone","loop","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"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"}
1
+ {"version":3,"file":"currentCall.js","sources":["../../src/models/currentCall.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport incomingRingtone from '../static/incoming_ringtone'\nimport { dispatchOutgoingCallStarted } from '../events/index'\nimport { eventDispatch } from '../utils'\n\nconst defaultState = {\n displayName: '',\n username: '',\n number: '',\n incomingSocket: false,\n incomingWebRTC: false,\n incoming: false,\n acceptedSocket: false,\n acceptedWebRTC: false,\n accepted: false,\n outgoingSocket: false,\n outgoingWebRTC: false,\n parked: false,\n outgoing: false,\n startTime: '',\n muted: false,\n paused: false,\n keypadValue: '',\n conversationId: '',\n transferring: false,\n transferringName: '',\n transferringNumber: '',\n transferringStartTime: '',\n transferSwitching: false,\n transferCalls: new Array(),\n ownerExtension: '',\n isRecording: false,\n}\n\nexport const currentCall = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updateCurrentCall: (state, payload: CurrentCallTypes) => {\n return {\n ...state,\n ...payload,\n transferCalls: state.transferCalls,\n }\n },\n updateKeypadValue: (state, payload: string) => {\n return {\n ...state,\n keypadValue: payload,\n }\n },\n updateTransferring: (state, payload: boolean) => {\n return {\n ...state,\n transferring: payload,\n }\n },\n updateTransferSwitching: (state, payload: boolean) => {\n return {\n ...state,\n transferSwitching: payload,\n }\n },\n addTransferCalls: (state, payload: TransferCallsTypes) => {\n if (state.transferCalls.find((item) => item.number === payload.number)) {\n return state\n } else {\n return {\n ...state,\n transferCalls: [...state.transferCalls, payload],\n }\n }\n },\n deleteTransferCalls: (state) => {\n return {\n ...state,\n transferCalls: state.transferCalls.filter((item) => item.type !== 'transferred'),\n }\n },\n setParked: (state, payload: boolean) => {\n state.parked = payload\n return state\n },\n updateRecordingStatus: (state, payload: boolean) => {\n state.isRecording = payload\n return state\n },\n updateStartTime: (state, payload: string) => {\n state.startTime = payload\n return state\n },\n reset: () => {\n return defaultState\n },\n },\n effects: (dispatch) => ({\n checkIncomingUpdatePlay: (payload: CurrentCallTypes, rootState) => {\n // Check call type and incoming confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.incomingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.incomingSocket) ||\n (rootState?.currentUser?.default_device?.type === 'nethlink' && payload?.incomingWebRTC)\n ) {\n payload.incoming = true\n\n // Update local player and play the audio\n dispatch.player.updateStartAudioPlayer({ src: incomingRingtone, loop: true })\n }\n // Update the current call values and set incoming\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkOutgoingUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and outgoing confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.outgoingWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.outgoingSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.outgoingWebRTC)\n ) {\n payload.outgoing = true\n // Dispatch an event for outgoing call\n dispatchOutgoingCallStarted(payload.displayName, payload.number)\n }\n // Update the current call values and set outgoing\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n checkAcceptedUpdate: (payload: CurrentCallTypes, rootState) => {\n // Check call type and accepted confirmation source\n if (\n (rootState.currentUser.default_device?.type === 'webrtc' && payload.acceptedWebRTC) ||\n (rootState.currentUser.default_device?.type === 'physical' && payload.acceptedSocket) ||\n (rootState.currentUser.default_device?.type === 'nethlink' && payload.acceptedWebRTC)\n ) {\n payload.accepted = true\n eventDispatch('phone-island-call-answered', {})\n }\n // Update the current call values\n dispatch.currentCall.updateCurrentCall({\n ...payload,\n })\n },\n }),\n})\n\nexport type TransferCallsTypes = {\n type: 'transferred' | 'destination'\n displayName: string\n number: string\n startTime: string\n}\n\nexport interface CurrentCallTypes {\n displayName?: string\n username?: string\n number?: string\n incomingSocket?: boolean\n incomingWebRTC?: boolean\n parked?: boolean\n incoming?: boolean\n acceptedSocket?: boolean\n acceptedWebRTC?: boolean\n accepted?: boolean\n outgoingSocket?: boolean\n outgoingWebRTC?: boolean\n outgoing?: boolean\n startTime?: string\n muted?: boolean\n paused?: boolean\n conversationId?: string\n transferring?: boolean\n transferringName?: string\n transferringNumber?: string\n transferringStartTime?: string\n transferSwitching?: boolean\n transferCalls?: TransferCallsTypes[]\n ownerExtension?: string\n isRecording?: boolean\n}\n"],"names":["defaultState","displayName","username","number","incomingSocket","incomingWebRTC","incoming","acceptedSocket","acceptedWebRTC","accepted","outgoingSocket","outgoingWebRTC","parked","outgoing","startTime","muted","paused","keypadValue","conversationId","transferring","transferringName","transferringNumber","transferringStartTime","transferSwitching","transferCalls","Array","ownerExtension","isRecording","currentCall","createModel","state","reducers","updateCurrentCall","payload","__assign","updateKeypadValue","updateTransferring","updateTransferSwitching","addTransferCalls","find","item","__spreadArray","deleteTransferCalls","filter","type","setParked","updateRecordingStatus","updateStartTime","reset","effects","dispatch","checkIncomingUpdatePlay","rootState","_a","currentUser","default_device","_b","_d","_c","player","updateStartAudioPlayer","src","incomingRingtone","loop","checkOutgoingUpdate","dispatchOutgoingCallStarted","checkAcceptedUpdate","eventDispatch"],"mappings":"kaASA,IAAMA,EAAe,CACnBC,YAAa,GACbC,SAAU,GACVC,OAAQ,GACRC,gBAAgB,EAChBC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,EAChBC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,EAChBC,gBAAgB,EAChBC,QAAQ,EACRC,UAAU,EACVC,UAAW,GACXC,OAAO,EACPC,QAAQ,EACRC,YAAa,GACbC,eAAgB,GAChBC,cAAc,EACdC,iBAAkB,GAClBC,mBAAoB,GACpBC,sBAAuB,GACvBC,mBAAmB,EACnBC,cAAe,IAAIC,MACnBC,eAAgB,GAChBC,aAAa,GAGFC,EAAcC,EAAWA,aAAXA,CAAyB,CAClDC,MAAO9B,EACP+B,SAAU,CACRC,kBAAmB,SAACF,EAAOG,GACzB,OACKC,WAAAA,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAJ,GACAG,GAAO,CACVT,cAAeM,EAAMN,eAExB,EACDW,kBAAmB,SAACL,EAAOG,GACzB,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRb,YAAagB,GAEhB,EACDG,mBAAoB,SAACN,EAAOG,GAC1B,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRX,aAAcc,GAEjB,EACDI,wBAAyB,SAACP,EAAOG,GAC/B,OAAAC,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRP,kBAAmBU,GAEtB,EACDK,iBAAkB,SAACR,EAAOG,GACxB,OAAIH,EAAMN,cAAce,MAAK,SAACC,GAAS,OAAAA,EAAKrC,SAAW8B,EAAQ9B,MAAM,IAC5D2B,EAGFI,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAJ,IACHN,cAAaiB,EAAAA,cAAAA,EAAAA,cAAA,GAAMX,EAAMN,eAAe,GAAA,CAAAS,IACzC,IAEJ,EACDS,oBAAqB,SAACZ,GACpB,OACKI,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAJ,IACHN,cAAeM,EAAMN,cAAcmB,QAAO,SAACH,GAAS,MAAc,gBAAdA,EAAKI,IAAsB,KAElF,EACDC,UAAW,SAACf,EAAOG,GAEjB,OADAH,EAAMlB,OAASqB,EACRH,CACR,EACDgB,sBAAuB,SAAChB,EAAOG,GAE7B,OADAH,EAAMH,YAAcM,EACbH,CACR,EACDiB,gBAAiB,SAACjB,EAAOG,GAEvB,OADAH,EAAMhB,UAAYmB,EACXH,CACR,EACDkB,MAAO,WACL,OAAOhD,CACR,GAEHiD,QAAS,SAACC,GAAa,MAAC,CACtBC,wBAAyB,SAAClB,EAA2BmB,gBAGD,YAAT,QAAtCC,EAAAD,EAAUE,YAAYC,sBAAgB,IAAAF,OAAA,EAAAA,EAAAT,OAAqBX,EAAQ5B,gBACpB,cAAT,QAAtCmD,EAAAJ,EAAUE,YAAYC,sBAAgB,IAAAC,OAAA,EAAAA,EAAAZ,OAAuBX,EAAQ7B,gBACpB,cAAX,QAAtCqD,EAAsB,QAAtBC,EAAAN,aAAS,EAATA,EAAWE,mBAAW,IAAAI,OAAA,EAAAA,EAAEH,sBAAc,IAAAE,OAAA,EAAAA,EAAEb,QAAuBX,aAAA,EAAAA,EAAS5B,mBAEzE4B,EAAQ3B,UAAW,EAGnB4C,EAASS,OAAOC,uBAAuB,CAAEC,IAAKC,EAAAA,QAAkBC,MAAM,KAGxEb,EAAStB,YAAYI,kBAChBE,EAAAA,SAAA,CAAA,EAAAD,GAEN,EACD+B,oBAAqB,SAAC/B,EAA2BmB,cAGG,YAAT,QAAtCC,EAAAD,EAAUE,YAAYC,sBAAgB,IAAAF,OAAA,EAAAA,EAAAT,OAAqBX,EAAQtB,gBACpB,cAAT,QAAtC6C,EAAAJ,EAAUE,YAAYC,sBAAgB,IAAAC,OAAA,EAAAA,EAAAZ,OAAuBX,EAAQvB,gBACtB,cAAX,QAApCgD,EAAAN,EAAUE,YAAYC,sBAAc,IAAAG,OAAA,EAAAA,EAAEd,OAAuBX,EAAQtB,kBAEtEsB,EAAQpB,UAAW,EAEnBoD,EAAAA,4BAA4BhC,EAAQhC,YAAagC,EAAQ9B,SAG3D+C,EAAStB,YAAYI,kBAChBE,EAAAA,SAAA,CAAA,EAAAD,GAEN,EACDiC,oBAAqB,SAACjC,EAA2BmB,cAGG,YAAT,QAAtCC,EAAAD,EAAUE,YAAYC,sBAAgB,IAAAF,OAAA,EAAAA,EAAAT,OAAqBX,EAAQzB,gBACpB,cAAT,QAAtCgD,EAAAJ,EAAUE,YAAYC,sBAAgB,IAAAC,OAAA,EAAAA,EAAAZ,OAAuBX,EAAQ1B,gBACtB,cAAX,QAApCmD,EAAAN,EAAUE,YAAYC,sBAAc,IAAAG,OAAA,EAAAA,EAAEd,OAAuBX,EAAQzB,kBAEtEyB,EAAQxB,UAAW,EACnB0D,gBAAc,6BAA8B,CAAA,IAG9CjB,EAAStB,YAAYI,kBAChBE,EAAAA,SAAA,CAAA,EAAAD,GAEN,EACD"}
@@ -1,6 +1,7 @@
1
1
  import type { RootModel } from '.';
2
2
  declare const defaultState: {
3
3
  padding_expanded: number;
4
+ alert_padding_expanded: number;
4
5
  padding_x_collapsed: number;
5
6
  padding_y_collapsed: number;
6
7
  border_radius_expanded: number;
@@ -102,6 +103,7 @@ export declare const motions: {
102
103
  name?: string | undefined;
103
104
  state: {
104
105
  padding_expanded: number;
106
+ alert_padding_expanded: number;
105
107
  padding_x_collapsed: number;
106
108
  padding_y_collapsed: number;
107
109
  border_radius_expanded: number;
@@ -206,6 +208,7 @@ export declare const motions: {
206
208
  }) & ({} | {
207
209
  reducers: import("@rematch/core").ModelReducers<{
208
210
  padding_expanded: number;
211
+ alert_padding_expanded: number;
209
212
  padding_x_collapsed: number;
210
213
  padding_y_collapsed: number;
211
214
  border_radius_expanded: number;
@@ -306,6 +309,7 @@ export declare const motions: {
306
309
  }) & ({} | {
307
310
  baseReducer: import("redux").Reducer<{
308
311
  padding_expanded: number;
312
+ alert_padding_expanded: number;
309
313
  padding_x_collapsed: number;
310
314
  padding_y_collapsed: number;
311
315
  border_radius_expanded: number;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{padding_expanded:24,padding_x_collapsed:8,padding_y_collapsed:16,border_radius_expanded:20,border_radius_collapsed:99,variants:{call:{expanded:{incoming:{width:418,height:96},outgoing:{width:418,height:96},accepted:{width:348,height:236,actionsExpanded:{width:348,height:304}},listening:{width:348,height:168},transfer:{width:348,height:236,actionsExpanded:{width:348,height:304}}},collapsed:{width:168,height:40}},keypad:{expanded:{width:338,height:400},collapsed:{width:168,height:40}},transfer:{expanded:{width:408,height:410},collapsed:{width:168,height:40}},player:{expanded:{width:374,height:236},collapsed:{width:168,height:40}},recorder:{expanded:{width:374,height:256},collapsed:{width:168,height:40}},physicalPhoneRecorder:{expanded:{width:374,height:256},collapsed:{width:168,height:40}},alerts:{width:418,height:88}}}});exports.motions=e;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:{padding_expanded:24,alert_padding_expanded:2,padding_x_collapsed:8,padding_y_collapsed:16,border_radius_expanded:20,border_radius_collapsed:99,variants:{call:{expanded:{incoming:{width:418,height:96},outgoing:{width:418,height:96},accepted:{width:348,height:236,actionsExpanded:{width:348,height:304}},listening:{width:348,height:168},transfer:{width:348,height:236,actionsExpanded:{width:348,height:304}}},collapsed:{width:168,height:40}},keypad:{expanded:{width:338,height:400},collapsed:{width:168,height:40}},transfer:{expanded:{width:408,height:410},collapsed:{width:168,height:40}},player:{expanded:{width:374,height:236},collapsed:{width:168,height:40}},recorder:{expanded:{width:374,height:256},collapsed:{width:168,height:40}},physicalPhoneRecorder:{expanded:{width:374,height:256},collapsed:{width:168,height:40}},alerts:{width:418,height:88}}}});exports.motions=e;
2
2
  //# sourceMappingURL=motions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"motions.js","sources":["../../src/models/motions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState = {\n padding_expanded: 24,\n padding_x_collapsed: 8,\n padding_y_collapsed: 16,\n border_radius_expanded: 20,\n border_radius_collapsed: 99,\n variants: {\n // Call View\n call: {\n expanded: {\n incoming: {\n width: 418,\n height: 96,\n },\n outgoing: {\n width: 418,\n height: 96,\n },\n accepted: {\n width: 348,\n height: 236,\n actionsExpanded: {\n width: 348,\n height: 304,\n },\n },\n listening: {\n width: 348,\n height: 168,\n },\n transfer: {\n width: 348,\n height: 236,\n actionsExpanded: {\n width: 348,\n height: 304,\n },\n },\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Keypad View\n keypad: {\n expanded: {\n width: 338,\n height: 400,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Transfer View\n transfer: {\n expanded: {\n width: 408,\n height: 410,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Audio Player View\n player: {\n expanded: {\n width: 374,\n height: 236,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Recorder View\n recorder: {\n expanded: {\n width: 374,\n height: 256,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Physical Recorder View\n physicalPhoneRecorder: {\n expanded: {\n width: 374,\n height: 256,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Alerts Section\n alerts: {\n width: 418,\n height: 88,\n },\n },\n}\n\nexport const motions = createModel<RootModel>()({\n state: defaultState,\n})\n\nexport type AnimationsTypes = typeof defaultState\n"],"names":["motions","createModel","state","padding_expanded","padding_x_collapsed","padding_y_collapsed","border_radius_expanded","border_radius_collapsed","variants","call","expanded","incoming","width","height","outgoing","accepted","actionsExpanded","listening","transfer","collapsed","keypad","player","recorder","physicalPhoneRecorder","alerts"],"mappings":"wEAiHaA,4DAAqBC,aAAXA,CAAyB,CAC9CC,MA5GmB,CACnBC,iBAAkB,GAClBC,oBAAqB,EACrBC,oBAAqB,GACrBC,uBAAwB,GACxBC,wBAAyB,GACzBC,SAAU,CAERC,KAAM,CACJC,SAAU,CACRC,SAAU,CACRC,MAAO,IACPC,OAAQ,IAEVC,SAAU,CACRF,MAAO,IACPC,OAAQ,IAEVE,SAAU,CACRH,MAAO,IACPC,OAAQ,IACRG,gBAAiB,CACfJ,MAAO,IACPC,OAAQ,MAGZI,UAAW,CACTL,MAAO,IACPC,OAAQ,KAEVK,SAAU,CACRN,MAAO,IACPC,OAAQ,IACRG,gBAAiB,CACfJ,MAAO,IACPC,OAAQ,OAIdM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZO,OAAQ,CACNV,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZK,SAAU,CACRR,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZQ,OAAQ,CACNX,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZS,SAAU,CACRZ,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZU,sBAAuB,CACrBb,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZW,OAAQ,CACNZ,MAAO,IACPC,OAAQ"}
1
+ {"version":3,"file":"motions.js","sources":["../../src/models/motions.ts"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\n\nconst defaultState = {\n padding_expanded: 24,\n alert_padding_expanded: 2,\n padding_x_collapsed: 8,\n padding_y_collapsed: 16,\n border_radius_expanded: 20,\n border_radius_collapsed: 99,\n variants: {\n // Call View\n call: {\n expanded: {\n incoming: {\n width: 418,\n height: 96,\n },\n outgoing: {\n width: 418,\n height: 96,\n },\n accepted: {\n width: 348,\n height: 236,\n actionsExpanded: {\n width: 348,\n height: 304,\n },\n },\n listening: {\n width: 348,\n height: 168,\n },\n transfer: {\n width: 348,\n height: 236,\n actionsExpanded: {\n width: 348,\n height: 304,\n },\n },\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Keypad View\n keypad: {\n expanded: {\n width: 338,\n height: 400,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Transfer View\n transfer: {\n expanded: {\n width: 408,\n height: 410,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Audio Player View\n player: {\n expanded: {\n width: 374,\n height: 236,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Recorder View\n recorder: {\n expanded: {\n width: 374,\n height: 256,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Physical Recorder View\n physicalPhoneRecorder: {\n expanded: {\n width: 374,\n height: 256,\n },\n collapsed: {\n width: 168,\n height: 40,\n },\n },\n // Alerts Section\n alerts: {\n width: 418,\n height: 88,\n },\n },\n}\n\nexport const motions = createModel<RootModel>()({\n state: defaultState,\n})\n\nexport type AnimationsTypes = typeof defaultState\n"],"names":["motions","createModel","state","padding_expanded","alert_padding_expanded","padding_x_collapsed","padding_y_collapsed","border_radius_expanded","border_radius_collapsed","variants","call","expanded","incoming","width","height","outgoing","accepted","actionsExpanded","listening","transfer","collapsed","keypad","player","recorder","physicalPhoneRecorder","alerts"],"mappings":"wEAkHaA,4DAAqBC,aAAXA,CAAyB,CAC9CC,MA7GmB,CACnBC,iBAAkB,GAClBC,uBAAwB,EACxBC,oBAAqB,EACrBC,oBAAqB,GACrBC,uBAAwB,GACxBC,wBAAyB,GACzBC,SAAU,CAERC,KAAM,CACJC,SAAU,CACRC,SAAU,CACRC,MAAO,IACPC,OAAQ,IAEVC,SAAU,CACRF,MAAO,IACPC,OAAQ,IAEVE,SAAU,CACRH,MAAO,IACPC,OAAQ,IACRG,gBAAiB,CACfJ,MAAO,IACPC,OAAQ,MAGZI,UAAW,CACTL,MAAO,IACPC,OAAQ,KAEVK,SAAU,CACRN,MAAO,IACPC,OAAQ,IACRG,gBAAiB,CACfJ,MAAO,IACPC,OAAQ,OAIdM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZO,OAAQ,CACNV,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZK,SAAU,CACRR,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZQ,OAAQ,CACNX,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZS,SAAU,CACRZ,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZU,sBAAuB,CACrBb,SAAU,CACRE,MAAO,IACPC,OAAQ,KAEVM,UAAW,CACTP,MAAO,IACPC,OAAQ,KAIZW,OAAQ,CACNZ,MAAO,IACPC,OAAQ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "0.8.25",
4
+ "version": "0.8.27",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",
@@ -49,7 +49,6 @@
49
49
  "i18next-http-backend": "^2.1.1",
50
50
  "js-base64": "^3.7.3",
51
51
  "mic-check": "^1.1.0",
52
- "moment": "^2.29.4",
53
52
  "react": "^18.2.0",
54
53
  "react-dom": "^18.2.0",
55
54
  "react-i18next": "^12.1.5",
@@ -102,7 +101,6 @@
102
101
  "@storybook/addon-essentials": "7.6.20",
103
102
  "@storybook/addon-interactions": "7.6.20",
104
103
  "@storybook/addon-links": "7.6.20",
105
- "@storybook/addon-postcss": "^2.0.0",
106
104
  "@storybook/node-logger": "7.6.20",
107
105
  "@storybook/preset-create-react-app": "7.6.20",
108
106
  "@storybook/react": "7.6.20",
@@ -114,14 +112,16 @@
114
112
  "@types/react": "^18.0.26",
115
113
  "@types/react-dom": "^18.0.9",
116
114
  "@types/styled-components": "^5.1.26",
117
- "autoprefixer": "^10.4.13",
115
+ "autoprefixer": "^10.4.20",
118
116
  "babel": "^6.23.0",
119
117
  "babel-plugin-named-exports-order": "^0.0.2",
120
118
  "buffer": "^5.7.1",
119
+ "css-loader": "^7.1.2",
121
120
  "eslint-plugin-storybook": "^0.9.0",
122
121
  "np": "^7.6.2",
123
122
  "parcel": "^2.0.0",
124
- "postcss": "^8.4.18",
123
+ "postcss": "^8.4.49",
124
+ "postcss-loader": "^8.1.1",
125
125
  "prettier": "^2.8.0",
126
126
  "prop-types": "^15.8.1",
127
127
  "rollup": "^2.79.1",
@@ -129,8 +129,9 @@
129
129
  "rollup-plugin-postcss": "^4.0.2",
130
130
  "rollup-plugin-terser": "^7.0.2",
131
131
  "storybook": "^7.6.20",
132
+ "style-loader": "^4.0.0",
132
133
  "tailwind-scrollbar": "^3.1.0",
133
- "tailwindcss": "^3.4.14",
134
+ "tailwindcss": "^3.4.16",
134
135
  "typescript": "^4.8.4",
135
136
  "webm-duration-fix": "^1.0.4",
136
137
  "webpack": "^5.74.0"