@nethesis/phone-island 0.7.68 → 0.7.70
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/components/CallView/Actions.js +1 -1
- package/dist/components/CallView/Actions.js.map +1 -1
- package/dist/components/TransferView/TransferList.js +1 -1
- package/dist/components/TransferView/TransferList.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/models/player.d.ts +2 -0
- package/dist/models/player.js +1 -1
- package/dist/models/player.js.map +1 -1
- package/package.json +2 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js"),n=require("../../static/icons/PhoneKeypadLight.js"),a=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var s=require("../../store/index.js");require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var o=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../Button.js");require("../AudioBars.js");var u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.paused,q=e.muted,v=f.useSelector((function(e){return e.island})).view,w=f.useSelector((function(e){return e.currentCall})).transferring,
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),r=require("../../lib/phone/call.js"),n=require("../../static/icons/PhoneKeypadLight.js"),a=require("../../static/icons/PhoneKeypadSolid.js");require("../../node_modules/react-redux/es/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var s=require("../../store/index.js");require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../../lib/webrtc/janus.js");var i=require("../../lib/webrtc/messages.js");require("../../node_modules/mic-check/lib/index.js");var o=require("../../static/outgoing_ringtone.js");require("../Island.js");var l=require("../Button.js");require("../AudioBars.js");var u=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),c=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js");require("../../node_modules/framer-motion/dist/framer-motion.js");var d=require("../TransferView/TransferActions.js"),f=require("../../node_modules/react-redux/es/hooks/useSelector.js"),m=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function p(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var j=p(e);exports.default=function(){var e=f.useSelector((function(e){return e.currentCall})),p=e.paused,q=e.muted,v=f.useSelector((function(e){return e.island})).view,w=f.useSelector((function(e){return e.currentCall})).transferring,y=m.useDispatch();return j.default.createElement(j.default.Fragment,null,j.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},j.default.createElement(l.Button,{variant:"default",active:!!p,onClick:function(){return p?r.unpauseCurrentCall():r.pauseCurrentCall()}},p?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faPlay}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faPause})),j.default.createElement(l.Button,{variant:"default",active:!!q,onClick:function(){return q?r.unmuteCurrentCall():r.muteCurrentCall()}},q?j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:c.faMicrophoneSlash}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faMicrophone})),j.default.createElement(l.Button,{active:w,onClick:w?function(){i.sendDTMF("*"),s.store.getState().player.audioPlayerPlaying||y.player.updateAndPlayAudioPlayer({src:o.default,loop:!0}),setTimeout((function(){i.sendDTMF("1"),y.player.stopAudioPlayer()}),500)}:function(){y.island.setIslandView("transfer"!==v?"transfer":"call")},variant:"default"},w?j.default.createElement(u.FontAwesomeIcon,{className:"",size:"xl",icon:c.faArrowDownUpAcrossLine}):j.default.createElement(u.FontAwesomeIcon,{size:"xl",icon:t.faArrowDownArrowUp})),j.default.createElement(l.Button,{active:"keypad"===v,variant:"default",onClick:function(){y.island.setIslandView("keypad"!==v?"keypad":"call")}},"keypad"===v?j.default.createElement(a.default,null):j.default.createElement(n.default,null))),w&&j.default.createElement(d.TransferActions,null))};
|
|
2
2
|
//# sourceMappingURL=Actions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen and view from island store\n const { view } = useSelector((state: RootState) => state.island)\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n }, 500)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button variant='default' onClick={openKeypad}>\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n </div>\n {
|
|
1
|
+
{"version":3,"file":"Actions.js","sources":["../../../src/components/CallView/Actions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport {\n faPause as faPauseRegular,\n faMicrophone as faMicrophoneLight,\n faArrowDownArrowUp,\n} from '@nethesis/nethesis-light-svg-icons'\nimport {\n muteCurrentCall,\n unmuteCurrentCall,\n pauseCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport PhoneKeypadLight from '../../static/icons/PhoneKeypadLight'\nimport PhoneKeypadSolid from '../../static/icons/PhoneKeypadSolid'\nimport { Button } from '../'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faMicrophoneSlash,\n faPlay,\n faArrowDownUpAcrossLine,\n} from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState, Dispatch } from '../../store'\nimport { useSelector, useDispatch } from 'react-redux'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store } from '../../store'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { TransferActions } from '../TransferView'\n\nconst Actions: FC = () => {\n // Get multiple values from currentCall store\n const { paused, muted } = useSelector((state: RootState) => state.currentCall)\n\n // Get isOpen and view from island store\n const { view } = useSelector((state: RootState) => state.island)\n const { transferring } = useSelector((state: RootState) => state.currentCall)\n\n const dispatch = useDispatch<Dispatch>()\n\n function openKeypad() {\n dispatch.island.setIslandView(view !== 'keypad' ? 'keypad' : 'call')\n }\n\n function transfer() {\n dispatch.island.setIslandView(view !== 'transfer' ? 'transfer' : 'call')\n }\n\n // Cancels the current transfer through dtmfs\n function calcelTransfer() {\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n sendDTMF('1')\n dispatch.player.stopAudioPlayer()\n }, 500)\n }\n\n return (\n <>\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <Button\n variant='default'\n active={paused ? true : false}\n onClick={() => (paused ? unpauseCurrentCall() : pauseCurrentCall())}\n >\n {paused ? (\n <FontAwesomeIcon size='xl' icon={faPlay} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faPauseRegular} />\n )}\n </Button>\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n >\n {muted ? (\n <FontAwesomeIcon size='xl' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faMicrophoneLight} />\n )}\n </Button>\n <Button\n active={transferring}\n onClick={transferring ? calcelTransfer : transfer}\n variant='default'\n >\n {transferring ? (\n <FontAwesomeIcon className='' size='xl' icon={faArrowDownUpAcrossLine} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowDownArrowUp} />\n )}\n </Button>\n <Button active={view === 'keypad'} variant='default' onClick={openKeypad}>\n {view === 'keypad' ? <PhoneKeypadSolid /> : <PhoneKeypadLight />}\n </Button>\n </div>\n {transferring && <TransferActions />}\n </>\n )\n}\n\nexport default Actions\n"],"names":["_a","useSelector","state","currentCall","paused","muted","view","island","transferring","dispatch","useDispatch","React","createElement","Fragment","className","Button","variant","active","onClick","unpauseCurrentCall","pauseCurrentCall","FontAwesomeIcon","size","icon","faPlay","faPauseRegular","unmuteCurrentCall","muteCurrentCall","faMicrophoneSlash","faMicrophoneLight","sendDTMF","store","getState","player","audioPlayerPlaying","updateAndPlayAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","setIslandView","faArrowDownUpAcrossLine","faArrowDownArrowUp","PhoneKeypadSolid","PhoneKeypadLight","TransferActions"],"mappings":"syCA+BoB,WAEZ,IAAAA,EAAoBC,EAAAA,aAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,IAArEC,WAAQC,UAGRC,EAASL,eAAY,SAACC,GAAqB,OAAAA,EAAMK,eACjDC,EAAiBP,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAE3DM,EAAWC,EAAAA,cA2BjB,OACEC,UAAAC,cAAAD,EAAA,QAAAE,SAAA,KACEF,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,sHACbH,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQb,EACRc,QAAS,WAAM,OAACd,EAASe,EAAAA,qBAAuBC,EAAAA,qBAE/ChB,EACCO,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMC,EAAAA,SAEjCb,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAME,EAAAA,WAGrCd,EAAA,QAAAC,cAACG,SAAM,CACLC,QAAQ,UACRC,SAAQZ,EACRa,QAAS,WAAM,OAACb,EAAQqB,EAAAA,oBAAsBC,EAAAA,oBAE7CtB,EACCM,EAAA,QAAAC,cAACS,kBAAe,CAACC,KAAK,KAAKC,KAAMK,EAAAA,oBAEjCjB,EAAA,QAAAC,cAACS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMM,EAAAA,gBAGrClB,EAAC,QAAAC,cAAAG,EAAMA,OACL,CAAAE,OAAQT,EACRU,QAASV,EA3CjB,WACEsB,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDzB,EAASwB,OAAOE,yBAAyB,CACvCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,YAAW,WACTT,EAAQA,SAAC,KACTrB,EAASwB,OAAOO,iBACjB,GAAE,IACJ,EAnBD,WACE/B,EAASF,OAAOkC,cAAuB,aAATnC,EAAsB,WAAa,OAClE,EA+COU,QAAQ,WAEPR,EACCG,EAAAA,QAACC,cAAAS,EAAeA,gBAAC,CAAAP,UAAU,GAAGQ,KAAK,KAAKC,KAAMmB,EAAAA,0BAE9C/B,EAAC,QAAAC,cAAAS,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMoB,EAAAA,sBAGrChC,EAAAA,QAAAC,cAACG,SAAM,CAACE,OAAiB,WAATX,EAAmBU,QAAQ,UAAUE,QA7D3D,WACET,EAASF,OAAOkC,cAAuB,WAATnC,EAAoB,SAAW,OAC9D,GA4DiB,WAATA,EAAoBK,wBAACiC,EAAAA,QAAgB,MAAMjC,EAAA,QAAAC,cAACiC,EAAAA,QAAgB,QAGhErC,GAAgBG,EAAAA,QAACC,cAAAkC,EAAAA,gBAAkB,MAG1C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../lib/island/island.js"),a=require("./ListAvatar.js"),l=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),s=require("../../lib/phone/call.js"),u=require("../../utils/genericFunctions/timestamp.js"),o=require("../Hangup.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js"),f=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(t);exports.TransferListView=function(){var d=c.useSelector((function(e){return e.island})).isOpen,m=c.useSelector((function(e){return e.users})).endpoints,v=c.useSelector((function(e){return e.currentUser})).username,x=t.useState(!1),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../lib/island/island.js"),a=require("./ListAvatar.js"),l=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),s=require("../../lib/phone/call.js"),u=require("../../utils/genericFunctions/timestamp.js"),o=require("../Hangup.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js"),f=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(t);exports.TransferListView=function(){var d=c.useSelector((function(e){return e.island})).isOpen,m=c.useSelector((function(e){return e.users})).endpoints,v=c.useSelector((function(e){return e.currentUser})).username,x=t.useState(!1),b=x[0],h=x[1],w=t.useState([]),g=w[0],E=w[1],N=t.useRef(""),j=t.useState(),y=j[0],_=j[1],C=t.useRef(null),T=t.useState(!1),k=T[0],L=T[1],q=t.useState(10),S=q[0],A=q[1],F=t.useState(""),I=F[0],z=F[1],B=f.useDispatch(),W=c.useSelector((function(e){return e.currentCall})),P=W.displayName,V=W.number,D=W.startTime;function H(e){return v&&delete e[v],Object.values(e).filter((function(e){return e.endpoints.extension.find((function(e){return e.id.toLowerCase().startsWith(N.current.toLowerCase())}))||e.username.toLowerCase().startsWith(N.current.toLowerCase())||e.name.toLowerCase().startsWith(N.current.toLowerCase())}))}return t.useEffect((function(){m&&v&&(E(H(m)),h(!0))}),[m,v]),t.useEffect((function(){var e,t,n=function(){var e,t,n;L(!!(C.current&&C.current.scrollTop>3)),C.current&&(null===(e=C.current)||void 0===e?void 0:e.offsetHeight)+(null===(t=C.current)||void 0===t?void 0:t.scrollTop)>=(null===(n=C.current)||void 0===n?void 0:n.scrollHeight)-10&&A((function(e){return e+10}))};return d?null===(e=C.current)||void 0===e||e.addEventListener("scroll",n):null===(t=C.current)||void 0===t||t.removeEventListener("scroll",n),function(){var e;return null===(e=C.current)||void 0===e?void 0:e.removeEventListener("scroll",n)}}),[d]),t.useEffect((function(){z("")}),[N.current]),p.default.createElement(p.default.Fragment,null,d?p.default.createElement("div",{className:"pi-relative pi-flex pi-flex-col pi-gap-7"},p.default.createElement("div",{className:"pi-flex pi-gap-4"},p.default.createElement(n.Button,{variant:"transparent",onClick:i.backToCallView},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowLeft})),p.default.createElement("input",{"data-stop-propagation":!0,type:"text",onChange:function(e){N.current=e.currentTarget.value,m&&E(H(m)),/^[0-9*#+]+$/.test(N.current)?_(!0):_(!1)},value:N.current,autoFocus:!0,className:"pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0"})),p.default.createElement("div",{style:{height:"272px"},ref:C,className:"pi-relative pi-w-full pi-flex pi-flex-col pi-gap-2 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-500 pi-scrollbar-track-black pi-scrollbar-thumb-rounded-full pi-scrollbar-track-rounded-full hover:pi-scrollbar-thumb-gray-400"},k&&p.default.createElement("div",{style:{right:"35px",left:"35px"},className:"pi-fixed pi-z-10 pi-h-6 pi-bg-gradient-to-b pi-from-black pi-to-transparent pi-pointer-events-none"}),y&&0===g.length&&p.default.createElement("div",{className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1"},p.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},p.default.createElement(a.default,null),p.default.createElement("div",{style:{maxWidth:"146px"},className:"pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold"},N.current)),p.default.createElement("div",{className:"pi-flex pi-gap-3.5"},p.default.createElement(n.Button,{variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowUpToLine})),p.default.createElement(n.Button,{onClick:function(){return s.blindTransfer(N.current)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faPhone})))),g&&g.slice(0,S).map((function(t,i){return p.default.createElement("div",{key:i,className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1"},p.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},p.default.createElement(a.default,{username:t.username,status:t.mainPresence}),p.default.createElement("div",{style:{maxWidth:"146px"},className:"pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold"},t.name)),p.default.createElement("div",{className:"pi-flex pi-gap-3.5"},p.default.createElement(n.Button,{active:t.username===I,onClick:function(){return z(t.username)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowUpToLine})),p.default.createElement(n.Button,{onClick:function(){return function(t){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.attendedTransfer(t.endpoints.mainextension[0].id)];case 1:return e.sent()&&(B.island.setIslandView("call"),B.currentCall.updateCurrentCall({username:t.username,displayName:t.name,number:t.endpoints.mainextension[0].id,startTime:"".concat(u.getTimestampInSeconds()),transferring:!0,transferringName:P,transferringNumber:V,transferringStartTime:D})),[2]}}))}))}(t)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faPhone}))))})),b&&0===g.length&&!y&&p.default.createElement("p",{className:"pi-font-sans pi-font-bold pi-w-full pi-flex pi-justify-center pi-text-sm"},"No users found.")),p.default.createElement(o.default,{isDestination:""!==I,clickCallback:function(){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return I?[4,s.blindTransfer(m&&m[I].endpoints.mainextension[0].id||"")]:[3,2];case 1:!0===e.sent()&&(B.alerts.setAlert("call_transfered"),B.island.setIslandView("call"),setTimeout((function(){B.alerts.removeAlert("call_transfered")}),4e3)),e.label=2;case 2:return[2]}}))}))}})):p.default.createElement("div",{className:"pi-font-medium pi-text-base pi-font-sans"},"Transfer"))};
|
|
2
2
|
//# sourceMappingURL=TransferList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransferList.js","sources":["../../../src/components/TransferView/TransferList.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState, FormEvent, useRef } from 'react'\nimport { Button } from '../Button'\nimport { RootState } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { backToCallView } from '../../lib/island/island'\nimport ListAvatar from './ListAvatar'\nimport {\n faArrowUpToLine,\n faPhone as faPhoneLight,\n faArrowLeft,\n} from '@nethesis/nethesis-light-svg-icons'\nimport { UserEndpointsTypes, UsersEndpointsTypes } from '../../types'\nimport { blindTransfer, attendedTransfer } from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { getTimestampInSeconds } from '../../utils/genericFunctions/timestamp'\nimport Hangup from '../Hangup'\n\nconst USERS_NUMBER_PER_PAGE = 10\nconst SHOW_LIST_GRADIENT_DISTANCE = 3\n\nexport const TransferListView: FC<TransferListViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { endpoints } = useSelector((state: RootState) => state.users)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const [loaded, setLoaded] = useState<boolean>(false)\n const [listUsers, setListUsers] = useState<UserEndpointsTypes[]>([])\n const searchValue = useRef<string>('')\n const [showCustomUser, setShowCustomUser] = useState<boolean>()\n const relativeRef = useRef<HTMLDivElement>(null)\n const [showGradient, setShowGradient] = useState<boolean>(false)\n const [showingUsers, setShowingUsers] = useState<number>(USERS_NUMBER_PER_PAGE)\n const [transferDestination, setTransferDestination] = useState<string>('')\n const dispatch = useDispatch<Dispatch>()\n const { displayName, number, startTime } = useSelector((state: RootState) => state.currentCall)\n\n function handleChange(event: FormEvent<HTMLInputElement>) {\n // Update search value\n searchValue.current = event.currentTarget.value\n // Filter the users list\n endpoints && setListUsers(filterUsers(endpoints))\n // Check if custom user to call must be visible\n if (/^[0-9*#+]+$/.test(searchValue.current)) {\n setShowCustomUser(true)\n } else {\n setShowCustomUser(false)\n }\n }\n\n function filterUsers(endpoints: UsersEndpointsTypes) {\n // Remove the currentUser from the list\n username && delete endpoints[username]\n // Filter the users\n return Object.values(endpoints).filter(\n (userEndpoints: UserEndpointsTypes) =>\n userEndpoints.endpoints.extension.find((extension) =>\n extension.id.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n ) ||\n userEndpoints.username.toLowerCase().startsWith(searchValue.current.toLowerCase()) ||\n userEndpoints.name.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n )\n }\n\n async function handleHangupAndTransfer() {\n // Manage blind transfer and hangup\n if (transferDestination) {\n const transfered = await blindTransfer(\n (endpoints && endpoints[transferDestination].endpoints.mainextension[0].id) || '',\n )\n if (transfered === true) {\n dispatch.alerts.setAlert('call_transfered')\n dispatch.island.setIslandView('call')\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n }, 4000)\n }\n }\n }\n\n async function handleAttendedTransfer(userEndpoints: UserEndpointsTypes) {\n const transferring = await attendedTransfer(userEndpoints.endpoints.mainextension[0].id)\n if (transferring) {\n dispatch.island.setIslandView('call')\n // Force current call to achieve the expected behavior\n dispatch.currentCall.updateCurrentCall({\n username: userEndpoints.username,\n displayName: userEndpoints.name,\n number: userEndpoints.endpoints.mainextension[0].id,\n startTime: `${getTimestampInSeconds()}`,\n transferring: true,\n transferringName: displayName,\n transferringNumber: number,\n transferringStartTime: startTime,\n })\n }\n }\n\n // Initialize users list\n useEffect(() => {\n if (endpoints && username) {\n setListUsers(filterUsers(endpoints))\n setLoaded(true)\n }\n }, [endpoints, username])\n\n useEffect(() => {\n // Handle users list scrolling\n const handleScroll = () => {\n setShowGradient(\n relativeRef.current && relativeRef.current.scrollTop > SHOW_LIST_GRADIENT_DISTANCE\n ? true\n : false,\n )\n // Manage scroll to bottom\n if (\n relativeRef.current &&\n relativeRef.current?.offsetHeight + relativeRef.current?.scrollTop >=\n relativeRef.current?.scrollHeight - 10\n ) {\n // Improve showing users\n setShowingUsers((state) => state + USERS_NUMBER_PER_PAGE)\n }\n }\n // Manage expansion and collapsing\n if (isOpen) {\n relativeRef.current?.addEventListener('scroll', handleScroll)\n } else {\n relativeRef.current?.removeEventListener('scroll', handleScroll)\n }\n return () => relativeRef.current?.removeEventListener('scroll', handleScroll)\n }, [isOpen])\n\n // Reset transfer destination value when search value changes\n useEffect(() => {\n setTransferDestination('')\n }, [searchValue.current])\n\n return (\n <>\n {isOpen ? (\n <div className='pi-relative pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button variant='transparent' onClick={backToCallView}>\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n onChange={handleChange}\n value={searchValue.current}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <div\n style={{ height: '272px' }}\n ref={relativeRef}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-2 pi-overflow-y-auto pi-overflow-x-hidden pi-custom-scrollbar'\n >\n {showGradient && (\n <div\n style={{ right: '35px', left: '35px' }}\n className='pi-fixed pi-z-10 pi-h-6 pi-bg-gradient-to-b pi-from-black pi-to-transparent pi-pointer-events-none'\n ></div>\n )}\n {/* The custom user */}\n {showCustomUser && listUsers.length === 0 && (\n <div className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {searchValue.current}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => blindTransfer(searchValue.current)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n )}\n {/* The users list */}\n {listUsers &&\n listUsers.slice(0, showingUsers).map((userEndpoints, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar\n username={userEndpoints.username}\n status={userEndpoints.mainPresence}\n />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {userEndpoints.name}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n active={userEndpoints.username === transferDestination}\n onClick={() => setTransferDestination(userEndpoints.username)}\n variant='default'\n >\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => handleAttendedTransfer(userEndpoints)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n ))}\n {loaded && listUsers.length === 0 && !showCustomUser && (\n <p className='pi-font-sans pi-font-bold pi-w-full pi-flex pi-justify-center pi-text-sm'>\n No users found.\n </p>\n )}\n </div>\n <Hangup\n isDestination={transferDestination !== ''}\n clickCallback={handleHangupAndTransfer}\n />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base pi-font-sans'>Transfer</div>\n )}\n </>\n )\n}\n\ninterface TransferListViewProps {}\n"],"names":["isOpen","useSelector","state","island","endpoints","users","username","currentUser","_a","useState","loaded","setLoaded","_b","listUsers","setListUsers","searchValue","useRef","_c","showCustomUser","setShowCustomUser","relativeRef","_d","showGradient","setShowGradient","_e","showingUsers","setShowingUsers","_f","transferDestination","setTransferDestination","dispatch","useDispatch","_g","currentCall","displayName","number","startTime","filterUsers","Object","values","filter","userEndpoints","extension","find","id","toLowerCase","startsWith","current","name","useEffect","handleScroll","scrollTop","offsetHeight","scrollHeight","addEventListener","removeEventListener","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","onChange","event","currentTarget","value","test","autoFocus","style","height","ref","right","left","length","ListAvatar","maxWidth","faArrowUpToLine","blindTransfer","faPhoneLight","faPhone","slice","map","i","key","status","mainPresence","active","attendedTransfer","mainextension","sent","setIslandView","updateCurrentCall","concat","getTimestampInSeconds","transferring","transferringName","transferringNumber","transferringStartTime","handleAttendedTransfer","Hangup","isDestination","clickCallback","alerts","setAlert","setTimeout","removeAlert"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TransferList.js","sources":["../../../src/components/TransferView/TransferList.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState, FormEvent, useRef } from 'react'\nimport { Button } from '../Button'\nimport { RootState } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { backToCallView } from '../../lib/island/island'\nimport ListAvatar from './ListAvatar'\nimport {\n faArrowUpToLine,\n faPhone as faPhoneLight,\n faArrowLeft,\n} from '@nethesis/nethesis-light-svg-icons'\nimport { UserEndpointsTypes, UsersEndpointsTypes } from '../../types'\nimport { blindTransfer, attendedTransfer } from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { getTimestampInSeconds } from '../../utils/genericFunctions/timestamp'\nimport Hangup from '../Hangup'\n\nconst USERS_NUMBER_PER_PAGE = 10\nconst SHOW_LIST_GRADIENT_DISTANCE = 3\n\nexport const TransferListView: FC<TransferListViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { endpoints } = useSelector((state: RootState) => state.users)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const [loaded, setLoaded] = useState<boolean>(false)\n const [listUsers, setListUsers] = useState<UserEndpointsTypes[]>([])\n const searchValue = useRef<string>('')\n const [showCustomUser, setShowCustomUser] = useState<boolean>()\n const relativeRef = useRef<HTMLDivElement>(null)\n const [showGradient, setShowGradient] = useState<boolean>(false)\n const [showingUsers, setShowingUsers] = useState<number>(USERS_NUMBER_PER_PAGE)\n const [transferDestination, setTransferDestination] = useState<string>('')\n const dispatch = useDispatch<Dispatch>()\n const { displayName, number, startTime } = useSelector((state: RootState) => state.currentCall)\n\n function handleChange(event: FormEvent<HTMLInputElement>) {\n // Update search value\n searchValue.current = event.currentTarget.value\n // Filter the users list\n endpoints && setListUsers(filterUsers(endpoints))\n // Check if custom user to call must be visible\n if (/^[0-9*#+]+$/.test(searchValue.current)) {\n setShowCustomUser(true)\n } else {\n setShowCustomUser(false)\n }\n }\n\n function filterUsers(endpoints: UsersEndpointsTypes) {\n // Remove the currentUser from the list\n username && delete endpoints[username]\n // Filter the users\n return Object.values(endpoints).filter(\n (userEndpoints: UserEndpointsTypes) =>\n userEndpoints.endpoints.extension.find((extension) =>\n extension.id.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n ) ||\n userEndpoints.username.toLowerCase().startsWith(searchValue.current.toLowerCase()) ||\n userEndpoints.name.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n )\n }\n\n async function handleHangupAndTransfer() {\n // Manage blind transfer and hangup\n if (transferDestination) {\n const transfered = await blindTransfer(\n (endpoints && endpoints[transferDestination].endpoints.mainextension[0].id) || '',\n )\n if (transfered === true) {\n dispatch.alerts.setAlert('call_transfered')\n dispatch.island.setIslandView('call')\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n }, 4000)\n }\n }\n }\n\n async function handleAttendedTransfer(userEndpoints: UserEndpointsTypes) {\n const transferring = await attendedTransfer(userEndpoints.endpoints.mainextension[0].id)\n if (transferring) {\n dispatch.island.setIslandView('call')\n // Force current call to achieve the expected behavior\n dispatch.currentCall.updateCurrentCall({\n username: userEndpoints.username,\n displayName: userEndpoints.name,\n number: userEndpoints.endpoints.mainextension[0].id,\n startTime: `${getTimestampInSeconds()}`,\n transferring: true,\n transferringName: displayName,\n transferringNumber: number,\n transferringStartTime: startTime,\n })\n }\n }\n\n // Initialize users list\n useEffect(() => {\n if (endpoints && username) {\n setListUsers(filterUsers(endpoints))\n setLoaded(true)\n }\n }, [endpoints, username])\n\n useEffect(() => {\n // Handle users list scrolling\n const handleScroll = () => {\n setShowGradient(\n relativeRef.current && relativeRef.current.scrollTop > SHOW_LIST_GRADIENT_DISTANCE\n ? true\n : false,\n )\n // Manage scroll to bottom\n if (\n relativeRef.current &&\n relativeRef.current?.offsetHeight + relativeRef.current?.scrollTop >=\n relativeRef.current?.scrollHeight - 10\n ) {\n // Improve showing users\n setShowingUsers((state) => state + USERS_NUMBER_PER_PAGE)\n }\n }\n // Manage expansion and collapsing\n if (isOpen) {\n relativeRef.current?.addEventListener('scroll', handleScroll)\n } else {\n relativeRef.current?.removeEventListener('scroll', handleScroll)\n }\n return () => relativeRef.current?.removeEventListener('scroll', handleScroll)\n }, [isOpen])\n\n // Reset transfer destination value when search value changes\n useEffect(() => {\n setTransferDestination('')\n }, [searchValue.current])\n\n return (\n <>\n {isOpen ? (\n <div className='pi-relative pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button variant='transparent' onClick={backToCallView}>\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n onChange={handleChange}\n value={searchValue.current}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <div\n style={{ height: '272px' }}\n ref={relativeRef}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-2 pi-overflow-y-auto pi-overflow-x-hidden pi-scrollbar-thin pi-scrollbar-thumb-gray-500 pi-scrollbar-track-black pi-scrollbar-thumb-rounded-full pi-scrollbar-track-rounded-full hover:pi-scrollbar-thumb-gray-400'\n >\n {showGradient && (\n <div\n style={{ right: '35px', left: '35px' }}\n className='pi-fixed pi-z-10 pi-h-6 pi-bg-gradient-to-b pi-from-black pi-to-transparent pi-pointer-events-none'\n ></div>\n )}\n {/* The custom user */}\n {showCustomUser && listUsers.length === 0 && (\n <div className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {searchValue.current}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => blindTransfer(searchValue.current)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n )}\n {/* The users list */}\n {listUsers &&\n listUsers.slice(0, showingUsers).map((userEndpoints, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar\n username={userEndpoints.username}\n status={userEndpoints.mainPresence}\n />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {userEndpoints.name}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n active={userEndpoints.username === transferDestination}\n onClick={() => setTransferDestination(userEndpoints.username)}\n variant='default'\n >\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => handleAttendedTransfer(userEndpoints)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n ))}\n {loaded && listUsers.length === 0 && !showCustomUser && (\n <p className='pi-font-sans pi-font-bold pi-w-full pi-flex pi-justify-center pi-text-sm'>\n No users found.\n </p>\n )}\n </div>\n <Hangup\n isDestination={transferDestination !== ''}\n clickCallback={handleHangupAndTransfer}\n />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base pi-font-sans'>Transfer</div>\n )}\n </>\n )\n}\n\ninterface TransferListViewProps {}\n"],"names":["isOpen","useSelector","state","island","endpoints","users","username","currentUser","_a","useState","loaded","setLoaded","_b","listUsers","setListUsers","searchValue","useRef","_c","showCustomUser","setShowCustomUser","relativeRef","_d","showGradient","setShowGradient","_e","showingUsers","setShowingUsers","_f","transferDestination","setTransferDestination","dispatch","useDispatch","_g","currentCall","displayName","number","startTime","filterUsers","Object","values","filter","userEndpoints","extension","find","id","toLowerCase","startsWith","current","name","useEffect","handleScroll","scrollTop","offsetHeight","scrollHeight","addEventListener","removeEventListener","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","onChange","event","currentTarget","value","test","autoFocus","style","height","ref","right","left","length","ListAvatar","maxWidth","faArrowUpToLine","blindTransfer","faPhoneLight","faPhone","slice","map","i","key","status","mainPresence","active","attendedTransfer","mainextension","sent","setIslandView","updateCurrentCall","concat","getTimestampInSeconds","transferring","transferringName","transferringNumber","transferringStartTime","handleAttendedTransfer","Hangup","isDestination","clickCallback","alerts","setAlert","setTimeout","removeAlert"],"mappings":"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"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,: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-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-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-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-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-left-0{left:0}.pi-top-0{top:0}.pi-bottom-0{bottom:0}.pi-right-0{right:0}.pi-z-1000{z-index:1000}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-col-start-auto{grid-column-start:auto}.pi-mb-6{margin-bottom:1.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-3{height:.75rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-full{width:100%}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.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-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-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-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-7{gap:1.75rem}.pi-gap-2{gap:.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-transparent{--tw-gradient-to:transparent}.pi-p-6{padding:1.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pt-3{padding-top:.75rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.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-duration-200{transition-duration:.2s}.hover\:pi-border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:pi-bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/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))}.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-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-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-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-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/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-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/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-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))}.disabled\:pi-opacity-75:disabled{opacity:.75}
|
|
1
|
+
*{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-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-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-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-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-left-0{left:0}.pi-top-0{top:0}.pi-bottom-0{bottom:0}.pi-right-0{right:0}.pi-z-1000{z-index:1000}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-col-start-auto{grid-column-start:auto}.pi-mb-6{margin-bottom:1.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-3{height:.75rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-full{width:100%}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.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-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-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-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-7{gap:1.75rem}.pi-gap-2{gap:.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-transparent{--tw-gradient-to:transparent}.pi-p-6{padding:1.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pt-3{padding-top:.75rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.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-duration-200{transition-duration:.2s}.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial)}.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)))}.pi-scrollbar-thin{scrollbar-width:thin}.pi-scrollbar-thin::-webkit-scrollbar{height:8px;width:8px}.pi-scrollbar-track-black{--scrollbar-track:#000!important}.pi-scrollbar-thumb-gray-500{--scrollbar-thumb:#6b7280!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.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-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-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-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-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/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-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/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-white:focus{--tw-ring-offset-color:#fff}.disabled\:pi-opacity-75:disabled{opacity:.75}.hover\:pi-border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:pi-bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/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-scrollbar-thumb-gray-400{--scrollbar-thumb-hover:#9ca3af!important}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}
|
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("../devices/devices.js"),r=require("../webrtc/janus.js"),n=require("../webrtc/messages.js"),a=require("../../store/index.js"),o=require("../user/default_device.js"),s=require("../../services/astproxy.js"),i=require("../../static/dtmf/index.js");function u(a){var o=this;t.getSupportedDevices((function(){return e.__awaiter(o,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return r.default.log("This is a SIP call"),[4,n.call(a,{audio:{mandatory:{echoCancellation:!1,googEchoCancellation:!1,googAutoGainControl:!1,googAutoGainControl2:!1,googNoiseSuppression:!1,googHighpassFilter:!1,googTypingNoiseDetection:!1}},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))}exports.answerIncomingCall=function(){o.isWebRTC()&&n.answerWebRTC()},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var r,n;return e.__generator(this,(function(e){switch(e.label){case 0:return r=a.store.getState().currentCall.conversationId,n=a.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.attendedTransfer({convid:r,to:t,endpointId:n.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.blindTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var r,n;return e.__generator(this,(function(e){switch(e.label){case 0:return r=a.store.getState().currentCall.conversationId,n=a.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.blindTransfer({convid:r,to:t,endpointId:n.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e){u("sip:".concat(e,"@").concat("127.0.0.1"))},exports.callSipURI=u,exports.hangupCurrentCall=function(){var e=a.store.getState().currentCall,t=e.outgoing,r=e.accepted;t||r?n.hangup():n.decline(),a.store.dispatch.player.stopAudioPlayer(),a.store.dispatch.currentCall.reset()},exports.muteCurrentCall=function(){o.isWebRTC()&&n.muteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!0})},exports.pauseCurrentCall=function(){o.isWebRTC()&&n.pauseWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({paused:!0})},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),a.store.dispatch.player.updateAndPlayAudioPlayer({src:i.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){o.isWebRTC()&&n.unmuteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!1})},exports.unpauseCurrentCall=function(){o.isWebRTC()&&n.unpauseWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({paused:!1})};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("../devices/devices.js"),r=require("../webrtc/janus.js"),n=require("../webrtc/messages.js"),a=require("../../store/index.js"),o=require("../user/default_device.js"),s=require("../../services/astproxy.js"),i=require("../../static/dtmf/index.js");function u(a){var o=this;t.getSupportedDevices((function(){return e.__awaiter(o,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return r.default.log("This is a SIP call"),[4,n.call(a,{audio:{mandatory:{echoCancellation:!1,googEchoCancellation:!1,googAutoGainControl:!1,googAutoGainControl2:!1,googNoiseSuppression:!1,googHighpassFilter:!1,googTypingNoiseDetection:!1}},audioSend:!0,audioRecv:!0,videoSend:!1,videoRecv:!1})];case 1:return e.sent(),[2]}}))}))}))}exports.answerIncomingCall=function(){o.isWebRTC()&&n.answerWebRTC()},exports.attendedTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var r,n;return e.__generator(this,(function(e){switch(e.label){case 0:return r=a.store.getState().currentCall.conversationId,n=a.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.attendedTransfer({convid:r,to:t,endpointId:n.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.blindTransfer=function(t){return e.__awaiter(this,void 0,void 0,(function(){var r,n;return e.__generator(this,(function(e){switch(e.label){case 0:return r=a.store.getState().currentCall.conversationId,n=a.store.getState().currentUser.default_device,r&&(null==n?void 0:n.id)&&t?[4,s.blindTransfer({convid:r,to:t,endpointId:n.id})]:[3,2];case 1:return[2,e.sent()];case 2:return[2]}}))}))},exports.callNumber=function(e){u("sip:".concat(e,"@").concat("127.0.0.1"))},exports.callSipURI=u,exports.hangupCurrentCall=function(){var e=a.store.getState().currentCall,t=e.outgoing,r=e.accepted;t||r?n.hangup():n.decline(),a.store.dispatch.player.stopAudioPlayer(),a.store.dispatch.currentCall.reset()},exports.muteCurrentCall=function(){o.isWebRTC()&&n.muteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!0})},exports.pauseCurrentCall=function(){o.isWebRTC()&&n.pauseWebRTC()&&(a.store.dispatch.currentCall.updateCurrentCall({paused:!0}),a.store.dispatch.player.pauseRemoteAudio())},exports.playDtmfAudio=function(e){"*"===e&&(e="star"),"#"===e&&(e="pound"),a.store.dispatch.player.updateAndPlayAudioPlayer({src:i.default["dtmf_".concat(e)]})},exports.unmuteCurrentCall=function(){o.isWebRTC()&&n.unmuteWebRTC()&&a.store.dispatch.currentCall.updateCurrentCall({muted:!1})},exports.unpauseCurrentCall=function(){o.isWebRTC()&&n.unpauseWebRTC()&&(a.store.dispatch.currentCall.updateCurrentCall({paused:!1}),a.store.dispatch.player.playRemoteAudio())};
|
|
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 { getSupportedDevices } from '../devices/devices'\nimport Janus from '../webrtc/janus'\nimport {\n call,\n hangup,\n decline,\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} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string) {\n const BASE_HOST_URL: string = '127.0.0.1'\n const sipURI = `sip:${number}@${BASE_HOST_URL}`\n callSipURI(sipURI)\n}\n\n/**\n * Starts a call to a SIP URI\n *\n * @param sipURI The SIP URI string\n */\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n await call(sipURI, {\n audio: {\n mandatory: {\n echoCancellation: false,\n googEchoCancellation: false,\n googAutoGainControl: false,\n googAutoGainControl2: false,\n googNoiseSuppression: false,\n googHighpassFilter: false,\n googTypingNoiseDetection: false,\n },\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n hangup()\n } else {\n decline()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\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 }\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 }\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 }\n }\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 }\n }\n}\n\n/**\n * Transfer the current call through a blind transfer\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.updateAndPlayAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","googEchoCancellation","googAutoGainControl","googAutoGainControl2","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","blindTransferRequest","concat","outgoing","accepted","hangup","decline","dispatch","player","stopAudioPlayer","reset","muteWebRTC","updateCurrentCall","muted","pauseWebRTC","paused","key","updateAndPlayAudioPlayer","src","dtmfAudios","unmuteWebRTC","unpauseWebRTC"],"mappings":"0XAsCM,SAAUA,EAAWC,GAA3B,IAsBCC,EAAAC,KArBCC,EAAmBA,qBAAC,WAAA,OAAAC,EAAAA,UAAAH,OAAA,OAAA,GAAA,yEAGlB,OADAI,UAAMC,IAAI,sBACJ,CAAA,EAAAC,EAAIA,KAACP,EAAQ,CACjBQ,MAAO,CACLC,UAAW,CACTC,kBAAkB,EAClBC,sBAAsB,EACtBC,qBAAqB,EACrBC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,0BAA0B,IAG9BC,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,WAAW,mBAfbC,EAAAC,cAiBD,GAAA,GACH,uCAMMC,EAAQA,YACVC,EAAAA,cAEJ,
|
|
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 { getSupportedDevices } from '../devices/devices'\nimport Janus from '../webrtc/janus'\nimport {\n call,\n hangup,\n decline,\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} from '../../services/astproxy'\nimport dtmfAudios from '../../static/dtmf'\n\n/**\n * Starts a call to a number\n * @param number The number string\n */\nexport function callNumber(number: string) {\n const BASE_HOST_URL: string = '127.0.0.1'\n const sipURI = `sip:${number}@${BASE_HOST_URL}`\n callSipURI(sipURI)\n}\n\n/**\n * Starts a call to a SIP URI\n *\n * @param sipURI The SIP URI string\n */\nexport function callSipURI(sipURI: string) {\n getSupportedDevices(async () => {\n // @ts-ignore\n Janus.log('This is a SIP call')\n await call(sipURI, {\n audio: {\n mandatory: {\n echoCancellation: false,\n googEchoCancellation: false,\n googAutoGainControl: false,\n googAutoGainControl2: false,\n googNoiseSuppression: false,\n googHighpassFilter: false,\n googTypingNoiseDetection: false,\n },\n },\n audioSend: true,\n audioRecv: true,\n videoSend: false,\n videoRecv: false,\n })\n })\n}\n\n/**\n * Answer incoming call\n */\nexport function answerIncomingCall() {\n if (isWebRTC()) {\n answerWebRTC()\n }\n}\n\n/**\n * Hangup current call\n */\nexport function hangupCurrentCall() {\n const { outgoing, accepted } = store.getState().currentCall\n if (outgoing || accepted) {\n hangup()\n } else {\n decline()\n }\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.currentCall.reset()\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 }\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 }\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 }\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 }\n}\n\n/**\n * Transfer the current call through a blind transfer\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.updateAndPlayAudioPlayer({ src: dtmfAudios[`dtmf_${key}`] })\n}\n"],"names":["callSipURI","sipURI","_this","this","getSupportedDevices","__awaiter","Janus","log","call","audio","mandatory","echoCancellation","googEchoCancellation","googAutoGainControl","googAutoGainControl2","googNoiseSuppression","googHighpassFilter","googTypingNoiseDetection","audioSend","audioRecv","videoSend","videoRecv","_a","sent","isWebRTC","answerWebRTC","number","conversationId","store","getState","currentCall","default_device","currentUser","id","attendedTransferRequest","convid","to","endpointId","blindTransferRequest","concat","outgoing","accepted","hangup","decline","dispatch","player","stopAudioPlayer","reset","muteWebRTC","updateCurrentCall","muted","pauseWebRTC","paused","pauseRemoteAudio","key","updateAndPlayAudioPlayer","src","dtmfAudios","unmuteWebRTC","unpauseWebRTC","playRemoteAudio"],"mappings":"0XAsCM,SAAUA,EAAWC,GAA3B,IAsBCC,EAAAC,KArBCC,EAAmBA,qBAAC,WAAA,OAAAC,EAAAA,UAAAH,OAAA,OAAA,GAAA,yEAGlB,OADAI,UAAMC,IAAI,sBACJ,CAAA,EAAAC,EAAIA,KAACP,EAAQ,CACjBQ,MAAO,CACLC,UAAW,CACTC,kBAAkB,EAClBC,sBAAsB,EACtBC,qBAAqB,EACrBC,sBAAsB,EACtBC,sBAAsB,EACtBC,oBAAoB,EACpBC,0BAA0B,IAG9BC,WAAW,EACXC,WAAW,EACXC,WAAW,EACXC,WAAW,mBAfbC,EAAAC,cAiBD,GAAA,GACH,uCAMMC,EAAQA,YACVC,EAAAA,cAEJ,2BAoGM,SAAiCC,2HAKjC,OAHIC,EAAmBC,EAAAA,MAAMC,WAAWC,2BACpCC,EAAmBH,EAAAA,MAAMC,WAAWG,2BAExCL,IAAkBI,aAAA,EAAAA,EAAgBE,KAAMP,EACnC,CAAA,EAAMQ,mBAAwB,CACnCC,OAAQR,EACRS,GAAIV,EACJW,WAAYN,EAAeE,MAJmB,CAAA,EAAA,GAChD,KAAA,EAAA,MAAA,CAAA,EAAOX,iCAMV,wBA7BK,SAA8BI,2HAK9B,OAHIC,EAAmBC,EAAAA,MAAMC,WAAWC,2BACpCC,EAAmBH,EAAAA,MAAMC,WAAWG,2BAExCL,IAAkBI,aAAA,EAAAA,EAAgBE,KAAMP,EACnC,CAAA,EAAMY,gBAAqB,CAChCH,OAAQR,EACRS,GAAIV,EACJW,WAAYN,EAAeE,MAJmB,CAAA,EAAA,GAChD,KAAA,EAAA,MAAA,CAAA,EAAOX,iCAMV,qBAzIK,SAAqBI,GAGzB1B,EADe,OAAAuC,OAAOb,EAAU,KAAAa,OADF,aAGhC,4DA4CQ,IAAAjB,EAAyBM,EAAAA,MAAMC,WAAWC,YAAxCU,EAAQlB,EAAAkB,SAAEC,aACdD,GAAYC,EACdC,EAAAA,SAEAC,EAAAA,UAEFf,EAAAA,MAAMgB,SAASC,OAAOC,kBACtBlB,EAAAA,MAAMgB,SAASd,YAAYiB,OAC7B,qCAOMvB,EAAQA,YACIwB,EAAAA,cAEZpB,QAAMgB,SAASd,YAAYmB,kBAAkB,CAC3CC,OAAO,GAIf,sCAsBM1B,EAAQA,YACK2B,EAAAA,gBAEbvB,QAAMgB,SAASd,YAAYmB,kBAAkB,CAC3CG,QAAQ,IAGVxB,EAAAA,MAAMgB,SAASC,OAAOQ,mBAG5B,wBAwDM,SAAwBC,GAChB,MAARA,IAAaA,EAAM,QACX,MAARA,IAAaA,EAAM,SACvB1B,EAAAA,MAAMgB,SAASC,OAAOU,yBAAyB,CAAEC,IAAKC,UAAW,QAAQlB,OAAAe,KAC3E,uCArFM9B,EAAQA,YACMkC,EAAAA,gBAEd9B,QAAMgB,SAASd,YAAYmB,kBAAkB,CAC3CC,OAAO,GAIf,wCAwBM1B,EAAQA,YACOmC,EAAAA,kBAEf/B,QAAMgB,SAASd,YAAYmB,kBAAkB,CAC3CG,QAAQ,IAGVxB,EAAAA,MAAMgB,SAASC,OAAOe,kBAG5B"}
|
package/dist/models/player.d.ts
CHANGED
|
@@ -48,6 +48,8 @@ export declare const player: {
|
|
|
48
48
|
localVideo: HTMLVideoElement | null;
|
|
49
49
|
remoteVideo: HTMLVideoElement | null;
|
|
50
50
|
};
|
|
51
|
+
playRemoteAudio: (state: PlayerTypes) => void;
|
|
52
|
+
pauseRemoteAudio: (state: PlayerTypes) => void;
|
|
51
53
|
reset: () => PlayerTypes;
|
|
52
54
|
};
|
|
53
55
|
} & ({} | {
|
package/dist/models/player.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),a=require("../node_modules/@rematch/core/dist/core.esm.js"),r=require("../lib/phone/audio.js"),o={audioPlayer:null,audioPlayerPlaying:!1,audioPlayerLoop:!1,localAudio:null,remoteAudio:null,localVideo:null,remoteVideo:null},u=a.createModel()({state:o,reducers:{updatePlayer:function(a,r){return e.__assign(e.__assign({},a),r)},updateAudioPlayer:function(e,a){return e.audioPlayer&&(e.audioPlayer.src="data:audio/ogg;base64, ".concat(a.src)),e},playAudioPlayer:function(a){if(a.audioPlayer)return a.audioPlayer.paused||(a.audioPlayer.pause(),a.audioPlayer.currentTime=0),a.audioPlayer.play(),e.__assign(e.__assign({},a),{audioPlayerPlaying:!0})},stopAudioPlayer:function(a){if(a.audioPlayer)return a.audioPlayer.pause(),a.audioPlayer.currentTime=0,e.__assign(e.__assign({},a),{audioPlayerPlaying:!1})},setAudioPlayerLoop:function(a,r){return e.__assign(e.__assign({},a),{audioPlayerLoop:r})},reset:function(){return o}},effects:function(a){return{updateAndPlayAudioPlayer:function(o){var u=o.src,i=o.loop,l=void 0!==i&&i;return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return a.player.setAudioPlayerLoop(l),[4,r.updateAudioPlayerSource({src:u})];case 1:return e.sent(),a.player.playAudioPlayer(),[2]}}))}))}}}});exports.player=u;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),a=require("../node_modules/@rematch/core/dist/core.esm.js"),r=require("../lib/phone/audio.js"),o={audioPlayer:null,audioPlayerPlaying:!1,audioPlayerLoop:!1,localAudio:null,remoteAudio:null,localVideo:null,remoteVideo:null},u=a.createModel()({state:o,reducers:{updatePlayer:function(a,r){return e.__assign(e.__assign({},a),r)},updateAudioPlayer:function(e,a){return e.audioPlayer&&(e.audioPlayer.src="data:audio/ogg;base64, ".concat(a.src)),e},playAudioPlayer:function(a){if(a.audioPlayer)return a.audioPlayer.paused||(a.audioPlayer.pause(),a.audioPlayer.currentTime=0),a.audioPlayer.play(),e.__assign(e.__assign({},a),{audioPlayerPlaying:!0})},stopAudioPlayer:function(a){if(a.audioPlayer)return a.audioPlayer.pause(),a.audioPlayer.currentTime=0,e.__assign(e.__assign({},a),{audioPlayerPlaying:!1})},setAudioPlayerLoop:function(a,r){return e.__assign(e.__assign({},a),{audioPlayerLoop:r})},playRemoteAudio:function(e){var a;null===(a=e.remoteAudio)||void 0===a||a.play()},pauseRemoteAudio:function(e){var a;null===(a=e.remoteAudio)||void 0===a||a.pause()},reset:function(){return o}},effects:function(a){return{updateAndPlayAudioPlayer:function(o){var u=o.src,i=o.loop,l=void 0!==i&&i;return e.__awaiter(void 0,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return a.player.setAudioPlayerLoop(l),[4,r.updateAudioPlayerSource({src:u})];case 1:return e.sent(),a.player.playAudioPlayer(),[2]}}))}))}}}});exports.player=u;
|
|
2
2
|
//# sourceMappingURL=player.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.js","sources":["../../src/models/player.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { updateAudioPlayerSource } from '../lib/phone/audio'\n\nconst defaultState: PlayerTypes = {\n audioPlayer: null,\n audioPlayerPlaying: false,\n audioPlayerLoop: false,\n localAudio: null,\n remoteAudio: null,\n localVideo: null,\n remoteVideo: null,\n}\n\nexport const player = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updatePlayer: (state, payload: PlayerTypes) => {\n return {\n ...state,\n ...payload,\n }\n },\n updateAudioPlayer: (state, payload: UpdateAudioSourceTypes) => {\n if (state.audioPlayer) {\n state.audioPlayer.src = `data:audio/ogg;base64, ${payload.src}`\n }\n return state\n },\n playAudioPlayer: (state) => {\n if (state.audioPlayer) {\n // Check if is playing\n if (!state.audioPlayer.paused) {\n state.audioPlayer.pause()\n state.audioPlayer.currentTime = 0\n }\n // Play the audio\n state.audioPlayer.play()\n return {\n ...state,\n audioPlayerPlaying: true,\n }\n }\n },\n stopAudioPlayer: (state) => {\n if (state.audioPlayer) {\n // Pause audio\n state.audioPlayer.pause()\n state.audioPlayer.currentTime = 0\n return {\n ...state,\n audioPlayerPlaying: false,\n }\n }\n },\n setAudioPlayerLoop: (state, payload: boolean) => ({\n ...state,\n audioPlayerLoop: payload,\n }),\n reset: () => {\n return defaultState\n },\n },\n effects: (dispatch) => ({\n // This function is recommended for playing audio\n updateAndPlayAudioPlayer: async ({ src, loop = false }: { src: string; loop?: boolean }) => {\n dispatch.player.setAudioPlayerLoop(loop)\n // Update the audio source\n await updateAudioPlayerSource({\n src: src,\n })\n // Play the outgoing ringtone when ready\n dispatch.player.playAudioPlayer()\n },\n }),\n})\n\ninterface UpdateAudioSourceTypes {\n src: string\n}\n\ninterface PlayerTypes {\n audioPlayer: HTMLAudioElement | null\n audioPlayerPlaying?: boolean\n audioPlayerLoop?: boolean\n localAudio: HTMLAudioElement | null\n remoteAudio: HTMLAudioElement | null\n localVideo: HTMLVideoElement | null\n remoteVideo: HTMLVideoElement | null\n}\n"],"names":["defaultState","audioPlayer","audioPlayerPlaying","audioPlayerLoop","localAudio","remoteAudio","localVideo","remoteVideo","player","createModel","state","reducers","updatePlayer","payload","__assign","updateAudioPlayer","src","playAudioPlayer","paused","pause","currentTime","play","stopAudioPlayer","setAudioPlayerLoop","reset","effects","dispatch","updateAndPlayAudioPlayer","
|
|
1
|
+
{"version":3,"file":"player.js","sources":["../../src/models/player.ts"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { updateAudioPlayerSource } from '../lib/phone/audio'\n\nconst defaultState: PlayerTypes = {\n audioPlayer: null,\n audioPlayerPlaying: false,\n audioPlayerLoop: false,\n localAudio: null,\n remoteAudio: null,\n localVideo: null,\n remoteVideo: null,\n}\n\nexport const player = createModel<RootModel>()({\n state: defaultState,\n reducers: {\n updatePlayer: (state, payload: PlayerTypes) => {\n return {\n ...state,\n ...payload,\n }\n },\n updateAudioPlayer: (state, payload: UpdateAudioSourceTypes) => {\n if (state.audioPlayer) {\n state.audioPlayer.src = `data:audio/ogg;base64, ${payload.src}`\n }\n return state\n },\n playAudioPlayer: (state) => {\n if (state.audioPlayer) {\n // Check if is playing\n if (!state.audioPlayer.paused) {\n state.audioPlayer.pause()\n state.audioPlayer.currentTime = 0\n }\n // Play the audio\n state.audioPlayer.play()\n return {\n ...state,\n audioPlayerPlaying: true,\n }\n }\n },\n stopAudioPlayer: (state) => {\n if (state.audioPlayer) {\n // Pause audio\n state.audioPlayer.pause()\n state.audioPlayer.currentTime = 0\n return {\n ...state,\n audioPlayerPlaying: false,\n }\n }\n },\n setAudioPlayerLoop: (state, payload: boolean) => ({\n ...state,\n audioPlayerLoop: payload,\n }),\n playRemoteAudio: (state) => {\n state.remoteAudio?.play()\n },\n pauseRemoteAudio: (state) => {\n state.remoteAudio?.pause()\n },\n reset: () => {\n return defaultState\n },\n },\n effects: (dispatch) => ({\n // This function is recommended for playing audio\n updateAndPlayAudioPlayer: async ({ src, loop = false }: { src: string; loop?: boolean }) => {\n dispatch.player.setAudioPlayerLoop(loop)\n // Update the audio source\n await updateAudioPlayerSource({\n src: src,\n })\n // Play the outgoing ringtone when ready\n dispatch.player.playAudioPlayer()\n },\n }),\n})\n\ninterface UpdateAudioSourceTypes {\n src: string\n}\n\ninterface PlayerTypes {\n audioPlayer: HTMLAudioElement | null\n audioPlayerPlaying?: boolean\n audioPlayerLoop?: boolean\n localAudio: HTMLAudioElement | null\n remoteAudio: HTMLAudioElement | null\n localVideo: HTMLVideoElement | null\n remoteVideo: HTMLVideoElement | null\n}\n"],"names":["defaultState","audioPlayer","audioPlayerPlaying","audioPlayerLoop","localAudio","remoteAudio","localVideo","remoteVideo","player","createModel","state","reducers","updatePlayer","payload","__assign","updateAudioPlayer","src","playAudioPlayer","paused","pause","currentTime","play","stopAudioPlayer","setAudioPlayerLoop","playRemoteAudio","_a","pauseRemoteAudio","reset","effects","dispatch","updateAndPlayAudioPlayer","_b","loop","updateAudioPlayerSource","_c","sent"],"mappings":"uNAOMA,EAA4B,CAChCC,YAAa,KACbC,oBAAoB,EACpBC,iBAAiB,EACjBC,WAAY,KACZC,YAAa,KACbC,WAAY,KACZC,YAAa,MAGFC,EAASC,EAAWA,aAAXA,CAAyB,CAC7CC,MAAOV,EACPW,SAAU,CACRC,aAAc,SAACF,EAAOG,GACpB,OACKC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAJ,GACAG,EAEN,EACDE,kBAAmB,SAACL,EAAOG,GAIzB,OAHIH,EAAMT,cACRS,EAAMT,YAAYe,IAAM,iCAA0BH,EAAQG,MAErDN,CACR,EACDO,gBAAiB,SAACP,GAChB,GAAIA,EAAMT,YAQR,OANKS,EAAMT,YAAYiB,SACrBR,EAAMT,YAAYkB,QAClBT,EAAMT,YAAYmB,YAAc,GAGlCV,EAAMT,YAAYoB,OAClBP,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRR,oBAAoB,GAGzB,EACDoB,gBAAiB,SAACZ,GAChB,GAAIA,EAAMT,YAIR,OAFAS,EAAMT,YAAYkB,QAClBT,EAAMT,YAAYmB,YAAc,EAChCN,EAAAA,SAAAA,EAAAA,SAAA,GACKJ,GAAK,CACRR,oBAAoB,GAGzB,EACDqB,mBAAoB,SAACb,EAAOG,GAAqB,OAC5CC,EAAAA,SAAAA,EAAAA,SAAA,CAAA,EAAAJ,IACHP,gBAAiBU,GACjB,EACFW,gBAAiB,SAACd,SACG,QAAnBe,EAAAf,EAAML,mBAAa,IAAAoB,GAAAA,EAAAJ,MACpB,EACDK,iBAAkB,SAAChB,SACE,QAAnBe,EAAAf,EAAML,mBAAa,IAAAoB,GAAAA,EAAAN,OACpB,EACDQ,MAAO,WACL,OAAO3B,CACR,GAEH4B,QAAS,SAACC,GAAa,MAAC,CAEtBC,yBAA0B,SAAOL,GAAE,IAAAT,QAAKe,EAAAN,EAAAO,KAAAA,OAAI,IAAAD,GAAQA,oHAGlD,OAFAF,EAASrB,OAAOe,mBAAmBS,GAEnC,CAAA,EAAMC,0BAAwB,CAC5BjB,IAAKA,mBADPkB,EAAAC,OAIAN,EAASrB,OAAOS,4BACjB,EACD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nethesis/phone-island",
|
|
3
3
|
"author": "Nethesis",
|
|
4
|
-
"version": "0.7.
|
|
4
|
+
"version": "0.7.70",
|
|
5
5
|
"description": "NethVoice CTI Phone Island",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"nethserver",
|
|
@@ -123,6 +123,7 @@
|
|
|
123
123
|
"rollup-plugin-postcss": "^4.0.2",
|
|
124
124
|
"rollup-plugin-terser": "^7.0.2",
|
|
125
125
|
"tailwindcss": "^3.2.2",
|
|
126
|
+
"tailwind-scrollbar": "^3.0.0",
|
|
126
127
|
"typescript": "^4.8.4",
|
|
127
128
|
"webpack": "^5.74.0"
|
|
128
129
|
},
|