@nethesis/phone-island 1.0.10-dev.2 → 1.0.10-dev.4

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../utils/streaming/streamingUtils.js"),a=require("../../lib/phone/call.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var r=require("../Button.js"),o=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var v=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),E=require("../StreamingImage/index.js"),x=require("../VideoStreamingSkeleton/index.js"),w=require("../VideoStreamingEmptyState/index.js"),j=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),h=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=b(e);function q(e,t){return!e&&!t}var y=e.memo((function(e){var t=e.children;return N.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2"},t)}));y.displayName="Details";var _=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||""},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null}));_.displayName="QueueBadge";var T=e.memo((function(){var b,T=g.useTranslation().t,A=j.useDispatch(),k=h.useSelector((function(e){return e.currentCall})),C=k.incoming,S=k.accepted,I=k.outgoing,F=k.startTime,P=k.paused,M=k.number,O=k.isRecording,U=k.username,B=k.streamingSourceNumber,L=k.queueName,V=k.queueNumber,W=k.throughQueue,z=h.useSelector((function(e){return e.island})),D=z.isOpen,H=z.isFromStreaming,Q=h.useSelector((function(e){return e.webrtc})).remoteAudioStream,R=h.useSelector((function(e){return e.listen})),G=R.isListen,J=R.isIntrude,K=R.isListenExtension,X=R.isIntrudeExtension,Y=h.useSelector((function(e){return e.alerts})).data,Z=h.useSelector((function(e){return e.currentUser})),$=h.useSelector((function(e){return e.streaming})),ee=$.videoSources,te=$.sourceImages,ie=e.useMemo((function(){return Object.values(Y).filter((function(e){return e.active}))}),[Y]),ne=e.useMemo((function(){return ie.length>0?ie[ie.length-1]:null}),[ie]),ae=e.useMemo((function(){return H&&B&&!S}),[H,B,S]),le=e.useMemo((function(){if(!B||!ee)return{canUnlock:!1,tooltipText:""};var e=Object.values(ee).find((function(e){return(null==e?void 0:e.extension)===B})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(T("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[B,ee,T]),re=e.useMemo((function(){return""!==U&&"undefined"!==U}),[U]),oe=e.useMemo((function(){return L||V||""}),[L,V]),se=e.useMemo((function(){return W&&oe?"".concat(T("Common.Queue"),": ").concat(oe):""}),[W,oe,T]),ue=e.useCallback((function(){var e;return N.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},N.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:v.faOfficePhone,className:"pi-mr-1"}),N.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==Z?void 0:Z.default_device)||void 0===e?void 0:e.description)||T("Common.Physical phone")))}),[null===(b=null==Z?void 0:Z.default_device)||void 0===b?void 0:b.description,T]),ce=e.useCallback((function(e){var n=D?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=D?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",l=D?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",r="red"===e?"pi-bg-red-400":"pi-bg-green-400",o="red"===e?"pi-text-red-500":"pi-text-green-500";return N.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},N.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},N.default.createElement("span",{className:"".concat(l," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))}),[D]),de=e.useMemo((function(){var e="pi-grid pi-items-center";return D&&(e="pi-grid pi-items-start",S?e+=" pi-grid-rows-[72px_1fr]":C?e+=" pi-grid-cols-[256px_114px]":I&&(e+=" pi-grid-cols-[1fr_84px]")),ae?"pi-flex pi-flex-col":e}),[D,S,C,I,ae]),pe=e.useMemo((function(){return"pi-grid ".concat(D&&!S&&I?"pi-grid-cols-[48px_1fr]":D&&!S&&C?"pi-grid-cols-[48px_1fr_1px]":D&&S?"pi-grid-cols-[48px_164px_48px]":D||S?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(D?"5":"3"," pi-items-").concat(D?"start":"center"," pi-justify-center pi-w-full")}),[D,S,C,I]),me=e.useMemo((function(){return ae?"pi-grid-cols-3":q(I,S)?"pi-grid-cols-2":S?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[ae,I,S]),fe=e.useCallback((function(){var e=D?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return G?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):J?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==M&&re?N.default.createElement(p.default,null):C&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!S||I||re?I&&!re?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[D,G,J,M,re,C,I,S]),ge=e.useCallback((function(){return D?J?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Intrude"),X?" - ".concat(X):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):X?"".concat(X):""):G?N.default.createElement(y,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},T("Common.Listen"),K?" - ".concat(K):""),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):K?"".concat(K):""):N.default.createElement(y,null,S&&W&&oe?N.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},N.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},N.default.createElement(d.default,null)),N.default.createElement(_,{label:oe,tooltipContent:se})):N.default.createElement(d.default,null),S?l.isPhysical()?ue():N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}):N.default.createElement(c.default,null)):null}),[D,J,G,S,F,X,K,T,ue,S,W,oe,se]),ve=e.useCallback((function(){return S&&O?ce("red"):S&&Q&&!l.isPhysical()?N.default.createElement(o.AudioBars,{audioStream:Q,paused:P,size:D?"large":"small"}):S&&l.isPhysical()?ce("green"):null}),[S,O,Q,D,P,ce]),Ee=e.useCallback((function(){if(!ee||0===Object.keys(ee).length||!B)return N.default.createElement(x.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(ee).find((function(e){return e.extension===B}));return e&&(te[e.id]||e.image)?N.default.createElement(E.default,null):N.default.createElement(w.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[B,ee,te]);if(null!==ne)return null;return N.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},N.default.createElement("div",{className:de},ae?N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},N.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},fe(),N.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},N.default.createElement(d.default,null),N.default.createElement(c.default,null))),N.default.createElement("div",{className:"pi-flex pi-gap-2"},N.default.createElement(f.default,{description:T("Tooltip.Hangup")}),!I&&N.default.createElement(r.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){A.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==le?void 0:le.canUnlock)&&N.default.createElement(r.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==le?void 0:le.tooltipText},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Ee()):N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:pe},fe(),ge(),!D&&!S&&N.default.createElement(d.default,null),!D&&S&&N.default.createElement(u.default,{startTime:F,isNotAlwaysWhite:!0}),ve()),D&&N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"".concat(G||J?"":"pi-grid pi-gap-y-5")},S&&N.default.createElement(m.default,null),N.default.createElement("div",{className:"pi-grid ".concat(me," pi-gap-3.5")},N.default.createElement(f.default,{description:T("Tooltip.Hangup and transfer")}),q(I,S)&&N.default.createElement(r.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":T("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}))}));exports.default=T;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),n=require("../../utils/streaming/streamingUtils.js"),a=require("../../lib/phone/call.js");require("../../node_modules/tslib/tslib.es6.js"),require("../../store/index.js"),require("../../node_modules/socket.io-client/build/esm/index.js");var l=require("../../lib/user/default_device.js");require("../../node_modules/mic-check/lib/index.js"),require("../../lib/webrtc/janus.js"),require("../../node_modules/webrtc-adapter/src/js/adapter_core.js"),require("../Island.js");var r=require("../Button.js"),o=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var u=require("./Timer.js"),c=require("./Number.js"),d=require("./DisplayName.js"),p=require("./Avatar.js"),m=require("./Actions.js"),f=require("../Hangup.js");require("../../node_modules/@babel/runtime/helpers/defineProperty.js"),require("../../node_modules/@babel/runtime/helpers/objectWithoutProperties.js"),require("../../node_modules/@babel/runtime/helpers/typeof.js"),require("../../node_modules/html-parse-stringify/dist/html-parse-stringify.js"),require("../../node_modules/react-i18next/dist/es/context.js");var g=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var x=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),v=require("../StreamingImage/index.js"),E=require("../VideoStreamingSkeleton/index.js"),w=require("../VideoStreamingEmptyState/index.js"),h=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),j=require("../../node_modules/react-redux/es/hooks/useSelector.js");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var N=b(e);function y(e,t){return!e&&!t}var q=e.memo((function(e){var t=e.children,i=e.className,n=void 0===i?"pi-gap-1 pi-grid-rows-2":i;return N.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-grid-cols-1 ".concat(n)},t)}));q.displayName="Details";var _=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||""},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null}));_.displayName="QueueBadge";var T=e.memo((function(e){var n=e.label,a=e.tooltipContent;return n?N.default.createElement("span",{className:"pi-inline-flex pi-w-fit pi-max-w-full pi-flex-none pi-items-center pi-gap-1.5 pi-self-start pi-rounded-full pi-bg-iconSecondary pi-px-2.5 pi-py-1 pi-text-xs pi-font-medium pi-leading-none pi-text-iconWhite dark:pi-bg-iconSecondaryDark","data-tooltip-id":a?"tooltip-queue":void 0,"data-tooltip-content":a||"","aria-label":a||n},N.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-3 pi-w-3 pi-flex-none"}),N.default.createElement("span",{className:"pi-block pi-max-w-28 pi-truncate"},n)):null}));T.displayName="IncomingQueueBadge";var k=e.memo((function(){var b,k=g.useTranslation().t,A=h.useDispatch(),C=j.useSelector((function(e){return e.currentCall})),S=C.incoming,I=C.accepted,F=C.outgoing,P=C.startTime,M=C.paused,B=C.number,O=C.isRecording,U=C.username,L=C.streamingSourceNumber,V=C.queueName,W=C.queueNumber,D=C.throughQueue,z=j.useSelector((function(e){return e.island})),H=z.isOpen,Q=z.isFromStreaming,R=j.useSelector((function(e){return e.webrtc})).remoteAudioStream,G=j.useSelector((function(e){return e.listen})),J=G.isListen,K=G.isIntrude,X=G.isListenExtension,Y=G.isIntrudeExtension,Z=j.useSelector((function(e){return e.alerts})).data,$=j.useSelector((function(e){return e.currentUser})),ee=j.useSelector((function(e){return e.streaming})),te=ee.videoSources,ie=ee.sourceImages,ne=e.useMemo((function(){return Object.values(Z).filter((function(e){return e.active}))}),[Z]),ae=e.useMemo((function(){return ne.length>0?ne[ne.length-1]:null}),[ne]),le=e.useMemo((function(){return Q&&L&&!I}),[Q,L,I]),re=e.useMemo((function(){if(!L||!te)return{canUnlock:!1,tooltipText:""};var e=Object.values(te).find((function(e){return(null==e?void 0:e.extension)===L})),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(k("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}}),[L,te,k]),oe=e.useMemo((function(){return""!==U&&"undefined"!==U}),[U]),se=e.useMemo((function(){return V||W||""}),[V,W]),ue=e.useMemo((function(){return D&&se?"".concat(k("Common.Queue"),": ").concat(se):""}),[D,se,k]),ce=e.useMemo((function(){return Boolean(S&&!I&&D&&se)}),[I,S,D,se]),de=e.useCallback((function(){var e;return N.default.createElement("div",{className:"pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate"},N.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:x.faOfficePhone,className:"pi-mr-1"}),N.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==$?void 0:$.default_device)||void 0===e?void 0:e.description)||k("Common.Physical phone")))}),[null===(b=null==$?void 0:$.default_device)||void 0===b?void 0:b.description,k]),pe=e.useCallback((function(e){var n=H?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",a=H?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",l=H?"pi-w-8 pi-h-8":"pi-h-6 pi-w-6",r="red"===e?"pi-bg-red-400":"pi-bg-green-400",o="red"===e?"pi-text-red-500":"pi-text-green-500";return N.default.createElement("div",{className:"".concat(n," pi-flex pi-justify-center pi-items-center")},N.default.createElement("div",{className:"".concat(a," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},N.default.createElement("span",{className:"".concat(l," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))}),[H]),me=e.useMemo((function(){var e="pi-grid pi-items-center";return H&&(e=ce?"pi-grid pi-items-center":"pi-grid pi-items-start",I?e+=" pi-grid-rows-[72px_1fr]":S?e+=" pi-grid-cols-[256px_114px]":F&&(e+=" pi-grid-cols-[1fr_84px]")),le?"pi-flex pi-flex-col":e}),[H,I,S,F,le,ce]),fe=e.useMemo((function(){var e=H&&!ce?"start":"center";return"pi-grid ".concat(H&&!I&&F?"pi-grid-cols-[48px_1fr]":H&&!I&&S?"pi-grid-cols-[48px_1fr_1px]":H&&I?"pi-grid-cols-[48px_164px_48px]":H||I?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(H?"5":"3"," pi-items-").concat(e," pi-justify-center pi-w-full")}),[H,I,S,F,ce]),ge=e.useMemo((function(){return le?"pi-grid-cols-3":y(F,I)?"pi-grid-cols-2":I?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"}),[le,F,I]),xe=e.useCallback((function(){var e=H?"pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover":"pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover";return J?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):K?N.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):""!==B&&oe?N.default.createElement(p.default,null):S&&!oe?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft}):!I||F||oe?F&&!oe?N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi-rotate-[135deg]"),icon:i.faArrowLeft}):null:N.default.createElement(t.FontAwesomeIcon,{className:"".concat(e," pi--rotate-45"),icon:i.faArrowLeft})}),[H,J,K,B,oe,S,F,I]),ve=e.useCallback((function(){return H?K?N.default.createElement(q,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},k("Common.Intrude"),Y?" - ".concat(Y):""),I?l.isPhysical()?de():N.default.createElement(u.default,{startTime:P,isNotAlwaysWhite:!0}):Y?"".concat(Y):""):J?N.default.createElement(q,null,N.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},k("Common.Listen"),X?" - ".concat(X):""),I?l.isPhysical()?de():N.default.createElement(u.default,{startTime:P,isNotAlwaysWhite:!0}):X?"".concat(X):""):ce?N.default.createElement(q,{className:"pi-grid-rows-[20px_24px_24px] pi-gap-0.5"},N.default.createElement(T,{label:se,tooltipContent:ue}),N.default.createElement(d.default,null),N.default.createElement(c.default,null)):N.default.createElement(q,null,I&&D&&se?N.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},N.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},N.default.createElement(d.default,null)),N.default.createElement(_,{label:se,tooltipContent:ue})):N.default.createElement(d.default,null),I?l.isPhysical()?de():N.default.createElement(u.default,{startTime:P,isNotAlwaysWhite:!0}):N.default.createElement(c.default,null)):null}),[H,K,J,I,P,Y,X,k,de,I,D,se,ue,ce]),Ee=e.useCallback((function(){return I&&O?pe("red"):I&&R&&!l.isPhysical()?N.default.createElement(o.AudioBars,{audioStream:R,paused:M,size:H?"large":"small"}):I&&l.isPhysical()?pe("green"):null}),[I,O,R,H,M,pe]),we=e.useCallback((function(){if(!te||0===Object.keys(te).length||!L)return N.default.createElement(E.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(te).find((function(e){return e.extension===L}));return e&&(ie[e.id]||e.image)?N.default.createElement(v.default,null):N.default.createElement(w.default,{className:"pi-w-full pi-h-40 pi-mt-4"})}),[L,te,ie]);if(null!==ae)return null;return N.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},N.default.createElement("div",{className:me},le?N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between"},N.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},xe(),N.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2"},N.default.createElement(d.default,null),N.default.createElement(c.default,null))),N.default.createElement("div",{className:"pi-flex pi-gap-2"},N.default.createElement(f.default,{description:k("Tooltip.Hangup")}),!F&&N.default.createElement(r.Button,{onClick:function(){return a.answerIncomingCall(),void setTimeout((function(){A.island.setIslandView("streamingAnswer")}),200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":k("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==re?void 0:re.canUnlock)&&N.default.createElement(r.Button,{variant:"default",onClick:n.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==re?void 0:re.tooltipText},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),we()):N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:fe},xe(),ve(),!H&&!I&&N.default.createElement(d.default,null),!H&&I&&N.default.createElement(u.default,{startTime:P,isNotAlwaysWhite:!0}),Ee()),H&&N.default.createElement(N.default.Fragment,null,N.default.createElement("div",{className:"".concat(J||K?"":"pi-grid pi-gap-y-5")},I&&N.default.createElement(m.default,null),N.default.createElement("div",{className:"pi-grid ".concat(ge," pi-gap-3.5")},N.default.createElement(f.default,{description:k("Tooltip.Hangup and transfer")}),y(F,I)&&N.default.createElement(r.Button,{onClick:a.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":k("Tooltip.Answer")||""},N.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),N.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}))}));exports.default=k;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n faUsers,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(({ children }: { children: React.ReactNode }) => (\n <div className='pi-grid pi-min-w-0 pi-self-center pi-gap-1 pi-grid-cols-1 pi-grid-rows-2'>\n {children}\n </div>\n))\nDetails.displayName = 'Details'\n\nconst QueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-4 pi-w-4' />\n </span>\n )\n },\n)\nQueueBadge.displayName = 'QueueBadge'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText =\n canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const queueLabel = useMemo(() => queueName || queueNumber || '', [queueName, queueNumber])\n\n const queueTooltipContent = useMemo(() => {\n if (!throughQueue || !queueLabel) {\n return ''\n }\n\n return `${t('Common.Queue')}: ${queueLabel}`\n }, [throughQueue, queueLabel, t])\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${\n isOpen ? 'start' : 'center'\n } pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n return (\n <Details>\n {accepted && throughQueue && queueLabel ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n <div className='pi-min-w-0 pi-flex-1'>\n <DisplayName />\n </div>\n <QueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n </div>\n ) : (\n <DisplayName />\n )}\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n accepted,\n throughQueue,\n queueLabel,\n queueTooltipContent,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n <CustomThemedTooltip id='tooltip-display-name' place='bottom' />\n <CustomThemedTooltip id='tooltip-queue' place='bottom' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","React","className","displayName","QueueBadge","label","tooltipContent","createElement","undefined","FontAwesomeIcon","icon","faUsers","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","queueName","queueNumber","throughQueue","_b","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","concat","description","hasValidUsername","queueLabel","queueTooltipContent","renderLandlinePhoneDiv","useCallback","size","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/CallView/index.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useMemo, useCallback, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState, Dispatch } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faPhone,\n faEarListen,\n faHandPointUp,\n faArrowLeft,\n faCircle,\n faUnlock,\n faUsers,\n} from '@fortawesome/free-solid-svg-icons'\nimport { Button } from '../'\nimport Timer from './Timer'\nimport Number from './Number'\nimport DisplayName from './DisplayName'\nimport { AudioBars } from '../'\nimport { answerIncomingCall } from '../../lib/phone/call'\nimport Avatar from './Avatar'\nimport Actions from './Actions'\nimport Hangup from '../Hangup'\nimport { useTranslation } from 'react-i18next'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport StreamingImage from '../StreamingImage'\nimport VideoStreamingSkeleton from '../VideoStreamingSkeleton'\nimport VideoStreamingEmptyState from '../VideoStreamingEmptyState'\nimport { handleStreamingUnlock } from '../../utils'\nimport { useDispatch } from 'react-redux'\n\nfunction isAnswerVisible(outgoing: boolean, accepted: boolean): boolean {\n return !outgoing && !accepted\n}\n\nconst Details = memo(\n ({\n children,\n className = 'pi-gap-1 pi-grid-rows-2',\n }: {\n children: React.ReactNode\n className?: string\n }) => (\n <div className={`pi-grid pi-min-w-0 pi-self-center pi-grid-cols-1 ${className}`}>\n {children}\n </div>\n ),\n)\nDetails.displayName = 'Details'\n\nconst QueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-4 pi-w-4' />\n </span>\n )\n },\n)\nQueueBadge.displayName = 'QueueBadge'\n\nconst IncomingQueueBadge = memo(\n ({\n label,\n tooltipContent,\n }: {\n label: string\n tooltipContent?: string\n }) => {\n if (!label) {\n return null\n }\n\n return (\n <span\n className='pi-inline-flex pi-w-fit pi-max-w-full pi-flex-none pi-items-center pi-gap-1.5 pi-self-start pi-rounded-full pi-bg-iconSecondary pi-px-2.5 pi-py-1 pi-text-xs pi-font-medium pi-leading-none pi-text-iconWhite dark:pi-bg-iconSecondaryDark'\n data-tooltip-id={tooltipContent ? 'tooltip-queue' : undefined}\n data-tooltip-content={tooltipContent || ''}\n aria-label={tooltipContent || label}\n >\n <FontAwesomeIcon icon={faUsers} className='pi-h-3 pi-w-3 pi-flex-none' />\n <span className='pi-block pi-max-w-28 pi-truncate'>{label}</span>\n </span>\n )\n },\n)\nIncomingQueueBadge.displayName = 'IncomingQueueBadge'\n\n/**\n * The main view to manage calls, the starting point for calls actions flows\n */\nconst CallView: FC<CallViewProps> = () => {\n const { t } = useTranslation()\n const dispatch = useDispatch<Dispatch>()\n\n const currentCall = useSelector((state: RootState) => state.currentCall)\n const {\n incoming,\n accepted,\n outgoing,\n startTime,\n paused,\n number,\n isRecording,\n username,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n } = currentCall\n\n const { isOpen, isFromStreaming } = useSelector((state: RootState) => state.island)\n const { remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const listenState = useSelector((state: RootState) => state.listen)\n const { isListen, isIntrude, isListenExtension, isIntrudeExtension } = listenState\n const { data: alertsData } = useSelector((state: RootState) => state.alerts)\n const currentUser = useSelector((state: RootState) => state.currentUser)\n const { videoSources, sourceImages } = useSelector((state: RootState) => state.streaming)\n\n const activeAlerts = useMemo(\n () => Object.values(alertsData).filter((alert: any) => alert.active),\n [alertsData],\n )\n\n const latestAlert = useMemo(\n () => (activeAlerts.length > 0 ? activeAlerts[activeAlerts.length - 1] : null),\n [activeAlerts],\n )\n\n const shouldShowStreamingImage = useMemo(\n () => isFromStreaming && streamingSourceNumber && !accepted,\n [isFromStreaming, streamingSourceNumber, accepted],\n )\n\n // Check if unlock button should be shown and get tooltip text\n const unlockData = useMemo(() => {\n if (!streamingSourceNumber || !videoSources) return { canUnlock: false, tooltipText: '' }\n\n const source = Object.values(videoSources).find(\n (source) => source?.extension === streamingSourceNumber,\n )\n\n const canUnlock = Boolean(source?.cmdOpen && source?.cmdOpen.trim() !== '')\n const tooltipText =\n canUnlock && source ? `${t('VideoStreaming.Open')}: ${source?.description}` : ''\n\n return { canUnlock, tooltipText }\n }, [streamingSourceNumber, videoSources, t])\n\n const hasValidUsername = useMemo(() => username !== '' && username !== 'undefined', [username])\n\n const queueLabel = useMemo(() => queueName || queueNumber || '', [queueName, queueNumber])\n\n const queueTooltipContent = useMemo(() => {\n if (!throughQueue || !queueLabel) {\n return ''\n }\n\n return `${t('Common.Queue')}: ${queueLabel}`\n }, [throughQueue, queueLabel, t])\n\n const shouldShowIncomingQueueBadge = useMemo(\n () => Boolean(incoming && !accepted && throughQueue && queueLabel),\n [accepted, incoming, throughQueue, queueLabel],\n )\n\n const renderLandlinePhoneDiv = useCallback(\n () => (\n <div className='pi-text-gray-600 dark:pi-text-gray-300 pi-font-normal pi-text-sm pi-flex pi-items-center pi-truncate'>\n <FontAwesomeIcon size='sm' icon={faOfficePhone} className='pi-mr-1' />\n <span className='pi-max-w-16 pi-truncate'>\n {currentUser?.default_device?.description || t('Common.Physical phone')}\n </span>\n </div>\n ),\n [currentUser?.default_device?.description, t],\n )\n\n const renderPulseIcon = useCallback(\n (color: string) => {\n const sizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-h-12 pi-w-12'\n const innerSizeClasses = !isOpen ? 'pi-h-4 pi-w-4 pi-rounded-full' : 'pi-h-8'\n const animationSizeClasses = !isOpen ? 'pi-h-6 pi-w-6' : 'pi-w-8 pi-h-8'\n const colorClasses = color === 'red' ? 'pi-bg-red-400' : 'pi-bg-green-400'\n const textColorClasses = color === 'red' ? 'pi-text-red-500' : 'pi-text-green-500'\n\n return (\n <div className={`${sizeClasses} pi-flex pi-justify-center pi-items-center`}>\n <div\n className={`${innerSizeClasses} pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden`}\n >\n <span\n className={`${animationSizeClasses} pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ${colorClasses} pi-opacity-75`}\n ></span>\n <FontAwesomeIcon\n className={`pi-w-4 pi-h-6 pi-rotate-45 ${textColorClasses}`}\n icon={faCircle}\n />\n </div>\n </div>\n )\n },\n [isOpen],\n )\n\n const callViewClasses = useMemo(() => {\n let baseClasses = 'pi-grid pi-items-center'\n\n if (isOpen) {\n baseClasses = shouldShowIncomingQueueBadge ? 'pi-grid pi-items-center' : 'pi-grid pi-items-start'\n\n if (accepted) {\n baseClasses += ' pi-grid-rows-[72px_1fr]'\n } else if (incoming) {\n baseClasses += ' pi-grid-cols-[256px_114px]'\n } else if (outgoing) {\n baseClasses += ' pi-grid-cols-[1fr_84px]'\n }\n }\n\n return shouldShowStreamingImage ? 'pi-flex pi-flex-col' : baseClasses\n }, [isOpen, accepted, incoming, outgoing, shouldShowStreamingImage, shouldShowIncomingQueueBadge])\n\n const topContentClasses = useMemo(() => {\n let columns = ''\n\n if (isOpen && !accepted && outgoing) {\n columns = 'pi-grid-cols-[48px_1fr]'\n } else if (isOpen && !accepted && incoming) {\n columns = 'pi-grid-cols-[48px_1fr_1px]'\n } else if (isOpen && accepted) {\n columns = 'pi-grid-cols-[48px_164px_48px]'\n } else if (!isOpen && !accepted) {\n columns = 'pi-grid-cols-[24px_102px]'\n } else {\n columns = 'pi-grid-cols-[24px_66px_24px]'\n }\n\n const itemsAlign = isOpen && !shouldShowIncomingQueueBadge ? 'start' : 'center'\n\n return `pi-grid ${columns} pi-gap-${isOpen ? '5' : '3'} pi-items-${itemsAlign} pi-justify-center pi-w-full`\n }, [isOpen, accepted, incoming, outgoing, shouldShowIncomingQueueBadge])\n\n const getGridClasses = useMemo(() => {\n if (shouldShowStreamingImage) return 'pi-grid-cols-3'\n if (isAnswerVisible(outgoing, accepted)) return 'pi-grid-cols-2'\n if (accepted) return 'pi-grid-cols-1 pi-justify-items-center'\n return 'pi-grid-cols-1 pi-justify-items-end'\n }, [shouldShowStreamingImage, outgoing, accepted])\n\n const renderStatusIcon = useCallback(() => {\n const iconSizeClass = isOpen\n ? 'pi-relative pi-z-30 pi-h-12 pi-w-12 pi-rounded-sm pi-bg-cover'\n : 'pi-relative pi-z-30 pi-h-6 pi-w-6 pi-rounded-sm pi-bg-cover'\n\n if (isListen) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faEarListen} />\n }\n\n if (isIntrude) {\n return <FontAwesomeIcon className={iconSizeClass} icon={faHandPointUp} />\n }\n\n if (number !== '' && hasValidUsername) {\n return <Avatar />\n }\n\n if (incoming && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (accepted && !outgoing && !hasValidUsername) {\n return <FontAwesomeIcon className={`${iconSizeClass} pi--rotate-45`} icon={faArrowLeft} />\n }\n\n if (outgoing && !hasValidUsername) {\n return (\n <FontAwesomeIcon className={`${iconSizeClass} pi-rotate-[135deg]`} icon={faArrowLeft} />\n )\n }\n\n return null\n }, [isOpen, isListen, isIntrude, number, hasValidUsername, incoming, outgoing, accepted])\n\n const renderDetails = useCallback(() => {\n if (!isOpen) return null\n\n if (isIntrude) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Intrude')}\n {isIntrudeExtension ? ` - ${isIntrudeExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isIntrudeExtension ? (\n `${isIntrudeExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (isListen) {\n return (\n <Details>\n <span className='pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base'>\n {t('Common.Listen')}\n {isListenExtension ? ` - ${isListenExtension}` : ''}\n </span>\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : isListenExtension ? (\n `${isListenExtension}`\n ) : (\n ''\n )}\n </Details>\n )\n }\n\n if (shouldShowIncomingQueueBadge) {\n return (\n <Details className='pi-grid-rows-[20px_24px_24px] pi-gap-0.5'>\n <IncomingQueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n <DisplayName />\n <Number />\n </Details>\n )\n }\n\n return (\n <Details>\n {accepted && throughQueue && queueLabel ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n <div className='pi-min-w-0 pi-flex-1'>\n <DisplayName />\n </div>\n <QueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n </div>\n ) : (\n <DisplayName />\n )}\n {accepted ? (\n !isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )\n ) : (\n <Number />\n )}\n </Details>\n )\n }, [\n isOpen,\n isIntrude,\n isListen,\n accepted,\n startTime,\n isIntrudeExtension,\n isListenExtension,\n t,\n renderLandlinePhoneDiv,\n accepted,\n throughQueue,\n queueLabel,\n queueTooltipContent,\n shouldShowIncomingQueueBadge,\n ])\n\n const renderAudioIndicator = useCallback(() => {\n if (accepted && isRecording) {\n return renderPulseIcon('red')\n }\n\n if (accepted && remoteAudioStream && !isPhysical()) {\n return (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )\n }\n\n if (accepted && isPhysical()) {\n return renderPulseIcon('green')\n }\n\n return null\n }, [accepted, isRecording, remoteAudioStream, isOpen, paused, renderPulseIcon])\n\n const renderStreamingContent = useCallback(() => {\n // Show skeleton while videoSources are loading or if streaming source number is not set yet\n if (!videoSources || Object.keys(videoSources).length === 0 || !streamingSourceNumber) {\n return <VideoStreamingSkeleton className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Find the streaming source\n const source = Object.values(videoSources).find(\n (source) => source.extension === streamingSourceNumber,\n )\n\n // If source doesn't exist, show empty state\n if (!source) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // Check if image is available\n const hasImage = sourceImages[source.id] || source.image\n\n // If no image available, show empty state\n if (!hasImage) {\n return <VideoStreamingEmptyState className='pi-w-full pi-h-40 pi-mt-4' />\n }\n\n // If we have an image, show StreamingImage component\n return <StreamingImage />\n }, [streamingSourceNumber, videoSources, sourceImages])\n\n // Early return AFTER all hooks have been called\n if (latestAlert !== null) {\n return null\n }\n\n const setVideoStreamingAnswer = () => {\n answerIncomingCall()\n // Set view as video streaming answer with a small delay\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n return (\n <div className='pi-bg-red pi-content-center pi-justify-center'>\n <div className={callViewClasses}>\n {shouldShowStreamingImage ? (\n <>\n <div className='pi-flex pi-items-center pi-justify-between'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2'>\n <Hangup description={t('Tooltip.Hangup')} />\n {!outgoing && (\n <Button\n onClick={() => setVideoStreamingAnswer()}\n variant='green'\n data-tooltip-id='tooltip-answer'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faPhone} />\n </Button>\n )}\n {/* Open door button - only show if cmdOpen is valid */}\n {unlockData?.canUnlock && (\n <Button\n variant='default'\n onClick={handleStreamingUnlock}\n data-tooltip-id='tooltip-unlock'\n data-tooltip-content={unlockData?.tooltipText}\n >\n <FontAwesomeIcon className='pi-w-5 pi-h-5' icon={faUnlock} />\n </Button>\n )}\n </div>\n </div>\n\n {renderStreamingContent()}\n </>\n ) : (\n <>\n <div className={topContentClasses}>\n {renderStatusIcon()}\n {renderDetails()}\n\n {!isOpen && !accepted && <DisplayName />}\n {!isOpen && accepted && <Timer startTime={startTime} isNotAlwaysWhite />}\n\n {renderAudioIndicator()}\n </div>\n\n {isOpen && (\n <>\n <div className={`${!(isListen || isIntrude) ? 'pi-grid pi-gap-y-5' : ''}`}>\n {accepted && <Actions />}\n <div className={`pi-grid ${getGridClasses} pi-gap-3.5`}>\n <Hangup description={t('Tooltip.Hangup and transfer')} />\n\n {isAnswerVisible(outgoing, accepted) && (\n <Button\n onClick={answerIncomingCall}\n variant='green'\n data-tooltip-id='tooltip-answer-left'\n data-tooltip-content={t('Tooltip.Answer') || ''}\n >\n <FontAwesomeIcon className='pi-w-6 pi-h-6' icon={faPhone} />\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </>\n )}\n </div>\n <CustomThemedTooltip id='tooltip-answer-left' place='left' />\n <CustomThemedTooltip id='tooltip-answer' place='left' />\n <CustomThemedTooltip id='tooltip-unlock' place='left' />\n <CustomThemedTooltip id='tooltip-display-name' place='bottom' />\n <CustomThemedTooltip id='tooltip-queue' place='bottom' />\n </div>\n )\n}\n\nexport default memo(CallView)\n\nexport interface CallViewProps {}\n"],"names":["isAnswerVisible","outgoing","accepted","Details","memo","_a","children","_b","className","React","createElement","concat","displayName","QueueBadge","label","tooltipContent","undefined","FontAwesomeIcon","icon","faUsers","IncomingQueueBadge","t","useTranslation","dispatch","useDispatch","currentCall","useSelector","state","incoming","startTime","paused","number","isRecording","username","streamingSourceNumber","queueName","queueNumber","throughQueue","island","isOpen","isFromStreaming","remoteAudioStream","webrtc","listenState","listen","isListen","isIntrude","isListenExtension","isIntrudeExtension","alertsData","alerts","currentUser","_c","streaming","videoSources","sourceImages","activeAlerts","useMemo","Object","values","filter","alert","active","latestAlert","length","shouldShowStreamingImage","unlockData","canUnlock","tooltipText","source","find","extension","Boolean","cmdOpen","trim","description","hasValidUsername","queueLabel","queueTooltipContent","shouldShowIncomingQueueBadge","renderLandlinePhoneDiv","useCallback","size","faOfficePhone","default_device","renderPulseIcon","color","sizeClasses","innerSizeClasses","animationSizeClasses","colorClasses","textColorClasses","faCircle","callViewClasses","baseClasses","topContentClasses","itemsAlign","getGridClasses","renderStatusIcon","iconSizeClass","faEarListen","faHandPointUp","Avatar","faArrowLeft","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Fragment","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var i=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/tslib/tslib.es6.js"),require("../store/index.js");var t=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),r=function(a){var r=a.children,h=d.useSelector((function(e){return e.currentCall})),s=h.incoming,o=h.outgoing,c=h.accepted,l=h.transferring,g=h.incomingWebRTC,p=h.incomingSocket,w=h.conferencing,u=d.useSelector((function(e){return e.listen})).isListen,x=d.useSelector((function(e){return e.island})),f=x.view,m=x.isOpen,v=x.actionsExpanded,b=x.sideViewIsVisible,_=x.transcriptionViewIsVisible,y=x.isFromStreaming,k=x.isExtraLarge,S=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,A=d.useSelector((function(e){return e.motions})),j=A.variants,C=A.border_radius_collapsed,E=A.border_radius_expanded,q=A.border_radius_collapsed_conference,B=A.padding_x_collapsed,D=A.padding_y_collapsed,L=A.padding_expanded,I=A.alert_padding_expanded,V=d.useSelector((function(e){return e.conference})).isActive,M=e.useMemo((function(){var e={width:0,height:0,padding:L};switch(f){case"call":m?c&&l&&w?e=v?{width:j.call.expanded.transfer.actionsExpanded.width,height:j.call.expanded.transfer.actionsExpanded.height}:{width:j.call.expanded.transfer.width,height:j.call.expanded.transfer.height}:c&&v?e={width:j.call.expanded.accepted.actionsExpanded.width,height:j.call.expanded.accepted.actionsExpanded.height}:c&&!u?e={width:j.call.expanded.accepted.width,height:j.call.expanded.accepted.height}:c&&u?e={width:j.call.expanded.listening.width,height:j.call.expanded.listening.height}:s&&!y?e={width:j.call.expanded.incoming.width,height:j.call.expanded.incoming.height}:s&&y?e={width:j.call.expanded.incomingStreaming.width,height:j.call.expanded.incomingStreaming.height}:o&&!y?e={width:j.call.expanded.outgoing.width,height:j.call.expanded.outgoing.height}:o&&y&&(e={width:j.call.expanded.outgoingStreaming.width,height:j.call.expanded.outgoingStreaming.height}):e={width:j.call.collapsed.width,height:j.call.collapsed.height};break;case"keypad":e=m?{width:j.keypad.expanded.width,height:j.keypad.expanded.height}:{width:j.transfer.collapsed.width,height:j.transfer.collapsed.height};break;case"video":e=m?{width:j.video.expanded.width,height:j.video.expanded.height,padding:j.video.expanded.padding}:{width:j.video.collapsed.width,height:j.video.collapsed.height};break;case"transfer":case"player":case"recorder":case"physicalPhoneRecorder":case"settings":case"conference":e=m?{width:j[f].expanded.width,height:j[f].expanded.height}:{width:j[f].collapsed.width,height:j[f].collapsed.height};break;case"switchDevice":e=m?{width:j.switchDevice.expanded.width,height:j.switchDevice.expanded.height}:{width:j.video.collapsed.width,height:j.video.collapsed.height};break;case"waitingConference":e=m?{width:j.waitingConference.expanded.width,height:j.waitingConference.expanded.height}:{width:j.waitingConference.collapsed.width,height:j.waitingConference.collapsed.height};break;case"streamingAnswer":e=m?k?{width:j.streamingAnswer.extraLarge.width,height:j.streamingAnswer.extraLarge.height,padding:j.streamingAnswer.extraLarge.padding}:{width:j.streamingAnswer.expanded.width,height:j.streamingAnswer.expanded.height,padding:j.streamingAnswer.expanded.padding}:{width:j.streamingAnswer.collapsed.width,height:j.streamingAnswer.collapsed.height};break;case"operatorBusy":e=m?{width:j.operatorBusy.expanded.width,height:j.operatorBusy.expanded.height}:{width:j.operatorBusy.collapsed.width,height:j.operatorBusy.collapsed.height}}var i=S>0;return{width:"".concat(0===e.width&&i?j.alerts.width:e.width,"px"),height:"".concat(i&&m?j.alerts.height+(0===e.height?2*I:I):e.height,"px"),borderRadius:"".concat(m?E:V&&"waitingConference"===f?q:C,"px"),padding:m?null!=e.padding?"".concat(e.padding,"px"):"".concat(L,"px"):"".concat(B,"px ").concat(D,"px")}}),[f,m,c,l,v,u,s,o,S,j,C,E,B,D,L,I,g,p,V,y,k]);return e.useEffect((function(){var e={};e.width=null==M?void 0:M.width,e.height=null==M?void 0:M.height,i.eventDispatch("phone-island-size-change",{sizeInformation:e})}),[M,f,m,c,l,v,u,s,o,S,j,C,E,B,D,L,I,b,_,p,g,V,k]),n.default.createElement(t.motion.div,{className:"".concat(m?"pi-cursor-grab":"pi-cursor-pointer"," pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow"),animate:M,transition:{duration:.15,ease:"easeOut"}},r)};exports.IslandMotion=r,exports.default=r;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var i=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/tslib/tslib.es6.js"),require("../store/index.js");var t=require("../node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs.js"),d=require("../node_modules/react-redux/es/hooks/useSelector.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(e),h=function(a){var h=a.children,r=d.useSelector((function(e){return e.currentCall})),s=r.incoming,o=r.outgoing,c=r.accepted,l=r.transferring,g=r.incomingWebRTC,p=r.incomingSocket,u=r.conferencing,w=r.throughQueue,x=r.queueName,f=r.queueNumber,m=d.useSelector((function(e){return e.listen})).isListen,v=d.useSelector((function(e){return e.island})),b=v.view,_=v.isOpen,y=v.actionsExpanded,k=v.sideViewIsVisible,S=v.transcriptionViewIsVisible,A=v.isFromStreaming,j=v.isExtraLarge,q=d.useSelector((function(e){return e.alerts.status})).activeAlertsCount,C=d.useSelector((function(e){return e.motions})),E=C.variants,B=C.border_radius_collapsed,D=C.border_radius_expanded,L=C.border_radius_collapsed_conference,I=C.padding_x_collapsed,V=C.padding_y_collapsed,M=C.padding_expanded,N=C.alert_padding_expanded,O=d.useSelector((function(e){return e.conference})).isActive,Q=e.useMemo((function(){var e={width:0,height:0,padding:M};switch(b){case"call":if(_)if(c&&l&&u)e=y?{width:E.call.expanded.transfer.actionsExpanded.width,height:E.call.expanded.transfer.actionsExpanded.height}:{width:E.call.expanded.transfer.width,height:E.call.expanded.transfer.height};else if(c&&y)e={width:E.call.expanded.accepted.actionsExpanded.width,height:E.call.expanded.accepted.actionsExpanded.height};else if(c&&!m)e={width:E.call.expanded.accepted.width,height:E.call.expanded.accepted.height};else if(c&&m)e={width:E.call.expanded.listening.width,height:E.call.expanded.listening.height};else if(s&&!A){e=s&&!c&&w&&Boolean(x||f)?{width:E.call.expanded.incomingQueue.width,height:E.call.expanded.incomingQueue.height}:{width:E.call.expanded.incoming.width,height:E.call.expanded.incoming.height}}else s&&A?e={width:E.call.expanded.incomingStreaming.width,height:E.call.expanded.incomingStreaming.height}:o&&!A?e={width:E.call.expanded.outgoing.width,height:E.call.expanded.outgoing.height}:o&&A&&(e={width:E.call.expanded.outgoingStreaming.width,height:E.call.expanded.outgoingStreaming.height});else e={width:E.call.collapsed.width,height:E.call.collapsed.height};break;case"keypad":e=_?{width:E.keypad.expanded.width,height:E.keypad.expanded.height}:{width:E.transfer.collapsed.width,height:E.transfer.collapsed.height};break;case"video":e=_?{width:E.video.expanded.width,height:E.video.expanded.height,padding:E.video.expanded.padding}:{width:E.video.collapsed.width,height:E.video.collapsed.height};break;case"transfer":case"player":case"recorder":case"physicalPhoneRecorder":case"settings":case"conference":e=_?{width:E[b].expanded.width,height:E[b].expanded.height}:{width:E[b].collapsed.width,height:E[b].collapsed.height};break;case"switchDevice":e=_?{width:E.switchDevice.expanded.width,height:E.switchDevice.expanded.height}:{width:E.video.collapsed.width,height:E.video.collapsed.height};break;case"waitingConference":e=_?{width:E.waitingConference.expanded.width,height:E.waitingConference.expanded.height}:{width:E.waitingConference.collapsed.width,height:E.waitingConference.collapsed.height};break;case"streamingAnswer":e=_?j?{width:E.streamingAnswer.extraLarge.width,height:E.streamingAnswer.extraLarge.height,padding:E.streamingAnswer.extraLarge.padding}:{width:E.streamingAnswer.expanded.width,height:E.streamingAnswer.expanded.height,padding:E.streamingAnswer.expanded.padding}:{width:E.streamingAnswer.collapsed.width,height:E.streamingAnswer.collapsed.height};break;case"operatorBusy":e=_?{width:E.operatorBusy.expanded.width,height:E.operatorBusy.expanded.height}:{width:E.operatorBusy.collapsed.width,height:E.operatorBusy.collapsed.height}}var i=q>0;return{width:"".concat(0===e.width&&i?E.alerts.width:e.width,"px"),height:"".concat(i&&_?E.alerts.height+(0===e.height?2*N:N):e.height,"px"),borderRadius:"".concat(_?D:O&&"waitingConference"===b?L:B,"px"),padding:_?null!=e.padding?"".concat(e.padding,"px"):"".concat(M,"px"):"".concat(I,"px ").concat(V,"px")}}),[b,_,c,l,y,m,s,o,q,E,B,D,I,V,M,N,g,p,O,A,j,w,x,f]);return e.useEffect((function(){var e={};e.width=null==Q?void 0:Q.width,e.height=null==Q?void 0:Q.height,i.eventDispatch("phone-island-size-change",{sizeInformation:e})}),[Q,b,_,c,l,y,m,s,o,q,E,B,D,I,V,M,N,k,S,p,g,O,j]),n.default.createElement(t.motion.div,{className:"".concat(_?"pi-cursor-grab":"pi-cursor-pointer"," pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow"),animate:Q,transition:{duration:.15,ease:"easeOut"}},h)};exports.IslandMotion=h,exports.default=h;
2
2
  //# sourceMappingURL=IslandMotion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useMemo, useEffect } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\nimport { eventDispatch } from '../utils'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const {\n incoming,\n outgoing,\n accepted,\n transferring,\n incomingWebRTC,\n incomingSocket,\n conferencing,\n } = useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded, sideViewIsVisible,transcriptionViewIsVisible, isFromStreaming, isExtraLarge } = useSelector(\n (state: RootState) => state.island,\n )\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n border_radius_collapsed_conference,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n const { isActive } = useSelector((state: RootState) => state.conference)\n\n const motionVariants = useMemo(() => {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n padding: padding_expanded,\n }\n\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring && conferencing) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && isListen) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming && !isFromStreaming) {\n size = {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (incoming && isFromStreaming) {\n size = {\n width: variants.call.expanded.incomingStreaming.width,\n height: variants.call.expanded.incomingStreaming.height,\n }\n } else if (outgoing && !isFromStreaming) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n } else if (outgoing && isFromStreaming) {\n size = {\n width: variants.call.expanded.outgoingStreaming.width,\n height: variants.call.expanded.outgoingStreaming.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n\n case 'keypad':\n size = isOpen\n ? {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n : {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n break\n\n case 'video':\n if (isOpen) {\n size = {\n width: variants.video.expanded.width,\n height: variants.video.expanded.height,\n padding: variants.video.expanded.padding,\n }\n } else {\n size = {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n }\n break\n case 'transfer':\n case 'player':\n case 'recorder':\n case 'physicalPhoneRecorder':\n case 'settings':\n case 'conference':\n size = isOpen\n ? {\n width: variants[view].expanded.width,\n height: variants[view].expanded.height,\n }\n : {\n width: variants[view].collapsed.width,\n height: variants[view].collapsed.height,\n }\n break\n\n case 'switchDevice':\n size = isOpen\n ? {\n width: variants.switchDevice.expanded.width,\n height: variants.switchDevice.expanded.height,\n }\n : {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n break\n\n case 'waitingConference':\n size = isOpen\n ? {\n width: variants.waitingConference.expanded.width,\n height: variants.waitingConference.expanded.height,\n }\n : {\n width: variants.waitingConference.collapsed.width,\n height: variants.waitingConference.collapsed.height,\n }\n break\n case 'streamingAnswer':\n size = isOpen\n ? isExtraLarge\n ? {\n width: variants.streamingAnswer.extraLarge.width,\n height: variants.streamingAnswer.extraLarge.height,\n padding: variants.streamingAnswer.extraLarge.padding,\n }\n : {\n width: variants.streamingAnswer.expanded.width,\n height: variants.streamingAnswer.expanded.height,\n padding: variants.streamingAnswer.expanded.padding,\n }\n : {\n width: variants.streamingAnswer.collapsed.width,\n height: variants.streamingAnswer.collapsed.height,\n }\n break\n case 'operatorBusy':\n size = isOpen\n ? {\n width: variants.operatorBusy.expanded.width,\n height: variants.operatorBusy.expanded.height,\n }\n : {\n width: variants.operatorBusy.collapsed.width,\n height: variants.operatorBusy.collapsed.height,\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n // If there is an alert and the island is open put the correct height\n isAlert && isOpen\n ? variants.alerts.height +\n (size.height === 0 ? alert_padding_expanded * 2 : alert_padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen\n ? `${border_radius_expanded}px`\n : isActive && view === 'waitingConference'\n ? `${border_radius_collapsed_conference}px`\n : `${border_radius_collapsed}px`,\n padding: isOpen\n ? size.padding != undefined\n ? `${size.padding}px`\n : `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }, [\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n incomingWebRTC,\n incomingSocket,\n isActive,\n isFromStreaming,\n isExtraLarge\n ])\n\n useEffect(() => {\n let sizeInformation: any = {}\n sizeInformation.width = motionVariants?.width\n sizeInformation.height = motionVariants?.height\n eventDispatch('phone-island-size-change', {\n sizeInformation,\n })\n }, [\n motionVariants,\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n sideViewIsVisible,\n transcriptionViewIsVisible,\n incomingSocket,\n incomingWebRTC,\n isActive,\n isExtraLarge,\n ])\n\n return (\n <motion.div\n className={`${isOpen ? 'pi-cursor-grab' : 'pi-cursor-pointer'\n } pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow`}\n animate={motionVariants}\n transition={{\n duration: 0.15,\n ease: 'easeOut',\n }}\n >\n {children}\n </motion.div>\n )\n}\n\ninterface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n padding?: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","incomingWebRTC","incomingSocket","conferencing","isListen","listen","_c","island","view","isOpen","actionsExpanded","sideViewIsVisible","transcriptionViewIsVisible","isFromStreaming","isExtraLarge","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","border_radius_collapsed_conference","padding_x_collapsed","padding_y_collapsed","padding_expanded","alert_padding_expanded","isActive","conference","motionVariants","useMemo","size","width","height","padding","call","expanded","transfer","listening","incomingStreaming","outgoingStreaming","collapsed","keypad","video","switchDevice","waitingConference","streamingAnswer","extraLarge","operatorBusy","isAlert","concat","borderRadius","undefined","useEffect","sizeInformation","eventDispatch","React","createElement","motion","div","className","animate","transition","duration","ease"],"mappings":"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"}
1
+ {"version":3,"file":"IslandMotion.js","sources":["../../src/components/IslandMotion.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useMemo, useEffect } from 'react'\nimport { RootState } from '../store'\nimport { useSelector } from 'react-redux'\nimport { motion } from 'framer-motion'\nimport { eventDispatch } from '../utils'\n\nexport const IslandMotion: FC<IslandMotionProps> = ({ children }) => {\n // Retrieve needed stored variables\n const {\n incoming,\n outgoing,\n accepted,\n transferring,\n incomingWebRTC,\n incomingSocket,\n conferencing,\n throughQueue,\n queueName,\n queueNumber,\n } = useSelector((state: RootState) => state.currentCall)\n const { isListen } = useSelector((state: RootState) => state.listen)\n const { view, isOpen, actionsExpanded, sideViewIsVisible,transcriptionViewIsVisible, isFromStreaming, isExtraLarge } = useSelector(\n (state: RootState) => state.island,\n )\n const { activeAlertsCount } = useSelector((state: RootState) => state.alerts.status)\n const {\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n border_radius_collapsed_conference,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n } = useSelector((state: RootState) => state.motions)\n const { isActive } = useSelector((state: RootState) => state.conference)\n\n const motionVariants = useMemo(() => {\n // Initial size\n let size: SizeTypes = {\n width: 0,\n height: 0,\n padding: padding_expanded,\n }\n\n switch (view) {\n case 'call':\n if (isOpen) {\n if (accepted && transferring && conferencing) {\n if (actionsExpanded) {\n size = {\n width: variants.call.expanded.transfer.actionsExpanded.width,\n height: variants.call.expanded.transfer.actionsExpanded.height,\n }\n } else {\n size = {\n width: variants.call.expanded.transfer.width,\n height: variants.call.expanded.transfer.height,\n }\n }\n } else if (accepted && actionsExpanded) {\n size = {\n width: variants.call.expanded.accepted.actionsExpanded.width,\n height: variants.call.expanded.accepted.actionsExpanded.height,\n }\n } else if (accepted && !isListen) {\n size = {\n width: variants.call.expanded.accepted.width,\n height: variants.call.expanded.accepted.height,\n }\n } else if (accepted && isListen) {\n size = {\n width: variants.call.expanded.listening.width,\n height: variants.call.expanded.listening.height,\n }\n } else if (incoming && !isFromStreaming) {\n const showIncomingQueueBadge =\n incoming && !accepted && throughQueue && Boolean(queueName || queueNumber)\n size = showIncomingQueueBadge\n ? {\n width: variants.call.expanded.incomingQueue.width,\n height: variants.call.expanded.incomingQueue.height,\n }\n : {\n width: variants.call.expanded.incoming.width,\n height: variants.call.expanded.incoming.height,\n }\n } else if (incoming && isFromStreaming) {\n size = {\n width: variants.call.expanded.incomingStreaming.width,\n height: variants.call.expanded.incomingStreaming.height,\n }\n } else if (outgoing && !isFromStreaming) {\n size = {\n width: variants.call.expanded.outgoing.width,\n height: variants.call.expanded.outgoing.height,\n }\n } else if (outgoing && isFromStreaming) {\n size = {\n width: variants.call.expanded.outgoingStreaming.width,\n height: variants.call.expanded.outgoingStreaming.height,\n }\n }\n } else {\n size = {\n width: variants.call.collapsed.width,\n height: variants.call.collapsed.height,\n }\n }\n break\n\n case 'keypad':\n size = isOpen\n ? {\n width: variants.keypad.expanded.width,\n height: variants.keypad.expanded.height,\n }\n : {\n width: variants.transfer.collapsed.width,\n height: variants.transfer.collapsed.height,\n }\n break\n\n case 'video':\n if (isOpen) {\n size = {\n width: variants.video.expanded.width,\n height: variants.video.expanded.height,\n padding: variants.video.expanded.padding,\n }\n } else {\n size = {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n }\n break\n case 'transfer':\n case 'player':\n case 'recorder':\n case 'physicalPhoneRecorder':\n case 'settings':\n case 'conference':\n size = isOpen\n ? {\n width: variants[view].expanded.width,\n height: variants[view].expanded.height,\n }\n : {\n width: variants[view].collapsed.width,\n height: variants[view].collapsed.height,\n }\n break\n\n case 'switchDevice':\n size = isOpen\n ? {\n width: variants.switchDevice.expanded.width,\n height: variants.switchDevice.expanded.height,\n }\n : {\n width: variants.video.collapsed.width,\n height: variants.video.collapsed.height,\n }\n break\n\n case 'waitingConference':\n size = isOpen\n ? {\n width: variants.waitingConference.expanded.width,\n height: variants.waitingConference.expanded.height,\n }\n : {\n width: variants.waitingConference.collapsed.width,\n height: variants.waitingConference.collapsed.height,\n }\n break\n case 'streamingAnswer':\n size = isOpen\n ? isExtraLarge\n ? {\n width: variants.streamingAnswer.extraLarge.width,\n height: variants.streamingAnswer.extraLarge.height,\n padding: variants.streamingAnswer.extraLarge.padding,\n }\n : {\n width: variants.streamingAnswer.expanded.width,\n height: variants.streamingAnswer.expanded.height,\n padding: variants.streamingAnswer.expanded.padding,\n }\n : {\n width: variants.streamingAnswer.collapsed.width,\n height: variants.streamingAnswer.collapsed.height,\n }\n break\n case 'operatorBusy':\n size = isOpen\n ? {\n width: variants.operatorBusy.expanded.width,\n height: variants.operatorBusy.expanded.height,\n }\n : {\n width: variants.operatorBusy.collapsed.width,\n height: variants.operatorBusy.collapsed.height,\n }\n break\n }\n\n const isAlert: boolean = activeAlertsCount > 0\n\n return {\n width: `${size.width === 0 && isAlert ? variants.alerts.width : size.width}px`,\n height: `${\n // If there is an alert and the island is open put the correct height\n isAlert && isOpen\n ? variants.alerts.height +\n (size.height === 0 ? alert_padding_expanded * 2 : alert_padding_expanded)\n : size.height\n }px`,\n borderRadius: isOpen\n ? `${border_radius_expanded}px`\n : isActive && view === 'waitingConference'\n ? `${border_radius_collapsed_conference}px`\n : `${border_radius_collapsed}px`,\n padding: isOpen\n ? size.padding != undefined\n ? `${size.padding}px`\n : `${padding_expanded}px`\n : `${padding_x_collapsed}px ${padding_y_collapsed}px`,\n }\n }, [\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n incomingWebRTC,\n incomingSocket,\n isActive,\n isFromStreaming,\n isExtraLarge,\n throughQueue,\n queueName,\n queueNumber,\n ])\n\n useEffect(() => {\n let sizeInformation: any = {}\n sizeInformation.width = motionVariants?.width\n sizeInformation.height = motionVariants?.height\n eventDispatch('phone-island-size-change', {\n sizeInformation,\n })\n }, [\n motionVariants,\n view,\n isOpen,\n accepted,\n transferring,\n actionsExpanded,\n isListen,\n incoming,\n outgoing,\n activeAlertsCount,\n variants,\n border_radius_collapsed,\n border_radius_expanded,\n padding_x_collapsed,\n padding_y_collapsed,\n padding_expanded,\n alert_padding_expanded,\n sideViewIsVisible,\n transcriptionViewIsVisible,\n incomingSocket,\n incomingWebRTC,\n isActive,\n isExtraLarge,\n ])\n\n return (\n <motion.div\n className={`${isOpen ? 'pi-cursor-grab' : 'pi-cursor-pointer'\n } pi-pointer-events-auto pi-overflow-hidden dark:pi-bg-gray-950 pi-bg-gray-50 pi-text-xs dark:pi-text-white pi-text-gray-900 hover:pi-shadow-2xl pi-rounded-3xl pi-transition-shadow`}\n animate={motionVariants}\n transition={{\n duration: 0.15,\n ease: 'easeOut',\n }}\n >\n {children}\n </motion.div>\n )\n}\n\ninterface IslandMotionProps {\n children: ReactNode\n}\n\ntype SizeTypes = {\n width: number\n height: number\n padding?: number\n}\n\nexport default IslandMotion\n"],"names":["IslandMotion","_a","children","_b","useSelector","state","currentCall","incoming","outgoing","accepted","transferring","incomingWebRTC","incomingSocket","conferencing","throughQueue","queueName","queueNumber","isListen","listen","_c","island","view","isOpen","actionsExpanded","sideViewIsVisible","transcriptionViewIsVisible","isFromStreaming","isExtraLarge","activeAlertsCount","alerts","status","_d","motions","variants","border_radius_collapsed","border_radius_expanded","border_radius_collapsed_conference","padding_x_collapsed","padding_y_collapsed","padding_expanded","alert_padding_expanded","isActive","conference","motionVariants","useMemo","size","width","height","padding","call","expanded","transfer","listening","Boolean","incomingQueue","incomingStreaming","outgoingStreaming","collapsed","keypad","video","switchDevice","waitingConference","streamingAnswer","extraLarge","operatorBusy","isAlert","concat","borderRadius","undefined","useEffect","sizeInformation","eventDispatch","React","createElement","motion","div","className","animate","transition","duration","ease"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),c=require("../static/busy_ringtone.js"),u=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),s=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),g=require("../events/SocketEvents.js"),f=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),b=require("../utils/streaming/isFromStreaming.js"),S=require("../lib/phone/queue.js"),k=require("../lib/phone/trunk.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js");function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var C=w(n);exports.Socket=function(w){var q=w.hostName,N=w.username,_=w.authToken,T=w.reload,I=w.reloadedCallback,U=w.children,D=w.uaType,j=y.useDispatch(),x=n.useRef(),E=n.useRef(),P=n.useRef(!1),O=n.useRef(0),F=n.useRef(null);u.useEventListener("phone-island-start-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-stop-transcription",(function(e){if(E.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;E.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),u.useEventListener("phone-island-current-user-queue-call-waiting",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})})),u.useEventListener("phone-island-current-user-queue-call-connected",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})}));return n.useEffect((function(){var n,u=function(e){if(e.counterpartNum&&b.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},y=function(e){var n,t,r,i;if(e){var o=function(e){return S.getCurrentCallQueueContext(e,l.store.getState().queue)}(e),c=function(e,n){var t=l.store.getState().currentCall;return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:(null==n?void 0:n.queueId)||t.queueId||"",queueName:(null==n?void 0:n.queueName)||t.queueName||"",queueNumber:(null==n?void 0:n.queueNumber)||t.queueNumber||"",queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}}(e,o);if(Boolean(c.queueId||c.queueName||c.queueNumber))if(e.connected)((null===(r=F.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=F.current)||void 0===i?void 0:i.phase))&&(g.dispatchCurrentUserQueueCallConnected(c),F.current={conversationId:e.id,phase:"connected"});else((null===(n=F.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=F.current)||void 0===t?void 0:t.phase))&&(g.dispatchCurrentUserQueueCallWaiting(c),F.current={conversationId:e.id,phase:"waiting"});else F.current=null}else F.current=null},w=function(n,t){var r=l.store.getState().currentCall,c=r.transferring,s=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,g=l.store.getState().currentUser.default_device,b=l.store.getState().currentUser,S=b.endpoints,w=b.username,C=l.store.getState().currentCall;C.incoming,C.outgoing;var q=function(){if(!m||!w)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===w}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":if(function(e){var n=l.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(t.owner))break;y(t),u(t),("mobile"===D&&q()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),P.current||(P.current=!0,o.getCurrentUserInfo().then((function(n){n&&(j.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?j.paramUrl.setOpenParamUrlType(n.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){P.current=!1}),100)})));var N=l.store.getState().paramUrl.openParamUrlType,_=l.store.getState().island.urlOpened;if("ringing"===N&&!_){var T=k.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(T),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:T,direction:t.direction,connected:t.connected})}break;case"busy":if(y(t),u(t),"mobile"===D&&q()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!q()||!q()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(f.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&c&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(c&&!s){var I=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&I&&(j.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":y(t);var U=t.counterpartName,x=t.counterpartNum,E=t.startTime;c&&x&&U&&"<unknown>"!==U&&(j.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:x,startTime:"".concat(f.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:x,startTime:"".concat(E/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(y(null),j.player.stopAudioPlayer(),j.currentCall.reset(),j.listen.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(N)&&(n.path="/api/ws"),E.current=t.io("https://"+q,n),j.websocket.update({socket:E.current}),E.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(E.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),E.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),x.current&&(clearInterval(x.current),x.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),E.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),E.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),E.current.io.on("reconnect",(function(e){O.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(E.current.id,")"))})),E.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),E.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),E.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),E.current.on("connect",(function(){console.debug("Socket on: "+q+" is connected!"),E.current.emit("login",{accessKeyId:"".concat(N),token:_,uaType:D})})),E.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),x.current&&clearInterval(x.current),x.current=setInterval((function(){E.current.volatile.emit("ping",s.withTimeout((function(){O.current=0,setTimeout((function(){j.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){O.current++,console.debug("Socket ping timeout (".concat(O.current,"/").concat(3,"), connected: ").concat(E.current.connected)),setTimeout((function(){var e,n,t=E.current.connected&&O.current>=3;if(!E.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,c=i.outgoing,u=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||c)&&("connected"===u||"completed"===u))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:u,accepted:o,outgoing:c,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),E.current.disconnect()),j.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),E.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),g.dispatchMainPresence(n)})),E.current.on("extenHangup",(function(e){var n,t,r=l.store.getState().currentUser,i=r.endpoints,o=r.username,u=l.store.getState().conference,s=u.isActive,d=u.conferenceStartedFrom,p=l.store.getState().island,v=p.view,m=p.previewCallFromMobileOrNethlink,g=((null==i?void 0:i.extension)||[]).find((function(n){return n.id===e.callerNum})),f=null==g?void 0:g.type,h=l.store.getState().currentUser.conversations,b=void 0,S=!1;if(e.callerNum&&h[e.callerNum]){var k=h[e.callerNum],y=Object.keys(k);if(y.length>0){for(var w=null,C=0,q=y;C<q.length;C++){var N=q[C],_=null==k?void 0:k[N];if(_)if(w){var T=!!w.connected,I=!!_.connected;if(!I||T){var U=null!==(n=w.startTime)&&void 0!==n?n:0,D=null!==(t=_.startTime)&&void 0!==t?t:0;I===T&&D>U&&(w=_)}else w=_}else w=_}b=null==w?void 0:w.linkedId,S=(null==w?void 0:w.connected)||!1}}if(b&&S&&a.eventDispatch("phone-island-summary-call-check",{linkedid:b}),"normal_clearing"===e.cause&&("physical"===f||"mobile"===f)||"normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)&&m||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)||"interworking"===(null==e?void 0:e.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),s&&d!==o&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&d===o?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==f&&"nethlink"!==f||!s||d===o||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)||"call_rejected"===(null==e?void 0:e.cause))&&s&&d===o){var j=l.store.getState().conference,x=j.usersList,E=j.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0;P||O?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&s&&d===o&&"waitingConference"!==v&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var F=l.store.getState().currentUser,V=F.endpoints,A=F.username,R=((null==V?void 0:V.extension)||[]).map((function(e){return e.id})),M=l.store.getState().currentCall,L=M.incoming,Q=M.accepted,W=M.transferring,B=l.store.getState().conference,H=B.isActive,z=B.conferenceStartedFrom;!(L&&e.callerNum&&R.includes(e.callerNum))&&(!Q||H||W)&&(l.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:c.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),H&&z===A&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var J=l.store.getState().conference,K=J.isActive,G=J.conferenceStartedFrom,X=l.store.getState().currentUser.username;if(K&&G===X){var Y=l.store.getState().conference;x=Y.usersList,E=Y.pendingUsers,P=x&&Object.keys(x).length>0,O=E&&Object.keys(E).length>0,P||O?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),E&&E[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),E.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),E.current.on("extenUpdate",(function(e){var n,t;j.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var c in r){var u=r[c].username,a=r[c].exten;i[u]||(i[u]=[]),i[u].push(a)}var s=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===N&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(g.dispatchExtensions(e),v.isEmpty(d)){var f=null==s?void 0:s.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));f||g.dispatchConversations(e)}else p||g.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===N&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===N&&(w(e,d),j.currentUser.updateConversations(e))})),E.current.on("queueUpdate",(function(e){j.queue.updateQueue(e);var n,t,r,i=(n=l.store.getState().currentUser.conversations,t=l.store.getState().currentCall.conversationId,r=null,Object.values(n||{}).forEach((function(e){Object.values(e||{}).forEach((function(e){(null==r?void 0:r.id)&&r.id===t||(t&&e.id===t||!r||e.connected&&!r.connected||e.connected===r.connected&&e.startTime>r.startTime)&&(r=e)}))})),r);i&&y(i),g.dispatchQueueUpdate(e)})),E.current.on("queueMemberUpdate",(function(e){j.queue.updateQueueMember(e),g.dispatchQueueMemberUpdate(e)})),E.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),E.current.on("serverReloaded",(function(){g.dispatchServerReload()})),E.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),E.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),E.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number})})),E.current.on("message",(function(e){switch(e.message){case"videoCallStart":var n=l.store.getState(),t=n.currentCall,r=t.incoming,i=t.outgoing,o=t.accepted,c=n.currentUser.default_device,u=n.island,a=u.isFromStreaming,s=u.view;("webrtc"===(null==c?void 0:c.type)||"nethlink"===(null==c?void 0:c.type))&&(r||i||o)&&!a&&"video"!==s&&(j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video")),g.dispatchVideoCallStarted({initiator:"remote",callUser:e.callUser,destUser:e.destUser});break;case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),E.current.on("updateDefaultDevice",(function(n){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],c=r.extension.find((function(e){return e.id===o.exten}));c&&(o=e.__assign(e.__assign({},o),{type:c.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),E.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),E.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),E.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),E.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),E.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),E.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(x.current),E.current.close()}}),[q,N,_,D,j]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),x.current&&(clearInterval(x.current),x.current=null),setTimeout((function(){E.current.disconnect(),E.current.connect(),I()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),I())}}),[T]),C.default.createElement(C.default.Fragment,null,U)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),r=require("./RestAPI.js"),i=require("../lib/phone/conversation.js"),o=require("../services/user.js"),u=require("../static/busy_ringtone.js"),c=require("../utils/customHooks/useEventListener.js"),a=require("../utils/genericFunctions/eventDispatch.js"),s=require("../utils/genericFunctions/withTimeout.js"),l=require("../store/index.js");require("../lib/webrtc/janus.js"),require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var d=require("../lib/devices/devices.js"),p=require("../lib/user/default_device.js"),v=require("../utils/genericFunctions/isEmpty.js"),m=require("../utils/streaming/getStreamingSourceId.js"),g=require("../events/SocketEvents.js"),f=require("../utils/genericFunctions/timestamp.js"),h=require("../lib/user/extensions.js"),b=require("../utils/streaming/isFromStreaming.js"),S=require("../lib/phone/queue.js"),k=require("../lib/phone/trunk.js"),y=require("../node_modules/react-redux/es/hooks/useDispatch.js");function q(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var w=q(n);exports.Socket=function(q){var C=q.hostName,N=q.username,_=q.authToken,T=q.reload,I=q.reloadedCallback,U=q.children,D=q.uaType,j=y.useDispatch(),x=n.useRef(),P=n.useRef(),E=n.useRef(!1),O=n.useRef(0),F=n.useRef(null);c.useEventListener("phone-island-start-transcription",(function(e){if(P.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;P.current.emit("start_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),c.useEventListener("phone-island-stop-transcription",(function(e){if(P.current){var n=(null==e?void 0:e.linkedid)||(null==e?void 0:e.uniqueid)||null;if(!n)return;P.current.emit("stop_transcription",{linkedid:n,uniqueid:(null==e?void 0:e.uniqueid)||n})}})),c.useEventListener("phone-island-current-user-queue-call-waiting",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})})),c.useEventListener("phone-island-current-user-queue-call-connected",(function(e){j.currentCall.updateCurrentCall({throughQueue:!0,queueId:(null==e?void 0:e.queueId)||"",queueName:(null==e?void 0:e.queueName)||"",queueNumber:(null==e?void 0:e.queueNumber)||"",queuePosition:(null==e?void 0:e.queuePosition)||"",queueWaitingTime:(null==e?void 0:e.queueWaitingTime)||0})}));return n.useEffect((function(){var n,c=function(e){if(e.counterpartNum&&b.isFromStreaming(e.counterpartNum)){j.island.setIsFromStreaming(!0),j.currentCall.updateCurrentCall({streamingSourceNumber:e.counterpartNum});var n=m.getStreamingSourceId(e.counterpartNum);n&&o.subscribe({id:n}).catch((function(e){return console.error("Error subscribing to streaming source:",e)}))}},y=function(e){return S.getCurrentCallQueueContext(e,l.store.getState().queue)},q=function(e,n){var t=l.store.getState().currentCall,r=(null==n?void 0:n.queueId)||t.queueId||"",i=(null==n?void 0:n.queueName)||t.queueName||"",o=(null==n?void 0:n.queueNumber)||t.queueNumber||"";return{conversationId:e.id,linkedId:e.linkedId,uniqueId:e.uniqueId,ownerExtension:e.owner,number:"".concat(e.counterpartNum||""),queueId:r,queueName:i,queueNumber:o,queuePosition:(null==n?void 0:n.queuePosition)||"",queueWaitingTime:(null==n?void 0:n.queueWaitingTime)||0}},w=function(e){var n,t,r,i;if(e){var o=y(e),u=q(e,o);if(Boolean(u.queueId||u.queueName||u.queueNumber))if(e.connected)((null===(r=F.current)||void 0===r?void 0:r.conversationId)!==e.id||"connected"!==(null===(i=F.current)||void 0===i?void 0:i.phase))&&(g.dispatchCurrentUserQueueCallConnected(u),F.current={conversationId:e.id,phase:"connected"});else((null===(n=F.current)||void 0===n?void 0:n.conversationId)!==e.id||"waiting"!==(null===(t=F.current)||void 0===t?void 0:t.phase))&&(g.dispatchCurrentUserQueueCallWaiting(u),F.current={conversationId:e.id,phase:"waiting"});else F.current=null}else F.current=null},T=function(n,t){var r=l.store.getState().currentCall,u=r.transferring,s=r.transferSwitching,d=r.transferCalls,v=l.store.getState().island.view;if(Object.keys(t).length>0){if(n.status){var m=l.store.getState().users.extensions,g=l.store.getState().currentUser.default_device,b=l.store.getState().currentUser,S=b.endpoints,C=b.username,N=l.store.getState().currentCall;N.incoming,N.outgoing;var _=function(){if(!m||!C)return!1;var e=Object.values(m).filter((function(e){return(null==e?void 0:e.username)===C}));return null==e?void 0:e.some((function(e){var n=null==S?void 0:S.extension.find((function(n){return n.id===(null==e?void 0:e.exten)}));return"nethlink"===(null==n?void 0:n.type)&&"offline"!==(null==e?void 0:e.status)}))};switch(n.status){case"ringing":if(function(e){var n=l.store.getState().currentCall,t=n.accepted,r=n.ownerExtension;return t&&!!r&&!!e&&r!==e}(t.owner))break;var T=y(t),I=q(t,T);w(t),c(t),("mobile"===D&&_()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!_()||!_()&&"physical"===(null==g?void 0:g.type)))&&(j.currentCall.checkIncomingUpdatePlay({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),incomingSocket:!0,incoming:!0,throughQueue:Boolean(I.queueId||I.queueName||I.queueNumber),queueId:I.queueId,queueName:I.queueName,queueNumber:I.queueNumber,queuePosition:I.queuePosition,queueWaitingTime:I.queueWaitingTime,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",ownerExtension:t.owner}),l.store.dispatch.island.setIslandView("call")),E.current||(E.current=!0,o.getCurrentUserInfo().then((function(n){n&&(j.currentUser.updateCurrentUser(n),a.eventDispatch("phone-island-user-informations-update",e.__assign({},n)),n.settings&&n.settings.open_param_url?j.paramUrl.setOpenParamUrlType(n.settings.open_param_url):j.paramUrl.setOpenParamUrlType("never"))})).catch((function(e){console.error("Error getting current user info:",e)})).finally((function(){setTimeout((function(){E.current=!1}),100)})));var U=l.store.getState().paramUrl.openParamUrlType,x=l.store.getState().island.urlOpened;if("ringing"===U&&!x){var P=k.isFromTrunk(t.counterpartNum);l.store.dispatch.paramUrl.setThroughTrunk(P),l.store.dispatch.island.setUrlOpened(!1),a.eventDispatch("phone-island-url-parameter-opened",{counterpartNum:t.counterpartNum,counterpartName:i.getDisplayName(t),owner:t.owner,uniqueId:t.uniqueId,linkedId:t.linkedId,throughQueue:t.throughQueue,throughTrunk:P,direction:t.direction,connected:t.connected})}break;case"busy":if(w(t),c(t),"mobile"===D&&_()||"desktop"===D&&("webrtc"===(null==g?void 0:g.type)||void 0===(null==g?void 0:g.type)&&!_()||!_()&&"physical"===(null==g?void 0:g.type))){if(t&&t.connected)j.currentCall.updateCurrentCall({conversationId:t.id,displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),ownerExtension:t.owner,username:"".concat(m&&m[t.counterpartNum]&&m[t.counterpartNum].username)||"",chDest:(null==t?void 0:t.chDest)||{},chSource:(null==t?void 0:t.chSource)||{}}),j.currentCall.checkAcceptedUpdate({acceptedSocket:!0}),j.currentCall.addTransferCalls({type:"transferred",displayName:i.getDisplayName(t),number:"".concat(t.counterpartNum),startTime:"".concat(f.getTimestampInSeconds())}),l.store.getState().island.isFromStreaming&&"out"===t.direction&&setTimeout((function(){j.island.setIslandView("streamingAnswer")}),200),p.isPhysical()&&function(e){j.currentCall.updateCurrentCall({conversationId:e.id,accepted:!0,incoming:"in"!==e.direction&&void 0}),a.eventDispatch("phone-island-call-answered",{}),l.store.dispatch.player.stopAudioPlayer(),l.store.dispatch.player.setAudioPlayerLoop(!1)}(t),"call"===v&&u&&j.currentCall.updateCurrentCall({transferring:!1});if(d.length>1)j.currentCall.deleteTransferCalls();else if(t&&!t.connected){if(u&&!s){var O=d.find((function(e){return e.number===t.counterpartNum}));!t.connected&&O&&(j.currentCall.updateCurrentCall({transferring:!1}),a.eventDispatch("phone-island-call-transfer-failed",{}),j.currentCall.updateTransferSwitching(!1))}"REC"===(null==t?void 0:t.counterpartName)&&j.physicalRecorder.setRecordingTempVariable(!0)}t&&!t.connected&&"out"===t.direction&&j.currentCall.checkOutgoingUpdate({outgoingSocket:!0,outgoing:"REC"!==(null==t?void 0:t.counterpartName),displayName:i.getDisplayName(t),number:"".concat(null==t?void 0:t.counterpartNum),username:"".concat(m&&m[null==t?void 0:t.counterpartNum]&&m[null==t?void 0:t.counterpartNum].username)||""})}break;case"onhold":w(t);var F=t.counterpartName,V=t.counterpartNum,A=t.startTime;u&&V&&F&&"<unknown>"!==F&&(j.currentCall.addTransferCalls({type:"destination",displayName:i.getDisplayName(t),number:V,startTime:"".concat(f.getTimestampInSeconds())}),j.currentCall.updateCurrentCall({displayName:i.getDisplayName(t),number:V,startTime:"".concat(A/1e3),conversationId:t.id}),j.island.setIslandView("call"));break;case"busy_ringing":a.eventDispatch("phone-island-call-ringing",{})}}}else"online"==n.status&&h.userTotallyFree()&&(w(null),j.player.stopAudioPlayer(),j.currentCall.reset(),j.listen.reset(),j.physicalRecorder.setRecordingTempVariable(!1),j.island.setIsFromStreaming(!1))};return n={upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3},"new"===r.getApiMode(N)&&(n.path="/api/ws"),P.current=t.io("https://"+C,n),j.websocket.update({socket:P.current}),P.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(P.current.id)),a.eventDispatch("phone-island-socket-connected",{})})),P.current.on("disconnect",(function(e){console.debug("Socket disconnect - reason: ".concat(e)),x.current&&(clearInterval(x.current),x.current=null),e.includes("server disconnect")?a.eventDispatch("phone-island-server-disconnected",{}):a.eventDispatch("phone-island-socket-disconnected",{})})),P.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),P.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),P.current.io.on("reconnect",(function(e){O.current=0,a.eventDispatch("phone-island-socket-reconnected",{}),console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(P.current.id,")"))})),P.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),P.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),P.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),P.current.on("connect",(function(){console.debug("Socket on: "+C+" is connected!"),P.current.emit("login",{accessKeyId:"".concat(N),token:_,uaType:D})})),P.current.on("authe_ok",(function(){console.debug("Socket authentication success!"),a.eventDispatch("phone-island-socket-authorized",{}),x.current&&clearInterval(x.current),x.current=setInterval((function(){P.current.volatile.emit("ping",s.withTimeout((function(){O.current=0,setTimeout((function(){j.alerts.removeAlert("socket_down"),a.eventDispatch("phone-island-alert-removed",{type:"socket_down"}),a.eventDispatch("phone-island-socket-disconnected-popup-close",{})}),0)}),(function(){O.current++,console.debug("Socket ping timeout (".concat(O.current,"/").concat(3,"), connected: ").concat(P.current.connected)),setTimeout((function(){var e,n,t=P.current.connected&&O.current>=3;if(!P.current.connected||t){var r=l.store.getState().webrtc.sipcall,i=l.store.getState().currentCall,o=i.accepted,u=i.outgoing,c=null===(n=null===(e=null==r?void 0:r.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===n?void 0:n.iceConnectionState;if((o||u)&&("connected"===c||"completed"===c))return void console.debug("Socket unreachable but active call with ICE connected - skipping socket_down alert",{iceState:c,accepted:o,outgoing:u,isStaleConnection:t,timestamp:(new Date).toISOString()});t&&(console.warn("Stale socket connection detected - forcing reconnection"),P.current.disconnect()),j.alerts.setAlert("socket_down"),a.eventDispatch("phone-island-socket-disconnected-popup-open",{}),console.error("Socket is unreachable!")}}),0)}),5e3))}),5e3)})),P.current.on("userMainPresenceUpdate",(function(n){l.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),g.dispatchMainPresence(n)})),P.current.on("extenHangup",(function(e){var n,t,r=l.store.getState().currentUser,i=r.endpoints,o=r.username,c=l.store.getState().conference,s=c.isActive,d=c.conferenceStartedFrom,p=l.store.getState().island,v=p.view,m=p.previewCallFromMobileOrNethlink,g=((null==i?void 0:i.extension)||[]).find((function(n){return n.id===e.callerNum})),f=null==g?void 0:g.type,h=l.store.getState().currentUser.conversations,b=void 0,S=!1;if(e.callerNum&&h[e.callerNum]){var k=h[e.callerNum],y=Object.keys(k);if(y.length>0){for(var q=null,w=0,C=y;w<C.length;w++){var N=C[w],_=null==k?void 0:k[N];if(_)if(q){var T=!!q.connected,I=!!_.connected;if(!I||T){var U=null!==(n=q.startTime)&&void 0!==n?n:0,D=null!==(t=_.startTime)&&void 0!==t?t:0;I===T&&D>U&&(q=_)}else q=_}else q=_}b=null==q?void 0:q.linkedId,S=(null==q?void 0:q.connected)||!1}}if(b&&S&&a.eventDispatch("phone-island-summary-call-check",{linkedid:b}),"normal_clearing"===e.cause&&("physical"===f||"mobile"===f)||"normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)&&m||"user_busy"===(null==e?void 0:e.cause)||"not_defined"===(null==e?void 0:e.cause)||"call_rejected"===(null==e?void 0:e.cause)||"interworking"===(null==e?void 0:e.cause)?(setTimeout((function(){l.store.dispatch.island.toggleAvoidToShow(!1),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!1)}),500),s&&d!==o&&l.store.dispatch.conference.resetConference()):"normal_circuit_congestion"===(null==e?void 0:e.cause)&&s&&d===o?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):"normal_clearing"!==e.cause&&"user_busy"!==(null==e?void 0:e.cause)&&"not_defined"!==(null==e?void 0:e.cause)&&"call_rejected"!==(null==e?void 0:e.cause)||"webrtc"!==f&&"nethlink"!==f||!s||d===o||l.store.dispatch.conference.resetConference(),("normal_clearing"===e.cause&&("webrtc"===f||"nethlink"===f)||"call_rejected"===(null==e?void 0:e.cause))&&s&&d===o){var j=l.store.getState().conference,x=j.usersList,P=j.pendingUsers,E=x&&Object.keys(x).length>0,O=P&&Object.keys(P).length>0;E||O?setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800):l.store.dispatch.conference.resetConference()}if("interworking"===(null==e?void 0:e.cause)&&s&&d===o&&"waitingConference"!==v&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),"user_busy"===(null==e?void 0:e.cause)){var F=l.store.getState().currentUser,V=F.endpoints,A=F.username,R=((null==V?void 0:V.extension)||[]).map((function(e){return e.id})),M=l.store.getState().currentCall,L=M.incoming,Q=M.accepted,W=M.transferring,B=l.store.getState().conference,H=B.isActive,z=B.conferenceStartedFrom;!(L&&e.callerNum&&R.includes(e.callerNum))&&(!Q||H||W)&&(l.store.dispatch.island.setOperatorBusyActive({callerNumber:e.callerNum||"Unknown"}),setTimeout((function(){l.store.dispatch.player.stopAudioPlayer()}),4e3),setTimeout((function(){l.store.dispatch.player.updateStartAudioPlayer({src:u.default,loop:!0}),l.store.dispatch.island.setIslandView("operatorBusy")}),600),H&&z===A&&setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),4e3))}if("subscriber_absent"===(null==e?void 0:e.cause)){var J=l.store.getState().conference,K=J.isActive,G=J.conferenceStartedFrom,X=l.store.getState().currentUser.username;if(K&&G===X){var Y=l.store.getState().conference;x=Y.usersList,P=Y.pendingUsers,E=x&&Object.keys(x).length>0,O=P&&Object.keys(P).length>0,E||O?(setTimeout((function(){a.eventDispatch("phone-island-view-changed",{viewType:"waitingConference"})}),800),P&&P[e.callerNum]&&l.store.dispatch.conference.removePendingUser(e.callerNum)):l.store.dispatch.conference.resetConference()}}})),P.current.on("extenConnected",(function(e){var n=l.store.getState().currentUser,t=n.default_device,r=n.endpoints,i=((null==r?void 0:r.extension)||[]).find((function(n){return n.id===e.extenConnected})),o=null==i?void 0:i.type;(("webrtc"===(null==t?void 0:t.type)||"nethlink"===(null==t?void 0:t.type))&&o&&("mobile"===o||"physical"===o)||"physical"===(null==t?void 0:t.type)&&o&&"physical"!==o)&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0),a.eventDispatch("phone-island-call-answered",{extensionType:o}))})),P.current.on("extenUpdate",(function(e){var n,t;j.users.updateExtension(e);var r=l.store.getState().users.extensions,i={},o=l.store.getState().currentUser;for(var u in r){var c=r[u].username,a=r[u].exten;i[c]||(i[c]=[]),i[c].push(a)}var s=i[e.username],d=e.conversations[Object.keys(e.conversations)[0]]||{},p=!1;if((null==e?void 0:e.username)===N&&!v.isEmpty(d)&&(null==d?void 0:d.owner)){var m=null===(t=null===(n=null==o?void 0:o.endpoints)||void 0===n?void 0:n.extension)||void 0===t?void 0:t.find((function(e){return e.id===d.owner}));m&&"mobile"===m.type&&(p=!0)}if(g.dispatchExtensions(e),v.isEmpty(d)){var f=null==s?void 0:s.some((function(e){var n,t=null===(n=r[e])||void 0===n?void 0:n.conversations;return!v.isEmpty(t)}));f||g.dispatchConversations(e)}else p||g.dispatchConversations(e);p&&"busy"===(null==e?void 0:e.status)&&(null==e?void 0:e.username)===N&&(l.store.dispatch.island.toggleAvoidToShow(!0),l.store.dispatch.island.setPreviewCallFromMobileOrNethlink(!0)),e.username===N&&(T(e,d),j.currentUser.updateConversations(e))})),P.current.on("queueUpdate",(function(e){j.queue.updateQueue(e);var n,t,r,i=(n=l.store.getState().currentUser.conversations,t=l.store.getState().currentCall.conversationId,r=null,Object.values(n||{}).forEach((function(e){Object.values(e||{}).forEach((function(e){(null==r?void 0:r.id)&&r.id===t||(t&&e.id===t||!r||e.connected&&!r.connected||e.connected===r.connected&&e.startTime>r.startTime)&&(r=e)}))})),r);i&&w(i),g.dispatchQueueUpdate(e)})),P.current.on("queueMemberUpdate",(function(e){j.queue.updateQueueMember(e),g.dispatchQueueMemberUpdate(e)})),P.current.on("takeOver",(function(){g.dispatchAlreadyLogin()})),P.current.on("serverReloaded",(function(){g.dispatchServerReload()})),P.current.on("parkingUpdate",(function(e){g.dispatchParkingUpdate(e)})),P.current.on("actionNethLink",(function(e,n){g.dispatchUrlCall(e,n)})),P.current.on("satellite/summary",(function(e){(null==e?void 0:e.uniqueid)&&a.eventDispatch("phone-island-summary-ready",{linkedid:null==e?void 0:e.uniqueid,display_name:null==e?void 0:e.display_name,display_number:null==e?void 0:e.display_number})})),P.current.on("message",(function(e){switch(e.message){case"videoCallStart":var n=l.store.getState(),t=n.currentCall,r=t.incoming,i=t.outgoing,o=t.accepted,u=n.currentUser.default_device,c=n.island,a=c.isFromStreaming,s=c.view;("webrtc"===(null==u?void 0:u.type)||"nethlink"===(null==u?void 0:u.type))&&(r||i||o)&&!a&&"video"!==s&&(j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video")),g.dispatchVideoCallStarted({initiator:"remote",callUser:e.callUser,destUser:e.destUser});break;case"screenSharingStart":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isJoiningScreenShare:!0,room:e.roomId});break;case"screenSharingStop":j.island.toggleSideViewVisible(!1),j.island.toggleTranscriptionViewVisible(!1),j.island.setIslandView("video"),j.screenShare.update({isLeavingScreenShare:!0});break;default:console.warn("Socket: unknown message type ",e.message)}})),P.current.on("updateDefaultDevice",(function(n){g.dispatchDefaultDeviceUpdate(n);var t=l.store.getState().users.extensions,r=l.store.getState().currentUser.endpoints;if(t&&r){var i=Object.values(t).filter((function(e){return(null==e?void 0:e.exten)===n}));if(0!==i.length){var o=i[0],u=r.extension.find((function(e){return e.id===o.exten}));u&&(o=e.__assign(e.__assign({},o),{type:u.type})),l.store.dispatch.currentUser.updateCurrentDefaultDevice(o),d.checkMediaPermissions()}}})),P.current.on("confBridgeUpdate",(function(n){if(n&&(null==n?void 0:n.users)){var t=null==n?void 0:n.id,r=null==n?void 0:n.users,i=l.store.getState().conference.usersList,o=e.__assign({},r);i&&Object.keys(o).forEach((function(n){i[n]&&(o[n]=e.__assign(e.__assign({},o[n]),{muted:i[n].muted}))})),l.store.dispatch.conference.updateConferenceUsersList(o),l.store.dispatch.conference.updateConferenceId(t)}})),P.current.on("confBridgeEnd",(function(e){e&&(null==e?void 0:e.id)&&(l.store.dispatch.conference.resetConference(),a.eventDispatch("phone-island-conference-finished",{}))})),P.current.on("callWebrtc",(function(e){a.eventDispatch("phone-island-call-start",{number:e})})),P.current.on("newVoiceMessageCounter",(function(e){a.eventDispatch("phone-island-voicemail-received",{voicemailInfo:e})})),P.current.on("streamingSourceUpdate",(function(e){a.eventDispatch("phone-island-streaming-information-received",{res:e});var n=e.streaming||e.res&&e.res.streaming;if(n){var t=n.source,r=n.image;if(t&&r){l.store.getState().island.isFromStreaming;var i=l.store.getState().currentCall.streamingSourceNumber;m.getStreamingSourceId(i),j.streaming.updateSourceImage({source:t,image:r})}}})),P.current.on("satellite/transcription",(function(e){a.eventDispatch("phone-island-conversation-transcription",e)})),function(){clearInterval(x.current),P.current.close()}}),[C,N,_,D,j]),n.useEffect((function(){var e;if(T){console.info("Socket reload requested");var n=l.store.getState().alerts.data,t=l.store.getState().island.forceReload;(null===(e=n.socket_down)||void 0===e?void 0:e.active)||!1||t?(console.info(t?"Force reload requested, performing Socket reconnection":"Socket down detected (alert active), performing reconnection"),t&&l.store.dispatch.island.setForceReload(!1),x.current&&(clearInterval(x.current),x.current=null),setTimeout((function(){P.current.disconnect(),P.current.connect(),I()}),100)):(console.info("Socket already connected (no alert active), skipping reconnection"),I())}}),[T]),w.default.createElement(w.default.Fragment,null,U)};
2
2
  //# sourceMappingURL=Socket.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getApiMode } from './RestAPI'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport busyRingtone from '../static/busy_ringtone'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchCurrentUserQueueCallWaiting,\n dispatchCurrentUserQueueCallConnected,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n dispatchVideoCallStarted,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, useEventListener, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n CurrentUserQueueCallEventTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage, VideoCallMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\nimport { isFromTrunk } from '../lib/user/extensions'\nimport { getCurrentCallQueueContext } from '../lib/phone/queue'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n const consecutivePingTimeouts = useRef(0)\n const currentUserQueueCallPhase = useRef<{\n conversationId: string\n phase: 'waiting' | 'connected'\n } | null>(null)\n const STALE_CONNECTION_THRESHOLD = 3 // Force reconnect after 3 consecutive ping timeouts\n\n // Event listener for starting transcription\n useEventListener('phone-island-start-transcription', (args: any) => {\n if (socket.current) {\n const linkedid = args?.linkedid || args?.uniqueid || null\n if (!linkedid) {\n return\n }\n socket.current.emit('start_transcription', {\n linkedid,\n uniqueid: args?.uniqueid || linkedid,\n })\n }\n })\n\n // Event listener for stopping transcription\n useEventListener('phone-island-stop-transcription', (args: any) => {\n if (socket.current) {\n const linkedid = args?.linkedid || args?.uniqueid || null\n if (!linkedid) {\n return\n }\n socket.current.emit('stop_transcription', {\n linkedid,\n uniqueid: args?.uniqueid || linkedid,\n })\n }\n })\n\n useEventListener(\n 'phone-island-current-user-queue-call-waiting',\n (data: CurrentUserQueueCallEventTypes) => {\n dispatch.currentCall.updateCurrentCall({\n throughQueue: true,\n queueId: data?.queueId || '',\n queueName: data?.queueName || '',\n queueNumber: data?.queueNumber || '',\n queuePosition: data?.queuePosition || '',\n queueWaitingTime: data?.queueWaitingTime || 0,\n })\n },\n )\n\n useEventListener(\n 'phone-island-current-user-queue-call-connected',\n (data: CurrentUserQueueCallEventTypes) => {\n dispatch.currentCall.updateCurrentCall({\n throughQueue: true,\n queueId: data?.queueId || '',\n queueName: data?.queueName || '',\n queueNumber: data?.queueNumber || '',\n queuePosition: data?.queuePosition || '',\n queueWaitingTime: data?.queueWaitingTime || 0,\n })\n },\n )\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId }).catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n const getCurrentCallQueuePayload = (conv: ConversationTypes) => {\n return getCurrentCallQueueContext(conv, store.getState().queue)\n }\n\n const getQueuePayloadWithFallback = (\n conv: ConversationTypes,\n queueContext: ReturnType<typeof getCurrentCallQueuePayload>,\n ) => {\n const currentCall = store.getState().currentCall\n\n return {\n conversationId: conv.id,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n ownerExtension: conv.owner,\n number: `${conv.counterpartNum || ''}`,\n queueId: queueContext?.queueId || currentCall.queueId || '',\n queueName: queueContext?.queueName || currentCall.queueName || '',\n queueNumber: queueContext?.queueNumber || currentCall.queueNumber || '',\n queuePosition: queueContext?.queuePosition || '',\n queueWaitingTime: queueContext?.queueWaitingTime || 0,\n }\n }\n\n const syncCurrentUserQueueCall = (conv: ConversationTypes | null) => {\n if (!conv) {\n currentUserQueueCallPhase.current = null\n return\n }\n\n const queueContext = getCurrentCallQueuePayload(conv)\n const payload = getQueuePayloadWithFallback(conv, queueContext)\n const hasQueueContext = Boolean(payload.queueId || payload.queueName || payload.queueNumber)\n\n if (!hasQueueContext) {\n currentUserQueueCallPhase.current = null\n return\n }\n\n if (!conv.connected) {\n const shouldDispatchWaiting =\n currentUserQueueCallPhase.current?.conversationId !== conv.id ||\n currentUserQueueCallPhase.current?.phase !== 'waiting'\n\n if (shouldDispatchWaiting) {\n dispatchCurrentUserQueueCallWaiting(payload)\n currentUserQueueCallPhase.current = {\n conversationId: conv.id,\n phase: 'waiting',\n }\n }\n\n return\n }\n\n const shouldDispatchConnected =\n currentUserQueueCallPhase.current?.conversationId !== conv.id ||\n currentUserQueueCallPhase.current?.phase !== 'connected'\n\n if (shouldDispatchConnected) {\n dispatchCurrentUserQueueCallConnected(payload)\n currentUserQueueCallPhase.current = {\n conversationId: conv.id,\n phase: 'connected',\n }\n }\n }\n\n const getActiveConversationForCurrentCall = (): ConversationTypes | null => {\n const { conversations } = store.getState().currentUser\n const { conversationId } = store.getState().currentCall\n let selectedConversation: ConversationTypes | null = null\n\n Object.values(conversations || {}).forEach((extensionConversations) => {\n Object.values(extensionConversations || {}).forEach((conversation) => {\n if (selectedConversation?.id && selectedConversation.id === conversationId) {\n return\n }\n\n if (conversationId && conversation.id === conversationId) {\n selectedConversation = conversation\n return\n }\n\n if (!selectedConversation) {\n selectedConversation = conversation\n return\n }\n\n if (conversation.connected && !selectedConversation.connected) {\n selectedConversation = conversation\n return\n }\n\n if (\n conversation.connected === selectedConversation.connected &&\n conversation.startTime > selectedConversation.startTime\n ) {\n selectedConversation = conversation\n }\n })\n })\n\n return selectedConversation\n }\n\n const shouldKeepCurrentAcceptedCall = (ownerExtension?: string) => {\n const { accepted, ownerExtension: currentOwnerExtension } = store.getState().currentCall\n\n return (\n accepted &&\n !!currentOwnerExtension &&\n !!ownerExtension &&\n currentOwnerExtension !== ownerExtension\n )\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n if (shouldKeepCurrentAcceptedCall(conv.owner)) {\n break\n }\n\n syncCurrentUserQueueCall(conv)\n\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n store.dispatch.island.setIslandView('call')\n }\n // Get updated user info to refresh open url param type\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo()\n .then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n eventDispatch('phone-island-user-informations-update', { ...userInfo })\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url)\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never')\n }\n }\n })\n .catch((error) => {\n console.error('Error getting current user info:', error)\n })\n .finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n if (openParamUrlType === 'ringing' && !urlOpened) {\n // Calculate throughTrunk based on counterpartNum\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n linkedId: conv.linkedId,\n throughQueue: conv.throughQueue,\n throughTrunk: calculatedThroughTrunk,\n direction: conv.direction,\n connected: conv.connected,\n })\n }\n break\n // @ts-ignore\n case 'busy':\n syncCurrentUserQueueCall(conv)\n\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n syncCurrentUserQueueCall(conv)\n\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n syncCurrentUserQueueCall(null)\n\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.listen.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n const currentApiMode = getApiMode(username)\n\n const socketOptions: any = {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n }\n\n // Only set path for new API mode\n if (currentApiMode === 'new') {\n socketOptions.path = '/api/ws'\n }\n\n socket.current = io('https://' + hostName, socketOptions)\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n // Clear the connection check interval on disconnect to avoid stale pings\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n connectionCheckInterval.current = null\n }\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n // Reset consecutive ping timeout counter on successful reconnection\n consecutivePingTimeouts.current = 0\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Connection check interval is now started in the authe_ok handler\n // to ensure it only runs after successful authentication\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n\n // Start connection check interval after successful authentication\n // Clear any existing interval first to avoid duplicates\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n }\n connectionCheckInterval.current = setInterval(() => {\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Ping success - reset consecutive timeout counter\n consecutivePingTimeouts.current = 0\n // Remove socket_down alert (async to avoid React error #300 with framer-motion)\n setTimeout(() => {\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n }, 0)\n },\n () => {\n // Ping timeout - increment counter\n consecutivePingTimeouts.current++\n console.debug(\n `Socket ping timeout (${consecutivePingTimeouts.current}/${STALE_CONNECTION_THRESHOLD}), connected: ${socket.current.connected}`,\n )\n\n // Set socket_down alert (async to avoid React error #300 with framer-motion)\n setTimeout(() => {\n // Check for stale connection: socket reports connected but pings keep timing out\n const isStaleConnection =\n socket.current.connected &&\n consecutivePingTimeouts.current >= STALE_CONNECTION_THRESHOLD\n\n if (!socket.current.connected || isStaleConnection) {\n // Check if there's an active call with ICE still connected\n // If so, skip showing alert - let ICE grace period mechanism handle it\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCallWithIce =\n (accepted || outgoing) &&\n (iceState === 'connected' || iceState === 'completed')\n\n if (hasActiveCallWithIce) {\n console.debug(\n 'Socket unreachable but active call with ICE connected - skipping socket_down alert',\n {\n iceState,\n accepted,\n outgoing,\n isStaleConnection,\n timestamp: new Date().toISOString(),\n },\n )\n return\n }\n\n if (isStaleConnection) {\n console.warn('Stale socket connection detected - forcing reconnection')\n // Force disconnect to trigger reconnection\n socket.current.disconnect()\n }\n\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n }\n }, 0)\n },\n 5 * 1000,\n ),\n )\n }, 5 * 1000)\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view, previewCallFromMobileOrNethlink } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n\n const extensionType: any = connectedExtension?.type\n\n // Get linkedId from conversations\n const { conversations } = store.getState().currentUser\n let linkedid: any = undefined\n let conversationWasConnected = false\n\n if (res.callerNum && conversations[res.callerNum]) {\n const extensionConversations = conversations[res.callerNum]\n const conversationKeys = Object.keys(extensionConversations)\n if (conversationKeys.length > 0) {\n let selectedConversation: any = null\n for (const key of conversationKeys) {\n const currentConversation = extensionConversations?.[key]\n if (!currentConversation) continue\n\n if (!selectedConversation) {\n selectedConversation = currentConversation\n continue\n }\n\n const selectedConnected = !!selectedConversation.connected\n const currentConnected = !!currentConversation.connected\n\n // Prefer connected conversations over non-connected ones\n if (currentConnected && !selectedConnected) {\n selectedConversation = currentConversation\n continue\n }\n\n const selectedStartTime = selectedConversation.startTime ?? 0\n const currentStartTime = currentConversation.startTime ?? 0\n\n // Among conversations with the same connected status, prefer the most recent one\n if (currentConnected === selectedConnected && currentStartTime > selectedStartTime) {\n selectedConversation = currentConversation\n }\n }\n\n linkedid = selectedConversation?.linkedId\n conversationWasConnected = selectedConversation?.connected || false\n }\n }\n // Check summary/transcription only for calls that were actually answered.\n if (linkedid && conversationWasConnected) {\n eventDispatch('phone-island-summary-call-check', { linkedid })\n }\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n (res.cause === 'normal_clearing' &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n previewCallFromMobileOrNethlink) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected' ||\n res?.cause === 'interworking'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(false)\n }, 500)\n // Only reset conference if there are no more participants or if user is not in a conference\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner and added participant refuses or hangs up with normal_clearing\n if (\n ((res.cause === 'normal_clearing' &&\n (extensionType === 'webrtc' || extensionType === 'nethlink')) ||\n res?.cause === 'call_rejected') &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n const { usersList, pendingUsers } = store.getState().conference\n // Check if there are still participants in the conference (both confirmed and pending)\n const hasConfirmedParticipants = usersList && Object.keys(usersList).length > 0\n const hasPendingParticipants = pendingUsers && Object.keys(pendingUsers).length > 0\n const hasParticipants = hasConfirmedParticipants || hasPendingParticipants\n\n if (!hasParticipants) {\n store.dispatch.conference.resetConference()\n } else {\n // If there are still participants, keep the waitingConference view\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n }\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n }\n if (res?.cause === 'user_busy') {\n // Get current user's extensions\n const { endpoints, username } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n const userExtensionIds = userExtensions.map((ext) => ext.id)\n\n // Get the current call state to understand if we're the caller or receiver\n const { incoming, accepted, transferring } = store.getState().currentCall\n\n // Check if there's an active conference\n const { isActive, conferenceStartedFrom } = store.getState().conference\n\n // When we RECEIVE a call on our extension, callerNum is the busy extension (our own)\n // When we CALL someone, channelExten is one of our extensions (the one we're calling from)\n const isReceivingCall =\n incoming && !!res.callerNum && userExtensionIds.includes(res.callerNum)\n\n // If we are already on an active call, suppress the busy popup unless it belongs\n // to a conference-owner flow or an attended transfer started by this user.\n const shouldShowOperatorBusy = !isReceivingCall && (!accepted || isActive || transferring)\n\n // Only show operator busy view if:\n // 1. We are NOT receiving an incoming call to our own extension\n if (shouldShowOperatorBusy) {\n // Set operator busy active with caller information\n store.dispatch.island.setOperatorBusyActive({\n callerNumber: res.callerNum || 'Unknown',\n })\n\n // Stop busy tone after 4 seconds\n setTimeout(() => {\n store.dispatch.player.stopAudioPlayer()\n }, 4000)\n\n setTimeout(() => {\n // Play busy tone\n store.dispatch.player.updateStartAudioPlayer({\n src: busyRingtone,\n loop: true,\n })\n store.dispatch.island.setIslandView('operatorBusy')\n }, 600)\n\n // If conference is active and we're the owner, return to conference after timeout\n if (isActive && conferenceStartedFrom === username) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 4000)\n }\n }\n }\n\n // Handle subscriber_absent - when added participant rejects the call\n if (res?.cause === 'subscriber_absent') {\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { username } = store.getState().currentUser\n\n // Only handle if conference is active and current user is the owner\n if (isActive && conferenceStartedFrom === username) {\n // Check if there are still participants in the conference (both confirmed and pending)\n const { usersList, pendingUsers } = store.getState().conference\n const hasConfirmedParticipants = usersList && Object.keys(usersList).length > 0\n const hasPendingParticipants = pendingUsers && Object.keys(pendingUsers).length > 0\n const hasParticipants = hasConfirmedParticipants || hasPendingParticipants\n\n if (hasParticipants) {\n // Return to waiting conference view to manage other participants\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n // Remove from pending users if exists\n if (pendingUsers && pendingUsers[res.callerNum]) {\n store.dispatch.conference.removePendingUser(res.callerNum)\n }\n } else {\n // No participants left, reset conference\n store.dispatch.conference.resetConference()\n }\n }\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Set the preview call flag\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n const userInformation = store.getState().currentUser\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Check if this is a mobile extension call for the current user\n let isMobileExtensionCall = false\n if (res?.username === username && !isEmpty(conv) && conv?.owner) {\n const matchingExtension = userInformation?.endpoints?.extension?.find(\n (ext: any) => ext.id === conv.owner,\n )\n if (matchingExtension && matchingExtension.type === 'mobile') {\n isMobileExtensionCall = true\n }\n }\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else if (!isMobileExtensionCall) {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n if (isMobileExtensionCall && res?.status === 'busy' && res?.username === username) {\n store.dispatch.island.toggleAvoidToShow(true)\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(true)\n }\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n dispatch.queue.updateQueue(res)\n\n const activeConversation = getActiveConversationForCurrentCall()\n\n if (activeConversation) {\n syncCurrentUserQueueCall(activeConversation)\n }\n\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n dispatch.queue.updateQueueMember(res)\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `parkingUpdate` is the socket event when a call is parked or unparked\n socket.current.on('parkingUpdate', (event) => {\n // Dispatch parking update event with the parking information\n dispatchParkingUpdate(event)\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n // `satellite/summary` is the socket event when summary is ready\n socket.current.on('satellite/summary', (data: any) => {\n if (data?.uniqueid) {\n eventDispatch('phone-island-summary-ready', {\n linkedid: data?.uniqueid,\n display_name: data?.display_name,\n display_number: data?.display_number,\n })\n }\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'videoCallStart':\n {\n const {\n currentCall: { incoming, outgoing, accepted },\n currentUser: { default_device },\n island: { isFromStreaming, view },\n } = store.getState()\n\n const isWebrtcDevice =\n default_device?.type === 'webrtc' || default_device?.type === 'nethlink'\n const hasCompatibleCallState = incoming || outgoing || accepted\n const canOpenVideoView =\n isWebrtcDevice && hasCompatibleCallState && !isFromStreaming && view !== 'video'\n\n if (canOpenVideoView) {\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n }\n }\n\n dispatchVideoCallStarted({\n initiator: 'remote',\n callUser: (data as VideoCallMessage).callUser,\n destUser: (data as VideoCallMessage).destUser,\n })\n break\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n\n // Handle satellite/transcription messages\n socket.current.on('satellite/transcription', (transcriptionData: any) => {\n // Dispatch the transcription event to external listeners\n eventDispatch('phone-island-conversation-transcription', transcriptionData)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('Socket reload requested')\n const { data } = store.getState().alerts\n const { forceReload } = store.getState().island\n\n // Check if socket is actually down using alerts (more reliable than socket.connected)\n const isSocketDown = data.socket_down?.active || false\n\n // Only reconnect if socket_down alert is active OR force reload is requested\n if (isSocketDown || forceReload) {\n console.info(\n forceReload\n ? 'Force reload requested, performing Socket reconnection'\n : 'Socket down detected (alert active), performing reconnection',\n )\n // Reset force reload flag\n if (forceReload) {\n store.dispatch.island.setForceReload(false)\n }\n // Clear the connection check interval to avoid stale ping timeouts during reconnection\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n connectionCheckInterval.current = null\n }\n // Disconnect and reconnect socket\n setTimeout(() => {\n socket.current.disconnect()\n socket.current.connect()\n // Execute the reloaded callback\n reloadedCallback()\n }, 100)\n } else {\n console.info('Socket already connected (no alert active), skipping reconnection')\n // Execute callback without reload\n reloadedCallback()\n }\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","consecutivePingTimeouts","currentUserQueueCallPhase","useEventListener","args","current","linkedid","uniqueid","emit","data","currentCall","updateCurrentCall","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","useEffect","socketOptions","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","syncCurrentUserQueueCall","queueContext","getCurrentCallQueueContext","store","getState","queue","getCurrentCallQueuePayload","payload","conversationId","linkedId","uniqueId","ownerExtension","owner","number","concat","getQueuePayloadWithFallback","Boolean","connected","_c","_d","phase","dispatchCurrentUserQueueCallConnected","_b","dispatchCurrentUserQueueCallWaiting","handleCurrentUserEvents","res","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","currentUser","endpoints_1","endpoints","username_1","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","accepted","currentOwnerExtension","shouldKeepCurrentAcceptedCall","undefined","checkIncomingUpdatePlay","displayName","getDisplayName","incomingSocket","setIslandView","getCurrentUserInfo","then","userInfo","updateCurrentUser","eventDispatch","__assign","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","openParamUrlType","urlOpened","calculatedThroughTrunk","isFromTrunk","setThroughTrunk","setUrlOpened","counterpartName","throughTrunk","direction","chDest","chSource","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","listen","upgrade","transports","reconnection","reconnectionDelay","getApiMode","path","io","websocket","update","on","debug","reason","clearInterval","includes","err","attempt","accessKeyId","token","setInterval","volatile","withTimeout","alerts","removeAlert","isStaleConnection","sipcall","webrtc","iceState","webrtcStuff","pc","iceConnectionState","timestamp","Date","toISOString","warn","disconnect","setAlert","updateEndpointMainPresence","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","_e","previewCallFromMobileOrNethlink","connectedExtension","callerNum","extensionType","conversations","conversationWasConnected","extensionConversations","conversationKeys","selectedConversation","conversationKeys_1","_i","key","currentConversation","selectedConnected","currentConnected","selectedStartTime","currentStartTime","cause","toggleAvoidToShow","setPreviewCallFromMobileOrNethlink","resetConference","viewType","_f","usersList","pendingUsers","hasConfirmedParticipants","hasPendingParticipants","_g","endpoints_2","username_2","userExtensionIds","map","_h","_j","isActive_1","conferenceStartedFrom_1","setOperatorBusyActive","callerNumber","updateStartAudioPlayer","src","busyRingtone","loop","_k","isActive_2","conferenceStartedFrom_2","username_3","_l","removePendingUser","extenConnected","updateExtension","deviceMap","userInformation","user","push","associatedExtensions","isMobileExtensionCall","isEmpty","matchingExtension","dispatchExtensions","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","updateQueue","activeConversation","forEach","conversation","dispatchQueueUpdate","updateQueueMember","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","event","dispatchParkingUpdate","link","urlType","dispatchUrlCall","display_name","display_number","message","isFromStreaming_2","toggleSideViewVisible","toggleTranscriptionViewVisible","dispatchVideoCallStarted","initiator","callUser","destUser","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","updatedConferenceUsers_1","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","transcriptionData","close","info","forceReload","socket_down","active","setForceReload","connect","React","createElement","Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2024 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { io } from 'socket.io-client'\nimport { getApiMode } from './RestAPI'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport { getCurrentUserInfo } from '../services/user'\nimport busyRingtone from '../static/busy_ringtone'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n dispatchCurrentUserQueueCallWaiting,\n dispatchCurrentUserQueueCallConnected,\n dispatchAlreadyLogin,\n dispatchServerReload,\n dispatchParkingUpdate,\n dispatchExtensions,\n dispatchUrlCall,\n dispatchDefaultDeviceUpdate,\n dispatchVideoCallStarted,\n} from '../events'\nimport { store } from '../store'\nimport { eventDispatch, useEventListener, withTimeout } from '../utils'\nimport type {\n ConversationTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n CurrentUserQueueCallEventTypes,\n} from '../types'\nimport { getTimestampInSeconds } from '../utils/genericFunctions/timestamp'\nimport { userTotallyFree } from '../lib/user/extensions'\nimport { isEmpty } from '../utils/genericFunctions/isEmpty'\nimport { isPhysical } from '../lib/user/default_device'\nimport { ScreenSharingMessage, VideoCallMessage } from './VideoView'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { isFromStreaming } from '../utils/streaming/isFromStreaming'\nimport { getStreamingSourceId } from '../utils/streaming/getStreamingSourceId'\nimport { subscribe } from '../services/user'\nimport { isFromTrunk } from '../lib/user/extensions'\nimport { getCurrentCallQueueContext } from '../lib/phone/queue'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n reload: boolean\n reloadedCallback: () => void\n uaType: string\n}\n\nexport const Socket: FC<SocketProps> = ({\n hostName,\n username,\n authToken,\n reload,\n reloadedCallback,\n children,\n uaType,\n}) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n const isUpdatingUserInfo = useRef(false)\n const consecutivePingTimeouts = useRef(0)\n const currentUserQueueCallPhase = useRef<{\n conversationId: string\n phase: 'waiting' | 'connected'\n } | null>(null)\n const STALE_CONNECTION_THRESHOLD = 3 // Force reconnect after 3 consecutive ping timeouts\n\n // Event listener for starting transcription\n useEventListener('phone-island-start-transcription', (args: any) => {\n if (socket.current) {\n const linkedid = args?.linkedid || args?.uniqueid || null\n if (!linkedid) {\n return\n }\n socket.current.emit('start_transcription', {\n linkedid,\n uniqueid: args?.uniqueid || linkedid,\n })\n }\n })\n\n // Event listener for stopping transcription\n useEventListener('phone-island-stop-transcription', (args: any) => {\n if (socket.current) {\n const linkedid = args?.linkedid || args?.uniqueid || null\n if (!linkedid) {\n return\n }\n socket.current.emit('stop_transcription', {\n linkedid,\n uniqueid: args?.uniqueid || linkedid,\n })\n }\n })\n\n useEventListener(\n 'phone-island-current-user-queue-call-waiting',\n (data: CurrentUserQueueCallEventTypes) => {\n dispatch.currentCall.updateCurrentCall({\n throughQueue: true,\n queueId: data?.queueId || '',\n queueName: data?.queueName || '',\n queueNumber: data?.queueNumber || '',\n queuePosition: data?.queuePosition || '',\n queueWaitingTime: data?.queueWaitingTime || 0,\n })\n },\n )\n\n useEventListener(\n 'phone-island-current-user-queue-call-connected',\n (data: CurrentUserQueueCallEventTypes) => {\n dispatch.currentCall.updateCurrentCall({\n throughQueue: true,\n queueId: data?.queueId || '',\n queueName: data?.queueName || '',\n queueNumber: data?.queueNumber || '',\n queuePosition: data?.queuePosition || '',\n queueWaitingTime: data?.queueWaitingTime || 0,\n })\n },\n )\n\n const checkDefaultDeviceConversationActive = (conv: any) => {\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n accepted: true,\n incoming: conv.direction === 'in' ? false : undefined,\n })\n eventDispatch('phone-island-call-answered', {})\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n store.dispatch.player.setAudioPlayerLoop(false)\n }\n\n useEffect(() => {\n /**\n * Helper function to handle streaming source detection and subscription\n */\n const handleStreamingSource = (conv: ConversationTypes) => {\n // Check if the call is from a streaming source\n if (conv.counterpartNum && isFromStreaming(conv.counterpartNum)) {\n // Set isFromStreaming flag to true\n dispatch.island.setIsFromStreaming(true)\n\n // Store the streaming source number in the currentCall state for future reference\n dispatch.currentCall.updateCurrentCall({\n streamingSourceNumber: conv.counterpartNum,\n })\n\n // Find the source ID and subscribe to streaming updates\n const sourceId = getStreamingSourceId(conv.counterpartNum)\n if (sourceId) {\n // Subscribe to streaming updates\n subscribe({ id: sourceId }).catch((error) =>\n console.error('Error subscribing to streaming source:', error),\n )\n }\n }\n }\n\n const getCurrentCallQueuePayload = (conv: ConversationTypes) => {\n return getCurrentCallQueueContext(conv, store.getState().queue)\n }\n\n const getQueuePayloadWithFallback = (\n conv: ConversationTypes,\n queueContext: ReturnType<typeof getCurrentCallQueuePayload>,\n ) => {\n const currentCall = store.getState().currentCall\n const queueId = queueContext?.queueId || currentCall.queueId || ''\n const queueName = queueContext?.queueName || currentCall.queueName || ''\n const queueNumber = queueContext?.queueNumber || currentCall.queueNumber || ''\n\n return {\n conversationId: conv.id,\n linkedId: conv.linkedId,\n uniqueId: conv.uniqueId,\n ownerExtension: conv.owner,\n number: `${conv.counterpartNum || ''}`,\n queueId,\n queueName,\n queueNumber,\n queuePosition: queueContext?.queuePosition || '',\n queueWaitingTime: queueContext?.queueWaitingTime || 0,\n }\n }\n\n const syncCurrentUserQueueCall = (conv: ConversationTypes | null) => {\n if (!conv) {\n currentUserQueueCallPhase.current = null\n return\n }\n\n const queueContext = getCurrentCallQueuePayload(conv)\n const payload = getQueuePayloadWithFallback(conv, queueContext)\n const hasQueueContext = Boolean(payload.queueId || payload.queueName || payload.queueNumber)\n\n if (!hasQueueContext) {\n currentUserQueueCallPhase.current = null\n return\n }\n\n if (!conv.connected) {\n const shouldDispatchWaiting =\n currentUserQueueCallPhase.current?.conversationId !== conv.id ||\n currentUserQueueCallPhase.current?.phase !== 'waiting'\n\n if (shouldDispatchWaiting) {\n dispatchCurrentUserQueueCallWaiting(payload)\n currentUserQueueCallPhase.current = {\n conversationId: conv.id,\n phase: 'waiting',\n }\n }\n\n return\n }\n\n const shouldDispatchConnected =\n currentUserQueueCallPhase.current?.conversationId !== conv.id ||\n currentUserQueueCallPhase.current?.phase !== 'connected'\n\n if (shouldDispatchConnected) {\n dispatchCurrentUserQueueCallConnected(payload)\n currentUserQueueCallPhase.current = {\n conversationId: conv.id,\n phase: 'connected',\n }\n }\n }\n\n const getActiveConversationForCurrentCall = (): ConversationTypes | null => {\n const { conversations } = store.getState().currentUser\n const { conversationId } = store.getState().currentCall\n let selectedConversation: ConversationTypes | null = null\n\n Object.values(conversations || {}).forEach((extensionConversations) => {\n Object.values(extensionConversations || {}).forEach((conversation) => {\n if (selectedConversation?.id && selectedConversation.id === conversationId) {\n return\n }\n\n if (conversationId && conversation.id === conversationId) {\n selectedConversation = conversation\n return\n }\n\n if (!selectedConversation) {\n selectedConversation = conversation\n return\n }\n\n if (conversation.connected && !selectedConversation.connected) {\n selectedConversation = conversation\n return\n }\n\n if (\n conversation.connected === selectedConversation.connected &&\n conversation.startTime > selectedConversation.startTime\n ) {\n selectedConversation = conversation\n }\n })\n })\n\n return selectedConversation\n }\n\n const shouldKeepCurrentAcceptedCall = (ownerExtension?: string) => {\n const { accepted, ownerExtension: currentOwnerExtension } = store.getState().currentCall\n\n return (\n accepted &&\n !!currentOwnerExtension &&\n !!ownerExtension &&\n currentOwnerExtension !== ownerExtension\n )\n }\n\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: ExtensionTypes, conv: ConversationTypes) => {\n // Handle transferring data\n const { transferring, transferSwitching, transferCalls } = store.getState().currentCall\n\n const view = store.getState().island.view\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (res.status) {\n const { extensions } = store.getState().users\n const { default_device } = store.getState().currentUser\n const { endpoints, username } = store.getState().currentUser\n const { incoming, outgoing } = store.getState().currentCall\n\n const hasOnlineNethlink = () => {\n if (!extensions || !username) return false\n\n // Get all extensions for current user\n const userExtensions: any = Object.values(extensions).filter(\n (ext) => ext?.username === username,\n )\n\n // Check if any extension is nethlink type and online\n return userExtensions?.some((ext) => {\n const endpointExtension = endpoints?.extension.find(\n (endpoint) => endpoint.id === ext?.exten,\n )\n return endpointExtension?.type === 'nethlink' && ext?.status !== 'offline'\n })\n }\n switch (res.status) {\n case 'ringing':\n if (shouldKeepCurrentAcceptedCall(conv.owner)) {\n break\n }\n\n const ringingQueueContext = getCurrentCallQueuePayload(conv)\n const ringingQueuePayload = getQueuePayloadWithFallback(conv, ringingQueueContext)\n\n syncCurrentUserQueueCall(conv)\n\n // Handle streaming source for incoming calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n dispatch.currentCall.checkIncomingUpdatePlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n incoming: true,\n throughQueue: Boolean(\n ringingQueuePayload.queueId ||\n ringingQueuePayload.queueName ||\n ringingQueuePayload.queueNumber,\n ),\n queueId: ringingQueuePayload.queueId,\n queueName: ringingQueuePayload.queueName,\n queueNumber: ringingQueuePayload.queueNumber,\n queuePosition: ringingQueuePayload.queuePosition,\n queueWaitingTime: ringingQueuePayload.queueWaitingTime,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n ownerExtension: conv.owner,\n })\n store.dispatch.island.setIslandView('call')\n }\n // Get updated user info to refresh open url param type\n if (!isUpdatingUserInfo.current) {\n isUpdatingUserInfo.current = true\n getCurrentUserInfo()\n .then((userInfo) => {\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n eventDispatch('phone-island-user-informations-update', { ...userInfo })\n if (userInfo.settings && userInfo.settings.open_param_url) {\n dispatch.paramUrl.setOpenParamUrlType(userInfo.settings.open_param_url)\n } else {\n dispatch.paramUrl.setOpenParamUrlType('never')\n }\n }\n })\n .catch((error) => {\n console.error('Error getting current user info:', error)\n })\n .finally(() => {\n setTimeout(() => {\n isUpdatingUserInfo.current = false\n }, 100)\n })\n }\n const { openParamUrlType } = store.getState().paramUrl\n const { urlOpened } = store.getState().island\n if (openParamUrlType === 'ringing' && !urlOpened) {\n // Calculate throughTrunk based on counterpartNum\n const calculatedThroughTrunk = isFromTrunk(conv.counterpartNum)\n\n // Update throughTrunk in paramUrl store\n store.dispatch.paramUrl.setThroughTrunk(calculatedThroughTrunk)\n\n store.dispatch.island.setUrlOpened(false)\n eventDispatch('phone-island-url-parameter-opened', {\n counterpartNum: conv.counterpartNum,\n counterpartName: getDisplayName(conv),\n owner: conv.owner,\n uniqueId: conv.uniqueId,\n linkedId: conv.linkedId,\n throughQueue: conv.throughQueue,\n throughTrunk: calculatedThroughTrunk,\n direction: conv.direction,\n connected: conv.connected,\n })\n }\n break\n // @ts-ignore\n case 'busy':\n syncCurrentUserQueueCall(conv)\n\n // Handle streaming source for outgoing calls\n handleStreamingSource(conv)\n\n if (\n (uaType === 'mobile' && hasOnlineNethlink()) ||\n (uaType === 'desktop' &&\n (default_device?.type === 'webrtc' ||\n (default_device?.type === undefined && !hasOnlineNethlink()) ||\n (!hasOnlineNethlink() && default_device?.type === 'physical')))\n ) {\n if (conv && conv.connected) {\n // Current call accepted and update connected call\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n ownerExtension: conv.owner,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n chDest: conv?.chDest || {},\n chSource: conv?.chSource || {},\n })\n // Update the current call informations for physical devices\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedSocket: true,\n })\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'transferred',\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${getTimestampInSeconds()}`,\n })\n\n // Check if this is a streaming call that was accepted\n const { isFromStreaming } = store.getState().island\n if (isFromStreaming && conv.direction === 'out') {\n // Set view to streamingAnswer for outgoing streaming calls when accepted\n setTimeout(() => {\n dispatch.island.setIslandView('streamingAnswer')\n }, 200)\n }\n\n if (isPhysical()) {\n checkDefaultDeviceConversationActive(conv)\n }\n if (view === 'call' && transferring) {\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n }\n }\n // Delete transfer calls if there are more than one ( in case of call switch after transfer)\n if (transferCalls.length > 1) {\n dispatch.currentCall.deleteTransferCalls()\n }\n // Handle not connected calls\n else if (conv && !conv.connected) {\n if (transferring && !transferSwitching) {\n // Handle hangup during transfer\n const inTransferCalls = transferCalls.find(\n (item) => item.number === conv.counterpartNum,\n )\n if (!conv.connected && inTransferCalls) {\n // Update transferring data for the current call\n dispatch.currentCall.updateCurrentCall({\n transferring: false,\n })\n eventDispatch('phone-island-call-transfer-failed', {})\n // Reset transfer switching\n // TODO - It needs to enhance how conversation connections (conv.connected) are updated server side\n // TODO - The transfer end is not handled when the an user hangups or after call switch\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }\n if (conv?.counterpartName === 'REC') {\n dispatch.physicalRecorder.setRecordingTempVariable(true)\n }\n }\n // Handle outgoing call\n if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n outgoing: conv?.counterpartName === 'REC' ? false : true,\n displayName: getDisplayName(conv),\n number: `${conv?.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv?.counterpartNum] &&\n extensions[conv?.counterpartNum].username\n }` || '',\n })\n }\n }\n break\n\n case 'onhold':\n syncCurrentUserQueueCall(conv)\n\n // The new conversation during transferring\n const { counterpartName, counterpartNum, startTime } = conv\n if (\n transferring &&\n counterpartNum &&\n counterpartName &&\n counterpartName !== '<unknown>'\n ) {\n // Add call to transfer calls\n dispatch.currentCall.addTransferCalls({\n type: 'destination',\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${getTimestampInSeconds()}`,\n })\n // Set the current call informations\n dispatch.currentCall.updateCurrentCall({\n displayName: getDisplayName(conv),\n number: counterpartNum,\n startTime: `${startTime / 1000}`,\n conversationId: conv.id,\n })\n // Set the view of the island to call\n dispatch.island.setIslandView('call')\n }\n break\n case 'busy_ringing':\n eventDispatch('phone-island-call-ringing', {})\n break\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n if (res.status == 'online' && userTotallyFree()) {\n syncCurrentUserQueueCall(null)\n\n // Stop ringing sounds\n dispatch.player.stopAudioPlayer()\n // Reset current call info\n dispatch.currentCall.reset()\n dispatch.listen.reset()\n dispatch.physicalRecorder.setRecordingTempVariable(false)\n // Reset isFromStreaming flag\n dispatch.island.setIsFromStreaming(false)\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n const currentApiMode = getApiMode(username)\n\n const socketOptions: any = {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n }\n\n // Only set path for new API mode\n if (currentApiMode === 'new') {\n socketOptions.path = '/api/ws'\n }\n\n socket.current = io('https://' + hostName, socketOptions)\n\n // save websocket to store\n dispatch.websocket.update({ socket: socket.current })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n eventDispatch('phone-island-socket-connected', {})\n })\n socket.current.on('disconnect', (reason) => {\n console.debug(`Socket disconnect - reason: ${reason}`)\n // Clear the connection check interval on disconnect to avoid stale pings\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n connectionCheckInterval.current = null\n }\n if (reason.includes('server disconnect')) {\n eventDispatch('phone-island-server-disconnected', {})\n } else {\n eventDispatch('phone-island-socket-disconnected', {})\n }\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n // Reset consecutive ping timeout counter on successful reconnection\n consecutivePingTimeouts.current = 0\n eventDispatch('phone-island-socket-reconnected', {})\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Connection check interval is now started in the authe_ok handler\n // to ensure it only runs after successful authentication\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.debug('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: uaType,\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.debug('Socket authentication success!')\n eventDispatch('phone-island-socket-authorized', {})\n\n // Start connection check interval after successful authentication\n // Clear any existing interval first to avoid duplicates\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n }\n connectionCheckInterval.current = setInterval(() => {\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Ping success - reset consecutive timeout counter\n consecutivePingTimeouts.current = 0\n // Remove socket_down alert (async to avoid React error #300 with framer-motion)\n setTimeout(() => {\n dispatch.alerts.removeAlert('socket_down')\n eventDispatch('phone-island-alert-removed', {\n type: 'socket_down',\n })\n eventDispatch('phone-island-socket-disconnected-popup-close', {})\n }, 0)\n },\n () => {\n // Ping timeout - increment counter\n consecutivePingTimeouts.current++\n console.debug(\n `Socket ping timeout (${consecutivePingTimeouts.current}/${STALE_CONNECTION_THRESHOLD}), connected: ${socket.current.connected}`,\n )\n\n // Set socket_down alert (async to avoid React error #300 with framer-motion)\n setTimeout(() => {\n // Check for stale connection: socket reports connected but pings keep timing out\n const isStaleConnection =\n socket.current.connected &&\n consecutivePingTimeouts.current >= STALE_CONNECTION_THRESHOLD\n\n if (!socket.current.connected || isStaleConnection) {\n // Check if there's an active call with ICE still connected\n // If so, skip showing alert - let ICE grace period mechanism handle it\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n const { accepted, outgoing } = store.getState().currentCall\n const iceState = sipcall?.webrtcStuff?.pc?.iceConnectionState\n const hasActiveCallWithIce =\n (accepted || outgoing) &&\n (iceState === 'connected' || iceState === 'completed')\n\n if (hasActiveCallWithIce) {\n console.debug(\n 'Socket unreachable but active call with ICE connected - skipping socket_down alert',\n {\n iceState,\n accepted,\n outgoing,\n isStaleConnection,\n timestamp: new Date().toISOString(),\n },\n )\n return\n }\n\n if (isStaleConnection) {\n console.warn('Stale socket connection detected - forcing reconnection')\n // Force disconnect to trigger reconnection\n socket.current.disconnect()\n }\n\n dispatch.alerts.setAlert('socket_down')\n eventDispatch('phone-island-socket-disconnected-popup-open', {})\n console.error('Socket is unreachable!')\n }\n }, 0)\n },\n 5 * 1000,\n ),\n )\n }, 5 * 1000)\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenHangup', (res: any) => {\n const { endpoints, username } = store.getState().currentUser\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { view, previewCallFromMobileOrNethlink } = store.getState().island\n\n // Get user extensions\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type based on callerNum\n const connectedExtension = userExtensions.find((ext) => ext.id === res.callerNum)\n\n const extensionType: any = connectedExtension?.type\n\n // Get linkedId from conversations\n const { conversations } = store.getState().currentUser\n let linkedid: any = undefined\n let conversationWasConnected = false\n\n if (res.callerNum && conversations[res.callerNum]) {\n const extensionConversations = conversations[res.callerNum]\n const conversationKeys = Object.keys(extensionConversations)\n if (conversationKeys.length > 0) {\n let selectedConversation: any = null\n for (const key of conversationKeys) {\n const currentConversation = extensionConversations?.[key]\n if (!currentConversation) continue\n\n if (!selectedConversation) {\n selectedConversation = currentConversation\n continue\n }\n\n const selectedConnected = !!selectedConversation.connected\n const currentConnected = !!currentConversation.connected\n\n // Prefer connected conversations over non-connected ones\n if (currentConnected && !selectedConnected) {\n selectedConversation = currentConversation\n continue\n }\n\n const selectedStartTime = selectedConversation.startTime ?? 0\n const currentStartTime = currentConversation.startTime ?? 0\n\n // Among conversations with the same connected status, prefer the most recent one\n if (currentConnected === selectedConnected && currentStartTime > selectedStartTime) {\n selectedConversation = currentConversation\n }\n }\n\n linkedid = selectedConversation?.linkedId\n conversationWasConnected = selectedConversation?.connected || false\n }\n }\n // Check summary/transcription only for calls that were actually answered.\n if (linkedid && conversationWasConnected) {\n eventDispatch('phone-island-summary-call-check', { linkedid })\n }\n\n // If cause is normal_clearing and extension is physical or mobile\n // Clean phone-island visibility also after user_busy ( useful for physical devices )\n if (\n (res.cause === 'normal_clearing' &&\n (extensionType === 'physical' || extensionType === 'mobile')) ||\n (res.cause === 'normal_clearing' &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n previewCallFromMobileOrNethlink) ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected' ||\n res?.cause === 'interworking'\n ) {\n // Reset phone island visibility after 2 seconds to avoid glitches\n setTimeout(() => {\n store.dispatch.island.toggleAvoidToShow(false)\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(false)\n }, 500)\n // Only reset conference if there are no more participants or if user is not in a conference\n if (isActive && conferenceStartedFrom !== username) {\n store.dispatch.conference.resetConference()\n }\n } else if (\n res?.cause === 'normal_circuit_congestion' &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n } else if (\n (res.cause === 'normal_clearing' ||\n res?.cause === 'user_busy' ||\n res?.cause === 'not_defined' ||\n res?.cause === 'call_rejected') &&\n (extensionType === 'webrtc' || extensionType === 'nethlink') &&\n isActive &&\n conferenceStartedFrom !== username\n ) {\n store.dispatch.conference.resetConference()\n }\n // if conference owner and added participant refuses or hangs up with normal_clearing\n if (\n ((res.cause === 'normal_clearing' &&\n (extensionType === 'webrtc' || extensionType === 'nethlink')) ||\n res?.cause === 'call_rejected') &&\n isActive &&\n conferenceStartedFrom === username\n ) {\n const { usersList, pendingUsers } = store.getState().conference\n // Check if there are still participants in the conference (both confirmed and pending)\n const hasConfirmedParticipants = usersList && Object.keys(usersList).length > 0\n const hasPendingParticipants = pendingUsers && Object.keys(pendingUsers).length > 0\n const hasParticipants = hasConfirmedParticipants || hasPendingParticipants\n\n if (!hasParticipants) {\n store.dispatch.conference.resetConference()\n } else {\n // If there are still participants, keep the waitingConference view\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n }\n }\n // if conference owner call the call with the added user inside conference\n if (\n res?.cause === 'interworking' &&\n isActive &&\n conferenceStartedFrom === username &&\n view !== 'waitingConference'\n ) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n }\n if (res?.cause === 'user_busy') {\n // Get current user's extensions\n const { endpoints, username } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n const userExtensionIds = userExtensions.map((ext) => ext.id)\n\n // Get the current call state to understand if we're the caller or receiver\n const { incoming, accepted, transferring } = store.getState().currentCall\n\n // Check if there's an active conference\n const { isActive, conferenceStartedFrom } = store.getState().conference\n\n // When we RECEIVE a call on our extension, callerNum is the busy extension (our own)\n // When we CALL someone, channelExten is one of our extensions (the one we're calling from)\n const isReceivingCall =\n incoming && !!res.callerNum && userExtensionIds.includes(res.callerNum)\n\n // If we are already on an active call, suppress the busy popup unless it belongs\n // to a conference-owner flow or an attended transfer started by this user.\n const shouldShowOperatorBusy = !isReceivingCall && (!accepted || isActive || transferring)\n\n // Only show operator busy view if:\n // 1. We are NOT receiving an incoming call to our own extension\n if (shouldShowOperatorBusy) {\n // Set operator busy active with caller information\n store.dispatch.island.setOperatorBusyActive({\n callerNumber: res.callerNum || 'Unknown',\n })\n\n // Stop busy tone after 4 seconds\n setTimeout(() => {\n store.dispatch.player.stopAudioPlayer()\n }, 4000)\n\n setTimeout(() => {\n // Play busy tone\n store.dispatch.player.updateStartAudioPlayer({\n src: busyRingtone,\n loop: true,\n })\n store.dispatch.island.setIslandView('operatorBusy')\n }, 600)\n\n // If conference is active and we're the owner, return to conference after timeout\n if (isActive && conferenceStartedFrom === username) {\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 4000)\n }\n }\n }\n\n // Handle subscriber_absent - when added participant rejects the call\n if (res?.cause === 'subscriber_absent') {\n const { isActive, conferenceStartedFrom } = store.getState().conference\n const { username } = store.getState().currentUser\n\n // Only handle if conference is active and current user is the owner\n if (isActive && conferenceStartedFrom === username) {\n // Check if there are still participants in the conference (both confirmed and pending)\n const { usersList, pendingUsers } = store.getState().conference\n const hasConfirmedParticipants = usersList && Object.keys(usersList).length > 0\n const hasPendingParticipants = pendingUsers && Object.keys(pendingUsers).length > 0\n const hasParticipants = hasConfirmedParticipants || hasPendingParticipants\n\n if (hasParticipants) {\n // Return to waiting conference view to manage other participants\n setTimeout(() => {\n eventDispatch('phone-island-view-changed', { viewType: 'waitingConference' })\n }, 800)\n // Remove from pending users if exists\n if (pendingUsers && pendingUsers[res.callerNum]) {\n store.dispatch.conference.removePendingUser(res.callerNum)\n }\n } else {\n // No participants left, reset conference\n store.dispatch.conference.resetConference()\n }\n }\n }\n })\n\n // Avoid to show phone island if call is connected with other extension\n socket.current.on('extenConnected', (res: { extenConnected: string }) => {\n // Get the current user's extensions\n\n const { default_device, endpoints } = store.getState().currentUser\n const userExtensions = endpoints?.extension || []\n\n // Find the extension type\n const connectedExtension = userExtensions.find((ext) => ext.id === res.extenConnected)\n const extensionType: any = connectedExtension?.type\n\n // Reset only if the extension type is not webrtc or nethlink\n // ( avoid to not show phone island if default is physical and extensionType is physical)\n if (\n ((default_device?.type === 'webrtc' || default_device?.type === 'nethlink') &&\n extensionType &&\n (extensionType === 'mobile' || extensionType === 'physical')) ||\n (default_device?.type === 'physical' && extensionType && extensionType !== 'physical')\n ) {\n // Avoid to show phone island in case of answer from physical or mobile device\n store.dispatch.island.toggleAvoidToShow(true)\n // Set the preview call flag\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(true)\n // Launch an event to advert the user that the call it's answered from another device\n eventDispatch('phone-island-call-answered', { extensionType })\n }\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n\n //retrieve all extensions from store\n const { extensions }: any = store.getState().users\n const deviceMap: any = {}\n\n const userInformation = store.getState().currentUser\n // Create a map of extensions for each user\n for (const key in extensions) {\n const user: any = extensions[key].username\n const ext: any = extensions[key].exten\n\n if (!deviceMap[user]) {\n deviceMap[user] = []\n }\n\n deviceMap[user].push(ext)\n }\n\n const associatedExtensions: any = deviceMap[res.username]\n\n // Initialize conversation\n let conv = res.conversations[Object.keys(res.conversations)[0]] || {}\n\n // Check if this is a mobile extension call for the current user\n let isMobileExtensionCall = false\n if (res?.username === username && !isEmpty(conv) && conv?.owner) {\n const matchingExtension = userInformation?.endpoints?.extension?.find(\n (ext: any) => ext.id === conv.owner,\n )\n if (matchingExtension && matchingExtension.type === 'mobile') {\n isMobileExtensionCall = true\n }\n }\n\n // Update all extensions and send the dispatch event\n dispatchExtensions(res)\n\n // second step update conversation\n\n // Check if conversation is empty\n if (isEmpty(conv)) {\n // Check if there is at least one conversation not empty\n const hasNonEmptyConversation = associatedExtensions?.some((ext: any) => {\n const extConversations = extensions[ext]?.conversations\n\n if (!isEmpty(extConversations)) {\n // not empty conversation found\n return true\n }\n\n return false\n })\n\n if (!hasNonEmptyConversation) {\n // Conversation is empty and there is no conversation for the user\n dispatchConversations(res)\n }\n } else if (!isMobileExtensionCall) {\n // Dispatch conversation event\n dispatchConversations(res)\n }\n\n if (isMobileExtensionCall && res?.status === 'busy' && res?.username === username) {\n store.dispatch.island.toggleAvoidToShow(true)\n store.dispatch.island.setPreviewCallFromMobileOrNethlink(true)\n }\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n // Update the conversations of the user\n dispatch.currentUser.updateConversations(res)\n }\n })\n\n // `queueUpdate` is the socket event when the data of a queue updates\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n dispatch.queue.updateQueue(res)\n\n const activeConversation = getActiveConversationForCurrentCall()\n\n if (activeConversation) {\n syncCurrentUserQueueCall(activeConversation)\n }\n\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n // `queueMemberUpdate` is the socket event when the data of a queue member changes\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n dispatch.queue.updateQueueMember(res)\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n\n // `takeOver` is the socket event when the user does login from another new window\n socket.current.on('takeOver', () => {\n // Dispatch takeOver event\n dispatchAlreadyLogin()\n })\n\n // `serverReload` is the socket event when server is reloaded\n socket.current.on('serverReloaded', () => {\n // Dispatch serverReload event\n dispatchServerReload()\n })\n\n // `parkingUpdate` is the socket event when a call is parked or unparked\n socket.current.on('parkingUpdate', (event) => {\n // Dispatch parking update event with the parking information\n dispatchParkingUpdate(event)\n })\n\n // `actionNethLink` is the socket event when user make a call or a action from NethLink and has a physical device\n socket.current.on('actionNethLink', (link, urlType) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchUrlCall(link, urlType)\n })\n\n // `satellite/summary` is the socket event when summary is ready\n socket.current.on('satellite/summary', (data: any) => {\n if (data?.uniqueid) {\n eventDispatch('phone-island-summary-ready', {\n linkedid: data?.uniqueid,\n display_name: data?.display_name,\n display_number: data?.display_number,\n })\n }\n })\n\n socket.current.on('message', (data: any) => {\n switch (data.message) {\n case 'videoCallStart':\n {\n const {\n currentCall: { incoming, outgoing, accepted },\n currentUser: { default_device },\n island: { isFromStreaming, view },\n } = store.getState()\n\n const isWebrtcDevice =\n default_device?.type === 'webrtc' || default_device?.type === 'nethlink'\n const hasCompatibleCallState = incoming || outgoing || accepted\n const canOpenVideoView =\n isWebrtcDevice && hasCompatibleCallState && !isFromStreaming && view !== 'video'\n\n if (canOpenVideoView) {\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n }\n }\n\n dispatchVideoCallStarted({\n initiator: 'remote',\n callUser: (data as VideoCallMessage).callUser,\n destUser: (data as VideoCallMessage).destUser,\n })\n break\n case 'screenSharingStart':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isJoiningScreenShare: true,\n room: (data as ScreenSharingMessage).roomId,\n })\n break\n case 'screenSharingStop':\n dispatch.island.toggleSideViewVisible(false)\n dispatch.island.toggleTranscriptionViewVisible(false)\n dispatch.island.setIslandView('video')\n\n dispatch.screenShare.update({\n isLeavingScreenShare: true,\n })\n break\n default:\n console.warn('Socket: unknown message type ', data.message)\n }\n })\n\n // `updateDefaultDevice` is the socket event when user change the default device\n socket.current.on('updateDefaultDevice', (extension: string) => {\n // Dispatch phone island physical call event with the link and the urlType\n dispatchDefaultDeviceUpdate(extension)\n // Update the internal store\n const { extensions } = store.getState().users\n const { endpoints } = store.getState().currentUser\n if (!extensions || !endpoints) return\n\n const extensionInformations: any = Object.values(extensions).filter(\n (ext) => ext?.exten === extension,\n )\n if (extensionInformations.length === 0) return\n\n let objectComplete = extensionInformations[0]\n const endpointExtension = endpoints.extension.find(\n (endpoint) => endpoint.id === objectComplete.exten,\n )\n if (endpointExtension) {\n objectComplete = { ...objectComplete, type: endpointExtension.type }\n }\n\n store.dispatch.currentUser.updateCurrentDefaultDevice(objectComplete)\n //make sure to check the media permissions\n checkMediaPermissions()\n })\n\n socket.current.on('confBridgeUpdate', (res: any) => {\n if (res && res?.users) {\n // Get User informations\n const conferenceId = res?.id\n const conferenceUsers = res?.users\n\n // Get current users list to preserve mute status\n const { usersList } = store.getState().conference\n\n // Create a copy of the new conference users while preserving mute status\n const updatedConferenceUsers = { ...conferenceUsers }\n\n // Preserve mute status for existing users\n if (usersList) {\n Object.keys(updatedConferenceUsers).forEach((userId) => {\n if (usersList[userId]) {\n // Keep the existing mute status instead of using the server's value\n updatedConferenceUsers[userId] = {\n ...updatedConferenceUsers[userId],\n muted: usersList[userId].muted,\n }\n }\n })\n }\n\n store.dispatch.conference.updateConferenceUsersList(updatedConferenceUsers)\n store.dispatch.conference.updateConferenceId(conferenceId)\n }\n })\n\n socket.current.on('confBridgeEnd', (res: any) => {\n if (res && res?.id) {\n // Reset the conference store when conference ends\n store.dispatch.conference.resetConference()\n eventDispatch('phone-island-conference-finished', {})\n }\n })\n\n socket.current.on('callWebrtc', (res: any) => {\n // On call event from socket dispatch the call start event\n eventDispatch('phone-island-call-start', { number: res })\n })\n\n socket.current.on('newVoiceMessageCounter', (res: any) => {\n eventDispatch('phone-island-voicemail-received', { voicemailInfo: res })\n })\n\n socket.current.on('streamingSourceUpdate', (res: any) => {\n eventDispatch('phone-island-streaming-information-received', { res })\n const streamingData = res.streaming || (res.res && res.res.streaming)\n\n if (streamingData) {\n const { source, image } = streamingData\n if (source && image) {\n const { isFromStreaming } = store.getState().island\n const { streamingSourceNumber } = store.getState().currentCall\n const sourceId = getStreamingSourceId(streamingSourceNumber)\n\n dispatch.streaming.updateSourceImage({\n source: source,\n image: image,\n })\n }\n }\n })\n\n // Handle satellite/transcription messages\n socket.current.on('satellite/transcription', (transcriptionData: any) => {\n // Dispatch the transcription event to external listeners\n eventDispatch('phone-island-conversation-transcription', transcriptionData)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [hostName, username, authToken, uaType, dispatch])\n\n // Manage reload events\n useEffect(() => {\n if (reload) {\n console.info('Socket reload requested')\n const { data } = store.getState().alerts\n const { forceReload } = store.getState().island\n\n // Check if socket is actually down using alerts (more reliable than socket.connected)\n const isSocketDown = data.socket_down?.active || false\n\n // Only reconnect if socket_down alert is active OR force reload is requested\n if (isSocketDown || forceReload) {\n console.info(\n forceReload\n ? 'Force reload requested, performing Socket reconnection'\n : 'Socket down detected (alert active), performing reconnection',\n )\n // Reset force reload flag\n if (forceReload) {\n store.dispatch.island.setForceReload(false)\n }\n // Clear the connection check interval to avoid stale ping timeouts during reconnection\n if (connectionCheckInterval.current) {\n clearInterval(connectionCheckInterval.current)\n connectionCheckInterval.current = null\n }\n // Disconnect and reconnect socket\n setTimeout(() => {\n socket.current.disconnect()\n socket.current.connect()\n // Execute the reloaded callback\n reloadedCallback()\n }, 100)\n } else {\n console.info('Socket already connected (no alert active), skipping reconnection')\n // Execute callback without reload\n reloadedCallback()\n }\n }\n }, [reload])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","reload","reloadedCallback","children","uaType","dispatch","useDispatch","connectionCheckInterval","useRef","socket","isUpdatingUserInfo","consecutivePingTimeouts","currentUserQueueCallPhase","useEventListener","args","current","linkedid","uniqueid","emit","data","currentCall","updateCurrentCall","throughQueue","queueId","queueName","queueNumber","queuePosition","queueWaitingTime","useEffect","socketOptions","handleStreamingSource","conv","counterpartNum","isFromStreaming","island","setIsFromStreaming","streamingSourceNumber","sourceId","getStreamingSourceId","subscribe","id","catch","error","console","getCurrentCallQueuePayload","getCurrentCallQueueContext","store","getState","queue","getQueuePayloadWithFallback","queueContext","conversationId","linkedId","uniqueId","ownerExtension","owner","number","concat","syncCurrentUserQueueCall","payload","Boolean","connected","_c","_d","phase","dispatchCurrentUserQueueCallConnected","_b","dispatchCurrentUserQueueCallWaiting","handleCurrentUserEvents","res","transferring","transferSwitching","transferCalls","view","Object","keys","length","status","extensions_1","users","extensions","default_device","currentUser","endpoints_1","endpoints","username_1","incoming","hasOnlineNethlink","userExtensions","values","filter","ext","some","endpointExtension","extension","find","endpoint","exten","type","accepted","currentOwnerExtension","shouldKeepCurrentAcceptedCall","ringingQueueContext","ringingQueuePayload","undefined","checkIncomingUpdatePlay","displayName","getDisplayName","incomingSocket","setIslandView","getCurrentUserInfo","then","userInfo","updateCurrentUser","eventDispatch","__assign","settings","open_param_url","paramUrl","setOpenParamUrlType","finally","setTimeout","openParamUrlType","urlOpened","calculatedThroughTrunk","isFromTrunk","setThroughTrunk","setUrlOpened","counterpartName","throughTrunk","direction","chDest","chSource","checkAcceptedUpdate","acceptedSocket","addTransferCalls","startTime","getTimestampInSeconds","isPhysical","player","stopAudioPlayer","setAudioPlayerLoop","checkDefaultDeviceConversationActive","deleteTransferCalls","inTransferCalls","item","updateTransferSwitching","physicalRecorder","setRecordingTempVariable","checkOutgoingUpdate","outgoingSocket","outgoing","userTotallyFree","reset","listen","upgrade","transports","reconnection","reconnectionDelay","getApiMode","path","io","websocket","update","on","debug","reason","clearInterval","includes","err","attempt","accessKeyId","token","setInterval","volatile","withTimeout","alerts","removeAlert","isStaleConnection","sipcall","webrtc","iceState","webrtcStuff","pc","iceConnectionState","timestamp","Date","toISOString","warn","disconnect","setAlert","updateEndpointMainPresence","mainPresence","dispatchMainPresence","conference","isActive","conferenceStartedFrom","_e","previewCallFromMobileOrNethlink","connectedExtension","callerNum","extensionType","conversations","conversationWasConnected","extensionConversations","conversationKeys","selectedConversation","conversationKeys_1","_i","key","currentConversation","selectedConnected","currentConnected","selectedStartTime","currentStartTime","cause","toggleAvoidToShow","setPreviewCallFromMobileOrNethlink","resetConference","viewType","_f","usersList","pendingUsers","hasConfirmedParticipants","hasPendingParticipants","_g","endpoints_2","username_2","userExtensionIds","map","_h","_j","isActive_1","conferenceStartedFrom_1","setOperatorBusyActive","callerNumber","updateStartAudioPlayer","src","busyRingtone","loop","_k","isActive_2","conferenceStartedFrom_2","username_3","_l","removePendingUser","extenConnected","updateExtension","deviceMap","userInformation","user","push","associatedExtensions","isMobileExtensionCall","isEmpty","matchingExtension","dispatchExtensions","hasNonEmptyConversation","extConversations","dispatchConversations","updateConversations","updateQueue","activeConversation","forEach","conversation","dispatchQueueUpdate","updateQueueMember","dispatchQueueMemberUpdate","dispatchAlreadyLogin","dispatchServerReload","event","dispatchParkingUpdate","link","urlType","dispatchUrlCall","display_name","display_number","message","isFromStreaming_2","toggleSideViewVisible","toggleTranscriptionViewVisible","dispatchVideoCallStarted","initiator","callUser","destUser","screenShare","isJoiningScreenShare","room","roomId","isLeavingScreenShare","dispatchDefaultDeviceUpdate","extensionInformations","objectComplete","updateCurrentDefaultDevice","checkMediaPermissions","conferenceId","conferenceUsers","usersList_1","updatedConferenceUsers_1","userId","muted","updateConferenceUsersList","updateConferenceId","voicemailInfo","streamingData","streaming","source","image","updateSourceImage","transcriptionData","close","info","forceReload","socket_down","active","setForceReload","connect","React","createElement","Fragment"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -1 +1 @@
