@nethesis/phone-island 0.7.71 → 0.7.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/App.js +1 -1
  2. package/dist/App.js.map +1 -1
  3. package/dist/components/AlertGuard.js +1 -1
  4. package/dist/components/AlertGuard.js.map +1 -1
  5. package/dist/components/AlertView/Alert.js +1 -1
  6. package/dist/components/AlertView/Alert.js.map +1 -1
  7. package/dist/components/AlertView/index.js +1 -1
  8. package/dist/components/AlertView/index.js.map +1 -1
  9. package/dist/components/AudioBars.d.ts +9 -8
  10. package/dist/components/AudioBars.js +1 -1
  11. package/dist/components/AudioBars.js.map +1 -1
  12. package/dist/components/AudioPlayerView/Avatar.d.ts +6 -0
  13. package/dist/components/AudioPlayerView/Avatar.js +2 -0
  14. package/dist/components/AudioPlayerView/Avatar.js.map +1 -0
  15. package/dist/components/AudioPlayerView/Progress.d.ts +5 -0
  16. package/dist/components/AudioPlayerView/Progress.js +2 -0
  17. package/dist/components/AudioPlayerView/Progress.js.map +1 -0
  18. package/dist/components/AudioPlayerView/index.d.ts +5 -0
  19. package/dist/components/AudioPlayerView/index.js +2 -0
  20. package/dist/components/AudioPlayerView/index.js.map +1 -0
  21. package/dist/components/CallView/Actions.js +1 -1
  22. package/dist/components/CallView/Actions.js.map +1 -1
  23. package/dist/components/CallView/Avatar.js +1 -1
  24. package/dist/components/CallView/Avatar.js.map +1 -1
  25. package/dist/components/CallView/index.js +1 -1
  26. package/dist/components/Close.d.ts +3 -0
  27. package/dist/components/Close.js +2 -0
  28. package/dist/components/Close.js.map +1 -0
  29. package/dist/components/Events.js +1 -1
  30. package/dist/components/Events.js.map +1 -1
  31. package/dist/components/Island.d.ts +0 -1
  32. package/dist/components/Island.js +1 -1
  33. package/dist/components/Island.js.map +1 -1
  34. package/dist/components/IslandDrag.d.ts +7 -0
  35. package/dist/components/IslandDrag.js +2 -0
  36. package/dist/components/IslandDrag.js.map +1 -0
  37. package/dist/components/IslandMotion.d.ts +6 -0
  38. package/dist/components/IslandMotion.js +2 -0
  39. package/dist/components/IslandMotion.js.map +1 -0
  40. package/dist/components/KeypadView/Actions.js +1 -1
  41. package/dist/components/KeypadView/Actions.js.map +1 -1
  42. package/dist/components/Socket.js +1 -1
  43. package/dist/components/Socket.js.map +1 -1
  44. package/dist/components/TransferView/TransferActions.js +1 -1
  45. package/dist/components/TransferView/TransferActions.js.map +1 -1
  46. package/dist/components/TransferView/TransferList.js +1 -1
  47. package/dist/components/TransferView/TransferList.js.map +1 -1
  48. package/dist/components/WebRTC.js +1 -1
  49. package/dist/components/WebRTC.js.map +1 -1
  50. package/dist/events/CallEvents.js +1 -1
  51. package/dist/events/CallEvents.js.map +1 -1
  52. package/dist/events/PlayerEvents.d.ts +6 -0
  53. package/dist/events/PlayerEvents.js +2 -0
  54. package/dist/events/PlayerEvents.js.map +1 -0
  55. package/dist/events/index.d.ts +1 -0
  56. package/dist/index.css +1 -1
  57. package/dist/lib/phone/audio.js +1 -1
  58. package/dist/lib/phone/audio.js.map +1 -1
  59. package/dist/lib/phone/call.js +1 -1
  60. package/dist/lib/phone/call.js.map +1 -1
  61. package/dist/lib/player/audio.d.ts +16 -0
  62. package/dist/lib/player/audio.js +2 -0
  63. package/dist/lib/player/audio.js.map +1 -0
  64. package/dist/models/audioBars.d.ts +46 -0
  65. package/dist/models/audioBars.js +2 -0
  66. package/dist/models/audioBars.js.map +1 -0
  67. package/dist/models/currentCall.d.ts +1 -1
  68. package/dist/models/currentCall.js +1 -1
  69. package/dist/models/currentCall.js.map +1 -1
  70. package/dist/models/index.d.ts +4 -2
  71. package/dist/models/index.js +1 -1
  72. package/dist/models/index.js.map +1 -1
  73. package/dist/models/island.d.ts +8 -8
  74. package/dist/models/island.js +1 -1
  75. package/dist/models/island.js.map +1 -1
  76. package/dist/models/motions.d.ts +280 -0
  77. package/dist/models/motions.js +2 -0
  78. package/dist/models/motions.js.map +1 -0
  79. package/dist/models/player.d.ts +131 -29
  80. package/dist/models/player.js +1 -1
  81. package/dist/models/player.js.map +1 -1
  82. package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js +1 -1
  83. package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js.map +1 -1
  84. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js +1 -1
  85. package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js.map +1 -1
  86. package/dist/services/history_call.d.ts +8 -0
  87. package/dist/services/history_call.js +2 -0
  88. package/dist/services/history_call.js.map +1 -0
  89. package/dist/services/offhour.d.ts +9 -0
  90. package/dist/services/offhour.js +2 -0
  91. package/dist/services/offhour.js.map +1 -0
  92. package/dist/static/icons/PhoneKeypadLight.js +1 -1
  93. package/dist/static/icons/PhoneKeypadLight.js.map +1 -1
  94. package/dist/static/icons/PhoneKeypadSolid.js +1 -1
  95. package/dist/static/icons/PhoneKeypadSolid.js.map +1 -1
  96. package/dist/styles/Island.styles.js +1 -1
  97. package/dist/styles/Island.styles.js.map +1 -1
  98. package/dist/types/announcements.d.ts +8 -0
  99. package/dist/types/index.d.ts +2 -0
  100. package/dist/types/player.d.ts +7 -0
  101. package/dist/utils/genericFunctions/player.d.ts +1 -0
  102. package/dist/utils/genericFunctions/player.js +2 -0
  103. package/dist/utils/genericFunctions/player.js.map +1 -0
  104. package/package.json +1 -1
  105. package/dist/models/animations.d.ts +0 -476
  106. package/dist/models/animations.js +0 -2
  107. package/dist/models/animations.js.map +0 -1
