@zegocloud/zego-uikit-prebuilt 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/index.html +119 -0
  2. package/package.json +18 -0
  3. package/sdk/index.d.ts +11 -0
  4. package/sdk/model/index.d.ts +66 -0
  5. package/sdk/modules/index.d.ts +62 -0
  6. package/sdk/modules/soundmeter.d.ts +18 -0
  7. package/sdk/modules/util.d.ts +10 -0
  8. package/sdk/util.d.ts +13 -0
  9. package/sdk/view/components/mobile/zegoConfirm/index.d.ts +17 -0
  10. package/sdk/view/components/mobile/zegoToast/index.d.ts +17 -0
  11. package/sdk/view/components/zegoModel/index.d.ts +13 -0
  12. package/sdk/view/components/zegoSelect/index.d.ts +32 -0
  13. package/sdk/view/components/zegoSetting/index.d.ts +57 -0
  14. package/sdk/view/components/zegoSetting/speakerFile.d.ts +1 -0
  15. package/sdk/view/components/zegoToast/index.d.ts +13 -0
  16. package/sdk/view/index.d.ts +11 -0
  17. package/sdk/view/pages/ZegoBrowserCheck/index.d.ts +42 -0
  18. package/sdk/view/pages/ZegoBrowserCheckMobile/components/ZegoLoading.d.ts +6 -0
  19. package/sdk/view/pages/ZegoBrowserCheckMobile/index.d.ts +27 -0
  20. package/sdk/view/pages/ZegoRejoinRoom/index.d.ts +11 -0
  21. package/sdk/view/pages/ZegoRoom/components/zegoMessage.d.ts +21 -0
  22. package/sdk/view/pages/ZegoRoom/components/zegoOne2One.d.ts +19 -0
  23. package/sdk/view/pages/ZegoRoom/components/zegoTimer.d.ts +9 -0
  24. package/sdk/view/pages/ZegoRoom/index.d.ts +58 -0
  25. package/sdk/view/pages/ZegoRoomMobile/components/ZegoReconnect.d.ts +6 -0
  26. package/sdk/view/pages/ZegoRoomMobile/components/zegoMessage.d.ts +31 -0
  27. package/sdk/view/pages/ZegoRoomMobile/components/zegoOne2One.d.ts +21 -0
  28. package/sdk/view/pages/ZegoRoomMobile/components/zegoRoomInvite.d.ts +8 -0
  29. package/sdk/view/pages/ZegoRoomMobile/components/zegoTimer.d.ts +9 -0
  30. package/sdk/view/pages/ZegoRoomMobile/components/zegoUserList.d.ts +14 -0
  31. package/sdk/view/pages/ZegoRoomMobile/index.d.ts +55 -0
  32. package/zego-uikit-prebuilt.js +2387 -0
