@nethesis/phone-island 0.7.31 → 0.7.32

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 (161) hide show
  1. package/dist/App.js.map +1 -1
  2. package/dist/_virtual/_commonjs-dynamic-modules.js +2 -0
  3. package/dist/_virtual/_commonjs-dynamic-modules.js.map +1 -0
  4. package/dist/_virtual/_commonjsHelpers.js +1 -1
  5. package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
  6. package/dist/_virtual/framer-motion.js +2 -0
  7. package/dist/_virtual/framer-motion.js.map +1 -0
  8. package/dist/_virtual/index2.js +1 -1
  9. package/dist/_virtual/index3.js +1 -1
  10. package/dist/_virtual/index4.js +1 -1
  11. package/dist/_virtual/index5.js +2 -0
  12. package/dist/_virtual/index5.js.map +1 -0
  13. package/dist/_virtual/index6.js +2 -0
  14. package/dist/_virtual/index6.js.map +1 -0
  15. package/dist/_virtual/index7.js +2 -0
  16. package/dist/_virtual/index7.js.map +1 -0
  17. package/dist/_virtual/index8.js +2 -0
  18. package/dist/_virtual/index8.js.map +1 -0
  19. package/dist/_virtual/is-prop-valid.browser.esm.js +2 -0
  20. package/dist/_virtual/is-prop-valid.browser.esm.js.map +1 -0
  21. package/dist/_virtual/moment.js +2 -0
  22. package/dist/_virtual/moment.js.map +1 -0
  23. package/dist/_virtual/react-is.development3.js +2 -0
  24. package/dist/_virtual/react-is.development3.js.map +1 -0
  25. package/dist/_virtual/react-is.development4.js +2 -0
  26. package/dist/_virtual/react-is.development4.js.map +1 -0
  27. package/dist/_virtual/react-is.production.min3.js +2 -0
  28. package/dist/_virtual/react-is.production.min3.js.map +1 -0
  29. package/dist/_virtual/react-is.production.min4.js +2 -0
  30. package/dist/_virtual/react-is.production.min4.js.map +1 -0
  31. package/dist/_virtual/unitless.cjs.dev.js +2 -0
  32. package/dist/_virtual/unitless.cjs.dev.js.map +1 -0
  33. package/dist/_virtual/unitless.cjs.js +2 -0
  34. package/dist/_virtual/unitless.cjs.js.map +1 -0
  35. package/dist/_virtual/unitless.cjs.prod.js +2 -0
  36. package/dist/_virtual/unitless.cjs.prod.js.map +1 -0
  37. package/dist/components/AudioBars.d.ts +12 -0
  38. package/dist/components/AudioBars.js +2 -0
  39. package/dist/components/AudioBars.js.map +1 -0
  40. package/dist/components/Button.d.ts +7 -0
  41. package/dist/components/Button.js +2 -0
  42. package/dist/components/Button.js.map +1 -0
  43. package/dist/components/Island.d.ts +5 -2
  44. package/dist/components/Island.js +1 -1
  45. package/dist/components/Island.js.map +1 -1
  46. package/dist/components/Socket.js +1 -1
  47. package/dist/components/Socket.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/SocketEvents.d.ts +71 -0
  53. package/dist/events/SocketEvents.js +2 -0
  54. package/dist/events/SocketEvents.js.map +1 -0
  55. package/dist/index.css +1 -1
  56. package/dist/lib/devices/devices.js +1 -1
  57. package/dist/lib/devices/devices.js.map +1 -1
  58. package/dist/lib/phone/call.js +1 -1
  59. package/dist/lib/phone/call.js.map +1 -1
  60. package/dist/lib/phone/conversation.d.ts +5 -1
  61. package/dist/lib/phone/conversation.js.map +1 -1
  62. package/dist/lib/webrtc/types.d.ts +10 -0
  63. package/dist/models/currentCall.d.ts +12 -0
  64. package/dist/models/currentCall.js +1 -1
  65. package/dist/models/currentCall.js.map +1 -1
  66. package/dist/node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js +2 -0
  67. package/dist/node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js.map +1 -0
  68. package/dist/node_modules/@emotion/memoize/dist/memoize.browser.esm.js +2 -0
  69. package/dist/node_modules/@emotion/memoize/dist/memoize.browser.esm.js.map +1 -0
  70. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +2 -0
  71. package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -0
  72. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.dev.js +2 -0
  73. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.dev.js.map +1 -0
  74. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.js +2 -0
  75. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.js.map +1 -0
  76. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.prod.js +2 -0
  77. package/dist/node_modules/@emotion/unitless/dist/unitless.cjs.prod.js.map +1 -0
  78. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +2 -0
  79. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -0
  80. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js +2 -0
  81. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js.map +1 -0
  82. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +2 -0
  83. package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +1 -0
  84. package/dist/node_modules/framer-motion/dist/framer-motion.js +2 -0
  85. package/dist/node_modules/framer-motion/dist/framer-motion.js.map +1 -0
  86. package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +1 -1
  87. package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js.map +1 -1
  88. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js +1 -1
  89. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js +1 -1
  90. package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
  91. package/dist/node_modules/mic-check/lib/index.js +1 -1
  92. package/dist/node_modules/moment/moment.js +4 -0
  93. package/dist/node_modules/moment/moment.js.map +1 -0
  94. package/dist/node_modules/object-assign/index.js +8 -0
  95. package/dist/node_modules/object-assign/index.js.map +1 -0
  96. package/dist/node_modules/prop-types/checkPropTypes.js +2 -0
  97. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
  98. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +2 -0
  99. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
  100. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +2 -0
  101. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
  102. package/dist/node_modules/prop-types/index.js +2 -0
  103. package/dist/node_modules/prop-types/index.js.map +1 -0
  104. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +2 -0
  105. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
  106. package/dist/node_modules/prop-types/lib/has.js +2 -0
  107. package/dist/node_modules/prop-types/lib/has.js.map +1 -0
  108. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +2 -0
  109. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
  110. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +2 -0
  111. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
  112. package/dist/node_modules/prop-types/node_modules/react-is/index.js +2 -0
  113. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
  114. package/dist/node_modules/react-is/cjs/react-is.development.js +2 -0
  115. package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
  116. package/dist/node_modules/react-is/cjs/react-is.production.min.js +2 -0
  117. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
  118. package/dist/node_modules/react-is/index.js +2 -0
  119. package/dist/node_modules/react-is/index.js.map +1 -0
  120. package/dist/node_modules/react-moment/dist/index.js +12 -0
  121. package/dist/node_modules/react-moment/dist/index.js.map +1 -0
  122. package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.development.js +1 -1
  123. package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.development.js.map +1 -1
  124. package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js +1 -1
  125. package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
  126. package/dist/node_modules/react-redux/node_modules/react-is/index.js +1 -1
  127. package/dist/node_modules/react-redux/node_modules/react-is/index.js.map +1 -1
  128. package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +2 -0
  129. package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js.map +1 -0
  130. package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js +2 -0
  131. package/dist/node_modules/styled-components/node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js.map +1 -0
  132. package/dist/node_modules/styled-components/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js +2 -0
  133. package/dist/node_modules/styled-components/node_modules/@emotion/memoize/dist/emotion-memoize.esm.js.map +1 -0
  134. package/dist/node_modules/tslib/tslib.es6.js +1 -1
  135. package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
  136. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +1 -1
  137. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +1 -1
  138. package/dist/node_modules/use-sync-external-store/shim/index.js +1 -1
  139. package/dist/styles/Island.styles.d.ts +23 -0
  140. package/dist/styles/Island.styles.js +2 -0
  141. package/dist/styles/Island.styles.js.map +1 -0
  142. package/dist/utils/eventDispatch.js +2 -0
  143. package/dist/utils/eventDispatch.js.map +1 -0
  144. package/dist/utils/getTranslate.d.ts +18 -0
  145. package/dist/utils/getTranslate.js +2 -0
  146. package/dist/utils/getTranslate.js.map +1 -0
  147. package/dist/utils/useCommittedRef.d.ts +12 -0
  148. package/dist/utils/useCommittedRef.js +2 -0
  149. package/dist/utils/useCommittedRef.js.map +1 -0
  150. package/dist/utils/useEventCallback.d.ts +1 -0
  151. package/dist/utils/useEventCallback.js +2 -0
  152. package/dist/utils/useEventCallback.js.map +1 -0
  153. package/dist/utils/useEventListener.js +1 -1
  154. package/dist/utils/useEventListener.js.map +1 -1
  155. package/dist/utils/useLocalStorage.d.ts +9 -0
  156. package/dist/utils/useLocalStorage.js +2 -0
  157. package/dist/utils/useLocalStorage.js.map +1 -0
  158. package/dist/utils/useLongPress.d.ts +10 -0
  159. package/dist/utils/useLongPress.js +2 -0
  160. package/dist/utils/useLongPress.js.map +1 -0
  161. package/package.json +8 -1
