@nethesis/phone-island 1.0.15-dev.1 → 1.0.15-dev.3

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"),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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(e),a="tooltip-device",u={webrtc:{icon:o.faHeadset,labelKey:"Call.Web phone"},nethlink:{icon:o.faDesktop,labelKey:"Call.Desktop phone"},physical:{icon:i.faOfficePhone,labelKey:"Common.Physical phone"},mobile:{icon:o.faMobileScreen,labelKey:"Phone Island.Mobile app"}},d=e.memo(function(){var e=r.useTranslation().t,o=n.useSelector(function(e){return e.currentCall}),i=o.counterpartDeviceType,s=o.number,d=i?u[i]:void 0;if(!d)return null;var c=e(d.labelKey),p=s?"".concat(c,": ").concat(s):c;return l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark","data-tooltip-id":a,"data-tooltip-content":p,"aria-label":p},l.default.createElement(t.FontAwesomeIcon,{icon:d.icon,className:"pi-h-4 pi-w-4"}))});exports.DEVICE_TOOLTIP_ID=a,exports.default=d;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var t=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),o=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),i=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),n=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(e),a="tooltip-device",u={webrtc:{icon:o.faHeadset,labelKey:"Call.Web phone"},nethlink:{icon:o.faDesktop,labelKey:"Call.Desktop phone"},physical:{icon:i.faOfficePhone,labelKey:"Common.Physical phone"},mobile:{icon:o.faMobileScreen,labelKey:"Phone Island.Mobile app"}},d=e.memo(function(){var e=r.useTranslation().t,o=n.useSelector(function(e){return e.currentCall}),i=o.counterpartDeviceType,s=o.number,d=i?u[i]:void 0;if(!d)return null;var c=e(d.labelKey),p=s?"".concat(c,": ").concat(s):c;return l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark","data-tooltip-id":a,"data-tooltip-content":p,"aria-label":p},l.default.createElement(t.FontAwesomeIcon,{icon:d.icon,className:"pi-h-5 pi-w-5"}))});exports.DEVICE_TOOLTIP_ID=a,exports.default=d;
2
2
  //# sourceMappingURL=DeviceIcon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceIcon.js","sources":["../../../src/components/CallView/DeviceIcon.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core'\nimport { faDesktop, faHeadset, faMobileScreen } from '@fortawesome/free-solid-svg-icons'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState } from '../../store'\n\nexport const DEVICE_TOOLTIP_ID = 'tooltip-device'\n\nconst DEVICE_ICONS: Record<string, { icon: IconProp; labelKey: string }> = {\n webrtc: { icon: faHeadset, labelKey: 'Call.Web phone' },\n nethlink: { icon: faDesktop, labelKey: 'Call.Desktop phone' },\n physical: { icon: faOfficePhone as IconProp, labelKey: 'Common.Physical phone' },\n mobile: { icon: faMobileScreen, labelKey: 'Phone Island.Mobile app' },\n}\n\nconst DeviceIcon: FC = () => {\n const { t } = useTranslation()\n const { counterpartDeviceType, number } = useSelector((state: RootState) => state.currentCall)\n\n const device = counterpartDeviceType ? DEVICE_ICONS[counterpartDeviceType] : undefined\n if (!device) return null\n\n const label = t(device.labelKey)\n const tooltipContent = number ? `${label}: ${number}` : label\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark'\n data-tooltip-id={DEVICE_TOOLTIP_ID}\n data-tooltip-content={tooltipContent}\n aria-label={tooltipContent}\n >\n <FontAwesomeIcon icon={device.icon} className='pi-h-4 pi-w-4' />\n </span>\n )\n}\n\nexport default memo(DeviceIcon)\n"],"names":["DEVICE_TOOLTIP_ID","DEVICE_ICONS","webrtc","icon","faHeadset","labelKey","nethlink","faDesktop","physical","faOfficePhone","mobile","faMobileScreen","memo","t","useTranslation","_a","useSelector","state","currentCall","counterpartDeviceType","number","device","undefined","label","tooltipContent","concat","React","createElement","className","FontAwesomeIcon"],"mappings":"+gCAYaA,EAAoB,iBAE3BC,EAAqE,CACzEC,OAAQ,CAAEC,KAAMC,YAAWC,SAAU,kBACrCC,SAAU,CAAEH,KAAMI,YAAWF,SAAU,sBACvCG,SAAU,CAAEL,KAAMM,gBAA2BJ,SAAU,yBACvDK,OAAQ,CAAEP,KAAMQ,iBAAgBN,SAAU,4BAyB7BO,EAAAA,EAAAA,KAtBQ,WACb,IAAAC,EAAMC,qBACRC,EAAoCC,EAAAA,YAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,GAArFC,0BAAuBC,WAEzBC,EAASF,EAAwBlB,EAAakB,QAAyBG,EAC7E,IAAKD,EAAQ,OAAO,KAEpB,IAAME,EAAQV,EAAEQ,EAAOhB,UACjBmB,EAAiBJ,EAAS,GAAAK,OAAGF,EAAK,MAAAE,OAAKL,GAAWG,EAExD,OACEG,UACEC,cAAA,OAAA,CAAAC,UAAU,+JACO5B,EAAiB,uBACZwB,EAAc,aACxBA,GAEZE,UAAAC,cAACE,EAAeA,gBAAA,CAAC1B,KAAMkB,EAAOlB,KAAMyB,UAAU,kBAGpD"}
1
+ {"version":3,"file":"DeviceIcon.js","sources":["../../../src/components/CallView/DeviceIcon.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport type { IconProp } from '@fortawesome/fontawesome-svg-core'\nimport { faDesktop, faHeadset, faMobileScreen } from '@fortawesome/free-solid-svg-icons'\nimport { faOfficePhone } from '@nethesis/nethesis-solid-svg-icons'\nimport { RootState } from '../../store'\n\nexport const DEVICE_TOOLTIP_ID = 'tooltip-device'\n\nconst DEVICE_ICONS: Record<string, { icon: IconProp; labelKey: string }> = {\n webrtc: { icon: faHeadset, labelKey: 'Call.Web phone' },\n nethlink: { icon: faDesktop, labelKey: 'Call.Desktop phone' },\n physical: { icon: faOfficePhone as IconProp, labelKey: 'Common.Physical phone' },\n mobile: { icon: faMobileScreen, labelKey: 'Phone Island.Mobile app' },\n}\n\nconst DeviceIcon: FC = () => {\n const { t } = useTranslation()\n const { counterpartDeviceType, number } = useSelector((state: RootState) => state.currentCall)\n\n const device = counterpartDeviceType ? DEVICE_ICONS[counterpartDeviceType] : undefined\n if (!device) return null\n\n const label = t(device.labelKey)\n const tooltipContent = number ? `${label}: ${number}` : label\n\n return (\n <span\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-5 pi-w-5 pi-text-iconPrimaryNeutral dark:pi-text-iconPrimaryNeutralDark'\n data-tooltip-id={DEVICE_TOOLTIP_ID}\n data-tooltip-content={tooltipContent}\n aria-label={tooltipContent}\n >\n <FontAwesomeIcon icon={device.icon} className='pi-h-5 pi-w-5' />\n </span>\n )\n}\n\nexport default memo(DeviceIcon)\n"],"names":["DEVICE_TOOLTIP_ID","DEVICE_ICONS","webrtc","icon","faHeadset","labelKey","nethlink","faDesktop","physical","faOfficePhone","mobile","faMobileScreen","memo","t","useTranslation","_a","useSelector","state","currentCall","counterpartDeviceType","number","device","undefined","label","tooltipContent","concat","React","createElement","className","FontAwesomeIcon"],"mappings":"+gCAYaA,EAAoB,iBAE3BC,EAAqE,CACzEC,OAAQ,CAAEC,KAAMC,YAAWC,SAAU,kBACrCC,SAAU,CAAEH,KAAMI,YAAWF,SAAU,sBACvCG,SAAU,CAAEL,KAAMM,gBAA2BJ,SAAU,yBACvDK,OAAQ,CAAEP,KAAMQ,iBAAgBN,SAAU,4BAyB7BO,EAAAA,EAAAA,KAtBQ,WACb,IAAAC,EAAMC,qBACRC,EAAoCC,EAAAA,YAAY,SAACC,GAAqB,OAAAA,EAAMC,WAAW,GAArFC,0BAAuBC,WAEzBC,EAASF,EAAwBlB,EAAakB,QAAyBG,EAC7E,IAAKD,EAAQ,OAAO,KAEpB,IAAME,EAAQV,EAAEQ,EAAOhB,UACjBmB,EAAiBJ,EAAS,GAAAK,OAAGF,EAAK,MAAAE,OAAKL,GAAWG,EAExD,OACEG,UACEC,cAAA,OAAA,CAAAC,UAAU,+JACO5B,EAAiB,uBACZwB,EAAc,aACxBA,GAEZE,UAAAC,cAACE,EAAeA,gBAAA,CAAC1B,KAAMkB,EAAOlB,KAAMyB,UAAU,kBAGpD"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js"),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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../CustomThemedTooltip.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(t),u="tooltip-number-popover",c=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="-1000px",t.style.opacity="0",document.body.appendChild(t),t.select();var r=!1;try{r=document.execCommand("copy")}catch(e){r=!1}return document.body.removeChild(t),r},p=t.memo(function(){var s=r.useTranslation().t,p=a.useSelector(function(e){return e.currentCall}).number,d=t.useState(!1),m=d[0],f=d[1],b=t.useRef(null),v=t.useRef(!0);t.useEffect(function(){return v.current=!0,function(){v.current=!1,b.current&&clearTimeout(b.current)}},[]),t.useEffect(function(){f(!1)},[p]);var h=t.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(t){switch(t.label){case 0:return p?[4,(r=p,e.__awaiter(void 0,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:if(!(null===(t=null===navigator||void 0===navigator?void 0:navigator.clipboard)||void 0===t?void 0:t.writeText)||!window.isSecureContext)return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.clipboard.writeText(r)];case 2:return e.sent(),[2,!0];case 3:return e.sent(),[2,c(r)];case 4:return[2,c(r)]}})}))]:[2];case 1:return t.sent()&&v.current?(f(!0),b.current&&clearTimeout(b.current),b.current=setTimeout(function(){v.current&&f(!1)},2e3),[2]):[2]}var r})})},[p]);return p?l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center","data-stop-propagation":!0},l.default.createElement("button",{type:"button",className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500","data-tooltip-id":u,"data-stop-propagation":!0,"aria-label":s("Call.Show number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:n.faEllipsis,className:"pi-h-4 pi-w-4","data-stop-propagation":!0})),l.default.createElement(o.CustomThemedTooltip,{id:u,place:"bottom",openOnClick:!0,clickable:!0,globalCloseEvents:{clickOutsideAnchor:!0,escape:!0}},l.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2","data-stop-propagation":!0},l.default.createElement("span",{className:"pi-whitespace-nowrap","data-stop-propagation":!0},p),l.default.createElement("button",{type:"button",onClick:h,className:"pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ".concat(m?"pi-text-inherit":"pi-text-emerald-500 dark:pi-text-emerald-700"),"data-stop-propagation":!0,"aria-label":s(m?"Call.Copied":"Call.Copy number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:m?n.faCheck:n.faCopy,className:"pi-h-4 pi-w-4","data-stop-propagation":!0}))))):null});exports.default=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react");require("../../node_modules/react-redux/es/index.js"),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 r=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var i=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),n=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../CustomThemedTooltip.js"),a=require("../../node_modules/react-redux/es/hooks/useSelector.js");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=s(t),u="tooltip-number-popover",c=function(e){var t=document.createElement("textarea");t.value=e,t.setAttribute("readonly",""),t.style.position="fixed",t.style.top="-1000px",t.style.opacity="0",document.body.appendChild(t),t.select();var r=!1;try{r=document.execCommand("copy")}catch(e){r=!1}return document.body.removeChild(t),r},p=t.memo(function(){var s=r.useTranslation().t,p=a.useSelector(function(e){return e.currentCall}).number,d=t.useState(!1),m=d[0],f=d[1],b=t.useRef(null),v=t.useRef(!0);t.useEffect(function(){return v.current=!0,function(){v.current=!1,b.current&&clearTimeout(b.current)}},[]),t.useEffect(function(){f(!1)},[p]);var h=t.useCallback(function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(t){switch(t.label){case 0:return p?[4,(r=p,e.__awaiter(void 0,void 0,void 0,function(){var t;return e.__generator(this,function(e){switch(e.label){case 0:if(!(null===(t=null===navigator||void 0===navigator?void 0:navigator.clipboard)||void 0===t?void 0:t.writeText)||!window.isSecureContext)return[3,4];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,navigator.clipboard.writeText(r)];case 2:return e.sent(),[2,!0];case 3:return e.sent(),[2,c(r)];case 4:return[2,c(r)]}})}))]:[2];case 1:return t.sent()&&v.current?(f(!0),b.current&&clearTimeout(b.current),b.current=setTimeout(function(){v.current&&f(!1)},2e3),[2]):[2]}var r})})},[p]);return p?l.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center","data-stop-propagation":!0},l.default.createElement("button",{type:"button",className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500","data-tooltip-id":u,"data-stop-propagation":!0,"aria-label":s("Call.Show number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:n.faEllipsis,className:"pi-h-4 pi-w-4","data-stop-propagation":!0})),l.default.createElement(o.CustomThemedTooltip,{id:u,place:"bottom",offset:12,maxWidth:"300px",openOnClick:!0,clickable:!0,globalCloseEvents:{clickOutsideAnchor:!0,escape:!0}},l.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-2","data-stop-propagation":!0},l.default.createElement("span",{className:"pi-whitespace-nowrap","data-stop-propagation":!0},p),l.default.createElement("button",{type:"button",onClick:h,className:"pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ".concat(m?"pi-text-inherit":"pi-text-emerald-500 dark:pi-text-emerald-700"),"data-stop-propagation":!0,"aria-label":s(m?"Call.Copied":"Call.Copy number")||""},l.default.createElement(i.FontAwesomeIcon,{icon:m?n.faCheck:n.faCopy,className:"pi-h-4 pi-w-4","data-stop-propagation":!0}))))):null});exports.default=p;
2
2
  //# sourceMappingURL=NumberPopover.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberPopover.js","sources":["../../../src/components/CallView/NumberPopover.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo, useCallback, useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faCopy, faEllipsis } from '@fortawesome/free-solid-svg-icons'\nimport { RootState } from '../../store'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nconst NUMBER_POPOVER_ID = 'tooltip-number-popover'\nconst COPIED_FEEDBACK_MS = 2000\n\nconst copyWithTextarea = (text: string): boolean => {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.setAttribute('readonly', '')\n textarea.style.position = 'fixed'\n textarea.style.top = '-1000px'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n let copied = false\n try {\n copied = document.execCommand('copy')\n } catch (error) {\n copied = false\n }\n document.body.removeChild(textarea)\n return copied\n}\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n if (navigator?.clipboard?.writeText && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch (error) {\n return copyWithTextarea(text)\n }\n }\n return copyWithTextarea(text)\n}\n\nconst NumberPopover: FC = () => {\n const { t } = useTranslation()\n const { number } = useSelector((state: RootState) => state.currentCall)\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const isMountedRef = useRef(true)\n\n useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n useEffect(() => {\n setCopied(false)\n }, [number])\n\n const handleCopy = useCallback(async () => {\n if (!number) return\n const success = await copyToClipboard(number)\n if (!success || !isMountedRef.current) return\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false)\n }, COPIED_FEEDBACK_MS)\n }, [number])\n\n if (!number) return null\n\n return (\n <span className='pi-inline-flex pi-flex-none pi-items-center' data-stop-propagation={true}>\n <button\n type='button'\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500'\n data-tooltip-id={NUMBER_POPOVER_ID}\n data-stop-propagation={true}\n aria-label={t('Call.Show number') || ''}\n >\n <FontAwesomeIcon icon={faEllipsis} className='pi-h-4 pi-w-4' data-stop-propagation={true} />\n </button>\n <CustomThemedTooltip\n id={NUMBER_POPOVER_ID}\n place='bottom'\n openOnClick\n clickable\n globalCloseEvents={{ clickOutsideAnchor: true, escape: true }}\n >\n <div className='pi-flex pi-items-center pi-gap-2' data-stop-propagation={true}>\n <span className='pi-whitespace-nowrap' data-stop-propagation={true}>\n {number}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className={`pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ${\n copied ? 'pi-text-inherit' : 'pi-text-emerald-500 dark:pi-text-emerald-700'\n }`}\n data-stop-propagation={true}\n aria-label={(copied ? t('Call.Copied') : t('Call.Copy number')) || ''}\n >\n <FontAwesomeIcon\n icon={copied ? faCheck : faCopy}\n className='pi-h-4 pi-w-4'\n data-stop-propagation={true}\n />\n </button>\n </div>\n </CustomThemedTooltip>\n </span>\n )\n}\n\nexport default memo(NumberPopover)\n"],"names":["NUMBER_POPOVER_ID","copyWithTextarea","text","textarea","document","createElement","value","setAttribute","style","position","top","opacity","body","appendChild","select","copied","execCommand","error","removeChild","memo","t","useTranslation","number","useSelector","state","currentCall","_a","useState","setCopied","timeoutRef","useRef","isMountedRef","useEffect","current","clearTimeout","handleCopy","useCallback","__awaiter","navigator","clipboard","writeText","window","isSecureContext","_b","sent","setTimeout","React","className","type","FontAwesomeIcon","icon","faEllipsis","CustomThemedTooltip","id","place","openOnClick","clickable","globalCloseEvents","clickOutsideAnchor","escape","onClick","concat","faCheck","faCopy"],"mappings":"yhCAWMA,EAAoB,yBAGpBC,EAAmB,SAACC,GACxB,IAAMC,EAAWC,SAASC,cAAc,YACxCF,EAASG,MAAQJ,EACjBC,EAASI,aAAa,WAAY,IAClCJ,EAASK,MAAMC,SAAW,QAC1BN,EAASK,MAAME,IAAM,UACrBP,EAASK,MAAMG,QAAU,IACzBP,SAASQ,KAAKC,YAAYV,GAC1BA,EAASW,SACT,IAAIC,GAAS,EACb,IACEA,EAASX,SAASY,YAAY,OAC/B,CAAC,MAAOC,GACPF,GAAS,CACV,CAED,OADAX,SAASQ,KAAKM,YAAYf,GACnBY,CACT,EAyFeI,EAAAA,EAAAA,KA3EW,WAChB,IAAAC,EAAMC,qBACNC,EAAWC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,qBACrDC,EAAsBC,EAAAA,UAAS,GAA9BZ,EAAMW,EAAA,GAAEE,EAASF,EAAA,GAClBG,EAAaC,SAA6C,MAC1DC,EAAeD,UAAO,GAE5BE,EAAAA,UAAU,WAER,OADAD,EAAaE,SAAU,EAChB,WACLF,EAAaE,SAAU,EACnBJ,EAAWI,SAASC,aAAaL,EAAWI,QAClD,CACD,EAAE,IAEHD,EAAAA,UAAU,WACRJ,GAAU,EACZ,EAAG,CAACN,IAEJ,IAAMa,EAAaC,cAAY,WAAA,OAAAC,EAAAA,eAAA,OAAA,OAAA,EAAA,wEAC7B,OAAKf,EACW,CAAA,GAjCWpB,EAiCWoB,EAjCCe,EAAAA,eAAA,OAAA,OAAA,EAAA,8EACrC,KAAoB,QAApBX,EAAA,OAAAY,oBAAAA,iBAAAA,UAAWC,iBAAS,IAAAb,OAAA,EAAAA,EAAEc,aAAaC,OAAOC,gBAA1C,MAAyD,CAAA,EAAA,oBAEzD,6BAAM,CAAA,EAAAJ,UAAUC,UAAUC,UAAUtC,WACpC,OADAyC,EAAAC,OACA,CAAA,GAAO,UAEP,gBAAA,CAAA,EAAO3C,EAAiBC,IAG5B,KAAA,EAAA,MAAA,CAAA,EAAOD,EAAiBC,WAuBH,CAAA,UAEnB,OADgBwB,EAA6BkB,QAC5Bb,EAAaE,SAC9BL,GAAU,GACNC,EAAWI,SAASC,aAAaL,EAAWI,SAChDJ,EAAWI,QAAUY,WAAW,WAC1Bd,EAAaE,SAASL,GAAU,EACrC,EA5DsB,UAuDsB,CAAA,GAlCzB,IAAO1B,GAwC5B,EAAA,EAAE,CAACoB,IAEJ,OAAKA,EAGHwB,EAAAA,QAAMzC,cAAA,OAAA,CAAA0C,UAAU,uEAAqE,GACnFD,EAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLD,UAAU,ySAAwS,kBACjS/C,EAAiB,yBACX,EACX,aAAAoB,EAAE,qBAAuB,IAErC0B,EAAAA,QAAAzC,cAAC4C,kBAAe,CAACC,KAAMC,EAAAA,WAAYJ,UAAU,gBAAe,yBAAwB,KAEtFD,EAAC,QAAAzC,cAAA+C,sBACC,CAAAC,GAAIrD,EACJsD,MAAM,SACNC,aAAW,EACXC,WACA,EAAAC,kBAAmB,CAAEC,oBAAoB,EAAMC,QAAQ,IAEvDb,EAAA,QAAAzC,cAAA,MAAA,CAAK0C,UAAU,mCAAkC,yBAAwB,GACvED,UAAAzC,cAAA,OAAA,CAAM0C,UAAU,gDAA8C,GAC3DzB,GAEHwB,EAAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLY,QAASzB,EACTY,UAAW,iHACTc,OAAA9C,EAAS,kBAAoB,gDAER,yBAAA,eACDK,EAATL,EAAW,cAAmB,qBAAwB,IAEnE+B,EAAC,QAAAzC,cAAA4C,EAAeA,gBACd,CAAAC,KAAMnC,EAAS+C,EAAAA,QAAUC,EAAAA,OACzBhB,UAAU,gBACa,yBAAA,QApCf,IA2CtB"}