package/index.html ADDED
@@ -0,0 +1,119 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="utf-8" />
6
+
7
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
8
+ <meta name="theme-color" content="#000000" />
9
+ <meta name="description" content="Web site created using create-react-app" />
10
+
11
+
12
+ <!--
13
+ Notice the use of %PUBLIC_URL% in the tags above.
14
+ It will be replaced with the URL of the `public` folder during the build.
15
+ Only files inside the `public` folder can be referenced from the HTML.
16
+
17
+ Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
18
+ work correctly both with client-side routing and a non-root public URL.
19
+ Learn how to configure a non-root public URL by running `npm run build`.
20
+ -->
21
+ <title>ZEGOCLOUD video call Demo(prebuilt)</title>
22
+ <style>
23
+ #root {
24
+ width: 100vw;
25
+ height: 100vh;
26
+
27
+ }
28
+
29
+ @font-face {
30
+ font-family: Emoji;
31
+ src: local("Apple Color Emoji"), local("Segoe UI Emoji"),
32
+ local("Segoe UI Symbol"), local("Noto Color Emoji");
33
+ }
34
+
35
+ body {
36
+ margin: 0;
37
+ font-family: "PingFang SC", "Microsoft YaHei", system-ui, -apple-system,
38
+ "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans",
39
+ "Droid Sans", "Helvetica Neue", sans-serif, Arial, Emoji;
40
+ -webkit-font-smoothing: antialiased;
41
+ -moz-osx-font-smoothing: grayscale;
42
+ }
43
+
44
+ code {
45
+ font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
46
+ monospace;
47
+ }
48
+ </style>
49
+ </head>
50
+
51
+ <body>
52
+ <noscript>You need to enable JavaScript to run this app.</noscript>
53
+ <div id="root"></div>
54
+ <!--
55
+ This HTML file is a template.
56
+ If you open it directly in the browser, you will see an empty page.
57
+
58
+ You can add webfonts, meta tags, or analytics to this file.
59
+ The build step will place the bundled scripts into the <body> tag.
60
+
61
+ To begin the development, run `npm start` or `yarn start`.
62
+ To create a production bundle, use `npm run build` or `yarn build`.
63
+ -->
64
+ </body>
65
+ <script src="./index.umd.js"></script>
66
+ <script>
67
+ // get token
68
+ function generateToken(tokenServerUrl, userID, roomID, userName) {
69
+ // Obtain the token interface provided by the App Server
70
+ return fetch(
71
+ `${tokenServerUrl}/access_token?userID=${userID}&userName=${userName}&roomID=${roomID}&expired_ts=7200`, {
72
+ method: 'GET',
73
+ }
74
+ ).then((res) => res.json());
75
+ }
76
+
77
+ function randomID(len) {
78
+ let result = '';
79
+ if (result) return result;
80
+ var chars = '12345qwertyuiopasdfgh67890jklmnbvcxzMNBVCZXASDQWERTYHGFUIOLKJP',
81
+ maxPos = chars.length,
82
+ i;
83
+ len = len || 5;
84
+ for (i = 0; i < len; i++) {
85
+ result += chars.charAt(Math.floor(Math.random() * maxPos));
86
+ }
87
+ return result;
88
+ }
89
+
90
+ function getUrlParams(url) {
91
+ let urlStr = url.split('?')[1];
92
+ const urlSearchParams = new URLSearchParams(urlStr);
93
+ const result = Object.fromEntries(urlSearchParams.entries());
94
+ return result;
95
+ }
96
+
97
+ async function init() {
98
+ const roomID = getUrlParams(window.location.href)['roomID'] || randomID(5);
99
+ const {
100
+ token
101
+ } = await generateToken(
102
+ 'https://choui-prebuilt.herokuapp.com',
103
+ randomID(5),
104
+ roomID,
105
+ randomID(5)
106
+ );
107
+ const zp = ZegoUIKitPrebuilt.create(token);
108
+ zp.joinRoom({
109
+ container: document.querySelector("#root"),
110
+ preJoinViewConfig: {
111
+ invitationLink: window.location.origin + window.location.pathname + '?roomID=' + roomID,
112
+ },
113
+ });
114
+ }
115
+
116
+ window.onload = init;
117
+ </script>
118
+
119
+ </html>
package/package.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "@zegocloud/zego-uikit-prebuilt",
3
+ "version": "1.0.0",
4
+ "description": "zegocloud prebuilt meeting webrtc sdk",
5
+ "main": "./index.umd.js",
6
+ "typings": "./sdk/index.d.ts",
7
+ "keywords": [
8
+ "sdk",
9
+ "zego",
10
+ "zegocloud",
11
+ "webrtc",
12
+ "video call",
13
+ "voice call"
14
+ ],
15
+ "author": "zegodev",
16
+ "license": "ISC",
17
+ "access": "public"
18
+ }
package/sdk/index.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import { Root } from "react-dom/client";
2
+ import { ZegoCloudRoomConfig } from "./model/index";
3
+ import { ZegoCloudRTCCore } from "./modules/index";
4
+ export declare class ZegoUIKitPrebuilt {
5
+ static core: ZegoCloudRTCCore;
6
+ static _instance: ZegoUIKitPrebuilt;
7
+ root: Root | undefined;
8
+ static create(token: string): ZegoUIKitPrebuilt;
9
+ joinRoom(roomConfig?: ZegoCloudRoomConfig): void;
10
+ destroy(): void;
11
+ }
@@ -0,0 +1,66 @@
1
+ import { ZegoUser, ZegoBroadcastMessageInfo } from "zego-express-engine-webrtm/sdk/code/zh/ZegoExpressEntity.d";
2
+ import { ZegoCloudRTCCore } from "../modules";
3
+ export interface ZegoCloudRemoteMedia {
4
+ media: MediaStream;
5
+ fromUser: ZegoUser;
6
+ micStatus: "OPEN" | "MUTE";
7
+ cameraStatus: "OPEN" | "MUTE";
8
+ state: "NO_PLAY" | "PLAY_REQUESTING" | "PLAYING";
9
+ }
10
+ export interface ZegoCloudRoomConfig {
11
+ container?: HTMLElement | undefined | null;
12
+ preJoinViewConfig?: {
13
+ title?: string;
14
+ invitationLink?: string;
15
+ };
16
+ showPreJoinView?: boolean;
17
+ turnOnMicrophoneWhenJoining?: boolean;
18
+ turnOnCameraWhenJoining?: boolean;
19
+ showMyCameraToggleButton?: boolean;
20
+ showMyMicrophoneToggleButton?: boolean;
21
+ showAudioVideoSettingsButton?: boolean;
22
+ showTextChat?: boolean;
23
+ showUserList?: boolean;
24
+ lowerLeftNotification?: {
25
+ showUserJoinAndLeave?: boolean;
26
+ showTextChat?: boolean;
27
+ };
28
+ leaveRoomCallback?: () => void;
29
+ joinRoomCallback?: () => void;
30
+ roomTimerDisplayed?: boolean;
31
+ branding?: {
32
+ logoURL?: string;
33
+ };
34
+ showLeavingView?: boolean;
35
+ localizationJSON?: object;
36
+ }
37
+ export interface ZegoBrowserCheckProp {
38
+ core: ZegoCloudRTCCore;
39
+ joinRoom?: () => void;
40
+ leaveRoom?: () => void;
41
+ returnHome?: () => void;
42
+ }
43
+ export interface ZegoNotification {
44
+ type: "USER" | "MSG";
45
+ content: string;
46
+ userName: undefined | string;
47
+ messageID: number;
48
+ }
49
+ export declare type ZegoBroadcastMessageInfo2 = ZegoBroadcastMessageInfo & {
50
+ status: "SENDING" | "SENDED" | "FAILED";
51
+ };
52
+ export interface ZegoSettingsProps {
53
+ core: ZegoCloudRTCCore;
54
+ theme?: string;
55
+ initDevices: {
56
+ mic: string | undefined;
57
+ cam: string | undefined;
58
+ speaker: string | undefined;
59
+ videoResolve: string | undefined;
60
+ };
61
+ closeCallBack?: () => void;
62
+ onMicChange: (deviceID: string) => void;
63
+ onCameraChange: (deviceID: string) => void;
64
+ onSpeakerChange: (deviceID: string) => void;
65
+ onVideoResolutionChange: (level: string) => void;
66
+ }
@@ -0,0 +1,62 @@
1
+ /// <reference types="node" />
2
+ import { ZegoExpressEngine } from "zego-express-engine-webrtc";
3
+ import { ZegoDeviceInfo, ZegoLocalStreamConfig, ZegoPublishStreamConfig, ZegoServerResponse } from "zego-express-engine-webrtc/sdk/code/zh/ZegoExpressEntity.web";
4
+ import { ZegoUser, ZegoBroadcastMessageInfo } from "zego-express-engine-webrtm/sdk/code/zh/ZegoExpressEntity.d";
5
+ import { ZegoCloudRemoteMedia, ZegoCloudRoomConfig } from "../model";
6
+ export declare class ZegoCloudRTCCore {
7
+ static _instance: ZegoCloudRTCCore;
8
+ static _zg: ZegoExpressEngine;
9
+ _expressConfig: {
10
+ appID: number;
11
+ userID: string;
12
+ userName: string;
13
+ roomID: string;
14
+ token: string;
15
+ };
16
+ static getInstance(token: string): ZegoCloudRTCCore;
17
+ status: {
18
+ loginRsp: boolean;
19
+ videoRefuse: boolean;
20
+ audioRefuse: boolean;
21
+ micDeviceID?: string;
22
+ cameraDeviceID?: string;
23
+ speakerDeviceID?: string;
24
+ videoResolution?: string;
25
+ };
26
+ remoteStreamMap: {
27
+ [index: string]: ZegoCloudRemoteMedia;
28
+ };
29
+ checkWebRTC(): Promise<boolean>;
30
+ _config: ZegoCloudRoomConfig;
31
+ setConfig(config: ZegoCloudRoomConfig): void;
32
+ getCameras(): Promise<ZegoDeviceInfo[]>;
33
+ getMicrophones(): Promise<ZegoDeviceInfo[]>;
34
+ getSpeakers(): Promise<ZegoDeviceInfo[]>;
35
+ setVolume(media: HTMLVideoElement, volume: number): void;
36
+ createStream(source?: ZegoLocalStreamConfig): Promise<MediaStream>;
37
+ setVideoConfig(media: MediaStream, constraints: ZegoPublishStreamConfig): Promise<ZegoServerResponse>;
38
+ destroyStream(stream: MediaStream): void;
39
+ useCameraDevice(media: MediaStream, deviceID: string): Promise<ZegoServerResponse>;
40
+ useMicrophoneDevice(media: MediaStream, deviceID: string): Promise<ZegoServerResponse>;
41
+ useSpeakerDevice(media: HTMLMediaElement, deviceID: string): Promise<ZegoServerResponse>;
42
+ enableVideoCaptureDevice(localStream: MediaStream, enable: boolean): Promise<boolean>;
43
+ mutePublishStreamVideo(localStream: MediaStream, enable: boolean): Promise<boolean>;
44
+ mutePublishStreamAudio(localStream: MediaStream, enable: boolean): Promise<boolean>;
45
+ muteMicrophone(enable: boolean): Promise<boolean>;
46
+ enterRoom(): Promise<number>;
47
+ publishLocalStream(media: MediaStream): boolean;
48
+ replaceTrack(media: MediaStream, mediaStreamTrack: MediaStreamTrack): Promise<ZegoServerResponse>;
49
+ private onRemoteMediaUpdateCallBack;
50
+ onRemoteMediaUpdate(func: (updateType: "DELETE" | "ADD" | "UPDATE", streamList: ZegoCloudRemoteMedia[]) => void): void;
51
+ private onNetworkStatusQualityCallBack;
52
+ onNetworkStatusQuality(func: (roomID: string, level: number) => void): void;
53
+ private onRemoteUserUpdateCallBack;
54
+ onRemoteUserUpdate(func: (roomID: string, updateType: "DELETE" | "ADD", user: ZegoUser[]) => void): void;
55
+ sendRoomMessage(message: string): Promise<import("zego-express-engine-webrtm/sdk/code/zh/ZegoExpressEntity.d").ZegoServerResponse>;
56
+ private onRoomMessageUpdateCallBack;
57
+ onRoomMessageUpdate(func: (roomID: string, info: ZegoBroadcastMessageInfo[]) => void): void;
58
+ NetworkStatusTimer: NodeJS.Timer | null;
59
+ private onNetworkStatusCallBack;
60
+ onNetworkStatus(func: (roomID: string, type: "ROOM" | "STREAM", status: "DISCONNECTED" | "CONNECTING" | "CONNECTED") => void): void;
61
+ leaveRoom(): void;
62
+ }
@@ -0,0 +1,18 @@
1
+ export interface SoundLevel {
2
+ instant: number;
3
+ slow: number;
4
+ clip: number;
5
+ }
6
+ export declare class SoundMeter {
7
+ context: AudioContext;
8
+ instant: number;
9
+ slow: number;
10
+ clip: number;
11
+ type: string;
12
+ script: ScriptProcessorNode;
13
+ mic: MediaElementAudioSourceNode | MediaStreamAudioSourceNode;
14
+ constructor();
15
+ connectToStreamSource(source: MediaStream, callback: Function): void;
16
+ connectToElementSource(source: HTMLMediaElement, callback: Function): void;
17
+ stop(): void;
18
+ }
@@ -0,0 +1,10 @@
1
+ export declare function generateVideoView(isVideo: boolean, userID: string): HTMLMediaElement;
2
+ export declare function getConfig(token: string): {
3
+ appID: number;
4
+ userID: string;
5
+ userName: string;
6
+ roomID: string;
7
+ token: string;
8
+ } | undefined;
9
+ export declare function copy(text: string): void;
10
+ export declare function formatTime(s: number): string;
package/sdk/util.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ export declare function randomNumber(len: number): number;
2
+ export declare function isPc(): boolean;
3
+ export declare function DateFormat(date: number, fmt: string): string;
4
+ export declare function userNameColor(userName: string): string;
5
+ export declare function getUrlParams(url: string): {
6
+ [k: string]: string;
7
+ };
8
+ export declare function getVideoResolution(level: string): {
9
+ width: number;
10
+ height: number;
11
+ bitrate: number;
12
+ frameRate: number;
13
+ };
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ export declare class ZegoConfirmComponents extends React.Component<{
3
+ closeCallBack: (confirm: boolean) => void;
4
+ title: string;
5
+ content?: string;
6
+ cancel?: string;
7
+ confirm?: string;
8
+ }> {
9
+ render(): React.ReactNode;
10
+ }
11
+ export declare const ZegoConfirm: (config?: {
12
+ closeCallBack?: ((confirm: boolean) => void) | undefined;
13
+ title?: string | undefined;
14
+ content?: string | undefined;
15
+ cancel?: string | undefined;
16
+ confirm?: string | undefined;
17
+ } | undefined) => void;
@@ -0,0 +1,17 @@
1
+ import React from "react";
2
+ export declare class ZegoToastComponents extends React.Component<{
3
+ closeCallBack: () => void;
4
+ content?: string;
5
+ duration: number;
6
+ }> {
7
+ state: {
8
+ mounted: boolean;
9
+ };
10
+ componentDidMount(): void;
11
+ render(): React.ReactNode;
12
+ }
13
+ export declare const ZegoToast: (config?: {
14
+ closeCallBack?: () => void;
15
+ content?: string;
16
+ duration?: number;
17
+ }) => void;
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ export interface ZegoModelProps {
3
+ header: string;
4
+ contentText: string;
5
+ okText?: string;
6
+ cancelText?: string;
7
+ onOk?: Function;
8
+ onCancel?: Function;
9
+ }
10
+ export declare class ZegoModel extends React.Component<ZegoModelProps> {
11
+ render(): React.ReactNode;
12
+ }
13
+ export declare const ZegoModelShow: (props: ZegoModelProps) => void;
@@ -0,0 +1,32 @@
1
+ import React from "react";
2
+ export interface ZegoSelectProps {
3
+ label?: string;
4
+ placeholder?: string;
5
+ options?: Array<{
6
+ name: string;
7
+ value: string;
8
+ }>;
9
+ onChange?: Function;
10
+ theme?: string;
11
+ initValue?: string;
12
+ }
13
+ export declare class ZegoSelect extends React.Component<ZegoSelectProps> {
14
+ state: {
15
+ value: string;
16
+ name: string;
17
+ showList: boolean;
18
+ };
19
+ listRef: React.RefObject<HTMLDivElement>;
20
+ selectRef: React.RefObject<HTMLDivElement>;
21
+ handleChange(op: {
22
+ value: string;
23
+ name: string;
24
+ }): void;
25
+ handleClickInput(): void;
26
+ onCloseList: (event: any) => void;
27
+ setInitValue(): void;
28
+ componentDidMount(): void;
29
+ componentWillUnmount(): void;
30
+ componentDidUpdate(prevProps: any): void;
31
+ render(): React.ReactNode;
32
+ }
@@ -0,0 +1,57 @@
1
+ /// <reference types="node" />
2
+ import React from "react";
3
+ import { ZegoDeviceInfo } from "zego-express-engine-webrtc/sdk/code/zh/ZegoExpressEntity.web";
4
+ import { ZegoSettingsProps } from "../../../model";
5
+ import { SoundMeter } from "../../../modules/soundmeter";
6
+ export declare class ZegoSettings extends React.Component<ZegoSettingsProps> {
7
+ state: {
8
+ visible: boolean;
9
+ selectTab: "AUDIO" | "VIDEO";
10
+ seletMic: string | undefined;
11
+ seletSpeaker: string | undefined;
12
+ seletCamera: string | undefined;
13
+ seletVideoResolution: string | undefined;
14
+ micDevices: ZegoDeviceInfo[];
15
+ speakerDevices: ZegoDeviceInfo[];
16
+ cameraDevices: ZegoDeviceInfo[];
17
+ localVideoStream: MediaStream | undefined;
18
+ localAudioStream: MediaStream | undefined;
19
+ audioVolume: number;
20
+ speakerVolume: number;
21
+ isSpeakerPlaying: boolean;
22
+ renderAudio: boolean;
23
+ };
24
+ videoRef: React.RefObject<HTMLDivElement>;
25
+ speakerTimer: NodeJS.Timer | null;
26
+ micTimer: NodeJS.Timer | null;
27
+ micSounder: SoundMeter;
28
+ speakerSounder: SoundMeter;
29
+ solutionList: {
30
+ name: string;
31
+ value: string;
32
+ }[];
33
+ componentDidMount(): Promise<void>;
34
+ componentWillUnmount(): void;
35
+ getDevices(): Promise<{
36
+ micDevices: ZegoDeviceInfo[];
37
+ speakerDevices: ZegoDeviceInfo[];
38
+ cameraDevices: ZegoDeviceInfo[];
39
+ seletMic: string | undefined;
40
+ seletSpeaker: string | undefined;
41
+ seletCamera: string | undefined;
42
+ seletVideoResolution: string | undefined;
43
+ }>;
44
+ createVideoStream(): Promise<boolean>;
45
+ createAudioStream(): Promise<boolean>;
46
+ toggleTab(type: string): void;
47
+ toggleMic(deviceID: string): Promise<void>;
48
+ toggleSpeaker(deviceID: string): Promise<void>;
49
+ toggleCamera(deviceID: string): Promise<void>;
50
+ toggleVideoResolution(level: string): Promise<void>;
51
+ toggleSpeakerTest(): void;
52
+ close(): void;
53
+ captureMicVolume(): void;
54
+ onTestMusicEnded(): void;
55
+ render(): React.ReactNode;
56
+ }
57
+ export declare const ZegoSettingsAlert: (config: ZegoSettingsProps) => void;
@@ -0,0 +1 @@
1
+ export declare const audioBase64 = "data:audio/mpeg;base64,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EsmWSEUz//r+Y3///92yHxbj8sFTfjckt41ja3H4tHocr+VlM1lDMD3H5vk4VnBOXoHBZY1qdgWSSwens/MpDWLGNq9rs+i5a/Syu0rF7/ojaS3VS//VPUvmC+oYBIk9Tv/zQsROFFJmtZ5gxPDyL+Xq0Au+NtyuDaMkUMxJjLG145yypNvs4KG0tQeXCG21Kgkijs4eapyMMmpl6smXRJ7auzIj3cuvp/90e7PKfqKd0Yzqnv9E/qHwMVQe+xnyPhqJJKOySSSWUP/zQMRYFAKSxZ5AywrUS55Nek6Kwv861nrzX/A8cOnrvONjds8ZuZKT739b+zisCVH86L7y5Wf5SU16zISn/X4/mMVeR99bjIx/XL5SW1//iZ1wBBlaUWPd9C0OSBk8RMIT8pH4XH+r//NCxGMTw0bWXjBHeuQtn9jngxLc5Yp4KykfptzR9Fdgr///kNkS17f596JlPq3//v+rLCLRzGaarGNYx2RaOzrOhlqZvyzEHipOJVYBmHHjFOYB1choFDbppFrXbAuphvkOa19UsiOr//NAxHAUM0KgVEhFDfNmaTImYEBNtsm6oa51RNzrrsxKKdbN9/60/srIuv/3b9P3rtXvT/c3q9Oz5G0OJjEejngQMqc/D2qULeiVaxJbEk15lb9uGrHY5BHDQko2Z9BCpL2niZZhFOb/80LEehOzOph0CwQcJlet3Ey8LxG0f3kQZHq38rPKq//9Pt/a9trZHpMK5Vy7yVUh9R2WS3bASLB5JNbrHUshw+9Gbo5etie2D0w9Zf7MErGVOaxQbmdBo1k2HJsbcaxq5QX3NTAyTiX/80DEhxNK3ohMeET85QUNMM7XhWoRZUwirQ488XRRHA7O99oiDAEjkcl1lsGKzw6Lo1d3fEyjzIlLzEwcbWZqesAhWYYoQ2xE7qmCMOvWz67G9UaHDehqgRj5upHFDHRxGVUemDJcIP/zQsSUFEDinb4LBhhJZkEJY/vdtunhYNSbXHXWihuaJPBUqfrneQUB22JuVV24eZzmhOeYJAIBALSKgCRNgLH0MVT41AdjZmqkzGzHsdVYxqJVSaMzMzf0Kv/sa+x/w/1/qw1h3Vfqif/zQMSfF2Fakl4LBhghmS1A0/2RF/KuK1nSroNZH5UZ0olG4AqkyEhcVMgIWFWGfYK6H+LCuoXZu//ULs/1X///29f9Quz9Yo00sVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVV//NCxJwUwdaBvjJGwFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV//NAxKULIAH0XghGAlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=";
@@ -0,0 +1,13 @@
1
+ import React from "react";
2
+ export declare class ZegoToastComponents extends React.Component<{
3
+ closeCallBack: () => void;
4
+ content?: string;
5
+ duration: number;
6
+ }> {
7
+ render(): React.ReactNode;
8
+ }
9
+ export declare const ZegoToast: (config?: {
10
+ closeCallBack?: () => void;
11
+ content?: string;
12
+ duration?: number;
13
+ }) => void;
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ import { ZegoCloudRTCCore } from "../modules";
3
+ export declare class ZegoCloudRTCKitComponent extends React.Component<{
4
+ core: ZegoCloudRTCCore;
5
+ }> {
6
+ state: {
7
+ step: number;
8
+ };
9
+ nextPage(): void;
10
+ render(): React.ReactNode;
11
+ }
@@ -0,0 +1,42 @@
1
+ import React, { ChangeEvent, RefObject } from "react";
2
+ import { ZegoBrowserCheckProp } from "../../../model";
3
+ export declare class ZegoBrowserCheck extends React.Component<ZegoBrowserCheckProp> {
4
+ state: {
5
+ isSupportWebRTC: undefined;
6
+ localStream: undefined;
7
+ localVideoStream: undefined;
8
+ localAudioStream: undefined;
9
+ userName: string;
10
+ videoOpen: boolean;
11
+ audioOpen: boolean;
12
+ isVideoOpening: boolean;
13
+ isCopied: boolean;
14
+ isJoinRoomFailed: boolean;
15
+ joinRoomErrorTip: string;
16
+ showDeviceAuthorAlert: boolean;
17
+ seletMic: undefined;
18
+ seletSpeaker: undefined;
19
+ seletCamera: undefined;
20
+ seletVideoResolution: string;
21
+ isJoining: boolean;
22
+ };
23
+ videoRef: RefObject<HTMLVideoElement>;
24
+ inviteRef: RefObject<HTMLInputElement>;
25
+ audioRefuse: boolean;
26
+ videoRefuse: boolean;
27
+ constructor(props: ZegoBrowserCheckProp);
28
+ componentDidMount(): Promise<void>;
29
+ getDevices(): Promise<{
30
+ seletMic: string | undefined;
31
+ seletSpeaker: string | undefined;
32
+ seletCamera: string | undefined;
33
+ seletVideoResolution: string;
34
+ }>;
35
+ createStream(videoOpen: boolean, audioOpen: boolean): Promise<MediaStream>;
36
+ toggleStream(type: "video" | "audio"): Promise<void>;
37
+ joinRoom(): Promise<void>;
38
+ handleChange(event: ChangeEvent<HTMLInputElement>): void;
39
+ handleCopy(): void;
40
+ openSettings(): void;
41
+ render(): React.ReactNode;
42
+ }
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ export declare class ZegoLoading extends React.Component<{
3
+ content: string;
4
+ }> {
5
+ render(): React.ReactNode;
6
+ }
@@ -0,0 +1,27 @@
1
+ import React, { ChangeEvent, RefObject } from "react";
2
+ import { ZegoBrowserCheckProp } from "../../../model";
3
+ export declare class ZegoBrowserCheckMobile extends React.Component<ZegoBrowserCheckProp> {
4
+ state: {
5
+ isSupportWebRTC: undefined;
6
+ localStream: undefined;
7
+ localVideoStream: undefined;
8
+ localAudioStream: undefined;
9
+ userName: string;
10
+ videoOpen: boolean;
11
+ audioOpen: boolean;
12
+ copied: boolean;
13
+ isVideoOpening: boolean;
14
+ isJoining: boolean;
15
+ };
16
+ videoRef: RefObject<HTMLVideoElement>;
17
+ inviteRef: RefObject<HTMLInputElement>;
18
+ audioRefuse: boolean;
19
+ videoRefuse: boolean;
20
+ constructor(props: ZegoBrowserCheckProp);
21
+ componentDidMount(): Promise<void>;
22
+ createStream(videoOpen: boolean, audioOpen: boolean): Promise<MediaStream>;
23
+ toggleStream(type: "video" | "audio"): Promise<void>;
24
+ joinRoom(): Promise<void>;
25
+ handleChange(event: ChangeEvent<HTMLInputElement>): void;
26
+ render(): React.ReactNode;
27
+ }