package/dist/App.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { FC } from 'react'\nimport { Events, WebRTC } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Socket } from './components'\nimport { Base64 } from 'js-base64'\nimport { useIsomorphicLayoutEffect } from './utils'\nimport { Island } from './components'\n\ninterface PhoneIslandProps {\n dataConfig: string\n always?: boolean\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, always = 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 useIsomorphicLayoutEffect(() => {\n const audio: HTMLAudioElement | null = document.querySelector('#audio')\n const localVideo: HTMLVideoElement | null = document.querySelector('#localVideo')\n const remoteVideo: HTMLVideoElement | null = document.querySelector('#remoteVideo')\n store.dispatch.player.updatePlayer({\n audio,\n localVideo,\n remoteVideo,\n })\n }, [])\n\n return (\n <>\n <Provider store={store}>\n <WebRTC hostName={HOST_NAME} sipExten={SIP_EXTEN} sipSecret={SIP_SECRET}>\n <Socket hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Events>\n <Island always={always} />\n </Events>\n </Socket>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","always","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","useIsomorphicLayoutEffect","audio","document","querySelector","localVideo","remoteVideo","store","dispatch","player","updatePlayer","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","Socket","username","authToken","Events","Island","displayName"],"mappings":"oxBAcaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,OAAAA,OAAM,IAAAD,GAAQA,EACtEE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAalC,OAXAS,EAAAA,2BAA0B,WACxB,IAAMC,EAAiCC,SAASC,cAAc,UACxDC,EAAsCF,SAASC,cAAc,eAC7DE,EAAuCH,SAASC,cAAc,gBACpEG,QAAMC,SAASC,OAAOC,aAAa,CACjCR,MAAKA,EACLG,WAAUA,EACVC,YAAWA,GAEd,GAAE,IAGDK,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACP,MAAOA,EAAAA,OACfI,UAAAC,cAACG,EAAMA,OAAA,CAACC,SAAUpB,EAAWqB,SAAUlB,EAAWmB,UAAWlB,GAC3DW,UAAAC,cAACO,EAAMA,OAAA,CAACH,SAAUpB,EAAWwB,SAAUvB,EAAUwB,UAAWvB,GAC1Da,UAAAC,cAACU,EAAAA,OAAM,KACLX,UAAAC,cAACW,EAAAA,OAAM,CAAChC,OAAQA,QAO9B,EAEAJ,EAAYqC,YAAc"}
1
+ {"version":3,"file":"App.js","sources":["../src/App.tsx"],"sourcesContent":["import React, { FC } from 'react'\nimport { Events, WebRTC } from './components'\nimport { Provider } from 'react-redux'\nimport { store } from './store'\nimport { Socket } from './components'\nimport { Base64 } from 'js-base64'\nimport { useIsomorphicLayoutEffect } from './utils'\nimport { Island } from './components'\n\ninterface PhoneIslandProps {\n dataConfig: string\n always?: boolean\n}\n\nexport const PhoneIsland: FC<PhoneIslandProps> = ({ dataConfig, always = 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 useIsomorphicLayoutEffect(() => {\n const audio: HTMLAudioElement | null = document.querySelector('#audio')\n const localVideo: HTMLVideoElement | null = document.querySelector('#localVideo')\n const remoteVideo: HTMLVideoElement | null = document.querySelector('#remoteVideo')\n store.dispatch.player.updatePlayer({\n audio,\n localVideo,\n remoteVideo,\n })\n }, [])\n\n return (\n <>\n <Provider store={store}>\n <WebRTC hostName={HOST_NAME} sipExten={SIP_EXTEN} sipSecret={SIP_SECRET}>\n <Socket hostName={HOST_NAME} username={USERNAME} authToken={AUTH_TOKEN}>\n <Events>\n <Island always={always} />\n </Events>\n </Socket>\n </WebRTC>\n </Provider>\n </>\n )\n}\n\nPhoneIsland.displayName = 'PhoneIsland'\n"],"names":["PhoneIsland","_a","dataConfig","_b","always","CONFIG","Base64","atob","split","HOST_NAME","USERNAME","AUTH_TOKEN","SIP_EXTEN","SIP_SECRET","useIsomorphicLayoutEffect","audio","document","querySelector","localVideo","remoteVideo","store","dispatch","player","updatePlayer","React","createElement","Fragment","Provider","WebRTC","hostName","sipExten","sipSecret","Socket","username","authToken","Events","Island","displayName"],"mappings":"oxBAcaA,EAAoC,SAACC,GAAE,IAAAC,eAAYC,EAAAF,EAAAG,OAAAA,OAAM,IAAAD,GAAQA,EACtEE,EAAmBC,EAAMA,OAACC,KAAKL,GAAc,IAAIM,MAAM,KACvDC,EAAoBJ,EAAO,GAC3BK,EAAmBL,EAAO,GAC1BM,EAAqBN,EAAO,GAC5BO,EAAoBP,EAAO,GAC3BQ,EAAqBR,EAAO,GAalC,OAXAS,EAAAA,2BAA0B,WACxB,IAAMC,EAAiCC,SAASC,cAAc,UACxDC,EAAsCF,SAASC,cAAc,eAC7DE,EAAuCH,SAASC,cAAc,gBACpEG,QAAMC,SAASC,OAAOC,aAAa,CACjCR,MAAKA,EACLG,WAAUA,EACVC,YAAWA,GAEd,GAAE,IAGDK,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAAC,cAACE,EAAAA,QAAQ,CAACP,MAAOA,EAAAA,OACfI,UAAAC,cAACG,EAAMA,OAAA,CAACC,SAAUpB,EAAWqB,SAAUlB,EAAWmB,UAAWlB,GAC3DW,UAAAC,cAACO,EAAMA,OAAA,CAACH,SAAUpB,EAAWwB,SAAUvB,EAAUwB,UAAWvB,GAC1Da,UAAAC,cAACU,EAAAA,OAAM,KACLX,UAAAC,cAACW,EAAAA,OAAM,CAAChC,OAAQA,QAO9B,EAEAJ,EAAYqC,YAAc"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.commonjsRequire=function(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')};
2
+ //# sourceMappingURL=_commonjs-dynamic-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_commonjs-dynamic-modules.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};exports.commonjsGlobal=e;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};exports.commonjsGlobal=e,exports.getAugmentedNamespace=function(e){var t=e.default;if("function"==typeof t){var o=function(){return t.apply(this,arguments)};o.prototype=t.prototype}else o={};return Object.defineProperty(o,"__esModule",{value:!0}),Object.keys(e).forEach((function(t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(o,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})})),o},exports.getDefaultExportFromCjs=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e};
2
2
  //# sourceMappingURL=_commonjsHelpers.js.map
@@ -1,2 +1,2 @@
1
- "use strict";function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}function e(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function r(t){return r=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},r(t)}function n(t,e){return n=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},n(t,e)}function o(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function i(t,e,r){return i=o()?Reflect.construct.bind():function(t,e,r){var o=[null];o.push.apply(o,e);var i=new(Function.bind.apply(t,o));return r&&n(i,r.prototype),i},i.apply(null,arguments)}function u(t){return-1!==Function.toString.call(t).indexOf("[native code]")}function c(t){var e="function"==typeof Map?new Map:void 0;return c=function(t){if(null===t||!u(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,o)}function o(){return i(t,arguments,r(this).constructor)}return o.prototype=Object.create(t.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),n(o,t)},c(t)}function a(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function f(t,e){if(e&&("object"==typeof e||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return a(t)}function l(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=r(t)););return t}function p(){return p="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=l(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},p.apply(this,arguments)}function s(t){if(Array.isArray(t))return d(t)}function y(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function b(t,e){if(t){if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(t,e):void 0}}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function h(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0}),exports.arrayLikeToArray=d,exports.arrayWithoutHoles=s,exports.assertThisInitialized=a,exports.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},exports.construct=i,exports.createClass=function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t},exports.createForOfIteratorHelper=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=b(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==r.return||r.return()}finally{if(c)throw i}}}},exports.createSuper=function(t){var e=o();return function(){var n,o=r(t);if(e){var i=r(this).constructor;n=Reflect.construct(o,arguments,i)}else n=o.apply(this,arguments);return f(this,n)}},exports.defineProperty=function(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t},exports.get=p,exports.getPrototypeOf=r,exports.inherits=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&n(t,e)},exports.isNativeFunction=u,exports.isNativeReflectConstruct=o,exports.iterableToArray=y,exports.nonIterableSpread=h,exports.possibleConstructorReturn=f,exports.setPrototypeOf=n,exports.superPropBase=l,exports.toConsumableArray=function(t){return s(t)||y(t)||b(t)||h()},exports.typeof=t,exports.unsupportedIterableToArray=b,exports.wrapNativeSuper=c;
1
+ "use strict";function t(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e(t)}function r(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,n.key,n)}}function n(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function o(){return o=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},o.apply(this,arguments)}function i(t){return i=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},i(t)}function u(t,e){return u=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},u(t,e)}function c(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}function a(t,e,r){return a=c()?Reflect.construct.bind():function(t,e,r){var n=[null];n.push.apply(n,e);var o=new(Function.bind.apply(t,n));return r&&u(o,r.prototype),o},a.apply(null,arguments)}function f(t){return-1!==Function.toString.call(t).indexOf("[native code]")}function l(t){var e="function"==typeof Map?new Map:void 0;return l=function(t){if(null===t||!f(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==e){if(e.has(t))return e.get(t);e.set(t,r)}function r(){return a(t,arguments,i(this).constructor)}return r.prototype=Object.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),u(r,t)},l(t)}function p(t,e){if(null==t)return{};var r,n,o={},i=Object.keys(t);for(n=0;n<i.length;n++)r=i[n],e.indexOf(r)>=0||(o[r]=t[r]);return o}function s(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function y(t,e){if(e&&("object"==typeof e||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return s(t)}function b(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!==(t=i(t)););return t}function d(){return d="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var n=b(t,e);if(n){var o=Object.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(arguments.length<3?t:r):o.value}},d.apply(this,arguments)}function h(t){if(Array.isArray(t))return x(t)}function O(t){if(Array.isArray(t))return t}function v(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function m(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],u=!0,c=!1;try{for(r=r.call(t);!(u=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);u=!0);}catch(t){c=!0,o=t}finally{try{u||null==r.return||r.return()}finally{if(c)throw o}}return i}}function j(t,e){if(t){if("string"==typeof t)return x(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?x(t,e):void 0}}function x(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function w(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}Object.defineProperty(exports,"__esModule",{value:!0}),exports.arrayLikeToArray=x,exports.arrayWithHoles=O,exports.arrayWithoutHoles=h,exports.assertThisInitialized=s,exports.classCallCheck=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},exports.construct=a,exports.createClass=function(t,e,n){return e&&r(t.prototype,e),n&&r(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t},exports.createForOfIteratorHelper=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=j(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return u=t.done,t},e:function(t){c=!0,i=t},f:function(){try{u||null==r.return||r.return()}finally{if(c)throw i}}}},exports.createSuper=function(t){var e=c();return function(){var r,n=i(t);if(e){var o=i(this).constructor;r=Reflect.construct(n,arguments,o)}else r=n.apply(this,arguments);return y(this,r)}},exports.defineProperty=n,exports.extends=o,exports.get=d,exports.getPrototypeOf=i,exports.inherits=function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&u(t,e)},exports.isNativeFunction=f,exports.isNativeReflectConstruct=c,exports.iterableToArray=v,exports.iterableToArrayLimit=m,exports.nonIterableRest=g,exports.nonIterableSpread=w,exports.objectDestructuringEmpty=function(t){if(null==t)throw new TypeError("Cannot destructure "+t)},exports.objectSpread2=function(e){for(var r=1;r<arguments.length;r++){var o=null!=arguments[r]?arguments[r]:{};r%2?t(Object(o),!0).forEach((function(t){n(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):t(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e},exports.objectWithoutProperties=function(t,e){if(null==t)return{};var r,n,o=p(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)r=i[n],e.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o},exports.objectWithoutPropertiesLoose=p,exports.possibleConstructorReturn=y,exports.setPrototypeOf=u,exports.slicedToArray=function(t,e){return O(t)||m(t,e)||j(t,e)||g()},exports.superPropBase=b,exports.toArray=function(t){return O(t)||v(t)||j(t)||g()},exports.toConsumableArray=function(t){return h(t)||v(t)||j(t)||w()},exports.typeof=e,exports.unsupportedIterableToArray=j,exports.wrapNativeSuper=l;
2
2
  //# sourceMappingURL=_rollupPluginBabelHelpers.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.framerMotion={exports:{}};
2
+ //# sourceMappingURL=framer-motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framer-motion.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.shim={exports:{}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
2
2
  //# sourceMappingURL=index2.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.dist={exports:{}};
2
2
  //# sourceMappingURL=index3.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.shim={exports:{}};
2
2
  //# sourceMappingURL=index4.js.map
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.propTypes={exports:{}};
2
+ //# sourceMappingURL=index5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index5.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
2
+ //# sourceMappingURL=index6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index6.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.reactIs={exports:{}};
2
+ //# sourceMappingURL=index7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index7.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=index8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index8.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./_commonjsHelpers.js"),s=require("../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.browser.esm.js"),r=e.getAugmentedNamespace(s);exports.default=r;
2
+ //# sourceMappingURL=is-prop-valid.browser.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-prop-valid.browser.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.moment={exports:{}};
2
+ //# sourceMappingURL=moment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moment.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=react-is.development3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-is.development3.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=react-is.development4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-is.development4.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=react-is.production.min3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-is.production.min3.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=react-is.production.min4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-is.production.min4.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=unitless.cjs.dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unitless.cjs.dev.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.unitless_cjs={exports:{}};
2
+ //# sourceMappingURL=unitless.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unitless.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
2
+ //# sourceMappingURL=unitless.cjs.prod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unitless.cjs.prod.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ interface AudioBarsProps {
3
+ audioStream: MediaStream | null;
4
+ }
5
+ /**
6
+ * This component shows a dynamic audio spectrum given an audio stream
7
+ *
8
+ * @param audioStream The audio stream to analyse
9
+ *
10
+ */
11
+ export declare const AudioBars: React.NamedExoticComponent<AudioBarsProps>;
12
+ export {};
@@ -0,0 +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:8,1:7,2:6,3:5,4:4,5:3,6:2,7:1,8:1,9:2,10:3,11:4,12:5,13:6,14:7,15:8},a=n.default.memo((function(t){var a=t.audioStream,u=e.useRef(null);return e.useEffect((function(){null!==a&&function(e){var t=new AudioContext,n=t.createAnalyser();t.createMediaStreamSource(e).connect(n),n.smoothingTimeConstant=.8,n.fftSize=32;var a=function(){requestIdleCallback((function(){var e,t=new Uint8Array(n.frequencyBinCount);n.getByteFrequencyData(t);for(var c=Object.values(t),l=null===(e=u.current)||void 0===e?void 0:e.children,i=0;i<Object.keys(r).length;++i){var o=c[r[i]]/255,f=l&&l[i].style;f&&(f.transform="scaleY( ".concat(6*o," )"),f.opacity="0.85")}requestAnimationFrame(a)}))};requestAnimationFrame(a)}(a)}),[a]),n.default.createElement(n.default.Fragment,null,n.default.createElement("div",{className:"flex justify-center items-center gap-0.5 h-12 w-12 -mt-1.5",ref:u},a&&Object.keys(r).map((function(e){return n.default.createElement("div",{key:e,className:"w-1 h-1 bg-emerald-600 inline-block"})}))))}));exports.AudioBars=a;
2
+ //# sourceMappingURL=AudioBars.js.map
@@ -0,0 +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 DATA_MAP = {\n 0: 8,\n 1: 7,\n 2: 6,\n 3: 5,\n 4: 4,\n 5: 3,\n 6: 2,\n 7: 1,\n 8: 1,\n 9: 2,\n 10: 3,\n 11: 4,\n 12: 5,\n 13: 6,\n 14: 7,\n 15: 8,\n}\n\ninterface AudioBarsProps {\n audioStream: MediaStream | null\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 }) => {\n // The container element ref\n const containerElement = useRef<HTMLDivElement | null>(null)\n\n const connectStream = (audioStream: MediaStream) => {\n // Initialize and audio context\n const audioContext = new AudioContext()\n // Create and audio contest analyser\n const analyser = audioContext.createAnalyser()\n const source = audioContext.createMediaStreamSource(audioStream)\n // Connect the analyser to the audio source\n source.connect(analyser)\n // The smooth constant\n analyser.smoothingTimeConstant = 0.8\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 requestIdleCallback(() => {\n // Find the frequency\n const frequencyData = new Uint8Array(analyser.frequencyBinCount)\n analyser.getByteFrequencyData(frequencyData)\n const values = Object.values(frequencyData)\n const barsElements = containerElement.current?.children\n for (let i = 0; i < Object.keys(DATA_MAP).length; ++i) {\n const value = values[DATA_MAP[i]] / 255\n // @ts-ignore\n const elmStyles = barsElements && barsElements[i].style\n if (elmStyles) {\n // Set styles to every bar\n elmStyles.transform = `scaleY( ${value * 6} )`\n elmStyles.opacity = `0.85`\n }\n }\n requestAnimationFrame(renderFrame)\n })\n }\n requestAnimationFrame(renderFrame)\n }\n\n useEffect(() => {\n if (audioStream !== null) {\n // Initialize audio bars\n connectStream(audioStream)\n }\n }, [audioStream])\n\n return (\n <>\n <div\n className='flex justify-center items-center gap-0.5 h-12 w-12 -mt-1.5'\n ref={containerElement}\n >\n {audioStream &&\n Object.keys(DATA_MAP).map((key) => (\n <div key={key} className='w-1 h-1 bg-emerald-600 inline-block'></div>\n ))}\n </div>\n </>\n )\n})\n"],"names":["DATA_MAP","AudioBars","React","memo","_a","audioStream","containerElement","useRef","useEffect","audioContext","AudioContext","analyser","createAnalyser","createMediaStreamSource","connect","smoothingTimeConstant","fftSize","renderFrame","requestIdleCallback","frequencyData","Uint8Array","frequencyBinCount","getByteFrequencyData","values","Object","barsElements","current","children","i","keys","length","value","elmStyles","style","transform","concat","opacity","requestAnimationFrame","connectStream","createElement","Fragment","className","ref","map","key"],"mappings":"8KAMMA,EAAW,CACf,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,GAcOC,EAAYC,EAAK,QAACC,MAAqB,SAACC,GAAE,IAAAC,EAAWD,EAAAC,YAE1DC,EAAmBC,SAA8B,MA8CvD,OAPAC,EAAAA,WAAU,WACY,OAAhBH,GAtCgB,SAACA,GAErB,IAAMI,EAAe,IAAIC,aAEnBC,EAAWF,EAAaG,iBACfH,EAAaI,wBAAwBR,GAE7CS,QAAQH,GAEfA,EAASI,sBAAwB,GAEjCJ,EAASK,QAAU,GAGnB,IAAMC,EAAc,WAClBC,qBAAoB,iBAEZC,EAAgB,IAAIC,WAAWT,EAASU,mBAC9CV,EAASW,qBAAqBH,GAG9B,IAFA,IAAMI,EAASC,OAAOD,OAAOJ,GACvBM,EAAuC,QAAxBrB,EAAAE,EAAiBoB,eAAO,IAAAtB,OAAA,EAAAA,EAAEuB,SACtCC,EAAI,EAAGA,EAAIJ,OAAOK,KAAK7B,GAAU8B,SAAUF,EAAG,CACrD,IAAMG,EAAQR,EAAOvB,EAAS4B,IAAM,IAE9BI,EAAYP,GAAgBA,EAAaG,GAAGK,MAC9CD,IAEFA,EAAUE,UAAY,WAAAC,OAAmB,EAARJ,QACjCC,EAAUI,QAAU,OAEvB,CACDC,sBAAsBpB,EACxB,GACF,EACAoB,sBAAsBpB,EACxB,CAKIqB,CAAcjC,EAElB,GAAG,CAACA,IAGFH,UAAAqC,cAAArC,EAAA,QAAAsC,SAAA,KACEtC,UACEqC,cAAA,MAAA,CAAAE,UAAU,6DACVC,IAAKpC,GAEJD,GACCmB,OAAOK,KAAK7B,GAAU2C,KAAI,SAACC,GAAQ,OACjC1C,UAAAqC,cAAA,MAAA,CAAKK,IAAKA,EAAKH,UAAU,uCAC1B,KAIX"}
@@ -0,0 +1,7 @@
1
+ import { FC, ReactNode, ComponentPropsWithRef } from 'react';
2
+ interface ButtonProps extends ComponentPropsWithRef<'button'> {
3
+ children: ReactNode;
4
+ variant: 'red' | 'green' | 'default' | 'neutral';
5
+ }
6
+ export declare const Button: FC<ButtonProps>;
7
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=r(require("react"));function n(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];return e.filter(Boolean).join(" ")}exports.Button=function(r){var o=r.children,a=r.variant,i=e.__rest(r,["children","variant"]),s={base:"flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 text-white border border-transparent focus:ring-offset-black rounded-full text-sm leading-4 h-12 w-12 col-start-auto",variant:{red:"bg-red-600 hover:bg-red-700 focus:ring-red-500",green:"bg-green-600 hover:bg-green-700 focus:ring-green-500",default:"bg-gray-700 hover:bg-gray-800 focus:ring-gray-600",neutral:"bg-transparent hover:bg-gray-500 border border-gray-600 focus:ring-0"}};return t.default.createElement("button",e.__assign({"data-stop-propagation":!0,className:n(s.base,a&&s.variant[a])},i),o)};
2
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sources":["../../src/components/Button.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC, ReactNode, ComponentPropsWithRef } from 'react'\n\ninterface ButtonProps extends ComponentPropsWithRef<'button'> {\n children: ReactNode\n variant: 'red' | 'green' | 'default' | 'neutral'\n}\n\nfunction classNames(...classes) {\n return classes.filter(Boolean).join(' ')\n}\n\nexport const Button: FC<ButtonProps> = ({ children, variant, ...props }) => {\n const styles = {\n base: 'flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 text-white border border-transparent focus:ring-offset-black rounded-full text-sm leading-4 h-12 w-12 col-start-auto',\n variant: {\n red: 'bg-red-600 hover:bg-red-700 focus:ring-red-500',\n green: 'bg-green-600 hover:bg-green-700 focus:ring-green-500',\n default: 'bg-gray-700 hover:bg-gray-800 focus:ring-gray-600',\n neutral: 'bg-transparent hover:bg-gray-500 border border-gray-600 focus:ring-0',\n },\n }\n\n return (\n <button\n data-stop-propagation={true}\n className={classNames(styles.base, variant && styles.variant[variant])}\n {...props}\n >\n {children}\n </button>\n )\n}\n"],"names":["classNames","classes","_i","arguments","length","filter","Boolean","join","_a","children","variant","props","__rest","styles","base","red","green","default","neutral","React","createElement","__assign","className"],"mappings":"0NAUA,SAASA,QAAW,IAAUC,EAAA,GAAAC,EAAA,EAAVA,EAAUC,UAAAC,OAAVF,IAAAD,EAAUC,GAAAC,UAAAD,GAC5B,OAAOD,EAAQI,OAAOC,SAASC,KAAK,IACtC,gBAEuC,SAACC,GAAE,IAAAC,aAAUC,YAAYC,EAAxBC,EAAAA,OAAAJ,EAAA,CAAA,WAAA,YAChCK,EAAS,CACbC,KAAM,6TACNJ,QAAS,CACPK,IAAK,iDACLC,MAAO,uDACPC,QAAS,oDACTC,QAAS,yEAIb,OACEC,EACyB,QAAAC,cAAA,SAAAC,EAAAA,SAAA,CAAA,yBAAA,EACvBC,UAAWtB,EAAWa,EAAOC,KAAMJ,GAAWG,EAAOH,QAAQA,KACzDC,GAEHF,EAGP"}
@@ -1,6 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  interface IslandProps {
3
- always: boolean;
3
+ always?: boolean;
4
4
  }
