@appsocom/react 0.0.0-stage → 0.5.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.
@@ -0,0 +1,521 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * Ready-made web UI for sfukit: video grid, participant tiles, control bar,
4
+ * device pickers, prejoin screen and an all-in-one <VideoConference>.
5
+ * Styles: import "@appsocom/react/styles.css" (theme with CSS variables), or
6
+ * style the `sfk-*` classes yourself.
7
+ */
8
+ import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
9
+ import { applyAudioEffect, applyVideoEffect, attachTrack, isBackgroundEffectSupported, isNoiseSuppressionSupported, joinRoom, } from "@appsocom/client";
10
+ import { RoomProvider, initials, useActiveSpeakers, useAudioFallback, useChat, useConnectionQuality, useConnectionState, useDataSaver, useDataUsage, useEffects, useIsSpeaking, useJoin, useLocalParticipant, useLocalTrack, useMaybeRoom, useMediaConnectionState, useParticipants, useRaisedHands, useRoom, useRoomState, useTrack, } from "./hooks.js";
11
+ const cx = (...c) => c.filter(Boolean).join(" ");
12
+ // ---------------------------------------------------------------- icons
13
+ const paths = {
14
+ mic: "M12 14a3 3 0 0 0 3-3V5a3 3 0 1 0-6 0v6a3 3 0 0 0 3 3Zm5-3a5 5 0 0 1-10 0H5a7 7 0 0 0 6 6.92V21h2v-3.08A7 7 0 0 0 19 11h-2Z",
15
+ micOff: "M19 11h-2a5 5 0 0 1-.6 2.4l1.5 1.5A7 7 0 0 0 19 11ZM15 11V5a3 3 0 0 0-5.9-.8L15 10.1V11ZM4.3 3 3 4.3l6 6V11a3 3 0 0 0 4.5 2.6l1.6 1.6A5 5 0 0 1 7 11H5a7 7 0 0 0 6 6.9V21h2v-3.1a7 7 0 0 0 3.6-1.5l3.1 3.1 1.3-1.3L4.3 3Z",
16
+ cam: "M17 10.5V7a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-3.5l4 4v-11l-4 4Z",
17
+ camOff: "M21 6.5l-4 4V7a1 1 0 0 0-1-1H9.8L21 17.2V6.5ZM3.3 2 2 3.3 4.7 6H4a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12c.2 0 .4-.1.5-.2l3.2 3.2 1.3-1.3L3.3 2Z",
18
+ screen: "M20 18a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2H0v2h24v-2h-4ZM4 6h16v10H4V6Z",
19
+ leave: "M12 9c-1.6 0-3.1.3-4.6.7v3.1c0 .4-.2.7-.6.9-1 .5-1.9 1.1-2.7 1.8-.2.2-.4.3-.7.3s-.5-.1-.7-.3L.3 13.1A1 1 0 0 1 0 12.4c0-.3.1-.5.3-.7A16.9 16.9 0 0 1 12 7c4.5 0 8.6 1.8 11.7 4.7.2.2.3.4.3.7 0 .3-.1.5-.3.7l-2.5 2.4c-.2.2-.4.3-.7.3s-.5-.1-.7-.3c-.8-.7-1.7-1.3-2.7-1.8-.3-.2-.6-.5-.6-.9V9.7C15.1 9.3 13.6 9 12 9Z",
20
+ blur: "M6 13a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0 4a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0-8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-3 .5a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1ZM6 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm15 5.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1ZM14 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0-3.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1ZM3 13.5a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm7 7a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm0-17a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1ZM10 7a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm0 5.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm8 .5a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0 4a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0-8a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0-4a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm3 8.5a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1ZM14 17a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm0 3.5a.5.5 0 1 0 0 1 .5.5 0 0 0 0-1Zm-4-12a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm0 8.5a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm4-4.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm0-4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Z",
21
+ noise: "M7 18h2V6H7v12Zm4 4h2V2h-2v20Zm-8-8h2v-4H3v4Zm12 4h2V6h-2v12Zm4-8v4h2v-4h-2Z",
22
+ hand: "M21 7a2 2 0 0 0-3 0V4a2 2 0 0 0-3.5-1.3A2 2 0 0 0 11 3v.3A2 2 0 0 0 8 5v8.6l-1.4-1.4a2 2 0 0 0-2.8 2.8l4.5 4.5A8 8 0 0 0 22 13V7a2 2 0 0 0-1-0Z",
23
+ settings: "M19.4 13a7.6 7.6 0 0 0 0-2l2.1-1.6-2-3.5-2.5 1a7.4 7.4 0 0 0-1.7-1L15 3h-4l-.4 2.7a7.4 7.4 0 0 0-1.7 1l-2.5-1-2 3.5L6.6 11a7.6 7.6 0 0 0 0 2l-2.1 1.6 2 3.5 2.5-1c.5.4 1.1.7 1.7 1L11 21h4l.4-2.7c.6-.3 1.2-.6 1.7-1l2.5 1 2-3.5-2.2-1.8ZM13 15.5a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Z",
24
+ chat: "M20 2H4a2 2 0 0 0-2 2v18l4-4h14a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2Z",
25
+ };
26
+ export function Icon({ name, size = 20 }) {
27
+ return (_jsx("svg", { className: "sfk-icon", width: size, height: size, viewBox: "0 0 24 24", "aria-hidden": "true", fill: "currentColor", children: _jsx("path", { d: paths[name] ?? "" }) }));
28
+ }
29
+ // ---------------------------------------------------------------- media
30
+ /** A <video> showing one track. Muted by default (audio is played by the room). */
31
+ export function VideoTrack({ track, mirror = false, fit = "cover", className, style, }) {
32
+ const ref = useRef(null);
33
+ useEffect(() => {
34
+ if (ref.current)
35
+ attachTrack(ref.current, track ?? null);
36
+ }, [track]);
37
+ return (_jsx("video", { ref: ref, className: cx("sfk-video", mirror && "sfk-mirror", className), style: { objectFit: fit, ...style }, muted: true, autoPlay: true, playsInline: true }));
38
+ }
39
+ /** Live audio level of a track, 0..1 (for mic meters). */
40
+ export function useAudioLevel(track) {
41
+ const [level, setLevel] = useState(0);
42
+ useEffect(() => {
43
+ if (!track || typeof AudioContext === "undefined")
44
+ return;
45
+ const ctx = new AudioContext();
46
+ const src = ctx.createMediaStreamSource(new MediaStream([track]));
47
+ const an = ctx.createAnalyser();
48
+ an.fftSize = 512;
49
+ src.connect(an);
50
+ const buf = new Float32Array(an.fftSize);
51
+ const timer = setInterval(() => {
52
+ an.getFloatTimeDomainData(buf);
53
+ let sum = 0;
54
+ for (const v of buf)
55
+ sum += v * v;
56
+ setLevel(Math.min(1, Math.sqrt(sum / buf.length) * 4));
57
+ }, 100);
58
+ return () => {
59
+ clearInterval(timer);
60
+ src.disconnect();
61
+ void ctx.close().catch(() => { });
62
+ };
63
+ }, [track]);
64
+ return level;
65
+ }
66
+ /** Cameras, mics or speakers, kept up to date as devices are plugged in. */
67
+ export function useMediaDevices(kind) {
68
+ const [devices, setDevices] = useState([]);
69
+ useEffect(() => {
70
+ const md = typeof navigator !== "undefined" ? navigator.mediaDevices : undefined;
71
+ if (!md?.enumerateDevices)
72
+ return;
73
+ let alive = true;
74
+ const load = () => md.enumerateDevices().then((all) => alive && setDevices(all.filter((d) => d.kind === kind && d.deviceId)));
75
+ void load();
76
+ md.addEventListener?.("devicechange", load);
77
+ return () => {
78
+ alive = false;
79
+ md.removeEventListener?.("devicechange", load);
80
+ };
81
+ }, [kind]);
82
+ return devices;
83
+ }
84
+ // ---------------------------------------------------------------- tiles
85
+ function QualityBars({ quality }) {
86
+ if (!quality)
87
+ return null;
88
+ const n = { excellent: 3, good: 2, poor: 1, lost: 0 }[quality];
89
+ return (_jsx("span", { className: cx("sfk-quality", `sfk-quality-${quality}`), title: `Connection: ${quality}`, "data-quality": quality, children: [1, 2, 3].map((i) => (_jsx("i", { className: i <= n ? "on" : "" }, i))) }));
90
+ }
91
+ /** One participant: video (or initials), name, mic state, speaking ring, quality, role, hand. */
92
+ export function ParticipantTile({ participant, local = !participant, source = "camera", moderation = true, subscribeWhenVisible = true, className, children, }) {
93
+ const room = useRoom();
94
+ const me = useLocalParticipant();
95
+ const p = local ? me.self : participant;
96
+ const id = p?.id;
97
+ const remoteTrack = useTrack(local ? undefined : id, source === "screen" ? "screenVideo" : "video");
98
+ const localTrack = useLocalTrack(source === "screen" ? "screenVideo" : "video");
99
+ const track = local ? localTrack : remoteTrack;
100
+ const state = local ? me.state : p?.state;
101
+ const audioOnly = source === "camera" && !!state?.audioOnly;
102
+ const videoOn = source === "screen" ? !!track : !!state?.cameraOn && !state?.videoPaused && !audioOnly;
103
+ const speaking = useIsSpeaking(id);
104
+ const quality = useConnectionQuality(id);
105
+ const hands = useRaisedHands();
106
+ const handUp = !!p && hands.some((h) => h.userId === p.userId);
107
+ const ref = useRef(null);
108
+ // Adaptive video: match the received size to the tile, and stop video for off-screen tiles.
109
+ useEffect(() => {
110
+ if (local || !id || !ref.current || source !== "camera")
111
+ return;
112
+ const offs = [];
113
+ if (room.fitVideoQuality)
114
+ offs.push(room.fitVideoQuality(id, ref.current));
115
+ if (subscribeWhenVisible && room.observeVisibility)
116
+ offs.push(room.observeVisibility(ref.current, id));
117
+ return () => offs.forEach((f) => f());
118
+ }, [room, id, local, source, subscribeWhenVisible]);
119
+ if (!p)
120
+ return null;
121
+ const name = local ? `${p.name || "You"} (you)` : p.name || p.userId;
122
+ const agentState = p.agent?.state;
123
+ return (_jsxs("div", { ref: ref, className: cx("sfk-tile", speaking && "sfk-speaking", source === "screen" && "sfk-tile-screen", className), "data-participant-id": p.id, "data-user-id": p.userId, "data-source": source, "data-local": local ? "true" : undefined, "data-speaking": speaking ? "true" : undefined, children: [videoOn && track ? (_jsx(VideoTrack, { track: track, mirror: local && source === "camera", fit: source === "screen" ? "contain" : "cover" })) : (_jsx("div", { className: "sfk-avatar", "aria-hidden": "true", children: _jsx("span", { children: initials(p.name || p.userId) }) })), _jsxs("div", { className: "sfk-tile-bar", children: [source === "camera" && !state?.micOn && (_jsx("span", { className: "sfk-muted", title: "Muted", "data-muted": "true", children: _jsx(Icon, { name: "micOff", size: 14 }) })), handUp && _jsx("span", { className: "sfk-hand", title: "Hand raised", children: "\u270B" }), _jsx("span", { className: "sfk-name", children: source === "screen" ? `${name}: screen` : name }), p.role && !["participant", "viewer"].includes(p.role) && _jsx("span", { className: "sfk-role", children: p.role }), agentState && _jsx("span", { className: "sfk-role", children: agentState }), audioOnly && (_jsx("span", { className: "sfk-role", "data-audio-only": state?.audioFallback ? "fallback" : "chosen", title: state?.audioFallback ? "Weak connection: audio only for now" : "Audio only", children: state?.audioFallback ? "weak network" : "audio only" })), _jsx(QualityBars, { quality: quality })] }), !local && moderation && source === "camera" && _jsx(ModerationMenu, { participant: p }), children] }));
124
+ }
125
+ function ModerationMenu({ participant }) {
126
+ const room = useRoom();
127
+ const { permissions } = useLocalParticipant();
128
+ const [open, setOpen] = useState(false);
129
+ if (!permissions.moderate)
130
+ return null;
131
+ const act = (fn) => () => {
132
+ try {
133
+ fn();
134
+ }
135
+ finally {
136
+ setOpen(false);
137
+ }
138
+ };
139
+ const p = participant;
140
+ return (_jsxs("div", { className: "sfk-mod", children: [_jsx("button", { className: "sfk-mod-btn", "aria-label": `Manage ${p.name}`, onClick: () => setOpen((o) => !o), children: "\u22EF" }), open && (_jsxs("div", { className: "sfk-menu", role: "menu", children: [room.mute && p.state.micOn && (_jsx("button", { role: "menuitem", onClick: act(() => room.mute(p.userId, ["mic"])), children: "Mute" })), room.mute && p.state.cameraOn && (_jsx("button", { role: "menuitem", onClick: act(() => room.mute(p.userId, ["camera"])), children: "Stop camera" })), room.setPermissions && (_jsx("button", { role: "menuitem", onClick: act(() => room.setPermissions(p.userId, { screen: !p.permissions.screen })), children: p.permissions.screen ? "Stop presenting rights" : "Let present" })), room.lowerHand && (_jsx("button", { role: "menuitem", onClick: act(() => room.lowerHand(p.userId)), children: "Lower hand" })), room.remove && (_jsx("button", { role: "menuitem", className: "sfk-danger", onClick: act(() => room.remove(p.userId)), children: "Remove" }))] }))] }));
141
+ }
142
+ /** Everyone's video, laid out to fit. Screen shares and spotlighted people get the big spot. */
143
+ export function VideoGrid({ layout = "auto", includeLocal = true, subscribeWhenVisible = true, className }) {
144
+ const room = useRoom();
145
+ const participants = useParticipants();
146
+ const { self, state } = useLocalParticipant();
147
+ const speakers = useActiveSpeakers();
148
+ const roomState = useRoomState();
149
+ const spotlight = roomState?.spotlight ?? [];
150
+ const cameras = [
151
+ ...(includeLocal && self ? [{ key: "local", local: true, source: "camera" }] : []),
152
+ ...participants
153
+ .filter((p) => p.kind !== "bot")
154
+ .map((p) => ({ key: p.id, p, local: false, source: "camera" })),
155
+ ];
156
+ const screens = [
157
+ ...(state.screenOn ? [{ key: "local-screen", local: true, source: "screen" }] : []),
158
+ ...participants.filter((p) => p.state.screenOn).map((p) => ({ key: `${p.id}-screen`, p, local: false, source: "screen" })),
159
+ ];
160
+ let main = [];
161
+ if (layout !== "grid") {
162
+ if (screens.length)
163
+ main = screens.slice(0, 1);
164
+ else if (spotlight.length) {
165
+ main = cameras.filter((c) => spotlight.includes(c.local ? room.userId : c.p.userId));
166
+ }
167
+ else if (layout === "speaker" && cameras.length > 1) {
168
+ const top = speakers.find((id) => id !== self?.id) ?? cameras.find((c) => !c.local)?.p?.id;
169
+ main = cameras.filter((c) => !c.local && c.p?.id === top);
170
+ }
171
+ }
172
+ const mainKeys = new Set(main.map((m) => m.key));
173
+ const rest = [...cameras, ...screens].filter((c) => !mainKeys.has(c.key));
174
+ const tile = (it) => (_jsx(ParticipantTile, { participant: it.p, local: it.local, source: it.source, subscribeWhenVisible: subscribeWhenVisible }, it.key));
175
+ if (!main.length) {
176
+ const cols = Math.ceil(Math.sqrt(rest.length || 1));
177
+ return (_jsx("div", { className: cx("sfk-grid", className), style: { "--sfk-cols": cols }, "data-layout": "grid", children: rest.map(tile) }));
178
+ }
179
+ return (_jsxs("div", { className: cx("sfk-grid sfk-grid-focus", className), "data-layout": "focus", children: [_jsx("div", { className: "sfk-focus", style: { "--sfk-cols": Math.ceil(Math.sqrt(main.length)) }, children: main.map(tile) }), rest.length > 0 && _jsx("div", { className: "sfk-strip", children: rest.map(tile) })] }));
180
+ }
181
+ // ---------------------------------------------------------------- devices
182
+ /**
183
+ * A <select> of cameras, mics or speakers. Inside a room, picking one switches
184
+ * the room's device; outside (prejoin), pass value/onChange.
185
+ */
186
+ export function DeviceSelect({ kind, value, onChange, label, className, }) {
187
+ const room = useMaybeRoom();
188
+ const devices = useMediaDevices(kind);
189
+ const [selected, setSelected] = useState(value ?? "");
190
+ useEffect(() => {
191
+ if (value !== undefined)
192
+ setSelected(value);
193
+ }, [value]);
194
+ if (kind === "audiooutput" && typeof HTMLMediaElement !== "undefined" && !("setSinkId" in HTMLMediaElement.prototype)) {
195
+ return null; // can't choose speakers in this browser
196
+ }
197
+ const text = label ?? { audioinput: "Microphone", videoinput: "Camera", audiooutput: "Speaker" }[kind];
198
+ return (_jsxs("label", { className: cx("sfk-device", className), children: [_jsx("span", { children: text }), _jsxs("select", { value: selected, "data-kind": kind, onChange: (e) => {
199
+ const id = e.target.value;
200
+ const device = devices.find((d) => d.deviceId === id);
201
+ setSelected(id);
202
+ if (onChange)
203
+ onChange(id, device);
204
+ else if (room && device) {
205
+ if (kind === "audioinput")
206
+ room.setMicDevice?.(device);
207
+ else if (kind === "videoinput")
208
+ room.setCameraDevice?.(device);
209
+ else
210
+ room.setAudioOutputDevice?.(id);
211
+ }
212
+ }, children: [!selected && _jsx("option", { value: "", children: "Default" }), devices.map((d, i) => (_jsx("option", { value: d.deviceId, children: d.label || `${text} ${i + 1}` }, d.deviceId)))] })] }));
213
+ }
214
+ /** Mic, camera, screen share, blur, noise suppression, devices, raise hand, leave. */
215
+ export function ControlBar({ controls = {}, onLeave, onToggleChat, className, children }) {
216
+ const room = useRoom();
217
+ const { state, permissions, self } = useLocalParticipant();
218
+ const fx = useEffects();
219
+ const hands = useRaisedHands();
220
+ const [devicesOpen, setDevicesOpen] = useState(false);
221
+ const show = (k) => controls[k] !== false;
222
+ const handUp = !!self && hands.some((h) => h.userId === self.userId);
223
+ const canBlur = fx.supported && isBackgroundEffectSupported();
224
+ const canNs = fx.supported && isNoiseSuppressionSupported();
225
+ return (_jsxs("div", { className: cx("sfk-controls", className), role: "toolbar", "aria-label": "Call controls", children: [show("mic") && permissions.mic && (_jsx("button", { className: cx("sfk-btn", !state.micOn && "sfk-off"), "aria-pressed": state.micOn, "aria-label": state.micOn ? "Mute microphone" : "Unmute microphone", "data-control": "mic", onClick: () => room.toggleMic(), children: _jsx(Icon, { name: state.micOn ? "mic" : "micOff" }) })), show("camera") && permissions.camera && (_jsx("button", { className: cx("sfk-btn", !state.cameraOn && "sfk-off"), "aria-pressed": state.cameraOn, "aria-label": state.cameraOn ? "Turn camera off" : "Turn camera on", "data-control": "camera", onClick: () => room.toggleCamera(), children: _jsx(Icon, { name: state.cameraOn ? "cam" : "camOff" }) })), show("screen") && permissions.screen && room.toggleScreenShare && typeof navigator !== "undefined" && !!navigator.mediaDevices?.getDisplayMedia && (_jsx("button", { className: cx("sfk-btn", state.screenOn && "sfk-active"), "aria-pressed": state.screenOn, "aria-label": state.screenOn ? "Stop sharing screen" : "Share screen", "data-control": "screen", onClick: () => room.toggleScreenShare(), children: _jsx(Icon, { name: "screen" }) })), show("blur") && permissions.camera && canBlur && (_jsx("button", { className: cx("sfk-btn", fx.backgroundBlur && "sfk-active"), "aria-pressed": fx.backgroundBlur, "aria-label": fx.backgroundBlur ? "Turn background blur off" : "Blur background", "data-control": "blur", onClick: () => fx.setBackgroundBlur(!fx.backgroundBlur), children: _jsx(Icon, { name: "blur" }) })), show("noise") && permissions.mic && canNs && (_jsx("button", { className: cx("sfk-btn", fx.noiseSuppression && "sfk-active"), "aria-pressed": fx.noiseSuppression, "aria-label": fx.noiseSuppression ? "Turn noise suppression off" : "Suppress background noise", "data-control": "noise", onClick: () => fx.setNoiseSuppression(!fx.noiseSuppression), children: _jsx(Icon, { name: "noise" }) })), show("hand") && room.raiseHand && !permissions.moderate && (_jsx("button", { className: cx("sfk-btn", handUp && "sfk-active"), "aria-pressed": handUp, "aria-label": handUp ? "Lower hand" : "Raise hand", "data-control": "hand", onClick: () => (handUp ? room.lowerHand?.() : room.raiseHand?.()), children: _jsx(Icon, { name: "hand" }) })), show("chat") && onToggleChat && (_jsx("button", { className: "sfk-btn", "aria-label": "Chat", "data-control": "chat", onClick: onToggleChat, children: _jsx(Icon, { name: "chat" }) })), show("devices") && (_jsxs("div", { className: "sfk-devices-wrap", children: [_jsx("button", { className: cx("sfk-btn", devicesOpen && "sfk-active"), "aria-expanded": devicesOpen, "aria-label": "Devices", "data-control": "devices", onClick: () => setDevicesOpen((o) => !o), children: _jsx(Icon, { name: "settings" }) }), devicesOpen && (_jsxs("div", { className: "sfk-popover", children: [permissions.mic && _jsx(DeviceSelect, { kind: "audioinput" }), permissions.camera && _jsx(DeviceSelect, { kind: "videoinput" }), _jsx(DeviceSelect, { kind: "audiooutput" }), _jsx(DataSaverSelect, {})] }))] })), children, show("leave") && (_jsx("button", { className: "sfk-btn sfk-leave", "aria-label": "Leave call", "data-control": "leave", onClick: () => {
226
+ room.leave("left");
227
+ onLeave?.();
228
+ }, children: _jsx(Icon, { name: "leave" }) }))] }));
229
+ }
230
+ const DATA_SAVER_LABELS = {
231
+ off: "Off (best quality)",
232
+ low: "Low: 360p, speaker video only",
233
+ minimal: "Minimal: 180p, speaker video only",
234
+ audio: "Audio only",
235
+ };
236
+ /** Data-saver picker (rendered inside the ControlBar's devices popover too). */
237
+ export function DataSaverSelect({ label = "Data saver", className }) {
238
+ const { supported, mode, setDataSaver } = useDataSaver();
239
+ if (!supported)
240
+ return null;
241
+ return (_jsxs("label", { className: cx("sfk-device", className), children: [_jsx("span", { children: label }), _jsx("select", { value: mode === "custom" ? "low" : mode, "data-control": "data-saver", onChange: (e) => setDataSaver(e.target.value), children: Object.keys(DATA_SAVER_LABELS).map((m) => (_jsx("option", { value: m, children: DATA_SAVER_LABELS[m] }, m))) })] }));
242
+ }
243
+ /** "12.4 MB used · about 85 MB per hour". Renders nothing until there's a reading. */
244
+ export function DataUsageMeter({ className }) {
245
+ const usage = useDataUsage();
246
+ if (!usage || !usage.totalBytes)
247
+ return null;
248
+ const mb = usage.totalBytes / 1e6;
249
+ return (_jsxs("span", { className: cx("sfk-data-usage", className), "data-total-bytes": usage.totalBytes, title: `Up ${(usage.sentBytes / 1e6).toFixed(1)} MB, down ${(usage.receivedBytes / 1e6).toFixed(1)} MB`, children: [mb < 10 ? mb.toFixed(1) : Math.round(mb), " MB used", usage.mbPerHour ? ` · about ${Math.round(usage.mbPerHour)} MB per hour` : ""] }));
250
+ }
251
+ /** "Reconnecting…" banner while the room or media connection is down, or a note while on audio fallback. */
252
+ export function ConnectionBanner() {
253
+ const state = useConnectionState();
254
+ const media = useMediaConnectionState();
255
+ const fallback = useAudioFallback();
256
+ const msg = state === "reconnecting"
257
+ ? "Reconnecting…"
258
+ : media === "disconnected" || media === "failed"
259
+ ? "Media connection lost, reconnecting…"
260
+ : fallback
261
+ ? "Weak connection: switched to audio only. Video comes back when it improves."
262
+ : null;
263
+ if (!msg)
264
+ return null;
265
+ return (_jsx("div", { className: "sfk-banner", role: "status", "data-state": state, children: msg }));
266
+ }
267
+ /** Simple chat panel (room.chat / room.sendChat). */
268
+ export function ChatPanel({ className }) {
269
+ const { messages, send, enabled } = useChat();
270
+ const { permissions } = useLocalParticipant();
271
+ const [text, setText] = useState("");
272
+ const listRef = useRef(null);
273
+ useEffect(() => {
274
+ listRef.current?.scrollTo({ top: listRef.current.scrollHeight });
275
+ }, [messages.length]);
276
+ const canSend = enabled || permissions.moderate;
277
+ return (_jsxs("div", { className: cx("sfk-chat", className), children: [_jsx("div", { className: "sfk-chat-list", ref: listRef, children: messages.map((m) => (_jsxs("div", { className: "sfk-chat-msg", children: [_jsx("b", { children: m.fromName }), " ", m.to && _jsx("em", { children: "(private)" }), " ", _jsx("span", { children: m.text })] }, m.id))) }), _jsx("form", { className: "sfk-chat-form", onSubmit: (e) => {
278
+ e.preventDefault();
279
+ if (!text.trim())
280
+ return;
281
+ send(text.trim());
282
+ setText("");
283
+ }, children: _jsx("input", { value: text, disabled: !canSend, placeholder: canSend ? "Message everyone" : "Chat is turned off", onChange: (e) => setText(e.target.value) }) })] }));
284
+ }
285
+ /** Camera preview, mic level, device pickers and on/off toggles before joining. */
286
+ export function PreJoin({ onSubmit, askName = false, defaults = {}, joinLabel = "Join", showEffects = true, className }) {
287
+ const [c, setC] = useState({
288
+ name: "",
289
+ audio: true,
290
+ video: true,
291
+ backgroundBlur: false,
292
+ noiseSuppression: false,
293
+ ...defaults,
294
+ });
295
+ const set = (k, v) => setC((prev) => ({ ...prev, [k]: v }));
296
+ const [camTrack, setCamTrack] = useState(null);
297
+ const [preview, setPreview] = useState(null);
298
+ const [micTrack, setMicTrack] = useState(null);
299
+ const [error, setError] = useState(null);
300
+ const level = useAudioLevel(c.audio ? micTrack : null);
301
+ // Camera preview.
302
+ useEffect(() => {
303
+ if (!c.video)
304
+ return setCamTrack(null);
305
+ let t = null;
306
+ let alive = true;
307
+ navigator.mediaDevices
308
+ .getUserMedia({ video: c.videoDeviceId ? { deviceId: { exact: c.videoDeviceId } } : true })
309
+ .then((s) => {
310
+ t = s.getVideoTracks()[0] ?? null;
311
+ if (!alive)
312
+ return t?.stop();
313
+ setCamTrack(t);
314
+ setError(null);
315
+ })
316
+ .catch((e) => alive && setError(`Camera: ${e.message || e.name}`));
317
+ return () => {
318
+ alive = false;
319
+ t?.stop();
320
+ };
321
+ }, [c.video, c.videoDeviceId]);
322
+ // Blur preview on top of the camera.
323
+ useEffect(() => {
324
+ if (!camTrack || !c.backgroundBlur)
325
+ return setPreview(camTrack);
326
+ let stop = null;
327
+ let alive = true;
328
+ applyVideoEffect(camTrack, {}).then((r) => (alive ? (setPreview(r.track), (stop = r.stop)) : r.stop()), () => alive && setPreview(camTrack));
329
+ return () => {
330
+ alive = false;
331
+ stop?.();
332
+ };
333
+ }, [camTrack, c.backgroundBlur]);
334
+ // Mic (for the level meter).
335
+ useEffect(() => {
336
+ if (!c.audio)
337
+ return setMicTrack(null);
338
+ let t = null;
339
+ let alive = true;
340
+ let stopNs = null;
341
+ navigator.mediaDevices
342
+ .getUserMedia({ audio: c.audioDeviceId ? { deviceId: { exact: c.audioDeviceId } } : true })
343
+ .then(async (s) => {
344
+ t = s.getAudioTracks()[0] ?? null;
345
+ if (!alive || !t)
346
+ return t?.stop();
347
+ if (c.noiseSuppression) {
348
+ const r = await applyAudioEffect(t).catch(() => null);
349
+ if (r && alive) {
350
+ stopNs = r.stop;
351
+ return setMicTrack(r.track);
352
+ }
353
+ r?.stop();
354
+ }
355
+ setMicTrack(t);
356
+ })
357
+ .catch((e) => alive && setError(`Microphone: ${e.message || e.name}`));
358
+ return () => {
359
+ alive = false;
360
+ stopNs?.();
361
+ t?.stop();
362
+ };
363
+ }, [c.audio, c.audioDeviceId, c.noiseSuppression]);
364
+ return (_jsxs("form", { className: cx("sfk-prejoin", className), onSubmit: (e) => {
365
+ e.preventDefault();
366
+ onSubmit(c);
367
+ }, children: [_jsxs("div", { className: "sfk-prejoin-preview", children: [c.video && preview ? (_jsx(VideoTrack, { track: preview, mirror: true })) : (_jsx("div", { className: "sfk-avatar", children: _jsx("span", { children: c.video ? "…" : "Camera off" }) })), _jsxs("div", { className: "sfk-prejoin-toggles", children: [_jsx("button", { type: "button", className: cx("sfk-btn", !c.audio && "sfk-off"), "aria-pressed": c.audio, "aria-label": c.audio ? "Mute microphone" : "Unmute microphone", "data-control": "mic", onClick: () => set("audio", !c.audio), children: _jsx(Icon, { name: c.audio ? "mic" : "micOff" }) }), _jsx("button", { type: "button", className: cx("sfk-btn", !c.video && "sfk-off"), "aria-pressed": c.video, "aria-label": c.video ? "Turn camera off" : "Turn camera on", "data-control": "camera", onClick: () => set("video", !c.video), children: _jsx(Icon, { name: c.video ? "cam" : "camOff" }) })] }), _jsx("div", { className: "sfk-level", "aria-label": "Microphone level", children: _jsx("i", { style: { width: `${Math.round(level * 100)}%` } }) })] }), error && _jsx("p", { className: "sfk-error", children: error }), askName && (_jsxs("label", { className: "sfk-device", children: [_jsx("span", { children: "Your name" }), _jsx("input", { required: true, value: c.name, onChange: (e) => set("name", e.target.value) })] })), _jsx(DeviceSelect, { kind: "audioinput", value: c.audioDeviceId, onChange: (id) => set("audioDeviceId", id) }), _jsx(DeviceSelect, { kind: "videoinput", value: c.videoDeviceId, onChange: (id) => set("videoDeviceId", id) }), showEffects && isBackgroundEffectSupported() && (_jsxs("label", { className: "sfk-check", children: [_jsx("input", { type: "checkbox", checked: c.backgroundBlur, onChange: (e) => set("backgroundBlur", e.target.checked) }), " Blur my background"] })), showEffects && isNoiseSuppressionSupported() && (_jsxs("label", { className: "sfk-check", children: [_jsx("input", { type: "checkbox", checked: c.noiseSuppression, onChange: (e) => set("noiseSuppression", e.target.checked) }), " ", "Suppress background noise"] })), _jsx("button", { type: "submit", className: "sfk-join", "data-control": "join", children: joinLabel })] }));
368
+ }
369
+ /** Joins a room while mounted and provides it to the hooks/components inside. */
370
+ export function SfuRoom(props) {
371
+ const { url, token, audioDeviceId, videoDeviceId, audioOutputDeviceId, connecting, renderError, onJoined, onLeft, onError, children, ...options } = props;
372
+ const { room, status, error } = useJoin(joinRoom, { url, token, ...options }, { key: `${url}|${token}` });
373
+ const cb = useRef({ onJoined, onLeft, onError });
374
+ cb.current = { onJoined, onLeft, onError };
375
+ useEffect(() => {
376
+ if (!room)
377
+ return;
378
+ const offs = [
379
+ room.on("left", (reason) => cb.current.onLeft?.(reason)),
380
+ room.on("error", (e) => cb.current.onError?.(e)),
381
+ ];
382
+ cb.current.onJoined?.(room);
383
+ void applyDevices(room, audioDeviceId, videoDeviceId, audioOutputDeviceId);
384
+ return () => offs.forEach((off) => off());
385
+ // eslint-disable-next-line react-hooks/exhaustive-deps
386
+ }, [room]);
387
+ useEffect(() => {
388
+ if (error)
389
+ cb.current.onError?.(error);
390
+ }, [error]);
391
+ if (status === "error" && error)
392
+ return _jsx(_Fragment, { children: renderError ? renderError(error) : _jsx("p", { className: "sfk-error", children: error.message }) });
393
+ if (!room)
394
+ return _jsx(_Fragment, { children: connecting ?? _jsx("div", { className: "sfk-connecting", children: "Connecting\u2026" }) });
395
+ return _jsx(RoomProvider, { room: room, children: children });
396
+ }
397
+ async function applyDevices(room, mic, cam, out) {
398
+ if (out)
399
+ room.setAudioOutputDevice(out);
400
+ if (!mic && !cam)
401
+ return;
402
+ const all = await navigator.mediaDevices.enumerateDevices().catch(() => []);
403
+ const m = mic && all.find((d) => d.kind === "audioinput" && d.deviceId === mic);
404
+ const c = cam && all.find((d) => d.kind === "videoinput" && d.deviceId === cam);
405
+ if (m)
406
+ room.setMicDevice(m);
407
+ if (c)
408
+ room.setCameraDevice(c);
409
+ }
410
+ /** The whole call UI in one component: prejoin → grid + controls + chat. */
411
+ export function VideoConference({ prejoin = true, chat = true, layout, className, ...roomProps }) {
412
+ const [choices, setChoices] = useState(prejoin ? null : {});
413
+ const [left, setLeft] = useState(null);
414
+ const [chatOpen, setChatOpen] = useState(false);
415
+ const onLeft = useCallback((reason) => {
416
+ setLeft(reason);
417
+ roomProps.onLeft?.(reason);
418
+ },
419
+ // eslint-disable-next-line react-hooks/exhaustive-deps
420
+ [roomProps.onLeft]);
421
+ const joinProps = useMemo(() => choices && prejoin
422
+ ? {
423
+ audio: choices.audio,
424
+ video: choices.video,
425
+ audioDeviceId: choices.audioDeviceId,
426
+ videoDeviceId: choices.videoDeviceId,
427
+ backgroundEffect: choices.backgroundBlur || undefined,
428
+ noiseSuppression: choices.noiseSuppression || undefined,
429
+ }
430
+ : {}, [choices, prejoin]);
431
+ if (left) {
432
+ return (_jsxs("div", { className: cx("sfk-conference sfk-ended", className), children: [_jsx("p", { children: left === "left" ? "You left the call." : `The call ended (${left}).` }), _jsx("button", { className: "sfk-join", onClick: () => {
433
+ setLeft(null);
434
+ setChoices(prejoin ? null : {});
435
+ }, children: "Rejoin" })] }));
436
+ }
437
+ if (!choices) {
438
+ return (_jsx("div", { className: cx("sfk-conference", className), children: _jsx(PreJoin, { onSubmit: setChoices }) }));
439
+ }
440
+ return (_jsx("div", { className: cx("sfk-conference", className), children: _jsxs(SfuRoom, { ...roomProps, ...joinProps, onLeft: onLeft, children: [_jsx(ConnectionBanner, {}), _jsxs("div", { className: "sfk-stage", children: [_jsx(VideoGrid, { layout: layout }), chat && chatOpen && _jsx(ChatPanel, {})] }), _jsx(ControlBar, { onToggleChat: chat ? () => setChatOpen((o) => !o) : undefined })] }) }));
441
+ }
442
+ // ---------- AI lessons ----------
443
+ const BOARD_W = 1600;
444
+ const BOARD_H = 1000;
445
+ const BOARD_COLORS = { black: "#1f2328", blue: "#2563eb", red: "#dc2626", green: "#16a34a", orange: "#ea580c" };
446
+ const FONT_PX = { s: 35, m: 50, l: 75 };
447
+ /** A readable version of simple TeX for the board (x^2 → x², \\frac{a}{b} → a⁄b). */
448
+ export function texToText(tex) {
449
+ let s = tex;
450
+ for (let i = 0; i < 4; i++)
451
+ s = s.replace(/\\frac\{([^{}]*)\}\{([^{}]*)\}/g, "$1⁄$2");
452
+ return s
453
+ .replace(/\\sqrt\{([^{}]*)\}/g, "√($1)")
454
+ .replace(/\^2|\^\{2\}/g, "²")
455
+ .replace(/\^3|\^\{3\}/g, "³")
456
+ .replace(/\\times/g, "×")
457
+ .replace(/\\div/g, "÷")
458
+ .replace(/\\cdot/g, "·")
459
+ .replace(/\\pi/g, "π")
460
+ .replace(/\\(le|leq)/g, "≤")
461
+ .replace(/\\(ge|geq)/g, "≥")
462
+ .replace(/\\(left|right)/g, "")
463
+ .replace(/[{}]/g, "")
464
+ .replace(/\\[a-zA-Z]+/g, "")
465
+ .trim();
466
+ }
467
+ function boardItem(item, highlighted) {
468
+ const color = ("color" in item && item.color && BOARD_COLORS[item.color]) || "var(--sfk-board-ink, #1f2328)";
469
+ const x = item.kind === "highlight" ? 0 : item.x * BOARD_W;
470
+ const y = item.kind === "highlight" ? 0 : item.y * BOARD_H;
471
+ const glow = highlighted ? { filter: "drop-shadow(0 0 10px #facc15)" } : undefined;
472
+ switch (item.kind) {
473
+ case "text":
474
+ case "math": {
475
+ const size = FONT_PX[item.size ?? "m"];
476
+ return (_jsx("text", { x: x, y: y + size, fontSize: size, fill: color, style: glow, fontFamily: item.kind === "math" ? "Cambria Math, STIX Two Math, serif" : "inherit", children: item.kind === "math" ? texToText(item.tex) : item.text }, item.id));
477
+ }
478
+ case "list":
479
+ return (_jsx("g", { style: glow, children: item.items.map((line, i) => (_jsxs("text", { x: x, y: y + FONT_PX.s * (i + 1) * 1.6, fontSize: FONT_PX.s, fill: color, children: [item.ordered ? `${i + 1}. ` : "• ", line] }, i))) }, item.id));
480
+ case "shape": {
481
+ const w = item.w * BOARD_W;
482
+ const h = item.h * BOARD_H;
483
+ const common = { stroke: color, strokeWidth: 5, fill: "none", style: glow };
484
+ return (_jsxs("g", { children: [item.shape === "rect" && _jsx("rect", { x: Math.min(x, x + w), y: Math.min(y, y + h), width: Math.abs(w), height: Math.abs(h), ...common }), item.shape === "circle" && _jsx("ellipse", { cx: x + w / 2, cy: y + h / 2, rx: Math.abs(w / 2), ry: Math.abs(h / 2), ...common }), (item.shape === "line" || item.shape === "arrow") && (_jsx("line", { x1: x, y1: y, x2: x + w, y2: y + h, ...common, markerEnd: item.shape === "arrow" ? "url(#sfk-arrow)" : undefined })), item.label && (_jsx("text", { x: x + 10, y: y + h + 45, fontSize: FONT_PX.s, fill: color, children: item.label }))] }, item.id));
485
+ }
486
+ case "image":
487
+ return _jsx("image", { href: item.url, x: x, y: y, width: item.w * BOARD_W, height: item.h * BOARD_H }, item.id);
488
+ default:
489
+ return null;
490
+ }
491
+ }
492
+ /** The AI teacher's whiteboard (16:10, scales to its width). */
493
+ export function LessonWhiteboard({ lesson, className }) {
494
+ const highlight = lesson.board.find((b) => b.kind === "highlight");
495
+ const target = highlight && highlight.kind === "highlight" ? highlight.target : null;
496
+ return (_jsxs("svg", { className: `sfk-lesson-board ${className ?? ""}`, viewBox: `0 0 ${BOARD_W} ${BOARD_H}`, role: "img", "aria-label": "Whiteboard", style: { width: "100%", aspectRatio: "16 / 10", background: "var(--sfk-board-bg, #fff)", borderRadius: 12 }, children: [_jsx("defs", { children: _jsx("marker", { id: "sfk-arrow", viewBox: "0 0 10 10", refX: "9", refY: "5", markerWidth: "6", markerHeight: "6", orient: "auto-start-reverse", children: _jsx("path", { d: "M 0 0 L 10 5 L 0 10 z", fill: "context-stroke" }) }) }), lesson.board.map((b) => boardItem(b, b.id === target))] }));
497
+ }
498
+ /** The current slide of an AI lesson (nothing when none is shown). */
499
+ export function LessonSlideView({ lesson, className }) {
500
+ const slide = lesson.slide;
501
+ if (!slide)
502
+ return null;
503
+ return (_jsxs("section", { className: `sfk-lesson-slide ${className ?? ""}`, "aria-label": "Slide", children: [_jsx("h2", { children: slide.title }), slide.bullets?.length ? (_jsx("ul", { children: slide.bullets.map((b, i) => (_jsx("li", { children: b }, i))) })) : null, slide.imageUrl && _jsx("img", { src: slide.imageUrl, alt: "", style: { maxWidth: "100%" } })] }));
504
+ }
505
+ /** A one-line status for an AI lesson: section, who's speaking, timer. */
506
+ export function LessonStatusBar({ lesson, names }) {
507
+ const [now, setNow] = useState(Date.now());
508
+ useEffect(() => {
509
+ if (!lesson.timer && !lesson.quiz?.closesAt)
510
+ return;
511
+ const t = setInterval(() => setNow(Date.now()), 500);
512
+ return () => clearInterval(t);
513
+ }, [lesson.timer, lesson.quiz?.closesAt]);
514
+ const left = (end) => {
515
+ const s = Math.max(0, Math.round((end - now) / 1000));
516
+ return `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`;
517
+ };
518
+ const section = lesson.sections[lesson.section];
519
+ return (_jsxs("div", { className: "sfk-lesson-status", role: "status", children: [_jsx("strong", { children: lesson.title }), section && _jsxs("span", { children: [" \u00B7 ", lesson.section + 1, "/", lesson.sections.length, " ", section.title] }), lesson.status === "paused" && _jsx("span", { children: " \u00B7 paused" }), lesson.status === "teacher" && _jsx("span", { children: " \u00B7 teacher speaking" }), lesson.floor && _jsxs("span", { children: [" \u00B7 ", names ? names(lesson.floor) : lesson.floor, " is speaking"] }), lesson.timer && _jsxs("span", { children: [" \u00B7 ", lesson.timer.label, " ", left(lesson.timer.endsAt)] }), lesson.quiz && !lesson.quiz.closed && lesson.quiz.closesAt && _jsxs("span", { children: [" \u00B7 quiz ", left(lesson.quiz.closesAt)] })] }));
520
+ }
521
+ //# sourceMappingURL=components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../src/components.tsx"],"names":[],"mappings":"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"}