package/dist/App.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),r=require("./components/WebRTC.js"),o=require("./components/Island.js"),n=require("./components/RestAPI.js");require("./components/AudioBars.js"),require("./node_modules/react-redux/es/index.js"),require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var a=require("./store/index.js"),u=require("./node_modules/js-base64/base64.mjs.js"),d=require("./node_modules/react-redux/es/components/Provider.js");function i(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 l=i(e),m=function(e){var i=e.dataConfig,m=e.showAlways,c=void 0!==m&&m,f=u.Base64.atob(i||"").split(":"),j=f[0],p=f[1],q=f[2],x=f[3],h=f[4];return l.default.createElement(l.default.Fragment,null,l.default.createElement(d.default,{store:a.store},l.default.createElement(r.WebRTC,{hostName:j,sipExten:x,sipSecret:h},l.default.createElement(n.RestAPI,{hostName:j,username:p,authToken:q},l.default.createElement(s.Socket,{hostName:j,username:p,authToken:q},l.default.createElement(t.Events,null,l.default.createElement(o.Island,{showAlways:c})))))))};m.displayName="PhoneIsland",exports.PhoneIsland=m;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("./components/Events.js"),s=require("./components/Socket.js"),r=require("./components/WebRTC.js"),o=require("./components/Island.js"),n=require("./components/RestAPI.js");require("./node_modules/react-redux/es/index.js");var a=require("./store/index.js");require("./node_modules/@fortawesome/react-fontawesome/index.es.js"),require("./node_modules/framer-motion/dist/framer-motion.js");var u=require("./node_modules/js-base64/base64.mjs.js"),d=require("./node_modules/react-redux/es/components/Provider.js");function l(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 i=l(e),m=function(e){var l=e.dataConfig,m=e.showAlways,c=void 0!==m&&m,f=u.Base64.atob(l||"").split(":"),j=f[0],p=f[1],q=f[2],x=f[3],h=f[4];return i.default.createElement(i.default.Fragment,null,i.default.createElement(d.default,{store:a.store},i.default.createElement(r.WebRTC,{hostName:j,sipExten:x,sipSecret:h},i.default.createElement(n.RestAPI,{hostName:j,username:p,authToken:q},i.default.createElement(s.Socket,{hostName:j,username:p,authToken:q},i.default.createElement(t.Events,null,i.default.createElement(o.Island,{showAlways:c})))))))};m.displayName="PhoneIsland",exports.PhoneIsland=m;
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 } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\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\n return (\n <>\n <Provider store={store}>\n <WebRTC hostName={HOST_NAME} sipExten={SIP_EXTEN} sipSecret={SIP_SECRET}>\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Events>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","React","createElement","Fragment","Provider","store","WebRTC","hostName","sipExten","sipSecret","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"+6BAWaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,WAAAA,OAAU,IAAAD,GAAQA,EAC1EE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAElC,OACES,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACC,MAAOA,EAAAA,OACfJ,UAAAC,cAACI,EAAMA,OAAA,CAACC,SAAUX,EAAWY,SAAUT,EAAWU,UAAWT,GAC3DC,UAAAC,cAACQ,EAAOA,QAAA,CAACH,SAAUX,EAAWe,SAAUd,EAAUe,UAAWd,GAC3DG,UAAAC,cAACW,EAAMA,OAAA,CAACN,SAAUX,EAAWe,SAAUd,EAAUe,UAAWd,GAC1DG,UAAAC,cAACY,EAAAA,OAAM,KACLb,UAAAC,cAACa,EAAMA,OAAA,CAACxB,WAAYA,SAQpC,EAEAJ,EAAY6B,YAAc"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { type FC } from 'react'\nimport { Events, Socket, WebRTC, Island, RestAPI } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Base64 } from 'js-base64'\n\ninterface PhoneIslandProps {\n dataConfig: string\n showAlways?: boolean\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, showAlways = false }) => {\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\n return (\n <>\n <Provider store={store}>\n <WebRTC hostName={HOST_NAME} sipExten={SIP_EXTEN} sipSecret={SIP_SECRET}>\n <RestAPI hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Socket hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Events>\n <Island showAlways={showAlways} />\n </Events>\n </Socket>\n </RestAPI>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","showAlways","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","React","createElement","Fragment","Provider","store","WebRTC","hostName","sipExten","sipSecret","RestAPI","username","authToken","Socket","Events","Island","displayName"],"mappings":"84BAWaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,WAAAA,OAAU,IAAAD,GAAQA,EAC1EE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAElC,OACES,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACC,MAAOA,EAAAA,OACfJ,UAAAC,cAACI,EAAMA,OAAA,CAACC,SAAUX,EAAWY,SAAUT,EAAWU,UAAWT,GAC3DC,UAAAC,cAACQ,EAAOA,QAAA,CAACH,SAAUX,EAAWe,SAAUd,EAAUe,UAAWd,GAC3DG,UAAAC,cAACW,EAAMA,OAAA,CAACN,SAAUX,EAAWe,SAAUd,EAAUe,UAAWd,GAC1DG,UAAAC,cAACY,EAAAA,OAAM,KACLb,UAAAC,cAACa,EAAMA,OAAA,CAACxB,WAAYA,SAQpC,EAEAJ,EAAY6B,YAAc"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("./AlertView/index.js"),r=require("../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(e);exports.AlertGuard=function(e){var u=e.children,l=r.useSelector((function(e){return e.alerts.status})),n=l.activeAlertsCount,s=l.breakActiveAlertsCount,o=r.useSelector((function(e){return e.alerts.data})).call_transfered;return a.default.createElement(a.default.Fragment,null,n>0&&a.default.createElement(t.default,null),0===s&&!o.active&&u)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("./AlertView/index.js"),r=require("../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=u(e);exports.AlertGuard=function(e){var u=e.children,l=r.useSelector((function(e){return e.alerts.status})),a=l.activeAlertsCount,s=l.breakActiveAlertsCount,o=r.useSelector((function(e){return e.alerts.data})).call_transfered,c=r.useSelector((function(e){return e.island})).isOpen;return n.default.createElement(n.default.Fragment,null,a>0&&c&&n.default.createElement(t.default,null),0===s&&!o.active&&u)};
2
2
  //# sourceMappingURL=AlertGuard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AlertGuard.js","sources":["../../src/components/AlertGuard.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useEffect, type FC, type ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport AlertView from './AlertView'\n\n/**\n * Manages the logic of alerts as connection errors or permissions\n *\n * @param children\n * @returns\n */\n\nexport const AlertGuard: FC<AlertGuard> = ({ children }) => {\n // Get alert status from alerts store\n const { activeAlertsCount, breakActiveAlertsCount } = useSelector(\n (state: RootState) => state.alerts.status,\n )\n // Get alerts status from alerts store\n const { call_transfered } = useSelector((state: RootState) => state.alerts.data)\n\n return (\n <>\n {activeAlertsCount > 0 && <AlertView />}\n {breakActiveAlertsCount === 0 && !call_transfered.active && children}\n </>\n )\n}\n\ninterface AlertGuard {\n children: ReactNode\n}\n"],"names":["_a","children","_b","useSelector","state","alerts","status","activeAlertsCount","breakActiveAlertsCount","call_transfered","data","React","createElement","Fragment","AlertView","active"],"mappings":"2VAe0C,SAACA,GAAE,IAAAC,EAAQD,EAAAC,SAE7CC,EAAgDC,EAAAA,aACpD,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,MAAM,IADnCC,EAAiBL,EAAAK,kBAAEC,EAAsBN,EAAAM,uBAIzCC,EAAoBN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOK,wBAE3E,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGN,EAAoB,GAAKI,EAAAA,QAAAC,cAACE,EAAAA,QAAY,MACX,IAA3BN,IAAiCC,EAAgBM,QAAUd,EAGlE"}
1
+ {"version":3,"file":"AlertGuard.js","sources":["../../src/components/AlertGuard.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useEffect, type FC, type ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport AlertView from './AlertView'\n\n/**\n * Manages the logic of alerts as connection errors or permissions\n *\n * @param children\n * @returns\n */\n\nexport const AlertGuard: FC<AlertGuard> = ({ children }) => {\n // Get alert status from alerts store\n const { activeAlertsCount, breakActiveAlertsCount } = useSelector(\n (state: RootState) => state.alerts.status,\n )\n // Get alerts status from alerts store\n const { call_transfered } = useSelector((state: RootState) => state.alerts.data)\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <>\n {activeAlertsCount > 0 && isOpen && <AlertView />}\n {breakActiveAlertsCount === 0 && !call_transfered.active && children}\n </>\n )\n}\n\ninterface AlertGuard {\n children: ReactNode\n}\n"],"names":["_a","children","_b","useSelector","state","alerts","status","activeAlertsCount","breakActiveAlertsCount","call_transfered","data","isOpen","island","React","createElement","Fragment","AlertView","active"],"mappings":"2VAe0C,SAACA,GAAE,IAAAC,EAAQD,EAAAC,SAE7CC,EAAgDC,EAAAA,aACpD,SAACC,GAAqB,OAAAA,EAAMC,OAAOC,MAAM,IADnCC,EAAiBL,EAAAK,kBAAEC,EAAsBN,EAAAM,uBAIzCC,EAAoBN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,OAAOK,wBACnEC,EAAWR,eAAY,SAACC,GAAqB,OAAAA,EAAMQ,iBAE3D,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGR,EAAoB,GAAKI,GAAUE,EAAA,QAAAC,cAACE,EAAS,QAAG,MACrB,IAA3BR,IAAiCC,EAAgBQ,QAAUhB,EAGlE"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../utils/genericFunctions/classNames.js"),a=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),r=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(e),n={base:"pi-border-4 pi-rounded-2xl pi-p-6 pi-flex pi-gap-5 pi-items-center",red:"pi-border-red-600",orange:"pi-border-orange-600",green:"pi-border-green-600"};exports.default=function(e){var i=e.color,l=e.message;return s.default.createElement("div",{className:t.classNames(n.base,n[i])},s.default.createElement("div",{className:"pi-w-12 pi-h-12 pi-rounded-xl pi-bg-gray-300 pi-shrink-0 pi-flex pi-justify-center pi-items-center"},"green"===i?s.default.createElement(a.FontAwesomeIcon,{icon:r.faCircleCheck,size:"xl",className:"pi-text-black"}):"orange"===i?s.default.createElement(a.FontAwesomeIcon,{icon:r.faTriangleExclamation,size:"xl",className:"pi-text-black"}):s.default.createElement(a.FontAwesomeIcon,{icon:r.faCircleXmark,size:"xl",className:"pi-text-black"})),s.default.createElement("div",{className:"pi-text-base pi-font-bold"},l))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../utils/genericFunctions/classNames.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(e),n={base:"pi-border-4 pi-rounded-2xl pi-p-4 pi-flex pi-gap-5 pi-items-center",red:"pi-border-red-600",orange:"pi-border-orange-600",green:"pi-border-green-600"};exports.default=function(e){var i=e.color,l=e.message;return s.default.createElement("div",{className:t.classNames(n.base,n[i])},s.default.createElement("div",{className:"pi-w-12 pi-h-12 pi-rounded-xl pi-bg-gray-300 pi-shrink-0 pi-flex pi-justify-center pi-items-center"},"green"===i?s.default.createElement(r.FontAwesomeIcon,{icon:a.faCircleCheck,size:"xl",className:"pi-text-black"}):"orange"===i?s.default.createElement(r.FontAwesomeIcon,{icon:a.faTriangleExclamation,size:"xl",className:"pi-text-black"}):s.default.createElement(r.FontAwesomeIcon,{icon:a.faCircleXmark,size:"xl",className:"pi-text-black"})),s.default.createElement("div",{className:"pi-text-sm"},l))};
2
2
  //# sourceMappingURL=Alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.js","sources":["../../../src/components/AlertView/Alert.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { classNames } from '../../utils/'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faTriangleExclamation,\n faCircleCheck,\n faCircleXmark,\n} from '@nethesis/nethesis-solid-svg-icons'\n\nconst classes = {\n base: 'pi-border-4 pi-rounded-2xl pi-p-6 pi-flex pi-gap-5 pi-items-center',\n red: 'pi-border-red-600',\n orange: 'pi-border-orange-600',\n green: 'pi-border-green-600',\n}\n\nconst Alert: FC<AlertProps> = ({ color, message }) => {\n return (\n <div className={classNames(classes.base, classes[color])}>\n <div className='pi-w-12 pi-h-12 pi-rounded-xl pi-bg-gray-300 pi-shrink-0 pi-flex pi-justify-center pi-items-center'>\n {color === 'green' ? (\n <FontAwesomeIcon icon={faCircleCheck} size='xl' className='pi-text-black' />\n ) : color === 'orange' ? (\n <FontAwesomeIcon icon={faTriangleExclamation} size='xl' className='pi-text-black' />\n ) : (\n <FontAwesomeIcon icon={faCircleXmark} size='xl' className='pi-text-black' />\n )}\n </div>\n <div className='pi-text-base pi-font-bold'>{message}</div>\n </div>\n )\n}\n\nexport default Alert\n\ninterface AlertProps {\n type: 'alert' | 'feedback'\n color: 'red' | 'orange' | 'green'\n message: string\n}\n"],"names":["classes","base","red","orange","green","_a","color","message","React","createElement","className","classNames","FontAwesomeIcon","icon","faCircleCheck","size","faTriangleExclamation","faCircleXmark"],"mappings":"iYAYMA,EAAU,CACdC,KAAM,qEACNC,IAAK,oBACLC,OAAQ,uBACRC,MAAO,uCAGqB,SAACC,OAAEC,EAAKD,EAAAC,MAAEC,EAAOF,EAAAE,QAC7C,OACEC,UAAAC,cAAA,MAAA,CAAKC,UAAWC,aAAWX,EAAQC,KAAMD,EAAQM,KAC/CE,UAAAC,cAAA,MAAA,CAAKC,UAAU,sGACF,UAAVJ,EACCE,UAAAC,cAACG,EAAAA,gBAAe,CAACC,KAAMC,EAAaA,cAAEC,KAAK,KAAKL,UAAU,kBAC9C,WAAVJ,EACFE,EAAA,QAAAC,cAACG,EAAAA,gBAAe,CAACC,KAAMG,EAAqBA,sBAAED,KAAK,KAAKL,UAAU,kBAElEF,EAAAA,sBAACI,EAAeA,gBAAA,CAACC,KAAMI,gBAAeF,KAAK,KAAKL,UAAU,mBAG9DF,EAAK,QAAAC,cAAA,MAAA,CAAAC,UAAU,6BAA6BH,GAGlD"}
1
+ {"version":3,"file":"Alert.js","sources":["../../../src/components/AlertView/Alert.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { classNames } from '../../utils/'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faTriangleExclamation,\n faCircleCheck,\n faCircleXmark,\n} from '@nethesis/nethesis-solid-svg-icons'\n\nconst classes = {\n base: 'pi-border-4 pi-rounded-2xl pi-p-4 pi-flex pi-gap-5 pi-items-center',\n red: 'pi-border-red-600',\n orange: 'pi-border-orange-600',\n green: 'pi-border-green-600',\n}\n\nconst Alert: FC<AlertProps> = ({ color, message }) => {\n return (\n <div className={classNames(classes.base, classes[color])}>\n <div className='pi-w-12 pi-h-12 pi-rounded-xl pi-bg-gray-300 pi-shrink-0 pi-flex pi-justify-center pi-items-center'>\n {color === 'green' ? (\n <FontAwesomeIcon icon={faCircleCheck} size='xl' className='pi-text-black' />\n ) : color === 'orange' ? (\n <FontAwesomeIcon icon={faTriangleExclamation} size='xl' className='pi-text-black' />\n ) : (\n <FontAwesomeIcon icon={faCircleXmark} size='xl' className='pi-text-black' />\n )}\n </div>\n <div className='pi-text-sm'>{message}</div>\n </div>\n )\n}\n\nexport default Alert\n\ninterface AlertProps {\n type: 'alert' | 'feedback'\n color: 'red' | 'orange' | 'green'\n message: string\n}\n"],"names":["classes","base","red","orange","green","_a","color","message","React","createElement","className","classNames","FontAwesomeIcon","icon","faCircleCheck","size","faTriangleExclamation","faCircleXmark"],"mappings":"iYAYMA,EAAU,CACdC,KAAM,qEACNC,IAAK,oBACLC,OAAQ,uBACRC,MAAO,uCAGqB,SAACC,OAAEC,EAAKD,EAAAC,MAAEC,EAAOF,EAAAE,QAC7C,OACEC,UAAAC,cAAA,MAAA,CAAKC,UAAWC,aAAWX,EAAQC,KAAMD,EAAQM,KAC/CE,UAAAC,cAAA,MAAA,CAAKC,UAAU,sGACF,UAAVJ,EACCE,UAAAC,cAACG,EAAAA,gBAAe,CAACC,KAAMC,EAAaA,cAAEC,KAAK,KAAKL,UAAU,kBAC9C,WAAVJ,EACFE,EAAA,QAAAC,cAACG,EAAAA,gBAAe,CAACC,KAAMG,EAAqBA,sBAAED,KAAK,KAAKL,UAAU,kBAElEF,EAAAA,sBAACI,EAAeA,gBAAA,CAACC,KAAMI,gBAAeF,KAAK,KAAKL,UAAU,mBAG9DF,EAAK,QAAAC,cAAA,MAAA,CAAAC,UAAU,cAAcH,GAGnC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./Alert.js");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/framer-motion/dist/framer-motion.js");var t=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../_virtual/framer-motion.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(e);exports.default=function(){var e=t.useSelector((function(e){return e.alerts}));return i.default.createElement(a.framerMotion.exports.motion.div,{className:"pi-flex pi-flex-col pi-gap-4 pi-mb-6 pi-overflow-y-auto",initial:{opacity:0},animate:{opacity:1},style:{maxHeight:"6.5rem"}},Object.values(e.data).map((function(e,t){return e.active&&i.default.createElement(r.default,{key:t,type:"alert",color:e.success?"green":e.break?"red":"orange",message:e.message})})))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./Alert.js");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/framer-motion/dist/framer-motion.js");var t=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../_virtual/framer-motion.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(e);exports.default=function(){var e=t.useSelector((function(e){return e.alerts})),o=e.data,s=e.status;return i.default.createElement(a.framerMotion.exports.motion.div,{className:"pi-flex pi-flex-col pi-gap-4 pi-mb-6 pi-overflow-y-auto pi-custom-scrollbar ".concat(s.activeAlertsCount>1&&"pi-pr-2"),initial:{opacity:0},animate:{opacity:1},style:{maxHeight:"5.5rem"}},Object.values(o).map((function(e,t){return e.active&&i.default.createElement(r.default,{key:t,type:"alert",color:e.success?"green":e.break?"red":"orange",message:e.message})})))};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport Alert from './Alert'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const alerts = useSelector((state: RootState) => state.alerts)\n\n return (\n <motion.div\n className='pi-flex pi-flex-col pi-gap-4 pi-mb-6 pi-overflow-y-auto'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n style={{\n maxHeight: '6.5rem',\n }}\n >\n {/* Show alerts */}\n {Object.values(alerts.data).map(\n (alert, index) =>\n alert.active && (\n <Alert\n key={index}\n type='alert'\n color={alert.success ? 'green' : alert.break ? 'red' : 'orange'}\n message={alert.message}\n />\n ),\n )}\n </motion.div>\n )\n}\n\nexport default AlertView\n"],"names":["alerts","useSelector","state","React","createElement","motion","div","className","initial","opacity","animate","style","maxHeight","Object","values","data","map","alert","index","active","Alert","key","type","color","success","break","message"],"mappings":"mcAYsB,WACpB,IAAMA,EAASC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMF,MAAN,IAEjD,OACEG,EAAAA,QAACC,cAAAC,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,UAAU,0DACVC,QAAS,CAAEC,QAAS,GACpBC,QAAS,CAAED,QAAS,GACpBE,MAAO,CACLC,UAAW,WAIZC,OAAOC,OAAOd,EAAOe,MAAMC,KAC1B,SAACC,EAAOC,GACN,OAAAD,EAAME,QACJhB,EAAC,QAAAC,cAAAgB,EAAAA,SACCC,IAAKH,EACLI,KAAK,QACLC,MAAON,EAAMO,QAAU,QAAUP,EAAMQ,MAAQ,MAAQ,SACvDC,QAAST,EAAMS,SAElB,IAIX"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/AlertView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport Alert from './Alert'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\nimport { motion } from 'framer-motion/dist/framer-motion'\n\n/**\n * Shows user alerts\n */\nconst AlertView: FC = () => {\n const { data, status } = useSelector((state: RootState) => state.alerts)\n\n return (\n <motion.div\n className={`pi-flex pi-flex-col pi-gap-4 pi-mb-6 pi-overflow-y-auto pi-custom-scrollbar ${\n status.activeAlertsCount > 1 && 'pi-pr-2'\n }`}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n style={{\n maxHeight: '5.5rem',\n }}\n >\n {/* Show alerts */}\n {Object.values(data).map(\n (alert, index) =>\n alert.active && (\n <Alert\n key={index}\n type='alert'\n color={alert.success ? 'green' : alert.break ? 'red' : 'orange'}\n message={alert.message}\n />\n ),\n )}\n </motion.div>\n )\n}\n\nexport default AlertView\n"],"names":["_a","useSelector","state","alerts","data","status","React","createElement","motion","div","className","concat","activeAlertsCount","initial","opacity","animate","style","maxHeight","Object","values","map","alert","index","active","Alert","key","type","color","success","break","message"],"mappings":"mcAYsB,WACd,IAAAA,EAAmBC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,MAAM,IAA/DC,SAAMC,WAEd,OACEC,EAAA,QAAAC,cAACC,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,UAAW,+EAAAC,OACTN,EAAOO,kBAAoB,GAAK,WAElCC,QAAS,CAAEC,QAAS,GACpBC,QAAS,CAAED,QAAS,GACpBE,MAAO,CACLC,UAAW,WAIZC,OAAOC,OAAOf,GAAMgB,KACnB,SAACC,EAAOC,GACN,OAAAD,EAAME,QACJjB,EAAC,QAAAC,cAAAiB,EAAAA,SACCC,IAAKH,EACLI,KAAK,QACLC,MAAON,EAAMO,QAAU,QAAUP,EAAMQ,MAAQ,MAAQ,SACvDC,QAAST,EAAMS,SAElB,IAIX"}
@@ -1,13 +1,14 @@
1
- import React from 'react';
2
- interface AudioBarsProps {
3
- audioStream: MediaStream | null;
4
- size?: 'large' | 'small';
5
- }
1
+ import { type FC } from 'react';
6
2
  /**
7
3
  * This component shows a dynamic audio spectrum given an audio stream
8
4
  *
9
- * @param audioStream The audio stream to analyse
10
- *
5
+ * @param audioStream An audio stream to analyse
6
+ * @param audioElement An audio element to analyse
11
7
  */
12
- export declare const AudioBars: React.NamedExoticComponent<AudioBarsProps>;
8
+ export declare const AudioBars: FC<AudioBarsProps>;
9
+ interface AudioBarsProps {
10
+ audioStream?: MediaStream | null;
11
+ audioElement?: HTMLAudioElement | null;
12
+ size?: 'large' | 'small';
13
+ }
13
14
  export {};
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=t(e),r={0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},i={0:2,1:1,2:1,3:2},u=n.default.memo((function(t){var u=t.audioStream,a=t.size,c=void 0===a?"large":a,o=e.useRef(null),f=e.useRef(null),l=e.useRef(null),s="large"===c?r:i;function d(e){u&&function(e){var t=new(window.AudioContext||window.webkitAudioContext),n=t.createAnalyser();t.createMediaStreamSource(e).connect(n),n.smoothingTimeConstant=.8,n.fftSize=32;var r=function(){var e;if(!l.current){var t=new Uint8Array(n.frequencyBinCount);n.getByteFrequencyData(t);var i=Object.values(t),u=null===(e=o.current)||void 0===e?void 0:e.children;if(u&&(null==u?void 0:u.length)>0){for(var a=0;a<Object.keys(s).length;++a){var c=i[s[a]]/255,d=u&&u[a]&&u[a].style;d&&c>0&&(d.height="".concat(100*c,"%"))}var m=requestAnimationFrame(r);m&&(f.current=m)}}},i=requestAnimationFrame(r);i&&(f.current=i)}(u),l.current=!1,e&&e()}function m(e){f.current&&cancelAnimationFrame(f.current),l.current=!0,e&&e()}return e.useEffect((function(){m((function(){d()}))}),[c]),e.useEffect((function(){m((function(){d()}))}),[u]),e.useEffect((function(){return function(){m()}}),[]),n.default.createElement("div",{className:"".concat("small"===c?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},n.default.createElement("div",{className:"".concat("small"===c?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:o},u&&Object.keys(s).map((function(e){return n.default.createElement("span",{key:e,className:"pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))}));exports.AudioBars=u;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../store/index.js"),t=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),c={0:4,1:3,2:2,3:1,4:1,5:2,6:3,7:4},i={0:2,1:1,2:1,3:2};exports.AudioBars=function(n){var a=n.audioStream,o=void 0===a?null:a,s=n.audioElement,l=void 0===s?null:s,d=n.size,f=e.useRef(null),m=e.useRef(null),p="large"===d?c:i,v=e.useRef(null),y=e.useRef(null),h=e.useRef(null),E=t.useDispatch();function A(){var e,r=requestAnimationFrame(x);(e=r)&&(m.current=e)}function x(){var e;if(y&&y.current){var r=new Uint8Array(y.current.frequencyBinCount);y.current.getByteFrequencyData(r);var t=Object.values(r),n=null===(e=f.current)||void 0===e?void 0:e.children;if(n&&(null==n?void 0:n.length)>0){for(var u=0;u<Object.keys(p).length;++u){var c=t[p[u]]/255,i=n&&n[u]&&n[u].style;i&&c>0&&(i.height="".concat(100*c,"%"))}A()}}}return e.useEffect((function(){var e=r.store.getState().audioBars,t=e.audioElementContext,n=e.audioElementAnalyser,u=e.audioElementSource,c=e.isReady;return l&&c?(v.current=t,y.current=n,h.current=u):(v.current=new AudioContext,y.current=v.current.createAnalyser(),y.current.smoothingTimeConstant=.8,y.current.fftSize=32,o?h.current=v.current.createMediaStreamSource(o):l&&(h.current=v.current.createMediaElementSource(l),E.audioBars.setAudioElementContext(v.current),E.audioBars.setAudioElementAnalyser(y.current),E.audioBars.setAudioElementSource(h.current),E.audioBars.setIsReady(!0))),y.current&&h.current&&h.current.connect(y.current),v.current&&y.current&&y.current.connect(v.current.destination),A(),function(){var e,r;m.current&&cancelAnimationFrame(m.current),null===(e=h.current)||void 0===e||e.disconnect(),null===(r=y.current)||void 0===r||r.disconnect()}}),[]),e.useEffect((function(){m.current&&(cancelAnimationFrame(m.current),A())}),[d]),u.default.createElement("div",{className:"".concat("small"===d?"pi-h-6 pi-w-6":"pi-h-12 pi-w-12"," pi-flex pi-justify-center pi-items-center")},u.default.createElement("div",{className:"".concat("small"===d?"pi-h-6":"pi-h-8"," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden"),ref:f},(o||l)&&Object.keys(p).map((function(e){return u.default.createElement("span",{key:e,className:"pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm"})}))))};
2
2
  //# sourceMappingURL=AudioBars.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useEffect, useRef } from 'react'\n\n// Swapping values around for a better visual effect\nconst LARGE_MAP = {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n}\n\nconst SMALL_MAP = {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n}\n\ninterface AudioBarsProps {\n audioStream: MediaStream | null\n size?: 'large' | 'small'\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream The audio stream to analyse\n *\n */\n\nexport const AudioBars = React.memo<AudioBarsProps>(({ audioStream, size = 'large' }) => {\n // The container element ref\n const containerElement = useRef<HTMLDivElement | null>(null)\n\n // The variable that stops\n // const [pause, setPause] = useState<boolean>(false)\n\n const animationRequest = useRef<any>(null)\n const stopped = useRef<any>(null)\n\n // Initialize DATA_MAP depending on size\n const dataMap: { [key: number]: number } = size === 'large' ? LARGE_MAP : SMALL_MAP\n\n const connectStream = (audioStream: MediaStream) => {\n // Initialize and audio context\n // @ts-ignore\n const audioContext = new (window.AudioContext || window.webkitAudioContext)()\n\n // Create and audio contest analyser\n const analyser = audioContext.createAnalyser()\n const source = audioContext.createMediaStreamSource(audioStream)\n\n // Connect the analyser to the audio source\n source.connect(analyser)\n\n // Set smooth constant\n analyser.smoothingTimeConstant = 0.8\n\n // The fftzize to be applied on the stream\n analyser.fftSize = 32\n\n // The function that renders the frames\n const renderFrame = () => {\n // Return if was stopped and not\n if (stopped.current) {\n return\n }\n // Find the frequency\n const frequencyData = new Uint8Array(analyser.frequencyBinCount)\n analyser.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n\n // Select the bars array\n const bars = containerElement.current?.children\n if (bars && bars?.length > 0) {\n // Change styles to every bar\n for (let i = 0; i < Object.keys(dataMap).length; ++i) {\n const value = values[dataMap[i]] / 255\n // @ts-ignore\n const barStyles = bars && bars[i] && bars[i].style\n if (barStyles && value > 0) {\n // Set height to every bar\n barStyles.height = `${100 * value}%`\n }\n }\n const requestId: number = requestAnimationFrame(renderFrame)\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n }\n\n // Render the frames using requestAnimationFrame API\n const requestId: number = requestAnimationFrame(renderFrame)\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n\n // The function that startAnimations\n function startAnimation(callback?: () => void) {\n if (audioStream) {\n // Initialize audio bars\n connectStream(audioStream)\n }\n stopped.current = false\n // Execute the callback\n callback && callback()\n }\n\n // The function that stopAnimations\n function stopAnimation(callback?: () => void) {\n if (animationRequest.current) {\n // Initialize audio bars\n cancelAnimationFrame(animationRequest.current)\n }\n stopped.current = true\n // Execute the callback\n callback && callback()\n }\n\n // Handle size change\n useEffect(() => {\n stopAnimation(() => {\n startAnimation()\n })\n }, [size])\n\n // Handle audio stream\n useEffect(() => {\n stopAnimation(() => {\n startAnimation()\n })\n }, [audioStream])\n\n // Cleanup animation\n useEffect(() => {\n return () => {\n stopAnimation()\n }\n }, [])\n\n return (\n <div\n className={`${size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'} pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {audioStream &&\n Object.keys(dataMap).map((key) => (\n <span key={key} className='pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'></span>\n ))}\n </div>\n </div>\n )\n})\n"],"names":["LARGE_MAP","SMALL_MAP","AudioBars","React","memo","_a","audioStream","_b","size","containerElement","useRef","animationRequest","stopped","dataMap","startAnimation","callback","audioContext","window","AudioContext","webkitAudioContext","analyser","createAnalyser","createMediaStreamSource","connect","smoothingTimeConstant","fftSize","renderFrame","current","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","bars","children","length","i","keys","value","barStyles","style","height","concat","requestId_1","requestAnimationFrame","requestId","connectStream","stopAnimation","cancelAnimationFrame","useEffect","createElement","className","ref","map","key"],"mappings":"8KAMMA,EAAY,CAChB,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,GAGCC,EAAY,CAChB,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,GAeQC,EAAYC,EAAK,QAACC,MAAqB,SAACC,GAAE,IAAAC,gBAAaC,EAAAF,EAAAG,KAAAA,OAAI,IAAAD,EAAG,QAAOA,EAE1EE,EAAmBC,SAA8B,MAKjDC,EAAmBD,SAAY,MAC/BE,EAAUF,SAAY,MAGtBG,EAA8C,UAATL,EAAmBR,EAAYC,EA2D1E,SAASa,EAAeC,GAClBT,GA1DgB,SAACA,GAGrB,IAAMU,EAAe,IAAKC,OAAOC,cAAgBD,OAAOE,oBAGlDC,EAAWJ,EAAaK,iBACfL,EAAaM,wBAAwBhB,GAG7CiB,QAAQH,GAGfA,EAASI,sBAAwB,GAGjCJ,EAASK,QAAU,GAGnB,IAAMC,EAAc,iBAElB,IAAId,EAAQe,QAAZ,CAIA,IAAMC,EAAgB,IAAIC,WAAWT,EAASU,mBAC9CV,EAASW,qBAAqBH,GAC9B,IAAMI,EAASC,OAAOD,OAAOJ,GAGvBM,EAA+B,QAAxB7B,EAAAI,EAAiBkB,eAAO,IAAAtB,OAAA,EAAAA,EAAE8B,SACvC,GAAID,IAAQA,aAAA,EAAAA,EAAME,QAAS,EAAG,CAE5B,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,OAAOK,KAAKzB,GAASuB,SAAUC,EAAG,CACpD,IAAME,EAAQP,EAAOnB,EAAQwB,IAAM,IAE7BG,EAAYN,GAAQA,EAAKG,IAAMH,EAAKG,GAAGI,MACzCD,GAAaD,EAAQ,IAEvBC,EAAUE,OAAS,GAAAC,OAAG,IAAMJ,OAE/B,CACD,IAAMK,EAAoBC,sBAAsBnB,GAC5CkB,IACFjC,EAAiBgB,QAAUiB,EAE9B,CAvBA,CAwBH,EAGME,EAAoBD,sBAAsBnB,GAC5CoB,IACFnC,EAAiBgB,QAAUmB,EAE/B,CAMIC,CAAczC,GAEhBM,EAAQe,SAAU,EAElBZ,GAAYA,GACb,CAGD,SAASiC,EAAcjC,GACjBJ,EAAiBgB,SAEnBsB,qBAAqBtC,EAAiBgB,SAExCf,EAAQe,SAAU,EAElBZ,GAAYA,GACb,CAuBD,OApBAmC,EAAAA,WAAU,WACRF,GAAc,WACZlC,GACF,GACF,GAAG,CAACN,IAGJ0C,EAAAA,WAAU,WACRF,GAAc,WACZlC,GACF,GACF,GAAG,CAACR,IAGJ4C,EAAAA,WAAU,WACR,OAAO,WACLF,GACF,CACD,GAAE,IAGD7C,EACE,QAAAgD,cAAA,MAAA,CAAAC,UAAW,GAAAT,OAAY,UAATnC,EAAmB,gBAAkB,kBAA6D,+CAGhHL,EACE,QAAAgD,cAAA,MAAA,CAAAC,UAAW,GACTT,OAAS,UAATnC,EAAmB,SAAW,SACiD,mFACjF6C,IAAK5C,GAGJH,GACC2B,OAAOK,KAAKzB,GAASyC,KAAI,SAACC,GAAQ,OAChCpD,UAAAgD,cAAA,OAAA,CAAMI,IAAKA,EAAKH,UAAU,4CAC3B,KAIX"}
1
+ {"version":3,"file":"AudioBars.js","sources":["../../src/components/AudioBars.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { ContextSourceType } from '../models/audioBars'\nimport { useDispatch } from 'react-redux'\nimport { store } from '../store'\nimport { Dispatch } from '../store'\n\nconst large = {\n 0: 4,\n 1: 3,\n 2: 2,\n 3: 1,\n 4: 1,\n 5: 2,\n 6: 3,\n 7: 4,\n}\n\nconst small = {\n 0: 2,\n 1: 1,\n 2: 1,\n 3: 2,\n}\n\n/**\n * This component shows a dynamic audio spectrum given an audio stream\n *\n * @param audioStream An audio stream to analyse\n * @param audioElement An audio element to analyse\n */\nexport const AudioBars: FC<AudioBarsProps> = ({\n audioStream = null,\n audioElement = null,\n size,\n}) => {\n // Initialize the main elements\n const containerElement = useRef<HTMLDivElement | null>(null)\n const animationRequest = useRef<number | null>(null)\n const barsMap: BarsMapType = size === 'large' ? large : small\n const context = useRef<AudioContext | null>(null)\n const analyser = useRef<AnalyserNode | null>(null)\n const source = useRef<ContextSourceType>(null)\n const dispatch = useDispatch<Dispatch>()\n\n function saveAnimationRequest(requestId: number) {\n if (requestId) {\n animationRequest.current = requestId\n }\n }\n\n function startAnimation() {\n const animationRequestId: number = requestAnimationFrame(animationFrame)\n saveAnimationRequest(animationRequestId)\n }\n\n // The function that renders the frames of animation\n function animationFrame() {\n if (analyser && analyser.current) {\n const frequencyData = new Uint8Array(analyser.current.frequencyBinCount)\n analyser.current.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n\n const bars = containerElement.current?.children\n if (bars && bars?.length > 0) {\n // Change styles to every bar\n for (let i = 0; i < Object.keys(barsMap).length; ++i) {\n const value = values[barsMap[i]] / 255\n // @ts-ignore\n const barStyles = bars && bars[i] && bars[i].style\n if (barStyles && value > 0) {\n barStyles.height = `${100 * value}%`\n }\n }\n startAnimation()\n }\n }\n }\n\n useEffect(() => {\n const { audioElementContext, audioElementAnalyser, audioElementSource, isReady } =\n store.getState().audioBars\n // Initialize audio context and analyser once\n if (audioElement && isReady) {\n // The source is an audio element\n context.current = audioElementContext\n analyser.current = audioElementAnalyser\n source.current = audioElementSource\n } else {\n // The source is an audio stream\n context.current = new AudioContext()\n analyser.current = context.current.createAnalyser()\n analyser.current.smoothingTimeConstant = 0.8\n analyser.current.fftSize = 32\n // Create the media source stream\n if (audioStream) {\n source.current = context.current.createMediaStreamSource(audioStream)\n } else if (audioElement) {\n source.current = context.current.createMediaElementSource(audioElement)\n // Save the audio elements to stores\n dispatch.audioBars.setAudioElementContext(context.current)\n dispatch.audioBars.setAudioElementAnalyser(analyser.current)\n dispatch.audioBars.setAudioElementSource(source.current)\n dispatch.audioBars.setIsReady(true)\n }\n }\n\n // Connect the audio source to the analyser\n analyser.current && source.current && source.current.connect(analyser.current)\n context.current && analyser.current && analyser.current.connect(context.current.destination)\n startAnimation()\n\n // Cleanup bars animation\n return () => {\n animationRequest.current && cancelAnimationFrame(animationRequest.current)\n source.current?.disconnect()\n analyser.current?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n if (animationRequest.current) {\n cancelAnimationFrame(animationRequest.current)\n startAnimation()\n }\n }, [size])\n\n return (\n <div\n className={`${\n size === 'small' ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n } pi-flex pi-justify-center pi-items-center`}\n >\n {/* The bars container */}\n <div\n className={`${\n size === 'small' ? 'pi-h-6' : 'pi-h-8'\n } pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n ref={containerElement}\n >\n {/* Every single bar */}\n {(audioStream || audioElement) &&\n Object.keys(barsMap).map((key) => (\n <span key={key} className='pi-bg-emerald-600 pi-w-0.5 pi-rounded-sm'></span>\n ))}\n </div>\n </div>\n )\n}\n\ninterface AudioBarsProps {\n audioStream?: MediaStream | null\n audioElement?: HTMLAudioElement | null\n size?: 'large' | 'small'\n}\n\ninterface BarsMapType {\n [key: number]: number\n}\n"],"names":["large","small","_a","_b","audioStream","_c","audioElement","size","containerElement","useRef","animationRequest","barsMap","context","analyser","source","dispatch","useDispatch","startAnimation","requestId","animationRequestId","requestAnimationFrame","animationFrame","current","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","bars","children","length","i","keys","value","barStyles","style","height","concat","useEffect","store","getState","audioBars","audioElementContext","audioElementAnalyser","audioElementSource","isReady","AudioContext","createAnalyser","smoothingTimeConstant","fftSize","createMediaStreamSource","createMediaElementSource","setAudioElementContext","setAudioElementAnalyser","setAudioElementSource","setIsReady","connect","destination","cancelAnimationFrame","disconnect","React","createElement","className","ref","map","key"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type FC } from 'react';
2
+ import { type TypeTypes } from '../../types';
3
+ export declare const Avatar: FC<AvatarProps>;
4
+ export interface AvatarProps {
5
+ type?: TypeTypes | null;
6
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),t=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var o=require("../../node_modules/react-redux/es/hooks/useSelector.js"),i=require("../../_virtual/framer-motion.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e);exports.Avatar=function(e){var n=e.type,a=o.useSelector((function(e){return e.island})).isOpen;return s.default.createElement(i.framerMotion.exports.motion.div,{animate:a?{width:"48px",height:"48px",borderRadius:"12px"}:{width:"24px",height:"24px",borderRadius:"6px"},className:"pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0"},"announcement"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faBullhorn}):"call_recording"===n?s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faVoicemail}):s.default.createElement(r.FontAwesomeIcon,{size:a?"2xl":"lg",icon:t.faMusic}))};
2
+ //# sourceMappingURL=Avatar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/AudioPlayerView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { type TypeTypes } from '../../types'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBullhorn, faVoicemail, faMusic } from '@nethesis/nethesis-solid-svg-icons'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nexport const Avatar: FC<AvatarProps> = ({ type }) => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n return (\n <motion.div\n animate={\n isOpen\n ? { width: '48px', height: '48px', borderRadius: '12px' }\n : { width: '24px', height: '24px', borderRadius: '6px' }\n }\n className='pi-w-12 pi-h-12 pi-bg-gray-500 pi-rounded-xl pi-flex pi-items-center pi-justify-center pi-flex-shrink-0 pi-flex-grow-0'\n >\n {type === 'announcement' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faBullhorn} />\n ) : type === 'call_recording' ? (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faVoicemail} />\n ) : (\n <FontAwesomeIcon size={isOpen ? '2xl' : 'lg'} icon={faMusic} />\n )}\n </motion.div>\n )\n}\n\nexport interface AvatarProps {\n type?: TypeTypes | null\n}\n"],"names":["_a","type","isOpen","useSelector","state","island","React","motion","div","animate","width","height","borderRadius","className","createElement","FontAwesomeIcon","size","icon","faBullhorn","faVoicemail","faMusic"],"mappings":"qkBAWuC,SAACA,GAAE,IAAAC,EAAID,EAAAC,KACpCC,EAAWC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,iBAE3D,OACEC,EAAAA,sBAACC,EAAAA,aAAAA,QAAAA,OAAOC,IACN,CAAAC,QACEP,EACI,CAAEQ,MAAO,OAAQC,OAAQ,OAAQC,aAAc,QAC/C,CAAEF,MAAO,OAAQC,OAAQ,OAAQC,aAAc,OAErDC,UAAU,0HAEA,iBAATZ,EACCK,EAAAA,QAAAQ,cAACC,kBAAgB,CAAAC,KAAMd,EAAS,MAAQ,KAAMe,KAAMC,EAAUA,aACnD,mBAATjB,EACFK,UAAAQ,cAACC,EAAeA,gBAAC,CAAAC,KAAMd,EAAS,MAAQ,KAAMe,KAAME,EAAAA,cAEpDb,wBAACS,EAAeA,gBAAA,CAACC,KAAMd,EAAS,MAAQ,KAAMe,KAAMG,EAAAA,UAI5D"}
@@ -0,0 +1,5 @@
1
+ import { type FC } from 'react';
2
+ export declare const Progress: FC<ProgressTypes>;
3
+ export default Progress;
4
+ export interface ProgressTypes {
5
+ }
@@ -0,0 +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("../../utils/genericFunctions/player.js"),r=require("../../node_modules/react-redux/es/hooks/useSelector.js"),a=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=u(e),o=function(){var u=r.useSelector((function(e){return e.player})),o=u.audioPlayer,i=u.audioPlayerPlaying,s=u.audioPlayerTrackDuration,c=e.useRef(),l=e.useRef(),d=e.useState("00:00"),f=d[0],m=d[1],p=e.useState(),v=p[0],y=p[1],g=a.useDispatch(),x=e.useState(s&&Math.round(s)||0),h=x[0],E=x[1],P=e.useCallback((function(){var e,r=null===(e=null==o?void 0:o.current)||void 0===e?void 0:e.currentTime;r&&m(t.formatTime(Math.round(r))),c.current.value=r,h&&r&&c.current.style.setProperty("--range-progress","".concat(r/h*100,"%")),l.current=requestAnimationFrame(P)}),[o,h,c]);return e.useEffect((function(){i?l.current=requestAnimationFrame(P):cancelAnimationFrame(l.current)}),[i]),e.useEffect((function(){s&&(E(Math.round(s)),y(t.formatTime(s)))}),[s]),e.useEffect((function(){return function(){cancelAnimationFrame(l.current)}}),[]),n.default.createElement(n.default.Fragment,null,n.default.createElement("input",{"data-stop-propagation":!0,ref:c,defaultValue:0,type:"range",step:"1",min:"0",max:h&&h||0,className:"pi-custom-range",onChange:function(){g.player.setAudioPlayerCurrentTime(c.current.value)}}),n.default.createElement("div",{className:"pi-flex pi-justify-between pi-mt-1"},n.default.createElement("div",{className:"pi-font-bold"},f),n.default.createElement("div",{className:"pi-font-bold"},v)))};exports.Progress=o,exports.default=o;
2
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sources":["../../../src/components/AudioPlayerView/Progress.tsx"],"sourcesContent":["import React, { type FC, useState, useEffect, useRef, useCallback } from 'react'\nimport { useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { formatTime } from '../../utils/genericFunctions/player'\nimport { useDispatch } from 'react-redux'\n\nexport const Progress: FC<ProgressTypes> = () => {\n const { audioPlayer, audioPlayerPlaying, audioPlayerTrackDuration } = useSelector(\n (state: RootState) => state.player,\n )\n const progressBarRef = useRef<any>()\n const progressAnimationRef = useRef<any>()\n const [timeProgress, setTimeProgress] = useState<string>('00:00')\n const [displayDuration, setDisplayDuration] = useState<string>()\n const dispatch = useDispatch<Dispatch>()\n const [trackDuration, setTrackDuration] = useState<number>(\n (audioPlayerTrackDuration && Math.round(audioPlayerTrackDuration)) || 0,\n )\n\n const progressAnimation = useCallback(() => {\n const currentTime = audioPlayer?.current?.currentTime\n currentTime && setTimeProgress(formatTime(Math.round(currentTime)))\n progressBarRef.current.value = currentTime\n trackDuration &&\n currentTime &&\n progressBarRef.current.style.setProperty(\n '--range-progress',\n `${(currentTime / trackDuration) * 100}%`,\n )\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n }, [audioPlayer, trackDuration, progressBarRef])\n\n useEffect(() => {\n if (audioPlayerPlaying) {\n progressAnimationRef.current = requestAnimationFrame(progressAnimation)\n } else {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [audioPlayerPlaying])\n\n useEffect(() => {\n if (audioPlayerTrackDuration) {\n setTrackDuration(Math.round(audioPlayerTrackDuration))\n setDisplayDuration(formatTime(audioPlayerTrackDuration))\n }\n }, [audioPlayerTrackDuration])\n\n useEffect(() => {\n return () => {\n cancelAnimationFrame(progressAnimationRef.current)\n }\n }, [])\n\n function handleProgressChange() {\n dispatch.player.setAudioPlayerCurrentTime(progressBarRef.current.value)\n }\n\n return (\n <>\n <input\n data-stop-propagation={true}\n ref={progressBarRef}\n defaultValue={0}\n type='range'\n step='1'\n min='0'\n max={(trackDuration && trackDuration) || 0}\n className='pi-custom-range'\n onChange={handleProgressChange}\n />\n <div className='pi-flex pi-justify-between pi-mt-1'>\n <div className='pi-font-bold'>{timeProgress}</div>\n <div className='pi-font-bold'>{displayDuration}</div>\n </div>\n </>\n )\n}\n\nexport default Progress\n\nexport interface ProgressTypes {}\n"],"names":["Progress","_a","useSelector","state","player","audioPlayer","audioPlayerPlaying","audioPlayerTrackDuration","progressBarRef","useRef","progressAnimationRef","_b","useState","timeProgress","setTimeProgress","_c","displayDuration","setDisplayDuration","dispatch","useDispatch","_d","Math","round","trackDuration","setTrackDuration","progressAnimation","useCallback","currentTime","current","formatTime","value","style","setProperty","requestAnimationFrame","useEffect","cancelAnimationFrame","React","createElement","Fragment","ref","defaultValue","type","step","min","max","className","onChange","setAudioPlayerCurrentTime"],"mappings":"oaAMaA,EAA8B,WACnC,IAAAC,EAAgEC,EAAAA,aACpE,SAACC,GAAqB,OAAAA,EAAMC,UADtBC,EAAWJ,EAAAI,YAAEC,EAAkBL,EAAAK,mBAAEC,EAAwBN,EAAAM,yBAG3DC,EAAiBC,EAAAA,SACjBC,EAAuBD,EAAAA,SACvBE,EAAkCC,EAAAA,SAAiB,SAAlDC,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAC9BI,EAAwCH,aAAvCI,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GACpCG,EAAWC,EAAAA,cACXC,EAAoCR,EAAAA,SACvCL,GAA4Bc,KAAKC,MAAMf,IAA8B,GADjEgB,EAAaH,EAAA,GAAEI,EAAgBJ,EAAA,GAIhCK,EAAoBC,EAAAA,aAAY,iBAC9BC,EAAoC,QAAtB1B,EAAAI,aAAA,EAAAA,EAAauB,eAAS,IAAA3B,OAAA,EAAAA,EAAA0B,YAC1CA,GAAeb,EAAgBe,aAAWR,KAAKC,MAAMK,KACrDnB,EAAeoB,QAAQE,MAAQH,EAC/BJ,GACEI,GACAnB,EAAeoB,QAAQG,MAAMC,YAC3B,mBACA,UAAIL,EAAcJ,EAAiB,IAAG,MAE1Cb,EAAqBkB,QAAUK,sBAAsBR,EACtD,GAAE,CAACpB,EAAakB,EAAef,IA2BhC,OAzBA0B,EAAAA,WAAU,WACJ5B,EACFI,EAAqBkB,QAAUK,sBAAsBR,GAErDU,qBAAqBzB,EAAqBkB,QAE9C,GAAG,CAACtB,IAEJ4B,EAAAA,WAAU,WACJ3B,IACFiB,EAAiBH,KAAKC,MAAMf,IAC5BU,EAAmBY,EAAAA,WAAWtB,IAElC,GAAG,CAACA,IAEJ2B,EAAAA,WAAU,WACR,OAAO,WACLC,qBAAqBzB,EAAqBkB,QAC5C,CACD,GAAE,IAODQ,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAAA,QAAA,CAAA,yBACyB,EACvBE,IAAK/B,EACLgC,aAAc,EACdC,KAAK,QACLC,KAAK,IACLC,IAAI,IACJC,IAAMrB,GAAiBA,GAAkB,EACzCsB,UAAU,kBACVC,SAfN,WACE5B,EAASd,OAAO2C,0BAA0BvC,EAAeoB,QAAQE,MAClE,IAeGM,EAAAA,QAAKC,cAAA,MAAA,CAAAQ,UAAU,sCACbT,EAAA,QAAAC,cAAA,MAAA,CAAKQ,UAAU,gBAAgBhC,GAC/BuB,UAAKC,cAAA,MAAA,CAAAQ,UAAU,gBAAgB7B,IAIvC"}
@@ -0,0 +1,5 @@
1
+ import { type FC } from 'react';
2
+ export declare const KeypadView: FC<KeypadViewTypes>;
3
+ export default KeypadView;
4
+ export interface KeypadViewTypes {
5
+ }
@@ -0,0 +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("./Avatar.js"),a=require("../AudioBars.js"),r=require("./Progress.js"),l=require("../Button.js"),i=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),s=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),u=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),c=function(){var e=u.useSelector((function(e){return e.player})),o=e.audioPlayerTrackType,c=e.audioPlayerTrackName,p=e.audioPlayer,f=e.audioPlayerPlaying,m=u.useSelector((function(e){return e.island})).isOpen,x=n.useDispatch();return d.default.createElement("div",{className:"pi-flex pi-gap-7 pi-flex-col"},d.default.createElement("div",{className:"pi-flex pi-gap-4"},d.default.createElement(t.Avatar,{type:o}),d.default.createElement("div",{className:"pi-flex pi-items-center pi-w-full"},d.default.createElement("div",{style:{width:m?"202px":"60px"},className:"pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block"},c)),d.default.createElement(a.AudioBars,{audioElement:p&&p.current,size:m?"large":"small"})),m&&d.default.createElement("div",null,d.default.createElement(r.Progress,null),d.default.createElement("div",{className:"pi-w-full pi-flex pi-justify-center pi-items-center pi-mt-6"},d.default.createElement(l.Button,{onClick:f?function(){x.player.pauseAudioPlayer()}:function(){x.player.startAudioPlayer()},variant:"default",className:"pi-scale-110"},f?d.default.createElement(i.FontAwesomeIcon,{icon:s.faPause,size:"xl"}):d.default.createElement(i.FontAwesomeIcon,{icon:s.faPlay,size:"xl"})))))};exports.KeypadView=c,exports.default=c;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/AudioPlayerView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef, useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { Avatar } from './Avatar'\nimport { AudioBars } from '../AudioBars'\nimport Progress from './Progress'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPlay, faPause } from '@nethesis/nethesis-solid-svg-icons'\n\nexport const KeypadView: FC<KeypadViewTypes> = () => {\n const { audioPlayerTrackType, audioPlayerTrackName, audioPlayer, audioPlayerPlaying } =\n useSelector((state: RootState) => state.player)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const dispatch = useDispatch<Dispatch>()\n\n function startPlaying() {\n dispatch.player.startAudioPlayer()\n }\n\n function pausePlaying() {\n dispatch.player.pauseAudioPlayer()\n }\n\n return (\n <div className='pi-flex pi-gap-7 pi-flex-col'>\n <div className='pi-flex pi-gap-4'>\n <Avatar type={audioPlayerTrackType} />\n <div className='pi-flex pi-items-center pi-w-full'>\n <div\n style={{\n width: isOpen ? '202px' : '60px',\n }}\n className={`pi-text-base pi-overflow-hidden pi-text-ellipsis pi-whitespace-nowrap pi-inline-block`}\n >\n {audioPlayerTrackName}\n </div>\n </div>\n <AudioBars\n audioElement={audioPlayer && audioPlayer.current}\n size={isOpen ? 'large' : 'small'}\n />\n </div>\n {isOpen && (\n <div>\n <Progress />\n <div className='pi-w-full pi-flex pi-justify-center pi-items-center pi-mt-6'>\n <Button\n onClick={audioPlayerPlaying ? pausePlaying : startPlaying}\n variant='default'\n className='pi-scale-110'\n >\n {audioPlayerPlaying ? (\n <FontAwesomeIcon icon={faPause} size='xl' />\n ) : (\n <FontAwesomeIcon icon={faPlay} size='xl' />\n )}\n </Button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n"],"names":["KeypadView","_a","useSelector","state","player","audioPlayerTrackType","audioPlayerTrackName","audioPlayer","audioPlayerPlaying","isOpen","island","dispatch","useDispatch","React","createElement","className","Avatar","type","style","width","AudioBars","audioElement","current","size","Progress","Button","onClick","pauseAudioPlayer","startAudioPlayer","variant","FontAwesomeIcon","icon","faPause","faPlay"],"mappings":"snBAaaA,EAAkC,WACvC,IAAAC,EACJC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,UADlCC,EAAoBJ,EAAAI,qBAAEC,EAAoBL,EAAAK,qBAAEC,EAAWN,EAAAM,YAAEC,EAAkBP,EAAAO,mBAE3EC,EAAWP,eAAY,SAACC,GAAqB,OAAAA,EAAMO,iBACrDC,EAAWC,EAAAA,cAUjB,OACEC,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,gCACbF,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,oBACbF,EAAAA,QAAAC,cAACE,EAAAA,OAAM,CAACC,KAAMZ,IACdQ,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,qCACbF,EAAAA,QAAAC,cAAA,MAAA,CACEI,MAAO,CACLC,MAAOV,EAAS,QAAU,QAE5BM,UAAW,yFAEVT,IAGLO,EAAAA,QAACC,cAAAM,EAAAA,WACCC,aAAcd,GAAeA,EAAYe,QACzCC,KAAMd,EAAS,QAAU,WAG5BA,GACCI,EAAA,QAAAC,cAAA,MAAA,KACED,UAAAC,cAACU,EAAQA,SAAG,MACZX,EAAAA,QAAKC,cAAA,MAAA,CAAAC,UAAU,+DACbF,EAAA,QAAAC,cAACW,EAAMA,OAAA,CACLC,QAASlB,EA5BrB,WACEG,EAASP,OAAOuB,kBACjB,EAND,WACEhB,EAASP,OAAOwB,kBACjB,EA+BWC,QAAQ,UACRd,UAAU,gBAETP,EACCK,EAAAA,QAAAC,cAACgB,EAAeA,gBAAA,CAACC,KAAMC,EAAAA,QAAST,KAAK,OAErCV,EAAAA,QAAAC,cAACgB,EAAeA,gBAAA,CAACC,KAAME,EAAAA,OAAQV,KAAK,UAQpD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js"),n=require("../../static/icons/PhoneKeypadLight.js"),a=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var s=require("../../store/index.js");require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var o=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../Button.js");require("../AudioBars.js");var u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.paused,q=e.muted,v=f.useSelector((function(e){return e.island})).view,w=f.useSelector((function(e){return e.currentCall})).transferring,y=m.useDispatch();return j.default.createElement(j.default.Fragment,null,j.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},j.default.createElement(l.Button,{variant:"default",active:!!p,onClick:function(){return p?r.unpauseCurrentCall():r.pauseCurrentCall()}},p?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faPause})),j.default.createElement(l.Button,{variant:"default",active:!!q,onClick:function(){return q?r.unmuteCurrentCall():r.muteCurrentCall()}},q?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faMicrophone})),j.default.createElement(l.Button,{active:w,onClick:w?function(){i.sendDTMF("*"),s.store.getState().player.audioPlayerPlaying||y.player.updateAndPlayAudioPlayer({src:o.default,loop:!0}),setTimeout((function(){i.sendDTMF("1"),y.player.stopAudioPlayer()}),500)}:function(){y.island.setIslandView("transfer"!==v?"transfer":"call")},variant:"default"},w?j.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faArrowDownArrowUp})),j.default.createElement(l.Button,{active:"keypad"===v,variant:"default",onClick:function(){y.island.setIslandView("keypad"!==v?"keypad":"call")}},"keypad"===v?j.default.createElement(a.default,null):j.default.createElement(n.default,null))),w&&j.default.createElement(d.TransferActions,null))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js"),n=require("../../static/icons/PhoneKeypadLight.js"),a=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js");var s=require("../../store/index.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var o=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../Button.js"),u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.paused,q=e.muted,v=f.useSelector((function(e){return e.island})).view,w=f.useSelector((function(e){return e.currentCall})).transferring,x=m.useDispatch();return j.default.createElement(j.default.Fragment,null,j.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},j.default.createElement(l.Button,{variant:"default",active:!!p,onClick:function(){return p?r.unpauseCurrentCall():r.pauseCurrentCall()}},p?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faPause})),j.default.createElement(l.Button,{variant:"default",active:!!q,onClick:function(){return q?r.unmuteCurrentCall():r.muteCurrentCall()}},q?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faMicrophone})),j.default.createElement(l.Button,{active:w,onClick:w?function(){i.sendDTMF("*"),s.store.getState().player.audioPlayerPlaying||x.player.updateStartAudioPlayer({src:o.default,loop:!0}),setTimeout((function(){i.sendDTMF("1"),x.player.stopAudioPlayer()}),500)}:function(){x.island.setIslandView("transfer"!==v?"transfer":"call")},variant:"default"},w?j.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faArrowDownArrowUp})),j.default.createElement(l.Button,{active:"keypad"===v,variant:"default",onClick:function(){x.island.setIslandView("keypad"!==v?"keypad":"call")}},"keypad"===v?j.default.createElement(a.default,null):j.default.createElement(n.default,null))),w&&j.default.createElement(d.TransferActions,null))};
2
2
  //# sourceMappingURL=Actions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen and view from island store\n const { view } = useSelector((state: RootState) => state.island)\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n }, 500)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button active={view === 'keypad'} variant='default' onClick={openKeypad}>\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n </div>\n {transferring && <TransferActions />}\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","view","island","transferring","dispatch","useDispatch","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","player","audioPlayerPlaying","updateAndPlayAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","setIslandView","faArrowDownUpAcrossLine","faArrowDownArrowUp","PhoneKeypadSolid","PhoneKeypadLight","TransferActions"],"mappings":"syCA+BoB,WAEZ,IAAAA,EAAoBC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IAArEC,WAAQC,UAGRC,EAASL,eAAY,SAACC,GAAqB,OAAAA,EAAMK,eACjDC,EAAiBP,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAE3DM,EAAWC,EAAAA,cA2BjB,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQb,EACRc,QAAS,WAAM,OAACd,EAASe,EAAAA,qBAAuBC,EAAAA,qBAE/ChB,EACCO,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMC,EAAAA,SAEjCb,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAME,EAAAA,WAGrCd,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQZ,EACRa,QAAS,WAAM,OAACb,EAAQqB,EAAAA,oBAAsBC,EAAAA,oBAE7CtB,EACCM,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMK,EAAAA,oBAEjCjB,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMM,EAAAA,gBAGrClB,EAAC,QAAAC,cAAAG,EAAMA,OACL,CAAAE,OAAQT,EACRU,QAASV,EA3CjB,WACEsB,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDzB,EAASwB,OAAOE,yBAAyB,CACvCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,YAAW,WACTT,EAAQA,SAAC,KACTrB,EAASwB,OAAOO,iBACjB,GAAE,IACJ,EAnBD,WACE/B,EAASF,OAAOkC,cAAuB,aAATnC,EAAsB,WAAa,OAClE,EA+COU,QAAQ,WAEPR,EACCG,EAAAA,QAACC,cAAAS,EAAeA,gBAAC,CAAAP,UAAU,GAAGQ,KAAK,KAAKC,KAAMmB,EAAAA,0BAE9C/B,EAAC,QAAAC,cAAAS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMoB,EAAAA,sBAGrChC,EAAAA,QAAAC,cAACG,SAAM,CAACE,OAAiB,WAATX,EAAmBU,QAAQ,UAAUE,QA7D3D,WACET,EAASF,OAAOkC,cAAuB,WAATnC,EAAoB,SAAW,OAC9D,GA4DiB,WAATA,EAAoBK,wBAACiC,EAAAA,QAAgB,MAAMjC,EAAA,QAAAC,cAACiC,EAAAA,QAAgB,QAGhErC,GAAgBG,EAAAA,QAACC,cAAAkC,EAAAA,gBAAkB,MAG1C"}