5
- export declare const Island: ({ always }: IslandProps) => JSX.Element;
5
+ export declare const Island: {
6
+ ({ always }: IslandProps): JSX.Element;
7
+ displayName: string;
8
+ };
6
9
  export {};
@@ -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("../lib/phone/call.js"),n=require("../node_modules/react-redux/es/hooks/useSelector.js");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=r(e);exports.Island=function(e){var r=e.always,l=n.useSelector((function(e){return e.currentCall})),o=l.incoming,u=l.accepted,c=l.outgoing;return a.default.createElement(a.default.Fragment,null,(o||c||u||r)&&a.default.createElement(a.default.Fragment,null,a.default.createElement("div",{className:"bg-black px-10 py-8 rounded-3xl flex flex-col gap-5 text-white w-fit absolute bottom-6 left-48 font-sans"},a.default.createElement("div",{className:"flex items-center"},a.default.createElement((function(){var e=n.useSelector((function(e){return e.currentCall})).displayName;return a.default.createElement("span",null,e||"-")}),null),u&&a.default.createElement("span",{className:"ml-5 w-3 h-3 bg-red-600 rounded-full animate-ping"})," "),a.default.createElement("div",{className:"flex gap-3"},!c&&!u&&a.default.createElement("button",{onClick:t.answerIncomingCall,className:"flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-green-600 text-white border border-transparent hover:bg-green-700 focus:ring-green-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4"},"Answer"),a.default.createElement("button",{onClick:t.hangupCurrentCall,className:"flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-red-600 text-white border border-transparent hover:bg-red-700 focus:ring-red-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4"},"Decline")))),a.default.createElement("audio",{id:"audio",className:"hidden",autoPlay:!0}),a.default.createElement("video",{id:"localVideo",className:"hidden",muted:!0,autoPlay:!0}),a.default.createElement("video",{id:"remoteVideo",className:"hidden",autoPlay:!0}))};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),a=require("../styles/Island.styles.js");require("../node_modules/react-redux/es/index.js");var n=require("../node_modules/@fortawesome/react-fontawesome/index.es.js"),o=require("../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js");require("../node_modules/framer-motion/dist/framer-motion.js");var r=require("../lib/phone/call.js"),i=require("../utils/useLongPress.js"),l=require("../node_modules/react-moment/dist/index.js"),s=require("../utils/useLocalStorage.js"),u=require("./AudioBars.js"),d=require("../utils/getTranslate.js"),c=require("./Button.js"),m=require("../_virtual/framer-motion.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 g=p(t),x=m.framerMotion.exports.motion(a.StyledDynamicIsland);m.framerMotion.exports.motion(a.StyledMusicIconBar);var v=m.framerMotion.exports.motion(a.StyledAlbumArtThumb);m.framerMotion.exports.motion(a.StyledMusicIcon);var h=m.framerMotion.exports.motion(a.StyledArtistDetails),y=0,E=0,w=function(p){var w=p.always,b=t.useState(!0),j=b[0],S=b[1],q=f.useSelector((function(e){return e.currentCall})),M=q.incoming,N=q.accepted,I=q.outgoing,A=q.displayName,P=q.number,B=q.startTime,_=f.useSelector((function(e){return e.player})).audio,C=m.framerMotion.exports.useDragControls(),D=s.useLocalStorage("phone-island",null),z=D[0],F=D[1],R=t.useRef(null),L=t.useRef(null),T=t.useState(z&&z.position?z.position:null),H=T[0],V=T[1],k=t.useState(!1),O=k[0],W=k[1];function G(){return!I&&!N}var Y=i.useLongPress((function(){console.log("long press trigger")}),(function(){S(!j)}),O,(function(){W(!1)}),{shouldPreventDefault:!0,delay:250}),J=t.useState({}),K=J[0],Q=J[1];t.useEffect((function(){Q({open:{width:"".concat(N?300:370,"px"),height:"auto",borderRadius:"20px"},closed:{width:"96px",height:"12px",borderRadius:"99px"}})}),[N]);var U={open:{width:"48px",height:"48px",borderRadius:"12px",margin:"0 auto"},closed:{width:"12px",height:"12px",borderRadius:"4px"}},X=t.useState(null),Z=X[0],$=X[1];return t.useEffect((function(){return null==_?void 0:_.addEventListener("play",(function(e){console.log("audio.captureStream()"),$(_.captureStream())}))}),[_]),g.default.createElement("div",{ref:L,className:"absolute min-w-full min-h-full left-0 top-0 overflow-hidden pointer-events-none flex items-center justify-center content-center"},(M||I||N||w)&&g.default.createElement(x,e.__assign({className:"font-sans absolute pointer-events-auto",incoming:M,isOpen:j,openedIslandPadding:24,animate:j?"open":"closed",variants:K,accepted:N,outgoing:I,drag:!0,onPointerDown:function(e){C.start(e)},onDragStart:function(){W(!0)},dragTransition:{power:0},initial:{x:(null==H?void 0:H.x)||y,y:(null==H?void 0:H.y)||E},dragControls:C,dragConstraints:L,onDragEnd:function(){var e=d.getTranslateValues(R.current),t=e.x,a=e.y;t=function(e){var t=L.current.offsetWidth/2-R.current.offsetWidth/2;return e>0&&e>t?t:e<0&&e<-t?-t:e}(Math.round(t)),a=function(e){var t=L.current.offsetHeight/2-R.current.offsetHeight/2;return e>0&&e>t?t:e<0&&e<-t?-t:e}(Math.round(a)),F({position:{x:t,y:a}}),V({x:t,y:a})},ref:R},Y),g.default.createElement(a.StyledDynamicIslandTopContent,{isOpen:j},g.default.createElement("div",{className:"relative w-12 h-12"},M&&g.default.createElement(m.framerMotion.exports.motion.div,{style:{animation:"ping 2s cubic-bezier(0, 0, 0.2, 1) infinite",borderRadius:"4px"},animate:j?"open":"closed",variants:U,className:"rounded-xl bg-white absolute opacity-60 -z-10 top-0 left-0 animate-ping h-12 w-12"}),g.default.createElement(v,{className:"z-10 h-12 w-12",animate:j?"open":"closed",variants:U,src:"https://images.unsplash.com/photo-1500462918059-b1a0cb512f1d?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=387&q=80"})),g.default.createElement("div",null,j&&g.default.createElement(h,{initial:{opacity:0},animate:{opacity:1}},g.default.createElement(a.StyledSongName,null,A&&A),g.default.createElement(a.StyledArtistName,null,N?g.default.createElement(l.default,{date:B,interval:1e3,format:"hh:mm:ss",trim:"mid",unix:!0,durationFromNow:!0}):g.default.createElement(g.default.Fragment,null,P&&P)))),N&&g.default.createElement(u.AudioBars,{audioStream:Z})),j&&g.default.createElement("div",{className:"grid gap-y-5"},N&&g.default.createElement("div",{className:"grid grid-cols-4 auto-cols-max gap-y-5 justify-items-center place-items-center justify-center"},g.default.createElement(c.Button,{variant:"default"},g.default.createElement(n.FontAwesomeIcon,{size:"xl",icon:o.faPause})),g.default.createElement(c.Button,{variant:"default"},g.default.createElement(n.FontAwesomeIcon,{size:"xl",icon:o.faMicrophone})),g.default.createElement(c.Button,{variant:"default"},g.default.createElement(n.FontAwesomeIcon,{size:"xl",icon:o.faRightLeft})),g.default.createElement(c.Button,{variant:"neutral"},g.default.createElement(n.FontAwesomeIcon,{size:"xl",icon:o.faChevronDown}))),g.default.createElement(m.framerMotion.exports.motion.div,{className:"grid ".concat(G()?"grid-cols-2":N?"grid-cols-1 justify-items-center":"grid-cols-1 justify-items-end"," gap-3.5"),animate:{opacity:1}},g.default.createElement(c.Button,{onClick:function(e){e.stopPropagation(),r.hangupCurrentCall()},variant:"red"},g.default.createElement(n.FontAwesomeIcon,{className:"rotate-135",size:"2x",icon:o.faPhone})),G()&&g.default.createElement(c.Button,{onClick:function(e){r.answerIncomingCall()},variant:"green"},g.default.createElement(n.FontAwesomeIcon,{size:"2x",icon:o.faPhone}))))),g.default.createElement("audio",{id:"audio",className:"hidden",autoPlay:!0}),g.default.createElement("video",{id:"localVideo",className:"hidden",muted:!0,autoPlay:!0}),g.default.createElement("video",{id:"remoteVideo",className:"hidden",autoPlay:!0}))};w.displayName="Island",exports.Island=w;
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 from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { hangupCurrentCall, answerIncomingCall } from '../lib/phone/call'\n\ninterface IslandProps {\n always: boolean\n}\n\nexport const Island = ({ always }: IslandProps) => {\n const { incoming, accepted, outgoing } = useSelector((state: RootState) => state.currentCall)\n\n const DisplayName = () => {\n const { displayName } = useSelector((state: RootState) => state.currentCall)\n return <span>{displayName ? displayName : '-'}</span>\n }\n\n return (\n <>\n {(incoming || outgoing || accepted || always) && ( // add calling\n <>\n <div className='bg-black px-10 py-8 rounded-3xl flex flex-col gap-5 text-white w-fit absolute bottom-6 left-48 font-sans'>\n <div className='flex items-center'>\n <DisplayName />\n {accepted && (\n <span className='ml-5 w-3 h-3 bg-red-600 rounded-full animate-ping'></span>\n )}{' '}\n </div>\n <div className='flex gap-3'>\n {!outgoing && !accepted && (\n <button\n onClick={answerIncomingCall}\n className='flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-green-600 text-white border border-transparent hover:bg-green-700 focus:ring-green-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4'\n >\n Answer\n </button>\n )}\n <button\n onClick={hangupCurrentCall}\n className='flex content-center items-center justify-center font-medium tracking-wide transition-colors duration-200 transform focus:outline-none focus:ring-2 focus:z-20 focus:ring-offset-2 disabled:opacity-75 bg-red-600 text-white border border-transparent hover:bg-red-700 focus:ring-red-500 focus:ring-offset-black rounded-md px-3 py-2 text-sm leading-4'\n >\n Decline\n </button>\n </div>\n </div>\n </>\n )}\n <audio id='audio' className='hidden' autoPlay></audio>\n <video id='localVideo' className='hidden' muted={true} autoPlay></video>\n <video id='remoteVideo' className='hidden' autoPlay></video>\n </>\n )\n}\n"],"names":["_a","always","_b","useSelector","state","currentCall","incoming","accepted","outgoing","React","createElement","Fragment","className","displayName","onClick","answerIncomingCall","hangupCurrentCall","id","autoPlay","muted"],"mappings":"uVAYsB,SAACA,GAAE,IAAAC,EAAMD,EAAAC,OACvBC,EAAmCC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,eAAzEC,EAAQJ,EAAAI,SAAEC,EAAQL,EAAAK,SAAEC,EAAQN,EAAAM,SAOpC,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,MACIL,GAAYE,GAAYD,GAAYN,IACpCQ,EAAAA,QAAAC,cAAAD,UAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,4GACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,qBACbH,UAAAC,eAXQ,WACV,IAAAG,EAAgBV,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BAChE,OAAOI,EAAAA,QAAAC,cAAA,OAAA,KAAOG,GAA4B,IAC5C,GAQ2B,MACdN,GACCE,EAAA,QAAAC,cAAA,OAAA,CAAME,UAAU,sDACf,KAELH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,eACXJ,IAAaD,GACbE,EAAA,QAAAC,cAAA,SAAA,CACEI,QAASC,EAAkBA,mBAC3BH,UAAU,4WAKdH,EAAAA,QACEC,cAAA,SAAA,CAAAI,QAASE,EAAAA,kBACTJ,UAAU,4VAGH,cAKjBH,UAAOC,cAAA,QAAA,CAAAO,GAAG,QAAQL,UAAU,SAASM,UAAiB,IACtDT,EAAAA,QAAAC,cAAA,QAAA,CAAOO,GAAG,aAAaL,UAAU,SAASO,OAAO,EAAMD,UAAiB,IACxET,EAAAA,QAAAC,cAAA,QAAA,CAAOO,GAAG,cAAcL,UAAU,SAASM,UAAQ,IAGzD"}
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 } from 'react'\nimport {\n StyledAlbumArtThumb,\n StyledArtistDetails,\n StyledArtistName,\n StyledDynamicIsland,\n StyledDynamicIslandTopContent,\n StyledMusicIcon,\n StyledMusicIconBar,\n StyledPlayBar,\n StyledPlayBarWrapper,\n StyledSongControls,\n StyledSongControlsWrappers,\n StyledSongName,\n} from '../styles/Island.styles'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faBackward,\n faPause,\n faForward,\n faCompactDisc,\n faPhone,\n faMicrophone,\n faRightLeft,\n faChevronDown,\n faChevronUp,\n} from '@fortawesome/free-solid-svg-icons'\nimport { motion, useDragControls, useAnimation } from 'framer-motion/dist/framer-motion'\nimport { hangupCurrentCall, answerIncomingCall } from '../lib/phone/call'\nimport { useLongPress } from '../utils/useLongPress'\nimport Moment from 'react-moment'\nimport { useLocalStorage } from '../utils/useLocalStorage'\n\nimport { AudioBars } from './AudioBars'\n\nimport { getTranslateValues } from '../utils/getTranslate'\nimport { Button } from './Button'\n\nconst StyledDynamicIslandMotion = motion(StyledDynamicIsland)\nconst StyledMusicIconBarMotion = motion(StyledMusicIconBar)\nconst StyledMusicAlbumArtThumbMotion = motion(StyledAlbumArtThumb)\nconst StyledMusicIconMotion = motion(StyledMusicIcon)\nconst StyledArtistDetailsMotion = motion(StyledArtistDetails)\n\ninterface IslandProps {\n always?: boolean\n}\n\ninterface PositionTypes {\n x: number\n y: number\n}\n\ninterface PhoneIslandStorageTypes {\n position: PositionTypes\n}\n\nconst OPENED_ISLAND_PADDING = 24\nconst OPENED_ISLAND_WIDTH = 300\nconst INCOMING_ISLAND_WITH = 370\nconst ISLAND_STARTING_POSITION = {\n x: 0,\n y: 0,\n}\n\nexport const Island = ({ always }: IslandProps) => {\n const [isOpen, setIsOpen] = useState(true)\n const { incoming, accepted, outgoing, displayName, number, startTime } = useSelector(\n // ADD ACCEPTED\n (state: RootState) => state.currentCall,\n )\n\n const { audio } = useSelector(\n // ADD ACCEPTED\n (state: RootState) => state.player,\n )\n const controls = useDragControls()\n\n const [phoneIslandStorage, setPhoneIslandStorage] =\n useLocalStorage<PhoneIslandStorageTypes | null>('phone-island', null)\n\n const islandRef = useRef<any>(null)\n\n const islandContainerRef = useRef<any>(null)\n\n const [position, setPosition] = useState<PositionTypes | null>(\n phoneIslandStorage && phoneIslandStorage.position ? phoneIslandStorage.position : null,\n )\n\n const [moved, setMoved] = useState<boolean>(false)\n\n function isAnswerVisible() {\n return !outgoing && !accepted\n }\n\n function startDrag(event) {\n controls.start(event)\n }\n\n function handleAnswer(event) {\n answerIncomingCall()\n }\n\n function handleHangup(event) {\n event.stopPropagation()\n hangupCurrentCall()\n }\n\n const onLongPress = () => {\n console.log('long press trigger')\n }\n\n const islandClick = () => {\n setIsOpen(!isOpen)\n }\n\n function innerXPosition(x) {\n // Get horizontal constraints\n const xConstraintPosition =\n islandContainerRef.current.offsetWidth / 2 - islandRef.current.offsetWidth / 2\n\n // Return the X position inside the constraints\n return x > 0 && x > xConstraintPosition\n ? xConstraintPosition\n : x < 0 && x < -xConstraintPosition\n ? -xConstraintPosition\n : x\n }\n\n function innerYPosition(y) {\n // Get vertical constraints\n const yConstraintPosition =\n islandContainerRef.current.offsetHeight / 2 - islandRef.current.offsetHeight / 2\n\n // Return the Y position inside the constraints\n return y > 0 && y > yConstraintPosition\n ? yConstraintPosition\n : y < 0 && y < -yConstraintPosition\n ? -yConstraintPosition\n : y\n }\n\n const onDragEnd = () => {\n // Get initial translation values\n let { x, y }: any = getTranslateValues(islandRef.current)\n\n // Round position\n x = innerXPosition(Math.round(x))\n y = innerYPosition(Math.round(y))\n\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 function resetMoved() {\n setMoved(false)\n }\n\n function dragStarted() {\n setMoved(true)\n }\n\n const longPressEvent = useLongPress(onLongPress, islandClick, moved, resetMoved, {\n shouldPreventDefault: true,\n delay: 250,\n })\n\n const [variants, setVariant] = useState<any>({})\n\n useEffect(() => {\n setVariant({\n open: {\n width: `${accepted ? OPENED_ISLAND_WIDTH : INCOMING_ISLAND_WITH}px`,\n height: 'auto',\n borderRadius: '20px',\n },\n closed: {\n width: '96px',\n height: '12px',\n borderRadius: '99px',\n },\n })\n }, [accepted])\n\n const iconVariants = {\n open: {\n width: '48px',\n height: '48px',\n borderRadius: '12px',\n margin: '0 auto',\n },\n closed: {\n width: '12px',\n height: '12px',\n borderRadius: '4px',\n },\n }\n\n const [audioStream, setAudioStream] = useState<MediaStream | null>(null)\n\n useEffect(() => {\n const audioStreamListener = audio?.addEventListener('play', (event) => {\n // @ts-ignore\n console.log('audio.captureStream()')\n // @ts-ignore\n setAudioStream(audio.captureStream())\n })\n\n return audioStreamListener\n }, [audio])\n\n return (\n <div\n ref={islandContainerRef}\n className='absolute min-w-full min-h-full left-0 top-0 overflow-hidden pointer-events-none flex items-center justify-center content-center'\n >\n {/* <div className='bg-black h-72 w-72 flex justify-center '>\n <AudioBars audioStream={audioStream} />\n </div> */}\n\n {(incoming || outgoing || accepted || always) && (\n <StyledDynamicIslandMotion\n className='font-sans absolute pointer-events-auto'\n incoming={incoming}\n isOpen={isOpen}\n openedIslandPadding={OPENED_ISLAND_PADDING}\n animate={isOpen ? 'open' : 'closed'}\n variants={variants}\n accepted={accepted}\n outgoing={outgoing}\n drag\n onPointerDown={startDrag}\n onDragStart={dragStarted}\n dragTransition={{\n power: 0,\n }}\n initial={{\n x: position?.x || ISLAND_STARTING_POSITION.x,\n y: position?.y || ISLAND_STARTING_POSITION.y,\n }}\n dragControls={controls}\n dragConstraints={islandContainerRef}\n onDragEnd={onDragEnd}\n ref={islandRef}\n {...longPressEvent}\n >\n <StyledDynamicIslandTopContent isOpen={isOpen}>\n <div className='relative w-12 h-12'>\n {incoming && (\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={`rounded-xl bg-white absolute opacity-60 -z-10 top-0 left-0 animate-ping h-12 w-12`}\n ></motion.div>\n )}\n <StyledMusicAlbumArtThumbMotion\n className='z-10 h-12 w-12'\n animate={isOpen ? 'open' : 'closed'}\n variants={iconVariants}\n src='https://images.unsplash.com/photo-1500462918059-b1a0cb512f1d?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=387&q=80'\n />\n </div>\n <div>\n {isOpen && (\n <StyledArtistDetailsMotion initial={{ opacity: 0 }} animate={{ opacity: 1 }}>\n <StyledSongName>{displayName && displayName}</StyledSongName>\n <StyledArtistName>\n {accepted ? (\n <Moment\n date={startTime}\n interval={1000}\n format='hh:mm:ss'\n trim='mid'\n unix\n durationFromNow\n />\n ) : (\n <>{number && number}</>\n )}\n </StyledArtistName>\n </StyledArtistDetailsMotion>\n )}\n </div>\n {accepted && <AudioBars audioStream={audioStream} />}\n {/* <StyledMusicIconMotion animate={{ opacity: isOpen ? [0, 1] : 1 }}>\n <StyledMusicIconBarMotion\n initial={{ height: '0' }}\n animate={{ height: '100%' }}\n transition={{ duration: 1, delay: 0.5, repeat: Infinity }}\n />\n <StyledMusicIconBarMotion\n initial={{ height: '0' }}\n animate={{ height: '100%' }}\n transition={{ duration: 1, delay: 0.75, repeat: Infinity }}\n />\n <StyledMusicIconBarMotion\n initial={{ height: '0' }}\n animate={{ height: '75%' }}\n transition={{ duration: 1, delay: 0.3, repeat: Infinity }}\n />\n </StyledMusicIconMotion> */}\n </StyledDynamicIslandTopContent>\n {isOpen && (\n <div className='grid gap-y-5'>\n {/* <StyledPlayBarWrapper>\n <span>2:30</span>\n <StyledPlayBar />\n <span>-1:35</span>\n </StyledPlayBarWrapper>\n <StyledSongControlsWrappers>\n <StyledSongControls>\n <FontAwesomeIcon size='2x' icon={faBackward} />\n <FontAwesomeIcon size='3x' icon={faPause} />\n <FontAwesomeIcon size='2x' icon={faForward} />\n </StyledSongControls>\n <div>\n <FontAwesomeIcon size='2x' icon={faCompactDisc} />\n </div>\n </StyledSongControlsWrappers> */}\n {accepted && (\n <div className='grid grid-cols-4 auto-cols-max gap-y-5 justify-items-center place-items-center justify-center'>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faPause} />\n </Button>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faMicrophone} />\n </Button>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faRightLeft} />\n </Button>\n <Button variant='neutral'>\n <FontAwesomeIcon size='xl' icon={faChevronDown} />\n </Button>\n </div>\n )}\n <motion.div\n className={`grid ${\n isAnswerVisible()\n ? 'grid-cols-2'\n : accepted\n ? 'grid-cols-1 justify-items-center'\n : 'grid-cols-1 justify-items-end'\n } gap-3.5`}\n animate={{ opacity: 1 }}\n >\n <Button onClick={handleHangup} variant='red'>\n <FontAwesomeIcon className='rotate-135' size='2x' icon={faPhone} />\n </Button>\n {isAnswerVisible() && (\n <Button onClick={handleAnswer} variant='green'>\n <FontAwesomeIcon size='2x' icon={faPhone} />\n </Button>\n )}\n </motion.div>\n </div>\n )}\n </StyledDynamicIslandMotion>\n )}\n <audio id='audio' className='hidden' autoPlay></audio>\n <video id='localVideo' className='hidden' muted={true} autoPlay></video>\n <video id='remoteVideo' className='hidden' autoPlay></video>\n </div>\n )\n}\n\nIsland.displayName = 'Island'\n"],"names":["StyledDynamicIslandMotion","motion","StyledDynamicIsland","framerMotion","exports","StyledMusicIconBar","StyledMusicAlbumArtThumbMotion","StyledAlbumArtThumb","StyledMusicIcon","StyledArtistDetailsMotion","StyledArtistDetails","ISLAND_STARTING_POSITION","Island","_a","always","_b","useState","isOpen","setIsOpen","_c","useSelector","state","currentCall","incoming","accepted","outgoing","displayName","number","startTime","audio","player","controls","useDragControls","_d","useLocalStorage","phoneIslandStorage","setPhoneIslandStorage","islandRef","useRef","islandContainerRef","_e","position","setPosition","_f","moved","setMoved","isAnswerVisible","longPressEvent","useLongPress","console","log","shouldPreventDefault","delay","_g","variants","setVariant","useEffect","open","width","concat","height","borderRadius","closed","iconVariants","margin","_h","audioStream","setAudioStream","addEventListener","event","captureStream","React","ref","className","createElement","openedIslandPadding","animate","drag","onPointerDown","start","onDragStart","dragTransition","power","initial","x","y","dragControls","dragConstraints","onDragEnd","getTranslateValues","current","xConstraintPosition","offsetWidth","innerXPosition","Math","round","yConstraintPosition","offsetHeight","innerYPosition","StyledDynamicIslandTopContent","div","style","animation","src","opacity","StyledSongName","StyledArtistName","Moment","date","interval","format","trim","unix","durationFromNow","Fragment","AudioBars","Button","variant","FontAwesomeIcon","size","icon","faPause","faMicrophone","faRightLeft","faChevronDown","onClick","stopPropagation","hangupCurrentCall","faPhone","answerIncomingCall","id","autoPlay","muted"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),n=require("../static/incoming_ringtone.js"),o=require("../lib/phone/conversation.js"),r=require("../node_modules/react-redux/es/hooks/useDispatch.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var c=a(e);exports.Socket=function(a){var s=a.hostName,u=a.username,i=a.authToken,l=a.children,d=r.useDispatch();return e.useEffect((function(){var e;(e=t.io(s,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3})).on("connect",(function(){console.log("Socket on: "+s+" is connected !"),e.emit("login",{accessKeyId:"".concat(u),token:i,uaType:"desktop"})})),e.on("authe_ok",(function(){console.log("auth_ok")})),e.on("extenUpdate",(function(e){e.username===u&&function(e){var t=e.conversations[Object.keys(e.conversations)[0]]||{};if(Object.keys(t).length>0){var r=e.status;if(r)switch(r){case"ringing":d.currentCall.updateCurrentCall({displayName:o.getDisplayName(t),incoming:!0,ringing:!0}),d.player.updateAudioSource({src:n.default}),d.player.playAudio({loop:!0});break;case"busy":t&&t.connected?d.currentCall.updateCurrentCall({accepted:!0,outgoing:!1,displayName:"".concat(t.counterpartName)}):t&&!t.connected&&"out"===t.direction&&d.currentCall.updateCurrentCall({outgoing:!0,displayName:"".concat(t.counterpartName)})}}else console.log(e)}(e)}))}),[]),c.default.createElement(c.default.Fragment,null,l)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),n=require("../static/incoming_ringtone.js"),o=require("../lib/phone/conversation.js"),r=require("../events/SocketEvents.js"),a=require("../node_modules/react-redux/es/hooks/useDispatch.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var s=c(e);exports.Socket=function(c){var i=c.hostName,u=c.username,l=c.authToken,d=c.children,p=a.useDispatch();return e.useEffect((function(){var e;(e=t.io(i,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3})).on("connect",(function(){console.log("Socket on: "+i+" is connected !"),e.emit("login",{accessKeyId:"".concat(u),token:l,uaType:"desktop"})})),e.on("authe_ok",(function(){console.log("auth_ok")})),e.on("userMainPresenceUpdate",(function(e){r.dispatchMainPresence(e)})),e.on("extenUpdate",(function(e){r.dispatchConversations(e),e.username===u&&function(e){var t=e.conversations[Object.keys(e.conversations)[0]]||{};if(Object.keys(t).length>0){var r=e.status;if(r)switch(r){case"ringing":p.currentCall.updateCurrentCall({displayName:o.getDisplayName(t),number:"".concat(t.counterpartNum),incoming:!0,ringing:!0}),p.player.updateAudioSource({src:n.default}),p.player.playAudio({loop:!0});break;case"busy":t&&t.connected?p.currentCall.updateCurrentCall({accepted:!0,incoming:!1,outgoing:!1,displayName:o.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(t.startTime/1e3)}):t&&!t.connected&&"out"===t.direction&&p.currentCall.updateCurrentCall({outgoing:!0,displayName:o.getDisplayName(t),number:"".concat(t.counterpartNum)})}}else console.log(e)}(e)}))}),[]),s.default.createElement(s.default.Fragment,null,d)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport incomingRingtone from '../static/incoming_ringtone'\nimport { getDisplayName, type ConvType } from '../lib/phone/conversation'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n\nexport const Socket: FC<SocketProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n useEffect(() => {\n const handleCalls = (res: any) => {\n // Initialize conversation\n const conv: ConvType = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n const status: string = res.status\n if (status) {\n switch (status) {\n case 'ringing':\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n incoming: true,\n ringing: true,\n })\n dispatch.player.updateAudioSource({\n src: incomingRingtone,\n })\n dispatch.player.playAudio({\n loop: true,\n })\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n dispatch.currentCall.updateCurrentCall({\n accepted: true,\n outgoing: false,\n displayName: `${conv.counterpartName}`,\n })\n }\n // Handle outgoing call\n else if (conv && !conv.connected && conv.direction === 'out') {\n dispatch.currentCall.updateCurrentCall({\n outgoing: true,\n displayName: `${conv.counterpartName}`,\n })\n }\n default:\n break\n }\n }\n } else {\n console.log(res)\n }\n }\n\n const initWsConnection = () => {\n const socket = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n socket.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected !')\n socket.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n socket.on('authe_ok', () => {\n console.log('auth_ok')\n })\n\n socket.on('extenUpdate', (res) => {\n if (res.username === username) {\n handleCalls(res)\n }\n })\n }\n\n initWsConnection()\n }, [])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","useEffect","socket","io","upgrade","transports","reconnection","reconnectionDelay","on","console","log","emit","accessKeyId","concat","token","uaType","res","conv","conversations","Object","keys","length","status_1","status","currentCall","updateCurrentCall","displayName","getDisplayName","incoming","ringing","player","updateAudioSource","src","incomingRingtone","playAudio","loop","connected","accepted","outgoing","counterpartName","direction","handleCalls","React","createElement","Fragment"],"mappings":"yqBAiBuC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SACzEC,EAAWC,EAAAA,cAiFjB,OA/EAC,EAAAA,WAAU,WACR,IAgDQC,KAASC,EAAEA,GAACR,EAAU,CAC1BS,SAAS,EACTC,WAAY,CAAC,aACbC,cAAc,EACdC,kBAAmB,OAGdC,GAAG,WAAW,WACnBC,QAAQC,IAAI,cAAgBf,EAAW,mBACvCO,EAAOS,KAAK,QAAS,CACnBC,YAAa,GAAGC,OAAAjB,GAChBkB,MAAOjB,EACPkB,OAAQ,WAEZ,IAEAb,EAAOM,GAAG,YAAY,WACpBC,QAAQC,IAAI,UACd,IAEAR,EAAOM,GAAG,eAAe,SAACQ,GACpBA,EAAIpB,WAAaA,GArEL,SAACoB,GAEnB,IAAMC,EAAiBD,EAAIE,cAAcC,OAAOC,KAAKJ,EAAIE,eAAe,KAAO,CAAA,EAE/E,GAAIC,OAAOC,KAAKH,GAAMI,OAAS,EAAG,CAChC,IAAMC,EAAiBN,EAAIO,OAC3B,GAAID,EACF,OAAQA,GACN,IAAK,UACHvB,EAASyB,YAAYC,kBAAkB,CACrCC,YAAaC,EAAcA,eAACV,GAC5BW,UAAU,EACVC,SAAS,IAEX9B,EAAS+B,OAAOC,kBAAkB,CAChCC,IAAKC,EAAgB,UAEvBlC,EAAS+B,OAAOI,UAAU,CACxBC,MAAM,IAGR,MAEF,IAAK,OACClB,GAAQA,EAAKmB,UACfrC,EAASyB,YAAYC,kBAAkB,CACrCY,UAAU,EACVC,UAAU,EACVZ,YAAa,GAAAb,OAAGI,EAAKsB,mBAIhBtB,IAASA,EAAKmB,WAAgC,QAAnBnB,EAAKuB,WACvCzC,EAASyB,YAAYC,kBAAkB,CACrCa,UAAU,EACVZ,YAAa,GAAAb,OAAGI,EAAKsB,mBAOhC,MACC9B,QAAQC,IAAIM,EAEhB,CAyBMyB,CAAYzB,EAEhB,GAIH,GAAE,IAEI0B,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KAAG9C,EACZ"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport incomingRingtone from '../static/incoming_ringtone'\nimport { getDisplayName, type ConvType } from '../lib/phone/conversation'\nimport { dispatchMainPresence, dispatchConversations } from '../events/SocketEvents'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n\nexport const Socket: FC<SocketProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n useEffect(() => {\n const handleCalls = (res: any) => {\n // Initialize conversation\n const conv: ConvType = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n const status: string = res.status\n if (status) {\n switch (status) {\n case 'ringing':\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incoming: true,\n ringing: true,\n })\n dispatch.player.updateAudioSource({\n src: incomingRingtone,\n })\n dispatch.player.playAudio({\n loop: true,\n })\n\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Accepted call\n dispatch.currentCall.updateCurrentCall({\n accepted: true,\n incoming: false,\n outgoing: false,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n })\n }\n // Handle outgoing call\n else if (conv && !conv.connected && conv.direction === 'out') {\n // Start an outgoing call\n dispatch.currentCall.updateCurrentCall({\n outgoing: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n })\n }\n default:\n break\n }\n }\n } else {\n console.log(res)\n }\n }\n\n const initWsConnection = () => {\n const socket = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n socket.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected !')\n socket.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n socket.on('authe_ok', () => {\n console.log('auth_ok')\n })\n\n socket.on('userMainPresenceUpdate', (res) => {\n // Pass data to dispatchMainPresence\n dispatchMainPresence(res)\n })\n\n socket.on('extenUpdate', (res) => {\n // Call the dispatchConversations\n dispatchConversations(res)\n\n // Handle only the events of the user\n if (res.username === username) {\n handleCalls(res)\n }\n })\n }\n\n initWsConnection()\n }, [])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","useEffect","socket","io","upgrade","transports","reconnection","reconnectionDelay","on","console","log","emit","accessKeyId","concat","token","uaType","res","dispatchMainPresence","dispatchConversations","conv","conversations","Object","keys","length","status_1","status","currentCall","updateCurrentCall","displayName","getDisplayName","number","counterpartNum","incoming","ringing","player","updateAudioSource","src","incomingRingtone","playAudio","loop","connected","accepted","outgoing","startTime","direction","handleCalls","React","createElement","Fragment"],"mappings":"gtBAkBuC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SACzEC,EAAWC,EAAAA,cAiGjB,OA/FAC,EAAAA,WAAU,WACR,IAuDQC,KAASC,EAAEA,GAACR,EAAU,CAC1BS,SAAS,EACTC,WAAY,CAAC,aACbC,cAAc,EACdC,kBAAmB,OAGdC,GAAG,WAAW,WACnBC,QAAQC,IAAI,cAAgBf,EAAW,mBACvCO,EAAOS,KAAK,QAAS,CACnBC,YAAa,GAAGC,OAAAjB,GAChBkB,MAAOjB,EACPkB,OAAQ,WAEZ,IAEAb,EAAOM,GAAG,YAAY,WACpBC,QAAQC,IAAI,UACd,IAEAR,EAAOM,GAAG,0BAA0B,SAACQ,GAEnCC,EAAoBA,qBAACD,EACvB,IAEAd,EAAOM,GAAG,eAAe,SAACQ,GAExBE,EAAqBA,sBAACF,GAGlBA,EAAIpB,WAAaA,GArFL,SAACoB,GAEnB,IAAMG,EAAiBH,EAAII,cAAcC,OAAOC,KAAKN,EAAII,eAAe,KAAO,CAAA,EAE/E,GAAIC,OAAOC,KAAKH,GAAMI,OAAS,EAAG,CAChC,IAAMC,EAAiBR,EAAIS,OAC3B,GAAID,EACF,OAAQA,GACN,IAAK,UACHzB,EAAS2B,YAAYC,kBAAkB,CACrCC,YAAaC,EAAcA,eAACV,GAC5BW,OAAQ,GAAAjB,OAAGM,EAAKY,gBAChBC,UAAU,EACVC,SAAS,IAEXlC,EAASmC,OAAOC,kBAAkB,CAChCC,IAAKC,EAAgB,UAEvBtC,EAASmC,OAAOI,UAAU,CACxBC,MAAM,IAGR,MAEF,IAAK,OACCpB,GAAQA,EAAKqB,UAEfzC,EAAS2B,YAAYC,kBAAkB,CACrCc,UAAU,EACVT,UAAU,EACVU,UAAU,EACVd,YAAaC,EAAcA,eAACV,GAC5BW,OAAQ,GAAAjB,OAAGM,EAAKY,gBAChBY,UAAW,GAAG9B,OAAAM,EAAKwB,UAAY,OAI1BxB,IAASA,EAAKqB,WAAgC,QAAnBrB,EAAKyB,WAEvC7C,EAAS2B,YAAYC,kBAAkB,CACrCe,UAAU,EACVd,YAAaC,EAAcA,eAACV,GAC5BW,OAAQ,GAAAjB,OAAGM,EAAKY,kBAO3B,MACCtB,QAAQC,IAAIM,EAEhB,CAkCM6B,CAAY7B,EAEhB,GAIH,GAAE,IAEI8B,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KAAGlD,EACZ"}
@@ -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 a=require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),t=require("../lib/webrtc/janus.js"),r=require("../lib/webrtc/messages.js"),n=require("../utils/useWebRTCStore.js"),u=require("../store/index.js"),l=require("../lib/devices/devices.js"),s=require("../node_modules/react-redux/es/hooks/useDispatch.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(e);exports.WebRTC=function(o){var c=o.hostName,d=o.sipExten,f=o.sipSecret,g=o.children,p=s.useDispatch(),m=!1;return i.default.useEffect((function(){l.checkMediaPermissions()}),[]),e.useEffect((function(){var e={registration_failed:[],registered:[],calling:[],incomingcall:[],accepted:[],hangup:[],gateway_down:[],error:[],progress:[],destroyed:[]};return t.default.init({debug:"all",dependencies:t.default.useDefaultDependencies({adapter:a.default}),callback:function(){var a=new t.default({server:"https://".concat(c,"/janus"),success:function(){a.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){p.webrtc.updateWebRTC({sipcall:e}),r.register(d,f),e&&t.default.log("SIP plugin attached! ("+e.getPlugin()+", id = )")},error:function(e){t.default.error(" -- Error attaching plugin..."),t.default.error(e)},consentDialog:function(e){t.default.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){t.default.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){n.useWebRTCStore().sipcall&&t.default.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,a){t.default.log("Janus "+(a?"started":"stopped")+" receiving our "+e)},slowLink:function(e,a){e?t.default.warn("SLOW link: several missing packets from janus (".concat(a,")")):t.default.warn("SLOW link: janus is not receiving all your packets (".concat(a,")"))},onmessage:function(a,u){var l=n.useWebRTCStore().sipcall;t.default.debug(" ::: Got a message :::"),t.default.debug(JSON.stringify(a));var s=a.error;if(null==s||null==s){var o=a.result;if(null!=o&&void 0!==o.event&&null!==o.event){var i=o.event;for(var c in e[i])e[i][c](a,u);switch(i){case"registration_failed":return void t.default.error("Registration failed: "+o.code+" "+o.reason);case"unregistered":t.default.log("Successfully un-registered as "+o.username+"!");break;case"registered":t.default.log("Successfully registered as "+o.username+"!"),m||(m=!0);break;case"registering":t.default.log("janus registering");break;case"calling":t.default.log("Waiting for the peer to answer...");break;case"incomingcall":p.webrtc.updateWebRTC({jsepGlobal:u}),t.default.log("Incoming call from "+o.username+"!");break;case"progress":t.default.log("There's early media from "+o.username+", wairing for the call!"),null!=u&&r.handleRemote(u);break;case"accepted":t.default.log(o.username+" accepted the call!"),null!=u&&r.handleRemote(u);break;case"hangup":p.player.stopAudio(),p.currentCall.reset(),l.hangup(),t.default.log("Call hung up ("+o.code+" "+o.reason+")!")}}}else for(var c in m?l.hangup():t.default.log("User is not registered"),e.error)e.error[c](a,u)},onlocalstream:function(e){var a=u.store.getState().player.localVideo;t.default.debug(" ::: Got a local stream :::"),t.default.debug(e),t.default.attachMediaStream(a,e)},onremotestream:function(e){var a=u.store.getState().player.audio,r=u.store.getState().player.remoteVideo;t.default.debug(" ::: Got a remote stream :::"),t.default.debug(e);var n=e.getAudioTracks(),l=e.getVideoTracks();u.store.dispatch.player.stopAudio(),t.default.attachMediaStream(a,new MediaStream(n)),t.default.attachMediaStream(r,new MediaStream(l))},oncleanup:function(){t.default.log(" ::: janus Got a cleanup notification :::")},detached:function(){t.default.warn("SIP plugin handle detached from the plugin itself")}})},error:function(e){t.default.log("error",e)}})}}),function(){r.unregister()}}),[]),i.default.createElement(i.default.Fragment,null,g)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var r=require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),a=require("../lib/webrtc/janus.js"),t=require("../lib/webrtc/messages.js"),n=require("../utils/useWebRTCStore.js"),o=require("../store/index.js"),s=require("../lib/devices/devices.js"),i=require("../node_modules/react-redux/es/hooks/useDispatch.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=l(e),u=a.default;exports.WebRTC=function(a){var l=a.hostName,g=a.sipExten,d=a.sipSecret,p=a.children,f=i.useDispatch(),m=!1;return e.useEffect((function(){s.checkMediaPermissions()}),[]),e.useEffect((function(){var e={registration_failed:[],registered:[],calling:[],incomingcall:[],accepted:[],hangup:[],gateway_down:[],error:[],progress:[],destroyed:[]};return u.init({debug:"all",dependencies:u.useDefaultDependencies({adapter:r.default}),callback:function(){var r=new u({server:"https://".concat(l,"/janus"),success:function(){r.attach&&r.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){f.webrtc.updateWebRTC({sipcall:e}),t.register(g,d),e&&u.log&&u.log("SIP plugin attached! ("+e.getPlugin()+", id = )")},error:function(e){u.error&&(u.error(" -- Error attaching plugin..."),u.error(e))},consentDialog:function(e){u.log&&u.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){u.log&&u.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){n.useWebRTCStore().sipcall&&u.log&&u.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,r){u.log&&u.log("Janus "+(r?"started":"stopped")+" receiving our "+e)},slowLink:function(e,r){e?u.warn&&u.warn("SLOW link: several missing packets from janus (".concat(r,")")):u.warn&&u.warn("SLOW link: janus is not receiving all your packets (".concat(r,")"))},onmessage:function(r,a){var o=n.useWebRTCStore().sipcall;u.debug&&(u.debug(" ::: Got a message :::"),u.debug(JSON.stringify(r)));var s=r.error;if(null==s||null==s){var i=r.result;if(null!=i&&void 0!==i.event&&null!==i.event){var l=i.event;for(var c in e[l])e[l][c](r,a);switch(l){case"registration_failed":return void(u.error&&u.error("Registration failed: "+i.code+" "+i.reason));case"unregistered":u.log&&u.log("Successfully un-registered as "+i.username+"!");break;case"registered":u.log&&u.log("Successfully registered as "+i.username+"!"),m||(m=!0);break;case"registering":u.log&&u.log("janus registering");break;case"calling":u.log&&u.log("Waiting for the peer to answer...");break;case"incomingcall":f.webrtc.updateWebRTC({jsepGlobal:a}),u.log&&u.log("Incoming call from "+i.username+"!");break;case"progress":u.log&&u.log("There's early media from "+i.username+", wairing for the call!"),null!=a&&t.handleRemote(a);break;case"accepted":u.log&&u.log(i.username+" accepted the call!"),null!=a&&t.handleRemote(a);break;case"hangup":f.player.stopAudio(),f.currentCall.reset(),o.hangup(),u.log&&u.log("Call hung up ("+i.code+" "+i.reason+")!")}}}else for(var c in m?o.hangup():u.log&&u.log("User is not registered"),e.error);},onlocalstream:function(e){var r=o.store.getState().player.localVideo;u.debug&&(u.debug(" ::: Got a local stream :::"),u.debug(e)),u.attachMediaStream&&u.attachMediaStream(r,e)},onremotestream:function(e){var r=o.store.getState().player.audio,a=o.store.getState().player.remoteVideo;u.debug&&(u.debug(" ::: Got a remote stream :::"),u.debug(e));var t=e.getAudioTracks(),n=e.getVideoTracks();o.store.dispatch.player.stopAudio(),u.attachMediaStream&&(u.attachMediaStream(r,new MediaStream(t)),u.attachMediaStream(a,new MediaStream(n)))},oncleanup:function(){u.log&&u.log(" ::: janus Got a cleanup notification :::")},detached:function(){u.warn&&u.warn("SIP plugin handle detached from the plugin itself")}})},error:function(e){u.log&&u.log("error",e)}})}}),function(){t.unregister()}}),[]),c.default.createElement(c.default.Fragment,null,p)};
2
2
  //# sourceMappingURL=WebRTC.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WebRTC.js","sources":["../../src/components/WebRTC.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport adapter from 'webrtc-adapter'\nimport Janus from '../lib/webrtc/janus.js'\nimport { register, unregister, handleRemote } from '../lib/webrtc/messages'\nimport { useWebRTCStore } from '../utils/useWebRTCStore'\nimport { store } from '../store'\nimport { checkMediaPermissions } from '../lib/devices/devices'\n// import busyRingtone from '../static/busy_ringtone'\n\ninterface WebRTCProps {\n children: ReactNode\n sipExten: string\n sipSecret: string\n hostName: string\n}\n\nexport const WebRTC: FC<WebRTCProps> = ({ hostName, sipExten, sipSecret, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n let registered = false\n\n // check audio and video permissions\n React.useEffect(() => {\n\t\tcheckMediaPermissions();\n\t}, []);\n\n useEffect(() => {\n const setupDeps = () =>\n // @ts-ignore\n Janus.useDefaultDependencies({\n adapter,\n })\n\n var evtObservers = {\n registration_failed: [],\n registered: [],\n calling: [],\n incomingcall: [],\n accepted: [],\n hangup: [],\n gateway_down: [],\n error: [],\n progress: [],\n destroyed: [],\n }\n\n // Put it into a store in the next step\n let currentAudio: HTMLAudioElement | null = null\n\n const initWebRTC = () => {\n // @ts-ignore\n Janus.init({\n debug: 'all',\n dependencies: setupDeps(),\n callback: function () {\n // @ts-ignore\n const janus = new Janus({\n server: `https://${hostName}/janus`,\n success: () => {\n // @ts-ignore\n janus.attach({\n plugin: 'janus.plugin.sip',\n opaqueId: 'sebastian' + '_' + new Date().getTime(),\n success: function (pluginHandle) {\n // Set sipcall to the store\n dispatch.webrtc.updateWebRTC({\n sipcall: pluginHandle,\n })\n // Register the extension to the server\n register(sipExten, sipSecret)\n if (pluginHandle) {\n Janus.log(\n 'SIP plugin attached! (' + pluginHandle.getPlugin() + ', id = ' + ')',\n )\n }\n },\n error: function (error) {\n Janus.error(' -- Error attaching plugin...')\n Janus.error(error)\n // reject()\n },\n consentDialog: function (on) {\n Janus.log(`janus consentDialog (on: ${on})`)\n },\n webrtcState: function (on) {\n Janus.log(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n iceState: function (newState) {\n const { sipcall } = useWebRTCStore()\n\n if (sipcall) {\n Janus.log(\n `ICE state of PeerConnection of handle has changed to \"${newState}\"`,\n )\n }\n },\n mediaState: function (medium, on) {\n Janus.log('Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium)\n },\n slowLink: function (uplink, count) {\n if (uplink) {\n Janus.warn(`SLOW link: several missing packets from janus (${count})`)\n } else {\n Janus.warn(`SLOW link: janus is not receiving all your packets (${count})`)\n }\n },\n onmessage: function (msg, jsep) {\n const { sipcall } = useWebRTCStore()\n\n // @ts-ignore\n Janus.debug(' ::: Got a message :::')\n // @ts-ignore\n Janus.debug(JSON.stringify(msg))\n // Any error?\n var error = msg['error']\n if (error != null && error != undefined) {\n if (!registered) {\n // @ts-ignore\n Janus.log('User is not registered')\n } else {\n // Reset status\n sipcall.hangup()\n }\n for (var evt in evtObservers['error']) {\n // @ts-ignore\n evtObservers['error'][evt](msg, jsep)\n }\n return\n }\n var result = msg['result']\n if (\n result !== null &&\n result !== undefined &&\n result['event'] !== undefined &&\n result['event'] !== null\n ) {\n // get event\n var event = result['event']\n\n // call all evt registered\n for (var evt in evtObservers[event]) {\n evtObservers[event][evt](msg, jsep)\n }\n\n //switch event\n switch (event) {\n case 'registration_failed':\n // @ts-ignore\n Janus.error(\n 'Registration failed: ' + result['code'] + ' ' + result['reason'],\n )\n return\n break\n\n case 'unregistered':\n // @ts-ignore\n Janus.log('Successfully un-registered as ' + result['username'] + '!')\n // registered = false\n break\n\n case 'registered':\n // @ts-ignore\n Janus.log('Successfully registered as ' + result['username'] + '!')\n if (!registered) {\n registered = true\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'registering':\n // @ts-ignore\n Janus.log('janus registering')\n break\n\n case 'calling':\n // @ts-ignore\n Janus.log('Waiting for the peer to answer...')\n // lastActivity = new Date().getTime()\n break\n\n case 'incomingcall':\n dispatch.webrtc.updateWebRTC({ jsepGlobal: jsep })\n // @ts-ignore\n Janus.log('Incoming call from ' + result['username'] + '!')\n // lastActivity = new Date().getTime()\n break\n\n case 'progress':\n // @ts-ignore\n Janus.log(\n \"There's early media from \" +\n result['username'] +\n ', wairing for the call!',\n )\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'accepted':\n // @ts-ignore\n Janus.log(result['username'] + ' accepted the call!')\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'hangup':\n dispatch.player.stopAudio()\n dispatch.currentCall.reset()\n sipcall.hangup()\n // if (\n // result['code'] === 486 &&\n // result['event'] === 'hangup' &&\n // result['reason'] === 'Busy Here'\n // ) {\n // dispatch.player.updateAudioSource({\n // src: busyRingtone,\n // })\n // dispatch.player.playAudio()\n // }\n // @ts-ignore\n Janus.log('Call hung up (' + result['code'] + ' ' + result['reason'] + ')!')\n // lastActivity = new Date().getTime()\n // stopScreenSharingI()\n break\n\n default:\n break\n }\n }\n },\n onlocalstream: function (stream) {\n const localVideoElement = store.getState().player.localVideo\n\n // @ts-ignore\n Janus.debug(' ::: Got a local stream :::')\n // @ts-ignore\n Janus.debug(stream)\n // @ts-ignore\n Janus.attachMediaStream(localVideoElement, stream)\n /* IS VIDEO ENABLED ? */\n // var videoTracks = stream.getVideoTracks()\n /* */\n },\n onremotestream: function (stream) {\n const audioElement = store.getState().player.audio\n const remoteVideoElement = store.getState().player.remoteVideo\n\n // @ts-ignore\n Janus.debug(' ::: Got a remote stream :::')\n // @ts-ignore\n Janus.debug(stream)\n // retrieve stream track\n const audioTracks = stream.getAudioTracks()\n const videoTracks = stream.getVideoTracks()\n\n store.dispatch.player.stopAudio()\n\n // @ts-ignore\n Janus.attachMediaStream(audioElement, new MediaStream(audioTracks))\n\n // @ts-ignore\n Janus.attachMediaStream(remoteVideoElement, new MediaStream(videoTracks))\n },\n oncleanup: function () {\n Janus.log(' ::: janus Got a cleanup notification :::')\n },\n detached: function () {\n Janus.warn('SIP plugin handle detached from the plugin itself')\n },\n })\n },\n error: (err) => {\n Janus.log('error', err)\n },\n })\n },\n })\n }\n\n initWebRTC()\n\n return () => {\n unregister()\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","sipExten","sipSecret","children","dispatch","useDispatch","registered","React","useEffect","checkMediaPermissions","evtObservers","registration_failed","calling","incomingcall","accepted","hangup","gateway_down","error","progress","destroyed","Janus","init","debug","dependencies","useDefaultDependencies","adapter","callback","janus","server","concat","success","attach","plugin","opaqueId","Date","getTime","pluginHandle","webrtc","updateWebRTC","sipcall","register","log","getPlugin","consentDialog","on","webrtcState","iceState","newState","useWebRTCStore","mediaState","medium","slowLink","uplink","count","warn","onmessage","msg","jsep","JSON","stringify","undefined","result","event","evt","jsepGlobal","handleRemote","player","stopAudio","currentCall","reset","onlocalstream","stream","localVideoElement","store","getState","localVideo","attachMediaStream","onremotestream","audioElement","audio","remoteVideoElement","remoteVideo","audioTracks","getAudioTracks","videoTracks","getVideoTracks","MediaStream","oncleanup","detached","err","unregister","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"WebRTC.js","sources":["../../src/components/WebRTC.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport adapter from 'webrtc-adapter'\nimport JanusLib from '../lib/webrtc/janus.js'\nimport type { JanusTypes } from '../lib/webrtc/types'\nimport { register, unregister, handleRemote } from '../lib/webrtc/messages'\nimport { useWebRTCStore } from '../utils/useWebRTCStore'\nimport { store } from '../store'\nimport { checkMediaPermissions } from '../lib/devices/devices'\n// import busyRingtone from '../static/busy_ringtone'\n\ninterface WebRTCProps {\n children: ReactNode\n sipExten: string\n sipSecret: string\n hostName: string\n}\n\nconst Janus: JanusTypes = JanusLib\n\nexport const WebRTC: FC<WebRTCProps> = ({ hostName, sipExten, sipSecret, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n let registered = false\n\n // check audio and video permissions\n useEffect(() => {\n checkMediaPermissions()\n }, [])\n\n useEffect(() => {\n const setupDeps = () =>\n Janus.useDefaultDependencies({\n adapter,\n })\n\n var evtObservers = {\n registration_failed: [],\n registered: [],\n calling: [],\n incomingcall: [],\n accepted: [],\n hangup: [],\n gateway_down: [],\n error: [],\n progress: [],\n destroyed: [],\n }\n\n // Put it into a store in the next step\n let currentAudio: HTMLAudioElement | null = null\n\n const initWebRTC = () => {\n Janus.init({\n debug: 'all',\n dependencies: setupDeps(),\n callback: function () {\n const janusInstance = new Janus({\n server: `https://${hostName}/janus`,\n success: () => {\n if (janusInstance.attach) {\n // Use Janus Sip Plugin\n janusInstance.attach({\n plugin: 'janus.plugin.sip',\n opaqueId: 'sebastian' + '_' + new Date().getTime(),\n success: function (pluginHandle) {\n // Set sipcall to the store\n dispatch.webrtc.updateWebRTC({\n sipcall: pluginHandle,\n })\n // Register the extension to the server\n register(sipExten, sipSecret)\n if (pluginHandle) {\n if (Janus.log)\n Janus.log(\n 'SIP plugin attached! (' + pluginHandle.getPlugin() + ', id = ' + ')',\n )\n }\n // getSupportedDevices(function () {\n // resolve()\n // })\n },\n error: function (error) {\n if (Janus.error) {\n Janus.error(' -- Error attaching plugin...')\n Janus.error(error)\n }\n // reject()\n },\n consentDialog: function (on) {\n if (Janus.log) Janus.log(`janus consentDialog (on: ${on})`)\n },\n webrtcState: function (on) {\n if (Janus.log)\n Janus.log(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n iceState: function (newState) {\n const { sipcall } = useWebRTCStore()\n\n if (sipcall) {\n if (Janus.log)\n Janus.log(\n `ICE state of PeerConnection of handle has changed to \"${newState}\"`,\n )\n }\n },\n mediaState: function (medium, on) {\n if (Janus.log)\n Janus.log(\n 'Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium,\n )\n },\n slowLink: function (uplink, count) {\n if (uplink) {\n if (Janus.warn)\n Janus.warn(`SLOW link: several missing packets from janus (${count})`)\n } else {\n if (Janus.warn)\n Janus.warn(`SLOW link: janus is not receiving all your packets (${count})`)\n }\n },\n onmessage: function (msg, jsep) {\n const { sipcall } = useWebRTCStore()\n\n if (Janus.debug) {\n Janus.debug(' ::: Got a message :::')\n Janus.debug(JSON.stringify(msg))\n }\n\n var error = msg['error']\n if (error != null && error != undefined) {\n if (!registered) {\n if (Janus.log) Janus.log('User is not registered')\n } else {\n // Reset status\n sipcall.hangup()\n }\n for (var evt in evtObservers['error']) {\n // evtObservers['error'][evt](msg, jsep)\n }\n return\n }\n var result = msg['result']\n if (\n result !== null &&\n result !== undefined &&\n result['event'] !== undefined &&\n result['event'] !== null\n ) {\n // get event\n var event = result['event']\n\n // call all evt registered\n for (var evt in evtObservers[event]) {\n evtObservers[event][evt](msg, jsep)\n }\n\n //switch event\n switch (event) {\n case 'registration_failed':\n if (Janus.error)\n Janus.error(\n 'Registration failed: ' + result['code'] + ' ' + result['reason'],\n )\n return\n break\n\n case 'unregistered':\n if (Janus.log)\n Janus.log('Successfully un-registered as ' + result['username'] + '!')\n // registered = false\n break\n\n case 'registered':\n if (Janus.log)\n Janus.log('Successfully registered as ' + result['username'] + '!')\n if (!registered) {\n registered = true\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'registering':\n if (Janus.log) Janus.log('janus registering')\n break\n\n case 'calling':\n if (Janus.log) Janus.log('Waiting for the peer to answer...')\n // lastActivity = new Date().getTime()\n break\n\n case 'incomingcall':\n dispatch.webrtc.updateWebRTC({ jsepGlobal: jsep })\n if (Janus.log) Janus.log('Incoming call from ' + result['username'] + '!')\n // lastActivity = new Date().getTime()\n break\n\n case 'progress':\n if (Janus.log)\n Janus.log(\n \"There's early media from \" +\n result['username'] +\n ', wairing for the call!',\n )\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'accepted':\n if (Janus.log) Janus.log(result['username'] + ' accepted the call!')\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // lastActivity = new Date().getTime()\n break\n\n case 'hangup':\n dispatch.player.stopAudio()\n dispatch.currentCall.reset()\n sipcall.hangup()\n // if (\n // result['code'] === 486 &&\n // result['event'] === 'hangup' &&\n // result['reason'] === 'Busy Here'\n // ) {\n // dispatch.player.updateAudioSource({\n // src: busyRingtone,\n // })\n // dispatch.player.playAudio()\n // }\n if (Janus.log)\n Janus.log(\n 'Call hung up (' + result['code'] + ' ' + result['reason'] + ')!',\n )\n // lastActivity = new Date().getTime()\n // stopScreenSharingI()\n break\n\n default:\n break\n }\n }\n },\n onlocalstream: function (stream) {\n const localVideoElement = store.getState().player.localVideo\n\n if (Janus.debug) {\n Janus.debug(' ::: Got a local stream :::')\n Janus.debug(stream)\n }\n\n if (Janus.attachMediaStream) Janus.attachMediaStream(localVideoElement, stream)\n /* IS VIDEO ENABLED ? */\n // var videoTracks = stream.getVideoTracks()\n /* */\n },\n onremotestream: function (stream) {\n const audioElement = store.getState().player.audio\n const remoteVideoElement = store.getState().player.remoteVideo\n\n if (Janus.debug) {\n Janus.debug(' ::: Got a remote stream :::')\n Janus.debug(stream)\n }\n\n // retrieve stream track\n const audioTracks = stream.getAudioTracks()\n const videoTracks = stream.getVideoTracks()\n\n store.dispatch.player.stopAudio()\n\n if (Janus.attachMediaStream) {\n Janus.attachMediaStream(audioElement, new MediaStream(audioTracks))\n Janus.attachMediaStream(remoteVideoElement, new MediaStream(videoTracks))\n }\n },\n oncleanup: function () {\n if (Janus.log) Janus.log(' ::: janus Got a cleanup notification :::')\n },\n detached: function () {\n if (Janus.warn) Janus.warn('SIP plugin handle detached from the plugin itself')\n },\n })\n }\n },\n error: (err) => {\n if (Janus.log) Janus.log('error', err)\n },\n })\n },\n })\n }\n\n initWebRTC()\n\n return () => {\n unregister()\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["Janus","JanusLib","_a","hostName","sipExten","sipSecret","children","dispatch","useDispatch","registered","useEffect","checkMediaPermissions","evtObservers","registration_failed","calling","incomingcall","accepted","hangup","gateway_down","error","progress","destroyed","init","debug","dependencies","useDefaultDependencies","adapter","callback","janusInstance","server","concat","success","attach","plugin","opaqueId","Date","getTime","pluginHandle","webrtc","updateWebRTC","sipcall","register","log","getPlugin","consentDialog","on","webrtcState","iceState","newState","useWebRTCStore","mediaState","medium","slowLink","uplink","count","warn","onmessage","msg","jsep","JSON","stringify","undefined","result","event","evt","jsepGlobal","handleRemote","player","stopAudio","currentCall","reset","onlocalstream","stream","localVideoElement","store","getState","localVideo","attachMediaStream","onremotestream","audioElement","audio","remoteVideoElement","remoteVideo","audioTracks","getAudioTracks","videoTracks","getVideoTracks","MediaStream","oncleanup","detached","err","unregister","React","createElement","Fragment"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../utils/useEventListener.js"),t=require("../lib/phone/call.js");require("../node_modules/react-redux/es/index.js");var s=require("../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var u=n(e);exports.CallEvents=function(){var e=s.useSelector((function(e){return e.webrtc})).sipcall;return r.useEventListener("phone-island-call-start",(function(e){var r="sip:"+e.detail.number+"@127.0.0.1";t.callSipURI(r)})),e&&u.default.createElement(u.default.Fragment,null)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../utils/useEventListener.js"),t=require("../lib/phone/call.js");require("../node_modules/react-redux/es/index.js");var s=require("../node_modules/react-redux/es/hooks/useSelector.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var u=n(e);exports.CallEvents=function(){var e=s.useSelector((function(e){return e.webrtc})).sipcall;return r.useEventListener("phone-island-call-start",(function(e){var r="sip:"+e.number+"@127.0.0.1";t.callSipURI(r)})),e&&u.default.createElement(u.default.Fragment,null)};
2
2
  //# sourceMappingURL=CallEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener } from '../utils/useEventListener'\nimport { callSipURI } from '../lib/phone/call'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\n\nconst BASE_HOST_URL: string = '127.0.0.1'\n\nexport const CallEvents: FC = () => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n /**\n * Add event listner for call\n */\n useEventListener('phone-island-call-start', (data) => {\n const callURI = 'sip:' + data.detail.number + '@' + BASE_HOST_URL\n callSipURI(callURI)\n })\n return sipcall && <></>\n}\n"],"names":["sipcall","useSelector","state","webrtc","useEventListener","data","callURI","detail","number","callSipURI","React","createElement","Fragment"],"mappings":"kmBAW8B,WACpB,IAAAA,EAAiBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,kBAQjE,OAJAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EAAU,OAASD,EAAKE,OAAOC,OAArB,aAChBC,EAAUA,WAACH,EACb,IACON,GAAWU,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KACpB"}
1
+ {"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener } from '../utils/useEventListener'\nimport { callSipURI } from '../lib/phone/call'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\n\nconst BASE_HOST_URL: string = '127.0.0.1'\n\nexport const CallEvents: FC = () => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n /**\n * Add event listner for call\n */\n useEventListener('phone-island-call-start', (data) => {\n const callURI = 'sip:' + data.number + '@' + BASE_HOST_URL\n callSipURI(callURI)\n })\n return sipcall && <></>\n}\n"],"names":["sipcall","useSelector","state","webrtc","useEventListener","data","callURI","number","callSipURI","React","createElement","Fragment"],"mappings":"kmBAW8B,WACpB,IAAAA,EAAiBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,kBAQjE,OAJAC,mBAAiB,2BAA2B,SAACC,GAC3C,IAAMC,EAAU,OAASD,EAAKE,OAAd,aAChBC,EAAUA,WAACF,EACb,IACON,GAAWS,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KACpB"}