1
- *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-invisible{visibility:hidden}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-16{top:4rem}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.pi-top-\[13rem\]{top:13rem}.pi-top-\[17rem\]{top:17rem}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-3{margin-left:.75rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-60{height:15rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1{width:.25rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-2\/5{width:40%}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-64{width:16rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-0{min-width:0}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-full{max-width:100%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-1\/2{--tw-translate-y:-50%}.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-flex-wrap{flex-wrap:wrap}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-1{gap:.25rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-left-radius:1.5rem;border-bottom-right-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-b{border-bottom-width:1px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.pi-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-2{padding:.5rem}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-py-3{padding-bottom:.75rem;padding-top:.75rem}.pi-py-4{padding-bottom:1rem;padding-top:1rem}.pi-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-4{padding-bottom:1rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pr-6{padding-right:1.5rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-italic{font-style:italic}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconSecondary{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--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)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-bg-elevationL2Dark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-indigo-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
1
+ *,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }@supports (-moz-appearance:none){*{scrollbar-color:auto;scrollbar-width:auto}}.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-invisible{visibility:hidden}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-inset-0{inset:0}.-pi-top-0\.5{top:-.125rem}.pi--right-6{right:-1.5rem}.pi-bottom-0{bottom:0}.pi-bottom-14{bottom:3.5rem}.pi-bottom-4{bottom:1rem}.pi-left-0{left:0}.pi-right-0{right:0}.pi-right-5{right:1.25rem}.pi-right-\[1\.5rem\]{right:1.5rem}.pi-right-\[4\.5rem\]{right:4.5rem}.pi-top-0{top:0}.pi-top-16{top:4rem}.pi-top-32{top:8rem}.pi-top-5{top:1.25rem}.pi-top-\[13rem\]{top:13rem}.pi-top-\[17rem\]{top:17rem}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-z-1000{z-index:1000}.pi-z-20{z-index:20}.pi-z-30{z-index:30}.pi-z-50{z-index:50}.pi-col-span-2{grid-column:span 2/span 2}.pi-col-start-auto{grid-column-start:auto}.pi-mx-2{margin-left:.5rem;margin-right:.5rem}.-pi-mr-10{margin-right:-2.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi--mt-1{margin-top:-.25rem}.pi-mb-1{margin-bottom:.25rem}.pi-mb-2{margin-bottom:.5rem}.pi-mb-3{margin-bottom:.75rem}.pi-mb-4{margin-bottom:1rem}.pi-mb-5{margin-bottom:1.25rem}.pi-mb-6{margin-bottom:1.5rem}.pi-ml-1{margin-left:.25rem}.pi-ml-16{margin-left:4rem}.pi-ml-2{margin-left:.5rem}.pi-ml-3{margin-left:.75rem}.pi-ml-4{margin-left:1rem}.pi-ml-5{margin-left:1.25rem}.pi-ml-6{margin-left:1.5rem}.pi-ml-9{margin-left:2.25rem}.pi-ml-\[1\.49rem\]{margin-left:1.49rem}.pi-ml-\[1\.4rem\]{margin-left:1.4rem}.pi-mr-1{margin-right:.25rem}.pi-mr-2{margin-right:.5rem}.pi-mr-3{margin-right:.75rem}.pi-mr-4{margin-right:1rem}.pi-mr-\[0\.27rem\]{margin-right:.27rem}.pi-mr-\[0\.28rem\]{margin-right:.28rem}.pi-mr-\[0\.42rem\]{margin-right:.42rem}.pi-mr-\[0\.4rem\]{margin-right:.4rem}.pi-mr-\[0\.57rem\]{margin-right:.57rem}.pi-mt-1{margin-top:.25rem}.pi-mt-12{margin-top:3rem}.pi-mt-2{margin-top:.5rem}.pi-mt-4{margin-top:1rem}.pi-mt-6{margin-top:1.5rem}.pi-mt-7{margin-top:1.75rem}.pi-mt-8{margin-top:2rem}.pi-mt-\[-12\.5rem\]{margin-top:-12.5rem}.pi-mt-\[-8\.5rem\]{margin-top:-8.5rem}.pi-mt-auto{margin-top:auto}.pi-block{display:block}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-inline-flex{display:inline-flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-1{height:.25rem}.pi-h-10{height:2.5rem}.pi-h-12{height:3rem}.pi-h-14{height:3.5rem}.pi-h-20{height:5rem}.pi-h-24{height:6rem}.pi-h-3{height:.75rem}.pi-h-32{height:8rem}.pi-h-4{height:1rem}.pi-h-40{height:10rem}.pi-h-5{height:1.25rem}.pi-h-6{height:1.5rem}.pi-h-60{height:15rem}.pi-h-8{height:2rem}.pi-h-\[10\.5rem\]{height:10.5rem}.pi-h-\[380px\]{height:380px}.pi-h-\[480px\]{height:480px}.pi-h-\[500px\]{height:500px}.pi-h-\[524px\]{height:524px}.pi-h-\[624px\]{height:624px}.pi-h-\[648px\]{height:648px}.pi-h-\[748px\]{height:748px}.pi-h-fit{height:fit-content}.pi-h-full{height:100%}.pi-h-screen{height:100vh}.pi-max-h-32{max-height:8rem}.pi-max-h-48{max-height:12rem}.pi-max-h-\[13\.125rem\]{max-height:13.125rem}.pi-max-h-\[9\.125rem\]{max-height:9.125rem}.pi-min-h-full{min-height:100%}.pi-w-0\.5{width:.125rem}.pi-w-1{width:.25rem}.pi-w-1\/2{width:50%}.pi-w-10{width:2.5rem}.pi-w-12{width:3rem}.pi-w-14{width:3.5rem}.pi-w-16{width:4rem}.pi-w-2\/5{width:40%}.pi-w-24{width:6rem}.pi-w-3{width:.75rem}.pi-w-32{width:8rem}.pi-w-4{width:1rem}.pi-w-4\/5{width:80%}.pi-w-44{width:11rem}.pi-w-5{width:1.25rem}.pi-w-52{width:13rem}.pi-w-56{width:14rem}.pi-w-6{width:1.5rem}.pi-w-64{width:16rem}.pi-w-8{width:2rem}.pi-w-\[110rem\]{width:110rem}.pi-w-\[28\.2rem\]{width:28.2rem}.pi-w-\[600px\]{width:600px}.pi-w-\[780px\]{width:780px}.pi-w-\[936px\]{width:936px}.pi-w-fit{width:fit-content}.pi-w-full{width:100%}.pi-min-w-0{min-width:0}.pi-min-w-12{min-width:3rem}.pi-min-w-full{min-width:100%}.pi-max-w-16{max-width:4rem}.pi-max-w-28{max-width:7rem}.pi-max-w-32{max-width:8rem}.pi-max-w-48{max-width:12rem}.pi-max-w-56{max-width:14rem}.pi-max-w-60{max-width:15rem}.pi-max-w-\[45\%\]{max-width:45%}.pi-max-w-full{max-width:100%}.pi-max-w-xs{max-width:20rem}.pi-flex-1{flex:1 1 0%}.pi-flex-none{flex:none}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-flex-grow{flex-grow:1}.pi-flex-grow-0{flex-grow:0}.pi-origin-top-right{transform-origin:top right}.pi--translate-y-1\/2{--tw-translate-y:-50%}.pi--rotate-45,.pi--translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi--rotate-45{--tw-rotate:-45deg}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-rotate-45{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-90{--tw-rotate:90deg}.pi-rotate-90,.pi-rotate-\[135deg\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-\[135deg\]{--tw-rotate:135deg}.pi-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pi-ping{75%,to{opacity:0;transform:scale(2)}}.pi-animate-ping{animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pi-pulse{50%{opacity:.5}}.pi-animate-pulse{animation:pi-pulse 2s cubic-bezier(.4,0,.6,1) infinite}.pi-cursor-auto{cursor:auto}.pi-cursor-grab{cursor:grab}.pi-cursor-not-allowed{cursor:not-allowed}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:max-content}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-\[1fr_84px\]{grid-template-columns:1fr 84px}.pi-grid-cols-\[24px_102px\]{grid-template-columns:24px 102px}.pi-grid-cols-\[24px_66px_24px\]{grid-template-columns:24px 66px 24px}.pi-grid-cols-\[256px_114px\]{grid-template-columns:256px 114px}.pi-grid-cols-\[48px_164px_48px\]{grid-template-columns:48px 164px 48px}.pi-grid-cols-\[48px_1fr\]{grid-template-columns:48px 1fr}.pi-grid-cols-\[48px_1fr_1px\]{grid-template-columns:48px 1fr 1px}.pi-grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.pi-grid-rows-\[20px_24px_24px\]{grid-template-rows:20px 24px 24px}.pi-grid-rows-\[72px_1fr\]{grid-template-rows:72px 1fr}.pi-flex-col{flex-direction:column}.pi-flex-wrap{flex-wrap:wrap}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-start{align-items:flex-start}.pi-items-center{align-items:center}.pi-justify-start{justify-content:flex-start}.pi-justify-end{justify-content:flex-end}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-0{gap:0}.pi-gap-0\.5{gap:.125rem}.pi-gap-1{gap:.25rem}.pi-gap-1\.5{gap:.375rem}.pi-gap-2{gap:.5rem}.pi-gap-3{gap:.75rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-6{gap:1.5rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi--space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(-.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(-.25rem*var(--tw-space-x-reverse))}.pi-space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.pi-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.pi-space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.75rem*var(--tw-space-x-reverse))}.pi-space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*var(--tw-space-x-reverse))}.pi-space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1.5rem*var(--tw-space-x-reverse))}.pi-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.pi-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.pi-self-start{align-self:flex-start}.pi-self-center{align-self:center}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;white-space:nowrap}.pi-text-ellipsis,.pi-truncate{text-overflow:ellipsis}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded{border-radius:.25rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-3xl{border-radius:1.5rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-lg{border-radius:.5rem}.pi-rounded-md{border-radius:.375rem}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-xl{border-radius:.75rem}.pi-rounded-b-3xl{border-bottom-left-radius:1.5rem;border-bottom-right-radius:1.5rem}.pi-rounded-bl-\[20px\]{border-bottom-left-radius:20px}.pi-rounded-br-\[20px\]{border-bottom-right-radius:20px}.pi-rounded-tl-\[20px\]{border-top-left-radius:20px}.pi-rounded-tr-\[20px\]{border-top-right-radius:20px}.pi-border{border-width:1px}.pi-border-2{border-width:2px}.pi-border-4{border-width:4px}.pi-border-b{border-bottom-width:1px}.pi-border-t{border-top-width:1px}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.pi-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.pi-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.pi-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.pi-border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity,1))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.pi-border-transparent{border-color:#0000}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.pi-bg-black\/30{background-color:#0000004d}.pi-bg-elevationL2{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-emerald-700{--tw-bg-opacity:1;background-color:rgb(4 120 87/var(--tw-bg-opacity,1))}.pi-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.pi-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.pi-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.pi-bg-gray-600{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-gray-950{--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.pi-bg-gray-950\/65{background-color:#030712a6}.pi-bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.pi-bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.pi-bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.pi-bg-iconSecondary{--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.pi-bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(224 231 255/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandActive{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandCall{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.pi-bg-phoneIslandClose{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity,1))}.pi-bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.pi-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.pi-bg-rose-200{--tw-bg-opacity:1;background-color:rgb(254 205 211/var(--tw-bg-opacity,1))}.pi-bg-secondaryNeutral{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-surfaceBackground{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.pi-bg-surfaceSidebar{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.pi-bg-transparent{background-color:initial}.pi-bg-opacity-\[0\.99\]{--tw-bg-opacity:0.99}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.pi-from-gray-100{--tw-gradient-from:#f3f4f6 var(--tw-gradient-from-position);--tw-gradient-to:#f3f4f600 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-gray-50{--tw-gradient-to:#f9fafb var(--tw-gradient-to-position)}.pi-to-gray-700{--tw-gradient-to:#374151 var(--tw-gradient-to-position)}.pi-to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.pi-bg-cover{background-size:cover}.pi-fill-white{fill:#fff}.pi-object-cover{object-fit:cover}.pi-p-2{padding:.5rem}.pi-p-3{padding:.75rem}.pi-p-4{padding:1rem}.pi-p-6{padding:1.5rem}.pi-p-8{padding:2rem}.pi-px-0\.5{padding-left:.125rem;padding-right:.125rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-px-2\.5{padding-left:.625rem;padding-right:.625rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-px-4{padding-left:1rem;padding-right:1rem}.pi-px-5{padding-left:1.25rem;padding-right:1.25rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-py-3{padding-bottom:.75rem;padding-top:.75rem}.pi-py-4{padding-bottom:1rem;padding-top:1rem}.pi-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.pi-pb-2{padding-bottom:.5rem}.pi-pb-3{padding-bottom:.75rem}.pi-pb-4{padding-bottom:1rem}.pi-pb-7{padding-bottom:1.75rem}.pi-pb-9{padding-bottom:2.25rem}.pi-pr-2{padding-right:.5rem}.pi-pr-4{padding-right:1rem}.pi-pr-6{padding-right:1.5rem}.pi-pt-1{padding-top:.25rem}.pi-pt-2{padding-top:.5rem}.pi-pt-3{padding-top:.75rem}.pi-pt-4{padding-top:1rem}.pi-text-center{text-align:center}.pi-font-\[inherit\]{font-family:inherit}.pi-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-3xl{font-size:1.875rem;line-height:2.25rem}.pi-text-4xl{font-size:2.25rem;line-height:2.5rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-lg{font-size:1.125rem;line-height:1.75rem}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-font-bold{font-weight:700}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-normal{font-weight:400}.pi-font-semibold{font-weight:600}.pi-italic{font-style:italic}.pi-leading-4{line-height:1rem}.pi-leading-5{line-height:1.25rem}.pi-leading-6{line-height:1.5rem}.pi-leading-7{line-height:1.75rem}.pi-leading-none{line-height:1}.pi-tracking-wide{letter-spacing:.025em}.pi-text-emerald-50{--tw-text-opacity:1;color:rgb(236 253 245/var(--tw-text-opacity,1))}.pi-text-emerald-700{--tw-text-opacity:1;color:rgb(4 120 87/var(--tw-text-opacity,1))}.pi-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.pi-text-gray-50{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.pi-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.pi-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.pi-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-gray-950{--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.pi-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.pi-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.pi-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.pi-text-iconSecondary{--tw-text-opacity:1;color:rgb(67 56 202/var(--tw-text-opacity,1))}.pi-text-iconWhite{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-text-indigo-800{--tw-text-opacity:1;color:rgb(55 48 163/var(--tw-text-opacity,1))}.pi-text-primaryInvert{--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.pi-text-primaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.pi-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.pi-text-rose-700{--tw-text-opacity:1;color:rgb(190 18 60/var(--tw-text-opacity,1))}.pi-text-secondaryNeutral{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.pi-placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.pi-opacity-0{opacity:0}.pi-opacity-100{opacity:1}.pi-opacity-50{opacity:.5}.pi-opacity-60{opacity:.6}.pi-opacity-75{opacity:.75}.pi-shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.pi-outline-none{outline:2px solid #0000;outline-offset:2px}.pi-ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.pi-ring-1,.pi-ring-2{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.pi-ring-2{--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)}.pi-ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity,1))}.pi-ring-gray-700{--tw-ring-opacity:1;--tw-ring-color:rgb(55 65 81/var(--tw-ring-opacity,1))}.pi-ring-opacity-5{--tw-ring-opacity:0.05}.pi-backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.pi-duration-300{transition-duration:.3s}.pi-scrollbar-thin::-webkit-scrollbar-track{background-color:var(--scrollbar-track);border-radius:var(--scrollbar-track-radius)}.pi-scrollbar-thin::-webkit-scrollbar-track:hover{background-color:var(--scrollbar-track-hover,var(--scrollbar-track))}.pi-scrollbar-thin::-webkit-scrollbar-track:active{background-color:var(--scrollbar-track-active,var(--scrollbar-track-hover,var(--scrollbar-track)))}.pi-scrollbar-thin::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb);border-radius:var(--scrollbar-thumb-radius)}.pi-scrollbar-thin::-webkit-scrollbar-thumb:hover{background-color:var(--scrollbar-thumb-hover,var(--scrollbar-thumb))}.pi-scrollbar-thin::-webkit-scrollbar-thumb:active{background-color:var(--scrollbar-thumb-active,var(--scrollbar-thumb-hover,var(--scrollbar-thumb)))}.pi-scrollbar-thin::-webkit-scrollbar-corner{background-color:var(--scrollbar-corner);border-radius:var(--scrollbar-corner-radius)}.pi-scrollbar-thin::-webkit-scrollbar-corner:hover{background-color:var(--scrollbar-corner-hover,var(--scrollbar-corner))}.pi-scrollbar-thin::-webkit-scrollbar-corner:active{background-color:var(--scrollbar-corner-active,var(--scrollbar-corner-hover,var(--scrollbar-corner)))}@supports (-moz-appearance:none){.pi-scrollbar-thin{scrollbar-color:var(--scrollbar-thumb,initial) var(--scrollbar-track,initial);scrollbar-width:thin}}.pi-scrollbar-thin::-webkit-scrollbar{display:block;height:8px;width:8px}.pi-scrollbar-track-gray-200{--scrollbar-track:#e5e7eb!important}.pi-scrollbar-thumb-gray-400{--scrollbar-thumb:#9ca3af!important}.pi-scrollbar-track-rounded-full{--scrollbar-track-radius:9999px}.pi-scrollbar-thumb-rounded-full{--scrollbar-thumb-radius:9999px}.hover\:pi-bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.hover\:pi-bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCallHover:hover{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity,1))}.hover\:pi-bg-phoneIslandCloseHover:hover{--tw-bg-opacity:1;background-color:rgb(153 27 27/var(--tw-bg-opacity,1))}.hover\:pi-text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.hover\:pi-shadow-2xl:hover{--tw-shadow:0 25px 50px -12px #00000040;--tw-shadow-colored:0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-emerald-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(156 163 175/var(--tw-ring-opacity,1))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity,1))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-gray-200:focus{--tw-ring-offset-color:#e5e7eb}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.enabled\:hover\:pi-border-gray-500:hover:enabled{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.enabled\:hover\:pi-bg-gray-200\/70:hover:enabled{background-color:#e5e7ebb3}.enabled\:hover\:pi-bg-gray-300\/70:hover:enabled{background-color:#d1d5dbb3}.enabled\:hover\:pi-bg-gray-500:hover:enabled{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.enabled\:hover\:pi-bg-gray-600:hover:enabled{--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.disabled\:pi-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:pi-opacity-40:disabled{opacity:.4}.disabled\:pi-opacity-75:disabled{opacity:.75}.dark\:pi-border-emerald-200:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:pi-border-gray-600:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(75 85 99/var(--tw-border-opacity,1))}.dark\:pi-border-gray-700:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity,1))}.dark\:pi-bg-elevationL2Dark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.dark\:pi-bg-emerald-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-200:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-300:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-50:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-500:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-600:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.dark\:pi-bg-gray-950:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-green-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(20 83 45/var(--tw-bg-opacity,1))}.dark\:pi-bg-iconSecondaryDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(99 102 241/var(--tw-bg-opacity,1))}.dark\:pi-bg-indigo-700:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(67 56 202/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandActiveDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCallDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.dark\:pi-bg-phoneIslandCloseDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.dark\:pi-bg-rose-900:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(136 19 55/var(--tw-bg-opacity,1))}.dark\:pi-bg-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceBackgroundDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(3 7 18/var(--tw-bg-opacity,1))}.dark\:pi-bg-surfaceSidebarDark:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:pi-bg-opacity-\[0\.99\]:where(.pi-dark,.pi-dark *){--tw-bg-opacity:0.99}.dark\:pi-from-black:where(.pi-dark,.pi-dark *){--tw-gradient-from:#000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.dark\:pi-to-gray-950:where(.pi-dark,.pi-dark *){--tw-gradient-to:#030712 var(--tw-gradient-to-position)}.dark\:pi-text-emerald-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(16 185 129/var(--tw-text-opacity,1))}.dark\:pi-text-gray-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity,1))}.dark\:pi-text-gray-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-gray-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.dark\:pi-text-gray-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.dark\:pi-text-gray-50:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-gray-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\:pi-text-gray-600:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.dark\:pi-text-gray-900:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-gray-950:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(3 7 18/var(--tw-text-opacity,1))}.dark\:pi-text-green-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(187 247 208/var(--tw-text-opacity,1))}.dark\:pi-text-green-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(74 222 128/var(--tw-text-opacity,1))}.dark\:pi-text-green-500:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.dark\:pi-text-iconWhiteDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-100:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(224 231 255/var(--tw-text-opacity,1))}.dark\:pi-text-indigo-300:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity,1))}.dark\:pi-text-primaryInvertDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.dark\:pi-text-primaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:pi-text-rose-200:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(254 205 211/var(--tw-text-opacity,1))}.dark\:pi-text-secondaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.dark\:pi-text-white:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.dark\:pi-placeholder-gray-500:where(.pi-dark,.pi-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(107 114 128/var(--tw-placeholder-opacity,1))}.dark\:pi-scrollbar-track-gray-900:where(.pi-dark,.pi-dark *){--scrollbar-track:#111827!important}.dark\:hover\:pi-bg-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-600:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-gray-700:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCallHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.dark\:hover\:pi-bg-phoneIslandCloseHoverDark:hover:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.hover\:dark\:pi-bg-gray-800:where(.pi-dark,.pi-dark *):hover{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\:hover\:pi-text-gray-50:hover:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/var(--tw-text-opacity,1))}.dark\:focus\:pi-border-emerald-200:focus:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:focus\:pi-ring-emerald-300:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(110 231 183/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-gray-500:focus:where(.pi-dark,.pi-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.dark\:focus\:pi-ring-offset-black:focus:where(.pi-dark,.pi-dark *){--tw-ring-offset-color:#000}.dark\:active\:pi-border-emerald-200:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:active\:focus\:pi-border-emerald-200:focus:active:where(.pi-dark,.pi-dark *){--tw-border-opacity:1;border-color:rgb(167 243 208/var(--tw-border-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600:hover:enabled:where(.pi-dark,.pi-dark *){--tw-bg-opacity:1;background-color:rgb(75 85 99/var(--tw-bg-opacity,1))}.dark\:enabled\:hover\:pi-bg-gray-600\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#4b55634d}.dark\:enabled\:hover\:pi-bg-gray-700\/30:hover:enabled:where(.pi-dark,.pi-dark *){background-color:#3741514d}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e={width:168,height:40},d={width:348,height:304},i={padding_expanded:24,alert_padding_expanded:2,padding_x_collapsed:8,padding_y_collapsed:16,border_radius_expanded:20,border_radius_collapsed:99,border_radius_collapsed_conference:8,variants:{call:{expanded:{incoming:{width:418,height:96},incomingStreaming:{width:500,height:278},outgoing:{width:418,height:96},outgoingStreaming:{width:500,height:278},accepted:{width:348,height:236,actionsExpanded:d},listening:{width:348,height:168},transfer:{width:348,height:236,actionsExpanded:d}},collapsed:e},keypad:{expanded:{width:338,height:400},collapsed:e},transfer:{expanded:{width:408,height:410},collapsed:e},player:{expanded:{width:374,height:236},collapsed:e},recorder:{expanded:{width:374,height:272},collapsed:e},physicalPhoneRecorder:{expanded:{width:374,height:256},collapsed:e},alerts:{width:418,height:88},settings:{expanded:d,collapsed:e},video:{expanded:{width:600,height:480,padding:0},collapsed:e},screenShare:{expanded:{width:600,height:480},collapsed:e},conference:{expanded:d,collapsed:e},switchDevice:{expanded:d,collapsed:e},waitingConference:{expanded:{width:348,height:360},collapsed:{width:180,height:74}},streamingAnswer:{expanded:{width:600,height:480,padding:0},extraLarge:{width:936,height:748,padding:0},collapsed:e},operatorBusy:{expanded:{width:400,height:104},collapsed:{width:400,height:104}}}},t=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:i});exports.motions=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e={width:168,height:40},d={width:348,height:304},i={padding_expanded:24,alert_padding_expanded:2,padding_x_collapsed:8,padding_y_collapsed:16,border_radius_expanded:20,border_radius_collapsed:99,border_radius_collapsed_conference:8,variants:{call:{expanded:{incoming:{width:418,height:96},incomingQueue:{width:418,height:124},incomingStreaming:{width:500,height:278},outgoing:{width:418,height:96},outgoingStreaming:{width:500,height:278},accepted:{width:348,height:236,actionsExpanded:d},listening:{width:348,height:168},transfer:{width:348,height:236,actionsExpanded:d}},collapsed:e},keypad:{expanded:{width:338,height:400},collapsed:e},transfer:{expanded:{width:408,height:410},collapsed:e},player:{expanded:{width:374,height:236},collapsed:e},recorder:{expanded:{width:374,height:272},collapsed:e},physicalPhoneRecorder:{expanded:{width:374,height:256},collapsed:e},alerts:{width:418,height:88},settings:{expanded:d,collapsed:e},video:{expanded:{width:600,height:480,padding:0},collapsed:e},screenShare:{expanded:{width:600,height:480},collapsed:e},conference:{expanded:d,collapsed:e},switchDevice:{expanded:d,collapsed:e},waitingConference:{expanded:{width:348,height:360},collapsed:{width:180,height:74}},streamingAnswer:{expanded:{width:600,height:480,padding:0},extraLarge:{width:936,height:748,padding:0},collapsed:e},operatorBusy:{expanded:{width:400,height:104},collapsed:{width:400,height:104}}}},t=require("../node_modules/@rematch/core/dist/core.esm.js").createModel()({state:i});exports.motions=t;
2
2
  //# sourceMappingURL=motions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"motions.js","sources":["../../src/models/motions.ts"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { screenShare } from './screenShare'\n\n// Common dimensions\nconst commonCollapsed = {\n width: 168,\n height: 40,\n}\n\nconst commonExpanded = {\n width: 348,\n height: 304,\n}\n\nconst defaultState = {\n padding_expanded: 24,\n alert_padding_expanded: 2,\n padding_x_collapsed: 8,\n padding_y_collapsed: 16,\n border_radius_expanded: 20,\n border_radius_collapsed: 99,\n border_radius_collapsed_conference: 8,\n variants: {\n call: {\n expanded: {\n incoming: { width: 418, height: 96 },\n incomingStreaming: { width: 500, height: 278 },\n outgoing: { width: 418, height: 96 },\n outgoingStreaming: { width: 500, height: 278 },\n accepted: {\n width: 348,\n height: 236,\n actionsExpanded: commonExpanded,\n },\n listening: { width: 348, height: 168 },\n transfer: {\n width: 348,\n height: 236,\n actionsExpanded: commonExpanded,\n },\n },\n collapsed: commonCollapsed,\n },\n keypad: {\n expanded: { width: 338, height: 400 },\n collapsed: commonCollapsed,\n },\n transfer: {\n expanded: { width: 408, height: 410 },\n collapsed: commonCollapsed,\n },\n player: {\n expanded: { width: 374, height: 236 },\n collapsed: commonCollapsed,\n },\n recorder: {\n expanded: { width: 374, height: 272 },\n collapsed: commonCollapsed,\n },\n physicalPhoneRecorder: {\n expanded: { width: 374, height: 256 },\n collapsed: commonCollapsed,\n },\n alerts: { width: 418, height: 88 },\n settings: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n video: {\n expanded: {\n width: 600,\n height: 480,\n padding: 0,\n },\n collapsed: commonCollapsed,\n },\n screenShare: {\n expanded: {\n width: 600,\n height: 480,\n },\n collapsed: commonCollapsed,\n },\n conference: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n switchDevice: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n waitingConference: {\n expanded: { width: 348, height: 360 },\n collapsed: { width: 180, height: 74 },\n },\n streamingAnswer: {\n expanded: {\n width: 600,\n height: 480,\n padding: 0,\n },\n extraLarge: {\n width: 936,\n height: 748,\n padding: 0,\n },\n collapsed: commonCollapsed,\n },\n operatorBusy: {\n expanded: { width: 400, height: 104 },\n collapsed: { width: 400, height: 104 },\n },\n },\n}\n\nexport const motions = createModel<RootModel>()({\n state: defaultState,\n})\n\nexport type AnimationsTypes = typeof defaultState\n"],"names":["commonCollapsed","width","height","commonExpanded","defaultState","padding_expanded","alert_padding_expanded","padding_x_collapsed","padding_y_collapsed","border_radius_expanded","border_radius_collapsed","border_radius_collapsed_conference","variants","call","expanded","incoming","incomingStreaming","outgoing","outgoingStreaming","accepted","actionsExpanded","listening","transfer","collapsed","keypad","player","recorder","physicalPhoneRecorder","alerts","settings","video","padding","screenShare","conference","switchDevice","waitingConference","streamingAnswer","extraLarge","operatorBusy","motions","createModel","state"],"mappings":"wEAQMA,EAAkB,CACtBC,MAAO,IACPC,OAAQ,IAGJC,EAAiB,CACrBF,MAAO,IACPC,OAAQ,KAGJE,EAAe,CACnBC,iBAAkB,GAClBC,uBAAwB,EACxBC,oBAAqB,EACrBC,oBAAqB,GACrBC,uBAAwB,GACxBC,wBAAyB,GACzBC,mCAAoC,EACpCC,SAAU,CACRC,KAAM,CACJC,SAAU,CACRC,SAAU,CAAEd,MAAO,IAAKC,OAAQ,IAChCc,kBAAmB,CAAEf,MAAO,IAAKC,OAAQ,KACzCe,SAAU,CAAEhB,MAAO,IAAKC,OAAQ,IAChCgB,kBAAmB,CAAEjB,MAAO,IAAKC,OAAQ,KACzCiB,SAAU,CACRlB,MAAO,IACPC,OAAQ,IACRkB,gBAAiBjB,GAEnBkB,UAAW,CAAEpB,MAAO,IAAKC,OAAQ,KACjCoB,SAAU,CACRrB,MAAO,IACPC,OAAQ,IACRkB,gBAAiBjB,IAGrBoB,UAAWvB,GAEbwB,OAAQ,CACNV,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAWvB,GAEbsB,SAAU,CACRR,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAWvB,GAEbyB,OAAQ,CACNX,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAWvB,GAEb0B,SAAU,CACRZ,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAWvB,GAEb2B,sBAAuB,CACrBb,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAWvB,GAEb4B,OAAQ,CAAE3B,MAAO,IAAKC,OAAQ,IAC9B2B,SAAU,CACRf,SAAUX,EACVoB,UAAWvB,GAEb8B,MAAO,CACLhB,SAAU,CACRb,MAAO,IACPC,OAAQ,IACR6B,QAAS,GAEXR,UAAWvB,GAEbgC,YAAa,CACXlB,SAAU,CACRb,MAAO,IACPC,OAAQ,KAEVqB,UAAWvB,GAEbiC,WAAY,CACVnB,SAAUX,EACVoB,UAAWvB,GAEbkC,aAAc,CACZpB,SAAUX,EACVoB,UAAWvB,GAEbmC,kBAAmB,CACjBrB,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAW,CAAEtB,MAAO,IAAKC,OAAQ,KAEnCkC,gBAAiB,CACftB,SAAU,CACRb,MAAO,IACPC,OAAQ,IACR6B,QAAS,GAEXM,WAAY,CACVpC,MAAO,IACPC,OAAQ,IACR6B,QAAS,GAEXR,UAAWvB,GAEbsC,aAAc,CACZxB,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCqB,UAAW,CAAEtB,MAAO,IAAKC,OAAQ,QAK1BqC,4DAAqBC,aAAXA,CAAyB,CAC9CC,MAAOrC"}
1
+ {"version":3,"file":"motions.js","sources":["../../src/models/motions.ts"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport { createModel } from '@rematch/core'\nimport type { RootModel } from '.'\nimport { screenShare } from './screenShare'\n\n// Common dimensions\nconst commonCollapsed = {\n width: 168,\n height: 40,\n}\n\nconst commonExpanded = {\n width: 348,\n height: 304,\n}\n\nconst defaultState = {\n padding_expanded: 24,\n alert_padding_expanded: 2,\n padding_x_collapsed: 8,\n padding_y_collapsed: 16,\n border_radius_expanded: 20,\n border_radius_collapsed: 99,\n border_radius_collapsed_conference: 8,\n variants: {\n call: {\n expanded: {\n incoming: { width: 418, height: 96 },\n incomingQueue: { width: 418, height: 124 },\n incomingStreaming: { width: 500, height: 278 },\n outgoing: { width: 418, height: 96 },\n outgoingStreaming: { width: 500, height: 278 },\n accepted: {\n width: 348,\n height: 236,\n actionsExpanded: commonExpanded,\n },\n listening: { width: 348, height: 168 },\n transfer: {\n width: 348,\n height: 236,\n actionsExpanded: commonExpanded,\n },\n },\n collapsed: commonCollapsed,\n },\n keypad: {\n expanded: { width: 338, height: 400 },\n collapsed: commonCollapsed,\n },\n transfer: {\n expanded: { width: 408, height: 410 },\n collapsed: commonCollapsed,\n },\n player: {\n expanded: { width: 374, height: 236 },\n collapsed: commonCollapsed,\n },\n recorder: {\n expanded: { width: 374, height: 272 },\n collapsed: commonCollapsed,\n },\n physicalPhoneRecorder: {\n expanded: { width: 374, height: 256 },\n collapsed: commonCollapsed,\n },\n alerts: { width: 418, height: 88 },\n settings: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n video: {\n expanded: {\n width: 600,\n height: 480,\n padding: 0,\n },\n collapsed: commonCollapsed,\n },\n screenShare: {\n expanded: {\n width: 600,\n height: 480,\n },\n collapsed: commonCollapsed,\n },\n conference: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n switchDevice: {\n expanded: commonExpanded,\n collapsed: commonCollapsed,\n },\n waitingConference: {\n expanded: { width: 348, height: 360 },\n collapsed: { width: 180, height: 74 },\n },\n streamingAnswer: {\n expanded: {\n width: 600,\n height: 480,\n padding: 0,\n },\n extraLarge: {\n width: 936,\n height: 748,\n padding: 0,\n },\n collapsed: commonCollapsed,\n },\n operatorBusy: {\n expanded: { width: 400, height: 104 },\n collapsed: { width: 400, height: 104 },\n },\n },\n}\n\nexport const motions = createModel<RootModel>()({\n state: defaultState,\n})\n\nexport type AnimationsTypes = typeof defaultState\n"],"names":["commonCollapsed","width","height","commonExpanded","defaultState","padding_expanded","alert_padding_expanded","padding_x_collapsed","padding_y_collapsed","border_radius_expanded","border_radius_collapsed","border_radius_collapsed_conference","variants","call","expanded","incoming","incomingQueue","incomingStreaming","outgoing","outgoingStreaming","accepted","actionsExpanded","listening","transfer","collapsed","keypad","player","recorder","physicalPhoneRecorder","alerts","settings","video","padding","screenShare","conference","switchDevice","waitingConference","streamingAnswer","extraLarge","operatorBusy","motions","createModel","state"],"mappings":"wEAQMA,EAAkB,CACtBC,MAAO,IACPC,OAAQ,IAGJC,EAAiB,CACrBF,MAAO,IACPC,OAAQ,KAGJE,EAAe,CACnBC,iBAAkB,GAClBC,uBAAwB,EACxBC,oBAAqB,EACrBC,oBAAqB,GACrBC,uBAAwB,GACxBC,wBAAyB,GACzBC,mCAAoC,EACpCC,SAAU,CACRC,KAAM,CACJC,SAAU,CACRC,SAAU,CAAEd,MAAO,IAAKC,OAAQ,IAChCc,cAAe,CAAEf,MAAO,IAAKC,OAAQ,KACrCe,kBAAmB,CAAEhB,MAAO,IAAKC,OAAQ,KACzCgB,SAAU,CAAEjB,MAAO,IAAKC,OAAQ,IAChCiB,kBAAmB,CAAElB,MAAO,IAAKC,OAAQ,KACzCkB,SAAU,CACRnB,MAAO,IACPC,OAAQ,IACRmB,gBAAiBlB,GAEnBmB,UAAW,CAAErB,MAAO,IAAKC,OAAQ,KACjCqB,SAAU,CACRtB,MAAO,IACPC,OAAQ,IACRmB,gBAAiBlB,IAGrBqB,UAAWxB,GAEbyB,OAAQ,CACNX,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAWxB,GAEbuB,SAAU,CACRT,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAWxB,GAEb0B,OAAQ,CACNZ,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAWxB,GAEb2B,SAAU,CACRb,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAWxB,GAEb4B,sBAAuB,CACrBd,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAWxB,GAEb6B,OAAQ,CAAE5B,MAAO,IAAKC,OAAQ,IAC9B4B,SAAU,CACRhB,SAAUX,EACVqB,UAAWxB,GAEb+B,MAAO,CACLjB,SAAU,CACRb,MAAO,IACPC,OAAQ,IACR8B,QAAS,GAEXR,UAAWxB,GAEbiC,YAAa,CACXnB,SAAU,CACRb,MAAO,IACPC,OAAQ,KAEVsB,UAAWxB,GAEbkC,WAAY,CACVpB,SAAUX,EACVqB,UAAWxB,GAEbmC,aAAc,CACZrB,SAAUX,EACVqB,UAAWxB,GAEboC,kBAAmB,CACjBtB,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAW,CAAEvB,MAAO,IAAKC,OAAQ,KAEnCmC,gBAAiB,CACfvB,SAAU,CACRb,MAAO,IACPC,OAAQ,IACR8B,QAAS,GAEXM,WAAY,CACVrC,MAAO,IACPC,OAAQ,IACR8B,QAAS,GAEXR,UAAWxB,GAEbuC,aAAc,CACZzB,SAAU,CAAEb,MAAO,IAAKC,OAAQ,KAChCsB,UAAW,CAAEvB,MAAO,IAAKC,OAAQ,QAK1BsC,4DAAqBC,aAAXA,CAAyB,CAC9CC,MAAOtC"}
@@ -1,2 +1,2 @@
1
- "use strict";var e,r=require("../../../../_virtual/index3.js"),i=require("./cjs/react-is.production.min.js"),s=require("./cjs/react-is.development.js");e=r.__module,"production"===process.env.NODE_ENV?e.exports=i.__require():e.exports=s.__require();
1
+ "use strict";var e,r=require("../../../../_virtual/index4.js"),i=require("./cjs/react-is.production.min.js"),s=require("./cjs/react-is.development.js");e=r.__module,"production"===process.env.NODE_ENV?e.exports=i.__require():e.exports=s.__require();
2
2
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../_virtual/with-selector.development.js"),r=require("react");require("../../shim/index.js");var t=require("../../../../_virtual/index4.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u,_=n(r);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../_virtual/with-selector.development.js"),r=require("react");require("../../shim/index.js");var t=require("../../../../_virtual/index3.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u,_=n(r);
2
2
  /**
3
3
  * @license React
4
4
  * use-sync-external-store-shim/with-selector.development.js
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../_virtual/with-selector.production.js"),r=require("react");require("../../shim/index.js");var u=require("../../../../_virtual/index4.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n,i=t(r);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../../_virtual/with-selector.production.js"),r=require("react");require("../../shim/index.js");var u=require("../../../../_virtual/index3.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n,i=t(r);
2
2
  /**
3
3
  * @license React
4
4
  * use-sync-external-store-shim/with-selector.production.js
@@ -1,2 +1,2 @@
1
- "use strict";var e,r=require("../../../_virtual/index4.js"),s=require("../cjs/use-sync-external-store-shim.production.js"),i=require("../cjs/use-sync-external-store-shim.development.js");e=r.__module,"production"===process.env.NODE_ENV?e.exports=s.__require():e.exports=i.__require();
1
+ "use strict";var e,r=require("../../../_virtual/index3.js"),s=require("../cjs/use-sync-external-store-shim.production.js"),i=require("../cjs/use-sync-external-store-shim.development.js");e=r.__module,"production"===process.env.NODE_ENV?e.exports=s.__require():e.exports=i.__require();
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="@nethesis/phone-island",s="Nethesis",t="1.0.10-dev.2",i="NethVoice CTI Phone Island",r=["nethserver","nethesis","nethvoice","phone","island"],o="https://github.com/nethesis/phone-island#readme",n="https://github.com/nethesis/dev/issues",p={type:"git",url:"https://github.com/nethesis/phone-island.git"},l=["dist"],d="dist/index.js",a="dist/index.d.ts",c={access:"public"},m={main:!1,types:!1,default:{distDir:"./dist-widget"}},u={"@fortawesome/fontawesome-svg-core":"6.7.2","@fortawesome/free-solid-svg-icons":"6.7.2","@fortawesome/react-fontawesome":"0.2.6","@headlessui/react":"^2.2.8","@nethesis/nethesis-solid-svg-icons":"github:nethesis/Font-Awesome#ns-solid","@rematch/core":"^2.2.0","@rematch/immer":"^2.1.3","@rematch/select":"^3.1.2","@testing-library/jest-dom":"^5.11.4","@testing-library/user-event":"^12.1.10","framer-motion":"^12.0.0",i18next:"^22.4.9","i18next-browser-languagedetector":"^7.0.1","js-base64":"^3.7.3",lodash:"^4.17.21","mic-check":"^1.1.0",react:"^18.2.0","react-dom":"^18.2.0","react-i18next":"^12.1.5","react-moment":"^1.1.2","react-redux":"^8.0.5","react-tooltip":"^5.28.0","socket.io-client":"^4.5.3","styled-components":"^5.3.6","webrtc-adapter":"^9.0.1"},h={start:"npm run dev",dev:"node scripts/generate-dev-host.js && parcel .dev/phone-island-dev.html --port 6006 --open",test:"tsc --noEmit",watch:"rollup -w -c","watch:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 npx tailwindcss -o ./dist/index.css --watch",build:"rm -rf ./dist && npm run build:css && rollup -c","build:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify","build:win":"del /s /q dist && npm run build:wincss && rollup -c --configPlugin typescript","build:wincss":"set BROWSERSLIST_IGNORE_OLD_DATA=1 && set NODE_ENV=production && npx tailwindcss -o ./dist/index.css --minify","build:widget":"rm -rf ./dist-widget && parcel build ./src/index.widget.tsx --no-source-maps","serve:widget":"rm -rf ./widget-example/static/* && cp -rf ./dist-widget/* ./widget-example/static && npx http-server ./widget-example -o -c-1",release:"npm publish","release:widget":"node check-publish.js patch && npm version patch -m v%s",format:"prettier --write './**/*.{js,jsx,ts,tsx,css,md,json}' --config ./.prettierrc",bump:"node bump-version.js","build-pack":"npm run bump && npm run build && npm pack","build-pack:win":"npm run bump && npm run build:win && npm pack","publish:minor":"node check-publish.js minor && npm version minor --allow-same-version -m v%s --force","publish:major":"node check-publish.js major && npm version major --allow-same-version -m v%s --force","publish:patch":"node check-publish.js patch && npm version patch --allow-same-version -m v%s --force","publish:dev":"node publish-dev.js",preversion:"rm -rf dist-widget && npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",postversion:"git push origin main --tags","revert-bump":"node revert-bump.js"},b={production:[">0.2%","not dead","not op_mini all"],development:["last 1 chrome version","last 1 firefox version","last 1 safari version"]},g={"@babel/core":"^7.20.2","@babel/preset-env":"^7.20.2","@parcel/transformer-typescript-types":"^2.8.0","@rollup/plugin-babel":"^6.0.2","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^9.0.2","@testing-library/react":"^13.4.0","@types/audioworklet":"^0.0.100","@types/jest":"^29.2.2","@types/react":"^18.0.26","@types/react-dom":"^18.0.9","@types/styled-components":"^5.1.26",babel:"^6.23.0",buffer:"^5.7.1",parcel:"^2.0.0",postcss:"^8.4.49",prettier:"^2.8.0","prop-types":"^15.8.1",rollup:"^2.79.1","rollup-plugin-generate-package-json":"^3.2.0","rollup-plugin-postcss":"^4.0.2","tailwind-scrollbar":"^3.1.0",tailwindcss:"^3.4.16",typescript:"^4.8.4","webm-duration-fix":"^1.0.4",webpack:"^5.74.0"},v={"@tootallnate/once":"^3.0.0",esbuild:"^0.25.11","nth-check":"^2.0.1","serialize-javascript":"^7.0.0",tar:"^7.5.1"},w="GPL-3.0-or-later",x={name:e,author:s,version:t,description:i,keywords:r,homepage:o,bugs:n,repository:p,private:!1,files:l,main:d,types:a,publishConfig:c,targets:m,dependencies:u,scripts:h,browserslist:b,devDependencies:g,overrides:v,license:w};exports.author=s,exports.browserslist=b,exports.bugs=n,exports.default=x,exports.dependencies=u,exports.description=i,exports.devDependencies=g,exports.files=l,exports.homepage=o,exports.keywords=r,exports.license=w,exports.main=d,exports.name=e,exports.overrides=v,exports.publishConfig=c,exports.repository=p,exports.scripts=h,exports.targets=m,exports.types=a,exports.version=t;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="@nethesis/phone-island",s="Nethesis",t="1.0.10-dev.4",i="NethVoice CTI Phone Island",r=["nethserver","nethesis","nethvoice","phone","island"],o="https://github.com/nethesis/phone-island#readme",n="https://github.com/nethesis/dev/issues",p={type:"git",url:"https://github.com/nethesis/phone-island.git"},l=["dist"],d="dist/index.js",a="dist/index.d.ts",c={access:"public"},m={main:!1,types:!1,default:{distDir:"./dist-widget"}},u={"@fortawesome/fontawesome-svg-core":"6.7.2","@fortawesome/free-solid-svg-icons":"6.7.2","@fortawesome/react-fontawesome":"0.2.6","@headlessui/react":"^2.2.8","@nethesis/nethesis-solid-svg-icons":"github:nethesis/Font-Awesome#ns-solid","@rematch/core":"^2.2.0","@rematch/immer":"^2.1.3","@rematch/select":"^3.1.2","@testing-library/jest-dom":"^5.11.4","@testing-library/user-event":"^12.1.10","framer-motion":"^12.0.0",i18next:"^22.4.9","i18next-browser-languagedetector":"^7.0.1","js-base64":"^3.7.3",lodash:"^4.17.21","mic-check":"^1.1.0",react:"^18.2.0","react-dom":"^18.2.0","react-i18next":"^12.1.5","react-moment":"^1.1.2","react-redux":"^8.0.5","react-tooltip":"^5.28.0","socket.io-client":"^4.5.3","styled-components":"^5.3.6","webrtc-adapter":"^9.0.1"},h={start:"npm run dev",dev:"node scripts/generate-dev-host.js && parcel .dev/phone-island-dev.html --port 6006 --open",test:"tsc --noEmit",watch:"rollup -w -c","watch:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 npx tailwindcss -o ./dist/index.css --watch",build:"rm -rf ./dist && npm run build:css && rollup -c","build:css":"BROWSERSLIST_IGNORE_OLD_DATA=1 NODE_ENV=production npx tailwindcss -o ./dist/index.css --minify","build:win":"del /s /q dist && npm run build:wincss && rollup -c --configPlugin typescript","build:wincss":"set BROWSERSLIST_IGNORE_OLD_DATA=1 && set NODE_ENV=production && npx tailwindcss -o ./dist/index.css --minify","build:widget":"rm -rf ./dist-widget && parcel build ./src/index.widget.tsx --no-source-maps","serve:widget":"rm -rf ./widget-example/static/* && cp -rf ./dist-widget/* ./widget-example/static && npx http-server ./widget-example -o -c-1",release:"npm publish","release:widget":"node check-publish.js patch && npm version patch -m v%s",format:"prettier --write './**/*.{js,jsx,ts,tsx,css,md,json}' --config ./.prettierrc",bump:"node bump-version.js","build-pack":"npm run bump && npm run build && npm pack","build-pack:win":"npm run bump && npm run build:win && npm pack","publish:minor":"node check-publish.js minor && npm version minor --allow-same-version -m v%s --force","publish:major":"node check-publish.js major && npm version major --allow-same-version -m v%s --force","publish:patch":"node check-publish.js patch && npm version patch --allow-same-version -m v%s --force","publish:dev":"node publish-dev.js",preversion:"rm -rf dist-widget && npm run build:widget && git add dist-widget/index.widget.js dist-widget/index.widget.css && git commit -m 'chore(widget): release for jsDelivr'",postversion:"git push origin main --tags","revert-bump":"node revert-bump.js"},b={production:[">0.2%","not dead","not op_mini all"],development:["last 1 chrome version","last 1 firefox version","last 1 safari version"]},g={"@babel/core":"^7.20.2","@babel/preset-env":"^7.20.2","@parcel/transformer-typescript-types":"^2.8.0","@rollup/plugin-babel":"^6.0.2","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^9.0.2","@testing-library/react":"^13.4.0","@types/audioworklet":"^0.0.100","@types/jest":"^29.2.2","@types/react":"^18.0.26","@types/react-dom":"^18.0.9","@types/styled-components":"^5.1.26",babel:"^6.23.0",buffer:"^5.7.1",parcel:"^2.0.0",postcss:"^8.4.49",prettier:"^2.8.0","prop-types":"^15.8.1",rollup:"^2.79.1","rollup-plugin-generate-package-json":"^3.2.0","rollup-plugin-postcss":"^4.0.2","tailwind-scrollbar":"^3.1.0",tailwindcss:"^3.4.16",typescript:"^4.8.4","webm-duration-fix":"^1.0.4",webpack:"^5.74.0"},v={"@tootallnate/once":"^3.0.0",esbuild:"^0.25.11","nth-check":"^2.0.1","serialize-javascript":"^7.0.0",tar:"^7.5.1"},w="GPL-3.0-or-later",x={name:e,author:s,version:t,description:i,keywords:r,homepage:o,bugs:n,repository:p,private:!1,files:l,main:d,types:a,publishConfig:c,targets:m,dependencies:u,scripts:h,browserslist:b,devDependencies:g,overrides:v,license:w};exports.author=s,exports.browserslist=b,exports.bugs=n,exports.default=x,exports.dependencies=u,exports.description=i,exports.devDependencies=g,exports.files=l,exports.homepage=o,exports.keywords=r,exports.license=w,exports.main=d,exports.name=e,exports.overrides=v,exports.publishConfig=c,exports.repository=p,exports.scripts=h,exports.targets=m,exports.types=a,exports.version=t;
2
2
  //# sourceMappingURL=package.json.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nethesis/phone-island",
3
3
  "author": "Nethesis",
4
- "version": "1.0.10-dev.2",
4
+ "version": "1.0.10-dev.4",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",