2025-03-19 15:35:09 +08:00

8892 lines
537 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(){"use strict";try{if(typeof document!="undefined"){var t=document.createElement("style");t.appendChild(document.createTextNode(".tk-row{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box;width:100%}.tk-col{display:flex;flex-wrap:wrap;position:relative;box-sizing:border-box}.tk-loading_dot-container{display:flex;justify-content:space-between;align-items:center;height:100%}.tk-loading_dot-container .tk-loading_dot:nth-child(1){opacity:0;animation-duration:.8s;animation-delay:0s;animation-play-state:running}.tk-loading_dot-container .tk-loading_dot:nth-child(2){opacity:.083;animation-duration:.8s;animation-delay:.2666666667s;animation-play-state:running}.tk-loading_dot-container .tk-loading_dot:nth-child(3){opacity:.1667;animation-duration:.8s;animation-delay:.5333333333s;animation-play-state:running}.tk-loading_dot-container .tk-loading_dot{width:20%;height:20%;border-radius:50%;background-color:#fff;animation-duration:1.8s;animation-name:dotting;animation-timing-function:linear;animation-iteration-count:infinite;animation-fill-mode:both}@keyframes dotting{0%{opacity:.15}1%{opacity:.8}33%{opacity:.8}34%{opacity:.15}to{opacity:.15}}.tk-loading_circle-container{height:100%;border:2px solid;border-radius:50%;border-top-color:transparent;border-right-color:transparent;border-bottom-color:#fff;border-left-color:#fff;background:0 0;vertical-align:middle;box-sizing:border-box;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tk-loading{display:flex;align-items:center;flex-direction:column}.tk-loading .tk-loading_text{margin:10px}.tk-image{position:relative;display:flex;align-items:center;justify-content:center;overflow:hidden;vertical-align:middle;width:300px;height:225px}.tk-image .tk-image_inner{width:100%;height:100%}.tk-button{display:inline-flex;align-items:center;justify-content:center}.tk-button.tk-button--small{height:24px}.tk-button.tk-button--middle{height:32px}.tk-button.tk-button--large{height:40px}.tk-button .tk-button--content{color:#606266;font-size:14px;font-weight:500}.tk-button.tk-circle.tk-button--small{width:24px}.tk-button.tk-circle.tk-button--default{width:32px}.tk-button.tk-circle.tk-button--large{width:40px}.btn-content[data-v-135d060f],.btn-content[data-v-f92abf93]{display:flex;flex-direction:column;align-items:center}.tk-text{display:inline-block;overflow:hidden;text-align:center;line-height:normal;white-space:nowrap;font-weight:400;font-size:14px;color:#303133}.tk-text.tk-text--line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;white-space:normal}.btn-content[data-v-7c062dcf]{display:flex;flex-direction:column;align-items:center}.top-bar-container[data-v-b040a138]{position:absolute;z-index:2;width:100%;height:5.8%;display:flex;align-items:center}.tk-overlay{position:fixed;left:0;top:0;bottom:0;width:100%}.tk-overlay .tk-overlay_mask-container{width:100%;height:100%;z-index:0;position:absolute}.tk-overlay .tk-overlay_mask{position:absolute;left:0;top:0;right:0;bottom:0;background-color:#00000080;z-index:1}.tk-overlay .tk-overlay_slot{position:absolute;left:0;right:0;top:0;bottom:0;z-index:1;display:flex;justify-content:center}.tk-avatar{display:inline-flex;justify-content:center;align-items:center;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;font-size:14px}.tk-avatar.tk-avatar--square{border-radius:4px}.tk-avatar.tk-avatar--circle{border-radius:100%}.tk-avatar .tk-avatar_img,.tk-avatar .tk-avatar_image{width:100%;height:100%}.mic-container[data-v-ea062939]{position:relative;width:24px;height:24px}.mic-container .mic-level-container[data-v-ea062939]{position:absolute;left:6px;width:8px;height:14px;display:flex;flex-wrap:wrap;border-radius:4px;overflow:hidden;flex-direction:column-reverse;justify-content:space-between}.mic-container .mic-level-container .mic-level[data-v-ea062939]{width:100%;background-color:#27c39f;transition:height .2s}.overlay-stream-container.mobile .overlay-stream-content-container[data-v-34807212]{width:100%;top:26%;position:absolute;display:flex;justify-content:center;flex-direction:column}.overlay-stream-container.mobile .overlay-stream-content-container .overlay-stream-content[data-v-34807212]{display:flex;flex-direction:column;align-items:center}.overlay-stream-container.mobile .overlay-stream-content-container .overlay-stream-content .overlay-stream-avatar[data-v-34807212]{margin-bottom:12px}.overlay-stream-container.mobile .overlay-stream-content-container .overlay-stream-content .overlay-stream-info[data-v-34807212]{display:flex;align-items:center}.overlay-stream-container.mobile .overlay-stream-content-container .overlay-stream-content .overlay-stream-tip[data-v-34807212]{margin-top:12px;color:#fff}.overlay-stream-container.pc .overlay-stream-content-container[data-v-34807212]{display:flex;height:100%;align-items:center;justify-content:center}.overlay-stream-container.pc .overlay-stream-content-container .overlay-stream-content[data-v-34807212]{display:flex;flex-direction:column;align-items:center}.overlay-stream-container.pc .overlay-stream-content-container .overlay-stream-content .overlay-stream-info[data-v-34807212]{display:flex;align-items:center}.overlay-stream-container[data-v-34807212]{position:absolute;display:flex;height:100%;width:100%;flex-direction:column;justify-content:center;align-items:center}.waiting-container[data-v-8dc3669f]{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1}.groupcall-info[data-v-8dc3669f]{display:flex;flex-direction:column;align-items:center;margin-top:24px;z-index:1;color:#fff;width:100%}.groupcall-info .avatar-group[data-v-8dc3669f]{display:flex;flex-wrap:wrap;margin-top:12px;align-items:center;justify-content:center;max-width:70%}.groupcall-info .avatar-group .avatar-item[data-v-8dc3669f]{width:10vw;height:10vw;margin-left:10px;margin-top:10px}.tk-toggle-window{height:100%;position:relative}.tk-toggle-window-item{height:100%;position:absolute}.tk-toggle-window-item.tk-toggle-window-item--big{width:100%;height:100%;z-index:0}.tk-toggle-window-item.mobile.tk-toggle-window-item--small{z-index:1;width:24.3%!important;height:19.7%!important;border-radius:5px;left:98%;top:8%;transform:translate(-100%);overflow:hidden}.tk-toggle-window-item.pc.tk-toggle-window-item--small{top:2%;left:2%;width:22%;height:21%;border-radius:12px;overflow:hidden;z-index:1}.stream-userInfo[data-v-73beaeef]{padding:2px 5px;display:flex;align-items:center;background-color:#000000a6;color:#fff}.stream-userInfo .nickname[data-v-73beaeef]{display:flex}.stream-icon[data-v-b2b7ff75]{width:30px;height:30px;background:rgba(34,38,46,.5019607843);border-radius:50%;display:flex;align-items:center;justify-content:center}.switch-camera[data-v-b2b7ff75]{margin:0 12px}.pusher-container[data-v-8cf5d7b3]{width:100%;height:100%;position:relative;background-color:#4c515a}.pusher-container .audio-stream-container[data-v-8cf5d7b3]{position:absolute;z-index:3;width:100%;height:100%}.pusher-container .stream-info-container[data-v-8cf5d7b3]{position:absolute;bottom:0;z-index:3;width:100%}.pusher-container .stream-info-container.mobile[data-v-8cf5d7b3]{margin-bottom:8px}.stream[data-v-b0aae39e]{width:100%;height:100%}.small-view[data-v-b0aae39e]{position:absolute;width:100%;height:100%;background-color:#000}.small-view .stream-box[data-v-b0aae39e],.small-view .stream-box .stream[data-v-b0aae39e]{width:100%;height:100%}.large-view[data-v-b0aae39e]{width:100%;height:100%;background-color:#000}.large-view .stream-box[data-v-b0aae39e],.large-view .stream-box .stream[data-v-b0aae39e]{width:100%;height:100%}.player-container[data-v-8e509e0d]{width:100%;height:100%;position:relative;background-color:#4c515a}.player-container .audio-stream-container[data-v-8e509e0d]{position:absolute;z-index:1;width:100%;height:100%}.player-container .stream-info-container[data-v-8e509e0d]{position:absolute;bottom:0;z-index:1;width:100%}.player-container .stream-info-container.mobile[data-v-8e509e0d]{margin-bottom:8px}.float-control-panel[data-v-63373c5d]{width:168px;height:56px;background:white;z-index:13;display:flex;flex-wrap:nowrap;justify-content:center;border-radius:40px;box-shadow:#00000029 0 3px 6px,#0000003b 0 3px 6px}.float-control-item-icon[data-v-63373c5d]{display:flex;flex-direction:row;justify-content:center;align-items:center;width:56px;height:56px;position:relative}.float-control-item-icon-container[data-v-63373c5d]{border-radius:40px;width:40px;height:40px;margin:.5rem;cursor:pointer;display:flex;flex-direction:row;justify-content:center;align-items:center}.float-control-item-icon-container[data-v-63373c5d]:hover{background:rgba(218,218,218,.3)}.singlecall-video-float[data-v-ea53b7e0]{width:110px;height:196px;display:flex;z-index:99;flex-direction:column;align-items:center;background:#000;border-radius:12px;box-shadow:0 0 10px #35394166;overflow:hidden}.singlecall-video-float .singlecall-video-float-content[data-v-ea53b7e0]{width:100%;height:100%;display:flex;justify-content:center;flex-direction:column;align-items:center}.singlecall-video-float .float-window-tip-container[data-v-ea53b7e0]{position:absolute;bottom:8px}.singlecall-audio-float[data-v-ea53b7e0]{width:72px;height:72px;display:flex;z-index:99;flex-direction:column;align-items:center;background:#FFF;border-radius:12px;box-shadow:0 0 10px #35394166}.singlecall-audio-float .singlecall-audio-float-content[data-v-ea53b7e0]{width:100%;height:100%;display:flex;justify-content:center;flex-direction:column;align-items:center}.click-container[data-v-0dfe3ae0]{position:absolute;width:100%;height:100%;z-index:2}.groupcall-video-float.float[data-v-0dfe3ae0]{width:72px;height:90px;display:flex;z-index:99;flex-direction:column;align-items:center;border-radius:12px;background:#FFF;box-shadow:0 0 10px #35394166;box-sizing:border-box;overflow:hidden}.groupcall-video-float.float .stream-container[data-v-0dfe3ae0]{position:relative;width:72px;height:70px}.groupcall-video-float.float .video[data-v-0dfe3ae0]{width:72px;height:70px;position:absolute}.groupcall-video-float.float .audio[data-v-0dfe3ae0]{position:absolute;width:100%;height:70px;padding-top:10px;background-color:#fff;display:flex;flex-direction:column;align-items:center}.groupcall-video-float.float .device-status[data-v-0dfe3ae0]{width:100%;height:20px;background-color:#f9f6f4;display:flex;position:relative;justify-content:space-around}.groupcall-video-float.not-float[data-v-0dfe3ae0]{width:100%;height:100%}.groupcall-video-float.not-float .stream-container[data-v-0dfe3ae0],.groupcall-video-float.not-float .stream-container .video[data-v-0dfe3ae0]{height:100%}.float-window-container.not-float[data-v-794f0a9b]{width:100%;height:100%}.float-window-container.float[data-v-794f0a9b]{position:absolute}.float-window-container.float.pc[data-v-794f0a9b]{top:50px;left:50%;transform:translate(-50%)}.float-window-container.float.mobile[data-v-794f0a9b]{top:150px;right:0}.singlecall-media-container[data-v-670a78d8]{width:100%;height:100%;position:absolute;z-index:0}.singlecall-media-container.float[data-v-670a78d8]{position:relative}.singlecall-media-container.pc[data-v-670a78d8]{border-radius:12px;overflow:hidden}.roggle-btn[data-v-670a78d8]{position:absolute;left:100px;z-index:100;top:0}.tk-message{position:fixed;left:50%;transform:translate(-50%);padding:10px;border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:14px;z-index:9999;color:#000;border-color:#e9e9eb;background-color:#f4f4f5}.tk-message .tk-message_icon{margin-right:5px}.tk-message .tk-message_close{cursor:pointer;margin-left:5px}.tk-message--info{color:#909399;border-color:#e9e9eb;background-color:#f4f4f5}.tk-message--success{color:#67c23a;border-color:#e1f3d8;background-color:#f0f9eb}.tk-message--warning{color:#e6a23c;border-color:#faecd8;background-color:#fdf6ec}.tk-message--error{color:#f56c6c;border-color:#fde2e2;background-color:#fef0f0}.tk-grid-item{display:flex;justify-content:center}.tk-grid-item.h5{transition-property:width,height,left,top;transition-duration:.3s;transition-timing-function:ease-in}.tk-justify-start{justify-content:flex-start}.tk-justify-center{justify-content:center}.tk-justify-end{justify-content:flex-end}.tk-justify-space-between{justify-content:space-between}.tk-justify-space-around{justify-content:space-around}.tk-justify-space-evenly{justify-content:space-evenly}.tk-align-center{align-items:center}.tk-align-start{align-items:flex-start}.tk-align-end{align-items:flex-end}.tk-align-stretch{align-items:stretch}.tk-align-baseline{align-items:baseline}.tk-blur{backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}.tk-round{border-radius:20px}.tk-circle{border-radius:100%}.tk-popover{position:relative}.tk-popover .tk-popover_content{display:inline-block;vertical-align:middle;min-width:120px;position:absolute;background:#FFFFFF;border-radius:4px;font-size:14px;box-shadow:0 0 12px #0000001f;overflow-wrap:break-word;box-sizing:border-box;text-align:center}.tk-popover .tk-popover_arrow{position:absolute;transform:translate(-50%);width:0;height:0}.tk-popover .tk-popover_trigger{display:inline-block;position:relative;vertical-align:middle}.device-selector-container[data-v-406bc3d4]{width:180px;display:flex;flex-direction:column;align-items:center;padding:6px;font-weight:500}.device-selector-container .device-item[data-v-406bc3d4]{overflow:hidden;padding:5px 3px;text-align:left;line-height:16px;cursor:pointer}.device-selector-container .device-item[data-v-406bc3d4]:hover{border-radius:5px;background:rgba(255,255,255,.3215686275)}.device-selector-container .device-item.select[data-v-406bc3d4]{background-color:#0f101433;border-radius:3px}.device-selector-container .control-item[data-v-406bc3d4]{width:100%;height:1px;background-color:#fff3}.scroll-container[data-v-406bc3d4]{width:100%;overflow:hidden}.scroll-container .scroll-content[data-v-406bc3d4]{max-height:60px;margin-right:-26px;overflow:hidden auto;padding-right:20px}.btn-content[data-v-24aa342a],.btn-content[data-v-e75a102a],.btn-content[data-v-e1377967],.btn-content[data-v-1a5a5781],.btn-content[data-v-cc016de6],.btn-content[data-v-44a3def7],.btn-content[data-v-df69c038],.btn-content[data-v-f29c2e7a],.btn-content[data-v-f7839a20]{display:flex;flex-direction:column;align-items:center}.button-panel-container[data-v-6582c17d]{position:absolute;z-index:1}.button-panel-container.pc[data-v-6582c17d]{width:60%;height:63px;margin:0 auto;bottom:6%;left:50%;z-index:2;transform:translate(-50%)}.button-panel-container.mobile[data-v-6582c17d]{display:flex;justify-content:center;height:27%;bottom:0;width:100%}.button-panel-container.mobile.h5[data-v-6582c17d]{transition-property:width,height,left,top;transition-duration:.3s;transition-timing-function:ease-in}.button-panel-container.mobile.groupCall.showBackGround[data-v-6582c17d]{background-color:#4f586b}.button-panel-container.mobile .button-group[data-v-6582c17d]{position:absolute;width:72%;top:2vh;height:80%}.button-panel-container.mobile.close[data-v-6582c17d]{height:14%;align-items:center}.button-panel-container.mobile.close .button-group[data-v-6582c17d]{position:absolute;width:72%;right:6.2vw;height:40px;top:auto;bottom:auto}.button-panel-container .button-group[data-v-6582c17d]{position:relative;height:100%}.button-panel-container .toggle-button-container[data-v-6582c17d]{display:flex;align-items:center;position:absolute;left:8.2vw}.button-panel-container .toggle-button-container.h5[data-v-6582c17d]{transition-property:width,height,left,top;transition-duration:.3s;transition-timing-function:ease-in}.button-panel-container.open .toggle-button-container[data-v-6582c17d]{bottom:6vh}.singlecall-container[data-v-317c1d41]{height:100%}.stream-loading-container[data-v-56b8bc56]{width:100%;height:100%;position:absolute;z-index:1;display:flex;align-items:center;justify-content:center}.groupcall-media-container[data-v-0629f0d8]{width:100%;height:100%;position:absolute;z-index:1}.groupcall-media-container.pc[data-v-0629f0d8]{border-radius:12px;overflow:hidden}.groupcall-media-container.pc.two-layout[data-v-0629f0d8]{margin-top:20%}.groupcall-media-container.pc .tk-toggle-window-item--small[data-v-0629f0d8]{top:2%;left:2%;width:22%;height:21%;border-radius:12px;overflow:hidden}.groupcall-media-container.mobile[data-v-0629f0d8]{margin-top:5.5vh}.groupcall-media-container.mobile.float[data-v-0629f0d8]{margin-top:0}.groupcall-media-container.mobile.two-layout[data-v-0629f0d8]{margin-top:15vh}.groupcall-media-container.mobile.two-layout.float[data-v-0629f0d8]{margin-top:0}.dialog[data-v-26735e82]{background:rgba(0,0,0,.3)}.dialog-main[data-v-26735e82]{background:#FFFFFF}.dialog-main-header[data-v-26735e82]{font-weight:500;color:#333}.dialog-main-title[data-v-26735e82]{font-family:PingFangSC-Medium;font-weight:500;color:#333}.dialog-main-back[data-v-26735e82]{background:none}.dialog-main-content[data-v-26735e82]{font-weight:400;color:#333}.btn[data-v-26735e82]{font-weight:400;color:#fff;letter-spacing:0}.btn-cancel[data-v-26735e82]{border:1px solid #dddddd;color:#666}.btn-default[data-v-26735e82]{background:#006EFF;border:1px solid #006EFF}.dialog[data-v-26735e82]{position:absolute;width:100%;height:100%;left:0;top:0;z-index:6;display:flex;justify-content:center;align-items:center}.dialog-main[data-v-26735e82]{min-width:368px;border-radius:10px;padding:20px 30px}.dialog-main-header[data-v-26735e82]{display:flex;justify-content:space-between;align-items:center;font-size:16px;line-height:30px}.dialog-main-title[data-v-26735e82]{font-size:16px;line-height:30px}.dialog-main-content[data-v-26735e82]{font-size:14px}.dialog-main-footer[data-v-26735e82]{display:flex;justify-content:flex-end}.btn[data-v-26735e82]{padding:8px 20px;margin:0 6px;border-radius:4px;border:none;font-size:14px;text-align:center;line-height:20px}.btn[data-v-26735e82]:disabled{opacity:.3}.btn[data-v-26735e82]:last-child{margin-right:0}.dialog-h5[data-v-26735e82]{height:100%;top:0;align-items:inherit}.dialog-h5 .dialog-main[data-v-26735e82]{border-radius:0;padding:0;display:flex;flex-direction:column;overflow:hidden;width:100%;min-height:80px;min-width:120px}.dialog-h5 .dialog-main-content[data-v-26735e82]{flex:1;min-width:0;min-height:0;text-align:center}.dialog-h5 .dialog-main-content-uniapp[data-v-26735e82]{padding:40px 0}.dialog-h5 .dialog-main-footer[data-v-26735e82]{border-top:1px solid #DDDDDD}.dialog-h5 .dialog-main-footer .btn[data-v-26735e82]{flex:1;margin:0;background:none;border-right:1px solid #DDDDDD}.dialog-h5 .dialog-main-footer .btn-default[data-v-26735e82]{color:#ff584c;border:none}.center[data-v-26735e82]{align-items:center;padding:20px;box-sizing:border-box}.icon[data-v-b989a330]{display:inline-flex;justify-content:center;align-items:center;margin:0}.main[data-v-cc0325fc]{background:#FFFFFF;border:1px solid #E0E0E0;box-shadow:0 -4px 12px #0000000f}.main .left[data-v-cc0325fc]{border-right:1px solid #E8E8E9}.main .transfer-header[data-v-cc0325fc]{font-weight:500;color:#000;letter-spacing:0}.main .transfer-header input[data-v-cc0325fc]{background:#FFFFFF;border:1px solid #DEE0E3;font-weight:500;color:#8f959e;letter-spacing:0}.main .transfer-list .transfer-text[data-v-cc0325fc]{font-weight:500;color:#8f959e;letter-spacing:0}.main .transfer-list-item .disabled[data-v-cc0325fc]{background:#eeeeee}.btn[data-v-cc0325fc]{background:#3370FF;border:0 solid #2F80ED;font-weight:400;color:#fff}.btn-cancel[data-v-cc0325fc]{background:#FFFFFF;border:1px solid #DDDDDD;color:#828282}.btn-no[data-v-cc0325fc]{background:#e8e8e9;border:1px solid #DDDDDD;font-weight:400;color:#fff}.transfer-h5-header[data-v-cc0325fc]{background:#FFFFFF}.transfer-h5-header .title[data-v-cc0325fc]{font-family:PingFangSC-Medium;font-weight:500;color:#000;letter-spacing:0}.main[data-v-cc0325fc]{box-sizing:border-box;width:541px;height:390px;display:flex;border-radius:8px;padding:20px 0}.main .right[data-v-cc0325fc]{padding:0 20px;flex:1}.main .right .transfer-list[data-v-cc0325fc]{padding-right:20px}.main .left[data-v-cc0325fc]{flex:1;overflow-y:hidden;display:flex;flex-direction:column}.main .left .transfer-header[data-v-cc0325fc]{padding:0 20px}.main .left .transfer-left-main[data-v-cc0325fc]{flex:1;overflow-y:auto;padding:0 13px}.main .right[data-v-cc0325fc]{display:flex;flex-direction:column;text-align:left}.main .right .transfer-right-footer[data-v-cc0325fc]{align-self:flex-end}.main .right .transfer-right-footer .btn-cancel[data-v-cc0325fc]{margin-right:12px}.main .right .transfer-list[data-v-cc0325fc]{overflow-y:auto}.main .transfer-header[data-v-cc0325fc]{font-size:14px;line-height:14px;padding-bottom:20px}.main .transfer-header input[data-v-cc0325fc]{box-sizing:border-box;width:100%;border-radius:30px;font-size:10px;line-height:14px;padding:9px 12px}.main .transfer-list[data-v-cc0325fc]{flex:1;display:flex;flex-direction:column}.main .transfer-list .transfer-text[data-v-cc0325fc]{font-size:10px;line-height:14px}.main .transfer-list-item[data-v-cc0325fc]{padding:6px 0;display:flex;align-items:center;font-size:14px;text-align:left}.main .transfer-list-item-content[data-v-cc0325fc]{flex:1;display:flex;align-items:center}.main .transfer-list-item .avatar[data-v-cc0325fc]{margin:0 5px 0 8px;border-radius:50%}.main .transfer-list-item .name[data-v-cc0325fc]{width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.avatar[data-v-cc0325fc]{width:36px;height:36px;border-radius:5px;font-size:12px;display:flex;justify-content:center;align-items:center}.btn[data-v-cc0325fc],.btn-no[data-v-cc0325fc]{padding:4px 28px;font-size:12px;line-height:24px;border-radius:4px}.space-between[data-v-cc0325fc]{justify-content:space-between}.select-all[data-v-cc0325fc]{padding-left:8px;font-size:14px}.more[data-v-cc0325fc]{display:flex;justify-content:center;align-items:center;cursor:pointer;font-size:14px}.transfer-h5[data-v-cc0325fc]{width:100vw;height:100vh;display:flex;flex-direction:column}.transfer-h5-header[data-v-cc0325fc]{position:relative;display:flex;justify-content:space-between;align-items:center;font-size:18px;padding:16px 18px}.transfer-h5-header .space[data-v-cc0325fc],.transfer-h5-header .icon[data-v-cc0325fc]{width:18px;height:18px}.transfer-h5 .main[data-v-cc0325fc]{flex-direction:column;width:auto;height:550px;border-radius:0;border:none;box-shadow:none;max-height:calc(100% - 50px);padding:0}.transfer-h5 .main .avatar[data-v-cc0325fc]{border-radius:5px}.transfer-h5 .main .left[data-v-cc0325fc]{padding:0;flex:1;border:none;display:flex;flex-direction:column}.transfer-h5 .main .left .transfer-header[data-v-cc0325fc]{position:sticky;top:0;padding:0 18px}.transfer-h5 .main .left .transfer-header input[data-v-cc0325fc]{border-radius:5px;font-size:14px}.transfer-h5 .main .left-uniapp-input[data-v-cc0325fc]{height:36px}.transfer-h5 .main .right[data-v-cc0325fc]{flex:0;flex-direction:row;align-items:center;box-shadow:inset 0 1px #eee;padding:8px 18px}.transfer-h5 .main .right .transfer-list[data-v-cc0325fc]{flex-direction:row;width:0}.transfer-h5 .main .right .transfer-list-item-content[data-v-cc0325fc]{flex:none}.transfer-h5 .main .right .transfer-right-footer[data-v-cc0325fc]{padding:6px 0;display:flex;align-items:center}.transfer-h5 .main .right .transfer-right-footer .btn[data-v-cc0325fc]{font-size:14px}ul[data-v-cc0325fc],ol[data-v-cc0325fc],li[data-v-cc0325fc]{margin:0;padding:0}.icon-unselected[data-v-cc0325fc]{width:18px;height:18px;background:#FFFFFF;border:1px solid #DDDDDD;border-radius:11px;box-sizing:border-box}.groupcall-container[data-v-aa4e300f]{height:100%}.card[data-v-9982fa76]{box-sizing:border-box;border-radius:4px;border:1px solid #EBEEF5;background-color:#fff;overflow:hidden;color:#303133;transition:.3s;box-shadow:0 2px 12px #0000001a}.card .card-body[data-v-9982fa76]{padding:20px}.card-wrapper[data-v-9982fa76]{display:flex;flex-direction:column;align-items:center;width:500px;position:relative}.card-wrapper .button[data-v-9982fa76]{box-sizing:border-box;background-color:#104ef5;color:#fff;font-size:12px;height:37px;border-radius:4px;padding:10px}.card-wrapper .image-wrapper[data-v-9982fa76]{box-sizing:border-box}.title[data-v-9982fa76]{padding:10px 0;font-size:16px;font-weight:500;line-height:22px}.desc[data-v-9982fa76]{font-size:12px;margin-bottom:10px}.button[data-v-9982fa76]{background-color:#104ef5;color:#fff;font-size:12px;height:37px;border-radius:4px;padding:10px}.allow[data-v-9982fa76]{font-size:12px;color:#666;padding:10px 0 20px}.image[data-v-9982fa76]{width:100%;border-radius:10px}.close[data-v-9982fa76]{position:absolute;z-index:999;display:flex;justify-content:center;align-items:center;font-size:20px;right:20px;cursor:pointer;width:20px;height:20px}.tips[data-v-cd63c32e]{width:100%;height:100%}.card[data-v-cd63c32e]{position:fixed;right:0;bottom:0;box-shadow:0 2px 12px #0000001a;border-radius:4px;border:1px solid #EBEEF5;background-color:#fff;overflow:hidden;color:#303133;transition:.3s}.tag[data-v-cd63c32e]{position:fixed;left:0;top:0;width:320px;text-align:left}.toast-container[data-v-27fc22c5]{position:fixed;display:flex;align-items:center;z-index:1002;justify-content:space-between;left:50%;transform:translate(-50%);padding:15px 15px 15px 20px;background-color:#000;color:#fff;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid}.toast-container .toast-content[data-v-27fc22c5]{margin-right:16px}.toast-container .toast-close-icon[data-v-27fc22c5]{width:16px;line-height:16px;cursor:pointer}.toast-container .toast-close-icon[data-v-27fc22c5]:before{font-style:normal;content:url(data:image/svg+xml;base64,PHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iMTAiIGhlaWdodD0iMTAiPjxwYXRoIGQ9Ik01MTIgNDY2Ljc1MiA4Ni42NTYgNDEuMzQ0YTMyIDMyIDAgMCAwLTQ1LjMxMiA0NS4zMTJMNDY2Ljc1MiA1MTIgNDEuMzQ0IDkzNy4zNDRhMzIgMzIgMCAwIDAgNDUuMzEyIDQ1LjMxMkw1MTIgNTU3LjI0OGw0MjUuMzQ0IDQyNS40MDhhMzIgMzIgMCAwIDAgNDUuMzEyLTQ1LjMxMkw1NTcuMjQ4IDUxMiA5ODIuNjU2IDg2LjY1NmEzMiAzMiAwIDAgMC00NS4zMTItNDUuMzEyTDUxMiA0NjYuNzUyeiIgZmlsbD0iIzcwNzA3MCIvPjwvc3ZnPg==)}.info[data-v-27fc22c5]{border-color:#ebeef5;color:#909399;background-color:#edf2fc}.success[data-v-27fc22c5]{color:#67c23a;background-color:#f0f9eb;border-color:#e1f3d8}.waring[data-v-27fc22c5]{color:#e6a23c;background-color:#fdf6ec;border-color:#faecd8}.error[data-v-27fc22c5]{color:#f56c6c;background-color:#fef0f0;border-color:#fde2e2}.slide-up-enter-active[data-v-27fc22c5],.slide-up-leave-active[data-v-27fc22c5]{transition:all .5s ease-out}.slide-up-enter-from[data-v-27fc22c5]{opacity:0;transform:translate(-50%,20px)}.slide-up-leave-to[data-v-27fc22c5]{opacity:0;transform:translate(-50%,-20px)}.fade-enter-from[data-v-27fc22c5],.fade-leave-to[data-v-27fc22c5]{opacity:0;transform:translate(-50%,-100%)}.TUICallKit-mobile,.TUICallKit-mobile .singCall{width:100%;height:100%}.transition-animation{transform:translateY(-100%);animation:slideInDown .5s ease forwards}@keyframes slideInDown{0%{transform:translateY(-100%)}to{transform:translateY(0)}}.TUICallKit-desktop{margin:0 auto;position:relative;border-radius:inherit;width:100%;height:100%;color:#fff;display:flex;flex-direction:column;justify-content:center;overflow:hidden;z-index:12;border-radius:16px}.TUICallKit-desktop .singCall{width:100%;height:100%}.mobile-audio{background-color:#fff}.miniMized{width:168px!important;height:56px!important;overflow:visible!important}.miniMized-mobile-audio{width:72px;height:72px;position:fixed;top:40px;right:40px}.miniMized-mobile-video{width:40%;height:30%;position:fixed;top:40px;right:40px}.banner-pc{position:relative;cursor:pointer}.banner-pc .top{height:24px;padding-right:10px;border-radius:4px;background:#F4F5F9;display:inline-flex;align-items:center}.banner-pc .top .call-icon{margin:4px 4px 4px 8px}.banner-pc .top .text{font-weight:400;font-size:12px;line-height:16px;color:#666}.banner-pc .content{width:220px;margin-top:8px;padding:10px 18px 6px;box-shadow:0 0 24px #161e2733;background-color:#fff;border-radius:10px;position:absolute;z-index:10;display:flex;display:-webkit-flex;flex-direction:column;align-items:center}.banner-pc .content .content-arrows{width:12px;height:12px;border-radius:2px;background-color:#fff;transform:rotate(45deg);position:absolute;top:-5px;left:80px}.banner-pc .content .avatar-box{display:flex;justify-content:center;flex-wrap:wrap}.banner-pc .content .avatar{margin:6px;display:flex;border-radius:4px}.banner-pc .content .btn{margin:10px 0;width:97px;height:30px;background:#F2F5FC;border-radius:4px;display:flex;justify-content:center;align-items:center;font-size:12px;color:#1c66e5;cursor:pointer}.banner-h5{padding:0 16px;position:relative}.banner-h5 .top{height:36px;background:#FFFFFF;border-radius:4px;display:flex;display:-webkit-flex;justify-content:space-between;align-items:center}.banner-h5 .top .left{display:flex;align-items:center}.banner-h5 .top .left .text{font-weight:400;font-size:12px;color:#666}.banner-h5 .content-box{box-sizing:border-box;width:100%;padding:0 16px 10px;background:#FFFFFF;box-shadow:0 3px 3px 1px #b4b4b440;border-radius:0 0 8px 8px;position:absolute;left:0;z-index:10}.banner-h5 .content-box .content{background:#EEF0F2;border-radius:6px}.banner-h5 .content-box .content .avatar-box{padding:30px 6px;border-bottom:1px solid rgba(112,112,112,.1058823529);display:flex;display:-webkit-flex;justify-content:center;flex-wrap:wrap}.banner-h5 .content-box .content .btn{padding:10px;font-weight:600;font-size:14px;text-align:center;color:#333;cursor:pointer}")),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
import { TUICallEvent as P, TUICallEngine as zo } from "tuicall-engine-webrtc";
import { TUICore as fe, TUIConstants as IA, TUILogin as bo } from "@tencentcloud/tui-core";
import Pt from "@tencentcloud/chat";
import { inject as zA, ref as L, onMounted as yA, onUnmounted as LA, toRefs as G, watch as cA, computed as f, version as ct, defineComponent as z, provide as EA, openBlock as I, createElementBlock as h, normalizeClass as V, unref as n, normalizeStyle as AA, renderSlot as H, createElementVNode as T, createBlock as E, toDisplayString as B, createCommentVNode as w, Fragment as RA, createVNode as S, withCtx as v, createTextVNode as MA, watchEffect as Se, renderList as ue, toRef as ut, resolveComponent as aa, Teleport as Uo, withDirectives as lA, vShow as sA, withModifiers as Le, nextTick as Oo, mergeProps as xt, normalizeProps as Vo, withKeys as Po, render as be, Transition as xo, reactive as Be } from "vue";
var u = /* @__PURE__ */ ((a) => (a.CALL = "call", a.CUSTOM = "custom", a))(u || {}), _ = /* @__PURE__ */ ((a) => (a[a.UNKNOWN = 0] = "UNKNOWN", a[a.AUDIO = 1] = "AUDIO", a[a.VIDEO = 2] = "VIDEO", a))(_ || {}), gA = /* @__PURE__ */ ((a) => (a.UNKNOWN = "unknown", a.CALLEE = "callee", a.CALLER = "caller", a))(gA || {}), x = /* @__PURE__ */ ((a) => (a.IDLE = "idle", a.CALLING = "calling", a.CONNECTED = "connected", a))(x || {}), Ue = /* @__PURE__ */ ((a) => (a.CONTAIN = "contain", a.COVER = "cover", a.FILL = "fill", a))(Ue || {}), Oe = /* @__PURE__ */ ((a) => (a.RESOLUTION_480P = "480p", a.RESOLUTION_720P = "720p", a.RESOLUTION_1080P = "1080p", a))(Oe || {}), oa = /* @__PURE__ */ ((a) => (a.EN = "en", a["ZH-CN"] = "zh-cn", a.JA_JP = "ja_JP", a))(oa || {});
const fA = {
IDLE: "idle",
BE_INVITED: "be-invited",
DIALING_C2C: "dialing-c2c",
DIALING_GROUP: "dialing-group",
CALLING_C2C_AUDIO: "calling-c2c-audio",
CALLING_C2C_VIDEO: "calling-c2c-video",
CALLING_GROUP_AUDIO: "calling-group-audio",
CALLING_GROUP_VIDEO: "calling-group-video"
}, Bo = {
unknown: 0,
audio: 1,
video: 2
/* VIDEO */
};
var ve = /* @__PURE__ */ ((a) => (a.EAR = "ear", a.SPEAKER = "speaker", a))(ve || {}), mA = /* @__PURE__ */ ((a) => (a.MICROPHONE = "microphone", a.CAMERA = "camera", a.SPEAKER = "speaker", a))(mA || {}), ie = /* @__PURE__ */ ((a) => (a[a.FRONT = 0] = "FRONT", a[a.BACK = 1] = "BACK", a))(ie || {}), _A = /* @__PURE__ */ ((a) => (a.Camera = "camera", a.Microphone = "microphone", a.SwitchCamera = "switchCamera", a.InviteUser = "inviteUser", a))(_A || {}), Ce = /* @__PURE__ */ ((a) => (a.Open = "open", a.Close = "close", a))(Ce || {}), qA = /* @__PURE__ */ ((a) => (a.LOCAL = "local", a.REMOTE = "remote", a))(qA || {}), Fe = /* @__PURE__ */ ((a) => (a.LocalInLargeView = "local", a.RemoteInLargeView = "remote", a))(Fe || {}), Me = /* @__PURE__ */ ((a) => (a[a.INVITE = 1] = "INVITE", a[a.CANCEL_INVITE = 2] = "CANCEL_INVITE", a[a.ACCEPT_INVITE = 3] = "ACCEPT_INVITE", a[a.REJECT_INVITE = 4] = "REJECT_INVITE", a[a.INVITE_TIMEOUT = 5] = "INVITE_TIMEOUT", a))(Me || {});
const Bt = {
SWITCH_TO_AUDIO_CALL_FAILED: 60001,
SWITCH_TO_VIDEO_CALL_FAILED: 60002,
MICROPHONE_UNAVAILABLE: 60003,
CAMERA_UNAVAILABLE: 60004,
BAN_DEVICE: 60005,
NOT_SUPPORTED_WEBRTC: 60006,
ERROR_BLACKLIST: 20007
}, Rt = {
SWITCH_TO_AUDIO_CALL_FAILED: "switchToAudioCall-call-failed",
SWITCH_TO_VIDEO_CALL_FAILED: "switchToVideoCall-call-failed",
MICROPHONE_UNAVAILABLE: "microphone-unavailable",
CAMERA_UNAVAILABLE: "camera-unavailable",
BAN_DEVICE: "ban-device",
NOT_SUPPORTED_WEBRTC: "not-supported-webrtc",
ERROR_BLACKLIST: "blacklist-user-tips"
};
var na = /* @__PURE__ */ ((a) => (a[a.NORMAL = 0] = "NORMAL", a[a.RELEASE = 1] = "RELEASE", a[a.WARNING = 2] = "WARNING", a[a.ERROR = 3] = "ERROR", a[a.NONE = 4] = "NONE", a))(na || {});
const Xe = {
CALL_STATUS: "callStatus",
CALL_ROLE: "callRole",
CALL_MEDIA_TYPE: "callMediaType",
LOCAL_USER_INFO: "localUserInfo",
LOCAL_USER_INFO_EXCLUDE_VOLUMN: "localUserInfoExcludeVolume",
REMOTE_USER_INFO_LIST: "remoteUserInfoList",
REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST: "remoteUserInfoExcludeVolumeList",
CALLER_USER_INFO: "callerUserInfo",
IS_GROUP: "isGroup",
CALL_DURATION: "callDuration",
CALL_TIPS: "callTips",
TOAST_INFO: "toastInfo",
IS_MINIMIZED: "isMinimized",
ENABLE_FLOAT_WINDOW: "enableFloatWindow",
BIG_SCREEN_USER_ID: "bigScreenUserId",
LANGUAGE: "language",
IS_CLICKABLE: "isClickable",
DISPLAY_MODE: "displayMode",
VIDEO_RESOLUTION: "videoResolution",
PUSHER: "pusher",
PLAYER: "player",
IS_EAR_PHONE: "isEarPhone",
IS_MUTE_SPEAKER: "isMuteSpeaker",
SHOW_PERMISSION_TIP: "SHOW_PERMISSION_TIP",
NETWORK_STATUS: "NetWorkStatus",
GROUP_ID: "groupID",
ROOM_ID: "roomID",
ROOM_ID_TYPE: "roomIdType",
SHOW_SELECT_USER: "showSelectUser",
IS_SHOW_ENABLE_VIRTUAL_BACKGROUND: "isShowEnableVirtualBackground",
ENABLE_VIRTUAL_BACKGROUND: "enableVirtualBackground",
GROUP_CALL_MEMBERS: "groupCallMembers",
PUSHER_ID: "pusherId"
}, Ro = {
INNER_ATTR_KIT_INFO: "inner_attr_kit_info"
}, Go = {
INITIAL_PUSHER: "initialPusher",
NEW_PUSHER: "newPusher"
}, l = {
PREFIX: "【CallService】",
AUDIO: "audio",
VIDEO: "video",
LOCAL_VIDEO: "localVideo",
ERROR: "error",
TIMEOUT: "timeout",
RAF: "raf",
INTERVAL: "interval",
DEFAULT: "default",
BOOLEAN: "boolean",
STRING: "string",
NUMBER: "number",
OBJECT: "object",
ARRAY: "array",
FUNCTION: "function",
UNDEFINED: "undefined",
UNKNOWN: "unknown",
ALL: "all",
MYSELF: "myself",
DEVICE_LIST: "deviceList",
CAMERA_POSITION: "cameraPosition",
CUSTOM_UI_CONFIG: "customUIConfig",
TRANSLATE: "translate",
...Go,
...Xe,
...Ro
}, ko = "https://web.sdk.qcloud.com/component/TUIKit/assets/call.png", qo = "https://web.sdk.qcloud.com/component/TUIKit/assets/call-video-reverse.svg", Gt = 2147483647, Wo = 3, Xo = 4;
var Ct = /* @__PURE__ */ ((a) => (a.MAC = "mac", a.WIN = "win", a))(Ct || {}), Tt = /* @__PURE__ */ ((a) => (a[a.TUI_CALL_KIT = 14] = "TUI_CALL_KIT", a[a.TIM_CALL_KIT = 15] = "TIM_CALL_KIT", a))(Tt || {}), Lt = /* @__PURE__ */ ((a) => (a[a.NUMBER_ROOM_ID = 1] = "NUMBER_ROOM_ID", a[a.STRING_ROOM_ID = 2] = "STRING_ROOM_ID", a))(Lt || {});
async function Qo(a) {
if (!a)
return !1;
try {
const A = await new Promise((e, t) => {
const o = new XMLHttpRequest();
o.open("HEAD", a, !0), o.onload = () => e(o), o.onerror = () => t(o), o.send();
});
return A.status === 200 && A.getResponseHeader("Content-Type") === "audio/mpeg";
} catch (A) {
return console.warn(A), !1;
}
}
function Ze(a) {
if (typeof a != "object" || a === null)
return a;
let A = Array.isArray(a) ? [] : {};
for (let e in a)
a.hasOwnProperty(e) && (A[e] = Ze(a[e]));
return A;
}
const Fo = {
// 按钮文案
hangup: "挂断",
reject: "拒绝",
accept: "接受",
camera: "摄像头",
microphone: "麦克风",
speaker: "扬声器",
"open camera": "打开摄像头",
"close camera": "关闭摄像头",
"open microphone": "打开麦克风",
"close microphone": "关闭麦克风",
"video-to-audio": "转语音通话",
"virtual-background": "模糊背景",
// 通话结果
"other side reject call": "对方已拒绝",
"reject call": "{{ userList }} 拒绝通话",
cancel: "取消通话",
"other side line busy": "对方忙线",
"in busy": "{{ userList }} 正在忙",
"call timeout": "呼叫超时",
"end call": "{{ userList }} 结束通话",
// 通话提示语
"caller calling message": "等待对方接受邀请",
"callee calling video message": "邀请你视频通话",
"callee calling audio message": "邀请你语音通话",
"no microphone access": "没有麦克风权限",
"no camera access": "没有摄像头权限",
"invite member": "邀请成员",
"Invited group call": "邀请你加入多人通话",
"Those involved": "参与通话的有:",
waiting: "等待接听...",
me: "(我)",
// 弹出层文案
"browser-authorization": "浏览器授权",
"mac-privacy": "系统偏好设置 -> 安全与隐私 -> 隐私",
"win-privacy": "设置 -> 隐私和安全性 -> 应用权限",
"mac-preferences": "打开系统偏好设置",
"win-preferences": "打开系统设置",
"Please enter userID": "请输入 userID",
"View more": "查看更多",
"people selected": "人已选中",
"Select all": "全选",
Cancel: "取消",
Done: "完成",
"exist group call": "当前群组中已经存在群组通话",
// UI3.0 新增
"camera enabled": "摄像头已开",
"camera disabled": "摄像头已关",
"microphone enabled": "麦克风已开",
"microphone disabled": "麦克风已关",
"speaker enabled": "扬声器已开",
"speaker disabled": "扬声器已关",
"open speaker": "开启扬声器",
"close speaker": "关闭扬声器",
"wait to be called": "等待接听",
answered: "已接通",
"people in the call": "人参与通话",
"failed to obtain speakers": "无法获取扬声器",
"you have a new call": "您有一个新的通话",
"switch camera": "翻转",
join: "加入",
"people on the call": "人正在通话",
"Supports a maximum of 9 people for simultaneous calls": "最多支持9人同时通话",
you: "(你)",
"The network is poor during your current call": "当前通话你的网络不佳",
"The other user network is poor during the current call": "当前通话对方网络不佳",
"TUICallKit init is not complete": "TUICallKit 初始化登录未完成,需要在 init 完成后使用此 API",
// combine chat
"Video call": "发起视频通话",
"Voice call": "发起语音通话",
"Call End": "通话结束",
"Switch voice call": "切换语音通话",
"Switch video call": "切换视频通话",
"Call duration": "通话时长",
"Call Cancel": "已取消",
"Other Side Cancel": "对方已取消",
Decline: "已拒绝",
"Other Side Decline": "对方已拒绝",
"No answer": "超时无应答",
"Other Side No Answer": "对方无应答",
Answered: "已接听",
"Other Side Line Busy": "对方忙线中",
"Line Busy": "忙线无应答",
// 待废弃文案
timeout: "{{ userList }} 超时",
"kick out": "被踢",
call: "通话",
"video-call": "视频通话",
"audio-call": "音频通话",
search: "搜索",
"search-result": "搜索结果",
"Wechat scan right QR code": "微信扫右二维码",
"Use-phone-and-computer": "用手机与电脑互打体验视频通话",
"Scan the QR code above": "扫描上方二维码",
"no-user": "未搜索到用户",
"member-not-added": "未添加成员",
"not-login": "未登录",
"login-status-expire": "登录状态已失效,请刷新网页重试",
"experience-multi-call": "体验多人通话请下载全功能demo:",
"not-support-multi-call": "多人通话接口未开放",
"input-phone-userID": "请输入手机号/用户ID",
userID: "用户ID",
"already-enter": "已经进入当前通话",
"image-resolution": "分辨率",
"default-image-resolution": "默认分辨率",
"invited-person": "添加成员",
"be-rejected": "对方已拒绝,",
"be-no-response": "对方无应答,",
"be-line-busy": "对方忙线中,",
"be-canceled": "对方已取消",
"voice-call-end": "语音通话结束",
"video-call-end": "视频通话结束",
"method-call-failed": "同步操作失败",
"failed-to-obtain-permission": "权限获取失败",
"environment-detection-failed": "环境检测失败",
"switchToAudioCall-call-failed": "切语音调用失败",
"switchToVideoCall-call-failed": "切视频调用失败",
"microphone-unavailable": "没有可用的麦克风设备",
"camera-unavailable": "没有可用的摄像头设备",
"ban-device": "用户禁止使用设备",
"not-supported-webrtc": "当前环境不支持 WebRTC",
"blacklist-user-tips": "发起通话失败,被对方拉入黑名单,禁止发起!",
"is-already-calling": "TUICallKit 已在通话状态",
"need-init": "TUICallKit 发起通话前需保证 TUICallKitServer.init() 方法执行成功",
"can't call yourself": "不能呼叫自己",
// eslint-disable-line
"accept-error": "接通失败",
"accept-device-error": "接通失败,通话设备获取失败",
"call-error": "发起通话失败"
}, Zo = {
// 按钮文案
hangup: "Hang up",
reject: "Decline",
accept: "Accept",
camera: "Camera",
microphone: "Microphone",
speaker: "speaker",
"open camera": "Open Camera",
"close camera": "Close Camera",
"open microphone": "Open Microphone",
"close microphone": "Close Microphone",
"video-to-audio": "Switch to audio",
"virtual-background": "Blur Background",
// 通话结果
"other side reject call": "other side reject call",
"reject call": "{{ userList }} Reject Call",
cancel: "Cancel Call",
"other side line busy": "other side line busy",
"in busy": "{{ userList }} in busy",
"call timeout": "call timeout",
"no response from the other side": "no response from the other side",
"end call": "{{ userList }} end call",
// 通话提示语
"caller calling message": "Awaiting response",
"callee calling video message": "invites you to a video call",
"callee calling audio message": "invites you to a voice call",
"no microphone access": "no microphone access",
"no camera access": "no camera access",
"invite member": "Invite Member",
"Invited group call": "invites you to a group call",
waiting: "Calling...",
me: "(me)",
// 弹出层文案
"browser-authorization": "Browser authorization",
"mac-privacy": "System Preferences -> Security and Privacy -> Privacy",
"win-privacy": "Setting -> Privacy and Security -> App permissions",
"mac-preferences": "Open System Preferences",
"win-preferences": "Open Setting",
"Please enter userID": "Please enter userID",
"View more": "View more",
"people selected": "people selected",
"Select all": "Select all",
Cancel: "Cancel",
Done: "Done",
"exist group call": "A group call already exists in the current group",
// UI3.0 新增
"camera enabled": "Camera On",
"camera disabled": "Camera Off",
"microphone enabled": "Unmuted",
"microphone disabled": "Muted",
"speaker enabled": "Speaker On",
"speaker disabled": "Speaker Off",
"open speaker": "Turn on speaker",
"close speaker": "Turn off speaker",
"wait to be called": "Waiting",
answered: "Connected",
"people in the call": " other(s) in the call",
"failed to obtain speakers": "failed to obtain speakers",
"you have a new call": "You have a new call",
"switch camera": "Switch",
join: "Join",
"people on the call": "people on the call",
"Supports a maximum of 9 people for simultaneous calls": "Supports a maximum of 9 people for simultaneous calls",
you: "(you)",
"The network is poor during your current call": "The network is poor during your current call",
"The other user network is poor during the current call": "The other party's network is poor during the current call",
"TUICallKit init is not complete": "TUICallKit init is not complete. You need to use this API after the init API is finished.",
// combine chat
"Video call": "Video call",
"Voice call": "Voice call",
"Call End": "Call End",
"Switch voice call": "Switch voice call",
"Switch video call": "Switch video call",
"Call duration": "Duration",
"Call Cancel": "Canceled",
"Other Side Cancel": "Call canceled by caller",
Decline: "Declined",
"Other Side Decline": "Call declined by user",
"No answer": "Call not answered",
"Other Side No Answer": "Call wasn't answered",
Answered: "Answered",
"Other Side Line Busy": "Line busy",
"Line Busy": "Line busy. Call not received.",
// 待废弃文案
"Those involved": "Those involved in the call are",
call: "call",
"video-call": "video call",
"audio-call": "audio call",
search: "search",
"search-result": "search result",
"no-user": "user not found",
"member-not-added": "member not added",
"input-phone-userID": "phone number or userID",
"not-login": "not logged in",
"login-status-expire": "login status is invalid, please refresh the page and try again",
"experience-multi-call": "experience multi-person calls, please download the full-featured demo: ",
"not-support-multi-call": "multi-person call interface is not open",
userID: "userID",
"already-enter": "entered the call",
"camera-opened": "Camera on",
"camera-closed": "Camera off",
"microphone-opened": "Mic on",
"microphone-closed": "Mic off",
timeout: "{{ userList }} timeout",
"kick out": "kick out",
"image-resolution": "Resolution",
"default-image-resolution": "Default",
"invited-person": "Invite",
"be-rejected": "Call declined, ",
"be-no-response": "No response, ",
"be-line-busy": "Line busy, ",
"be-canceled": "The call is canceled, ",
"voice-call-end": "Voice call ended",
"video-call-end": "Video call ended",
"method-call-failed": "Failed to sync the operation",
"failed-to-obtain-permission": "Failed to obtain permissions",
"environment-detection-failed": "Failed to check the environment",
"switchToAudioCall-call-failed": "switch to audio call method failed",
"switchToVideoCall-call-failed": "switch to video call method failed",
"microphone-unavailable": "No mic found",
"camera-unavailable": "No camera found",
"ban-device": "Device access denied",
"not-supported-webrtc": "Your current environment does not support WebRTC",
"blacklist-user-tips": "The identifier is in blacklist. Failed to send this message!",
"is-already-calling": "TUICallKit is already on a call",
"need-init": "Before initiating a call with TUICallKit, ensure that the TUICallKitServer.init() method has executed successfully. ",
"can't call yourself": "Can't call yourself",
// eslint-disable-line
"Use-phone-and-computer": "Use your mobile phone and computer to experience video calls",
"Wechat scan right QR code": "Wechat scan right QR code",
"Scan the QR code above": "Scan the QR code above",
"accept-error": "Accept failed",
"accept-device-error": "Accept failed, unable to auth calling device",
"call-error": "Start call failed"
}, Yo = {
// 按钮文案
hangup: "通話終了",
reject: "拒否",
accept: "応答",
camera: "カメラ",
microphone: "マイク",
speaker: "スピーカー",
"virtual-background": "ボケ背景",
// 通话结果
"other side reject call": "通話が拒否されました",
"reject call": "{{ userList }} 通話拒否",
cancel: "通話をキャンセル",
"other side line busy": "相手が通話中です",
"in busy": "{{ userList }} 通話中",
"call timeout": "呼び出しタイムアウト",
"end call": "{{ userList }} 通話終了",
// 通话提示语
"caller calling message": "応答を待っています",
"callee calling video message": "ビデオ通話に招待されました",
"callee calling audio message": "音声通話に招待されました",
"no microphone access": "マイクにアクセスできません",
"no camera access": "カメラにアクセスできません",
"invite member": "メンバーを招待する",
// 弹出层文案
"browser-authorization": "ブラウザ認証",
"mac-privacy": "システム環境設定 -> セキュリティとプライバシー ->プライバシー",
"win-privacy": "設定 -> セキュリティとプライバシー ->アプリのアクセス許可",
"mac-preferences": "システム環境設定を開く",
"win-preferences": "システム設定を開く",
"Please enter userID": "ユーザーIDを入力してください",
"View more": "もっと見る",
"people selected": "人が選択されました",
"Select all": "すべて選択",
Cancel: "キャンセル",
Done: "完了",
"exist group call": "現在のグループには既にグループ通話が存在しています",
// combine chat
"Video call": "ビデオ通話を開始",
"Voice call": "音声通話を開始",
"Call End": "通話終了",
"Switch audio call": "音声通話に切り替える",
"Switch video call": "ビデオ通話に切り替える",
"Call duration": "通話時間",
"Call Cancel": "通話をキャンセルする",
"Other Side Cancel": "相手がキャンセルしました",
Decline: "通話を拒否する",
"Other Side Decline": "相手が拒否しました",
"No answer": "無応答",
"Other Side No Answer": "相手からの返答はありません",
Answered: "応答しました",
"Other Side Line Busy": "相手は現在忙しくて対応できません",
"Line Busy": "忙しいので応答できません",
// UI3.0文案
"open camera": "オープンカメラ",
"close camera": "カメラを閉じる",
"open microphone": "オープンマイク",
"close microphone": "マイクを閉じる",
"camera enabled": "カメラオン",
"camera disabled": "カメラオフ",
"microphone enabled": "マイクオン",
"microphone disabled": "マイクオフ",
"speaker enabled": "スピーカーオン",
"speaker disabled": "スピーカーオフ",
"open speaker": "スピーカーをオンにする",
"close speaker": "スピーカーの電源を切ります",
"wait to be called": "待機中",
answered: "接続済み",
"people in the call": "通話に参加している人たち",
"failed to obtain speakers": "スピーカーが見つかりません",
"you have a new call": "新しい通話があります",
"switch camera": "切り替え",
join: "参加する",
"people on the call": "人が通話中です",
"Supports a maximum of 9 people for simultaneous calls": "最大で9人まで同時通話が可能です",
you: "(あなた)",
"The network is poor during your current call": "現在の通話で、あなたのネットワークは不良です",
"The other user network is poor during the current call": "現在の通話で、相手側のネットワークが不良です",
"TUICallKit init is not complete": "TUICallKitの初期化ログインが完了していません。init が完了した後にこのAPIを使用する必要があります。",
// 待废弃文案
timeout: "{{ userList }} タイムアウト",
"kick out": "キックアウトされました",
"Invited group call": "グループ通話に招待されました。",
"Those involved": "参加者:",
call: "通話",
"video-call": "ビデオ通話",
"audio-call": "音声通話",
search: "検索",
"search-result": "検索結果",
"Wechat scan right QR code": "WeChatで右側にあるQRコードを読み取ります。",
"Use-phone-and-computer": "携帯電話とコンピュータを使用してビデオ通話を体験してください",
"Scan the QR code above": "上のQRコードを読み取ります。",
"no-user": "ユーザーが見つかりませんでした",
"member-not-added": "メンバーが追加されていません",
"not-login": "ログインしていません",
"login-status-expire": "ログインの有効期限が過ぎています。ページを更新してもう一度お試しください",
"experience-multi-call": "複数人で同時に音声通話できるグループ通話機能を体験するには、全機能のデモをダウンロードしてください",
"not-support-multi-call": "グループ通話インターフェイスが開いていません",
"input-phone-userID": "携帯電話番号/ユーザーIDを入力してください",
userID: "ユーザーID",
"already-enter": "すでに通話に参加しています",
waiting: "応答を待っています...",
"camera-opened": "カメラがオンになっています",
"camera-closed": "カメラがオフになっています",
"microphone-opened": "マイクがオンになっています",
"microphone-closed": "マイクがオフになっています",
"image-resolution": "解像度",
"default-image-resolution": "デフォルト解像度",
"invited-person": "メンバーを招待",
"video-to-audio": "音声通話に切り替えます",
me: "(自分)",
"be-rejected": "通話が拒否されました, ",
"be-no-response": "応答なし, ",
"be-line-busy": "相手が通話中です, ",
"be-canceled": "相手が通話をキャンセルしました",
"voice-call-end": "音声通話が終了しました",
"video-call-end": "ビデオ通話が終了しました",
"method-call-failed": "操作の同期に失敗しました",
"failed-to-obtain-permission": "権限の取得に失敗しました",
"environment-detection-failed": "環境の検出に失敗しました",
"switchToAudioCall-call-failed": "音声通話に切り替えることはできません",
"switchToVideoCall-call-failed": "ビデオ通話に切り替えることはできません",
"microphone-unavailable": "使用できるマイクがありません",
"camera-unavailable": "使用できるカメラがありません",
"ban-device": "デバイスへのアクセスが拒否されました",
"not-supported-webrtc": "現在の環境はWebRTCをサポートしていません",
"blacklist-user-tips": "ユーザーはブラックリストに登録され、通話が開始できませんでした",
"is-already-calling": "TUICallKit はすでに通話中です",
"need-init": "TUICallKitで通話を開始する前に、TUICallKitServer.init() メソッドが正常に実行されたことを確認してください。",
"can't call yourself": "自分に電話をかけることができません",
"accept-error": "接続できませんでした",
"accept-device-error": "接続できませんでした。発信側デバイスを認証できません",
"call-error": "通話が開始できませんでした"
}, Ye = typeof wx < "u" && typeof wx.getSystemInfoSync == "function" && !!wx.getSystemInfoSync().fontSizeSetting, ia = typeof uni < "u" && typeof uni > "u", kt = Ye || ia, la = typeof uni < "u", sa = function() {
return (typeof uni < "u" || typeof window < "u") && !kt;
}(), Ho = function() {
return Ye ? wx : la ? uni : window;
}(), $A = sa && window && window.navigator && window.navigator.userAgent || "", Ko = /Android/i.test($A), Jo = /(?:Windows Phone)/.test($A), _o = /(?:SymbianOS)/.test($A), $o = /iPad/i.test($A) || /iPhone/i.test($A) || /iPod/i.test($A), ra = Ko || Jo || _o || $o, vt = sa && !ra, An = vt && $A.includes("Windows NT"), en = vt && $A.includes("Mac");
let ca = class De {
constructor() {
this.global = Ho, this.isPC = !1, this.isH5 = !1, this.isWeChat = !1, this.isApp = !1, this.isUniPlatform = !1, this.isOfficial = !1, this.isWIN = !1, this.isMAC = !1, this.initEnv();
}
/**
* 获取 TUIGlobal 实例
* @returns {TUIGlobal}
*/
static getInstance() {
return De.instance || (De.instance = new De()), De.instance;
}
initEnv() {
this.isPC = vt, this.isH5 = ra, this.isWeChat = Ye, this.isApp = ia && !Ye, this.isUniPlatform = la, this.isWIN = An, this.isMAC = en;
}
initOfficial(A) {
this.isOfficial = A === 1400187352 || A === 1400188366;
}
};
const et = function(a) {
return typeof a === l.UNDEFINED;
}, Dt = function(a) {
if (typeof a !== l.OBJECT || a === null)
return !1;
const A = Object.getPrototypeOf(a);
if (A === null)
return !0;
let e = A;
for (; Object.getPrototypeOf(e) !== null; )
e = Object.getPrototypeOf(e);
return A === e;
}, ua = function(a) {
return typeof Array.isArray === l.FUNCTION ? Array.isArray(a) : Object.prototype.toString.call(a).match(/^\[object (.*)\]$/)[1].toLowerCase() === l.ARRAY;
}, He = function(a) {
return typeof a === l.STRING;
}, tn = function(a) {
return typeof a === l.BOOLEAN;
}, da = function(a) {
return (
// eslint-disable-next-line
a !== null && (typeof a === l.NUMBER && !isNaN(a - 0) || typeof a === l.OBJECT && a.constructor === Number)
);
};
function Ia(a) {
const A = Math.floor(a / 3600), e = Math.floor(a % 3600 / 60), t = Math.floor(a % 60);
let o = A > 9 ? `${A}` : `0${A}`;
return o += e > 9 ? `:${e}` : `:0${e}`, o += t > 9 ? `:${t}` : `:0${t}`, o;
}
function an(a) {
if (typeof a === l.STRING)
try {
return !!JSON.parse(a);
} catch (A) {
return console.debug(A), !1;
}
return !1;
}
const Re = function(a) {
return !a || !an(a) ? a : JSON.parse(a);
};
function qt(a) {
return (a == null ? void 0 : a.message.indexOf("is ongoing, please avoid repeated calls")) !== -1;
}
function on(a) {
const { message: A } = a;
return A.indexOf("NotAllowedError: Permission denied") !== -1;
}
function dt() {
return Date.now();
}
const Qe = function(a) {
return typeof a === l.FUNCTION;
}, nn = () => {
if (ca.getInstance().isWeChat)
return "zh-cn";
const a = ((navigator == null ? void 0 : navigator.language) || (navigator == null ? void 0 : navigator.userLanguage) || "").substr(0, 2);
let A = "en";
switch (a) {
case "zh":
A = "zh-cn";
break;
case "ja":
A = "ja_JP";
break;
default:
A = "en";
}
return A;
};
function ln(a) {
}
const sn = function(a) {
return Object.prototype.toString.call(a).match(/^\[object (.*)\]$/)[1].toLowerCase();
};
function rn(a, A, e) {
if (!a.hasOwnProperty(A))
return a;
const t = {};
return Object.keys(a).forEach((o) => {
o === A ? t[e] = a[o] : t[o] = a[o];
}), t;
}
function cn(a, A) {
return a.replace(/{{\s*(\w+)(\s*,\s*[^}]+)?\s*}}/g, (e, t) => {
const o = t.trim();
return A[o] !== void 0 ? String(A[o]) : e;
});
}
const DA = {
OTHER_SIDE: "other side",
CANCEL: "cancel",
OTHER_SIDE_REJECT_CALL: "other side reject call",
REJECT_CALL: "reject call",
OTHER_SIDE_LINE_BUSY: "other side line busy",
IN_BUSY: "in busy",
CALL_TIMEOUT: "call timeout",
END_CALL: "end call",
TIMEOUT: "timeout",
KICK_OUT: "kick out",
CALLER_CALLING_MSG: "caller calling message",
CALLER_GROUP_CALLING_MSG: "wait to be called",
CALLEE_CALLING_VIDEO_MSG: "callee calling video message",
CALLEE_CALLING_AUDIO_MSG: "callee calling audio message",
NO_MICROPHONE_DEVICE_PERMISSION: "no microphone access",
NO_CAMERA_DEVICE_PERMISSION: "no camera access",
EXIST_GROUP_CALL: "exist group call",
LOCAL_NETWORK_IS_POOR: "The network is poor during your current call",
REMOTE_NETWORK_IS_POOR: "The other user network is poor during the current call"
}, ge = {
"zh-cn": Fo,
en: Zo,
ja_JP: Yo
};
function de(a) {
var t, o;
const A = M.getData(u.CALL, l.LANGUAGE);
let e = "";
if (He(a))
e = ((t = ge == null ? void 0 : ge[A]) == null ? void 0 : t[a]) || "";
else if (Dt(a)) {
const { key: i, options: s } = a;
e = ((o = ge == null ? void 0 : ge[A]) == null ? void 0 : o[i]) || "", e = cn(e, s);
}
return e;
}
const un = "data:audio/mpeg;base64,SUQzAwAAAAAAGFRYWFgAAAAOAAAAVFhYWABpc29taXNvMv/zNGQAAqwAvnihCAADQAF4CUAQAFYAg3Lh8u+XUD5///wx//wQOAhKAgb/////xOoH4g8Hz4Pq8RoAbdTgMsMt9hcb990EP//zNGQQBPDjEgDItAAFWcIoAYoQAN9P/03QQ//umn//91SXL5uXP+pf8WYTvzgJPAQ+p/7f///1//6f///WH///F4BtJhNFkP/zNGQGA/jjNADHiAAEQDJcAYkQAGWrn6vw6ljfPtj/////////9Pv9sL/mL/QezSepgwrimv07//////y3u602OiyhOYb+LP/zNGQIBKTBKADoCACDoCZMAckAAKHKCUIAFsqGZXtSZ/////////Sn/Vy3nVUOJBqSX2UAkQxBddzv//////yq3lcgaTmTQ//zNGQHA9SrJgA8AliD4C5IAApYAKh3FKlMunKHm8H/2//77vkdqB2xfsXaHiDKBGtFKqONF3/////Z9VXClT5ND+syHkjBq//zNGQLBITJIAA8AmQEiDI4AAjSAGa1Vffm3ff/1/0//11tvZpAaIw3dBiIrjJgHQrGVWmdBU1f/////oDqEKrV1OpBUTjQtv/zNGQHAsjDKAAwAl4D0Co8AAmCBHIQNtld6fm0+/VigZzuMnGZlkAMLMJFv/////33UIWeFQkKsaceBsangecHzYXKI//////zNGQUA4QjKAA3CAID8CpEABMCBPfuStx4FQVHYMgKcO6jIJh//////9uIlspQkGQ2YyZscAV83Bv/////ncL6BEiWHyA2K//zNEQbAogfJgAx5hAEwDJcCAsEBtICgF3/////WJaIuuqMCCVGucgkrtwiwBO//////pW4YFRWQhaRRhZZnVwGhf////+ocv/zNEQmApgVJAANjwAFkC5YCApeAolD4kQb+EQJYNKwLWGmc6sqMBwJvf////6tDEOWDgFJk1VywKMGoM2f////+N1JmgJuPv/zNGQuA4AbJAAl5hIDwC48AAIGBEho7wTL5b6kSO7IUAA5uDABYNNjGDBSJEN//////xtQsszVy27IcWBbQkLgzv7YmZYW///zNGQ2AqzFNAgcA1+D8CZIAAhMAP/3/rozCAsBjIqCY/DBWMfQZp1f/////0F6phXSNisgAJjo6icT2vpvM/Vf9v///97eu//z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", Wt = "data:audio/mpeg;base64,SUQzAwAAAAABRlRSQ0sAAAACAAAAMVRDT04AAAAIAAAAQW1iaWVudFRYWFgAAAAQAAAAVFhYWAAwLjcwNzk2NTE0VFBFMQAAAB0AAABTdGV3YXJ0IFJ1c3NlbGwgLSBzY3J1c3MuY29tVElUMgAAAF0AAAH//lcAZQBzAHQAZQByAG4AIABFAGwAZQBjAHQAcgBpAGMAIAAcIFAAcgBpAG4AYwBlAHMAcwAdICAAVABlAGwAZQBwAGgAbwBuAGUAIABSAGkAbgBnAGkAbgBnAP/7FGQADTBFAK+IAAAACaAWiAADAQFwAPgUMQAAMoAfgoAwAEA6X+g1/1hwyAyAQAaw4Cf9BmQqCAYnMuflPiB2QghiQMRxz0cP/24n/er0FPOAHij9xBP2Az+lXwQDH//7FGQIgACfEEWGFEAAFSIY4MaIAAHwCzK4sYAAP4Llgx4wAKjIIeADwJx5QLnmifiA/4sOL5s56H/yaSAeAAAC/NmidyyNfLoZGKFC6VsI6/C3q8VK/2aer/0VAeugPv/7FGQCD9BnAcsHMAAMDeBZYeeAAQIcEyYMBEBAOAFlBPGEAIuS6U2f9STsCqASaN4WWuo6v+vv2bhUFaqDsVRIPBRjW3os7ffyf0II5lgCdLjSmsZLd1f/WhtkyFDMy//7FGQDD/CCAsmDAggADAA5YDAhAYH0CSQEGGAAMQEkwPMAAAc1ziCL+lyV7/oAm2QbVdv/9TiwyWoCiBa0hNxxTAKLX30/xT/ULhQZg4g2eJx2zmP11SJ0vD6cBmEAkf/7FGQEj9BwBEoDBhgADSA5UTBDAIHECSwIDAAwL4FlAPGIBG2cAK1oIAKYxBknAVO31aelNIOiqKZZEAMeun/MrZyKCaNQlhxVVt8Xf2f1qg5L+hHHsRptuR8r9IfWUv/7FEQHj/BhA0mDAxAADaA5QGBAAAHECyYMJEAAMQDlgYEEBCAgUcxAZTojt2uoJCw4M2LJnhO52j+jd9YtV1gE2dmiabP/1rTVM7HNBhgVO7f9H/1iAFJuRul0V/3f/P/7FGQLD9BbAcsDAhAIDAA5YTAgAQE8CS4MCEAwLYElRPKIAKVmtL2jwiqnd/66UATijC5YvNM/3dFaBZHFVggC2xdr/91JwAABqhZH//wwVVJwAprJhkhSrv+j6CgBQv/7FGQSjdBdA8sCARAYC8ApkiBDAQFUBywsBEAgMIDlyGAIBMk/v3/5NaSazNUCDAAABdTSaS1K/0egIAAGM0iCxH//+0iDBAAiQFiRiv/7eyvSBgSO4gdUYAGW3/VIKv/7FGQZCfBmAcwx4RgIDYA5YjwjAQFUBzMhCAAgMQGlAJCIBAbgXWYSoqL/rICKJYLnmn9f/W3bpHqAAai9P9PETWGgMnAuHWm9//0+iiPuetYtH/+cSwAhMJf/Z9RI3v/7FEQeD/BNAMmB4hgACyApcDwiAQFYDSgEhEAwKAElgMGIBou6QwAeNPnn/9sm40JJRQkcSt0ftcb76mAAAZBOXRpX/VSXDgAkAEDBYAT+ln6KADCY1NX/jGMaxYEGEv/7FGQnCdBFAUuB4gAMC6ApYRhgAQFEBS7DBEAgK4FlQGEIBBnD7kD//9A+QAED4JUPCa9NP7ces0BZsDiNeFgVR/Z9//1lAABjMBN//9XvHKSNAyOMIKduj4buXRgAAv/7FGQwDfBhAUuQYRgICmBJdQhDAQFUCTBEiGAgKoFlQCCIBinAVFs//29lTIAAJAuYXWb/7nKRPrYDN0405b/7u1RAgDICN/q//5jgAEGj/+kqqljugEAMGwulDyt6Nv/7FGQ4DfBrA0mJhhgADQBJMCBjAAF4BzBDBCAgKgClgDCMBjE+OCgN9AwKPcZTd6f+aTYAEAARoYT6hZUBAAiAAAHlRA8HP+7b5sARmmKe3T/u56zqDFdOIeQUQsn3P//7FGQ9jZBbAkwR4wAIDSAZciQhAQEsBy4mAEAgJIDmWGCABL3L63gCwVO//10pGNeloAACIcDMEXL/6zoo5JwYPNkgZHUnxcKo9hD/QEdadZlm098cWb+kMwCpfd/22v/7FGRGDTBUAU0IQwgMDEAJMAxCAAGACSwIDCAgJgCpEICEBhc71MQsegBFIAAAABPzH4p+NaWqNu+scRkgMNi759IxnoGei6sHQygB4qOSMqYn+GRGoSHADAWG//9qwv/7FGRNhdByAUxJ4xgICsApYCAgAYGgCSgHjCAAKwBmSFCEBOFl6QQoPAYEw1suf/9Ok4BYCwWWHElM6e7t7aNCoDnVgl53//XUywUoFVamEAJ4MWQD1X68tl6WL6+uCP/7FGRTC5B3AcuR4QgIDMBZQDxhAQFkByynhAAwM4Cl2GCABBMAAAabFqd/0snOT2rCAQgACYUxJ///cv/SLQqBijkFqHf9PdrUAkwaJhlPZvTpFCsXZsGkgQwvavMhMv/7FGRXC9CGAcuwwQgIDkBZQCQiAQHUDSoHmEAgLYAmCCEIBKIXIKeLMb+7V//UgDYMCcoJXu9/1IKpIEAUBkuc//p/Ji+qIAACnfGRyR17v/zRtgAGwi2Dcn/9dn0oAf/7FGRYhdBcAUoBIRAIDUBpMCRCAAH4CTDHjAAgPQDlSMEAAAtYTFEsEBiP/999CRgEsIvlD3X9nY9S6ggAABWgJSBRn/v/tMCxAAACu2nVL7H/7AeeAxcsW/1DBV0z1f/7FGRahXByAcwxgQAIDKAphhhgAQGABywHhEAwKIClQGGIBOx1n/qJtcccNC4zQqP9dQdkFA4wYX819X/+soAIhAACIOC6v9Xy7P/QLxTiWaF3NrZvTYv/8UCsAG2hP//7FGRgDdBTAUoB4RgIDIA5QCwiAAFwAywmDEAgMYDlyCCIBP+1MbSrmAIeoljkK/6v0vSTaoQPtY9Hr/+SFAYBFQEdTjX/cr9H348oBChaf//W4Ny0YgQMgAAnQAIMff/7FGRmjZBkAUuR4ggIC4BJYTBDAQGMDygGDGAgL4Cl2GGABP/2PqTpBeQw9HijHCunvkiH5YOaHxW/+27/aqAKFBJhgw91ztuQL/TVFQ8hTBwCEbfd/7nJJAACTPjQAf/7FERsD/BtAcsRIhAIDWApcjRjAQGoFyQGAGQAKIElQPEIAPTq6dAVI2qEZhDDRIdKhd932TG2xBQBGAdVOj/zZ2meKgwUEww45IoGjtfd//rAIAGaZGmFsT79ILMBVP/7FGRwj5BjA0qCAxgIDYAZhiRBAQG0CSgHiAAALgDl2MCABA0V+j7l3upxYQ8kEC4NkfX6P/o9ddWAcgAAFLwVhv9HYs0arsAFAABM6zoIP///d/WBtELApXqNen1VJf/7FGR1DdBRAsuBgwgMCuA5YDxBAYGgCSxGCCAAKoDlyGEMBGwAyjDAe7U3/1JXR1epB1H9AqMWLEqKzI3/SHODwB0Du9b9vdFlB14EHDGGumu9vSgpkReUYWEDO101/v/7FGR8hdBwAcwxIRAICsBJUDxgAQFwCywHjCAwM4ClhGAABCrWISjbXQQZDTzapj2q/m1aAckGYGQdJkmLetUl+1msE4xA2D5Iy+n//+sdsMhMg5xqav/V9SVDlRpEhP/7FGSBj9BgAkoBZhgIDkA5QjwjAAG8BygHiAAALwClyGCIBHg8PNRzrF7fl+owA9psY6WaQG/+v0fvlxM2skIGOixVAp77v/SA58IzT/X/3/VQIuIMVFLW//9DmFwsGP/7FGSFj9BqA0qAxhAACiBJQBjDAAGECSwEjEAwMoDlBJEEAFH2sV/V/uEowJCvU4gLAT/ocj+gDzgVwAf2vxluBIpVCmZABgSgZSjiZpnV18PIABlULhYs0f/9O0cGNv/7FGSLAVBuAkuxgxAIDWA5hiwhAQFoBywEiEAwNYDlRIEAAJQTFhA1xx+lyUeg+pxfd1oT1hsuarK/AgbaOUszMMte/JzhFQNn27CgsAwyJhmN0h0ICcVOD14r+pxSif/7FGSPD/BlAkoDAxgAC4BJQBhgAQGcCygMBEAgLwFlQPGEBFWPj1k3gAIZJfRC/YwwfJmeQYVj4x9zOQNIv/mK+PFQKiMa1t/Fn1un2/cWveqKv3O+GcMUT/23UCARav/7FGSUj/ByAcoDAggADoBZMEBBAAFoCSwHiAAgNQIlAPCMBP5V4PRpBYjQs1Zl3XM+9BuJrq92No35KkZGbUZsyUvIcMj0B8AACrI1ltA7d/71bpEPaEJWUrd9yi5gyv/7FGSXj/BoAcqDCQAIDgA5UTxCAAGkDSgHhEAAJwElAMGIACU2L1cKv1xzp/aI5oTy9pd10HcZPjBHtAg8IZ36uf1/+DxQpbzI4bG9dntawgFhcY2troflWY8ZMRPOmf/7FGScifBWAcsB4RgMCsAZUCwiAYFoByyniGAgLYElQMEEBMolllTRur4JmjZcpUnVG2uDKZSAB+1ZxWsfSPU1oDCS/NNt39CIJQmrT77/5xwwJnO2BgIMBSwADzm9Tf/7FGSkD9BzA0qB4xgAC8ApYSQjAAJ4BS4MBEAARoLlwLCMAGKAVEkh/nMaz6iF9f/ZTEfxOaY2qiompWokIBa+JncUEBwid6CYgPENEZv+E2+C6YPgS0BEAPqZNlK6QP/7FGSiAABfAk2FJAAIDUAJoKGAAAQ4lVYYU4AAYhKpAwQgAP5t7f/ni34hf4wJmYlqiAdtgAA/u9OIkS0SWH0RCABCWxSlM/+Fff//N4YZWW/VVTUSwHGM//0MB4m////7FGSWAAEQJFYGIGAAH6SKhcEIAERYjWgYhAAAgxJrAw5wAM03RBEik95zIQZxelVe2PsFyYpF+aXidQ6lQM7B8ziH6bqb1EVV8RGFR4N/N8VkR2B6Zn031PaNmYuyef/7FGRxAREfHljnLUACHuO6zOOcAAOUdZfigFZwUo6qrNAeyL4n6GEqVg8PJGk4FTMleniINmZnawAAM9iYXAcKyku5yVfN0N/Ce7ppm//GvBP8PIOhAB/9XNNm1k0AIP/7FGRVAAEcHeT9JEAMGcQqgKUoAEP8jWoYcoAAeZGrgw5wAYR/VW/6lQEObr6/s/oFnahKFTM0cTDyjDuPREYXA28iMWMtZmZtuNS+v//8CIbwMAIwQaB6LrfqjUFChv/7FGQ1ARD1HeP/GKAMIEOq7OQcAAPkeZPgGOE4b47qUNAqwIGxt9X1DGQ+n50JwfH2E9AbbU7YP0AHUSEUBEkXuayOioi/4J+npt/0CD5VP/6z4KUpv/+ojkNP//1BeP/7FGQWAADjHeDlCEAMEoO6sKacAEP0kWoYcoAIVhDsQwpQAWLHsf5x9BSXQuBhLPbjKES4fwMRQb9z7asiBvwAUCLlEkCv/wicg8QH//TQdlz/l5DfDPqQXvG9/26Thf/7FGQCA7B2HdmHNKAADIAbVOAIAQIUR26ABKKAL48rYNAWyJo83/6gKP///8KQD/gQAVFzeJk/7P/kwP/xdhRMTrUACv00/4g//yAYf/0BQbq//pt9g1oUDAfr3yAL///7FGQEAAB8EdotFKAADOPK8KKIAAJoU3AYUoAANQPtAwQgAP+AxFdH6KK//4gAd///B////BD9H016OkYCe3SqJGCu+B0/r73zwNf/hHDKd+qi7+p+cxcl//jwEfT/+P/7FGQDi/BqHdqHHOAADUO7EOKUAAE8RXEAAOEQMo6qwKAeyEBJ///+Vb//ANW//92///8KH9SigwdO3T/8VO/9f/6COA4f//8PfsIGaP/0NARX//1CMt///8uB+YAAa//7FEQJAABpHdkFKOAADSAbuKAIAILIjWoYcoAIYRGtAwRwARUWcSd/h7/6f/wsYeWC/366YgCYLj3T/22c32bxMM/7WRrB/v1ylhwEMScPdPX1ajOS+LG8Tjn/8riDhP/7FGQCgABnCV4GFEAADYEbUMEIAAGwd2gcoQAAM47rg5RwAJveumxH+WvR/+DdnBer034t8WXfvR//GQZmt//0Fif///BP/+hwIa///Nf///wqXf/1IwFkb//wi3/1Pf/7FEQGAABjEVkFKKAADSOrIKOcAAKAUWQYooAAUpGswwRwAF//QA7//6iH/7//E1CP66uDpoqjowL/6/GGwzFQx/T3Vp/9XC73/yvuUKYdmmN6evmjf5L5ZKr/8hlL/f/7FGQCgAB5FF2GBKAADYOrUMEIAAGod2YcVoAANI6rg4pQAEZrqH8GxT/UqjT/+aDlf/6dvj/r/4+rR//UH//+wTMuo///86//9QGR//+wCCxv//+MCD//BP//oAIP///7FGQFAABgEdsNFKAAC2I68KOcAAMggWoYVQAAP46tAwQgAMzq//QwCv//4WM/+a0//YWHBbCL/5Hi/IAIkheLBSvsvr6F98kyv/4Zg7A3/0+pcfN//8bL5ar/+8wV/v/7FGQCgACDFF0GFKAADkQLYMCIAAGod2occoAANg7rw4pQAKbXi7oTBez1IPl9X/4G2b//1b7/r6/a/Gy//6HAX//+gDAv///nHf/xoBf//hF////ILP0V//lQuP//qP/7FGQDj/BVHVmBQC2QC6O6wDQHsgGEd2gUI4AAMA7sAopQAE8l+F//2DK3//y4f+Bj5j/+oX//8FpP///x0n//GAf//8Kf///xIcrp/ZHCA4SBM2nH8U7C55TDl+3X6P/7FGQKAADZI1uGFOAAEoRrMMKUAAGQd24cUQAANQ7sQ44gAHOZwyYabiX/9COkKb/T6rj9/09fUt+LGTgn/8YALf/+g43///kFf/zgX///UK////hxPTX/+4Sz//+sR//7FGQEA7BbHdmBoC2QDSEL3gADCQGgAXyUIQAAMw7rwpRwAK/hAeAAAAdAAAAAHQz///6wB/xxxyrjsayv6H/+r/+aBD//+Nm///8QulX+1VhmOIUu/+2UD0jR2CVfp//7FGQIgADVI1uGCOACD+RrYMCIAAGcd2ocE4AAMw7sQ4RQAGP+f8eIEjMMke//iRoP//tvp+v/Unyv4pqf/5n//84CQx///0FRv/+K///C3///6gKLdKr//EJ//9QHx//7FGQED/BSHdkBQBWQC4PKwCgHsgFYR2wUI4AANA7sAopQAD5hv/6Br//+SDvyge2n/+gP//8ISf/w9t//oDv//8K///8ggL6a+nTBTVf043E0UOgZIIdw1v/9FHfE3//7FGQLAADO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";
class dn {
constructor() {
this._bellContext = null, this._isMuteBell = !1, this._calleeBellFilePath = Wt, this._callRole = gA.UNKNOWN, this._callStatus = x.IDLE, this._bellContext = new Audio(), this._bellContext.loop = !0;
}
setBellSrc() {
try {
let A = un;
this._callRole === gA.CALLEE && (A = this._calleeBellFilePath || Wt), this._bellContext.src = A;
} catch (A) {
console.warn(`${l.PREFIX}Failed to setBellSrc, ${A}`);
}
}
setBellProperties(A) {
this._callRole = A.callRole || this._callRole, this._callStatus = A.callStatus || this._callStatus, this._calleeBellFilePath = A.calleeBellFilePath || this._calleeBellFilePath, this._isMuteBell = et(A.isMuteBell) ? this._isMuteBell : A.isMuteBell;
}
async play() {
try {
if (this._callStatus !== x.CALLING)
return;
this.setBellSrc(), this._callRole === gA.CALLEE && !this._isMuteBell && await this._bellContext.play(), this._callRole === gA.CALLER && await this._bellContext.play();
} catch (A) {
console.warn(`${l.PREFIX}Failed to play audio file, ${A}`);
}
}
async stop() {
try {
await this._bellContext.pause();
} catch (A) {
console.warn(`${l.PREFIX}Failed to stop audio file, ${A}`);
}
}
async setBellMute(A) {
this._callStatus !== x.CALLING && this._callRole !== gA.CALLEE || (A ? await this.stop() : await this.play());
}
destroy() {
try {
this._isMuteBell = !1, this._calleeBellFilePath = "", this._callRole = gA.UNKNOWN, this._callStatus = x.IDLE, this._bellContext.pause(), this._bellContext = null;
} catch (A) {
console.warn(`${l.PREFIX}Failed to destroy, ${A}`);
}
}
}
function NA() {
return function(a, A, e) {
const t = e.value, o = /* @__PURE__ */ new Set();
return e.value = async function(...i) {
var s, c;
if (o.has(this)) {
console.warn(`${l.PREFIX}previous ${A}() is ongoing, please avoid repeated calls`), (c = (s = this == null ? void 0 : this.getTUICallEngineInstance()) == null ? void 0 : s.reportLog) == null || c.call(s, {
name: "TUICallKit.avoidRepeatedCall.fail",
data: { name: A },
error: `previous ${A}() is ongoing`
});
return;
}
try {
o.add(this);
const r = await t.apply(this, i);
return o.delete(this), r;
} catch (r) {
throw o.delete(this), r;
}
}, e;
};
}
const me = l.PREFIX + "API";
function bA(a) {
return function(A, e, t) {
let o = t.value;
return t.value = function(...i) {
return In.call(this, a, i, e), o.apply(this, i);
}, t;
};
}
function In(a, A, e) {
try {
if (A[0].SDKAppID || (a = rn(a, "SDKAppID", "sdkAppID")), ua(a))
for (let t = 0; t < a.length; t++)
Xt.call(this, {
...a[t],
value: A[t],
name: e
});
else
for (const t in a)
a.hasOwnProperty(t) && Xt.call(this, {
...a[t],
value: A[0][t],
name: e,
key: t
});
} catch (t) {
throw console.error(t), t;
}
}
function Xt({ required: a, rules: A, range: e, value: t, allowEmpty: o, name: i, key: s }) {
if (et(t)) {
if (a)
throw new Error(`${me}<${i}>: ${s} is required.`);
return;
}
const c = A.some((d) => d === sn(t));
let r = "";
if (!c) {
for (let d = 0; d < A.length; d++) {
let g = A[d];
g = g.replace(g[0], g[0].toUpperCase()), r += `${g}/`;
}
throw r = r.substring(0, r.length - 1), new Error(`${me}<${i}>: ${s} must be ${r}, current ${s} is ${typeof t}.`);
}
if (o === !1 && He(t) && t.trim() === "")
throw new Error(`${me}<${i}>: ${s} is blank.`);
if (ua(e) && e && e.indexOf(t) === -1)
throw new Error(`${me}<${i}>: ${s} error, only be ${e}, current ${s} is ${t}.`);
if (He(e) && e.indexOf("~") !== -1) {
const d = e.split("~");
if (t < +d[0] || t > +d[1] || da(t) && Number.isNaN(t))
throw new Error(`${me}<${i}>: ${s} error, only be ${e}, current ${s} is ${t}.`);
}
}
const UA = {
init: {
SDKAppID: {
required: !0,
rules: [l.NUMBER],
allowEmpty: !1
},
userID: {
required: !0,
rules: [l.STRING],
allowEmpty: !1
},
userSig: {
required: !0,
rules: [l.STRING],
allowEmpty: !1
},
tim: {
required: !1,
rules: [l.OBJECT]
}
},
call: {
userID: {
required: !0,
rules: [l.STRING],
allowEmpty: !1
},
type: {
required: !0,
rules: [l.NUMBER],
range: [1, 2],
allowEmpty: !1
},
roomID: {
required: !1,
rules: [l.NUMBER],
// 仅支持数字房间号, 后续会支持字符串房间号
range: `0~${Gt}`,
allowEmpty: !1
},
strRoomID: {
required: !1,
rules: [l.STRING],
allowEmpty: !0
},
userData: {
required: !1,
rules: [l.STRING],
allowEmpty: !1
},
timeout: {
required: !1,
rules: [l.NUMBER],
allowEmpty: !1
}
},
groupCall: {
userIDList: {
required: !0,
rules: [l.ARRAY],
allowEmpty: !1
},
type: {
required: !0,
rules: [l.NUMBER],
range: [1, 2],
allowEmpty: !1
},
groupID: {
required: !0,
rules: [l.STRING],
allowEmpty: !1
},
roomID: {
required: !1,
rules: [l.NUMBER],
// 仅支持数字房间号, 后续会支持字符串房间号
range: `0~${Gt}`,
allowEmpty: !1
},
strRoomID: {
required: !1,
rules: [l.STRING],
allowEmpty: !0
},
timeout: {
required: !1,
rules: [l.NUMBER],
allowEmpty: !1
},
userData: {
required: !1,
rules: [l.STRING],
allowEmpty: !1
},
offlinePushInfo: {
required: !1,
rules: [l.OBJECT],
allowEmpty: !1
}
},
joinInGroupCall: {
type: {
required: !0,
rules: [l.NUMBER],
range: [1, 2],
allowEmpty: !1
},
groupID: {
required: !0,
rules: [l.STRING],
allowEmpty: !1
},
roomID: {
required: !0,
rules: [l.NUMBER],
allowEmpty: !1
},
strRoomID: {
required: !1,
rules: [l.STRING],
allowEmpty: !0
}
},
inviteUser: {
userIDList: {
required: !0,
rules: [l.ARRAY],
allowEmpty: !1
}
},
setSelfInfo: {
nickName: {
required: !1,
rules: [l.STRING],
allowEmpty: !1
},
avatar: {
required: !1,
rules: [l.STRING],
allowEmpty: !1
}
},
enableFloatWindow: [
{
key: "enable",
required: !1,
rules: [l.BOOLEAN],
allowEmpty: !1
}
],
enableAIVoice: [
{
key: "enable",
required: !0,
rules: [l.BOOLEAN],
allowEmpty: !1
}
],
enableMuteMode: [
{
key: "enable",
required: !0,
rules: [l.BOOLEAN],
allowEmpty: !1
}
],
setCallingBell: [
{
key: "filePath",
required: !1,
rules: [l.STRING],
allowEmpty: !0
}
],
setLanguage: [
{
key: "language",
required: !0,
rules: [l.STRING],
allowEmpty: !1
}
],
setVideoDisplayMode: [
{
key: "displayMode",
required: !0,
rules: [l.STRING],
range: [Ue.CONTAIN, Ue.COVER, Ue.FILL],
allowEmpty: !1
}
],
setVideoResolution: [
{
key: "resolution",
required: !0,
rules: [l.STRING],
range: [Oe.RESOLUTION_1080P, Oe.RESOLUTION_480P, Oe.RESOLUTION_720P],
allowEmpty: !1
}
]
};
function tt(a) {
return function(A, e, t) {
let o = t.value;
return t.value = function(...i) {
return gn.call(this, a, i, e), o.apply(this, i);
}, t;
};
}
function gn(a) {
if (a != null && a.engineInstance && !this._tuiCallEngine) {
const A = `${l.PREFIX} ${de("TUICallKit init is not complete")}`;
throw console.error(A), A;
}
}
class Mn {
constructor() {
this.defaultStore = {
callStatus: x.IDLE,
callRole: gA.UNKNOWN,
callMediaType: _.UNKNOWN,
localUserInfo: { userId: "" },
localUserInfoExcludeVolume: { userId: "" },
remoteUserInfoList: [],
remoteUserInfoExcludeVolumeList: [],
callerUserInfo: { userId: "" },
isGroup: !1,
callDuration: "00:00:00",
// 通话时长
callTips: "",
// 通话提示的信息. 例如: '等待谁接听', 'xxx 拒绝通话', 'xxx 挂断通话'
toastInfo: { text: "" },
// 远端用户挂断、拒绝、超时、忙线等的 toast 提示信息
isMinimized: !1,
// 用来记录当前是否悬浮窗模式
enableFloatWindow: !1,
// 开启/关闭悬浮窗功能设置为false通话界面左上角的悬浮窗按钮会隐藏
bigScreenUserId: "",
// 当前大屏幕显示的 userID 用户
language: nn(),
// en, zh-cn
isClickable: !1,
// 是否可点击, 用于按钮增加 loading 效果,不可点击
deviceList: { cameraList: [], microphoneList: [], currentCamera: {}, currentMicrophone: {} },
showPermissionTip: !1,
netWorkQualityList: [],
// 显示网络状态差的提示
isMuteSpeaker: !1,
groupID: "",
roomID: 0,
roomIdType: 0,
cameraPosition: ie.FRONT,
// 前置或后置值为front, back
groupCallMembers: [],
// chat 群会话在的通话中的成员
// TUICallKit 组件上的属性
displayMode: Ue.COVER,
// 设置预览远端的画面显示模式
videoResolution: Oe.RESOLUTION_480P,
showSelectUser: !1,
// 小程序相关属性
pusher: {},
player: [],
isEarPhone: !1,
// 是否是听筒, 默认: false
pusherId: l.INITIAL_PUSHER,
// 重新渲染 live-Pusher 的标识位
// 是否开启虚拟背景, 目前仅 web 支持
isShowEnableVirtualBackground: !1,
// 是否显示虚拟背景图标, 默认: false
enableVirtualBackground: !1,
// 是否开启虚拟背景, 默认: false
// customUIConfig
customUIConfig: {
button: {},
viewBackground: {},
layoutMode: Fe.RemoteInLargeView
},
// translate function
translate: de
}, this.store = Ze(this.defaultStore), this.prevStore = Ze(this.defaultStore);
}
update(A, e) {
switch (A) {
case l.CALL_TIPS:
const t = this.getData(A);
this.prevStore[A] = t;
default:
this.store[A] = e;
}
}
getPrevData(A) {
return A ? this.prevStore[A] : this.prevStore;
}
getData(A) {
return A ? this.store[A] : this.store;
}
// reset call store
reset(A = []) {
A.length === 0 && (A = Object.keys(this.store));
const e = A.reduce((t, o) => ({ ...t, [o]: this.defaultStore[o] }), {});
this.store = {
...this.defaultStore,
...this.store,
...e
};
}
}
let at = class we {
constructor() {
this.timerId = -1, this.storeMap = {
[u.CALL]: new Mn()
}, this.task = {};
}
/**
* 获取 TUIStore 实例
* @returns {TUIStore}
*/
static getInstance() {
return we.instance || (we.instance = new we()), we.instance;
}
/**
* UI 组件注册监听回调
* @param {StoreName} storeName store 名称
* @param {IOptions} options 监听信息
* @param {Object} params 扩展参数
* @param {String} params.notifyRangeWhenWatch 注册时监听时的通知范围, 'all' - 通知所有注册该 key 的监听; 'myself' - 通知本次注册该 key 的监听; 默认不通知
*/
watch(A, e, t) {
this.task[A] || (this.task[A] = {});
const o = this.task[A];
Object.keys(e).forEach((i) => {
const s = e[i];
o[i] || (o[i] = /* @__PURE__ */ new Map()), o[i].set(s, 1);
const { notifyRangeWhenWatch: c } = t || {};
if (c === l.ALL && this.notify(A, i), c === l.MYSELF) {
const r = this.getData(A, i);
s.call(this, r);
}
});
}
/**
* UI 取消组件监听回调
* @param {StoreName} storeName store 名称
* @param {IOptions} options 监听信息,包含需要取消的回掉等
*/
unwatch(A, e) {
if (!this.task[A])
return;
const t = this.task[A];
Object.keys(e).forEach((o) => {
t[o].delete(e[o]);
});
}
/**
* 通用 store 数据更新messageList 的变更需要单独处理
* @param {StoreName} storeName store 名称
* @param {string} key 变更的 key
* @param {unknown} data 变更的数据
*/
update(A, e, t) {
var o;
(He(t) || da(t) || tn(t)) && this.storeMap[A].store[e] === t || ((o = this.storeMap[A]) == null || o.update(e, t), this.notify(A, e));
}
/**
* 获取 Store 的上一个状态值
* @param {StoreName} storeName store 名称
* @param {string} key 待获取的 key
* @returns {Any}
*/
getPrevData(A, e) {
var t;
return (t = this.storeMap[A]) == null ? void 0 : t.getPrevData(e);
}
/**
* 获取 Store 数据
* @param {StoreName} storeName store 名称
* @param {string} key 待获取的 key
* @returns {Any}
*/
getData(A, e) {
var t;
return (t = this.storeMap[A]) == null ? void 0 : t.getData(e);
}
/**
* UI 组件注册监听回调
* @param {StoreName} storeName store 名称
* @param {string} key 变更的 key
*/
notify(A, e) {
if (!this.task[A])
return;
const t = this.task[A];
if (t[e]) {
const o = t[e], i = this.getData(A, e);
for (const [s] of o.entries())
s.call(this, i);
}
}
reset(A, e = [], t = !1) {
if (A in this.storeMap) {
const o = this.storeMap[A];
e.length === 0 && (e = Object.keys(o == null ? void 0 : o.store)), o.reset(e), t && e.forEach((i) => {
this.notify(A, i);
});
}
}
// 批量修改多个 key-value
updateStore(A, e) {
const t = e || u.CALL;
Object.keys(A).forEach((o) => {
this.update(t, o, A[o]);
});
}
};
const eA = at.getInstance();
function ht(a, A) {
const e = {
userId: a,
nick: "",
avatar: "",
remark: "",
displayUserInfo: "",
isAudioAvailable: !1,
isVideoAvailable: !1,
isEnter: !1,
domId: A || a
};
return A ? e : { ...e, isEnter: !1 };
}
async function pn(a, A) {
var t, o, i, s, c;
let e = ht(a, l.LOCAL_VIDEO);
try {
if (!A)
return e;
const r = await A.getMyProfile(), d = eA == null ? void 0 : eA.getData(u.CALL, l.LOCAL_USER_INFO);
return (r == null ? void 0 : r.code) === 0 && (e = {
...e,
...d,
userId: (t = r == null ? void 0 : r.data) == null ? void 0 : t.userID,
nick: (o = r == null ? void 0 : r.data) == null ? void 0 : o.nick,
avatar: (i = r == null ? void 0 : r.data) == null ? void 0 : i.avatar,
displayUserInfo: ((s = r == null ? void 0 : r.data) == null ? void 0 : s.nick) || ((c = r == null ? void 0 : r.data) == null ? void 0 : c.userID)
}), e;
} catch (r) {
return console.error(`${l.PREFIX}getMyProfile failed, error: ${r}.`), e;
}
}
async function Ve(a, A) {
let e = a.map((t) => ht(t));
try {
if (!A)
return e;
const t = await A.getFriendProfile({ userIDList: a });
if (t.code === 0) {
const { friendList: o = [], failureUserIDList: i = [] } = t.data;
let s = i.map((g) => g.userID);
if (i.length > 0) {
const g = await A.getUserProfile({ userIDList: i.map((N) => N.userID) });
(g == null ? void 0 : g.code) === 0 && (s = (g == null ? void 0 : g.data) || []);
}
const c = eA == null ? void 0 : eA.getData(u.CALL, l.REMOTE_USER_INFO_LIST), r = o.map((g) => g.userID), d = s.map((g) => g.userID);
e = a.map((g) => {
var q, b, Q, R, Z, K, dA;
const N = ht(g), C = r.indexOf(g), p = d.indexOf(g);
let y = "", m = "", D = "", j = "";
C !== -1 && (y = ((q = o[C]) == null ? void 0 : q.remark) || "", m = ((Q = (b = o[C]) == null ? void 0 : b.profile) == null ? void 0 : Q.nick) || "", D = y || m || N.userId || "", j = ((Z = (R = o[C]) == null ? void 0 : R.profile) == null ? void 0 : Z.avatar) || ""), p !== -1 && (m = ((K = s[p]) == null ? void 0 : K.nick) || "", D = m || N.userId || "", j = ((dA = s[p]) == null ? void 0 : dA.avatar) || "");
const k = c.find((vA) => vA.userId === g) || {};
return { ...N, ...k, remark: y, nick: m, displayUserInfo: D, avatar: j };
});
}
return e;
} catch (t) {
return console.error(`${l.PREFIX}getRemoteUserProfile failed, error: ${t}.`), e;
}
}
function Ge() {
const a = eA.getData(u.CALL, l.CALL_STATUS);
if (a === x.IDLE)
return fA.IDLE;
const A = eA.getData(u.CALL, l.IS_GROUP);
if (a === x.CALLING)
return A ? fA.DIALING_GROUP : fA.DIALING_C2C;
const e = eA.getData(u.CALL, l.CALL_MEDIA_TYPE);
return A ? e === _.AUDIO ? fA.CALLING_GROUP_AUDIO : fA.CALLING_GROUP_VIDEO : e === _.AUDIO ? fA.CALLING_C2C_AUDIO : fA.CALLING_C2C_VIDEO;
}
async function Nn(a, A, e, t) {
let o = [];
try {
const i = await A.getGroupMemberList({ groupID: a, count: e, offset: t });
if (i.code === 0)
return i.data.memberList || o;
} catch (i) {
return console.error(`${l.PREFIX}getGroupMember failed, error: ${i}.`), o;
}
}
async function Cn(a, A) {
let e = {};
try {
return (await A.getGroupProfile({ groupID: a })).data.group || e;
} catch (t) {
return console.warn(`${l.PREFIX}getGroupProfile failed, error: ${t}.`), e;
}
}
function ga(a, A) {
a === 0 && A ? (eA.update(u.CALL, l.ROOM_ID, A), eA.update(u.CALL, l.ROOM_ID_TYPE, Lt.STRING_ROOM_ID)) : (eA.update(u.CALL, l.ROOM_ID, a), eA.update(u.CALL, l.ROOM_ID_TYPE, Lt.NUMBER_ROOM_ID));
}
function PA(a) {
return a || {};
}
function It(a) {
if (a.length === 0)
return;
let A = eA.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
a.forEach((e) => {
A = A.filter((t) => t.userId !== e);
}), eA.update(u.CALL, l.REMOTE_USER_INFO_LIST, A), eA.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, A);
}
function gt(a) {
a == null || a.getDeviceList("speaker").then((e) => {
const t = eA.getData(u.CALL, l.DEVICE_LIST), o = (e == null ? void 0 : e[0]) || {};
eA.update(
u.CALL,
l.DEVICE_LIST,
{ ...t, speakerList: e, currentSpeaker: o }
);
}).catch((e) => {
console.error(`${l.PREFIX}updateSpeakerList failed, error: ${JSON.stringify(e)}.`);
}), eA.getData(u.CALL, l.CALL_MEDIA_TYPE) === _.VIDEO && (a == null || a.getDeviceList("camera").then((e) => {
const t = eA.getData(u.CALL, l.DEVICE_LIST), o = (e == null ? void 0 : e[0]) || {};
eA.update(
u.CALL,
l.DEVICE_LIST,
{ ...t, cameraList: e, currentCamera: o }
);
}).catch((e) => {
console.error(`${l.PREFIX}updateCameraList failed, error: ${e}.`);
})), a == null || a.getDeviceList("microphones").then((e) => {
const t = eA.getData(u.CALL, l.DEVICE_LIST), o = (e == null ? void 0 : e[0]) || {};
eA.update(
u.CALL,
l.DEVICE_LIST,
{ ...t, microphoneList: e, currentMicrophone: o }
);
}).catch((e) => {
console.error(`${l.PREFIX}updateMicrophoneList failed, error: ${e}.`);
});
}
function Mt(a, A, e) {
let t = "";
if (on(a)) {
A === _.AUDIO && (t = DA.NO_MICROPHONE_DEVICE_PERMISSION), A === _.VIDEO && (t = DA.NO_CAMERA_DEVICE_PERMISSION);
const o = e == null ? void 0 : e.getDevicePermission();
o != null && o.audio || eA.update(u.CALL, l.SHOW_PERMISSION_TIP, !0), t && eA.update(u.CALL, l.TOAST_INFO, { content: t, type: l.ERROR }), console.error(`${l.PREFIX}call failed, error: ${a.message}.`);
}
}
function ne(a, A) {
let e = eA.getData(u.CALL, l.LOCAL_USER_INFO);
A === l.AUDIO && (e = { ...e, isAudioAvailable: a }), A === l.VIDEO && (e = { ...e, isVideoAvailable: a }), eA.update(u.CALL, l.LOCAL_USER_INFO, e), eA.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, e);
}
class Ke {
static generateTaskID() {
return this.currentTaskID++;
}
/**
*
* @param {string} taskName 'interval' 'timeout'
* @param {function} callback
* @param {object} options include:
* @param {number} options.delay millisecond
* @param {number} options.count 定时器回调执行次数0 无限次 or n次
* @param {boolean} options.backgroundTask 在页面静默后是否继续执行定时器
*/
static run(A = l.TIMEOUT, e, t) {
A === l.INTERVAL ? t = { delay: 2e3, count: 0, backgroundTask: !0, ...t } : t = { delay: 2e3, count: 0, backgroundTask: !0, ...t }, Dt(e) && (t = { ...t, ...e }), Qe(A) && (e = A, A = l.TIMEOUT);
const o = {
taskID: this.generateTaskID(),
loopCount: 0,
intervalID: null,
timeoutID: null,
taskName: A,
callback: e,
...t
};
return this.taskMap.set(o.taskID, o), A === l.INTERNAL ? this.interval(o) : this.timeout(o), o.taskID;
}
/**
* 定时循环执行回调函数
* 可以指定循环的时间间隔
* 可以指定循环次数
* @param {object} taskItem
* @param {function} callback
* @param {*} delay
* @param {*} count
* @returns ID
*/
static interval(A) {
const e = () => {
A.callback(), A.loopCount += 1, this.isBreakLoop(A);
};
return A.intervalID = setInterval(e, A.delay);
}
/**
* 延迟执行回调
* count = 0,循环
* count = n, 执行n次
* @param {object} taskItem
*
*/
static timeout(A) {
const e = () => {
if (A.callback(), A.loopCount += 1, !this.isBreakLoop(A))
return A.timeoutID = setTimeout(e, A.delay);
};
return A.timeoutID = setTimeout(e, A.delay);
}
static hasTask(A) {
return this.taskMap.has(A);
}
static clearTask(A) {
if (!this.taskMap.has(A))
return !0;
const { intervalID: e, timeoutID: t, onVisibilitychange: o } = this.taskMap.get(A);
return e && clearInterval(e), t && clearTimeout(t), o && document.removeEventListener("visibilitychange", o), this.taskMap.delete(A), !0;
}
/**
* 1. 如果已移除出定时队列,退出当前任务
* 2. 如果当前任务已满足次数限制,则退出当前任务
* @param {object} taskItem
* @returns
*/
static isBreakLoop(A) {
return this.taskMap.has(A.taskID) ? A.count !== 0 && A.loopCount >= A.count ? (this.clearTask(A.taskID), !0) : !1 : !0;
}
}
Ke.taskMap = /* @__PURE__ */ new Map();
Ke.currentTaskID = 1;
const Ln = function(a) {
if (a === null || typeof a > "u")
return !0;
if (typeof a == "boolean")
return !1;
if (typeof a == "number")
return a === 0;
if (typeof a == "string" || typeof a == "function" || Array.isArray(a))
return a.length === 0;
if (a instanceof Error)
return a.message === "";
if (Dt(a)) {
for (const A in a)
if (Object.prototype.hasOwnProperty.call(a, A))
return !1;
return !0;
}
return !1;
}, pt = "_local_user_id";
class re {
constructor() {
this._viewConfig = {
viewBackground: {
local: {},
remote: {}
}
}, this._isSetViewBackgroundConfig = { remote: !1, local: !1 }, this._tuiCallEngine = null, this._tuiStore = null;
}
static getInstance() {
return re.instance || (re.instance = new re()), re.instance;
}
_updateViewBackground() {
var t, o, i;
const A = (t = this._tuiStore) == null ? void 0 : t.getData(u.CALL, l.CUSTOM_UI_CONFIG), { userId: e } = (o = this._tuiStore) == null ? void 0 : o.getData(u.CALL, l.LOCAL_USER_INFO);
Object.keys(this._viewConfig.viewBackground.remote).includes(e) && delete this._viewConfig.viewBackground.remote[e], (i = this._tuiStore) == null || i.update(
u.CALL,
l.CUSTOM_UI_CONFIG,
{
...A,
viewBackground: {
...this._viewConfig.viewBackground.remote,
...this._viewConfig.viewBackground.local
}
}
);
}
setEngineInstance(A) {
this._tuiCallEngine = A;
}
setTUIStore(A) {
this._tuiStore = A;
}
updateViewBackgroundUserId(A) {
var e, t;
if (A === "local") {
const { userId: o } = (e = this._tuiStore) == null ? void 0 : e.getData(u.CALL, l.LOCAL_USER_INFO);
if (Object.keys(this._viewConfig.viewBackground.remote).includes(o) && (delete this._viewConfig.viewBackground.remote[o], this._updateViewBackground()), !this._isSetViewBackgroundConfig.local)
return;
const i = this._viewConfig.viewBackground.local, s = i[o] || i[pt];
i[o] = i[pt], this._viewConfig.viewBackground.local = { [o]: s }, this._updateViewBackground();
} else {
let o = this._viewConfig.viewBackground.remote;
this._isSetViewBackgroundConfig.remote && Object.keys(o).includes("*") && (((t = this._tuiStore) == null ? void 0 : t.getData(u.CALL, l.REMOTE_USER_INFO_LIST)).map((c) => c.userId).forEach((c) => {
Object.keys(o).includes(c) || (o[c] = o["*"]);
}), this._viewConfig.viewBackground.remote = o, this._updateViewBackground());
}
}
hideFeatureButton(A) {
var t, o, i, s, c;
(o = (t = this._tuiCallEngine) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.hideFeatureButton.start",
data: { buttonName: A }
});
const e = (i = this._tuiStore) == null ? void 0 : i.getData(u.CALL, l.CUSTOM_UI_CONFIG);
(c = this._tuiStore) == null || c.update(
u.CALL,
l.CUSTOM_UI_CONFIG,
{
...e,
button: {
...e.button,
[A]: { ...((s = e.button) == null ? void 0 : s[A]) || {}, show: !1 }
}
}
);
}
setLocalViewBackgroundImage(A) {
var t, o, i;
(o = (t = this._tuiCallEngine) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.setLocalViewBackgroundImage.start",
data: { url: A }
}), this._isSetViewBackgroundConfig.local = !0;
let { userId: e } = (i = this._tuiStore) == null ? void 0 : i.getData(u.CALL, l.LOCAL_USER_INFO);
Ln(e) && (e = pt), this._viewConfig.viewBackground.local = { [e]: A }, this._updateViewBackground();
}
setRemoteViewBackgroundImage(A, e) {
var t, o;
(o = (t = this._tuiCallEngine) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.setRemoteViewBackgroundImage.start",
data: { userId: A, url: e }
}), this._isSetViewBackgroundConfig.remote = !0, A === "*" && (this._viewConfig.viewBackground.remote = {}), this._viewConfig.viewBackground.remote[A] = e, this._updateViewBackground();
}
setLayoutMode(A) {
var t, o;
(o = (t = this._tuiCallEngine) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.setLayoutMode.start",
data: { layoutMode: A }
});
const e = this._tuiStore.getData(u.CALL, l.CUSTOM_UI_CONFIG);
this._tuiStore.update(
u.CALL,
l.CUSTOM_UI_CONFIG,
{
...e,
layoutMode: A
}
);
}
setCameraDefaultState(A) {
var t, o;
(o = (t = this._tuiCallEngine) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.setCameraDefaultState.start",
data: { isOpen: A }
});
const e = Ze(this._tuiStore.getData(u.CALL, l.CUSTOM_UI_CONFIG));
Object.keys(e.button).includes(_A.Camera) || (e.button[_A.Camera] = {}), e.button[_A.Camera].state = A ? Ce.Open : Ce.Close, this._tuiStore.update(u.CALL, l.CUSTOM_UI_CONFIG, e);
}
}
const ke = at.getInstance(), xA = {
audioCall: () => "Voice call",
videoCall: () => "Video call",
switchToAudio: () => "Switch audio call",
switchToVideo: () => "Switch video call",
hangup: ({ callDuration: a }) => `${de("Call duration")}${a}`
};
class Ne {
constructor(A) {
var e, t, o;
this._callService = A.callService, fe.registerEvent(IA.TUILogin.EVENT.LOGIN_STATE_CHANGED, IA.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS, this), (e = IA.TUIChat) != null && e.EVENT && fe.registerEvent((t = IA.TUIChat.EVENT) == null ? void 0 : t.CHAT_STATE_CHANGED, (o = IA.TUIChat.EVENT_SUB_KEY) == null ? void 0 : o.CHAT_OPENED, this), fe.registerService(IA.TUICalling.SERVICE.NAME, this), fe.registerExtension(IA.TUIChat.EXTENSION.INPUT_MORE.EXT_ID, this);
}
static getInstance(A) {
return Ne.instance || (Ne.instance = new Ne(A)), Ne.instance;
}
// ================ 【】 ================
/**
* message on screen
* @param {Any} params Parameters for message up-screening
*/
callTUIService(A) {
const { message: e } = A || {};
fe.callService({
serviceName: IA.TUIChat.SERVICE.NAME,
method: IA.TUIChat.SERVICE.METHOD.UPDATE_MESSAGE_LIST,
params: { message: e }
});
}
/**
* tuicore getExtension
* @param {String} extensionID extension id
* @param {Any} params tuicore pass parameters
* @returns {Any[]} return extension
*/
onGetExtension(A, e) {
var t, o;
if (A === IA.TUIChat.EXTENSION.INPUT_MORE.EXT_ID) {
if ((o = (t = this._callService.getTUICallEngineInstance()) == null ? void 0 : t.reportLog) == null || o.call(t, { name: "TUICallKit.onGetExtension", data: { extensionID: A, params: e } }), et(e))
return [];
if ([IA.TUIChat.TYPE.ROOM, IA.TUIChat.TYPE.CUSTOMER_SERVICE].includes(e.chatType))
return [];
let i = [];
const s = {
weight: 1e3,
text: "语音通话",
icon: ko,
data: {
name: "voiceCall"
},
listener: {
onClicked: async (r) => await this._handleTUICoreOnClick(r, r.type || _.AUDIO)
}
}, c = {
weight: 900,
text: "视频通话",
icon: qo,
data: {
name: "videoCall"
},
listener: {
onClicked: async (r) => await this._handleTUICoreOnClick(r, r.type || _.VIDEO)
}
};
return e != null && e.chatType ? i = [s, c] : (!(e != null && e.filterVoice) && i.push(s), !(e != null && e.filterVideo) && i.push(c)), i;
}
}
async onCall(A, e) {
A === IA.TUICalling.SERVICE.METHOD.START_CALL && await this._handleTUICoreOnClick(e, e.type);
}
/**
* tuicore notify event manager
* @param {String} eventName event name
* @param {String} subKey sub key
* @param {Any} options tuicore event parameters
*/
async onNotifyEvent(A, e, t) {
var o, i, s, c, r, d, g, N;
try {
if (A === IA.TUILogin.EVENT.LOGIN_STATE_CHANGED)
if (e === IA.TUILogin.EVENT_SUB_KEY.USER_LOGIN_SUCCESS) {
const { chat: C, userID: p, userSig: y, SDKAppID: m } = bo.getContext();
await ((o = this._callService) == null ? void 0 : o.init({ tim: C, userID: p, userSig: y, sdkAppID: m, isFromChat: !0, component: Tt.TIM_CALL_KIT })), (i = this._callService) == null || i.setIsFromChat(!0), (s = this._callService) == null || s.setLogLevel(na.NORMAL), this._addListenChatEvent();
} else
e === IA.TUILogin.EVENT_SUB_KEY.USER_LOGOUT_SUCCESS && (this._removeListenChatEvent(), await ((c = this._callService) == null ? void 0 : c.destroyed()));
if ((r = IA.TUIChat) != null && r.EVENT && A === IA.TUIChat.EVENT.CHAT_STATE_CHANGED && e === IA.TUIChat.EVENT_SUB_KEY.CHAT_OPENED) {
if ((d = this._callService) == null || d.setCurrentGroupId((t == null ? void 0 : t.groupID) || ""), ke.getData(u.CALL, l.CALL_STATUS) !== x.IDLE)
return;
const C = (g = this._callService) == null ? void 0 : g.getCurrentGroupId(), p = C ? await this.getGroupAttributes((N = this._callService) == null ? void 0 : N.getTim(), C) : {};
await this.updateStoreBasedOnGroupAttributes(p);
}
} catch (C) {
console.error(`${l.PREFIX}TUICore onNotifyEvent failed, error: ${C}.`);
}
}
// Handling the chat+call scenario, data required for the joinInGroupCall API: update store / clear relevant store data
async updateStoreBasedOnGroupAttributes(A) {
var e, t, o, i;
(o = (t = (e = this._callService) == null ? void 0 : e.getTUICallEngineInstance()) == null ? void 0 : t.reportLog) == null || o.call(t, {
name: "TUICallKit.getJoinGroupCallInfo.success",
data: { groupAttributes: A }
});
try {
const {
group_id: s = "",
room_id: c = 0,
room_id_type: r = 0,
call_media_type: d = l.UNKNOWN,
// @ts-ignore
user_list: g
// The default value of the user list returned by the background is null
} = A[l.INNER_ATTR_KIT_INFO] ? JSON.parse(A[l.INNER_ATTR_KIT_INFO]) : {};
let N = (g || []).map((p) => p.userid);
N = N.length && await Ve(N, (i = this._callService) == null ? void 0 : i.getTim());
const C = {
[l.GROUP_ID]: s,
[l.GROUP_CALL_MEMBERS]: N,
[l.ROOM_ID]: c,
[l.CALL_MEDIA_TYPE]: Bo[d],
[l.ROOM_ID_TYPE]: r
};
ke.updateStore(C, u.CALL);
} catch (s) {
console.warn(`${l.PREFIX}updateStoreBasedOnGroupAttributes fail, error: ${s}`);
}
}
// Get group attribute
async getGroupAttributes(A, e) {
if (!e)
return {};
try {
const { data: t } = await A.getGroupAttributes({
groupID: e,
keyList: []
});
return (t == null ? void 0 : t.groupAttributes) || {};
} catch (t) {
return console.warn(`${l.PREFIX}getGroupAttributes fail: ${t}`), {};
}
}
isLineBusy(A) {
var o;
const e = Re(A.payload.data), t = Re(e == null ? void 0 : e.data);
return (t == null ? void 0 : t.line_busy) === "line_busy" || (t == null ? void 0 : t.line_busy) === "" || ((o = t == null ? void 0 : t.data) == null ? void 0 : o.message) === "lineBusy";
}
async getCallKitMessage(A, e) {
var C, p, y, m;
const t = Re(A.payload.data);
if ((t == null ? void 0 : t.businessID) !== 1)
return {};
let o = "";
const i = Re(t == null ? void 0 : t.data), s = i.call_type, c = t.inviteeList, r = (C = i == null ? void 0 : i.data) == null ? void 0 : C.inviter, d = ke.getData(u.CALL, l.LOCAL_USER_INFO).userId, g = r === d, N = (p = i == null ? void 0 : i.data) == null ? void 0 : p.cmd;
switch (t == null ? void 0 : t.actionType) {
case Me.INVITE: {
o = xA[N]({ callDuration: Ia(i == null ? void 0 : i.call_end) });
break;
}
case Me.CANCEL_INVITE:
o = g ? "Call Cancel" : "Other Side Cancel";
break;
case Me.ACCEPT_INVITE:
["switchToAudio", "switchToVideo"].includes(N) ? o = (y = xA == null ? void 0 : xA[N]) == null ? void 0 : y.call(xA) : o = de("Answered");
break;
case Me.REJECT_INVITE:
this.isLineBusy(A) ? o = g ? "Line Busy" : "Other Side Line Busy" : o = g ? "Other Side Decline" : "Decline";
break;
case Me.INVITE_TIMEOUT:
["switchToAudio", "switchToVideo"].includes(N) ? o = (m = xA == null ? void 0 : xA[N]) == null ? void 0 : m.call(xA) : o = g ? "Other Side No Answer" : "No answer";
break;
}
return { messageCardContent: o, callMediaType: s, inviteeList: c };
}
// =========================【chat: event listening】=========================
_addListenChatEvent() {
var A, e;
if (!((A = this._callService) != null && A.getTim())) {
console.warn(`${l.PREFIX}add tim event listener failed, tim is empty.`);
return;
}
(e = this._callService) == null || e.getTim().on(Pt.EVENT.GROUP_ATTRIBUTES_UPDATED, this._handleGroupAttributesUpdated, this);
}
_removeListenChatEvent() {
var A, e;
if (!((A = this._callService) != null && A.getTim())) {
console.warn(`${l.PREFIX}remove tim event listener failed, tim is empty.`);
return;
}
(e = this._callService) == null || e.getTim().off(Pt.EVENT.GROUP_ATTRIBUTES_UPDATED, this._handleGroupAttributesUpdated, this);
}
/**
* chat start audio/video call via click
* @param {Any} options Parameters passed in when clicking on an audio/video call from chat
* @param {CallMediaType} type call media type. 0 - audio; 1 - video.
*/
async _handleTUICoreOnClick(A, e) {
var t, o;
try {
const { groupID: i, userIDList: s = [], ...c } = A;
i ? await ((t = this._callService) == null ? void 0 : t.groupCall({ groupID: i, userIDList: s, type: e, ...c })) : s.length === 1 && await ((o = this._callService) == null ? void 0 : o.call({ userID: s[0], type: e, ...c }));
} catch (i) {
console.debug(i);
}
}
async _handleGroupAttributesUpdated(A) {
var i;
if (ke.getData(u.CALL, l.CALL_STATUS) !== x.IDLE)
return;
const e = (A == null ? void 0 : A.data) || {}, { groupID: t = "", groupAttributes: o = {} } = e;
t === ((i = this._callService) == null ? void 0 : i.getCurrentGroupId()) && await this.updateStoreBasedOnGroupAttributes(o);
}
}
const hn = 0, Sn = 1, Qt = 2;
function yn({ retryFunction: a, settings: A, onError: e, onRetrying: t, onRetryFailed: o, context: i }) {
return function(...s) {
const c = A.retries || 5;
let r = 0, d = -1, g = hn;
const N = async (C, p) => {
const y = i || this;
try {
const m = await a.apply(y, s);
r = 0, C(m);
} catch (m) {
const D = () => {
clearTimeout(d), r = 0, g = Qt, p(m);
}, j = () => {
g !== Qt && r < c ? (r++, g = Sn, Qe(t) && t.call(y, r, D), d = setTimeout(
() => {
d = -1, N(C, p);
},
et(A.timeout) ? 1e3 : A.timeout
)) : (D(), Qe(o) && o.call(y, m));
};
Qe(e) ? e.call(y, m, j, p, s) : j();
}
};
return new Promise(N);
};
}
function fn(a) {
return function(A, e, t) {
const { retries: o = 5, timeout: i = 2e3, onError: s, onRetrying: c, onRetryFailed: r } = a, d = yn({
retryFunction: t.value,
settings: { retries: o, timeout: i },
onError: s,
onRetrying: c,
onRetryFailed: r,
context: null
});
return t.value = function(...g) {
return d.apply(this, g);
}, t;
};
}
var mn = Object.defineProperty, Tn = Object.getOwnPropertyDescriptor, vn = (a, A, e, t) => {
for (var o = t > 1 ? void 0 : t ? Tn(A, e) : A, i = a.length - 1, s; i >= 0; i--)
(s = a[i]) && (o = (t ? s(A, e, o) : s(o)) || o);
return t && o && mn(A, e, o), o;
};
const Y = at.getInstance(), Dn = re.getInstance(), Ma = class Ee {
constructor(A) {
this._callService = A.callService;
}
static getInstance(A) {
return Ee.instance || (Ee.instance = new Ee(A)), Ee.instance;
}
addListenTuiCallEngineEvent() {
var e;
const A = (e = this._callService) == null ? void 0 : e.getTUICallEngineInstance();
if (!A) {
console.warn(`${l.PREFIX}add engine event listener failed, engine is empty.`);
return;
}
A.on(P.ERROR, this._handleError, this), A.on(P.INVITED, this._handleNewInvitationReceived, this), A.on(P.USER_ACCEPT, this._handleUserAccept, this), A.on(P.USER_ENTER, this._handleUserEnter, this), A.on(P.USER_LEAVE, this._handleUserLeave, this), A.on(P.REJECT, this._handleInviteeReject, this), A.on(P.NO_RESP, this._handleNoResponse, this), A.on(P.LINE_BUSY, this._handleLineBusy, this), A.on(P.CALLING_CANCEL, this._handleCallingCancel, this), A.on(P.SDK_READY, this._handleSDKReady, this), A.on(P.KICKED_OUT, this._handleKickedOut, this), A.on(P.MESSAGE_SENT_BY_ME, this._messageSentByMe, this), P.CALL_MESSAGE && A.on(P.CALL_MESSAGE, this._handleCallMessage, this), P.ON_USER_NETWORK_QUALITY_CHANGED && A.on(P.ON_USER_NETWORK_QUALITY_CHANGED, this._handleNetworkQuality, this), A.on(P.CALLING_END, this._handleCallingEnd, this), A.on(P.CALL_TYPE_CHANGED, this._handleCallTypeChange, this), A.on(P.USER_VIDEO_AVAILABLE, this._handleUserVideoAvailable, this), A.on(P.USER_AUDIO_AVAILABLE, this._handleUserAudioAvailable, this), A.on(P.USER_VOICE_VOLUME, this._handleUserVoiceVolume, this), A.on(P.DEVICED_UPDATED, this._handleDeviceUpdate, this);
}
removeListenTuiCallEngineEvent() {
var e;
const A = (e = this._callService) == null ? void 0 : e.getTUICallEngineInstance();
A.off(P.ERROR, this._handleError, this), A.off(P.INVITED, this._handleNewInvitationReceived, this), A.off(P.USER_ACCEPT, this._handleUserAccept, this), A.off(P.USER_ENTER, this._handleUserEnter, this), A.off(P.USER_LEAVE, this._handleUserLeave, this), A.off(P.REJECT, this._handleInviteeReject, this), A.off(P.NO_RESP, this._handleNoResponse, this), A.off(P.LINE_BUSY, this._handleLineBusy, this), A.off(P.CALLING_CANCEL, this._handleCallingCancel, this), A.off(P.SDK_READY, this._handleSDKReady, this), A.off(P.KICKED_OUT, this._handleKickedOut, this), A.off(P.MESSAGE_SENT_BY_ME, this._messageSentByMe, this), P.ON_USER_NETWORK_QUALITY_CHANGED && A.off(P.ON_USER_NETWORK_QUALITY_CHANGED, this._handleNetworkQuality, this), A.off(P.CALLING_END, this._handleCallingEnd, this), A.off(P.CALL_TYPE_CHANGED, this._handleCallTypeChange, this), A.off(P.USER_VIDEO_AVAILABLE, this._handleUserVideoAvailable, this), A.off(P.USER_AUDIO_AVAILABLE, this._handleUserAudioAvailable, this), A.off(P.USER_VOICE_VOLUME, this._handleUserVoiceVolume, this), A.off(P.DEVICED_UPDATED, this._handleDeviceUpdate, this);
}
_callerChangeToConnected() {
var t;
const A = Y.getData(u.CALL, l.CALL_ROLE);
Y.getData(u.CALL, l.CALL_STATUS) === x.CALLING && A === gA.CALLER && (Y.update(u.CALL, l.CALL_STATUS, x.CONNECTED), (t = this._callService) == null || t.startTimer());
}
_unNormalEventsManager(A, e) {
var i;
console.log(`${l.PREFIX}${e} event data: ${JSON.stringify(A)}.`);
const t = Y.getData(u.CALL, l.IS_GROUP), o = Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
switch (e) {
case P.REJECT:
case P.LINE_BUSY: {
const { userID: s } = PA(A);
let c = e === P.REJECT ? DA.OTHER_SIDE_REJECT_CALL : DA.OTHER_SIDE_LINE_BUSY, r = "";
t && (r = (o.find((d) => d.userId === s) || {}).displayUserInfo || s, c = e === P.REJECT ? DA.REJECT_CALL : DA.IN_BUSY), Y.update(u.CALL, l.TOAST_INFO, { content: { key: c, options: { userList: r } } }), s && It([s]);
break;
}
case P.NO_RESP: {
const { userIDList: s = [] } = PA(A), c = t ? DA.TIMEOUT : DA.CALL_TIMEOUT, r = s.map((d) => (o.find((N) => N.userId === d) || {}).displayUserInfo || d);
Y.update(u.CALL, l.TOAST_INFO, { content: { key: c, options: { userList: r.join() } } }), s.length > 0 && It(s);
break;
}
case P.CALLING_CANCEL: {
(i = this._callService) == null || i._resetCallStore();
break;
}
}
}
_handleError(A) {
var s;
const { code: e, message: t } = A || {}, o = Object.values(Bt).indexOf(e);
let i = "";
if (o !== -1) {
const c = Object.keys(Bt)[o];
i = de(Rt[c]), i && Y.update(u.CALL, l.TOAST_INFO, { content: Rt[c], type: l.ERROR });
}
(s = this._callService) == null || s.executeExternalAfterCalling(), console.error(`${l.PREFIX}_handleError, errorCode: ${e}; errorMessage: ${i || t}.`);
}
async _handleNewInvitationReceived(A) {
var j, k, q, b;
console.log(`${l.PREFIX}onCallReceived event data: ${JSON.stringify(A)}.`);
const { sponsor: e = "", isFromGroup: t, callMediaType: o, inviteData: i = {}, calleeIdList: s = [], groupID: c = "", roomID: r, strRoomID: d } = PA(A), g = Y.getData(u.CALL, l.LOCAL_USER_INFO), N = [e, ...s.filter((Q) => Q !== g.userId)], C = o || i.callType, p = C === _.AUDIO ? DA.CALLEE_CALLING_AUDIO_MSG : DA.CALLEE_CALLING_VIDEO_MSG;
let y = {
[l.CALL_ROLE]: gA.CALLEE,
[l.IS_GROUP]: t,
[l.CALL_STATUS]: x.CALLING,
[l.CALL_MEDIA_TYPE]: C,
[l.CALL_TIPS]: p,
[l.CALLER_USER_INFO]: { userId: e },
[l.GROUP_ID]: c
};
ga(r, d), Y.updateStore(y, u.CALL), (j = this._callService) == null || j.executeExternalBeforeCalling(), (k = this._callService) != null && k.statusChanged && ((q = this._callService) == null || q.statusChanged({ oldStatus: fA.IDLE, newStatus: fA.BE_INVITED }));
const m = await Ve(N, (b = this._callService) == null ? void 0 : b.getTim()), [D] = m.filter((Q) => Q.userId === e);
m.length > 0 && Y.updateStore({
[l.REMOTE_USER_INFO_LIST]: m,
[l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST]: m,
[l.CALLER_USER_INFO]: {
userId: e,
nick: (D == null ? void 0 : D.nick) || "",
avatar: (D == null ? void 0 : D.avatar) || "",
displayUserInfo: (D == null ? void 0 : D.remark) || (D == null ? void 0 : D.nick) || e
}
}, u.CALL);
}
_handleUserAccept(A) {
this._callerChangeToConnected(), Y.update(u.CALL, l.CALL_TIPS, { text: "answered", duration: 2e3 }), console.log(`${l.PREFIX}accept event data: ${JSON.stringify(A)}.`);
}
async _handleUserEnter(A) {
var s;
this._callerChangeToConnected();
const { userID: e, data: t } = PA(A);
let o = Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
if (!o.find((c) => (c == null ? void 0 : c.userId) === e)) {
o.push({ userId: e }), o.length > 0 && (Y.update(u.CALL, l.REMOTE_USER_INFO_LIST, o), Y.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, o));
const [c] = await Ve([e], (s = this._callService) == null ? void 0 : s.getTim());
o = Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST), o.forEach((r) => {
(r == null ? void 0 : r.userId) === e && (r = Object.assign(r, c));
});
}
o = o.map((c) => (c.userId === e && (c.isEnter = !0), c)), o.length > 0 && (Y.update(u.CALL, l.REMOTE_USER_INFO_LIST, o), Y.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, o), Dn.updateViewBackgroundUserId("remote")), console.log(`${l.PREFIX}userEnter event data: ${JSON.stringify(A)}.`);
}
_handleUserLeave(A) {
console.log(`${l.PREFIX}userLeave event data: ${JSON.stringify(A)}.`);
const { data: e, userID: t } = PA(A);
if (Y.getData(u.CALL, l.IS_GROUP)) {
const i = (Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST).find((s) => s.userId === t) || {}).displayUserInfo || t;
Y.update(u.CALL, l.TOAST_INFO, { content: { key: DA.END_CALL, options: { userList: i } } });
}
t && It([t]);
}
_handleInviteeReject(A) {
this._unNormalEventsManager(A, P.REJECT);
}
_handleNoResponse(A) {
this._unNormalEventsManager(A, P.NO_RESP);
}
_handleLineBusy(A) {
this._unNormalEventsManager(A, P.LINE_BUSY);
}
_handleCallingCancel(A) {
var e;
(e = this._callService) == null || e.executeExternalAfterCalling(), this._unNormalEventsManager(A, P.CALLING_CANCEL);
}
_handleCallingEnd(A) {
var e, t;
console.log(`${l.PREFIX}callEnd event data: ${JSON.stringify(A)}.`), (e = this._callService) == null || e.executeExternalAfterCalling(), (t = this._callService) == null || t._resetCallStore();
}
// SDK_READY 后才能调用 tim 接口, 否则登录后立刻获取导致调用接口失败. v2.27.4+、v3 接口 login 后会抛出 SDK_READY
async _handleSDKReady(A) {
var t;
let e = Y.getData(u.CALL, l.LOCAL_USER_INFO);
e = await pn(e.userId, (t = this._callService) == null ? void 0 : t.getTim()), Y.update(u.CALL, l.LOCAL_USER_INFO, e), Y.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, e);
}
_handleKickedOut(A) {
var e, t, o;
console.log(`${l.PREFIX}kickOut event data: ${JSON.stringify(A)}.`), (e = this._callService) != null && e.kickedOut && ((t = this._callService) == null || t.kickedOut(A)), Y.update(u.CALL, l.CALL_TIPS, DA.KICK_OUT), (o = this._callService) == null || o._resetCallStore();
}
_messageSentByMe(A) {
var t, o;
const e = A == null ? void 0 : A.data;
(t = this._callService) != null && t.onMessageSentByMe && ((o = this._callService) == null || o.onMessageSentByMe(e));
}
_handleCallMessage(A) {
const e = PA(A);
this._callService._chatCombine.callTUIService({ message: e });
}
_handleCallTypeChange(A) {
const { newCallType: e, type: t } = PA(A);
Y.update(u.CALL, l.CALL_MEDIA_TYPE, e || t);
}
_handleNetworkQuality(A) {
const { networkQualityList: e = [] } = PA(A);
Y.update(u.CALL, l.NETWORK_STATUS, e);
const t = Y.getData(u.CALL, l.IS_GROUP), o = Y.getData(u.CALL, l.LOCAL_USER_INFO);
if (Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST), !t && e.find((s) => (o == null ? void 0 : o.userId) === (s == null ? void 0 : s.userId) && (s == null ? void 0 : s.quality) >= Xo)) {
Y.update(u.CALL, l.CALL_TIPS, DA.LOCAL_NETWORK_IS_POOR);
return;
}
}
async _startRemoteView(A) {
var e;
if (!A) {
console.warn(`${l.PREFIX}_startRemoteView userID is empty`);
return;
}
if (!document.getElementById(A))
return console.warn(`${l.PREFIX}_startRemoteView can't find HTMLElement sid: ${A}`), Promise.reject();
try {
const t = Y.getData(u.CALL, l.DISPLAY_MODE);
await ((e = this._callService) == null ? void 0 : e.getTUICallEngineInstance().startRemoteView({ userID: A, videoViewDomID: A, options: { objectFit: t } }));
} catch (t) {
return console.error(`${l.PREFIX}_startRemoteView error: ${t}.`), Promise.reject(t);
}
}
_setRemoteUserInfoAudioVideoAvailable(A, e, t) {
let o = Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
o = o.map((i) => {
if (i.userId === t) {
if (e === l.AUDIO)
return { ...i, isAudioAvailable: A };
if (e === l.VIDEO)
return { ...i, isVideoAvailable: A };
}
return i;
}), o.length > 0 && (Y.update(u.CALL, l.REMOTE_USER_INFO_LIST, o), Y.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, o));
}
async _handleUserVideoAvailable(A) {
const { userID: e, isVideoAvailable: t } = PA(A);
console.log(`${l.PREFIX}_handleUserVideoAvailable event data: ${JSON.stringify(A)}.`);
try {
t && await this._startRemoteView(e);
} catch (o) {
console.error(`${l.PREFIX}_startRemoteView failed, error: ${o}.`);
}
this._setRemoteUserInfoAudioVideoAvailable(t, l.VIDEO, e);
}
_handleUserAudioAvailable(A) {
const { userID: e, isAudioAvailable: t } = PA(A);
console.log(`${l.PREFIX}_handleUserAudioAvailable event data: ${JSON.stringify(A)}.`), this._setRemoteUserInfoAudioVideoAvailable(t, l.AUDIO, e);
}
_handleUserVoiceVolume(A) {
try {
const { volumeMap: e } = PA(A);
if ((e || []).length === 0)
return;
const t = Y.getData(u.CALL, l.LOCAL_USER_INFO);
let o = Y.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
const [i] = e.filter((r) => r.userId === t.userId), s = e.reduce((r, d) => d.userId !== t.userId ? { ...r, [d.userId]: d.audioVolume } : r, {});
t.volume = i.audioVolume, o = o.map((r) => ({ ...r, volume: s[r.userId] }));
const c = {
[l.LOCAL_USER_INFO]: t,
[l.REMOTE_USER_INFO_LIST]: o
};
Y.updateStore(c, u.CALL);
} catch (e) {
console.debug(e);
}
}
_handleDeviceUpdate(A) {
const { cameraList: e, microphoneList: t, speakerList: o, currentCamera: i, currentMicrophone: s, currentSpeaker: c } = A;
Y.update(u.CALL, l.DEVICE_LIST, { cameraList: e, microphoneList: t, speakerList: o, currentCamera: i, currentMicrophone: s, currentSpeaker: c });
}
};
vn([
fn({
retries: 5,
timeout: 200,
onRetrying(a) {
console.warn(`${l.PREFIX}_startRemoteView, retrying [${a}]`);
}
})
], Ma.prototype, "_startRemoteView", 1);
let wn = Ma;
var En = Object.defineProperty, jn = Object.getOwnPropertyDescriptor, aA = (a, A, e, t) => {
for (var o = t > 1 ? void 0 : t ? jn(A, e) : A, i = a.length - 1, s; i >= 0; i--)
(s = a[i]) && (o = (t ? s(A, e, o) : s(o)) || o);
return t && o && En(A, e, o), o;
};
const O = ca.getInstance(), M = at.getInstance(), ZA = re.getInstance();
ZA.setTUIStore(M);
const Ft = "3.3.9", zn = "vue3", tA = class je {
constructor() {
this._tim = null, this._TUICore = null, this._timerId = -1, this._startTimeStamp = dt(), this._bellContext = null, this._isFromChat = !1, this._currentGroupId = "", this._offlinePushInfo = null, this._permissionCheckTimer = null, this._chatCombine = null, this._engineEventHandler = null, this._handleCallStatusChange = async (A) => {
var e, t, o, i;
try {
const s = {
callRole: M.getData(u.CALL, l.CALL_ROLE),
callStatus: M.getData(u.CALL, l.CALL_STATUS)
};
if (this._bellContext.setBellProperties(s), A === x.CALLING)
await ((e = this == null ? void 0 : this._bellContext) == null ? void 0 : e.play());
else {
if (A === x.CONNECTED) {
const c = M.getData(u.CALL, l.IS_GROUP), r = M.getData(u.CALL, l.CALL_MEDIA_TYPE), d = M.getData(u.CALL, l.REMOTE_USER_INFO_LIST), g = c ? fA.DIALING_GROUP : fA.DIALING_C2C;
M.update(u.CALL, l.CALL_TIPS, ""), this.statusChanged && this.statusChanged({ oldStatus: g, newStatus: Ge() }), !c && r === _.VIDEO && this.switchScreen(d[0].domId);
}
if (A === x.IDLE && this._isFromChat) {
const c = this._currentGroupId ? await ((t = this._chatCombine) == null ? void 0 : t.getGroupAttributes(this._tim, this._currentGroupId)) : {};
await ((o = this._chatCombine) == null ? void 0 : o.updateStoreBasedOnGroupAttributes(c, M, this));
}
await ((i = this == null ? void 0 : this._bellContext) == null ? void 0 : i.stop());
}
} catch (s) {
console.warn(`${l.PREFIX}handleCallStatusChange, ${s}.`);
}
}, console.log(`${l.PREFIX}version: ${Ft}`), this._watchTUIStore(), this._engineEventHandler = wn.getInstance({ callService: this }), this._chatCombine = Ne.getInstance({ callService: this });
}
static getInstance() {
return je.instance || (je.instance = new je()), je.instance;
}
async init(A) {
var e, t;
try {
if (this._tuiCallEngine)
return;
let { userID: o, tim: i, userSig: s, sdkAppID: c, SDKAppID: r, isFromChat: d, component: g = Tt.TUI_CALL_KIT } = A;
this._TUICore && (c = this._TUICore.SDKAppID, i = this._TUICore.tim), this._tim = i, console.log(`${l.PREFIX}init sdkAppId: ${c || r}, userId: ${o}`), this._tuiCallEngine = zo.createInstance({
tim: i,
SDKAppID: c || r,
// 兼容传入 SDKAppID 的问题
// @ts-ignore
frameWork: zn,
language: 6,
callkitVersion: Ft,
chat: d || !1,
component: g
}), ZA.setEngineInstance(this._tuiCallEngine), this._addListenTuiCallEngineEvent(), this._bellContext = new dn(), M.update(u.CALL, l.LOCAL_USER_INFO, { userId: o }), M.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, { userId: o }), ZA.updateViewBackgroundUserId("local"), await this._tuiCallEngine.login({ userID: o, userSig: s, assetsPath: "" });
const N = M.getData(u.CALL, l.CUSTOM_UI_CONFIG);
(t = (e = this._tuiCallEngine) == null ? void 0 : e.reportLog) == null || t.call(e, {
name: "TUICallkit.init",
data: {
uiConfig: N
}
});
} catch (o) {
throw console.error(`${l.PREFIX}init failed, error: ${o}.`), o;
}
}
// component destroy
async destroyed() {
var A;
try {
const e = M.getData(u.CALL, l.CALL_STATUS);
if (e !== x.IDLE)
throw new Error(`please destroyed when status is idle, current status: ${e}`);
this._tuiCallEngine && (this._removeListenTuiCallEngineEvent(), await this._tuiCallEngine.destroyInstance(), this._tuiCallEngine = null), (A = this._bellContext) == null || A.destroy(), this._bellContext = null;
} catch (e) {
throw console.error(`${l.PREFIX}destroyed failed, error: ${e}.`), e;
}
}
async call(A) {
if (M.getData(u.CALL, l.CALL_STATUS) === x.IDLE)
try {
const { type: e, userID: t, offlinePushInfo: o } = A;
if (M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE)
return;
await this._updateCallStoreBeforeCall(e, [{ userId: t }]), this.executeExternalBeforeCalling(), A.offlinePushInfo = { ...this.getDefaultOfflinePushInfo(), ...o };
const i = await this._tuiCallEngine.call(A);
await this._updateCallStoreAfterCall([t], i);
} catch (e) {
this._handleCallError(e, "call");
}
}
async groupCall(A) {
if (M.getData(u.CALL, l.CALL_STATUS) === x.IDLE)
try {
const { userIDList: e, type: t, groupID: o, offlinePushInfo: i } = A;
if (M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE)
return;
const s = e.map((r) => ({ userId: r }));
await this._updateCallStoreBeforeCall(t, s, o), this.executeExternalBeforeCalling(), A.offlinePushInfo = { ...this.getDefaultOfflinePushInfo(), ...i };
const c = await this._tuiCallEngine.groupCall(A);
await this._updateCallStoreAfterCall(e, c);
} catch (e) {
this._handleCallError(e, "groupCall");
}
}
async inviteUser(A) {
if (M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE)
try {
const { userIDList: e } = A;
let t = await Ve(e, this.getTim());
const o = M.getData(u.CALL, l.REMOTE_USER_INFO_LIST);
if (e.filter((s) => !o.some((c) => c.userId === s)).length === 0)
return;
M.update(u.CALL, l.REMOTE_USER_INFO_LIST, [...o, ...t]), M.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, [...o, ...t]), this._tuiCallEngine && await this._tuiCallEngine.inviteUser(A);
} catch (e) {
console.error(`${l.PREFIX}inviteUser failed, error: ${e}.`);
}
}
async joinInGroupCall(A) {
if (M.getData(u.CALL, l.CALL_STATUS) !== x.CONNECTED)
try {
const e = {
[l.CALL_ROLE]: gA.CALLEE,
[l.IS_GROUP]: !0,
[l.CALL_STATUS]: x.CONNECTED,
[l.CALL_MEDIA_TYPE]: A.type,
[l.GROUP_ID]: A.groupID,
[l.ROOM_ID]: A.roomID
};
M.updateStore(e, u.CALL);
const t = await this._tuiCallEngine.joinInGroupCall(A), o = this._getFeatureButtonDefaultState(_A.Camera) === Ce.Close;
A.type === _.VIDEO && !o && await this.openCamera(l.LOCAL_VIDEO), M.update(u.CALL, l.IS_CLICKABLE, !0), this.startTimer(), gt(this._tuiCallEngine), await this._tuiCallEngine.setVideoQuality(M.getData(u.CALL, l.VIDEO_RESOLUTION));
const i = M.getData(u.CALL, l.LOCAL_USER_INFO);
M.update(u.CALL, l.LOCAL_USER_INFO, { ...i, isEnter: !0 }), M.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, { ...i, isEnter: !0 }), ne(!0, l.AUDIO);
} catch (e) {
this._handleCallError(e, "joinInGroupCall");
}
}
// ===============================【其它对外接口】===============================
getTUICallEngineInstance() {
return (this == null ? void 0 : this._tuiCallEngine) || null;
}
setLogLevel(A) {
var e;
(e = this == null ? void 0 : this._tuiCallEngine) == null || e.setLogLevel(A);
}
setLanguage(A) {
A && Object.values(oa).includes(A) && (M.update(u.CALL, l.LANGUAGE, A), M.update(u.CALL, l.TRANSLATE, de.bind(null)));
}
enableFloatWindow(A) {
M.update(u.CALL, l.ENABLE_FLOAT_WINDOW, A);
}
async setSelfInfo(A) {
const { nickName: e, avatar: t } = A;
try {
await this._tuiCallEngine.setSelfInfo({ nickName: e, avatar: t });
} catch (o) {
console.error(`${l.PREFIX}setSelfInfo failed, error: ${o}.`);
}
}
async enableVirtualBackground(A) {
M.update(u.CALL, l.IS_SHOW_ENABLE_VIRTUAL_BACKGROUND, A);
}
async enableAIVoice(A) {
try {
await this._tuiCallEngine.enableAIVoice(A), console.log(`${l.PREFIX}enableAIVoice: ${A}.`);
} catch (e) {
throw console.error(`${l.PREFIX}enableAIVoice failed, error: ${e}.`), e;
}
}
async setCallingBell(A) {
let e = !0;
if (e = await Qo(A), !e) {
console.warn(`${l.PREFIX}setCallingBell failed, filePath: ${A}.`);
return;
}
const t = { calleeBellFilePath: A };
this._bellContext.setBellProperties(t);
}
async enableMuteMode(A) {
try {
const e = { isMuteBell: A };
this._bellContext.setBellProperties(e), await this._bellContext.setBellMute(A);
} catch (e) {
console.warn(`${l.PREFIX}enableMuteMode failed, error: ${e}.`);
}
}
hideFeatureButton(A) {
ZA.hideFeatureButton(A);
}
setLocalViewBackgroundImage(A) {
ZA.setLocalViewBackgroundImage(A);
}
setRemoteViewBackgroundImage(A, e) {
ZA.setRemoteViewBackgroundImage(A, e);
}
setLayoutMode(A) {
ZA.setLayoutMode(A);
}
setCameraDefaultState(A) {
ZA.setCameraDefaultState(A);
}
async accept() {
var e, t, o, i, s, c;
const A = M.getData(u.CALL, l.CALL_STATUS);
if ((t = (e = this._tuiCallEngine) == null ? void 0 : e.reportLog) == null || t.call(e, {
name: "TUICallKit.accept.start",
data: { callStatus: A }
}), A !== x.CONNECTED)
try {
M.update(u.CALL, l.CALL_STATUS, x.CONNECTED), gt(this._tuiCallEngine);
const r = await this._tuiCallEngine.accept();
if (r) {
(i = this._chatCombine) == null || i.callTUIService({ message: (o = r == null ? void 0 : r.data) == null ? void 0 : o.message }), M.update(u.CALL, l.IS_CLICKABLE, !0), this.startTimer();
const d = M.getData(u.CALL, l.CALL_MEDIA_TYPE), g = this._getFeatureButtonDefaultState(_A.Camera) === Ce.Close;
d === _.VIDEO && !g && await this.openCamera(l.LOCAL_VIDEO), await this._tuiCallEngine.setVideoQuality(M.getData(u.CALL, l.VIDEO_RESOLUTION));
const N = M.getData(u.CALL, l.LOCAL_USER_INFO);
M.update(u.CALL, l.LOCAL_USER_INFO, { ...N, isEnter: !0 }), M.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, { ...N, isEnter: !0 }), ne(!0, l.AUDIO);
}
} catch (r) {
if ((c = (s = this._tuiCallEngine) == null ? void 0 : s.reportLog) == null || c.call(s, {
name: "TUICallKit.accept.fail",
level: "error",
error: r
}), qt(r))
return;
Mt(r, _.AUDIO, this._tuiCallEngine), this._resetCallStore();
}
}
async hangup() {
if (M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE) {
try {
const A = await this._tuiCallEngine.hangup();
A == null || A.forEach((e) => {
var t, o;
(e == null ? void 0 : e.code) === 0 && ((o = this._chatCombine) == null || o.callTUIService({ message: (t = e == null ? void 0 : e.data) == null ? void 0 : t.message }));
});
} catch (A) {
console.debug(A);
}
this._resetCallStore();
}
}
async reject() {
var A, e;
if (M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE) {
try {
const t = await this._tuiCallEngine.reject();
(t == null ? void 0 : t.code) === 0 && ((e = this._chatCombine) == null || e.callTUIService({ message: (A = t == null ? void 0 : t.data) == null ? void 0 : A.message }));
} catch (t) {
console.debug(t);
}
this._resetCallStore();
}
}
async openCamera(A) {
try {
if (O.isH5) {
const t = M.getData(u.CALL, l.CAMERA_POSITION) === ie.FRONT;
await this._tuiCallEngine.openCamera(A, t);
} else
await this._tuiCallEngine.openCamera(A);
ne(!0, l.VIDEO);
} catch (e) {
Mt(e, _.VIDEO, this._tuiCallEngine), console.error(`${l.PREFIX}openCamera error: ${e}.`);
}
}
async closeCamera() {
try {
await this._tuiCallEngine.closeCamera(), ne(!1, l.VIDEO);
} catch (A) {
console.error(`${l.PREFIX}closeCamera error: ${A}.`);
}
}
async openMicrophone() {
try {
await this._tuiCallEngine.openMicrophone(), ne(!0, l.AUDIO);
} catch (A) {
console.error(`${l.PREFIX}openMicrophone failed, error: ${A}.`);
}
}
async closeMicrophone() {
try {
await this._tuiCallEngine.closeMicrophone(), ne(!1, l.AUDIO);
} catch (A) {
console.error(`${l.PREFIX}closeMicrophone failed, error: ${A}.`);
}
}
unMuteSpeaker() {
var A, e;
try {
const t = (e = (A = this._tuiCallEngine) == null ? void 0 : A.getTRTCCloudInstance) == null ? void 0 : e.call(A);
t && (t.muteAllRemoteAudio(!1), M.update(u.CALL, l.IS_MUTE_SPEAKER, !1));
} catch (t) {
console.error(`${l.PREFIX}unMuteSpeaker failed, error: ${t}.`);
}
}
muteSpeaker() {
var A, e;
try {
const t = (e = (A = this._tuiCallEngine) == null ? void 0 : A.getTRTCCloudInstance) == null ? void 0 : e.call(A);
t && (t.muteAllRemoteAudio(!0), M.update(u.CALL, l.IS_MUTE_SPEAKER, !0));
} catch (t) {
console.error(`${l.PREFIX}muteSpeaker failed, error: ${t}.`);
}
}
switchScreen(A) {
A && M.update(u.CALL, l.BIG_SCREEN_USER_ID, A);
}
async switchCallMediaType() {
var A, e;
try {
const t = M.getData(u.CALL, l.CALL_MEDIA_TYPE);
if (t === _.AUDIO) {
console.warn(`${l.PREFIX}switchCallMediaType failed, ${t} not support.`);
return;
}
const o = await this._tuiCallEngine.switchCallMediaType(_.AUDIO);
(o == null ? void 0 : o.code) === 0 && ((e = this._chatCombine) == null || e.callTUIService({ message: (A = o == null ? void 0 : o.data) == null ? void 0 : A.message })), M.update(u.CALL, l.CALL_MEDIA_TYPE, _.AUDIO);
const s = M.getData(u.CALL, l.IS_GROUP) ? fA.CALLING_GROUP_VIDEO : fA.CALLING_C2C_VIDEO, c = Ge();
this.statusChanged && this.statusChanged({ oldStatus: s, newStatus: c });
} catch (t) {
console.error(`${l.PREFIX}switchCallMediaType failed, error: ${t}.`);
}
}
async switchCamera() {
const e = M.getData(u.CALL, l.CAMERA_POSITION) === ie.BACK ? ie.FRONT : ie.BACK;
try {
await this._tuiCallEngine.switchCamera(e), M.update(u.CALL, l.CAMERA_POSITION, e);
} catch (t) {
console.error(`${l.PREFIX}_switchCamera failed, error: ${t}.`);
}
}
async setBlurBackground(A) {
try {
await this._tuiCallEngine.setBlurBackground(A ? Wo : 0), M.update(u.CALL, l.ENABLE_VIRTUAL_BACKGROUND, A);
} catch (e) {
console.error(`${l.PREFIX}_setBlurBackground failed, error: ${e}.`);
}
}
async switchDevice(A) {
try {
await this._tuiCallEngine.switchDevice(A);
} catch (e) {
console.error(`${l.PREFIX}_switchDevice failed, error: ${e}.`);
}
}
async getDeviceList(A) {
try {
return await this._tuiCallEngine.getDeviceList(A);
} catch (e) {
this._handleCallError(e, "call");
}
}
// ==========================【TUICallEngine 事件处理】==========================
_addListenTuiCallEngineEvent() {
this._engineEventHandler.addListenTuiCallEngineEvent();
}
_removeListenTuiCallEngineEvent() {
this._engineEventHandler.removeListenTuiCallEngineEvent();
}
setCallback(A) {
const { beforeCalling: e, afterCalling: t, onMinimized: o, onMessageSentByMe: i, kickedOut: s, statusChanged: c } = A;
e && (this.beforeCalling = e), t && (this.afterCalling = t), o && (this.onMinimized = o), i && (this.onMessageSentByMe = i), s && (this.kickedOut = s), c && (this.statusChanged = c);
}
toggleMinimize() {
const A = M.getData(u.CALL, l.IS_MINIMIZED);
M.update(u.CALL, l.IS_MINIMIZED, !A), console.log(`${l.PREFIX}toggleMinimize: ${A} -> ${!A}.`), this.onMinimized && this.onMinimized(A, !A);
}
executeExternalBeforeCalling() {
this.beforeCalling && this.beforeCalling();
}
executeExternalAfterCalling() {
this.afterCalling && this.afterCalling();
}
setVideoDisplayMode(A) {
M.update(u.CALL, l.DISPLAY_MODE, A);
}
async setVideoResolution(A) {
var e;
try {
if (!A)
return;
M.update(u.CALL, l.VIDEO_RESOLUTION, A), await ((e = this._tuiCallEngine) == null ? void 0 : e.setVideoQuality(A));
} catch (t) {
console.warn(`${l.PREFIX}setVideoResolution failed, error: ${t}.`);
}
}
// 通话时长更新
startTimer() {
this._timerId === -1 && (this._startTimeStamp = dt(), this._timerId = Ke.run(l.TIMEOUT, this._updateCallDuration.bind(this), { delay: 1e3 }));
}
// =========================【private methods for service use】=========================
// 处理 “呼叫” 抛出的异常
_handleCallError(A, e) {
if (this._permissionCheckTimer && clearInterval(this._permissionCheckTimer), !qt(A))
throw Mt(A, _.AUDIO, this._tuiCallEngine), console.error(`${l.PREFIX}${e} failed, error: ${A}.`), this._resetCallStore(), A;
}
async _updateCallStoreBeforeCall(A, e, t) {
const o = t || M.getData(u.CALL, l.IS_MINIMIZED) ? DA.CALLER_GROUP_CALLING_MSG : DA.CALLER_CALLING_MSG;
let i = {
[l.CALL_MEDIA_TYPE]: A,
[l.CALL_ROLE]: gA.CALLER,
[l.REMOTE_USER_INFO_LIST]: e,
[l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST]: e,
[l.IS_GROUP]: !!t,
[l.CALL_TIPS]: o,
[l.GROUP_ID]: t
};
M.updateStore({ ...i, [l.CALL_STATUS]: x.CALLING }, u.CALL), this.statusChanged && this.statusChanged({
oldStatus: fA.IDLE,
newStatus: t ? fA.DIALING_GROUP : fA.DIALING_C2C
}), gt(this._tuiCallEngine);
const s = await Ve(e.map((c) => c.userId), this.getTim());
s.length > 0 && (M.update(u.CALL, l.REMOTE_USER_INFO_LIST, s), M.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, s));
}
async _updateCallStoreAfterCall(A, e) {
var t, o;
if (e) {
M.update(u.CALL, l.IS_CLICKABLE, !0), ga(e == null ? void 0 : e.roomID, e == null ? void 0 : e.strRoomID);
const i = M.getData(u.CALL, l.CALL_MEDIA_TYPE);
if (e.code === 0) {
(o = this._chatCombine) == null || o.callTUIService({ message: (t = e == null ? void 0 : e.data) == null ? void 0 : t.message });
try {
await this._tuiCallEngine.setVideoQuality(M.getData(u.CALL, l.VIDEO_RESOLUTION));
} catch (r) {
console.warn(`${l.PREFIX}setVideoQuality failed, error: ${r}.`);
}
} else {
this._resetCallStore();
return;
}
const s = this._getFeatureButtonDefaultState(_A.Camera) === Ce.Close;
i === _.VIDEO && !s && await this.openCamera(l.LOCAL_VIDEO);
const c = M.getData(u.CALL, l.LOCAL_USER_INFO);
M.update(u.CALL, l.LOCAL_USER_INFO, { ...c, isEnter: !0 }), M.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, { ...c, isEnter: !0 }), ne(!0, l.AUDIO);
} else
this._permissionCheckTimer && clearInterval(this._permissionCheckTimer), this._permissionCheckTimer = null, this._resetCallStore();
}
_getFeatureButtonDefaultState(A) {
var t;
const { button: e } = M.getData(u.CALL, l.CUSTOM_UI_CONFIG);
return (t = e == null ? void 0 : e[A]) == null ? void 0 : t.state;
}
_updateCallDuration() {
const A = Math.round((dt() - this._startTimeStamp) / 1e3), e = Ia(A);
M.update(u.CALL, l.CALL_DURATION, e);
}
_stopTimer() {
this._timerId !== -1 && (Ke.clearTask(this._timerId), this._timerId = -1);
}
_resetCallStore() {
const A = Ge();
this._stopTimer();
let e = Object.keys(Xe).filter((i) => {
switch (Xe[i]) {
case l.CALL_STATUS:
case l.LANGUAGE:
case l.IS_GROUP:
case l.DISPLAY_MODE:
case l.VIDEO_RESOLUTION:
case l.ENABLE_FLOAT_WINDOW:
case l.LOCAL_USER_INFO:
case l.IS_SHOW_ENABLE_VIRTUAL_BACKGROUND:
case l.LOCAL_USER_INFO_EXCLUDE_VOLUMN:
return !1;
default:
return !0;
}
});
e = e.map((i) => Xe[i]), M.reset(u.CALL, e), M.getData(u.CALL, l.CALL_STATUS) !== x.IDLE && M.reset(u.CALL, [l.CALL_STATUS], !0), M.reset(u.CALL, [l.IS_MINIMIZED], !0), M.reset(u.CALL, [l.IS_EAR_PHONE], !0), M.reset(u.CALL, [l.ENABLE_VIRTUAL_BACKGROUND], !0), M.reset(u.CALL, [l.IS_MUTE_SPEAKER], !0), M.update(u.CALL, l.LOCAL_USER_INFO, {
...M.getData(u.CALL, l.LOCAL_USER_INFO),
isVideoAvailable: !1,
isAudioAvailable: !1
}), M.update(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN, {
...M.getData(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN),
isVideoAvailable: !1,
isAudioAvailable: !1
}), M.update(u.CALL, l.REMOTE_USER_INFO_LIST, []), M.update(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST, []), M.update(u.CALL, l.CAMERA_POSITION, ie.FRONT);
const o = Ge();
A !== o && this.statusChanged && this.statusChanged({ oldStatus: A, newStatus: o });
}
// =========================【Calling the Chat SDK APi】=========================
// 获取群成员
async getGroupMemberList(A, e) {
const t = M.getData(u.CALL, l.GROUP_ID);
return await Nn(t, this.getTim(), A, e);
}
// 获取群信息
async getGroupProfile() {
const A = M.getData(u.CALL, l.GROUP_ID);
return await Cn(A, this.getTim());
}
_watchTUIStore() {
M == null || M.watch(u.CALL, {
[l.CALL_STATUS]: this._handleCallStatusChange
});
}
_unwatchTUIStore() {
M == null || M.unwatch(u.CALL, {
[l.CALL_STATUS]: this._handleCallStatusChange
});
}
// =========================【融合 chat 】=========================
bindTUICore(A) {
this._TUICore = A;
}
// =========================【set、get methods】=========================
getTim() {
var A, e;
return this._tim ? this._tim : this._tuiCallEngine ? ((A = this._tuiCallEngine) == null ? void 0 : A.tim) || ((e = this._tuiCallEngine) == null ? void 0 : e.getTim()) : (console.warn(`${l.PREFIX}getTim warning: _tuiCallEngine Instance is not available.`), null);
}
setIsFromChat(A) {
this._isFromChat = A;
}
setCurrentGroupId(A) {
this._currentGroupId = A;
}
getCurrentGroupId() {
return this._currentGroupId;
}
setDefaultOfflinePushInfo(A) {
this._offlinePushInfo = A;
}
getDefaultOfflinePushInfo() {
const A = M.getData(u.CALL, l.LOCAL_USER_INFO);
return this._offlinePushInfo ? this._offlinePushInfo : {
title: (A == null ? void 0 : A.displayUserInfo) || "",
description: de("you have a new call")
};
}
async getCallMessage(A) {
return await this._chatCombine.getCallKitMessage(A, this.getTim());
}
};
aA([
NA(),
bA(UA.init)
], tA.prototype, "init", 1);
aA([
NA(),
bA(UA.call),
tt({ engineInstance: !0 })
], tA.prototype, "call", 1);
aA([
NA(),
bA(UA.groupCall),
tt({ engineInstance: !0 })
], tA.prototype, "groupCall", 1);
aA([
NA(),
bA(UA.inviteUser),
tt({ engineInstance: !0 })
], tA.prototype, "inviteUser", 1);
aA([
NA(),
bA(UA.joinInGroupCall),
tt({ engineInstance: !0 })
], tA.prototype, "joinInGroupCall", 1);
aA([
bA(UA.setLanguage)
], tA.prototype, "setLanguage", 1);
aA([
bA(UA.enableFloatWindow)
], tA.prototype, "enableFloatWindow", 1);
aA([
bA(UA.setSelfInfo)
], tA.prototype, "setSelfInfo", 1);
aA([
bA(UA.enableAIVoice)
], tA.prototype, "enableAIVoice", 1);
aA([
bA(UA.setCallingBell)
], tA.prototype, "setCallingBell", 1);
aA([
bA(UA.enableMuteMode)
], tA.prototype, "enableMuteMode", 1);
aA([
NA()
], tA.prototype, "accept", 1);
aA([
NA()
], tA.prototype, "hangup", 1);
aA([
NA()
], tA.prototype, "reject", 1);
aA([
NA()
], tA.prototype, "openCamera", 1);
aA([
NA()
], tA.prototype, "closeCamera", 1);
aA([
NA()
], tA.prototype, "openMicrophone", 1);
aA([
NA()
], tA.prototype, "closeMicrophone", 1);
aA([
NA()
], tA.prototype, "unMuteSpeaker", 1);
aA([
NA()
], tA.prototype, "muteSpeaker", 1);
aA([
NA()
], tA.prototype, "switchScreen", 1);
aA([
NA()
], tA.prototype, "switchCallMediaType", 1);
aA([
NA()
], tA.prototype, "switchCamera", 1);
aA([
NA()
], tA.prototype, "setBlurBackground", 1);
aA([
NA()
], tA.prototype, "switchDevice", 1);
aA([
bA(UA.setVideoDisplayMode)
], tA.prototype, "setVideoDisplayMode", 1);
aA([
bA(UA.setVideoResolution)
], tA.prototype, "setVideoResolution", 1);
let bn = tA;
const W = bn.getInstance(), pa = "CallInfoContextKey", Na = "CallerUserInfoContextKey", Ca = "UserInfoExcludeVolumeContextKey", La = "FocusContextKey", ha = "ButtonPanelContextKey", Sa = "FloatWindowContextKey", ya = "IsClickableContextKey", fa = "PopoverContextKey", ma = "CustomUIConfigContextKey", Ta = "translateContextKey";
function Un() {
return zA(Na);
}
function rA() {
return zA(pa);
}
function ot(a) {
const A = L([]), e = L(""), t = (i) => {
var s, c, r;
switch (a) {
case mA.CAMERA:
A.value = (i == null ? void 0 : i.cameraList) || [], e.value = ((s = i == null ? void 0 : i.currentCamera) == null ? void 0 : s.deviceId) || "";
break;
case mA.MICROPHONE:
A.value = (i == null ? void 0 : i.microphoneList) || [], e.value = ((c = i == null ? void 0 : i.currentMicrophone) == null ? void 0 : c.deviceId) || "";
break;
case mA.SPEAKER:
A.value = (i == null ? void 0 : i.speakerList) || [], e.value = ((r = i == null ? void 0 : i.currentSpeaker) == null ? void 0 : r.deviceId) || "";
break;
}
}, o = (i) => {
e.value = i;
};
return yA(() => {
M.watch(
u.CALL,
{
[l.DEVICE_LIST]: t
},
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, {
[l.DEVICE_LIST]: t
});
}), [{ deviceList: A, currentDeviceId: e }, { updateCurrentDeviceId: o }];
}
const Zt = (a) => typeof a == "object" && a !== null, va = (a, A) => {
if (!Zt(a) || !Zt(A))
return a === A;
if (a === A)
return !0;
const e = Object.keys(a), t = Object.keys(A);
if (e.length !== t.length)
return !1;
for (let o in a)
if (!va(a[o], A[o]))
return !1;
return !0;
};
function On(a) {
const A = document.getElementById(a);
!document.fullscreenElement && A ? A.requestFullscreen().catch((e) => {
console.error(`Error attempting to enable fullscreen mode: ${e.message} (${e.name})`);
}) : document.exitFullscreen();
}
function nt(a) {
if (typeof a != "object" || a === null)
return a;
let A = Array.isArray(a) ? [] : {};
for (let e in a)
a.hasOwnProperty(e) && (A[e] = nt(a[e]));
return A;
}
const Vn = 500;
function wt(a, A) {
if (typeof a != "function" || A != null && typeof A != "function")
throw new TypeError("Expected a function");
const e = function(...t) {
const o = A ? A.apply(this, t) : t[0], i = e.cache;
if (i.has(o))
return i.get(o);
const s = a.apply(this, t);
return e.cache = i.set(o, s) || i, s;
};
return e.cache = new (wt.Cache || Map)(), e;
}
wt.Cache = Map;
function Pn(a) {
const A = wt(a, (e) => {
const { cache: t } = A;
return t.size === Vn && t.clear(), e;
});
return A;
}
const xn = ".".charCodeAt(0), Bn = /\\(\\)?/g, Rn = RegExp(
// Match anything that isn't a dot or bracket.
`[^.[\\]]+|\\[(?:([^"'][^[]*)|(["'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))`,
"g"
), Da = Pn((a) => {
const A = [];
return a.charCodeAt(0) === xn && A.push(""), a.replace(Rn, (e, t, o, i) => {
let s = e;
o ? s = i.replace(Bn, "$1") : t && (s = t.trim()), A.push(s);
}), A;
});
function le(a, A, e) {
if (typeof a != "object" || !A)
return;
const t = Da(A);
let o = a;
for (let i = 0; i < t.length; i++) {
if (o == null)
return;
const s = t[i];
i !== t.length - 1 ? o = o == null ? void 0 : o[s] : Object.assign(o, { [s]: e });
}
}
function Te(a, A, e) {
if (typeof a != "object")
return;
const t = Da(A);
let o = a;
for (let i = 0; i < t.length; i++) {
if (o == null)
return;
const s = t[i];
i !== t.length - 1 ? o = o == null ? void 0 : o[s] : Array.isArray(o) && o.splice(s, 0, e);
}
}
function wa(a) {
return a == null || typeof a == "string" && a.trim().length === 0 ? !0 : Array.isArray(a) || typeof a == "object" ? Object.keys(a).length === 0 : !1;
}
function St(a, A, e, t, o) {
Object.keys(a).forEach((i) => {
const s = a[i], c = wa(e) ? i : `${e}.${i}`;
if (typeof s == "object")
if (Array.isArray(s))
for (let r = 0; r < s.length; r++) {
const d = `${c}.${r}`;
St(s[r], A, d, t, o);
}
else
St(s, A, c, t, o);
else if (A(s)) {
const r = typeof o == "function" ? o({ key: s, value: c }) : c;
t.push(r);
}
});
}
function Ea() {
const a = L(), A = L(M.getData(u.CALL, l.REMOTE_USER_INFO_LIST)), e = (i) => {
(O.isWeChat ? i.enableMic : i.isAudioAvailable) && (a.value = { ...a.value, localVideo: i.volume });
}, t = (i) => {
const s = {};
(i.length !== A.value.length || !va(i, A.value)) && (A.value = i, A.value.forEach((c) => {
if (O.isWeChat ? c.hasAudio : c.isAudioAvailable) {
const d = O.isWeChat ? c.userID : c.domId;
s[d] = c.volume;
}
}), a.value = { ...a.value, ...s });
};
let o = {
[l.LOCAL_USER_INFO]: e,
[l.REMOTE_USER_INFO_LIST]: t
};
return O.isUniPlatform && (o = {
[l.PUSHER]: e,
[l.PLAYER]: t
}), yA(() => {
M.watch(
u.CALL,
o,
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, o);
}), a;
}
function Gn() {
const a = L(""), A = L(!0), e = L(0), t = (o) => {
typeof o == "object" ? (a.value = o.text, e.value = o.duration || 0) : a.value = o;
};
return yA(() => {
M.watch(
u.CALL,
{
[l.CALL_TIPS]: t
},
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(
u.CALL,
{
[l.CALL_TIPS]: t
}
);
}), { tip: a, show: A, duration: e };
}
function kn() {
const a = L(M.getData(u.CALL, l.NETWORK_STATUS)), A = (e) => {
a.value = e;
};
return yA(() => {
M.watch(
u.CALL,
{
[l.NETWORK_STATUS]: A
},
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, {
[l.NETWORK_STATUS]: A
});
}), { netWorkQualityList: a };
}
function ja() {
const a = L(M.getData(u.CALL, l.PLAYER)), A = (t) => {
a.value = t == null ? void 0 : t.map((o) => {
const { userID: i, hasVideo: s, hasAudio: c } = o;
return { userID: i, hasVideo: s, hasAudio: c };
});
}, e = {
[l.PLAYER]: A
};
return yA(() => {
M.watch(
u.CALL,
e,
{ notifyRangeWhenWatch: l.MYSELF }
);
}), LA(() => {
M.unwatch(u.CALL, e);
}), a;
}
function OA() {
return zA(Ca);
}
function Et() {
const a = L(M.getData(u.CALL, l.CALL_DURATION)), A = (e) => {
a.value = e;
};
return yA(() => {
M.watch(
u.CALL,
{
[l.CALL_DURATION]: A
},
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(
u.CALL,
{
[l.CALL_DURATION]: A
}
);
}), { callDuration: a };
}
function Pe() {
return zA(ha, { status: L("open") });
}
function za() {
return zA(La, L("open"));
}
function GA() {
return zA(Sa);
}
function qn() {
return zA(ya);
}
function it() {
return zA(fa);
}
const Wn = (a, A) => {
const e = [{
i: 0,
x: 0,
y: 0,
w: A,
h: A
}];
for (let t = 1; t < a; t++) {
const o = e[t - 1].x + A === 12;
e[t] = {
i: t,
x: e[t - 1].x + A === 12 ? 0 : e[t - 1].x + A,
y: e[t - 1].y + (o ? A : 0),
w: A,
h: A
};
}
return a === 3 && (e[a - 1].x += 3), a > 3 && O.isPC && a % 3 === 2 && (e[a - 1].x += 2, e[a - 2].x += 2), e;
};
function Xn(a, A) {
const { isFloatWindow: e } = G(GA()), t = L();
return cA([a, A, e], () => {
if (e.value) {
const d = [];
for (let g = 0; g < A.value; g++)
d[g] = {
i: g,
x: 0,
y: 0,
w: 12,
h: 12
};
t.value = d;
return;
}
const o = Object.keys(Array.from({ length: A.value })), i = A.value <= 4 ? 6 : 4, s = Wn(A.value, i);
t.value = s;
let c, r;
if (a.value !== null) {
if (o.length < 5) {
const d = o.concat();
d.splice(a.value, 1), d.unshift(a.value);
} else
r = a.value % 3, c = Math.floor(a.value / 3);
if (o.length < 5) {
const d = s.findIndex((g) => g.i === a.value);
if (d !== -1) {
const g = s[0];
s[0] = s[d], s[d] = g;
for (let N = 0; N < s.length; N++) {
const C = s[N];
N === 0 ? (C.w += 6, C.h += 6, C.x = 0, C.y = 0) : (C.x = (N - 1) * 4, C.y = 12, C.w = 4, C.h = 4);
}
}
} else {
let d;
r === 0 ? (s[a.value + 1] && (s[a.value + 1].x += 4), s[a.value + 2] && (s[a.value + 2].y += 4), d = {
i: a.value,
x: 0,
y: c * 4,
w: 8,
h: 8
}) : r === 2 ? (d = {
i: a.value,
x: 4,
y: c * 4,
w: 8,
h: 8
}, s[a.value - 1].x = 0, s[a.value - 1].y += 4) : r === 1 && (d = {
i: a.value,
x: 4,
y: c * 4,
w: 8,
h: 8
}, s[a.value + 1] && (s[a.value + 1].x = 0, s[a.value + 1].y += 4));
const g = 3 - r;
for (let N = a.value + g; N < s.length; N++) {
const C = s[N];
C.y += 4;
}
s[a.value] = d;
}
t.value = s;
}
}, {
immediate: !0
}), t;
}
function xe() {
return zA(ma);
}
const Qn = {
calling: [[
{ name: "switchCamera", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "virtualBackground" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
], [
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{}
]],
accept: [[
{ name: "switchCamera", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "virtualBackground" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
], [
{ name: "reject", customStyle: { paddingTop: "6vh", justifyContent: "center" } },
{},
{ name: "accept", customStyle: { paddingTop: "6vh", justifyContent: "center" } }
]],
connected: [[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
], [
{ name: "virtualBackground", customStyle: { justifyContent: "center", paddingTop: "6vh" }, props: {} },
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{ name: "switchCamera", customStyle: { justifyContent: "center", paddingTop: "6vh" }, props: {} }
]]
}, Fn = {
singleCall: {
video: {
calling: [
[],
[
{},
{ name: "hangup" },
{}
]
],
accept: [
[],
[
{ name: "reject", customStyle: { justifyContent: "flex-end" } },
{},
{ name: "accept", customStyle: { justifyContent: "flex-start" } }
]
],
connected: [
[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
],
[
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{ name: "switchCamera", customStyle: { justifyContent: "center", paddingTop: "6vh" }, props: {} }
]
]
},
audio: {
calling: [
[],
[
{},
{ name: "hangup" },
{}
]
],
accept: [
[],
[
{ name: "reject", customStyle: { justifyContent: "flex-end" } },
{},
{ name: "accept", customStyle: { justifyContent: "flex-start" } }
]
],
connected: [
[],
[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "hangup" },
{ name: "speaker", customStyle: { justifyContent: "flex-end" } }
]
]
}
},
groupCall: {
video: {
calling: [[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
], [
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{}
]],
accept: [
[],
[
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
],
[
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{}
]
],
close_calling: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "camera", props: {} },
{ name: "hangup" }
]
],
close_connected: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "camera", props: {} },
{ name: "hangup" }
]
]
},
audio: {
calling: [[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
], [
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{}
]],
accept: [
[],
[
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "microphone", customStyle: { justifyContent: "flex-start" }, props: {} },
{ name: "speaker" },
{ name: "camera", customStyle: { justifyContent: "flex-end" }, props: {} }
],
[
{},
{ name: "hangup", customStyle: { paddingTop: "6vh" } },
{}
]
],
close_calling: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "camera", props: {} },
{ name: "hangup" }
]
],
close_connected: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "camera", props: {} },
{ name: "hangup" }
]
]
}
}
}, Zn = {
singleCall: {
video: {
calling: [
[
{ name: "camera", props: {} },
{ name: "microphone", props: {} },
{ name: "hangup" }
]
],
accept: [
[
{ name: "camera", props: {} },
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "camera", props: {} },
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "hangup" }
]
]
},
audio: {
calling: [
[
{ name: "microphone", props: {} },
{ name: "hangup" }
]
],
accept: [
[
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "hangup" }
]
]
}
},
groupCall: {
video: {
calling: [[
{ name: "camera", props: {} },
{ name: "microphone", props: {} },
{ name: "inviteUser", props: {} },
{ name: "hangup" }
]],
accept: [
[
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "camera", props: {} },
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "inviteUser", props: {} },
{ name: "hangup" }
]
]
},
audio: {
calling: [
[
{ name: "microphone", props: {} },
{ name: "hangup" }
]
],
accept: [
[
{ name: "reject" },
{ name: "accept" }
]
],
connected: [
[
{ name: "microphone", props: {} },
{ name: "speaker" },
{ name: "inviteUser", props: {} },
{ name: "hangup" }
]
]
}
}
}, Yt = {
pc: Zn,
mobile: Fn
};
function ba(a) {
const A = nt(a);
return le(A, "mobile.singleCall.video", Qn), Te(A, "pc.singleCall.video.calling[0][2]", { name: "virtualBackground", props: {} }), Te(A, "pc.singleCall.video.accept[0][1]", { name: "virtualBackground", props: {} }), Te(A, "pc.singleCall.video.connected[0][3]", { name: "virtualBackground", props: {} }), Te(A, "pc.groupCall.video.calling[0][3]", { name: "virtualBackground", props: {} }), Te(A, "pc.groupCall.video.connected[0][4]", { name: "virtualBackground", props: {} }), A;
}
function Yn(a, A, e) {
let t = nt(a);
return A ? (le(t, "mobile.singleCall.video.connected[1][2].props.show", !0), e && ba(t)) : (le(t, "mobile.singleCall.video.connected[1][2].props.show", !1), e && (le(t, "mobile.singleCall.video.connected[1][0].props.show", !1), le(t, "pc.singleCall.video.connected[0][3].props.show", !1), le(t, "pc.groupCall.video.connected[0][4].props.show", !1))), t;
}
function Hn() {
const { isShowEnableVirtualBackground: a, callStatus: A } = G(rA()), e = xe(), { localUserInfoExcludeVolume: t } = G(OA()), o = f(() => (t == null ? void 0 : t.value.isVideoAvailable) || !1), i = f(() => a.value && !O.isH5), s = L([]);
return cA([e, a, o], () => {
let c = nt(Yt);
i.value && (c = ba(Yt)), A.value === x.CONNECTED && (c = Yn(c, o.value, i.value));
const { button: r } = e.value, d = [];
function g(C) {
return Object.keys(r).includes(C);
}
function N({ key: C, value: p }) {
var k;
const y = p.split(".");
let m = y.slice(0, y.length - 1);
const D = y.slice(0, y.length - 2);
if (D[D.length - 1] === "0")
for (let q = 0; q < 3; q++) {
let b = D.slice();
b.push(q), b.push("customStyle"), b.push("justifyContent"), b = b.join("."), d.push({ path: b, value: "center" });
}
return m.push("props"), m.push("show"), m = m.join("."), {
path: m,
value: (k = r == null ? void 0 : r[C]) == null ? void 0 : k.show
};
}
St(c, g, "", d, N), d == null || d.forEach((C) => {
le(c, C.path, C.value);
}), s.value = c;
}, {
immediate: !0
}), s;
}
function Ua() {
const a = xe(), A = L(a.value.viewBackground);
return cA(a, () => {
A.value = a.value.viewBackground;
}), A;
}
function Kn() {
const a = L(M.getData(u.CALL, l.ROOM_ID)), A = L(M.getData(u.CALL, l.ROOM_ID_TYPE)), e = L(M.getData(u.CALL, l.GROUP_ID)), t = L(M.getData(u.CALL, l.CALL_MEDIA_TYPE)), o = L(M.getData(u.CALL, l.GROUP_CALL_MEMBERS)), i = L(M.getData(u.CALL, l.CALL_STATUS)), s = (p) => {
a.value = p;
}, c = (p) => {
e.value = p;
}, r = (p) => {
t.value = p;
}, d = (p) => {
o.value = p;
}, g = (p) => {
i.value = p;
}, N = (p) => {
A.value = p;
}, C = {
[l.ROOM_ID]: s,
[l.GROUP_ID]: c,
[l.CALL_MEDIA_TYPE]: r,
[l.GROUP_CALL_MEMBERS]: d,
[l.CALL_STATUS]: g,
[l.ROOM_ID_TYPE]: N
};
return yA(() => {
M.watch(
u.CALL,
C,
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, C);
}), {
roomId: a,
roomIdType: A,
groupId: e,
callMediaType: t,
groupCallMembers: o,
callStatus: i
};
}
function uA() {
return zA(Ta, L(ln));
}
const Jn = {
customStyle: {
type: Object
},
customClass: {
type: String
}
}, _n = ["start", "center", "end", "space-around", "space-between", "space-evenly"], $n = ["top", "middle", "bottom"], Ai = {
gutter: {
type: Number,
default: 0
},
justify: {
type: String,
values: _n,
default: "start"
},
align: {
type: String,
values: $n,
default: "top"
},
customStyle: {
type: Object,
default: () => {
}
}
};
function iA(...a) {
const A = [], e = {}.hasOwnProperty;
for (let t = 0; t < a.length; t++) {
const o = a[t];
if (!o)
continue;
const i = typeof o;
if (i === "string" || i === "number")
A.push(o);
else if (Array.isArray(o)) {
if (o.length) {
const s = iA.apply(null, o);
s && A.push(s);
}
} else if (i === "object") {
if (o.toString !== Object.prototype.toString && !o.toString.toString().includes("[native code]")) {
A.push(o.toString());
continue;
}
for (const s in o)
e.call(o, s) && o[s] && A.push(s);
}
}
return A.join(" ");
}
const ce = typeof wx < "u" && typeof wx.getSystemInfoSync == "function" && !!wx.getSystemInfoSync().fontSizeSetting, ei = typeof uni < "u" && typeof uni > "u", yt = ce || ei, ti = typeof uni < "u", Oa = function() {
return (typeof uni < "u" || typeof window < "u") && !yt;
}();
(function() {
return ce ? wx : ti ? uni : window;
})();
const Ae = Oa && window && window.navigator && window.navigator.userAgent || "", ai = /Android/i.test(Ae), oi = /(?:Windows Phone)/.test(Ae), ni = /(?:SymbianOS)/.test(Ae), ii = /iPad/i.test(Ae) || /iPhone/i.test(Ae) || /iPod/i.test(Ae), Va = ai || oi || ni || ii, Ie = Oa && !Va;
Ie && Ae.includes("Windows NT");
Ie && Ae.includes("Mac");
function Je(a) {
const A = {};
for (const e in a)
Object.prototype.hasOwnProperty.call(a, e) && a[e] !== void 0 && (A[e] = a[e]);
return A;
}
function li() {
let a = "unknow";
return typeof ct == "string" && (a = ct.split(".")[0]), { version: ct, majorVersion: a };
}
function Ht(a, A) {
const { key: e, value: t } = A;
return a.find((o) => o[e] === t);
}
const Pa = "RowContextKey", F = "tk", ze = {
SUCCESS: "success",
INFO: "info",
WARNING: "warning",
ERROR: "error"
}, si = {
options: {
virtualHost: !0
}
}, se = /* @__PURE__ */ z({
...si,
__name: "Row",
props: Ai,
setup(a) {
const A = a, e = f(() => A.gutter);
EA(Pa, {
gutter: e
});
const t = iA([
`${F}-row`,
`${F}-justify-${A.justify}`,
`${F}-align-${A.align}`
]);
return (o, i) => (I(), h("div", {
class: V(n(t)),
style: AA([o.customStyle])
}, [
H(o.$slots, "default")
], 6));
}
});
const ri = ["start", "center", "end", "space-around", "space-between", "space-evenly"], ci = ["top", "middle", "bottom"], ui = {
span: {
type: Number,
default: 24
},
justify: {
type: String,
values: ri,
default: "start"
},
align: {
type: String,
values: ci,
default: "middle"
},
offset: {
type: Number,
default: 0
}
}, di = {
options: {
virtualHost: !0
}
}, SA = /* @__PURE__ */ z({
...di,
__name: "Col",
props: ui,
setup(a) {
const A = a, { gutter: e } = zA(Pa, { gutter: f(() => 0) }), t = iA([
`${F}-col`,
`${F}-justify-${A.justify}`,
`${F}-align-${A.align}`
]), o = f(() => `${A.span / 24 * 100}%`), i = f(() => `${A.offset / 24 * 100}%`), s = f(() => `${e.value / 2}px`), c = s;
return (r, d) => (I(), h("div", {
class: V(n(t)),
style: AA({
width: n(o),
marginLeft: n(i),
paddingLeft: n(s),
paddingRight: n(c)
})
}, [
H(r.$slots, "default")
], 6));
}
});
const Ii = {
width: {
type: String,
default: "40px"
},
height: {
type: String,
default: "40px"
},
color: {
type: String
}
}, gi = {
options: {
virtualHost: !0
}
}, Mi = /* @__PURE__ */ z({
...gi,
__name: "Dot",
props: Ii,
setup(a) {
const A = a, e = `${F}-loading_dot-container`, t = `${F}-loading_dot`, o = f(() => ({
width: A.width,
height: A.height
})), i = f(() => {
const s = {};
return A.color && (s.backgroundColor = A.color), s;
});
return (s, c) => (I(), h("div", {
class: V(e),
style: AA([n(o)])
}, [
T("div", {
class: V(t),
style: AA([n(i)])
}, null, 4),
T("div", {
class: V(t),
style: AA([n(i)])
}, null, 4),
T("div", {
class: V(t),
style: AA([n(i)])
}, null, 4)
], 4));
}
});
const pi = {
width: {
type: String,
default: "40px"
},
height: {
type: String,
default: "40px"
},
color: {
type: String
}
}, Ni = {
options: {
virtualHost: !0
}
}, Ci = /* @__PURE__ */ z({
...Ni,
__name: "Circle",
props: pi,
setup(a) {
const A = a, e = f(() => {
const o = {
width: A.width,
height: A.height
};
return A.color && (o["--tk-loading-primary-color"] = A.color), o;
}), t = `${F}-loading_circle-container`;
return (o, i) => (I(), h("div", {
class: V(t),
style: AA([n(e)])
}, null, 4));
}
});
const Li = ["circle", "dot"], hi = ["row", "column"], Si = {
mode: {
type: String,
values: Li,
default: "circle"
},
loadingWidth: {
type: String,
default: "40px"
},
loadingHeight: {
type: String,
default: "40px"
},
color: {
type: String
},
text: {
type: String
},
layout: {
type: String,
values: hi,
default: "column"
}
}, yi = {
options: {
virtualHost: !0
}
}, jt = /* @__PURE__ */ z({
...yi,
__name: "Loading",
props: Si,
setup(a) {
const A = a, e = `${F}-loading ${F}-loading--${A.mode}`, t = `${F}-loading_text`, o = f(() => ({
flexDirection: A.layout
}));
return (i, s) => (I(), h("div", {
class: V(e),
style: AA([n(o)])
}, [
i.mode === "dot" ? (I(), E(Mi, {
key: 0,
width: i.loadingWidth,
height: i.loadingHeight,
color: i.color
}, null, 8, ["width", "height", "color"])) : (I(), E(Ci, {
key: 1,
width: i.loadingWidth,
height: i.loadingHeight,
color: i.color
}, null, 8, ["width", "height", "color"])),
i.text ? (I(), h("div", {
key: 2,
class: V(t)
}, B(i.text), 1)) : w("", !0)
], 4));
}
});
const fi = {
src: {
type: String
},
size: {
type: Number,
default: 20
}
}, mi = ["fill", "contain", "cover"], Kt = {
fill: "scaleToFill",
contain: "aspectFit",
cover: "aspectFill"
}, Ti = {
width: {
type: String,
default: "320px"
},
height: {
type: String,
default: "240px"
},
src: {
type: String
},
fit: {
type: String,
values: mi,
default: "fill"
},
customStyle: {
type: Object
},
defaultSrc: {
type: String
}
}, vi = {
error: (a) => a
}, Di = ["src"], wi = ["src", "mode"], Ei = {
options: {
virtualHost: !0
}
}, TA = /* @__PURE__ */ z({
...Ei,
__name: "TKImage",
props: Ti,
emits: vi,
setup(a, { emit: A }) {
const e = a, t = A, o = L(!1), i = L(e.src);
cA(() => e.src, () => {
o.value = !1, i.value = e.src;
});
const s = f(() => iA([`${F}-image`])), c = f(() => ({
width: e.width,
height: e.height,
...e.customStyle
})), r = f(() => iA([
`${F}-image_inner`
])), d = f(() => ce ? Kt[e.fit] || Kt.cover : e.fit);
function g(N) {
o.value = !0, i.value = e.defaultSrc, t("error", N);
}
return (N, C) => (I(), h("div", {
class: V(n(s)),
style: AA([n(c)])
}, [
n(o) && !N.defaultSrc ? H(N.$slots, "error", { key: 0 }) : (I(), h(RA, { key: 1 }, [
n(ce) ? w("", !0) : (I(), h("img", {
key: 0,
class: V(n(r)),
src: n(i),
style: AA({ objectFit: n(d) }),
onError: g
}, null, 46, Di)),
n(ce) ? (I(), h("image", {
key: 1,
class: V(n(r)),
src: n(i),
mode: n(d),
onError: g
}, null, 42, wi)) : w("", !0)
], 64))
], 6));
}
});
const ji = {
options: {
virtualHost: !0
}
}, he = /* @__PURE__ */ z({
...ji,
__name: "Icon",
props: fi,
setup(a) {
const A = a, e = f(() => `${A.size}px`), t = f(() => `${A.size}px`);
return (o, i) => (I(), E(TA, {
src: o.src,
width: n(e),
height: n(t)
}, null, 8, ["src", "width", "height"]));
}
}), zi = ["small", "middle", "large"], bi = ["row", "column"], Ui = ["circle", "round"], Oi = {
iconSrc: {
type: String
},
iconSize: {
type: Number
},
text: {
type: String
},
loading: {
type: Boolean,
default: !1
},
loadingColor: {
type: String,
default: "#fff"
},
loadingWidth: {
type: String,
default: "40px"
},
loadingHeight: {
type: String,
default: "40px"
},
size: {
type: String,
values: zi,
default: "middle"
},
width: {
type: String
},
height: {
type: String
},
color: {
type: String
},
direction: {
type: String,
values: bi,
default: "row"
},
shape: {
type: String,
values: Ui
},
buttonStyle: {
type: Object
},
buttonTextStyle: {
type: Object
}
}, Vi = {
options: {
virtualHost: !0
}
}, wA = /* @__PURE__ */ z({
...Vi,
__name: "Button",
props: Oi,
emits: ["click"],
setup(a, { emit: A }) {
const e = a, t = `${F}-button--content`, o = f(() => ({
width: e.width,
height: e.height,
backgroundColor: e.color,
flexDirection: e.direction,
cursor: Ie ? "pointer" : "auto",
...e.buttonStyle
})), i = iA([
`${F}-button`,
{ [`${F}-${e.shape}`]: e.shape },
`${F}-button--${e.size}`
]), s = A, c = (r) => {
!e.loading && s("click", r);
};
return (r, d) => (I(), h("div", {
style: AA([n(o)]),
class: V(n(i)),
onClick: c
}, [
r.loading ? (I(), E(jt, {
key: 0,
loadingWidth: r.loadingWidth,
loadingHeight: r.loadingHeight,
color: r.loadingColor
}, null, 8, ["loadingWidth", "loadingHeight", "color"])) : w("", !0),
r.iconSrc && !r.loading ? (I(), E(he, {
key: 1,
size: r.iconSize,
src: r.iconSrc
}, null, 8, ["size", "src"])) : w("", !0),
r.text ? (I(), h("div", {
key: 2,
style: AA([r.buttonTextStyle]),
class: V(t)
}, B(r.text), 5)) : w("", !0)
], 6));
}
});
const ft = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTMwIDE2LjA1YzAtMi4yMzUtMS4yMjgtNC4zMy0zLjMxNC01LjEzNUEzMi40MjMgMzIuNDIzIDAgMCAwIDE1IDguNzUxYy00LjEyIDAtOC4wNi43NjYtMTEuNjg1IDIuMTY0QzEuMjI4IDExLjcxOSAwIDEzLjgxNSAwIDE2LjA1MXYzLjU5N2ExLjUgMS41IDAgMCAwIDEuNiAxLjQ5Nmw2LjM3NS0uNDI1YTEuNSAxLjUgMCAwIDAgMS40LTEuNDk2di0zLjAxNGMwLS4zNTMuMjQ1LS42NTkuNTkxLS43MjZBMjYuMzgyIDI2LjM4MiAwIDAgMSAxNSAxNS4wMDFjMS43MjIgMCAzLjQwNC4xNjYgNS4wMzQuNDgyYS43MzYuNzM2IDAgMCAxIC41OTEuNzI2djMuMDE0YTEuNSAxLjUgMCAwIDAgMS40IDEuNDk2bDYuMzc1LjQyNWExLjUgMS41IDAgMCAwIDEuNi0xLjQ5NlYxNi4wNXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=", xa = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguOTE2IDguMmguODVWNC44SDMuOTg0djMuNGg0LjkzM3ptLTcuOS02LjUzM2EuMTUuMTUgMCAwIDEgLjE1LS4xNWgxNi42NjdhLjE1LjE1IDAgMCAxIC4xNS4xNXYxNi42NjZhLjE1LjE1IDAgMCAxLS4xNS4xNUgxLjE2N2EuMTUuMTUgMCAwIDEtLjE1LS4xNVYxLjY2N3ptMjAuMTk4IDMuMzU1YS4xNS4xNSAwIDAgMSAuMDg3LS4xMzZsMy40NjktMS42MThhLjE1LjE1IDAgMCAxIC4yMTMuMTM1djEzLjE5M2EuMTUuMTUgMCAwIDEtLjIxMy4xMzZsLTMuNDctMS42MThhLjE1LjE1IDAgMCAxLS4wODYtLjEzNlY1LjAyMnoiIGZpbGw9IiMyMjI2MkUiIHN0cm9rZT0iIzIyMjYyRSIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIvPjwvc3ZnPg==", Ba = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PG1hc2sgaWQ9ImEiIGZpbGw9IiNmZmYiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOS45NTIgMjMuMzM0aDguODgxYTEgMSAwIDAgMCAxLTFWMTEuNDNMOS45NTIgMjMuMzM0ek0yMS4zNjQgOS41ODVsMS42MjYtMS45NTggMi40Mi0xLjEzYTEgMSAwIDAgMSAxLjQyMy45MDd2MTMuMTkzYTEgMSAwIDAgMS0xLjQyMy45MDZsLTIuOTUyLTEuMzc4LS41MTYtLjI0YTEgMSAwIDAgMS0uNTc4LS45MDdWOS41ODV6bS0zLjUtNC45MThMMi4zNjcgMjMuMzM0aC0uMjAxYTEgMSAwIDAgMS0xLTFWNS42NjdhMSAxIDAgMCAxIDEtMWgxNS42OTZ6TTUuODMzIDExLjM1aDQuMDgydi0xLjdINS44MzN2MS43eiIvPjwvbWFzaz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkuOTUyIDIzLjMzNGg4Ljg4MWExIDEgMCAwIDAgMS0xVjExLjQzTDkuOTUyIDIzLjMzNHpNMjEuMzY0IDkuNTg1bDEuNjI2LTEuOTU4IDIuNDItMS4xM2ExIDEgMCAwIDEgMS40MjMuOTA3djEzLjE5M2ExIDEgMCAwIDEtMS40MjMuOTA2bC0yLjk1Mi0xLjM3OC0uNTE2LS4yNGExIDEgMCAwIDEtLjU3OC0uOTA3VjkuNTg1em0tMy41LTQuOTE4TDIuMzY3IDIzLjMzNGgtLjIwMWExIDEgMCAwIDEtMS0xVjUuNjY3YTEgMSAwIDAgMSAxLTFoMTUuNjk2ek01LjgzMyAxMS4zNWg0LjA4MnYtMS43SDUuODMzdjEuN3oiIGZpbGw9IiNmZmYiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjEiLz48cGF0aCBkPSJtOS45NTIgMjMuMzM0LTEuMzA4LTEuMDg2LTIuMzEzIDIuNzg2aDMuNjJ2LTEuN3ptOS44ODEtMTEuOTA0aDEuN1Y2LjcybC0zLjAwOCAzLjYyNCAxLjMwOCAxLjA4NnptMy4xNTctMy44MDMtLjcyLTEuNTQtLjM0NS4xNjEtLjI0NC4yOTQgMS4zMDkgMS4wODV6bS0xLjYyNiAxLjk1OEwyMC4wNTYgOC41bC0uMzkyLjQ3MnYuNjE0aDEuN3ptNC4wNDYtMy4wODcuNzIgMS41NC0uNzItMS41NHptMS40MjMuOTA2aDEuNy0xLjd6bTAgMTMuMTkzaC0xLjcgMS43em0tMS40MjMuOTA2LS43MTkgMS41NC43Mi0xLjU0em0tMi45NTItMS4zNzguNzItMS41NC0uNzIgMS41NHptLS41MTYtLjI0LS43MiAxLjU0LjcyLTEuNTR6bS0uNTc4LS45MDdoLTEuNyAxLjd6TTIuMzY4IDIzLjMzNHYxLjdoLjc5OGwuNTEtLjYxNC0xLjMwOC0xLjA4NnpNMTcuODYzIDQuNjY3bDEuMzA4IDEuMDg2IDIuMzEzLTIuNzg2aC0zLjYydjEuN3pNOS45MTYgMTEuMzV2MS43aDEuN3YtMS43aC0xLjd6bS00LjA4MyAwaC0xLjd2MS43aDEuN3YtMS43em00LjA4My0xLjdoMS43di0xLjdoLTEuN3YxLjd6bS00LjA4MyAwdi0xLjdoLTEuN3YxLjdoMS43em0xMyAxMS45ODRIOS45NTJ2My40aDguODgxdi0zLjR6bS0uNy43YS43LjcgMCAwIDEgLjctLjd2My40YTIuNyAyLjcgMCAwIDAgMi43LTIuN2gtMy40em0wLTEwLjkwNHYxMC45MDRoMy40VjExLjQzaC0zLjR6bS4zOTItMS4wODZMOC42NDQgMjIuMjQ4bDIuNjE2IDIuMTcxIDkuODgxLTExLjkwMy0yLjYxNi0yLjE3MnptMy4xNTctMy44MDItMS42MjYgMS45NTcgMi42MTYgMi4xNzIgMS42MjYtMS45NTgtMi42MTYtMi4xNzF6bTMuMDEtMS41ODUtMi40MjEgMS4xMyAxLjQzOCAzLjA4IDIuNDItMS4xMjktMS40MzgtMy4wOHptMy44NDEgMi40NDdjMC0xLjk3Ni0yLjA1Mi0zLjI4Mi0zLjg0Mi0yLjQ0N2wxLjQzOCAzLjA4MWEuNy43IDAgMCAxLS45OTYtLjYzNGgzLjR6bTAgMTMuMTkzVjcuNDA0aC0zLjR2MTMuMTkzaDMuNHptLTMuODQyIDIuNDQ3YzEuNzkuODM1IDMuODQyLS40NzIgMy44NDItMi40NDdoLTMuNGEuNy43IDAgMCAxIC45OTYtLjYzNWwtMS40MzggMy4wODJ6bS0yLjk1Mi0xLjM3OCAyLjk1MiAxLjM3OCAxLjQzOC0zLjA4Mi0yLjk1Mi0xLjM3Ny0xLjQzOCAzLjA4em0tLjUxNi0uMjQxLjUxNi4yNCAxLjQzOC0zLjA4LS41MTctLjI0MS0xLjQzNyAzLjA4em0tMS41NTktMi40NDdhMi43IDIuNyAwIDAgMCAxLjU1OSAyLjQ0N2wxLjQzOC0zLjA4MWEuNy43IDAgMCAxIC40MDMuNjM0aC0zLjR6bTAtOS4zOTN2OS4zOTNoMy40VjkuNTg1aC0zLjR6TTMuNjc2IDI0LjQyIDE5LjE3MSA1Ljc1MyAxNi41NTUgMy41OCAxLjA2IDIyLjI0OGwyLjYxNiAyLjE3MXptLTEuMzA4LTIuNzg1aC0uMjAxdjMuNGguMjAxdi0zLjR6bS0uMjAxIDBhLjcuNyAwIDAgMSAuNy43aC0zLjRhMi43IDIuNyAwIDAgMCAyLjcgMi43di0zLjR6bS43LjdWNS42NjdoLTMuNHYxNi42NjdoMy40em0wLTE2LjY2N2EuNy43IDAgMCAxLS43Ljd2LTMuNGEyLjcgMi43IDAgMCAwLTIuNyAyLjdoMy40em0tLjcuN2gxNS42OTZ2LTMuNEgyLjE2NnYzLjR6bTcuNzUgMy4yODNINS44MzJ2My40aDQuMDgzdi0zLjR6bS0xLjcgMHYxLjdoMy40di0xLjdoLTMuNHptLTIuMzg0IDEuN2g0LjA4M3YtMy40SDUuODMzdjMuNHptMS43IDB2LTEuN2gtMy40djEuN2gzLjR6IiBmaWxsPSIjZmZmIiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIiBtYXNrPSJ1cmwoI2EpIi8+PHBhdGggZD0iTTQuNTYzIDI1LjI2OSAyMi4xNCA0LjA4NCIgc3Ryb2tlPSIjZmZmIiBzdHlsZT0ic3Ryb2tlOiNmZmY7c3Ryb2tlLW9wYWNpdHk6MSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+", Ra = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDE1LjYyNVYxMy43NWgydjEuODc1YTkgOSAwIDEgMCAxOCAwVjEzLjc1aDJ2MS44NzVjMCA1LjczOC00LjM5MyAxMC40NS0xMCAxMC45NTVWMzBoLTJ2LTMuNDJjLTUuNjA3LS41MDUtMTAtNS4yMTctMTAtMTAuOTU1eiIgZmlsbD0iIzIyMjYyRSIvPjxyZWN0IHg9IjguNzUiIHk9IjEuMjUiIHdpZHRoPSIxMi41IiBoZWlnaHQ9IjIwLjYyNSIgcng9IjYuMjUiIGZpbGw9IiMyMjI2MkUiLz48L3N2Zz4=", Ga = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ljc1IDcuNWE2LjI1IDYuMjUgMCAwIDEgMTEuMTMzLTMuOTAyTDguODczIDE2Ljg2MmE2LjI4IDYuMjggMCAwIDEtLjEyMy0xLjIzN1Y3LjV6TTYuODA2IDE5LjM1MkE4Ljk2NyA4Ljk2NyAwIDAgMSA2IDE1LjYyNVYxMy43NUg0djEuODc1YzAgMS45NjMuNTE0IDMuODA2IDEuNDE2IDUuNDAybDEuMzktMS42NzV6bTIuNDA2IDUuNjI5IDEuMjkyLTEuNTU4QTkgOSAwIDAgMCAyNCAxNS42MjV2LTEuODc0aDJ2MS44NzVjMCA1LjczOC00LjM5MyAxMC40NS0xMCAxMC45NTVWMzBoLTJ2LTMuNDJhMTAuOTM0IDEwLjkzNCAwIDAgMS00Ljc4OC0xLjZ6bTMuMDg2LTMuNzE5IDguOTUyLTEwLjc4NHY1LjE0N2E2LjI1IDYuMjUgMCAwIDEtOC45NTIgNS42Mzd6IiBmaWxsPSIjZmZmIiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxIi8+PHBhdGggZD0iTTYuNDE5IDI0LjA4NCAyMi4wOTQgNS4yMDkiIHN0cm9rZT0iI2ZmZiIgc3R5bGU9InN0cm9rZTojZmZmO3N0cm9rZS1vcGFjaXR5OjEiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==", ka = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0yMC4xMzUuMzczLjg2Ni41QzI1LjE4MyAzLjI5NCAyOCA3LjgxOCAyOCAxM2MwIDUuMTgzLTIuODE3IDkuNzA3LTcgMTIuMTI3bC0uODY1LjUtMS4wMDEtMS43MzEuODY1LS41QzIzLjU5IDIxLjMxOCAyNiAxNy40NCAyNiAxM3MtMi40MTEtOC4zMTktNi0xMC4zOTVsLS44NjYtLjVMMjAuMTM1LjM3MnptLTYuNDkgMS4wMTZhMS4wNzEgMS4wNzEgMCAwIDEgMS43MS44NlYyMy43NWMwIC44ODEtMS4wMDMgMS4zODYtMS43MS44NmwtNi42NS00Ljk0NWExLjA3MSAxLjA3MSAwIDAgMC0uNjM5LS4yMTFIMS4yNTJjLS41OTIgMC0xLjA3Mi0uNDgtMS4wNzItMS4wNzJWNy42MzRjMC0uNTkuNDc4LTEuMDcgMS4wNjgtMS4wNzFsNS4xMS0uMDE3Yy4yMyAwIC40NTItLjA3NS42MzYtLjIxMWw2LjY1LTQuOTQ2em01LjkxIDQuNzgtLjgzMS0uNTU2LTEuMTExIDEuNjYzLjgzMi41NTZDMTkuOTM3IDguODI4IDIxIDEwLjc0MiAyMSAxM2MwIDIuMjU5LTEuMDYzIDQuMTcyLTIuNTU1IDUuMTY4bC0uODMyLjU1NiAxLjExIDEuNjYzLjgzMi0uNTU1QzIxLjY1IDE4LjQzMiAyMyAxNS44NjkgMjMgMTNjMC0yLjg2OS0xLjM1LTUuNDMzLTMuNDQ1LTYuODMyeiIgZmlsbD0iIzJFMzMzRCIvPjwvc3ZnPg==", qa = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0xMC4zNiAyMi44NDIgNC4yMzUgMy41NmMuNjk3LjU4NyAxLjc2LjA5MSAxLjc2LS44MlYxNS42MmwtNS45OTUgNy4yMjN6bTEzLjM1Ni0xNi4wOSAxLjI4NS0xLjU0OEExMy45NTUgMTMuOTU1IDAgMCAxIDI5IDE1YzAgNS4xODMtMi44MTcgOS43MDctNyAxMi4xMjdsLS44NjUuNS0xLjAwMS0xLjczMS44NjUtLjVDMjQuNTkgMjMuMzE4IDI3IDE5LjQ0IDI3IDE1YzAtMy4xOTQtMS4yNDgtNi4wOTctMy4yODQtOC4yNDh6bS0zLjI3OCAzLjk1IDEuMjg4LTEuNTUzQzIzLjE0IDEwLjYxMyAyNCAxMi43MSAyNCAxNWMwIDIuODY5LTEuMzUgNS40MzMtMy40NDUgNi44MzJsLS44MzEuNTU1LTEuMTEtMS42NjMuODMtLjU1NkMyMC45MzggMTkuMTcyIDIyIDE3LjI1OCAyMiAxNWMwLTEuNzE2LS42MTMtMy4yMzItMS41NjItNC4yOTl6bS00LjA4Mi00LjIyTDMuOTI4IDIxLjQ1NkgyLjI1MmMtLjU5MiAwLTEuMDcyLS40OC0xLjA3Mi0xLjA3MlY5LjYzNWMwLS41OTEuNDc4LTEuMDcgMS4wNjktMS4wNzJsNi4wNzMtLjAxN2MuMjUxIDAgLjQ5NC0uMDkuNjg3LS4yNTFsNS41ODYtNC42OTdjLjY5Ny0uNTg2IDEuNzYtLjA5MSAxLjc2LjgydjIuMDY1eiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik00LjU2NCAyNS4yNjggMjIuMTQgNC4wODQiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+", Pi = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBvcGFjaXR5PSIuNSIgY3g9IjE1IiBjeT0iMTUiIHI9IjE1IiBmaWxsPSIjMjIyNjJFIiBzdHlsZT0iZmlsbDpjb2xvcihkaXNwbGF5LXAzIC4xMzMzIC4xNDkgLjE4MDQpO2ZpbGwtb3BhY2l0eToxIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC41MTYgMTcuNDUyYS40LjQgMCAwIDEtLjAxNC41NjVsLS44Ny44MjdhLjQuNCAwIDAgMS0uNTY2LS4wMTVMMTUgMTQuNTVsLTQuMDY2IDQuMjhhLjQuNCAwIDAgMS0uNTY2LjAxNWwtLjg3LS44MjdhLjQuNCAwIDAgMS0uMDE0LS41NjVsNS4wMzMtNS4yOThhLjY2Ny42NjcgMCAwIDEgLjk2NiAwbDUuMDMzIDUuMjk4eiIgZmlsbD0iI2ZmZiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLW9wYWNpdHk6MSIvPjwvc3ZnPg==", xi = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBkPSJNNC4xNjIgNS42NzdDMi41OCA3LjI1OCAxLjk2NyA5LjYwOCAyLjg3NCAxMS42NTJhMzIuNDIyIDMyLjQyMiAwIDAgMCA2LjczMyA5Ljc5MyAzMi40MjMgMzIuNDIzIDAgMCAwIDkuNzkzIDYuNzMzYzIuMDQ0LjkwNyA0LjM5NC4yOTMgNS45NzUtMS4yODhsMi41NDMtMi41NDNhMS41IDEuNSAwIDAgMC0uMDczLTIuMTlsLTQuODA4LTQuMjA3YTEuNSAxLjUgMCAwIDAtMi4wNDguMDY4bC0yLjEzMSAyLjEzMWEuNzM2LjczNiAwIDAgMS0uOTMyLjA5NSAyNi4zODUgMjYuMzg1IDAgMCAxLTMuOS0zLjIxOCAyNi4zODUgMjYuMzg1IDAgMCAxLTMuMjE4LTMuOS43MzYuNzM2IDAgMCAxIC4wOTUtLjkzMmwyLjEzLTIuMTNhMS41IDEuNSAwIDAgMCAuMDY5LTIuMDVMOC44OTUgMy4yMDhhMS41IDEuNSAwIDAgMC0yLjE5LS4wNzNMNC4xNjIgNS42Nzd6IiBmaWxsPSIjZmZmIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgzMHYzMEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg==", JA = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xIDJhMSAxIDAgMCAxIDEtMWgyNGExIDEgMCAwIDEgMSAxdjI0YTEgMSAwIDAgMS0xIDFIMmExIDEgMCAwIDEtMS0xVjJ6bTE0LjY1MyAxNC44MDFhNC4xOCA0LjE4IDAgMSAwLTMuMzA2IDBoLS4yMDRhNS41NzEgNS41NzEgMCAwIDAtNS41NzIgNS41NzJ2Mi4yNWExIDEgMCAwIDAgMSAxSDIwLjQzYTEgMSAwIDAgMCAxLTF2LTIuMjVhNS41NzEgNS41NzEgMCAwIDAtNS41NzItNS41NzJoLS4yMDR6bS0xMy4yNi05LjE4TDcuNjIgMi4zOTNoMi4yMzJsLTcuNDYgNy40NlY3LjYyMXptMCA4LjEzdi0yLjIzMkwxMy41MTggMi4zOTNoMi4yMzNMMi4zOTMgMTUuNzV6bTAgNS44OTh2LTIuMjMzbDUuNDU5LTUuNDU5Yy4wNjIuNjI2LjIxNyAxLjIyNC40NTIgMS43OEwyLjM5MyAyMS42NXpNMTYuMzk4IDcuNjQ0YTYuMTQgNi4xNCAwIDAgMC0xLjc4LS40NTJsNC43OTgtNC44aDIuMjMzbC01LjI1MSA1LjI1MnpNMi44NCAyNC44NjdsMS43MzEtMS43MzJWMjVjMCAuMTE4LjAwNy4yMzQuMDIuMzQ4bC0uMjU4LjI1OGExLjk5NiAxLjk5NiAwIDAgMS0xLjQ5My0uNzM5ek0xOC41NDkgOS4xNThjLjM2LjM5My42NzIuODMzLjkyMyAxLjMxbDYuMTM0LTYuMTM1YTEuOTk2IDEuOTk2IDAgMCAwLS43MzktMS40OTNsLTYuMzE5IDYuMzE4em0uOTcgNi45NjMuMTI1LjA3MSA1Ljk2My01Ljk2M1Y3Ljk5N2wtNS40MyA1LjQzYTYuMTQ5IDYuMTQ5IDAgMCAxLS42NTkgMi42OTR6bTIuMTIgMS43NDFjLjM0Ni40MDkuNjUuODU0LjkwMyAxLjMzbDMuMDY1LTMuMDY1di0yLjIzMmwtMy45NjcgMy45Njd6bTEuNzkgNC44ODh2MS40NTNsMi4xNzgtMi4xNzh2LTIuMjMzbC0yLjIxNSAyLjIxNWMuMDI0LjI0NC4wMzcuNDkyLjAzNy43NDN6IiBmaWxsPSIjZmZmIi8+PC9zdmc+", mt = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDFhMSAxIDAgMCAxIDEtMWgyNGExIDEgMCAwIDEgMSAxdjI0YTEgMSAwIDAgMS0xIDFIMWExIDEgMCAwIDEtMS0xVjF6bTEzIDEzYTQuMTc5IDQuMTc5IDAgMSAwIDAtOC4zNTdBNC4xNzkgNC4xNzkgMCAwIDAgMTMgMTR6bS0xLjg1NyAxLjM0NmE1LjU3MSA1LjU3MSAwIDAgMC01LjU3MiA1LjU3MXYyLjI1YTEgMSAwIDAgMCAxIDFIMTkuNDNhMSAxIDAgMCAwIDEtMXYtMi4yNWE1LjU3MSA1LjU3MSAwIDAgMC01LjU3Mi01LjU3MUwxMyAxOC4wMTlsLTEuODU3LTIuNjczem0tOS43NS03LjMxIDYuNjQzLTYuNjQzaDIuMjMybC04Ljg3NSA4Ljg3NVY4LjAzNnptMCAxMi4yMzJ2LTIuMjMzbDYuNjQyLTYuNjQxTDkuMTUgMTIuNTFsLTcuNzU4IDcuNzU4em0yMy4yMTQtNS40NDd2Mi4yMzNsLTIuNDczIDIuNDczLTEuMTE2LTEuMTE2IDMuNTktMy41OXptMC0xMHYyLjIzM2wtNy4wOTIgNy4wOTItMS4xMTYtMS4xMTYgOC4yMDgtOC4yMDl6bS00LjMzOS0zLjQyOC0zLjg5NSAzLjg5NS0xLjExNy0xLjExNiAyLjc4LTIuNzhoMi4yMzJ6IiBmaWxsPSIjMDAwIiBzdHlsZT0iZmlsbDojMDAwO2ZpbGwtb3BhY2l0eToxIi8+PC9zdmc+", Bi = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00LjY2NjgzIDkuMzMzMzdIMy4zMzM1VjQuMDAwMDRDMy4zMzM1IDMuNjMxODUgMy42MzE5NyAzLjMzMzM3IDQuMDAwMTYgMy4zMzMzN0w5LjMzMzUgMy4zMzMzN1Y0LjY2NjcxSDUuNjA5NjNMOS44MDQ5IDguODYxOTlMOC44NjIwOSA5LjgwNDhMNC42NjY4MyA1LjYwOTUyVjkuMzMzMzdaTTE1LjMzMzMgMTAuNjY2N0gxNi42NjY3VjE2QzE2LjY2NjcgMTYuMzY4MiAxNi4zNjgyIDE2LjY2NjcgMTYgMTYuNjY2N0wxMC42NjY3IDE2LjY2NjdMMTAuNjY2NyAxNS4zMzMzSDE0LjM5MDVMMTAuMTk1MyAxMS4xMzhMMTEuMTM4MSAxMC4xOTUyTDE1LjMzMzMgMTQuMzkwNVYxMC42NjY3WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTAuNjY2NjY3IDEuMzMzMzNDMC42NjY2NjcgMC45NjUxNDQgMC45NjUxNDQgMC42NjY2NjcgMS4zMzMzMyAwLjY2NjY2N0gxOC42NjY3QzE5LjAzNDkgMC42NjY2NjcgMTkuMzMzMyAwLjk2NTE0NCAxOS4zMzMzIDEuMzMzMzNWMTguNjY2N0MxOS4zMzMzIDE5LjAzNDkgMTkuMDM0OSAxOS4zMzMzIDE4LjY2NjcgMTkuMzMzM0gxLjMzMzMzQzAuOTY1MTQzIDE5LjMzMzMgMC42NjY2NjcgMTkuMDM0OSAwLjY2NjY2NyAxOC42NjY3VjEuMzMzMzNaIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEuMzMzMzMiLz4KPC9zdmc+", Ri = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxyZWN0IHg9IjAuNzY5MjMxIiB5PSIwLjc2OTIzMSIgd2lkdGg9IjE4LjQ2MTUiIGhlaWdodD0iMTguNDYxNSIgcng9IjAuNzY5MjMxIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEuNTM4NDYiLz4KICAgIDxwYXRoIGQ9Ik0xMS41Mzg1IDEyLjMwNzdDMTEuNTM4NSAxMS44ODI5IDExLjg4MjkgMTEuNTM4NSAxMi4zMDc3IDExLjUzODVIMTkuMjMwOFYxOC40NjE1QzE5LjIzMDggMTguODg2NCAxOC44ODY0IDE5LjIzMDggMTguNDYxNiAxOS4yMzA4SDExLjUzODVWMTIuMzA3N1oiIHN0cm9rZT0id2hpdGUiIHN0cm9rZS13aWR0aD0iMS41Mzg0NiIvPgogICAgPHBhdGggZD0iTTAuNzY5Mjg3IDAuNzY5MjI2TDguOTcyMyA4LjkyNDEyIiBzdHJva2U9IndoaXRlIiBzdHJva2Utd2lkdGg9IjEuNTM4NDYiLz4KICAgIDxwYXRoIGQ9Ik05LjQ5NjcgNC43MTcxNlY5LjQ0ODZINC43NDE0NiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIxLjUzODQ2IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICA8L3N2Zz4=", Gi = "data:image/svg+xml;base64,PHN2ZyB0PSIxNzA4NDAwODQ5NTMxIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjgyNjciIHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIj48cGF0aCBkPSJNMTIxLjUxIDQ2MC4xNWg3NzkuNjR2MTAwLjZIMTIxLjUxeiIgcC1pZD0iODI2OCIgZmlsbD0iI2ZmZmZmZiI+PC9wYXRoPjxwYXRoIGQ9Ik00NjEuMDM1IDkwMC4yNzF2LTc3OS42NGgxMDAuNnY3NzkuNjR6IiBwLWlkPSI4MjY5IiBmaWxsPSIjZmZmZmZmIj48L3BhdGg+PC9zdmc+", ki = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTguNSA0SDNhMSAxIDAgMCAwLTEgMXYxMmExIDEgMCAwIDAgMSAxaDEyYTEgMSAwIDAgMCAxLTF2LTUuNSIgc3Ryb2tlPSIjRDVFMEYyIiBzdHJva2Utd2lkdGg9IjEuNSIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNSAzLjV2NWg1di01aC01ek0xMSAyYTEgMSAwIDAgMC0xIDF2NmExIDEgMCAwIDAgMSAxaDZhMSAxIDAgMCAwIDEtMVYzYTEgMSAwIDAgMC0xLTFoLTZ6IiBmaWxsPSIjRDVFMEYyIi8+PC9zdmc+", HA = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS4wMTggNS43NjNhMiAyIDAgMCAxIDIgMnYxNS41MjhhMiAyIDAgMCAxLTIgMkgyLjk4MmEyIDIgMCAwIDEtMi0yVjcuNzYzYTIgMiAwIDAgMSAyLTJoNC4yNjJhMiAyIDAgMCAwIDEuNDk0LS42N2wxLjQxLTEuNTg3YTIgMiAwIDAgMSAxLjQ5NS0uNjcyaDQuNzE0YTIgMiAwIDAgMSAxLjQ5NC42NzFsMS40MSAxLjU4N2EyIDIgMCAwIDAgMS40OTUuNjcxaDQuMjYyek0xMS43MjMgOS41ODVhNS45MDcgNS45MDcgMCAwIDEgMi4xODYtLjQxN2MxLjcxOSAwIDMuMjcuNzMzIDQuMzQxIDEuOTAzVjkuOTE4aDEuNXY1LjAwMWgtMS41di0uMDA1Yy0uMDAyLTIuMzMyLTEuOTMyLTQuMjQ1LTQuMzQtNC4yNDUtLjU4IDAtMS4xMy4xMS0xLjYzMy4zMWwtLjU1NC0xLjM5NHpNOC4yNSAxOS45MTl2LTVoMS41YzAgMi4zMzQgMS45MyA0LjI1IDQuMzQgNC4yNS41OCAwIDEuMTMtLjExMSAxLjYzMy0uMzFsLjU1NCAxLjM5M2E1LjkwOCA1LjkwOCAwIDAgMS0yLjE4Ni40MTcgNS44NzMgNS44NzMgMCAwIDEtNC4zNDEtMS45MDN2MS4xNTNoLTEuNXoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=", qi = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsdGVyPSJ1cmwoI2EpIj48bWFzayBpZD0iYiIgZmlsbD0iI2ZmZiI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMC41IDExLjA1YTQuNSA0LjUgMCAxIDAgMC05IDQuNSA0LjUgMCAwIDAgMCA5em0tMiAxLjQ1YTYgNiAwIDAgMC02IDZWMjFhMSAxIDAgMCAwIDEgMWgxNGExIDEgMCAwIDAgMS0xdi0yLjVhNiA2IDAgMCAwLTYtNmwtMiAyLjg4LTItMi44OHoiLz48L21hc2s+PHBhdGggZD0ibTguNSAxMi41IDEuMzk2LS45Ny0uNTA3LS43M0g4LjV2MS43em00IDB2LTEuN2gtLjg4OWwtLjUwNy43MyAxLjM5Ni45N3ptLTIgMi44OC0xLjM5Ni45NjkgMS4zOTYgMi4wMSAxLjM5Ni0yLjAxLTEuMzk2LS45N3ptMi44LTguODNhMi44IDIuOCAwIDAgMS0yLjggMi44djMuNGE2LjIgNi4yIDAgMCAwIDYuMi02LjJoLTMuNHptLTIuOC0yLjhhMi44IDIuOCAwIDAgMSAyLjggMi44aDMuNGE2LjIgNi4yIDAgMCAwLTYuMi02LjJ2My40em0tMi44IDIuOGEyLjggMi44IDAgMCAxIDIuOC0yLjhWLjM1YTYuMiA2LjIgMCAwIDAtNi4yIDYuMmgzLjR6bTIuOCAyLjhhMi44IDIuOCAwIDAgMS0yLjgtMi44SDQuM2E2LjIgNi4yIDAgMCAwIDYuMiA2LjJ2LTMuNHpNNC4yIDE4LjVhNC4zIDQuMyAwIDAgMSA0LjMtNC4zdi0zLjRhNy43IDcuNyAwIDAgMC03LjcgNy43aDMuNHptMCAyLjV2LTIuNUguOFYyMWgzLjR6bS0uNy0uN2EuNy43IDAgMCAxIC43LjdILjhhMi43IDIuNyAwIDAgMCAyLjcgMi43di0zLjR6bTE0IDBoLTE0djMuNGgxNHYtMy40em0tLjcuN2EuNy43IDAgMCAxIC43LS43djMuNGEyLjcgMi43IDAgMCAwIDIuNy0yLjdoLTMuNHptMC0yLjVWMjFoMy40di0yLjVoLTMuNHptLTQuMy00LjNhNC4zIDQuMyAwIDAgMSA0LjMgNC4zaDMuNGE3LjcgNy43IDAgMCAwLTcuNy03Ljd2My40em0tLjYwNCAyLjE0OSAyLTIuODc5LTIuNzkyLTEuOTQtMiAyLjg4IDIuNzkyIDEuOTM5ek03LjEwNCAxMy40N2wyIDIuODc5IDIuNzkyLTEuOTQtMi0yLjg3OS0yLjc5MiAxLjk0eiIgZmlsbD0iI0Q1RTBGMiIgbWFzaz0idXJsKCNiKSIvPjwvZz48cGF0aCBkPSJNMTYgMTFoN20tMy41LTMuNXY3IiBzdHJva2U9IiNENUUwRjIiIHN0cm9rZS13aWR0aD0iMS43Ii8+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iLTUuNSIgeT0iLTUuOTQ5IiB3aWR0aD0iMzIiIGhlaWdodD0iMzUuOTUiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUdhdXNzaWFuQmx1ciBpbj0iQmFja2dyb3VuZEltYWdlRml4IiBzdGREZXZpYXRpb249IjQiLz48ZmVDb21wb3NpdGUgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9ImluIiByZXN1bHQ9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfMjU4NF8yMzYiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2JhY2tncm91bmRCbHVyXzI1ODRfMjM2IiByZXN1bHQ9InNoYXBlIi8+PC9maWx0ZXI+PC9kZWZzPjwvc3ZnPg==", Wi = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAiIGhlaWdodD0iMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBvcGFjaXR5PSIuNSIgY3g9IjE1IiBjeT0iMTUiIHI9IjE1IiBmaWxsPSIjMjIyNjJFIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LjQ4NCAxNC4zMTNhLjQuNCAwIDAgMSAuMDE0LS41NjVsLjg3LS44MjdhLjQuNCAwIDAgMSAuNTY2LjAxNUwxNSAxNy4yMTZsNC4wNjYtNC4yOGEuNC40IDAgMCAxIC41NjUtLjAxNWwuODcuODI3YS40LjQgMCAwIDEgLjAxNS41NjVsLTUuMDMzIDUuMjk4YS42NjcuNjY3IDAgMCAxLS45NjYgMGwtNS4wMzMtNS4yOTh6IiBmaWxsPSIjZmZmIi8+PC9zdmc+", CA = !O.isPC;
let Wa = ki, Xa = qi;
CA || (Wa = Ri, Xa = Gi);
const $ = {
width: CA ? "60px" : "40px",
height: CA ? "60px" : "40px",
shape: "circle",
iconSize: CA ? 30 : 20,
showText: !0,
textColor: "#D5E0F2",
textSize: "12px",
textStyle: {
marginTop: "5px"
}
}, U = {
accept: {
basicConfig: {
...$,
color: "#51C271",
iconSrc: xi
},
loadingConfig: {
...$,
color: "#51C271",
loadingWidth: CA ? "30px" : "20px",
loadingHeight: CA ? "30px" : "20px"
}
},
hangup: {
basicConfig: {
...$,
color: "#ED4651",
iconSrc: ft
},
loadingConfig: {
...$,
color: "#ED4651",
loadingWidth: CA ? "30px" : "20px",
loadingHeight: CA ? "30px" : "20px"
}
},
reject: {
basicConfig: {
...$,
color: "#ED4651",
iconSrc: ft
}
},
camera: {
basicConfig: {
...$,
color: "#FFFFFF",
iconSrc: xa,
shape: "circle"
},
closedConfig: {
...$,
color: "#6b758a4d",
iconSrc: Ba
},
loadingConfig: {
...$,
color: "#6b758a4d",
loadingWidth: CA ? "30px" : "20px",
loadingHeight: CA ? "30px" : "20px"
}
},
microphone: {
basicConfig: {
...$,
color: "#FFFFFF",
iconSrc: Ra
},
closedConfig: {
...$,
color: "#6b758a4d",
iconSrc: Ga
}
},
speaker: {
basicConfig: {
...$,
color: "#FFFFFF",
iconSrc: ka
},
closedConfig: {
...$,
color: "#6b758a4d",
iconSrc: qa
}
},
fullScreen: {
basicConfig: {
iconSize: 20,
iconSrc: Bi
}
},
minimize: {
basicConfig: {
iconSize: CA ? 24 : 20,
iconSrc: Wa
}
},
switchCamera: {
basicConfig: {
...$,
color: "transparent",
iconSrc: HA,
shape: "circle"
}
},
inviteUser: {
basicConfig: {
...$,
color: CA ? "" : "#6b758a4d",
width: CA ? "24px" : "40px",
height: CA ? "24px" : "40px",
shape: CA ? "" : "circle",
iconSize: CA ? 24 : 20,
iconSrc: Xa
}
},
toggleButtonPanel: {
basicConfig: {
color: "transparent",
width: "40px",
height: "40px",
shape: "circle",
iconSize: 40,
iconSrc: Wi
}
},
virtualBackground: {
basicConfig: {
...$,
color: "#6b758a4d",
iconSrc: JA,
shape: "circle"
},
closedConfig: {
...$,
color: "#FFFFFF",
iconSrc: mt
},
loadingConfig: {
...$,
color: "#6b758a4d",
loadingWidth: CA ? "30px" : "20px",
loadingHeight: CA ? "30px" : "20px"
},
disableConfig: {
...$,
color: "#6b758a4d",
iconSrc: JA,
buttonStyle: {
opacity: 0.6
}
}
}
}, YA = {
singleCall: {
video: {
calling: {
...U,
switchCamera: {
basicConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle",
showText: !0
},
disableConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle",
showText: !0,
buttonStyle: {
opacity: 0.6
}
}
},
hangup: {
basicConfig: {
...U.hangup.basicConfig
},
loadingConfig: {
...U.hangup.loadingConfig
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
accept: {
...U,
switchCamera: {
basicConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle"
},
disableConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle",
showText: !0,
buttonStyle: {
opacity: 0.6
}
}
},
accept: {
basicConfig: {
...U.accept.basicConfig,
showText: !1
},
loadingConfig: {
...U.accept.loadingConfig,
showText: !1
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
connected: {
...U,
virtualBackground: {
basicConfig: {
...$,
color: "transparent",
iconSrc: JA,
shape: "circle",
showText: !1
},
closedConfig: {
...$,
color: "transparent",
iconSrc: JA,
showText: !1
},
disableConfig: {
...$,
color: "transparent",
iconSrc: JA,
showText: !1,
buttonStyle: {
opacity: 0.6
}
}
},
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
switchCamera: {
basicConfig: {
...U.switchCamera.basicConfig,
showText: !1
},
disableConfig: {
...U.switchCamera.basicConfig,
showText: !1,
buttonStyle: {
opacity: 0.6
}
}
}
}
},
audio: {
calling: U,
accept: U,
connected: U
}
},
groupCall: {
video: {
calling: {
...U,
switchCamera: {
basicConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle"
}
},
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
accept: {
basicConfig: {
...U.accept.basicConfig,
showText: !1
},
loadingConfig: {
...U.accept.loadingConfig,
showText: !1
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
accept: {
...U,
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
accept: {
basicConfig: {
...U.accept.basicConfig,
showText: !1
},
loadingConfig: {
...U.accept.loadingConfig,
showText: !1
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
connected: {
...U,
virtualBackground: {
basicConfig: {
...$,
color: "transparent",
iconSrc: JA,
shape: "circle",
showText: !1
},
closedConfig: {
...$,
color: "transparent",
iconSrc: mt,
showText: !1
}
},
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
}
}
},
audio: {
calling: {
...U,
switchCamera: {
basicConfig: {
...$,
color: "#6b758a4d",
iconSrc: HA,
shape: "circle"
}
},
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
accept: {
basicConfig: {
...U.accept.basicConfig,
showText: !1
},
loadingConfig: {
...U.accept.loadingConfig,
showText: !1
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
accept: {
...U,
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
accept: {
basicConfig: {
...U.accept.basicConfig,
showText: !1
},
loadingConfig: {
...U.accept.loadingConfig,
showText: !1
}
},
reject: {
basicConfig: {
...U.reject.basicConfig,
showText: !1
}
}
},
connected: {
...U,
hangup: {
basicConfig: {
...U.hangup.basicConfig,
showText: !1
},
loadingConfig: {
...U.hangup.loadingConfig,
showText: !1
}
},
virtualBackground: {
basicConfig: {
...$,
color: "transparent",
iconSrc: JA,
shape: "circle"
},
closedConfig: {
...$,
color: "transparent",
iconSrc: mt
}
}
}
}
}
}, Xi = {
singleCall: {
video: {
calling: U,
accept: U,
connected: U
},
audio: {
calling: U,
accept: U,
connected: U
}
},
groupCall: {
video: {
calling: U,
accept: U,
connected: U
},
audio: {
calling: U,
accept: U,
connected: U
}
}
}, Qi = {
pc: Xi,
mobile: YA
}, FA = {
width: "40px",
height: "40px",
shape: "circle",
iconSize: 20,
textColor: "#D5E0F2"
}, qe = {
microphone: {
basicConfig: {
...FA,
color: "#FFFFFF",
iconSrc: Ra
},
closedConfig: {
...FA,
color: "#6b758a4d",
iconSrc: Ga
}
},
speaker: {
basicConfig: {
...FA,
color: "#FFFFFF",
iconSrc: ka
},
closedConfig: {
...FA,
color: "#6b758a4d",
iconSrc: qa
}
},
camera: {
basicConfig: {
...FA,
color: "#FFFFFF",
iconSrc: xa
},
closedConfig: {
...FA,
color: "#6b758a4d",
iconSrc: Ba
}
},
hangup: {
basicConfig: {
...FA,
color: "#ED4651",
iconSrc: ft
},
loadingConfig: {
...FA,
color: "#ED4651",
loadingWidth: "20px",
loadingHeight: "20px"
}
},
toggleButtonPanel: {
basicConfig: {
color: "transparent",
width: "40px",
height: "40px",
shape: "circle",
iconSize: 40,
iconSrc: Pi
}
}
}, Fi = {
mobile: {
...YA,
groupCall: {
video: {
...YA.groupCall.video,
calling: {
...YA.groupCall.video.calling,
...qe
},
connected: {
...YA.groupCall.video.connected,
...qe
}
},
audio: {
...YA.groupCall.audio,
calling: {
...YA.groupCall.audio.calling,
...qe
},
connected: {
...YA.groupCall.audio.connected,
...qe
}
}
}
}
}, jA = (a, A) => {
var d;
const e = O.isPC ? "pc" : "mobile", { status: t } = Pe(), { callStatus: o, callRole: i, isGroupCall: s, callType: c } = G(rA()), r = L((d = U == null ? void 0 : U[a]) == null ? void 0 : d[A.value]);
return cA(
[A, t, o, s, c],
() => {
var y, m, D, j, k;
const g = s.value ? "groupCall" : "singleCall", N = c.value === _.AUDIO ? "audio" : "video";
let C = "";
o.value === x.CALLING ? C = i.value === gA.CALLER ? "calling" : "accept" : o.value === x.CONNECTED && (C = "connected");
let p = Qi;
t.value === "close" && (p = Fi), r.value = ((k = (j = (D = (m = (y = p == null ? void 0 : p[e]) == null ? void 0 : y[g]) == null ? void 0 : m[N]) == null ? void 0 : D[C]) == null ? void 0 : j[a]) == null ? void 0 : k[A.value]) || {};
},
{ immediate: !0 }
), r;
}, Zi = {
options: {
virtualHost: !0
}
}, Yi = /* @__PURE__ */ z({
...Zi,
__name: "Minimize",
setup(a) {
const A = jA("minimize", L("basicConfig")), e = async () => {
if (document != null && document.fullscreenElement)
try {
document == null || document.exitFullscreen();
} catch (t) {
console.debug(t);
}
await W.toggleMinimize();
};
return (t, o) => (I(), E(wA, {
iconSrc: n(A).iconSrc,
iconSize: n(A).iconSize,
onClick: e
}, null, 8, ["iconSrc", "iconSize"]));
}
});
const X = (a, A) => {
const e = a.__vccOpts || a;
for (const [t, o] of A)
e[t] = o;
return e;
}, Jt = /* @__PURE__ */ X(Yi, [["__scopeId", "data-v-135d060f"]]), Hi = {
options: {
virtualHost: !0
}
}, Ki = /* @__PURE__ */ z({
...Hi,
__name: "FullScreen",
setup(a) {
const A = jA("fullScreen", L("basicConfig")), e = async () => {
await On("tuicallkit-id");
};
return (t, o) => (I(), E(wA, {
iconSrc: n(A).iconSrc,
iconSize: n(A).iconSize,
onClick: e
}, null, 8, ["iconSrc", "iconSize"]));
}
});
const Ji = /* @__PURE__ */ X(Ki, [["__scopeId", "data-v-f92abf93"]]), _i = {
width: {
type: String
},
color: {
type: String
},
size: {
type: String
},
weight: {
type: Number
},
truncated: {
type: Boolean,
default: !1
},
lineClamp: {
type: Number
},
textStyle: {
type: Object
}
}, $i = {
options: {
virtualHost: !0
}
}, pA = /* @__PURE__ */ z({
...$i,
__name: "TKText",
props: _i,
emits: ["click"],
setup(a, { emit: A }) {
const e = a, t = A, o = iA([
`${F}-text`,
{ [`${F}-text--line-clamp`]: e.lineClamp }
]), i = f(() => Je({
maxWidth: e.width,
fontSize: e.size,
fontWeight: e.weight,
color: e.color,
textOverflow: e.truncated ? "ellipsis" : "auto",
"-webkit-line-clamp": e.lineClamp,
...e.textStyle
})), s = () => {
t("click");
};
return (c, r) => (I(), h("span", {
class: V(n(o)),
style: AA([n(i)]),
onClick: s
}, [
H(c.$slots, "default")
], 6));
}
});
const XA = {
width: {
type: String
},
height: {
type: String
},
showText: {
type: Boolean,
default: !0
},
iconSize: {
type: String
}
}, Al = { class: "btn-content" }, el = {
options: {
virtualHost: !0
}
}, tl = /* @__PURE__ */ z({
...el,
__name: "InviteUser",
props: XA,
setup(a) {
const A = a, e = jA("inviteUser", L("basicConfig")), t = uA(), o = async () => {
M.update(u.CALL, l.SHOW_SELECT_USER, !0);
};
return (i, s) => (I(), h("div", Al, [
S(wA, {
iconSrc: n(e).iconSrc,
color: n(e).color,
iconSize: n(e).iconSize,
width: A.width || n(e).width,
height: A.height || n(e).height,
shape: n(e).shape,
onClick: o
}, null, 8, ["iconSrc", "color", "iconSize", "width", "height", "shape"]),
i.showText ? (I(), E(pA, {
key: 0,
textStyle: n(e).textStyle,
color: n(e).textColor,
size: n(e).textSize
}, {
default: v(() => [
MA(B(n(t)("invite member")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const Qa = /* @__PURE__ */ X(tl, [["__scopeId", "data-v-7c062dcf"]]), al = {
color: {
type: String,
default: "#FFF"
},
callDuration: {
type: String,
default: ""
},
fontSize: {
type: String,
default: "16px"
}
}, ol = {
options: {
virtualHost: !0
}
}, _e = /* @__PURE__ */ z({
...ol,
__name: "Timer",
props: al,
setup(a) {
const A = a, e = f(() => ({
color: A.color,
fontSize: A.fontSize
}));
return (t, o) => (I(), h("span", {
style: AA([n(e)])
}, B(t.callDuration), 5));
}
}), nl = {
options: {
virtualHost: !0
}
}, il = /* @__PURE__ */ z({
...nl,
__name: "TopBar",
props: Jn,
setup(a) {
const A = O.isPC, { callStatus: e, isGroupCall: t, callRole: o, allowedFullScreen: i } = G(rA()), { callDuration: s } = Et(), c = xe(), r = f(() => e.value === x.CONNECTED), d = L(M.getData(u.CALL, l.ENABLE_FLOAT_WINDOW)), g = f(() => {
var p, y;
return !t.value || ((y = (p = c.value.button) == null ? void 0 : p[_A.InviteUser]) == null ? void 0 : y.show) === !1 ? !1 : e.value === x.CALLING ? o.value === gA.CALLER : !0;
});
function N(p) {
d.value = p;
}
const C = {
[l.ENABLE_FLOAT_WINDOW]: N
};
return yA(() => {
M.watch(
u.CALL,
C,
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, {
...C
});
}), (p, y) => (I(), h("div", {
style: AA(p.customStyle),
class: "top-bar-container"
}, [
n(A) ? (I(), E(se, { key: 0 }, {
default: v(() => [
S(SA, { span: 8 }),
S(SA, {
span: 8,
justify: "center",
align: "center"
}, {
default: v(() => [
n(r) ? (I(), E(_e, {
key: 0,
"call-duration": n(s)
}, null, 8, ["call-duration"])) : w("", !0)
]),
_: 1
}),
S(SA, {
span: 8,
justify: "end",
align: "center"
}, {
default: v(() => [
S(se, null, {
default: v(() => [
S(SA, { span: 18 }),
S(SA, {
span: 3,
justify: "center"
}, {
default: v(() => [
n(d) ? (I(), E(Jt, { key: 0 })) : w("", !0)
]),
_: 1
}),
S(SA, {
span: 3,
justify: "center"
}, {
default: v(() => [
n(i) ? (I(), E(Ji, { key: 0 })) : w("", !0)
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})) : w("", !0),
n(A) ? w("", !0) : (I(), E(se, { key: 1 }, {
default: v(() => [
S(SA, {
span: 8,
align: "center"
}, {
default: v(() => [
S(se, null, {
default: v(() => [
S(SA, {
span: 8,
justify: "center"
}, {
default: v(() => [
!n(A) && n(d) ? (I(), E(Jt, { key: 0 })) : w("", !0)
]),
_: 1
}),
S(SA, { span: 16 })
]),
_: 1
})
]),
_: 1
}),
S(SA, {
span: 8,
justify: "center",
align: "center"
}, {
default: v(() => [
n(r) ? (I(), E(_e, {
key: 0,
"call-duration": n(s)
}, null, 8, ["call-duration"])) : w("", !0)
]),
_: 1
}),
S(SA, {
span: 8,
justify: "end",
align: "center"
}, {
default: v(() => [
S(se, null, {
default: v(() => [
S(SA, { span: 16 }),
S(SA, {
span: 8,
justify: "center"
}, {
default: v(() => [
n(g) ? (I(), E(Qa, {
key: 0,
"show-text": n(A)
}, null, 8, ["show-text"])) : w("", !0)
]),
_: 1
})
]),
_: 1
})
]),
_: 1
})
]),
_: 1
}))
], 4));
}
});
const Fa = /* @__PURE__ */ X(il, [["__scopeId", "data-v-b040a138"]]), ll = {
show: {
type: Boolean,
default: !0
},
showMask: {
type: Boolean,
default: !0
},
showBackgroundImage: {
type: Boolean,
default: !0
},
blur: {
type: Boolean,
default: !0
},
bgColor: {
type: String
},
bgImage: {
type: String
},
zIndex: {
type: Number,
default: 11e3
},
customClass: {
type: String
},
customStyle: {
type: Object
},
customMaskStyle: {
type: Object
},
fit: {
type: String,
default: "cover"
},
defaultSrc: {
type: String
}
}, sl = ["click", "error"], rl = {
options: {
virtualHost: !0
}
}, Za = /* @__PURE__ */ z({
...rl,
__name: "Overlay",
props: ll,
emits: sl,
setup(a, { emit: A }) {
const e = a, t = A, o = iA([
`${F}-overlay`,
e.customClass
]), i = `${F}-overlay_mask-container`, s = f(() => iA([
`${F}-overlay_mask`,
{ [`${F}-blur`]: e.blur }
])), c = `${F}-overlay_slot`, r = f(() => ({ zIndex: e.zIndex, ...e.customStyle })), d = f(() => ({
backgroundColor: e.bgColor,
...e.customMaskStyle
}));
function g() {
t("click");
}
const N = (C) => {
t("error", C);
};
return (C, p) => C.show ? (I(), h("div", {
key: 0,
class: V(n(o)),
style: AA([n(r)]),
onClick: g
}, [
T("div", {
class: V(i)
}, [
C.showMask ? (I(), h("div", {
key: 0,
class: V(n(s)),
style: AA([n(d)])
}, null, 6)) : w("", !0),
C.showBackgroundImage ? (I(), E(TA, {
key: 1,
fit: C.fit,
src: C.bgImage,
width: "100%",
height: "100%",
defaultSrc: C.defaultSrc,
onError: N
}, null, 8, ["fit", "src", "defaultSrc"])) : w("", !0)
]),
T("div", {
class: V(c)
}, [
H(C.$slots, "default")
])
], 6)) : w("", !0);
}
});
const cl = ["fill", "contain", "cover"], ul = ["circle", "square"], dl = {
icon: {
type: String
},
size: {
type: [Number, String],
default: 100
},
shape: {
type: String,
values: ul,
default: "square"
},
src: {
type: String
},
defaultSrc: {
type: String
},
text: {
type: String
},
fit: {
type: String,
values: cl,
default: "cover"
},
customClass: {
type: String
}
}, Il = {
options: {
virtualHost: !0
}
}, Ya = /* @__PURE__ */ z({
...Il,
__name: "Avatar",
props: dl,
setup(a) {
const A = a, e = L("");
cA(() => A.src, () => {
e.value = A.src;
}, {
immediate: !0
});
const t = f(() => iA([
`${F}-avatar`,
`${F}-avatar--${A.shape}`,
`${F}-avatar--${A.size}`,
A.customClass
])), o = f(() => typeof A.size == "number" ? `${A.size}px` : A.size), i = f(() => typeof A.size == "number" ? `${A.size}px` : A.size), s = f(() => ({ width: o.value, height: i.value }));
function c(r) {
console.error(r), A.defaultSrc && (e.value = A.defaultSrc);
}
return (r, d) => (I(), h("div", {
class: V(n(t)),
style: AA([n(s)])
}, [
n(e) ? (I(), E(TA, {
key: 0,
fit: r.fit,
width: n(o),
height: n(i),
src: n(e),
onError: c
}, null, 8, ["fit", "width", "height", "src"])) : H(r.$slots, "default", { key: 1 })
], 6));
}
});
const gl = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj4KICA8cmVjdCB4PSIxMSIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGZpbGw9IiNmZmYiIC8+CiAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zLjE0OTkgMTFWMTIuNUMzLjE0OTkgMTcuMzg3NyA3LjExMjE4IDIxLjM1IDExLjk5OTkgMjEuMzVDMTYuODg3NiAyMS4zNSAyMC44NDk5IDE3LjM4NzcgMjAuODQ5OSAxMi41VjExSDE5LjE0OTlWMTIuNUMxOS4xNDk5IDE2LjQ0ODggMTUuOTQ4NyAxOS42NSAxMS45OTk5IDE5LjY1QzguMDUxMDcgMTkuNjUgNC44NDk5IDE2LjQ0ODggNC44NDk5IDEyLjVWMTFIMy4xNDk5WiIgZmlsbD0iI2ZmZiIvPgogIDxyZWN0IHg9IjcuODUiIHk9IjEuODUiIHdpZHRoPSI4LjMiIGhlaWdodD0iMTQuOCIgcng9IjQuMTUiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPC9zdmc+", Ml = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTguNzM3MDggMTIuOTk2M0M4LjcxMjY2IDEyLjgzNDQgOC43IDEyLjY2ODcgOC43IDEyLjVWNkM4LjcgNC4xNzc0NiAxMC4xNzc1IDIuNyAxMiAyLjdDMTMuNTQ4OCAyLjcgMTQuODQ4NCAzLjc2Njk1IDE1LjIwMzggNS4yMDU5MkwxNi40NDU4IDMuNzA5NzRDMTUuNjE1IDIuMTAwMzMgMTMuOTM2IDEgMTIgMUM5LjIzODU4IDEgNyAzLjIzODU4IDcgNlYxMi41QzcgMTMuMjMzMyA3LjE1Nzg2IDEzLjkyOTcgNy40NDE0NSAxNC41NTcyTDguNzM3MDggMTIuOTk2M1pNMTEuMzM4NSAxNS43MzM3TDEwLjE2MTggMTcuMTUxM0MxMC43MzA4IDE3LjM3NjMgMTEuMzUwOSAxNy41IDEyIDE3LjVDMTQuNzYxNCAxNy41IDE3IDE1LjI2MTQgMTcgMTIuNVY4LjkxMzNMMTUuMyAxMC45NjEzVjEyLjVDMTUuMyAxNC4zMjI1IDEzLjgyMjUgMTUuOCAxMiAxNS44QzExLjc3MzQgMTUuOCAxMS41NTIyIDE1Ljc3NzIgMTEuMzM4NSAxNS43MzM3Wk01Ljk2NTE5IDE2LjMzNTZDNS4yNTkzMyAxNS4yMjczIDQuODUwMzkgMTMuOTExNCA0Ljg1MDM5IDEyLjVWMTFIMy4xNTAzOVYxMi41QzMuMTUwMzkgMTQuNDQxNiAzLjc3NTYyIDE2LjIzNzEgNC44MzU3MiAxNy42OTYzTDUuOTY1MTkgMTYuMzM1NlpNNy42MzIxOCAyMC4xOTg2TDguNzM5NCAxOC44NjQ3QzkuNzE3MTggMTkuMzY2NyAxMC44MjU3IDE5LjY1IDEyLjAwMDQgMTkuNjVDMTUuOTQ5MiAxOS42NSAxOS4xNTA0IDE2LjQ0ODggMTkuMTUwNCAxMi41VjExSDIwLjg1MDRWMTIuNUMyMC44NTA0IDE3LjA0OTggMTcuNDE3MSAyMC43OTc2IDEzIDIxLjI5NDJWMjRIMTFWMjEuMjk0MUM5Ljc4NjEzIDIxLjE1NzUgOC42NDY1OCAyMC43NzU0IDcuNjMyMTggMjAuMTk4NloiIGZpbGw9IiNmZmYiIC8+CiAgPHBhdGggZD0iTTUuNzM2ODIgMTkuNTUxM0wxOC4yNjY3IDQuNDYzNzEiIHN0cm9rZT0iI0VENDE0RCIgc3R5bGU9InN0cm9rZTojRUQ0MTREO3N0cm9rZTpjb2xvcihkaXNwbGF5LXAzIDAuOTI5MiAwLjI1NTUgMC4zMDA0KTtzdHJva2Utb3BhY2l0eToxOyIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4KCg==", pl = {
isMuted: {
type: Boolean,
default: !1
},
volume: {
type: Number,
default: 0
}
}, Nl = { class: "mic-container" }, Cl = { class: "mic-level-container" }, Ll = {
options: {
virtualHost: !0
}
}, hl = /* @__PURE__ */ z({
...Ll,
__name: "MicrophoneVolume",
props: pl,
setup(a) {
const A = a, e = f(() => A.isMuted ? Ml : gl), t = f(() => A.isMuted || !A.volume ? "" : `height: ${A.volume * 4}%`);
return (o, i) => (I(), h("div", Nl, [
T("div", Cl, [
T("div", {
class: "mic-level",
style: AA(n(t))
}, null, 4)
]),
S(he, { src: n(e) }, null, 8, ["src"])
]));
}
});
const Ha = /* @__PURE__ */ X(hl, [["__scopeId", "data-v-ea062939"]]), WA = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSJ1cmwoI2EpIiBkPSJNLTUtNWgxMTB2MTEwSC01eiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjUgNzEuNWMwLTEwLjI2NCA3LjkzLTE4LjY3NiAxNy45OTgtMTkuNDQzLjQ5Ni0uMDM4Ljk5Ny0uMDU3IDEuNTAyLS4wNTdoMTNjLjUwNSAwIDEuMDA2LjAyIDEuNTAxLjA1N0M2OS4wNyA1Mi44MjQgNzcgNjEuMjM2IDc3IDcxLjV2Ni43ODNIMjVWNzEuNXpNNDQuNSA0NS42MDVhMTQuMDc1IDE0LjA3NSAwIDAgMS0uMjA1LS4xMDRjLTQuNzA0LTIuNDMxLTcuOTItNy4zNC03LjkyLTEzLjAwMSAwLTguMDc3IDYuNTQ4LTE0LjYyNSAxNC42MjUtMTQuNjI1UzY1LjYyNSAyNC40MjMgNjUuNjI1IDMyLjVjMCA1LjY2LTMuMjE2IDEwLjU3LTcuOTIgMTMtLjA2OC4wMzYtLjEzNi4wNy0uMjA1LjEwNWExNC41NjUgMTQuNTY1IDAgMCAxLTYuNSAxLjUyYy0yLjMzNSAwLTQuNTQyLS41NDctNi41LTEuNTJ6IiBmaWxsPSIjRDVFMEYyIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iNzMuNSIgeTE9Ii01IiB4Mj0iNSIgeTI9Ijk4LjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjN0M4NTlCIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNzQ3QzkwIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+", Sl = {
// ============== OverlayStream 业务组件 =================
showOverlayStream: {
type: Boolean,
default: !0
},
customClass: {
type: String
},
customStyle: {
type: Object
},
isSmallWindow: {
type: Boolean,
default: !1
},
tip: {
type: String,
default: null
},
// ============== Overlay 基础组件 =================
showOverlay: {
type: Boolean,
default: !0
},
showMask: {
type: Boolean,
default: !0
},
showBackgroundImage: {
type: Boolean,
default: !0
},
blur: {
type: Boolean,
default: !0
},
bgColor: {
type: String
},
bgImage: {
type: String,
default: WA
},
overlayZIndex: {
type: Number
},
customOverlayClass: {
type: String
},
fit: {
type: String
},
// ============== Loading 基础组件 =================
showLoading: {
type: Boolean,
default: !1
},
// ============== Avatar 基础组件 =================
showAvatar: {
type: Boolean,
default: !0
},
avatar: {
type: String,
default: WA
},
// ============== Text(username) 基础组件 =================
showUserName: {
type: Boolean,
default: !0
},
username: {
type: String
},
color: {
type: String,
default: "#FFF"
},
// ============== MicrophoneVolume 业务组件 =================
showMicVolume: {
type: Boolean,
default: !1
},
isMuted: {
type: Boolean,
default: !1
},
volume: {
type: Number,
default: 0
},
// ============== Tip 业务组件 =================
showTip: {
type: Boolean,
default: !0
}
}, yl = ["error"], fl = { class: "overlay-stream-content-container" }, ml = { class: "overlay-stream-content" }, Tl = { class: "overlay-stream-avatar" }, vl = { class: "overlay-stream-info" }, Dl = { class: "overlay-stream-tip" }, wl = { key: 0 }, El = {
options: {
virtualHost: !0
}
}, jl = /* @__PURE__ */ z({
...El,
__name: "OverlayStream",
props: Sl,
emits: yl,
setup(a, { emit: A }) {
const e = A, t = a, o = L(100), { isFloatWindow: i } = G(GA()), s = O.isPC ? "40px" : "20px";
cA([() => t.isSmallWindow, i], () => {
i.value ? o.value = t.isSmallWindow ? 20 : 40 : o.value = t.isSmallWindow ? 40 : 100;
}, {
immediate: !0
});
const c = f(() => iA([
"overlay-stream-container",
{
pc: O.isPC,
mobile: !O.isPC,
float: i.value
}
])), r = (d) => {
e("error", d);
};
return (d, g) => d.showOverlayStream ? (I(), h("div", {
key: 0,
class: V(n(c)),
style: AA([d.customStyle])
}, [
S(Za, {
show: d.showOverlay,
"show-background-image": d.showBackgroundImage,
"show-mask": d.showMask,
blur: d.blur,
zIndex: d.overlayZIndex,
bgColor: d.bgColor,
bgImage: d.bgImage || n(WA),
fit: d.fit,
defaultSrc: n(WA),
customStyle: { position: "absolute", width: "100%", height: "100%" },
"custom-mask-style": { "backdrop-filter": "blur(12px)", "-webkit-backdrop-filter": "blur(12px)" },
customClass: d.customOverlayClass,
onError: r
}, {
default: v(() => [
T("div", fl, [
T("div", ml, [
d.showLoading ? (I(), E(jt, {
key: 0,
mode: "dot"
})) : w("", !0),
T("div", Tl, [
d.showAvatar ? (I(), E(Ya, {
key: 0,
src: d.avatar || n(WA),
size: n(o)
}, null, 8, ["src", "size"])) : w("", !0)
]),
T("div", vl, [
d.showUserName ? (I(), E(pA, {
key: 0,
truncated: !0,
size: n(s),
color: d.color,
width: "200px",
weight: 500
}, {
default: v(() => [
MA(B(d.username), 1)
]),
_: 1
}, 8, ["size", "color"])) : w("", !0),
d.showMicVolume ? (I(), E(Ha, {
key: 1,
isMuted: d.isMuted,
volume: d.volume
}, null, 8, ["isMuted", "volume"])) : w("", !0)
]),
T("div", Dl, [
d.showTip && d.tip ? (I(), h("div", wl, B(d.tip), 1)) : w("", !0)
])
]),
H(d.$slots, "default", {}, void 0, !0)
])
]),
_: 3
}, 8, ["show", "show-background-image", "show-mask", "blur", "zIndex", "bgColor", "bgImage", "fit", "defaultSrc", "customClass"])
], 6)) : w("", !0);
}
});
const Ka = /* @__PURE__ */ X(jl, [["__scopeId", "data-v-34807212"]]), zl = { class: "waiting-container" }, bl = {
key: 0,
class: "groupcall-info"
}, Ul = { class: "tip" }, Ol = { class: "avatar-group" }, Vl = { class: "avatar-item" }, Pl = /* @__PURE__ */ z({
__name: "Waiting",
setup(a) {
const { localUserInfoExcludeVolume: A, remoteUserListExcludeVolume: e } = G(OA()), { callerUserInfo: t } = G(Un()), { isGroupCall: o } = G(rA()), i = Ua(), s = uA(), c = f(() => {
var D, j;
return o.value ? t.value.displayUserInfo : (j = (D = e.value) == null ? void 0 : D[0]) == null ? void 0 : j.displayUserInfo;
}), r = f(() => {
var D, j;
return o.value ? t.value.avatar : (j = (D = e.value) == null ? void 0 : D[0]) == null ? void 0 : j.avatar;
}), d = f(() => o.value ? !0 : !A.value.isVideoAvailable), g = f(() => o.value ? s.value("Invited group call") : null), N = f(() => {
var D, j;
return o.value ? i.value[t.value.userId] || r.value : i.value[(j = (D = e.value) == null ? void 0 : D[0]) == null ? void 0 : j.userId] || r.value;
}), C = L(!1), p = L("fill");
let y = L(!1);
Se(() => {
var D, j, k, q;
if (y.value) {
C.value = o.value ? !0 : !A.value.isVideoAvailable, p.value = "cover";
return;
}
o.value ? (C.value = !i.value[t.value.userId], p.value = i.value[t.value.userId] ? "fill" : "cover") : (C.value = !A.value.isVideoAvailable && !i.value[(j = (D = e.value) == null ? void 0 : D[0]) == null ? void 0 : j.userId], p.value = i.value[(q = (k = e.value) == null ? void 0 : k[0]) == null ? void 0 : q.userId] ? "fill" : "cover");
});
const m = () => {
y.value = !0;
};
return (D, j) => (I(), h("div", zl, [
S(Ka, {
username: n(c),
avatar: n(r),
"bg-image": n(N),
"show-avatar": !n(O).isPC,
"show-loading": !1,
"bg-color": "#22262ed9",
"show-mask": n(C),
"show-background-image": n(d),
tip: n(g),
fit: n(p),
onError: m
}, {
default: v(() => [
!n(O).isPC && n(o) ? (I(), h("div", bl, [
T("div", Ul, [
S(pA, { color: "#FFF" }, {
default: v(() => [
MA(B(n(e).length) + B(n(s)("people in the call")), 1)
]),
_: 1
})
]),
T("div", Ol, [
(I(!0), h(RA, null, ue(n(e), (k) => (I(), h("div", Vl, [
S(Ya, {
size: "100%",
src: k.avatar || n(WA)
}, null, 8, ["src"])
]))), 256))
])
])) : w("", !0)
]),
_: 1
}, 8, ["username", "avatar", "bg-image", "show-avatar", "show-mask", "show-background-image", "tip", "fit"])
]));
}
});
const Ja = /* @__PURE__ */ X(Pl, [["__scopeId", "data-v-8dc3669f"]]), xl = {
bigWindow: {
type: String
},
showSmallWindow: {
type: Boolean,
default: !0
},
smallWindowWidth: {
type: String,
default: "30%"
},
smallWindowHeight: {
type: String,
default: "30%"
}
}, Bl = ["toggle"], _a = "ToggleWindowContextKey", Rl = {
options: {
virtualHost: !0
}
}, Gl = /* @__PURE__ */ z({
...Rl,
__name: "ToggleWindow",
props: xl,
emits: Bl,
setup(a, { emit: A }) {
const e = a, t = A, o = L(e.bigWindow), i = `${F}-toggle-window`, s = (c) => {
o.value = c, t("toggle", c);
};
return cA(() => e.bigWindow, () => {
o.value = e.bigWindow;
}), EA(_a, {
bigWindow: o,
toggleWindow: s,
smallWindowWidth: ut(e, "smallWindowWidth"),
smallWindowHeight: ut(e, "smallWindowHeight"),
showSmallWindow: ut(e, "showSmallWindow")
}), (c, r) => (I(), h("div", {
class: V(i)
}, [
H(c.$slots, "default")
]));
}
});
const kl = {
options: {
virtualHost: !0
}
}, ql = /* @__PURE__ */ z({
...kl,
__name: "Portal",
props: ["disabled"],
setup(a) {
return (A, e) => {
const t = aa("root-portal");
return I(), E(t, {
enable: !a.disabled
}, {
default: v(() => [
H(A.$slots, "default")
]),
_: 3
}, 8, ["enable"]);
};
}
}), Wl = {
name: "teleport",
props: {
to: {
type: String,
required: !0
},
source: {
type: String,
required: !0
},
disabled: {
type: Boolean,
required: !0
}
},
mounted() {
if (this.disabled)
return;
const a = document.querySelector(this.to);
a && a.appendChild(this.$el);
},
watch: {
disabled: {
immediate: !0,
handler() {
var a, A;
this.disabled ? (A = document.querySelector(this.source)) == null || A.appendChild(this.$el) : (a = document.querySelector(this.to)) == null || a.appendChild(this.$el);
}
}
},
destroyed() {
const a = document.querySelector(this.to);
if (a)
try {
a.removeChild(this.$el);
} catch (A) {
console.debug(A);
}
}
};
function Xl(a, A, e, t, o, i) {
return I(), h("div", null, [
H(a.$slots, "default")
]);
}
const Ql = /* @__PURE__ */ X(Wl, [["render", Xl]]), Fl = {
options: {
virtualHost: !0
}
}, Zl = /* @__PURE__ */ z({
...Fl,
__name: "Portal",
props: ["disabled", "to"],
setup(a) {
return (A, e) => (I(), E(Uo, {
disabled: a.disabled,
to: a.to
}, [
H(A.$slots, "default")
], 8, ["disabled", "to"]));
}
}), Yl = {
disabled: {
type: Boolean,
default: !1
},
to: {
type: String,
default: "body"
},
source: {
type: String,
default: "body"
}
}, $a = /* @__PURE__ */ z({
__name: "Portal",
props: Yl,
setup(a) {
const { majorVersion: A } = li();
f(() => A === "3");
const e = f(() => A === "2");
return (t, o) => (I(), h("div", null, [
n(yt) ? (I(), E(ql, {
key: 0,
disabled: t.disabled
}, {
default: v(() => [
H(t.$slots, "default")
]),
_: 3
}, 8, ["disabled"])) : n(e) ? (I(), E(Ql, {
key: 1,
disabled: t.disabled,
to: t.to,
source: t.source
}, {
default: v(() => [
H(t.$slots, "default")
]),
_: 3
}, 8, ["disabled", "to", "source"])) : (I(), E(Zl, {
key: 2,
disabled: t.disabled,
to: t.to
}, {
default: v(() => [
H(t.$slots, "default")
]),
_: 3
}, 8, ["disabled", "to"]))
]));
}
}), Hl = {
value: {
type: String
}
}, Kl = {
options: {
virtualHost: !0
}
}, _t = /* @__PURE__ */ z({
...Kl,
__name: "ToggleWindowItem",
props: Hl,
setup(a) {
const A = a, {
bigWindow: e,
toggleWindow: t,
smallWindowWidth: o,
smallWindowHeight: i,
showSmallWindow: s
} = zA(_a), c = f(() => iA([
`${F}-toggle-window-item`,
`${F}-toggle-window-item--${e.value === A.value ? "big" : "small"}`,
{
pc: Ie,
mobile: !Ie
}
])), r = f(() => {
let d = {};
return e.value !== A.value && (d = { width: o.value, height: i.value }, s.value ? d.visibility = "" : d.visibility = "hidden"), d;
});
return (d, g) => (I(), h("div", {
class: V(n(c)),
style: AA([n(r)]),
onClick: g[0] || (g[0] = () => n(t)(d.value))
}, [
H(d.$slots, "default")
], 6));
}
});
const zt = {
nickName: {
type: String,
default: ""
},
isSelf: {
type: Boolean,
default: !1
},
isMuted: {
type: Boolean,
default: !1
},
volume: {
type: Number,
default: 0
},
showNickName: {
type: Boolean,
default: !1
},
showSwitchCameraButton: {
type: Boolean,
default: !1
},
showVirtualBackgroundButton: {
type: Boolean,
default: !1
},
showNetWorkStatus: {
type: Boolean,
default: !1
}
}, Ao = "data:image/png;base64,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", Jl = { class: "stream-userInfo" }, _l = { class: "nickname" }, $l = { key: 0 }, As = {
options: {
virtualHost: !0
}
}, es = /* @__PURE__ */ z({
...As,
__name: "StreamInfoPC",
props: zt,
setup(a) {
const A = uA();
return (e, t) => (I(), E(se, null, {
default: v(() => [
S(SA, {
span: 12,
justify: "start",
align: "center"
}, {
default: v(() => [
T("div", Jl, [
S(Ha, {
class: "mic-volume",
"is-muted": e.isMuted,
volume: e.volume
}, null, 8, ["is-muted", "volume"]),
T("div", _l, [
S(pA, {
color: "#fff",
truncated: !0,
width: "80px",
size: "14px"
}, {
default: v(() => [
MA(B(e.nickName), 1)
]),
_: 1
}),
lA(S(pA, {
color: "#fff",
size: "14px"
}, {
default: v(() => [
MA(B(n(A)("me")), 1)
]),
_: 1
}, 512), [
[sA, e.isSelf]
])
])
])
]),
_: 1
}),
S(SA, {
span: 12,
justify: "center"
}, {
default: v(() => [
e.showNetWorkStatus ? (I(), h("div", $l, [
S(TA, {
width: "24px",
height: "24px",
src: n(Ao)
}, null, 8, ["src"])
])) : w("", !0)
]),
_: 1
})
]),
_: 1
}));
}
});
const ts = /* @__PURE__ */ X(es, [["__scopeId", "data-v-73beaeef"]]), as = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsdGVyPSJ1cmwoI2EpIj48Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxMiIgZmlsbD0iI2ZmZiIvPjwvZz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE1LjgxMiAyMi41MzhjNC43MTYtNC43MTUgNC43MTYtMTIuMzYgMC0xNy4wNzZsLTEuNzY3IDEuNzY3YTkuNTc1IDkuNTc1IDAgMCAxIDAgMTMuNTQxbDEuNzY3IDEuNzY4eiIgZmlsbD0iIzFDNjZFNSIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTIuMTg4IDE5LjEzNmE3LjI2NCA3LjI2NCAwIDAgMCAwLTEwLjI3M2wtMS43NjggMS43NjhhNC43NjQgNC43NjQgMCAwIDEgMCA2LjczN2wxLjc2OCAxLjc2OHpNOS4xMjEgMTYuMDdhMi45MjcgMi45MjcgMCAwIDAgMC00LjE0bC0yLjAxOCAyLjAxOGEuMDczLjA3MyAwIDAgMSAwIC4xMDNsMi4wMTggMi4wMTh6IiBmaWxsPSIjMUM2NkU1Ii8+PGRlZnM+PGZpbHRlciBpZD0iYSIgeD0iMCIgeT0iMCIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+PGZlT2Zmc2V0Lz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxIi8+PGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+PGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjI1IDAiLz48ZmVCbGVuZCBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMTI0XzY0NyIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18xMjRfNjQ3IiByZXN1bHQ9InNoYXBlIi8+PC9maWx0ZXI+PC9kZWZzPjwvc3ZnPg==", os = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsdGVyPSJ1cmwoI2EpIj48Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxMiIgZmlsbD0iI2ZmZiIvPjwvZz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEwLjY2NyAxMGEzLjMzMyAzLjMzMyAwIDAgMSA1LjkzNy0yLjA4bC01Ljg3MiA3LjA3M2EzLjM0NSAzLjM0NSAwIDAgMS0uMDY1LS42NlYxMHpNOS42MyAxNi4zMjFhNC43ODIgNC43ODIgMCAwIDEtLjQzLTEuOTg4di0xSDguMTMzdjFjMCAxLjA0Ny4yNzUgMi4wMy43NTUgMi44ODFsLjc0Mi0uODkzem0xLjI4MyAzLjAwMi42OS0uODNhNC44IDQuOCAwIDAgMCA3LjE5OC00LjE2di0xaDEuMDY2djFhNS44NjcgNS44NjcgMCAwIDEtNS4zMzQgNS44NDNWMjJoLTEuMDY2di0xLjgyNGE1LjgzMSA1LjgzMSAwIDAgMS0yLjU1NC0uODUzem0xLjY0Ni0xLjk4MyA0Ljc3NC01Ljc1MXYyLjc0NGEzLjMzMyAzLjMzMyAwIDAgMS00Ljc3NCAzLjAwN3oiIGZpbGw9IiNFNjM5NUMiLz48cGF0aCBkPSJtOS40MjMgMTguODQ1IDguMzYtMTAuMDY3IiBzdHJva2U9IiNFNjM5NUMiIHN0cm9rZS13aWR0aD0iMS4wNjciIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48ZGVmcz48ZmlsdGVyIGlkPSJhIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz48ZmVPZmZzZXQvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEiLz48ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz48ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMjUgMCIvPjxmZUJsZW5kIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18xNzQxXzEwNjc4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzE3NDFfMTA2NzgiIHJlc3VsdD0ic2hhcGUiLz48L2ZpbHRlcj48L2RlZnM+PC9zdmc+", ns = { key: 0 }, is = {
options: {
virtualHost: !0
}
}, ls = /* @__PURE__ */ z({
...is,
__name: "StreamInfoMobile",
props: zt,
setup(a) {
const { enableVirtualBackground: A } = G(rA()), e = async () => {
await W.switchCamera();
}, t = async () => {
await W.setBlurBackground(!A.value);
};
return (o, i) => (I(), E(se, { "custom-style": { padding: "2px 5px" } }, {
default: v(() => [
S(SA, {
span: 12,
justify: "start",
align: "center"
}, {
default: v(() => [
o.showNickName ? (I(), E(pA, {
key: 0,
width: "100px",
truncated: !0,
color: "#FFF"
}, {
default: v(() => [
MA(B(o.nickName), 1)
]),
_: 1
})) : w("", !0),
lA(T("div", null, [
S(he, {
size: 24,
src: n(as)
}, null, 8, ["src"])
], 512), [
[sA, !o.isMuted && o.volume]
]),
lA(T("div", null, [
S(he, {
size: 24,
src: n(os)
}, null, 8, ["src"])
], 512), [
[sA, o.isMuted]
])
]),
_: 1
}),
S(SA, {
span: 12,
justify: "end",
align: "center"
}, {
default: v(() => [
o.showNetWorkStatus ? (I(), h("div", ns, [
S(TA, {
width: "24px",
height: "24px",
src: n(Ao)
}, null, 8, ["src"])
])) : w("", !0),
o.showSwitchCameraButton ? (I(), h("div", {
key: 1,
class: "switch-camera stream-icon",
onClick: Le(e, ["stop"])
}, [
S(TA, {
width: "15px",
height: "15px",
src: n(HA)
}, null, 8, ["src"])
])) : w("", !0),
o.showVirtualBackgroundButton ? (I(), h("div", {
key: 2,
class: "stream-icon",
onClick: Le(t, ["stop"])
}, [
S(TA, {
width: "15px",
height: "15px",
src: n(JA)
}, null, 8, ["src"])
])) : w("", !0)
]),
_: 1
})
]),
_: 1
}));
}
});
const ss = /* @__PURE__ */ X(ls, [["__scopeId", "data-v-b2b7ff75"]]), rs = {
options: {
virtualHost: !0
}
}, $e = /* @__PURE__ */ z({
...rs,
__name: "TKStreamInfo",
props: zt,
setup(a) {
const { isGroupCall: A } = rA(), e = O.isPC;
return (t, o) => (I(), h("div", null, [
n(e) ? (I(), E(ts, {
key: 0,
nickName: t.nickName,
isSelf: t.isSelf,
isMuted: t.isMuted,
volume: t.volume,
showNetWorkStatus: t.showNetWorkStatus
}, null, 8, ["nickName", "isSelf", "isMuted", "volume", "showNetWorkStatus"])) : w("", !0),
n(A) && !n(e) ? (I(), E(ss, {
key: 1,
showSwitchCameraButton: t.showSwitchCameraButton,
showVirtualBackgroundButton: t.showVirtualBackgroundButton,
showNetWorkStatus: t.showNetWorkStatus,
nickName: t.nickName,
showNickName: t.showNickName,
isSelf: t.isSelf,
isMuted: t.isMuted,
volume: t.volume
}, null, 8, ["showSwitchCameraButton", "showVirtualBackgroundButton", "showNetWorkStatus", "nickName", "showNickName", "isSelf", "isMuted", "volume"])) : w("", !0)
]));
}
}), cs = {
show: {
type: Boolean,
default: !0
},
domId: {
type: String
},
loading: {
type: Boolean
},
showStreamInfo: {
type: Boolean
},
showAudioStream: {
type: Boolean
}
}, us = ["id"], ds = { class: "audio-stream-container" }, Is = {
options: {
virtualHost: !0
}
}, gs = /* @__PURE__ */ z({
...Is,
__name: "Pusher",
props: cs,
setup(a) {
const A = L(M.getData(u.CALL, l.PUSHER_ID)), e = iA([
"stream-info-container",
{ mobile: !O.isPC }
]), t = (i) => {
A.value = i;
}, o = {
[l.PUSHER_ID]: t
};
return yA(() => {
M.watch(u.CALL, o, { notifyRangeWhenWatch: l.MYSELF });
}), LA(() => {
M.unwatch(u.CALL, o);
}), (i, s) => lA((I(), h("div", {
id: i.domId,
class: "pusher-container"
}, [
lA(T("div", ds, [
H(i.$slots, "audio-stream", {}, void 0, !0)
], 512), [
[sA, i.showAudioStream]
]),
H(i.$slots, "loading", {}, void 0, !0),
T("div", {
class: V(n(e))
}, [
H(i.$slots, "stream-info", {}, void 0, !0)
], 2)
], 8, us)), [
[sA, i.show]
]);
}
});
const eo = /* @__PURE__ */ X(gs, [["__scopeId", "data-v-8cf5d7b3"]]), Ms = {
options: {
virtualHost: !0
}
}, ps = /* @__PURE__ */ z({
...Ms,
__name: "weChatPlayer",
props: {
remoteClass: {
type: String,
required: !0
},
domId: {
type: String
}
},
setup(a) {
const A = L(M.getData(u.CALL, l.PLAYER)), e = L(M.getData(u.CALL, l.CALL_STATUS)), t = L(M.getData(u.CALL, l.IS_EAR_PHONE) ? ve.EAR : ve.SPEAKER), o = a, i = (y) => {
A.value = JSON.parse(JSON.stringify(y));
}, s = f(() => {
var y;
return (y = A.value) == null ? void 0 : y.find((m) => (m == null ? void 0 : m.userID) === o.domId);
}), c = (y) => {
e.value = y;
}, r = (y) => {
t.value = y ? ve.EAR : ve.SPEAKER;
}, d = {
[l.PLAYER]: i,
[l.CALL_STATUS]: c,
[l.IS_EAR_PHONE]: r
};
yA(() => {
M.watch(u.CALL, d, { notifyRangeWhenWatch: l.MYSELF });
}), LA(() => {
M.unwatch(u.CALL, d);
});
function g(y) {
W._tuiCallEngine._playerStateChange(y);
}
function N(y) {
}
function C(y) {
W._tuiCallEngine._playNetStatus(y);
}
function p(y) {
W._tuiCallEngine._playerAudioVolumeNotify(y);
}
return (y, m) => {
const D = aa("live-player");
return I(), h("div", {
class: V(a.remoteClass)
}, [
n(s) && (n(s).hasAudio || n(s).hasVideo) ? (I(), E(D, {
key: 0,
class: "stream",
id: n(s).id,
"data-userid": n(s).userID,
"data-streamid": n(s).streamID,
"data-streamtype": n(s).streamType,
src: n(s).src,
mode: "RTC",
autoplay: n(s).autoplay,
"mute-audio": n(s).muteAudio,
"mute-video": n(s).muteVideo,
orientation: n(s).orientation,
"object-fit": n(s).objectFit,
"background-mute": n(s).enableBackgroundMute,
"min-cache": n(s).minCache,
"max-cache": n(s).maxCache,
"sound-mode": n(t),
"enable-recv-message": n(s).enableRecvMessage,
"auto-pause-if-navigate": n(s).autoPauseIfNavigate,
"auto-pause-if-open-native": n(s).autoPauseIfOpenNative,
onStatechange: g,
onFullscreenchange: N,
onNetstatus: C,
onAudiovolumenotify: p
}, null, 8, ["id", "data-userid", "data-streamid", "data-streamtype", "src", "autoplay", "mute-audio", "mute-video", "orientation", "object-fit", "background-mute", "min-cache", "max-cache", "sound-mode", "enable-recv-message", "auto-pause-if-navigate", "auto-pause-if-open-native"])) : w("", !0)
], 2);
};
}
});
const Ns = /* @__PURE__ */ X(ps, [["__scopeId", "data-v-b0aae39e"]]), Cs = {
show: {
type: Boolean,
default: !0
},
domId: {
type: String
},
loading: {
type: Boolean
},
showStreamInfo: {
type: Boolean
},
showAudioStream: {
type: Boolean
}
}, Ls = ["id"], hs = { class: "audio-stream-container" }, Ss = {
options: {
virtualHost: !0
}
}, ys = /* @__PURE__ */ z({
...Ss,
__name: "Player",
props: Cs,
setup(a) {
const A = iA([
"stream-info-container",
{ mobile: !O.isPC }
]);
return (e, t) => lA((I(), h("div", {
id: e.domId,
class: "player-container"
}, [
lA(T("div", hs, [
H(e.$slots, "audio-stream", {}, void 0, !0)
], 512), [
[sA, e.showAudioStream]
]),
H(e.$slots, "loading", {}, void 0, !0),
T("div", {
class: V(n(A))
}, [
H(e.$slots, "stream-info", {}, void 0, !0)
], 2),
n(O).isWeChat ? (I(), E(Ns, {
key: 0,
"dom-id": e.domId,
remoteClass: "small-view"
}, null, 8, ["dom-id"])) : w("", !0)
], 8, Ls)), [
[sA, e.show]
]);
}
});
const to = /* @__PURE__ */ X(ys, [["__scopeId", "data-v-8e509e0d"]]), fs = {
avatar: {
type: String
},
username: {
type: String
},
isVideoAvailable: {
type: Boolean
},
showStreamInfo: {
type: Boolean
},
isSmallWindow: {
type: Boolean,
default: !1
},
isMuted: {
type: Boolean,
default: !0
},
volume: {
type: Number,
default: 0
},
userId: {
type: String
}
}, ms = {
options: {
virtualHost: !0
}
}, At = /* @__PURE__ */ z({
...ms,
__name: "AudioStream",
props: fs,
setup(a) {
const A = a, e = Ua(), { callType: t, isGroupCall: o } = G(rA()), { isFloatWindow: i } = G(GA()), s = f(() => !o.value && !O.isPC), c = f(() => o.value ? O.isPC : t.value === _.AUDIO), r = f(() => !o.value && O.isPC && t.value === _.AUDIO), d = f(() => ({ zIndex: 1 })), g = f(() => e.value[A.userId] || A.avatar), N = L(!e.value[A.userId]), C = L(e.value[A.userId] ? "fill" : "cover");
cA([() => A.userId, e], () => {
e.value[A.userId] ? (C.value = "fill", N.value = !1) : (C.value = "cover", N.value = !0);
}, {
immediate: !0
});
const p = () => {
N.value = !0, C.value = "cover";
};
return (y, m) => (I(), E(Ka, {
avatar: y.avatar,
"bg-image": n(g),
"show-avatar": n(s),
username: y.username,
"show-user-name": n(c),
"show-mask": !n(o) && n(N),
fit: n(C),
blur: !n(o),
"show-mic-volume": n(r),
"show-tip": !n(o) && !n(i),
"custom-style": n(d),
"is-small-window": y.isSmallWindow,
"is-muted": y.isMuted,
volume: y.volume,
"bg-color": "rgba(0, 0, 0, 0.5)",
onError: p
}, null, 8, ["avatar", "bg-image", "show-avatar", "username", "show-user-name", "show-mask", "fit", "blur", "show-mic-volume", "show-tip", "custom-style", "is-small-window", "is-muted", "volume"]));
}
}), Ts = "data:image/svg+xml;base64,IDxzdmcgd2lkdGg9IjI2IiBoZWlnaHQ9IjI2IiB2aWV3Qm94PSIwIDAgMjYgMjYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgPHBhdGggZD0iTTE4LjQ0MzcgMTIuNDQ5QzE4LjQ0MzcgMTQuMTE0MiAxOC4yMzM2IDE1LjM1MTUgMjEuNTA4OSAxNS43MTI2QzI0Ljc4NzUgMTYuMDczNyAyNC4zNjY2IDEzLjY3OTQgMjQuMzY2MiAxMi4wNjY5QzI0LjM2NDkgMTAuMjA2MSAyMC4wNjAyIDcuNjE4OTUgMTMuMjcyNiA3LjYxNzNDNi40ODY2MiA3LjYxNzM1IDIuMTc4OSAxMC4yMDUgMi4xNzg4OCAxMi4wNjdDMi4xNzg4NyAxMy42OCAxLjc1NjIxIDE2LjA3MjYgNS4wMzMxNSAxNS43MTIzQzguMzEwMDkgMTUuMzUzNyA4LjEwMDA1IDE0LjExNTUgOC4wOTgzNyAxMi40NDk1QzguMTAxMzQgMTEuMjg2MiAxMC43NTg3IDExLjAzMTYgMTMuMjcyNSAxMS4wMjk4QzE1Ljc4NjMgMTEuMDI4MSAxOC40NDU0IDExLjI4NDQgMTguNDQzNyAxMi40NDlaIiBmaWxsPSIjRkUzQzQ0Ii8+CiAgICA8L3N2Zz4=", vs = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjY2NjY2IDQuMTY2NjhDNi42NjY2NiAyLjMyODM0IDguMTYxNjYgMC44MzMzNDQgOS45OTk5OSAwLjgzMzM0NEMxMS44MzgzIDAuODMzMzQ0IDEzLjMzMzMgMi4zMjgzNCAxMy4zMzMzIDQuMTY2NjhWOS4xNjY2OEMxMy4zMzMzIDExLjAwNSAxMS44MzgzIDEyLjUgOS45OTk5OSAxMi41QzguMTYxNjYgMTIuNSA2LjY2NjY2IDExLjAwNSA2LjY2NjY2IDkuMTY2NjhWNC4xNjY2OFpNNi42NjY2NiAxOC4zMzMzQzYuNjY2NjYgMTcuODcyNSA3LjAzOTk5IDE3LjUgNy40OTk5OSAxNy41SDEyLjVDMTIuOTYwOCAxNy41IDEzLjMzMzMgMTcuODcyNSAxMy4zMzMzIDE4LjMzMzNDMTMuMzMzMyAxOC43OTQyIDEyLjk2MDggMTkuMTY2NyAxMi41IDE5LjE2NjdINy40OTk5OUM3LjAzOTk5IDE5LjE2NjcgNi42NjY2NiAxOC43OTQyIDYuNjY2NjYgMTguMzMzM1oiIGZpbGw9IiMxMDE0MTkiLz4KPHBhdGggZD0iTTE1LjgzMzMgOC4zNTEyVjkuNTA4MjVDMTUuODMzMyAxMi4wODEgMTMuMjIxNyAxNSA5Ljk5OTk5IDE1QzYuNzc4MzMgMTUgNC4xNjY2NiAxMi4wODEgNC4xNjY2NiA5LjUwODI1VjguMzMzMzQiIHN0cm9rZT0iIzEwMTQxOSIgc3Ryb2tlLXdpZHRoPSIxLjY2NjY3IiBzdHJva2UtbGluZWNhcD0icm91bmQiLz4KPC9zdmc+", Ds = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAxNSAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNC42MjQ3IDAuNzE5MTY4QzE0LjE5MzQgMC4zNzQxNTggMTMuNTY0MSAwLjQ0NDA4IDEzLjIxOTEgMC44NzUzNDJMMTAuODE2OCAzLjgzMjAzQzEwLjE3ODkgMy4wMjQ1NSA5LjE1Mzg3IDIuNTAwMDQgOC4wMDAwMSAyLjUwMDA0QzYuMDY5NzYgMi41MDAwNCA0LjUwMDAxIDMuOTY3ODUgNC41MDAwMSA1Ljc3Mjc2VjEwLjY4MTlDNC41MDAwMSAxMC45NTYzIDQuNTM2MyAxMS4yMjI5IDQuNjA0NjMgMTEuNDc3OEwzLjM4OCAxMi45NzUyQzIuOTg0NDkgMTIuMzQzMyAyLjc1MDAxIDExLjY1MjIgMi43NTAwMSAxMC45NzE3VjkuODE4MTlMMi43NDMxOSA5LjcxNTU2QzIuNjg5MiA5LjMxMjEzIDIuMzIxMDggOS4wMDAwMSAxLjg3NTAxIDkuMDAwMDFDMS4zOTE3NiA5LjAwMDAxIDEuMDAwMDEgOS4zNjYzMiAxLjAwMDAxIDkuODE4MTlWMTAuOTcxN0wxLjAwNDY2IDExLjE3NjFDMS4wNTU1NyAxMi4yOTY4IDEuNTIxNjEgMTMuNDAxNiAyLjI2OTM5IDE0LjM1MTlMMC4yMTkxMzcgMTYuODc1M0wwLjE0Njg2MSAxNi45NzgyQy0wLjExMjk3NyAxNy40MDE3IC0wLjAyMjc3NjcgMTcuOTYyNCAwLjM3NTMxMSAxOC4yODA5QzAuODA2NTczIDE4LjYyNTkgMS40MzU4NyAxOC41NTYgMS43ODA4OCAxOC4xMjQ3TDMuNzE2NjEgMTUuNzQyM0MzLjcxODQ5IDE1Ljc0MzcgMy43MjAzOCAxNS43NDUgMy43MjIyNyAxNS43NDY0TDQuMjk5NyAxNS4wMjQ2TDguMjgwODggMTAuMTI0N0wxNC43ODA5IDIuMTI0NzNMMTQuODUzMiAyLjAyMTkxQzE1LjExMyAxLjU5ODM0IDE1LjAyMjggMS4wMzc2NCAxNC42MjQ3IDAuNzE5MTY4Wk03LjcyNDk5IDEzLjk0NDZMMTEuNSA5LjIyNTgyVjEwLjY4MTlDMTEuNSAxMi40ODY4IDkuOTMwMjYgMTMuOTU0NiA4LjAwMDAxIDEzLjk1NDZDNy45MDc0NiAxMy45NTQ2IDcuODE1NzUgMTMuOTUxMiA3LjcyNDk5IDEzLjk0NDZaTTYuNjA0NDUgMTUuMzQ1M0w1LjUwNzk4IDE2LjcxNTlDNi4yOTIyNSAxNy4wMTM2IDcuMTM1MzIgMTcuMTgxOCA4LjAwMDAxIDE3LjE4MThDMTEuNjk3NiAxNy4xODE4IDE1IDE0LjEwNjQgMTUgMTAuOTcxN1Y5LjgzNTcyTDE0Ljk5MzIgOS43MzMwOUMxNC45MzkyIDkuMzI5NjYgMTQuNTcxMSA5LjAxNzU0IDE0LjEyNSA5LjAxNzU0QzEzLjY0MTggOS4wMTc1NCAxMy4yNSA5LjM4Mzg1IDEzLjI1IDkuODM1NzJWMTAuOTcxN0wxMy4yNDQ1IDExLjE1MjdDMTMuMTEzOCAxMy4zMjYyIDEwLjY1ODkgMTUuNTQ1NSA4LjAwMDAxIDE1LjU0NTVDNy41MjQyNCAxNS41NDU1IDcuMDU1MDEgMTUuNDc0NCA2LjYwNDQ1IDE1LjM0NTNaTTUuMzc1MDEgMTguODYzN0M0Ljg5MjAxIDE4Ljg2MzcgNC41MDAwMSAxOS4yMjk0IDQuNTAwMDEgMTkuNjgxOUM0LjUwMDAxIDIwLjEzNDMgNC44OTIwMSAyMC41IDUuMzc1MDEgMjAuNUgxMC42MjVDMTEuMTA4OSAyMC41IDExLjUgMjAuMTM0MyAxMS41IDE5LjY4MTlDMTEuNSAxOS4yMjk0IDExLjEwODkgMTguODYzNyAxMC42MjUgMTguODYzN0g1LjM3NTAxWiIgZmlsbD0iIzEwMTQxOSIvPgo8L3N2Zz4=", ws = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLjMzMzM3IDkuMzMzMzFIMC4zMzMzNzRWMC45OTk5OEMwLjMzMzM3NCAwLjYzMTc5IDAuNjMxODUxIDAuMzMzMzEzIDEuMDAwMDQgMC4zMzMzMTNMOS4zMzMzOCAwLjMzMzMxM1YyLjMzMzMxSDMuNzQ3NThMMTAuMDQwNSA4LjYyNjI0TDguNjI2MjcgMTAuMDQwNEwyLjMzMzM3IDMuNzQ3NTNWOS4zMzMzMVpNMTguMzMzMSAxMS4zMzMzSDIwLjMzMzFWMTkuNjY2NkMyMC4zMzMxIDIwLjAzNDggMjAuMDM0NyAyMC4zMzMzIDE5LjY2NjUgMjAuMzMzM0wxMS4zMzMxIDIwLjMzMzNMMTEuMzMzMSAxOC4zMzMzSDE2LjkxODlMMTAuNjI2IDEyLjA0MDNMMTIuMDQwMiAxMC42MjYxTDE4LjMzMzEgMTYuOTE5VjExLjMzMzNaIiBmaWxsPSIjMTAxNDE5Ii8+Cjwvc3ZnPg==", Es = { class: "float-window-container" }, js = { class: "float-control-panel" }, zs = { class: "float-control-item-icon" }, bs = ["src"], Us = { class: "float-control-item-icon" }, Os = ["src"], Vs = ["src"], Ps = { class: "float-control-item-icon" }, xs = ["src"], Bs = {
options: {
virtualHost: !0
}
}, Rs = /* @__PURE__ */ z({
...Bs,
__name: "FloatWindow",
setup(a) {
const { localUserInfoExcludeVolume: A } = G(OA()), { callRole: e, callStatus: t } = G(rA()), { isFloatWindow: o } = G(GA());
function i() {
W.toggleMinimize();
}
async function s() {
e.value === gA.CALLEE && t.value === x.CALLING ? await W.reject() : await W.hangup();
}
async function c() {
A.value.isAudioAvailable ? await W.closeMicrophone() : await W.openMicrophone();
}
return (r, d) => (I(), h("div", Es, [
lA(T("div", js, [
T("div", zs, [
T("div", {
class: "float-control-item-icon-container",
onClick: s
}, [
T("img", { src: n(Ts) }, null, 8, bs)
])
]),
lA(T("div", Us, [
T("div", {
class: "float-control-item-icon-container",
onClick: c
}, [
n(A).isAudioAvailable ? (I(), h("img", {
key: 0,
src: n(vs)
}, null, 8, Os)) : (I(), h("img", {
key: 1,
src: n(Ds)
}, null, 8, Vs))
])
], 512), [
[sA, n(o)]
]),
lA(T("div", Ps, [
T("div", {
class: "float-control-item-icon-container",
onClick: i
}, [
T("img", { src: n(ws) }, null, 8, xs)
])
], 512), [
[sA, n(o)]
])
], 512), [
[sA, n(o)]
]),
lA(T("div", null, [
H(r.$slots, "default", {}, void 0, !0)
], 512), [
[sA, !n(o)]
])
]));
}
});
const Gs = /* @__PURE__ */ X(Rs, [["__scopeId", "data-v-63373c5d"]]), ao = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTS43NjEgOS4zMzJDLjAwMSA3LjEzNC45NjMgNC43NzMgMi44MzMgMy4zOSA0LjI1MiAyLjM0MyA1LjY3NiAxLjI4NSA2LjQ5LjY4MWEuOTEyLjkxMiAwIDAgMSAxLjI0LjE0MWw0LjQyOSA1LjIxYy4yOS4zNC4yOS44NDEgMCAxLjE4MmwtMi43MTYgMy4xOThhLjg5My44OTMgMCAwIDAtLjA5MyAxLjAzNCAxOS45NDYgMTkuOTQ2IDAgMCAwIDMuMTUxIDQuMDQ4IDE5LjYyIDE5LjYyIDAgMCAwIDQuMDY0IDMuMTM3Ljg5NS44OTUgMCAwIDAgMS4wMzMtLjA5NGwzLjE4Ni0yLjcwMmEuOTEzLjkxMyAwIDAgMSAxLjE4MSAwbDUuMjE0IDQuNDMxYy4zNjYuMzExLjQyOS44NTIuMTQzIDEuMjM4bC0yLjcyNyAzLjY5Yy0xLjM3MiAxLjg1NS0zLjcxNCAyLjc5OC01Ljg5NSAyLjA0N2EyOC44NjUgMjguODY1IDAgMCAxLTExLjA0LTYuOTA4QTI4Ljg1NSAyOC44NTUgMCAwIDEgLjc2MSA5LjMzMnoiIGZpbGw9IiMxMkI5NjkiLz48L3N2Zz4=", ks = { class: "float-window-tip-container" }, qs = {
options: {
virtualHost: !0
}
}, Ws = /* @__PURE__ */ z({
...qs,
__name: "FloatWindowSingleCall",
setup(a) {
const { callType: A, callStatus: e } = G(rA()), { isFloatWindow: t } = G(GA()), { callDuration: o } = Et(), i = uA(), s = f(() => iA([
"float-window-container",
{
"singlecall-video-float": A.value === _.VIDEO && t.value,
"singlecall-audio-float": A.value === _.AUDIO && t.value
}
]));
function c() {
t.value && W.toggleMinimize();
}
return (r, d) => (I(), h("div", {
class: V(n(s))
}, [
lA(T("div", {
class: "singlecall-video-float-content",
onClick: c
}, [
H(r.$slots, "default", {}, void 0, !0),
T("div", ks, [
n(e) === n(x).CALLING && n(t) ? (I(), E(pA, {
key: 0,
color: "#FFF",
size: "12px"
}, {
default: v(() => [
MA(B(n(i)("wait to be called")), 1)
]),
_: 1
})) : w("", !0)
])
], 512), [
[sA, !(n(t) && n(A) === n(_).AUDIO)]
]),
lA(T("div", {
class: "singlecall-audio-float-content",
onClick: c
}, [
S(TA, {
width: "36px",
height: "36px",
src: n(ao)
}, null, 8, ["src"]),
n(e) === n(x).CONNECTED ? (I(), E(_e, {
key: 0,
fontSize: "12px",
callDuration: n(o),
color: "#12b969"
}, null, 8, ["callDuration"])) : w("", !0),
n(e) === n(x).CALLING && n(t) ? (I(), E(pA, {
key: 1,
color: "#12b969",
size: "12px"
}, {
default: v(() => [
MA(B(n(i)("wait to be called")), 1)
]),
_: 1
})) : w("", !0)
], 512), [
[sA, n(t) && n(A) === n(_).AUDIO]
])
], 2));
}
});
const Xs = /* @__PURE__ */ X(Ws, [["__scopeId", "data-v-ea53b7e0"]]), Qs = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjkxNyA3LjU3di0uNzMxaDEuNXYuNzNhNC41ODMgNC41ODMgMCAxIDAgOS4xNjYgMHYtLjczaDEuNXYuNzNhNi4wODQgNi4wODQgMCAwIDEtNS4zMzMgNi4wMzh2MS4zMDJoLTEuNXYtMS4zMDJhNi4wODQgNi4wODQgMCAwIDEtNS4zMzMtNi4wMzh6IiBmaWxsPSIjMTJCOTY5Ii8+PHJlY3QgeD0iNC42NjciIHk9IjEuMDkxIiB3aWR0aD0iNi42NjciIGhlaWdodD0iOS44OTciIHJ4PSIzLjMzMyIgZmlsbD0iIzEyQjk2OSIvPjwvc3ZnPg==", Fs = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NzIgNi4xMTdhLjYuNiAwIDAgMC0uMzMxLjUzNnYyLjY5M2EuNi42IDAgMCAwIC4zMy41MzdsMi44MDMgMS40MDVhLjIuMiAwIDAgMCAuMjktLjE3OFY0Ljg5YS4yLjIgMCAwIDAtLjI5LS4xNzlsLTIuODAyIDEuNDA2eiIgZmlsbD0iIzEyQjk2OSIvPjxnIGZpbHRlcj0idXJsKCNhKSI+PHJlY3QgeD0iLjY2NyIgeT0iMi44OTQiIHdpZHRoPSIxMC42NjciIGhlaWdodD0iMTAuMjEzIiByeD0iMS41IiBmaWxsPSIjMTJCOTY5Ii8+PC9nPjxkZWZzPjxmaWx0ZXIgaWQ9ImEiIHg9Ii03LjMzMyIgeT0iLTUuMTA2IiB3aWR0aD0iMjYuNjY3IiBoZWlnaHQ9IjI2LjIxMyIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlR2F1c3NpYW5CbHVyIGluPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHN0ZERldmlhdGlvbj0iNCIvPjxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl8xOTc3XzExNjMwIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl8xOTc3XzExNjMwIiByZXN1bHQ9InNoYXBlIi8+PC9maWx0ZXI+PC9kZWZzPjwvc3ZnPg==", Zs = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xLjkxNyA3LjU3di0uNzMxaDEuNXYuNzNhNC41ODMgNC41ODMgMCAxIDAgOS4xNjYgMHYtLjczaDEuNXYuNzNhNi4wODQgNi4wODQgMCAwIDEtNS4zMzMgNi4wMzh2MS4zMDJoLTEuNXYtMS4zMDJhNi4wODQgNi4wODQgMCAwIDEtNS4zMzMtNi4wMzh6IiBmaWxsPSIjQURBREFEIi8+PHJlY3QgeD0iNC42NjciIHk9IjEuMDkxIiB3aWR0aD0iNi42NjciIGhlaWdodD0iOS44OTciIHJ4PSIzLjMzMyIgZmlsbD0iI0FEQURBRCIvPjwvc3ZnPg==", Ys = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMi42NzIgNS43NzdhLjYuNiAwIDAgMC0uMzMxLjUzNnYyLjY5M2EuNi42IDAgMCAwIC4zMy41MzZsMi44MDMgMS40MDZhLjIuMiAwIDAgMCAuMjktLjE3OVY0LjU1YS4yLjIgMCAwIDAtLjI5LS4xNzhsLTIuODAyIDEuNDA2eiIgZmlsbD0iI0FEQURBRCIvPjxnIGZpbHRlcj0idXJsKCNhKSI+PHJlY3QgeD0iLjY2NyIgeT0iMi41NTMiIHdpZHRoPSIxMC42NjciIGhlaWdodD0iMTAuMjEzIiByeD0iMS41IiBmaWxsPSIjQURBREFEIi8+PC9nPjxkZWZzPjxmaWx0ZXIgaWQ9ImEiIHg9Ii03LjMzMyIgeT0iLTUuNDQ3IiB3aWR0aD0iMjYuNjY3IiBoZWlnaHQ9IjI2LjIxMyIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlR2F1c3NpYW5CbHVyIGluPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHN0ZERldmlhdGlvbj0iNCIvPjxmZUNvbXBvc2l0ZSBpbjI9IlNvdXJjZUFscGhhIiBvcGVyYXRvcj0iaW4iIHJlc3VsdD0iZWZmZWN0MV9iYWNrZ3JvdW5kQmx1cl8xMzFfMTQ0OSIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfYmFja2dyb3VuZEJsdXJfMTMxXzE0NDkiIHJlc3VsdD0ic2hhcGUiLz48L2ZpbHRlcj48L2RlZnM+PC9zdmc+", Hs = { class: "stream-container" }, Ks = { class: "video" }, Js = { class: "audio" }, _s = { class: "device-status" }, $s = {
options: {
virtualHost: !0
}
}, Ar = /* @__PURE__ */ z({
...$s,
__name: "FloatWindowGroupCall",
setup(a) {
const { isFloatWindow: A } = G(GA()), { callDuration: e } = Et(), { localUserInfoExcludeVolume: t } = G(OA()), { callStatus: o } = G(rA()), i = uA(), s = f(() => t.value.isAudioAvailable ? Qs : Zs), c = f(() => t.value.isVideoAvailable ? Fs : Ys), r = f(() => iA([
"groupcall-video-float",
{
"not-float": !A.value,
float: A.value
}
]));
function d() {
A.value && W.toggleMinimize();
}
return (g, N) => (I(), h("div", {
class: V(n(r))
}, [
n(A) ? (I(), h("div", {
key: 0,
class: "click-container",
onClickCapture: Le(d, ["stop"])
}, null, 32)) : w("", !0),
T("div", Hs, [
T("div", Ks, [
H(g.$slots, "default", {}, void 0, !0)
]),
lA(T("div", Js, [
S(TA, {
width: "36px",
height: "36px",
src: n(ao)
}, null, 8, ["src"]),
n(o) === n(x).CONNECTED ? (I(), E(_e, {
key: 0,
fontSize: "12px",
callDuration: n(e),
color: "#12b969"
}, null, 8, ["callDuration"])) : w("", !0),
n(o) === n(x).CALLING ? (I(), E(pA, {
key: 1,
size: "12px",
color: "#12b969"
}, {
default: v(() => [
MA(B(n(i)("wait to be called")), 1)
]),
_: 1
})) : w("", !0)
], 512), [
[sA, n(A)]
])
]),
lA(T("div", _s, [
S(TA, {
width: "16px",
height: "16px",
src: n(s)
}, null, 8, ["src"]),
S(TA, {
width: "16px",
height: "16px",
src: n(c)
}, null, 8, ["src"])
], 512), [
[sA, n(A)]
])
], 2));
}
});
const er = /* @__PURE__ */ X(Ar, [["__scopeId", "data-v-0dfe3ae0"]]), tr = { id: "float-window-id" }, ar = {
options: {
virtualHost: !0
}
}, or = /* @__PURE__ */ z({
...ar,
__name: "FloatWindow",
setup(a) {
const { isGroupCall: A } = G(rA());
return (e, t) => (I(), h("div", tr, [
n(A) ? (I(), E(er, { key: 1 }, {
default: v(() => [
H(e.$slots, "default")
]),
_: 3
})) : (I(), E(Xs, { key: 0 }, {
default: v(() => [
H(e.$slots, "default")
]),
_: 3
}))
]));
}
}), nr = {
options: {
virtualHost: !0
}
}, ir = /* @__PURE__ */ z({
...nr,
__name: "FloatWindow",
setup(a) {
const { isFloatWindow: A } = G(GA()), e = f(() => iA([
"float-window-container",
{
float: A.value,
"not-float": !A.value,
pc: O.isPC,
mobile: !O.isPC
}
]));
return (t, o) => (I(), h("div", {
class: V(n(e))
}, [
n(O).isPC ? (I(), E(Gs, { key: 0 }, {
default: v(() => [
H(t.$slots, "default", {}, void 0, !0)
]),
_: 3
})) : w("", !0),
n(O).isPC ? w("", !0) : (I(), E(or, { key: 1 }, {
default: v(() => [
H(t.$slots, "default", {}, void 0, !0)
]),
_: 3
}))
], 2));
}
});
const oo = /* @__PURE__ */ X(ir, [["__scopeId", "data-v-794f0a9b"]]);
function lr() {
const a = xe(), { callStatus: A } = G(rA()), e = L(qA.LOCAL), { remoteUserListExcludeVolume: t } = G(OA());
return cA([t, a, A], () => {
var s, c, r, d;
if (A.value === x.CALLING)
return;
const o = [Fe.RemoteInLargeView, Fe.LocalInLargeView], i = (s = a.value) == null ? void 0 : s.layoutMode;
if (o.includes(i)) {
e.value = (c = a.value) == null ? void 0 : c.layoutMode;
return;
}
(d = (r = t.value) == null ? void 0 : r[0]) != null && d.isEnter && (e.value = qA.REMOTE);
}, {
immediate: !0
}), e;
}
const sr = {
options: {
virtualHost: !0
}
}, rr = /* @__PURE__ */ z({
...sr,
__name: "MediaContainer",
setup(a) {
const A = lr(), e = L(!0), { isFloatWindow: t } = G(GA()), { localUserInfoExcludeVolume: o, remoteUserListExcludeVolume: i } = G(OA()), s = Ea(), { callType: c, callStatus: r } = G(rA()), d = ja(), g = f(
() => {
var m, D, j, k;
return O.isWeChat ? (D = (m = d.value) == null ? void 0 : m.find((q) => {
var b, Q;
return (q == null ? void 0 : q.userID) === ((Q = (b = i.value) == null ? void 0 : b[0]) == null ? void 0 : Q.userId);
})) == null ? void 0 : D.hasVideo : (k = (j = i.value) == null ? void 0 : j[0]) == null ? void 0 : k.isVideoAvailable;
}
), N = f(() => {
var m, D;
return (D = (m = i.value) == null ? void 0 : m[0]) == null ? void 0 : D.domId;
}), C = f(() => {
var m, D, j;
return (j = s.value) == null ? void 0 : j[(D = (m = i.value) == null ? void 0 : m[0]) == null ? void 0 : D.domId];
});
cA([c, r], () => {
c.value === _.AUDIO || r.value === x.CALLING ? e.value = !1 : e.value = !0;
}, {
immediate: !0
});
const p = f(() => iA([
"singlecall-media-container",
{
mobile: !O.isPC,
pc: O.isPC,
float: t.value
}
]));
function y(m) {
A.value = m;
}
return (m, D) => (I(), E($a, {
id: "source",
disabled: !n(t),
source: "#source",
to: "body"
}, {
default: v(() => [
S(oo, null, {
default: v(() => [
T("div", {
class: V(n(p))
}, [
S(Gl, {
"big-window": n(A),
"show-small-window": n(e),
onToggle: y
}, {
default: v(() => [
(I(), E(_t, {
value: n(qA).LOCAL,
key: n(qA).LOCAL
}, {
default: v(() => [
S(eo, {
domId: n(o).domId,
"show-audio-stream": !n(o).isVideoAvailable
}, {
"audio-stream": v(() => [
S(At, {
userId: n(o).userId,
username: n(o).displayUserInfo,
avatar: n(o).avatar,
"is-video-available": n(o).isVideoAvailable,
"is-small-window": n(A) !== n(qA).LOCAL,
"is-muted": !n(o).isAudioAvailable,
volume: n(s) && n(s)[n(o).domId]
}, null, 8, ["userId", "username", "avatar", "is-video-available", "is-small-window", "is-muted", "volume"])
]),
"stream-info": v(() => [
n(c) === n(_).VIDEO ? (I(), E($e, {
key: 0,
"nick-name": n(o).displayUserInfo,
"is-self": !0,
"is-muted": !n(o).isAudioAvailable,
volume: n(s) && n(s)[n(o).domId]
}, null, 8, ["nick-name", "is-muted", "volume"])) : w("", !0)
]),
_: 1
}, 8, ["domId", "show-audio-stream"])
]),
_: 1
}, 8, ["value"])),
(I(), E(_t, {
value: n(qA).REMOTE,
key: n(qA).REMOTE
}, {
default: v(() => [
S(to, {
"dom-id": n(N),
"show-audio-stream": !n(g)
}, {
"audio-stream": v(() => [
S(At, {
userId: n(i)[0] && n(i)[0].userId,
username: n(i)[0] && n(i)[0].displayUserInfo,
avatar: n(i)[0] && n(i)[0].avatar,
"is-video-available": n(g),
"is-small-window": n(A) !== n(qA).REMOTE,
"is-muted": n(i)[0] && !n(i)[0].isAudioAvailable,
volume: n(C)
}, null, 8, ["userId", "username", "avatar", "is-video-available", "is-small-window", "is-muted", "volume"])
]),
"stream-info": v(() => [
n(c) === n(_).VIDEO ? (I(), E($e, {
key: 0,
"nick-name": n(i)[0] && n(i)[0].displayUserInfo,
"is-muted": n(i)[0] && !n(i)[0].isAudioAvailable,
volume: n(C)
}, null, 8, ["nick-name", "is-muted", "volume"])) : w("", !0)
]),
_: 1
}, 8, ["dom-id", "show-audio-stream"])
]),
_: 1
}, 8, ["value"]))
]),
_: 1
}, 8, ["big-window", "show-small-window"])
], 2)
]),
_: 1
})
]),
_: 1
}, 8, ["disabled"]));
}
});
const cr = /* @__PURE__ */ X(rr, [["__scopeId", "data-v-670a78d8"]]), ur = [ze.SUCCESS, ze.INFO, ze.WARNING, ze.ERROR], pe = {
isShow: {
type: Boolean,
default: !1
},
message: {
type: String,
default: ""
},
type: {
type: String,
values: ur,
default: ze.INFO
},
duration: {
type: Number,
default: 3e3
},
offset: {
type: Number,
default: 16
},
showClose: {
type: Boolean,
default: !1
},
showIcon: {
type: Boolean,
default: !0
},
customClass: {
type: String
},
customStyle: {
type: Object
}
}, dr = {
onClose: null
};
function Ir(a, A) {
const e = L((a == null ? void 0 : a.message) || pe.message.default), t = L((a == null ? void 0 : a.duration) || pe.duration.default), o = L((a == null ? void 0 : a.type) || pe.type.default), i = L((a == null ? void 0 : a.offset) || pe.offset.default), s = L((a == null ? void 0 : a.showClose) || pe.showClose.default), c = L(!1);
let r = -1;
const d = (C) => {
r > -1 && (clearTimeout(r), r = -1), c.value = !0, N(C || {}), t.value && (r = setTimeout(() => {
g();
}, t.value));
}, g = () => {
c.value = !1, r > -1 && (clearTimeout(r), r = -1);
}, N = (C) => {
const {
message: p = e.value,
type: y = o.value,
offset: m = i.value,
duration: D = t.value,
showClose: j = s.value
} = C;
t.value = (a == null ? void 0 : a.duration) === 0 ? a == null ? void 0 : a.duration : D, e.value = p, o.value = y, i.value = m, s.value = j;
};
return cA(
() => a == null ? void 0 : a.isShow,
(C) => {
C && d();
},
{ immediate: !0 }
), cA(c, (C) => {
C || A("onClose");
}), {
messageContent: e,
messageDuration: t,
messageType: o,
messageOffset: i,
isShowCloseIcon: s,
visible: c,
show: d,
close: g
};
}
const gr = "data:image/svg+xml;base64,PHN2ZyB0PSIxNzAwMTIzMzQ5NzM4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYzMDAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA5Ny41MjM4MWMyMjguOTEyNzYyIDAgNDE0LjQ3NjE5IDE4NS41NjM0MjkgNDE0LjQ3NjE5IDQxNC40NzYxOXMtMTg1LjU2MzQyOSA0MTQuNDc2MTktNDE0LjQ3NjE5IDQxNC40NzYxOVM5Ny41MjM4MSA3NDAuOTEyNzYyIDk3LjUyMzgxIDUxMiAyODMuMDg3MjM4IDk3LjUyMzgxIDUxMiA5Ny41MjM4MXogbTEyOS4yOTIxOSAyMzMuNDQ3NjE5bC0xMjkuMjY3ODA5IDEyOS4yOTIxOS0xMjkuMzE2NTcxLTEyOS4yOTIxOS01MS43MzYzODEgNTEuNzM2MzgxIDEyOS4zMTY1NzEgMTI5LjI2NzgwOS0xMjkuMzE2NTcxIDEyOS4zMTY1NzEgNTEuNzM2MzgxIDUxLjczNjM4MUw1MTIgNTYzLjY4NzYxOWwxMjkuMjkyMTkgMTI5LjMxNjU3MSA1MS43MzYzODEtNTEuNzM2MzhMNTYzLjY4NzYxOSA1MTJsMTI5LjMxNjU3MS0xMjkuMjkyMTktNTEuNzM2MzgtNTEuNzM2MzgxeiIgcC1pZD0iNjMwMSIgZmlsbD0iI2Q1NDk0MSI+PC9wYXRoPjwvc3ZnPgo=", Mr = "data:image/svg+xml;base64,PHN2ZyB0PSIxNzAwMTIxNTM5Nzg4IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjQwMTgiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA5Ny41MjM4MWMyMjguOTEyNzYyIDAgNDE0LjQ3NjE5IDE4NS41NjM0MjkgNDE0LjQ3NjE5IDQxNC40NzYxOXMtMTg1LjU2MzQyOSA0MTQuNDc2MTktNDE0LjQ3NjE5IDQxNC40NzYxOVM5Ny41MjM4MSA3NDAuOTEyNzYyIDk3LjUyMzgxIDUxMiAyODMuMDg3MjM4IDk3LjUyMzgxIDUxMiA5Ny41MjM4MXogbTE5My4xOTQ2NjcgMjE4LjMzMTQyOEw0NDcuMjE5ODEgNTgxLjMxNTA0OGwtMTAzLjkzNi0xMDcuODEyNTcyLTUyLjY2Mjg1OCA1MC43NjExNDMgMTU2LjM3OTQyOSAxNjIuMjMwODU3IDMxMC42NjIwOTUtMzE5LjY4MzA0Ny01Mi40Njc4MDktNTAuOTU2MTkxeiIgcC1pZD0iNDAxOSIgZmlsbD0iIzJiYTQ3MSI+PC9wYXRoPjwvc3ZnPgo=", pr = "data:image/svg+xml;base64,PHN2ZyB0PSIxNzAwMTIzMjc0Njg2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwNTAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA5Ny41MjM4MWMyMjguOTEyNzYyIDAgNDE0LjQ3NjE5IDE4NS41NjM0MjkgNDE0LjQ3NjE5IDQxNC40NzYxOXMtMTg1LjU2MzQyOSA0MTQuNDc2MTktNDE0LjQ3NjE5IDQxNC40NzYxOVM5Ny41MjM4MSA3NDAuOTEyNzYyIDk3LjUyMzgxIDUxMiAyODMuMDg3MjM4IDk3LjUyMzgxIDUxMiA5Ny41MjM4MXogbTM2LjU3MTQyOSAzNDEuMzMzMzMzaC03My4xNDI4NTh2MjkyLjU3MTQyOGg3My4xNDI4NThWNDM4Ljg1NzE0M3ogbTAtMTIxLjkwNDc2MmgtNzMuMTQyODU4djczLjE0Mjg1N2g3My4xNDI4NTh2LTczLjE0Mjg1N3oiIHAtaWQ9IjUwNTEiIGZpbGw9IiNlMzczMTgiPjwvcGF0aD48L3N2Zz4K", Nr = "data:image/svg+xml;base64,PHN2ZyB0PSIxNzAwMTIzMjc0Njg2IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjUwNTAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTUxMiA5Ny41MjM4MWMyMjguOTEyNzYyIDAgNDE0LjQ3NjE5IDE4NS41NjM0MjkgNDE0LjQ3NjE5IDQxNC40NzYxOXMtMTg1LjU2MzQyOSA0MTQuNDc2MTktNDE0LjQ3NjE5IDQxNC40NzYxOVM5Ny41MjM4MSA3NDAuOTEyNzYyIDk3LjUyMzgxIDUxMiAyODMuMDg3MjM4IDk3LjUyMzgxIDUxMiA5Ny41MjM4MXogbTM2LjU3MTQyOSAzNDEuMzMzMzMzaC03My4xNDI4NTh2MjkyLjU3MTQyOGg3My4xNDI4NThWNDM4Ljg1NzE0M3ogbTAtMTIxLjkwNDc2MmgtNzMuMTQyODU4djczLjE0Mjg1N2g3My4xNDI4NTh2LTczLjE0Mjg1N3oiIHAtaWQ9IjUwNTEiIGZpbGw9IiMwMDUyZDkiPjwvcGF0aD48L3N2Zz4K", Cr = "data:image/svg+xml;base64,ICAgIAo8c3ZnIHQ9IjE3MDAxMjM3NjYyNDciIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB2ZXJzaW9uPSIxLjEiCiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjYzMDEiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+CiAgICA8cGF0aCBkPSJNNTU3LjIgNTEybDIzMy40LTIzMy40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4ycy0zMi44LTEyLjUtNDUuMiAwTDUxMiA0NjYuOCAyNzguNiAyMzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4yIDBzLTEyLjUgMzIuOCAwIDQ1LjJMNDY2LjggNTEyIDIzMy40IDc0NS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuMiA2LjIgNi4yIDE0LjQgOS40IDIyLjYgOS40czE2LjQtMy4xIDIyLjYtOS40TDUxMiA1NTcuMmwyMzMuNCAyMzMuNGM2LjIgNi4yIDE0LjQgOS40IDIyLjYgOS40czE2LjQtMy4xIDIyLjYtOS40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4yTDU1Ny4yIDUxMnoiIHAtaWQ9IjYzMDEiIGZpbGw9IiM3Mzc2N2EiPjwvcGF0aD4KPC9zdmc+Cg==", Lr = {
options: {
virtualHost: !0
}
}, no = /* @__PURE__ */ z({
...Lr,
__name: "Message",
props: pe,
emits: dr,
setup(a, { expose: A, emit: e }) {
const t = a, o = e, { messageContent: i, messageType: s, messageOffset: c, isShowCloseIcon: r, visible: d, show: g, close: N } = Ir(t, o), C = f(() => iA([
`${F}-message`,
`${F}-message--${s.value}`,
t.customClass
])), p = f(() => iA([`${F}-message_icon`])), y = f(() => iA([`${F}-message_close`])), m = f(() => `${c.value}px`), D = f(() => ({ top: m.value, ...t.customStyle })), j = {
info: Nr,
waring: pr,
success: Mr,
error: gr
};
return A({
show: g,
close: N
}), (k, q) => n(d) ? (I(), h("div", {
key: 0,
class: V(n(C)),
style: AA([n(D)])
}, [
lA(T("div", {
class: V(n(p))
}, [
S(he, {
src: j[n(s)]
}, null, 8, ["src"])
], 2), [
[sA, k.showIcon]
]),
T("span", null, B(n(i)), 1),
lA(T("div", {
class: V(n(y)),
onClick: q[0] || (q[0] = //@ts-ignore
(...b) => n(N) && n(N)(...b))
}, [
S(he, { src: n(Cr) }, null, 8, ["src"])
], 2), [
[sA, n(r)]
])
], 6)) : w("", !0);
}
});
const hr = {
customClass: {
type: String
}
}, Sr = {
options: {
virtualHost: !0,
styleIsolation: "shared"
}
}, io = /* @__PURE__ */ z({
...Sr,
__name: "Tip",
props: hr,
setup(a) {
const { isFloatWindow: A } = G(GA()), { tip: e, duration: t } = Gn(), o = uA(), { isGroupCall: i } = G(rA()), s = L(null), c = a, r = O.isPC, d = f(() => [c.customClass]), g = f(
() => Je({
color: "white",
background: "none",
position: "absolute",
"z-index": 4,
"align-items": "center",
left: "50%",
top: `${r ? "60%" : "70%"}`,
transform: "translate(-50%, -50%)",
"font-size": A.value ? "12px" : void 0
})
), N = f(
() => Je({
color: "white",
background: "none",
position: "static",
transform: "none",
"font-size": A.value ? "12px" : void 0
})
), C = f(() => i.value ? N.value : g.value);
return cA([e, o, t], () => {
var p;
(p = s.value) == null || p.show({
message: o.value(e.value),
duration: t.value,
offset: 0
});
}), (p, y) => (I(), h("div", null, [
S(no, {
showIcon: !1,
class: V(n(d)),
ref_key: "message",
ref: s,
customStyle: n(C)
}, null, 8, ["class", "customStyle"])
]));
}
}), yr = ["%", "vw"], fr = {
length: {
type: Number,
default: 0
},
unit: {
type: String,
values: yr,
default: "%"
},
enableFocus: {
type: Boolean,
default: !1
},
layout: {
type: Array
},
focus: {
type: [String, Number]
}
}, mr = ["change", "toggle"], lo = "GridContextKey", Tr = { style: { height: "100%" } }, vr = {
options: {
virtualHost: !0
}
}, so = /* @__PURE__ */ z({
...vr,
__name: "Grid",
props: fr,
emits: mr,
setup(a, { emit: A }) {
const e = a, t = L(e.focus), o = L(e.layout), i = L(e.unit), s = A;
function c(r) {
s("toggle", r);
}
return cA(() => e.focus, () => t.value = e.focus), cA(() => e.layout, () => o.value = e.layout), cA(() => e.unit, () => i.value = e.unit), EA(lo, {
layout: o,
enableFocus: e.enableFocus,
handleFocusChange: c,
focus: t,
unit: i
}), (r, d) => (I(), h("div", Tr, [
H(r.$slots, "default")
]));
}
}), Dr = {
options: {
virtualHost: !0
}
}, BA = /* @__PURE__ */ z({
...Dr,
__name: "GridItem",
props: ["index", "height", "customStyle"],
setup(a) {
const A = a, {
layout: e,
enableFocus: t,
handleFocusChange: o,
focus: i,
unit: s
} = zA(lo), c = 100 / 12, r = c, d = L({}), g = iA([
`${F}-grid-item`,
{
pc: Ie,
mobile: !Ie,
h5: Va
}
]), N = () => {
const p = String(A.index) === String(i.value) ? null : A.index;
t && o(p);
}, C = f(() => !!Ht(e.value, { key: "i", value: A.index }));
return Se(() => {
const p = Ht(e.value, { key: "i", value: A.index });
if (!p)
return;
const { x: y, y: m, w: D, h: j, customStyle: k, customProps: q } = p;
d.value = {
width: D * c + s.value,
height: A.height || j * r + s.value,
left: y * c + s.value,
top: m * r + s.value,
position: "absolute",
visibility: (q == null ? void 0 : q.show) === !1 ? "hidden" : "",
...A.customStyle,
...k
};
}), LA(() => {
String(A.index) === String(i.value) && t && o(null);
}), (p, y) => n(C) ? (I(), h("div", {
key: 0,
class: V(n(g)),
style: AA([n(d)]),
onClick: N
}, [
H(p.$slots, "default")
], 6)) : w("", !0);
}
});
function wr() {
const a = L([]), A = L([]), { callStatus: e, isGroupCall: t, callType: o, callRole: i } = G(rA()), { status: s } = Pe() || {}, c = Hn();
return cA(
[e, t, o, i, s, c],
() => {
var j, k, q;
let r = c.value;
const d = O.isPC ? "pc" : "mobile", g = t.value ? "groupCall" : "singleCall", N = o.value === _.AUDIO ? "audio" : "video";
let C = e.value === x.CALLING ? i.value === gA.CALLER ? "calling" : "accept" : e.value;
t && (s == null ? void 0 : s.value) === "close" && (C = "close_" + C);
const p = ((q = (k = (j = r == null ? void 0 : r[d]) == null ? void 0 : j[g]) == null ? void 0 : k[N]) == null ? void 0 : q[C]) || [];
A.value = p;
const y = [];
let m = 0;
for (let b = 0; b < p.length; b++) {
const Q = b === 0 ? p[b].filter((K) => {
var dA;
return ((dA = K == null ? void 0 : K.props) == null ? void 0 : dA.show) !== !1;
}) : p[b];
p[b] = Q;
const R = 12 / Q.length, Z = 3;
for (let K = 0; K < Q.length; K++)
y[m++] = {
i: Q[K].name,
x: K * R,
y: b * R,
w: R,
h: Z,
// @ts-ignore
customStyle: Q[K].customStyle,
customProps: Q[K].props
};
}
m = 0;
let D = [];
for (let b = 0; b < p.flat().length; b++)
D[b] = y[m++];
D = D.filter((b) => b.i), a.value = D;
},
{
immediate: !0
}
), { layout: a, config: A };
}
function Er(...a) {
let A = window == null ? void 0 : window.document, e = "", t = () => {
}, o = {};
if (typeof a[0] == "string" ? [e, t, o] = a : [A, e, t, o] = a, !!A)
return A == null || A.addEventListener(e, t, o), () => {
A == null || A.removeEventListener(e, t, o);
};
}
function jr(a, A) {
let e = () => {
};
yA(() => {
e = Er("click", (o) => {
const i = a.map((r) => n(r)), s = o.composedPath(), c = [];
for (let r = 0; r < i.length; r++)
c[r] = s.includes(i[r]);
c.every((r) => !r) && A();
}, { passive: !0 });
}), LA(() => {
e == null || e();
});
}
const zr = (a, A, e, t, o) => {
const i = e.isShowArrow ? e.arrowSize : 0, s = `${a.width / 2 - A.width / 2}px`, c = `${a.height / 2 - A.height / 2}px`, r = `${i}px solid ${e.color}`, d = { ...t }, g = { ...o };
switch (e.placement) {
case "top":
d.left = s, d.top = `-${A.height + i + e.arrowDistance}px`, g.borderTop = r, g.left = `${a.width / 2 - i / 2}px`, g.top = `-${i + e.arrowDistance}px`;
break;
case "bottom":
d.left = s, d.top = `${a.height + i + e.arrowDistance}px`, g.borderBottom = r, g.left = `${a.width / 2 - i / 2}px`, g.top = `${a.height + e.arrowDistance - i}px`;
break;
case "left":
d.left = `-${A.width + i + e.arrowDistance}px`, d.top = c, g.borderLeft = r, g.left = `-${i * 2 - e.arrowDistance}px`, g.top = `${a.height / 2 - i / 2}px`;
break;
case "right":
d.left = `${a.width + i + e.arrowDistance}px`, d.top = c, g.borderRight = r, g.left = `${a.width + i * 2 - e.arrowDistance}px`, g.top = `${a.height / 2 - i / 2}px`;
break;
}
return {
finalContentStyle: d,
finalArrowStyle: g
};
}, br = ["click", "hover"], Ur = ["top", "bottom", "left", "right"], ro = {
trigger: {
type: String,
values: br,
default: "click"
},
placement: {
type: String,
values: Ur,
default: "top"
},
color: {
type: String
},
isShowArrow: {
type: Boolean,
default: !0
},
arrowSize: {
type: Number,
default: 5
},
arrowDistance: {
type: Number,
default: 5
},
show: {
type: Boolean
},
autoClose: {
type: Number,
default: 300
}
}, Or = {
options: {
virtualHost: !0
}
}, Vr = /* @__PURE__ */ z({
...Or,
__name: "PopoverWeb",
props: ro,
emits: ["hover"],
setup(a, { emit: A }) {
const e = a, t = `${F}-popover`, o = `${F}-popover_content`, i = `${F}-popover_arrow`, s = `${F}-popover_trigger`, c = L(), r = L(), d = L(), g = L(!1), N = L(null), C = f(() => g.value && e.isShowArrow && e.show), p = Je({ left: "0px", top: "0px", backgroundColor: e.color }), y = L(p), m = `${e.arrowSize}px solid transparent`, D = {
borderLeft: m,
borderRight: m,
borderTop: m,
borderBottom: m,
top: "0px",
left: "0px"
}, j = L(D), k = A, q = () => {
Oo(() => {
var ee, te, ae, QA;
if (!g.value || !e.show)
return;
const K = (te = (ee = r.value).getBoundingClientRect) == null ? void 0 : te.call(ee), dA = (QA = (ae = d.value).getBoundingClientRect) == null ? void 0 : QA.call(ae), { finalContentStyle: vA, finalArrowStyle: ye } = zr(K, dA, e, p, D);
y.value = { ...p, ...vA }, j.value = { ...D, ...ye };
});
}, b = () => {
clearTimeout(N.value);
}, Q = () => {
e.trigger === "click" && (g.value = !g.value, q());
}, R = () => {
e.trigger === "hover" && (k("hover"), b(), g.value = !0, q());
}, Z = () => {
e.trigger === "hover" && (N.value = setTimeout(() => {
g.value = !1, q();
}, 1e3));
};
return jr([c], () => {
g.value = !1;
}), (K, dA) => (I(), h("div", {
class: V(t),
ref_key: "popoverRef",
ref: c
}, [
n(g) && K.show ? (I(), h("div", {
key: 0,
ref_key: "contentRef",
ref: d,
onMouseenter: b,
onMouseleave: Z,
class: V(o),
style: AA([n(y)])
}, [
H(K.$slots, "content")
], 36)) : w("", !0),
n(C) ? (I(), h("div", {
key: 1,
style: AA([n(j)]),
class: V(i)
}, null, 4)) : w("", !0),
T("div", {
ref_key: "triggerRef",
ref: r,
class: V(s),
onClick: Q,
onMouseenter: R,
onMouseleave: Z
}, [
H(K.$slots, "trigger")
], 544)
], 512));
}
});
const Pr = {
options: {
virtualHost: !0
}
};
function xr(a, A, e, t, o, i) {
return null;
}
const Br = /* @__PURE__ */ X(Pr, [["render", xr]]), Rr = {
options: {
virtualHost: !0
}
}, bt = /* @__PURE__ */ z({
...Rr,
__name: "Popover",
props: ro,
emits: ["hover"],
setup(a, { emit: A }) {
const e = A, t = () => {
e("hover");
};
return (o, i) => (I(), h(RA, null, [
n(ce) ? w("", !0) : (I(), E(Vr, xt({
key: 0,
onHover: t
}, o.$props), {
trigger: v(() => [
H(o.$slots, "trigger")
]),
content: v(() => [
H(o.$slots, "content")
]),
_: 3
}, 16)),
n(ce) ? (I(), E(Br, Vo(xt({ key: 1 }, o.$props)), {
trigger: v(() => [
H(o.$slots, "trigger")
]),
content: v(() => [
H(o.$slots, "content")
]),
_: 3
}, 16)) : w("", !0)
], 64));
}
}), Gr = {
deviceType: {
type: String
},
isShowControlBtn: {
type: Boolean,
default: !1
}
}, kr = { class: "device-selector-container" }, qr = { class: "scroll-container" }, Wr = { class: "scroll-content" }, Xr = {
options: {
virtualHost: !0
}
}, Qr = /* @__PURE__ */ z({
...Xr,
__name: "DeviceSelect",
props: Gr,
setup(a) {
const A = a, [{ deviceList: e, currentDeviceId: t }, { updateCurrentDeviceId: o }] = ot(A.deviceType), { localUserInfoExcludeVolume: i } = G(OA()), { isMuteSpeaker: s } = G(rA()), c = it(), r = uA(), d = async (p) => {
try {
C(), await W.switchDevice({
deviceType: A.deviceType,
deviceId: p
}), o(p);
} catch (y) {
console.debug(y);
}
}, g = async () => {
var p, y;
C(), A.deviceType === mA.CAMERA && ((p = i.value) != null && p.isVideoAvailable ? await W.closeCamera() : await W.openCamera("localVideo")), A.deviceType === mA.MICROPHONE && ((y = i.value) != null && y.isAudioAvailable ? await W.closeMicrophone() : await W.openMicrophone()), A.deviceType === mA.SPEAKER && (s.value ? await W.unMuteSpeaker() : await W.muteSpeaker());
}, N = f(() => {
var p;
if (A.deviceType === mA.CAMERA)
return i != null && i.value.isVideoAvailable ? r.value("close camera") : r.value("open camera");
if (A.deviceType === mA.MICROPHONE)
return (p = i == null ? void 0 : i.value) != null && p.isAudioAvailable ? r.value("close microphone") : r.value("open microphone");
if (A.deviceType === mA.SPEAKER)
return s.value ? r.value("open speaker") : r.value("close speaker");
}), C = () => {
c.value = "close";
};
return (p, y) => (I(), h("div", kr, [
T("div", qr, [
T("div", Wr, [
(I(!0), h(RA, null, ue(n(e), (m) => (I(), h("div", {
key: m.deviceId
}, [
S(pA, {
width: "100%",
color: "#ffff",
truncated: !0,
size: "14px",
class: V(["device-item", { select: n(t) === m.deviceId }]),
onClick: () => d(m.deviceId)
}, {
default: v(() => [
MA(B(m.label), 1)
]),
_: 2
}, 1032, ["class", "onClick"])
]))), 128))
])
]),
y[0] || (y[0] = T("div", { class: "control-item" }, null, -1)),
p.isShowControlBtn ? (I(), E(pA, {
key: 0,
width: "100%",
color: "#ffff",
truncated: !0,
size: "14px",
class: "device-item",
onClick: g
}, {
default: v(() => [
MA(B(n(N)), 1)
]),
_: 1
})) : w("", !0)
]));
}
});
const Ut = /* @__PURE__ */ X(Qr, [["__scopeId", "data-v-406bc3d4"]]), Fr = { class: "btn-content" }, Zr = {
options: {
virtualHost: !0
}
}, Yr = /* @__PURE__ */ z({
...Zr,
__name: "Camera",
props: XA,
setup(a) {
const A = uA(), e = a, t = L(!0), o = O.isPC, { localUserInfoExcludeVolume: i } = G(OA()), s = L(i == null ? void 0 : i.value.isVideoAvailable), c = f(() => i == null ? void 0 : i.value.isVideoAvailable), r = it(), [{ deviceList: d }] = ot(mA.CAMERA), g = f(() => {
var D;
return ((D = d.value) == null ? void 0 : D.length) > 0 && r.value === "camera";
}), N = f(() => t.value ? c.value ? "basicConfig" : "closedConfig" : "loadingConfig"), C = f(() => i != null && i.value.isVideoAvailable ? A.value("camera enabled") : A.value("camera disabled")), p = jA("camera", N), y = async () => {
t.value = !1, s.value = !c.value, c.value ? await W.closeCamera() : await W.openCamera("localVideo"), t.value = !0;
}, m = () => {
r.value = "camera";
};
return (D, j) => (I(), h("div", Fr, [
n(o) ? (I(), E(bt, {
key: 0,
color: "rgba(107, 117, 138, 0.5)",
show: n(g),
onHover: m,
trigger: "hover"
}, {
content: v(() => [
S(Ut, {
isShowControlBtn: !0,
deviceType: n(mA).CAMERA
}, null, 8, ["deviceType"])
]),
trigger: v(() => [
S(wA, {
loading: !n(t),
iconSrc: n(p).iconSrc,
color: n(p).color,
iconSize: n(p).iconSize,
width: e.width || n(p).width,
height: e.height || n(p).height,
loadingWidth: n(p).loadingWidth,
loadingHeight: n(p).loadingHeight,
shape: n(p).shape,
onClick: y
}, null, 8, ["loading", "iconSrc", "color", "iconSize", "width", "height", "loadingWidth", "loadingHeight", "shape"])
]),
_: 1
}, 8, ["show"])) : w("", !0),
n(o) ? w("", !0) : (I(), E(wA, {
key: 1,
loading: !n(t),
iconSrc: n(p).iconSrc,
color: n(p).color,
iconSize: e.iconSize || n(p).iconSize,
width: e.width || n(p).width,
height: e.height || n(p).height,
loadingWidth: n(p).loadingWidth,
loadingHeight: n(p).loadingHeight,
shape: "circle",
onClick: y
}, null, 8, ["loading", "iconSrc", "color", "iconSize", "width", "height", "loadingWidth", "loadingHeight"])),
n(p).showText ? (I(), E(pA, {
key: 2,
textStyle: n(p).textStyle,
color: n(p).textColor,
size: n(p).textSize
}, {
default: v(() => [
MA(B(n(C)), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const Hr = /* @__PURE__ */ X(Yr, [["__scopeId", "data-v-24aa342a"]]), Kr = { class: "btn-content" }, Jr = {
options: {
virtualHost: !0
}
}, _r = /* @__PURE__ */ z({
...Jr,
__name: "Hangup",
props: XA,
setup(a) {
const A = a, e = qn(), t = f(() => e.value ? "basicConfig" : "loadingConfig"), o = jA("hangup", t), i = uA(), s = async () => {
await W.hangup();
};
return (c, r) => (I(), h("div", Kr, [
S(wA, {
loading: !n(e),
loadingWidth: n(o).loadingWidth,
loadingHeight: n(o).loadingHeight,
iconSrc: n(o).iconSrc,
color: n(o).color,
iconSize: A.iconSize || n(o).iconSize,
width: A.width || n(o).width,
height: A.height || n(o).height,
shape: n(o).shape,
onClick: s
}, null, 8, ["loading", "loadingWidth", "loadingHeight", "iconSrc", "color", "iconSize", "width", "height", "shape"]),
n(o).showText ? (I(), E(pA, {
key: 0,
textStyle: n(o).textStyle,
color: n(o).textColor,
size: n(o).textSize
}, {
default: v(() => [
MA(B(n(i)("hangup")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const $r = /* @__PURE__ */ X(_r, [["__scopeId", "data-v-e75a102a"]]), Ac = { class: "btn-content" }, ec = {
options: {
virtualHost: !0
}
}, tc = /* @__PURE__ */ z({
...ec,
__name: "Accept",
props: XA,
setup(a) {
const A = L(!0), e = a, t = f(() => A.value ? "basicConfig" : "loadingConfig"), o = jA("accept", t), i = uA(), s = async () => {
A.value = !1, await W.accept(), A.value = !0;
};
return (c, r) => (I(), h("div", Ac, [
S(wA, {
iconSrc: n(o).iconSrc,
color: n(o).color,
iconSize: e.iconSize || n(o).iconSize,
width: e.width || n(o).width,
height: e.height || n(o).height,
shape: n(o).shape,
loading: !n(A),
loadingWidth: n(o).loadingWidth,
loadingHeight: n(o).loadingHeight,
onClick: s
}, null, 8, ["iconSrc", "color", "iconSize", "width", "height", "shape", "loading", "loadingWidth", "loadingHeight"]),
n(o).showText ? (I(), E(pA, {
key: 0,
textStyle: n(o).textStyle,
color: n(o).textColor,
size: n(o).textSize
}, {
default: v(() => [
MA(B(n(i)("accept")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const ac = /* @__PURE__ */ X(tc, [["__scopeId", "data-v-e1377967"]]), oc = { class: "btn-content" }, nc = {
options: {
virtualHost: !0
}
}, ic = /* @__PURE__ */ z({
...nc,
__name: "Microphone",
props: XA,
setup(a) {
const A = O.isPC, e = L(!0), { localUserInfoExcludeVolume: t } = G(OA()), o = it(), [{ deviceList: i }] = ot(mA.MICROPHONE), s = f(() => {
var p;
return ((p = i.value) == null ? void 0 : p.length) > 0 && o.value === "microphone";
}), c = f(() => e.value ? t != null && t.value.isAudioAvailable ? "basicConfig" : "closedConfig" : "loadingConfig"), r = jA("microphone", c), d = uA(), g = f(() => t != null && t.value.isAudioAvailable ? d.value("microphone enabled") : d.value("microphone disabled")), N = async () => {
t != null && t.value.isAudioAvailable ? await W.closeMicrophone() : await W.openMicrophone();
}, C = () => {
o.value = "microphone";
};
return (p, y) => (I(), h("div", oc, [
n(A) ? (I(), E(bt, {
key: 0,
color: "rgba(107, 117, 138, 0.5)",
show: n(s),
onHover: C,
trigger: "hover"
}, {
content: v(() => [
S(Ut, {
isShowControlBtn: !0,
deviceType: n(mA).MICROPHONE
}, null, 8, ["deviceType"])
]),
trigger: v(() => [
S(wA, {
loading: !n(e),
iconSrc: n(r).iconSrc,
color: n(r).color,
iconSize: n(r).iconSize,
width: n(r).width,
height: n(r).height,
loadingWidth: n(r).loadingWidth,
loadingHeight: n(r).loadingHeight,
shape: n(r).shape,
onClick: N
}, null, 8, ["loading", "iconSrc", "color", "iconSize", "width", "height", "loadingWidth", "loadingHeight", "shape"])
]),
_: 1
}, 8, ["show"])) : w("", !0),
n(A) ? w("", !0) : (I(), E(wA, {
key: 1,
loading: !n(e),
iconSrc: n(r).iconSrc,
color: n(r).color,
iconSize: n(r).iconSize,
width: n(r).width,
height: n(r).height,
loadingWidth: n(r).loadingWidth,
loadingHeight: n(r).loadingHeight,
shape: n(r).shape,
onClick: N
}, null, 8, ["loading", "iconSrc", "color", "iconSize", "width", "height", "loadingWidth", "loadingHeight", "shape"])),
n(r).showText ? (I(), E(pA, {
key: 2,
textStyle: n(r).textStyle,
color: n(r).textColor,
size: n(r).textSize
}, {
default: v(() => [
MA(B(n(g)), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const lc = /* @__PURE__ */ X(ic, [["__scopeId", "data-v-1a5a5781"]]), sc = { class: "btn-content" }, rc = {
options: {
virtualHost: !0
}
}, cc = /* @__PURE__ */ z({
...rc,
__name: "Reject",
props: XA,
setup(a) {
const A = a, e = jA("reject", L("basicConfig")), t = uA(), o = async () => {
await W.reject();
};
return (i, s) => (I(), h("div", sc, [
S(wA, {
iconSrc: n(e).iconSrc,
color: n(e).color,
iconSize: n(e).iconSize,
width: A.width || n(e).width,
height: A.height || n(e).height,
shape: n(e).shape,
onClick: o
}, null, 8, ["iconSrc", "color", "iconSize", "width", "height", "shape"]),
n(e).showText ? (I(), E(pA, {
key: 0,
textStyle: n(e).textStyle,
color: n(e).textColor,
size: n(e).textSize
}, {
default: v(() => [
MA(B(n(t)("reject")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const uc = /* @__PURE__ */ X(cc, [["__scopeId", "data-v-cc016de6"]]), dc = { class: "btn-content" }, Ic = {
options: {
virtualHost: !0
}
}, gc = /* @__PURE__ */ z({
...Ic,
__name: "Speaker",
props: XA,
setup(a) {
const A = O.isWeChat, e = O.isPC, t = a, { isEarPhone: o, isMuteSpeaker: i } = G(rA()), s = it(), c = uA(), r = f(() => o.value ? "closedConfig" : "basicConfig"), d = f(() => i.value ? "closedConfig" : "basicConfig"), [{ deviceList: g, currentDeviceId: N }] = ot(mA.SPEAKER), C = f(() => {
var j;
return ((j = g.value) == null ? void 0 : j.length) > 0 && s.value === "speaker" && e;
}), p = A ? jA("speaker", r) : jA("speaker", d);
f(() => o.value ? c.value("speaker disabled") : c.value("speaker enabled"));
const y = async () => {
i.value ? await W.unMuteSpeaker() : await W.muteSpeaker();
}, m = () => {
if (e) {
const j = g.value.find((k) => k.deviceId === N.value);
return j ? j.label : c.value("speaker enabled");
} else
return i.value ? c.value("speaker disabled") : c.value("speaker enabled");
}, D = () => {
s.value = "speaker";
};
return (j, k) => (I(), h("div", dc, [
S(bt, {
color: "rgba(107, 117, 138, 0.5)",
show: n(C),
onHover: D,
trigger: "hover"
}, {
content: v(() => [
S(Ut, {
isShowControlBtn: !0,
deviceType: n(mA).SPEAKER
}, null, 8, ["deviceType"])
]),
trigger: v(() => [
S(wA, {
iconSrc: n(p).iconSrc,
color: n(p).color,
iconSize: t.iconSize || n(p).iconSize,
width: t.width || n(p).width,
height: t.height || n(p).height,
shape: n(p).shape,
onClick: y
}, null, 8, ["iconSrc", "color", "iconSize", "width", "height", "shape"])
]),
_: 1
}, 8, ["show"]),
n(p).showText ? (I(), E(pA, {
key: 0,
width: "60px",
truncated: !0,
textStyle: n(p).textStyle,
color: n(p).textColor,
size: n(p).textSize,
lineClamp: 2
}, {
default: v(() => [
MA(B(m()), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const Mc = /* @__PURE__ */ X(gc, [["__scopeId", "data-v-44a3def7"]]), pc = { class: "btn-content" }, Nc = {
options: {
virtualHost: !0
}
}, Cc = /* @__PURE__ */ z({
...Nc,
__name: "SwitchCamera",
setup(a) {
const { localUserInfoExcludeVolume: A } = G(OA()), e = f(() => A == null ? void 0 : A.value.isVideoAvailable), t = f(() => e.value ? "basicConfig" : "disableConfig"), o = jA("switchCamera", t), i = uA(), s = async () => {
e.value && await W.switchCamera();
};
return (c, r) => (I(), h("div", pc, [
S(wA, {
iconSrc: n(o).iconSrc,
iconSize: n(o).iconSize,
color: n(o).color,
width: n(o).width,
height: n(o).height,
buttonStyle: n(o).buttonStyle,
shape: "circle",
onClick: s
}, null, 8, ["iconSrc", "iconSize", "color", "width", "height", "buttonStyle"]),
n(o).showText ? (I(), E(pA, {
key: 0,
textStyle: n(o).textStyle,
color: n(o).textColor,
size: n(o).textSize
}, {
default: v(() => [
MA(B(n(i)("switch camera")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const Lc = /* @__PURE__ */ X(Cc, [["__scopeId", "data-v-df69c038"]]), hc = { class: "btn-content" }, Sc = {
options: {
virtualHost: !0
}
}, yc = /* @__PURE__ */ z({
...Sc,
__name: "VirtualBackground",
props: XA,
setup(a) {
const A = a, e = L(!0), { localUserInfoExcludeVolume: t } = G(OA()), o = f(() => t == null ? void 0 : t.value.isVideoAvailable), { enableVirtualBackground: i } = G(rA()), s = f(() => e.value ? i.value ? "closedConfig" : o.value ? "basicConfig" : "disableConfig" : "loadingConfig"), c = jA("virtualBackground", s), r = uA(), d = async () => {
o.value && (e.value = !1, await W.setBlurBackground(!i.value), e.value = !0);
};
return (g, N) => (I(), h("div", hc, [
S(wA, {
loading: !n(e),
iconSrc: n(c).iconSrc,
color: n(c).color,
iconSize: A.iconSize || n(c).iconSize,
width: A.width || n(c).width,
height: A.height || n(c).height,
shape: n(c).shape,
loadingWidth: n(c).loadingWidth,
loadingHeight: n(c).loadingHeight,
buttonStyle: n(c).buttonStyle,
onClick: d
}, null, 8, ["loading", "iconSrc", "color", "iconSize", "width", "height", "shape", "loadingWidth", "loadingHeight", "buttonStyle"]),
n(c).showText ? (I(), E(pA, {
key: 0,
width: "70px",
lineClamp: 2,
textStyle: n(c).textStyle,
color: n(c).textColor,
size: n(c).textSize
}, {
default: v(() => [
MA(B(n(r)("virtual-background")), 1)
]),
_: 1
}, 8, ["textStyle", "color", "size"])) : w("", !0)
]));
}
});
const fc = /* @__PURE__ */ X(yc, [["__scopeId", "data-v-f29c2e7a"]]), mc = { class: "btn-content" }, Tc = {
options: {
virtualHost: !0
}
}, vc = /* @__PURE__ */ z({
...Tc,
__name: "ToggleButtonPanel",
props: XA,
setup(a) {
const { status: A } = Pe(), e = a, t = jA("toggleButtonPanel", L("basicConfig")), o = async () => {
A.value = A.value === "close" ? "open" : "close";
};
return (i, s) => (I(), h("div", mc, [
S(wA, {
iconSrc: n(t).iconSrc,
color: n(t).color,
iconSize: e.iconSize || n(t).iconSize,
width: e.width || n(t).width,
height: e.height || n(t).height,
shape: n(t).shape,
onClick: o
}, null, 8, ["iconSrc", "color", "iconSize", "width", "height", "shape"])
]));
}
});
const Dc = /* @__PURE__ */ X(vc, [["__scopeId", "data-v-f7839a20"]]), wc = { class: "button-group" }, Ec = {
options: {
virtualHost: !0
}
}, jc = /* @__PURE__ */ z({
...Ec,
__name: "ButtonPanel",
setup(a) {
const A = L(null), e = L({}), { isGroupCall: t } = G(rA()), { status: o } = Pe() || {}, i = L(!1), s = L(!1), c = L(""), r = za();
Se(() => {
i.value || (t.value && !O.isPC && r.value !== null ? i.value = !0 : i.value = !1);
});
const d = f(() => iA([
"button-panel-container",
{
pc: O.isPC,
mobile: !O.isPC,
h5: O.isH5,
groupCall: t.value,
singleCall: !t.value,
close: (o == null ? void 0 : o.value) === "close",
open: (o == null ? void 0 : o.value) === "open",
showBackGround: i.value
}
])), g = iA([
"toggle-button-container",
{ h5: O.isH5 }
]), N = O.isH5 ? {
transitionProperty: "width,height,left,top",
transitionDuration: "0.3s",
transitionTimingFunction: "ease-in"
} : {};
function C(j) {
A.value = j;
}
const { layout: p, config: y } = wr();
cA(y, () => {
const j = {}, k = y.value.flat();
for (let q of k) {
const { name: b, props: Q = {} } = q;
Q.showText !== !1 && (Q.showText = !0), j[b] = Q;
}
e.value = j;
}, { immediate: !0 });
function m(j) {
s.value = j;
}
const D = {
[l.IS_CLICKABLE]: m
};
return yA(() => {
M.watch(
u.CALL,
D,
{
notifyRangeWhenWatch: l.MYSELF
}
);
}), LA(() => {
M.unwatch(u.CALL, D);
}), EA(ya, s), EA(fa, c), (j, k) => (I(), h("div", {
class: V(n(d))
}, [
T("div", wc, [
S(so, {
unit: "%",
onToggle: C,
layout: n(p),
focus: n(A)
}, {
default: v(() => [
S(BA, {
index: "accept",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(ac)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "reject",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(uc)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "microphone",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(lc)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "hangup",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S($r)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "speaker",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(Mc)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "camera",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(Hr)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "virtualBackground",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(fc)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "switchCamera",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(Lc)
]),
_: 1
}, 8, ["customStyle"]),
S(BA, {
index: "inviteUser",
height: "auto",
customStyle: n(N)
}, {
default: v(() => [
S(Qa)
]),
_: 1
}, 8, ["customStyle"])
]),
_: 1
}, 8, ["layout", "focus"])
]),
n(i) ? (I(), h("div", {
key: 0,
class: V(n(g))
}, [
S(Dc)
], 2)) : w("", !0)
], 2));
}
});
const co = /* @__PURE__ */ X(jc, [["__scopeId", "data-v-6582c17d"]]), zc = { class: "singlecall-container" }, bc = /* @__PURE__ */ z({
__name: "SingleCall",
setup(a) {
const { callStatus: A } = G(rA());
return (e, t) => (I(), h("div", zc, [
S(Fa),
n(A) === n(x).CALLING ? (I(), E(Ja, { key: 0 })) : w("", !0),
S(cr),
S(io),
S(co)
]));
}
});
const Uc = /* @__PURE__ */ X(bc, [["__scopeId", "data-v-317c1d41"]]), Oc = { class: "stream-loading-container" }, Vc = /* @__PURE__ */ z({
__name: "StreamLoading",
setup(a) {
return (A, e) => (I(), h("div", Oc, [
S(jt, {
mode: "dot",
color: "#FFF",
loadingWidth: "50px",
loadingHeight: "50px"
})
]));
}
});
const $t = /* @__PURE__ */ X(Vc, [["__scopeId", "data-v-56b8bc56"]]), Pc = {
options: {
virtualHost: !0
}
}, xc = /* @__PURE__ */ z({
...Pc,
__name: "MediaContainer",
setup(a) {
const A = L("local"), e = L(null), t = L(!1);
xe();
const { localUserInfoExcludeVolume: o, remoteUserListExcludeVolume: i } = G(OA()), { callStatus: s, callType: c, isShowEnableVirtualBackground: r, callRole: d } = G(rA()), { netWorkQualityList: g } = kn(), N = f(() => i.value.length + 1), C = ja(), p = Xn(e, N), y = Ea(), { isFloatWindow: m } = G(GA()), D = za(), { status: j } = Pe() || {}, k = !O.isPC, q = f(() => String(e.value) === "0"), b = f(() => !O.isPC && q.value && o.value.isVideoAvailable), Q = f(() => b.value), R = f(() => b.value && r.value && O.isWeChat), Z = f(() => O.isPC || q.value), K = f(() => O.isPC || m.value ? "%" : "vw"), dA = f(() => [o.value, ...i.value].map((oA) => {
var hA;
if (m.value) {
if (((hA = y.value) == null ? void 0 : hA[oA.domId]) >= 10)
return oA.domId;
} else
return oA.domId;
})), vA = f(() => !(d.value === gA.CALLEE && s.value === x.CALLING && !m.value)), ye = f(() => {
let oA = "";
return d.value === gA.CALLEE && s.value === x.CALLING && !m.value && (oA = "hidden"), {
visibility: oA
};
});
function ee(oA) {
e.value = oA, D.value = oA, j.value = oA !== null ? "close" : "open";
}
function te(oA) {
var hA, nA;
return O.isWeChat ? !((nA = (hA = C.value) == null ? void 0 : hA.find((kA) => kA.userID === oA.userId)) != null && nA.hasVideo) : !oA.isVideoAvailable;
}
function ae(oA) {
var hA, nA;
return O.isWeChat ? !((nA = (hA = C.value) == null ? void 0 : hA.find((kA) => kA.userID === oA.userId)) != null && nA.hasAudio) : !oA.isAudioAvailable;
}
function QA(oA) {
if (!g.value)
return;
const hA = oA !== o.value.userId;
if (!O.isWeChat && hA)
return;
const nA = g.value.find((kA) => kA.userId === oA);
return nA && (nA == null ? void 0 : nA.quality) >= 4;
}
cA([i, c], () => {
var oA, hA;
(hA = (oA = i.value) == null ? void 0 : oA[0]) != null && hA.isEnter && (A.value = "remote"), c.value === _.AUDIO ? t.value = !1 : t.value = !0;
});
const st = f(() => iA([
"groupcall-media-container",
{
mobile: !O.isPC,
pc: O.isPC,
"two-layout": N.value === 2 && e.value === null,
float: m.value
}
])), rt = f(() => s.value === x.CALLING && (c.value === _.AUDIO && !o.value.isAudioAvailable || c.value === _.VIDEO && !o.value.isVideoAvailable));
return (oA, hA) => (I(), E($a, {
id: "source",
disabled: !n(m),
source: "#source",
to: "body"
}, {
default: v(() => [
S(oo, null, {
default: v(() => [
T("div", {
class: V(n(st)),
style: AA([n(ye)])
}, [
S(so, {
unit: n(K),
"enable-focus": k,
focus: n(e),
length: n(N),
layout: n(p),
onToggle: ee
}, {
default: v(() => [
(I(), E(BA, {
index: 0,
key: n(o).userId
}, {
default: v(() => [
S(eo, {
domId: n(o).domId,
"show-audio-stream": !n(o).isVideoAvailable,
show: n(dA).includes(n(o).domId) && n(vA)
}, {
"audio-stream": v(() => [
S(At, {
"user-id": n(o).userId,
username: n(o).displayUserInfo,
avatar: n(o).avatar,
"is-video-available": n(o).isVideoAvailable
}, null, 8, ["user-id", "username", "avatar", "is-video-available"])
]),
loading: v(() => [
n(rt) ? (I(), E($t, { key: 0 })) : w("", !0)
]),
"stream-info": v(() => [
n(m) ? w("", !0) : (I(), E($e, {
key: 0,
"is-self": !0,
"show-nick-name": n(Z),
showSwitchCameraButton: n(Q),
showVirtualBackgroundButton: n(R),
showNetWorkStatus: QA(n(o).userId),
nickName: n(o).displayUserInfo,
isMuted: !n(o).isAudioAvailable,
volume: n(y) && n(y)[n(o).domId]
}, null, 8, ["show-nick-name", "showSwitchCameraButton", "showVirtualBackgroundButton", "showNetWorkStatus", "nickName", "isMuted", "volume"]))
]),
_: 1
}, 8, ["domId", "show-audio-stream", "show"])
]),
_: 1
})),
(I(!0), h(RA, null, ue(n(i), (nA, kA) => (I(), E(BA, {
key: nA.userId,
index: kA + 1
}, {
default: v(() => [
S(to, {
domId: nA.domId,
"show-audio-stream": te(nA),
show: n(dA).includes(nA.domId) && n(vA)
}, {
"audio-stream": v(() => [
S(At, {
"user-id": nA.userId,
username: nA.displayUserInfo,
avatar: nA.avatar
}, null, 8, ["user-id", "username", "avatar"])
]),
loading: v(() => [
nA.isEnter ? w("", !0) : (I(), E($t, { key: 0 }))
]),
"stream-info": v(() => [
n(m) ? w("", !0) : (I(), E($e, {
key: 0,
"show-nick-name": n(O).isPC || String(n(e)) === String(kA + 1),
"show-control-button": !1,
showNetWorkStatus: QA(nA.userId),
nickName: nA.displayUserInfo,
"is-muted": ae(nA),
volume: n(y) && n(y)[nA.domId]
}, null, 8, ["show-nick-name", "showNetWorkStatus", "nickName", "is-muted", "volume"]))
]),
_: 2
}, 1032, ["domId", "show-audio-stream", "show"])
]),
_: 2
}, 1032, ["index"]))), 128))
]),
_: 1
}, 8, ["unit", "focus", "length", "layout"])
], 6)
]),
_: 1
})
]),
_: 1
}, 8, ["disabled"]));
}
});
const Bc = /* @__PURE__ */ X(xc, [["__scopeId", "data-v-0629f0d8"]]), Rc = {
key: 0,
class: "dialog-main-header"
}, Gc = { class: "dialog-main-title" }, kc = {
key: 1,
class: "dialog-main-footer"
}, qc = /* @__PURE__ */ z({
__name: "TDialog",
props: {
isHeaderShow: {
type: Boolean,
default: !0
},
isFooterShow: {
type: Boolean,
default: !0
},
background: {
type: Boolean,
default: !0
},
title: {
type: String,
default: ""
},
center: {
type: Boolean,
default: !1
},
isH5: {
type: Boolean,
default: !1
}
},
emits: ["cancel", "submit"],
setup(a, { emit: A }) {
const e = {
OUTSIDE: "outside",
INSIDE: "inside"
}, t = a, o = L(!0), i = L(!0), s = L(!0), c = L(""), r = uA();
Se(() => {
c.value = t.title, o.value = t.isHeaderShow, i.value = t.isFooterShow, s.value = t.background;
});
const d = A, g = (p) => {
p === e.OUTSIDE && N();
}, N = () => {
d("cancel");
}, C = () => {
d("submit");
};
return (p, y) => (I(), h("div", {
class: V(["dialog", [t.isH5 ? "dialog-h5" : "", a.center ? "center" : ""]]),
onClick: y[1] || (y[1] = Le((m) => g(e.OUTSIDE), ["stop", "prevent"]))
}, [
T("main", {
class: V(["dialog-main", [n(s) ? "" : "dialog-main-back"]]),
onClick: y[0] || (y[0] = Le((m) => g(e.INSIDE), ["stop", "prevent"]))
}, [
n(o) ? (I(), h("header", Rc, [
T("h1", Gc, B(n(c)), 1),
T("i", {
class: "icon icon-close",
onClick: N
})
])) : w("", !0),
T("div", {
class: V(["dialog-main-content", [t.isH5 ? "dialog-main-content-uniapp" : ""]])
}, [
H(p.$slots, "default", {}, void 0, !0)
], 2),
n(i) ? (I(), h("footer", kc, [
T("button", {
class: "btn btn-cancel",
onClick: N
}, B(n(r)("Cancel")), 1),
T("button", {
class: "btn btn-default",
onClick: C
}, B(n(r)("Done")), 1)
])) : w("", !0)
], 2)
], 2));
}
});
const Wc = /* @__PURE__ */ X(qc, [["__scopeId", "data-v-26735e82"]]), Xc = ["src"], Qc = ["src"], Fc = /* @__PURE__ */ z({
__name: "TIcon",
props: {
file: {
type: String,
default: ""
},
width: {
type: String,
default: "20px"
},
height: {
type: String,
default: "20px"
},
isApp: {
type: Boolean,
default: !1
}
},
emits: ["click"],
setup(a, { emit: A }) {
const e = A, t = a, o = () => {
e("click");
};
return (i, s) => (I(), h("div", {
class: "icon",
onClick: o
}, [
t.isApp ? (I(), h("image", {
key: 0,
class: "icon",
src: t.file,
style: AA({ width: t.width, height: t.height })
}, null, 12, Xc)) : (I(), h("img", {
key: 1,
class: "icon",
src: t.file,
style: AA({ width: t.width, height: t.height })
}, null, 12, Qc))
]));
}
});
const We = /* @__PURE__ */ X(Fc, [["__scopeId", "data-v-b989a330"]]), Aa = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSI+CiAgPHRpdGxlPue8lue7hCAxNDwvdGl0bGU+CiAgPGRlZnM+CiAgICA8ZmlsdGVyIHg9Ii0xMC42JSIgeT0iLTUuNCUiIHdpZHRoPSIxMjEuMiUiIGhlaWdodD0iMTEwLjklIiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIGlkPSJmaWx0ZXItMSI+CiAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjciIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dPZmZzZXRPdXRlcjEiPjwvZmVPZmZzZXQ+CiAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgIDxmZUNvbG9yTWF0cml4IHZhbHVlcz0iMCAwIDAgMCAwICAgMCAwIDAgMCAwICAgMCAwIDAgMCAwICAwIDAgMCAwLjEgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSIgcmVzdWx0PSJzaGFkb3dNYXRyaXhPdXRlcjEiPjwvZmVDb2xvck1hdHJpeD4KICAgICAgPGZlTWVyZ2U+CiAgICAgICAgPGZlTWVyZ2VOb2RlIGluPSJzaGFkb3dNYXRyaXhPdXRlcjEiPjwvZmVNZXJnZU5vZGU+CiAgICAgICAgPGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIj48L2ZlTWVyZ2VOb2RlPgogICAgICA8L2ZlTWVyZ2U+CiAgICA8L2ZpbHRlcj4KICA8L2RlZnM+CiAgPGcgaWQ9Im5ldyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICA8ZyBpZD0i6Ieq5a6a5LmJ5raI5oGvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNDU4LjAwMDAwMCwgLTMxOC4wMDAwMDApIj4KICAgICAgPGcgaWQ9Iue8lue7hC0zMiIgZmlsdGVyPSJ1cmwoI2ZpbHRlci0xKSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNDQuMDAwMDAwLCA2MC4wMDAwMDApIj4KICAgICAgICA8ZyBpZD0i57yW57uELTI0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMC4wMDAwMDAsIDI1MC4wMDAwMDApIj4KICAgICAgICAgIDxnIGlkPSLnvJbnu4QtMTQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM4NC4wMDAwMDAsIDguMDAwMDAwKSI+CiAgICAgICAgICAgIDxjaXJjbGUgaWQ9IuakreWchuW9oiIgZmlsbD0iIzAwNkVGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBjeD0iOCIgY3k9IjgiIHI9IjgiPjwvY2lyY2xlPgogICAgICAgICAgICA8cG9seWxpbmUgaWQ9Iui3r+W+hC00IiBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOC4wNDI2NDEsIDYuMjQyNjQxKSByb3RhdGUoLTMxNS4wMDAwMDApIHRyYW5zbGF0ZSgtOC4wNDI2NDEsIC02LjI0MjY0MSkgIiBwb2ludHM9IjYuMDQyNjQwNjkgMTAuMjQyNjQwNyAxMC4wNDI2NDA3IDEwLjI0MjY0MDcgMTAuMDQyNjQwNyAyLjI0MjY0MDY5Ij48L3BvbHlsaW5lPgogICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==", Zc = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNDhweCIgaGVpZ2h0PSI0OHB4IiB2aWV3Qm94PSIwIDAgNDggNDgiIHZlcnNpb249IjEuMSI+CiAgPHRpdGxlPmljX2JhY2tfd2hpdGU8L3RpdGxlPgogIDxnIGlkPSLpobXpnaItMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICA8ZyBpZD0iMDIuLeafpeeci+S/oeaBry3npLrkvovlpb3lj4siIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zMi4wMDAwMDAsIC0yMDAuMDAwMDAwKSI+CiAgICAgIDxnIGlkPSLnvJbnu4QtNiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDE3Ni4wMDAwMDApIj4KICAgICAgICA8ZyBpZD0iaWNfYmFja193aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIuMDAwMDAwLCAyNC4wMDAwMDApIj4KICAgICAgICAgIDxnIGlkPSJpY19iYWNrX2JsYWNrIiBmaWxsPSIjNDQ0NDQ0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPgogICAgICAgICAgICA8cGF0aCBkPSJNOS41MTIzMTA3MSwyNCBMMjMuNTE5ODI4NiwzOC43MjkwNDExIEMyMy43ODUzNzgsMzkuMDA4MjY4OSAyMy43NzUzMTY4LDM5LjQ0OTYwODIgMjMuNDk3MzE4NywzOS43MTY0NDQ4IEwyMS42MjU1OTE1LDQxLjUxMzAyMjYgQzIxLjM0NjY4MjcsNDEuNzgwNzMzMiAyMC45MDM1NjAyLDQxLjc3MTY1NTMgMjAuNjM1ODQ5Niw0MS40OTI3NDY2IEMyMC42MzUxMDMyLDQxLjQ5MTk2OSAyMC42MzQzNTg2LDQxLjQ5MTE4OTYgMjAuNjMzNjE1Nyw0MS40OTA0MDg1IEw0LjQ1ODc2Mzk5LDI0LjQ4MjM5NDggQzQuMjAxNzU0NCwyNC4yMTIxNDY3IDQuMjAxNzU0NCwyMy43ODc4NTMzIDQuNDU4NzYzOTksMjMuNTE3NjA1MiBMMjAuNjMzNjE1Nyw2LjUwOTU5MTUyIEMyMC45MDAwMzUsNi4yMjk0NDkwNiAyMS4zNDMxMTA5LDYuMjE4MzI0MjIgMjEuNjIzMjUzMyw2LjQ4NDc0MzUxIEMyMS42MjQwMzQ0LDYuNDg1NDg2MzQgMjEuNjI0ODEzOCw2LjQ4NjIzMDk3IDIxLjYyNTU5MTUsNi40ODY5Nzc0MSBMMjMuNDk3MzE4Nyw4LjI4MzU1NTI0IEMyMy43NzUzMTY4LDguNTUwMzkxNzUgMjMuNzg1Mzc4LDguOTkxNzMxMTQgMjMuNTE5ODI4Niw5LjI3MDk1ODkzIEw5LjUxMjMxMDcxLDI0IEw5LjUxMjMxMDcxLDI0IFoiIGlkPSJQYXRoLTIiPjwvcGF0aD4KICAgICAgICAgIDwvZz4KICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHg9IjAiIHk9IjAiIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PC9yZWN0PgogICAgICAgIDwvZz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==", Yc = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTZweCIgaGVpZ2h0PSIxNnB4IiB2aWV3Qm94PSIwIDAgMTYgMTYiIHZlcnNpb249IjEuMSI+CiAgPHRpdGxlPua4hemZpDwvdGl0bGU+CiAgPGcgaWQ9Iumhtemdoi0y5aSH5Lu9IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgIDxnIGlkPSLliJvlu7rnvqTogYoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjQzLjAwMDAwMCwgLTQxMy4wMDAwMDApIj4KICAgICAgPGcgaWQ9Ikdyb3VwLTEzNjQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY1MC4wMDAwMDAsIDM0My4wMDAwMDApIj4KICAgICAgICA8ZyBpZD0iR3JvdXAtMTM2MyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkwLjAwMDAwMCwgNDYuMDAwMDAwKSI+CiAgICAgICAgICA8ZyBpZD0iR3JvdXAtMTM1OCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsIDI0LjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0i5riF6ZmkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDMuMDAwMDAwLCAwLjAwMDAwMCkiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0wLDAgTDE2LDAgTDE2LDE2IEwwLDE2IEwwLDAgWiIgaWQ9IuefqeW9oiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDggQzEsMTEuODY1OTk5OSA0LjEzNDAwMDA2LDE1IDgsMTUgQzExLjg2NTk5OTksMTUgMTUsMTEuODY1OTk5OSAxNSw4IEMxNSw0LjEzNDAwMDA2IDExLjg2NTk5OTksMSA4LDEgTDgsMSBDNC4xMzQwMDAwNiwxIDEsNC4xMzQwMDAwNiAxLDggWiIgZmlsbD0iIzk5OTk5OSI+PC9wYXRoPgogICAgICAgICAgICAgIDxnIGlkPSLnvJbnu4QiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDguMDAwMDAwLCA4LjAwMDAwMCkgcm90YXRlKC0zMTUuMDAwMDAwKSB0cmFuc2xhdGUoLTguMDAwMDAwLCAtOC4wMDAwMDApIHRyYW5zbGF0ZSg0LjAwMDAwMCwgNC4wMDAwMDApIiBmaWxsPSIjRkZGRkZGIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuMDAwMDAwLCA0LjAwMDAwMCkgcm90YXRlKC05MC4wMDAwMDApIHRyYW5zbGF0ZSgtNC4wMDAwMDAsIC00LjAwMDAwMCkgIiB4PSIxLjgxODk4OTRlLTEyIiB5PSIzLjUiIHdpZHRoPSI4IiBoZWlnaHQ9IjEiIHJ4PSIwLjUiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuMDAwMDAwLCA0LjAwMDAwMCkgcm90YXRlKC0zNjAuMDAwMDAwKSB0cmFuc2xhdGUoLTQuMDAwMDAwLCAtNC4wMDAwMDApICIgeD0iMCIgeT0iMy41IiB3aWR0aD0iOCIgaGVpZ2h0PSIxIiByeD0iMC41Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHg9IjAiIHk9IjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PC9yZWN0PgogICAgICAgICAgICA8L2c+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4K", Hc = { class: "title" }, Kc = { class: "main" }, Jc = { class: "left" }, _c = { class: "transfer-header" }, $c = ["value", "placeholder"], Au = ["placeholder", "value"], eu = { class: "transfer-left-main" }, tu = { class: "transfer-list" }, au = {
key: 1,
class: "icon-unselected"
}, ou = { class: "select-all" }, nu = ["onClick"], iu = ["src"], lu = { class: "name" }, su = { key: 0 }, ru = { class: "right" }, cu = {
key: 0,
class: "transfer-header"
}, uu = {
key: 1,
class: "transfer-list"
}, du = {
key: 0,
class: "transfer-text"
}, Iu = { class: "transfer-list-item-content" }, gu = ["src"], Mu = {
key: 0,
class: "name"
}, pu = ["onClick"], Nu = { class: "transfer-right-footer" }, Cu = /* @__PURE__ */ z({
__name: "TTransfer",
props: {
list: {
type: Array,
default: () => []
},
selectedList: {
type: Array,
default: () => []
},
isSearch: {
type: Boolean,
default: !0
},
isRadio: {
type: Boolean,
default: !1
},
isCustomItem: {
type: Boolean,
default: !1
},
title: {
type: String,
default: ""
},
type: {
type: String,
default: ""
},
resultShow: {
type: Boolean,
default: !0
},
total: {
type: Number,
default: 0
},
isH5: {
type: Boolean,
default: !1
}
},
emits: ["search", "submit", "cancel", "getMore"],
setup(a, { emit: A }) {
const e = a, t = A, o = L(""), i = L([]), s = L(0), c = L([]), r = L(!0), d = L(!1), g = L(""), N = L(""), C = uA();
Se(() => {
const { list: b, isCustomItem: Q, isSearch: R, title: Z, total: K, selectedList: dA } = e;
if (Q)
for (let vA = 0; vA < b.length; vA++)
b[vA].conversationID.indexOf("@TIM#SYSTEM") > -1 && b.splice(vA, 1), i.value = b;
else
i.value = b;
s.value = K || b.length, c.value = dA && dA.length > 0 ? dA : c.value, r.value = R, d.value = Q, g.value = Z, o.value = e.type;
});
const p = f(
() => i.value.filter((b) => !b.isDisabled)
), y = (b) => {
N.value = b.target.value, t("search", b.target.value);
}, m = (b) => {
if (b.isDisabled)
return;
let Q = c.value;
const R = Q.indexOf(b);
if (R > -1)
return c.value.splice(R, 1);
e.isRadio && (Q = []), Q.push(b), c.value = Q;
}, D = () => {
c.value.length === p.value.length ? c.value = [] : c.value = [...p.value];
}, j = () => {
t("submit", c.value), N.value = "", c.value = [];
}, k = () => {
t("cancel"), N.value = "", c.value = [];
}, q = () => {
t("getMore");
};
return (b, Q) => (I(), h("div", {
class: V(["transfer", [e.isH5 ? "transfer-h5" : ""]])
}, [
e.isH5 ? (I(), h("header", {
key: 0,
class: "transfer-header transfer-h5-header",
onClick: k
}, [
S(We, {
class: "icon",
file: n(Zc),
width: "18px",
height: "18px"
}, null, 8, ["file"]),
T("span", Hc, B(n(g)), 1),
Q[0] || (Q[0] = T("span", { class: "space" }, null, -1))
])) : w("", !0),
T("main", Kc, [
T("div", Jc, [
T("header", _c, [
!e.isH5 && n(r) ? (I(), h("input", {
key: 0,
type: "text",
value: n(N),
onKeyup: Po(y, ["enter"]),
placeholder: n(C)("Please enter userID"),
enterkeyhint: "search",
class: V([e.isH5 ? "left-uniapp-input" : ""])
}, null, 42, $c)) : w("", !0),
e.isH5 && n(r) ? (I(), h("input", {
key: 1,
type: "text",
onBlur: y,
onConfirm: y,
placeholder: n(C)("Please enter userID"),
enterkeyhint: "search",
value: n(N),
class: V([e.isH5 ? "left-uniapp-input" : ""])
}, null, 42, Au)) : w("", !0)
]),
T("main", eu, [
T("ul", tu, [
n(p).length > 1 && !a.isRadio ? (I(), h("li", {
key: 0,
class: "transfer-list-item",
onClick: D
}, [
n(c).length === n(p).length ? (I(), E(We, {
key: 0,
file: n(Aa),
width: "18px",
height: "18px"
}, null, 8, ["file"])) : (I(), h("i", au)),
T("span", ou, B(n(C)("Select all")), 1)
])) : w("", !0),
(I(!0), h(RA, null, ue(n(i), (R) => (I(), h("li", {
class: "transfer-list-item",
key: R.userID,
onClick: (Z) => m(R)
}, [
n(c).indexOf(R) > -1 ? (I(), E(We, {
key: 0,
file: n(Aa),
class: V([R.isDisabled && "disabled"]),
width: "18px",
height: "18px"
}, null, 8, ["file", "class"])) : (I(), h("i", {
key: 1,
class: V([R.isDisabled && "disabled", "icon-unselected"])
}, null, 2)),
n(d) ? H(b.$slots, "left", {
key: 3,
data: R
}, void 0, !0) : (I(), h(RA, { key: 2 }, [
T("img", {
class: "avatar",
src: R.avatar || "https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_21.png",
onerror: "this.src='https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_21.png'"
}, null, 8, iu),
T("span", lu, B(R.nick || R.userID), 1),
R.isDisabled ? (I(), h("span", su)) : w("", !0)
], 64))
], 8, nu))), 128)),
n(s) > n(i).length ? (I(), h("li", {
key: 1,
class: "transfer-list-item more",
onClick: q
}, B(n(C)("View more")), 1)) : w("", !0)
])
])
]),
T("div", ru, [
e.isH5 ? w("", !0) : (I(), h("header", cu, B(n(g)), 1)),
a.resultShow ? (I(), h("ul", uu, [
n(c).length > 0 && !e.isH5 ? (I(), h("p", du, B(n(c).length) + " " + B(n(C)("people selected")), 1)) : w("", !0),
(I(!0), h(RA, null, ue(n(c), (R, Z) => (I(), h("li", {
class: "transfer-list-item space-between",
key: Z
}, [
T("aside", Iu, [
n(d) ? H(b.$slots, "right", {
key: 1,
data: R
}, void 0, !0) : (I(), h(RA, { key: 0 }, [
T("img", {
class: "avatar",
src: R.avatar || "https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_21.png",
onerror: "this.src='https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_21.png'"
}, null, 8, gu),
e.isH5 ? w("", !0) : (I(), h("span", Mu, B(R.nick || R.userID), 1))
], 64))
]),
e.isH5 ? w("", !0) : (I(), h("span", {
key: 0,
onClick: (K) => m(R)
}, [
S(We, {
file: n(Yc),
width: "18px",
height: "18px"
}, null, 8, ["file"])
], 8, pu))
]))), 128))
])) : w("", !0),
T("footer", Nu, [
T("button", {
class: "btn btn-cancel",
onClick: k
}, B(n(C)("Cancel")), 1),
n(c).length > 0 ? (I(), h("button", {
key: 0,
class: "btn",
onClick: j
}, B(n(C)("Done")), 1)) : (I(), h("button", {
key: 1,
class: "btn btn-no",
onClick: j
}, B(n(C)("Done")), 1))
])
])
])
], 2));
}
});
const Lu = /* @__PURE__ */ X(Cu, [["__scopeId", "data-v-cc0325fc"]]), hu = /* @__PURE__ */ z({
__name: "SelectUser",
props: {
isRadio: {
type: Boolean,
default: !1
},
isNeedSearch: {
type: Boolean,
default: !1
},
title: {
type: String,
default: ""
},
userList: {
type: Array,
default: () => []
},
total: {
type: Number,
default: 0
},
isPC: {
type: Boolean,
default: !0
}
},
emits: ["confirm", "cancel", "search", "getMore"],
setup(a, { emit: A }) {
const e = A, t = a, o = () => {
e("cancel");
}, i = (r) => {
e("confirm", r);
}, s = (r) => {
e("search", r);
}, c = () => {
e("getMore");
};
return (r, d) => (I(), E(Wc, {
isH5: !a.isPC,
isHeaderShow: !1,
isFooterShow: !1,
background: !1,
onCancel: o
}, {
default: v(() => [
S(Lu, {
isSearch: t.isNeedSearch,
title: t.title,
list: t.userList,
isH5: !a.isPC,
isRadio: t.isRadio,
total: t.total,
onGetMore: c,
onSearch: s,
onSubmit: i,
onCancel: o
}, null, 8, ["isSearch", "title", "list", "isH5", "isRadio", "total"])
]),
_: 1
}, 8, ["isH5"]));
}
}), Su = {
options: {
virtualHost: !0
}
}, yu = /* @__PURE__ */ z({
...Su,
__name: "BackGround",
setup(a) {
return (A, e) => (I(), E(Za, {
bgColor: "#22262ed9",
bgImage: n(WA),
customStyle: { position: "absolute", zIndex: 0 }
}, null, 8, ["bgImage"]));
}
}), fu = { class: "groupcall-container" }, ea = 30, mu = /* @__PURE__ */ z({
__name: "GroupCall",
setup(a) {
const A = L(null), e = L("open"), t = L(!1), o = L(0), i = L([]), s = L([]), c = L(0), r = A, d = { status: e }, { callRole: g, callStatus: N } = G(rA()), { isFloatWindow: C } = G(GA()), { localUserInfoExcludeVolume: p, remoteUserListExcludeVolume: y } = G(OA()), m = async (R) => {
if (t.value = R, t.value) {
await k();
const Z = await W.getGroupProfile();
o.value = Z.memberCount;
}
}, D = () => {
t.value = !1, M.update(u.CALL, l.SHOW_SELECT_USER, !1), c.value = 0, i.value = [];
}, j = async () => {
c.value += ea, await k();
}, k = async () => {
const R = await W.getGroupMemberList(ea, c.value), Z = [...y.value, p.value].map((K) => K.userId);
i.value.push(...R), i.value = i.value.map((K) => (Z.includes(K.userID) && (K = { ...K, isDisabled: !0 }), K)), s.value = i.value;
}, q = async (R) => {
try {
if (R.length <= 0)
return;
t.value = !1, M.update(u.CALL, l.SHOW_SELECT_USER, !1), c.value = 0;
const Z = R.map((K) => K.userID);
await W.inviteUser({ userIDList: Z }), i.value = [];
} catch (Z) {
console.debug(Z);
}
}, b = (R) => {
R ? i.value = i.value.filter((Z) => Z.userID.includes(R) || Z.nick.includes(R)) : i.value = s.value;
}, Q = {
[l.SHOW_SELECT_USER]: m
};
return yA(() => {
M.watch(u.CALL, Q, { notifyRangeWhenWatch: l.MYSELF });
}), LA(() => {
M.unwatch(u.CALL, Q);
}), d.status = L("open"), r.value = null, EA(ha, d), EA(La, r), (R, Z) => (I(), h("div", fu, [
S(Fa),
n(N) === n(x).CALLING && n(g) === n(gA).CALLEE && !n(C) ? (I(), E(Ja, { key: 0 })) : w("", !0),
S(Bc),
S(io),
S(co),
S(yu),
n(t) ? (I(), E(hu, {
key: 1,
isNeedSearch: !0,
userList: n(i),
isPC: n(O).isPC,
total: n(o),
onConfirm: q,
onCancel: D,
onGetMore: j,
onSearch: b
}, null, 8, ["userList", "isPC", "total"])) : w("", !0)
]));
}
});
const Tu = /* @__PURE__ */ X(mu, [["__scopeId", "data-v-aa4e300f"]]), vu = {}, Du = {
viewBox: "0 0 1024 1024",
xmlns: "http://www.w3.org/2000/svg",
"data-v-ea893728": ""
};
function wu(a, A) {
return I(), h("svg", Du, A[0] || (A[0] = [
T("path", {
fill: "currentColor",
d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"
}, null, -1)
]));
}
const Eu = /* @__PURE__ */ X(vu, [["render", wu]]), ta = "data:image/jpeg;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApo2cKDRs4UCFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBTRs4UGjZwoBcFNGzhQaNnCgFwU0bOFBo2cKAXBRI2cKACwAAAAAAAAAAAAAAAAAAAAAAAAA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", ju = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAQwAvAAD/2wBDAA8LDA0MCg8NDA0REA8SFyYZFxUVFy8iJBwmODE7OjcxNjU9RVhLPUFUQjU2TWlOVFteY2RjPEpsdGxgc1hhY1//2wBDARARERcUFy0ZGS1fPzY/X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1//wAARCAOABTgDASIAAhEBAxEB/8QAGwABAAIDAQEAAAAAAAAAAAAAAAEDAgQGBQf/xABOEAACAQICBAkIBwcEAgEDBAMAAQIDBAUREiExUQYTFEFSYXGRoRYyM1SBk9HwFSJTc5Kx4TQ1NmSjssFCcnTCI4IlJKLxBzdDhGJjg//EABoBAQADAQEBAAAAAAAAAAAAAAABBAUCAwb/xAA0EQEAAQIDBQYGAgICAwAAAAAAAQIDERNSBBIUFVEFITFTgfAzNEFxkaEyQyLRYbFCwfH/2gAMAwEAAhEDEQA/APoMpKK3vmRU5NvNt/PzzkSecm+sBMQhJLYkuxJGWb3kAJTpPexpPeyABOk97Gk97IAE6T3saT3sgATm97Gb3sgATpPexpPeyASJze9jSe9kACdJ72NJ72QAJ0nvY0nvZAAnSe9jSe9kACdJ72M3vZAAnSe9jSe9kACdJ72NJ72QAJ0nvY0nvZAAnSe9jSe9kACdJ72NJ72QAJ0nvY0nvZAAnSe9jSe9kACdJ72NJ72QAJze9jN72QAJ0nvY0nvZAAnSe9jN72QAJ0nvYze9kACdJ72M3vZAAnN72NJ72QAJ0nvY0nvZAAnSe9jSe9kACdJ72NJ72QAJ0nvYze9kACc3vYze9kACdJ72NJ72QAJze9jSe9kACc3vY0nvZAAnSe9jSe9kACdJ72NJ72QAJ0nvY0nvZAAnSe9jSe9kACc3vY0nvZAAnSe9jSe9kACc3vY0nvZAAnN72NJ72QAJ0nvY0nvZAAnSe9jSe9kACdJ72NJ72QAJ0nvYze9kACdJ72M3vZAAnSe9jN7yABOk97Gk97IAE6T3saT3sgATpPexpPeyABOk97Gk97IAE6T3saT3sgATm97Gk97IAE6T3saT3sgATm97Gk97IAE6T3saT3sgATpPexm97IAE5vexm97IAE6T3sZveyABOk97Gb3sgATpPexm97IAE5vexpPeyABOk97Gk97IAE6T3saT3sgATpPexm97IAE6T3saT3sgATm97Gb3sgATpPexpPeyABOb3sZveyABOk97Gk97IAE6T3saT3sgATpPexpPeyABOb3sZveyABOk97Gb3sgATpPexpPeyABOk97Gk97IBAnN72NJ72QAJ0nvYze9kAkTm97Gk97IAE6T3saT3sgATpPexpPeyABDSe1J9qTM1Jp7WYgIXQlpLrBVBtSWWe4EIYxWjFJcySJADoAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEnks+fmAkGKjnrk23u5hoR3eIGQMdCO7xGhHd4gZAx0I7vEaEd3iBkDHQju8RoR3AZAx0I7vEaEdwGQMdCO4aEdwGQMdCO7xGhHd4gZAx0I7vEaEd3iBkDHQju8RoR3eIGQMdCO7xGhHd4gZAx0I7hoR3eIGQMdCO7xGhHd4gZAx0I7vEaEd3iBkDHQju8RoR3eIGQMdCO7xGhHd4kDIGOhHd4jQju8QMgY6Ed3iNCO7xJGQMdCO7xGhHd4gZAx0I7vEaEd3iBkDHQjzLL2hZp5N5p7GBkAAIktKLW9NAkBAACEgAAAHO4rilSdWdC3loU46pSW2T/xkc1VbsPWzZqvVbsOiBw3+rSzelvz19562FYnUhWjQuJudObyjJ7U+s4puxMrV3YaqKd6JxdGAD1UAg866upSnKFOTjCOptbW/8Gpq0s8te/nM292jTbq3YjFYo2eaoxl7oPNtLqUZqnUk5Qk0k3tTPSLli/Tep3qXjXRNE4SAGrVqynJxi2oJ5Nra3z6+ZHs4bQPP0IZ56Kz38/eXUqkoSUZNuDeSbetPm186JS2gAAAAAAAAAANG4xS2oXlK0elOrUkotQWejnsz+dhq4tisqEuR2S4y7m8kks9DP/PVzbWZ4ThMbNOvcPjbueblNvPRz2pPfvYHqgAAAAAAAFFW5p0qkac81pLNSy1IvKq1GFam4TXY1tTAt2rMHn0as7SfEXDzg/NnuXw/I9BZZZp5p7GgAAAAAAAANepe2tKrxNS4pxqZpaLkk9ewyuLq3tlF3FaFLSz0dJpZ5bcu88m+wKV1iUrtXCjGTi3FxzayWW3PqL8YwqWJOi41lTdPNPOOeeft6gPQlcUI0OUSqwVJpNT0lk09msUbmhXpupRqwnCLycotNJ9ZpVsLdTB4YeqqTiorTcdTaeezMYZhbsbStbyqqbqNtyUcss1lvA2qF5a3E3ChcU6kks2oyTeW82DxcJwSWH3Uq0q6qZwcUlHLa1r29R7QAAAV1q1OhSlVrTjCnFZylJ5JI8d8KcLUnFSqyXSUHl46/Aw4XwqywlOmm4RqpzS3ZNJvqza8Dbwqvh15h0KFsqbgoJTovLNasnmuft5whvW1zRu6Ea1vUU6ctjX5NPWn1MuNWysbbDqEqdtFwpuTm1KTaTySbzb1akjypcIatapOOGYdVu6dN5SqJtJ9iyfx6gPfB5+FYrRxOlOVOMqdSm8p05bYv/K1PuNO6x9q8laYfZzvKsHlNxeUY5deT2b3kgPcB5OG4yru5laXFtO1uorPi5vNNdTyXbs7y7DcUjf3F3RjScHbTUG3LPSzbWa3bPED0AefeYnG1v7W0dJydw8lJSyUdeWzLWa+I49Rw6+VtWpTknDT04vPfkst7ay284HqV61O3oTrVpaNOCzlLJvJdi1kW9elc0IV6EtOnNZxlk1ms8tj1nkQxapcWV5UvcMqU6NKCko1M8qieerWkuZb9plLEFTwOjcWdhUlCpFxVOks+LWvW8lszXiB7QOR4P4tdU7SNF2N1cqVR51km0s8lreT2dp7csWhDGFhtWk4Occ4VHLVLVmtWWrY12oD0wa99dQsrOrc1U3GnHPJPJt7Eva2kRh9y7yypXLpOkqizUW82lnq19aA2TybvhBh1pXlQqVJynF5SUI5qL3N7+w9Y4e3vPoq7xO04pXNWtLRpuOUs229T37da35oDsrW5o3dvGvbzU6clqaWXamuZlx5eA2c8PwynRrtKpJucotrU3lq7UsvaeoBrXl7bWFJVbqpxcJSUU9FvNtN5ZJN7EzSXCLCG8leLNvLXTmv8Gpwz/dNL7+P9sj0oWFjUsoKra0XF005NwSy1a3nlq7QNujWpXFJVaNSNSnJZqUXmmWHJcGLiVrh+JVcnOhRanBZ5NtJ5+CibS4TyrU48iw2tXqbakY5tQ1tLWk9qWexbQPa5dbK9Vk6n/1DjpKGi9m3PPLLm3myeRG8t5Y7St5WcVcypKXHPLOKaby2Z9RbhuKwvri5tpUpUa1CWUouSeetptdjXigPSB5+K4nDDKNOcqcqs6k9GEIvJve/y70VYjjEbGdKgqE693VScaMHv3vL/AHqg8GOPVqFxSpYlh1S2jVaUZqSks3v1Lfr15rcehimKW+GUFUrZylJ5QhHbJ8/YlzsDeBz3lDc0Yxq3uE1qNvJpaak21nszTS8cjcucapW13aUpU26N0k4VlL6uvqy613geqDCrVhRozq1HlCEXKT3JLNmphV+8StXcqjKlFy0YqUk3JLa+/NewJbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjLzortMjF+fH2gZAAADzb2tXr3ccPtJum3HTq1UtcY8yXWzH6Ds8s26rqfaOo9LPfu8APUB5dnVr215yC6qOqpR0qNV7ZJbU97R6gAApr1XT0IxjpTm8km8l1tgXAoU7iM4qpTi4yeTcG3l25l4AAAAAABjUloUpySTcYtrPqRjRk50oTaSckm8tgFgAAAAAAAAAAAAAAAAAIAAAAASAAAAAAYz81vcZGMvMYGQAAAAAACAAAA4bXr0/OzefbnrO5OcxXC6kKs69vFzpzecorameV2mZhf2C7TRVMVfV5Owa/wDR52ay7c9Q/wBWjr0t2WvuPWwrC6k60a9xFwpwacYva319h4U0zMtW7dpt0zMuiWwkAuPm3hLPLXt5+0G3dW0ozlUpx0oS1tLan/k1NWeXPu5z5W/Yrt1zEw06K4qjGDXk8tvN2nuLYeda20pTVSpHRhF5pPa3/g9I2OzrNVumZq+qptFcVThAaEPMjnty19vOb5q1aUoScopuDebSWtPn1c6NNWVkT8yWW3LV28xGnDPLSWe7n7i6lSlOSlJNQTzSa1t82rmQS2gAAAAAAADCrGUqU4wm4SlFqMks9Ftan7DMActhUoYXiNShiFNRrVH9Wu3mmn1vmb5+/q6k1MQsKN/QdOqspLXCaWuL+G9HlYde3GH3McNxFNptKlU5ms8ks+dflsfUQ6AABIAAAAAAGtd3LpJQgnKrJallnl1gV39WmocU4qdSWxc6e8ts6dSlQUajzeeaW5bjG1tXTzq1XpVZa29uX6m0AAAAAAAABzeJ2WJ1cWdW3VR0W46LVRJLJa9We/M2uEFrfXHEciU2o6WmozUduWWebWew1cTxa9tsWdtRcVTTiknHNvNZvX2s2uEGIXNhxHJnFKelpNxz2ZZLxYGVa2vZcH40I6bulGKaU1nqebWee7rGCW17Qsq8LrSjUlJuClNNrVtzTeWsVr+5hwfjeRSVZxi29HUs3k3l2DBL+5vLKvVr5SnCTUWo5Z6s8tQGtgdniVC9lO8VRU3Br61RSTeay1JvrOhOewPFry9vZUrhxlBQctUUsmmvidCAAAFdR0tHQquGU01oyaykudZPbtPCvuDFvNuth9SVrWWuKTejn1c69j1bjdxzC3idvBUqip16UtKnJ73tTy1rYta3GjJcJ5UnRytU2suOTyl27dvsCGpb4nc3XB3EaVxJyuLeKi5c7i3lzc6yazLMGhjUMMo8iViqMlpRc9LSbbeeeXPnqPUwnB6djYVLatJVZV8+NeWp5rLLsSz19bNChhuNYZpUsOuKNW2bbjGqmnHP55nl1AXYXh+I22JXV7duguOptONJtrSzWTya6nz7SngZGLsLmo9dSVZqTe1pJNZ+1s3sIw65tq1a6vrhVbis9ai3oxW5bPyNOWE4jh97VuMHrUuKrPOVGonqf+Us+rcB7roUXWVd0abrJZKporSS3Z7cjwODP7xxlf8A+5f3TNvDsOvuXyxDE68ZVXHRhTp56MVs1/PPtNWrhOJ2eJV7vCatLQuHpThU5s3r5t+tZZbcgIxqUfKXCoJ/WTTa6nLV+TMb2EanDSyjOKklSzya50pNPvSZNPAb94lbX9zdU61WM1Krm2sknqUVlu7DerYZWnwioYip01Rp09GUW3pNtSWpZZZa1z7wL8c/c1592zXwf+GqX3UvzZvYjbzu8PuLem4qdSGinJtJPryTMMMs52mGUrSs4ylCLjJxbaebezNLfuA87gj+5397L8kRwptZu2pX9DNVrWSlmtui3t9jyfeUW2GY1hnGUMPr287ecnKLqZ5xe/LLbqW9HQXHFK0qcqceK0GqjezLLWBzOJXqxt4bY28slXyqVkn5uWaa9mUn7EdVCEYQjCCUYxSSS2JLUkcvwPsYrj75xei26dJyWvLPNv8AJexnVAeNwnvalnhTdGTjOrNU9JbUmm209+Sy9p513wfjQwqlXsnJ3lDKpKa2zepvLsyzXZvZ72J2NPEbKdtUejm04yyzcZLY/wDHY2ePRo8JbairWnK2nCK0Y1ZPNxXNt3daYGlXxBY5WwmlTi1WjUcqqS1Ryaza6mk2dicxaYBiFheU7u2uaFSo0+NjUTinm82lknq69WvuOmWeWtJPnyYHP8M/3TS+/j/bIxhgN3cUKcbjGa8qMorOmotJprZ5zXeje4QYdWxOyhQt5U4yjVU25tpZJNcyevWj0aMHTpQg2m4xSbWzNLIDzbuzoWPB+7t7eOjCNGbbbzbeWtt87MOC1OEMDoSiknOUpSe9qTX5JHoX9CdzY3FvTcVOpTlGLk2km1lry5irB7SpYYZRtazhKcNLNweaecm1lqT2PcB5c/41p/cP8mVYr/8AF8IrbEFqo3C0Kr5k9jb9mT9jPRlhtZ8IY4ipU+JVPQcc3pZ5NbMsste8uxnD/pLD50IuKqJqUJS5n16nzN94Hlr/AOV4U5+db2C7U55/nn/abWLYjb2d9ShSsY3WISS0GorOKea87JvfqXNnsLsBwuWGWcqdWUZVpycpyjm1uSTaT2dW1s1sUwu8nidLEsOqU1WhHRcKmx6ms12p5ZagPIxyWKzhaTxGnQpQdVaFOm25J9bza2dZv4tlU4VYbTqrOmoqSTWrSzl/lIxv8FxbEo061xc0I1oS+rTjmoQXO08m220vieljOEvEadKdKoqN1RelTnryz25Pn2pNPmA9KrSp1qbp1qcKkHlnGcU08nms09W08rhBh0bnCJQowjGVutOnGKySSWtJLqzyW/I06tlwgvaStbq4oUqOa05wz0pJdS68nzHv0acKFvClF/UpwUU5a3kllm2Byl3i07/A7S0pS0rq5mqU1z6mtb3Ztp+1nU2dvC0taVvDzacVFPfltfteb9py/B6xo1sburuhFu1oTkqTa1NtvLLqSz70deAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABi/Pj7TIxfnx9oGQAA8qm1Qx+vGo8lc04um3sbisml1856pr3lnRvKWhWTzTzjKLylF70zT5BiCWgsVnxezXTTll255+0IRcNV8ctKdN5u3jOdRrmzWST69neeqc/cWFfC5q9sJzqpL/zQm83Jc7e/wDxtPYsrune20a1JvJ6mntT50wNgpuKMqmjKElGpB5xb2djLimq60ZRlTWlFZqUNSb60wlhC4nCap3ENBt5KS1psp42nUqTdapJRi3GMYp5aud5FlRVLhwg6ThBSUpSk1nq5kZRVShOajBzhJuSyaTTe1awhhQlKcKtOFRtRa0JyTzSfbuyK60qVKDdKtKVWOWtSbT168+YvnCvVoVE0ouWWjHPWlub6yupCrO3dKnRUEks02teXMviwJkp1LuUNOUYuCbSfgtwUHKs7dTkqdNZtJ623r1vdrLIU5q5lNxyi4JJ5raJwqQrurTjpqSylHPJ6udAROk6dKq4zk4OD+rJ55PJ60yunRcrWM5VJqSjnHReSSS1Fr46rConBRi4NRi2m22tufMZ04yjbRg1lJQyaz58gFtOU7eEpPNta3vLSq2hKnbwhJZSS1rPPnLQkAAAAAAAAAAAAAAAQAAAAAkAAAAAAxn5jMjGfmMDIAAAAAABAAAAAAIyJAAAAAABgAAAAAkAAAAAAAAAAAAAAwnSpzcZThGTg84uUU3F71uZmAgAASAAAAABGjHPScU5LUm1rRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB5F9gVG+uZ1q1zcKM2s6cZpR1LLUmurxPXAFVChTt6MKNGChTgsoxXMi0AAAAAAAAAAAAAAAAAAAAB5eJYPTxGqqlW5r00oKDhTklFpNvNpp69fgj1ABr2VnQsbaNvbQ0YR169bbe1t87NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYy86PtMiGs1lz8zAkGKllqkmnv5hpx3+AGQMdOO8acd4GRjCnClHRpwjCObeUUks31Iacd4047/ADIGOnHf4DTjvAyBjpx3jTjv8AMgY6cd/gNOO/wAyBjpx3jTjv8AMgY6cd/gNOO/wAAMgY6cd/gNOO/wAyBjpx3+A047/ADIGOnHf4DTjv8AMgY6cd4047/AAAyBjpx3+A047/ADIGOnHf4DTjv8AMgY6cd/gNOO/wIGQMdOO/wGnHf4AZAx047/Aacd/gSMgY6cd/gNOO8DIGOnHf4DTjv8AMjGfmtbxpR5nn7Ak282sktiAyAAAAAAAQAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAACQAAAAAAAAAAAAAAVOjT6Ee4cVT6ESELQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hEcVT6EQLQVcVT6ERxVPoRAtBVxVPoRHFU+hEC0FXFU+hE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ThBt8y1a/wD8lmDYvUvp3lC7t1bXNnJRqRUtKOTWpp+xgeyDmKWO4piUqtXB8MhVtKctFVK1TRdRrcub57C6rwgr08AWKrDqilCajWo1G4uC2ZrVr5gOhBoXWJULfCJ4mpKVFUuMjzaWa1L2meGXNW9w+hdV6Kozqx0uLUs8k9nMBuAADSmtG7klslFS9ueRkY13lea/s1+bGnHr7gMgY6cevuGnHr7glkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19w049fcBkDHTj19xknms08wAAAAAAAAAAAAAAV5563z7Cwqj5vsAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGH+t/PMSQ/PfXrJAHgcLberPD6VzQjpStaqquOWecVtfs1PszPfGrY9aYHh1ngWN2tK6u50pRhF5KdVwcG8m00mtepbfYeFZUKlfgJdQpRcpKq5ZJa2k4t+Cb9h088CwqdR1JWFFybzeUck/YtXgb1GjSoUlTo04U6a1KMIpJexAcjC3wiphXKamOX3FunlOlymLa1a46LWvdl/gsxynRjwbwuFDjJUHXp6HGpaTi4yazWWWxnQfQ+GOrxrsKDm3m3oLbvy2GxXtqFxCMLilCpGMlKKnFNJrUms+fWwPJ4Xfw9cf7of3I0OE1GKvMKuLipVo2qThOrSllKDex55PLu2JnT16FK5pOlcU4VKbybjNJp5PNamKlGlWpOlVpwnTksnCUU012MDlqtlhELizjLFr67nOrF0oRrxqLPPU2stS6zcmk+HFNtJtWja6nm0erbYZYWlTjLa0pU55ZaUYrNLqfMX8no8o5S6UOOUdFVNFaSW7PbkB5fCTEa+H2EJ2zjCpVqqnxklmoJpvPLZzc5z+Lwo0Kljp4tVvriVeE5Z1E4RiudRWpZtrLXszO1rUaVxSlSr041actsZJNP2M1o4Th0KLpRsaCpuSk46CabWx9qzfeB5uIfxZhH+yr/az3yqVvRnWhXnShKrTTUJtJuKayeT5s0WgAABhR9HH2/mZmMI6MdHPPLnMgPN4QfuK9+6Zq4HhuH1cGs6lWxtpzlTTlKVKLbe9trWe1Upwq05U6sIzhJZSjJJprc09opwhSpxp0oRhCKyjGKSSW5JakB4HCxLicOSSSV3DJLsZliH8WYR/sq/2s9urQo11FVqVOooyUoqcVLJrY1nsfWJUKMqsK0qUJVYJqE3FOUU9Tye1Z9QHJToW1LhLf08Ruq9qq+jUo1IVXTjJZa03s1bFnuZ6OFU8LjjNRWdxcXVzCllKpOpxkFFtatLfnzdp7NzZ213BQurenWinmlOKeT6txNta21pTcLahToxbzahFLN73ltA8HhVTnbys8YopudpUSnlzwb2Pqz1f+zLeDVOVy7vF6sWp3lRqGe1QjqS8MvYj3KtOnWpyp1qcKkJL60ZxTT7U9TJpwhSpxp0oRhCKyjGKSSW5JakBz+N31z9MWuGU7tWNGpBznXaWb2/VTepPUuda37H52Hq2hwwowtburdRjRlGVWrU03KWTbyexpLLZ1nV3Vla3kYxurenWUXnHTinl2bhCytKcqcqdrRjKkmqclTScE880nlq2vZvA5/DLu2sOEGNQvK9Og6k4zi6klFNLN6m+fKSMsCuqd7wjxW4otunKMFFtZZpLJPseWftPcucPsrucZ3NrSqyjqUpwTaW7Pd1FtO2t6U5VKVGnCckoylGCTaSySbS1pJJLcB4fBP0WI/wDMn/go4N3lravEaFzcUqNXlc2o1JKLaeS1Z7da5jpKNCjQUlRpU6alJyloRUdJva3ltfWUVsNsK9fj61pRnVWT05QTby2Z7/aBtgACun/r/wBzLDGMdHPXnm2zIAcxya3u+Gl3TuaMK0FaqSjOKaTzis8nz5N9505UrajG4lcqlBVpR0ZVNFaTW5vblqXcBhbWdraaXJbelR08tLQilnlnlnluzfeczhf7h4QfeV/7DriiFnbQpVaVO3pxp1m3UiopKTayea580BocGUlwfs0kktB7FzuTzPBsrWj9L4lbXeJXdjWdeU4RpVlTjUi22nrWt5PufUzsKNKnQpxpUYRhTisoxiskl1Ipu8Osr7J3dtTquKyUpLWluzWvIDy8Eo4fDEryVne3V3WUYxqzqzU4vdlJJZtZZbWeDQozWNPAdFqhG95Rllq0FHNJ9WWXtZ21ta29pS4q1owpQzzcYLLN73vYVtbq4dyqNNV3HR4zRWk1uz25AcTUo1I4tPg/oviKl7GutWpwaba7Msvame9j+IXVC7srC1r07XlLelXmk9FLmWerN/5Ww9jk1u7lXLoU3XS0VUcVpJbs9uWsxu7K1vaap3VCFaKeaUlnk+p7V7AOVUKVHhVh1KOIVrypHTdSdSopKLcXkklqWzZ1o9Cw/jPFfuqf9sT16WG2NFUuKtKMXSbcGoLOLeWbT25vLb1F0bahCvO4jShGtNJTmopSkllkm+fYu4Dw+C/pcW/5c/zZ0JVRt6Nu5ujShT4yTlNxilpN7W97LQBfZeZU/wB/+EUF1nJJ1IPbnn7Msv8AAG2AAhx3CK0oX3C7CbW6hp0alKWlHSazy0mtnWkdBh+C4bhsnKytIUptZOeuUu96zZna21S5hczo05V6eqFRxzlHsZsAcxa//uDe581kvzgTwu9Ng3/Oh+Z78bW3V1K6jQpqvKOi6mj9Zrdn7EK9tb3DpuvRhVdOSnDTjnotc66wPA4X0KlKhbYvbLOvYVVPJc8G8mvy9mZjwZzxPEb7HqkWo1XxNumtkI7e95e1M6SrTp1qUqVWCnCa0ZRks00Y29CjbUo0belClTjnlCKyS9gHLVb26xPG76yqYo8NtLTJZQajOpvek9i6+tdpr8FlSr3PCGlaVqlSE1GNOrUlpSlqmtJvn16zqLnCMNvK6r3VlRq1V/qlHNv4l9G0tqFWdWjQp06lRJTlCKTklszA5zghiNnb4FG0ua9KhXtpzjVhUkotfWbz1/Oo9q2ubPHMNqSpqU7aqpU3pRazWx5Zi5wbDLus61zY0alTnk46327xf1rjD7On9G4dypqSgqMJqmoxyevPLm/yBxVtG8ua1DgnXUnC3uZSqzz20lrS9uby3fV3H0RJRWSWSR4OA4fdwu7vFcUhGF5dNJU4vNU4LYs/Z4LrOgAAADRuP2z/AP5r8yBVkpXcmv8ATFRfbmAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABno61zbQRLzX2AWgAAAAAAAAAAAABVHzfYWlUfN9gEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiUVJbmtjMcpbs+xmYAw+t0X4D63RfgZgDD63RfgPrdH8jMAYfW6L8B9bovwMwBh9bovwH1ui/AzAGH1uj+Q+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+A+t0X4GYAw+t0X4D63RfgZgDD63RfgPrdF+BmAMPrdF+Bi1PNSh9WS59RaACu7iKydCMnvU8viOW1/VV7z9AAHLa/qq95+g5bX9VXvP0AActr+qr3n6Dltf1Ve8/QABy2v6qvefoOW1/VV7z9AAHLa/qq95+g5bX9VXvP0AActr+qr3n6Dltf1Ve8/QABy2v6qvefoOW1/VV7z9AAHLa/qq95+hEri5qLRjBUlvzzZIAxhBQjku1t85kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJea+wkiXmvsAtAAAAAAAAAAAAACqPm+wtKo+b7AJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACJea+wkiXmvsAtAAAAAAAAAAAAACqPm+wtKo+b7AJAAAA8PHcbdg+T26Uq7Wbb2QRzVVFMYy9bNmu9VuUPcBwSxDGa314VriSfPCOrwJ5XjfTu/wALPHPjo0eV1R3TXDvAcFyrG+nd/hY5XjfTu/wv4DPjocrq1w70HBcqxvp3f4WOVY307v8ACxnx0OV1a4d6DguVY307v8LHKsb6d3+FjPjocrq1w70HBcqxvp3f4X8ByrG+nd/hfwGfHQ5XVrh3oOC5VjfTu/wscqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5VjfTu/wsZ8dDldWuHeg4LlWN9O7/AAscqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5VjfTu/wALGfHQ5XVrh3oOC5VjfTu/wscrxvp3f4X8Bnx0OV1a4d6DguVY307v8LHKsb6d3+FjPjocrq1w70HBcqxvp3f4WOVY307v8L+Az46HK6tcO9BwXKsb6d3+FjlWN9O7/Cxnx0OV1a4d6DguVY307v8ACxyrG+nd/hYz46HK6tcO9BwXK8b6d3+F/Acqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5VjfTu/wsZ8dDldWuHeg4LlWN9O7/CxyrG+nd/hYz46HK6tcO9BwfKsb6d3+F/AjlWN9O7/AAsZ8dDldWuHeg4PlWN9O7/C/gOVY307v8L+Az46HK6tcO8BwXK8b6d3+F/Acqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5VjfTu/wsZ8dDldWuHeg4LlWN9O7/AAscqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5VjfTu/wALGfHQ5XVrh3oOC5VjfTu/wscqxvp3f4WM+OhyurXDvQcFyrG+nd/hY5XjfTu/wv4DPjocrq1w70HBcqxvp3f4WOVY307v8LGfHQ5XVrh3oOC5VjfTu/wscqxvp3f4X8Bnx0OV1a4d6DhIYxi1pUi6tWpr/wBFWGpnXYXiNPErVVoJxktU47cmd0XYq7lbaNiuWI3p74boBGlFamz1UkgjTjv8GNOO/wAGBII047/BjTjv8GBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTjv8GBII049fcNOPX3ASCNOPX3DTj19wEgjTj19w049fcBII049fcNOPX3ASCNOPX3DTj19wEgjT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", zu = "data:image/png;base64,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", bu = "data:image/png;base64,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Fqg33HCDf/mFKTTce++99uSTT/rvHTt2tKOOOsoOhA0bNhywAAIAAIBD2/nnn29PPfVUzIPCERcS6tat67sobdmypeC+SZMm+e5KKSkp/nvt2rWtatWq/rNWOVQOpWbqnTt3WmZmpm3atMnWrl1rO3bs8OdoBWLFihV+X1CmpONt377d79Nr9brCFBZ0f+HVEpU56T7dgtWO4P30fL3Hrl27Cp6vn/Xcwu8LAACAQ1eTJk2sW7duHhSWLVtmsRLTxuVvv/3W6tSpY8nJuz8N3a8B8qhRo+yKK67wXoVolSlTxho1auTv3aFDBy9z+vzzz+2iiy6yVatW+XNefPFFf0w7LfXv399+/vlnS01NteOOO85OP/106969u51wwgn+c7169eydd97xc9NAXq/p2rWrjRw50oYNG2b169e31atXW4kSJezZZ5/148+fP9/efPNNW7hwodWqVcsee+wxDxpq3FZQ0K106dLWo0cPDwYPPPCAv5+Cjb4T7QSl8NK7d2/bvHmzf0c6l5tuuskSEhIMAAAAh64gKDzxxBPWs2dPq169uh1sMQ0Js2bNsgULFljbtm19sKuZcQ3GNXDXwPrcc8+1efPm+YD+4osv9seKg8qJNMC+5JJLvDlas/a6NkMQEgIzZsywadOmeZIrX7683zd37lxLSkry3ZeqVatm99xzjweYc845xwf3GqjrXKVChQr24IMPekC47777bOLEiR4m1KCtP7wG/Nddd51/9uHDh/vx7rzzTh/oP/roox409J+kVKlSXg6l60Z07tzZd4PSeev7UiBRYFDQuPLKK61ixYoGAACAQ5vGdBozanwai5AQ03KjFi1a2Pjx461GjRo+4660NGbMGB/Aq8SnZcuWNnbsWGvQoEGxBQRRyZEG8NOnT7dPPvnEQ0paWtovnrdo0SIPD0FACKgcKbhPy0DNmjXzgb0G8/ocWlEQvbZkyZIeDJo2bephQPR5tVKgz6THVVKkwHTKKad4ANHz9d1oFUEUHvSfRPfrvXWcOXPm+IrE66+/bv369fPPlJubawAAADi0abJc4+H27dv7mDAWYhoSTjrpJJ99V7nPI4884qFAJTqa2VcTsertFRouu+wyK26dOnWygQMHelOIzmN3FCR0Dnur91cwCEKBzlslQSppkuBicFoZ0XUgdLw9UQ9EUHem99N/Dl0zYk8qV65szZs3t169evlNqx17ez4AAADinybKFRB0rbA2bdrErJQ8puVGmkl//PHHvZRGg+irr77aLr/8cm8QHj16tA0ePNhuvPFGO+aYY6y4aYCtAb3+AHsavJ966qk2dOhQe+6553wGXysaKvkpTOU/GqTrOPqjqsdAqwna6lSrIJrlV3OyZv+VBNXfsDtXXXWV9zqoN0ErBlopUHAKtmUtql27dv69vfrqqx4YFCyuueaaPfZ3AAAAIP6pHzbWAUES/jfbHdG2OBr4qjRGM+nRfgDtzqPmXzUoi2r4NdBWQNDAuji/oAkTJvgxFVDU76AZfNV8aTVAQUWrCupDUO2XyoIUWFQSpZ2KtNKhMqOZM2da69at/fOLyn7Uv6DjqGRIpUsffvihrwzoedrpSI3FRd9HFCRUilSuXDlbt26d9y3o8yqgaPCv1YjC71f43HQs7cykFQwdTwEFAAAAhy6NOVWWXhzjX00ia1Jc49793AAoPy5CQkC1+WoAHjBggO9AdChTSFDJ0F133WUAAADAwRZNSIir6yToAyh06Hao08qAUiAAAABwqImrlQRROZDKbxhgAwAAAJGLZiUh7rpcVdMPAAAAIHbiqtwIAAAAQOwREgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIREHBISEhIsPz/fAAAAAMQnjdkjEXFISEpKstzcXMvLyzMAAAAA8UOT+dnZ2R4SIgkKyRahxMREf8MdO3ZYWlqahwYAAAAAsaeAkJmZ6WP0SEJCQnp6elQ1QzoBrShQegQAAADEB4WD4BaB/IhXEgIpKSl+AwAAAHB4YHcjAAAAACFRrySozIhSIwAAACB+RNqwHIgqJARd0wQFAAAAIL6oHyE5Ofng7m6kUJCVleX9CKmpqexuBAAAAMSJnJwcy8jI8H8j6R+OuCdB10dQKiEgAAAAAPFFKwi6TEGku5BGFRIUDnS9BAAAAADxRWP1SNsCIh7h04MAAAAAHJ5YBgAAAAAQQkgAAAAAEEJIAAAAABBCSAAAAAAQQkgAAAAAEEJIAAAAABBCSAAAAAAQQkgAAAAAEEJIAAAAABBCSAAAAAAQQkgAAAAAEEJIAAAAABASdyEhPz/fAAAAAMROssWJ7du325dffmnjxo2zY4891q6++mqrVKmSAQAAADi44mIlIS8vz55//nkPCa1atbJly5bZHXfcYenp6QYAAADg4IqLkLB06VJbtGiRPfHEE/a73/3O/61Zs6avKgAAAAA4uOIiJKxZs8bKli3rN0lMTLT69evb4sWLLZbUH5GRkWEH265du3x1JVKxOm8AAABEJzs72+JBXISEnJyc3Q6Ks7KyrDgpjOi9Ctu0aZPt3Llzt89X2dOjjz7q/RIHU79+/WzEiBEWqVidNwAAAKLTt29fW758ucVa3OxupNnz9evXF9z0e3F766237L///W/ovpdeeslGjRq12+dXr17drrzySktJSbED7cMPPywY1Ldt29aOP/74/Xm5zZ071yZMmOA/H8zzBgAAQPE5//zz7amnnop5UIibkDB58mS76qqr7PLLL/fbu+++a8Xt4osvtu+//75gNWHr1q3eD6Fmaa1arFy50m9BQElOTrZGjRpZampqwfNXrFjhIUYlPbpt2LDB79uxY8cv3k+P67l6vHATtlZN1q5d6/crGOgYCgkzZsywzMxMH+TXqlXLVz4Kr7Dod9Fr9FodQ++hlZAxY8bYF198YZs3b97jeQfPl23btvlNx1y9enVU5U0AAAAoHk2aNLFu3bp5UFB1SKzEdAvUb7/91urUqeODWg3Si+5mpPtVDqSZ/iuuuMJ7FaJx4okn+oB83bp1PghXY3Tjxo2tZMmS9vLLL/tgORh0P/vssz5wfvDBB+2VV17xAfbrr7/u55Cbm2v33nuv90x88sknfuyNGzfa008/bTVq1Ch4vylTpth7773nx9GxdcyjjjrKPvjgAx/Up6WleYO2zmX+/Pn2/vvvW1JSko0dO9bq1atn06ZNszPOOMMuuOACH8w/+eST9vDDD/uKiELJqlWr7LLLLvOQo52h1IegsKH7HnroIT9v/ed65513/Lz12fXcrl272siRI23w4MG+YrFkyRI75ZRT7M4777SEhAQDAABA7ARBQZv59OzZ0yeQD7aYhoRZs2bZggUL7MILL/QBs2bRAxqsqnl53rx5Hia0ChDMjEdK5Tdnn322ffPNN3bDDTfY119/7ddj0KBcg24N4vUer732mg0aNMiuvfbagtcqIOgctASkc9NqxOOPP24333yz1a1b1z7//HP77LPP7NZbby14jf7A3bt391Dx73//24PB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PWYrV670n9U/8ec//9l/Hj16tN1444128803W69evezss8+2vSl63Ndee82mTp3qP19wwQUeOAo3ahfHygcAAAAODV27dvUKlVgHhbjZAvVgUQP0KaecYv369fNSpoSEhILHNCCfNWuWff311z7Df9ZZZ1mbNm181UCN1H//+9/tpptu8sCikKPXqq9COzLJsmXL7IwzzrC6det62ZBWGfS8du3aWZ06dbz/Yt68eda4cWO78sorbcyYMR5QtKtTZmamVapUyebOneuP6Zh6/qJFi6x27drWqVMnK1OmjL333nv+vGAp6rbbbrOyZct6+Bk1apQHr86dO1vlypUNAAAAhxZNFnfr1s1eeeUVDwqaiNb47mA7Ii+mdt111/kg/ueffw7dP3/+fHvppZesadOmdtlll9mbb77pg3g1UWvQrebqWrVqeenTjBkzrFmzZh4ItALQqFEjmzZtmvcnqF9Bx2nSpIlv4aotXdesWWOlS5e2jh072g8//OABoejrFQwUOjT4VzO3SrIUGLTqod9zc3P9PbQblFYstPqhc9Tz3n77bQ80J554ogcOAAAAHJoUFP70pz/Z5MmTvcw9FmIWElR3v6/bmqrcKKjbLw4atN91111e6rNr166C+zV41+rBeeedZy1atPAZea0qVK9e3Wfr1R9RsWLFgucrOOj3o446yqpWrVpwv4LFqaee6oN/BY7jjjvO6tev789RuNB7asVgT69fvny5P0dhRq/XspMCjC42J1pV+M1vfmMdOnTw52oFRDcFjGOOOcaDDAAAAA5NmjBWb4KuG3b88cdbLMQsJIwdO9bq1atn5cqV+9XnqoTniy++KNb6fA2yNej/4IMPCu7TwFwlPYESJUqEypH21fbt2wu2cw3oYnETJkzwFQM1a2dlZe3x9QpEWlZKTv7/ajD1bej3oC6t8P36TpQ2n376aS9D6t69u40bN84AAABw6NF4T6Xuqh5R2VHRMeXBErOQoN2Azj33XB+Yq/5/bzeFBC216JoJxemOO+7wlBZsr9q6dWsPIyoZ0nupxl8rCqKBuZpI9mVFQyFA/QQqMVq/fr2X/2glQGVLDRs29D6DgI6r9y8cGrSyoPfSEpNWD7755hsPNCpX2h2dk/okLr74Yr9KtfoqAAAAcOj59NNPYx4QJGaNy5oFHzBggL3//vv+uwa5msXXzL1mxzUbrxKfgGbS1QQcrcKlOBUqVLBbbrnFr+wsJ510ki1ZssQefvhhL4Vq2bKlD7xFJT4vvviidenSxVc/gmChMqFgh6bgZ4UNlQEFV4r+/e9/b7/73e/srbfesu+++87PIRjwX3LJJfbGG2/4Z1M40LH1Gu2mpIvJKTzouCo5UtlV4ffT81SupNKtgQMHerjRd6ZSKgAAABx6NM6LdUCQhP8NziOq4dHgVR9CFzyLpCRHoUAz7UEJzQsvvGDNmze3tm3ber2+AoRKZ4LyHw3oq1WrFtF7AQAAAEcaTbxrAxxNLO/nDkn5MVtJ0Ix34ZUCzZTrGgHr1q3zLUG1q4/6BmKx5RMAAABwJIvZSsLuqFZfNVg1a9b00p+gQRcAAADA/olmJSGuQgIAAACA4hFNSKCWBwAAAEAIIQEAAABACCEBAAAAQAghAQAAAEAIIQEAAABACCEBAAAAQAghAQAAAEAIIQEAAABACCEBAAAAQAghAQAAAEAIIQEAAABACCEBAAAAQAghAQAAAEAIIQEAAAA4TCUkJFgkIg4JiYmJlpeXZ/n5+QYAAAAgvmisHqmIQ0JSUpLl5uZadnY2QQEAAACIExqbKyBkZmb6xL5u+yvZIqSlixIlStiuXbssKyvLQwMAAACA2MvJyfGwoPF6JCIOCaJUojfWioJOBAAAAEBsaTI/OTk5ohWEQFQhofBJAAAAADg8sLsRAAAAgJColwBU60TjMgAAABA/VO0T6fanElVIUDgIdjciKAAAAADxQxsLqS0gkrAQcUhQKNCuRikpKZaamsruRgAAAECc0KZCGRkZ/q/G6/sr4p4E7b2qVEJAAAAAAOKLVhDS0tJ8F9JIKn6iCgkKB9FsrQQAAADgwNBYPdK2gIhH+PQgAAAAAIcnlgEAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAIQQEgAAAACEEBIAAAAAhBASAAAAAITEPCRkZWVZbm6uAQAAAIgPyRYjeXl59u2339pnn31mJUuWtJtvvtkaNmzoj+Xk5NjOnTt/8Zrk5GQrVaqUAQAAADhwYhYSpkyZYv369bMbb7zRNm/ebPfff7/961//snLlytnEiRPtjTfe+MUKQ+nSpa1Xr15WsWJFO1zl5+fbrl27LC0tzQAAAHBkyc7OtpSUFIu1mIWESZMmWatWreySSy7x34cMGWLLli2zpk2bWvPmze2hhx7yAXNh+sLKli1r0dKXv27dOqtdu7bFG30Hffr0sccee8zKlCmz2+coRHz00Ue2adMmu+WWWwgUAAAAh4m+ffvalVdeaXXq1LFYillPQuPGje3HH3+0xYsX+8pBYmKiVa1a1R/TikGjRo3suOOOC93q16/vJUfR0ipGhw4d7Oeff7ZYWblypX311Ve/uL969er+H2NvCXLcuHE2efJka9u2bVwkTQAAABSP888/35566ilbvny5xVLMVhLOOOMMmzVrlv3pT3/yPgPNiAchQf0IGzdu/MVrNCCuUaOGRevLL7/0Afann35qzZo1K7g/IyPDZ+eDwKJAsn37dtuyZYv/XK1aNX9s69atlp6e7uej+xISErxkSp8jNTXVeyr0u46xbdu2gs+klRGFAK1kaJCvkNCiRQurUqVKwTnofRSQdBwdQ++h90tKSvLX6hwVrLSiEpxjcN6i8yE4AAAAHJqaNGli3bp186Cgypq6detaLMQkJKhcZv369XbZZZd5uZEG2bopGGjgq5WFJ554wgfThVWqVMnefvvt0KB6f2nAv3DhQv/SH330UR+Iq8dB9//973/3wb/ORSsNRx99tJf+6Dw08L/99tt9oP/OO+94WNiwYYOXTHXt2tUGDhxo9erV81UAHevBBx+0V155xUaOHGmDBw+2448/3pYsWWKnnHKKXX311fb555/bokWLbNCgQdalS5eChuzCr9Uxp06d6mVRc+fOtWuvvdZLsRRyFAw+/PBDu/zyy/0c9btuWoXp0aOH/wsAAIBDTxAUNB7u2bOnTxQfbDEJCaq10q5GCgtFPfPMM3bOOef47UAYM2aMD9iPOeYYL19SILnooot8VUFh4eGHHy4oaXruuee8R0KDc4UCueeee+yKK67w89Og/KabbrKLL754r++p8PDII494ALnrrru8Wfv666+3ESNG+H+AvdH76z0XLFhgL774ooeqq666ylavXu3hQkFCqwd33nmnhxsFHwUThRwAAAAcmjQuVeXIqlWrjpyQoDKb/v37/6Jx+P3337dhw4bZmWeeaQeCtl1VOKlZs6Z98sknHgaGDh1qF1xwgc2ePdtXNgr3PMyYMcN+97vfFQQEUWOxSpQ0INfsv4KGVhT2RiGhRIkSVrlyZcvMzPRrQ+yrBg0a+PtrFUUrGkVXV1SypUCgciRR+dKKFSsMAAAAhyZNBvfu3dvat2/vY7tYiElIULnQ6NGjvewmGNyq9l+NxBoU64tRU3PRLVC12895550XGrTvj6VLl/ps/llnneXlQyeccIJNmDDBm4jLly/v/xamBKf7NMgPKBgoFOgzaMCu8iCdl8JFcG0HlTApkBwMKs9ScFEZk0qh9N1FU44FAACA2FmzZo0HhAsvvNDatGnjE9OxEJOQ8Le//c26d+9uY8eOtdatW3vZjhp51XCrWXHNhOuxolugqpm3ZcuWPqseCV287dRTT7Vrrrmm4AtXCFCN/29/+1s/Jw36RX8YlRI9//zzNn/+fF8BUJlP586d/VoNelx/xFq1avlqgh5/+umnPfTMnDmzoGF5TzSQVwOyVlVUuhTprk06J523mpsVnubMmeOlTQAAADj0qNom1gFBEv43s55vEVDJjAbEmlmP5ANoMD5q1ChvIlYpjho0NIA/kHv+a3VCg3rdArpegs5BM/FaIVCPgs7n5JNPtgoVKnhgUYDRRd50nxqCFRpUiqSVBr0uOOfp06f7wF/buwZNzWrQ1mdVb4HoM5900kl+lWmdjwb3Z599tgcgUdjQ++m1WvlQcFL/ROH7ix5Tn0Hnrb+DvkOVNQEAAODQo+oajTeLIyBowl1jRo0z97MSJz9mIQEAAADAgRNNSIjZxdQAAAAAxCdCAgAAAIAQQgIAAACAEEICAAAAgBBCAgAAAIAQQgIAAACAEEICAAAAgBBCAgAAAIAQQgIAAACAEEICAAAAgBBCAgAAAIAQQgIAAACAEEICAAAAgBBCAgAAAIAQQgIAAACAEEICAAAAgJCIQ0JCQoLl5+cbAAAAgPikMXskIg4JSUlJlpuba3l5eQYAAAAgfmgyPzs720NCJEEh2SKUmJjob7hjxw5LS0vz0AAAAAAg9hQQMjMzfYweSUhISE9Pj6pmSCegFQVKjwAAAID4oHAQ3CKQH/FKQiAlJcVvAAAAAA4P7G4EAAAAICTqlQSVGVFqBAAAAMSPSBuWA1GFhKBrmqAAAAAAxBf1IyQnJx/c3Y0UCrKysrwfITU1ld2NAAAAgDiRk5NjGRkZ/m8k/cMR9yTo+ghKJQQEAAAAIL5oBUGXKYh0F9KoQoLCga6XAAAAACC+aKweaVtAxCN8ehAAAACAwxPLAAAAAABCCAkAAAAAQggJAAAAAEIICQAAAABCCAkAAAAAQggJAAAAAEIICQAAAABCCAkAAAAAQggJAAAAAEIICQAAAABCCAkAAAAAQggJAAAAAELiJiTk5+cbAAAAgNhLthhSMJg7d6598cUXtnbtWjv11FPtoosuspIlSxoAAACA2IjpSsL48ePt0UcftaSkJGvRooWNHDnSHn74YcvMzCx4jn7Ozc01AAAAAAdHQnp6ekR1PllZWT64L1WqlCUkJNj+ysvLsxtuuMFuu+02O++88/y+7Oxsu/POO61Dhw6+ojB8+HAbMWKElS5d2m655RZr2LChAQAAAPh1qtrZsmWLpaamWmLifq0N5MdsJUEn/L+AYieeeGLBfSkpKXb22WfbnDlzfJXh3XfftUsuucSOPfZYe+CBB2zHjh0GAAAAHK40aR4PYhYSypYt6/9u3Lix4D6tLixdutRq1KhhU6ZMsdatW1u7du18FUGrFevXr7fikJGRYatXr7YVK1bY5s2baZoGAABAXOjbt68tX77cYi1mIUGrBio36tmzp82cOdPWrFljQ4YMsZ9//tlXExo3bmwTJkywJUuW2NixY32JJC0tzaK1ePFi69Wrl73wwgvWp08fe+KJJ2zDhg22v7QS8tlnn+13v4QatfW5AAAAgKLOP/98e+qpp2IeFGK6u1HHjh3930ceecQH2/Xr1/dG5tq1a1u1atV8QN2tWzcrUaKE/eEPf/D7oqEVhGeffdbf94ILLvDgodWLoKdi69atXgKlAKP30v3btm3zx3bu3OkrDtWrV/fXzJgxwz7++GNr2rSp1atXz7Zv3+7BofBrCx9TtWDq3xgzZoz/0Rs1amQVKlSwdevW+bJSxYoVvfcCAAAAR64mTZr4+FdB4aGHHrK6detaLMSkcVk7FmlwXJhCgo4XUDlS+fLlvSRIg3O9R5UqVaJaTVCfw0cffWRPPvmkB4/CtJrxzjvveHDQykKrVq2sa9euvroxePBgO/74431V45RTTrHOnTv7MSZOnOhpT83Xb731lvdMrFq1yi677DL77W9/awsWLLDXX3/dj6nP1759e19CUli59NJLPWB88MEH/v4KH/fee6+HDAAAABzZZs2aZS+99JJX3WicGIloGpdjspLw73//2wYNGhTa6rQoDeIHDBhgb775pn333Xf+ITWofuWVV/yDRkKBo2bNmr8ICKJB/hVXXGHnnHOOD+Jvuukmu/jii/0xrRRotUMrAnfddZfdeOONduutt/r5q6Fa56NdmURB4u233/ZjKSDoGAoSQZBSX4X6Ibp06eKfrWXLlnbVVVd5QCIgAAAAQFRloklzTUBHGhKiEbOQ8Nprr3nJzZ706NHDJk2a5DP2ohKfNm3a+Cy/ypEioXKewo3ShS1btsyaNWvmg3mtjqj0KehVUEhQsKhcubIHA62iFKYVBH0mJTWltKCESE3YzZs33+NKy+WXX27PPPOMh6DrrruuYCtYAAAAHLk0ody7d2+vQtG1xGIhJo3LycnJu53NL6zozLoG91WrVvXXRkrbrc6ePdsWLVpUcJ/ChygYBKFAA3wN+MuUKbNPx1V/gnoXunfvbp06dSroLdC5btq0aY+vUyp89dVX/QJyWsnQTksAAAA4cmkzHwWECy+80CfII7keWXGIyUrCqaeeal999ZXX8u+OBsvTp0+3a665xn9X82+/fv28T6BSpUoWKa1A3HzzzT6Y1xdfrlw5X0FQj4Fu2vVI9+uPU6tWLV9NUKjYnaDp+PPPP/edmBQ81JQ8derUgus56POpUbpt27ZewqTPo2Cgi8TpuWqGVt+CzkPvV7gnAwAAAEee/v37xzwgSEwal1W3/8c//tH++te/2mmnnVawqqDmXtXsq1Zfx9QWqUOHDvXAoLos1f8XR03WypUr/ZgauB999NFeZqRVi/nz5/uqgN5LDcpqklYfg1YV1A8ho0aNspNOOsk/t46hnYrOPfdc/0x6vVYrtESkQKNeheCY2vFI133Q51IDtShcKFQoLJx88sl+fQgAAAAcubRjpqpSiiMgRNO4HJOQIJMnT7ann37adzDSFZXVmKHB9cKFC33rp7vvvtsH3tOmTfPfVdtPYy8AAACwbw7JkCCaQVcIUDjQ8XQsza43aNBgfz8IAAAAgEIO2ZAAAAAA4MCIJiQwXQ8AAAAghJAAAAAAIISQAAAAACCEkAAAAAAghJAAAAAAIISQAAAAACCEkAAAAAAghJAAAAAAIISQAAAAACCEkAAAAAAghJAAAAAAIISQAAAAACCEkAAAAAAghJAAAAAAICTikJCQkGD5+fkGAAAAID5pzB6JiENCUlKS5ebmWl5engEAAACIH5rMz87O9pAQSVBItgglJib6G+7YscPS0tI8NAAAAACIPQWEzMxMH6NHEhIS0tPTo6oZ0gloRYHSIwAAACA+KBwEtwjkR7ySEEhJSfEbAAAAgMMDuxsBAAAACIlqJUElRmpcpoEZAAAAiB9BqZH6iCMRVUhQONCtRIkSNC4DAAAAcUAT+Tk5OZaVleXj9EiCgkJCRB3HwQpCqVKl6EkAAAAA4khqaqrt2rXLbyVLlvy1p/9i+6P/AxLzgaft3EodAAAAAElFTkSuQmCC", Uu = {
key: 0,
class: "card"
}, Ou = { class: "card-body" }, Vu = { class: "card-wrapper" }, Pu = { class: "title" }, xu = { class: "button" }, Bu = { class: "allow" }, Ru = { class: "image-wrapper" }, Gu = ["src"], ku = /* @__PURE__ */ z({
__name: "SystemPermitTip",
props: {
platform: {},
language: {}
},
setup(a) {
const A = {
mac: {
"zh-cn": ta,
en: ju
},
win: {
"zh-cn": zu,
en: bu
}
}, e = a, t = f(() => e.platform === "mac" ? "mac-privacy" : "win-privacy"), o = f(() => e.platform === "mac" ? "mac-preferences" : "win-preferences"), i = L(ta), s = L(!0), c = uA(), r = (g) => {
g && O.isPC && (s.value = !0);
}, d = () => {
s.value = !1;
};
return cA(() => e.language, () => {
i.value = A[e.platform][e.language];
}, {
immediate: !0
}), yA(() => {
M.watch(u.CALL, {
[l.SHOW_PERMISSION_TIP]: r
}, {
notifyRangeWhenWatch: l.MYSELF
});
}), LA(() => {
M.unwatch(u.CALL, {
[l.SHOW_PERMISSION_TIP]: r
});
}), (g, N) => n(s) ? (I(), h("div", Uu, [
T("div", Ou, [
T("div", {
class: "close",
onClick: d
}, [
S(Eu)
]),
T("div", Vu, [
T("div", Pu, B(n(c)("browser-authorization")), 1),
T("div", xu, B(n(c)(n(o))), 1),
T("div", Bu, B(n(c)(n(t))), 1),
T("div", Ru, [
T("img", {
src: n(i),
class: "image",
alt: "system permit"
}, null, 8, Gu)
])
])
])
])) : w("", !0);
}
});
const qu = /* @__PURE__ */ X(ku, [["__scopeId", "data-v-9982fa76"]]), Wu = { class: "tip" }, Xu = { class: "card" }, Qu = /* @__PURE__ */ z({
__name: "PermitTip",
setup(a) {
const A = f(() => O.isMAC ? Ct.MAC : Ct.WIN), e = L(M.getData(u.CALL, l.LANGUAGE)), t = (o) => e.value = o;
return yA(() => {
M.watch(u.CALL, {
[l.LANGUAGE]: t
}, {
notifyRangeWhenWatch: l.MYSELF
});
}), LA(() => {
M.unwatch(u.CALL, {
[l.LANGUAGE]: t
});
}), (o, i) => (I(), h("div", Wu, [
T("div", Xu, [
S(qu, {
platform: n(A),
language: n(e)
}, null, 8, ["platform", "language"])
])
]));
}
});
const Fu = /* @__PURE__ */ X(Qu, [["__scopeId", "data-v-cd63c32e"]]), uo = {};
let Nt = null, Zu = 1;
const Yu = () => {
const a = document.body, A = document.createElement("div");
Nt && (a.removeChild(Nt.el), be(null, A));
const e = S(Fu, {
index: `permit-item-${Zu++}`,
// eslint-disable-line
destroy() {
be(null, A);
}
});
be(e, A), a.appendChild(A.firstElementChild), Nt = e;
};
uo.show = () => Yu();
const Hu = { class: "toast-content" }, Ku = /* @__PURE__ */ z({
__name: "Toast",
props: {
type: {},
duration: {},
message: {},
index: {},
showClose: { type: Boolean },
destroy: { type: Function },
close: { type: Function }
},
setup(a) {
const A = a, e = L(!1), t = L(null), o = f(() => `toast-container ${A.type}`), i = () => {
A.destroy();
}, s = () => {
A.close(), e.value = !1;
}, c = () => {
t.value && clearTimeout(t.value), A.duration && (t.value = setTimeout(() => {
s();
}, A.duration));
};
return yA(() => {
e.value = !0, c();
}), LA(() => {
t.value && clearTimeout(t.value);
}), (r, d) => (I(), E(xo, {
name: "slide-up",
onAfterLeave: i
}, {
default: v(() => [
lA((I(), h("div", {
key: r.index,
class: V(n(o))
}, [
T("div", Hu, B(r.message), 1),
lA(T("i", {
onClick: s,
class: "toast-close-icon"
}, null, 512), [
[sA, r.showClose]
])
], 2)), [
[sA, n(e)]
])
]),
_: 1
}));
}
});
const Ju = /* @__PURE__ */ X(Ku, [["__scopeId", "data-v-27fc22c5"]]), KA = {}, VA = [];
let _u = 1;
function $u() {
var A, e, t;
const a = VA.length;
return a > 0 ? (t = (e = (A = VA[a - 1]) == null ? void 0 : A.el) == null ? void 0 : e.style) == null ? void 0 : t.top : "30px";
}
function Ad() {
var A, e;
const a = VA.length;
return a > 0 ? (e = (A = VA[a - 1]) == null ? void 0 : A.el) == null ? void 0 : e.offsetHeight : 0;
}
const Io = (a) => {
const { type: A, duration: e = 3e3, message: t, showClose: o = !1, onClose: i } = a, s = document.body, c = document.createElement("div"), r = S(Ju, {
type: A,
duration: e,
message: t,
showClose: o,
index: `toast-item-${_u++}`,
// eslint-disable-line
close() {
var p, y, m, D;
const N = VA.findIndex((j) => j === r);
console.log((y = (p = VA[N]) == null ? void 0 : p.el) == null ? void 0 : y.offsetHeight);
const C = parseInt((D = (m = VA[N]) == null ? void 0 : m.el) == null ? void 0 : D.offsetHeight) + 20;
for (let j = 0; j < VA.length; j++)
j < N || (VA[j].el.style.top = parseInt(VA[j].el.style.top) - C + "px");
VA.splice(N, 1);
},
destroy() {
be(null, c);
}
});
be(r, c), s.appendChild(c.firstElementChild);
const d = $u(), g = Ad();
r.el.style.top = parseInt(d) + parseInt(g) + 20 + "px", VA.push(r);
};
["info", "waring", "error", "success"].forEach((a) => {
let A = {};
KA[a] = (e) => {
typeof e == "string" ? A.message = e : A = e, Io({ type: a, ...A });
};
});
KA.show = (a) => {
let A = {};
return typeof a == "string" ? (A.message = a, A.type = "info") : A = a, Io({ type: "info", ...A });
};
const lt = /* @__PURE__ */ z({
__name: "TUICallKit",
props: {
beforeCalling: {},
afterCalling: {},
onMinimized: {},
onMessageSentByMe: {},
kickedOut: {},
statusChanged: {},
allowedMinimized: { type: Boolean, default: !1 },
allowedFullScreen: { type: Boolean, default: !0 },
videoDisplayMode: { default: "cover" },
videoResolution: { default: "480p" }
},
setup(a) {
const A = !O.isPC, e = A ? "TUICallKit-mobile transition-animation" : "TUICallKit-desktop", t = L(""), o = L(""), i = L(""), s = L(!1), c = a, r = L(M.getData(u.CALL, l.CALL_STATUS)), d = L(M.getData(u.CALL, l.CALL_ROLE)), g = L(M.getData(u.CALL, l.CALL_MEDIA_TYPE)), N = L(M.getData(u.CALL, l.IS_GROUP)), C = L(M.getData(u.CALL, l.IS_EAR_PHONE)), p = L(null), y = L(M.getData(u.CALL, l.LOCAL_USER_INFO_EXCLUDE_VOLUMN)), m = L(M.getData(u.CALL, l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST)), D = L(M.getData(u.CALL, l.CALLER_USER_INFO)), j = L(M.getData(u.CALL, l.IS_MINIMIZED)), k = L(M.getData(u.CALL, l.ENABLE_VIRTUAL_BACKGROUND)), q = L(M.getData(u.CALL, l.IS_SHOW_ENABLE_VIRTUAL_BACKGROUND)), b = L(M.getData(u.CALL, l.CUSTOM_UI_CONFIG)), Q = L(M.getData(u.CALL, l.IS_MUTE_SPEAKER)), R = L(M.getData(u.CALL, l.TRANSLATE)), Z = Be({
callStatus: r,
callRole: d,
callType: g,
isGroupCall: N,
isEarPhone: C,
focusElement: p,
allowedFullScreen: c.allowedFullScreen,
enableVirtualBackground: k,
isShowEnableVirtualBackground: q,
isMuteSpeaker: Q
}), K = Be({ callerUserInfo: D }), dA = Be({
localUserInfoExcludeVolume: y,
remoteUserListExcludeVolume: m
}), vA = Be({ isFloatWindow: j }), ye = L(R), {
beforeCalling: ee,
afterCalling: te,
onMinimized: ae,
onMessageSentByMe: QA,
videoDisplayMode: st,
videoResolution: rt,
kickedOut: oA,
statusChanged: hA,
allowedMinimized: nA
} = G(c), kA = (J) => {
Z.callStatus = J;
}, Mo = (J) => {
Z.isGroupCall = J;
}, po = (J) => {
if (typeof J == "object") {
const { content: oe, type: jo = "info" } = J;
!wa(oe) && Eo(R.value(oe), jo);
}
}, No = (J) => {
Z.callType = J, A && s.value && (i.value = "miniMized-mobile-audio", o.value = ""), A && !s.value && (o.value = "mobile-audio");
}, Ot = (J) => {
vA.isFloatWindow = J, J ? A ? Z.callType === _.AUDIO ? o.value = "miniMized-mobile-audio" : i.value = "miniMized-mobile-video" : t.value = "miniMized" : (o.value = "mobile-audio", t.value = "", i.value = "");
}, Co = (J) => {
if (J && O.isPC)
try {
uo.show();
} catch (oe) {
console.debug(oe);
}
}, Lo = (J) => {
Z.callRole = J;
}, ho = (J) => {
dA.localUserInfoExcludeVolume = J;
}, So = (J) => {
dA.remoteUserListExcludeVolume = J;
}, yo = (J) => {
K.callerUserInfo = J;
}, fo = (J) => {
Z.isEarPhone = J;
}, mo = (J) => {
Z.enableVirtualBackground = J;
}, To = (J) => {
Z.isShowEnableVirtualBackground = J;
}, vo = (J) => {
b.value = J;
}, Do = (J) => {
Z.isMuteSpeaker = J;
}, wo = (J) => {
R.value = J;
};
Se(() => {
W.setCallback({
beforeCalling: ee && ee.value,
afterCalling: te && te.value,
onMinimized: ae && ae.value,
onMessageSentByMe: QA && QA.value,
kickedOut: oA && oA.value,
statusChanged: hA && hA.value
});
});
const Vt = {
[l.CALL_STATUS]: kA,
[l.IS_GROUP]: Mo,
[l.TOAST_INFO]: po,
[l.CALL_MEDIA_TYPE]: No,
[l.SHOW_PERMISSION_TIP]: Co,
[l.CALL_ROLE]: Lo,
[l.LOCAL_USER_INFO_EXCLUDE_VOLUMN]: ho,
[l.REMOTE_USER_INFO_EXCLUDE_VOLUMN_LIST]: So,
[l.CALLER_USER_INFO]: yo,
[l.IS_EAR_PHONE]: fo,
[l.ENABLE_VIRTUAL_BACKGROUND]: mo,
[l.IS_SHOW_ENABLE_VIRTUAL_BACKGROUND]: To,
[l.CUSTOM_UI_CONFIG]: vo,
[l.IS_MUTE_SPEAKER]: Do,
[l.TRANSLATE]: wo
};
yA(() => {
nA.value && W.enableFloatWindow(nA.value), W.setVideoDisplayMode(st.value), W.setVideoResolution(rt.value), M.watch(
u.CALL,
Vt,
{
notifyRangeWhenWatch: l.MYSELF
}
), M.watch(u.CALL, {
[l.IS_MINIMIZED]: Ot
});
});
function Eo(J, oe) {
switch (oe) {
case "info":
KA == null || KA.info(J);
break;
case "error":
KA == null || KA.error(J);
break;
}
}
return LA(async () => {
M.unwatch(u.CALL, {
...Vt,
[l.IS_MINIMIZED]: Ot
});
}), EA(pa, Z), EA(Na, K), EA(Ca, dA), EA(Sa, vA), EA(ma, b), EA(Ta, ye), (J, oe) => n(Z).callStatus !== n(x).IDLE ? (I(), h("div", {
key: 0,
style: AA([{ visibility: n(vA).isFloatWindow ? "hidden" : "" }]),
id: "tuicallkit-id",
class: V([n(e), n(t), n(i), n(o)])
}, [
n(Z).isGroupCall ? (I(), E(Tu, {
key: 1,
class: "singCall"
})) : (I(), E(Uc, {
key: 0,
class: "singCall"
}))
], 6)) : w("", !0);
}
});
const go = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEuNTM2IDYuNjgyYy0uMzMtLjk1NS4wODgtMS45OC45LTIuNTgxLjYxNy0uNDU2IDEuMjM2LS45MTYgMS41ODktMS4xNzhhLjM5Ni4zOTYgMCAwIDEgLjUzOS4wNjJsMS45MjUgMi4yNjRhLjM5Ni4zOTYgMCAwIDEgMCAuNTEzbC0xLjE4IDEuMzlhLjM4OC4zODggMCAwIDAtLjA0MS40NSA4LjY2NyA4LjY2NyAwIDAgMCAxLjM3IDEuNzU4Yy41Ny41NyAxLjEyLjk4MiAxLjc2NSAxLjM2NGEuMzg5LjM4OSAwIDAgMCAuNDUtLjA0MWwxLjM4My0xLjE3NGEuMzk3LjM5NyAwIDAgMSAuNTE0IDBsMi4yNjYgMS45MjVjLjE1OS4xMzUuMTg2LjM3LjA2Mi41MzhsLTEuMTg1IDEuNjA0Yy0uNTk2LjgwNi0xLjYxNCAxLjIxNi0yLjU2Mi44OWExMi41NDUgMTIuNTQ1IDAgMCAxLTQuNzk3LTMuMDAzIDEyLjU0IDEyLjU0IDAgMCAxLTIuOTk4LTQuNzh6IiBmaWxsPSIjMUM2NkU1Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04Ljg4OSAyLjEzM2EuMzU2LjM1NiAwIDAgMC0uMzU2LjM1NnYzLjY4NWMwIC4xOTYuMTYuMzU1LjM1Ni4zNTVoMy42ODVjLjE5NiAwIC4zNTUtLjE1OS4zNTUtLjM1NXYtLjE4NmEuMzIuMzIgMCAwIDEgLjQ1NS0uMjlsLjY4Ny4zMmEuMzU2LjM1NiAwIDAgMCAuNTA2LS4zMjJ2LTIuNzNjMC0uMjYtLjI3LS40MzItLjUwNi0uMzIybC0uNjg3LjMyYS4zMi4zMiAwIDAgMS0uNDU1LS4yOVYyLjQ5YS4zNTYuMzU2IDAgMCAwLS4zNTUtLjM1Nkg4Ljg4OXoiIGZpbGw9IiMxQzY2RTUiLz48L3N2Zz4=", ed = { class: "banner-pc" }, td = { class: "text" }, ad = { class: "content" }, od = { class: "avatar-box" }, nd = /* @__PURE__ */ z({
__name: "JoinGroupCard",
props: {
userListInfo: {
type: Array,
default: []
}
},
emits: ["joinGroupCall"],
setup(a, { emit: A }) {
const e = A, t = L(!1), o = uA(), i = () => {
e("joinGroupCall"), t.value = !1;
}, s = () => {
t.value = !t.value;
};
return (c, r) => (I(), h("div", ed, [
T("div", {
class: "top",
onClick: s
}, [
S(TA, {
class: "call-icon",
src: n(go),
width: "16px",
height: "16px"
}, null, 8, ["src"]),
T("span", td, B(a.userListInfo.length) + " " + B(n(o)("people on the call")), 1)
]),
lA(T("div", ad, [
r[0] || (r[0] = T("div", { class: "content-arrows" }, null, -1)),
T("div", od, [
(I(!0), h(RA, null, ue(a.userListInfo, (d) => (I(), E(TA, {
class: "avatar",
src: d == null ? void 0 : d.avatar,
defaultSrc: n(WA),
fit: "cover",
width: "32px",
height: "32px"
}, null, 8, ["src", "defaultSrc"]))), 256))
]),
T("div", {
class: "btn",
onClick: i
}, B(n(o)("join")), 1)
], 512), [
[sA, n(t)]
])
]));
}
});
const id = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAiIGhlaWdodD0iNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTkuNSAwIDUgMy43NS41IDB2MS41NjJsNC4xMTYgMy40My4zODQuMzIuMzg0LS4zMkw5LjUgMS41NjJWMHoiIGZpbGw9IiM2NjYiLz48L3N2Zz4=", ld = { class: "banner-h5" }, sd = { class: "left" }, rd = { class: "text" }, cd = { class: "content-box" }, ud = { class: "content" }, dd = { class: "avatar-box" }, Id = /* @__PURE__ */ z({
__name: "JoinGroupCard",
props: {
userListInfo: {
type: Array,
default: []
}
},
emits: ["joinGroupCall"],
setup(a, { emit: A }) {
const e = uA(), t = L({ margin: "8px 10px 8px 0px" }), o = L({
margin: "6px",
borderRadius: "4px"
}), i = L(!1), s = A, c = () => {
s("joinGroupCall"), i.value = !1;
}, r = () => {
i.value = !i.value;
};
return (d, g) => (I(), h("div", ld, [
T("div", {
class: "top",
onClick: r
}, [
T("div", sd, [
S(TA, {
class: "call-icon",
src: n(go),
width: "16px",
height: "16px",
customStyle: n(t)
}, null, 8, ["src", "customStyle"]),
T("span", rd, B(a.userListInfo.length) + " " + B(n(e)("people on the call")), 1)
]),
S(TA, {
src: n(id),
width: "9px",
height: "9px"
}, null, 8, ["src"])
]),
lA(T("div", cd, [
T("div", ud, [
T("div", dd, [
(I(!0), h(RA, null, ue(a.userListInfo, (N) => (I(), E(TA, {
src: N == null ? void 0 : N.avatar,
customStyle: n(o),
defaultSrc: n(WA),
fit: "cover",
width: "50px",
height: "50px"
}, null, 8, ["src", "customStyle", "defaultSrc"]))), 256))
]),
T("div", {
class: "btn",
onClick: Le(c, ["stop"])
}, B(n(e)("join")), 1)
])
], 512), [
[sA, n(i)]
])
]));
}
});
const gd = /* @__PURE__ */ z({
__name: "JoinGroupCard",
setup(a) {
const A = L(O.isPC), e = L(null), { groupId: t, roomId: o, roomIdType: i, callMediaType: s, groupCallMembers: c, callStatus: r } = G(Kn()), d = f(() => t && (r == null ? void 0 : r.value) === x.IDLE && c.value.length), g = async () => {
if (c.value.length > 9) {
e.value.show({
message: "Supports a maximum of 9 people for simultaneous calls",
type: "success"
});
return;
}
const N = {
type: s.value,
groupID: t.value,
roomID: i.value === 1 ? Number(o.value) : 0,
strRoomID: String(o.value)
};
try {
await W.joinInGroupCall(N);
} catch (C) {
console.error(`${l.PREFIX}joinInGroupCall fail: ${C}`);
}
};
return (N, C) => lA((I(), h("div", null, [
n(A) ? (I(), E(nd, {
key: 0,
userListInfo: n(c),
onJoinGroupCall: g
}, null, 8, ["userListInfo"])) : (I(), E(Id, {
key: 1,
userListInfo: n(c),
onJoinGroupCall: g
}, null, 8, ["userListInfo"])),
S(no, {
ref_key: "message",
ref: e
}, null, 512)
], 512)), [
[sA, n(d)]
]);
}
}), Md = (a) => (a.component("TUICallKit", { server: W }), W.bindTUICore(a), lt), pd = (a) => {
a.component("TUICallKit", lt).component("JoinGroupCard", gd), console.log("TUICallKit&mini installed", a);
};
lt.plugin = Md;
lt.install = pd;
const Sd = {
AUDIO_CALL: 1,
VIDEO_CALL: 2
}, yd = "3.3.9";
export {
_ as CallMediaType,
gA as CallRole,
_A as FeatureButton,
gd as JoinGroupCard,
Fe as LayoutMode,
l as NAME,
fA as STATUS,
u as StoreName,
lt as TUICallKit,
W as TUICallKitServer,
Sd as TUICallType,
O as TUIGlobal,
M as TUIStore,
yd as Version,
Ue as VideoDisplayMode,
Oe as VideoResolution,
pd as install,
Md as plugin,
de as t,
ZA as uiDesign
};