@ai-matrx/meet 0.7.83 → 0.7.85
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/CHANGELOG.md +40 -0
- package/README.md +13 -7
- package/dist/collab-Bss-_Jfp.d.cts +805 -0
- package/dist/collab-Bss-_Jfp.d.ts +805 -0
- package/dist/components-BOUmOiPj.d.cts +240 -0
- package/dist/components-BmgstFx_.d.ts +240 -0
- package/dist/core.cjs +6737 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +3048 -0
- package/dist/core.d.ts +3048 -0
- package/dist/core.js +6704 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +219 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3720
- package/dist/index.d.ts +5 -3720
- package/dist/index.js +219 -0
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +1430 -1354
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +108 -365
- package/dist/react.d.ts +108 -365
- package/dist/react.js +1102 -1039
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +4647 -0
- package/dist/skins/meet.cjs.map +1 -0
- package/dist/skins/meet.d.cts +113 -0
- package/dist/skins/meet.d.ts +113 -0
- package/dist/skins/meet.js +4628 -0
- package/dist/skins/meet.js.map +1 -0
- package/package.json +40 -6
package/dist/react.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
+
// src/core/slot.ts
|
|
5
|
+
var NAMESPACE = "ai-matrx.meet";
|
|
6
|
+
function globalSlot(name, create) {
|
|
7
|
+
const key = /* @__PURE__ */ Symbol.for(`${NAMESPACE}.${name}`);
|
|
8
|
+
const host = globalThis;
|
|
9
|
+
const existing = host[key];
|
|
10
|
+
if (existing !== void 0) return existing;
|
|
11
|
+
const created = create();
|
|
12
|
+
host[key] = created;
|
|
13
|
+
return created;
|
|
14
|
+
}
|
|
15
|
+
|
|
4
16
|
// src/react/provider.tsx
|
|
5
17
|
import {
|
|
6
18
|
createContext,
|
|
@@ -901,20 +913,6 @@ function fileDownloadPath(fileId) {
|
|
|
901
913
|
|
|
902
914
|
// src/core/channels.ts
|
|
903
915
|
import { defineChannelNamespace } from "@ai-matrx/realtime";
|
|
904
|
-
|
|
905
|
-
// src/core/slot.ts
|
|
906
|
-
var NAMESPACE = "ai-matrx.meet";
|
|
907
|
-
function globalSlot(name, create) {
|
|
908
|
-
const key = /* @__PURE__ */ Symbol.for(`${NAMESPACE}.${name}`);
|
|
909
|
-
const host = globalThis;
|
|
910
|
-
const existing = host[key];
|
|
911
|
-
if (existing !== void 0) return existing;
|
|
912
|
-
const created = create();
|
|
913
|
-
host[key] = created;
|
|
914
|
-
return created;
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
// src/core/channels.ts
|
|
918
916
|
function namespaces() {
|
|
919
917
|
return globalSlot("channel-namespaces", () => ({
|
|
920
918
|
user: defineChannelNamespace({
|
|
@@ -5223,7 +5221,7 @@ async function createCameraPreview(deviceId2, effect) {
|
|
|
5223
5221
|
|
|
5224
5222
|
// src/react/provider.tsx
|
|
5225
5223
|
import { jsx } from "react/jsx-runtime";
|
|
5226
|
-
var MeetContext = createContext(null);
|
|
5224
|
+
var MeetContext = globalSlot("react.context", () => createContext(null));
|
|
5227
5225
|
function defaultDiagnostics(event) {
|
|
5228
5226
|
const line = `[@ai-matrx/meet] ${event.message}${event.remedy !== void 0 ? `
|
|
5229
5227
|
\u2192 ${event.remedy}` : ""}`;
|
|
@@ -5545,8 +5543,183 @@ function useLocalUserId() {
|
|
|
5545
5543
|
return useMeetHost()?.identity.userId ?? null;
|
|
5546
5544
|
}
|
|
5547
5545
|
|
|
5546
|
+
// src/react/root.tsx
|
|
5547
|
+
import { useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
5548
|
+
|
|
5549
|
+
// src/core/observation.ts
|
|
5550
|
+
function observedDevice(track) {
|
|
5551
|
+
if (track.enabled) return "on";
|
|
5552
|
+
const refused = track.unavailable;
|
|
5553
|
+
if (refused === null) return "muted_by_me";
|
|
5554
|
+
switch (refused.code) {
|
|
5555
|
+
case "permission-denied":
|
|
5556
|
+
return "unavailable:denied";
|
|
5557
|
+
case "device-not-found":
|
|
5558
|
+
return "unavailable:none";
|
|
5559
|
+
case "device-in-use":
|
|
5560
|
+
return "unavailable:busy";
|
|
5561
|
+
case "insecure-context":
|
|
5562
|
+
return "unavailable:blocked_site";
|
|
5563
|
+
default:
|
|
5564
|
+
return "unavailable:failed";
|
|
5565
|
+
}
|
|
5566
|
+
}
|
|
5567
|
+
function endedRecord(snapshot, given) {
|
|
5568
|
+
const record = snapshot?.meeting ?? given;
|
|
5569
|
+
return record !== null && record.endedAt !== null;
|
|
5570
|
+
}
|
|
5571
|
+
function observedPhase(input) {
|
|
5572
|
+
const { snapshot } = input;
|
|
5573
|
+
if (snapshot === null) return "resolving";
|
|
5574
|
+
const raw = snapshot.phase;
|
|
5575
|
+
const live = raw === "connected" || raw === "reconnecting";
|
|
5576
|
+
if (endedRecord(snapshot, input.meeting ?? null) && !live) return "ended";
|
|
5577
|
+
switch (raw) {
|
|
5578
|
+
case "idle":
|
|
5579
|
+
case "failed":
|
|
5580
|
+
case "left":
|
|
5581
|
+
return "prejoin";
|
|
5582
|
+
case "lobby":
|
|
5583
|
+
return "waiting:knocking";
|
|
5584
|
+
case "requesting-token":
|
|
5585
|
+
case "connecting":
|
|
5586
|
+
return "joining";
|
|
5587
|
+
case "connected":
|
|
5588
|
+
case "reconnecting":
|
|
5589
|
+
return "in_call";
|
|
5590
|
+
}
|
|
5591
|
+
}
|
|
5592
|
+
var ADMITTER_ROLES = /* @__PURE__ */ new Set(["host", "cohost"]);
|
|
5593
|
+
function observe(input) {
|
|
5594
|
+
const { snapshot } = input;
|
|
5595
|
+
const phase = observedPhase(input);
|
|
5596
|
+
const inCall = phase === "in_call";
|
|
5597
|
+
const role = inCall && snapshot !== null ? effectiveRole(snapshot) : "none";
|
|
5598
|
+
const canAdmit = role !== "none" && ADMITTER_ROLES.has(role);
|
|
5599
|
+
const deviceInPlay = phase === "joining" || inCall;
|
|
5600
|
+
return {
|
|
5601
|
+
phase,
|
|
5602
|
+
reason: null,
|
|
5603
|
+
role,
|
|
5604
|
+
connection: snapshot?.phase === "reconnecting" ? "reconnecting" : "stable",
|
|
5605
|
+
hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : null,
|
|
5606
|
+
lobbyCount: canAdmit && snapshot !== null ? snapshot.lobby.filter((entry) => entry.state === "knocking").length : 0,
|
|
5607
|
+
recording: snapshot?.recording === "recording" || snapshot?.recording === "stopping",
|
|
5608
|
+
audioBlocked: null,
|
|
5609
|
+
camera: deviceInPlay && snapshot !== null ? observedDevice(snapshot.media.camera) : null,
|
|
5610
|
+
microphone: deviceInPlay && snapshot !== null ? observedDevice(snapshot.media.microphone) : null
|
|
5611
|
+
};
|
|
5612
|
+
}
|
|
5613
|
+
function staticObservation(phase, reason = null) {
|
|
5614
|
+
return {
|
|
5615
|
+
phase,
|
|
5616
|
+
reason,
|
|
5617
|
+
role: "none",
|
|
5618
|
+
connection: phase === "disconnected" ? "server_unreachable" : "stable",
|
|
5619
|
+
hostPresent: null,
|
|
5620
|
+
lobbyCount: 0,
|
|
5621
|
+
recording: false,
|
|
5622
|
+
audioBlocked: null,
|
|
5623
|
+
camera: null,
|
|
5624
|
+
microphone: null
|
|
5625
|
+
};
|
|
5626
|
+
}
|
|
5627
|
+
function rootAttributes(o) {
|
|
5628
|
+
const attrs = {
|
|
5629
|
+
"data-meet-root": "",
|
|
5630
|
+
"data-meet-phase": o.phase,
|
|
5631
|
+
"data-meet-role": o.role,
|
|
5632
|
+
"data-meet-connection": o.connection,
|
|
5633
|
+
"data-meet-lobby-count": String(o.lobbyCount),
|
|
5634
|
+
"data-meet-recording": String(o.recording)
|
|
5635
|
+
};
|
|
5636
|
+
if (o.reason !== null) attrs["data-meet-reason"] = o.reason;
|
|
5637
|
+
if (o.hostPresent !== null) attrs["data-meet-host-present"] = String(o.hostPresent);
|
|
5638
|
+
if (o.audioBlocked !== null) attrs["data-meet-audio-blocked"] = String(o.audioBlocked);
|
|
5639
|
+
if (o.camera !== null) attrs["data-meet-camera"] = o.camera;
|
|
5640
|
+
if (o.microphone !== null) attrs["data-meet-microphone"] = o.microphone;
|
|
5641
|
+
attrs["data-meet-regions"] = JSON.stringify({
|
|
5642
|
+
connection: o.connection,
|
|
5643
|
+
camera: o.camera,
|
|
5644
|
+
mic: o.microphone,
|
|
5645
|
+
audio_output: o.audioBlocked === null ? null : o.audioBlocked ? "blocked" : "playing",
|
|
5646
|
+
recording: o.recording
|
|
5647
|
+
});
|
|
5648
|
+
return attrs;
|
|
5649
|
+
}
|
|
5650
|
+
function observedQuality(quality) {
|
|
5651
|
+
switch (quality) {
|
|
5652
|
+
case "excellent":
|
|
5653
|
+
case "good":
|
|
5654
|
+
return "good";
|
|
5655
|
+
case "poor":
|
|
5656
|
+
return "poor";
|
|
5657
|
+
case "lost":
|
|
5658
|
+
return "lost";
|
|
5659
|
+
default:
|
|
5660
|
+
return null;
|
|
5661
|
+
}
|
|
5662
|
+
}
|
|
5663
|
+
function participantAttributes(p) {
|
|
5664
|
+
const attrs = {
|
|
5665
|
+
"data-meet-participant": "",
|
|
5666
|
+
"data-meet-participant-identity": p.identity,
|
|
5667
|
+
"data-meet-participant-name": p.displayName,
|
|
5668
|
+
"data-meet-participant-role": p.role,
|
|
5669
|
+
"data-meet-participant-self": String(p.isLocal)
|
|
5670
|
+
};
|
|
5671
|
+
const quality = observedQuality(p.quality);
|
|
5672
|
+
if (quality !== null) attrs["data-meet-participant-connection"] = quality;
|
|
5673
|
+
return attrs;
|
|
5674
|
+
}
|
|
5675
|
+
function microphoneNoticeCode(track) {
|
|
5676
|
+
const refused = track.unavailable;
|
|
5677
|
+
if (refused === null) return null;
|
|
5678
|
+
return refused.code === "permission-denied" || refused.code === "insecure-context" ? "mic-blocked" : "device-lost";
|
|
5679
|
+
}
|
|
5680
|
+
|
|
5681
|
+
// src/react/root.tsx
|
|
5682
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
5683
|
+
function useCoreObservation(options = {}) {
|
|
5684
|
+
const snapshot = useMeetSnapshot();
|
|
5685
|
+
const { meeting, phase, reason } = options;
|
|
5686
|
+
return useMemo2(
|
|
5687
|
+
() => phase !== void 0 ? staticObservation(phase, reason ?? null) : observe({ snapshot, meeting: meeting ?? null }),
|
|
5688
|
+
[snapshot, meeting, phase, reason]
|
|
5689
|
+
);
|
|
5690
|
+
}
|
|
5691
|
+
function useCoreRootProps(options = {}) {
|
|
5692
|
+
const observation = useCoreObservation(options);
|
|
5693
|
+
return useMemo2(() => rootAttributes(observation), [observation]);
|
|
5694
|
+
}
|
|
5695
|
+
function MeetRoot({
|
|
5696
|
+
children,
|
|
5697
|
+
...options
|
|
5698
|
+
}) {
|
|
5699
|
+
const snapshot = useMeetSnapshot();
|
|
5700
|
+
const observation = useCoreObservation(options);
|
|
5701
|
+
const attrs = useMemo2(() => rootAttributes(observation), [observation]);
|
|
5702
|
+
const latest = useRef2({ observation, storePhase: snapshot?.phase ?? null });
|
|
5703
|
+
latest.current = { observation, storePhase: snapshot?.phase ?? null };
|
|
5704
|
+
useEffect2(() => {
|
|
5705
|
+
if (typeof window === "undefined") return void 0;
|
|
5706
|
+
const diagnostics = {
|
|
5707
|
+
contract: "HARNESS-CONTRACT",
|
|
5708
|
+
snapshot: () => latest.current,
|
|
5709
|
+
activeCatalogStates: [],
|
|
5710
|
+
activeCatalogStatesDerived: false
|
|
5711
|
+
};
|
|
5712
|
+
const target = window;
|
|
5713
|
+
target.__matrxMeet = diagnostics;
|
|
5714
|
+
return () => {
|
|
5715
|
+
if (target.__matrxMeet === diagnostics) delete target.__matrxMeet;
|
|
5716
|
+
};
|
|
5717
|
+
}, []);
|
|
5718
|
+
return /* @__PURE__ */ jsx2("div", { ...attrs, style: { display: "contents" }, children });
|
|
5719
|
+
}
|
|
5720
|
+
|
|
5548
5721
|
// src/react/hooks.ts
|
|
5549
|
-
import { useCallback as useCallback2, useEffect as
|
|
5722
|
+
import { useCallback as useCallback2, useEffect as useEffect3, useMemo as useMemo3, useRef as useRef3, useState as useState2, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
5550
5723
|
import { useRealtimeManager as useRealtimeManager2 } from "@ai-matrx/realtime/react";
|
|
5551
5724
|
|
|
5552
5725
|
// src/core/record.ts
|
|
@@ -6285,7 +6458,7 @@ function useRoom() {
|
|
|
6285
6458
|
function useStage(pageSize = DEFAULT_PAGE_SIZE) {
|
|
6286
6459
|
const snapshot = useMeetSnapshot();
|
|
6287
6460
|
const [page, setPage] = useState2(0);
|
|
6288
|
-
const stage =
|
|
6461
|
+
const stage = useMemo3(
|
|
6289
6462
|
() => computeStage({
|
|
6290
6463
|
participants: snapshot?.participants ?? [],
|
|
6291
6464
|
layout: snapshot?.layout ?? "grid",
|
|
@@ -6297,14 +6470,14 @@ function useStage(pageSize = DEFAULT_PAGE_SIZE) {
|
|
|
6297
6470
|
}),
|
|
6298
6471
|
[snapshot, pageSize, page]
|
|
6299
6472
|
);
|
|
6300
|
-
|
|
6473
|
+
useEffect3(() => {
|
|
6301
6474
|
if (page > stage.pageCount - 1) setPage(Math.max(0, stage.pageCount - 1));
|
|
6302
6475
|
}, [page, stage.pageCount]);
|
|
6303
6476
|
return stage;
|
|
6304
6477
|
}
|
|
6305
6478
|
function useTrack(identity, kind) {
|
|
6306
6479
|
const host = useMeetHost();
|
|
6307
|
-
const detachRef =
|
|
6480
|
+
const detachRef = useRef3(null);
|
|
6308
6481
|
return useCallback2(
|
|
6309
6482
|
(element) => {
|
|
6310
6483
|
detachRef.current?.();
|
|
@@ -6319,7 +6492,7 @@ function useCalls() {
|
|
|
6319
6492
|
const host = useMeetHost();
|
|
6320
6493
|
const center = host?.calls ?? null;
|
|
6321
6494
|
const [, force] = useState2(0);
|
|
6322
|
-
|
|
6495
|
+
useEffect3(() => {
|
|
6323
6496
|
if (center === null) return void 0;
|
|
6324
6497
|
const timer = setInterval(() => force((value) => value + 1), 1e3);
|
|
6325
6498
|
return () => clearInterval(timer);
|
|
@@ -6440,7 +6613,7 @@ function useMeetAi() {
|
|
|
6440
6613
|
const participants = snapshot?.participants ?? [];
|
|
6441
6614
|
const notes = snapshot?.notes ?? [];
|
|
6442
6615
|
const wrapUp = snapshot?.wrapUp ?? null;
|
|
6443
|
-
const status =
|
|
6616
|
+
const status = useMemo3(
|
|
6444
6617
|
() => noteTakerStatus({
|
|
6445
6618
|
meeting,
|
|
6446
6619
|
participants,
|
|
@@ -6449,7 +6622,7 @@ function useMeetAi() {
|
|
|
6449
6622
|
[meeting, participants, snapshot?.noteTakerRefusal]
|
|
6450
6623
|
);
|
|
6451
6624
|
const names = snapshot?.names ?? EMPTY_NAMES;
|
|
6452
|
-
const transcript =
|
|
6625
|
+
const transcript = useMemo3(
|
|
6453
6626
|
() => readableTranscript(snapshot?.transcript ?? []).map((line) => ({
|
|
6454
6627
|
id: line.id,
|
|
6455
6628
|
identity: line.identity,
|
|
@@ -6594,7 +6767,7 @@ function useReactions() {
|
|
|
6594
6767
|
const host = useMeetHost();
|
|
6595
6768
|
const snapshot = useMeetSnapshot();
|
|
6596
6769
|
const store = host?.store ?? null;
|
|
6597
|
-
|
|
6770
|
+
useEffect3(() => {
|
|
6598
6771
|
if (store === null) return void 0;
|
|
6599
6772
|
const timer = setInterval(() => store.expireReactions(Date.now()), REACTION_TTL_MS / 2);
|
|
6600
6773
|
return () => clearInterval(timer);
|
|
@@ -6603,7 +6776,7 @@ function useReactions() {
|
|
|
6603
6776
|
}
|
|
6604
6777
|
function useElapsed(startedAt) {
|
|
6605
6778
|
const [now, setNow] = useState2(() => Date.now());
|
|
6606
|
-
|
|
6779
|
+
useEffect3(() => {
|
|
6607
6780
|
if (startedAt === null) return void 0;
|
|
6608
6781
|
const timer = setInterval(() => setNow(Date.now()), 1e3);
|
|
6609
6782
|
return () => clearInterval(timer);
|
|
@@ -6683,7 +6856,7 @@ function useHostControls() {
|
|
|
6683
6856
|
}
|
|
6684
6857
|
function useHandQueue() {
|
|
6685
6858
|
const snapshot = useMeetSnapshot();
|
|
6686
|
-
return
|
|
6859
|
+
return useMemo3(
|
|
6687
6860
|
() => (snapshot?.participants ?? []).filter((participant) => participant.handRaised).sort((a, b) => (a.handRaisedAt ?? 0) - (b.handRaisedAt ?? 0)),
|
|
6688
6861
|
[snapshot?.participants]
|
|
6689
6862
|
);
|
|
@@ -6711,7 +6884,7 @@ function useModerationNotice() {
|
|
|
6711
6884
|
}
|
|
6712
6885
|
function useAudioLevel(stream) {
|
|
6713
6886
|
const [level, setLevel] = useState2(0);
|
|
6714
|
-
|
|
6887
|
+
useEffect3(() => {
|
|
6715
6888
|
if (stream === null || stream.getAudioTracks().length === 0) {
|
|
6716
6889
|
setLevel(0);
|
|
6717
6890
|
return void 0;
|
|
@@ -6750,9 +6923,9 @@ var MEET_SHORTCUTS = [
|
|
|
6750
6923
|
{ id: "help", keys: "Shift + ?", label: "Show keyboard shortcuts" }
|
|
6751
6924
|
];
|
|
6752
6925
|
function useMeetShortcuts(handlers) {
|
|
6753
|
-
const ref =
|
|
6926
|
+
const ref = useRef3(handlers);
|
|
6754
6927
|
ref.current = handlers;
|
|
6755
|
-
|
|
6928
|
+
useEffect3(() => {
|
|
6756
6929
|
const target = globalThis.window;
|
|
6757
6930
|
if (target === void 0) return void 0;
|
|
6758
6931
|
const onKey = (event) => {
|
|
@@ -6815,7 +6988,7 @@ function useMeetingRecord(meeting) {
|
|
|
6815
6988
|
() => cache.state(key),
|
|
6816
6989
|
() => cache.state(null)
|
|
6817
6990
|
);
|
|
6818
|
-
const readRef =
|
|
6991
|
+
const readRef = useRef3(() => Promise.reject(new Error("not ready")));
|
|
6819
6992
|
readRef.current = async () => {
|
|
6820
6993
|
if (repository === null || meeting === null || meetingId === null) throw new Error("No meeting to read.");
|
|
6821
6994
|
if (readerId === null && api !== null && tokens !== null && roomName !== null) {
|
|
@@ -6844,14 +7017,14 @@ function useMeetingRecord(meeting) {
|
|
|
6844
7017
|
}
|
|
6845
7018
|
return { kind: "parts", meeting, parts };
|
|
6846
7019
|
};
|
|
6847
|
-
|
|
7020
|
+
useEffect3(() => {
|
|
6848
7021
|
if (key === null) return;
|
|
6849
7022
|
void cache.ensure(key, () => readRef.current());
|
|
6850
7023
|
}, [cache, key]);
|
|
6851
|
-
|
|
7024
|
+
useEffect3(() => {
|
|
6852
7025
|
if (key !== null && meeting !== null) cache.setMeeting(key, meeting);
|
|
6853
7026
|
}, [cache, key, meeting]);
|
|
6854
|
-
|
|
7027
|
+
useEffect3(() => {
|
|
6855
7028
|
if (key === null || manager === null || repository === null || meetingId === null || readerId === null) {
|
|
6856
7029
|
return void 0;
|
|
6857
7030
|
}
|
|
@@ -6952,7 +7125,7 @@ function useMeetings(limit = 25, organizationFilter = null) {
|
|
|
6952
7125
|
const [loading, setLoading] = useState2(true);
|
|
6953
7126
|
const [failure, setFailure] = useState2(null);
|
|
6954
7127
|
const [nonce, setNonce] = useState2(0);
|
|
6955
|
-
|
|
7128
|
+
useEffect3(() => {
|
|
6956
7129
|
if (repository === null) return void 0;
|
|
6957
7130
|
let live = true;
|
|
6958
7131
|
setLoading(true);
|
|
@@ -6990,7 +7163,7 @@ function useGuestRecordAccess(meeting) {
|
|
|
6990
7163
|
const [effective, setEffective] = useState2(null);
|
|
6991
7164
|
const [saving, setSaving] = useState2(false);
|
|
6992
7165
|
const [error, setError] = useState2(null);
|
|
6993
|
-
|
|
7166
|
+
useEffect3(() => {
|
|
6994
7167
|
setChosen(null);
|
|
6995
7168
|
}, [stored, meeting?.id]);
|
|
6996
7169
|
return {
|
|
@@ -7026,23 +7199,15 @@ function useGuestRecordAccess(meeting) {
|
|
|
7026
7199
|
};
|
|
7027
7200
|
}
|
|
7028
7201
|
|
|
7029
|
-
// src/react/
|
|
7030
|
-
import { useEffect as
|
|
7031
|
-
|
|
7032
|
-
|
|
7033
|
-
|
|
7034
|
-
|
|
7035
|
-
|
|
7036
|
-
|
|
7037
|
-
|
|
7038
|
-
SegmentedControl,
|
|
7039
|
-
Select,
|
|
7040
|
-
SelectContent,
|
|
7041
|
-
SelectItem,
|
|
7042
|
-
SelectTrigger,
|
|
7043
|
-
SelectValue
|
|
7044
|
-
} from "@ai-matrx/design-system";
|
|
7045
|
-
import { avatarPaletteIndex, formatDurationMs as formatDurationMs4, getInitials } from "@ai-matrx/kit/format";
|
|
7202
|
+
// src/react/skin-root.tsx
|
|
7203
|
+
import { useEffect as useEffect8 } from "react";
|
|
7204
|
+
|
|
7205
|
+
// src/skins/meet/components.tsx
|
|
7206
|
+
import { useEffect as useEffect6, useLayoutEffect, useRef as useRef6, useState as useState4 } from "react";
|
|
7207
|
+
|
|
7208
|
+
// src/react/facade.ts
|
|
7209
|
+
import { useMemo as useMemo4 } from "react";
|
|
7210
|
+
import { avatarPaletteIndex, formatDurationMs as formatDurationMs3, getInitials } from "@ai-matrx/kit/format";
|
|
7046
7211
|
|
|
7047
7212
|
// src/core/after.ts
|
|
7048
7213
|
import { toDelimited } from "@ai-matrx/kit/delimited";
|
|
@@ -7479,14 +7644,154 @@ function countLabel(count2, singular, plural = `${singular}s`) {
|
|
|
7479
7644
|
return `${count2} ${count2 === 1 ? singular : plural}`;
|
|
7480
7645
|
}
|
|
7481
7646
|
|
|
7482
|
-
// src/
|
|
7483
|
-
|
|
7484
|
-
|
|
7647
|
+
// src/core/collab-state.ts
|
|
7648
|
+
function availableActivities(collab, isHost) {
|
|
7649
|
+
const settings = collab?.settings ?? null;
|
|
7650
|
+
if (settings === null) return [];
|
|
7651
|
+
const out = [];
|
|
7652
|
+
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
7653
|
+
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
7654
|
+
if (settings.qaEnabled) out.push("qa");
|
|
7655
|
+
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
7656
|
+
return out;
|
|
7657
|
+
}
|
|
7658
|
+
function activityAttention(collab, isHost) {
|
|
7659
|
+
if (collab === null) return false;
|
|
7660
|
+
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
7661
|
+
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
7662
|
+
return false;
|
|
7663
|
+
}
|
|
7664
|
+
async function performCollab(runtime, request) {
|
|
7665
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
7666
|
+
try {
|
|
7667
|
+
const result = await runtime.inRoom.collab(request);
|
|
7668
|
+
return { ok: true, message: result.message, itemId: result.itemId };
|
|
7669
|
+
} catch (error) {
|
|
7670
|
+
return { ok: false, message: error.message ?? "That did not work." };
|
|
7671
|
+
}
|
|
7672
|
+
}
|
|
7673
|
+
async function moveToRoom(runtime, roomId) {
|
|
7674
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
7675
|
+
try {
|
|
7676
|
+
await runtime.engine.moveToBreakout(roomId);
|
|
7677
|
+
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
7678
|
+
} catch (error) {
|
|
7679
|
+
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
7680
|
+
}
|
|
7681
|
+
}
|
|
7682
|
+
function untranslatedLines(lines, translations) {
|
|
7683
|
+
return lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text: text3 }) => ({ id, text: text3 }));
|
|
7684
|
+
}
|
|
7685
|
+
function nextTranslationBatch(pending, language, asked) {
|
|
7686
|
+
const batch = pending.filter((line) => !asked.has(`${language}:${line.id}`)).slice(-20);
|
|
7687
|
+
for (const line of batch) asked.add(`${language}:${line.id}`);
|
|
7688
|
+
return batch;
|
|
7689
|
+
}
|
|
7690
|
+
function setCaptionLanguage(store, next) {
|
|
7691
|
+
store.patch({
|
|
7692
|
+
collab: {
|
|
7693
|
+
...store.snapshot().collab,
|
|
7694
|
+
captionLanguage: next,
|
|
7695
|
+
captionTranslations: {},
|
|
7696
|
+
captionTranslationError: null
|
|
7697
|
+
}
|
|
7698
|
+
});
|
|
7699
|
+
}
|
|
7700
|
+
function takePanelRequest(store) {
|
|
7701
|
+
const request = store.snapshot().collab.panelRequest;
|
|
7702
|
+
if (request === null) return null;
|
|
7703
|
+
store.patch({ collab: { ...store.snapshot().collab, panelRequest: null } });
|
|
7704
|
+
return request.panel;
|
|
7705
|
+
}
|
|
7706
|
+
function takeMoveRequest(store) {
|
|
7707
|
+
const request = store.snapshot().collab.moveRequest;
|
|
7708
|
+
if (request === null) return null;
|
|
7709
|
+
store.patch({ collab: { ...store.snapshot().collab, moveRequest: null } });
|
|
7710
|
+
return { roomId: request.roomId };
|
|
7711
|
+
}
|
|
7712
|
+
|
|
7713
|
+
// src/react/collab-hooks.ts
|
|
7714
|
+
import { useEffect as useEffect4, useRef as useRef4 } from "react";
|
|
7715
|
+
function useCollab() {
|
|
7716
|
+
const host = useMeetHost();
|
|
7717
|
+
const snapshot = useMeetSnapshot();
|
|
7718
|
+
const isHost = useIsHost();
|
|
7719
|
+
return {
|
|
7720
|
+
collab: snapshot?.collab ?? null,
|
|
7721
|
+
isHost,
|
|
7722
|
+
localIdentity: snapshot?.localIdentity ?? null,
|
|
7723
|
+
breakoutRoomId: snapshot?.breakoutRoomId ?? null,
|
|
7724
|
+
act: (request) => performCollab(host, request),
|
|
7725
|
+
moveTo: (roomId) => moveToRoom(host, roomId)
|
|
7726
|
+
};
|
|
7727
|
+
}
|
|
7728
|
+
function useAvailableActivities() {
|
|
7729
|
+
const { collab, isHost } = useCollab();
|
|
7730
|
+
return availableActivities(collab, isHost);
|
|
7731
|
+
}
|
|
7732
|
+
function useActivityAttention() {
|
|
7733
|
+
const { collab, isHost } = useCollab();
|
|
7734
|
+
return activityAttention(collab, isHost);
|
|
7735
|
+
}
|
|
7736
|
+
function useCaptionTranslation(lines) {
|
|
7737
|
+
const host = useMeetHost();
|
|
7738
|
+
const snapshot = useMeetSnapshot();
|
|
7739
|
+
const collab = snapshot?.collab ?? null;
|
|
7740
|
+
const language = collab?.captionLanguage ?? null;
|
|
7741
|
+
const asked = useRef4(/* @__PURE__ */ new Set());
|
|
7742
|
+
const translations = collab?.captionTranslations ?? {};
|
|
7743
|
+
const missing = untranslatedLines(lines, translations);
|
|
7744
|
+
const key = `${language ?? ""}|${missing.map((l) => l.id).join(",")}`;
|
|
7745
|
+
const pending = useRef4(missing);
|
|
7746
|
+
pending.current = missing;
|
|
7747
|
+
useEffect4(() => {
|
|
7748
|
+
if (host === null || language === null) return;
|
|
7749
|
+
const batch = nextTranslationBatch(pending.current, language, asked.current);
|
|
7750
|
+
if (batch.length === 0) return;
|
|
7751
|
+
void host.inRoom.translateCaptions(language, batch).catch(() => void 0);
|
|
7752
|
+
}, [host, language, key]);
|
|
7753
|
+
return { language, translations, error: collab?.captionTranslationError ?? null };
|
|
7754
|
+
}
|
|
7755
|
+
function useCollabPanelRequest(onRequest) {
|
|
7756
|
+
const host = useMeetHost();
|
|
7757
|
+
const at = useMeetSnapshot()?.collab.panelRequest?.at ?? null;
|
|
7758
|
+
const callback = useRef4(onRequest);
|
|
7759
|
+
callback.current = onRequest;
|
|
7760
|
+
useEffect4(() => {
|
|
7761
|
+
if (host === null) return;
|
|
7762
|
+
const panel = takePanelRequest(host.store);
|
|
7763
|
+
if (panel === null) return;
|
|
7764
|
+
callback.current(panel);
|
|
7765
|
+
}, [at, host]);
|
|
7766
|
+
}
|
|
7767
|
+
|
|
7768
|
+
// src/core/reactions.ts
|
|
7769
|
+
var MEET_REACTIONS = ["\u{1F496}", "\u{1F44D}", "\u{1F389}", "\u{1F44F}", "\u{1F602}", "\u{1F62E}", "\u{1F622}", "\u{1F914}", "\u{1F44E}"];
|
|
7770
|
+
|
|
7771
|
+
// src/react/facade.ts
|
|
7772
|
+
function useMeetCore() {
|
|
7773
|
+
const host = useMeetHost();
|
|
7774
|
+
const snapshot = useMeetSnapshot();
|
|
7775
|
+
const devices = useDeviceSnapshot();
|
|
7776
|
+
const role = useRole();
|
|
7777
|
+
const isHost = useIsHost();
|
|
7778
|
+
const observation = useCoreObservation();
|
|
7779
|
+
return useMemo4(
|
|
7780
|
+
() => ({ host, snapshot, devices, role, isHost, observation }),
|
|
7781
|
+
[host, snapshot, devices, role, isHost, observation]
|
|
7782
|
+
);
|
|
7783
|
+
}
|
|
7784
|
+
|
|
7785
|
+
// src/skins/meet/components.tsx
|
|
7786
|
+
import { Alert, AlertDescription, Button, Checkbox, ErrorBox, Label, SegmentedControl, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ai-matrx/design-system";
|
|
7787
|
+
|
|
7788
|
+
// src/skins/meet/collab.tsx
|
|
7789
|
+
import { useEffect as useEffect5, useRef as useRef5, useState as useState3 } from "react";
|
|
7485
7790
|
|
|
7486
|
-
// src/
|
|
7487
|
-
import { jsx as
|
|
7791
|
+
// src/skins/meet/icons.tsx
|
|
7792
|
+
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
7488
7793
|
function Icon({ children, ...props }) {
|
|
7489
|
-
return /* @__PURE__ */
|
|
7794
|
+
return /* @__PURE__ */ jsx3(
|
|
7490
7795
|
"svg",
|
|
7491
7796
|
{
|
|
7492
7797
|
width: "20",
|
|
@@ -7506,255 +7811,214 @@ function Icon({ children, ...props }) {
|
|
|
7506
7811
|
}
|
|
7507
7812
|
function MicIcon(props) {
|
|
7508
7813
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7509
|
-
/* @__PURE__ */
|
|
7510
|
-
/* @__PURE__ */
|
|
7511
|
-
/* @__PURE__ */
|
|
7814
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
|
|
7815
|
+
/* @__PURE__ */ jsx3("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
|
|
7816
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 19v3" })
|
|
7512
7817
|
] });
|
|
7513
7818
|
}
|
|
7514
7819
|
function MicOffIcon(props) {
|
|
7515
7820
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7516
|
-
/* @__PURE__ */
|
|
7517
|
-
/* @__PURE__ */
|
|
7518
|
-
/* @__PURE__ */
|
|
7519
|
-
/* @__PURE__ */
|
|
7520
|
-
/* @__PURE__ */
|
|
7821
|
+
/* @__PURE__ */ jsx3("path", { d: "M2 2l20 20" }),
|
|
7822
|
+
/* @__PURE__ */ jsx3("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
|
|
7823
|
+
/* @__PURE__ */ jsx3("path", { d: "M15 9.34V5a3 3 0 0 0-5.94-.6" }),
|
|
7824
|
+
/* @__PURE__ */ jsx3("path", { d: "M19 10v2a7 7 0 0 1-.11 1.23M5 10v2a7 7 0 0 0 11 5.66" }),
|
|
7825
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 19v3" })
|
|
7521
7826
|
] });
|
|
7522
7827
|
}
|
|
7523
7828
|
function CameraIcon(props) {
|
|
7524
7829
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7525
|
-
/* @__PURE__ */
|
|
7526
|
-
/* @__PURE__ */
|
|
7830
|
+
/* @__PURE__ */ jsx3("path", { d: "m23 7-7 5 7 5V7Z" }),
|
|
7831
|
+
/* @__PURE__ */ jsx3("rect", { x: "1", y: "5", width: "15", height: "14", rx: "2" })
|
|
7527
7832
|
] });
|
|
7528
7833
|
}
|
|
7529
7834
|
function CameraOffIcon(props) {
|
|
7530
7835
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7531
|
-
/* @__PURE__ */
|
|
7532
|
-
/* @__PURE__ */
|
|
7533
|
-
/* @__PURE__ */
|
|
7836
|
+
/* @__PURE__ */ jsx3("path", { d: "M2 2l20 20" }),
|
|
7837
|
+
/* @__PURE__ */ jsx3("path", { d: "M10.66 5H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10" }),
|
|
7838
|
+
/* @__PURE__ */ jsx3("path", { d: "M16 16a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2" })
|
|
7534
7839
|
] });
|
|
7535
7840
|
}
|
|
7536
7841
|
function ScreenShareIcon(props) {
|
|
7537
7842
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7538
|
-
/* @__PURE__ */
|
|
7539
|
-
/* @__PURE__ */
|
|
7540
|
-
/* @__PURE__ */
|
|
7843
|
+
/* @__PURE__ */ jsx3("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2" }),
|
|
7844
|
+
/* @__PURE__ */ jsx3("path", { d: "M8 21h8M12 17v4" }),
|
|
7845
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 13V8m0 0-2.5 2.5M12 8l2.5 2.5" })
|
|
7541
7846
|
] });
|
|
7542
7847
|
}
|
|
7543
7848
|
function PhoneIcon(props) {
|
|
7544
|
-
return /* @__PURE__ */
|
|
7849
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z" }) });
|
|
7545
7850
|
}
|
|
7546
7851
|
function PhoneOffIcon(props) {
|
|
7547
|
-
return /* @__PURE__ */
|
|
7852
|
+
return /* @__PURE__ */ jsx3(Icon, { fill: "currentColor", stroke: "none", ...props, children: /* @__PURE__ */ jsx3("path", { d: "M12 9c-1.6 0-3.15.25-4.6.72v3.1c0 .39-.23.74-.56.9-.98.49-1.87 1.12-2.66 1.85-.18.18-.43.28-.7.28-.28 0-.53-.11-.71-.29L.29 13.08a.99.99 0 0 1-.29-.7c0-.28.11-.53.29-.71C3.34 8.78 7.46 7 12 7s8.66 1.78 11.71 4.67c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2.48 2.48c-.18.18-.43.29-.71.29-.27 0-.52-.11-.7-.28a11.27 11.27 0 0 0-2.67-1.85.996.996 0 0 1-.56-.9v-3.1C15.15 9.25 13.6 9 12 9Z" }) });
|
|
7548
7853
|
}
|
|
7549
7854
|
function HandIcon(props) {
|
|
7550
7855
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7551
|
-
/* @__PURE__ */
|
|
7552
|
-
/* @__PURE__ */
|
|
7553
|
-
/* @__PURE__ */
|
|
7554
|
-
/* @__PURE__ */
|
|
7856
|
+
/* @__PURE__ */ jsx3("path", { d: "M18 11V6a2 2 0 0 0-4 0v5" }),
|
|
7857
|
+
/* @__PURE__ */ jsx3("path", { d: "M14 10V4a2 2 0 0 0-4 0v7" }),
|
|
7858
|
+
/* @__PURE__ */ jsx3("path", { d: "M10 10.5V6a2 2 0 0 0-4 0v8" }),
|
|
7859
|
+
/* @__PURE__ */ jsx3("path", { d: "M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2a8 8 0 0 1-8-8v-1a2 2 0 1 1 4 0" })
|
|
7555
7860
|
] });
|
|
7556
7861
|
}
|
|
7557
7862
|
function ChatIcon(props) {
|
|
7558
|
-
return /* @__PURE__ */
|
|
7863
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z" }) });
|
|
7559
7864
|
}
|
|
7560
7865
|
function PeopleIcon(props) {
|
|
7561
7866
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7562
|
-
/* @__PURE__ */
|
|
7563
|
-
/* @__PURE__ */
|
|
7564
|
-
/* @__PURE__ */
|
|
7867
|
+
/* @__PURE__ */ jsx3("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
|
|
7868
|
+
/* @__PURE__ */ jsx3("circle", { cx: "9", cy: "7", r: "4" }),
|
|
7869
|
+
/* @__PURE__ */ jsx3("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" })
|
|
7565
7870
|
] });
|
|
7566
7871
|
}
|
|
7567
7872
|
function RecordIcon(props) {
|
|
7568
|
-
return /* @__PURE__ */
|
|
7873
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
|
|
7569
7874
|
}
|
|
7570
7875
|
function SparklesIcon(props) {
|
|
7571
7876
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7572
|
-
/* @__PURE__ */
|
|
7573
|
-
/* @__PURE__ */
|
|
7877
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 3l1.9 4.6L18.5 9.5l-4.6 1.9L12 16l-1.9-4.6L5.5 9.5l4.6-1.9L12 3Z" }),
|
|
7878
|
+
/* @__PURE__ */ jsx3("path", { d: "M19 15l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9L19 15Z" })
|
|
7574
7879
|
] });
|
|
7575
7880
|
}
|
|
7576
7881
|
function LockIcon(props) {
|
|
7577
7882
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7578
|
-
/* @__PURE__ */
|
|
7579
|
-
/* @__PURE__ */
|
|
7580
|
-
] });
|
|
7581
|
-
}
|
|
7582
|
-
function LayoutIcon(props) {
|
|
7583
|
-
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7584
|
-
/* @__PURE__ */ jsx2("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
7585
|
-
/* @__PURE__ */ jsx2("path", { d: "M3 9h18M9 21V9" })
|
|
7883
|
+
/* @__PURE__ */ jsx3("rect", { x: "4", y: "10", width: "16", height: "11", rx: "2" }),
|
|
7884
|
+
/* @__PURE__ */ jsx3("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
|
|
7586
7885
|
] });
|
|
7587
7886
|
}
|
|
7588
7887
|
function SettingsIcon(props) {
|
|
7589
7888
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7590
|
-
/* @__PURE__ */
|
|
7591
|
-
/* @__PURE__ */
|
|
7889
|
+
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "3" }),
|
|
7890
|
+
/* @__PURE__ */ jsx3("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.6a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z" })
|
|
7592
7891
|
] });
|
|
7593
7892
|
}
|
|
7594
7893
|
function CheckIcon(props) {
|
|
7595
|
-
return /* @__PURE__ */
|
|
7894
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M20 6 9 17l-5-5" }) });
|
|
7596
7895
|
}
|
|
7597
7896
|
function CloseIcon(props) {
|
|
7598
|
-
return /* @__PURE__ */
|
|
7897
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M18 6 6 18M6 6l12 12" }) });
|
|
7599
7898
|
}
|
|
7600
7899
|
function PinIcon(props) {
|
|
7601
7900
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7602
|
-
/* @__PURE__ */
|
|
7603
|
-
/* @__PURE__ */
|
|
7604
|
-
] });
|
|
7605
|
-
}
|
|
7606
|
-
function WifiLowIcon(props) {
|
|
7607
|
-
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7608
|
-
/* @__PURE__ */ jsx2("path", { d: "M12 20h.01" }),
|
|
7609
|
-
/* @__PURE__ */ jsx2("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
|
|
7901
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 17v5" }),
|
|
7902
|
+
/* @__PURE__ */ jsx3("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
|
|
7610
7903
|
] });
|
|
7611
7904
|
}
|
|
7612
7905
|
function SmileIcon(props) {
|
|
7613
7906
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7614
|
-
/* @__PURE__ */
|
|
7615
|
-
/* @__PURE__ */
|
|
7616
|
-
/* @__PURE__ */
|
|
7617
|
-
/* @__PURE__ */
|
|
7907
|
+
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "10" }),
|
|
7908
|
+
/* @__PURE__ */ jsx3("path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }),
|
|
7909
|
+
/* @__PURE__ */ jsx3("line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }),
|
|
7910
|
+
/* @__PURE__ */ jsx3("line", { x1: "15", x2: "15.01", y1: "9", y2: "9" })
|
|
7618
7911
|
] });
|
|
7619
7912
|
}
|
|
7620
7913
|
function MoreIcon(props) {
|
|
7621
7914
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7622
|
-
/* @__PURE__ */
|
|
7623
|
-
/* @__PURE__ */
|
|
7624
|
-
/* @__PURE__ */
|
|
7915
|
+
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "1" }),
|
|
7916
|
+
/* @__PURE__ */ jsx3("circle", { cx: "19", cy: "12", r: "1" }),
|
|
7917
|
+
/* @__PURE__ */ jsx3("circle", { cx: "5", cy: "12", r: "1" })
|
|
7625
7918
|
] });
|
|
7626
7919
|
}
|
|
7627
7920
|
function SearchIcon(props) {
|
|
7628
7921
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7629
|
-
/* @__PURE__ */
|
|
7630
|
-
/* @__PURE__ */
|
|
7922
|
+
/* @__PURE__ */ jsx3("circle", { cx: "11", cy: "11", r: "8" }),
|
|
7923
|
+
/* @__PURE__ */ jsx3("path", { d: "m21 21-4.3-4.3" })
|
|
7631
7924
|
] });
|
|
7632
7925
|
}
|
|
7633
7926
|
function KeyboardIcon(props) {
|
|
7634
7927
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7635
|
-
/* @__PURE__ */
|
|
7636
|
-
/* @__PURE__ */
|
|
7928
|
+
/* @__PURE__ */ jsx3("path", { d: "M10 8h.01M12 12h.01M14 8h.01M16 12h.01M18 8h.01M6 8h.01M7 16h10M8 12h.01" }),
|
|
7929
|
+
/* @__PURE__ */ jsx3("rect", { width: "20", height: "16", x: "2", y: "4", rx: "2" })
|
|
7637
7930
|
] });
|
|
7638
7931
|
}
|
|
7639
7932
|
function SpotlightIcon(props) {
|
|
7640
|
-
return /* @__PURE__ */
|
|
7933
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M12 2 15 8.5 22 9.3 17 14 18.2 21 12 17.6 5.8 21 7 14 2 9.3 9 8.5Z" }) });
|
|
7641
7934
|
}
|
|
7642
7935
|
function SignalIcon({ bars, ...props }) {
|
|
7643
7936
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7644
|
-
/* @__PURE__ */
|
|
7645
|
-
/* @__PURE__ */
|
|
7646
|
-
/* @__PURE__ */
|
|
7647
|
-
/* @__PURE__ */
|
|
7937
|
+
/* @__PURE__ */ jsx3("path", { d: "M4 20v-2", opacity: bars >= 1 ? 1 : 0.3 }),
|
|
7938
|
+
/* @__PURE__ */ jsx3("path", { d: "M10 20v-6", opacity: bars >= 2 ? 1 : 0.3 }),
|
|
7939
|
+
/* @__PURE__ */ jsx3("path", { d: "M16 20V9", opacity: bars >= 3 ? 1 : 0.3 }),
|
|
7940
|
+
/* @__PURE__ */ jsx3("path", { d: "M22 20V4", opacity: bars >= 3 ? 1 : 0.3 })
|
|
7648
7941
|
] });
|
|
7649
7942
|
}
|
|
7650
7943
|
function SpeakerIcon(props) {
|
|
7651
7944
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7652
|
-
/* @__PURE__ */
|
|
7653
|
-
/* @__PURE__ */
|
|
7654
|
-
/* @__PURE__ */
|
|
7945
|
+
/* @__PURE__ */ jsx3("path", { d: "M11 5 6 9H2v6h4l5 4V5Z" }),
|
|
7946
|
+
/* @__PURE__ */ jsx3("path", { d: "M15.54 8.46a5 5 0 0 1 0 7.07" }),
|
|
7947
|
+
/* @__PURE__ */ jsx3("path", { d: "M19.07 4.93a10 10 0 0 1 0 14.14" })
|
|
7655
7948
|
] });
|
|
7656
7949
|
}
|
|
7657
7950
|
function FlagIcon(props) {
|
|
7658
7951
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7659
|
-
/* @__PURE__ */
|
|
7660
|
-
/* @__PURE__ */
|
|
7952
|
+
/* @__PURE__ */ jsx3("path", { d: "M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z" }),
|
|
7953
|
+
/* @__PURE__ */ jsx3("line", { x1: "4", x2: "4", y1: "22", y2: "15" })
|
|
7661
7954
|
] });
|
|
7662
7955
|
}
|
|
7663
7956
|
function PencilIcon(props) {
|
|
7664
|
-
return /* @__PURE__ */
|
|
7957
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" }) });
|
|
7665
7958
|
}
|
|
7666
7959
|
function ActivitiesIcon(props) {
|
|
7667
7960
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7668
|
-
/* @__PURE__ */
|
|
7669
|
-
/* @__PURE__ */
|
|
7670
|
-
/* @__PURE__ */
|
|
7961
|
+
/* @__PURE__ */ jsx3("path", { d: "M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z" }),
|
|
7962
|
+
/* @__PURE__ */ jsx3("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
|
|
7963
|
+
/* @__PURE__ */ jsx3("circle", { cx: "17.5", cy: "17.5", r: "3.5" })
|
|
7671
7964
|
] });
|
|
7672
7965
|
}
|
|
7673
7966
|
function PollIcon(props) {
|
|
7674
7967
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7675
|
-
/* @__PURE__ */
|
|
7676
|
-
/* @__PURE__ */
|
|
7677
|
-
/* @__PURE__ */
|
|
7968
|
+
/* @__PURE__ */ jsx3("line", { x1: "18", x2: "18", y1: "20", y2: "10" }),
|
|
7969
|
+
/* @__PURE__ */ jsx3("line", { x1: "12", x2: "12", y1: "20", y2: "4" }),
|
|
7970
|
+
/* @__PURE__ */ jsx3("line", { x1: "6", x2: "6", y1: "20", y2: "14" })
|
|
7678
7971
|
] });
|
|
7679
7972
|
}
|
|
7680
7973
|
function QuestionIcon(props) {
|
|
7681
7974
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7682
|
-
/* @__PURE__ */
|
|
7683
|
-
/* @__PURE__ */
|
|
7684
|
-
/* @__PURE__ */
|
|
7975
|
+
/* @__PURE__ */ jsx3("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z" }),
|
|
7976
|
+
/* @__PURE__ */ jsx3("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
|
|
7977
|
+
/* @__PURE__ */ jsx3("path", { d: "M12 17h.01" })
|
|
7685
7978
|
] });
|
|
7686
7979
|
}
|
|
7687
7980
|
function WhiteboardIcon(props) {
|
|
7688
7981
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7689
|
-
/* @__PURE__ */
|
|
7690
|
-
/* @__PURE__ */
|
|
7691
|
-
/* @__PURE__ */
|
|
7982
|
+
/* @__PURE__ */ jsx3("path", { d: "M2 3h20" }),
|
|
7983
|
+
/* @__PURE__ */ jsx3("path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" }),
|
|
7984
|
+
/* @__PURE__ */ jsx3("path", { d: "m7 21 5-5 5 5" })
|
|
7692
7985
|
] });
|
|
7693
7986
|
}
|
|
7694
7987
|
function BreakoutIcon(props) {
|
|
7695
7988
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7696
|
-
/* @__PURE__ */
|
|
7697
|
-
/* @__PURE__ */
|
|
7698
|
-
/* @__PURE__ */
|
|
7989
|
+
/* @__PURE__ */ jsx3("rect", { width: "7", height: "18", x: "3", y: "3", rx: "1" }),
|
|
7990
|
+
/* @__PURE__ */ jsx3("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }),
|
|
7991
|
+
/* @__PURE__ */ jsx3("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })
|
|
7699
7992
|
] });
|
|
7700
7993
|
}
|
|
7701
7994
|
function UpvoteIcon(props) {
|
|
7702
|
-
return /* @__PURE__ */
|
|
7995
|
+
return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
|
|
7703
7996
|
}
|
|
7704
7997
|
function EraserIcon(props) {
|
|
7705
7998
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7706
|
-
/* @__PURE__ */
|
|
7707
|
-
/* @__PURE__ */
|
|
7708
|
-
/* @__PURE__ */
|
|
7999
|
+
/* @__PURE__ */ jsx3("path", { d: "m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21" }),
|
|
8000
|
+
/* @__PURE__ */ jsx3("path", { d: "M22 21H7" }),
|
|
8001
|
+
/* @__PURE__ */ jsx3("path", { d: "m5 11 9 9" })
|
|
7709
8002
|
] });
|
|
7710
8003
|
}
|
|
7711
8004
|
function HighlighterIcon(props) {
|
|
7712
8005
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7713
|
-
/* @__PURE__ */
|
|
7714
|
-
/* @__PURE__ */
|
|
8006
|
+
/* @__PURE__ */ jsx3("path", { d: "m9 11-6 6v3h9l3-3" }),
|
|
8007
|
+
/* @__PURE__ */ jsx3("path", { d: "m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4" })
|
|
7715
8008
|
] });
|
|
7716
8009
|
}
|
|
7717
8010
|
function UndoIcon(props) {
|
|
7718
8011
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7719
|
-
/* @__PURE__ */
|
|
7720
|
-
/* @__PURE__ */
|
|
8012
|
+
/* @__PURE__ */ jsx3("path", { d: "M9 14 4 9l5-5" }),
|
|
8013
|
+
/* @__PURE__ */ jsx3("path", { d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11" })
|
|
7721
8014
|
] });
|
|
7722
8015
|
}
|
|
7723
8016
|
|
|
7724
|
-
// src/
|
|
7725
|
-
import { jsx as
|
|
7726
|
-
function useCollab() {
|
|
7727
|
-
const host = useMeetHost();
|
|
7728
|
-
const snapshot = useMeetSnapshot();
|
|
7729
|
-
const isHost = useIsHost();
|
|
7730
|
-
return {
|
|
7731
|
-
collab: snapshot?.collab ?? null,
|
|
7732
|
-
isHost,
|
|
7733
|
-
localIdentity: snapshot?.localIdentity ?? null,
|
|
7734
|
-
breakoutRoomId: snapshot?.breakoutRoomId ?? null,
|
|
7735
|
-
async act(request) {
|
|
7736
|
-
if (host === null) return { ok: false, message: "This meeting is not connected." };
|
|
7737
|
-
try {
|
|
7738
|
-
const result = await host.inRoom.collab(request);
|
|
7739
|
-
return { ok: true, message: result.message, itemId: result.itemId };
|
|
7740
|
-
} catch (error) {
|
|
7741
|
-
return { ok: false, message: error.message ?? "That did not work." };
|
|
7742
|
-
}
|
|
7743
|
-
},
|
|
7744
|
-
async moveTo(roomId) {
|
|
7745
|
-
if (host === null) return { ok: false, message: "This meeting is not connected." };
|
|
7746
|
-
try {
|
|
7747
|
-
await host.engine.moveToBreakout(roomId);
|
|
7748
|
-
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
7749
|
-
} catch (error) {
|
|
7750
|
-
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
7751
|
-
}
|
|
7752
|
-
}
|
|
7753
|
-
};
|
|
7754
|
-
}
|
|
8017
|
+
// src/skins/meet/collab.tsx
|
|
8018
|
+
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
7755
8019
|
function useNotice() {
|
|
7756
8020
|
const [notice, setNotice] = useState3(null);
|
|
7757
|
-
|
|
8021
|
+
useEffect5(() => {
|
|
7758
8022
|
if (notice === null) return void 0;
|
|
7759
8023
|
const timer = setTimeout(() => setNotice(null), notice.failed ? 7e3 : 3e3);
|
|
7760
8024
|
return () => clearTimeout(timer);
|
|
@@ -7763,7 +8027,7 @@ function useNotice() {
|
|
|
7763
8027
|
}
|
|
7764
8028
|
function Notice({ notice }) {
|
|
7765
8029
|
if (notice === null) return null;
|
|
7766
|
-
return /* @__PURE__ */
|
|
8030
|
+
return /* @__PURE__ */ jsx4("p", { className: notice.failed ? "mx-meet__panel-note mx-meet__collab-error" : "mx-meet__panel-note", role: "status", children: notice.text });
|
|
7767
8031
|
}
|
|
7768
8032
|
var ACTIVITY_LABELS = {
|
|
7769
8033
|
polls: "Polls",
|
|
@@ -7773,28 +8037,10 @@ var ACTIVITY_LABELS = {
|
|
|
7773
8037
|
};
|
|
7774
8038
|
function ActivityIcon({ panel }) {
|
|
7775
8039
|
const props = { width: 16, height: 16 };
|
|
7776
|
-
if (panel === "polls") return /* @__PURE__ */
|
|
7777
|
-
if (panel === "qa") return /* @__PURE__ */
|
|
7778
|
-
if (panel === "whiteboard") return /* @__PURE__ */
|
|
7779
|
-
return /* @__PURE__ */
|
|
7780
|
-
}
|
|
7781
|
-
function useAvailableActivities() {
|
|
7782
|
-
const { collab, isHost } = useCollab();
|
|
7783
|
-
const settings = collab?.settings ?? null;
|
|
7784
|
-
if (settings === null) return [];
|
|
7785
|
-
const out = [];
|
|
7786
|
-
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
7787
|
-
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
7788
|
-
if (settings.qaEnabled) out.push("qa");
|
|
7789
|
-
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
7790
|
-
return out;
|
|
7791
|
-
}
|
|
7792
|
-
function useActivityAttention() {
|
|
7793
|
-
const { collab, isHost } = useCollab();
|
|
7794
|
-
if (collab === null) return false;
|
|
7795
|
-
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
7796
|
-
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
7797
|
-
return false;
|
|
8040
|
+
if (panel === "polls") return /* @__PURE__ */ jsx4(PollIcon, { ...props });
|
|
8041
|
+
if (panel === "qa") return /* @__PURE__ */ jsx4(QuestionIcon, { ...props });
|
|
8042
|
+
if (panel === "whiteboard") return /* @__PURE__ */ jsx4(WhiteboardIcon, { ...props });
|
|
8043
|
+
return /* @__PURE__ */ jsx4(BreakoutIcon, { ...props });
|
|
7798
8044
|
}
|
|
7799
8045
|
function ActivitiesControl({
|
|
7800
8046
|
active,
|
|
@@ -7806,10 +8052,10 @@ function ActivitiesControl({
|
|
|
7806
8052
|
if (available.length === 0) return null;
|
|
7807
8053
|
return /* @__PURE__ */ jsxs2("span", { className: "mx-meet__anchor", children: [
|
|
7808
8054
|
/* @__PURE__ */ jsxs2(ControlButton, { label: "Activities", active: open || active !== null, onClick: () => setOpen(!open), children: [
|
|
7809
|
-
/* @__PURE__ */
|
|
7810
|
-
attention ? /* @__PURE__ */
|
|
8055
|
+
/* @__PURE__ */ jsx4(ActivitiesIcon, {}),
|
|
8056
|
+
attention ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
7811
8057
|
] }),
|
|
7812
|
-
open ? /* @__PURE__ */
|
|
8058
|
+
open ? /* @__PURE__ */ jsx4(Popover, { label: "Activities", onClose: () => setOpen(false), children: /* @__PURE__ */ jsx4("div", { className: "mx-meet__menu", role: "menu", children: available.map((panel) => /* @__PURE__ */ jsxs2(
|
|
7813
8059
|
MenuItem,
|
|
7814
8060
|
{
|
|
7815
8061
|
onSelect: () => {
|
|
@@ -7817,7 +8063,7 @@ function ActivitiesControl({
|
|
|
7817
8063
|
onOpen(panel);
|
|
7818
8064
|
},
|
|
7819
8065
|
children: [
|
|
7820
|
-
/* @__PURE__ */
|
|
8066
|
+
/* @__PURE__ */ jsx4(ActivityIcon, { panel }),
|
|
7821
8067
|
" ",
|
|
7822
8068
|
ACTIVITY_LABELS[panel]
|
|
7823
8069
|
]
|
|
@@ -7865,8 +8111,8 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
7865
8111
|
},
|
|
7866
8112
|
children: [
|
|
7867
8113
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
7868
|
-
/* @__PURE__ */
|
|
7869
|
-
/* @__PURE__ */
|
|
8114
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Question" }),
|
|
8115
|
+
/* @__PURE__ */ jsx4(
|
|
7870
8116
|
"input",
|
|
7871
8117
|
{
|
|
7872
8118
|
className: "mx-meet__input",
|
|
@@ -7879,7 +8125,7 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
7879
8125
|
)
|
|
7880
8126
|
] }),
|
|
7881
8127
|
options.map((option, index) => /* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
|
|
7882
|
-
/* @__PURE__ */
|
|
8128
|
+
/* @__PURE__ */ jsx4(
|
|
7883
8129
|
"input",
|
|
7884
8130
|
{
|
|
7885
8131
|
className: "mx-meet__input",
|
|
@@ -7890,22 +8136,22 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
7890
8136
|
onChange: (event) => setOptions(options.map((o, i) => i === index ? event.target.value : o))
|
|
7891
8137
|
}
|
|
7892
8138
|
),
|
|
7893
|
-
options.length > 2 ? /* @__PURE__ */
|
|
8139
|
+
options.length > 2 ? /* @__PURE__ */ jsx4(ControlButton, { label: `Remove answer ${index + 1}`, onClick: () => setOptions(options.filter((_, i) => i !== index)), children: /* @__PURE__ */ jsx4(CloseIcon, { width: 14, height: 14 }) }) : null
|
|
7894
8140
|
] }, index)),
|
|
7895
|
-
options.length < maxOptions ? /* @__PURE__ */
|
|
8141
|
+
options.length < maxOptions ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
|
|
7896
8142
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
7897
|
-
/* @__PURE__ */
|
|
8143
|
+
/* @__PURE__ */ jsx4("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
|
|
7898
8144
|
"People can pick more than one"
|
|
7899
8145
|
] }),
|
|
7900
8146
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
7901
|
-
/* @__PURE__ */
|
|
8147
|
+
/* @__PURE__ */ jsx4("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
|
|
7902
8148
|
"Anonymous \u2014 nobody sees who picked what"
|
|
7903
8149
|
] }),
|
|
7904
|
-
/* @__PURE__ */
|
|
8150
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
7905
8151
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
7906
|
-
/* @__PURE__ */
|
|
7907
|
-
/* @__PURE__ */
|
|
7908
|
-
/* @__PURE__ */
|
|
8152
|
+
/* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__primary mx-meet__primary--small", disabled: !ready || busy, children: "Launch" }),
|
|
8153
|
+
/* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", disabled: !ready || busy, onClick: () => void save(false), children: "Save draft" }),
|
|
8154
|
+
/* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: onDone, children: "Cancel" })
|
|
7909
8155
|
] })
|
|
7910
8156
|
]
|
|
7911
8157
|
}
|
|
@@ -7915,7 +8161,7 @@ function PollCard({ poll }) {
|
|
|
7915
8161
|
const { act, isHost } = useCollab();
|
|
7916
8162
|
const [picked, setPicked] = useState3(poll.myVote.slice());
|
|
7917
8163
|
const [notice, show] = useNotice();
|
|
7918
|
-
|
|
8164
|
+
useEffect5(() => setPicked(poll.myVote.slice()), [poll.myVote]);
|
|
7919
8165
|
const counts = poll.options.some((o) => o.votes !== void 0);
|
|
7920
8166
|
const total = poll.options.reduce((sum, o) => sum + (o.votes ?? 0), 0);
|
|
7921
8167
|
const canVote = poll.state === "live";
|
|
@@ -7927,8 +8173,8 @@ function PollCard({ poll }) {
|
|
|
7927
8173
|
};
|
|
7928
8174
|
return /* @__PURE__ */ jsxs2("article", { className: "mx-meet__collab-card", "aria-label": poll.question, children: [
|
|
7929
8175
|
/* @__PURE__ */ jsxs2("header", { className: "mx-meet__collab-head", children: [
|
|
7930
|
-
/* @__PURE__ */
|
|
7931
|
-
/* @__PURE__ */
|
|
8176
|
+
/* @__PURE__ */ jsx4("strong", { className: "mx-meet__collab-title", children: poll.question }),
|
|
8177
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: stateWord })
|
|
7932
8178
|
] }),
|
|
7933
8179
|
/* @__PURE__ */ jsxs2("p", { className: "mx-meet__panel-note", children: [
|
|
7934
8180
|
poll.multiple ? "Pick any." : "Pick one.",
|
|
@@ -7936,7 +8182,7 @@ function PollCard({ poll }) {
|
|
|
7936
8182
|
counts && poll.voterCount !== null ? ` ${poll.voterCount} voted.` : "",
|
|
7937
8183
|
isHost && poll.state !== "draft" && !poll.resultsShared ? " Results are visible only to hosts." : ""
|
|
7938
8184
|
] }),
|
|
7939
|
-
/* @__PURE__ */
|
|
8185
|
+
/* @__PURE__ */ jsx4("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
|
|
7940
8186
|
const share = counts && total > 0 ? Math.round((option.votes ?? 0) / total * 100) : 0;
|
|
7941
8187
|
const chosen = picked.includes(option.id);
|
|
7942
8188
|
return /* @__PURE__ */ jsxs2("li", { children: [
|
|
@@ -7949,8 +8195,8 @@ function PollCard({ poll }) {
|
|
|
7949
8195
|
disabled: !canVote,
|
|
7950
8196
|
onClick: () => toggle(option.id),
|
|
7951
8197
|
children: [
|
|
7952
|
-
counts ? /* @__PURE__ */
|
|
7953
|
-
/* @__PURE__ */
|
|
8198
|
+
counts ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-bar", style: { width: `${share}%` }, "aria-hidden": "true" }) : null,
|
|
8199
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-text", children: option.text }),
|
|
7954
8200
|
counts ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__poll-count", children: [
|
|
7955
8201
|
option.votes ?? 0,
|
|
7956
8202
|
" \xB7 ",
|
|
@@ -7960,12 +8206,12 @@ function PollCard({ poll }) {
|
|
|
7960
8206
|
]
|
|
7961
8207
|
}
|
|
7962
8208
|
),
|
|
7963
|
-
option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */
|
|
8209
|
+
option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
|
|
7964
8210
|
] }, option.id);
|
|
7965
8211
|
}) }),
|
|
7966
|
-
/* @__PURE__ */
|
|
8212
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
7967
8213
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
7968
|
-
canVote ? /* @__PURE__ */
|
|
8214
|
+
canVote ? /* @__PURE__ */ jsx4(
|
|
7969
8215
|
"button",
|
|
7970
8216
|
{
|
|
7971
8217
|
type: "button",
|
|
@@ -7975,10 +8221,10 @@ function PollCard({ poll }) {
|
|
|
7975
8221
|
children: voted ? "Change vote" : "Vote"
|
|
7976
8222
|
}
|
|
7977
8223
|
) : null,
|
|
7978
|
-
isHost && poll.state === "draft" ? /* @__PURE__ */
|
|
7979
|
-
isHost && poll.state === "live" ? /* @__PURE__ */
|
|
7980
|
-
isHost && poll.state !== "draft" ? /* @__PURE__ */
|
|
7981
|
-
isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */
|
|
8224
|
+
isHost && poll.state === "draft" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => void act({ action: "poll_launch", itemId: poll.id }).then(show), children: "Launch" }) : null,
|
|
8225
|
+
isHost && poll.state === "live" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_close", itemId: poll.id }).then(show), children: "End poll" }) : null,
|
|
8226
|
+
isHost && poll.state !== "draft" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_share", itemId: poll.id }).then(show), children: poll.resultsShared ? "Hide results" : "Share results" }) : null,
|
|
8227
|
+
isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "poll_delete", itemId: poll.id }).then(show), children: "Delete" }) : null
|
|
7982
8228
|
] })
|
|
7983
8229
|
] });
|
|
7984
8230
|
}
|
|
@@ -7989,11 +8235,11 @@ function PollsPanel({ onClose }) {
|
|
|
7989
8235
|
const maxOptions = collab?.settings?.pollMaxOptions ?? 10;
|
|
7990
8236
|
const ordered = [...polls].reverse();
|
|
7991
8237
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Polls", onClose, children: [
|
|
7992
|
-
collab?.error != null ? /* @__PURE__ */
|
|
7993
|
-
isHost && !composing ? /* @__PURE__ */
|
|
7994
|
-
isHost && composing ? /* @__PURE__ */
|
|
7995
|
-
ordered.length === 0 && !composing ? /* @__PURE__ */
|
|
7996
|
-
ordered.map((poll) => /* @__PURE__ */
|
|
8238
|
+
collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
8239
|
+
isHost && !composing ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => setComposing(true), children: "New poll" }) : null,
|
|
8240
|
+
isHost && composing ? /* @__PURE__ */ jsx4(PollComposer, { maxOptions, onDone: () => setComposing(false) }) : null,
|
|
8241
|
+
ordered.length === 0 && !composing ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: isHost ? "No polls yet. Polls and their results are kept with the meeting." : "No polls yet." }) : null,
|
|
8242
|
+
ordered.map((poll) => /* @__PURE__ */ jsx4(PollCard, { poll }, poll.id))
|
|
7997
8243
|
] });
|
|
7998
8244
|
}
|
|
7999
8245
|
function QuestionCard({ question }) {
|
|
@@ -8013,18 +8259,18 @@ function QuestionCard({ question }) {
|
|
|
8013
8259
|
disabled: question.state === "dismissed",
|
|
8014
8260
|
onClick: () => void act({ action: "question_upvote", itemId: question.id }).then((r) => r.ok ? void 0 : show(r)),
|
|
8015
8261
|
children: [
|
|
8016
|
-
/* @__PURE__ */
|
|
8017
|
-
/* @__PURE__ */
|
|
8262
|
+
/* @__PURE__ */ jsx4(UpvoteIcon, { width: 16, height: 16 }),
|
|
8263
|
+
/* @__PURE__ */ jsx4("span", { children: question.upvotes })
|
|
8018
8264
|
]
|
|
8019
8265
|
}
|
|
8020
8266
|
),
|
|
8021
8267
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__question-body", children: [
|
|
8022
8268
|
/* @__PURE__ */ jsxs2("span", { className: "mx-meet__chat-meta", children: [
|
|
8023
|
-
/* @__PURE__ */
|
|
8024
|
-
question.mine && question.anonymous ? /* @__PURE__ */
|
|
8025
|
-
question.state !== "open" ? /* @__PURE__ */
|
|
8269
|
+
/* @__PURE__ */ jsx4("strong", { children: question.mine ? "You" : question.askerName }),
|
|
8270
|
+
question.mine && question.anonymous ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__chat-private", children: "anonymous" }) : null,
|
|
8271
|
+
question.state !== "open" ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: question.state === "answered" ? "Answered" : "Dismissed" }) : null
|
|
8026
8272
|
] }),
|
|
8027
|
-
/* @__PURE__ */
|
|
8273
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__chat-text", children: question.text }),
|
|
8028
8274
|
question.answer !== null ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__question-answer", children: [
|
|
8029
8275
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
8030
8276
|
question.answeredByName ?? "Host",
|
|
@@ -8050,7 +8296,7 @@ function QuestionCard({ question }) {
|
|
|
8050
8296
|
});
|
|
8051
8297
|
},
|
|
8052
8298
|
children: [
|
|
8053
|
-
/* @__PURE__ */
|
|
8299
|
+
/* @__PURE__ */ jsx4(
|
|
8054
8300
|
"input",
|
|
8055
8301
|
{
|
|
8056
8302
|
className: "mx-meet__input",
|
|
@@ -8062,16 +8308,16 @@ function QuestionCard({ question }) {
|
|
|
8062
8308
|
autoFocus: true
|
|
8063
8309
|
}
|
|
8064
8310
|
),
|
|
8065
|
-
/* @__PURE__ */
|
|
8311
|
+
/* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", children: "Done" })
|
|
8066
8312
|
]
|
|
8067
8313
|
}
|
|
8068
8314
|
) : null,
|
|
8069
|
-
/* @__PURE__ */
|
|
8315
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
8070
8316
|
isHost || question.mine ? /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
8071
|
-
isHost && question.state === "open" && !answering ? /* @__PURE__ */
|
|
8072
|
-
isHost && question.state === "open" ? /* @__PURE__ */
|
|
8073
|
-
isHost && question.state !== "open" ? /* @__PURE__ */
|
|
8074
|
-
question.mine || isHost ? /* @__PURE__ */
|
|
8317
|
+
isHost && question.state === "open" && !answering ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => setAnswering(true), children: "Answer" }) : null,
|
|
8318
|
+
isHost && question.state === "open" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_dismiss", itemId: question.id }).then(show), children: "Dismiss" }) : null,
|
|
8319
|
+
isHost && question.state !== "open" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_reopen", itemId: question.id }).then(show), children: "Reopen" }) : null,
|
|
8320
|
+
question.mine || isHost ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "question_delete", itemId: question.id }).then(show), children: "Delete" }) : null
|
|
8075
8321
|
] }) : null
|
|
8076
8322
|
] });
|
|
8077
8323
|
}
|
|
@@ -8088,7 +8334,7 @@ function QaPanel({ onClose }) {
|
|
|
8088
8334
|
(a, b) => rank(a) !== rank(b) ? rank(a) - rank(b) : order === "popular" ? b.upvotes - a.upvotes || (b.createdAt ?? "").localeCompare(a.createdAt ?? "") : (b.createdAt ?? "").localeCompare(a.createdAt ?? "")
|
|
8089
8335
|
);
|
|
8090
8336
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Q&A", onClose, children: [
|
|
8091
|
-
collab?.error != null ? /* @__PURE__ */
|
|
8337
|
+
collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
8092
8338
|
/* @__PURE__ */ jsxs2(
|
|
8093
8339
|
"form",
|
|
8094
8340
|
{
|
|
@@ -8104,7 +8350,7 @@ function QaPanel({ onClose }) {
|
|
|
8104
8350
|
},
|
|
8105
8351
|
children: [
|
|
8106
8352
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
|
|
8107
|
-
/* @__PURE__ */
|
|
8353
|
+
/* @__PURE__ */ jsx4(
|
|
8108
8354
|
"input",
|
|
8109
8355
|
{
|
|
8110
8356
|
className: "mx-meet__input",
|
|
@@ -8115,17 +8361,17 @@ function QaPanel({ onClose }) {
|
|
|
8115
8361
|
"aria-label": "Ask the host a question"
|
|
8116
8362
|
}
|
|
8117
8363
|
),
|
|
8118
|
-
/* @__PURE__ */
|
|
8364
|
+
/* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
|
|
8119
8365
|
] }),
|
|
8120
8366
|
allowAnonymous ? /* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
8121
|
-
/* @__PURE__ */
|
|
8367
|
+
/* @__PURE__ */ jsx4("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
|
|
8122
8368
|
"Ask anonymously"
|
|
8123
8369
|
] }) : null
|
|
8124
8370
|
]
|
|
8125
8371
|
}
|
|
8126
8372
|
),
|
|
8127
|
-
/* @__PURE__ */
|
|
8128
|
-
questions.length > 1 ? /* @__PURE__ */
|
|
8373
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
8374
|
+
questions.length > 1 ? /* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "Order questions", children: ["popular", "recent"].map((value) => /* @__PURE__ */ jsx4(
|
|
8129
8375
|
"button",
|
|
8130
8376
|
{
|
|
8131
8377
|
type: "button",
|
|
@@ -8136,7 +8382,7 @@ function QaPanel({ onClose }) {
|
|
|
8136
8382
|
},
|
|
8137
8383
|
value
|
|
8138
8384
|
)) }) : null,
|
|
8139
|
-
questions.length === 0 ? /* @__PURE__ */
|
|
8385
|
+
questions.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "No questions yet. Questions are kept with the meeting." }) : /* @__PURE__ */ jsx4("ul", { className: "mx-meet__chat", children: questions.map((question) => /* @__PURE__ */ jsx4(QuestionCard, { question }, question.id)) })
|
|
8140
8386
|
] });
|
|
8141
8387
|
}
|
|
8142
8388
|
var BOARD_W = 1600;
|
|
@@ -8150,7 +8396,7 @@ function strokePath(points) {
|
|
|
8150
8396
|
return `${move} ${rest.map(([x, y]) => `L${(x * BOARD_W).toFixed(1)} ${(y * BOARD_H).toFixed(1)}`).join(" ")}`;
|
|
8151
8397
|
}
|
|
8152
8398
|
function StrokeView({ stroke, onPick }) {
|
|
8153
|
-
return /* @__PURE__ */
|
|
8399
|
+
return /* @__PURE__ */ jsx4(
|
|
8154
8400
|
"path",
|
|
8155
8401
|
{
|
|
8156
8402
|
d: strokePath(stroke.points),
|
|
@@ -8162,7 +8408,7 @@ function StrokeView({ stroke, onPick }) {
|
|
|
8162
8408
|
strokeLinejoin: "round",
|
|
8163
8409
|
onPointerDown: onPick,
|
|
8164
8410
|
style: onPick !== void 0 ? { cursor: "pointer" } : void 0,
|
|
8165
|
-
children: /* @__PURE__ */
|
|
8411
|
+
children: /* @__PURE__ */ jsx4("title", { children: stroke.byName })
|
|
8166
8412
|
}
|
|
8167
8413
|
);
|
|
8168
8414
|
}
|
|
@@ -8173,7 +8419,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8173
8419
|
const [drawing, setDrawing] = useState3(null);
|
|
8174
8420
|
const [pending, setPending] = useState3([]);
|
|
8175
8421
|
const [notice, show] = useNotice();
|
|
8176
|
-
const svgRef =
|
|
8422
|
+
const svgRef = useRef5(null);
|
|
8177
8423
|
const strokes = collab?.strokes ?? [];
|
|
8178
8424
|
const mine = strokes.filter((s) => s.by === localIdentity);
|
|
8179
8425
|
const point = (event) => {
|
|
@@ -8207,12 +8453,12 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8207
8453
|
};
|
|
8208
8454
|
return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__whiteboard", "aria-label": "Whiteboard", children: [
|
|
8209
8455
|
/* @__PURE__ */ jsxs2("header", { className: "mx-meet__whiteboard-bar", children: [
|
|
8210
|
-
/* @__PURE__ */
|
|
8211
|
-
/* @__PURE__ */
|
|
8212
|
-
["pen", "Pen", /* @__PURE__ */
|
|
8213
|
-
["highlighter", "Highlighter", /* @__PURE__ */
|
|
8214
|
-
["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */
|
|
8215
|
-
].map(([value, label, icon]) => /* @__PURE__ */
|
|
8456
|
+
/* @__PURE__ */ jsx4("strong", { className: "mx-meet__panel-title", children: "Whiteboard" }),
|
|
8457
|
+
/* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "Tool", children: [
|
|
8458
|
+
["pen", "Pen", /* @__PURE__ */ jsx4(PencilIcon, { width: 16, height: 16 }, "p")],
|
|
8459
|
+
["highlighter", "Highlighter", /* @__PURE__ */ jsx4(HighlighterIcon, { width: 16, height: 16 }, "h")],
|
|
8460
|
+
["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ jsx4(EraserIcon, { width: 16, height: 16 }, "e")]
|
|
8461
|
+
].map(([value, label, icon]) => /* @__PURE__ */ jsx4(
|
|
8216
8462
|
"button",
|
|
8217
8463
|
{
|
|
8218
8464
|
type: "button",
|
|
@@ -8225,7 +8471,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8225
8471
|
},
|
|
8226
8472
|
value
|
|
8227
8473
|
)) }),
|
|
8228
|
-
/* @__PURE__ */
|
|
8474
|
+
/* @__PURE__ */ jsx4("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ jsx4(
|
|
8229
8475
|
"button",
|
|
8230
8476
|
{
|
|
8231
8477
|
type: "button",
|
|
@@ -8240,7 +8486,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8240
8486
|
},
|
|
8241
8487
|
ink
|
|
8242
8488
|
)) }),
|
|
8243
|
-
/* @__PURE__ */
|
|
8489
|
+
/* @__PURE__ */ jsx4(
|
|
8244
8490
|
ControlButton,
|
|
8245
8491
|
{
|
|
8246
8492
|
label: "Undo my last stroke",
|
|
@@ -8248,14 +8494,14 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8248
8494
|
const last = mine[mine.length - 1];
|
|
8249
8495
|
if (last !== void 0) void act({ action: "stroke_erase", itemId: last.id }).then((r) => r.ok ? void 0 : show(r));
|
|
8250
8496
|
},
|
|
8251
|
-
children: /* @__PURE__ */
|
|
8497
|
+
children: /* @__PURE__ */ jsx4(UndoIcon, { width: 16, height: 16 })
|
|
8252
8498
|
}
|
|
8253
8499
|
),
|
|
8254
|
-
isHost && strokes.length > 0 ? /* @__PURE__ */
|
|
8255
|
-
/* @__PURE__ */
|
|
8256
|
-
/* @__PURE__ */
|
|
8500
|
+
isHost && strokes.length > 0 ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "whiteboard_clear" }).then(show), children: "Clear board" }) : null,
|
|
8501
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__whiteboard-note", children: "Saved with the meeting" }),
|
|
8502
|
+
/* @__PURE__ */ jsx4(ControlButton, { label: "Close whiteboard", onClick: onClose, children: /* @__PURE__ */ jsx4(CloseIcon, { width: 16, height: 16 }) })
|
|
8257
8503
|
] }),
|
|
8258
|
-
/* @__PURE__ */
|
|
8504
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
8259
8505
|
/* @__PURE__ */ jsxs2(
|
|
8260
8506
|
"svg",
|
|
8261
8507
|
{
|
|
@@ -8280,8 +8526,8 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8280
8526
|
onPointerUp: finish,
|
|
8281
8527
|
onPointerCancel: finish,
|
|
8282
8528
|
children: [
|
|
8283
|
-
/* @__PURE__ */
|
|
8284
|
-
strokes.map((stroke) => /* @__PURE__ */
|
|
8529
|
+
/* @__PURE__ */ jsx4("rect", { x: 0, y: 0, width: BOARD_W, height: BOARD_H, className: "mx-meet__board-paper" }),
|
|
8530
|
+
strokes.map((stroke) => /* @__PURE__ */ jsx4(
|
|
8285
8531
|
StrokeView,
|
|
8286
8532
|
{
|
|
8287
8533
|
stroke,
|
|
@@ -8289,8 +8535,8 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8289
8535
|
},
|
|
8290
8536
|
stroke.id
|
|
8291
8537
|
)),
|
|
8292
|
-
pending.map((stroke) => /* @__PURE__ */
|
|
8293
|
-
drawing !== null ? /* @__PURE__ */
|
|
8538
|
+
pending.map((stroke) => /* @__PURE__ */ jsx4(StrokeView, { stroke }, stroke.id)),
|
|
8539
|
+
drawing !== null ? /* @__PURE__ */ jsx4(
|
|
8294
8540
|
StrokeView,
|
|
8295
8541
|
{
|
|
8296
8542
|
stroke: {
|
|
@@ -8315,7 +8561,7 @@ function clock(ms2) {
|
|
|
8315
8561
|
var BREAKOUT_EXPIRE_RETRY_MS = 5e3;
|
|
8316
8562
|
function useNow(active) {
|
|
8317
8563
|
const [now, setNow] = useState3(() => Date.now());
|
|
8318
|
-
|
|
8564
|
+
useEffect5(() => {
|
|
8319
8565
|
if (!active) return void 0;
|
|
8320
8566
|
const timer = setInterval(() => setNow(Date.now()), 1e3);
|
|
8321
8567
|
return () => clearInterval(timer);
|
|
@@ -8347,8 +8593,8 @@ function BreakoutSetup() {
|
|
|
8347
8593
|
const nameOf = (identity) => people.find((p) => p.identity === identity)?.displayName ?? identity;
|
|
8348
8594
|
return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-card", children: [
|
|
8349
8595
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
8350
|
-
/* @__PURE__ */
|
|
8351
|
-
/* @__PURE__ */
|
|
8596
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Rooms" }),
|
|
8597
|
+
/* @__PURE__ */ jsx4(
|
|
8352
8598
|
"input",
|
|
8353
8599
|
{
|
|
8354
8600
|
className: "mx-meet__input",
|
|
@@ -8360,11 +8606,11 @@ function BreakoutSetup() {
|
|
|
8360
8606
|
}
|
|
8361
8607
|
)
|
|
8362
8608
|
] }),
|
|
8363
|
-
/* @__PURE__ */
|
|
8609
|
+
/* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
|
|
8364
8610
|
["auto", "Automatically"],
|
|
8365
8611
|
["manual", "Manually"],
|
|
8366
8612
|
["choose", "Let people choose"]
|
|
8367
|
-
].map(([value, label]) => /* @__PURE__ */
|
|
8613
|
+
].map(([value, label]) => /* @__PURE__ */ jsx4(
|
|
8368
8614
|
"button",
|
|
8369
8615
|
{
|
|
8370
8616
|
type: "button",
|
|
@@ -8376,8 +8622,8 @@ function BreakoutSetup() {
|
|
|
8376
8622
|
value
|
|
8377
8623
|
)) }),
|
|
8378
8624
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
8379
|
-
/* @__PURE__ */
|
|
8380
|
-
/* @__PURE__ */
|
|
8625
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
|
|
8626
|
+
/* @__PURE__ */ jsx4(
|
|
8381
8627
|
"input",
|
|
8382
8628
|
{
|
|
8383
8629
|
className: "mx-meet__input",
|
|
@@ -8389,8 +8635,8 @@ function BreakoutSetup() {
|
|
|
8389
8635
|
}
|
|
8390
8636
|
)
|
|
8391
8637
|
] }),
|
|
8392
|
-
mode === "manual" ? people.length === 0 ? /* @__PURE__ */
|
|
8393
|
-
/* @__PURE__ */
|
|
8638
|
+
mode === "manual" ? people.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Nobody else is in the meeting yet." }) : /* @__PURE__ */ jsx4("ul", { className: "mx-meet__people", children: people.map((person) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
|
|
8639
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__person-name", children: person.displayName }),
|
|
8394
8640
|
/* @__PURE__ */ jsxs2(
|
|
8395
8641
|
"select",
|
|
8396
8642
|
{
|
|
@@ -8399,7 +8645,7 @@ function BreakoutSetup() {
|
|
|
8399
8645
|
value: manual[person.identity] ?? -1,
|
|
8400
8646
|
onChange: (event) => setManual({ ...manual, [person.identity]: Number(event.target.value) }),
|
|
8401
8647
|
children: [
|
|
8402
|
-
/* @__PURE__ */
|
|
8648
|
+
/* @__PURE__ */ jsx4("option", { value: -1, children: "Main room" }),
|
|
8403
8649
|
Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ jsxs2("option", { value: index, children: [
|
|
8404
8650
|
"Room ",
|
|
8405
8651
|
index + 1
|
|
@@ -8407,15 +8653,15 @@ function BreakoutSetup() {
|
|
|
8407
8653
|
]
|
|
8408
8654
|
}
|
|
8409
8655
|
)
|
|
8410
|
-
] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */
|
|
8656
|
+
] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ jsx4("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
8411
8657
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
8412
8658
|
"Room ",
|
|
8413
8659
|
index + 1
|
|
8414
8660
|
] }),
|
|
8415
8661
|
" ",
|
|
8416
|
-
/* @__PURE__ */
|
|
8417
|
-
] }, index)) }) : /* @__PURE__ */
|
|
8418
|
-
/* @__PURE__ */
|
|
8662
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__panel-note", children: members.length === 0 ? "empty" : members.map(nameOf).join(", ") })
|
|
8663
|
+
] }, index)) }) : /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Everyone picks a room from their own screen." }),
|
|
8664
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
8419
8665
|
/* @__PURE__ */ jsxs2(
|
|
8420
8666
|
"button",
|
|
8421
8667
|
{
|
|
@@ -8470,17 +8716,17 @@ function BreakoutRun({ plan }) {
|
|
|
8470
8716
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
8471
8717
|
plan.allowChoose ? " \xB7 people choose their room" : ""
|
|
8472
8718
|
] }),
|
|
8473
|
-
/* @__PURE__ */
|
|
8719
|
+
/* @__PURE__ */ jsx4("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
|
|
8474
8720
|
const here = breakoutRoomId === room.id;
|
|
8475
8721
|
const mayJoin = isHost || plan.allowChoose || mine?.id === room.id;
|
|
8476
8722
|
return /* @__PURE__ */ jsxs2("li", { className: here ? "mx-meet__breakout-room mx-meet__breakout-room--here" : "mx-meet__breakout-room", children: [
|
|
8477
8723
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-head", children: [
|
|
8478
|
-
/* @__PURE__ */
|
|
8479
|
-
here ? /* @__PURE__ */
|
|
8724
|
+
/* @__PURE__ */ jsx4("strong", { children: room.name }),
|
|
8725
|
+
here ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: "You are here" }) : mayJoin ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(room.id), children: "Join" }) : null
|
|
8480
8726
|
] }),
|
|
8481
|
-
/* @__PURE__ */
|
|
8482
|
-
isHost && room.identities.length > 0 ? /* @__PURE__ */
|
|
8483
|
-
/* @__PURE__ */
|
|
8727
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__panel-note", children: room.identities.length === 0 ? "Nobody assigned" : room.identities.map(nameOf).join(", ") }),
|
|
8728
|
+
isHost && room.identities.length > 0 ? /* @__PURE__ */ jsx4("ul", { className: "mx-meet__people", children: room.identities.map((identity) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
|
|
8729
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__person-name", children: nameOf(identity) }),
|
|
8484
8730
|
/* @__PURE__ */ jsxs2(
|
|
8485
8731
|
"select",
|
|
8486
8732
|
{
|
|
@@ -8493,15 +8739,15 @@ function BreakoutRun({ plan }) {
|
|
|
8493
8739
|
roomId: event.target.value === "" ? null : event.target.value
|
|
8494
8740
|
}).then(show),
|
|
8495
8741
|
children: [
|
|
8496
|
-
/* @__PURE__ */
|
|
8497
|
-
plan.rooms.map((option) => /* @__PURE__ */
|
|
8742
|
+
/* @__PURE__ */ jsx4("option", { value: "", children: "Main room" }),
|
|
8743
|
+
plan.rooms.map((option) => /* @__PURE__ */ jsx4("option", { value: option.id, children: option.name }, option.id))
|
|
8498
8744
|
]
|
|
8499
8745
|
}
|
|
8500
8746
|
)
|
|
8501
8747
|
] }, identity)) }) : null
|
|
8502
8748
|
] }, room.id);
|
|
8503
8749
|
}) }),
|
|
8504
|
-
breakoutRoomId !== null ? /* @__PURE__ */
|
|
8750
|
+
breakoutRoomId !== null ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
|
|
8505
8751
|
isHost ? /* @__PURE__ */ jsxs2(
|
|
8506
8752
|
"form",
|
|
8507
8753
|
{
|
|
@@ -8516,7 +8762,7 @@ function BreakoutRun({ plan }) {
|
|
|
8516
8762
|
});
|
|
8517
8763
|
},
|
|
8518
8764
|
children: [
|
|
8519
|
-
/* @__PURE__ */
|
|
8765
|
+
/* @__PURE__ */ jsx4(
|
|
8520
8766
|
"input",
|
|
8521
8767
|
{
|
|
8522
8768
|
className: "mx-meet__input",
|
|
@@ -8527,12 +8773,12 @@ function BreakoutRun({ plan }) {
|
|
|
8527
8773
|
"aria-label": "Message every room"
|
|
8528
8774
|
}
|
|
8529
8775
|
),
|
|
8530
|
-
/* @__PURE__ */
|
|
8776
|
+
/* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
|
|
8531
8777
|
]
|
|
8532
8778
|
}
|
|
8533
8779
|
) : null,
|
|
8534
|
-
/* @__PURE__ */
|
|
8535
|
-
isHost ? /* @__PURE__ */
|
|
8780
|
+
/* @__PURE__ */ jsx4(Notice, { notice }),
|
|
8781
|
+
isHost ? /* @__PURE__ */ jsx4(
|
|
8536
8782
|
"button",
|
|
8537
8783
|
{
|
|
8538
8784
|
type: "button",
|
|
@@ -8547,8 +8793,8 @@ function BreakoutsPanel({ onClose }) {
|
|
|
8547
8793
|
const { collab, isHost } = useCollab();
|
|
8548
8794
|
const plan = collab?.breakout?.state === "open" ? collab.breakout : null;
|
|
8549
8795
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Breakout rooms", onClose, children: [
|
|
8550
|
-
collab?.error != null ? /* @__PURE__ */
|
|
8551
|
-
plan !== null ? /* @__PURE__ */
|
|
8796
|
+
collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
8797
|
+
plan !== null ? /* @__PURE__ */ jsx4(BreakoutRun, { plan }) : isHost ? /* @__PURE__ */ jsx4(BreakoutSetup, {}) : /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Breakout rooms are closed." })
|
|
8552
8798
|
] });
|
|
8553
8799
|
}
|
|
8554
8800
|
function BreakoutBanner() {
|
|
@@ -8561,17 +8807,17 @@ function BreakoutBanner() {
|
|
|
8561
8807
|
const assigned = assignedRoom(open, localIdentity);
|
|
8562
8808
|
const [dismissedBroadcast, setDismissedBroadcast] = useState3(null);
|
|
8563
8809
|
const [failure, setFailure] = useState3(null);
|
|
8564
|
-
const expireAsked =
|
|
8810
|
+
const expireAsked = useRef5(null);
|
|
8565
8811
|
const moveAt = collab?.moveRequest?.at ?? null;
|
|
8566
|
-
|
|
8567
|
-
|
|
8568
|
-
|
|
8569
|
-
|
|
8812
|
+
useEffect5(() => {
|
|
8813
|
+
if (host === null) return;
|
|
8814
|
+
const request = takeMoveRequest(host.store);
|
|
8815
|
+
if (request === null) return;
|
|
8570
8816
|
const here = host.store.snapshot().breakoutRoomId;
|
|
8571
8817
|
if ((here ?? null) === request.roomId) return;
|
|
8572
8818
|
void moveTo(request.roomId).then((result) => setFailure(result.ok ? null : result.message));
|
|
8573
8819
|
}, [moveAt, host, moveTo]);
|
|
8574
|
-
|
|
8820
|
+
useEffect5(() => {
|
|
8575
8821
|
if (open === null || remaining === null || remaining > 0) return;
|
|
8576
8822
|
const asked = expireAsked.current;
|
|
8577
8823
|
if (asked !== null && asked.id === open.id && now - asked.at < BREAKOUT_EXPIRE_RETRY_MS) return;
|
|
@@ -8583,16 +8829,16 @@ function BreakoutBanner() {
|
|
|
8583
8829
|
const room = open?.rooms.find((r) => r.id === breakoutRoomId) ?? null;
|
|
8584
8830
|
if (open === null && failure === null) return null;
|
|
8585
8831
|
return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__breakout-banner", role: "status", children: [
|
|
8586
|
-
failure !== null ? /* @__PURE__ */
|
|
8832
|
+
failure !== null ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-error", children: failure }) : null,
|
|
8587
8833
|
room !== null ? /* @__PURE__ */ jsxs2("span", { children: [
|
|
8588
|
-
/* @__PURE__ */
|
|
8834
|
+
/* @__PURE__ */ jsx4("strong", { children: room.name }),
|
|
8589
8835
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
8590
|
-
/* @__PURE__ */
|
|
8836
|
+
/* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
|
|
8591
8837
|
] }) : assigned !== null ? /* @__PURE__ */ jsxs2("span", { children: [
|
|
8592
8838
|
"You are assigned to ",
|
|
8593
|
-
/* @__PURE__ */
|
|
8839
|
+
/* @__PURE__ */ jsx4("strong", { children: assigned.name }),
|
|
8594
8840
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
8595
|
-
/* @__PURE__ */
|
|
8841
|
+
/* @__PURE__ */ jsx4(
|
|
8596
8842
|
"button",
|
|
8597
8843
|
{
|
|
8598
8844
|
type: "button",
|
|
@@ -8604,7 +8850,7 @@ function BreakoutBanner() {
|
|
|
8604
8850
|
children: "Join"
|
|
8605
8851
|
}
|
|
8606
8852
|
)
|
|
8607
|
-
] }) : open?.allowChoose ? /* @__PURE__ */
|
|
8853
|
+
] }) : open?.allowChoose ? /* @__PURE__ */ jsx4("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
|
|
8608
8854
|
showBroadcast ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__breakout-broadcast", children: [
|
|
8609
8855
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
8610
8856
|
broadcast.by,
|
|
@@ -8612,30 +8858,10 @@ function BreakoutBanner() {
|
|
|
8612
8858
|
] }),
|
|
8613
8859
|
" ",
|
|
8614
8860
|
broadcast.text,
|
|
8615
|
-
/* @__PURE__ */
|
|
8861
|
+
/* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
|
|
8616
8862
|
] }) : null
|
|
8617
8863
|
] });
|
|
8618
8864
|
}
|
|
8619
|
-
function useCaptionTranslation(lines) {
|
|
8620
|
-
const host = useMeetHost();
|
|
8621
|
-
const snapshot = useMeetSnapshot();
|
|
8622
|
-
const collab = snapshot?.collab ?? null;
|
|
8623
|
-
const language = collab?.captionLanguage ?? null;
|
|
8624
|
-
const asked = useRef3(/* @__PURE__ */ new Set());
|
|
8625
|
-
const translations = collab?.captionTranslations ?? {};
|
|
8626
|
-
const missing = lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text: text3 }) => ({ id, text: text3 }));
|
|
8627
|
-
const key = `${language ?? ""}|${missing.map((l) => l.id).join(",")}`;
|
|
8628
|
-
const pending = useRef3(missing);
|
|
8629
|
-
pending.current = missing;
|
|
8630
|
-
useEffect3(() => {
|
|
8631
|
-
if (host === null || language === null) return;
|
|
8632
|
-
const batch = pending.current.filter((line) => !asked.current.has(`${language}:${line.id}`)).slice(-20);
|
|
8633
|
-
if (batch.length === 0) return;
|
|
8634
|
-
for (const line of batch) asked.current.add(`${language}:${line.id}`);
|
|
8635
|
-
void host.inRoom.translateCaptions(language, batch).catch(() => void 0);
|
|
8636
|
-
}, [host, language, key]);
|
|
8637
|
-
return { language, translations, error: collab?.captionTranslationError ?? null };
|
|
8638
|
-
}
|
|
8639
8865
|
function CaptionLanguageSettings() {
|
|
8640
8866
|
const host = useMeetHost();
|
|
8641
8867
|
const snapshot = useMeetSnapshot();
|
|
@@ -8648,7 +8874,7 @@ function CaptionLanguageSettings() {
|
|
|
8648
8874
|
const choices = CAPTION_LANGUAGES.some((l) => l.tag === preferred) ? CAPTION_LANGUAGES : [{ tag: preferred, name: preferred }, ...CAPTION_LANGUAGES];
|
|
8649
8875
|
return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__section", "aria-label": "Captions", children: [
|
|
8650
8876
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
8651
|
-
/* @__PURE__ */
|
|
8877
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
|
|
8652
8878
|
/* @__PURE__ */ jsxs2(
|
|
8653
8879
|
"select",
|
|
8654
8880
|
{
|
|
@@ -8656,51 +8882,32 @@ function CaptionLanguageSettings() {
|
|
|
8656
8882
|
value: current,
|
|
8657
8883
|
onChange: (event) => {
|
|
8658
8884
|
const next = event.target.value === "" ? null : event.target.value;
|
|
8659
|
-
host.store
|
|
8660
|
-
collab: {
|
|
8661
|
-
...host.store.snapshot().collab,
|
|
8662
|
-
captionLanguage: next,
|
|
8663
|
-
captionTranslations: {},
|
|
8664
|
-
captionTranslationError: null
|
|
8665
|
-
}
|
|
8666
|
-
});
|
|
8885
|
+
setCaptionLanguage(host.store, next);
|
|
8667
8886
|
},
|
|
8668
8887
|
children: [
|
|
8669
|
-
/* @__PURE__ */
|
|
8888
|
+
/* @__PURE__ */ jsx4("option", { value: "", children: "Off \u2014 as spoken" }),
|
|
8670
8889
|
current === "" ? /* @__PURE__ */ jsxs2("option", { value: preferred, children: [
|
|
8671
8890
|
choices.find((c) => c.tag === preferred)?.name ?? preferred,
|
|
8672
8891
|
" (yours)"
|
|
8673
8892
|
] }) : null,
|
|
8674
|
-
choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */
|
|
8893
|
+
choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ jsx4("option", { value: choice.tag, children: choice.name }, choice.tag))
|
|
8675
8894
|
]
|
|
8676
8895
|
}
|
|
8677
8896
|
)
|
|
8678
8897
|
] }),
|
|
8679
|
-
collab?.captionTranslationError != null ? /* @__PURE__ */
|
|
8898
|
+
collab?.captionTranslationError != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
|
|
8680
8899
|
] });
|
|
8681
8900
|
}
|
|
8682
|
-
function useCollabPanelRequest(onRequest) {
|
|
8683
|
-
const host = useMeetHost();
|
|
8684
|
-
const at = useMeetSnapshot()?.collab.panelRequest?.at ?? null;
|
|
8685
|
-
const callback = useRef3(onRequest);
|
|
8686
|
-
callback.current = onRequest;
|
|
8687
|
-
useEffect3(() => {
|
|
8688
|
-
const request = host?.store.snapshot().collab.panelRequest ?? null;
|
|
8689
|
-
if (request === null || host === null) return;
|
|
8690
|
-
host.store.patch({ collab: { ...host.store.snapshot().collab, panelRequest: null } });
|
|
8691
|
-
callback.current(request.panel);
|
|
8692
|
-
}, [at, host]);
|
|
8693
|
-
}
|
|
8694
8901
|
|
|
8695
|
-
// src/
|
|
8696
|
-
import { Fragment, jsx as
|
|
8902
|
+
// src/skins/meet/components.tsx
|
|
8903
|
+
import { Fragment, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
8697
8904
|
function InertNotice({ what }) {
|
|
8698
8905
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__empty", role: "status", children: [
|
|
8699
8906
|
/* @__PURE__ */ jsxs3("p", { className: "mx-meet__empty-title", children: [
|
|
8700
8907
|
what,
|
|
8701
8908
|
" is not ready yet"
|
|
8702
8909
|
] }),
|
|
8703
|
-
/* @__PURE__ */
|
|
8910
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: "Calls and meetings need a signed-in identity and an active organization. This will appear as soon as they resolve." })
|
|
8704
8911
|
] });
|
|
8705
8912
|
}
|
|
8706
8913
|
function Avatar({
|
|
@@ -8710,7 +8917,7 @@ function Avatar({
|
|
|
8710
8917
|
}) {
|
|
8711
8918
|
const tint = avatarPaletteIndex(name);
|
|
8712
8919
|
if (url != null && url.length > 0) {
|
|
8713
|
-
return /* @__PURE__ */
|
|
8920
|
+
return /* @__PURE__ */ jsx5(
|
|
8714
8921
|
"img",
|
|
8715
8922
|
{
|
|
8716
8923
|
className: "mx-meet__avatar",
|
|
@@ -8722,7 +8929,7 @@ function Avatar({
|
|
|
8722
8929
|
}
|
|
8723
8930
|
);
|
|
8724
8931
|
}
|
|
8725
|
-
return /* @__PURE__ */
|
|
8932
|
+
return /* @__PURE__ */ jsx5(
|
|
8726
8933
|
"span",
|
|
8727
8934
|
{
|
|
8728
8935
|
className: "mx-meet__avatar mx-meet__avatar--initials",
|
|
@@ -8744,7 +8951,7 @@ function ControlButton({
|
|
|
8744
8951
|
onClick,
|
|
8745
8952
|
children
|
|
8746
8953
|
}) {
|
|
8747
|
-
return /* @__PURE__ */
|
|
8954
|
+
return /* @__PURE__ */ jsx5(
|
|
8748
8955
|
"button",
|
|
8749
8956
|
{
|
|
8750
8957
|
type: "button",
|
|
@@ -8770,20 +8977,16 @@ function RecordingIndicator() {
|
|
|
8770
8977
|
role: "status",
|
|
8771
8978
|
"aria-live": "polite",
|
|
8772
8979
|
children: [
|
|
8773
|
-
/* @__PURE__ */
|
|
8980
|
+
/* @__PURE__ */ jsx5(RecordIcon, { width: 10, height: 10 }),
|
|
8774
8981
|
label
|
|
8775
8982
|
]
|
|
8776
8983
|
}
|
|
8777
8984
|
);
|
|
8778
8985
|
}
|
|
8779
|
-
function ConnectionDot({ quality }) {
|
|
8780
|
-
if (quality === "excellent" || quality === "good" || quality === "unknown") return null;
|
|
8781
|
-
return /* @__PURE__ */ jsx4("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ jsx4(WifiLowIcon, { width: 14, height: 14 }) });
|
|
8782
|
-
}
|
|
8783
8986
|
function RoleBadge({ role }) {
|
|
8784
|
-
if (role === "host") return /* @__PURE__ */
|
|
8785
|
-
if (role === "cohost") return /* @__PURE__ */
|
|
8786
|
-
if (role === "guest") return /* @__PURE__ */
|
|
8987
|
+
if (role === "host") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Host" });
|
|
8988
|
+
if (role === "cohost") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Co-host" });
|
|
8989
|
+
if (role === "guest") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Guest" });
|
|
8787
8990
|
return null;
|
|
8788
8991
|
}
|
|
8789
8992
|
function ParticipantTile({
|
|
@@ -8811,8 +9014,9 @@ function ParticipantTile({
|
|
|
8811
9014
|
participant.speaking ? "mx-meet__tile--speaking" : ""
|
|
8812
9015
|
].filter(Boolean).join(" "),
|
|
8813
9016
|
"data-identity": participant.identity,
|
|
9017
|
+
...participantAttributes(participant),
|
|
8814
9018
|
children: [
|
|
8815
|
-
showVideo ? /* @__PURE__ */
|
|
9019
|
+
showVideo ? /* @__PURE__ */ jsx5(
|
|
8816
9020
|
"video",
|
|
8817
9021
|
{
|
|
8818
9022
|
ref: videoRef,
|
|
@@ -8821,43 +9025,43 @@ function ParticipantTile({
|
|
|
8821
9025
|
playsInline: true,
|
|
8822
9026
|
muted: participant.isLocal
|
|
8823
9027
|
}
|
|
8824
|
-
) : /* @__PURE__ */
|
|
9028
|
+
) : /* @__PURE__ */ jsx5("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
|
|
8825
9029
|
participant.handRaised ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-hand", title: `Hand raised \xB7 ${ordinal(handPosition)} in line`, children: [
|
|
8826
|
-
/* @__PURE__ */
|
|
9030
|
+
/* @__PURE__ */ jsx5(HandIcon, { width: 14, height: 14 }),
|
|
8827
9031
|
handPosition > 0 ? handPosition : null
|
|
8828
9032
|
] }) : null,
|
|
8829
9033
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__tile-bar", children: [
|
|
8830
9034
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-name", children: [
|
|
8831
|
-
spotlit ? /* @__PURE__ */
|
|
9035
|
+
spotlit ? /* @__PURE__ */ jsx5("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ jsx5(SpotlightIcon, { width: 12, height: 12 }) }) : null,
|
|
8832
9036
|
participant.displayName,
|
|
8833
9037
|
participant.isLocal ? " (you)" : "",
|
|
8834
|
-
participant.isAgent ? /* @__PURE__ */
|
|
8835
|
-
/* @__PURE__ */
|
|
9038
|
+
participant.isAgent ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "AI" }) : null,
|
|
9039
|
+
/* @__PURE__ */ jsx5(RoleBadge, { role: participant.role })
|
|
8836
9040
|
] }),
|
|
8837
|
-
!participant.micEnabled ? /* @__PURE__ */
|
|
8838
|
-
/* @__PURE__ */
|
|
9041
|
+
!participant.micEnabled ? /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }) : null,
|
|
9042
|
+
/* @__PURE__ */ jsx5(QualityBars, { quality: participant.quality })
|
|
8839
9043
|
] }),
|
|
8840
9044
|
/* @__PURE__ */ jsxs3("div", { className: menu ? "mx-meet__tile-actions mx-meet__tile-actions--open" : "mx-meet__tile-actions", children: [
|
|
8841
|
-
/* @__PURE__ */
|
|
9045
|
+
/* @__PURE__ */ jsx5(
|
|
8842
9046
|
ControlButton,
|
|
8843
9047
|
{
|
|
8844
9048
|
label: pinnedHere ? "Unpin" : `Pin ${participant.displayName} for me`,
|
|
8845
9049
|
active: pinnedHere,
|
|
8846
9050
|
onClick: () => host?.engine.pin(pinnedHere ? null : participant.identity),
|
|
8847
|
-
children: /* @__PURE__ */
|
|
9051
|
+
children: /* @__PURE__ */ jsx5(PinIcon, { width: 16, height: 16 })
|
|
8848
9052
|
}
|
|
8849
9053
|
),
|
|
8850
9054
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
8851
|
-
/* @__PURE__ */
|
|
9055
|
+
/* @__PURE__ */ jsx5(
|
|
8852
9056
|
ControlButton,
|
|
8853
9057
|
{
|
|
8854
9058
|
label: `More for ${participant.displayName}`,
|
|
8855
9059
|
active: menu,
|
|
8856
9060
|
onClick: () => setMenu(!menu),
|
|
8857
|
-
children: /* @__PURE__ */
|
|
9061
|
+
children: /* @__PURE__ */ jsx5(MoreIcon, { width: 16, height: 16 })
|
|
8858
9062
|
}
|
|
8859
9063
|
),
|
|
8860
|
-
menu ? /* @__PURE__ */
|
|
9064
|
+
menu ? /* @__PURE__ */ jsx5(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
|
|
8861
9065
|
] })
|
|
8862
9066
|
] })
|
|
8863
9067
|
]
|
|
@@ -8873,25 +9077,25 @@ function QualityBars({ quality }) {
|
|
|
8873
9077
|
if (quality === "unknown") return null;
|
|
8874
9078
|
const bars = quality === "excellent" ? 3 : quality === "good" ? 2 : quality === "poor" ? 1 : 0;
|
|
8875
9079
|
const label = quality === "lost" ? "Connection lost" : quality === "poor" ? "Poor connection" : `Connection ${quality}`;
|
|
8876
|
-
return /* @__PURE__ */
|
|
9080
|
+
return /* @__PURE__ */ jsx5("span", { className: `mx-meet__signal mx-meet__signal--${quality}`, title: label, "aria-label": label, role: "img", children: /* @__PURE__ */ jsx5(SignalIcon, { bars, width: 14, height: 14 }) });
|
|
8877
9081
|
}
|
|
8878
9082
|
function Stage({ pageSize }) {
|
|
8879
9083
|
const stage = useStage(pageSize);
|
|
8880
9084
|
const columns = gridColumns(stage.tiles.length);
|
|
8881
9085
|
if (stage.feature === null && stage.tiles.length === 0) {
|
|
8882
9086
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__stage mx-meet__stage--empty", children: [
|
|
8883
|
-
/* @__PURE__ */
|
|
8884
|
-
/* @__PURE__ */
|
|
9087
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-title", children: "Waiting for others to join" }),
|
|
9088
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: "Share the meeting link and people can join from anywhere \u2014 no account needed." })
|
|
8885
9089
|
] });
|
|
8886
9090
|
}
|
|
8887
9091
|
return /* @__PURE__ */ jsxs3("div", { className: `mx-meet__stage${stage.feature !== null ? " mx-meet__stage--speaker" : ""}`, children: [
|
|
8888
|
-
stage.feature !== null ? /* @__PURE__ */
|
|
8889
|
-
/* @__PURE__ */
|
|
9092
|
+
stage.feature !== null ? /* @__PURE__ */ jsx5(ParticipantTile, { participant: stage.feature, featured: true }) : null,
|
|
9093
|
+
/* @__PURE__ */ jsx5(
|
|
8890
9094
|
"div",
|
|
8891
9095
|
{
|
|
8892
9096
|
className: "mx-meet__grid",
|
|
8893
9097
|
style: { "--mx-meet-columns": columns },
|
|
8894
|
-
children: stage.tiles.map((participant) => /* @__PURE__ */
|
|
9098
|
+
children: stage.tiles.map((participant) => /* @__PURE__ */ jsx5(ParticipantTile, { participant }, participant.identity))
|
|
8895
9099
|
}
|
|
8896
9100
|
),
|
|
8897
9101
|
stage.overflow > 0 ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__overflow", children: [
|
|
@@ -8903,7 +9107,6 @@ function Stage({ pageSize }) {
|
|
|
8903
9107
|
] }) : null
|
|
8904
9108
|
] });
|
|
8905
9109
|
}
|
|
8906
|
-
var MEET_REACTIONS = ["\u{1F496}", "\u{1F44D}", "\u{1F389}", "\u{1F44F}", "\u{1F602}", "\u{1F62E}", "\u{1F622}", "\u{1F914}", "\u{1F44E}"];
|
|
8907
9110
|
function ControlBar({ onLeave }) {
|
|
8908
9111
|
const room = useRoom();
|
|
8909
9112
|
const recording = useRecording();
|
|
@@ -8928,7 +9131,7 @@ function ControlBar({ onLeave }) {
|
|
|
8928
9131
|
});
|
|
8929
9132
|
const privateChatAt = snapshot?.privateChatRequest?.at ?? null;
|
|
8930
9133
|
const meetStore = useMeetHost()?.store ?? null;
|
|
8931
|
-
|
|
9134
|
+
useEffect6(() => {
|
|
8932
9135
|
const request = meetStore?.snapshot().privateChatRequest ?? null;
|
|
8933
9136
|
if (request === null) return;
|
|
8934
9137
|
setChatTo(request.to);
|
|
@@ -8945,10 +9148,10 @@ function ControlBar({ onLeave }) {
|
|
|
8945
9148
|
});
|
|
8946
9149
|
const hasSpotlight = snapshot?.spotlight !== null && snapshot?.spotlight !== void 0;
|
|
8947
9150
|
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
8948
|
-
/* @__PURE__ */
|
|
8949
|
-
shortcuts ? /* @__PURE__ */
|
|
8950
|
-
panel === "chat" ? /* @__PURE__ */
|
|
8951
|
-
panel === "people" ? /* @__PURE__ */
|
|
9151
|
+
/* @__PURE__ */ jsx5(MeetingOverlays, {}),
|
|
9152
|
+
shortcuts ? /* @__PURE__ */ jsx5(ShortcutsSheet, { onClose: () => setShortcuts(false) }) : null,
|
|
9153
|
+
panel === "chat" ? /* @__PURE__ */ jsx5(ChatPanel, { onClose: () => setPanel("none"), to: chatTo, onTo: setChatTo }) : null,
|
|
9154
|
+
panel === "people" ? /* @__PURE__ */ jsx5(
|
|
8952
9155
|
PeoplePanel,
|
|
8953
9156
|
{
|
|
8954
9157
|
onClose: () => setPanel("none"),
|
|
@@ -8958,53 +9161,53 @@ function ControlBar({ onLeave }) {
|
|
|
8958
9161
|
}
|
|
8959
9162
|
}
|
|
8960
9163
|
) : null,
|
|
8961
|
-
panel === "ai" ? /* @__PURE__ */
|
|
8962
|
-
panel === "settings" ? /* @__PURE__ */
|
|
8963
|
-
panel === "polls" ? /* @__PURE__ */
|
|
8964
|
-
panel === "qa" ? /* @__PURE__ */
|
|
8965
|
-
panel === "breakouts" ? /* @__PURE__ */
|
|
8966
|
-
whiteboard ? /* @__PURE__ */
|
|
8967
|
-
/* @__PURE__ */
|
|
8968
|
-
controls.notice !== null && panel !== "people" ? /* @__PURE__ */
|
|
9164
|
+
panel === "ai" ? /* @__PURE__ */ jsx5(AiPanel, { onClose: () => setPanel("none") }) : null,
|
|
9165
|
+
panel === "settings" ? /* @__PURE__ */ jsx5(SettingsPanel, { onClose: () => setPanel("none") }) : null,
|
|
9166
|
+
panel === "polls" ? /* @__PURE__ */ jsx5(PollsPanel, { onClose: () => setPanel("none") }) : null,
|
|
9167
|
+
panel === "qa" ? /* @__PURE__ */ jsx5(QaPanel, { onClose: () => setPanel("none") }) : null,
|
|
9168
|
+
panel === "breakouts" ? /* @__PURE__ */ jsx5(BreakoutsPanel, { onClose: () => setPanel("none") }) : null,
|
|
9169
|
+
whiteboard ? /* @__PURE__ */ jsx5(WhiteboardPanel, { onClose: () => setWhiteboard(false) }) : null,
|
|
9170
|
+
/* @__PURE__ */ jsx5(BreakoutBanner, {}),
|
|
9171
|
+
controls.notice !== null && panel !== "people" ? /* @__PURE__ */ jsx5(Toast, { text: controls.notice.text, failed: controls.notice.failed, onDone: controls.clearNotice }) : null,
|
|
8969
9172
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__controls", children: [
|
|
8970
|
-
/* @__PURE__ */
|
|
9173
|
+
/* @__PURE__ */ jsx5(
|
|
8971
9174
|
ControlButton,
|
|
8972
9175
|
{
|
|
8973
9176
|
label: micUnavailable !== null ? `Unmute \u2014 ${micUnavailable.remedy}` : room.local?.micEnabled === true ? "Mute (\u2318D)" : "Unmute (\u2318D)",
|
|
8974
9177
|
active: room.local?.micEnabled === true,
|
|
8975
9178
|
onClick: () => void room.toggleMicrophone(),
|
|
8976
|
-
children: room.local?.micEnabled === true ? /* @__PURE__ */
|
|
9179
|
+
children: room.local?.micEnabled === true ? /* @__PURE__ */ jsx5(MicIcon, {}) : /* @__PURE__ */ jsx5(MicOffIcon, {})
|
|
8977
9180
|
}
|
|
8978
9181
|
),
|
|
8979
|
-
/* @__PURE__ */
|
|
9182
|
+
/* @__PURE__ */ jsx5(
|
|
8980
9183
|
ControlButton,
|
|
8981
9184
|
{
|
|
8982
9185
|
label: room.local?.cameraEnabled === true ? "Stop video (\u2318E)" : "Start video (\u2318E)",
|
|
8983
9186
|
active: room.local?.cameraEnabled === true,
|
|
8984
9187
|
onClick: () => void room.toggleCamera(),
|
|
8985
|
-
children: room.local?.cameraEnabled === true ? /* @__PURE__ */
|
|
9188
|
+
children: room.local?.cameraEnabled === true ? /* @__PURE__ */ jsx5(CameraIcon, {}) : /* @__PURE__ */ jsx5(CameraOffIcon, {})
|
|
8986
9189
|
}
|
|
8987
9190
|
),
|
|
8988
|
-
room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */
|
|
9191
|
+
room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ jsx5(
|
|
8989
9192
|
ControlButton,
|
|
8990
9193
|
{
|
|
8991
9194
|
label: room.local?.screenSharing === true ? "Stop sharing" : "Share screen",
|
|
8992
9195
|
active: room.local?.screenSharing === true,
|
|
8993
9196
|
onClick: () => void room.toggleScreenShare(),
|
|
8994
|
-
children: /* @__PURE__ */
|
|
9197
|
+
children: /* @__PURE__ */ jsx5(ScreenShareIcon, {})
|
|
8995
9198
|
}
|
|
8996
9199
|
) : null,
|
|
8997
9200
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
8998
|
-
/* @__PURE__ */
|
|
9201
|
+
/* @__PURE__ */ jsx5(
|
|
8999
9202
|
ControlButton,
|
|
9000
9203
|
{
|
|
9001
9204
|
label: "Send a reaction",
|
|
9002
9205
|
active: popover === "reactions",
|
|
9003
9206
|
onClick: () => setPopover(popover === "reactions" ? "none" : "reactions"),
|
|
9004
|
-
children: /* @__PURE__ */
|
|
9207
|
+
children: /* @__PURE__ */ jsx5(SmileIcon, {})
|
|
9005
9208
|
}
|
|
9006
9209
|
),
|
|
9007
|
-
popover === "reactions" ? /* @__PURE__ */
|
|
9210
|
+
popover === "reactions" ? /* @__PURE__ */ jsx5(Popover, { label: "Reactions", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsx5("div", { className: "mx-meet__emoji-bar", children: MEET_REACTIONS.map((emoji) => /* @__PURE__ */ jsx5(
|
|
9008
9211
|
"button",
|
|
9009
9212
|
{
|
|
9010
9213
|
type: "button",
|
|
@@ -9016,18 +9219,18 @@ function ControlBar({ onLeave }) {
|
|
|
9016
9219
|
emoji
|
|
9017
9220
|
)) }) }) : null
|
|
9018
9221
|
] }),
|
|
9019
|
-
/* @__PURE__ */
|
|
9222
|
+
/* @__PURE__ */ jsx5(
|
|
9020
9223
|
ControlButton,
|
|
9021
9224
|
{
|
|
9022
9225
|
label: room.local?.handRaised === true ? "Lower hand (\u2318\u2325H)" : "Raise hand (\u2318\u2325H)",
|
|
9023
9226
|
active: room.local?.handRaised === true,
|
|
9024
9227
|
onClick: () => void room.toggleHand(),
|
|
9025
|
-
children: /* @__PURE__ */
|
|
9228
|
+
children: /* @__PURE__ */ jsx5(HandIcon, {})
|
|
9026
9229
|
}
|
|
9027
9230
|
),
|
|
9028
9231
|
/* @__PURE__ */ jsxs3(ControlButton, { label: "Chat (\u2318\u2325C)", active: panel === "chat", onClick: () => toggle("chat"), children: [
|
|
9029
|
-
/* @__PURE__ */
|
|
9030
|
-
unread > 0 ? /* @__PURE__ */
|
|
9232
|
+
/* @__PURE__ */ jsx5(ChatIcon, {}),
|
|
9233
|
+
unread > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
9031
9234
|
] }),
|
|
9032
9235
|
/* @__PURE__ */ jsxs3(
|
|
9033
9236
|
ControlButton,
|
|
@@ -9036,32 +9239,32 @@ function ControlBar({ onLeave }) {
|
|
|
9036
9239
|
active: panel === "people",
|
|
9037
9240
|
onClick: () => toggle("people"),
|
|
9038
9241
|
children: [
|
|
9039
|
-
/* @__PURE__ */
|
|
9040
|
-
lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */
|
|
9242
|
+
/* @__PURE__ */ jsx5(PeopleIcon, {}),
|
|
9243
|
+
lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
9041
9244
|
]
|
|
9042
9245
|
}
|
|
9043
9246
|
),
|
|
9044
|
-
/* @__PURE__ */
|
|
9247
|
+
/* @__PURE__ */ jsx5(
|
|
9045
9248
|
ActivitiesControl,
|
|
9046
9249
|
{
|
|
9047
9250
|
active: whiteboard ? "whiteboard" : panel === "polls" || panel === "qa" || panel === "breakouts" ? panel : null,
|
|
9048
9251
|
onOpen: openActivity
|
|
9049
9252
|
}
|
|
9050
9253
|
),
|
|
9051
|
-
/* @__PURE__ */
|
|
9052
|
-
recording.canStart ? /* @__PURE__ */
|
|
9053
|
-
recording.canStop ? /* @__PURE__ */
|
|
9254
|
+
/* @__PURE__ */ jsx5(AiControl, { active: panel === "ai", onToggle: () => toggle("ai") }),
|
|
9255
|
+
recording.canStart ? /* @__PURE__ */ jsx5(ControlButton, { label: "Start recording", onClick: () => void recording.start(), children: /* @__PURE__ */ jsx5(RecordIcon, {}) }) : null,
|
|
9256
|
+
recording.canStop ? /* @__PURE__ */ jsx5(ControlButton, { label: "Stop recording", active: true, onClick: () => void recording.stop(), children: /* @__PURE__ */ jsx5(RecordIcon, {}) }) : null,
|
|
9054
9257
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
9055
|
-
/* @__PURE__ */
|
|
9258
|
+
/* @__PURE__ */ jsx5(
|
|
9056
9259
|
ControlButton,
|
|
9057
9260
|
{
|
|
9058
9261
|
label: "More options",
|
|
9059
9262
|
active: popover === "more" || panel === "settings",
|
|
9060
9263
|
onClick: () => setPopover(popover === "more" ? "none" : "more"),
|
|
9061
|
-
children: /* @__PURE__ */
|
|
9264
|
+
children: /* @__PURE__ */ jsx5(MoreIcon, {})
|
|
9062
9265
|
}
|
|
9063
9266
|
),
|
|
9064
|
-
popover === "more" ? /* @__PURE__ */
|
|
9267
|
+
popover === "more" ? /* @__PURE__ */ jsx5(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
|
|
9065
9268
|
/* @__PURE__ */ jsxs3(
|
|
9066
9269
|
MenuItem,
|
|
9067
9270
|
{
|
|
@@ -9070,7 +9273,7 @@ function ControlBar({ onLeave }) {
|
|
|
9070
9273
|
setPanel("settings");
|
|
9071
9274
|
},
|
|
9072
9275
|
children: [
|
|
9073
|
-
/* @__PURE__ */
|
|
9276
|
+
/* @__PURE__ */ jsx5(SettingsIcon, { width: 16, height: 16 }),
|
|
9074
9277
|
" Settings"
|
|
9075
9278
|
]
|
|
9076
9279
|
}
|
|
@@ -9083,13 +9286,13 @@ function ControlBar({ onLeave }) {
|
|
|
9083
9286
|
setShortcuts(true);
|
|
9084
9287
|
},
|
|
9085
9288
|
children: [
|
|
9086
|
-
/* @__PURE__ */
|
|
9289
|
+
/* @__PURE__ */ jsx5(KeyboardIcon, { width: 16, height: 16 }),
|
|
9087
9290
|
" Keyboard shortcuts"
|
|
9088
9291
|
]
|
|
9089
9292
|
}
|
|
9090
9293
|
),
|
|
9091
9294
|
controls.isHost ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
9092
|
-
/* @__PURE__ */
|
|
9295
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__menu-sep", role: "separator" }),
|
|
9093
9296
|
/* @__PURE__ */ jsxs3(
|
|
9094
9297
|
MenuItem,
|
|
9095
9298
|
{
|
|
@@ -9098,7 +9301,7 @@ function ControlBar({ onLeave }) {
|
|
|
9098
9301
|
void controls.run({ action: "mute_all" });
|
|
9099
9302
|
},
|
|
9100
9303
|
children: [
|
|
9101
|
-
/* @__PURE__ */
|
|
9304
|
+
/* @__PURE__ */ jsx5(MicOffIcon, { width: 16, height: 16 }),
|
|
9102
9305
|
" Mute everyone"
|
|
9103
9306
|
]
|
|
9104
9307
|
}
|
|
@@ -9111,7 +9314,7 @@ function ControlBar({ onLeave }) {
|
|
|
9111
9314
|
void controls.run({ action: "ask_all_unmute" });
|
|
9112
9315
|
},
|
|
9113
9316
|
children: [
|
|
9114
|
-
/* @__PURE__ */
|
|
9317
|
+
/* @__PURE__ */ jsx5(MicIcon, { width: 16, height: 16 }),
|
|
9115
9318
|
" Ask everyone to unmute"
|
|
9116
9319
|
]
|
|
9117
9320
|
}
|
|
@@ -9124,7 +9327,7 @@ function ControlBar({ onLeave }) {
|
|
|
9124
9327
|
void controls.run({ action: "lower_all_hands" });
|
|
9125
9328
|
},
|
|
9126
9329
|
children: [
|
|
9127
|
-
/* @__PURE__ */
|
|
9330
|
+
/* @__PURE__ */ jsx5(HandIcon, { width: 16, height: 16 }),
|
|
9128
9331
|
" Lower all hands (",
|
|
9129
9332
|
queue.length,
|
|
9130
9333
|
")"
|
|
@@ -9139,7 +9342,7 @@ function ControlBar({ onLeave }) {
|
|
|
9139
9342
|
void controls.run({ action: "spotlight", identity: null });
|
|
9140
9343
|
},
|
|
9141
9344
|
children: [
|
|
9142
|
-
/* @__PURE__ */
|
|
9345
|
+
/* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
|
|
9143
9346
|
" Remove spotlight"
|
|
9144
9347
|
]
|
|
9145
9348
|
}
|
|
@@ -9147,7 +9350,7 @@ function ControlBar({ onLeave }) {
|
|
|
9147
9350
|
] }) : null
|
|
9148
9351
|
] }) }) : null
|
|
9149
9352
|
] }),
|
|
9150
|
-
/* @__PURE__ */
|
|
9353
|
+
/* @__PURE__ */ jsx5(
|
|
9151
9354
|
ControlButton,
|
|
9152
9355
|
{
|
|
9153
9356
|
label: "Leave",
|
|
@@ -9156,7 +9359,7 @@ function ControlBar({ onLeave }) {
|
|
|
9156
9359
|
void room.leave();
|
|
9157
9360
|
onLeave?.();
|
|
9158
9361
|
},
|
|
9159
|
-
children: /* @__PURE__ */
|
|
9362
|
+
children: /* @__PURE__ */ jsx5(PhoneOffIcon, {})
|
|
9160
9363
|
}
|
|
9161
9364
|
)
|
|
9162
9365
|
] })
|
|
@@ -9167,12 +9370,12 @@ function useUnreadChat(open) {
|
|
|
9167
9370
|
const chat = snapshot?.chat ?? [];
|
|
9168
9371
|
const local = snapshot?.localIdentity ?? null;
|
|
9169
9372
|
const [seen, setSeen] = useState4(0);
|
|
9170
|
-
|
|
9373
|
+
useEffect6(() => {
|
|
9171
9374
|
if (open) setSeen(chat.length);
|
|
9172
9375
|
}, [open, chat.length]);
|
|
9173
9376
|
const loaded = snapshot?.chatLoaded === true;
|
|
9174
9377
|
const [baseline, setBaseline] = useState4(null);
|
|
9175
|
-
|
|
9378
|
+
useEffect6(() => {
|
|
9176
9379
|
if (loaded && baseline === null) setBaseline(chat.length);
|
|
9177
9380
|
}, [loaded, baseline, chat.length]);
|
|
9178
9381
|
if (open) return 0;
|
|
@@ -9185,7 +9388,7 @@ function Popover({
|
|
|
9185
9388
|
children,
|
|
9186
9389
|
placement = "up"
|
|
9187
9390
|
}) {
|
|
9188
|
-
const ref =
|
|
9391
|
+
const ref = useRef6(null);
|
|
9189
9392
|
const [style, setStyle] = useState4({
|
|
9190
9393
|
position: "fixed",
|
|
9191
9394
|
top: 0,
|
|
@@ -9237,7 +9440,7 @@ function Popover({
|
|
|
9237
9440
|
window.removeEventListener("scroll", place, true);
|
|
9238
9441
|
};
|
|
9239
9442
|
}, [placement]);
|
|
9240
|
-
|
|
9443
|
+
useEffect6(() => {
|
|
9241
9444
|
const onKey = (event) => {
|
|
9242
9445
|
if (event.key === "Escape") onClose();
|
|
9243
9446
|
};
|
|
@@ -9252,14 +9455,14 @@ function Popover({
|
|
|
9252
9455
|
window.removeEventListener("pointerdown", onPointer);
|
|
9253
9456
|
};
|
|
9254
9457
|
}, [onClose]);
|
|
9255
|
-
return /* @__PURE__ */
|
|
9458
|
+
return /* @__PURE__ */ jsx5("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
|
|
9256
9459
|
}
|
|
9257
9460
|
function MenuItem({
|
|
9258
9461
|
onSelect,
|
|
9259
9462
|
danger = false,
|
|
9260
9463
|
children
|
|
9261
9464
|
}) {
|
|
9262
|
-
return /* @__PURE__ */
|
|
9465
|
+
return /* @__PURE__ */ jsx5(
|
|
9263
9466
|
"button",
|
|
9264
9467
|
{
|
|
9265
9468
|
type: "button",
|
|
@@ -9271,13 +9474,13 @@ function MenuItem({
|
|
|
9271
9474
|
);
|
|
9272
9475
|
}
|
|
9273
9476
|
function Toast({ text: text3, failed, onDone }) {
|
|
9274
|
-
|
|
9477
|
+
useEffect6(() => {
|
|
9275
9478
|
const timer = setTimeout(onDone, failed ? 7e3 : 4e3);
|
|
9276
9479
|
return () => clearTimeout(timer);
|
|
9277
9480
|
}, [text3, failed, onDone]);
|
|
9278
9481
|
return /* @__PURE__ */ jsxs3("div", { className: failed ? "mx-meet__toast mx-meet__toast--failed" : "mx-meet__toast", role: "status", children: [
|
|
9279
|
-
/* @__PURE__ */
|
|
9280
|
-
/* @__PURE__ */
|
|
9482
|
+
/* @__PURE__ */ jsx5("span", { children: text3 }),
|
|
9483
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: onDone, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 14, height: 14 }) })
|
|
9281
9484
|
] });
|
|
9282
9485
|
}
|
|
9283
9486
|
function MeetingOverlays() {
|
|
@@ -9285,14 +9488,14 @@ function MeetingOverlays() {
|
|
|
9285
9488
|
const { notice, dismiss } = useModerationNotice();
|
|
9286
9489
|
const room = useRoom();
|
|
9287
9490
|
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
9288
|
-
/* @__PURE__ */
|
|
9491
|
+
/* @__PURE__ */ jsx5(ReactionOverlay, { reactions }),
|
|
9289
9492
|
notice !== null && notice.kind !== "removed" ? (
|
|
9290
9493
|
// A host's request ("the host is asking you to unmute"), not an error:
|
|
9291
9494
|
// an assertive status, so it is announced at once without being filed
|
|
9292
9495
|
// as a failure (design-system error-box census).
|
|
9293
9496
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__notice-bar", role: "status", "aria-live": "assertive", children: [
|
|
9294
|
-
/* @__PURE__ */
|
|
9295
|
-
notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */
|
|
9497
|
+
/* @__PURE__ */ jsx5("span", { children: notice.text }),
|
|
9498
|
+
notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ jsx5(
|
|
9296
9499
|
"button",
|
|
9297
9500
|
{
|
|
9298
9501
|
type: "button",
|
|
@@ -9304,20 +9507,20 @@ function MeetingOverlays() {
|
|
|
9304
9507
|
children: "Unmute"
|
|
9305
9508
|
}
|
|
9306
9509
|
) : null,
|
|
9307
|
-
/* @__PURE__ */
|
|
9510
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 14, height: 14 }) })
|
|
9308
9511
|
] })
|
|
9309
9512
|
) : null
|
|
9310
9513
|
] });
|
|
9311
9514
|
}
|
|
9312
9515
|
function ShortcutsSheet({ onClose }) {
|
|
9313
|
-
|
|
9516
|
+
useEffect6(() => {
|
|
9314
9517
|
const onKey = (event) => {
|
|
9315
9518
|
if (event.key === "Escape") onClose();
|
|
9316
9519
|
};
|
|
9317
9520
|
window.addEventListener("keydown", onKey);
|
|
9318
9521
|
return () => window.removeEventListener("keydown", onKey);
|
|
9319
9522
|
}, [onClose]);
|
|
9320
|
-
return /* @__PURE__ */
|
|
9523
|
+
return /* @__PURE__ */ jsx5("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs3(
|
|
9321
9524
|
"div",
|
|
9322
9525
|
{
|
|
9323
9526
|
className: "mx-meet__sheet",
|
|
@@ -9326,12 +9529,12 @@ function ShortcutsSheet({ onClose }) {
|
|
|
9326
9529
|
onClick: (event) => event.stopPropagation(),
|
|
9327
9530
|
children: [
|
|
9328
9531
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
|
|
9329
|
-
/* @__PURE__ */
|
|
9330
|
-
/* @__PURE__ */
|
|
9532
|
+
/* @__PURE__ */ jsx5("h2", { className: "mx-meet__panel-title", children: "Keyboard shortcuts" }),
|
|
9533
|
+
/* @__PURE__ */ jsx5(ControlButton, { label: "Close", onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }) })
|
|
9331
9534
|
] }),
|
|
9332
|
-
/* @__PURE__ */
|
|
9333
|
-
/* @__PURE__ */
|
|
9334
|
-
/* @__PURE__ */
|
|
9535
|
+
/* @__PURE__ */ jsx5("dl", { className: "mx-meet__shortcuts", children: MEET_SHORTCUTS.map((shortcut) => /* @__PURE__ */ jsxs3("div", { className: "mx-meet__shortcut", children: [
|
|
9536
|
+
/* @__PURE__ */ jsx5("dt", { children: shortcut.label }),
|
|
9537
|
+
/* @__PURE__ */ jsx5("dd", { children: /* @__PURE__ */ jsx5("kbd", { className: "mx-meet__kbd", children: shortcut.keys }) })
|
|
9335
9538
|
] }, shortcut.id)) })
|
|
9336
9539
|
]
|
|
9337
9540
|
}
|
|
@@ -9341,14 +9544,14 @@ function AiControl({ active, onToggle }) {
|
|
|
9341
9544
|
const snapshot = useMeetSnapshot();
|
|
9342
9545
|
const meeting = snapshot?.meeting ?? null;
|
|
9343
9546
|
if (meeting === null || !meeting.aiEnabled) return null;
|
|
9344
|
-
return /* @__PURE__ */
|
|
9547
|
+
return /* @__PURE__ */ jsx5(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ jsx5(SparklesIcon, {}) });
|
|
9345
9548
|
}
|
|
9346
9549
|
function PanelShell({
|
|
9347
9550
|
title,
|
|
9348
9551
|
onClose,
|
|
9349
9552
|
children
|
|
9350
9553
|
}) {
|
|
9351
|
-
const ref =
|
|
9554
|
+
const ref = useRef6(null);
|
|
9352
9555
|
useLayoutEffect(() => {
|
|
9353
9556
|
const panel = ref.current;
|
|
9354
9557
|
const root = panel?.closest(".mx-meet");
|
|
@@ -9363,10 +9566,10 @@ function PanelShell({
|
|
|
9363
9566
|
}, []);
|
|
9364
9567
|
return /* @__PURE__ */ jsxs3("aside", { ref, className: "mx-meet__panel", "aria-label": title, children: [
|
|
9365
9568
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
|
|
9366
|
-
/* @__PURE__ */
|
|
9367
|
-
/* @__PURE__ */
|
|
9569
|
+
/* @__PURE__ */ jsx5("h2", { className: "mx-meet__panel-title", children: title }),
|
|
9570
|
+
/* @__PURE__ */ jsx5(ControlButton, { label: "Close panel", onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }) })
|
|
9368
9571
|
] }),
|
|
9369
|
-
/* @__PURE__ */
|
|
9572
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__panel-body", children })
|
|
9370
9573
|
] });
|
|
9371
9574
|
}
|
|
9372
9575
|
function ChatPanel({
|
|
@@ -9378,15 +9581,15 @@ function ChatPanel({
|
|
|
9378
9581
|
const room = useRoom();
|
|
9379
9582
|
const [draft, setDraft] = useState4("");
|
|
9380
9583
|
const [recipient, setRecipient] = useState4(to);
|
|
9381
|
-
const listRef =
|
|
9584
|
+
const listRef = useRef6(null);
|
|
9382
9585
|
const messages = snapshot?.chat ?? [];
|
|
9383
9586
|
const local = snapshot?.localIdentity ?? null;
|
|
9384
9587
|
const people = (snapshot?.participants ?? []).filter(
|
|
9385
9588
|
(participant) => !participant.isLocal && !participant.isAgent
|
|
9386
9589
|
);
|
|
9387
9590
|
const recipientName = recipient === null ? null : people.find((p) => p.identity === recipient)?.displayName ?? null;
|
|
9388
|
-
|
|
9389
|
-
|
|
9591
|
+
useEffect6(() => setRecipient(to), [to]);
|
|
9592
|
+
useEffect6(() => {
|
|
9390
9593
|
const list = listRef.current;
|
|
9391
9594
|
if (list !== null) list.scrollTop = list.scrollHeight;
|
|
9392
9595
|
}, [messages.length]);
|
|
@@ -9396,9 +9599,9 @@ function ChatPanel({
|
|
|
9396
9599
|
};
|
|
9397
9600
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Chat", onClose, children: [
|
|
9398
9601
|
/* @__PURE__ */ jsxs3("ul", { className: "mx-meet__chat", ref: listRef, children: [
|
|
9399
|
-
snapshot?.chatHistoryError != null ? /* @__PURE__ */
|
|
9400
|
-
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */
|
|
9401
|
-
messages.map((message) => /* @__PURE__ */
|
|
9602
|
+
snapshot?.chatHistoryError != null ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: snapshot.chatHistoryError }) : null,
|
|
9603
|
+
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: "No messages yet. Messages to everyone stay with the meeting, so people who join later see them." }) : null,
|
|
9604
|
+
messages.map((message) => /* @__PURE__ */ jsx5(ChatLine, { message, local, people }, message.id))
|
|
9402
9605
|
] }),
|
|
9403
9606
|
/* @__PURE__ */ jsxs3(
|
|
9404
9607
|
"form",
|
|
@@ -9421,7 +9624,7 @@ function ChatPanel({
|
|
|
9421
9624
|
value: recipient ?? "",
|
|
9422
9625
|
onChange: (event) => choose(event.target.value === "" ? null : event.target.value),
|
|
9423
9626
|
children: [
|
|
9424
|
-
/* @__PURE__ */
|
|
9627
|
+
/* @__PURE__ */ jsx5("option", { value: "", children: "Everyone" }),
|
|
9425
9628
|
people.map((participant) => /* @__PURE__ */ jsxs3("option", { value: participant.identity, children: [
|
|
9426
9629
|
participant.displayName,
|
|
9427
9630
|
" (private)"
|
|
@@ -9430,7 +9633,7 @@ function ChatPanel({
|
|
|
9430
9633
|
}
|
|
9431
9634
|
) : null,
|
|
9432
9635
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__composer-row", children: [
|
|
9433
|
-
/* @__PURE__ */
|
|
9636
|
+
/* @__PURE__ */ jsx5(
|
|
9434
9637
|
"input",
|
|
9435
9638
|
{
|
|
9436
9639
|
className: "mx-meet__input",
|
|
@@ -9441,7 +9644,7 @@ function ChatPanel({
|
|
|
9441
9644
|
maxLength: 4e3
|
|
9442
9645
|
}
|
|
9443
9646
|
),
|
|
9444
|
-
/* @__PURE__ */
|
|
9647
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
|
|
9445
9648
|
] }),
|
|
9446
9649
|
recipientName !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
|
|
9447
9650
|
"Only ",
|
|
@@ -9471,16 +9674,16 @@ function ChatLine({
|
|
|
9471
9674
|
].filter(Boolean).join(" "),
|
|
9472
9675
|
children: [
|
|
9473
9676
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-meta", children: [
|
|
9474
|
-
/* @__PURE__ */
|
|
9677
|
+
/* @__PURE__ */ jsx5("strong", { children: mine ? "You" : message.displayName }),
|
|
9475
9678
|
counterpart !== null ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-private", children: [
|
|
9476
9679
|
"to ",
|
|
9477
9680
|
counterpart,
|
|
9478
9681
|
" \xB7 private"
|
|
9479
9682
|
] }) : null,
|
|
9480
|
-
/* @__PURE__ */
|
|
9683
|
+
/* @__PURE__ */ jsx5("time", { dateTime: message.at, children: clockOf(message.at) })
|
|
9481
9684
|
] }),
|
|
9482
|
-
/* @__PURE__ */
|
|
9483
|
-
message.failed !== void 0 ? /* @__PURE__ */
|
|
9685
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-text", children: message.text }),
|
|
9686
|
+
message.failed !== void 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-failed", children: message.failed }) : privateTo === null && message.saved === false ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-pending", children: message.id.startsWith("pending-") ? "Sending\u2026" : "Not saved \u2014 people who join later will not see this" }) : null
|
|
9484
9687
|
]
|
|
9485
9688
|
}
|
|
9486
9689
|
);
|
|
@@ -9500,14 +9703,14 @@ function PeoplePanel({
|
|
|
9500
9703
|
const needle = query.trim().toLowerCase();
|
|
9501
9704
|
const shown = needle.length === 0 ? everyone : everyone.filter((participant) => participant.displayName.toLowerCase().includes(needle));
|
|
9502
9705
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: `People (${everyone.length})`, onClose, children: [
|
|
9503
|
-
/* @__PURE__ */
|
|
9706
|
+
/* @__PURE__ */ jsx5(LobbyPanel, {}),
|
|
9504
9707
|
queue.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Raised hands", children: [
|
|
9505
9708
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__section-head", children: [
|
|
9506
9709
|
/* @__PURE__ */ jsxs3("h3", { className: "mx-meet__section-title", children: [
|
|
9507
9710
|
"Raised hands \xB7 ",
|
|
9508
9711
|
queue.length
|
|
9509
9712
|
] }),
|
|
9510
|
-
controls.isHost ? /* @__PURE__ */
|
|
9713
|
+
controls.isHost ? /* @__PURE__ */ jsx5(
|
|
9511
9714
|
"button",
|
|
9512
9715
|
{
|
|
9513
9716
|
type: "button",
|
|
@@ -9517,13 +9720,13 @@ function PeoplePanel({
|
|
|
9517
9720
|
}
|
|
9518
9721
|
) : null
|
|
9519
9722
|
] }),
|
|
9520
|
-
/* @__PURE__ */
|
|
9521
|
-
/* @__PURE__ */
|
|
9723
|
+
/* @__PURE__ */ jsx5("ol", { className: "mx-meet__queue", children: queue.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
|
|
9724
|
+
/* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 28 }),
|
|
9522
9725
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
9523
9726
|
participant.displayName,
|
|
9524
|
-
participant.identity === local ? /* @__PURE__ */
|
|
9727
|
+
participant.identity === local ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__you", children: " (you)" }) : null
|
|
9525
9728
|
] }),
|
|
9526
|
-
controls.isHost || participant.identity === local ? /* @__PURE__ */
|
|
9729
|
+
controls.isHost || participant.identity === local ? /* @__PURE__ */ jsx5(
|
|
9527
9730
|
"button",
|
|
9528
9731
|
{
|
|
9529
9732
|
type: "button",
|
|
@@ -9536,7 +9739,7 @@ function PeoplePanel({
|
|
|
9536
9739
|
] }) : null,
|
|
9537
9740
|
controls.isHost && everyone.length > 1 ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__bulk", children: [
|
|
9538
9741
|
/* @__PURE__ */ jsxs3("button", { type: "button", className: "mx-meet__chip", onClick: () => void controls.run({ action: "mute_all" }), children: [
|
|
9539
|
-
/* @__PURE__ */
|
|
9742
|
+
/* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }),
|
|
9540
9743
|
" Mute all"
|
|
9541
9744
|
] }),
|
|
9542
9745
|
/* @__PURE__ */ jsxs3(
|
|
@@ -9546,15 +9749,15 @@ function PeoplePanel({
|
|
|
9546
9749
|
className: "mx-meet__chip",
|
|
9547
9750
|
onClick: () => void controls.run({ action: "ask_all_unmute" }),
|
|
9548
9751
|
children: [
|
|
9549
|
-
/* @__PURE__ */
|
|
9752
|
+
/* @__PURE__ */ jsx5(MicIcon, { width: 14, height: 14 }),
|
|
9550
9753
|
" Ask all to unmute"
|
|
9551
9754
|
]
|
|
9552
9755
|
}
|
|
9553
9756
|
)
|
|
9554
9757
|
] }) : null,
|
|
9555
9758
|
everyone.length > 4 ? /* @__PURE__ */ jsxs3("label", { className: "mx-meet__search", children: [
|
|
9556
|
-
/* @__PURE__ */
|
|
9557
|
-
/* @__PURE__ */
|
|
9759
|
+
/* @__PURE__ */ jsx5(SearchIcon, { width: 16, height: 16 }),
|
|
9760
|
+
/* @__PURE__ */ jsx5(
|
|
9558
9761
|
"input",
|
|
9559
9762
|
{
|
|
9560
9763
|
className: "mx-meet__input mx-meet__input--bare",
|
|
@@ -9565,31 +9768,31 @@ function PeoplePanel({
|
|
|
9565
9768
|
}
|
|
9566
9769
|
)
|
|
9567
9770
|
] }) : null,
|
|
9568
|
-
controls.notice !== null ? /* @__PURE__ */
|
|
9771
|
+
controls.notice !== null ? /* @__PURE__ */ jsx5("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
|
|
9569
9772
|
/* @__PURE__ */ jsxs3("ul", { className: "mx-meet__people", children: [
|
|
9570
9773
|
shown.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
|
|
9571
|
-
/* @__PURE__ */
|
|
9774
|
+
/* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
|
|
9572
9775
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
9573
9776
|
participant.displayName,
|
|
9574
|
-
participant.identity === local ? /* @__PURE__ */
|
|
9575
|
-
/* @__PURE__ */
|
|
9576
|
-
isNoteTaker(participant) ? /* @__PURE__ */
|
|
9577
|
-
snapshot?.spotlight === participant.identity ? /* @__PURE__ */
|
|
9777
|
+
participant.identity === local ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__you", children: " (you)" }) : null,
|
|
9778
|
+
/* @__PURE__ */ jsx5(RoleBadge, { role: participant.identity === local ? myRole : participant.role }),
|
|
9779
|
+
isNoteTaker(participant) ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
|
|
9780
|
+
snapshot?.spotlight === participant.identity ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
|
|
9578
9781
|
] }),
|
|
9579
|
-
participant.handRaised ? /* @__PURE__ */
|
|
9580
|
-
!participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */
|
|
9581
|
-
/* @__PURE__ */
|
|
9782
|
+
participant.handRaised ? /* @__PURE__ */ jsx5(HandIcon, { width: 14, height: 14 }) : null,
|
|
9783
|
+
!participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }) : null,
|
|
9784
|
+
/* @__PURE__ */ jsx5(QualityBars, { quality: participant.quality }),
|
|
9582
9785
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
9583
|
-
/* @__PURE__ */
|
|
9786
|
+
/* @__PURE__ */ jsx5(
|
|
9584
9787
|
ControlButton,
|
|
9585
9788
|
{
|
|
9586
9789
|
label: `More for ${participant.displayName}`,
|
|
9587
9790
|
active: menuFor === participant.identity,
|
|
9588
9791
|
onClick: () => setMenuFor(menuFor === participant.identity ? null : participant.identity),
|
|
9589
|
-
children: /* @__PURE__ */
|
|
9792
|
+
children: /* @__PURE__ */ jsx5(MoreIcon, { width: 16, height: 16 })
|
|
9590
9793
|
}
|
|
9591
9794
|
),
|
|
9592
|
-
menuFor === participant.identity ? /* @__PURE__ */
|
|
9795
|
+
menuFor === participant.identity ? /* @__PURE__ */ jsx5(
|
|
9593
9796
|
PersonMenu,
|
|
9594
9797
|
{
|
|
9595
9798
|
participant,
|
|
@@ -9606,7 +9809,7 @@ function PeoplePanel({
|
|
|
9606
9809
|
"\u201D."
|
|
9607
9810
|
] }) : null
|
|
9608
9811
|
] }),
|
|
9609
|
-
snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */
|
|
9812
|
+
snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ jsx5(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
|
|
9610
9813
|
] });
|
|
9611
9814
|
}
|
|
9612
9815
|
function PersonMenu({
|
|
@@ -9633,10 +9836,10 @@ function PersonMenu({
|
|
|
9633
9836
|
else setRefused(true);
|
|
9634
9837
|
});
|
|
9635
9838
|
};
|
|
9636
|
-
const refusal2 = refused && controls.notice?.failed === true ? /* @__PURE__ */
|
|
9839
|
+
const refusal2 = refused && controls.notice?.failed === true ? /* @__PURE__ */ jsx5(ErrorBox, { as: "p", className: "mx-meet__error", message: controls.notice.text, operation: "Change this participant", origin: "meet/components", children: controls.notice.text }) : null;
|
|
9637
9840
|
if (mode === "rename" || mode === "report") {
|
|
9638
9841
|
const renaming = mode === "rename";
|
|
9639
|
-
return /* @__PURE__ */
|
|
9842
|
+
return /* @__PURE__ */ jsx5(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ jsxs3(
|
|
9640
9843
|
"form",
|
|
9641
9844
|
{
|
|
9642
9845
|
className: "mx-meet__menu-form",
|
|
@@ -9649,8 +9852,8 @@ function PersonMenu({
|
|
|
9649
9852
|
},
|
|
9650
9853
|
children: [
|
|
9651
9854
|
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
9652
|
-
/* @__PURE__ */
|
|
9653
|
-
renaming ? /* @__PURE__ */
|
|
9855
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: renaming ? "Name shown in this meeting" : `What did ${participant.displayName} do?` }),
|
|
9856
|
+
renaming ? /* @__PURE__ */ jsx5(
|
|
9654
9857
|
"input",
|
|
9655
9858
|
{
|
|
9656
9859
|
className: "mx-meet__input",
|
|
@@ -9659,7 +9862,7 @@ function PersonMenu({
|
|
|
9659
9862
|
value: text3,
|
|
9660
9863
|
onChange: (event) => setText(event.target.value)
|
|
9661
9864
|
}
|
|
9662
|
-
) : /* @__PURE__ */
|
|
9865
|
+
) : /* @__PURE__ */ jsx5(
|
|
9663
9866
|
"textarea",
|
|
9664
9867
|
{
|
|
9665
9868
|
className: "mx-meet__input",
|
|
@@ -9673,8 +9876,8 @@ function PersonMenu({
|
|
|
9673
9876
|
] }),
|
|
9674
9877
|
refusal2,
|
|
9675
9878
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
|
|
9676
|
-
/* @__PURE__ */
|
|
9677
|
-
/* @__PURE__ */
|
|
9879
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Back" }),
|
|
9880
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: text3.trim().length === 0 || controls.busy, children: renaming ? "Rename" : "Report" })
|
|
9678
9881
|
] })
|
|
9679
9882
|
]
|
|
9680
9883
|
}
|
|
@@ -9682,12 +9885,12 @@ function PersonMenu({
|
|
|
9682
9885
|
}
|
|
9683
9886
|
if (mode === "remove" || mode === "transfer") {
|
|
9684
9887
|
const removing = mode === "remove";
|
|
9685
|
-
return /* @__PURE__ */
|
|
9686
|
-
/* @__PURE__ */
|
|
9888
|
+
return /* @__PURE__ */ jsx5(Popover, { label: removing ? "Remove" : "Make host", onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-form", children: [
|
|
9889
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__confirm-text", children: removing ? `Remove ${participant.displayName}? They leave immediately and cannot rejoin this meeting.` : `Make ${participant.displayName} the host? They get every host control and own this meeting. You stay on as a co-host.` }),
|
|
9687
9890
|
refusal2,
|
|
9688
9891
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
|
|
9689
|
-
/* @__PURE__ */
|
|
9690
|
-
/* @__PURE__ */
|
|
9892
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
|
|
9893
|
+
/* @__PURE__ */ jsx5(
|
|
9691
9894
|
"button",
|
|
9692
9895
|
{
|
|
9693
9896
|
type: "button",
|
|
@@ -9700,7 +9903,7 @@ function PersonMenu({
|
|
|
9700
9903
|
] })
|
|
9701
9904
|
] }) });
|
|
9702
9905
|
}
|
|
9703
|
-
return /* @__PURE__ */
|
|
9906
|
+
return /* @__PURE__ */ jsx5(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
|
|
9704
9907
|
/* @__PURE__ */ jsxs3(
|
|
9705
9908
|
MenuItem,
|
|
9706
9909
|
{
|
|
@@ -9709,7 +9912,7 @@ function PersonMenu({
|
|
|
9709
9912
|
onClose();
|
|
9710
9913
|
},
|
|
9711
9914
|
children: [
|
|
9712
|
-
/* @__PURE__ */
|
|
9915
|
+
/* @__PURE__ */ jsx5(PinIcon, { width: 16, height: 16 }),
|
|
9713
9916
|
" ",
|
|
9714
9917
|
pinned ? "Unpin" : "Pin for me"
|
|
9715
9918
|
]
|
|
@@ -9727,39 +9930,39 @@ function PersonMenu({
|
|
|
9727
9930
|
onClose();
|
|
9728
9931
|
},
|
|
9729
9932
|
children: [
|
|
9730
|
-
/* @__PURE__ */
|
|
9933
|
+
/* @__PURE__ */ jsx5(ChatIcon, { width: 16, height: 16 }),
|
|
9731
9934
|
" Message privately"
|
|
9732
9935
|
]
|
|
9733
9936
|
}
|
|
9734
9937
|
) : null,
|
|
9735
9938
|
controls.isHost ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "spotlight", identity: spotlit ? null : participant.identity }), children: [
|
|
9736
|
-
/* @__PURE__ */
|
|
9939
|
+
/* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
|
|
9737
9940
|
" ",
|
|
9738
9941
|
spotlit ? "Remove spotlight" : "Spotlight for everyone"
|
|
9739
9942
|
] }) : null,
|
|
9740
9943
|
moderate ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
9741
|
-
/* @__PURE__ */
|
|
9944
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__menu-sep", role: "separator" }),
|
|
9742
9945
|
participant.micEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "mute", identity: participant.identity }), children: [
|
|
9743
|
-
/* @__PURE__ */
|
|
9946
|
+
/* @__PURE__ */ jsx5(MicOffIcon, { width: 16, height: 16 }),
|
|
9744
9947
|
" Mute"
|
|
9745
9948
|
] }) : !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "ask_unmute", identity: participant.identity }), children: [
|
|
9746
|
-
/* @__PURE__ */
|
|
9949
|
+
/* @__PURE__ */ jsx5(MicIcon, { width: 16, height: 16 }),
|
|
9747
9950
|
" Ask to unmute"
|
|
9748
9951
|
] }) : null,
|
|
9749
9952
|
participant.cameraEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_video", identity: participant.identity }), children: [
|
|
9750
|
-
/* @__PURE__ */
|
|
9953
|
+
/* @__PURE__ */ jsx5(CameraOffIcon, { width: 16, height: 16 }),
|
|
9751
9954
|
" Stop video"
|
|
9752
9955
|
] }) : null,
|
|
9753
9956
|
participant.screenSharing ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_screen", identity: participant.identity }), children: [
|
|
9754
|
-
/* @__PURE__ */
|
|
9957
|
+
/* @__PURE__ */ jsx5(ScreenShareIcon, { width: 16, height: 16 }),
|
|
9755
9958
|
" Stop screen share"
|
|
9756
9959
|
] }) : null,
|
|
9757
9960
|
participant.handRaised ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "lower_hand", identity: participant.identity }), children: [
|
|
9758
|
-
/* @__PURE__ */
|
|
9961
|
+
/* @__PURE__ */ jsx5(HandIcon, { width: 16, height: 16 }),
|
|
9759
9962
|
" Lower hand"
|
|
9760
9963
|
] }) : null,
|
|
9761
9964
|
hasAccount && !participant.isAgent && participant.role !== "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "make_cohost", identity: participant.identity }), children: [
|
|
9762
|
-
/* @__PURE__ */
|
|
9965
|
+
/* @__PURE__ */ jsx5(PeopleIcon, { width: 16, height: 16 }),
|
|
9763
9966
|
" Make co-host"
|
|
9764
9967
|
] }) : null,
|
|
9765
9968
|
!participant.isAgent ? /* @__PURE__ */ jsxs3(
|
|
@@ -9770,18 +9973,18 @@ function PersonMenu({
|
|
|
9770
9973
|
setMode("rename");
|
|
9771
9974
|
},
|
|
9772
9975
|
children: [
|
|
9773
|
-
/* @__PURE__ */
|
|
9976
|
+
/* @__PURE__ */ jsx5(PencilIcon, { width: 16, height: 16 }),
|
|
9774
9977
|
" Rename"
|
|
9775
9978
|
]
|
|
9776
9979
|
}
|
|
9777
9980
|
) : null
|
|
9778
9981
|
] }) : null,
|
|
9779
9982
|
controls.isOwner && participant.role === "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "revoke_cohost", identity: participant.identity }), children: [
|
|
9780
|
-
/* @__PURE__ */
|
|
9983
|
+
/* @__PURE__ */ jsx5(PeopleIcon, { width: 16, height: 16 }),
|
|
9781
9984
|
" Remove co-host"
|
|
9782
9985
|
] }) : null,
|
|
9783
9986
|
controls.isOwner && !self && hasAccount && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => setMode("transfer"), children: [
|
|
9784
|
-
/* @__PURE__ */
|
|
9987
|
+
/* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
|
|
9785
9988
|
" Make host"
|
|
9786
9989
|
] }) : null,
|
|
9787
9990
|
self ? /* @__PURE__ */ jsxs3(
|
|
@@ -9792,7 +9995,7 @@ function PersonMenu({
|
|
|
9792
9995
|
setMode("rename");
|
|
9793
9996
|
},
|
|
9794
9997
|
children: [
|
|
9795
|
-
/* @__PURE__ */
|
|
9998
|
+
/* @__PURE__ */ jsx5(PencilIcon, { width: 16, height: 16 }),
|
|
9796
9999
|
" Rename yourself"
|
|
9797
10000
|
]
|
|
9798
10001
|
}
|
|
@@ -9805,13 +10008,13 @@ function PersonMenu({
|
|
|
9805
10008
|
setMode("report");
|
|
9806
10009
|
},
|
|
9807
10010
|
children: [
|
|
9808
|
-
/* @__PURE__ */
|
|
10011
|
+
/* @__PURE__ */ jsx5(FlagIcon, { width: 16, height: 16 }),
|
|
9809
10012
|
" Report"
|
|
9810
10013
|
]
|
|
9811
10014
|
}
|
|
9812
10015
|
) : null,
|
|
9813
10016
|
moderate && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { danger: true, onSelect: () => setMode("remove"), children: [
|
|
9814
|
-
/* @__PURE__ */
|
|
10017
|
+
/* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }),
|
|
9815
10018
|
" Remove from meeting"
|
|
9816
10019
|
] }) : null
|
|
9817
10020
|
] }) });
|
|
@@ -9819,7 +10022,7 @@ function PersonMenu({
|
|
|
9819
10022
|
function SettingsPanel({ onClose }) {
|
|
9820
10023
|
const host = useRequiredMeetHost();
|
|
9821
10024
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Settings", onClose, children: [
|
|
9822
|
-
/* @__PURE__ */
|
|
10025
|
+
/* @__PURE__ */ jsx5(
|
|
9823
10026
|
DeviceSettings,
|
|
9824
10027
|
{
|
|
9825
10028
|
onPick: (kind, deviceId2) => {
|
|
@@ -9828,8 +10031,8 @@ function SettingsPanel({ onClose }) {
|
|
|
9828
10031
|
}
|
|
9829
10032
|
}
|
|
9830
10033
|
),
|
|
9831
|
-
/* @__PURE__ */
|
|
9832
|
-
/* @__PURE__ */
|
|
10034
|
+
/* @__PURE__ */ jsx5(EffectsSettings, {}),
|
|
10035
|
+
/* @__PURE__ */ jsx5(CaptionLanguageSettings, {})
|
|
9833
10036
|
] });
|
|
9834
10037
|
}
|
|
9835
10038
|
function DeviceSettings({
|
|
@@ -9842,13 +10045,13 @@ function DeviceSettings({
|
|
|
9842
10045
|
const stream = useMicrophoneStream(microphone);
|
|
9843
10046
|
const level = useAudioLevel(stream);
|
|
9844
10047
|
const [testing, setTesting] = useState4(false);
|
|
9845
|
-
|
|
10048
|
+
useEffect6(() => {
|
|
9846
10049
|
void host.devices.refresh();
|
|
9847
10050
|
}, [host]);
|
|
9848
10051
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
|
|
9849
|
-
/* @__PURE__ */
|
|
9850
|
-
/* @__PURE__ */
|
|
9851
|
-
/* @__PURE__ */
|
|
10052
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "audioinput", label: "Microphone", onPick }),
|
|
10053
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__meter", role: "meter", "aria-label": "Microphone level", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(level * 100), children: /* @__PURE__ */ jsx5("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }),
|
|
10054
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "audiooutput", label: "Speaker", onPick }),
|
|
9852
10055
|
/* @__PURE__ */ jsxs3(
|
|
9853
10056
|
"button",
|
|
9854
10057
|
{
|
|
@@ -9860,19 +10063,19 @@ function DeviceSettings({
|
|
|
9860
10063
|
void playTestSound(speaker).finally(() => setTesting(false));
|
|
9861
10064
|
},
|
|
9862
10065
|
children: [
|
|
9863
|
-
/* @__PURE__ */
|
|
10066
|
+
/* @__PURE__ */ jsx5(SpeakerIcon, { width: 14, height: 14 }),
|
|
9864
10067
|
" ",
|
|
9865
10068
|
testing ? "Playing\u2026" : "Test speaker"
|
|
9866
10069
|
]
|
|
9867
10070
|
}
|
|
9868
10071
|
),
|
|
9869
|
-
/* @__PURE__ */
|
|
10072
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
|
|
9870
10073
|
] });
|
|
9871
10074
|
}
|
|
9872
10075
|
function EffectsSettings({ preview }) {
|
|
9873
10076
|
const effects = useMediaEffects();
|
|
9874
10077
|
const [error, setError] = useState4(null);
|
|
9875
|
-
const fileRef =
|
|
10078
|
+
const fileRef = useRef6(null);
|
|
9876
10079
|
const supported = effects.backgroundsSupported || preview != null || videoEffectsSupported();
|
|
9877
10080
|
const apply = (next) => {
|
|
9878
10081
|
setError(null);
|
|
@@ -9886,7 +10089,7 @@ function EffectsSettings({ preview }) {
|
|
|
9886
10089
|
};
|
|
9887
10090
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Effects", children: [
|
|
9888
10091
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
9889
|
-
/* @__PURE__ */
|
|
10092
|
+
/* @__PURE__ */ jsx5(
|
|
9890
10093
|
Checkbox,
|
|
9891
10094
|
{
|
|
9892
10095
|
id: "mx-meet-noise",
|
|
@@ -9895,13 +10098,13 @@ function EffectsSettings({ preview }) {
|
|
|
9895
10098
|
}
|
|
9896
10099
|
),
|
|
9897
10100
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check-text", children: [
|
|
9898
|
-
/* @__PURE__ */
|
|
9899
|
-
/* @__PURE__ */
|
|
10101
|
+
/* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-noise", children: "Noise suppression" }),
|
|
10102
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__hint", children: "Filters keyboards, fans and background chatter." })
|
|
9900
10103
|
] })
|
|
9901
10104
|
] }),
|
|
9902
10105
|
supported ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
|
|
9903
|
-
/* @__PURE__ */
|
|
9904
|
-
/* @__PURE__ */
|
|
10106
|
+
/* @__PURE__ */ jsx5(Label, { children: "Background" }),
|
|
10107
|
+
/* @__PURE__ */ jsx5(
|
|
9905
10108
|
SegmentedControl,
|
|
9906
10109
|
{
|
|
9907
10110
|
fullWidth: true,
|
|
@@ -9920,7 +10123,7 @@ function EffectsSettings({ preview }) {
|
|
|
9920
10123
|
]
|
|
9921
10124
|
}
|
|
9922
10125
|
),
|
|
9923
|
-
/* @__PURE__ */
|
|
10126
|
+
/* @__PURE__ */ jsx5(
|
|
9924
10127
|
"input",
|
|
9925
10128
|
{
|
|
9926
10129
|
ref: fileRef,
|
|
@@ -9935,7 +10138,7 @@ function EffectsSettings({ preview }) {
|
|
|
9935
10138
|
}
|
|
9936
10139
|
}
|
|
9937
10140
|
),
|
|
9938
|
-
error !== null ? /* @__PURE__ */
|
|
10141
|
+
error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__error", children: error }) : null
|
|
9939
10142
|
] }) : null
|
|
9940
10143
|
] });
|
|
9941
10144
|
}
|
|
@@ -9995,7 +10198,7 @@ async function playTestSound(sinkId) {
|
|
|
9995
10198
|
}
|
|
9996
10199
|
function useMicrophoneStream(deviceId2) {
|
|
9997
10200
|
const [stream, setStream] = useState4(null);
|
|
9998
|
-
|
|
10201
|
+
useEffect6(() => {
|
|
9999
10202
|
if (deviceId2 === "off") return void 0;
|
|
10000
10203
|
let live = true;
|
|
10001
10204
|
let opened = null;
|
|
@@ -10022,26 +10225,35 @@ function LobbyPanel() {
|
|
|
10022
10225
|
if (!lobby.canAdmit || lobby.waiting.length === 0) return null;
|
|
10023
10226
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__lobby", "aria-label": "Waiting room", children: [
|
|
10024
10227
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__lobby-head", children: [
|
|
10025
|
-
/* @__PURE__ */
|
|
10026
|
-
/* @__PURE__ */
|
|
10228
|
+
/* @__PURE__ */ jsx5("h3", { className: "mx-meet__lobby-title", children: lobby.waiting.length === 1 ? "1 person is waiting" : `${lobby.waiting.length} people are waiting` }),
|
|
10229
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => void lobby.admitAll(), children: "Admit all" })
|
|
10027
10230
|
] }),
|
|
10028
|
-
/* @__PURE__ */
|
|
10029
|
-
|
|
10030
|
-
|
|
10031
|
-
|
|
10032
|
-
entry
|
|
10033
|
-
|
|
10034
|
-
|
|
10035
|
-
|
|
10036
|
-
|
|
10037
|
-
|
|
10038
|
-
|
|
10039
|
-
|
|
10040
|
-
onClick: () => void lobby.
|
|
10041
|
-
|
|
10042
|
-
|
|
10043
|
-
|
|
10044
|
-
|
|
10231
|
+
/* @__PURE__ */ jsx5("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ jsxs3(
|
|
10232
|
+
"li",
|
|
10233
|
+
{
|
|
10234
|
+
className: "mx-meet__lobby-row",
|
|
10235
|
+
"data-meet-lobby-entry": "",
|
|
10236
|
+
"data-meet-participant-name": entry.displayName,
|
|
10237
|
+
children: [
|
|
10238
|
+
/* @__PURE__ */ jsx5(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
|
|
10239
|
+
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
10240
|
+
entry.displayName,
|
|
10241
|
+
entry.userId === null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Guest" }) : null
|
|
10242
|
+
] }),
|
|
10243
|
+
/* @__PURE__ */ jsx5(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx5(CheckIcon, { width: 16, height: 16 }) }),
|
|
10244
|
+
/* @__PURE__ */ jsx5(
|
|
10245
|
+
ControlButton,
|
|
10246
|
+
{
|
|
10247
|
+
label: `Deny ${entry.displayName}`,
|
|
10248
|
+
danger: true,
|
|
10249
|
+
onClick: () => void lobby.deny(entry),
|
|
10250
|
+
children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 })
|
|
10251
|
+
}
|
|
10252
|
+
)
|
|
10253
|
+
]
|
|
10254
|
+
},
|
|
10255
|
+
entry.identity
|
|
10256
|
+
)) })
|
|
10045
10257
|
] });
|
|
10046
10258
|
}
|
|
10047
10259
|
function NoteTakerRow() {
|
|
@@ -10050,19 +10262,19 @@ function NoteTakerRow() {
|
|
|
10050
10262
|
const duplicateError = status.refusal !== null && ai.error !== null && status.refusal.reason === ai.error.message && status.refusal.remedy === ai.error.remedy;
|
|
10051
10263
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-taker", "aria-label": "Note-taker", children: [
|
|
10052
10264
|
/* @__PURE__ */ jsxs3("p", { className: `mx-meet__note-taker-state mx-meet__note-taker-state--${status.state}`, children: [
|
|
10053
|
-
/* @__PURE__ */
|
|
10265
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
|
|
10054
10266
|
ai.noteTakerLabel
|
|
10055
10267
|
] }),
|
|
10056
|
-
status.detail !== null ? /* @__PURE__ */
|
|
10268
|
+
status.detail !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
|
|
10057
10269
|
status.refusal !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: status.refusal, operation: "Join this meeting", origin: "meet/components", children: [
|
|
10058
|
-
/* @__PURE__ */
|
|
10059
|
-
status.refusal.remedy.length > 0 ? /* @__PURE__ */
|
|
10270
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: status.refusal.reason }),
|
|
10271
|
+
status.refusal.remedy.length > 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: status.refusal.remedy }) : null
|
|
10060
10272
|
] }) : null,
|
|
10061
10273
|
ai.error !== null && !duplicateError ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
|
|
10062
|
-
/* @__PURE__ */
|
|
10063
|
-
/* @__PURE__ */
|
|
10274
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
|
|
10275
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
|
|
10064
10276
|
] }) : null,
|
|
10065
|
-
ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */
|
|
10277
|
+
ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ jsx5(
|
|
10066
10278
|
"button",
|
|
10067
10279
|
{
|
|
10068
10280
|
type: "button",
|
|
@@ -10070,7 +10282,7 @@ function NoteTakerRow() {
|
|
|
10070
10282
|
onClick: () => void ai.stopNoteTaker(),
|
|
10071
10283
|
children: "Dismiss the note-taker"
|
|
10072
10284
|
}
|
|
10073
|
-
) : /* @__PURE__ */
|
|
10285
|
+
) : /* @__PURE__ */ jsx5(
|
|
10074
10286
|
"button",
|
|
10075
10287
|
{
|
|
10076
10288
|
type: "button",
|
|
@@ -10087,10 +10299,10 @@ function NoteList({
|
|
|
10087
10299
|
empty
|
|
10088
10300
|
}) {
|
|
10089
10301
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": title, children: [
|
|
10090
|
-
/* @__PURE__ */
|
|
10091
|
-
notes.length === 0 ? /* @__PURE__ */
|
|
10302
|
+
/* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: title }),
|
|
10303
|
+
notes.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: empty }) : /* @__PURE__ */ jsx5("ul", { className: "mx-meet__notes", children: notes.map((note) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__note", children: [
|
|
10092
10304
|
note.text,
|
|
10093
|
-
note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */
|
|
10305
|
+
note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
|
|
10094
10306
|
] }, note.id)) })
|
|
10095
10307
|
] });
|
|
10096
10308
|
}
|
|
@@ -10098,10 +10310,10 @@ function AiPanel({ onClose }) {
|
|
|
10098
10310
|
const ai = useMeetAi();
|
|
10099
10311
|
const [question, setQuestion] = useState4("");
|
|
10100
10312
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Meeting assistant", onClose, children: [
|
|
10101
|
-
/* @__PURE__ */
|
|
10313
|
+
/* @__PURE__ */ jsx5(NoteTakerRow, {}),
|
|
10102
10314
|
ai.summary !== null ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Summary", children: [
|
|
10103
|
-
/* @__PURE__ */
|
|
10104
|
-
/* @__PURE__ */
|
|
10315
|
+
/* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
|
|
10316
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__summary", children: ai.summary.text })
|
|
10105
10317
|
] }) : null,
|
|
10106
10318
|
ai.wrapUp !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__wrap-up-notice", role: "status", children: [
|
|
10107
10319
|
"The wrap-up is written \u2014 ",
|
|
@@ -10115,7 +10327,7 @@ function AiPanel({ onClose }) {
|
|
|
10115
10327
|
ai.wrapUp.segmentCount === 1 ? "transcript line" : "transcript lines",
|
|
10116
10328
|
"."
|
|
10117
10329
|
] }) : null,
|
|
10118
|
-
/* @__PURE__ */
|
|
10330
|
+
/* @__PURE__ */ jsx5(
|
|
10119
10331
|
NoteList,
|
|
10120
10332
|
{
|
|
10121
10333
|
title: "Notes",
|
|
@@ -10123,7 +10335,7 @@ function AiPanel({ onClose }) {
|
|
|
10123
10335
|
empty: "Notes appear here as the meeting goes on."
|
|
10124
10336
|
}
|
|
10125
10337
|
),
|
|
10126
|
-
/* @__PURE__ */
|
|
10338
|
+
/* @__PURE__ */ jsx5(
|
|
10127
10339
|
NoteList,
|
|
10128
10340
|
{
|
|
10129
10341
|
title: "Decisions",
|
|
@@ -10131,7 +10343,7 @@ function AiPanel({ onClose }) {
|
|
|
10131
10343
|
empty: "Nothing has been decided yet."
|
|
10132
10344
|
}
|
|
10133
10345
|
),
|
|
10134
|
-
/* @__PURE__ */
|
|
10346
|
+
/* @__PURE__ */ jsx5(
|
|
10135
10347
|
NoteList,
|
|
10136
10348
|
{
|
|
10137
10349
|
title: "Action items",
|
|
@@ -10140,14 +10352,14 @@ function AiPanel({ onClose }) {
|
|
|
10140
10352
|
}
|
|
10141
10353
|
),
|
|
10142
10354
|
ai.transcript.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Transcript", children: [
|
|
10143
|
-
/* @__PURE__ */
|
|
10144
|
-
/* @__PURE__ */
|
|
10355
|
+
/* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: "Transcript" }),
|
|
10356
|
+
/* @__PURE__ */ jsx5("ul", { className: "mx-meet__transcript", children: ai.transcript.map((line) => /* @__PURE__ */ jsxs3(
|
|
10145
10357
|
"li",
|
|
10146
10358
|
{
|
|
10147
10359
|
className: line.final && line.source === "record" ? "mx-meet__line" : "mx-meet__line mx-meet__line--interim",
|
|
10148
10360
|
children: [
|
|
10149
|
-
/* @__PURE__ */
|
|
10150
|
-
/* @__PURE__ */
|
|
10361
|
+
/* @__PURE__ */ jsx5("strong", { children: line.speaker }),
|
|
10362
|
+
/* @__PURE__ */ jsx5("span", { children: line.text })
|
|
10151
10363
|
]
|
|
10152
10364
|
},
|
|
10153
10365
|
line.id
|
|
@@ -10164,7 +10376,7 @@ function AiPanel({ onClose }) {
|
|
|
10164
10376
|
void ai.ask(asked);
|
|
10165
10377
|
},
|
|
10166
10378
|
children: [
|
|
10167
|
-
/* @__PURE__ */
|
|
10379
|
+
/* @__PURE__ */ jsx5(
|
|
10168
10380
|
"input",
|
|
10169
10381
|
{
|
|
10170
10382
|
className: "mx-meet__input",
|
|
@@ -10174,12 +10386,12 @@ function AiPanel({ onClose }) {
|
|
|
10174
10386
|
"aria-label": "Ask about this meeting"
|
|
10175
10387
|
}
|
|
10176
10388
|
),
|
|
10177
|
-
/* @__PURE__ */
|
|
10389
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
|
|
10178
10390
|
]
|
|
10179
10391
|
}
|
|
10180
10392
|
),
|
|
10181
|
-
ai.asking && ai.phase !== null ? /* @__PURE__ */
|
|
10182
|
-
ai.answer !== null ? /* @__PURE__ */
|
|
10393
|
+
ai.asking && ai.phase !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", role: "status", children: ai.phase }) : null,
|
|
10394
|
+
ai.answer !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__answer", children: ai.answer }) : null,
|
|
10183
10395
|
ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__coverage", children: [
|
|
10184
10396
|
"Answered from ",
|
|
10185
10397
|
ai.coverage.segmentsUsed,
|
|
@@ -10190,8 +10402,8 @@ function AiPanel({ onClose }) {
|
|
|
10190
10402
|
"."
|
|
10191
10403
|
] }) : null,
|
|
10192
10404
|
ai.error !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
|
|
10193
|
-
/* @__PURE__ */
|
|
10194
|
-
/* @__PURE__ */
|
|
10405
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
|
|
10406
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
|
|
10195
10407
|
] }) : null
|
|
10196
10408
|
] });
|
|
10197
10409
|
}
|
|
@@ -10208,37 +10420,46 @@ function Captions({ lines = 3 }) {
|
|
|
10208
10420
|
{
|
|
10209
10421
|
className: line.final ? "mx-meet__caption" : "mx-meet__caption mx-meet__caption--interim",
|
|
10210
10422
|
children: [
|
|
10211
|
-
/* @__PURE__ */
|
|
10423
|
+
/* @__PURE__ */ jsx5("strong", { children: line.speaker }),
|
|
10212
10424
|
" ",
|
|
10213
10425
|
translated ?? line.text,
|
|
10214
|
-
translated !== void 0 ? /* @__PURE__ */
|
|
10426
|
+
translated !== void 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__caption-original", children: line.text }) : null
|
|
10215
10427
|
]
|
|
10216
10428
|
},
|
|
10217
10429
|
line.id
|
|
10218
10430
|
);
|
|
10219
10431
|
}),
|
|
10220
|
-
translation.language !== null && translation.error !== null ? /* @__PURE__ */
|
|
10432
|
+
translation.language !== null && translation.error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
|
|
10221
10433
|
] });
|
|
10222
10434
|
}
|
|
10223
10435
|
function ConsentNotice() {
|
|
10224
10436
|
const notice = useConsentNotice();
|
|
10225
10437
|
if (notice === null) return null;
|
|
10226
|
-
return /* @__PURE__ */
|
|
10438
|
+
return /* @__PURE__ */ jsx5("p", { className: "mx-meet__consent", role: "status", children: notice });
|
|
10227
10439
|
}
|
|
10228
10440
|
function AttendanceNotice() {
|
|
10229
10441
|
const media = useLocalMedia();
|
|
10230
10442
|
const notice = listenOnlyNotice(media);
|
|
10231
10443
|
if (notice === null) return null;
|
|
10232
10444
|
const refused = media.microphone.unavailable;
|
|
10233
|
-
|
|
10234
|
-
|
|
10235
|
-
|
|
10236
|
-
|
|
10445
|
+
const code = microphoneNoticeCode(media.microphone);
|
|
10446
|
+
return /* @__PURE__ */ jsxs3(
|
|
10447
|
+
"p",
|
|
10448
|
+
{
|
|
10449
|
+
className: "mx-meet__banner mx-meet__banner--attendance",
|
|
10450
|
+
role: "status",
|
|
10451
|
+
...code !== null ? { "data-meet-notice": code } : {},
|
|
10452
|
+
children: [
|
|
10453
|
+
notice,
|
|
10454
|
+
refused === null ? null : /* @__PURE__ */ jsx5("span", { className: "mx-meet__remedy", children: refused.remedy })
|
|
10455
|
+
]
|
|
10456
|
+
}
|
|
10457
|
+
);
|
|
10237
10458
|
}
|
|
10238
10459
|
function PreJoin(props) {
|
|
10239
10460
|
const host = useMeetHost();
|
|
10240
|
-
if (host === null) return /* @__PURE__ */
|
|
10241
|
-
return /* @__PURE__ */
|
|
10461
|
+
if (host === null) return /* @__PURE__ */ jsx5(InertNotice, { what: "This meeting" });
|
|
10462
|
+
return /* @__PURE__ */ jsx5(PreJoinBody, { ...props, host });
|
|
10242
10463
|
}
|
|
10243
10464
|
function PreJoinBody({
|
|
10244
10465
|
roomName,
|
|
@@ -10261,12 +10482,12 @@ function PreJoinBody({
|
|
|
10261
10482
|
const micStream = useMicrophoneStream(microphone ? mic : "off");
|
|
10262
10483
|
const level = useAudioLevel(micStream);
|
|
10263
10484
|
const [speakerTesting, setSpeakerTesting] = useState4(false);
|
|
10264
|
-
|
|
10485
|
+
useEffect6(() => {
|
|
10265
10486
|
void host.devices.refresh();
|
|
10266
10487
|
}, [host]);
|
|
10267
10488
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin", children: [
|
|
10268
10489
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__preview", children: [
|
|
10269
|
-
mode === "video" && preview.preview !== null ? /* @__PURE__ */
|
|
10490
|
+
mode === "video" && preview.preview !== null ? /* @__PURE__ */ jsx5(
|
|
10270
10491
|
"video",
|
|
10271
10492
|
{
|
|
10272
10493
|
className: "mx-meet__video mx-meet__video--mirror",
|
|
@@ -10277,16 +10498,16 @@ function PreJoinBody({
|
|
|
10277
10498
|
if (element !== null) preview.preview?.attach(element);
|
|
10278
10499
|
}
|
|
10279
10500
|
}
|
|
10280
|
-
) : /* @__PURE__ */
|
|
10281
|
-
mode === "video" && preview.error !== null ? /* @__PURE__ */
|
|
10282
|
-
microphone && micStream !== null ? /* @__PURE__ */
|
|
10501
|
+
) : /* @__PURE__ */ jsx5("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx5(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 96 }) }),
|
|
10502
|
+
mode === "video" && preview.error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__preview-note", children: preview.error }) : null,
|
|
10503
|
+
microphone && micStream !== null ? /* @__PURE__ */ jsx5("div", { className: "mx-meet__meter mx-meet__meter--preview", role: "meter", "aria-label": "Microphone level", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(level * 100), children: /* @__PURE__ */ jsx5("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }) : null
|
|
10283
10504
|
] }),
|
|
10284
10505
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-panel", children: [
|
|
10285
|
-
/* @__PURE__ */
|
|
10286
|
-
notice?.kind === "removed" ? /* @__PURE__ */
|
|
10506
|
+
/* @__PURE__ */ jsx5("h1", { className: "mx-meet__prejoin-title", children: "Ready to join?" }),
|
|
10507
|
+
notice?.kind === "removed" ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__warning", children: notice.text }) : null,
|
|
10287
10508
|
devices?.labelsHidden === true ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
|
|
10288
10509
|
"Your browser is hiding device names until you allow camera and microphone access.",
|
|
10289
|
-
/* @__PURE__ */
|
|
10510
|
+
/* @__PURE__ */ jsx5(
|
|
10290
10511
|
"button",
|
|
10291
10512
|
{
|
|
10292
10513
|
type: "button",
|
|
@@ -10298,10 +10519,10 @@ function PreJoinBody({
|
|
|
10298
10519
|
}
|
|
10299
10520
|
)
|
|
10300
10521
|
] }) : null,
|
|
10301
|
-
devices?.fallbackNotice != null ? /* @__PURE__ */
|
|
10302
|
-
/* @__PURE__ */
|
|
10522
|
+
devices?.fallbackNotice != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
|
|
10523
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "audioinput", label: "Microphone" }),
|
|
10303
10524
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__field-row", children: [
|
|
10304
|
-
/* @__PURE__ */
|
|
10525
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
|
|
10305
10526
|
/* @__PURE__ */ jsxs3(
|
|
10306
10527
|
Button,
|
|
10307
10528
|
{
|
|
@@ -10315,19 +10536,19 @@ function PreJoinBody({
|
|
|
10315
10536
|
);
|
|
10316
10537
|
},
|
|
10317
10538
|
children: [
|
|
10318
|
-
/* @__PURE__ */
|
|
10539
|
+
/* @__PURE__ */ jsx5(SpeakerIcon, {}),
|
|
10319
10540
|
" ",
|
|
10320
10541
|
speakerTesting ? "Playing\u2026" : "Test"
|
|
10321
10542
|
]
|
|
10322
10543
|
}
|
|
10323
10544
|
)
|
|
10324
10545
|
] }),
|
|
10325
|
-
/* @__PURE__ */
|
|
10326
|
-
/* @__PURE__ */
|
|
10327
|
-
recording.consentNotice !== null ? /* @__PURE__ */
|
|
10546
|
+
/* @__PURE__ */ jsx5(DevicePicker, { kind: "videoinput", label: "Camera" }),
|
|
10547
|
+
/* @__PURE__ */ jsx5(EffectsSettings, { preview: preview.preview }),
|
|
10548
|
+
recording.consentNotice !== null ? /* @__PURE__ */ jsx5(Alert, { variant: "info", children: /* @__PURE__ */ jsx5(AlertDescription, { children: recording.consentNotice }) }) : null,
|
|
10328
10549
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-actions", children: [
|
|
10329
10550
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
10330
|
-
/* @__PURE__ */
|
|
10551
|
+
/* @__PURE__ */ jsx5(
|
|
10331
10552
|
Checkbox,
|
|
10332
10553
|
{
|
|
10333
10554
|
id: "mx-meet-join-video",
|
|
@@ -10335,10 +10556,10 @@ function PreJoinBody({
|
|
|
10335
10556
|
onCheckedChange: (checked) => setMode(checked === true ? "video" : "audio")
|
|
10336
10557
|
}
|
|
10337
10558
|
),
|
|
10338
|
-
/* @__PURE__ */
|
|
10559
|
+
/* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
|
|
10339
10560
|
] }),
|
|
10340
10561
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
10341
|
-
/* @__PURE__ */
|
|
10562
|
+
/* @__PURE__ */ jsx5(
|
|
10342
10563
|
Checkbox,
|
|
10343
10564
|
{
|
|
10344
10565
|
id: "mx-meet-join-mic",
|
|
@@ -10346,9 +10567,9 @@ function PreJoinBody({
|
|
|
10346
10567
|
onCheckedChange: (checked) => setMicrophone(checked === true)
|
|
10347
10568
|
}
|
|
10348
10569
|
),
|
|
10349
|
-
/* @__PURE__ */
|
|
10570
|
+
/* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
|
|
10350
10571
|
] }),
|
|
10351
|
-
/* @__PURE__ */
|
|
10572
|
+
/* @__PURE__ */ jsx5(
|
|
10352
10573
|
Button,
|
|
10353
10574
|
{
|
|
10354
10575
|
type: "button",
|
|
@@ -10371,7 +10592,7 @@ function PreJoinBody({
|
|
|
10371
10592
|
] }),
|
|
10372
10593
|
room.failure !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__error", children: [
|
|
10373
10594
|
room.failure.message,
|
|
10374
|
-
/* @__PURE__ */
|
|
10595
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__remedy", children: room.failure.remedy })
|
|
10375
10596
|
] }) : null
|
|
10376
10597
|
] })
|
|
10377
10598
|
] });
|
|
@@ -10379,10 +10600,10 @@ function PreJoinBody({
|
|
|
10379
10600
|
function useCameraPreview(deviceId2, effects) {
|
|
10380
10601
|
const [preview, setPreview] = useState4(null);
|
|
10381
10602
|
const [error, setError] = useState4(null);
|
|
10382
|
-
const current =
|
|
10383
|
-
const initialEffect =
|
|
10603
|
+
const current = useRef6(null);
|
|
10604
|
+
const initialEffect = useRef6(toVideoEffect(effects));
|
|
10384
10605
|
initialEffect.current = toVideoEffect(effects);
|
|
10385
|
-
|
|
10606
|
+
useEffect6(() => {
|
|
10386
10607
|
if (deviceId2 === void 0) return void 0;
|
|
10387
10608
|
let live = true;
|
|
10388
10609
|
setError(null);
|
|
@@ -10430,7 +10651,7 @@ function DevicePicker({
|
|
|
10430
10651
|
const valueOf = (deviceId2) => deviceId2.length > 0 ? deviceId2 : "default";
|
|
10431
10652
|
const current = devices?.selected[kind] ?? host.devices.resolve(kind) ?? "";
|
|
10432
10653
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
|
|
10433
|
-
/* @__PURE__ */
|
|
10654
|
+
/* @__PURE__ */ jsx5(Label, { htmlFor: triggerId, children: label }),
|
|
10434
10655
|
/* @__PURE__ */ jsxs3(
|
|
10435
10656
|
Select,
|
|
10436
10657
|
{
|
|
@@ -10441,52 +10662,26 @@ function DevicePicker({
|
|
|
10441
10662
|
else host.devices.select(kind, deviceId2);
|
|
10442
10663
|
},
|
|
10443
10664
|
children: [
|
|
10444
|
-
/* @__PURE__ */
|
|
10445
|
-
/* @__PURE__ */
|
|
10665
|
+
/* @__PURE__ */ jsx5(SelectTrigger, { id: triggerId, "aria-label": label, children: /* @__PURE__ */ jsx5(SelectValue, { placeholder: label }) }),
|
|
10666
|
+
/* @__PURE__ */ jsx5(SelectContent, { children: list.map((device) => /* @__PURE__ */ jsx5(SelectItem, { value: valueOf(device.deviceId), children: device.label.length > 0 ? device.label : `${label} (name hidden)` }, device.deviceId || "default")) })
|
|
10446
10667
|
]
|
|
10447
10668
|
}
|
|
10448
10669
|
)
|
|
10449
10670
|
] });
|
|
10450
10671
|
}
|
|
10451
|
-
function
|
|
10452
|
-
const host = useMeetHost();
|
|
10453
|
-
if (host === null) {
|
|
10454
|
-
return /* @__PURE__ */ jsx4("div", { className: "mx-meet", children: /* @__PURE__ */ jsx4(InertNotice, { what: "This meeting" }) });
|
|
10455
|
-
}
|
|
10456
|
-
return /* @__PURE__ */ jsx4(MeetingRoomBody, { ...props, host });
|
|
10457
|
-
}
|
|
10458
|
-
function MeetingRoomBody({
|
|
10672
|
+
function MeetSkinRoom({
|
|
10459
10673
|
roomName,
|
|
10460
10674
|
meetingId,
|
|
10461
10675
|
slug,
|
|
10462
|
-
meeting: given,
|
|
10463
10676
|
onLeave,
|
|
10464
|
-
headerControls
|
|
10465
|
-
host
|
|
10677
|
+
headerControls
|
|
10466
10678
|
}) {
|
|
10467
|
-
const snapshot =
|
|
10468
|
-
const isHost = useIsHost();
|
|
10679
|
+
const { host, snapshot, isHost } = useMeetCore();
|
|
10469
10680
|
const elapsed = useElapsed(snapshot?.meeting?.startedAt ?? null);
|
|
10470
10681
|
const phase = snapshot?.phase ?? "idle";
|
|
10471
|
-
|
|
10472
|
-
host.meetings.watch(roomName);
|
|
10473
|
-
}, [host, roomName]);
|
|
10474
|
-
useEffect4(() => {
|
|
10475
|
-
if (given === void 0) return;
|
|
10476
|
-
if (host.store.snapshot().meeting !== null) return;
|
|
10477
|
-
host.store.patch({ meeting: given, locked: given.locked });
|
|
10478
|
-
}, [host, given]);
|
|
10479
|
-
const watchedId = meetingId ?? snapshot?.meeting?.id ?? null;
|
|
10480
|
-
useEffect4(() => {
|
|
10481
|
-
if (watchedId === null) return;
|
|
10482
|
-
host.meetings.watchMeeting(asMeetingId(watchedId));
|
|
10483
|
-
}, [host, watchedId]);
|
|
10484
|
-
const record = snapshot?.meeting ?? given ?? null;
|
|
10485
|
-
if (hasEnded(record) && phase !== "connected" && phase !== "reconnecting") {
|
|
10486
|
-
return /* @__PURE__ */ jsx4(MeetingRecordView, { meeting: record });
|
|
10487
|
-
}
|
|
10682
|
+
if (host === null) return null;
|
|
10488
10683
|
if (phase === "idle" || phase === "failed" || phase === "left") {
|
|
10489
|
-
return /* @__PURE__ */
|
|
10684
|
+
return /* @__PURE__ */ jsx5("div", { className: "mx-meet", children: /* @__PURE__ */ jsx5(
|
|
10490
10685
|
PreJoin,
|
|
10491
10686
|
{
|
|
10492
10687
|
roomName,
|
|
@@ -10496,41 +10691,41 @@ function MeetingRoomBody({
|
|
|
10496
10691
|
) });
|
|
10497
10692
|
}
|
|
10498
10693
|
if (phase === "lobby") {
|
|
10499
|
-
return /* @__PURE__ */
|
|
10694
|
+
return /* @__PURE__ */ jsx5("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ jsx5(WaitingRoom, { roomName, host }) });
|
|
10500
10695
|
}
|
|
10501
10696
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet", children: [
|
|
10502
|
-
/* @__PURE__ */
|
|
10503
|
-
/* @__PURE__ */
|
|
10697
|
+
/* @__PURE__ */ jsx5(ConsentNotice, {}),
|
|
10698
|
+
/* @__PURE__ */ jsx5(AttendanceNotice, {}),
|
|
10504
10699
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__header", children: [
|
|
10505
|
-
/* @__PURE__ */
|
|
10700
|
+
/* @__PURE__ */ jsx5("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
|
|
10506
10701
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__meta", children: [
|
|
10507
10702
|
participantSummary(snapshot?.participants ?? []),
|
|
10508
|
-
elapsed > 0 ? ` \xB7 ${
|
|
10703
|
+
elapsed > 0 ? ` \xB7 ${formatDurationMs3(elapsed)}` : ""
|
|
10509
10704
|
] }),
|
|
10510
|
-
/* @__PURE__ */
|
|
10705
|
+
/* @__PURE__ */ jsx5(RecordingIndicator, {}),
|
|
10511
10706
|
snapshot?.locked === true ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__badge", children: [
|
|
10512
|
-
/* @__PURE__ */
|
|
10707
|
+
/* @__PURE__ */ jsx5(LockIcon, { width: 12, height: 12 }),
|
|
10513
10708
|
" Locked"
|
|
10514
10709
|
] }) : null,
|
|
10515
|
-
headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */
|
|
10516
|
-
isHost ? /* @__PURE__ */
|
|
10710
|
+
headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__header-controls", "data-meet-header-controls": "", children: headerControls }) : null,
|
|
10711
|
+
isHost ? /* @__PURE__ */ jsx5(HostMenu, {}) : null
|
|
10517
10712
|
] }),
|
|
10518
|
-
phase === "reconnecting" ? /* @__PURE__ */
|
|
10519
|
-
/* @__PURE__ */
|
|
10520
|
-
/* @__PURE__ */
|
|
10521
|
-
/* @__PURE__ */
|
|
10713
|
+
phase === "reconnecting" ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__banner", role: "status", children: "Reconnecting\u2026" }) : null,
|
|
10714
|
+
/* @__PURE__ */ jsx5(Stage, {}),
|
|
10715
|
+
/* @__PURE__ */ jsx5(Captions, {}),
|
|
10716
|
+
/* @__PURE__ */ jsx5(ControlBar, { ...onLeave !== void 0 ? { onLeave } : {} })
|
|
10522
10717
|
] });
|
|
10523
10718
|
}
|
|
10524
10719
|
function WaitingRoom({ roomName, host }) {
|
|
10525
|
-
const knocked =
|
|
10526
|
-
|
|
10720
|
+
const knocked = useRef6(false);
|
|
10721
|
+
useEffect6(() => {
|
|
10527
10722
|
if (knocked.current) return;
|
|
10528
10723
|
knocked.current = true;
|
|
10529
10724
|
host.meetings.knock(roomName);
|
|
10530
10725
|
}, [host, roomName]);
|
|
10531
10726
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__waiting", children: [
|
|
10532
|
-
/* @__PURE__ */
|
|
10533
|
-
/* @__PURE__ */
|
|
10727
|
+
/* @__PURE__ */ jsx5(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 72 }),
|
|
10728
|
+
/* @__PURE__ */ jsx5("h1", { className: "mx-meet__prejoin-title", children: "Waiting for the host to let you in" }),
|
|
10534
10729
|
/* @__PURE__ */ jsxs3("p", { className: "mx-meet__empty-body", children: [
|
|
10535
10730
|
"You are in the waiting room as ",
|
|
10536
10731
|
host.identity.displayName,
|
|
@@ -10545,7 +10740,7 @@ function HostMenu() {
|
|
|
10545
10740
|
const [confirmingEnd, setConfirmingEnd] = useState4(false);
|
|
10546
10741
|
const locked = snapshot?.locked === true;
|
|
10547
10742
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__host-menu", children: [
|
|
10548
|
-
/* @__PURE__ */
|
|
10743
|
+
/* @__PURE__ */ jsx5(
|
|
10549
10744
|
"button",
|
|
10550
10745
|
{
|
|
10551
10746
|
type: "button",
|
|
@@ -10557,8 +10752,8 @@ function HostMenu() {
|
|
|
10557
10752
|
}
|
|
10558
10753
|
),
|
|
10559
10754
|
end.canEnd ? confirmingEnd ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__confirm", role: "group", "aria-label": "End this meeting?", children: [
|
|
10560
|
-
/* @__PURE__ */
|
|
10561
|
-
/* @__PURE__ */
|
|
10755
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__confirm-text", children: "End it for everyone? Every participant is disconnected, the note-taker stops, and the wrap-up is written. Nobody can rejoin this meeting afterwards." }),
|
|
10756
|
+
/* @__PURE__ */ jsx5(
|
|
10562
10757
|
"button",
|
|
10563
10758
|
{
|
|
10564
10759
|
type: "button",
|
|
@@ -10570,7 +10765,7 @@ function HostMenu() {
|
|
|
10570
10765
|
children: "End it"
|
|
10571
10766
|
}
|
|
10572
10767
|
),
|
|
10573
|
-
/* @__PURE__ */
|
|
10768
|
+
/* @__PURE__ */ jsx5(
|
|
10574
10769
|
"button",
|
|
10575
10770
|
{
|
|
10576
10771
|
type: "button",
|
|
@@ -10579,7 +10774,7 @@ function HostMenu() {
|
|
|
10579
10774
|
children: "Keep it running"
|
|
10580
10775
|
}
|
|
10581
10776
|
)
|
|
10582
|
-
] }) : /* @__PURE__ */
|
|
10777
|
+
] }) : /* @__PURE__ */ jsx5(
|
|
10583
10778
|
"button",
|
|
10584
10779
|
{
|
|
10585
10780
|
type: "button",
|
|
@@ -10588,152 +10783,19 @@ function HostMenu() {
|
|
|
10588
10783
|
children: end.ending ? "Ending\u2026" : "End meeting for everyone"
|
|
10589
10784
|
}
|
|
10590
10785
|
) : null,
|
|
10591
|
-
end.notice !== null ? /* @__PURE__ */
|
|
10786
|
+
end.notice !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
|
|
10592
10787
|
] });
|
|
10593
10788
|
}
|
|
10594
|
-
function CallButton({
|
|
10595
|
-
person,
|
|
10596
|
-
mode = "video",
|
|
10597
|
-
children
|
|
10598
|
-
}) {
|
|
10599
|
-
const calls = useCalls();
|
|
10600
|
-
if (!calls.canCall) return null;
|
|
10601
|
-
return /* @__PURE__ */ jsx4(
|
|
10602
|
-
"button",
|
|
10603
|
-
{
|
|
10604
|
-
type: "button",
|
|
10605
|
-
className: "mx-meet__call-button",
|
|
10606
|
-
onClick: () => {
|
|
10607
|
-
void calls.call([person.userId], mode);
|
|
10608
|
-
},
|
|
10609
|
-
"aria-label": `Call ${person.displayName}`,
|
|
10610
|
-
children: children ?? /* @__PURE__ */ jsx4(PhoneIcon, { width: 18, height: 18 })
|
|
10611
|
-
}
|
|
10612
|
-
);
|
|
10613
|
-
}
|
|
10614
|
-
function IncomingCallHost() {
|
|
10615
|
-
const calls = useCalls();
|
|
10616
|
-
if (calls.incoming.length === 0) return null;
|
|
10617
|
-
return /* @__PURE__ */ jsx4("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ jsx4(IncomingCallCard, { invite }, invite.id)) });
|
|
10618
|
-
}
|
|
10619
|
-
function IncomingCallCard({ invite }) {
|
|
10620
|
-
const calls = useCalls();
|
|
10621
|
-
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
|
|
10622
|
-
/* @__PURE__ */ jsx4(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
|
|
10623
|
-
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__ringing-text", children: [
|
|
10624
|
-
/* @__PURE__ */ jsx4("strong", { children: invite.callerName }),
|
|
10625
|
-
/* @__PURE__ */ jsx4("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
|
|
10626
|
-
] }),
|
|
10627
|
-
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__ringing-actions", children: [
|
|
10628
|
-
/* @__PURE__ */ jsx4(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ jsx4(PhoneOffIcon, {}) }),
|
|
10629
|
-
invite.mode === "video" ? /* @__PURE__ */ jsx4(
|
|
10630
|
-
ControlButton,
|
|
10631
|
-
{
|
|
10632
|
-
label: "Accept without video",
|
|
10633
|
-
onClick: () => void calls.accept({ ...invite, mode: "audio" }),
|
|
10634
|
-
children: /* @__PURE__ */ jsx4(CameraOffIcon, {})
|
|
10635
|
-
}
|
|
10636
|
-
) : null,
|
|
10637
|
-
/* @__PURE__ */ jsx4(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ jsx4(PhoneIcon, {}) })
|
|
10638
|
-
] })
|
|
10639
|
-
] });
|
|
10640
|
-
}
|
|
10641
|
-
function ScheduleMeeting(props) {
|
|
10642
|
-
const host = useMeetHost();
|
|
10643
|
-
if (host === null) return /* @__PURE__ */ jsx4(InertNotice, { what: "Scheduling a meeting" });
|
|
10644
|
-
return /* @__PURE__ */ jsx4(ScheduleMeetingBody, { ...props, host });
|
|
10645
|
-
}
|
|
10646
|
-
function ScheduleMeetingBody({
|
|
10647
|
-
appBaseUrl,
|
|
10648
|
-
onScheduled,
|
|
10649
|
-
host
|
|
10650
|
-
}) {
|
|
10651
|
-
const [title, setTitle] = useState4("");
|
|
10652
|
-
const [when2, setWhen] = useState4("");
|
|
10653
|
-
const [kind, setKind] = useState4("scheduled");
|
|
10654
|
-
const [busy, setBusy] = useState4(false);
|
|
10655
|
-
const [link, setLink] = useState4(null);
|
|
10656
|
-
const [error, setError] = useState4(null);
|
|
10657
|
-
const disabled = useMemo3(() => title.trim().length === 0 || busy, [title, busy]);
|
|
10658
|
-
return /* @__PURE__ */ jsxs3(
|
|
10659
|
-
"form",
|
|
10660
|
-
{
|
|
10661
|
-
className: "mx-meet__schedule",
|
|
10662
|
-
onSubmit: (event) => {
|
|
10663
|
-
event.preventDefault();
|
|
10664
|
-
if (host.identity.userId === null) return;
|
|
10665
|
-
setBusy(true);
|
|
10666
|
-
setError(null);
|
|
10667
|
-
void host.repository.getOrCreateMeeting({
|
|
10668
|
-
organizationId: host.identity.organizationId,
|
|
10669
|
-
hostUserId: host.identity.userId,
|
|
10670
|
-
title: title.trim(),
|
|
10671
|
-
kind,
|
|
10672
|
-
scheduledFor: when2.length > 0 ? new Date(when2).toISOString() : null
|
|
10673
|
-
}).then((meeting) => {
|
|
10674
|
-
setLink(meetingLink(appBaseUrl, meeting.slug));
|
|
10675
|
-
onScheduled?.(meeting.slug);
|
|
10676
|
-
}).catch((thrown) => {
|
|
10677
|
-
setError(
|
|
10678
|
-
thrown.remedy ?? thrown.message ?? "The meeting could not be created."
|
|
10679
|
-
);
|
|
10680
|
-
}).finally(() => setBusy(false));
|
|
10681
|
-
},
|
|
10682
|
-
children: [
|
|
10683
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10684
|
-
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Title" }),
|
|
10685
|
-
/* @__PURE__ */ jsx4(
|
|
10686
|
-
"input",
|
|
10687
|
-
{
|
|
10688
|
-
className: "mx-meet__input",
|
|
10689
|
-
value: title,
|
|
10690
|
-
onChange: (event) => setTitle(event.target.value),
|
|
10691
|
-
placeholder: "Weekly sync"
|
|
10692
|
-
}
|
|
10693
|
-
)
|
|
10694
|
-
] }),
|
|
10695
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10696
|
-
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "When" }),
|
|
10697
|
-
/* @__PURE__ */ jsx4(
|
|
10698
|
-
"input",
|
|
10699
|
-
{
|
|
10700
|
-
className: "mx-meet__input",
|
|
10701
|
-
type: "datetime-local",
|
|
10702
|
-
value: when2,
|
|
10703
|
-
onChange: (event) => setWhen(event.target.value)
|
|
10704
|
-
}
|
|
10705
|
-
)
|
|
10706
|
-
] }),
|
|
10707
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10708
|
-
/* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Repeats" }),
|
|
10709
|
-
/* @__PURE__ */ jsxs3(
|
|
10710
|
-
"select",
|
|
10711
|
-
{
|
|
10712
|
-
className: "mx-meet__select",
|
|
10713
|
-
value: kind,
|
|
10714
|
-
onChange: (event) => setKind(event.target.value),
|
|
10715
|
-
children: [
|
|
10716
|
-
/* @__PURE__ */ jsx4("option", { value: "scheduled", children: "Once" }),
|
|
10717
|
-
/* @__PURE__ */ jsx4("option", { value: "recurring", children: "Recurring \u2014 one link, every time" })
|
|
10718
|
-
]
|
|
10719
|
-
}
|
|
10720
|
-
)
|
|
10721
|
-
] }),
|
|
10722
|
-
/* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__primary", disabled, children: busy ? "Creating\u2026" : "Create meeting" }),
|
|
10723
|
-
link !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__link-out", children: [
|
|
10724
|
-
/* @__PURE__ */ jsx4("span", { children: "Anyone with this link can join \u2014 no account needed." }),
|
|
10725
|
-
/* @__PURE__ */ jsx4("code", { children: link })
|
|
10726
|
-
] }) : null,
|
|
10727
|
-
error !== null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__error", children: error }) : null
|
|
10728
|
-
]
|
|
10729
|
-
}
|
|
10730
|
-
);
|
|
10731
|
-
}
|
|
10732
10789
|
function ReactionOverlay({
|
|
10733
10790
|
reactions
|
|
10734
10791
|
}) {
|
|
10735
10792
|
if (reactions.length === 0) return null;
|
|
10736
|
-
return /* @__PURE__ */
|
|
10793
|
+
return /* @__PURE__ */ jsx5("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ jsx5("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
|
|
10794
|
+
}
|
|
10795
|
+
function clockOf(iso) {
|
|
10796
|
+
const at = new Date(iso);
|
|
10797
|
+
if (Number.isNaN(at.getTime())) return "";
|
|
10798
|
+
return at.toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit" });
|
|
10737
10799
|
}
|
|
10738
10800
|
function GuestRecordAccessControl({
|
|
10739
10801
|
meeting
|
|
@@ -10746,10 +10808,10 @@ function GuestRecordAccessControl({
|
|
|
10746
10808
|
if (host === null || !isHost) return null;
|
|
10747
10809
|
const resolved = access.setting === "default" && access.effective !== null ? ` Right now that means: ${guestRecordAccessLabel(access.effective.level).toLowerCase()}.` : "";
|
|
10748
10810
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__record-section", "aria-label": "What guests may read", children: [
|
|
10749
|
-
/* @__PURE__ */
|
|
10811
|
+
/* @__PURE__ */ jsx5("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
|
|
10750
10812
|
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10751
|
-
/* @__PURE__ */
|
|
10752
|
-
/* @__PURE__ */
|
|
10813
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
|
|
10814
|
+
/* @__PURE__ */ jsx5(
|
|
10753
10815
|
"select",
|
|
10754
10816
|
{
|
|
10755
10817
|
className: "mx-meet__select",
|
|
@@ -10760,7 +10822,7 @@ function GuestRecordAccessControl({
|
|
|
10760
10822
|
event.target.value
|
|
10761
10823
|
);
|
|
10762
10824
|
},
|
|
10763
|
-
children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */
|
|
10825
|
+
children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ jsx5("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
|
|
10764
10826
|
}
|
|
10765
10827
|
)
|
|
10766
10828
|
] }),
|
|
@@ -10768,22 +10830,27 @@ function GuestRecordAccessControl({
|
|
|
10768
10830
|
guestRecordAccessExplanation(access.setting),
|
|
10769
10831
|
resolved
|
|
10770
10832
|
] }),
|
|
10771
|
-
access.saving ? /* @__PURE__ */
|
|
10833
|
+
access.saving ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
|
|
10772
10834
|
access.error !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: access.error, operation: "Change who can join", origin: "meet/components", children: [
|
|
10773
|
-
/* @__PURE__ */
|
|
10774
|
-
/* @__PURE__ */
|
|
10835
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: access.error.message }),
|
|
10836
|
+
/* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: access.error.remedy })
|
|
10775
10837
|
] }) : null
|
|
10776
10838
|
] });
|
|
10777
10839
|
}
|
|
10840
|
+
|
|
10841
|
+
// src/react/record.tsx
|
|
10842
|
+
import { useEffect as useEffect7, useState as useState5 } from "react";
|
|
10843
|
+
import { ErrorBox as ErrorBox2 } from "@ai-matrx/design-system";
|
|
10844
|
+
import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
10778
10845
|
function MeetingRecordView({
|
|
10779
10846
|
meeting,
|
|
10780
10847
|
onRejoin
|
|
10781
10848
|
}) {
|
|
10782
10849
|
const host = useMeetHost();
|
|
10783
10850
|
if (host === null) {
|
|
10784
|
-
return /* @__PURE__ */
|
|
10851
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsx6(InertNotice, { what: "This meeting record" }) });
|
|
10785
10852
|
}
|
|
10786
|
-
return /* @__PURE__ */
|
|
10853
|
+
return /* @__PURE__ */ jsx6(MeetingRecordBody, { meeting, ...onRejoin !== void 0 ? { onRejoin } : {} });
|
|
10787
10854
|
}
|
|
10788
10855
|
function MeetingRecordBody({
|
|
10789
10856
|
meeting,
|
|
@@ -10791,19 +10858,19 @@ function MeetingRecordBody({
|
|
|
10791
10858
|
}) {
|
|
10792
10859
|
const host = useRequiredMeetHost();
|
|
10793
10860
|
const record = useMeetingRecord(meeting);
|
|
10794
|
-
const [question, setQuestion] =
|
|
10795
|
-
const [tab, setTab] =
|
|
10861
|
+
const [question, setQuestion] = useState5("");
|
|
10862
|
+
const [tab, setTab] = useState5("summary");
|
|
10796
10863
|
if (record.failure !== null) {
|
|
10797
|
-
return /* @__PURE__ */
|
|
10798
|
-
/* @__PURE__ */
|
|
10799
|
-
/* @__PURE__ */
|
|
10800
|
-
/* @__PURE__ */
|
|
10864
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__empty", error: record.failure, operation: "Open this meeting record", origin: "meet/components", children: [
|
|
10865
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-title", children: "This meeting record could not be opened" }),
|
|
10866
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: record.failure.message }),
|
|
10867
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: record.failure.remedy })
|
|
10801
10868
|
] }) });
|
|
10802
10869
|
}
|
|
10803
10870
|
if (record.loading || record.record === null) {
|
|
10804
|
-
return /* @__PURE__ */
|
|
10805
|
-
/* @__PURE__ */
|
|
10806
|
-
/* @__PURE__ */
|
|
10871
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__empty", role: "status", children: [
|
|
10872
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-title", children: "Opening the meeting record\u2026" }),
|
|
10873
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: "Reading the summary, the notes and the transcript this meeting left behind." })
|
|
10807
10874
|
] }) });
|
|
10808
10875
|
}
|
|
10809
10876
|
const bundle = record.record;
|
|
@@ -10822,44 +10889,44 @@ function MeetingRecordBody({
|
|
|
10822
10889
|
);
|
|
10823
10890
|
const entirelyRestricted = everyRecordPartRefused && bundle.attendees.length === 0 && bundle.liveNotes.length === 0 && bundle.transcript.length === 0 && bundle.recording === null && bundle.summary === null && bundle.decisions.length === 0 && bundle.actionItems.length === 0;
|
|
10824
10891
|
if (entirelyRestricted) {
|
|
10825
|
-
return /* @__PURE__ */
|
|
10826
|
-
/* @__PURE__ */
|
|
10827
|
-
/* @__PURE__ */
|
|
10828
|
-
/* @__PURE__ */
|
|
10829
|
-
/* @__PURE__ */
|
|
10830
|
-
onRejoin !== void 0 ? /* @__PURE__ */
|
|
10892
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet mx-meet--record", children: [
|
|
10893
|
+
/* @__PURE__ */ jsx6("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-head-inner", children: [
|
|
10894
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
|
|
10895
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__record-title", children: meeting.title }),
|
|
10896
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
|
|
10897
|
+
onRejoin !== void 0 ? /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
|
|
10831
10898
|
] }) }),
|
|
10832
|
-
/* @__PURE__ */
|
|
10833
|
-
/* @__PURE__ */
|
|
10834
|
-
/* @__PURE__ */
|
|
10835
|
-
/* @__PURE__ */
|
|
10899
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__record-body", children: restrictionNotices.map((notice2) => /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-access", role: "status", children: [
|
|
10900
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-title", children: "About this record" }),
|
|
10901
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-message", children: notice2.message }),
|
|
10902
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
|
|
10836
10903
|
] }, notice2.parts.join("-"))) })
|
|
10837
10904
|
] });
|
|
10838
10905
|
}
|
|
10839
|
-
return /* @__PURE__ */
|
|
10840
|
-
/* @__PURE__ */
|
|
10841
|
-
/* @__PURE__ */
|
|
10842
|
-
/* @__PURE__ */
|
|
10843
|
-
/* @__PURE__ */
|
|
10844
|
-
onRejoin !== void 0 ? /* @__PURE__ */
|
|
10906
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet mx-meet--record", children: [
|
|
10907
|
+
/* @__PURE__ */ jsx6("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-head-inner", children: [
|
|
10908
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
|
|
10909
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__record-title", children: meeting.title }),
|
|
10910
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
|
|
10911
|
+
onRejoin !== void 0 ? /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
|
|
10845
10912
|
] }) }),
|
|
10846
|
-
/* @__PURE__ */
|
|
10847
|
-
restrictionNotices.map((notice2) => /* @__PURE__ */
|
|
10848
|
-
/* @__PURE__ */
|
|
10849
|
-
/* @__PURE__ */
|
|
10850
|
-
/* @__PURE__ */
|
|
10913
|
+
/* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-body", children: [
|
|
10914
|
+
restrictionNotices.map((notice2) => /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-access", role: "status", children: [
|
|
10915
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-title", children: "About this record" }),
|
|
10916
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-message", children: notice2.message }),
|
|
10917
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
|
|
10851
10918
|
] }, notice2.parts.join("-"))),
|
|
10852
10919
|
attended.length === 0 ? (
|
|
10853
10920
|
/* NOT SILENCE. A refused attendance read used to remove the whole
|
|
10854
10921
|
section, so the reader could not tell "nobody" from "not shown". */
|
|
10855
|
-
/* @__PURE__ */
|
|
10856
|
-
/* @__PURE__ */
|
|
10857
|
-
/* @__PURE__ */
|
|
10922
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
|
|
10923
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
|
|
10924
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(bundle, "attendance", "Nobody is recorded as having attended.") })
|
|
10858
10925
|
] })
|
|
10859
|
-
) : /* @__PURE__ */
|
|
10860
|
-
/* @__PURE__ */
|
|
10861
|
-
/* @__PURE__ */
|
|
10862
|
-
/* @__PURE__ */
|
|
10926
|
+
) : /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
|
|
10927
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
|
|
10928
|
+
/* @__PURE__ */ jsx6("ul", { className: "mx-meet__record-attendees", children: attended.map((person) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__record-attendee", children: [
|
|
10929
|
+
/* @__PURE__ */ jsx6(
|
|
10863
10930
|
Avatar,
|
|
10864
10931
|
{
|
|
10865
10932
|
name: displayNameFor(bundle.names, person.identity, person.displayName),
|
|
@@ -10867,26 +10934,26 @@ function MeetingRecordBody({
|
|
|
10867
10934
|
size: 28
|
|
10868
10935
|
}
|
|
10869
10936
|
),
|
|
10870
|
-
/* @__PURE__ */
|
|
10937
|
+
/* @__PURE__ */ jsxs4("span", { className: "mx-meet__person-name", children: [
|
|
10871
10938
|
displayNameFor(bundle.names, person.identity, person.displayName),
|
|
10872
|
-
person.role === "host" ? /* @__PURE__ */
|
|
10873
|
-
person.role === "guest" ? /* @__PURE__ */
|
|
10874
|
-
person.isAgent ? /* @__PURE__ */
|
|
10939
|
+
person.role === "host" ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Host" }) : null,
|
|
10940
|
+
person.role === "guest" ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null,
|
|
10941
|
+
person.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null
|
|
10875
10942
|
] })
|
|
10876
10943
|
] }, person.id)) })
|
|
10877
10944
|
] }),
|
|
10878
|
-
bundle.recording !== null ? /* @__PURE__ */
|
|
10879
|
-
/* @__PURE__ */
|
|
10880
|
-
fileId !== null ? /* @__PURE__ */
|
|
10881
|
-
/* @__PURE__ */
|
|
10882
|
-
notice !== null ? /* @__PURE__ */
|
|
10883
|
-
] }) : /* @__PURE__ */
|
|
10884
|
-
] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */
|
|
10885
|
-
/* @__PURE__ */
|
|
10886
|
-
/* @__PURE__ */
|
|
10945
|
+
bundle.recording !== null ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section mx-meet__recording-card", "aria-label": "Recording", children: [
|
|
10946
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
|
|
10947
|
+
fileId !== null ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
10948
|
+
/* @__PURE__ */ jsx6(RecordingPlayer, { fileId }),
|
|
10949
|
+
notice !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: notice }) : null
|
|
10950
|
+
] }) : /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: notice ?? "This recording has no file." })
|
|
10951
|
+
] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Recording", children: [
|
|
10952
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
|
|
10953
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: REFUSED_ABSENCE })
|
|
10887
10954
|
] }) : null,
|
|
10888
|
-
/* @__PURE__ */
|
|
10889
|
-
/* @__PURE__ */
|
|
10955
|
+
/* @__PURE__ */ jsxs4("nav", { className: "mx-meet__record-tabs", "aria-label": "Meeting record sections", children: [
|
|
10956
|
+
/* @__PURE__ */ jsx6(
|
|
10890
10957
|
"button",
|
|
10891
10958
|
{
|
|
10892
10959
|
type: "button",
|
|
@@ -10896,7 +10963,7 @@ function MeetingRecordBody({
|
|
|
10896
10963
|
children: "Summary & decisions"
|
|
10897
10964
|
}
|
|
10898
10965
|
),
|
|
10899
|
-
/* @__PURE__ */
|
|
10966
|
+
/* @__PURE__ */ jsx6(
|
|
10900
10967
|
"button",
|
|
10901
10968
|
{
|
|
10902
10969
|
type: "button",
|
|
@@ -10906,7 +10973,7 @@ function MeetingRecordBody({
|
|
|
10906
10973
|
children: "Notes as it happened"
|
|
10907
10974
|
}
|
|
10908
10975
|
),
|
|
10909
|
-
/* @__PURE__ */
|
|
10976
|
+
/* @__PURE__ */ jsx6(
|
|
10910
10977
|
"button",
|
|
10911
10978
|
{
|
|
10912
10979
|
type: "button",
|
|
@@ -10917,15 +10984,15 @@ function MeetingRecordBody({
|
|
|
10917
10984
|
}
|
|
10918
10985
|
)
|
|
10919
10986
|
] }),
|
|
10920
|
-
tab === "summary" ? /* @__PURE__ */
|
|
10921
|
-
/* @__PURE__ */
|
|
10922
|
-
/* @__PURE__ */
|
|
10923
|
-
wrapUp.state === "written" ? /* @__PURE__ */
|
|
10924
|
-
/* @__PURE__ */
|
|
10925
|
-
/* @__PURE__ */
|
|
10926
|
-
] }) : /* @__PURE__ */
|
|
10987
|
+
tab === "summary" ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
10988
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Summary", children: [
|
|
10989
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Summary" }),
|
|
10990
|
+
wrapUp.state === "written" ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__record-summary", children: bundle.summary?.text }) : wrapUp.state === "in-progress" ? /* @__PURE__ */ jsxs4("div", { className: "mx-meet__panel-note", role: "status", children: [
|
|
10991
|
+
/* @__PURE__ */ jsx6("p", { children: wrapUp.message }),
|
|
10992
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: record.reload, children: "Check again" })
|
|
10993
|
+
] }) : /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: wrapUp.state === "failed" ? "alert" : void 0, children: wrapUp.message })
|
|
10927
10994
|
] }),
|
|
10928
|
-
/* @__PURE__ */
|
|
10995
|
+
/* @__PURE__ */ jsx6(
|
|
10929
10996
|
NoteList,
|
|
10930
10997
|
{
|
|
10931
10998
|
title: "Decisions",
|
|
@@ -10937,7 +11004,7 @@ function MeetingRecordBody({
|
|
|
10937
11004
|
)
|
|
10938
11005
|
}
|
|
10939
11006
|
),
|
|
10940
|
-
/* @__PURE__ */
|
|
11007
|
+
/* @__PURE__ */ jsx6(
|
|
10941
11008
|
NoteList,
|
|
10942
11009
|
{
|
|
10943
11010
|
title: "Action items",
|
|
@@ -10950,42 +11017,42 @@ function MeetingRecordBody({
|
|
|
10950
11017
|
}
|
|
10951
11018
|
)
|
|
10952
11019
|
] }) : null,
|
|
10953
|
-
tab === "notes" ? /* @__PURE__ */
|
|
10954
|
-
/* @__PURE__ */
|
|
10955
|
-
bundle.liveNotes.length === 0 ? /* @__PURE__ */
|
|
11020
|
+
tab === "notes" ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Notes as it happened", children: [
|
|
11021
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Notes as it happened" }),
|
|
11022
|
+
bundle.liveNotes.length === 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(
|
|
10956
11023
|
bundle,
|
|
10957
11024
|
"notes",
|
|
10958
11025
|
"No live notes are available for this meeting."
|
|
10959
|
-
) }) : /* @__PURE__ */
|
|
10960
|
-
note.window !== null ? /* @__PURE__ */
|
|
11026
|
+
) }) : /* @__PURE__ */ jsx6("ul", { className: "mx-meet__notes", children: bundle.liveNotes.map((note) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__note", children: [
|
|
11027
|
+
note.window !== null ? /* @__PURE__ */ jsxs4("span", { className: "mx-meet__badge", children: [
|
|
10961
11028
|
"Window ",
|
|
10962
11029
|
note.window
|
|
10963
11030
|
] }) : null,
|
|
10964
11031
|
note.text
|
|
10965
11032
|
] }, note.id)) })
|
|
10966
11033
|
] }) : null,
|
|
10967
|
-
tab === "transcript" ? /* @__PURE__ */
|
|
10968
|
-
/* @__PURE__ */
|
|
11034
|
+
tab === "transcript" ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Transcript", children: [
|
|
11035
|
+
/* @__PURE__ */ jsxs4("h2", { className: "mx-meet__record-section-title", children: [
|
|
10969
11036
|
"Transcript",
|
|
10970
|
-
/* @__PURE__ */
|
|
11037
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__record-count", children: bundle.transcript.length === 1 ? "1 line" : `${bundle.transcript.length} lines` })
|
|
10971
11038
|
] }),
|
|
10972
|
-
blocks.length === 0 ? /* @__PURE__ */
|
|
11039
|
+
blocks.length === 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(
|
|
10973
11040
|
bundle,
|
|
10974
11041
|
"transcript",
|
|
10975
11042
|
"No transcript is available for this meeting."
|
|
10976
|
-
) }) : /* @__PURE__ */
|
|
10977
|
-
/* @__PURE__ */
|
|
11043
|
+
) }) : /* @__PURE__ */ jsx6("ol", { className: "mx-meet__record-transcript", children: blocks.map((block) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__record-block", children: [
|
|
11044
|
+
/* @__PURE__ */ jsxs4("p", { className: "mx-meet__record-speaker", children: [
|
|
10978
11045
|
block.speaker,
|
|
10979
|
-
/* @__PURE__ */
|
|
11046
|
+
/* @__PURE__ */ jsx6("time", { className: "mx-meet__record-time", dateTime: block.startedAt, children: clockOf(block.startedAt) })
|
|
10980
11047
|
] }),
|
|
10981
|
-
block.lines.map((line) => /* @__PURE__ */
|
|
11048
|
+
block.lines.map((line) => /* @__PURE__ */ jsx6("p", { className: "mx-meet__record-line", children: line.text }, line.id))
|
|
10982
11049
|
] }, block.id)) })
|
|
10983
11050
|
] }) : null,
|
|
10984
|
-
/* @__PURE__ */
|
|
10985
|
-
/* @__PURE__ */
|
|
10986
|
-
/* @__PURE__ */
|
|
10987
|
-
guestFinishedMeeting ? /* @__PURE__ */
|
|
10988
|
-
/* @__PURE__ */
|
|
11051
|
+
/* @__PURE__ */ jsx6(GuestRecordAccessControl, { meeting }),
|
|
11052
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Ask about this meeting", children: [
|
|
11053
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Ask about this meeting" }),
|
|
11054
|
+
guestFinishedMeeting ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: "Sign in to ask the assistant about a meeting after it ends." }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
11055
|
+
/* @__PURE__ */ jsxs4(
|
|
10989
11056
|
"form",
|
|
10990
11057
|
{
|
|
10991
11058
|
className: "mx-meet__composer",
|
|
@@ -10996,7 +11063,7 @@ function MeetingRecordBody({
|
|
|
10996
11063
|
void record.ask(trimmed);
|
|
10997
11064
|
},
|
|
10998
11065
|
children: [
|
|
10999
|
-
/* @__PURE__ */
|
|
11066
|
+
/* @__PURE__ */ jsx6(
|
|
11000
11067
|
"input",
|
|
11001
11068
|
{
|
|
11002
11069
|
className: "mx-meet__input",
|
|
@@ -11006,7 +11073,7 @@ function MeetingRecordBody({
|
|
|
11006
11073
|
"aria-label": "Ask about this meeting"
|
|
11007
11074
|
}
|
|
11008
11075
|
),
|
|
11009
|
-
/* @__PURE__ */
|
|
11076
|
+
/* @__PURE__ */ jsx6(
|
|
11010
11077
|
"button",
|
|
11011
11078
|
{
|
|
11012
11079
|
type: "submit",
|
|
@@ -11018,8 +11085,8 @@ function MeetingRecordBody({
|
|
|
11018
11085
|
]
|
|
11019
11086
|
}
|
|
11020
11087
|
),
|
|
11021
|
-
record.answer !== null ? /* @__PURE__ */
|
|
11022
|
-
record.coverage !== null ? /* @__PURE__ */
|
|
11088
|
+
record.answer !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__answer", children: record.answer }) : null,
|
|
11089
|
+
record.coverage !== null ? /* @__PURE__ */ jsxs4("p", { className: "mx-meet__coverage", children: [
|
|
11023
11090
|
"Answered from ",
|
|
11024
11091
|
record.coverage.segmentsUsed,
|
|
11025
11092
|
" of ",
|
|
@@ -11030,9 +11097,9 @@ function MeetingRecordBody({
|
|
|
11030
11097
|
record.coverage.truncated ? " (the oldest were left out)" : "",
|
|
11031
11098
|
"."
|
|
11032
11099
|
] }) : null,
|
|
11033
|
-
record.askError !== null ? /* @__PURE__ */
|
|
11034
|
-
/* @__PURE__ */
|
|
11035
|
-
/* @__PURE__ */
|
|
11100
|
+
record.askError !== null ? /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__refusal", error: record.askError, operation: "Ask about this meeting", origin: "meet/components", children: [
|
|
11101
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: record.askError.message }),
|
|
11102
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: record.askError.remedy })
|
|
11036
11103
|
] }) : null
|
|
11037
11104
|
] })
|
|
11038
11105
|
] })
|
|
@@ -11043,21 +11110,21 @@ var STREAM_REFUSED = "Streaming playback did not start, so this recording was do
|
|
|
11043
11110
|
var PLAYBACK_RETRY_REMEDY = "Reload the page and try again. If it still will not play, ask a meeting host to check the recording.";
|
|
11044
11111
|
function RecordingPlayer(props) {
|
|
11045
11112
|
const host = useMeetHost();
|
|
11046
|
-
if (host === null) return /* @__PURE__ */
|
|
11047
|
-
return /* @__PURE__ */
|
|
11113
|
+
if (host === null) return /* @__PURE__ */ jsx6(InertNotice, { what: "This recording" });
|
|
11114
|
+
return /* @__PURE__ */ jsx6(RecordingPlayerBody, { ...props, host });
|
|
11048
11115
|
}
|
|
11049
11116
|
function RecordingPlayerBody({ fileId, host }) {
|
|
11050
|
-
const [media, setMedia] =
|
|
11051
|
-
const [loading, setLoading] =
|
|
11052
|
-
const [error, setError] =
|
|
11053
|
-
|
|
11117
|
+
const [media, setMedia] = useState5(null);
|
|
11118
|
+
const [loading, setLoading] = useState5(false);
|
|
11119
|
+
const [error, setError] = useState5(null);
|
|
11120
|
+
useEffect7(() => {
|
|
11054
11121
|
if (media === null || media.kind !== "bytes") return void 0;
|
|
11055
11122
|
const url = media.url;
|
|
11056
11123
|
return () => URL.revokeObjectURL(url);
|
|
11057
11124
|
}, [media]);
|
|
11058
11125
|
if (media !== null) {
|
|
11059
|
-
return /* @__PURE__ */
|
|
11060
|
-
/* @__PURE__ */
|
|
11126
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-section", children: [
|
|
11127
|
+
/* @__PURE__ */ jsx6(
|
|
11061
11128
|
"video",
|
|
11062
11129
|
{
|
|
11063
11130
|
className: "mx-meet__record-player",
|
|
@@ -11099,15 +11166,15 @@ function RecordingPlayerBody({ fileId, host }) {
|
|
|
11099
11166
|
}
|
|
11100
11167
|
}
|
|
11101
11168
|
),
|
|
11102
|
-
media.fallbackReason !== null ? /* @__PURE__ */
|
|
11169
|
+
media.fallbackReason !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: media.fallbackReason }) : null
|
|
11103
11170
|
] });
|
|
11104
11171
|
}
|
|
11105
|
-
return /* @__PURE__ */
|
|
11106
|
-
error !== null ? /* @__PURE__ */
|
|
11107
|
-
/* @__PURE__ */
|
|
11108
|
-
/* @__PURE__ */
|
|
11172
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-section", children: [
|
|
11173
|
+
error !== null ? /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__refusal", error, operation: "Complete this meeting action", origin: "meet/components", children: [
|
|
11174
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: error.message }),
|
|
11175
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: error.remedy })
|
|
11109
11176
|
] }) : null,
|
|
11110
|
-
/* @__PURE__ */
|
|
11177
|
+
/* @__PURE__ */ jsx6(
|
|
11111
11178
|
"button",
|
|
11112
11179
|
{
|
|
11113
11180
|
type: "button",
|
|
@@ -11135,45 +11202,84 @@ function RecordingPlayerBody({ fileId, host }) {
|
|
|
11135
11202
|
)
|
|
11136
11203
|
] });
|
|
11137
11204
|
}
|
|
11138
|
-
|
|
11139
|
-
|
|
11140
|
-
|
|
11141
|
-
|
|
11142
|
-
}
|
|
11143
|
-
function MeetingList({ baseUrl }) {
|
|
11205
|
+
|
|
11206
|
+
// src/react/skin-root.tsx
|
|
11207
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
11208
|
+
function MeetingSkinRoot(props) {
|
|
11144
11209
|
const host = useMeetHost();
|
|
11145
|
-
|
|
11146
|
-
|
|
11147
|
-
if (list.failure !== null) {
|
|
11148
|
-
return /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__empty", error: list.failure, operation: "List your meetings", origin: "meet/components", children: [
|
|
11149
|
-
/* @__PURE__ */ jsx4("p", { className: "mx-meet__empty-title", children: "Your meetings could not be listed" }),
|
|
11150
|
-
/* @__PURE__ */ jsx4("p", { className: "mx-meet__empty-body", children: list.failure.message }),
|
|
11151
|
-
/* @__PURE__ */ jsx4("p", { className: "mx-meet__empty-body", children: list.failure.remedy })
|
|
11152
|
-
] });
|
|
11153
|
-
}
|
|
11154
|
-
if (list.loading) {
|
|
11155
|
-
return /* @__PURE__ */ jsx4("div", { className: "mx-meet__empty", role: "status", children: /* @__PURE__ */ jsx4("p", { className: "mx-meet__empty-title", children: "Loading your meetings\u2026" }) });
|
|
11210
|
+
if (host === null) {
|
|
11211
|
+
return /* @__PURE__ */ jsx7(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx7("div", { className: "mx-meet", children: /* @__PURE__ */ jsx7(InertNotice, { what: "This meeting" }) }) });
|
|
11156
11212
|
}
|
|
11157
|
-
|
|
11158
|
-
|
|
11159
|
-
|
|
11160
|
-
|
|
11161
|
-
|
|
11213
|
+
return /* @__PURE__ */ jsx7(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx7(MeetingSkinRootBody, { ...props, host }) });
|
|
11214
|
+
}
|
|
11215
|
+
function MeetingSkinRootBody({
|
|
11216
|
+
roomName,
|
|
11217
|
+
meetingId,
|
|
11218
|
+
slug,
|
|
11219
|
+
meeting: given,
|
|
11220
|
+
onLeave,
|
|
11221
|
+
headerControls,
|
|
11222
|
+
host
|
|
11223
|
+
}) {
|
|
11224
|
+
const snapshot = useMeetSnapshot();
|
|
11225
|
+
const phase = snapshot?.phase ?? "idle";
|
|
11226
|
+
useEffect8(() => {
|
|
11227
|
+
host.meetings.watch(roomName);
|
|
11228
|
+
}, [host, roomName]);
|
|
11229
|
+
useEffect8(() => {
|
|
11230
|
+
if (given === void 0) return;
|
|
11231
|
+
if (host.store.snapshot().meeting !== null) return;
|
|
11232
|
+
host.store.patch({ meeting: given, locked: given.locked });
|
|
11233
|
+
}, [host, given]);
|
|
11234
|
+
const watchedId = meetingId ?? snapshot?.meeting?.id ?? null;
|
|
11235
|
+
useEffect8(() => {
|
|
11236
|
+
if (watchedId === null) return;
|
|
11237
|
+
host.meetings.watchMeeting(asMeetingId(watchedId));
|
|
11238
|
+
}, [host, watchedId]);
|
|
11239
|
+
const record = snapshot?.meeting ?? given ?? null;
|
|
11240
|
+
if (hasEnded(record) && phase !== "connected" && phase !== "reconnecting") {
|
|
11241
|
+
return /* @__PURE__ */ jsx7(MeetingRecordView, { meeting: record });
|
|
11162
11242
|
}
|
|
11163
|
-
|
|
11164
|
-
|
|
11165
|
-
|
|
11166
|
-
|
|
11167
|
-
|
|
11168
|
-
|
|
11169
|
-
|
|
11170
|
-
|
|
11171
|
-
|
|
11172
|
-
|
|
11173
|
-
|
|
11174
|
-
|
|
11175
|
-
|
|
11176
|
-
|
|
11243
|
+
return /* @__PURE__ */ jsx7(
|
|
11244
|
+
MeetSkinRoom,
|
|
11245
|
+
{
|
|
11246
|
+
roomName,
|
|
11247
|
+
...meetingId !== void 0 ? { meetingId } : {},
|
|
11248
|
+
...slug !== void 0 ? { slug } : {},
|
|
11249
|
+
...onLeave !== void 0 ? { onLeave } : {},
|
|
11250
|
+
...headerControls !== void 0 ? { headerControls } : {}
|
|
11251
|
+
}
|
|
11252
|
+
);
|
|
11253
|
+
}
|
|
11254
|
+
|
|
11255
|
+
// src/react/calls-ui.tsx
|
|
11256
|
+
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
11257
|
+
function IncomingCallHost() {
|
|
11258
|
+
const calls = useCalls();
|
|
11259
|
+
if (calls.incoming.length === 0) return null;
|
|
11260
|
+
return /* @__PURE__ */ jsx8("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ jsx8(IncomingCallCard, { invite }, invite.id)) });
|
|
11261
|
+
}
|
|
11262
|
+
function IncomingCallCard({ invite }) {
|
|
11263
|
+
const calls = useCalls();
|
|
11264
|
+
return /* @__PURE__ */ jsxs5("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
|
|
11265
|
+
/* @__PURE__ */ jsx8(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
|
|
11266
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-meet__ringing-text", children: [
|
|
11267
|
+
/* @__PURE__ */ jsx8("strong", { children: invite.callerName }),
|
|
11268
|
+
/* @__PURE__ */ jsx8("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
|
|
11269
|
+
] }),
|
|
11270
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-meet__ringing-actions", children: [
|
|
11271
|
+
/* @__PURE__ */ jsx8(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ jsx8(PhoneOffIcon, {}) }),
|
|
11272
|
+
invite.mode === "video" ? /* @__PURE__ */ jsx8(
|
|
11273
|
+
ControlButton,
|
|
11274
|
+
{
|
|
11275
|
+
label: "Accept without video",
|
|
11276
|
+
onClick: () => void calls.accept({ ...invite, mode: "audio" }),
|
|
11277
|
+
children: /* @__PURE__ */ jsx8(CameraOffIcon, {})
|
|
11278
|
+
}
|
|
11279
|
+
) : null,
|
|
11280
|
+
/* @__PURE__ */ jsx8(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ jsx8(PhoneIcon, {}) })
|
|
11281
|
+
] })
|
|
11282
|
+
] });
|
|
11177
11283
|
}
|
|
11178
11284
|
|
|
11179
11285
|
// src/core/invitations.ts
|
|
@@ -11328,54 +11434,26 @@ async function pushMeetingToGoogleCalendar(api, meetingId, target) {
|
|
|
11328
11434
|
}
|
|
11329
11435
|
export {
|
|
11330
11436
|
ATTENDANCE_CSV_HEADER,
|
|
11331
|
-
ActivitiesControl,
|
|
11332
|
-
ActivitiesIcon,
|
|
11333
|
-
AiPanel,
|
|
11334
|
-
AttendanceNotice,
|
|
11335
|
-
Avatar,
|
|
11336
|
-
BreakoutBanner,
|
|
11337
|
-
BreakoutIcon,
|
|
11338
|
-
BreakoutsPanel,
|
|
11339
11437
|
CALL_INVITE_KIND,
|
|
11340
11438
|
CALL_INVITE_VERSION,
|
|
11341
11439
|
CAPTION_LANGUAGES,
|
|
11342
11440
|
CONSENT_NOTICE_ATTRIBUTE,
|
|
11343
|
-
CallButton,
|
|
11344
|
-
CameraIcon,
|
|
11345
|
-
CameraOffIcon,
|
|
11346
|
-
CaptionLanguageSettings,
|
|
11347
|
-
Captions,
|
|
11348
|
-
ChatIcon,
|
|
11349
|
-
ChatPanel,
|
|
11350
|
-
CheckIcon,
|
|
11351
|
-
CloseIcon,
|
|
11352
|
-
ConnectionDot,
|
|
11353
|
-
ConsentNotice,
|
|
11354
|
-
ControlBar,
|
|
11355
|
-
ControlButton,
|
|
11356
11441
|
DATA_TOPICS,
|
|
11357
11442
|
DEFAULT_EFFECTS,
|
|
11358
11443
|
DEFAULT_PAGE_SIZE,
|
|
11359
11444
|
EMPTY_COLLAB,
|
|
11360
11445
|
END_MEETING_NOT_SERVED,
|
|
11361
11446
|
FILE_SESSION_PATH,
|
|
11362
|
-
FlagIcon,
|
|
11363
11447
|
GUEST_RECORD_ACCESS_CHOICES,
|
|
11364
11448
|
GUEST_RECORD_ACCESS_LEVELS,
|
|
11365
11449
|
GUEST_RECORD_ACCESS_METADATA_KEY,
|
|
11366
11450
|
GUEST_RECORD_NOT_SHARED,
|
|
11367
11451
|
GuestRecordAccessControl,
|
|
11368
|
-
HandIcon,
|
|
11369
|
-
HostMenu,
|
|
11370
11452
|
IDLE_MEDIA,
|
|
11371
11453
|
IDLE_TRACK,
|
|
11372
11454
|
IncomingCallCard,
|
|
11373
11455
|
IncomingCallHost,
|
|
11374
|
-
KeyboardIcon,
|
|
11375
11456
|
LISTEN_ONLY_NOTICE,
|
|
11376
|
-
LayoutIcon,
|
|
11377
|
-
LobbyPanel,
|
|
11378
|
-
LockIcon,
|
|
11379
11457
|
MEETING_INVITE_KIND,
|
|
11380
11458
|
MEETING_INVITE_VERSION,
|
|
11381
11459
|
MEETING_RECORD_GRACE_MS,
|
|
@@ -11389,33 +11467,15 @@ export {
|
|
|
11389
11467
|
MODERATION_ACTIONS,
|
|
11390
11468
|
MeetError,
|
|
11391
11469
|
MeetProvider,
|
|
11392
|
-
|
|
11393
|
-
MeetingOverlays,
|
|
11470
|
+
MeetRoot,
|
|
11394
11471
|
MeetingRecordView,
|
|
11395
|
-
|
|
11396
|
-
MicIcon,
|
|
11397
|
-
MicOffIcon,
|
|
11398
|
-
MoreIcon,
|
|
11472
|
+
MeetingSkinRoot,
|
|
11399
11473
|
NOTE_TAKER_IDENTITY_PREFIX,
|
|
11400
11474
|
NOTE_TAKER_METADATA_KEY,
|
|
11401
11475
|
NO_GRANTS,
|
|
11402
11476
|
ORGANIZATION_HEADER,
|
|
11403
11477
|
PARTICIPANT_CAN_RECORD_ATTRIBUTE,
|
|
11404
11478
|
PARTICIPANT_ROLE_ATTRIBUTE,
|
|
11405
|
-
ParticipantTile,
|
|
11406
|
-
PencilIcon,
|
|
11407
|
-
PeopleIcon,
|
|
11408
|
-
PeoplePanel,
|
|
11409
|
-
PersonMenu,
|
|
11410
|
-
PhoneIcon,
|
|
11411
|
-
PhoneOffIcon,
|
|
11412
|
-
PinIcon,
|
|
11413
|
-
PollIcon,
|
|
11414
|
-
PollsPanel,
|
|
11415
|
-
PreJoin,
|
|
11416
|
-
QaPanel,
|
|
11417
|
-
QualityBars,
|
|
11418
|
-
QuestionIcon,
|
|
11419
11479
|
REACTION_TTL_MS,
|
|
11420
11480
|
REFUSED_ABSENCE,
|
|
11421
11481
|
ROLE_RANK,
|
|
@@ -11423,30 +11483,13 @@ export {
|
|
|
11423
11483
|
ROOM_EVENT_PREFIX,
|
|
11424
11484
|
ROOM_TOKEN_HEADER,
|
|
11425
11485
|
RPCS,
|
|
11426
|
-
ReactionOverlay,
|
|
11427
|
-
RecordIcon,
|
|
11428
|
-
RecordingIndicator,
|
|
11429
11486
|
RecordingPlayer,
|
|
11430
|
-
ScheduleMeeting,
|
|
11431
|
-
ScreenShareIcon,
|
|
11432
|
-
SearchIcon,
|
|
11433
|
-
SettingsIcon,
|
|
11434
|
-
SettingsPanel,
|
|
11435
|
-
ShortcutsSheet,
|
|
11436
|
-
SignalIcon,
|
|
11437
|
-
SmileIcon,
|
|
11438
|
-
SparklesIcon,
|
|
11439
|
-
SpeakerIcon,
|
|
11440
|
-
SpotlightIcon,
|
|
11441
|
-
Stage,
|
|
11442
11487
|
TABLES,
|
|
11443
11488
|
TRANSCRIPTION_ATTRIBUTES,
|
|
11444
11489
|
TRANSCRIPTION_TOPIC,
|
|
11445
|
-
WhiteboardIcon,
|
|
11446
|
-
WhiteboardPanel,
|
|
11447
|
-
WifiLowIcon,
|
|
11448
11490
|
absenceSentence,
|
|
11449
11491
|
activeWrapUpSummary,
|
|
11492
|
+
activityAttention,
|
|
11450
11493
|
announceMeeting,
|
|
11451
11494
|
applyCollabPacket,
|
|
11452
11495
|
applyRoomEvent,
|
|
@@ -11463,6 +11506,7 @@ export {
|
|
|
11463
11506
|
attendanceTotals,
|
|
11464
11507
|
attendeeKey,
|
|
11465
11508
|
autoAssign,
|
|
11509
|
+
availableActivities,
|
|
11466
11510
|
breakoutRemainingMs,
|
|
11467
11511
|
callInviteAction,
|
|
11468
11512
|
callInviteText,
|
|
@@ -11534,6 +11578,9 @@ export {
|
|
|
11534
11578
|
meetingWhen,
|
|
11535
11579
|
mergeCaption,
|
|
11536
11580
|
mergeRecord,
|
|
11581
|
+
microphoneNoticeCode,
|
|
11582
|
+
moveToRoom,
|
|
11583
|
+
nextTranslationBatch,
|
|
11537
11584
|
normalizeDeviceError,
|
|
11538
11585
|
normalizeMeetError,
|
|
11539
11586
|
normalizeSpoken,
|
|
@@ -11542,9 +11589,15 @@ export {
|
|
|
11542
11589
|
noteTakerParticipant,
|
|
11543
11590
|
noteTakerStatus,
|
|
11544
11591
|
notesDocument,
|
|
11592
|
+
observe as observeMeeting,
|
|
11593
|
+
observedDevice,
|
|
11594
|
+
observedPhase,
|
|
11595
|
+
observedQuality,
|
|
11545
11596
|
orderParticipants,
|
|
11546
11597
|
parseRoomToken,
|
|
11598
|
+
participantAttributes,
|
|
11547
11599
|
participantSummary,
|
|
11600
|
+
performCollab,
|
|
11548
11601
|
playableRecordingFileId,
|
|
11549
11602
|
projectInvitee,
|
|
11550
11603
|
projectLibraryRecording,
|
|
@@ -11564,16 +11617,23 @@ export {
|
|
|
11564
11617
|
recordingOffsetMs,
|
|
11565
11618
|
roleOf,
|
|
11566
11619
|
roomTopic,
|
|
11620
|
+
rootAttributes,
|
|
11567
11621
|
searchTranscript,
|
|
11568
11622
|
sendFollowUp,
|
|
11623
|
+
setCaptionLanguage,
|
|
11569
11624
|
setGuestRecordAccess,
|
|
11570
11625
|
settingsPatch,
|
|
11571
11626
|
snapshotParticipant,
|
|
11572
11627
|
snippetRuns,
|
|
11628
|
+
staticObservation,
|
|
11573
11629
|
summarizeMeetingRecordRestrictions,
|
|
11630
|
+
takeMoveRequest,
|
|
11631
|
+
takePanelRequest,
|
|
11574
11632
|
transcriptDocument,
|
|
11575
11633
|
unavailableFrom,
|
|
11576
11634
|
uniqueAttendees,
|
|
11635
|
+
untranslatedLines,
|
|
11636
|
+
useActivityAttention,
|
|
11577
11637
|
useAudioLevel,
|
|
11578
11638
|
useAvailableActivities,
|
|
11579
11639
|
useCalls,
|
|
@@ -11583,6 +11643,8 @@ export {
|
|
|
11583
11643
|
useCollab,
|
|
11584
11644
|
useCollabPanelRequest,
|
|
11585
11645
|
useConsentNotice,
|
|
11646
|
+
useCoreObservation,
|
|
11647
|
+
useCoreRootProps,
|
|
11586
11648
|
useDeviceSnapshot,
|
|
11587
11649
|
useElapsed,
|
|
11588
11650
|
useEndMeeting,
|
|
@@ -11596,6 +11658,7 @@ export {
|
|
|
11596
11658
|
useLocalUserId,
|
|
11597
11659
|
useMediaEffects,
|
|
11598
11660
|
useMeetAi,
|
|
11661
|
+
useMeetCore,
|
|
11599
11662
|
useMeetHost,
|
|
11600
11663
|
useMeetShortcuts,
|
|
11601
11664
|
useMeetSnapshot,
|