1
+ {"version":3,"file":"NumberPopover.js","sources":["../../../src/components/CallView/NumberPopover.tsx"],"sourcesContent":["// Copyright (C) 2026 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, memo, useCallback, useEffect, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useTranslation } from 'react-i18next'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck, faCopy, faEllipsis } from '@fortawesome/free-solid-svg-icons'\nimport { RootState } from '../../store'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\n\nconst NUMBER_POPOVER_ID = 'tooltip-number-popover'\nconst COPIED_FEEDBACK_MS = 2000\n\nconst copyWithTextarea = (text: string): boolean => {\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.setAttribute('readonly', '')\n textarea.style.position = 'fixed'\n textarea.style.top = '-1000px'\n textarea.style.opacity = '0'\n document.body.appendChild(textarea)\n textarea.select()\n let copied = false\n try {\n copied = document.execCommand('copy')\n } catch (error) {\n copied = false\n }\n document.body.removeChild(textarea)\n return copied\n}\n\nconst copyToClipboard = async (text: string): Promise<boolean> => {\n if (navigator?.clipboard?.writeText && window.isSecureContext) {\n try {\n await navigator.clipboard.writeText(text)\n return true\n } catch (error) {\n return copyWithTextarea(text)\n }\n }\n return copyWithTextarea(text)\n}\n\nconst NumberPopover: FC = () => {\n const { t } = useTranslation()\n const { number } = useSelector((state: RootState) => state.currentCall)\n const [copied, setCopied] = useState(false)\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const isMountedRef = useRef(true)\n\n useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n }\n }, [])\n\n useEffect(() => {\n setCopied(false)\n }, [number])\n\n const handleCopy = useCallback(async () => {\n if (!number) return\n const success = await copyToClipboard(number)\n if (!success || !isMountedRef.current) return\n setCopied(true)\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n timeoutRef.current = setTimeout(() => {\n if (isMountedRef.current) setCopied(false)\n }, COPIED_FEEDBACK_MS)\n }, [number])\n\n if (!number) return null\n\n return (\n <span className='pi-inline-flex pi-flex-none pi-items-center' data-stop-propagation={true}>\n <button\n type='button'\n className='pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-h-6 pi-w-6 pi--m-1 pi-p-1 pi-rounded-md pi-bg-transparent pi-text-gray-700 dark:pi-text-gray-200 hover:pi-bg-gray-200/70 dark:hover:pi-bg-gray-700/70 focus:pi-outline-none focus-visible:pi-ring-2 focus-visible:pi-ring-emerald-500'\n data-tooltip-id={NUMBER_POPOVER_ID}\n data-stop-propagation={true}\n aria-label={t('Call.Show number') || ''}\n >\n <FontAwesomeIcon icon={faEllipsis} className='pi-h-4 pi-w-4' data-stop-propagation={true} />\n </button>\n <CustomThemedTooltip\n id={NUMBER_POPOVER_ID}\n place='bottom'\n offset={12}\n maxWidth='300px'\n openOnClick\n clickable\n globalCloseEvents={{ clickOutsideAnchor: true, escape: true }}\n >\n <div className='pi-flex pi-items-center pi-gap-2' data-stop-propagation={true}>\n <span className='pi-whitespace-nowrap' data-stop-propagation={true}>\n {number}\n </span>\n <button\n type='button'\n onClick={handleCopy}\n className={`pi-inline-flex pi-items-center pi-justify-center pi-h-4 pi-w-4 pi-p-0 pi-bg-transparent focus:pi-outline-none ${\n copied ? 'pi-text-inherit' : 'pi-text-emerald-500 dark:pi-text-emerald-700'\n }`}\n data-stop-propagation={true}\n aria-label={(copied ? t('Call.Copied') : t('Call.Copy number')) || ''}\n >\n <FontAwesomeIcon\n icon={copied ? faCheck : faCopy}\n className='pi-h-4 pi-w-4'\n data-stop-propagation={true}\n />\n </button>\n </div>\n </CustomThemedTooltip>\n </span>\n )\n}\n\nexport default memo(NumberPopover)\n"],"names":["NUMBER_POPOVER_ID","copyWithTextarea","text","textarea","document","createElement","value","setAttribute","style","position","top","opacity","body","appendChild","select","copied","execCommand","error","removeChild","memo","t","useTranslation","number","useSelector","state","currentCall","_a","useState","setCopied","timeoutRef","useRef","isMountedRef","useEffect","current","clearTimeout","handleCopy","useCallback","__awaiter","navigator","clipboard","writeText","window","isSecureContext","_b","sent","setTimeout","React","className","type","FontAwesomeIcon","icon","faEllipsis","CustomThemedTooltip","id","place","offset","maxWidth","openOnClick","clickable","globalCloseEvents","clickOutsideAnchor","escape","onClick","concat","faCheck","faCopy"],"mappings":"yhCAWMA,EAAoB,yBAGpBC,EAAmB,SAACC,GACxB,IAAMC,EAAWC,SAASC,cAAc,YACxCF,EAASG,MAAQJ,EACjBC,EAASI,aAAa,WAAY,IAClCJ,EAASK,MAAMC,SAAW,QAC1BN,EAASK,MAAME,IAAM,UACrBP,EAASK,MAAMG,QAAU,IACzBP,SAASQ,KAAKC,YAAYV,GAC1BA,EAASW,SACT,IAAIC,GAAS,EACb,IACEA,EAASX,SAASY,YAAY,OAC/B,CAAC,MAAOC,GACPF,GAAS,CACV,CAED,OADAX,SAASQ,KAAKM,YAAYf,GACnBY,CACT,EA2FeI,EAAAA,EAAAA,KA7EW,WAChB,IAAAC,EAAMC,qBACNC,EAAWC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,qBACrDC,EAAsBC,EAAAA,UAAS,GAA9BZ,EAAMW,EAAA,GAAEE,EAASF,EAAA,GAClBG,EAAaC,SAA6C,MAC1DC,EAAeD,UAAO,GAE5BE,EAAAA,UAAU,WAER,OADAD,EAAaE,SAAU,EAChB,WACLF,EAAaE,SAAU,EACnBJ,EAAWI,SAASC,aAAaL,EAAWI,QAClD,CACD,EAAE,IAEHD,EAAAA,UAAU,WACRJ,GAAU,EACZ,EAAG,CAACN,IAEJ,IAAMa,EAAaC,cAAY,WAAA,OAAAC,EAAAA,eAAA,OAAA,OAAA,EAAA,wEAC7B,OAAKf,EACW,CAAA,GAjCWpB,EAiCWoB,EAjCCe,EAAAA,eAAA,OAAA,OAAA,EAAA,8EACrC,KAAoB,QAApBX,EAAA,OAAAY,oBAAAA,iBAAAA,UAAWC,iBAAS,IAAAb,OAAA,EAAAA,EAAEc,aAAaC,OAAOC,gBAA1C,MAAyD,CAAA,EAAA,oBAEzD,6BAAM,CAAA,EAAAJ,UAAUC,UAAUC,UAAUtC,WACpC,OADAyC,EAAAC,OACA,CAAA,GAAO,UAEP,gBAAA,CAAA,EAAO3C,EAAiBC,IAG5B,KAAA,EAAA,MAAA,CAAA,EAAOD,EAAiBC,WAuBH,CAAA,UAEnB,OADgBwB,EAA6BkB,QAC5Bb,EAAaE,SAC9BL,GAAU,GACNC,EAAWI,SAASC,aAAaL,EAAWI,SAChDJ,EAAWI,QAAUY,WAAW,WAC1Bd,EAAaE,SAASL,GAAU,EACrC,EA5DsB,UAuDsB,CAAA,GAlCzB,IAAO1B,GAwC5B,EAAA,EAAE,CAACoB,IAEJ,OAAKA,EAGHwB,EAAAA,QAAMzC,cAAA,OAAA,CAAA0C,UAAU,uEAAqE,GACnFD,EAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLD,UAAU,ySAAwS,kBACjS/C,EAAiB,yBACX,EACX,aAAAoB,EAAE,qBAAuB,IAErC0B,EAAAA,QAAAzC,cAAC4C,kBAAe,CAACC,KAAMC,EAAAA,WAAYJ,UAAU,gBAAe,yBAAwB,KAEtFD,UAAAzC,cAAC+C,EAAmBA,oBAAA,CAClBC,GAAIrD,EACJsD,MAAM,SACNC,OAAQ,GACRC,SAAS,QACTC,aAAW,EACXC,WAAS,EACTC,kBAAmB,CAAEC,oBAAoB,EAAMC,QAAQ,IAEvDf,EAAA,QAAAzC,cAAA,MAAA,CAAK0C,UAAU,mCAAkC,yBAAwB,GACvED,UAAAzC,cAAA,OAAA,CAAM0C,UAAU,gDAA8C,GAC3DzB,GAEHwB,EAAAA,QAAAzC,cAAA,SAAA,CACE2C,KAAK,SACLc,QAAS3B,EACTY,UAAW,iHACTgB,OAAAhD,EAAS,kBAAoB,gDAER,yBAAA,eACDK,EAATL,EAAW,cAAmB,qBAAwB,IAEnE+B,EAAC,QAAAzC,cAAA4C,EAAeA,gBACd,CAAAC,KAAMnC,EAASiD,EAAAA,QAAUC,EAAAA,OACzBlB,UAAU,gBACa,yBAAA,QAtCf,IA6CtB"}
@@ -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/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),l=require("../../utils/streaming/streamingUtils.js"),n=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 a=require("../../lib/phone/conversation.js"),r=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 o=require("../Button.js"),u=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var s=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var c=require("./Timer.js"),d=require("./Number.js"),p=require("./DisplayName.js"),m=require("./Avatar.js"),f=require("./DeviceIcon.js"),g=require("./NumberPopover.js"),x=require("../../styles/Island.styles.js"),v=require("./Actions.js"),E=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 w=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var h=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),b=require("../StreamingImage/index.js"),j=require("../VideoStreamingSkeleton/index.js"),N=require("../VideoStreamingEmptyState/index.js"),y=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),q=require("../../node_modules/react-redux/es/hooks/useSelector.js");function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=_(e);function C(e,t){return!e&&!t}var k=e.memo(function(e){var t=e.children,i=e.className,l=void 0===i?"pi-gap-1 pi-grid-rows-2":i;return T.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-grid-cols-1 ".concat(l)},t)});k.displayName="Details";var I=e.memo(function(e){var l=e.label,n=e.tooltipContent;return l?T.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary","data-tooltip-id":n?"tooltip-queue":void 0,"data-tooltip-content":n||""},T.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null});I.displayName="QueueBadge";var S=e.memo(function(e){var l=e.label,n=e.tooltipContent;return l?T.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":n?"tooltip-queue":void 0,"data-tooltip-content":n||"","aria-label":n||l},T.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-3 pi-w-3 pi-flex-none"}),T.default.createElement("span",{className:"pi-block pi-max-w-28 pi-truncate"},l)):null});S.displayName="IncomingQueueBadge";var A=e.memo(function(){var _,A=w.useTranslation().t,P=y.useDispatch(),F=q.useSelector(function(e){return e.currentCall}),O=F.incoming,M=F.accepted,B=F.outgoing,D=F.startTime,U=F.paused,V=F.number,W=F.displayName,L=F.isRecording,z=F.streamingSourceNumber,H=F.queueName,Q=F.queueNumber,R=F.throughQueue,G=F.counterpartDeviceType,J=q.useSelector(function(e){return e.island}),K=J.isOpen,X=J.isFromStreaming,Y=q.useSelector(function(e){return e.webrtc}).remoteAudioStream,Z=q.useSelector(function(e){return e.listen}),$=Z.isListen,ee=Z.isIntrude,te=Z.isListenExtension,ie=Z.isIntrudeExtension,le=q.useSelector(function(e){return e.alerts}).data,ne=q.useSelector(function(e){return e.currentUser}),ae=q.useSelector(function(e){return e.streaming}),re=ae.videoSources,oe=ae.sourceImages,ue=e.useMemo(function(){return Object.values(le).filter(function(e){return e.active})},[le]),se=e.useMemo(function(){return ue.length>0?ue[ue.length-1]:null},[ue]),ce=e.useMemo(function(){return X&&z&&!M},[X,z,M]),de=e.useMemo(function(){if(!z||!re)return{canUnlock:!1,tooltipText:""};var e=Object.values(re).find(function(e){return(null==e?void 0:e.extension)===z}),t=Boolean((null==e?void 0:e.cmdOpen)&&""!==(null==e?void 0:e.cmdOpen.trim()));return{canUnlock:t,tooltipText:t&&e?"".concat(A("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}},[z,re,A]),pe=e.useMemo(function(){return a.isNumberOnlyName(W)},[W]),me=e.useMemo(function(){return!pe&&(e=V,(e||"").replace(/\D/g,"")).length>0;var e},[pe,V]),fe=Boolean(G),ge=e.useMemo(function(){return H||Q||""},[H,Q]),xe=e.useMemo(function(){return R&&ge?"".concat(A("Common.Queue"),": ").concat(ge):""},[R,ge,A]),ve=e.useMemo(function(){return Boolean(O&&!M&&R&&ge)},[M,O,R,ge]),Ee=e.useCallback(function(){var e;return T.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"},T.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:h.faOfficePhone,className:"pi-mr-1"}),T.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==ne?void 0:ne.default_device)||void 0===e?void 0:e.description)||A("Common.Physical phone")))},[null===(_=null==ne?void 0:ne.default_device)||void 0===_?void 0:_.description,A]),we=e.useCallback(function(e){var l=K?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",n=K?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",a=K?"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 T.default.createElement("div",{className:"".concat(l," pi-flex pi-justify-center pi-items-center")},T.default.createElement("div",{className:"".concat(n," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},T.default.createElement("span",{className:"".concat(a," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))},[K]),he=e.useMemo(function(){var e="pi-grid pi-items-center";return K&&(e=ve?"pi-grid pi-items-center":"pi-grid pi-items-start",M?e+=" pi-grid-rows-[72px_1fr]":O?e+=" pi-grid-cols-[256px_114px]":B&&(e+=" pi-grid-cols-[1fr_84px]")),ce?"pi-flex pi-flex-col":e},[K,M,O,B,ce,ve]),be=e.useMemo(function(){var e=K&&!ve?"start":"center";return"pi-grid ".concat(K&&!M&&B?"pi-grid-cols-[48px_1fr]":K&&!M&&O?"pi-grid-cols-[48px_1fr_1px]":K&&M?"pi-grid-cols-[48px_164px_48px]":K||M?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(K?"5":"3"," pi-items-").concat(e," pi-justify-center pi-w-full")},[K,M,O,B,ve]),je=e.useMemo(function(){return ce?"pi-grid-cols-3":C(B,M)?"pi-grid-cols-2":M?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"},[ce,B,M]),Ne=e.useCallback(function(){var e=K?"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 $?T.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):ee?T.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):T.default.createElement(m.default,null)},[K,$,ee]),ye=e.useCallback(function(e,t){return fe||t?T.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},fe&&T.default.createElement(f.default,null),e):e},[fe]),qe=e.useCallback(function(){return K?ee?T.default.createElement(k,null,T.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},A("Common.Intrude"),ie?" - ".concat(ie):""),M?r.isPhysical()?Ee():T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}):ie?"".concat(ie):""):$?T.default.createElement(k,null,T.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},A("Common.Listen"),te?" - ".concat(te):""),M?r.isPhysical()?Ee():T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}):te?"".concat(te):""):ve?T.default.createElement(k,{className:pe?"pi-grid-rows-[20px_24px] pi-gap-0.5":"pi-grid-rows-[20px_24px_24px] pi-gap-0.5"},T.default.createElement(S,{label:ge,tooltipContent:xe}),T.default.createElement(p.default,null),!pe&&T.default.createElement(d.default,null)):T.default.createElement(k,null,M&&R&&ge?T.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},T.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},T.default.createElement(p.default,null)),T.default.createElement(I,{label:ge,tooltipContent:xe})):T.default.createElement(p.default,null),M?ye(T.default.createElement(T.default.Fragment,null,r.isPhysical()?Ee():T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}),me&&T.default.createElement(g.default,null)),me):ye(pe&&(B||O)?T.default.createElement(x.StyledNumber,{isOpen:K},T.default.createElement("span",{className:"dark:pi-text-gray-50 pi-text-gray-600"},A(B?"Call.Calling...":"Call.Incoming call"))):T.default.createElement(d.default,null),!1)):null},[O,B,pe,me,ye,K,ee,$,M,D,ie,te,A,Ee,M,R,ge,xe,ve]),_e=e.useCallback(function(){return M&&L?we("red"):M&&Y&&!r.isPhysical()?T.default.createElement(u.AudioBars,{audioStream:Y,paused:U,size:K?"large":"small"}):M&&r.isPhysical()?we("green"):null},[M,L,Y,K,U,we]),Te=e.useCallback(function(){if(!re||0===Object.keys(re).length||!z)return T.default.createElement(j.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(re).find(function(e){return e.extension===z});return e&&(oe[e.id]||e.image)?T.default.createElement(b.default,null):T.default.createElement(N.default,{className:"pi-w-full pi-h-40 pi-mt-4"})},[z,re,oe]);if(null!==se)return null;return T.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},T.default.createElement("div",{className:he},ce?T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-w-full pi-gap-2"},T.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4 pi-min-w-0 pi-flex-1"},Ne(),T.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2 pi-min-w-0"},T.default.createElement(p.default,null),T.default.createElement(d.default,null))),T.default.createElement("div",{className:"pi-flex pi-gap-2 pi-flex-shrink-0"},T.default.createElement(E.default,{description:A("Tooltip.Hangup")}),!B&&T.default.createElement(o.Button,{onClick:function(){return n.answerIncomingCall(),void setTimeout(function(){P.island.setIslandView("streamingAnswer")},200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":A("Tooltip.Answer")||""},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==de?void 0:de.canUnlock)&&T.default.createElement(o.Button,{variant:"default",onClick:l.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==de?void 0:de.tooltipText},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Te()):T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:be},Ne(),qe(),!K&&!M&&T.default.createElement(p.default,null),!K&&M&&T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}),_e()),K&&T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"".concat($||ee?"":"pi-grid pi-gap-y-5")},M&&T.default.createElement(v.default,null),T.default.createElement("div",{className:"pi-grid ".concat(je," pi-gap-3.5")},T.default.createElement(E.default,{description:A("Tooltip.Hangup and transfer")}),C(B,M)&&T.default.createElement(o.Button,{onClick:n.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":A("Tooltip.Answer")||""},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),T.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),T.default.createElement(s.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),T.default.createElement(s.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),T.default.createElement(s.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),T.default.createElement(s.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}),T.default.createElement(s.CustomThemedTooltip,{id:f.DEVICE_TOOLTIP_ID,place:"right"}))});exports.default=A;
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/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),a=require("../../utils/streaming/streamingUtils.js"),l=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 n=require("../../lib/phone/conversation.js"),r=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 o=require("../Button.js"),s=require("../AudioBars.js");require("../../node_modules/i18next/dist/esm/i18next.js");var u=require("../CustomThemedTooltip.js");require("../TranscriptionView/TranscriptionView.js");var c=require("./Timer.js"),d=require("./Number.js"),p=require("./DisplayName.js"),m=require("./Avatar.js"),f=require("./DeviceIcon.js"),g=require("./NumberPopover.js"),x=require("../../styles/Island.styles.js"),E=require("./Actions.js"),v=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 w=require("../../node_modules/react-i18next/dist/es/useTranslation.js");require("../../node_modules/@babel/runtime/helpers/slicedToArray.js");var h=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),b=require("../StreamingImage/index.js"),j=require("../VideoStreamingSkeleton/index.js"),N=require("../VideoStreamingEmptyState/index.js"),y=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),q=require("../../node_modules/react-redux/es/hooks/useSelector.js");function _(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=_(e);function C(e,t){return!e&&!t}var k=e.memo(function(e){var t=e.children,i=e.className,a=void 0===i?"pi-gap-1 pi-grid-rows-2":i;return T.default.createElement("div",{className:"pi-grid pi-min-w-0 pi-self-center pi-grid-cols-1 ".concat(a)},t)});k.displayName="Details";var I=e.memo(function(e){var a=e.label,l=e.tooltipContent;return a?T.default.createElement("span",{className:"pi-inline-flex pi-flex-none pi-items-center pi-justify-center pi-text-iconSecondary dark:pi-text-indigo-400","data-tooltip-id":l?"tooltip-queue":void 0,"data-tooltip-content":l||""},T.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-4 pi-w-4"})):null});I.displayName="QueueBadge";var S=e.memo(function(e){var a=e.label,l=e.tooltipContent;return a?T.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":l?"tooltip-queue":void 0,"data-tooltip-content":l||"","aria-label":l||a},T.default.createElement(t.FontAwesomeIcon,{icon:i.faUsers,className:"pi-h-3 pi-w-3 pi-flex-none"}),T.default.createElement("span",{className:"pi-block pi-max-w-28 pi-truncate"},a)):null});S.displayName="IncomingQueueBadge";var A=e.memo(function(){var _,A=w.useTranslation().t,O=y.useDispatch(),P=q.useSelector(function(e){return e.currentCall}),F=P.incoming,M=P.accepted,B=P.outgoing,D=P.startTime,U=P.paused,W=P.number,V=P.displayName,z=P.isRecording,L=P.streamingSourceNumber,H=P.queueName,Q=P.queueNumber,R=P.throughQueue,G=P.counterpartDeviceType,J=q.useSelector(function(e){return e.island}),K=J.isOpen,X=J.isFromStreaming,Y=q.useSelector(function(e){return e.webrtc}).remoteAudioStream,Z=q.useSelector(function(e){return e.listen}),$=Z.isListen,ee=Z.isIntrude,te=Z.isListenExtension,ie=Z.isIntrudeExtension,ae=q.useSelector(function(e){return e.alerts}).data,le=q.useSelector(function(e){return e.currentUser}),ne=q.useSelector(function(e){return e.streaming}),re=ne.videoSources,oe=ne.sourceImages,se=e.useMemo(function(){return Object.values(ae).filter(function(e){return e.active})},[ae]),ue=e.useMemo(function(){return se.length>0?se[se.length-1]:null},[se]),ce=e.useMemo(function(){return X&&L&&!M},[X,L,M]),de=e.useMemo(function(){if(!L||!re)return{canUnlock:!1,tooltipText:""};var e=Object.values(re).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(A("VideoStreaming.Open"),": ").concat(null==e?void 0:e.description):""}},[L,re,A]),pe=e.useMemo(function(){return n.isNumberOnlyName(V)},[V]),me=e.useMemo(function(){return!pe&&(e=W,(e||"").replace(/\D/g,"")).length>0;var e},[pe,W]),fe=Boolean(G),ge=e.useMemo(function(){return H||Q||""},[H,Q]),xe=e.useMemo(function(){return R&&ge?"".concat(A("Common.Queue"),": ").concat(ge):""},[R,ge,A]),Ee=e.useMemo(function(){return Boolean(F&&!M&&R&&ge)},[M,F,R,ge]),ve=e.useCallback(function(){var e;return T.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"},T.default.createElement(t.FontAwesomeIcon,{size:"sm",icon:h.faOfficePhone,className:"pi-mr-1"}),T.default.createElement("span",{className:"pi-max-w-16 pi-truncate"},(null===(e=null==le?void 0:le.default_device)||void 0===e?void 0:e.description)||A("Common.Physical phone")))},[null===(_=null==le?void 0:le.default_device)||void 0===_?void 0:_.description,A]),we=e.useCallback(function(e){var a=K?"pi-h-12 pi-w-12":"pi-h-6 pi-w-6",l=K?"pi-h-8":"pi-h-4 pi-w-4 pi-rounded-full",n=K?"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 T.default.createElement("div",{className:"".concat(a," pi-flex pi-justify-center pi-items-center")},T.default.createElement("div",{className:"".concat(l," pi-w-fit pi-flex pi-justify-center pi-items-center pi-gap-1 pi-overflow-hidden")},T.default.createElement("span",{className:"".concat(n," pi-animate-ping pi-absolute pi-inline-flex pi-rounded-full ").concat(r," pi-opacity-75")}),T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-4 pi-h-6 pi-rotate-45 ".concat(o),icon:i.faCircle})))},[K]),he=e.useMemo(function(){var e="pi-grid pi-items-center";return K&&(e=Ee?"pi-grid pi-items-center":"pi-grid pi-items-start",M?e+=" pi-grid-rows-[72px_1fr]":F?e+=" pi-grid-cols-[256px_114px]":B&&(e+=" pi-grid-cols-[1fr_84px]")),ce?"pi-flex pi-flex-col":e},[K,M,F,B,ce,Ee]),be=e.useMemo(function(){var e=K&&!Ee?"start":"center";return"pi-grid ".concat(K&&!M&&B?"pi-grid-cols-[48px_1fr]":K&&!M&&F?"pi-grid-cols-[48px_1fr_1px]":K&&M?"pi-grid-cols-[48px_164px_48px]":K||M?"pi-grid-cols-[24px_66px_24px]":"pi-grid-cols-[24px_102px]"," pi-gap-").concat(K?"5":"3"," pi-items-").concat(e," pi-justify-center pi-w-full")},[K,M,F,B,Ee]),je=e.useMemo(function(){return ce?"pi-grid-cols-3":C(B,M)?"pi-grid-cols-2":M?"pi-grid-cols-1 pi-justify-items-center":"pi-grid-cols-1 pi-justify-items-end"},[ce,B,M]),Ne=e.useCallback(function(){var e=K?"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 $?T.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faEarListen}):ee?T.default.createElement(t.FontAwesomeIcon,{className:e,icon:i.faHandPointUp}):T.default.createElement(m.default,null)},[K,$,ee]),ye=e.useCallback(function(e,t){return fe||t?T.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},fe&&T.default.createElement(f.default,null),e):e},[fe]),qe=e.useCallback(function(){return K?ee?T.default.createElement(k,null,T.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},A("Common.Intrude"),ie?" - ".concat(ie):""),M?r.isPhysical()?ve():T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}):ie?"".concat(ie):""):$?T.default.createElement(k,null,T.default.createElement("span",{className:"pi-justify-center pi-w-fit pi-relative pi-inline-block pi-font-bold pi-text-base"},A("Common.Listen"),te?" - ".concat(te):""),M?r.isPhysical()?ve():T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}):te?"".concat(te):""):Ee?T.default.createElement(k,{className:pe?"pi-grid-rows-[20px_24px] pi-gap-0.5":"pi-grid-rows-[20px_24px_24px] pi-gap-0.5"},T.default.createElement(S,{label:ge,tooltipContent:xe}),T.default.createElement(p.default,null),!pe&&T.default.createElement(d.default,null)):T.default.createElement(k,null,M&&R&&ge?T.default.createElement("div",{className:"pi-flex pi-min-w-0 pi-items-center pi-gap-2"},T.default.createElement("div",{className:"pi-min-w-0 pi-flex-1"},T.default.createElement(p.default,null)),T.default.createElement(I,{label:ge,tooltipContent:xe})):T.default.createElement(p.default,null),M?ye(T.default.createElement(T.default.Fragment,null,r.isPhysical()?ve():me?T.default.createElement("span",{className:"pi-grid pi-items-center"},T.default.createElement(x.StyledTimer,{isOpen:K,size:"large","aria-hidden":"true",className:"pi-invisible pi-col-start-1 pi-row-start-1"},"00:00:00"),T.default.createElement("span",{className:"pi-col-start-1 pi-row-start-1"},T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}))):T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}),me&&T.default.createElement(g.default,null)),me):ye(pe&&(B||F)?T.default.createElement(x.StyledNumber,{isOpen:K},T.default.createElement("span",{className:"dark:pi-text-gray-50 pi-text-gray-600"},A(B?"Call.Calling...":"Call.Incoming call"))):T.default.createElement(d.default,null),!1)):null},[F,B,pe,me,ye,K,ee,$,M,D,ie,te,A,ve,M,R,ge,xe,Ee]),_e=e.useCallback(function(){return M&&z?we("red"):M&&Y&&!r.isPhysical()?T.default.createElement(s.AudioBars,{audioStream:Y,paused:U,size:K?"large":"small"}):M&&r.isPhysical()?we("green"):null},[M,z,Y,K,U,we]),Te=e.useCallback(function(){if(!re||0===Object.keys(re).length||!L)return T.default.createElement(j.default,{className:"pi-w-full pi-h-40 pi-mt-4"});var e=Object.values(re).find(function(e){return e.extension===L});return e&&(oe[e.id]||e.image)?T.default.createElement(b.default,null):T.default.createElement(N.default,{className:"pi-w-full pi-h-40 pi-mt-4"})},[L,re,oe]);if(null!==ue)return null;return T.default.createElement("div",{className:"pi-bg-red pi-content-center pi-justify-center"},T.default.createElement("div",{className:he},ce?T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-between pi-w-full pi-gap-2"},T.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4 pi-min-w-0 pi-flex-1"},Ne(),T.default.createElement("div",{className:"pi-flex pi-flex-col pi-justify-center pi-space-y-2 pi-min-w-0"},T.default.createElement(p.default,null),T.default.createElement(d.default,null))),T.default.createElement("div",{className:"pi-flex pi-gap-2 pi-flex-shrink-0"},T.default.createElement(v.default,{description:A("Tooltip.Hangup")}),!B&&T.default.createElement(o.Button,{onClick:function(){return l.answerIncomingCall(),void setTimeout(function(){O.island.setIslandView("streamingAnswer")},200)},variant:"green","data-tooltip-id":"tooltip-answer","data-tooltip-content":A("Tooltip.Answer")||""},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faPhone})),(null==de?void 0:de.canUnlock)&&T.default.createElement(o.Button,{variant:"default",onClick:a.handleStreamingUnlock,"data-tooltip-id":"tooltip-unlock","data-tooltip-content":null==de?void 0:de.tooltipText},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-5 pi-h-5",icon:i.faUnlock})))),Te()):T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:be},Ne(),qe(),!K&&!M&&T.default.createElement(p.default,null),!K&&M&&T.default.createElement(c.default,{startTime:D,isNotAlwaysWhite:!0}),_e()),K&&T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"".concat($||ee?"":"pi-grid pi-gap-y-5")},M&&T.default.createElement(E.default,null),T.default.createElement("div",{className:"pi-grid ".concat(je," pi-gap-3.5")},T.default.createElement(v.default,{description:A("Tooltip.Hangup and transfer")}),C(B,M)&&T.default.createElement(o.Button,{onClick:l.answerIncomingCall,variant:"green","data-tooltip-id":"tooltip-answer-left","data-tooltip-content":A("Tooltip.Answer")||""},T.default.createElement(t.FontAwesomeIcon,{className:"pi-w-6 pi-h-6",icon:i.faPhone}))))))),T.default.createElement(u.CustomThemedTooltip,{id:"tooltip-answer-left",place:"left"}),T.default.createElement(u.CustomThemedTooltip,{id:"tooltip-answer",place:"left"}),T.default.createElement(u.CustomThemedTooltip,{id:"tooltip-unlock",place:"left"}),T.default.createElement(u.CustomThemedTooltip,{id:"tooltip-display-name",place:"bottom"}),T.default.createElement(u.CustomThemedTooltip,{id:"tooltip-queue",place:"bottom"}),T.default.createElement(u.CustomThemedTooltip,{id:f.DEVICE_TOOLTIP_ID,place:"right",offset:11,maxWidth:"300px"}))});exports.default=A;
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 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 { isNumberOnlyName } from '../../lib/phone/conversation'\nimport Avatar from './Avatar'\nimport DeviceIcon, { DEVICE_TOOLTIP_ID } from './DeviceIcon'\nimport NumberPopover from './NumberPopover'\nimport { StyledNumber } from '../../styles/Island.styles'\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\nconst onlyDigits = (value?: string) => (value || '').replace(/\\D/g, '')\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 displayName,\n isRecording,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n counterpartDeviceType,\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 isNameNumberOnly = useMemo(() => isNumberOnlyName(displayName), [displayName])\n\n const canRevealNumber = useMemo(\n () => !isNameNumberOnly && onlyDigits(number).length > 0,\n [isNameNumberOnly, number],\n )\n\n const hasCounterpartDevice = Boolean(counterpartDeviceType)\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 return <Avatar />\n }, [isOpen, isListen, isIntrude])\n\n const renderWithDeviceIcon = useCallback(\n (content: React.ReactNode, forceRow: boolean) =>\n hasCounterpartDevice || forceRow ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n {hasCounterpartDevice && <DeviceIcon />}\n {content}\n </div>\n ) : (\n content\n ),\n [hasCounterpartDevice],\n )\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\n className={\n isNameNumberOnly\n ? 'pi-grid-rows-[20px_24px] pi-gap-0.5'\n : 'pi-grid-rows-[20px_24px_24px] pi-gap-0.5'\n }\n >\n <IncomingQueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n <DisplayName />\n {!isNameNumberOnly && <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 ? renderWithDeviceIcon(\n <>\n {!isPhysical() ? (\n <Timer startTime={startTime} isNotAlwaysWhite />\n ) : (\n renderLandlinePhoneDiv()\n )}\n {canRevealNumber && <NumberPopover />}\n </>,\n canRevealNumber,\n )\n : renderWithDeviceIcon(\n isNameNumberOnly && (outgoing || incoming) ? (\n <StyledNumber isOpen={isOpen}>\n <span className='dark:pi-text-gray-50 pi-text-gray-600'>\n {outgoing ? t('Call.Calling...') : t('Call.Incoming call')}\n </span>\n </StyledNumber>\n ) : (\n <Number />\n ),\n false,\n )}\n </Details>\n )\n }, [\n incoming,\n outgoing,\n isNameNumberOnly,\n canRevealNumber,\n renderWithDeviceIcon,\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 pi-w-full pi-gap-2'>\n <div className='pi-flex pi-items-center pi-gap-4 pi-min-w-0 pi-flex-1'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2 pi-min-w-0'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2 pi-flex-shrink-0'>\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 <CustomThemedTooltip id={DEVICE_TOOLTIP_ID} place='right' />\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","streamingSourceNumber","queueName","queueNumber","throughQueue","counterpartDeviceType","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","isNameNumberOnly","isNumberOnlyName","canRevealNumber","value","replace","hasCounterpartDevice","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","renderWithDeviceIcon","content","forceRow","DeviceIcon","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","Fragment","NumberPopover","StyledNumber","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place","DEVICE_TOOLTIP_ID"],"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 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 { isNumberOnlyName } from '../../lib/phone/conversation'\nimport Avatar from './Avatar'\nimport DeviceIcon, { DEVICE_TOOLTIP_ID } from './DeviceIcon'\nimport NumberPopover from './NumberPopover'\nimport { StyledNumber, StyledTimer } from '../../styles/Island.styles'\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\nconst onlyDigits = (value?: string) => (value || '').replace(/\\D/g, '')\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 dark:pi-text-indigo-400'\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 displayName,\n isRecording,\n streamingSourceNumber,\n queueName,\n queueNumber,\n throughQueue,\n counterpartDeviceType,\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 isNameNumberOnly = useMemo(() => isNumberOnlyName(displayName), [displayName])\n\n const canRevealNumber = useMemo(\n () => !isNameNumberOnly && onlyDigits(number).length > 0,\n [isNameNumberOnly, number],\n )\n\n const hasCounterpartDevice = Boolean(counterpartDeviceType)\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 return <Avatar />\n }, [isOpen, isListen, isIntrude])\n\n const renderWithDeviceIcon = useCallback(\n (content: React.ReactNode, forceRow: boolean) =>\n hasCounterpartDevice || forceRow ? (\n <div className='pi-flex pi-min-w-0 pi-items-center pi-gap-2'>\n {hasCounterpartDevice && <DeviceIcon />}\n {content}\n </div>\n ) : (\n content\n ),\n [hasCounterpartDevice],\n )\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\n className={\n isNameNumberOnly\n ? 'pi-grid-rows-[20px_24px] pi-gap-0.5'\n : 'pi-grid-rows-[20px_24px_24px] pi-gap-0.5'\n }\n >\n <IncomingQueueBadge label={queueLabel} tooltipContent={queueTooltipContent} />\n <DisplayName />\n {!isNameNumberOnly && <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 ? renderWithDeviceIcon(\n <>\n {isPhysical() ? (\n renderLandlinePhoneDiv()\n ) : canRevealNumber ? (\n <span className='pi-grid pi-items-center'>\n <StyledTimer\n isOpen={isOpen}\n size='large'\n aria-hidden='true'\n className='pi-invisible pi-col-start-1 pi-row-start-1'\n >\n 00:00:00\n </StyledTimer>\n <span className='pi-col-start-1 pi-row-start-1'>\n <Timer startTime={startTime} isNotAlwaysWhite />\n </span>\n </span>\n ) : (\n <Timer startTime={startTime} isNotAlwaysWhite />\n )}\n {canRevealNumber && <NumberPopover />}\n </>,\n canRevealNumber,\n )\n : renderWithDeviceIcon(\n isNameNumberOnly && (outgoing || incoming) ? (\n <StyledNumber isOpen={isOpen}>\n <span className='dark:pi-text-gray-50 pi-text-gray-600'>\n {outgoing ? t('Call.Calling...') : t('Call.Incoming call')}\n </span>\n </StyledNumber>\n ) : (\n <Number />\n ),\n false,\n )}\n </Details>\n )\n }, [\n incoming,\n outgoing,\n isNameNumberOnly,\n canRevealNumber,\n renderWithDeviceIcon,\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 pi-w-full pi-gap-2'>\n <div className='pi-flex pi-items-center pi-gap-4 pi-min-w-0 pi-flex-1'>\n {renderStatusIcon()}\n <div className='pi-flex pi-flex-col pi-justify-center pi-space-y-2 pi-min-w-0'>\n <DisplayName />\n <Number />\n </div>\n </div>\n\n <div className='pi-flex pi-gap-2 pi-flex-shrink-0'>\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 <CustomThemedTooltip\n id={DEVICE_TOOLTIP_ID}\n place='right'\n offset={11}\n maxWidth='300px'\n />\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","streamingSourceNumber","queueName","queueNumber","throughQueue","counterpartDeviceType","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","isNameNumberOnly","isNumberOnlyName","canRevealNumber","value","replace","hasCounterpartDevice","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","renderWithDeviceIcon","content","forceRow","DeviceIcon","renderDetails","isPhysical","Timer","isNotAlwaysWhite","DisplayName","Number","Fragment","StyledTimer","NumberPopover","StyledNumber","renderAudioIndicator","AudioBars","audioStream","renderStreamingContent","keys","VideoStreamingSkeleton","id","image","StreamingImage","VideoStreamingEmptyState","Hangup","Button","onClick","answerIncomingCall","setTimeout","setIslandView","variant","faPhone","handleStreamingUnlock","faUnlock","Actions","CustomThemedTooltip","place","DEVICE_TOOLTIP_ID","offset","maxWidth"],"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 r=require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),o=require("../node_modules/react-redux/es/hooks/useSelector.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=t(e);exports.CustomThemedTooltip=function(e){var t=e.id,l=e.place,a=void 0===l?"bottom":l,d=e.className,n=void 0===d?"":d,c=e.openOnClick,s=e.clickable,u=e.globalCloseEvents,m=e.children,p="dark"===o.useSelector(function(e){return e.darkTheme}).theme?{backgroundColor:"rgb(243, 244, 246)",color:"rgb(17, 24, 39)",fontSize:"0.875rem",fontWeight:400,lineHeight:"1.25rem",padding:"0.375rem 0.625rem",maxWidth:"185px",borderRadius:"4px"}:{backgroundColor:"rgb(31, 41, 55)",color:"rgb(249, 250, 251)",fontSize:"0.875rem",fontWeight:400,lineHeight:"1.25rem",padding:"0.375rem 0.625rem",maxWidth:"185px",borderRadius:"4px"};return i.default.createElement(r.Tooltip,{id:t,place:a,className:"pi-z-1000 ".concat(n),opacity:1,style:p,openOnClick:c,clickable:s,globalCloseEvents:u},m)};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var o=require("../node_modules/react-tooltip/dist/react-tooltip.min.mjs.js"),r=require("../node_modules/react-redux/es/hooks/useSelector.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=t(e);exports.CustomThemedTooltip=function(e){var t=e.id,l=e.place,a=void 0===l?"bottom":l,d=e.className,n=void 0===d?"":d,c=e.openOnClick,s=e.clickable,u=e.globalCloseEvents,m=e.offset,p=e.maxWidth,f=void 0===p?"185px":p,b=e.children,g="dark"===r.useSelector(function(e){return e.darkTheme}).theme?{backgroundColor:"rgb(243, 244, 246)",color:"rgb(17, 24, 39)",fontSize:"0.875rem",fontWeight:400,lineHeight:"1.25rem",padding:"0.375rem 0.625rem",maxWidth:f,borderRadius:"4px"}:{backgroundColor:"rgb(31, 41, 55)",color:"rgb(249, 250, 251)",fontSize:"0.875rem",fontWeight:400,lineHeight:"1.25rem",padding:"0.375rem 0.625rem",maxWidth:f,borderRadius:"4px"};return i.default.createElement(o.Tooltip,{id:t,place:a,className:"pi-z-1000 [&_.react-tooltip-content-wrapper]:pi-p-0 ".concat(n),opacity:1,style:g,openOnClick:c,clickable:s,globalCloseEvents:u,offset:m},b)};
2
2
  //# sourceMappingURL=CustomThemedTooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomThemedTooltip.js","sources":["../../src/components/CustomThemedTooltip.tsx"],"sourcesContent":["// src/components/CustomThemedTooltip.tsx\nimport React, { FC, ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Tooltip, type ITooltip } from 'react-tooltip'\n\ninterface CustomThemedTooltipProps {\n id: string\n place?: 'top' | 'right' | 'bottom' | 'left'\n className?: string\n openOnClick?: boolean\n clickable?: boolean\n globalCloseEvents?: ITooltip['globalCloseEvents']\n children?: ReactNode\n}\n\nexport const CustomThemedTooltip: FC<CustomThemedTooltipProps> = ({\n id,\n place = 'bottom',\n className = '',\n openOnClick,\n clickable,\n globalCloseEvents,\n children,\n}) => {\n const { theme } = useSelector((state: RootState) => state.darkTheme)\n\n const tooltipStyle =\n theme === 'dark'\n ? {\n backgroundColor: 'rgb(243, 244, 246)',\n color: 'rgb(17, 24, 39)',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: '1.25rem',\n padding: '0.375rem 0.625rem',\n maxWidth: '185px',\n borderRadius: '4px',\n }\n : {\n backgroundColor: 'rgb(31, 41, 55)',\n color: 'rgb(249, 250, 251)',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: '1.25rem',\n padding: '0.375rem 0.625rem',\n maxWidth: '185px',\n borderRadius: '4px',\n }\n\n return (\n <Tooltip\n id={id}\n place={place}\n className={`pi-z-1000 ${className}`}\n opacity={1}\n style={tooltipStyle}\n openOnClick={openOnClick}\n clickable={clickable}\n globalCloseEvents={globalCloseEvents}\n >\n {children}\n </Tooltip>\n )\n}\n"],"names":["_a","id","_b","place","_c","className","openOnClick","clickable","globalCloseEvents","children","tooltipStyle","useSelector","state","darkTheme","backgroundColor","color","fontSize","fontWeight","lineHeight","padding","maxWidth","borderRadius","React","createElement","Tooltip","opacity","style"],"mappings":"2YAgBiE,SAACA,OAChEC,EAAED,EAAAC,GACFC,EAAAF,EAAAG,MAAAA,OAAQ,IAAAD,EAAA,SAAQA,EAChBE,EAAcJ,EAAAK,UAAdA,OAAS,IAAAD,EAAG,GAAEA,EACdE,EAAWN,EAAAM,YACXC,EAASP,EAAAO,UACTC,EAAiBR,EAAAQ,kBACjBC,EAAQT,EAAAS,SAIFC,EACM,SAHMC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,kBAIpD,CACEC,gBAAiB,qBACjBC,MAAO,kBACPC,SAAU,WACVC,WAAY,IACZC,WAAY,UACZC,QAAS,oBACTC,SAAU,QACVC,aAAc,OAEhB,CACEP,gBAAiB,kBACjBC,MAAO,qBACPC,SAAU,WACVC,WAAY,IACZC,WAAY,UACZC,QAAS,oBACTC,SAAU,QACVC,aAAc,OAGtB,OACEC,UAACC,cAAAC,EAAOA,SACNvB,GAAIA,EACJE,MAAOA,EACPE,UAAW,oBAAaA,GACxBoB,QAAS,EACTC,MAAOhB,EACPJ,YAAaA,EACbC,UAAWA,EACXC,kBAAmBA,GAElBC,EAGP"}
1
+ {"version":3,"file":"CustomThemedTooltip.js","sources":["../../src/components/CustomThemedTooltip.tsx"],"sourcesContent":["// src/components/CustomThemedTooltip.tsx\nimport React, { FC, ReactNode } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { Tooltip, type ITooltip } from 'react-tooltip'\n\ninterface CustomThemedTooltipProps {\n id: string\n place?: 'top' | 'right' | 'bottom' | 'left'\n className?: string\n openOnClick?: boolean\n clickable?: boolean\n globalCloseEvents?: ITooltip['globalCloseEvents']\n offset?: number\n maxWidth?: string\n children?: ReactNode\n}\n\nexport const CustomThemedTooltip: FC<CustomThemedTooltipProps> = ({\n id,\n place = 'bottom',\n className = '',\n openOnClick,\n clickable,\n globalCloseEvents,\n offset,\n maxWidth = '185px',\n children,\n}) => {\n const { theme } = useSelector((state: RootState) => state.darkTheme)\n\n const tooltipStyle =\n theme === 'dark'\n ? {\n backgroundColor: 'rgb(243, 244, 246)',\n color: 'rgb(17, 24, 39)',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: '1.25rem',\n padding: '0.375rem 0.625rem',\n maxWidth,\n borderRadius: '4px',\n }\n : {\n backgroundColor: 'rgb(31, 41, 55)',\n color: 'rgb(249, 250, 251)',\n fontSize: '0.875rem',\n fontWeight: 400,\n lineHeight: '1.25rem',\n padding: '0.375rem 0.625rem',\n maxWidth,\n borderRadius: '4px',\n }\n\n return (\n <Tooltip\n id={id}\n place={place}\n className={`pi-z-1000 [&_.react-tooltip-content-wrapper]:pi-p-0 ${className}`}\n opacity={1}\n style={tooltipStyle}\n openOnClick={openOnClick}\n clickable={clickable}\n globalCloseEvents={globalCloseEvents}\n offset={offset}\n >\n {children}\n </Tooltip>\n )\n}\n"],"names":["_a","id","_b","place","_c","className","openOnClick","clickable","globalCloseEvents","offset","_d","maxWidth","children","tooltipStyle","useSelector","state","darkTheme","backgroundColor","color","fontSize","fontWeight","lineHeight","padding","borderRadius","React","Tooltip","concat","opacity","style"],"mappings":"2YAkBiE,SAACA,GAChE,IAAAC,OACAC,EAAAF,EAAAG,MAAAA,aAAQ,SAAQD,EAChBE,EAAAJ,EAAAK,UAAAA,OAAS,IAAAD,EAAG,GAAEA,EACdE,EAAWN,EAAAM,YACXC,cACAC,EAAiBR,EAAAQ,kBACjBC,EAAMT,EAAAS,OACNC,EAAkBV,EAAAW,SAAlBA,OAAW,IAAAD,EAAA,QAAOA,EAClBE,EAAQZ,EAAAY,SAIFC,EACM,SAHMC,cAAY,SAACC,GAAqB,OAAAA,EAAMC,kBAIpD,CACEC,gBAAiB,qBACjBC,MAAO,kBACPC,SAAU,WACVC,WAAY,IACZC,WAAY,UACZC,QAAS,oBACTX,SAAQA,EACRY,aAAc,OAEhB,CACEN,gBAAiB,kBACjBC,MAAO,qBACPC,SAAU,WACVC,WAAY,IACZC,WAAY,UACZC,QAAS,oBACTX,SAAQA,EACRY,aAAc,OAGtB,OACEC,wBAACC,UAAO,CACNxB,GAAIA,EACJE,MAAOA,EACPE,UAAW,uDAAuDqB,OAAArB,GAClEsB,QAAS,EACTC,MAAOf,EACPP,YAAaA,EACbC,UAAWA,EACXC,kBAAmBA,EACnBC,OAAQA,GAEPG,EAGP"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../store/index.js"),n=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/i18next/dist/esm/i18next.js"),l=require("../../utils/customHooks/useEventListener.js"),s=require("../../utils/customHooks/useIsomorphicLayoutEffect.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),u=require("../Hangup.js"),d=require("../../lib/phone/call.js"),p=require("../../lib/webrtc/janus.js"),v=require("../CallView/Avatar.js"),m=require("../CallView/Timer.js"),f=require("../../lib/user/default_device.js"),g=require("../AudioBars.js"),h=require("../CustomThemedTooltip.js"),S=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),b=require("../../lib/devices/devices.js"),E=require("../../lib/avatars/avatars.js"),w=require("../../events/SocketEvents.js"),y=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),k=require("../../node_modules/react-redux/es/hooks/useSelector.js");function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=C(t),j=function(){var C,j,x,N,V,q,R,I,_,D,P=y.useDispatch(),A=k.useSelector(function(e){return e.currentCall}),L=A.muted,M=A.startTime,U=A.isRecording,F=A.paused,B=A.isLocalVideoEnabled,J=A.showRemoteVideoPlaceHolder,z=A.hasVideoTrackAdded,W=A.displayName,G=A.isStartingVideoCall,H=k.useSelector(function(e){return e.screenShare}),O=H.localTracks,K=H.localVideos,Q=H.role,X=H.active,Y=H.isStartingScreenShare,Z=H.isJoiningScreenShare,$=H.isLeavingScreenShare,ee=k.useSelector(function(e){return e.listen}),te=k.useSelector(function(e){return e.island}).isOpen,re=k.useSelector(function(e){return e.webrtc}),ae=re.janusInstance,ne=re.remoteAudioStream,ie=a.store.getState().currentUser,oe=t.useState(!1),le=oe[0],se=oe[1],ce=t.useState(!1),ue=ce[0],de=ce[1],pe=t.useRef(null),ve=t.useRef(null),me=t.useRef(!1),fe=t.useRef(!1),ge=t.useRef(null),he=t.useRef(null),Se=t.useRef(null),be=t.useRef(null),Ee=t.useRef(null),we=t.useRef(null),ye=t.useRef(p.default),ke=a.store.select.mediaDevices.videoInputDevices(a.store.getState());s.useIsomorphicLayoutEffect(function(){P.player.updatePlayer({localScreen:he,remoteScreen:Se,localVideo:be,largeRemoteVideo:Ee,smallRemoteVideo:we})},[]),t.useEffect(function(){return Re(),Ce(),addEventListener("fullscreenchange",Te),function(){removeEventListener("fullscreenchange",Te),pe.current&&clearTimeout(pe.current)}},[]),t.useEffect(function(){G&&(Ne(),P.currentCall.updateCurrentCall({isStartingVideoCall:!1}))},[G]),t.useEffect(function(){Y&&(_e(),a.store.dispatch.screenShare.update({isStartingScreenShare:!1}))},[Y]),t.useEffect(function(){Z&&(De(),a.store.dispatch.screenShare.update({isJoiningScreenShare:!1}))},[Z]),t.useEffect(function(){$&&(Ae(),a.store.dispatch.screenShare.update({isLeavingScreenShare:!1}))},[$]),t.useEffect(function(){Re(),Ce()},[te]);var Ce=function(){var e=a.store.getState().player.localVideo,t=a.store.getState().player.largeRemoteVideo,r=a.store.getState().player.smallRemoteVideo,n=a.store.getState().webrtc,i=n.localVideoStream,o=n.remoteVideoStream;(null==e?void 0:e.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(e.current,i),(null==t?void 0:t.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(t.current,o),(null==r?void 0:r.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(r.current,o),o instanceof MediaStream&&o.getVideoTracks().length>0&&P.currentCall.updateCurrentCall({showRemoteVideoPlaceHolder:!1})},Te=function(){se(!!document.fullscreenElement)},je=function(){document.fullscreenElement?(document.exitFullscreen(),c.eventDispatch("phone-island-fullscreen-exited",{})):ge.current&&(ge.current.requestFullscreen(),c.eventDispatch("phone-island-fullscreen-entered",{}))};l.useEventListener("phone-island-fullscreen-enter",function(){je()}),l.useEventListener("phone-island-fullscreen-exit",function(){je()});var xe=function(e,t){P.screenShare.update({source:e});var r=null;null==ae||ae.attach({plugin:"janus.plugin.videoroom",opaqueId:ye.current.randomString(32),success:function(t){var n,i,o,l;r=t,P.screenShare.update({remoteFeed:t}),r.remoteTracks={},r.remoteVideos=0,null===(i=(n=ye.current).log)||void 0===i||i.call(n,"Plugin attached! ("+r.getPlugin()+", id="+r.getId()+")"),null===(l=(o=ye.current).log)||void 0===l||l.call(o," -- This is a subscriber");var s={request:"join",room:a.store.getState().screenShare.room,ptype:"subscriber",feed:e};r.send({message:s})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Error attaching videoroom plugin",e)},iceState:function(e){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t,"ICE state (feed #"+r.rfindex+") changed to "+e)},webrtcState:function(e){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t,"Janus says this WebRTC PeerConnection (feed #"+r.rfindex+") is "+(e?"up":"down")+" now")},slowLink:function(e,t,r){var a,n;null===(n=(a=ye.current).warn)||void 0===n||n.call(a,"Janus reports problems "+(e?"sending":"receiving")+" packets on mid "+r+" ("+t+" lost packets)")},onmessage:function(n,i){var o,l,s,c,u,d,p,v,m,f;null===(l=(o=ye.current).debug)||void 0===l||l.call(o," ::: Got a message (listener) :::",n);var g=n.videoroom;null===(c=(s=ye.current).debug)||void 0===c||c.call(s,"Event: "+g),g&&("attached"===g?null===(d=(u=ye.current).log)||void 0===d||d.call(u,"Successfully attached to feed "+e+" ("+t+") in room "+n.room):null===(v=(p=ye.current).warn)||void 0===v||v.call(p,"Unhandled event: "+g)),i&&(null===(f=(m=ye.current).debug)||void 0===f||f.call(m,"Handling SDP as well...",i),r.createAnswer({jsep:i,tracks:[{type:"data"}],success:function(e){var t,n;null===(n=(t=ye.current).debug)||void 0===n||n.call(t,"Got SDP!",e);var i={request:"start",room:a.store.getState().screenShare.room};r.send({message:i,jsep:e})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"WebRTC error:",e)}}))},onlocaltrack:function(e,t){},onremotetrack:function(e,t,n,i){var o,l,s,c,u,d,p,v;if(null===(l=(o=ye.current).debug)||void 0===l||l.call(o,"Remote track (mid="+t+") "+(n?"added":"removed")+(i?" ("+i.reason+") ":"")+":",e),"video"!==e.kind||!i||"mute"!==i.reason&&"unmute"!==i.reason){if(!n){var m=a.store.getState().screenShare.remoteScreenStream;return ye.current.stopAllTracks(m),void P.screenShare.update({active:!1})}if("video"===e.kind){var f=new MediaStream([e]);a.store.dispatch.screenShare.update({remoteScreenStream:f}),r.remoteTracks[t]=f,null===(d=(u=ye.current).log)||void 0===d||d.call(u,"Created remote video stream: "+f);var g=a.store.getState().player.remoteScreen;(null==g?void 0:g.current)&&(null===(v=(p=ye.current).attachMediaStream)||void 0===v||v.call(p,g.current,f))}}else null===(c=(s=ye.current).log)||void 0===c||c.call(s,"Ignoring mute/unmute on screen-sharing track.")},oncleanup:function(){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t," ::: Got a cleanup notification (remote feed "+e+") :::"),r.remoteTracks={},r.remoteVideos=0}})},Ne=function(){var e,t,r,n;if(!me.current){var i=a.store.getState().webrtc.sipcall;me.current=!0,a.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0});var o=[],l=b.getCurrentVideoInputDeviceId(),s={type:"video",recv:!0};s.capture=!l||{deviceId:{exact:l}};var u=a.store.getState().currentCall.hasVideoTrackAdded,d=a.store.getState().webrtc.remoteVideoStream,p=null===(n=null===(r=null===(t=null===(e=null==i?void 0:i.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===t?void 0:t.getTransceivers)||void 0===r?void 0:r.call(t))||void 0===n?void 0:n.find(function(e){var t,r,a,n;return"video"===(null===(r=null===(t=e.receiver)||void 0===t?void 0:t.track)||void 0===r?void 0:r.kind)||"video"===(null===(n=null===(a=e.sender)||void 0===a?void 0:a.track)||void 0===n?void 0:n.kind)});(u||Boolean(p)||d instanceof MediaStream&&d.getVideoTracks().length>0)&&p?(s.replace=!0,p.mid&&(s.mid=p.mid),u||P.currentCall.setVideoTrackAdded(!0)):(s.add=!0,P.currentCall.setVideoTrackAdded(!0)),o.push(s),i.createOffer({tracks:o,success:function(e){var t,r,n;me.current=!1,i.send({message:{request:"update"},jsep:e}),t=a.store.getState().websocket.socket,r=a.store.getState().currentCall.username,n=a.store.getState().currentUser.username,t&&r&&n&&t.emit("message",{message:"videoCallStart",destUser:r,callUser:n}),w.dispatchVideoCallStarted({initiator:"local",callUser:a.store.getState().currentUser.username,destUser:a.store.getState().currentCall.username}),c.eventDispatch("phone-island-video-enabled",{})},error:function(e){me.current=!1,console.error("WebRTC error... "+JSON.stringify(e))}})}};l.useEventListener("phone-island-video-enable",function(){Ne()});var Ve=function(){var t,r,n,i;if(!me.current){var o=a.store.getState().webrtc,l=o.sipcall,s=o.localVideoStream;me.current=!0;var u=null===(i=null===(n=null===(r=null===(t=null==l?void 0:l.webrtcStuff)||void 0===t?void 0:t.pc)||void 0===r?void 0:r.getTransceivers)||void 0===n?void 0:n.call(r))||void 0===i?void 0:i.find(function(e){var t,r,a,n;return"video"===(null===(r=null===(t=e.receiver)||void 0===t?void 0:t.track)||void 0===r?void 0:r.kind)||"video"===(null===(n=null===(a=e.sender)||void 0===a?void 0:a.track)||void 0===n?void 0:n.kind)});ye.current.stopAllTracks(s),a.store.dispatch.webrtc.updateLocalVideoStream(null),a.store.dispatch.currentCall.setLocalVideoEnabled(!1);var d=[];d.push(e.__assign(e.__assign({type:"video"},(null==u?void 0:u.mid)?{mid:u.mid}:{}),{remove:!0})),l.createOffer({tracks:d,success:function(e){me.current=!1,l.send({message:{request:"update"},jsep:e}),c.eventDispatch("phone-island-video-disabled",{})},error:function(e){me.current=!1,console.error("WebRTC error... "+JSON.stringify(e))}})}};l.useEventListener("phone-island-video-disable",function(){Ve()});var qe=function(){null==ae||ae.attach({plugin:"janus.plugin.videoroom",opaqueId:ye.current.randomString(32),success:function(e){P.screenShare.update({plugin:e});var t=a.store.getState().screenShare.role;"publisher"===t?(c.eventDispatch("phone-island-screen-share-initialized",{}),setTimeout(function(){!function(){var e,t;if(ye.current.isExtensionEnabled()){var r={request:"create",description:ye.current.randomString(32),bitrate:5e5,publishers:1},n=a.store.getState().screenShare.plugin;n.send({message:r,success:function(e){var t,r,i,o,l,s,c,u;if(e.error)null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Couldn't create room: "+e.error);else{var d=e.videoroom;if(null===(o=(i=ye.current).debug)||void 0===o||o.call(i,"Event: "+d),d){var p=e.room;P.screenShare.update({room:p}),null===(s=(l=ye.current).log)||void 0===s||s.call(l,"Screen sharing session created: "+p);var v=a.store.getState().currentUser.username;if(fe.current)return void(null===(u=(c=ye.current).log)||void 0===u||u.call(c,"Screen share publisher join already requested on this handle, skipping duplicate join"));fe.current=!0;var m={request:"join",room:p,ptype:"publisher",display:v};n.send({message:m})}}}})}else null===(t=(e=ye.current).error)||void 0===t||t.call(e,"This browser doesn't support screensharing (getDisplayMedia unavailable)")}()},500)):"listener"===t&&Pe(),c.eventDispatch("phone-island-screen-share-started",{})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Error attaching videoroom plugin",e)},consentDialog:function(e){},iceState:function(e){var t,r;null===(r=(t=ye.current).log)||void 0===r||r.call(t,"ICE state changed to "+e)},mediaState:function(e,t){var r,a;null===(a=(r=ye.current).log)||void 0===a||a.call(r,"Janus "+(t?"started":"stopped")+" receiving our "+e)},webrtcState:function(e){var t,r;null===(r=(t=ye.current).log)||void 0===r||r.call(t,"Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},slowLink:function(e,t,r){var a,n;null===(n=(a=ye.current).warn)||void 0===n||n.call(a,"Janus reports problems "+(e?"sending":"receiving")+" packets on mid "+r+" ("+t+" lost packets)")},onmessage:function(e,t){var r,n,i,o,l,s,c,u,d,p,v,m,f,g,h,S,b,E,w,y;null===(n=(r=ye.current).debug)||void 0===n||n.call(r," ::: Got a message (publisher) :::",e);var k=a.store.getState().screenShare,C=k.plugin,T=k.role,j=e.videoroom;if(null===(o=(i=ye.current).debug)||void 0===o||o.call(i,"Event: "+j),j)if("joined"===j){if("publisher"===T)null===(s=(l=ye.current).debug)||void 0===s||s.call(l,"Negotiating WebRTC stream for our screen"),C.createOffer({tracks:[{type:"audio",capture:!0,recv:!1},{type:"screen",capture:!0,recv:!1}],success:function(e){var t,r;null===(r=(t=ye.current).debug)||void 0===r||r.call(t,"Got publisher SDP!",e);C.send({message:{request:"configure",audio:!0,video:!0},jsep:e})},error:function(e){var t,r;fe.current=!1,null===(r=(t=ye.current).error)||void 0===r||r.call(t,"WebRTC error:",e),P.screenShare.update({active:!1,role:""})}});else if(e.publishers){var x=e.publishers;for(var N in null===(u=(c=ye.current).debug)||void 0===u||u.call(c,"Got a list of available publishers/feeds:",x),x)if(!x[N].dummy){var V=x[N].id,q=x[N].display;null===(p=(d=ye.current).debug)||void 0===p||p.call(d," >> ["+V+"] "+q),xe(V,q)}}}else if("event"===j)if("listener"===T&&e.publishers){x=e.publishers;for(var N in null===(m=(v=ye.current).debug)||void 0===m||m.call(v,"Got a list of available publishers/feeds:",x),x)if(!x[N].dummy){V=x[N].id,q=x[N].display;null===(g=(f=ye.current).debug)||void 0===g||g.call(f," >> ["+V+"] "+q),xe(V,q)}}else if(e.leaving){var R=e.leaving;null===(S=(h=ye.current).log)||void 0===S||S.call(h,"Publisher left: "+R)}else e.error&&(null===(E=(b=ye.current).error)||void 0===E||E.call(b,"Error event: "+e.error));t&&(null===(y=(w=ye.current).debug)||void 0===y||y.call(w,"Handling SDP as well...",t),C.handleRemoteJsep({jsep:t}))},onlocaltrack:function(e,t){var r,n,i,o,l,s;null===(n=(r=ye.current).debug)||void 0===n||n.call(r,"Local track "+(t?"added":"removed")+":",e);var c=e.id.replace(/[{}]/g,"");if(t){if(!(null==O?void 0:O[c])){if("video"===e.kind){P.screenShare.update({localVideos:K+1});var u=new MediaStream([e]);a.store.dispatch.screenShare.update({localScreenStream:u}),null===(o=(i=ye.current).log)||void 0===o||o.call(i,"Created local stream: "+u);var d=a.store.getState().player.localScreen;(null==d?void 0:d.current)&&(null===(s=(l=ye.current).attachMediaStream)||void 0===s||s.call(l,d.current,u),Ie(),e.addEventListener("ended",function(){Me()}))}var p=a.store.getState().screenShare.plugin;"completed"!==p.webrtcStuff.pc.iceConnectionState&&p.webrtcStuff.pc.iceConnectionState}}else{var v=null==O?void 0:O[c];if(v)try{var m=v.getTracks();for(var f in m){var g=m[f];g&&g.stop()}}catch(e){}"video"===e.kind&&P.screenShare.update({localVideos:K-1});var h=null==O?void 0:O.filter(function(e){return e!==O[c]});P.screenShare.update({localTracks:h})}},onremotetrack:function(e,t,r){},oncleanup:function(){var e,t;null===(t=(e=ye.current).log)||void 0===t||t.call(e," ::: Got a cleanup notification :::"),fe.current=!1,P.screenShare.update({localTracks:{},localVideos:0})}})},Re=function(){var e=a.store.getState().player.localScreen,t=a.store.getState().player.remoteScreen,r=a.store.getState().screenShare,n=r.localScreenStream,i=r.remoteScreenStream;(null==e?void 0:e.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(e.current,n),(null==t?void 0:t.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(t.current,i)},Ie=function(){var e=a.store.getState().websocket.socket,t=a.store.getState().currentCall.username,r=a.store.getState().screenShare.room,n=a.store.getState().currentUser.username;e.emit("message",{message:"screenSharingStart",roomId:r,destUser:t,callUser:n})},_e=function(){fe.current=!1,P.screenShare.update({active:!0,role:"publisher"}),qe()};l.useEventListener("phone-island-screen-share-start",function(){_e()});var De=function(){P.screenShare.update({active:!0,role:"listener"}),qe(),c.eventDispatch("phone-island-screen-share-joined",{})},Pe=function(){var e={request:"join",room:a.store.getState().screenShare.room,ptype:"publisher",display:a.store.getState().currentUser.username};a.store.getState().screenShare.plugin.send({message:e})},Ae=function(){var e=a.store.getState().screenShare.remoteScreenStream;ye.current.stopAllTracks(e),P.screenShare.update({active:!1}),c.eventDispatch("phone-island-screen-share-left",{})},Le=function(){de(!0),pe.current&&(clearTimeout(pe.current),pe.current=null),ve.current&&clearTimeout(ve.current),ve.current=setTimeout(function(){pe.current=setTimeout(function(){de(!1)},3e3)},100)},Me=function(){var e=a.store.getState().screenShare,t=e.plugin,r=e.localScreenStream;fe.current=!1,ye.current.stopAllTracks(r),P.screenShare.update({active:!1}),t.detach();var n=a.store.getState().websocket.socket,i=a.store.getState().currentCall.username,o=a.store.getState().screenShare.room,l=a.store.getState().currentUser.username;n.emit("message",{message:"screenSharingStop",roomId:o,destUser:i,callUser:l}),c.eventDispatch("phone-island-screen-share-stopped",{})};l.useEventListener("phone-island-screen-share-stop",function(){Me()});var Ue=t.useState(!0),Fe=Ue[0],Be=Ue[1],Je=function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return(null==ke?void 0:ke.length)>0?[4,b.checkWebCamPermission()]:[3,2];case 1:return e.sent()?(Be(!0),[2,!0]):(Be(!1),[2,!1]);case 2:return Be(!1),[2,!1];case 3:return[2]}})})};return T.default.createElement(T.default.Fragment,null,te?T.default.createElement("div",{ref:ge,onMouseMove:function(){return Le()},className:le?"pi-h-screen":"pi-h-[480px] pi-w-[600px]"},T.default.createElement("div",{className:"pi-flex pi-relative pi-justify-center pi-w-full pi-h-full"},T.default.createElement("video",{autoPlay:!0,muted:!0,ref:Se,className:"pi-rounded-2xl pi-w-full pi-h-full ".concat(X&&"listener"===Q?"":"pi-hidden")}),T.default.createElement("video",{autoPlay:!0,muted:!0,ref:he,className:"pi-rounded-2xl pi-w-full pi-h-full ".concat(X&&"publisher"===Q?"":"pi-hidden")}),T.default.createElement("video",{autoPlay:!0,muted:!0,ref:Ee,className:"pi-rounded-2xl ".concat(X||J?"pi-hidden":"")}),T.default.createElement("div",{className:"pi-w-full pi-bg-gray-200 dark:pi-bg-gray-800 pi-flex pi-items-center pi-justify-center ".concat(X||!J?"pi-hidden":"")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-32 pi-h-32 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-4xl pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(W)))),T.default.createElement("video",{muted:!0,autoPlay:!0,ref:be,className:"pi-max-w-32 pi-max-h-32 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg ".concat(B?"":"pi-hidden")}),T.default.createElement("div",{className:"pi-w-32 pi-h-24 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ".concat(B||!z?"pi-hidden":"")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-base pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(ie.name||"-")))),T.default.createElement("video",{muted:!0,autoPlay:!0,ref:we,className:"pi-max-w-32 pi-max-h-32 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg ".concat(!X||J?"pi-hidden":"")}),T.default.createElement("div",{className:"pi-w-32 pi-h-24 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ".concat(X&&J&&z?"":"pi-hidden")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-base pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(W))))),T.default.createElement("div",{className:"".concat(!ue&&"pi-opacity-0 pi-pointer-events-none"," pi-absolute pi-bottom-0 pi-bg-gray-950/65 pi-w-full pi-p-6 pi-rounded-bl-[20px] pi-rounded-br-[20px] pi-transition-all")},T.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-gap-6 pi-mb-5"},!(null==ee?void 0:ee.isListen)&&T.default.createElement(r.Button,{variant:"default",active:!!L,onClick:function(){return L?d.unmuteCurrentCall():d.muteCurrentCall()},"data-tooltip-id":"tooltip-mute","data-tooltip-content":"".concat(L?o.t("Tooltip.Unmute"):o.t("Tooltip.Mute"))},L?T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faMicrophoneSlash}):T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faMicrophone})),(null==ke?void 0:ke.length)>0&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return[4,Je()];case 1:return e.sent()&&(B?Ve():Ne()),[2]}})})},"data-tooltip-id":"tooltip-toggle-video","data-tooltip-content":"".concat(Fe?B?o.t("Tooltip.Disable camera"):o.t("Tooltip.Enable camera"):o.t("Tooltip.Enable camera permission")||""),disabled:!Fe,className:"".concat(Fe?"":"pi-cursor-auto")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:B?i.faVideoSlash:i.faVideo})),"safari"!==ye.current.webRTCAdapter.browserDetails.browser&&(null===(V=null===(N=null===(x=null===(j=null===(C=null==ie?void 0:ie.profile)||void 0===C?void 0:C.macro_permissions)||void 0===j?void 0:j.nethvoice_cti)||void 0===x?void 0:x.permissions)||void 0===N?void 0:N.screen_sharing)||void 0===V?void 0:V.value)&&!X&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return _e()},"data-tooltip-id":"tooltip-start-screen-share","data-tooltip-content":o.t("Tooltip.Share screen")||""},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faDisplay})),X&&"publisher"===Q&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return Me()},"data-tooltip-id":"tooltip-stop-screen-share","data-tooltip-content":o.t("Tooltip.Stop sharing")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:S.faDisplaySlash})),X&&"listener"===Q&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return je()},"data-tooltip-id":"tooltip-toggle-fullscreen","data-tooltip-content":le?o.t("Tooltip.Exit fullscreen"):o.t("Tooltip.Enter fullscreen")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:le?i.faCompress:i.faExpand})),(null===(D=null===(_=null===(I=null===(R=null===(q=null==ie?void 0:ie.profile)||void 0===q?void 0:q.macro_permissions)||void 0===R?void 0:R.settings)||void 0===I?void 0:I.permissions)||void 0===_?void 0:_.recording)||void 0===D?void 0:D.value)&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return d.recordCurrentCall(U)},"data-tooltip-id":"tooltip-record-video-view","data-tooltip-content":U?o.t("Tooltip.Stop recording"):o.t("Tooltip.Record")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:U?i.faStop:S.faRecord})),!((null==ee?void 0:ee.isIntrude)||(null==ee?void 0:ee.isListen))&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return F?d.unpauseCurrentCall():(d.pauseCurrentCall(),void Me())},"data-tooltip-id":"tooltip-pause-video-view","data-tooltip-content":F?o.t("Tooltip.Play"):o.t("Tooltip.Pause")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:F?i.faPlay:i.faPause}))),T.default.createElement(u.default,{buttonsVariant:"default"})),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-mute-video-view",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-video",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-fullscreen",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-start-screen-share",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-stop-screen-share",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-record-video-view",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-pause-video-view",place:"bottom"})):T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"pi-flex pi-justify-between pi-items-center"},T.default.createElement(v.default,null),T.default.createElement(m.default,{startTime:M,isNotAlwaysWhite:!0}),!te&&ne&&!f.isPhysical()&&T.default.createElement(g.AudioBars,{audioStream:ne,paused:F,size:te?"large":"small"}))))};exports.VideoView=j,exports.default=j;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var a=require("../../store/index.js"),n=require("../../node_modules/@fortawesome/react-fontawesome/dist/index.js"),i=require("../../node_modules/@fortawesome/free-solid-svg-icons/index.mjs.js"),o=require("../../node_modules/i18next/dist/esm/i18next.js"),l=require("../../utils/customHooks/useEventListener.js"),s=require("../../utils/customHooks/useIsomorphicLayoutEffect.js"),c=require("../../utils/genericFunctions/eventDispatch.js"),u=require("../Hangup.js"),d=require("../../lib/phone/call.js"),p=require("../../lib/webrtc/janus.js"),v=require("../CallView/Avatar.js"),m=require("../CallView/Timer.js"),f=require("../../lib/user/default_device.js"),g=require("../AudioBars.js"),h=require("../CustomThemedTooltip.js"),S=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),b=require("../../lib/devices/devices.js"),E=require("../../lib/avatars/avatars.js"),w=require("../../events/SocketEvents.js"),y=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),k=require("../../node_modules/react-redux/es/hooks/useSelector.js");function C(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var T=C(t),j=function(){var C,j,x,N,V,q,R,I,_,D,P=y.useDispatch(),A=k.useSelector(function(e){return e.currentCall}),L=A.muted,M=A.startTime,U=A.isRecording,F=A.paused,B=A.isLocalVideoEnabled,J=A.showRemoteVideoPlaceHolder,z=A.hasVideoTrackAdded,W=A.displayName,G=A.isStartingVideoCall,H=k.useSelector(function(e){return e.screenShare}),O=H.localTracks,K=H.localVideos,Q=H.role,X=H.active,Y=H.isStartingScreenShare,Z=H.isJoiningScreenShare,$=H.isLeavingScreenShare,ee=k.useSelector(function(e){return e.listen}),te=k.useSelector(function(e){return e.island}).isOpen,re=k.useSelector(function(e){return e.webrtc}),ae=re.janusInstance,ne=re.remoteAudioStream,ie=a.store.getState().currentUser,oe=t.useState(!1),le=oe[0],se=oe[1],ce=t.useState(!1),ue=ce[0],de=ce[1],pe=t.useRef(null),ve=t.useRef(null),me=t.useRef(!1),fe=t.useRef(!1),ge=t.useRef(null),he=t.useRef(null),Se=t.useRef(null),be=t.useRef(null),Ee=t.useRef(null),we=t.useRef(null),ye=t.useRef(p.default),ke=a.store.select.mediaDevices.videoInputDevices(a.store.getState());s.useIsomorphicLayoutEffect(function(){P.player.updatePlayer({localScreen:he,remoteScreen:Se,localVideo:be,largeRemoteVideo:Ee,smallRemoteVideo:we})},[]),t.useEffect(function(){return Re(),Ce(),addEventListener("fullscreenchange",Te),function(){removeEventListener("fullscreenchange",Te),pe.current&&clearTimeout(pe.current)}},[]),t.useEffect(function(){G&&(Ne(),P.currentCall.updateCurrentCall({isStartingVideoCall:!1}))},[G]),t.useEffect(function(){Y&&(_e(),a.store.dispatch.screenShare.update({isStartingScreenShare:!1}))},[Y]),t.useEffect(function(){Z&&(De(),a.store.dispatch.screenShare.update({isJoiningScreenShare:!1}))},[Z]),t.useEffect(function(){$&&(Ae(),a.store.dispatch.screenShare.update({isLeavingScreenShare:!1}))},[$]),t.useEffect(function(){Re(),Ce()},[te]);var Ce=function(){var e=a.store.getState().player.localVideo,t=a.store.getState().player.largeRemoteVideo,r=a.store.getState().player.smallRemoteVideo,n=a.store.getState().webrtc,i=n.localVideoStream,o=n.remoteVideoStream;(null==e?void 0:e.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(e.current,i),(null==t?void 0:t.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(t.current,o),(null==r?void 0:r.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(r.current,o),o instanceof MediaStream&&o.getVideoTracks().length>0&&P.currentCall.updateCurrentCall({showRemoteVideoPlaceHolder:!1})},Te=function(){se(!!document.fullscreenElement)},je=function(){document.fullscreenElement?(document.exitFullscreen(),c.eventDispatch("phone-island-fullscreen-exited",{})):ge.current&&(ge.current.requestFullscreen(),c.eventDispatch("phone-island-fullscreen-entered",{}))};l.useEventListener("phone-island-fullscreen-enter",function(){je()}),l.useEventListener("phone-island-fullscreen-exit",function(){je()});var xe=function(e,t){P.screenShare.update({source:e});var r=null;null==ae||ae.attach({plugin:"janus.plugin.videoroom",opaqueId:ye.current.randomString(32),success:function(t){var n,i,o,l;r=t,P.screenShare.update({remoteFeed:t}),r.remoteTracks={},r.remoteVideos=0,null===(i=(n=ye.current).log)||void 0===i||i.call(n,"Plugin attached! ("+r.getPlugin()+", id="+r.getId()+")"),null===(l=(o=ye.current).log)||void 0===l||l.call(o," -- This is a subscriber");var s={request:"join",room:a.store.getState().screenShare.room,ptype:"subscriber",feed:e};r.send({message:s})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Error attaching videoroom plugin",e)},iceState:function(e){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t,"ICE state (feed #"+r.rfindex+") changed to "+e)},webrtcState:function(e){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t,"Janus says this WebRTC PeerConnection (feed #"+r.rfindex+") is "+(e?"up":"down")+" now")},slowLink:function(e,t,r){var a,n;null===(n=(a=ye.current).warn)||void 0===n||n.call(a,"Janus reports problems "+(e?"sending":"receiving")+" packets on mid "+r+" ("+t+" lost packets)")},onmessage:function(n,i){var o,l,s,c,u,d,p,v,m,f;null===(l=(o=ye.current).debug)||void 0===l||l.call(o," ::: Got a message (listener) :::",n);var g=n.videoroom;null===(c=(s=ye.current).debug)||void 0===c||c.call(s,"Event: "+g),g&&("attached"===g?null===(d=(u=ye.current).log)||void 0===d||d.call(u,"Successfully attached to feed "+e+" ("+t+") in room "+n.room):null===(v=(p=ye.current).warn)||void 0===v||v.call(p,"Unhandled event: "+g)),i&&(null===(f=(m=ye.current).debug)||void 0===f||f.call(m,"Handling SDP as well...",i),r.createAnswer({jsep:i,tracks:[{type:"data"}],success:function(e){var t,n;null===(n=(t=ye.current).debug)||void 0===n||n.call(t,"Got SDP!",e);var i={request:"start",room:a.store.getState().screenShare.room};r.send({message:i,jsep:e})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"WebRTC error:",e)}}))},onlocaltrack:function(e,t){},onremotetrack:function(e,t,n,i){var o,l,s,c,u,d,p,v;if(null===(l=(o=ye.current).debug)||void 0===l||l.call(o,"Remote track (mid="+t+") "+(n?"added":"removed")+(i?" ("+i.reason+") ":"")+":",e),"video"!==e.kind||!i||"mute"!==i.reason&&"unmute"!==i.reason){if(!n){var m=a.store.getState().screenShare.remoteScreenStream;return ye.current.stopAllTracks(m),void P.screenShare.update({active:!1})}if("video"===e.kind){var f=new MediaStream([e]);a.store.dispatch.screenShare.update({remoteScreenStream:f}),r.remoteTracks[t]=f,null===(d=(u=ye.current).log)||void 0===d||d.call(u,"Created remote video stream: "+f);var g=a.store.getState().player.remoteScreen;(null==g?void 0:g.current)&&(null===(v=(p=ye.current).attachMediaStream)||void 0===v||v.call(p,g.current,f))}}else null===(c=(s=ye.current).log)||void 0===c||c.call(s,"Ignoring mute/unmute on screen-sharing track.")},oncleanup:function(){var t,a;null===(a=(t=ye.current).log)||void 0===a||a.call(t," ::: Got a cleanup notification (remote feed "+e+") :::"),r.remoteTracks={},r.remoteVideos=0}})},Ne=function(){var e,t,r,n;if(!me.current){var i=a.store.getState().webrtc.sipcall;me.current=!0,a.store.dispatch.currentCall.updateCurrentCall({isLocalVideoEnabled:!0});var o=[],l=b.getCurrentVideoInputDeviceId(),s={type:"video",recv:!0};s.capture=!l||{deviceId:{exact:l}};var u=a.store.getState().currentCall.hasVideoTrackAdded,d=a.store.getState().webrtc.remoteVideoStream,p=null===(n=null===(r=null===(t=null===(e=null==i?void 0:i.webrtcStuff)||void 0===e?void 0:e.pc)||void 0===t?void 0:t.getTransceivers)||void 0===r?void 0:r.call(t))||void 0===n?void 0:n.find(function(e){var t,r,a,n;return"video"===(null===(r=null===(t=e.receiver)||void 0===t?void 0:t.track)||void 0===r?void 0:r.kind)||"video"===(null===(n=null===(a=e.sender)||void 0===a?void 0:a.track)||void 0===n?void 0:n.kind)});(u||Boolean(p)||d instanceof MediaStream&&d.getVideoTracks().length>0)&&p?(s.replace=!0,p.mid&&(s.mid=p.mid),u||P.currentCall.setVideoTrackAdded(!0)):(s.add=!0,P.currentCall.setVideoTrackAdded(!0)),o.push(s),i.createOffer({tracks:o,success:function(e){var t,r,n;me.current=!1,i.send({message:{request:"update"},jsep:e}),t=a.store.getState().websocket.socket,r=a.store.getState().currentCall.username,n=a.store.getState().currentUser.username,t&&r&&n&&t.emit("message",{message:"videoCallStart",destUser:r,callUser:n}),w.dispatchVideoCallStarted({initiator:"local",callUser:a.store.getState().currentUser.username,destUser:a.store.getState().currentCall.username}),c.eventDispatch("phone-island-video-enabled",{})},error:function(e){me.current=!1,console.error("WebRTC error... "+JSON.stringify(e))}})}};l.useEventListener("phone-island-video-enable",function(){Ne()});var Ve=function(){var t,r,n,i;if(!me.current){var o=a.store.getState().webrtc,l=o.sipcall,s=o.localVideoStream;me.current=!0;var u=null===(i=null===(n=null===(r=null===(t=null==l?void 0:l.webrtcStuff)||void 0===t?void 0:t.pc)||void 0===r?void 0:r.getTransceivers)||void 0===n?void 0:n.call(r))||void 0===i?void 0:i.find(function(e){var t,r,a,n;return"video"===(null===(r=null===(t=e.receiver)||void 0===t?void 0:t.track)||void 0===r?void 0:r.kind)||"video"===(null===(n=null===(a=e.sender)||void 0===a?void 0:a.track)||void 0===n?void 0:n.kind)});ye.current.stopAllTracks(s),a.store.dispatch.webrtc.updateLocalVideoStream(null),a.store.dispatch.currentCall.setLocalVideoEnabled(!1);var d=[];d.push(e.__assign(e.__assign({type:"video"},(null==u?void 0:u.mid)?{mid:u.mid}:{}),{remove:!0})),l.createOffer({tracks:d,success:function(e){me.current=!1,l.send({message:{request:"update"},jsep:e}),c.eventDispatch("phone-island-video-disabled",{})},error:function(e){me.current=!1,console.error("WebRTC error... "+JSON.stringify(e))}})}};l.useEventListener("phone-island-video-disable",function(){Ve()});var qe=function(){null==ae||ae.attach({plugin:"janus.plugin.videoroom",opaqueId:ye.current.randomString(32),success:function(e){P.screenShare.update({plugin:e});var t=a.store.getState().screenShare.role;"publisher"===t?(c.eventDispatch("phone-island-screen-share-initialized",{}),setTimeout(function(){!function(){var e,t;if(ye.current.isExtensionEnabled()){var r={request:"create",description:ye.current.randomString(32),bitrate:5e5,publishers:1},n=a.store.getState().screenShare.plugin;n.send({message:r,success:function(e){var t,r,i,o,l,s,c,u;if(e.error)null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Couldn't create room: "+e.error);else{var d=e.videoroom;if(null===(o=(i=ye.current).debug)||void 0===o||o.call(i,"Event: "+d),d){var p=e.room;P.screenShare.update({room:p}),null===(s=(l=ye.current).log)||void 0===s||s.call(l,"Screen sharing session created: "+p);var v=a.store.getState().currentUser.username;if(fe.current)return void(null===(u=(c=ye.current).log)||void 0===u||u.call(c,"Screen share publisher join already requested on this handle, skipping duplicate join"));fe.current=!0;var m={request:"join",room:p,ptype:"publisher",display:v};n.send({message:m})}}}})}else null===(t=(e=ye.current).error)||void 0===t||t.call(e,"This browser doesn't support screensharing (getDisplayMedia unavailable)")}()},500)):"listener"===t&&Pe(),c.eventDispatch("phone-island-screen-share-started",{})},error:function(e){var t,r;null===(r=(t=ye.current).error)||void 0===r||r.call(t,"Error attaching videoroom plugin",e)},consentDialog:function(e){},iceState:function(e){var t,r;null===(r=(t=ye.current).log)||void 0===r||r.call(t,"ICE state changed to "+e)},mediaState:function(e,t){var r,a;null===(a=(r=ye.current).log)||void 0===a||a.call(r,"Janus "+(t?"started":"stopped")+" receiving our "+e)},webrtcState:function(e){var t,r;null===(r=(t=ye.current).log)||void 0===r||r.call(t,"Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},slowLink:function(e,t,r){var a,n;null===(n=(a=ye.current).warn)||void 0===n||n.call(a,"Janus reports problems "+(e?"sending":"receiving")+" packets on mid "+r+" ("+t+" lost packets)")},onmessage:function(e,t){var r,n,i,o,l,s,c,u,d,p,v,m,f,g,h,S,b,E,w,y;null===(n=(r=ye.current).debug)||void 0===n||n.call(r," ::: Got a message (publisher) :::",e);var k=a.store.getState().screenShare,C=k.plugin,T=k.role,j=e.videoroom;if(null===(o=(i=ye.current).debug)||void 0===o||o.call(i,"Event: "+j),j)if("joined"===j){if("publisher"===T)null===(s=(l=ye.current).debug)||void 0===s||s.call(l,"Negotiating WebRTC stream for our screen"),C.createOffer({tracks:[{type:"audio",capture:!0,recv:!1},{type:"screen",capture:!0,recv:!1}],success:function(e){var t,r;null===(r=(t=ye.current).debug)||void 0===r||r.call(t,"Got publisher SDP!",e);C.send({message:{request:"configure",audio:!0,video:!0},jsep:e})},error:function(e){var t,r;fe.current=!1,null===(r=(t=ye.current).error)||void 0===r||r.call(t,"WebRTC error:",e),P.screenShare.update({active:!1,role:""});var n=a.store.getState().screenShare.room,i=function(){return C.detach()};C.send({message:{request:"destroy",room:n},success:i,error:i})}});else if(e.publishers){var x=e.publishers;for(var N in null===(u=(c=ye.current).debug)||void 0===u||u.call(c,"Got a list of available publishers/feeds:",x),x)if(!x[N].dummy){var V=x[N].id,q=x[N].display;null===(p=(d=ye.current).debug)||void 0===p||p.call(d," >> ["+V+"] "+q),xe(V,q)}}}else if("event"===j)if("listener"===T&&e.publishers){x=e.publishers;for(var N in null===(m=(v=ye.current).debug)||void 0===m||m.call(v,"Got a list of available publishers/feeds:",x),x)if(!x[N].dummy){V=x[N].id,q=x[N].display;null===(g=(f=ye.current).debug)||void 0===g||g.call(f," >> ["+V+"] "+q),xe(V,q)}}else if(e.leaving){var R=e.leaving;null===(S=(h=ye.current).log)||void 0===S||S.call(h,"Publisher left: "+R)}else e.error&&(null===(E=(b=ye.current).error)||void 0===E||E.call(b,"Error event: "+e.error));t&&(null===(y=(w=ye.current).debug)||void 0===y||y.call(w,"Handling SDP as well...",t),C.handleRemoteJsep({jsep:t}))},onlocaltrack:function(e,t){var r,n,i,o,l,s;null===(n=(r=ye.current).debug)||void 0===n||n.call(r,"Local track "+(t?"added":"removed")+":",e);var c=e.id.replace(/[{}]/g,"");if(t){if(!(null==O?void 0:O[c])){if("video"===e.kind){P.screenShare.update({localVideos:K+1});var u=new MediaStream([e]);a.store.dispatch.screenShare.update({localScreenStream:u}),null===(o=(i=ye.current).log)||void 0===o||o.call(i,"Created local stream: "+u);var d=a.store.getState().player.localScreen;(null==d?void 0:d.current)&&(null===(s=(l=ye.current).attachMediaStream)||void 0===s||s.call(l,d.current,u),Ie(),e.addEventListener("ended",function(){Me()}))}var p=a.store.getState().screenShare.plugin;"completed"!==p.webrtcStuff.pc.iceConnectionState&&p.webrtcStuff.pc.iceConnectionState}}else{var v=null==O?void 0:O[c];if(v)try{var m=v.getTracks();for(var f in m){var g=m[f];g&&g.stop()}}catch(e){}"video"===e.kind&&P.screenShare.update({localVideos:K-1});var h=null==O?void 0:O.filter(function(e){return e!==O[c]});P.screenShare.update({localTracks:h})}},onremotetrack:function(e,t,r){},oncleanup:function(){var e,t;null===(t=(e=ye.current).log)||void 0===t||t.call(e," ::: Got a cleanup notification :::"),fe.current=!1,P.screenShare.update({localTracks:{},localVideos:0})}})},Re=function(){var e=a.store.getState().player.localScreen,t=a.store.getState().player.remoteScreen,r=a.store.getState().screenShare,n=r.localScreenStream,i=r.remoteScreenStream;(null==e?void 0:e.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(e.current,n),(null==t?void 0:t.current)&&ye.current.attachMediaStream&&ye.current.attachMediaStream(t.current,i)},Ie=function(){var e=a.store.getState().websocket.socket,t=a.store.getState().currentCall.username,r=a.store.getState().screenShare.room,n=a.store.getState().currentUser.username;e.emit("message",{message:"screenSharingStart",roomId:r,destUser:t,callUser:n})},_e=function(){fe.current=!1,P.screenShare.update({active:!0,role:"publisher"}),qe()};l.useEventListener("phone-island-screen-share-start",function(){_e()});var De=function(){P.screenShare.update({active:!0,role:"listener"}),qe(),c.eventDispatch("phone-island-screen-share-joined",{})},Pe=function(){var e={request:"join",room:a.store.getState().screenShare.room,ptype:"publisher",display:a.store.getState().currentUser.username};a.store.getState().screenShare.plugin.send({message:e})},Ae=function(){var e=a.store.getState().screenShare.remoteScreenStream;ye.current.stopAllTracks(e),P.screenShare.update({active:!1}),c.eventDispatch("phone-island-screen-share-left",{})},Le=function(){de(!0),pe.current&&(clearTimeout(pe.current),pe.current=null),ve.current&&clearTimeout(ve.current),ve.current=setTimeout(function(){pe.current=setTimeout(function(){de(!1)},3e3)},100)},Me=function(){var e=a.store.getState().screenShare,t=e.plugin,r=e.localScreenStream;fe.current=!1,ye.current.stopAllTracks(r),P.screenShare.update({active:!1}),t.detach();var n=a.store.getState().websocket.socket,i=a.store.getState().currentCall.username,o=a.store.getState().screenShare.room,l=a.store.getState().currentUser.username;n.emit("message",{message:"screenSharingStop",roomId:o,destUser:i,callUser:l}),c.eventDispatch("phone-island-screen-share-stopped",{})};l.useEventListener("phone-island-screen-share-stop",function(){Me()});var Ue=t.useState(!0),Fe=Ue[0],Be=Ue[1],Je=function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return(null==ke?void 0:ke.length)>0?[4,b.checkWebCamPermission()]:[3,2];case 1:return e.sent()?(Be(!0),[2,!0]):(Be(!1),[2,!1]);case 2:return Be(!1),[2,!1];case 3:return[2]}})})};return T.default.createElement(T.default.Fragment,null,te?T.default.createElement("div",{ref:ge,onMouseMove:function(){return Le()},className:le?"pi-h-screen":"pi-h-[480px] pi-w-[600px]"},T.default.createElement("div",{className:"pi-flex pi-relative pi-justify-center pi-w-full pi-h-full"},T.default.createElement("video",{autoPlay:!0,muted:!0,ref:Se,className:"pi-rounded-2xl pi-w-full pi-h-full ".concat(X&&"listener"===Q?"":"pi-hidden")}),T.default.createElement("video",{autoPlay:!0,muted:!0,ref:he,className:"pi-rounded-2xl pi-w-full pi-h-full ".concat(X&&"publisher"===Q?"":"pi-hidden")}),T.default.createElement("video",{autoPlay:!0,muted:!0,ref:Ee,className:"pi-rounded-2xl ".concat(X||J?"pi-hidden":"")}),T.default.createElement("div",{className:"pi-w-full pi-bg-gray-200 dark:pi-bg-gray-800 pi-flex pi-items-center pi-justify-center ".concat(X||!J?"pi-hidden":"")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-32 pi-h-32 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-4xl pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(W)))),T.default.createElement("video",{muted:!0,autoPlay:!0,ref:be,className:"pi-max-w-32 pi-max-h-32 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg ".concat(B?"":"pi-hidden")}),T.default.createElement("div",{className:"pi-w-32 pi-h-24 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ".concat(B||!z?"pi-hidden":"")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-base pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(ie.name||"-")))),T.default.createElement("video",{muted:!0,autoPlay:!0,ref:we,className:"pi-max-w-32 pi-max-h-32 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg ".concat(!X||J?"pi-hidden":"")}),T.default.createElement("div",{className:"pi-w-32 pi-h-24 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ".concat(X&&J&&z?"":"pi-hidden")},T.default.createElement("div",{className:"pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center"},T.default.createElement("span",{className:"pi-text-base pi-text-gray-50 dark:pi-text-gray-900"},E.getInitials(W))))),T.default.createElement("div",{className:"".concat(!ue&&"pi-opacity-0 pi-pointer-events-none"," pi-absolute pi-bottom-0 pi-bg-gray-950/65 pi-w-full pi-p-6 pi-rounded-bl-[20px] pi-rounded-br-[20px] pi-transition-all")},T.default.createElement("div",{className:"pi-flex pi-items-center pi-justify-center pi-gap-6 pi-mb-5"},!(null==ee?void 0:ee.isListen)&&T.default.createElement(r.Button,{variant:"default",active:!!L,onClick:function(){return L?d.unmuteCurrentCall():d.muteCurrentCall()},"data-tooltip-id":"tooltip-mute","data-tooltip-content":"".concat(L?o.t("Tooltip.Unmute"):o.t("Tooltip.Mute"))},L?T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faMicrophoneSlash}):T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faMicrophone})),(null==ke?void 0:ke.length)>0&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return e.__awaiter(void 0,void 0,void 0,function(){return e.__generator(this,function(e){switch(e.label){case 0:return[4,Je()];case 1:return e.sent()&&(B?Ve():Ne()),[2]}})})},"data-tooltip-id":"tooltip-toggle-video","data-tooltip-content":"".concat(Fe?B?o.t("Tooltip.Disable camera"):o.t("Tooltip.Enable camera"):o.t("Tooltip.Enable camera permission")||""),disabled:!Fe,className:"".concat(Fe?"":"pi-cursor-auto")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:B?i.faVideoSlash:i.faVideo})),"safari"!==ye.current.webRTCAdapter.browserDetails.browser&&(null===(V=null===(N=null===(x=null===(j=null===(C=null==ie?void 0:ie.profile)||void 0===C?void 0:C.macro_permissions)||void 0===j?void 0:j.nethvoice_cti)||void 0===x?void 0:x.permissions)||void 0===N?void 0:N.screen_sharing)||void 0===V?void 0:V.value)&&!X&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return _e()},"data-tooltip-id":"tooltip-start-screen-share","data-tooltip-content":o.t("Tooltip.Share screen")||""},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:i.faDisplay})),X&&"publisher"===Q&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return Me()},"data-tooltip-id":"tooltip-stop-screen-share","data-tooltip-content":o.t("Tooltip.Stop sharing")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:S.faDisplaySlash})),X&&"listener"===Q&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return je()},"data-tooltip-id":"tooltip-toggle-fullscreen","data-tooltip-content":le?o.t("Tooltip.Exit fullscreen"):o.t("Tooltip.Enter fullscreen")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:le?i.faCompress:i.faExpand})),(null===(D=null===(_=null===(I=null===(R=null===(q=null==ie?void 0:ie.profile)||void 0===q?void 0:q.macro_permissions)||void 0===R?void 0:R.settings)||void 0===I?void 0:I.permissions)||void 0===_?void 0:_.recording)||void 0===D?void 0:D.value)&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return d.recordCurrentCall(U)},"data-tooltip-id":"tooltip-record-video-view","data-tooltip-content":U?o.t("Tooltip.Stop recording"):o.t("Tooltip.Record")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:U?i.faStop:S.faRecord})),!((null==ee?void 0:ee.isIntrude)||(null==ee?void 0:ee.isListen))&&T.default.createElement(r.Button,{variant:"default",onClick:function(){return F?d.unpauseCurrentCall():(d.pauseCurrentCall(),void Me())},"data-tooltip-id":"tooltip-pause-video-view","data-tooltip-content":F?o.t("Tooltip.Play"):o.t("Tooltip.Pause")},T.default.createElement(n.FontAwesomeIcon,{className:"pi-h-6 pi-w-6",icon:F?i.faPlay:i.faPause}))),T.default.createElement(u.default,{buttonsVariant:"default"})),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-mute-video-view",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-video",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-toggle-fullscreen",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-start-screen-share",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-stop-screen-share",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-record-video-view",place:"bottom"}),T.default.createElement(h.CustomThemedTooltip,{className:"pi-z-20",id:"tooltip-pause-video-view",place:"bottom"})):T.default.createElement(T.default.Fragment,null,T.default.createElement("div",{className:"pi-flex pi-justify-between pi-items-center"},T.default.createElement(v.default,null),T.default.createElement(m.default,{startTime:M,isNotAlwaysWhite:!0}),!te&&ne&&!f.isPhysical()&&T.default.createElement(g.AudioBars,{audioStream:ne,paused:F,size:te?"large":"small"}))))};exports.VideoView=j,exports.default=j;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/VideoView/index.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef, useState } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faCompress,\n faDisplay,\n faExpand,\n faMicrophone,\n faMicrophoneSlash,\n faPause,\n faPlay,\n faStop,\n faVideo,\n faVideoSlash,\n} from '@fortawesome/free-solid-svg-icons'\nimport { t } from 'i18next'\nimport { eventDispatch, useEventListener, useIsomorphicLayoutEffect } from '../../utils'\nimport Hangup from '../Hangup'\nimport {\n muteCurrentCall,\n pauseCurrentCall,\n recordCurrentCall,\n unmuteCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport { JanusTrack, JanusTypes } from '../../types/webrtc'\nimport JanusLib from '../../lib/webrtc/janus.js'\nimport Avatar from '../CallView/Avatar'\nimport Timer from '../CallView/Timer'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { AudioBars } from '../AudioBars'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { faDisplaySlash, faRecord } from '@nethesis/nethesis-solid-svg-icons'\nimport { getCurrentVideoInputDeviceId } from '../../lib/devices/devices'\nimport { getInitials } from '../../lib/avatars/avatars'\nimport { checkWebCamPermission } from '../../lib/devices/devices'\nimport { dispatchVideoCallStarted } from '../../events/SocketEvents'\n\nexport interface VideoViewProps {}\n\nexport type ScreenSharingMessage = {\n message: 'screenSharingStart' | 'screenSharingStop'\n roomId: string\n destUser: string\n callUser: string\n}\n\nexport type VideoCallMessage = {\n message: 'videoCallStart'\n destUser: string\n callUser: string\n}\n\nexport const VideoView: FC<VideoViewProps> = () => {\n const dispatch = useDispatch<Dispatch>()\n const {\n muted,\n startTime,\n isRecording,\n paused,\n isLocalVideoEnabled,\n showRemoteVideoPlaceHolder,\n hasVideoTrackAdded,\n displayName,\n isStartingVideoCall,\n } = useSelector((state: RootState) => state.currentCall)\n const {\n localTracks,\n localVideos,\n role: screenShareRole,\n active: screenShareActive,\n isStartingScreenShare,\n isJoiningScreenShare,\n isLeavingScreenShare,\n } = useSelector((state: RootState) => state.screenShare)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { janusInstance, remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const userInfo = store.getState().currentUser\n const [isFullscreen, setIsFullscreen] = useState(false)\n const [isUiShown, setUiShown] = useState(false)\n const uiTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n const videoRenegotiationInFlightRef = useRef(false)\n const screenSharePublisherJoinRequestedRef = useRef(false)\n const screenShareViewRef = useRef(null)\n const localScreen = useRef<HTMLVideoElement>(null)\n const remoteScreen = useRef<HTMLVideoElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const largeRemoteVideo = useRef<HTMLVideoElement>(null)\n const smallRemoteVideo = useRef<HTMLVideoElement>(null)\n const janus = useRef<JanusTypes>(JanusLib)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n\n const notifyPeerVideoStart = () => {\n const { socket } = store.getState().websocket\n const { username: destUser } = store.getState().currentCall\n const { username: callUser } = store.getState().currentUser\n\n if (!socket || !destUser || !callUser) {\n return\n }\n\n socket.emit('message', {\n message: 'videoCallStart',\n destUser,\n callUser,\n } as VideoCallMessage)\n }\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n localScreen: localScreen,\n remoteScreen: remoteScreen,\n localVideo: localVideo,\n largeRemoteVideo: largeRemoteVideo,\n smallRemoteVideo: smallRemoteVideo,\n })\n }, [])\n\n // component did mount\n useEffect(() => {\n updateScreenStreams()\n updateVideoStreams()\n\n // register for full screen change\n addEventListener('fullscreenchange', handleFullscreenChange)\n\n return () => {\n removeEventListener('fullscreenchange', handleFullscreenChange)\n\n // clear timeout\n if (uiTimeoutRef.current) {\n clearTimeout(uiTimeoutRef.current)\n }\n }\n }, [])\n\n // starting videocall\n useEffect(() => {\n if (isStartingVideoCall) {\n enableVideo()\n dispatch.currentCall.updateCurrentCall({\n isStartingVideoCall: false,\n })\n }\n }, [isStartingVideoCall])\n\n // starting screen sharing\n useEffect(() => {\n if (isStartingScreenShare) {\n initAndStartScreenShare()\n store.dispatch.screenShare.update({\n isStartingScreenShare: false,\n })\n }\n }, [isStartingScreenShare])\n\n // joining screen sharing\n useEffect(() => {\n if (isJoiningScreenShare) {\n initAndJoinScreenShare()\n store.dispatch.screenShare.update({\n isJoiningScreenShare: false,\n })\n }\n }, [isJoiningScreenShare])\n\n // leaving screen sharing\n useEffect(() => {\n if (isLeavingScreenShare) {\n leaveScreenShare()\n store.dispatch.screenShare.update({\n isLeavingScreenShare: false,\n })\n }\n }, [isLeavingScreenShare])\n\n // isOpen changed\n useEffect(() => {\n updateScreenStreams()\n updateVideoStreams()\n }, [isOpen])\n\n const updateVideoStreams = () => {\n const localVideoElement = store.getState().player.localVideo\n const largeRemoteVideoElement = store.getState().player.largeRemoteVideo\n const smallRemoteVideoElement = store.getState().player.smallRemoteVideo\n const { localVideoStream, remoteVideoStream } = store.getState().webrtc\n\n // local video stream\n\n if (localVideoElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(localVideoElement.current, localVideoStream as MediaStream)\n }\n }\n\n // large remote video stream\n\n if (largeRemoteVideoElement?.current && janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n largeRemoteVideoElement.current,\n remoteVideoStream as MediaStream,\n )\n }\n\n // small remote video stream\n\n if (smallRemoteVideoElement?.current && janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n smallRemoteVideoElement.current,\n remoteVideoStream as MediaStream,\n )\n }\n\n if (remoteVideoStream instanceof MediaStream && remoteVideoStream.getVideoTracks().length > 0) {\n dispatch.currentCall.updateCurrentCall({\n showRemoteVideoPlaceHolder: false,\n })\n }\n }\n\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n const toggleFullScreen = () => {\n if (document.fullscreenElement) {\n document.exitFullscreen()\n eventDispatch('phone-island-fullscreen-exited', {})\n } else {\n if (screenShareViewRef.current) {\n ;(screenShareViewRef.current as HTMLElement).requestFullscreen()\n eventDispatch('phone-island-fullscreen-entered', {})\n }\n }\n }\n useEventListener('phone-island-fullscreen-enter', () => {\n toggleFullScreen()\n })\n useEventListener('phone-island-fullscreen-exit', () => {\n toggleFullScreen()\n })\n\n const newRemoteFeed = (id, display) => {\n // A new feed has been published, create a new plugin handle and attach to it as a listener\n\n dispatch.screenShare.update({\n source: id,\n })\n\n let remoteFeed: any = null\n janusInstance?.attach({\n plugin: 'janus.plugin.videoroom',\n opaqueId: janus.current.randomString(32),\n success: function (pluginHandle) {\n remoteFeed = pluginHandle\n\n dispatch.screenShare.update({\n remoteFeed: pluginHandle,\n })\n remoteFeed.remoteTracks = {}\n remoteFeed.remoteVideos = 0\n janus.current.log?.(\n 'Plugin attached! (' + remoteFeed.getPlugin() + ', id=' + remoteFeed.getId() + ')',\n )\n janus.current.log?.(' -- This is a subscriber')\n // We wait for the plugin to send us an offer\n const { room } = store.getState().screenShare\n\n let listen = {\n request: 'join',\n room: room,\n ptype: 'subscriber',\n feed: id,\n }\n remoteFeed.send({ message: listen })\n },\n error: function (error) {\n janus.current.error?.('Error attaching videoroom plugin', error)\n },\n iceState: function (state) {\n janus.current.log?.('ICE state (feed #' + remoteFeed.rfindex + ') changed to ' + state)\n },\n webrtcState: function (on) {\n janus.current.log?.(\n 'Janus says this WebRTC PeerConnection (feed #' +\n remoteFeed.rfindex +\n ') is ' +\n (on ? 'up' : 'down') +\n ' now',\n )\n },\n slowLink: function (uplink, lost, mid) {\n janus.current.warn?.(\n 'Janus reports problems ' +\n (uplink ? 'sending' : 'receiving') +\n ' packets on mid ' +\n mid +\n ' (' +\n lost +\n ' lost packets)',\n )\n },\n onmessage: function (msg, jsep) {\n janus.current.debug?.(' ::: Got a message (listener) :::', msg)\n let event = msg['videoroom']\n janus.current.debug?.('Event: ' + event)\n if (event) {\n if (event === 'attached') {\n // Subscriber created and attached\n janus.current.log?.(\n 'Successfully attached to feed ' + id + ' (' + display + ') in room ' + msg['room'],\n )\n } else {\n janus.current.warn?.('Unhandled event: ' + event)\n }\n }\n if (jsep) {\n janus.current.debug?.('Handling SDP as well...', jsep)\n // Answer and attach\n remoteFeed.createAnswer({\n jsep: jsep,\n // We only specify data channels here, as this way in\n // case they were offered we'll enable them. Since we\n // don't mention audio or video tracks, we autoaccept them\n // as recvonly (since we won't capture anything ourselves)\n tracks: [{ type: 'data' }],\n success: function (jsep) {\n janus.current.debug?.('Got SDP!', jsep)\n\n const { room } = store.getState().screenShare\n\n let body = { request: 'start', room: room }\n remoteFeed.send({ message: body, jsep: jsep })\n },\n error: function (error) {\n janus.current.error?.('WebRTC error:', error)\n },\n })\n }\n },\n // eslint-disable-next-line no-unused-vars\n onlocaltrack: function (track, on) {\n // The subscriber stream is recvonly, we don't expect anything here\n },\n onremotetrack: function (track, mid, on, metadata) {\n janus.current.debug?.(\n 'Remote track (mid=' +\n mid +\n ') ' +\n (on ? 'added' : 'removed') +\n (metadata ? ' (' + metadata.reason + ') ' : '') +\n ':',\n track,\n )\n // Screen sharing tracks are sometimes muted/unmuted by browser\n // when data is not flowing fast enough; this can make streams blink.\n // We can ignore these.\n if (\n track.kind === 'video' &&\n metadata &&\n (metadata.reason === 'mute' || metadata.reason === 'unmute')\n ) {\n janus.current.log?.('Ignoring mute/unmute on screen-sharing track.')\n return\n }\n if (!on) {\n const { remoteScreenStream } = store.getState().screenShare\n janus.current.stopAllTracks(remoteScreenStream)\n dispatch.screenShare.update({ active: false })\n return\n }\n // If we're here, a new track was added\n if (track.kind === 'video') {\n // New video track: create a stream out of it\n let stream = new MediaStream([track])\n\n // Save the new video stream to the store\n store.dispatch.screenShare.update({ remoteScreenStream: stream })\n\n remoteFeed.remoteTracks[mid] = stream\n janus.current.log?.('Created remote video stream: ' + stream)\n const remoteScreenElement = store.getState().player.remoteScreen\n\n if (remoteScreenElement?.current) {\n janus.current.attachMediaStream?.(remoteScreenElement.current, stream)\n }\n }\n },\n oncleanup: function () {\n janus.current.log?.(' ::: Got a cleanup notification (remote feed ' + id + ') :::')\n remoteFeed.remoteTracks = {}\n remoteFeed.remoteVideos = 0\n },\n })\n }\n\n const enableVideo = () => {\n if (videoRenegotiationInFlightRef.current) {\n return\n }\n\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n videoRenegotiationInFlightRef.current = true\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n })\n const tracks: JanusTrack[] = []\n const currentVideoInputDeviceId = getCurrentVideoInputDeviceId()\n\n const track: Partial<JanusTrack> = {\n type: 'video',\n recv: true,\n }\n\n if (currentVideoInputDeviceId) {\n track.capture = { deviceId: { exact: currentVideoInputDeviceId } }\n } else {\n track.capture = true\n }\n\n const { hasVideoTrackAdded } = store.getState().currentCall\n const { remoteVideoStream } = store.getState().webrtc\n const videoTransceiver = sipcall?.webrtcStuff?.pc\n ?.getTransceivers?.()\n ?.find(\n (transceiver: RTCRtpTransceiver) =>\n transceiver.receiver?.track?.kind === 'video' ||\n transceiver.sender?.track?.kind === 'video',\n )\n const shouldReplaceExistingVideoTransceiver =\n hasVideoTrackAdded ||\n Boolean(videoTransceiver) ||\n (remoteVideoStream instanceof MediaStream && remoteVideoStream.getVideoTracks().length > 0)\n\n if (!shouldReplaceExistingVideoTransceiver) {\n track.add = true\n dispatch.currentCall.setVideoTrackAdded(true)\n } else {\n // Reuse the existing video transceiver when available instead of assuming a\n // fixed mid, otherwise fall back to adding a new local video track.\n if (videoTransceiver) {\n track.replace = true\n if (videoTransceiver.mid) {\n track.mid = videoTransceiver.mid\n }\n if (!hasVideoTrackAdded) {\n dispatch.currentCall.setVideoTrackAdded(true)\n }\n } else {\n track.add = true\n dispatch.currentCall.setVideoTrackAdded(true)\n }\n }\n tracks.push(track as JanusTrack)\n\n sipcall.createOffer({\n tracks: tracks,\n success: function (jsep) {\n videoRenegotiationInFlightRef.current = false\n sipcall.send({ message: { request: 'update' }, jsep: jsep })\n notifyPeerVideoStart()\n dispatchVideoCallStarted({\n initiator: 'local',\n callUser: store.getState().currentUser.username,\n destUser: store.getState().currentCall.username,\n })\n eventDispatch('phone-island-video-enabled', {})\n },\n error: function (error) {\n videoRenegotiationInFlightRef.current = false\n console.error('WebRTC error... ' + JSON.stringify(error))\n },\n })\n }\n useEventListener('phone-island-video-enable', () => {\n enableVideo()\n })\n\n const disableVideo = () => {\n if (videoRenegotiationInFlightRef.current) {\n return\n }\n\n const { sipcall, localVideoStream }: { sipcall: any; localVideoStream: MediaStream | null } =\n store.getState().webrtc\n videoRenegotiationInFlightRef.current = true\n const videoTransceiver = sipcall?.webrtcStuff?.pc\n ?.getTransceivers?.()\n ?.find(\n (transceiver: RTCRtpTransceiver) =>\n transceiver.receiver?.track?.kind === 'video' ||\n transceiver.sender?.track?.kind === 'video',\n )\n\n janus.current.stopAllTracks(localVideoStream)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.currentCall.setLocalVideoEnabled(false)\n const tracks: JanusTrack[] = []\n tracks.push({\n type: 'video',\n ...(videoTransceiver?.mid ? { mid: videoTransceiver.mid } : {}),\n remove: true,\n })\n\n sipcall.createOffer({\n tracks: tracks,\n success: function (jsep) {\n videoRenegotiationInFlightRef.current = false\n sipcall.send({ message: { request: 'update' }, jsep: jsep })\n eventDispatch('phone-island-video-disabled', {})\n },\n error: function (error) {\n videoRenegotiationInFlightRef.current = false\n console.error('WebRTC error... ' + JSON.stringify(error))\n },\n })\n }\n useEventListener('phone-island-video-disable', () => {\n disableVideo()\n })\n\n const toggleVideo = async () => {\n let cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n if (isLocalVideoEnabled) {\n disableVideo()\n } else {\n enableVideo()\n }\n }\n }\n\n const shareScreen = () => {\n if (!janus.current.isExtensionEnabled()) {\n janus.current.error?.(\n \"This browser doesn't support screensharing (getDisplayMedia unavailable)\",\n )\n return\n }\n\n // Create a new room\n const roomName = janus.current.randomString(32)\n\n let create = {\n request: 'create',\n description: roomName,\n bitrate: 500000,\n publishers: 1,\n }\n\n const { plugin } = store.getState().screenShare\n\n plugin.send({\n message: create,\n success: function (result) {\n if (result['error']) {\n janus.current.error?.(\"Couldn't create room: \" + result['error'])\n return\n }\n let event = result['videoroom']\n janus.current.debug?.('Event: ' + event)\n if (event) {\n // Our own screen sharing session has been created, join it\n\n const room = result['room']\n // Set room to the store\n dispatch.screenShare.update({\n room: room,\n })\n\n janus.current.log?.('Screen sharing session created: ' + room)\n\n const { username } = store.getState().currentUser\n\n if (screenSharePublisherJoinRequestedRef.current) {\n janus.current.log?.(\n 'Screen share publisher join already requested on this handle, skipping duplicate join',\n )\n return\n }\n\n screenSharePublisherJoinRequestedRef.current = true\n\n let register = {\n request: 'join',\n room: room,\n ptype: 'publisher',\n display: username,\n }\n plugin.send({ message: register })\n }\n },\n })\n }\n\n const initScreenShare = () => {\n janusInstance?.attach({\n plugin: 'janus.plugin.videoroom',\n opaqueId: janus.current.randomString(32),\n success: function (pluginHandle) {\n // Set plugin to the store\n dispatch.screenShare.update({\n plugin: pluginHandle,\n })\n const { role } = store.getState().screenShare\n\n if (role === 'publisher') {\n // trigger event to nethlink\n eventDispatch('phone-island-screen-share-initialized', {})\n\n setTimeout(function () {\n shareScreen()\n }, 500)\n } else if (role === 'listener') {\n joinScreenShare()\n }\n eventDispatch('phone-island-screen-share-started', {})\n },\n error: function (error) {\n janus.current.error?.('Error attaching videoroom plugin', error)\n },\n consentDialog: function (on) {},\n iceState: function (state) {\n janus.current.log?.('ICE state changed to ' + state)\n },\n mediaState: function (medium, on) {\n janus.current.log?.('Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium)\n },\n webrtcState: function (on) {\n janus.current.log?.(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n slowLink: function (uplink, lost, mid) {\n janus.current.warn?.(\n 'Janus reports problems ' +\n (uplink ? 'sending' : 'receiving') +\n ' packets on mid ' +\n mid +\n ' (' +\n lost +\n ' lost packets)',\n )\n },\n onmessage: function (msg, jsep) {\n janus.current.debug?.(' ::: Got a message (publisher) :::', msg)\n const { plugin, role } = store.getState().screenShare\n const event = msg['videoroom']\n janus.current.debug?.('Event: ' + event)\n\n if (event) {\n if (event === 'joined') {\n if (role === 'publisher') {\n // This is our session, publish our stream\n janus.current.debug?.('Negotiating WebRTC stream for our screen')\n\n plugin.createOffer({\n // We want sendonly audio and screensharing\n tracks: [\n { type: 'audio', capture: true, recv: false },\n { type: 'screen', capture: true, recv: false },\n ],\n success: function (jsep) {\n janus.current.debug?.('Got publisher SDP!', jsep)\n let publish = { request: 'configure', audio: true, video: true }\n plugin.send({ message: publish, jsep: jsep })\n },\n error: function (error) {\n screenSharePublisherJoinRequestedRef.current = false\n janus.current.error?.('WebRTC error:', error)\n dispatch.screenShare.update({ active: false, role: '' })\n },\n })\n } else {\n // We're just watching a session, any feed to attach to?\n if (msg['publishers']) {\n let list = msg['publishers']\n janus.current.debug?.('Got a list of available publishers/feeds:', list)\n for (let f in list) {\n if (list[f]['dummy']) continue\n let id = list[f]['id']\n let display = list[f]['display']\n janus.current.debug?.(' >> [' + id + '] ' + display)\n newRemoteFeed(id, display)\n }\n }\n }\n } else if (event === 'event') {\n // Any feed to attach to?\n if (role === 'listener' && msg['publishers']) {\n let list = msg['publishers']\n janus.current.debug?.('Got a list of available publishers/feeds:', list)\n for (let f in list) {\n if (list[f]['dummy']) continue\n let id = list[f]['id']\n let display = list[f]['display']\n janus.current.debug?.(' >> [' + id + '] ' + display)\n newRemoteFeed(id, display)\n }\n } else if (msg['leaving']) {\n // One of the publishers has gone away?\n let leaving = msg['leaving']\n janus.current.log?.('Publisher left: ' + leaving)\n } else if (msg['error']) {\n janus.current.error?.('Error event: ' + msg['error'])\n }\n }\n }\n if (jsep) {\n janus.current.debug?.('Handling SDP as well...', jsep)\n plugin.handleRemoteJsep({ jsep: jsep })\n }\n },\n onlocaltrack: function (track, on) {\n janus.current.debug?.('Local track ' + (on ? 'added' : 'removed') + ':', track)\n // We use the track ID as name of the element, but it may contain invalid characters\n let trackId = track.id.replace(/[{}]/g, '')\n if (!on) {\n // Track removed, get rid of the stream and the rendering\n let stream = localTracks?.[trackId]\n if (stream) {\n try {\n let tracks = stream.getTracks()\n for (let i in tracks) {\n let mst = tracks[i]\n if (mst) mst.stop()\n }\n // eslint-disable-next-line no-unused-vars\n } catch (e) {}\n }\n if (track.kind === 'video') {\n dispatch.screenShare.update({\n localVideos: localVideos - 1,\n })\n }\n\n // remove track\n const filteredTracks = localTracks?.filter((track) => track !== localTracks[trackId])\n dispatch.screenShare.update({\n localTracks: filteredTracks,\n })\n return\n }\n // If we're here, a new track was added\n let stream = localTracks?.[trackId]\n if (stream) {\n // We've been here already\n return\n }\n\n if (track.kind === 'video') {\n // New video track: create a stream out of it\n dispatch.screenShare.update({\n localVideos: localVideos + 1,\n })\n let stream = new MediaStream([track])\n\n // Save the new video stream to the store\n store.dispatch.screenShare.update({\n localScreenStream: stream,\n })\n\n janus.current.log?.('Created local stream: ' + stream)\n const localScreenElement = store.getState().player.localScreen\n\n if (localScreenElement?.current) {\n janus.current.attachMediaStream?.(localScreenElement.current, stream)\n inviteOtherUser()\n\n // Listen for the 'ended' event on the screen-sharing track\n track.addEventListener('ended', () => {\n stopScreenShare()\n })\n }\n }\n const { plugin } = store.getState().screenShare\n\n if (\n plugin.webrtcStuff.pc.iceConnectionState !== 'completed' &&\n plugin.webrtcStuff.pc.iceConnectionState !== 'connected'\n ) {\n }\n },\n // eslint-disable-next-line no-unused-vars\n onremotetrack: function (track, mid, on) {\n // The publisher stream is sendonly, we don't expect anything here\n },\n oncleanup: function () {\n janus.current.log?.(' ::: Got a cleanup notification :::')\n screenSharePublisherJoinRequestedRef.current = false\n\n dispatch.screenShare.update({\n localTracks: {},\n localVideos: 0,\n })\n },\n })\n }\n\n const updateScreenStreams = () => {\n const localScreenElement = store.getState().player.localScreen\n const remoteScreenElement = store.getState().player.remoteScreen\n const { localScreenStream, remoteScreenStream } = store.getState().screenShare\n\n // local screen stream\n\n if (localScreenElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n localScreenElement.current,\n localScreenStream as MediaStream,\n )\n }\n }\n\n // remote screen stream\n\n if (remoteScreenElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n remoteScreenElement.current,\n remoteScreenStream as MediaStream,\n )\n }\n }\n }\n\n const inviteOtherUser = () => {\n // send message to websocket to invite the other user\n const { socket } = store.getState().websocket\n const { username: destUsername } = store.getState().currentCall\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n socket.emit('message', {\n message: 'screenSharingStart',\n roomId: room,\n destUser: destUsername,\n callUser: username,\n } as ScreenSharingMessage)\n }\n\n const initAndStartScreenShare = () => {\n screenSharePublisherJoinRequestedRef.current = false\n dispatch.screenShare.update({ active: true, role: 'publisher' })\n initScreenShare()\n }\n useEventListener('phone-island-screen-share-start', () => {\n initAndStartScreenShare()\n })\n\n const initAndJoinScreenShare = () => {\n dispatch.screenShare.update({ active: true, role: 'listener' })\n initScreenShare()\n eventDispatch('phone-island-screen-share-joined', {})\n }\n\n const joinScreenShare = () => {\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n const joinMessage = {\n request: 'join',\n room: room,\n ptype: 'publisher',\n display: username,\n }\n\n const { plugin } = store.getState().screenShare\n plugin.send({ message: joinMessage })\n }\n\n const leaveScreenShare = () => {\n const { remoteScreenStream } = store.getState().screenShare\n janus.current.stopAllTracks(remoteScreenStream)\n dispatch.screenShare.update({ active: false })\n eventDispatch('phone-island-screen-share-left', {})\n }\n\n const handleMouseMove = () => {\n setUiShown(true)\n\n if (uiTimeoutRef.current) {\n clearTimeout(uiTimeoutRef.current)\n uiTimeoutRef.current = null\n }\n }\n\n const startHideTimer = () => {\n // start a timer when mouse stops moving to hide video UI\n uiTimeoutRef.current = setTimeout(() => {\n setUiShown(false)\n }, 3000)\n }\n\n const handleMouseMoveWithDebounce = () => {\n handleMouseMove()\n\n // clear the previous debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // set a new debounce timer - when this isn't cleared, it means the mouse has stopped\n debounceTimerRef.current = setTimeout(() => {\n startHideTimer()\n }, 100) // small delay to detect \"stopped moving\"\n }\n\n const stopScreenShare = () => {\n const { plugin, localScreenStream } = store.getState().screenShare\n\n screenSharePublisherJoinRequestedRef.current = false\n janus.current.stopAllTracks(localScreenStream)\n dispatch.screenShare.update({ active: false })\n plugin.detach()\n\n // send message to websocket to tell the other user the screen share has stopped\n const { socket } = store.getState().websocket\n const { username: destUsername } = store.getState().currentCall\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n socket.emit('message', {\n message: 'screenSharingStop',\n roomId: room,\n destUser: destUsername,\n callUser: username,\n } as ScreenSharingMessage)\n\n eventDispatch('phone-island-screen-share-stopped', {})\n }\n useEventListener('phone-island-screen-share-stop', () => {\n stopScreenShare()\n })\n\n const pauseCall = () => {\n pauseCurrentCall()\n stopScreenShare()\n }\n\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const checkCameraPermission = async () => {\n if (videoInputDevices?.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n if (isWebCamAccepted) {\n setIsVideoCallButtonVisible(true)\n return true\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }\n\n return (\n <>\n {isOpen ? (\n <div\n ref={screenShareViewRef}\n onMouseMove={() => handleMouseMoveWithDebounce()}\n className={isFullscreen ? 'pi-h-screen' : 'pi-h-[480px] pi-w-[600px]'}\n >\n <div className={`pi-flex pi-relative pi-justify-center pi-w-full pi-h-full`}>\n {/* large remote screen */}\n <video\n autoPlay\n muted={true}\n ref={remoteScreen}\n className={`pi-rounded-2xl pi-w-full pi-h-full ${\n !screenShareActive || screenShareRole !== 'listener' ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* large local screen */}\n <video\n autoPlay\n muted={true}\n ref={localScreen}\n className={`pi-rounded-2xl pi-w-full pi-h-full ${\n !screenShareActive || screenShareRole !== 'publisher' ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* large remote video */}\n <video\n autoPlay\n muted={true}\n ref={largeRemoteVideo}\n className={`pi-rounded-2xl ${\n screenShareActive || showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* remote video placeholder */}\n <div\n className={`pi-w-full pi-bg-gray-200 dark:pi-bg-gray-800 pi-flex pi-items-center pi-justify-center ${\n screenShareActive || !showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-32 pi-h-32 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-4xl pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(displayName)}\n </span>\n </div>\n </div>\n {/* small local video */}\n <video\n muted={true}\n autoPlay\n ref={localVideo}\n className={`pi-max-w-32 pi-max-h-32 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg ${\n !isLocalVideoEnabled ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* small local video placeholder */}\n <div\n className={`pi-w-32 pi-h-24 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ${\n isLocalVideoEnabled || !hasVideoTrackAdded ? 'pi-hidden' : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-base pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(userInfo.name || '-')}\n </span>\n </div>\n </div>\n {/* small remote video */}\n <video\n muted={true}\n autoPlay\n ref={smallRemoteVideo}\n className={`pi-max-w-32 pi-max-h-32 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg ${\n !screenShareActive || showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* small remote video placeholder */}\n <div\n className={`pi-w-32 pi-h-24 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ${\n !screenShareActive || !showRemoteVideoPlaceHolder || !hasVideoTrackAdded\n ? 'pi-hidden'\n : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-base pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(displayName)}\n </span>\n </div>\n </div>\n </div>\n\n <div\n className={`${\n !isUiShown && 'pi-opacity-0 pi-pointer-events-none'\n } pi-absolute pi-bottom-0 pi-bg-gray-950/65 pi-w-full pi-p-6 pi-rounded-bl-[20px] pi-rounded-br-[20px] pi-transition-all`}\n >\n <div className='pi-flex pi-items-center pi-justify-center pi-gap-6 pi-mb-5'>\n {/* mute button */}\n {!intrudeListenStatus?.isListen && (\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip-mute'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophone} />\n )}\n </Button>\n )}\n\n {/* video button */}\n {videoInputDevices?.length > 0 && (\n <Button\n variant='default'\n onClick={() => toggleVideo()}\n data-tooltip-id='tooltip-toggle-video'\n data-tooltip-content={`${\n !isVideoCallButtonVisible\n ? t('Tooltip.Enable camera permission') || ''\n : isLocalVideoEnabled\n ? t('Tooltip.Disable camera')\n : t('Tooltip.Enable camera')\n }`}\n disabled={!isVideoCallButtonVisible}\n className={`${!isVideoCallButtonVisible ? 'pi-cursor-auto' : ''}`}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isLocalVideoEnabled ? faVideoSlash : faVideo}\n />\n </Button>\n )}\n\n {/* Share screen button */}\n {janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n userInfo?.profile?.macro_permissions?.nethvoice_cti?.permissions?.screen_sharing\n ?.value &&\n !screenShareActive && (\n <Button\n variant='default'\n onClick={() => initAndStartScreenShare()}\n data-tooltip-id='tooltip-start-screen-share'\n data-tooltip-content={t('Tooltip.Share screen') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faDisplay} />\n </Button>\n )}\n\n {/* stop screen share */}\n {screenShareActive && screenShareRole === 'publisher' && (\n <Button\n variant='default'\n onClick={() => stopScreenShare()}\n data-tooltip-id='tooltip-stop-screen-share'\n data-tooltip-content={t('Tooltip.Stop sharing')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faDisplaySlash} />\n </Button>\n )}\n\n {/* fullscreen */}\n {screenShareActive && screenShareRole === 'listener' && (\n <Button\n variant='default'\n onClick={() => toggleFullScreen()}\n data-tooltip-id='tooltip-toggle-fullscreen'\n data-tooltip-content={\n isFullscreen ? t('Tooltip.Exit fullscreen') : t('Tooltip.Enter fullscreen')\n }\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isFullscreen ? faCompress : faExpand}\n />\n </Button>\n )}\n\n {/* record */}\n {userInfo?.profile?.macro_permissions?.settings?.permissions?.recording?.value && (\n <Button\n variant='default'\n onClick={() => recordCurrentCall(isRecording)}\n data-tooltip-id='tooltip-record-video-view'\n data-tooltip-content={\n isRecording ? t('Tooltip.Stop recording') : t('Tooltip.Record')\n }\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isRecording ? faStop : faRecord}\n />\n </Button>\n )}\n\n {/* hold */}\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) && (\n <Button\n variant='default'\n onClick={() => (paused ? unpauseCurrentCall() : pauseCall())}\n data-tooltip-id='tooltip-pause-video-view'\n data-tooltip-content={paused ? t('Tooltip.Play') : t('Tooltip.Pause')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={paused ? faPlay : faPause} />\n </Button>\n )}\n </div>\n <Hangup buttonsVariant='default' />\n </div>\n {/* Buttons tooltips */}\n <CustomThemedTooltip className='pi-z-20' id='tooltip-mute-video-view' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-video' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-fullscreen' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-start-screen-share' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-stop-screen-share' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-record-video-view' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-pause-video-view' place='bottom' />\n </div>\n ) : (\n // collapsed view\n <>\n <div className='pi-flex pi-justify-between pi-items-center'>\n <Avatar />\n <Timer startTime={startTime} isNotAlwaysWhite />\n {!isOpen && remoteAudioStream && !isPhysical() && (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nexport default VideoView\n"],"names":["VideoView","dispatch","useDispatch","_l","useSelector","state","currentCall","muted","startTime","isRecording","paused","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","displayName","isStartingVideoCall","_m","screenShare","localTracks","localVideos","screenShareRole","role","screenShareActive","active","isStartingScreenShare","isJoiningScreenShare","isLeavingScreenShare","intrudeListenStatus","listen","isOpen","island","_o","webrtc","janusInstance","remoteAudioStream","userInfo","store","getState","currentUser","_p","useState","isFullscreen","setIsFullscreen","_q","isUiShown","setUiShown","uiTimeoutRef","useRef","debounceTimerRef","videoRenegotiationInFlightRef","screenSharePublisherJoinRequestedRef","screenShareViewRef","localScreen","remoteScreen","localVideo","largeRemoteVideo","smallRemoteVideo","janus","JanusLib","videoInputDevices","select","mediaDevices","useIsomorphicLayoutEffect","player","updatePlayer","useEffect","updateScreenStreams","updateVideoStreams","addEventListener","handleFullscreenChange","removeEventListener","current","clearTimeout","enableVideo","updateCurrentCall","initAndStartScreenShare","update","initAndJoinScreenShare","leaveScreenShare","localVideoElement","largeRemoteVideoElement","smallRemoteVideoElement","_a","localVideoStream","remoteVideoStream","attachMediaStream","MediaStream","getVideoTracks","length","document","fullscreenElement","toggleFullScreen","exitFullscreen","eventDispatch","requestFullscreen","useEventListener","newRemoteFeed","id","display","source","remoteFeed","attach","plugin","opaqueId","randomString","success","pluginHandle","remoteTracks","remoteVideos","_b","log","call","getPlugin","getId","_d","_c","request","room","ptype","feed","send","message","error","iceState","rfindex","webrtcState","on","slowLink","uplink","lost","mid","warn","onmessage","msg","jsep","debug","event","_f","_e","_h","_g","_k","_j","createAnswer","tracks","type","body","onlocaltrack","track","onremotetrack","metadata","reason","kind","remoteScreenStream","stopAllTracks","stream","remoteScreenElement","oncleanup","sipcall","currentVideoInputDeviceId","getCurrentVideoInputDeviceId","recv","capture","deviceId","exact","videoTransceiver","webrtcStuff","pc","getTransceivers","find","transceiver","receiver","sender","Boolean","replace","setVideoTrackAdded","add","push","createOffer","socket","destUser","callUser","websocket","username","emit","dispatchVideoCallStarted","initiator","console","JSON","stringify","disableVideo","updateLocalVideoStream","setLocalVideoEnabled","__assign","remove","initScreenShare","setTimeout","isExtensionEnabled","create","description","bitrate","publishers","result","register","shareScreen","joinScreenShare","consentDialog","mediaState","medium","_w","audio","video","list","f","leaving","_r","_t","_s","_v","_u","handleRemoteJsep","trackId","stream_2","localScreenStream","localScreenElement","inviteOtherUser","stopScreenShare","iceConnectionState","stream_1","getTracks","i","mst","stop","e","filteredTracks","filter","destUsername","roomId","joinMessage","handleMouseMoveWithDebounce","detach","isVideoCallButtonVisible","setIsVideoCallButtonVisible","checkCameraPermission","__awaiter","checkWebCamPermission","sent","React","createElement","Fragment","ref","onMouseMove","className","autoPlay","concat","getInitials","name","isListen","Button","variant","onClick","unmuteCurrentCall","muteCurrentCall","t","FontAwesomeIcon","icon","faMicrophoneSlash","faMicrophone","disabled","faVideoSlash","faVideo","webRTCAdapter","browserDetails","browser","profile","macro_permissions","nethvoice_cti","permissions","screen_sharing","value","faDisplay","faDisplaySlash","faCompress","faExpand","settings","recording","recordCurrentCall","faStop","faRecord","isIntrude","unpauseCurrentCall","pauseCurrentCall","faPlay","faPause","Hangup","buttonsVariant","CustomThemedTooltip","place","Avatar","Timer","isNotAlwaysWhite","isPhysical","AudioBars","audioStream","size"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/VideoView/index.tsx"],"sourcesContent":["// Copyright (C) 2025 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef, useState } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState, store } from '../../store'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n faCompress,\n faDisplay,\n faExpand,\n faMicrophone,\n faMicrophoneSlash,\n faPause,\n faPlay,\n faStop,\n faVideo,\n faVideoSlash,\n} from '@fortawesome/free-solid-svg-icons'\nimport { t } from 'i18next'\nimport { eventDispatch, useEventListener, useIsomorphicLayoutEffect } from '../../utils'\nimport Hangup from '../Hangup'\nimport {\n muteCurrentCall,\n pauseCurrentCall,\n recordCurrentCall,\n unmuteCurrentCall,\n unpauseCurrentCall,\n} from '../../lib/phone/call'\nimport { JanusTrack, JanusTypes } from '../../types/webrtc'\nimport JanusLib from '../../lib/webrtc/janus.js'\nimport Avatar from '../CallView/Avatar'\nimport Timer from '../CallView/Timer'\nimport { isPhysical } from '../../lib/user/default_device'\nimport { AudioBars } from '../AudioBars'\nimport { CustomThemedTooltip } from '../CustomThemedTooltip'\nimport { faDisplaySlash, faRecord } from '@nethesis/nethesis-solid-svg-icons'\nimport { getCurrentVideoInputDeviceId } from '../../lib/devices/devices'\nimport { getInitials } from '../../lib/avatars/avatars'\nimport { checkWebCamPermission } from '../../lib/devices/devices'\nimport { dispatchVideoCallStarted } from '../../events/SocketEvents'\n\nexport interface VideoViewProps {}\n\nexport type ScreenSharingMessage = {\n message: 'screenSharingStart' | 'screenSharingStop'\n roomId: string\n destUser: string\n callUser: string\n}\n\nexport type VideoCallMessage = {\n message: 'videoCallStart'\n destUser: string\n callUser: string\n}\n\nexport const VideoView: FC<VideoViewProps> = () => {\n const dispatch = useDispatch<Dispatch>()\n const {\n muted,\n startTime,\n isRecording,\n paused,\n isLocalVideoEnabled,\n showRemoteVideoPlaceHolder,\n hasVideoTrackAdded,\n displayName,\n isStartingVideoCall,\n } = useSelector((state: RootState) => state.currentCall)\n const {\n localTracks,\n localVideos,\n role: screenShareRole,\n active: screenShareActive,\n isStartingScreenShare,\n isJoiningScreenShare,\n isLeavingScreenShare,\n } = useSelector((state: RootState) => state.screenShare)\n const intrudeListenStatus = useSelector((state: RootState) => state.listen)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { janusInstance, remoteAudioStream } = useSelector((state: RootState) => state.webrtc)\n const userInfo = store.getState().currentUser\n const [isFullscreen, setIsFullscreen] = useState(false)\n const [isUiShown, setUiShown] = useState(false)\n const uiTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n const videoRenegotiationInFlightRef = useRef(false)\n const screenSharePublisherJoinRequestedRef = useRef(false)\n const screenShareViewRef = useRef(null)\n const localScreen = useRef<HTMLVideoElement>(null)\n const remoteScreen = useRef<HTMLVideoElement>(null)\n const localVideo = useRef<HTMLVideoElement>(null)\n const largeRemoteVideo = useRef<HTMLVideoElement>(null)\n const smallRemoteVideo = useRef<HTMLVideoElement>(null)\n const janus = useRef<JanusTypes>(JanusLib)\n const videoInputDevices = store.select.mediaDevices.videoInputDevices(store.getState())\n\n const notifyPeerVideoStart = () => {\n const { socket } = store.getState().websocket\n const { username: destUser } = store.getState().currentCall\n const { username: callUser } = store.getState().currentUser\n\n if (!socket || !destUser || !callUser) {\n return\n }\n\n socket.emit('message', {\n message: 'videoCallStart',\n destUser,\n callUser,\n } as VideoCallMessage)\n }\n\n useIsomorphicLayoutEffect(() => {\n dispatch.player.updatePlayer({\n localScreen: localScreen,\n remoteScreen: remoteScreen,\n localVideo: localVideo,\n largeRemoteVideo: largeRemoteVideo,\n smallRemoteVideo: smallRemoteVideo,\n })\n }, [])\n\n // component did mount\n useEffect(() => {\n updateScreenStreams()\n updateVideoStreams()\n\n // register for full screen change\n addEventListener('fullscreenchange', handleFullscreenChange)\n\n return () => {\n removeEventListener('fullscreenchange', handleFullscreenChange)\n\n // clear timeout\n if (uiTimeoutRef.current) {\n clearTimeout(uiTimeoutRef.current)\n }\n }\n }, [])\n\n // starting videocall\n useEffect(() => {\n if (isStartingVideoCall) {\n enableVideo()\n dispatch.currentCall.updateCurrentCall({\n isStartingVideoCall: false,\n })\n }\n }, [isStartingVideoCall])\n\n // starting screen sharing\n useEffect(() => {\n if (isStartingScreenShare) {\n initAndStartScreenShare()\n store.dispatch.screenShare.update({\n isStartingScreenShare: false,\n })\n }\n }, [isStartingScreenShare])\n\n // joining screen sharing\n useEffect(() => {\n if (isJoiningScreenShare) {\n initAndJoinScreenShare()\n store.dispatch.screenShare.update({\n isJoiningScreenShare: false,\n })\n }\n }, [isJoiningScreenShare])\n\n // leaving screen sharing\n useEffect(() => {\n if (isLeavingScreenShare) {\n leaveScreenShare()\n store.dispatch.screenShare.update({\n isLeavingScreenShare: false,\n })\n }\n }, [isLeavingScreenShare])\n\n // isOpen changed\n useEffect(() => {\n updateScreenStreams()\n updateVideoStreams()\n }, [isOpen])\n\n const updateVideoStreams = () => {\n const localVideoElement = store.getState().player.localVideo\n const largeRemoteVideoElement = store.getState().player.largeRemoteVideo\n const smallRemoteVideoElement = store.getState().player.smallRemoteVideo\n const { localVideoStream, remoteVideoStream } = store.getState().webrtc\n\n // local video stream\n\n if (localVideoElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(localVideoElement.current, localVideoStream as MediaStream)\n }\n }\n\n // large remote video stream\n\n if (largeRemoteVideoElement?.current && janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n largeRemoteVideoElement.current,\n remoteVideoStream as MediaStream,\n )\n }\n\n // small remote video stream\n\n if (smallRemoteVideoElement?.current && janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n smallRemoteVideoElement.current,\n remoteVideoStream as MediaStream,\n )\n }\n\n if (remoteVideoStream instanceof MediaStream && remoteVideoStream.getVideoTracks().length > 0) {\n dispatch.currentCall.updateCurrentCall({\n showRemoteVideoPlaceHolder: false,\n })\n }\n }\n\n const handleFullscreenChange = () => {\n setIsFullscreen(!!document.fullscreenElement)\n }\n\n const toggleFullScreen = () => {\n if (document.fullscreenElement) {\n document.exitFullscreen()\n eventDispatch('phone-island-fullscreen-exited', {})\n } else {\n if (screenShareViewRef.current) {\n ;(screenShareViewRef.current as HTMLElement).requestFullscreen()\n eventDispatch('phone-island-fullscreen-entered', {})\n }\n }\n }\n useEventListener('phone-island-fullscreen-enter', () => {\n toggleFullScreen()\n })\n useEventListener('phone-island-fullscreen-exit', () => {\n toggleFullScreen()\n })\n\n const newRemoteFeed = (id, display) => {\n // A new feed has been published, create a new plugin handle and attach to it as a listener\n\n dispatch.screenShare.update({\n source: id,\n })\n\n let remoteFeed: any = null\n janusInstance?.attach({\n plugin: 'janus.plugin.videoroom',\n opaqueId: janus.current.randomString(32),\n success: function (pluginHandle) {\n remoteFeed = pluginHandle\n\n dispatch.screenShare.update({\n remoteFeed: pluginHandle,\n })\n remoteFeed.remoteTracks = {}\n remoteFeed.remoteVideos = 0\n janus.current.log?.(\n 'Plugin attached! (' + remoteFeed.getPlugin() + ', id=' + remoteFeed.getId() + ')',\n )\n janus.current.log?.(' -- This is a subscriber')\n // We wait for the plugin to send us an offer\n const { room } = store.getState().screenShare\n\n let listen = {\n request: 'join',\n room: room,\n ptype: 'subscriber',\n feed: id,\n }\n remoteFeed.send({ message: listen })\n },\n error: function (error) {\n janus.current.error?.('Error attaching videoroom plugin', error)\n },\n iceState: function (state) {\n janus.current.log?.('ICE state (feed #' + remoteFeed.rfindex + ') changed to ' + state)\n },\n webrtcState: function (on) {\n janus.current.log?.(\n 'Janus says this WebRTC PeerConnection (feed #' +\n remoteFeed.rfindex +\n ') is ' +\n (on ? 'up' : 'down') +\n ' now',\n )\n },\n slowLink: function (uplink, lost, mid) {\n janus.current.warn?.(\n 'Janus reports problems ' +\n (uplink ? 'sending' : 'receiving') +\n ' packets on mid ' +\n mid +\n ' (' +\n lost +\n ' lost packets)',\n )\n },\n onmessage: function (msg, jsep) {\n janus.current.debug?.(' ::: Got a message (listener) :::', msg)\n let event = msg['videoroom']\n janus.current.debug?.('Event: ' + event)\n if (event) {\n if (event === 'attached') {\n // Subscriber created and attached\n janus.current.log?.(\n 'Successfully attached to feed ' + id + ' (' + display + ') in room ' + msg['room'],\n )\n } else {\n janus.current.warn?.('Unhandled event: ' + event)\n }\n }\n if (jsep) {\n janus.current.debug?.('Handling SDP as well...', jsep)\n // Answer and attach\n remoteFeed.createAnswer({\n jsep: jsep,\n // We only specify data channels here, as this way in\n // case they were offered we'll enable them. Since we\n // don't mention audio or video tracks, we autoaccept them\n // as recvonly (since we won't capture anything ourselves)\n tracks: [{ type: 'data' }],\n success: function (jsep) {\n janus.current.debug?.('Got SDP!', jsep)\n\n const { room } = store.getState().screenShare\n\n let body = { request: 'start', room: room }\n remoteFeed.send({ message: body, jsep: jsep })\n },\n error: function (error) {\n janus.current.error?.('WebRTC error:', error)\n },\n })\n }\n },\n // eslint-disable-next-line no-unused-vars\n onlocaltrack: function (track, on) {\n // The subscriber stream is recvonly, we don't expect anything here\n },\n onremotetrack: function (track, mid, on, metadata) {\n janus.current.debug?.(\n 'Remote track (mid=' +\n mid +\n ') ' +\n (on ? 'added' : 'removed') +\n (metadata ? ' (' + metadata.reason + ') ' : '') +\n ':',\n track,\n )\n // Screen sharing tracks are sometimes muted/unmuted by browser\n // when data is not flowing fast enough; this can make streams blink.\n // We can ignore these.\n if (\n track.kind === 'video' &&\n metadata &&\n (metadata.reason === 'mute' || metadata.reason === 'unmute')\n ) {\n janus.current.log?.('Ignoring mute/unmute on screen-sharing track.')\n return\n }\n if (!on) {\n const { remoteScreenStream } = store.getState().screenShare\n janus.current.stopAllTracks(remoteScreenStream)\n dispatch.screenShare.update({ active: false })\n return\n }\n // If we're here, a new track was added\n if (track.kind === 'video') {\n // New video track: create a stream out of it\n let stream = new MediaStream([track])\n\n // Save the new video stream to the store\n store.dispatch.screenShare.update({ remoteScreenStream: stream })\n\n remoteFeed.remoteTracks[mid] = stream\n janus.current.log?.('Created remote video stream: ' + stream)\n const remoteScreenElement = store.getState().player.remoteScreen\n\n if (remoteScreenElement?.current) {\n janus.current.attachMediaStream?.(remoteScreenElement.current, stream)\n }\n }\n },\n oncleanup: function () {\n janus.current.log?.(' ::: Got a cleanup notification (remote feed ' + id + ') :::')\n remoteFeed.remoteTracks = {}\n remoteFeed.remoteVideos = 0\n },\n })\n }\n\n const enableVideo = () => {\n if (videoRenegotiationInFlightRef.current) {\n return\n }\n\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n videoRenegotiationInFlightRef.current = true\n store.dispatch.currentCall.updateCurrentCall({\n isLocalVideoEnabled: true,\n })\n const tracks: JanusTrack[] = []\n const currentVideoInputDeviceId = getCurrentVideoInputDeviceId()\n\n const track: Partial<JanusTrack> = {\n type: 'video',\n recv: true,\n }\n\n if (currentVideoInputDeviceId) {\n track.capture = { deviceId: { exact: currentVideoInputDeviceId } }\n } else {\n track.capture = true\n }\n\n const { hasVideoTrackAdded } = store.getState().currentCall\n const { remoteVideoStream } = store.getState().webrtc\n const videoTransceiver = sipcall?.webrtcStuff?.pc\n ?.getTransceivers?.()\n ?.find(\n (transceiver: RTCRtpTransceiver) =>\n transceiver.receiver?.track?.kind === 'video' ||\n transceiver.sender?.track?.kind === 'video',\n )\n const shouldReplaceExistingVideoTransceiver =\n hasVideoTrackAdded ||\n Boolean(videoTransceiver) ||\n (remoteVideoStream instanceof MediaStream && remoteVideoStream.getVideoTracks().length > 0)\n\n if (!shouldReplaceExistingVideoTransceiver) {\n track.add = true\n dispatch.currentCall.setVideoTrackAdded(true)\n } else {\n // Reuse the existing video transceiver when available instead of assuming a\n // fixed mid, otherwise fall back to adding a new local video track.\n if (videoTransceiver) {\n track.replace = true\n if (videoTransceiver.mid) {\n track.mid = videoTransceiver.mid\n }\n if (!hasVideoTrackAdded) {\n dispatch.currentCall.setVideoTrackAdded(true)\n }\n } else {\n track.add = true\n dispatch.currentCall.setVideoTrackAdded(true)\n }\n }\n tracks.push(track as JanusTrack)\n\n sipcall.createOffer({\n tracks: tracks,\n success: function (jsep) {\n videoRenegotiationInFlightRef.current = false\n sipcall.send({ message: { request: 'update' }, jsep: jsep })\n notifyPeerVideoStart()\n dispatchVideoCallStarted({\n initiator: 'local',\n callUser: store.getState().currentUser.username,\n destUser: store.getState().currentCall.username,\n })\n eventDispatch('phone-island-video-enabled', {})\n },\n error: function (error) {\n videoRenegotiationInFlightRef.current = false\n console.error('WebRTC error... ' + JSON.stringify(error))\n },\n })\n }\n useEventListener('phone-island-video-enable', () => {\n enableVideo()\n })\n\n const disableVideo = () => {\n if (videoRenegotiationInFlightRef.current) {\n return\n }\n\n const { sipcall, localVideoStream }: { sipcall: any; localVideoStream: MediaStream | null } =\n store.getState().webrtc\n videoRenegotiationInFlightRef.current = true\n const videoTransceiver = sipcall?.webrtcStuff?.pc\n ?.getTransceivers?.()\n ?.find(\n (transceiver: RTCRtpTransceiver) =>\n transceiver.receiver?.track?.kind === 'video' ||\n transceiver.sender?.track?.kind === 'video',\n )\n\n janus.current.stopAllTracks(localVideoStream)\n store.dispatch.webrtc.updateLocalVideoStream(null)\n store.dispatch.currentCall.setLocalVideoEnabled(false)\n const tracks: JanusTrack[] = []\n tracks.push({\n type: 'video',\n ...(videoTransceiver?.mid ? { mid: videoTransceiver.mid } : {}),\n remove: true,\n })\n\n sipcall.createOffer({\n tracks: tracks,\n success: function (jsep) {\n videoRenegotiationInFlightRef.current = false\n sipcall.send({ message: { request: 'update' }, jsep: jsep })\n eventDispatch('phone-island-video-disabled', {})\n },\n error: function (error) {\n videoRenegotiationInFlightRef.current = false\n console.error('WebRTC error... ' + JSON.stringify(error))\n },\n })\n }\n useEventListener('phone-island-video-disable', () => {\n disableVideo()\n })\n\n const toggleVideo = async () => {\n let cameraPermission = await checkCameraPermission()\n if (cameraPermission) {\n if (isLocalVideoEnabled) {\n disableVideo()\n } else {\n enableVideo()\n }\n }\n }\n\n const shareScreen = () => {\n if (!janus.current.isExtensionEnabled()) {\n janus.current.error?.(\n \"This browser doesn't support screensharing (getDisplayMedia unavailable)\",\n )\n return\n }\n\n // Create a new room\n const roomName = janus.current.randomString(32)\n\n let create = {\n request: 'create',\n description: roomName,\n bitrate: 500000,\n publishers: 1,\n }\n\n const { plugin } = store.getState().screenShare\n\n plugin.send({\n message: create,\n success: function (result) {\n if (result['error']) {\n janus.current.error?.(\"Couldn't create room: \" + result['error'])\n return\n }\n let event = result['videoroom']\n janus.current.debug?.('Event: ' + event)\n if (event) {\n // Our own screen sharing session has been created, join it\n\n const room = result['room']\n // Set room to the store\n dispatch.screenShare.update({\n room: room,\n })\n\n janus.current.log?.('Screen sharing session created: ' + room)\n\n const { username } = store.getState().currentUser\n\n if (screenSharePublisherJoinRequestedRef.current) {\n janus.current.log?.(\n 'Screen share publisher join already requested on this handle, skipping duplicate join',\n )\n return\n }\n\n screenSharePublisherJoinRequestedRef.current = true\n\n let register = {\n request: 'join',\n room: room,\n ptype: 'publisher',\n display: username,\n }\n plugin.send({ message: register })\n }\n },\n })\n }\n\n const initScreenShare = () => {\n janusInstance?.attach({\n plugin: 'janus.plugin.videoroom',\n opaqueId: janus.current.randomString(32),\n success: function (pluginHandle) {\n // Set plugin to the store\n dispatch.screenShare.update({\n plugin: pluginHandle,\n })\n const { role } = store.getState().screenShare\n\n if (role === 'publisher') {\n // trigger event to nethlink\n eventDispatch('phone-island-screen-share-initialized', {})\n\n setTimeout(function () {\n shareScreen()\n }, 500)\n } else if (role === 'listener') {\n joinScreenShare()\n }\n eventDispatch('phone-island-screen-share-started', {})\n },\n error: function (error) {\n janus.current.error?.('Error attaching videoroom plugin', error)\n },\n consentDialog: function (on) {},\n iceState: function (state) {\n janus.current.log?.('ICE state changed to ' + state)\n },\n mediaState: function (medium, on) {\n janus.current.log?.('Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium)\n },\n webrtcState: function (on) {\n janus.current.log?.(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n slowLink: function (uplink, lost, mid) {\n janus.current.warn?.(\n 'Janus reports problems ' +\n (uplink ? 'sending' : 'receiving') +\n ' packets on mid ' +\n mid +\n ' (' +\n lost +\n ' lost packets)',\n )\n },\n onmessage: function (msg, jsep) {\n janus.current.debug?.(' ::: Got a message (publisher) :::', msg)\n const { plugin, role } = store.getState().screenShare\n const event = msg['videoroom']\n janus.current.debug?.('Event: ' + event)\n\n if (event) {\n if (event === 'joined') {\n if (role === 'publisher') {\n // This is our session, publish our stream\n janus.current.debug?.('Negotiating WebRTC stream for our screen')\n\n plugin.createOffer({\n // We want sendonly audio and screensharing\n tracks: [\n { type: 'audio', capture: true, recv: false },\n { type: 'screen', capture: true, recv: false },\n ],\n success: function (jsep) {\n janus.current.debug?.('Got publisher SDP!', jsep)\n let publish = { request: 'configure', audio: true, video: true }\n plugin.send({ message: publish, jsep: jsep })\n },\n error: function (error) {\n screenSharePublisherJoinRequestedRef.current = false\n janus.current.error?.('WebRTC error:', error)\n dispatch.screenShare.update({ active: false, role: '' })\n const { room } = store.getState().screenShare\n const releaseHandle = () => plugin.detach()\n plugin.send({\n message: { request: 'destroy', room },\n success: releaseHandle,\n error: releaseHandle,\n })\n },\n })\n } else {\n // We're just watching a session, any feed to attach to?\n if (msg['publishers']) {\n let list = msg['publishers']\n janus.current.debug?.('Got a list of available publishers/feeds:', list)\n for (let f in list) {\n if (list[f]['dummy']) continue\n let id = list[f]['id']\n let display = list[f]['display']\n janus.current.debug?.(' >> [' + id + '] ' + display)\n newRemoteFeed(id, display)\n }\n }\n }\n } else if (event === 'event') {\n // Any feed to attach to?\n if (role === 'listener' && msg['publishers']) {\n let list = msg['publishers']\n janus.current.debug?.('Got a list of available publishers/feeds:', list)\n for (let f in list) {\n if (list[f]['dummy']) continue\n let id = list[f]['id']\n let display = list[f]['display']\n janus.current.debug?.(' >> [' + id + '] ' + display)\n newRemoteFeed(id, display)\n }\n } else if (msg['leaving']) {\n // One of the publishers has gone away?\n let leaving = msg['leaving']\n janus.current.log?.('Publisher left: ' + leaving)\n } else if (msg['error']) {\n janus.current.error?.('Error event: ' + msg['error'])\n }\n }\n }\n if (jsep) {\n janus.current.debug?.('Handling SDP as well...', jsep)\n plugin.handleRemoteJsep({ jsep: jsep })\n }\n },\n onlocaltrack: function (track, on) {\n janus.current.debug?.('Local track ' + (on ? 'added' : 'removed') + ':', track)\n // We use the track ID as name of the element, but it may contain invalid characters\n let trackId = track.id.replace(/[{}]/g, '')\n if (!on) {\n // Track removed, get rid of the stream and the rendering\n let stream = localTracks?.[trackId]\n if (stream) {\n try {\n let tracks = stream.getTracks()\n for (let i in tracks) {\n let mst = tracks[i]\n if (mst) mst.stop()\n }\n // eslint-disable-next-line no-unused-vars\n } catch (e) {}\n }\n if (track.kind === 'video') {\n dispatch.screenShare.update({\n localVideos: localVideos - 1,\n })\n }\n\n // remove track\n const filteredTracks = localTracks?.filter((track) => track !== localTracks[trackId])\n dispatch.screenShare.update({\n localTracks: filteredTracks,\n })\n return\n }\n // If we're here, a new track was added\n let stream = localTracks?.[trackId]\n if (stream) {\n // We've been here already\n return\n }\n\n if (track.kind === 'video') {\n // New video track: create a stream out of it\n dispatch.screenShare.update({\n localVideos: localVideos + 1,\n })\n let stream = new MediaStream([track])\n\n // Save the new video stream to the store\n store.dispatch.screenShare.update({\n localScreenStream: stream,\n })\n\n janus.current.log?.('Created local stream: ' + stream)\n const localScreenElement = store.getState().player.localScreen\n\n if (localScreenElement?.current) {\n janus.current.attachMediaStream?.(localScreenElement.current, stream)\n inviteOtherUser()\n\n // Listen for the 'ended' event on the screen-sharing track\n track.addEventListener('ended', () => {\n stopScreenShare()\n })\n }\n }\n const { plugin } = store.getState().screenShare\n\n if (\n plugin.webrtcStuff.pc.iceConnectionState !== 'completed' &&\n plugin.webrtcStuff.pc.iceConnectionState !== 'connected'\n ) {\n }\n },\n // eslint-disable-next-line no-unused-vars\n onremotetrack: function (track, mid, on) {\n // The publisher stream is sendonly, we don't expect anything here\n },\n oncleanup: function () {\n janus.current.log?.(' ::: Got a cleanup notification :::')\n screenSharePublisherJoinRequestedRef.current = false\n\n dispatch.screenShare.update({\n localTracks: {},\n localVideos: 0,\n })\n },\n })\n }\n\n const updateScreenStreams = () => {\n const localScreenElement = store.getState().player.localScreen\n const remoteScreenElement = store.getState().player.remoteScreen\n const { localScreenStream, remoteScreenStream } = store.getState().screenShare\n\n // local screen stream\n\n if (localScreenElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n localScreenElement.current,\n localScreenStream as MediaStream,\n )\n }\n }\n\n // remote screen stream\n\n if (remoteScreenElement?.current) {\n if (janus.current.attachMediaStream) {\n janus.current.attachMediaStream(\n remoteScreenElement.current,\n remoteScreenStream as MediaStream,\n )\n }\n }\n }\n\n const inviteOtherUser = () => {\n // send message to websocket to invite the other user\n const { socket } = store.getState().websocket\n const { username: destUsername } = store.getState().currentCall\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n socket.emit('message', {\n message: 'screenSharingStart',\n roomId: room,\n destUser: destUsername,\n callUser: username,\n } as ScreenSharingMessage)\n }\n\n const initAndStartScreenShare = () => {\n screenSharePublisherJoinRequestedRef.current = false\n dispatch.screenShare.update({ active: true, role: 'publisher' })\n initScreenShare()\n }\n useEventListener('phone-island-screen-share-start', () => {\n initAndStartScreenShare()\n })\n\n const initAndJoinScreenShare = () => {\n dispatch.screenShare.update({ active: true, role: 'listener' })\n initScreenShare()\n eventDispatch('phone-island-screen-share-joined', {})\n }\n\n const joinScreenShare = () => {\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n const joinMessage = {\n request: 'join',\n room: room,\n ptype: 'publisher',\n display: username,\n }\n\n const { plugin } = store.getState().screenShare\n plugin.send({ message: joinMessage })\n }\n\n const leaveScreenShare = () => {\n const { remoteScreenStream } = store.getState().screenShare\n janus.current.stopAllTracks(remoteScreenStream)\n dispatch.screenShare.update({ active: false })\n eventDispatch('phone-island-screen-share-left', {})\n }\n\n const handleMouseMove = () => {\n setUiShown(true)\n\n if (uiTimeoutRef.current) {\n clearTimeout(uiTimeoutRef.current)\n uiTimeoutRef.current = null\n }\n }\n\n const startHideTimer = () => {\n // start a timer when mouse stops moving to hide video UI\n uiTimeoutRef.current = setTimeout(() => {\n setUiShown(false)\n }, 3000)\n }\n\n const handleMouseMoveWithDebounce = () => {\n handleMouseMove()\n\n // clear the previous debounce timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n // set a new debounce timer - when this isn't cleared, it means the mouse has stopped\n debounceTimerRef.current = setTimeout(() => {\n startHideTimer()\n }, 100) // small delay to detect \"stopped moving\"\n }\n\n const stopScreenShare = () => {\n const { plugin, localScreenStream } = store.getState().screenShare\n\n screenSharePublisherJoinRequestedRef.current = false\n janus.current.stopAllTracks(localScreenStream)\n dispatch.screenShare.update({ active: false })\n plugin.detach()\n\n // send message to websocket to tell the other user the screen share has stopped\n const { socket } = store.getState().websocket\n const { username: destUsername } = store.getState().currentCall\n const { room } = store.getState().screenShare\n const { username } = store.getState().currentUser\n\n socket.emit('message', {\n message: 'screenSharingStop',\n roomId: room,\n destUser: destUsername,\n callUser: username,\n } as ScreenSharingMessage)\n\n eventDispatch('phone-island-screen-share-stopped', {})\n }\n useEventListener('phone-island-screen-share-stop', () => {\n stopScreenShare()\n })\n\n const pauseCall = () => {\n pauseCurrentCall()\n stopScreenShare()\n }\n\n const [isVideoCallButtonVisible, setIsVideoCallButtonVisible] = useState(true)\n\n const checkCameraPermission = async () => {\n if (videoInputDevices?.length > 0) {\n const isWebCamAccepted = await checkWebCamPermission()\n if (isWebCamAccepted) {\n setIsVideoCallButtonVisible(true)\n return true\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n } else {\n setIsVideoCallButtonVisible(false)\n return false\n }\n }\n\n return (\n <>\n {isOpen ? (\n <div\n ref={screenShareViewRef}\n onMouseMove={() => handleMouseMoveWithDebounce()}\n className={isFullscreen ? 'pi-h-screen' : 'pi-h-[480px] pi-w-[600px]'}\n >\n <div className={`pi-flex pi-relative pi-justify-center pi-w-full pi-h-full`}>\n {/* large remote screen */}\n <video\n autoPlay\n muted={true}\n ref={remoteScreen}\n className={`pi-rounded-2xl pi-w-full pi-h-full ${\n !screenShareActive || screenShareRole !== 'listener' ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* large local screen */}\n <video\n autoPlay\n muted={true}\n ref={localScreen}\n className={`pi-rounded-2xl pi-w-full pi-h-full ${\n !screenShareActive || screenShareRole !== 'publisher' ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* large remote video */}\n <video\n autoPlay\n muted={true}\n ref={largeRemoteVideo}\n className={`pi-rounded-2xl ${\n screenShareActive || showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* remote video placeholder */}\n <div\n className={`pi-w-full pi-bg-gray-200 dark:pi-bg-gray-800 pi-flex pi-items-center pi-justify-center ${\n screenShareActive || !showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-32 pi-h-32 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-4xl pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(displayName)}\n </span>\n </div>\n </div>\n {/* small local video */}\n <video\n muted={true}\n autoPlay\n ref={localVideo}\n className={`pi-max-w-32 pi-max-h-32 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg ${\n !isLocalVideoEnabled ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* small local video placeholder */}\n <div\n className={`pi-w-32 pi-h-24 pi-absolute pi-top-5 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ${\n isLocalVideoEnabled || !hasVideoTrackAdded ? 'pi-hidden' : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-base pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(userInfo.name || '-')}\n </span>\n </div>\n </div>\n {/* small remote video */}\n <video\n muted={true}\n autoPlay\n ref={smallRemoteVideo}\n className={`pi-max-w-32 pi-max-h-32 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg ${\n !screenShareActive || showRemoteVideoPlaceHolder ? 'pi-hidden' : ''\n }`}\n ></video>\n {/* small remote video placeholder */}\n <div\n className={`pi-w-32 pi-h-24 pi-absolute pi-top-32 pi-right-5 pi-rounded-lg pi-bg-gray-200 dark:pi-bg-gray-900 pi-flex pi-items-center pi-justify-center ${\n !screenShareActive || !showRemoteVideoPlaceHolder || !hasVideoTrackAdded\n ? 'pi-hidden'\n : ''\n }`}\n >\n <div className='pi-rounded-full pi-bg-gray-700 dark:pi-bg-gray-200 pi-w-12 pi-h-12 pi-flex pi-items-center pi-justify-center'>\n <span className='pi-text-base pi-text-gray-50 dark:pi-text-gray-900'>\n {getInitials(displayName)}\n </span>\n </div>\n </div>\n </div>\n\n <div\n className={`${\n !isUiShown && 'pi-opacity-0 pi-pointer-events-none'\n } pi-absolute pi-bottom-0 pi-bg-gray-950/65 pi-w-full pi-p-6 pi-rounded-bl-[20px] pi-rounded-br-[20px] pi-transition-all`}\n >\n <div className='pi-flex pi-items-center pi-justify-center pi-gap-6 pi-mb-5'>\n {/* mute button */}\n {!intrudeListenStatus?.isListen && (\n <Button\n variant='default'\n active={muted ? true : false}\n onClick={() => (muted ? unmuteCurrentCall() : muteCurrentCall())}\n data-tooltip-id='tooltip-mute'\n data-tooltip-content={muted ? `${t('Tooltip.Unmute')}` : `${t('Tooltip.Mute')}`}\n >\n {muted ? (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophoneSlash} />\n ) : (\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faMicrophone} />\n )}\n </Button>\n )}\n\n {/* video button */}\n {videoInputDevices?.length > 0 && (\n <Button\n variant='default'\n onClick={() => toggleVideo()}\n data-tooltip-id='tooltip-toggle-video'\n data-tooltip-content={`${\n !isVideoCallButtonVisible\n ? t('Tooltip.Enable camera permission') || ''\n : isLocalVideoEnabled\n ? t('Tooltip.Disable camera')\n : t('Tooltip.Enable camera')\n }`}\n disabled={!isVideoCallButtonVisible}\n className={`${!isVideoCallButtonVisible ? 'pi-cursor-auto' : ''}`}\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isLocalVideoEnabled ? faVideoSlash : faVideo}\n />\n </Button>\n )}\n\n {/* Share screen button */}\n {janus.current.webRTCAdapter.browserDetails.browser !== 'safari' &&\n userInfo?.profile?.macro_permissions?.nethvoice_cti?.permissions?.screen_sharing\n ?.value &&\n !screenShareActive && (\n <Button\n variant='default'\n onClick={() => initAndStartScreenShare()}\n data-tooltip-id='tooltip-start-screen-share'\n data-tooltip-content={t('Tooltip.Share screen') || ''}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faDisplay} />\n </Button>\n )}\n\n {/* stop screen share */}\n {screenShareActive && screenShareRole === 'publisher' && (\n <Button\n variant='default'\n onClick={() => stopScreenShare()}\n data-tooltip-id='tooltip-stop-screen-share'\n data-tooltip-content={t('Tooltip.Stop sharing')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={faDisplaySlash} />\n </Button>\n )}\n\n {/* fullscreen */}\n {screenShareActive && screenShareRole === 'listener' && (\n <Button\n variant='default'\n onClick={() => toggleFullScreen()}\n data-tooltip-id='tooltip-toggle-fullscreen'\n data-tooltip-content={\n isFullscreen ? t('Tooltip.Exit fullscreen') : t('Tooltip.Enter fullscreen')\n }\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isFullscreen ? faCompress : faExpand}\n />\n </Button>\n )}\n\n {/* record */}\n {userInfo?.profile?.macro_permissions?.settings?.permissions?.recording?.value && (\n <Button\n variant='default'\n onClick={() => recordCurrentCall(isRecording)}\n data-tooltip-id='tooltip-record-video-view'\n data-tooltip-content={\n isRecording ? t('Tooltip.Stop recording') : t('Tooltip.Record')\n }\n >\n <FontAwesomeIcon\n className='pi-h-6 pi-w-6'\n icon={isRecording ? faStop : faRecord}\n />\n </Button>\n )}\n\n {/* hold */}\n {!(intrudeListenStatus?.isIntrude || intrudeListenStatus?.isListen) && (\n <Button\n variant='default'\n onClick={() => (paused ? unpauseCurrentCall() : pauseCall())}\n data-tooltip-id='tooltip-pause-video-view'\n data-tooltip-content={paused ? t('Tooltip.Play') : t('Tooltip.Pause')}\n >\n <FontAwesomeIcon className='pi-h-6 pi-w-6' icon={paused ? faPlay : faPause} />\n </Button>\n )}\n </div>\n <Hangup buttonsVariant='default' />\n </div>\n {/* Buttons tooltips */}\n <CustomThemedTooltip className='pi-z-20' id='tooltip-mute-video-view' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-video' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-toggle-fullscreen' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-start-screen-share' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-stop-screen-share' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-record-video-view' place='bottom' />\n <CustomThemedTooltip className='pi-z-20' id='tooltip-pause-video-view' place='bottom' />\n </div>\n ) : (\n // collapsed view\n <>\n <div className='pi-flex pi-justify-between pi-items-center'>\n <Avatar />\n <Timer startTime={startTime} isNotAlwaysWhite />\n {!isOpen && remoteAudioStream && !isPhysical() && (\n <AudioBars\n audioStream={remoteAudioStream}\n paused={paused}\n size={isOpen ? 'large' : 'small'}\n />\n )}\n </div>\n </>\n )}\n </>\n )\n}\n\nexport default VideoView\n"],"names":["VideoView","dispatch","useDispatch","_l","useSelector","state","currentCall","muted","startTime","isRecording","paused","isLocalVideoEnabled","showRemoteVideoPlaceHolder","hasVideoTrackAdded","displayName","isStartingVideoCall","_m","screenShare","localTracks","localVideos","screenShareRole","role","screenShareActive","active","isStartingScreenShare","isJoiningScreenShare","isLeavingScreenShare","intrudeListenStatus","listen","isOpen","island","_o","webrtc","janusInstance","remoteAudioStream","userInfo","store","getState","currentUser","_p","useState","isFullscreen","setIsFullscreen","_q","isUiShown","setUiShown","uiTimeoutRef","useRef","debounceTimerRef","videoRenegotiationInFlightRef","screenSharePublisherJoinRequestedRef","screenShareViewRef","localScreen","remoteScreen","localVideo","largeRemoteVideo","smallRemoteVideo","janus","JanusLib","videoInputDevices","select","mediaDevices","useIsomorphicLayoutEffect","player","updatePlayer","useEffect","updateScreenStreams","updateVideoStreams","addEventListener","handleFullscreenChange","removeEventListener","current","clearTimeout","enableVideo","updateCurrentCall","initAndStartScreenShare","update","initAndJoinScreenShare","leaveScreenShare","localVideoElement","largeRemoteVideoElement","smallRemoteVideoElement","_a","localVideoStream","remoteVideoStream","attachMediaStream","MediaStream","getVideoTracks","length","document","fullscreenElement","toggleFullScreen","exitFullscreen","eventDispatch","requestFullscreen","useEventListener","newRemoteFeed","id","display","source","remoteFeed","attach","plugin","opaqueId","randomString","success","pluginHandle","remoteTracks","remoteVideos","_b","log","call","getPlugin","getId","_d","_c","request","room","ptype","feed","send","message","error","iceState","rfindex","webrtcState","on","slowLink","uplink","lost","mid","warn","onmessage","msg","jsep","debug","event","_f","_e","_h","_g","_k","_j","createAnswer","tracks","type","body","onlocaltrack","track","onremotetrack","metadata","reason","kind","remoteScreenStream","stopAllTracks","stream","remoteScreenElement","oncleanup","sipcall","currentVideoInputDeviceId","getCurrentVideoInputDeviceId","recv","capture","deviceId","exact","videoTransceiver","webrtcStuff","pc","getTransceivers","find","transceiver","receiver","sender","Boolean","replace","setVideoTrackAdded","add","push","createOffer","socket","destUser","callUser","websocket","username","emit","dispatchVideoCallStarted","initiator","console","JSON","stringify","disableVideo","updateLocalVideoStream","setLocalVideoEnabled","__assign","remove","initScreenShare","setTimeout","isExtensionEnabled","create","description","bitrate","publishers","result","register","shareScreen","joinScreenShare","consentDialog","mediaState","medium","_w","audio","video","releaseHandle","detach","list","f","leaving","_r","_t","_s","_v","_u","handleRemoteJsep","trackId","stream_2","localScreenStream","localScreenElement","inviteOtherUser","stopScreenShare","iceConnectionState","stream_1","getTracks","i","mst","stop","e","filteredTracks","filter","destUsername","roomId","joinMessage","handleMouseMoveWithDebounce","isVideoCallButtonVisible","setIsVideoCallButtonVisible","checkCameraPermission","__awaiter","checkWebCamPermission","sent","React","createElement","Fragment","ref","onMouseMove","className","autoPlay","concat","getInitials","name","isListen","Button","variant","onClick","unmuteCurrentCall","muteCurrentCall","t","FontAwesomeIcon","icon","faMicrophoneSlash","faMicrophone","disabled","faVideoSlash","faVideo","webRTCAdapter","browserDetails","browser","profile","macro_permissions","nethvoice_cti","permissions","screen_sharing","value","faDisplay","faDisplaySlash","faCompress","faExpand","settings","recording","recordCurrentCall","faStop","faRecord","isIntrude","unpauseCurrentCall","pauseCurrentCall","faPlay","faPause","Hangup","buttonsVariant","CustomThemedTooltip","place","Avatar","Timer","isNotAlwaysWhite","isPhysical","AudioBars","audioStream","size"],"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--m-1{margin:-.25rem}.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-3\.5{height:.875rem}.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-3\.5{width:.875rem}.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--translate-y-1\/2,.pi-rotate-135{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-45,.pi-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi-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\]{grid-template-rows:20px 24px}.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-0{padding:0}.pi-p-1{padding:.25rem}.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-500{--tw-text-opacity:1;color:rgb(16 185 129/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-iconPrimaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/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-inherit{color:inherit}.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-200\/70:hover{background-color:#e5e7ebb3}.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-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-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}.focus-visible\:pi-ring-2:focus-visible{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:pi-ring-emerald-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.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-emerald-700:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(4 120 87/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-iconPrimaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/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-gray-700\/70:hover:where(.pi-dark,.pi-dark *){background-color:#374151b3}.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-1{grid-column-start:1}.pi-col-start-auto{grid-column-start:auto}.pi-row-start-1{grid-row-start:1}.pi--m-1{margin:-.25rem}.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-3\.5{height:.875rem}.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-3\.5{width:.875rem}.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--translate-y-1\/2,.pi-rotate-135{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-45{--tw-rotate:45deg}.pi-rotate-45,.pi-rotate-90{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.pi-rotate-90{--tw-rotate:90deg}.pi-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\]{grid-template-rows:20px 24px}.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-0{padding:0}.pi-p-1{padding:.25rem}.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-500{--tw-text-opacity:1;color:rgb(16 185 129/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-iconPrimaryNeutral{--tw-text-opacity:1;color:rgb(17 24 39/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-inherit{color:inherit}.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-200\/70:hover{background-color:#e5e7ebb3}.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-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-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}.focus-visible\:pi-ring-2:focus-visible{--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);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:pi-ring-emerald-500:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(16 185 129/var(--tw-ring-opacity,1))}.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-emerald-700:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(4 120 87/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-iconPrimaryNeutralDark:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(249 250 251/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-indigo-400:where(.pi-dark,.pi-dark *){--tw-text-opacity:1;color:rgb(129 140 248/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-gray-700\/70:hover:where(.pi-dark,.pi-dark *){background-color:#374151b3}.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}.\[\&_\.react-tooltip-content-wrapper\]\:pi-p-0 .react-tooltip-content-wrapper{padding:0}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="@nethesis/phone-island",s="Nethesis",t="1.0.15-dev.1",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":"7.3.1","@fortawesome/free-solid-svg-icons":"7.3.1","@fortawesome/react-fontawesome":"3.5.0","@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":"^7.0.0","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.0","@rollup/plugin-terser":"^1.0.0","@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.28.0","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.15-dev.3",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":"7.3.1","@fortawesome/free-solid-svg-icons":"7.3.1","@fortawesome/react-fontawesome":"3.5.0","@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":"^7.0.0","@rollup/plugin-commonjs":"^23.0.2","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^16.0.0","@rollup/plugin-terser":"^1.0.0","@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.28.0","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.15-dev.1",
4
+ "version": "1.0.15-dev.3",
5
5
  "description": "NethVoice CTI Phone Island",
6
6
  "keywords": [
7
7
  "nethserver",