@streamyy/client 0.1.0 → 0.2.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.
- package/README.md +7 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/components/CallControls.d.ts +2 -1
- package/dist/components/CallControls.d.ts.map +1 -1
- package/dist/components/CallControls.js +16 -24
- package/dist/components/CallControls.js.map +1 -1
- package/dist/components/IncomingCallCard.d.ts.map +1 -1
- package/dist/components/IncomingCallCard.js +32 -16
- package/dist/components/IncomingCallCard.js.map +1 -1
- package/dist/components/StreammyCallWidget.d.ts +4 -2
- package/dist/components/StreammyCallWidget.d.ts.map +1 -1
- package/dist/components/StreammyCallWidget.js +167 -113
- package/dist/components/StreammyCallWidget.js.map +1 -1
- package/dist/hooks/useStreammy.d.ts +11 -6
- package/dist/hooks/useStreammy.d.ts.map +1 -1
- package/dist/hooks/useStreammy.js +348 -69
- package/dist/hooks/useStreammy.js.map +1 -1
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,139 +1,193 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo, useState } from "react";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { CallControls } from "./CallControls.js";
|
|
4
4
|
import { IncomingCallCard } from "./IncomingCallCard.js";
|
|
5
|
+
import { VideoStage } from "./VideoStage.js";
|
|
5
6
|
import { useRingtone } from "../hooks/useRingtone.js";
|
|
6
7
|
import { useStreammy } from "../hooks/useStreammy.js";
|
|
7
8
|
const statusLabel = {
|
|
8
|
-
idle: "
|
|
9
|
-
initiated: "
|
|
9
|
+
idle: "Ready",
|
|
10
|
+
initiated: "Calling",
|
|
10
11
|
ringing: "Ringing",
|
|
11
|
-
accepted: "
|
|
12
|
-
ongoing: "
|
|
12
|
+
accepted: "Connecting",
|
|
13
|
+
ongoing: "In call",
|
|
13
14
|
declined: "Declined",
|
|
14
15
|
cancelled: "Cancelled",
|
|
15
16
|
ended: "Ended",
|
|
16
17
|
failed: "Failed",
|
|
17
18
|
missed: "Missed",
|
|
18
19
|
};
|
|
19
|
-
const
|
|
20
|
-
borderRadius: "
|
|
21
|
-
border: "1px solid rgba(
|
|
22
|
-
background: "radial-gradient(circle at top, rgba(
|
|
23
|
-
boxShadow: "0 24px 80px rgba(2, 6, 23, 0.45)",
|
|
20
|
+
const shellStyle = {
|
|
21
|
+
borderRadius: "2rem",
|
|
22
|
+
border: "1px solid rgba(255, 255, 255, 0.08)",
|
|
23
|
+
background: "radial-gradient(circle at top, rgba(34, 197, 94, 0.14), transparent 26%), linear-gradient(180deg, #182229 0%, #0b141a 100%)",
|
|
24
24
|
color: "white",
|
|
25
|
+
boxShadow: "0 30px 80px rgba(0, 0, 0, 0.28)",
|
|
25
26
|
};
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
const fieldStyle = {
|
|
28
|
+
width: "100%",
|
|
29
|
+
borderRadius: "1rem",
|
|
30
|
+
border: "1px solid rgba(255, 255, 255, 0.08)",
|
|
31
|
+
background: "rgba(255, 255, 255, 0.06)",
|
|
32
|
+
color: "white",
|
|
33
|
+
padding: "0.95rem 1rem",
|
|
34
|
+
boxSizing: "border-box",
|
|
35
|
+
};
|
|
36
|
+
const actionButton = (background) => ({
|
|
37
|
+
borderRadius: "1rem",
|
|
38
|
+
border: 0,
|
|
39
|
+
padding: "0.95rem 1rem",
|
|
40
|
+
background,
|
|
41
|
+
color: "white",
|
|
42
|
+
fontWeight: 700,
|
|
43
|
+
cursor: "pointer",
|
|
44
|
+
});
|
|
45
|
+
const finishedStatuses = new Set(["ended", "declined", "cancelled", "missed", "failed"]);
|
|
46
|
+
const avatarText = (value) => value.slice(0, 2).toUpperCase() || "?";
|
|
47
|
+
const RemoteAudio = ({ stream }) => {
|
|
48
|
+
const ref = useRef(null);
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (ref.current) {
|
|
51
|
+
ref.current.srcObject = stream;
|
|
52
|
+
}
|
|
53
|
+
}, [stream]);
|
|
54
|
+
return _jsx("audio", { ref: ref, autoPlay: true, playsInline: true });
|
|
55
|
+
};
|
|
56
|
+
export const StreammyCallWidget = ({ defaultReceiverId = "", defaultCallType = "video", title = "Streamyy Calling", subtitle = "Drop this in for a ready-made calling experience, or keep the hook actions and replace the screens with your own design.", ringtones, renderIncomingCall, renderCallInterface, }) => {
|
|
57
|
+
const { activeCall, callStatus, connected, reconnecting, media, startAudioCall, startVideoCall, acceptCall, declineCall, cancelCall, endCall, toggleMute, toggleVideo, clearActiveCall, } = useStreammy();
|
|
28
58
|
const [receiverId, setReceiverId] = useState(defaultReceiverId);
|
|
29
|
-
const [
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
videoEnabled: defaultCallType === "video",
|
|
33
|
-
});
|
|
34
|
-
const isIncomingRinging = activeCall?.direction === "incoming" && (activeCall.status === "ringing" || activeCall.status === "initiated");
|
|
59
|
+
const [selectedType, setSelectedType] = useState(defaultCallType);
|
|
60
|
+
const isIncomingRinging = activeCall?.direction === "incoming" &&
|
|
61
|
+
(activeCall.status === "ringing" || activeCall.status === "initiated");
|
|
35
62
|
const isOutgoingRinging = activeCall?.direction === "outgoing" && (callStatus === "initiated" || callStatus === "ringing");
|
|
63
|
+
const isFinished = activeCall ? finishedStatuses.has(callStatus) : false;
|
|
36
64
|
useRingtone(Boolean(isIncomingRinging), ringtones?.incoming, "incoming");
|
|
37
65
|
useRingtone(Boolean(isOutgoingRinging), ringtones?.outgoing, "outgoing");
|
|
38
|
-
const canStartCall = receiverId.trim().length > 0 &&
|
|
39
|
-
(callStatus === "idle" ||
|
|
40
|
-
callStatus === "ended" ||
|
|
41
|
-
callStatus === "declined" ||
|
|
42
|
-
callStatus === "cancelled" ||
|
|
43
|
-
callStatus === "missed" ||
|
|
44
|
-
callStatus === "failed");
|
|
45
66
|
const liveLabel = useMemo(() => statusLabel[callStatus] ?? callStatus, [callStatus]);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
const startSelectedCall = async () => {
|
|
68
|
+
const target = receiverId.trim();
|
|
69
|
+
if (!target) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (selectedType === "audio") {
|
|
73
|
+
await startAudioCall(target, { startedFrom: "streamyy-default-ui" });
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
await startVideoCall(target, { startedFrom: "streamyy-default-ui" });
|
|
77
|
+
};
|
|
78
|
+
const endCurrentCall = async () => {
|
|
79
|
+
if (!activeCall) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (activeCall.direction === "outgoing" && (callStatus === "initiated" || callStatus === "ringing")) {
|
|
83
|
+
await cancelCall(activeCall.callId);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
await endCall(activeCall.callId);
|
|
87
|
+
};
|
|
88
|
+
const defaultIncomingUi = activeCall && isIncomingRinging ? (_jsx(IncomingCallCard, { call: activeCall, onAccept: () => {
|
|
89
|
+
void acceptCall(activeCall.callId);
|
|
90
|
+
}, onDecline: () => {
|
|
91
|
+
void declineCall(activeCall.callId);
|
|
92
|
+
} })) : null;
|
|
93
|
+
const callRendererProps = activeCall === null
|
|
94
|
+
? null
|
|
95
|
+
: {
|
|
96
|
+
activeCall,
|
|
97
|
+
callStatus,
|
|
98
|
+
connected,
|
|
99
|
+
reconnecting,
|
|
100
|
+
media,
|
|
101
|
+
clear: clearActiveCall,
|
|
102
|
+
cancel: async () => cancelCall(activeCall.callId),
|
|
103
|
+
end: async () => endCall(activeCall.callId),
|
|
104
|
+
toggleMute,
|
|
105
|
+
toggleVideo,
|
|
106
|
+
};
|
|
107
|
+
const audioFallbackLabel = activeCall?.direction === "incoming" ? activeCall.callerId : activeCall?.receiverId ?? "Remote";
|
|
108
|
+
return (_jsxs("section", { style: { ...shellStyle, padding: "1.35rem", display: "grid", gap: "1.2rem" }, children: [_jsxs("header", { style: { display: "flex", justifyContent: "space-between", gap: "1rem", alignItems: "start" }, children: [_jsxs("div", { style: { display: "grid", gap: "0.35rem" }, children: [_jsx("h2", { style: { margin: 0, fontSize: "1.5rem", fontWeight: 800 }, children: title }), _jsx("p", { style: { margin: 0, color: "rgba(226, 232, 240, 0.72)", lineHeight: 1.6 }, children: subtitle })] }), _jsx("span", { style: {
|
|
109
|
+
borderRadius: "999px",
|
|
110
|
+
padding: "0.45rem 0.8rem",
|
|
111
|
+
background: reconnecting
|
|
112
|
+
? "rgba(245, 158, 11, 0.16)"
|
|
113
|
+
: connected
|
|
114
|
+
? "rgba(34, 197, 94, 0.16)"
|
|
115
|
+
: "rgba(239, 68, 68, 0.18)",
|
|
116
|
+
color: reconnecting ? "#fcd34d" : connected ? "#86efac" : "#fca5a5",
|
|
117
|
+
fontSize: "0.88rem",
|
|
118
|
+
whiteSpace: "nowrap",
|
|
119
|
+
}, children: reconnecting ? "Reconnecting" : connected ? "Connected" : "Disconnected" })] }), !activeCall ? (_jsxs("section", { style: {
|
|
58
120
|
display: "grid",
|
|
59
121
|
gap: "1rem",
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
122
|
+
padding: "1.2rem",
|
|
123
|
+
borderRadius: "1.5rem",
|
|
124
|
+
background: "rgba(255, 255, 255, 0.04)",
|
|
125
|
+
border: "1px solid rgba(255, 255, 255, 0.06)",
|
|
126
|
+
}, children: [_jsxs("div", { style: { display: "grid", gap: "0.45rem" }, children: [_jsx("span", { style: { fontSize: "0.82rem", letterSpacing: "0.16em", textTransform: "uppercase", color: "#86efac" }, children: "Start a call" }), _jsx("strong", { style: { fontSize: "1.15rem" }, children: "Your app can also call `startAudioCall(...)` or `startVideoCall(...)` from its own buttons." })] }), _jsx("input", { value: receiverId, onChange: (event) => setReceiverId(event.target.value), placeholder: "receiver_user_id", style: fieldStyle }), _jsxs("div", { style: { display: "grid", gap: "0.8rem", gridTemplateColumns: "repeat(auto-fit, minmax(140px, 1fr))" }, children: [_jsx("button", { type: "button", onClick: () => {
|
|
127
|
+
setSelectedType("audio");
|
|
128
|
+
void startAudioCall(receiverId.trim(), { startedFrom: "streamyy-default-ui" });
|
|
129
|
+
}, style: actionButton(selectedType === "audio" ? "#1f8f5f" : "rgba(255, 255, 255, 0.08)"), children: "Audio call" }), _jsx("button", { type: "button", onClick: () => {
|
|
130
|
+
setSelectedType("video");
|
|
131
|
+
void startVideoCall(receiverId.trim(), { startedFrom: "streamyy-default-ui" });
|
|
132
|
+
}, style: actionButton(selectedType === "video" ? "#128c7e" : "rgba(255, 255, 255, 0.08)"), children: "Video call" })] }), _jsx("button", { type: "button", onClick: () => {
|
|
133
|
+
void startSelectedCall();
|
|
134
|
+
}, style: actionButton("linear-gradient(135deg, #25d366, #128c7e)"), children: "Start with selected type" })] })) : null, activeCall && isIncomingRinging
|
|
135
|
+
? renderIncomingCall
|
|
136
|
+
? renderIncomingCall({
|
|
137
|
+
call: activeCall,
|
|
138
|
+
connected,
|
|
139
|
+
reconnecting,
|
|
140
|
+
accept: async () => acceptCall(activeCall.callId),
|
|
141
|
+
decline: async (reason) => declineCall(activeCall.callId, reason),
|
|
142
|
+
})
|
|
143
|
+
: defaultIncomingUi
|
|
144
|
+
: null, activeCall && !isIncomingRinging
|
|
145
|
+
? renderCallInterface && callRendererProps
|
|
146
|
+
? renderCallInterface(callRendererProps)
|
|
147
|
+
: (_jsxs("section", { style: {
|
|
66
148
|
display: "grid",
|
|
67
|
-
gap: "
|
|
68
|
-
}, children: [_jsxs("div", { children: [_jsx("p", { style: { margin: 0, fontSize: "0.85rem", color: "rgba(125, 211, 252, 0.85)", textTransform: "uppercase", letterSpacing: "0.18em" }, children: "Start Call" }), _jsx("h3", { style: { margin: "0.45rem 0 0", fontSize: "1.1rem" }, children: "Launch the default widget" }), _jsx("p", { style: { margin: "0.45rem 0 0", color: "rgba(226, 232, 240, 0.72)", lineHeight: 1.6 }, children: "Calls ring for up to 60 seconds. If nobody picks, the session automatically ends as missed to keep the flow light." })] }), _jsxs("label", { style: { display: "grid", gap: "0.45rem" }, children: [_jsx("span", { style: { fontSize: "0.92rem", color: "rgba(226, 232, 240, 0.82)" }, children: "Receiver ID" }), _jsx("input", { value: receiverId, onChange: (event) => setReceiverId(event.target.value), placeholder: "user_456", style: {
|
|
69
|
-
borderRadius: "14px",
|
|
70
|
-
border: "1px solid rgba(148, 163, 184, 0.18)",
|
|
71
|
-
background: "rgba(15, 23, 42, 0.65)",
|
|
72
|
-
color: "white",
|
|
73
|
-
padding: "0.85rem 0.9rem",
|
|
74
|
-
} })] }), _jsxs("div", { style: { display: "flex", gap: "0.75rem" }, children: [_jsx("button", { type: "button", onClick: () => setCallType("audio"), style: {
|
|
75
|
-
flex: 1,
|
|
76
|
-
borderRadius: "14px",
|
|
77
|
-
border: 0,
|
|
78
|
-
padding: "0.8rem 1rem",
|
|
79
|
-
background: callType === "audio" ? "#0ea5e9" : "rgba(30, 41, 59, 0.85)",
|
|
80
|
-
color: "white",
|
|
81
|
-
}, children: "Audio" }), _jsx("button", { type: "button", onClick: () => setCallType("video"), style: {
|
|
82
|
-
flex: 1,
|
|
83
|
-
borderRadius: "14px",
|
|
84
|
-
border: 0,
|
|
85
|
-
padding: "0.8rem 1rem",
|
|
86
|
-
background: callType === "video" ? "#0ea5e9" : "rgba(30, 41, 59, 0.85)",
|
|
87
|
-
color: "white",
|
|
88
|
-
}, children: "Video" })] }), _jsxs("button", { type: "button", disabled: !canStartCall, onClick: () => initiateCall(receiverId.trim(), callType, { startedFrom: "streamyy-default-ui" }), style: {
|
|
89
|
-
borderRadius: "16px",
|
|
90
|
-
border: 0,
|
|
91
|
-
padding: "0.95rem 1rem",
|
|
92
|
-
background: canStartCall ? "linear-gradient(135deg, #0ea5e9, #2563eb)" : "rgba(71, 85, 105, 0.6)",
|
|
93
|
-
color: "white",
|
|
94
|
-
fontWeight: 700,
|
|
95
|
-
cursor: canStartCall ? "pointer" : "not-allowed",
|
|
96
|
-
}, children: ["Start ", callType, " call"] })] }), _jsxs("article", { style: {
|
|
149
|
+
gap: "1rem",
|
|
97
150
|
padding: "1rem",
|
|
98
|
-
borderRadius: "
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
151
|
+
borderRadius: "1.6rem",
|
|
152
|
+
background: "rgba(255, 255, 255, 0.04)",
|
|
153
|
+
border: "1px solid rgba(255, 255, 255, 0.06)",
|
|
154
|
+
}, children: [_jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: "1rem" }, children: [_jsxs("div", { style: { display: "flex", gap: "0.9rem", alignItems: "center" }, children: [_jsx("div", { style: {
|
|
155
|
+
width: "3.5rem",
|
|
156
|
+
height: "3.5rem",
|
|
157
|
+
borderRadius: "999px",
|
|
158
|
+
display: "grid",
|
|
159
|
+
placeItems: "center",
|
|
160
|
+
background: "rgba(37, 211, 102, 0.18)",
|
|
161
|
+
color: "#dcfce7",
|
|
162
|
+
fontWeight: 800,
|
|
163
|
+
}, children: avatarText(audioFallbackLabel) }), _jsxs("div", { style: { display: "grid", gap: "0.2rem" }, children: [_jsx("strong", { style: { fontSize: "1.05rem" }, children: audioFallbackLabel }), _jsxs("span", { style: { color: "rgba(226, 232, 240, 0.72)" }, children: [activeCall.callType, " call \u2022 ", liveLabel] })] })] }), isFinished ? (_jsx("button", { type: "button", onClick: clearActiveCall, style: {
|
|
164
|
+
...actionButton("rgba(255, 255, 255, 0.08)"),
|
|
165
|
+
padding: "0.7rem 0.9rem",
|
|
166
|
+
}, children: "Clear" })) : null] }), activeCall.callType === "video" ? (_jsx(VideoStage, { localStream: media.localStream, remoteStream: media.remoteStream, localLabel: "You", remoteLabel: audioFallbackLabel, localMirrored: true })) : (_jsx("section", { style: {
|
|
167
|
+
minHeight: "18rem",
|
|
168
|
+
borderRadius: "1.6rem",
|
|
169
|
+
background: "radial-gradient(circle at top, rgba(37, 211, 102, 0.18), transparent 32%), linear-gradient(180deg, rgba(17, 24, 39, 0.96), rgba(2, 6, 23, 0.96))",
|
|
170
|
+
display: "grid",
|
|
171
|
+
placeItems: "center",
|
|
172
|
+
textAlign: "center",
|
|
173
|
+
padding: "1.5rem",
|
|
174
|
+
}, children: _jsxs("div", { style: { display: "grid", gap: "1rem", placeItems: "center" }, children: [_jsx("div", { style: {
|
|
175
|
+
width: "6.5rem",
|
|
176
|
+
height: "6.5rem",
|
|
177
|
+
borderRadius: "999px",
|
|
178
|
+
display: "grid",
|
|
179
|
+
placeItems: "center",
|
|
180
|
+
background: "rgba(37, 211, 102, 0.16)",
|
|
181
|
+
border: "1px solid rgba(74, 222, 128, 0.18)",
|
|
182
|
+
fontSize: "2rem",
|
|
183
|
+
fontWeight: 800,
|
|
184
|
+
color: "#dcfce7",
|
|
185
|
+
}, children: avatarText(audioFallbackLabel) }), _jsxs("div", { style: { display: "grid", gap: "0.35rem" }, children: [_jsx("strong", { style: { fontSize: "1.35rem" }, children: audioFallbackLabel }), _jsx("span", { style: { color: "rgba(226, 232, 240, 0.72)" }, children: liveLabel })] })] }) })), _jsx(CallControls, { state: {
|
|
186
|
+
muted: media.muted,
|
|
187
|
+
videoEnabled: media.videoEnabled,
|
|
188
|
+
}, showVideoToggle: activeCall.callType === "video" && media.hasLocalVideo, onToggleMute: () => toggleMute(), onToggleVideo: () => toggleVideo(), onHangup: () => {
|
|
189
|
+
void endCurrentCall();
|
|
190
|
+
} })] }))
|
|
191
|
+
: null, media.remoteStream ? _jsx(RemoteAudio, { stream: media.remoteStream }) : null] }));
|
|
138
192
|
};
|
|
139
193
|
//# sourceMappingURL=StreammyCallWidget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreammyCallWidget.js","sourceRoot":"","sources":["../../src/components/StreammyCallWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAsB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StreammyCallWidget.js","sourceRoot":"","sources":["../../src/components/StreammyCallWidget.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { type PropsWithChildren } from "react";
|
|
2
2
|
import type { CallStatus, CallType } from "@streamyy/core";
|
|
3
3
|
import { type StreammyClient } from "../client.js";
|
|
4
|
-
import type { StreammyActiveCall, StreammyClientOptions } from "../types.js";
|
|
4
|
+
import type { StreammyActiveCall, StreammyCallMediaState, StreammyClientOptions } from "../types.js";
|
|
5
5
|
interface StreammyContextValue {
|
|
6
6
|
client: StreammyClient;
|
|
7
7
|
activeCall: StreammyActiveCall | null;
|
|
8
8
|
callStatus: CallStatus | "idle";
|
|
9
9
|
connected: boolean;
|
|
10
10
|
reconnecting: boolean;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
media: StreammyCallMediaState;
|
|
12
|
+
initiateCall(receiverId: string, callType: CallType, metadata?: Record<string, unknown>): Promise<void>;
|
|
13
|
+
startAudioCall(receiverId: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
14
|
+
startVideoCall(receiverId: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
15
|
+
acceptCall(callId?: string): Promise<void>;
|
|
16
|
+
declineCall(callId?: string, reason?: string): Promise<void>;
|
|
17
|
+
cancelCall(callId?: string): Promise<void>;
|
|
18
|
+
endCall(callId?: string): Promise<void>;
|
|
19
|
+
toggleMute(nextMuted?: boolean): void;
|
|
20
|
+
toggleVideo(nextEnabled?: boolean): void;
|
|
16
21
|
clearActiveCall(): void;
|
|
17
22
|
}
|
|
18
23
|
export declare const StreammyProvider: ({ options, children, }: PropsWithChildren<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStreammy.d.ts","sourceRoot":"","sources":["../../src/hooks/useStreammy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"useStreammy.d.ts","sourceRoot":"","sources":["../../src/hooks/useStreammy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAIrB,UAAU,oBAAoB;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACtC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,sBAAsB,CAAC;IAC9B,YAAY,CACV,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtF,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,WAAW,CAAC,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzC,eAAe,IAAI,IAAI,CAAC;CACzB;AAgBD,eAAO,MAAM,gBAAgB,GAAI,wBAG9B,iBAAiB,CAAC;IAAE,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAAC,QAghBvD,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,oBAO9B,CAAC"}
|