1
+ {"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen and view from island store\n const { view } = useSelector((state: RootState) => state.island)\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateStartAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n }, 500)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button active={view === 'keypad'} variant='default' onClick={openKeypad}>\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n </div>\n {transferring && <TransferActions />}\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","view","island","transferring","dispatch","useDispatch","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","player","audioPlayerPlaying","updateStartAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","setIslandView","faArrowDownUpAcrossLine","faArrowDownArrowUp","PhoneKeypadSolid","PhoneKeypadLight","TransferActions"],"mappings":"uwCA+BoB,WAEZ,IAAAA,EAAoBC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IAArEC,WAAQC,UAGRC,EAASL,eAAY,SAACC,GAAqB,OAAAA,EAAMK,eACjDC,EAAiBP,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAE3DM,EAAWC,EAAAA,cA2BjB,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQb,EACRc,QAAS,WAAM,OAACd,EAASe,EAAAA,qBAAuBC,EAAAA,qBAE/ChB,EACCO,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMC,EAAAA,SAEjCb,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAME,EAAAA,WAGrCd,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQZ,EACRa,QAAS,WAAM,OAACb,EAAQqB,EAAAA,oBAAsBC,EAAAA,oBAE7CtB,EACCM,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMK,EAAAA,oBAEjCjB,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMM,EAAAA,gBAGrClB,EAAC,QAAAC,cAAAG,EAAMA,OACL,CAAAE,OAAQT,EACRU,QAASV,EA3CjB,WACEsB,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDzB,EAASwB,OAAOE,uBAAuB,CACrCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,YAAW,WACTT,EAAQA,SAAC,KACTrB,EAASwB,OAAOO,iBACjB,GAAE,IACJ,EAnBD,WACE/B,EAASF,OAAOkC,cAAuB,aAATnC,EAAsB,WAAa,OAClE,EA+COU,QAAQ,WAEPR,EACCG,EAAAA,QAACC,cAAAS,EAAeA,gBAAC,CAAAP,UAAU,GAAGQ,KAAK,KAAKC,KAAMmB,EAAAA,0BAE9C/B,EAAC,QAAAC,cAAAS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMoB,EAAAA,sBAGrChC,EAAAA,QAAAC,cAACG,SAAM,CAACE,OAAiB,WAATX,EAAmBU,QAAQ,UAAUE,QA7D3D,WACET,EAASF,OAAOkC,cAAuB,WAATnC,EAAoB,SAAW,OAC9D,GA4DiB,WAATA,EAAoBK,wBAACiC,EAAAA,QAAgB,MAAMjC,EAAA,QAAAC,cAACiC,EAAAA,QAAgB,QAGhErC,GAAgBG,EAAAA,QAACC,cAAAkC,EAAAA,gBAAkB,MAG1C"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../styles/Island.styles.js");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var t=require("../../_virtual/framer-motion.js"),i=require("../../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=a(e),n=t.framerMotion.exports.motion(r.StyledAvatar),s={open:{width:"48px",height:"48px",borderRadius:"12px"},closed:{width:"24px",height:"24px",borderRadius:"6px"}};exports.default=function(){var e=i.useSelector((function(e){return e.currentCall})).username,r=i.useSelector((function(e){return e.avatars})).avatars,a=i.useSelector((function(e){return e.island})).isOpen,u=i.useSelector((function(e){return e.currentCall})),d=u.incoming,l=u.outgoing,p=u.accepted;return o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative",animate:a?"open":"closed",variants:s},(d||l&&!p)&&o.default.createElement(t.framerMotion.exports.motion.div,{style:{animation:"ping 2s cubic-bezier(0, 0, 0.2, 1) infinite",borderRadius:"4px"},animate:a?"open":"closed",variants:s,className:"pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 -pi-z-10 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12"}),o.default.createElement(n,{className:"pi-z-10 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm",style:{backgroundImage:"url(".concat(r&&r[e]&&r[e],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:a?"open":"closed",variants:s}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/framer-motion/dist/framer-motion.js"),require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/react-redux/es/hooks/useSelector.js"),t=require("../../_virtual/framer-motion.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=i(e),a={open:{width:"48px",height:"48px",borderRadius:"12px"},closed:{width:"24px",height:"24px",borderRadius:"6px"}};exports.default=function(){var e=r.useSelector((function(e){return e.currentCall})).username,i=r.useSelector((function(e){return e.avatars})).avatars,n=r.useSelector((function(e){return e.island})).isOpen,u=r.useSelector((function(e){return e.currentCall})),s=u.incoming,p=u.outgoing,c=u.accepted;return o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-relative",animate:n?"open":"closed",variants:a},(s||p&&!c)&&o.default.createElement(t.framerMotion.exports.motion.div,{style:{animation:"ping 2s cubic-bezier(0, 0, 0.2, 1) infinite",borderRadius:"4px"},animate:n?"open":"closed",variants:a,className:"pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 -pi-z-10 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12"}),o.default.createElement(t.framerMotion.exports.motion.div,{className:"pi-z-10 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover",style:{backgroundImage:"url(".concat(i&&i[e]&&i[e],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},animate:n?"open":"closed",variants:a}))};
2
2
  //# sourceMappingURL=Avatar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { StyledAvatar } from '../../styles/Island.styles'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst AvatarMotion = motion(StyledAvatar)\n\nconst iconVariants = {\n open: {\n width: '48px',\n height: '48px',\n borderRadius: '12px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n },\n}\n\nconst Avatar: FC = () => {\n // Get multiple values from currentCall store\n const { username } = useSelector((state: RootState) => state.currentCall)\n\n // Get avatars from avatars store\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n // Get isOpen from island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Get multiple values from currentCall store\n const { incoming, outgoing, accepted } = useSelector((state: RootState) => state.currentCall)\n\n return (\n <motion.div className='pi-relative' animate={isOpen ? 'open' : 'closed'} variants={iconVariants}>\n {(incoming || (outgoing && !accepted)) && (\n // The background pulse effect\n <motion.div\n style={{\n animation: 'ping 2s cubic-bezier(0, 0, 0.2, 1) infinite',\n borderRadius: '4px',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n className={`pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 -pi-z-10 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12`}\n ></motion.div>\n )}\n <AvatarMotion\n className='pi-z-10 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm'\n style={{\n backgroundImage: `url(${avatars && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n </motion.div>\n )\n}\n\nexport default Avatar\n"],"names":["AvatarMotion","motion","StyledAvatar","iconVariants","open","width","height","borderRadius","closed","username","useSelector","state","currentCall","avatars","isOpen","island","_a","incoming","outgoing","accepted","React","createElement","div","className","animate","variants","style","animation","backgroundImage","concat","backgroundRepeat","backgroundSize"],"mappings":"scASMA,EAAeC,EAAAA,aAAAA,QAAAA,OAAOC,EAAAA,cAEtBC,EAAe,CACnBC,KAAM,CACJC,MAAO,OACPC,OAAQ,OACRC,aAAc,QAEhBC,OAAQ,CACNH,MAAO,OACPC,OAAQ,OACRC,aAAc,wBAIC,WAET,IAAAE,EAAaC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,wBAGrDC,EAAYH,eAAY,SAACC,GAAqB,OAAAA,EAAME,mBAGpDC,EAAWJ,eAAY,SAACC,GAAqB,OAAAA,EAAMI,iBAGrDC,EAAmCN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAAzEK,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAAQH,EAAAG,SAEpC,OACEC,EAAC,QAAAC,cAAApB,8BAAOqB,KAAIC,UAAU,cAAcC,QAASV,EAAS,OAAS,SAAUW,SAAUtB,IAC/Ec,GAAaC,IAAaC,IAE1BC,EAAAA,QAAAC,cAACpB,EAAAA,aAAAA,QAAAA,OAAOqB,IAAG,CACTI,MAAO,CACLC,UAAW,8CACXpB,aAAc,OAEhBiB,QAASV,EAAS,OAAS,SAC3BW,SAAUtB,EACVoB,UAAW,oHAGfH,EAAA,QAAAC,cAACrB,EACC,CAAAuB,UAAU,uDACVG,MAAO,CACLE,gBAAiB,OAAAC,OAAOhB,GAAWA,EAAQJ,IAAaI,EAAQJ,GAAY,KAC5EqB,iBAAkB,YAClBC,eAAgB,WAElBP,QAASV,EAAS,OAAS,SAC3BW,SAAUtB,IAIlB"}
1
+ {"version":3,"file":"Avatar.js","sources":["../../../src/components/CallView/Avatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst iconVariants = {\n open: {\n width: '48px',\n height: '48px',\n borderRadius: '12px',\n },\n closed: {\n width: '24px',\n height: '24px',\n borderRadius: '6px',\n },\n}\n\nconst Avatar: FC = () => {\n // Get multiple values from currentCall store\n const { username } = useSelector((state: RootState) => state.currentCall)\n\n // Get avatars from avatars store\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n // Get isOpen from island store\n const { isOpen } = useSelector((state: RootState) => state.island)\n\n // Get multiple values from currentCall store\n const { incoming, outgoing, accepted } = useSelector((state: RootState) => state.currentCall)\n\n return (\n <motion.div className='pi-relative' animate={isOpen ? 'open' : 'closed'} variants={iconVariants}>\n {(incoming || (outgoing && !accepted)) && (\n // The background pulse effect\n <motion.div\n style={{\n animation: 'ping 2s cubic-bezier(0, 0, 0.2, 1) infinite',\n borderRadius: '4px',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n className={`pi-rounded-xl pi-bg-white pi-absolute pi-opacity-60 -pi-z-10 pi-top-0 pi-left-0 pi-animate-ping pi-h-12 pi-w-12`}\n ></motion.div>\n )}\n <motion.div\n className='pi-z-10 pi-h-12 pi-w-12 pi-bg-gray-300 pi-rounded-sm pi-bg-cover'\n style={{\n backgroundImage: `url(${avatars && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n />\n </motion.div>\n )\n}\n\nexport default Avatar\n"],"names":["iconVariants","open","width","height","borderRadius","closed","username","useSelector","state","currentCall","avatars","isOpen","island","_a","incoming","outgoing","accepted","React","createElement","motion","div","className","animate","variants","style","animation","backgroundImage","concat","backgroundRepeat","backgroundSize"],"mappings":"2ZAQMA,EAAe,CACnBC,KAAM,CACJC,MAAO,OACPC,OAAQ,OACRC,aAAc,QAEhBC,OAAQ,CACNH,MAAO,OACPC,OAAQ,OACRC,aAAc,wBAIC,WAET,IAAAE,EAAaC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,wBAGrDC,EAAYH,eAAY,SAACC,GAAqB,OAAAA,EAAME,mBAGpDC,EAAWJ,eAAY,SAACC,GAAqB,OAAAA,EAAMI,iBAGrDC,EAAmCN,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAAzEK,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAAQH,EAAAG,SAEpC,OACEC,EAAC,QAAAC,cAAAC,8BAAOC,KAAIC,UAAU,cAAcC,QAASX,EAAS,OAAS,SAAUY,SAAUvB,IAC/Ec,GAAaC,IAAaC,IAE1BC,EAAAA,QAAAC,cAACC,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTI,MAAO,CACLC,UAAW,8CACXrB,aAAc,OAEhBkB,QAASX,EAAS,OAAS,SAC3BY,SAAUvB,EACVqB,UAAW,oHAGfJ,EAAC,QAAAC,cAAAC,8BAAOC,IAAG,CACTC,UAAU,mEACVG,MAAO,CACLE,gBAAiB,OAAAC,OAAOjB,GAAWA,EAAQJ,IAAaI,EAAQJ,GAAY,KAC5EsB,iBAAkB,YAClBC,eAAgB,WAElBP,QAASX,EAAS,OAAS,SAC3BY,SAAUvB,IAIlB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),l=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/phone/call.js");require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../store/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js"),require("../Island.js");var a=require("../Button.js"),n=require("../AudioBars.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var u=require("./Timer.js"),s=require("./Number.js"),d=require("./DisplayName.js"),o=require("./Avatar.js"),c=require("./Actions.js"),m=require("../Hangup.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);function q(e,t){return!e&&!t}exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.incoming,g=e.accepted,E=e.outgoing,v=e.startTime,y=f.useSelector((function(e){return e.island})).isOpen,_=f.useSelector((function(e){return e.webrtc})).remoteAudioStream;return j.default.createElement(t.StyledCallView,{incoming:p,accepted:g,outgoing:E,isOpen:y},j.default.createElement(t.StyledTopContent,{isOpen:y,incoming:p,accepted:g,outgoing:E},j.default.createElement(o.default,null),y&&j.default.createElement(t.StyledDetails,null,j.default.createElement(d.default,null),g?j.default.createElement(u.default,{startTime:v}):j.default.createElement(s.default,null)),!y&&!g&&j.default.createElement(d.default,null),!y&&g&&j.default.createElement(u.default,{startTime:v}),g&&_&&j.default.createElement(n.AudioBars,{audioStream:_,size:y?"large":"small"})),y&&j.default.createElement("div",{className:"pi-grid pi-gap-y-5"},g&&j.default.createElement(c.default,null),j.default.createElement("div",{className:"pi-grid ".concat(q(E,g)?"pi-grid-cols-2":g?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"," pi-gap-3.5")},j.default.createElement(m.default,null),q(E,g)&&j.default.createElement(a.Button,{onClick:i.answerIncomingCall,variant:"green"},j.default.createElement(r.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:l.faPhone})))))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../styles/Island.styles.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),l=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),i=require("../../lib/phone/call.js");require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/mic-check/lib/index.js"),require("../Island.js");var a=require("../Button.js"),n=require("../AudioBars.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var u=require("./Timer.js"),s=require("./Number.js"),d=require("./DisplayName.js"),o=require("./Avatar.js"),c=require("./Actions.js"),m=require("../Hangup.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);function q(e,t){return!e&&!t}exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.incoming,g=e.accepted,E=e.outgoing,v=e.startTime,y=f.useSelector((function(e){return e.island})).isOpen,_=f.useSelector((function(e){return e.webrtc})).remoteAudioStream;return j.default.createElement(t.StyledCallView,{incoming:p,accepted:g,outgoing:E,isOpen:y},j.default.createElement(t.StyledTopContent,{isOpen:y,incoming:p,accepted:g,outgoing:E},j.default.createElement(o.default,null),y&&j.default.createElement(t.StyledDetails,null,j.default.createElement(d.default,null),g?j.default.createElement(u.default,{startTime:v}):j.default.createElement(s.default,null)),!y&&!g&&j.default.createElement(d.default,null),!y&&g&&j.default.createElement(u.default,{startTime:v}),g&&_&&j.default.createElement(n.AudioBars,{audioStream:_,size:y?"large":"small"})),y&&j.default.createElement("div",{className:"pi-grid pi-gap-y-5"},g&&j.default.createElement(c.default,null),j.default.createElement("div",{className:"pi-grid ".concat(q(E,g)?"pi-grid-cols-2":g?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"," pi-gap-3.5")},j.default.createElement(m.default,null),q(E,g)&&j.default.createElement(a.Button,{onClick:i.answerIncomingCall,variant:"green"},j.default.createElement(r.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:l.faPhone})))))};
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,3 @@
1
+ import { type FC } from 'react';
2
+ export declare const Close: FC;
3
+ export default Close;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../node_modules/@fortawesome/react-fontawesome/index.es.js");require("../node_modules/react-redux/es/index.js");var s=require("../node_modules/react-redux/es/hooks/useSelector.js"),i=require("../node_modules/react-redux/es/hooks/useDispatch.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=n(e),o=function(){var e=s.useSelector((function(e){return e.island})).view,n=s.useSelector((function(e){return e.player})).audioPlayerPlaying,o=i.useDispatch();return l.default.createElement(l.default.Fragment,null,"player"===e&&l.default.createElement("div",{className:"pi-flex pi-justify-center"},l.default.createElement("div",{onClick:"player"===e?function(){n&&o.player.stopAudioPlayer(),o.island.setIslandView(null),o.island.handleToggleIsOpen()}:function(){o.island.setIslandView(null),o.island.handleToggleIsOpen()},className:"pi-h-9 pi-w-9 pi-rounded-full pi-bg-black hover:pi-bg-gray-500 pi-flex pi-items-center pi-justify-center pi-text-white pi-mt-4 pi-pointer-events-auto pi-cursor-pointer pi-transition-colors"},l.default.createElement(r.FontAwesomeIcon,{icon:t.faXmark,size:"lg"}))))};exports.Close=o,exports.default=o;
2
+ //# sourceMappingURL=Close.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Close.js","sources":["../../src/components/Close.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\nimport React, { type FC } from 'react'\nimport { faXmark } from '@nethesis/nethesis-light-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\n\nexport const Close: FC = () => {\n const { view } = useSelector((state: RootState) => state.island)\n const { audioPlayerPlaying } = useSelector((state: RootState) => state.player)\n const dispatch = useDispatch<Dispatch>()\n\n function playerClose() {\n if (audioPlayerPlaying) {\n dispatch.player.stopAudioPlayer()\n }\n dispatch.island.setIslandView(null)\n dispatch.island.handleToggleIsOpen()\n }\n\n function close() {\n dispatch.island.setIslandView(null)\n dispatch.island.handleToggleIsOpen()\n }\n\n return (\n <>\n {view === 'player' && (\n <div className='pi-flex pi-justify-center'>\n <div\n onClick={view === 'player' ? playerClose : close}\n className='pi-h-9 pi-w-9 pi-rounded-full pi-bg-black hover:pi-bg-gray-500 pi-flex pi-items-center pi-justify-center pi-text-white pi-mt-4 pi-pointer-events-auto pi-cursor-pointer pi-transition-colors'\n >\n <FontAwesomeIcon icon={faXmark} size='lg' />\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default Close\n"],"names":["Close","view","useSelector","state","island","audioPlayerPlaying","player","dispatch","useDispatch","React","createElement","Fragment","className","onClick","stopAudioPlayer","setIslandView","handleToggleIsOpen","FontAwesomeIcon","icon","faXmark","size"],"mappings":"4fAQaA,EAAY,WACf,IAAAC,EAASC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,eACjDC,EAAuBH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,6BACjEC,EAAWC,EAAAA,cAejB,OACEC,EACG,QAAAC,cAAAD,UAAAE,SAAA,KAAS,WAATV,GACCQ,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,6BACbH,EAAAA,QAAAC,cAAA,MAAA,CACEG,QAAkB,WAATZ,EAlBnB,WACMI,GACFE,EAASD,OAAOQ,kBAElBP,EAASH,OAAOW,cAAc,MAC9BR,EAASH,OAAOY,oBACjB,EAED,WACET,EAASH,OAAOW,cAAc,MAC9BR,EAASH,OAAOY,oBACjB,EAQSJ,UAAU,gMAEVH,EAAAA,QAAAC,cAACO,kBAAe,CAACC,KAAMC,EAAAA,QAASC,KAAK,SAMjD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../events/CallEvents.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=r(e);exports.Events=function(e){var r=e.children;return l.default.createElement(l.default.Fragment,null,l.default.createElement(t.CallEvents,null),r)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../events/CallEvents.js"),r=require("../events/PlayerEvents.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=l(e);exports.Events=function(e){var l=e.children;return n.default.createElement(n.default.Fragment,null,n.default.createElement(r.PlayerEvents,null),n.default.createElement(t.CallEvents,null),l)};
2
2
  //# sourceMappingURL=Events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Events.js","sources":["../../src/components/Events.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { CallEvents } from '../events'\n\ninterface EventsProps {\n children: ReactNode\n}\n\nexport const Events: FC<EventsProps> = ({ children }) => {\n return (\n <>\n {<CallEvents />}\n {children}\n </>\n )\n}\n"],"names":["_a","children","React","createElement","Fragment","CallEvents"],"mappings":"kOAUuC,SAACA,GAAE,IAAAC,EAAQD,EAAAC,SAChD,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGF,UAAAC,cAACE,EAAUA,WAAG,MACdJ,EAGP"}
