@nethesis/phone-island 0.8.13 → 0.8.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/components/CallView/DisplayName.js +1 -1
- package/dist/components/CallView/DisplayName.js.map +1 -1
- package/dist/components/Events.js.map +1 -1
- package/dist/components/Hangup.d.ts +1 -0
- package/dist/components/Hangup.js +1 -1
- package/dist/components/Hangup.js.map +1 -1
- package/dist/components/Island.js +1 -1
- package/dist/components/Island.js.map +1 -1
- package/dist/components/IslandMotion.js +1 -1
- package/dist/components/IslandMotion.js.map +1 -1
- package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.d.ts +5 -0
- package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js +2 -0
- package/dist/components/PhysicalRecorderView/PhysicalRecordingTimer.js.map +1 -0
- package/dist/components/PhysicalRecorderView/index.d.ts +4 -0
- package/dist/components/PhysicalRecorderView/index.js +2 -0
- package/dist/components/PhysicalRecorderView/index.js.map +1 -0
- package/dist/components/RecorderView/Timer.js.map +1 -1
- package/dist/components/RecorderView/index.js +1 -1
- package/dist/components/RecorderView/index.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/components/TransferView/ListAvatar.js +1 -1
- package/dist/components/TransferView/ListAvatar.js.map +1 -1
- package/dist/events/RecorderEvents.d.ts +4 -0
- package/dist/events/RecorderEvents.js +1 -1
- package/dist/events/RecorderEvents.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/avatars/avatars.js +1 -1
- package/dist/lib/avatars/avatars.js.map +1 -1
- package/dist/lib/phone/audio.js.map +1 -1
- package/dist/lib/phone/call.d.ts +4 -0
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/lib/webrtc/janus.js +1 -1
- package/dist/lib/webrtc/janus.js.map +1 -1
- package/dist/lib/webrtc/messages.js.map +1 -1
- package/dist/models/index.d.ts +2 -0
- package/dist/models/index.js +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/models/island.d.ts +1 -1
- package/dist/models/island.js.map +1 -1
- package/dist/models/motions.d.ts +40 -0
- package/dist/models/motions.js +1 -1
- package/dist/models/motions.js.map +1 -1
- package/dist/models/physicalRecorder.d.ts +47 -0
- package/dist/models/physicalRecorder.js +2 -0
- package/dist/models/physicalRecorder.js.map +1 -0
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +1 -1
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -1
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.js.map +1 -1
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +1 -1
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js.map +1 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js +1 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.mjs.js.map +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/menu/menu.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/components/transitions/transition.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/hooks/use-tracked-pointer.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/disposables.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/env.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/focus-management.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/match.js.map +1 -1
- package/dist/node_modules/@headlessui/react/dist/utils/render.js.map +1 -1
- package/dist/node_modules/@socket.io/component-emitter/{index.mjs.js → lib/esm/index.js} +1 -1
- package/dist/node_modules/@socket.io/component-emitter/lib/esm/index.js.map +1 -0
- package/dist/node_modules/cross-fetch/dist/browser-ponyfill.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js +2 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/webtransport.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/index.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/framer-motion.js.map +1 -1
- package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js.map +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
- package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js +1 -1
- package/dist/node_modules/i18next-browser-languagedetector/dist/esm/i18nextBrowserLanguageDetector.js.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.js +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/request.js.map +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
- package/dist/node_modules/moment/moment.js.map +1 -1
- package/dist/node_modules/object-assign/index.js +1 -1
- package/dist/node_modules/object-assign/index.js.map +1 -1
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +1 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/utils.js +1 -1
- package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -1
- package/dist/node_modules/react-i18next/node_modules/@babel/runtime/helpers/iterableToArrayLimit.js.map +1 -1
- package/dist/node_modules/react-moment/dist/index.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
- package/dist/node_modules/react-redux/es/utils/Subscription.js.map +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js.map +1 -1
- package/dist/node_modules/redux/es/redux.js +1 -1
- package/dist/node_modules/redux/es/redux.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/contrib/backo2.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/manager.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/binary.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/index.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +1 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js.map +1 -1
- package/dist/node_modules/webm-duration-fix/lib/ebml/tools-ebml.js.map +1 -1
- package/dist/node_modules/webm-duration-fix/lib/index.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -1
- package/dist/services/astproxy.d.ts +1 -0
- package/dist/services/astproxy.js +1 -1
- package/dist/services/astproxy.js.map +1 -1
- package/dist/utils/customHooks/useLocalStorage.js.map +1 -1
- package/package.json +2 -2
- package/dist/_virtual/_rollupPluginBabelHelpers.js +0 -2
- package/dist/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/dist/node_modules/@socket.io/component-emitter/index.mjs.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/eventDispatch.js"),o=require("../utils/genericFunctions/withTimeout.js");require("../lib/webrtc/janus.js");var a=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../node_modules/mic-check/lib/index.js");var s=require("../events/SocketEvents.js"),i=require("../utils/genericFunctions/timestamp.js"),u=require("../lib/user/extensions.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=p(n);exports.Socket=function(p){var f=p.hostName,g=p.username,h=p.authToken,v=p.reload,b=p.reloadedCallback,k=p.children,y=p.uaType,_=l.useDispatch(),C=n.useRef(),N=n.useRef(),S=d.useSelector((function(e){return e.currentUser}));return n.useEffect((function(){var n=function(e,n){var t,o=a.store.getState().currentCall,s=o.transferring,d=o.transferSwitching,l=o.transferCalls;if(Object.keys(n).length>0){if(e.status){var p=a.store.getState().users.extensions;switch(e.status){case"ringing":_.currentCall.checkIncomingUpdatePlay({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||"",ownerExtension:n.owner}),c.eventDispatch("phone-island-call-ringing",{});break;case"busy":if(n&&n.connected)_.currentCall.updateCurrentCall({conversationId:n.id,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),ownerExtension:n.owner,username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""}),_.currentCall.addTransferCalls({type:"transferred",displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(i.getTimestampInSeconds())}),"physical"===(null===(t=null==S?void 0:S.default_device)||void 0===t?void 0:t.type)&&function(e){_.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),c.eventDispatch("phone-island-call-answered",{}),a.store.dispatch.player.stopAudioPlayer()}(n);else if(n&&!n.connected){if(s&&!d){var m=l.find((function(e){return e.number===n.counterpartNum}));!n.connected&&m&&(_.currentCall.updateCurrentCall({transferring:!1}),c.eventDispatch("phone-island-call-transfer-failed",{}),_.currentCall.updateTransferSwitching(!1))}"REC"===(null==n?void 0:n.counterpartName)&&_.physicalRecorder.setRecordingTempVariable(!0)}n&&!n.connected&&"out"===n.direction&&_.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:r.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(p&&p[n.counterpartNum]&&p[n.counterpartNum].username)||""});case"onhold":var f=n.counterpartName,g=n.counterpartNum,h=n.startTime;s&&g&&f&&"<unknown>"!==f&&(_.currentCall.addTransferCalls({type:"destination",displayName:r.getDisplayName(n),number:g,startTime:"".concat(i.getTimestampInSeconds())}),_.currentCall.updateCurrentCall({displayName:r.getDisplayName(n),number:g,startTime:"".concat(h/1e3),conversationId:n.id}),_.island.setIslandView("call"))}}}else"online"==e.status&&u.userTotallyFree()&&(_.player.stopAudioPlayer(),_.currentCall.reset(),_.physicalRecorder.setRecordingTempVariable(!1))};return N.current=t.io("https://"+f,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),N.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(N.current.id)),c.eventDispatch("phone-island-socket-connected",{})})),N.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),e.includes("server disconnect")?c.eventDispatch("phone-island-server-disconnected",{}):c.eventDispatch("phone-island-socket-disconnected",{})})),N.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),N.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),N.current.io.on("reconnect",(function(e){c.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(N.current.id,")"))})),N.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),N.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),N.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),C.current=setInterval((function(){var e=Date.now();N.current.volatile.emit("ping",o.withTimeout((function(){_.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){_.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),7e3))}),7e3),N.current.on("connect",(function(){console.debug("Socket on: "+f+" is connected!"),N.current.emit("login",{accessKeyId:"".concat(g),token:h,uaType:y})})),N.current.on("authe_ok",(function(){console.debug("Socket authentication success!")})),N.current.on("userMainPresenceUpdate",(function(n){a.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),s.dispatchMainPresence(n)})),N.current.on("extenUpdate",(function(e){_.users.updateExtension(e),s.dispatchConversations(e);var t=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===g&&(n(e,t),_.currentUser.updateConversations(e))})),N.current.on("queueUpdate",(function(e){s.dispatchQueueUpdate(e)})),N.current.on("queueMemberUpdate",(function(e){s.dispatchQueueMemberUpdate(e)})),N.current.on("takeOver",(function(){s.dispatchAlreadyLogin()})),N.current.on("serverReloaded",(function(){s.dispatchServerReload()})),N.current.on("parkingUpdate",(function(){s.dispatchParkingUpdate()})),function(){clearInterval(C.current),N.current.close()}}),[]),n.useEffect((function(){v&&(console.info("websocket reconnection"),N.current.disconnect(),N.current.connect(),b())}),[v]),m.default.createElement(m.default.Fragment,null,k)};
|
|
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, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","inTransferCalls","find","item","updateTransferSwitching","checkOutgoingUpdate","outgoingSocket","counterpartName","island","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"8pCAuCuC,SAACA,GACtC,IAAAC,aACAC,aACAC,cACAC,EAAMJ,EAAAI,OACNC,EAAgBL,EAAAK,iBAChBC,EAAQN,EAAAM,SACRC,EAAMP,EAAAO,OAEAC,EAAWC,EAAAA,cACXC,EAA0BC,EAAAA,SAC1BC,EAASD,EAAAA,SAGTE,EAAkBC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IA4T1D,OAxSAC,EAAAA,WAAU,WAOR,IAAMC,EAA0B,SAACC,EAAqBC,SAE9CC,EAAqDC,EAAKA,MAACC,WAAWC,YAApEC,EAAYJ,EAAAI,aAAEC,EAAiBL,EAAAK,kBAAEC,kBAGzC,GAAIC,OAAOC,KAAKT,GAAMU,OAAS,GAE7B,GAAIX,EAAIY,OAAQ,CACN,IAAAC,EAAeV,EAAKA,MAACC,WAAWU,MAAKD,WAC7C,OAAQb,EAAIY,QACV,IAAK,UAEHvB,EAASgB,YAAYU,wBAAwB,CAC3CC,eAAgBf,EAAKgB,GACrBC,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQ,GAAAC,OAAGpB,EAAKqB,gBAChBC,gBAAgB,EAChBxC,SACE,UACE8B,GACAA,EAAWZ,EAAKqB,iBAChBT,EAAWZ,EAAKqB,gBAAgBvC,WAC5B,GACRyC,eAAgBvB,EAAKwB,QAGvBC,gBAAc,4BAA6B,CAAA,GAC3C,MAEF,IAAK,OACH,GAAIzB,GAAQA,EAAK0B,UAEftC,EAASgB,YAAYuB,kBAAkB,CACrCZ,eAAgBf,EAAKgB,GACrBC,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQ,GAAAC,OAAGpB,EAAKqB,gBAChBO,UAAW,GAAGR,OAAApB,EAAK4B,UAAY,KAC/BL,eAAgBvB,EAAKwB,MACrB1C,SACE,UACE8B,GACAA,EAAWZ,EAAKqB,iBAChBT,EAAWZ,EAAKqB,gBAAgBvC,WAC5B,KAGVM,EAASgB,YAAYyB,iBAAiB,CACpCC,KAAM,cACNb,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQ,GAAAC,OAAGpB,EAAKqB,gBAChBO,UAAW,GAAAR,OAAGW,EAAAA,2BAG8B,cAAX,QAA/BnD,EAAAa,aAAe,EAAfA,EAAiBuC,sBAAc,IAAApD,OAAA,EAAAA,EAAEkD,OA9EN,SAAC9B,GAC5CZ,EAASgB,YAAYuB,kBAAkB,CACrCZ,eAAgBf,EAAKgB,GACrBiB,UAAU,EACVC,SAA6B,OAAnBlC,EAAKmC,gBAA6BC,IAE9CX,gBAAc,6BAA8B,CAAA,GAG5CvB,EAAAA,MAAMd,SAASiD,OAAOC,iBACxB,CAqEgBC,CAAqCvC,QAIpC,GAAIA,IAASA,EAAK0B,WACjBrB,IAAiBC,EAAmB,CAEtC,IAAMkC,EAAkBjC,EAAckC,MACpC,SAACC,GAAS,OAAAA,EAAKvB,SAAWnB,EAAKqB,cAAc,KAE1CrB,EAAK0B,WAAac,IAErBpD,EAASgB,YAAYuB,kBAAkB,CACrCtB,cAAc,IAKhBjB,EAASgB,YAAYuC,yBAAwB,GAEhD,CAGC3C,IAASA,EAAK0B,WAAgC,QAAnB1B,EAAKmC,WAElC/C,EAASgB,YAAYwC,oBAAoB,CACvCC,gBAAgB,EAChB5B,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQ,GAAAC,OAAGpB,EAAKqB,gBAChBvC,SACE,UACE8B,GACAA,EAAWZ,EAAKqB,iBAChBT,EAAWZ,EAAKqB,gBAAgBvC,WAC5B,KAGd,IAAK,SAEK,IAAAgE,EAA+C9C,EAAI8C,gBAAlCzB,EAA8BrB,EAAIqB,eAAlBO,EAAc5B,YAErDK,GACAgB,GACAyB,GACoB,cAApBA,IAGA1D,EAASgB,YAAYyB,iBAAiB,CACpCC,KAAM,cACNb,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQE,EACRO,UAAW,GAAAR,OAAGW,EAAAA,2BAGhB3C,EAASgB,YAAYuB,kBAAkB,CACrCV,YAAaC,EAAcA,eAAClB,GAC5BmB,OAAQE,EACRO,UAAW,GAAAR,OAAGQ,EAAY,KAC1Bb,eAAgBf,EAAKgB,KAGvB5B,EAAS2D,OAAOC,cAAc,SAMrC,MAGiB,UAAdjD,EAAIY,QAAsBsC,EAAeA,oBAE3C7D,EAASiD,OAAOC,kBAEhBlD,EAASgB,YAAY8C,QAG3B,EA8IA,OAxIE1D,EAAO2D,QAAUC,KAAG,WAAavE,EAAU,CACzCwE,SAAS,EACTC,WAAY,CAAC,aACbC,cAAc,EACdC,kBAAmB,MAIrBhE,EAAO2D,QAAQM,GAAG,WAAW,WAC3BC,QAAQC,MAAM,yBAAyBvC,OAAA5B,EAAO2D,QAAQnC,KACtDS,gBAAc,gCAAiC,CAAA,EACjD,IACAjC,EAAO2D,QAAQM,GAAG,cAAc,SAACG,GAC/BF,QAAQC,MAAM,sCAA+BC,IACzCA,EAAOC,SAAS,qBAClBpC,gBAAc,mCAAoC,CAAA,GAElDA,gBAAc,mCAAoC,CAAA,EAEtD,IACAjC,EAAO2D,QAAQC,GAAGK,GAAG,SAAS,SAACK,GAC7BJ,QAAQC,MAAM,iBAAkBG,EAClC,IACAtE,EAAO2D,QAAQM,GAAG,iBAAiB,SAACK,GAClCJ,QAAQC,MAAM,yBAA0BG,EAC1C,IACAtE,EAAO2D,QAAQC,GAAGK,GAAG,aAAa,SAACM,GACjCtC,gBAAc,kCAAmC,CAAA,GACjDiC,QAAQC,MAAM,2BAAAvC,OAA2B2C,EAAO,WAAA3C,OAAU5B,EAAO2D,QAAQnC,GAAE,KAC7E,IACAxB,EAAO2D,QAAQC,GAAGK,GAAG,qBAAqB,SAACM,GACzCL,QAAQC,MAAM,mCAA4BI,GAC5C,IACAvE,EAAO2D,QAAQC,GAAGK,GAAG,mBAAmB,SAACK,GACvCJ,QAAQC,MAAM,2BAA4BG,EAC5C,IACAtE,EAAO2D,QAAQC,GAAGK,GAAG,oBAAoB,WACvCC,QAAQC,MAAM,0BAChB,IAGArE,EAAwB6D,QAAUa,aAAY,WAC5C,IAAMC,EAAQC,KAAKC,MACnB3E,EAAO2D,QAAQiB,SAASC,KACtB,OACAC,EAAWA,aACT,WAEElF,EAASmF,OAAOC,YAAY,eAE5B,IAAMC,EAAUP,KAAKC,MAAQF,EAC7BP,QAAQC,MAAM,0BAAmBc,EAAO,OACxCf,QAAQC,MAAM,uBAChB,IACA,WAEEvE,EAASmF,OAAOG,SAAS,eACzBhB,QAAQC,MAAM,yBAChB,GACA,KAGN,GAAG,KAGHnE,EAAO2D,QAAQM,GAAG,WAAW,WAC3BC,QAAQC,MAAM,cAAgB9E,EAAW,kBACzCW,EAAO2D,QAAQkB,KAAK,QAAS,CAC3BM,YAAa,GAAGvD,OAAAtC,GAChB8F,MAAO7F,EACPI,OAAQA,GAEZ,IAGAK,EAAO2D,QAAQM,GAAG,YAAY,WAC5BC,QAAQC,MAAM,iCAChB,IAEAnE,EAAO2D,QAAQM,GAAG,0BAA0B,SAAC1D,GAE3CG,QAAMd,SAASyB,MAAMgE,2BAA0BC,EAAAA,SAAA,GAAM/E,EAAIgF,eAEzDC,EAAoBA,qBAACjF,EACvB,IAEAP,EAAO2D,QAAQM,GAAG,eAAe,SAAC1D,GAEhCX,EAASyB,MAAMoE,gBAAgBlF,GAE/BmF,EAAqBA,sBAACnF,GAEtB,IAAMC,EAAOD,EAAIoF,cAAc3E,OAAOC,KAAKV,EAAIoF,eAAe,KAAO,CAAA,EAEjEpF,EAAIjB,WAAaA,IACnBgB,EAAwBC,EAAKC,GAE7BZ,EAASQ,YAAYwF,oBAAoBrF,GAE7C,IAGAP,EAAO2D,QAAQM,GAAG,eAAe,SAAC1D,GAEhCsF,EAAmBA,oBAACtF,EACtB,IAGAP,EAAO2D,QAAQM,GAAG,qBAAqB,SAAC1D,GAEtCuF,EAAyBA,0BAACvF,EAC5B,IAGAP,EAAO2D,QAAQM,GAAG,YAAY,WAE5B8B,EAAAA,sBACF,IAGA/F,EAAO2D,QAAQM,GAAG,kBAAkB,WAElC+B,EAAAA,sBACF,IAGAhG,EAAO2D,QAAQM,GAAG,iBAAiB,WAEjCgC,EAAAA,uBACF,IAOK,WACLC,cAAcpG,EAAwB6D,SACtC3D,EAAO2D,QAAQwC,OACjB,CACD,GAAE,IAGH9F,EAAAA,WAAU,WACJb,IACF0E,QAAQkC,KAAK,0BACbpG,EAAO2D,QAAQ0C,aACfrG,EAAO2D,QAAQ2C,UACf7G,IAEJ,GAAG,CAACD,IAEG+G,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KAAG/G,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, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n // get user information\n const userInformation = useSelector((state: RootState) => state.currentUser)\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n\n const checkDefaultDeviceConversationClosed = (conv: any) => {\n // store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n // store.dispatch.listen.reset()\n }\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n switch (res.status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n\n eventDispatch('phone-island-call-ringing', {})\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n if (userInformation?.default_device?.type === 'physical') {\n checkDefaultDeviceConversationActive(conv)\n }\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n case 'onhold':\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io('https://' + hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 7 * 1000, // Waits for the response 7 seconds\n ),\n )\n }, 7 * 1000) // Executes a new check every 7 seconds\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('parkingUpdate', () => {\n // Dispatch serverReload event\n dispatchParkingUpdate()\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('websocket reconnection')\n socket.current.disconnect()\n socket.current.connect()\n reloadedCallback()\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","userInformation","useSelector","state","currentUser","useEffect","handleCurrentUserEvents","res","conv","_b","store","getState","currentCall","transferring","transferSwitching","transferCalls","Object","keys","length","status","extensions","users","checkIncomingUpdatePlay","conversationId","id","displayName","getDisplayName","number","concat","counterpartNum","incomingSocket","ownerExtension","owner","eventDispatch","connected","updateCurrentCall","startTime","addTransferCalls","type","getTimestampInSeconds","default_device","accepted","incoming","direction","undefined","player","stopAudioPlayer","checkDefaultDeviceConversationActive","inTransferCalls","find","item","updateTransferSwitching","counterpartName","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","island","setIslandView","userTotallyFree","reset","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","reason","includes","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conversations","updateConversations","dispatchQueueUpdate","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","dispatchParkingUpdate","clearInterval","close","info","disconnect","connect","React","createElement","Fragment"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(r);exports.default=function(r){var a=r.username,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=a(r);exports.default=function(r){var a=r.username,n=r.status,o=e.__rest(r,["username","status"]),s=t.useSelector((function(e){return e.avatars})).avatars;return i.default.createElement("div",e.__assign({style:{backgroundImage:"url(".concat(s&&a&&s[a]&&s[a],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},"data-stop-propagation":!0,className:"pi-w-12 pi-h-12 pi-rounded-full pi-bg-gray-200 pi-flex-shrink-0 pi-relative pi-transition ".concat("online"===n?"hover:pi-scale-110":"")},o),n&&i.default.createElement("span",{style:{right:"1px",bottom:"1px"},className:"pi-absolute pi-rounded-full pi-w-3 pi-h-3 pi-z-20 ".concat("online"===n||"voicemail"===n||"cellphone"===n||"callforward"===n?"pi-bg-green-500":"busy"===n||"incoming"===n||"ringing"===n?"pi-bg-red-500":"dnd"===n?"pi-bg-gray-950":"offline"===n?"pi-bg-gray-500":""," pi-border-2 pi-border-white")}))};
|
|
2
2
|
//# sourceMappingURL=ListAvatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListAvatar.js","sources":["../../../src/components/TransferView/ListAvatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst ListAvatar: FC<ListAvatarProps> = ({ username, status, ...props }) => {\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n return (\n <div\n style={{\n backgroundImage: `url(${avatars && username && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n data-stop-propagation={true}\n className={`pi-w-12 pi-h-12 pi-rounded-full pi-bg-gray-200 pi-flex-shrink-0 pi-relative pi-transition ${\n status === 'online' ? 'hover:pi-scale-110' : ''\n }`}\n {...props}\n >\n {/* The status bullet */}\n {status && (\n <span\n style={{ right: '1px', bottom: '1px' }}\n className={`pi-absolute pi-rounded-full pi-w-3 pi-h-3 pi-z-20 ${\n status === 'online' ? 'pi-bg-green-
|
|
1
|
+
{"version":3,"file":"ListAvatar.js","sources":["../../../src/components/TransferView/ListAvatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, ComponentProps } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst ListAvatar: FC<ListAvatarProps> = ({ username, status, ...props }) => {\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n return (\n <div\n style={{\n backgroundImage: `url(${avatars && username && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n data-stop-propagation={true}\n className={`pi-w-12 pi-h-12 pi-rounded-full pi-bg-gray-200 pi-flex-shrink-0 pi-relative pi-transition ${\n status === 'online' ? 'hover:pi-scale-110' : ''\n }`}\n {...props}\n >\n {/* The status bullet */}\n {status && (\n <span\n style={{ right: '1px', bottom: '1px' }}\n className={`pi-absolute pi-rounded-full pi-w-3 pi-h-3 pi-z-20 ${\n status === 'online' ||\n status === 'voicemail' ||\n status === 'cellphone' ||\n status === 'callforward'\n ? 'pi-bg-green-500'\n : status === 'busy' || status === 'incoming' || status === 'ringing'\n ? 'pi-bg-red-500'\n : status === 'dnd'\n ? 'pi-bg-gray-950'\n : status === 'offline'\n ? 'pi-bg-gray-500'\n : ''\n } pi-border-2 pi-border-white`}\n ></span>\n )}\n </div>\n )\n}\n\ninterface ListAvatarProps extends ComponentProps<'div'> {\n username?: string\n status?: string\n}\n\nexport default ListAvatar\n"],"names":["_a","username","status","props","__rest","avatars","useSelector","state","React","createElement","__assign","style","backgroundImage","concat","backgroundRepeat","backgroundSize","className","right","bottom"],"mappings":"+WAOwC,SAACA,GAAE,IAAAC,aAAUC,WAAWC,EAAvBC,EAAAA,OAAAJ,EAAA,CAAA,WAAA,WAC/BK,EAAYC,eAAY,SAACC,GAAqB,OAAAA,EAAMF,mBAE5D,OACEG,EACE,QAAAC,cAAA,MAAAC,EAAAA,SAAA,CAAAC,MAAO,CACLC,gBAAiB,OAAAC,OAAOR,GAAWJ,GAAYI,EAAQJ,IAAaI,EAAQJ,GAAY,KACxFa,iBAAkB,YAClBC,eAAgB,WACjB,yBACsB,EACvBC,UAAW,6FACTH,OAAW,WAAXX,EAAsB,qBAAuB,KAE3CC,GAGHD,GACCM,UACEC,cAAA,OAAA,CAAAE,MAAO,CAAEM,MAAO,MAAOC,OAAQ,OAC/BF,UAAW,qDACTH,OAAW,WAAXX,GACW,cAAXA,GACW,cAAXA,GACW,gBAAXA,EACI,kBACW,SAAXA,GAAgC,aAAXA,GAAoC,YAAXA,EAC9C,gBACW,QAAXA,EACA,iBACW,YAAXA,EACA,iBACA,GAAE,kCAMlB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/customHooks/useEventListener.js"),i=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/react-redux/es/index.js");var n=require("../store/index.js"),r=require("../node_modules/react-redux/es/hooks/useDispatch.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=s(e);exports.RecorderEvents=function(){var e=r.useDispatch();return t.useEventListener("phone-island-recording-open",(function(t){e.island.setIslandView("recorder"),i.eventDispatch("phone-island-recording-opened",{})})),t.useEventListener("phone-island-physical-recording-view",(function(t){e.island.setIslandView("physicalPhoneRecorder"),i.eventDispatch("phone-island-physical-recording-opened",{}),setTimeout((function(){i.eventDispatch("phone-island-physical-recording-open",{})}),500)})),o.default.createElement(o.default.Fragment,null)},exports.dispatchPhysicalRecordingSave=function(){var e=n.store.getState().physicalRecorder.tempFileName;console.log("dispatchPhysicalRecordingSave",e),i.eventDispatch("phone-island-physical-recording-saved",{tempFileName:e})},exports.dispatchRecordingSave=function(){var e,t,r=n.store.getState().recorder.tempFileName,s=(null===(t=null===(e=n.store.getState().player.audioPlayer)||void 0===e?void 0:e.current)||void 0===t?void 0:t.src)||"";i.eventDispatch("phone-island-recording-saved",{tempFileName:r,audioFileURL:s})};
|
|
2
2
|
//# sourceMappingURL=RecorderEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecorderEvents.js","sources":["../../src/events/RecorderEvents.tsx"],"sourcesContent":["// Copyright (C)
|
|
1
|
+
{"version":3,"file":"RecorderEvents.js","sources":["../../src/events/RecorderEvents.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { eventDispatch } from '../utils'\nimport { useEventListener } from '../utils'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch, store } from '../store'\n\nexport const RecorderEvents: FC = () => {\n const dispatch = useDispatch<Dispatch>()\n\n //Recording could be started from the web interface or from the physical device\n\n /**\n * Event listner for phone-island-audio-player-start event if webRtc is main device\n */\n useEventListener('phone-island-recording-open', (data: {}) => {\n dispatch.island.setIslandView('recorder')\n eventDispatch('phone-island-recording-opened', {})\n })\n\n /**\n * Event listner for phone-island-recording-start event if physical device is main device\n */\n useEventListener('phone-island-physical-recording-view', (data: {}) => {\n dispatch.island.setIslandView('physicalPhoneRecorder')\n eventDispatch('phone-island-physical-recording-opened', {})\n\n // Start recording after 500ms\n setTimeout(() => {\n eventDispatch('phone-island-physical-recording-open', {})\n }, 500)\n })\n\n return <></>\n}\n\n/**\n * Dispatch recording save\n */\nexport function dispatchRecordingSave() {\n const tempFileName = store.getState().recorder.tempFileName\n const audioFileURL = store.getState().player.audioPlayer?.current?.src || ''\n eventDispatch('phone-island-recording-saved', {\n tempFileName,\n audioFileURL,\n })\n}\n\n/**\n * Dispatch physical phone recording save\n */\nexport function dispatchPhysicalRecordingSave() {\n const tempFileName = store.getState().physicalRecorder.tempFileName\n console.log('dispatchPhysicalRecordingSave', tempFileName)\n eventDispatch('phone-island-physical-recording-saved', {\n tempFileName,\n })\n}\n"],"names":["dispatch","useDispatch","useEventListener","data","island","setIslandView","eventDispatch","setTimeout","React","tempFileName","store","getState","physicalRecorder","console","log","recorder","audioFileURL","_a","player","audioPlayer","current","src"],"mappings":"0cASkC,WAChC,IAAMA,EAAWC,EAAAA,cAyBjB,OAlBAC,mBAAiB,+BAA+B,SAACC,GAC/CH,EAASI,OAAOC,cAAc,YAC9BC,gBAAc,gCAAiC,CAAA,EACjD,IAKAJ,mBAAiB,wCAAwC,SAACC,GACxDH,EAASI,OAAOC,cAAc,yBAC9BC,gBAAc,yCAA0C,CAAA,GAGxDC,YAAW,WACTD,gBAAc,uCAAwC,CAAA,EACvD,GAAE,IACL,IAEOE,gDACT,mDAkBE,IAAMC,EAAeC,EAAKA,MAACC,WAAWC,iBAAiBH,aACvDI,QAAQC,IAAI,gCAAiCL,GAC7CH,EAAAA,cAAc,wCAAyC,CACrDG,aAAYA,GAEhB,mDAjBQA,EAAeC,EAAKA,MAACC,WAAWI,SAASN,aACzCO,aAAoD,QAArCC,EAAAP,EAAAA,MAAMC,WAAWO,OAAOC,mBAAa,IAAAF,OAAA,EAAAA,EAAAG,8BAASC,MAAO,GAC1Ef,EAAAA,cAAc,+BAAgC,CAC5CG,aAAYA,EACZO,aAAYA,GAEhB"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.-pi-mt-10{margin-top:-2.5rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-11{margin-left:2.75rem}.pi-ml-16{margin-left:4rem}.pi-ml-4{margin-left:1rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-8{margin-left:2rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-4{margin-top:1rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-\[-5\.5rem\]{margin-top:-5.5rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-12{height:3rem}.pi-h-3{height:.75rem}.pi-h-4{height:1rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0{width:0}.pi-w-0\.5{width:.125rem}.pi-w-12{width:3rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-3{width:.75rem}.pi-w-4{width:1rem}.pi-w-44{width:11rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-9{width:2.25rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-40{max-width:10rem}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{-webkit-transform-origin:top right;transform-origin:top right}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-135{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-45,.pi-rotate-90{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-rotate-\[135deg\],.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-transparent{border-color:transparent}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(243,244,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-500{--tw-gradient-to:#6b7280 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-p-4{padding:1rem}.pi-px-0{padding-left:0;padding-right:0}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-9{padding-top:2.25rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,.25);--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-gray-400:hover:enabled{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.dark\:pi-bg-red-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:enabled\:hover\:pi-bg-gray-500:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}
|
|
1
|
+
@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.-pi-z-10{z-index:-10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-start-auto{grid-column-start:auto}.-pi-mt-10{margin-top:-2.5rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-11{margin-left:2.75rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-4{margin-left:1rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-8{margin-left:2rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-ml-\[4\.7rem\]{margin-left:4.7rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-4{margin-top:1rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-5\.5rem\]{margin-top:-5.5rem}.pi-mt-\[-9\.5rem\]{margin-top:-9.5rem}.pi-mt-\[3rem\]{margin-top:3rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-12{height:3rem}.pi-h-3{height:.75rem}.pi-h-4{height:1rem}.pi-h-6{height:1.5rem}.pi-h-8{height:2rem}.pi-h-9{height:2.25rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-h-full{height:100%}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0{width:0}.pi-w-0\.5{width:.125rem}.pi-w-12{width:3rem}.pi-w-16{width:4rem}.pi-w-2{width:.5rem}.pi-w-3{width:.75rem}.pi-w-4{width:1rem}.pi-w-44{width:11rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-8{width:2rem}.pi-w-9{width:2.25rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-full{width:100%}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-40{max-width:10rem}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--rotate-45{--tw-rotate:-45deg}.pi--rotate-45,.pi-rotate-135{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-45,.pi-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-rotate-\[135deg\],.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[12rem\,1rem\]{grid-template-columns:12rem 1rem}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-overflow-auto{overflow:auto}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.pi-bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-500{--tw-gradient-to:#6b7280 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-p-2{padding:.5rem}.pi-p-4{padding:1rem}.pi-px-0{padding-left:0;padding-right:0}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-pt-7{padding-top:1.75rem}.pi-pt-9{padding-top:2.25rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-semibold{font-weight:600}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.hover\:pi-text-gray-50:hover{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.enabled\:hover\:pi-bg-gray-400:hover:enabled{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-green-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.enabled\:hover\:pi-bg-red-700:hover:enabled{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity))}.dark\:pi-bg-red-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:enabled\:hover\:pi-bg-gray-500:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("../../store/index.js"),t=require("../storage/local_storage.js"),s=require("../../services/user.js");exports.AVATARS_EXPIRATION_MILLIS=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),r=require("../../store/index.js"),t=require("../storage/local_storage.js"),s=require("../../services/user.js"),a=864e5;exports.AVATARS_EXPIRATION_MILLIS=a,exports.retrieveAvatars=function(o){return e.__awaiter(this,void 0,void 0,(function(){var u,i,n;return e.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,4,,5]),(u=t.loadCache("operatorsAvatars",o))&&Object.values(u).length>0?(r.store.dispatch.avatars.updateAvatars(u),[3,3]):[3,1];case 1:return[4,s.getAllAvatars()];case 2:(i=e.sent())&&Object.values(i).length>0&&(n=(new Date).getTime()+a,t.saveCache("operatorsAvatars",i,o,n),r.store.dispatch.avatars.updateAvatars(i)),e.label=3;case 3:return[3,5];case 4:return e.sent(),[3,5];case 5:return[2]}}))}))};
|
|
2
2
|
//# sourceMappingURL=avatars.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatars.js","sources":["../../../src/lib/avatars/avatars.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { AvatarsTypes } from '../../types'\nimport { store } from '../../store'\nimport { loadCache, saveCache } from '../storage/local_storage'\nimport { getAllAvatars } from '../../services/user'\n\nexport const AVATARS_EXPIRATION_MILLIS = 24 * 60 * 60 * 1000 // 24 hours\n\n/**\n * Get avatars from localstorage or request it from the api\n * ... other applications like nethvoice-cti could use or\n * ... request an avatars object\n *\n * @param username The username of the current user\n */\nexport async function retrieveAvatars(username: string) {\n try {\n let avatars: AvatarsTypes | undefined = loadCache('operatorsAvatars', username)\n if (avatars && Object.values(avatars).length > 0) {\n // Avatars already are in localstorage\n store.dispatch.avatars.updateAvatars(avatars)\n } else {\n // Request avatars to the API\n const avatarsResponse: AvatarsTypes | undefined = await getAllAvatars()\n if (avatarsResponse && Object.values(avatarsResponse).length > 0) {\n const expiration: number = new Date().getTime() + AVATARS_EXPIRATION_MILLIS\n // Update avatars in localstorage for performances and for other applications\n saveCache('operatorsAvatars', avatarsResponse, username, expiration)\n // Update avatars store\n store.dispatch.avatars.updateAvatars(avatarsResponse)\n }\n }\n } catch (error) {}\n}\n"],"names":["username","avatars","loadCache","Object","values","length","store","dispatch","updateAvatars","getAllAvatars","avatarsResponse","_a","sent","expiration","Date","getTime","saveCache"],"mappings":"
|
|
1
|
+
{"version":3,"file":"avatars.js","sources":["../../../src/lib/avatars/avatars.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { AvatarsTypes } from '../../types'\nimport { store } from '../../store'\nimport { loadCache, saveCache } from '../storage/local_storage'\nimport { getAllAvatars } from '../../services/user'\n\nexport const AVATARS_EXPIRATION_MILLIS = 24 * 60 * 60 * 1000 // 24 hours\n\n/**\n * Get avatars from localstorage or request it from the api\n * ... other applications like nethvoice-cti could use or\n * ... request an avatars object\n *\n * @param username The username of the current user\n */\nexport async function retrieveAvatars(username: string) {\n try {\n let avatars: AvatarsTypes | undefined = loadCache('operatorsAvatars', username)\n if (avatars && Object.values(avatars).length > 0) {\n // Avatars already are in localstorage\n store.dispatch.avatars.updateAvatars(avatars)\n } else {\n // Request avatars to the API\n const avatarsResponse: AvatarsTypes | undefined = await getAllAvatars()\n if (avatarsResponse && Object.values(avatarsResponse).length > 0) {\n const expiration: number = new Date().getTime() + AVATARS_EXPIRATION_MILLIS\n // Update avatars in localstorage for performances and for other applications\n saveCache('operatorsAvatars', avatarsResponse, username, expiration)\n // Update avatars store\n store.dispatch.avatars.updateAvatars(avatarsResponse)\n }\n }\n } catch (error) {}\n}\n"],"names":["AVATARS_EXPIRATION_MILLIS","username","avatars","loadCache","Object","values","length","store","dispatch","updateAvatars","getAllAvatars","avatarsResponse","_a","sent","expiration","Date","getTime","saveCache"],"mappings":"0OAQaA,EAA4B,kEASnC,SAAgCC,6HAG9B,8BADAC,EAAoCC,EAASA,UAAC,mBAAoBF,KACvDG,OAAOC,OAAOH,GAASI,OAAS,GAE7CC,EAAAA,MAAMC,SAASN,QAAQO,cAAcP,UAFS,CAAA,EAAA,UAKI,MAAM,CAAA,EAAAQ,EAAAA,yBAAlDC,EAA4CC,EAAqBC,SAChDT,OAAOC,OAAOM,GAAiBL,OAAS,IACvDQ,GAAqB,IAAIC,MAAOC,UAAYhB,EAElDiB,EAAAA,UAAU,mBAAoBN,EAAiBV,EAAUa,GAEzDP,EAAAA,MAAMC,SAASN,QAAQO,cAAcE,qFAI5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sources":["../../../src/lib/phone/audio.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Manages the audio update action\n */\nexport async function updateAudioPlayerSource(payload: string) {\n return new Promise((resolve, reject) => {\n function canPlayCb() {\n store.getState().player.audioPlayer?.current?.removeEventListener('canplaythrough', canPlayCb)\n resolve(true)\n }\n function loadedMetadata() {\n const trackDuration = store.getState().player.audioPlayer?.current?.duration\n trackDuration && store.dispatch.player.updateAudioPlayerTrackDuration(trackDuration)\n store\n .getState()\n .player.audioPlayer?.current?.removeEventListener('loadedmetadata', loadedMetadata)\n }\n try {\n // Event handlers must be set before updating the audio source of the element\n // Add event listener for canplaythrough event\n store.getState().player.audioPlayer?.current?.addEventListener('canplaythrough', canPlayCb)\n // Add event listener for onloadedmetadata event\n store\n .getState()\n .player.audioPlayer?.current?.addEventListener('loadedmetadata', loadedMetadata)\n // Update the audio player source\n store.dispatch.player.updateAudioPlayerSrc(payload)\n } catch (err) {\n console.error(err)\n reject(err)\n }\n })\n}\n"],"names":["payload","Promise","resolve","reject","_b","store","getState","player","audioPlayer","_a","current","addEventListener","canPlayCb","removeEventListener","_d","_c","loadedMetadata","trackDuration","duration","dispatch","updateAudioPlayerTrackDuration","updateAudioPlayerSrc","err","console","error"],"mappings":"6LAQM,SAAwCA,4FAC5C,MAAA,CAAA,EAAO,IAAIC,SAAQ,SAACC,EAASC,eAY3B,YAGEC,EAAqC,UAArCC,EAAAA,MAAMC,WAAWC,OAAOC,mBAAa,IAAAC,OAAA,EAAAA,EAAAC,wBAASC,iBAAiB,kBAdjE,SAASC,oBACPR,EAAqC,UAArCC,EAAAA,MAAMC,WAAWC,OAAOC,mBAAa,IAAAC,OAAA,EAAAA,EAAAC,wBAASG,oBAAoB,iBAAkBD,GACpFV,GAAQ,EACT,IAe+B,QAF9BY,EAEqB,UAFrBT,EAAKA,MACFC,WACAC,OAAOC,mBAAW,IAAAO,OAAA,EAAAA,EAAEL,eAAO,IAAAI,GAAAA,EAAEH,iBAAiB,kBAdnD,SAASK,gBACDC,EAA4D,QAA5Cb,EAAmC,QAAnCK,EAAAJ,EAAAA,MAAMC,WAAWC,OAAOC,mBAAW,IAAAC,OAAA,EAAAA,EAAEC,eAAO,IAAAN,OAAA,EAAAA,EAAEc,SACpED,GAAiBZ,EAAKA,MAACc,SAASZ,OAAOa,+BAA+BH,GAGxC,QAF9BH,EAEqB,UAFrBT,EAAKA,MACFC,WACAC,OAAOC,mBAAW,IAAAO,OAAA,EAAAA,EAAEL,eAAO,IAAAI,GAAAA,EAAED,oBAAoB,iBAAkBG,EACvE,IAUCX,EAAAA,MAAMc,SAASZ,OAAOc,qBAAqBrB,
|
|
1
|
+
{"version":3,"file":"audio.js","sources":["../../../src/lib/phone/audio.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { store } from '../../store'\n\n/**\n * Manages the audio update action\n */\nexport async function updateAudioPlayerSource(payload: string) {\n return new Promise((resolve, reject) => {\n function canPlayCb() {\n store.getState().player.audioPlayer?.current?.removeEventListener('canplaythrough', canPlayCb)\n resolve(true)\n }\n function loadedMetadata() {\n const trackDuration = store.getState().player.audioPlayer?.current?.duration\n trackDuration && store.dispatch.player.updateAudioPlayerTrackDuration(trackDuration)\n store\n .getState()\n .player.audioPlayer?.current?.removeEventListener('loadedmetadata', loadedMetadata)\n }\n try {\n // Event handlers must be set before updating the audio source of the element\n // Add event listener for canplaythrough event\n store.getState().player.audioPlayer?.current?.addEventListener('canplaythrough', canPlayCb)\n // Add event listener for onloadedmetadata event\n store\n .getState()\n .player.audioPlayer?.current?.addEventListener('loadedmetadata', loadedMetadata)\n // Update the audio player source\n store.dispatch.player.updateAudioPlayerSrc(payload)\n } catch (err) {\n console.error(err)\n reject(err)\n }\n })\n}\n"],"names":["payload","Promise","resolve","reject","_b","store","getState","player","audioPlayer","_a","current","addEventListener","canPlayCb","removeEventListener","_d","_c","loadedMetadata","trackDuration","duration","dispatch","updateAudioPlayerTrackDuration","updateAudioPlayerSrc","err","console","error"],"mappings":"6LAQM,SAAwCA,4FAC5C,MAAA,CAAA,EAAO,IAAIC,SAAQ,SAACC,EAASC,eAY3B,YAGEC,EAAqC,UAArCC,EAAAA,MAAMC,WAAWC,OAAOC,mBAAa,IAAAC,OAAA,EAAAA,EAAAC,wBAASC,iBAAiB,kBAdjE,SAASC,oBACPR,EAAqC,UAArCC,EAAAA,MAAMC,WAAWC,OAAOC,mBAAa,IAAAC,OAAA,EAAAA,EAAAC,wBAASG,oBAAoB,iBAAkBD,GACpFV,GAAQ,EACT,IAe+B,QAF9BY,EAEqB,UAFrBT,EAAKA,MACFC,WACAC,OAAOC,mBAAW,IAAAO,OAAA,EAAAA,EAAEL,eAAO,IAAAI,GAAAA,EAAEH,iBAAiB,kBAdnD,SAASK,gBACDC,EAA4D,QAA5Cb,EAAmC,QAAnCK,EAAAJ,EAAAA,MAAMC,WAAWC,OAAOC,mBAAW,IAAAC,OAAA,EAAAA,EAAEC,eAAO,IAAAN,OAAA,EAAAA,EAAEc,SACpED,GAAiBZ,EAAKA,MAACc,SAASZ,OAAOa,+BAA+BH,GAGxC,QAF9BH,EAEqB,UAFrBT,EAAKA,MACFC,WACAC,OAAOC,mBAAW,IAAAO,OAAA,EAAAA,EAAEL,eAAO,IAAAI,GAAAA,EAAED,oBAAoB,iBAAkBG,EACvE,IAUCX,EAAAA,MAAMc,SAASZ,OAAOc,qBAAqBrB,EAC5C,CAAC,MAAOsB,GACPC,QAAQC,MAAMF,GACdnB,EAAOmB,EACR,CACF,UACF"}
|
package/dist/lib/phone/call.d.ts
CHANGED
|
@@ -15,6 +15,10 @@ export declare function hangupAllExtensions(): void;
|
|
|
15
15
|
* Hangup current call
|
|
16
16
|
*/
|
|
17
17
|
export declare function hangupCurrentCall(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Hangup current physical recording
|
|
20
|
+
*/
|
|
21
|
+
export declare function hangupCurrentPhysicalRecording(): void;
|
|
18
22
|
/**
|
|
19
23
|
* Mute the current call
|
|
20
24
|
*/
|
package/dist/lib/phone/call.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),a=require("../../services/astproxy.js"),s=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js");exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():a.answerPhysical()},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var n,s;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,s=r.store.getState().currentUser.default_device,n&&(null==s?void 0:s.id)&&t?[4,a.attendedTransfer({convid:n,to:t,endpointId:s.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,r){var s="sip:".concat(e,"@").concat(r);n.isWebRTC()?t.callSipURI(s):a.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){a.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=function(){var e=r.store.getState().currentCall,s=e.outgoing,o=e.accepted;(s||o)&&(n.isWebRTC()?t.hangup():a.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset()),i.eventDispatch("phone-island-call-ended",{})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):a.mutePhysical(),i.eventDispatch("phone-island-call-muted",{})},exports.parkCurrentCall=function(){var e,t,n,s,o=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,l=null===(s=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===s?void 0:s.conversations,u={};if(o){if(l)for(var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../webrtc/messages.js"),r=require("../../store/index.js"),n=require("../user/default_device.js"),a=require("../../services/astproxy.js"),s=require("../../static/dtmf/index.js");require("react");var i=require("../../utils/genericFunctions/eventDispatch.js");exports.answerIncomingCall=function(){n.isWebRTC()?t.answerWebRTC():a.answerPhysical()},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var n,s;return e.__generator(this,(function(e){switch(e.label){case 0:return n=r.store.getState().currentCall.conversationId,s=r.store.getState().currentUser.default_device,n&&(null==s?void 0:s.id)&&t?[4,a.attendedTransfer({convid:n,to:t,endpointId:s.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e,r){var s="sip:".concat(e,"@").concat(r);n.isWebRTC()?t.callSipURI(s):a.callPhysical(e),i.eventDispatch("phone-island-call-started",{})},exports.hangupAllExtensions=function(){var e=r.store.getState().currentUser.conversations,t=function(t){Object.keys(e[t]).forEach((function(e){a.hangupConversation({convid:e,endpointId:t})}))};for(var n in e)t(n)},exports.hangupCurrentCall=function(){var e=r.store.getState().currentCall,s=e.outgoing,o=e.accepted;(s||o)&&(n.isWebRTC()?t.hangup():a.hangupPhysical(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.currentCall.reset(),r.store.dispatch.listen.reset()),i.eventDispatch("phone-island-call-ended",{})},exports.hangupCurrentPhysicalRecording=function(){a.hangupPhysicalRecordingCall(),r.store.dispatch.player.stopAudioPlayer(),r.store.dispatch.physicalRecorder.reset(),r.store.dispatch.physicalRecorder.setRecording(!1),r.store.dispatch.island.setIslandView(null),r.store.dispatch.listen.reset(),i.eventDispatch("phone-island-call-ended",{})},exports.muteCurrentCall=function(){n.isWebRTC()?t.muteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!0}):a.mutePhysical(),i.eventDispatch("phone-island-call-muted",{})},exports.parkCurrentCall=function(){var e,t,n,s,o=null===(t=null===(e=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===e?void 0:e.currentCall)||void 0===t?void 0:t.conversationId,l=null===(s=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===s?void 0:s.conversations,u={};if(o){if(l)for(var c in l)if(l.hasOwnProperty(c)){var d=l[c];Object.keys(d).length>0&&(u={numberParkId:c,idConversation:o})}Object.keys(u).length>0&&(null==u?void 0:u.numberParkId)&&(a.parkConversation({applicantId:null==u?void 0:u.numberParkId,convid:o,endpointId:null==u?void 0:u.numberParkId}),r.store.dispatch.currentCall.setParked(!0),i.eventDispatch("phone-island-call-parked",{}))}},exports.pauseCurrentCall=function(){n.isWebRTC()?t.pauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!0}),r.store.dispatch.player.pauseRemoteAudio()):a.pausePhysical(!0),i.eventDispatch("phone-island-call-held",{})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),r.store.dispatch.player.updateStartAudioPlayer({src:s.default["dtmf_".concat(e)]})},exports.recordCurrentCall=function(t){var n,s,i,o;return e.__awaiter(this,void 0,void 0,(function(){var l,u,c,d,p,v,h;return e.__generator(this,(function(e){switch(e.label){case 0:return r.store.dispatch.currentCall.updateRecordingStatus(!t),l=null===(s=null===(n=null===r.store||void 0===r.store?void 0:r.store.getState())||void 0===n?void 0:n.currentUser)||void 0===s?void 0:s.conversations,(u=function(e){for(var t in e)if(0!==Object.keys(e[t]).length){var r=Object.values(e[t])[0];return{id:r.id,recording:r.recording}}return null}(l))?[3,1]:[2];case 1:switch(c=null===(i=null==u?void 0:u.id)||void 0===i?void 0:i.match(/\/(\d+)-/),d=c[1],p={convid:null===(o=null==u?void 0:u.id)||void 0===o?void 0:o.toString(),endpointId:null==d?void 0:d.toString()},v="",null==u?void 0:u.recording){case"false":v="start_record";break;case"true":v="mute_record";break;case"mute":v="unmute_record";break;default:v=""}if(!p)return[3,5];e.label=2;case 2:return e.trys.push([2,4,,5]),[4,a.toggleRecord(v,p)];case 3:return e.sent(),[3,5];case 4:return h=e.sent(),console.error(h),[2,[]];case 5:return[2]}}))}))},exports.unmuteCurrentCall=function(){n.isWebRTC()?t.unmuteWebRTC()&&r.store.dispatch.currentCall.updateCurrentCall({muted:!1}):a.unmutePhysical(),i.eventDispatch("phone-island-call-unmuted",{})},exports.unpauseCurrentCall=function(){n.isWebRTC()?t.unpauseWebRTC()&&(r.store.dispatch.currentCall.updateCurrentCall({paused:!1}),r.store.dispatch.player.playRemoteAudio()):a.pausePhysical(!1),i.eventDispatch("phone-island-call-unheld",{})};
|
|
2
2
|
//# sourceMappingURL=call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n }\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical()\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n unmutePhysical()\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n"],"names":["isWebRTC","answerWebRTC","answerPhysical","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","_a","sipHost","sipURI","concat","callSipURI","callPhysical","eventDispatch","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","values","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","toString","recordingValues","toggleRecord","_e","sent","console","error","e_1","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"call.js","sources":["../../../src/lib/phone/call.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport {\n callSipURI,\n hangup,\n answerWebRTC,\n muteWebRTC,\n unmuteWebRTC,\n pauseWebRTC,\n unpauseWebRTC,\n} from '../webrtc/messages'\nimport { store } from '../../store'\nimport { isWebRTC } from '../user/default_device'\nimport {\n blindTransfer as blindTransferRequest,\n attendedTransfer as attendedTransferRequest,\n hangupPhysical,\n answerPhysical,\n mutePhysical,\n unmutePhysical,\n pausePhysical,\n callPhysical,\n toggleRecord,\n hangupPhysicalRecordingCall,\n} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\nimport { hangupConversation, parkConversation } from '../../services/astproxy'\nimport { eventDispatch } from '../../utils'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string, sipHost: string) {\n const sipURI = `sip:${number}@${sipHost}`\n if (isWebRTC()) {\n callSipURI(sipURI)\n } else {\n callPhysical(number)\n }\n\n eventDispatch('phone-island-call-started', {})\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n } else {\n answerPhysical()\n }\n}\n\n/**\n * Hangup all the conversations of all the extensions of the current user\n */\nexport function hangupAllExtensions() {\n // Get current user endpoints\n const { conversations } = store.getState().currentUser\n // Hangup all the conversations of all extensions of the current user\n for (const extension in conversations) {\n const conversationsIds = Object.keys(conversations[extension])\n conversationsIds.forEach((id) => {\n hangupConversation({\n convid: id,\n endpointId: extension,\n })\n })\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n if (isWebRTC()) {\n hangup()\n } else {\n hangupPhysical()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\n store.dispatch.listen.reset()\n }\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Hangup current physical recording\n */\nexport function hangupCurrentPhysicalRecording() {\n hangupPhysicalRecordingCall()\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.physicalRecorder.reset()\n store.dispatch.physicalRecorder.setRecording(false)\n store.dispatch.island.setIslandView(null)\n store.dispatch.listen.reset()\n // Caller close the call before the call is accepted\n eventDispatch('phone-island-call-ended', {})\n}\n\n/**\n * Mute the current call\n */\nexport function muteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const muted = muteWebRTC()\n if (muted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: true,\n })\n }\n } else {\n mutePhysical()\n }\n eventDispatch('phone-island-call-muted', {})\n}\n\n/**\n * Unmute the current call\n */\nexport function unmuteCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unmuted = unmuteWebRTC()\n if (unmuted) {\n store.dispatch.currentCall.updateCurrentCall({\n muted: false,\n })\n }\n } else {\n unmutePhysical()\n }\n eventDispatch('phone-island-call-unmuted', {})\n}\n\n/**\n * Pause the current call\n */\nexport function pauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const paused = pauseWebRTC()\n if (paused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: true,\n })\n // Pause remote audio\n store.dispatch.player.pauseRemoteAudio()\n }\n } else {\n pausePhysical(true)\n }\n eventDispatch('phone-island-call-held', {})\n}\n\n/**\n * Unpause the current call\n */\nexport function unpauseCurrentCall() {\n // Check the current user default device\n if (isWebRTC()) {\n const unpaused = unpauseWebRTC()\n if (unpaused) {\n store.dispatch.currentCall.updateCurrentCall({\n paused: false,\n })\n // Play remote audio\n store.dispatch.player.playRemoteAudio()\n }\n } else {\n pausePhysical(false)\n }\n eventDispatch('phone-island-call-unheld', {})\n}\n\n/**\n * Transfer the current call through a blind transfer (not in use)\n */\nexport async function blindTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through blind transfer\n if (conversationId && default_device?.id && number) {\n return await blindTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Transfer the current call through a attended transfer\n */\nexport async function attendedTransfer(number: string) {\n // Retrieve current conversation info\n const { conversationId } = store.getState().currentCall\n const { default_device } = store.getState().currentUser\n // Transfer the call through attended transfer\n if (conversationId && default_device?.id && number) {\n return await attendedTransferRequest({\n convid: conversationId,\n to: number,\n endpointId: default_device.id,\n })\n }\n}\n\n/**\n * Play the dtmf audio files\n */\nexport function playDtmfAudio(key: string) {\n if (key === '*') key = 'star'\n if (key === '#') key = 'pound'\n store.dispatch.player.updateStartAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n\n/**\n * Park the current call\n */\nexport function parkCurrentCall() {\n const conversationId = store?.getState()?.currentCall?.conversationId\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n let parkingInformation: any = {}\n\n if (conversationId) {\n if (userConversationInformations) {\n for (const key in userConversationInformations) {\n if (userConversationInformations.hasOwnProperty(key)) {\n const conversation = userConversationInformations[key]\n if (Object.keys(conversation).length > 0) {\n parkingInformation = {\n numberParkId: key,\n idConversation: conversationId,\n }\n }\n }\n }\n }\n\n if (Object.keys(parkingInformation).length > 0) {\n if (parkingInformation?.numberParkId) {\n // If park information are not empty park call\n parkConversation({\n applicantId: parkingInformation?.numberParkId,\n convid: conversationId,\n endpointId: parkingInformation?.numberParkId,\n })\n\n store.dispatch.currentCall.setParked(true)\n\n eventDispatch('phone-island-call-parked', {})\n }\n }\n }\n}\n\nconst findFirstExtesnionNotEmpty = (data) => {\n for (const key in data) {\n if (Object.keys(data[key]).length !== 0) {\n const firstEntry: any = Object.values(data[key])[0]\n return {\n id: firstEntry.id,\n recording: firstEntry.recording,\n }\n }\n }\n return null\n}\n\nexport async function recordCurrentCall(recordingValue: boolean) {\n store.dispatch.currentCall.updateRecordingStatus(!recordingValue)\n const userConversationInformations = store?.getState()?.currentUser?.conversations\n\n const firstExtensionNotEmpty = findFirstExtesnionNotEmpty(userConversationInformations)\n\n if (!firstExtensionNotEmpty) {\n return\n } else {\n const numberToSendCall = firstExtensionNotEmpty?.id?.match(/\\/(\\d+)-/)\n const endpointId = numberToSendCall[1]\n\n const listenInformations = {\n convid: firstExtensionNotEmpty?.id?.toString(),\n endpointId: endpointId?.toString(),\n }\n\n let recordingValues = ''\n switch (firstExtensionNotEmpty?.recording) {\n case 'false':\n recordingValues = 'start_record'\n break\n case 'true':\n recordingValues = 'mute_record'\n break\n case 'mute':\n recordingValues = 'unmute_record'\n break\n default:\n recordingValues = ''\n break\n }\n\n if (listenInformations) {\n try {\n await toggleRecord(recordingValues, listenInformations)\n } catch (e) {\n console.error(e)\n return []\n }\n }\n }\n}\n"],"names":["isWebRTC","answerWebRTC","answerPhysical","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","_a","sipHost","sipURI","concat","callSipURI","callPhysical","eventDispatch","conversations","extension","Object","keys","forEach","hangupConversation","outgoing","accepted","hangup","hangupPhysical","dispatch","player","stopAudioPlayer","reset","listen","hangupPhysicalRecordingCall","physicalRecorder","setRecording","island","setIslandView","muteWebRTC","updateCurrentCall","muted","mutePhysical","_b","userConversationInformations","_d","_c","parkingInformation","key","hasOwnProperty","conversation","length","numberParkId","idConversation","parkConversation","applicantId","setParked","pauseWebRTC","paused","pauseRemoteAudio","pausePhysical","updateStartAudioPlayer","src","dtmfAudios","recordingValue","updateRecordingStatus","firstExtensionNotEmpty","data","firstEntry","values","recording","findFirstExtesnionNotEmpty","numberToSendCall","match","listenInformations","toString","recordingValues","toggleRecord","_e","sent","console","error","e_1","unmuteWebRTC","unmutePhysical","unpauseWebRTC","playRemoteAudio"],"mappings":"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"}
|