1
+ {"version":3,"file":"Events.js","sources":["../../src/components/Events.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC } from 'react'\nimport { CallEvents, PlayerEvents } from '../events'\n\ninterface EventsProps {\n children: ReactNode\n}\n\nexport const Events: FC<EventsProps> = ({ children }) => {\n return (\n <>\n {<PlayerEvents />}\n {<CallEvents />}\n {children}\n </>\n )\n}\n"],"names":["_a","children","React","createElement","Fragment","PlayerEvents","CallEvents"],"mappings":"yQAUuC,SAACA,GAAE,IAAAC,EAAQD,EAAAC,SAChD,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACGF,UAAAC,cAACE,EAAYA,aAAG,MAChBH,UAAAC,cAACG,EAAUA,WAAG,MACdL,EAGP"}
@@ -3,7 +3,6 @@ import { type FC } from 'react';
3
3
  * Provides the Island logic
4
4
  *
5
5
  * @param showAlways Sets the Island ever visible
6
- *
7
6
  */
8
7
  export declare const Island: FC<IslandProps>;
9
8
  interface IslandProps {
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),a=require("../utils/customHooks/useLocalStorage.js"),n=require("../utils/customHooks/useLongPress.js"),l=require("../utils/genericFunctions/styleTransformValues.js");require("../node_modules/framer-motion/dist/framer-motion.js");var i=require("./CallView/index.js"),s=require("./KeypadView/index.js"),u=require("../lib/island/island.js"),o=require("./AlertGuard.js"),d=require("./CallView/BackCall.js"),c=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var f=require("./TransferView/TransferList.js"),p=require("../_virtual/framer-motion.js"),m=require("../node_modules/react-redux/es/hooks/useSelector.js"),w=require("../node_modules/react-redux/es/hooks/useDispatch.js");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var y=x(t),V=function(x){var V=x.showAlways,g=m.useSelector((function(e){return e.currentCall})),v=g.incoming,j=g.accepted,E=g.outgoing,h=g.transferring,q=g.transferringName,k=g.displayName,A=g.transferSwitching,P=m.useSelector((function(e){return e.island})),b=P.isOpen,S=P.startPosition,_=P.view,L=m.useSelector((function(e){return e.alerts.status})).activeAlertsCount,C=m.useSelector((function(e){return e.animations})).variants,T=m.useSelector((function(e){return e.player})).audioPlayerLoop,I=p.framerMotion.exports.useDragControls(),D=a.useLocalStorage("phone-island",null),N=D[0],R=D[1],M=t.useRef(null),W=t.useRef(null),F=t.useState(N&&N.position?N.position:null),H=F[0],O=F[1],G=t.useState(!1),z=G[0],B=G[1],K=w.useDispatch();var J=n.useLongPress((function(){}),(function(){K.island.toggleIsOpen()}),z,(function(){return B(!1)}),{shouldPreventDefault:!0,delay:250}),Q=t.useRef(null),U=t.useRef(null),X=t.useRef(null),Y=t.useRef(null),Z=t.useRef(null);r.useIsomorphicLayoutEffect((function(){K.player.updatePlayer({audioPlayer:Q.current,localAudio:U.current,localVideo:Y.current,remoteVideo:Z.current,remoteAudio:X.current})}),[]),t.useEffect((function(){(v||E)&&K.island.setIslandView("call")}),[v,E]);var $=t.useState(""),ee=$[0],te=$[1];return t.useEffect((function(){setTimeout((function(){te(_)}),200)}),[_]),t.useEffect((function(){q!==k||A||K.currentCall.updateTransferring(!1)}),[q,k]),y.default.createElement("div",{ref:W,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center phone-island-container pi-z-1000"},(v||E||j||V||L>0)&&y.default.createElement(y.default.Fragment,null,y.default.createElement(p.framerMotion.exports.motion.div,e.__assign({drag:!0,onPointerDown:function(e){I.start(e)},onDragStart:function(){B(!0)},dragTransition:{power:0},initial:{x:(null==H?void 0:H.x)||S.x,y:(null==H?void 0:H.y)||S.y},dragControls:I,dragConstraints:W,onDragEnd:function(){var e=l.styleTransformValues(M.current),t=e.x,r=e.y;t=u.xPosition(Math.round(t),M.current,W.current),r=u.yPosition(Math.round(r),M.current,W.current),R({position:{x:t,y:r}}),O({x:t,y:r})},ref:M},J,{className:"pi-absolute"}),y.default.createElement(d.default,{isVisible:"keypad"===_||"transfer"===_||h}),y.default.createElement(p.framerMotion.exports.motion.div,{className:"pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white",animate:"call"!==_||h?"call"===_&&h?L>0&&b?C.callView.transfer.expandedWithAlerts:0===L&&b?C.callView.transfer.expanded:C.callView.transfer.collapsed:"keypad"===_?b&&L>0?C.keypadView.expandedWithAlerts:b&&0===L?C.keypadView.expanded:b?"":C.keypadView.collapsed:"transfer"===_?b&&L>0?C.transferListView.expandedWithAlerts:b&&0===L?C.transferListView.expanded:b?"":C.transferListView.collapsed:"":b&&(v||E)&&!j?L>0?C.callView.expandedIncomingWithAlerts:C.callView.expandedIncoming:b&&j?L>0?C.callView.expandedAcceptedWithAlerts:C.callView.expandedAccepted:L>0?C.expandedWithAlerts:C.callView.collapsed},y.default.createElement(o.AlertGuard,null,"call"===ee?y.default.createElement(c.default,{forView:"call"},y.default.createElement(i.default,null)):"keypad"===ee?y.default.createElement(c.default,{forView:"keypad"},y.default.createElement(s.default,null)):"transfer"===ee?y.default.createElement(c.default,{forView:"transfer"},y.default.createElement(f.TransferListView,null)):y.default.createElement(y.default.Fragment,null))))),y.default.createElement("div",{className:"pi-hidden"},y.default.createElement("audio",{loop:T,ref:Q}),y.default.createElement("audio",{muted:!0,ref:U}),y.default.createElement("audio",{autoPlay:!0,ref:X}),y.default.createElement("video",{muted:!0,autoPlay:!0,ref:Y}),y.default.createElement("video",{autoPlay:!0,ref:Z})))};V.displayName="Island",exports.Island=V;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../utils/customHooks/useIsomorphicLayoutEffect.js"),r=require("./CallView/index.js"),l=require("./KeypadView/index.js"),a=require("./AudioPlayerView/index.js"),u=require("./AlertGuard.js"),n=require("./CallView/BackCall.js"),i=require("./ViewsTransition.js");require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),require("../lib/webrtc/janus.js"),require("../store/index.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var s=require("./TransferView/TransferList.js"),o=require("./IslandMotion.js"),d=require("./IslandDrag.js"),f=require("./Close.js"),c=require("../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var E=p(e),y=function(p){var y=p.showAlways,j=c.useSelector((function(e){return e.currentCall})),w=j.incoming,q=j.accepted,V=j.outgoing,v=j.transferring,h=j.transferringName,x=j.displayName,g=j.transferSwitching,C=c.useSelector((function(e){return e.island})).view,I=c.useSelector((function(e){return e.alerts.status})).activeAlertsCount,P=c.useSelector((function(e){return e.player})).audioPlayerLoop,_=e.useRef(null),b=m.useDispatch(),k=e.useRef(null),A=e.useRef(null),R=e.useRef(null),S=e.useRef(null),T=e.useRef(null);t.useIsomorphicLayoutEffect((function(){b.player.updatePlayer({audioPlayer:k,localAudio:A,localVideo:S,remoteVideo:T,remoteAudio:R})}),[]),e.useEffect((function(){(w||V)&&b.island.setIslandView("call")}),[w,V]);var L=e.useState(""),N=L[0],D=L[1];return e.useEffect((function(){setTimeout((function(){D(C)}),200)}),[C]),e.useEffect((function(){h!==x||g||b.currentCall.updateTransferring(!1)}),[h,x]),E.default.createElement("div",{ref:_,className:"pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000"},(w||V||q||y||I>0||"player"===C)&&E.default.createElement(E.default.Fragment,null,E.default.createElement(d.IslandDrag,{islandContainerRef:_},E.default.createElement(n.default,{isVisible:"keypad"===C||"transfer"===C||v}),E.default.createElement(o.IslandMotion,null,E.default.createElement(u.AlertGuard,null,"call"===N?E.default.createElement(i.default,{forView:"call"},E.default.createElement(r.default,null)):"keypad"===N?E.default.createElement(i.default,{forView:"keypad"},E.default.createElement(l.default,null)):"transfer"===N?E.default.createElement(i.default,{forView:"transfer"},E.default.createElement(s.TransferListView,null)):"player"===N?E.default.createElement(i.default,{forView:"player"},E.default.createElement(a.KeypadView,null)):E.default.createElement(E.default.Fragment,null))),E.default.createElement(f.Close,null))),E.default.createElement("div",{className:"pi-hidden"},E.default.createElement("audio",{loop:P,ref:k}),E.default.createElement("audio",{muted:!0,ref:A}),E.default.createElement("audio",{autoPlay:!0,ref:R}),E.default.createElement("video",{muted:!0,autoPlay:!0,ref:S}),E.default.createElement("video",{autoPlay:!0,ref:T})))};y.displayName="Island",exports.Island=y;
2
2
  //# sourceMappingURL=Island.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport {\n useLongPress,\n useIsomorphicLayoutEffect,\n useLocalStorage,\n styleTransformValues,\n} from '../utils'\nimport { motion, useDragControls } from 'framer-motion/dist/framer-motion'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport { xPosition, yPosition } from '../lib/island/island'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n *\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const { incoming, accepted, outgoing, transferring, transferringName, displayName, transferSwitching } = useSelector(\n (state: RootState) => state.currentCall,\n )\n // Get isOpen from island store\n const { isOpen, startPosition, view } = useSelector((state: RootState) => state.island)\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n // Get variants from animations store\n const { variants } = useSelector((state: RootState) => state.animations)\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // Initialize Island drag controls\n const controls = useDragControls()\n\n // Initialize Island storage\n const [phoneIslandStorage, setPhoneIslandStorage] =\n useLocalStorage<PhoneIslandStorageTypes | null>('phone-island', null)\n\n // The Island reference\n const islandRef = useRef<any>(null)\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize position or get from storage\n const [position, setPosition] = useState<PositionTypes | null>(\n phoneIslandStorage && phoneIslandStorage.position ? phoneIslandStorage.position : null,\n )\n\n // Initialize the moved property\n const [moved, setMoved] = useState<boolean>(false)\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n // Handles the drag started event\n function handleStartDrag(event) {\n controls.start(event)\n }\n // Handles log press event\n const handleLongPress = () => {}\n\n // Handle Island click\n const handleIslandClick = () => {\n dispatch.island.toggleIsOpen()\n }\n\n // Handles drag end event\n const handleDragEnd = () => {\n // Get initial transform values\n let { x, y }: any = styleTransformValues(islandRef.current)\n // Round position\n x = xPosition(Math.round(x), islandRef.current, islandContainerRef.current)\n y = yPosition(Math.round(y), islandRef.current, islandContainerRef.current)\n // Save the new position to localstorage\n setPhoneIslandStorage({\n position: {\n x,\n y,\n },\n })\n // Set position to variable\n setPosition({\n x,\n y,\n })\n }\n\n // Handles drag started event\n function handleDragStarted() {\n setMoved(true)\n }\n\n // Initialize the longPressEvent object\n const longPressEvent = useLongPress(\n handleLongPress,\n handleIslandClick,\n moved,\n () => setMoved(false),\n {\n shouldPreventDefault: true,\n delay: 250,\n },\n )\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer.current,\n localAudio: localAudio.current,\n localVideo: localVideo.current,\n remoteVideo: remoteVideo.current,\n remoteAudio: remoteAudio.current,\n })\n }, [])\n\n // Handle and apply view switch logic\n useEffect(() => {\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n // Set transferring to false when names are equal\n useEffect(() => {\n if (transferringName === displayName && !transferSwitching) {\n dispatch.currentCall.updateTransferring(false)\n }\n }, [transferringName, displayName])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center phone-island-container pi-z-1000'\n >\n {(incoming || outgoing || accepted || showAlways || activeAlertsCount > 0) && (\n <>\n <motion.div\n drag\n onPointerDown={handleStartDrag}\n onDragStart={handleDragStarted}\n dragTransition={{\n power: 0,\n }}\n initial={{\n x: position?.x || startPosition.x,\n y: position?.y || startPosition.y,\n }}\n dragControls={controls}\n dragConstraints={islandContainerRef}\n onDragEnd={handleDragEnd}\n ref={islandRef}\n {...longPressEvent}\n className='pi-absolute'\n >\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <motion.div\n className='pi-font-sans pi-pointer-events-auto pi-overflow-hidden pi-bg-black pi-text-xs pi-cursor-pointer pi-text-white'\n animate={\n view === 'call' && !transferring\n ? isOpen && (incoming || outgoing) && !accepted\n ? // The call is incoming or outgoing\n activeAlertsCount > 0\n ? variants.callView.expandedIncomingWithAlerts // There are alerts and is incoming or outgoing\n : variants.callView.expandedIncoming // There aren't alerts and is incoming or outgoing\n : isOpen && accepted\n ? // The call is accepted and the island is expanded\n activeAlertsCount > 0\n ? // There is accepted and there are alerts\n variants.callView.expandedAcceptedWithAlerts\n : variants.callView.expandedAccepted\n : activeAlertsCount > 0\n ? // There are alerts\n variants.expandedWithAlerts\n : variants.callView.collapsed\n : view === 'call' && transferring\n ? activeAlertsCount > 0 && isOpen\n ? variants.callView.transfer.expandedWithAlerts\n : activeAlertsCount === 0 && isOpen\n ? variants.callView.transfer.expanded\n : variants.callView.transfer.collapsed\n : view === 'keypad'\n ? isOpen && activeAlertsCount > 0\n ? variants.keypadView.expandedWithAlerts\n : isOpen && activeAlertsCount === 0\n ? variants.keypadView.expanded\n : !isOpen\n ? variants.keypadView.collapsed\n : ''\n : view === 'transfer'\n ? isOpen && activeAlertsCount > 0\n ? variants.transferListView.expandedWithAlerts\n : isOpen && activeAlertsCount === 0\n ? variants.transferListView.expanded\n : !isOpen\n ? variants.transferListView.collapsed\n : ''\n : ''\n }\n >\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </motion.div>\n </motion.div>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n\ninterface PositionTypes {\n x: number\n y: number\n}\n\ninterface PhoneIslandStorageTypes {\n position: PositionTypes\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","transferringName","displayName","transferSwitching","_c","island","isOpen","startPosition","view","activeAlertsCount","alerts","status","variants","animations","audioPlayerLoop","player","controls","useDragControls","_d","useLocalStorage","phoneIslandStorage","setPhoneIslandStorage","islandRef","useRef","islandContainerRef","_e","useState","position","setPosition","_f","moved","setMoved","dispatch","useDispatch","longPressEvent","useLongPress","toggleIsOpen","shouldPreventDefault","delay","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","current","useEffect","setIslandView","_g","currentView","setCurrentView","setTimeout","updateTransferring","React","ref","className","createElement","Fragment","motion","div","__assign","drag","onPointerDown","event","start","onDragStart","dragTransition","power","initial","x","y","dragControls","dragConstraints","onDragEnd","styleTransformValues","xPosition","Math","round","yPosition","BackCall","isVisible","animate","callView","transfer","expandedWithAlerts","expanded","collapsed","keypadView","transferListView","expandedIncomingWithAlerts","expandedIncoming","expandedAcceptedWithAlerts","expandedAccepted","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","loop","muted","autoPlay"],"mappings":"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"}
1
+ {"version":3,"file":"Island.js","sources":["../../src/components/Island.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { useState, useRef, useEffect, type FC } from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { RootState, Dispatch } from '../store'\nimport { useIsomorphicLayoutEffect } from '../utils'\nimport CallView from './CallView'\nimport KeyboardView from './KeypadView'\nimport AudioPlayerView from './AudioPlayerView'\nimport { AlertGuard } from './AlertGuard'\nimport BackCall from './CallView/BackCall'\nimport ViewsTransition from './ViewsTransition'\nimport { TransferListView } from './TransferView'\nimport IslandMotions from './IslandMotion'\nimport IslandDrag from './IslandDrag'\nimport Close from './Close'\n\n/**\n * Provides the Island logic\n *\n * @param showAlways Sets the Island ever visible\n */\nexport const Island: FC<IslandProps> = ({ showAlways }) => {\n // Get the currentCall info\n const {\n incoming,\n accepted,\n outgoing,\n transferring,\n transferringName,\n displayName,\n transferSwitching,\n } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen from island store\n const { view } = useSelector((state: RootState) => state.island)\n\n // Get activeAlertsCount from island store\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n\n // Get audioPlayerLoop value from player store\n const { audioPlayerLoop } = useSelector((state: RootState) => state.player)\n\n // The Container reference\n const islandContainerRef = useRef<any>(null)\n\n // Initialize useDispatch\n const dispatch = useDispatch<Dispatch>()\n\n const audioPlayer = useRef<HTMLAudioElement>(null)\n const localAudio = useRef<HTMLAudioElement>(null)\n const remoteAudio = useRef<HTMLAudioElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const remoteVideo = useRef<HTMLVideoElement>(null)\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n audioPlayer: audioPlayer,\n localAudio: localAudio,\n localVideo: localVideo,\n remoteVideo: remoteVideo,\n remoteAudio: remoteAudio,\n })\n }, [])\n\n // Handle and apply view switch logic\n useEffect(() => {\n if (incoming || outgoing) {\n dispatch.island.setIslandView('call')\n }\n }, [incoming, outgoing])\n\n const [currentView, setCurrentView] = useState<any>('')\n\n // Handle island view change\n useEffect(() => {\n setTimeout(() => {\n setCurrentView(view)\n }, 200)\n }, [view])\n\n // Set transferring to false when names are equal\n useEffect(() => {\n if (transferringName === displayName && !transferSwitching) {\n dispatch.currentCall.updateTransferring(false)\n }\n }, [transferringName, displayName])\n\n return (\n <div\n ref={islandContainerRef}\n className='pi-absolute pi-min-w-full pi-min-h-full pi-left-0 pi-top-0 pi-overflow-hidden pi-pointer-events-none pi-flex pi-items-center pi-justify-center pi-content-center pi-phone-island-container pi-z-1000'\n >\n {(incoming ||\n outgoing ||\n accepted ||\n showAlways ||\n activeAlertsCount > 0 ||\n view === 'player') && (\n <>\n <IslandDrag islandContainerRef={islandContainerRef}>\n {/* Add background call visibility logic */}\n <BackCall isVisible={view === 'keypad' || view === 'transfer' || transferring} />\n <IslandMotions>\n {/* The views logic */}\n <AlertGuard>\n {currentView === 'call' ? (\n <ViewsTransition forView='call'>\n <CallView />\n </ViewsTransition>\n ) : currentView === 'keypad' ? (\n <ViewsTransition forView='keypad'>\n <KeyboardView />\n </ViewsTransition>\n ) : currentView === 'transfer' ? (\n <ViewsTransition forView='transfer'>\n <TransferListView />\n </ViewsTransition>\n ) : currentView === 'player' ? (\n <ViewsTransition forView='player'>\n <AudioPlayerView />\n </ViewsTransition>\n ) : (\n <></>\n )}\n </AlertGuard>\n </IslandMotions>\n <Close />\n </IslandDrag>\n </>\n )}\n <div className='pi-hidden'>\n <audio loop={audioPlayerLoop} ref={audioPlayer}></audio>\n <audio muted={true} ref={localAudio}></audio>\n <audio autoPlay ref={remoteAudio}></audio>\n <video muted={true} autoPlay ref={localVideo}></video>\n <video autoPlay ref={remoteVideo}></video>\n </div>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n\ninterface IslandProps {\n showAlways?: boolean\n}\n"],"names":["Island","_a","showAlways","_b","useSelector","state","currentCall","incoming","accepted","outgoing","transferring","transferringName","displayName","transferSwitching","view","island","activeAlertsCount","alerts","status","audioPlayerLoop","player","islandContainerRef","useRef","dispatch","useDispatch","audioPlayer","localAudio","remoteAudio","localVideo","remoteVideo","useIsomorphicLayoutEffect","updatePlayer","useEffect","setIslandView","_c","useState","currentView","setCurrentView","setTimeout","updateTransferring","React","ref","className","createElement","Fragment","IslandDrag","BackCall","isVisible","IslandMotions","AlertGuard","ViewsTransition","forView","CallView","KeyboardView","TransferListView","AudioPlayerView","Close","loop","muted","autoPlay"],"mappings":"+7BAuBaA,EAA0B,SAACC,GAAE,IAAAC,EAAUD,EAAAC,WAE5CC,EAQFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IAPpCC,EAAQJ,EAAAI,SACRC,EAAQL,EAAAK,SACRC,EAAQN,EAAAM,SACRC,EAAYP,EAAAO,aACZC,EAAgBR,EAAAQ,iBAChBC,EAAWT,EAAAS,YACXC,sBAIMC,EAASV,eAAY,SAACC,GAAqB,OAAAA,EAAMU,eAGjDC,EAAsBZ,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMY,OAAOC,4BAGrEC,EAAoBf,eAAY,SAACC,GAAqB,OAAAA,EAAMe,0BAG9DC,EAAqBC,SAAY,MAGjCC,EAAWC,EAAAA,cAEXC,EAAcH,SAAyB,MACvCI,EAAaJ,SAAyB,MACtCK,EAAcL,SAAyB,MACvCM,EAAaN,SAAyB,MACtCO,EAAcP,SAAyB,MAE7CQ,EAAAA,2BAA0B,WACxBP,EAASH,OAAOW,aAAa,CAC3BN,YAAaA,EACbC,WAAYA,EACZE,WAAYA,EACZC,YAAaA,EACbF,YAAaA,GAEhB,GAAE,IAGHK,EAAAA,WAAU,YACJzB,GAAYE,IACdc,EAASR,OAAOkB,cAAc,OAElC,GAAG,CAAC1B,EAAUE,IAER,IAAAyB,EAAgCC,EAAAA,SAAc,IAA7CC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAgBlC,OAbAF,EAAAA,WAAU,WACRM,YAAW,WACTD,EAAevB,EAChB,GAAE,IACL,GAAG,CAACA,IAGJkB,EAAAA,WAAU,WACJrB,IAAqBC,GAAgBC,GACvCU,EAASjB,YAAYiC,oBAAmB,EAE5C,GAAG,CAAC5B,EAAkBC,IAGpB4B,EAAAA,6BACEC,IAAKpB,EACLqB,UAAU,yMAERnC,GACAE,GACAD,GACAN,GACAc,EAAoB,GACX,WAATF,IACA0B,EAAA,QAAAG,cAAAH,EAAA,QAAAI,SAAA,KACEJ,EAAAA,QAAAG,cAACE,EAAAA,WAAU,CAACxB,mBAAoBA,GAE9BmB,UAAAG,cAACG,EAAQ,QAAA,CAACC,UAAoB,WAATjC,GAA8B,aAATA,GAAuBJ,IACjE8B,UAAAG,cAACK,EAAAA,aAAa,KAEZR,EAAAA,QAAAG,cAACM,aAAU,KACQ,SAAhBb,EACCI,EAAC,QAAAG,cAAAO,EAAAA,QAAgB,CAAAC,QAAQ,QACvBX,EAAAA,QAAAG,cAACS,EAAAA,QAAW,OAEI,WAAhBhB,EACFI,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAAAG,cAACU,EAAAA,QAAe,OAEA,aAAhBjB,EACFI,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,YACvBX,EAAAA,QAAAG,cAACW,EAAAA,iBAAmB,OAEJ,WAAhBlB,EACFI,EAAAA,QAAAG,cAACO,EAAAA,QAAgB,CAAAC,QAAQ,UACvBX,EAAAA,QAACG,cAAAY,aAAkB,OAGrBf,EAAAA,QAAAG,cAAAH,UAAAI,SAAA,QAINJ,EAAAA,QAAAG,cAACa,EAAAA,MAAK,QAIZhB,EAAAA,QAAKG,cAAA,MAAA,CAAAD,UAAU,aACbF,EAAA,QAAAG,cAAA,QAAA,CAAOc,KAAMtC,EAAiBsB,IAAKhB,IACnCe,EAAA,QAAAG,cAAA,QAAA,CAAOe,OAAO,EAAMjB,IAAKf,IACzBc,EAAA,QAAAG,cAAA,QAAA,CAAOgB,UAAQ,EAAClB,IAAKd,IACrBa,UAAOG,cAAA,QAAA,CAAAe,OAAO,EAAMC,UAAS,EAAAlB,IAAKb,IAClCY,UAAOG,cAAA,QAAA,CAAAgB,YAASlB,IAAKZ,KAI7B,EAEA7B,EAAOY,YAAc"}
@@ -0,0 +1,7 @@
1
+ import { type ReactNode, FC, MutableRefObject } from 'react';
2
+ export declare const IslandDrag: FC<IslandDragProps>;
3
+ export default IslandDrag;
4
+ export interface IslandDragProps {
5
+ children: ReactNode;
6
+ islandContainerRef: MutableRefObject<HTMLDivElement>;
7
+ }