@ai-matrx/meet 0.10.0 → 0.10.2
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 +12 -0
- package/dist/{collab-C2R-kQnV.d.cts → collab-BBQxcyRQ.d.cts} +47 -1
- package/dist/{collab-C2R-kQnV.d.ts → collab-BBQxcyRQ.d.ts} +47 -1
- package/dist/{components-CMtSekZS.d.ts → components-1XBHgMYK.d.ts} +6 -2
- package/dist/{components-DKHfkEVB.d.cts → components-CK0EyqGL.d.cts} +6 -2
- package/dist/core.cjs +506 -455
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +24 -4
- package/dist/core.d.ts +24 -4
- package/dist/core.js +506 -455
- package/dist/core.js.map +1 -1
- package/dist/index.cjs +506 -455
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +506 -455
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +2988 -2856
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +67 -5
- package/dist/react.d.ts +67 -5
- package/dist/react.js +2650 -2518
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +974 -909
- package/dist/skins/meet.cjs.map +1 -1
- package/dist/skins/meet.d.cts +2 -2
- package/dist/skins/meet.d.ts +2 -2
- package/dist/skins/meet.js +618 -553
- package/dist/skins/meet.js.map +1 -1
- package/package.json +4 -4
package/dist/skins/meet.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { useEffect as useEffect6, useLayoutEffect, useRef as useRef6, useState as useState4 } from "react";
|
|
6
6
|
|
|
7
7
|
// src/react/facade.ts
|
|
8
|
-
import { useMemo as
|
|
8
|
+
import { useMemo as useMemo5 } from "react";
|
|
9
9
|
|
|
10
10
|
// src/react/root.tsx
|
|
11
11
|
import { useEffect as useEffect2, useMemo as useMemo2, useRef as useRef2 } from "react";
|
|
@@ -255,6 +255,20 @@ function isLinkFollower(standing) {
|
|
|
255
255
|
function isHostRole(role) {
|
|
256
256
|
return role === "host" || role === "cohost";
|
|
257
257
|
}
|
|
258
|
+
function isObserverRole(role) {
|
|
259
|
+
return role === "viewer";
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/core/app-panel.ts
|
|
263
|
+
function appPanelOf(meeting) {
|
|
264
|
+
const raw = meeting?.metadata?.["app_panel"];
|
|
265
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
266
|
+
const key = raw["key"];
|
|
267
|
+
const recordId = raw["record_id"];
|
|
268
|
+
if (typeof key !== "string" || key.length === 0) return null;
|
|
269
|
+
if (typeof recordId !== "string" || recordId.length === 0) return null;
|
|
270
|
+
return { key, recordId };
|
|
271
|
+
}
|
|
258
272
|
|
|
259
273
|
// src/core/collab.ts
|
|
260
274
|
function assignedRoom(plan, identity) {
|
|
@@ -705,7 +719,10 @@ function orderParticipants(participants, activeSpeakers) {
|
|
|
705
719
|
}
|
|
706
720
|
function computeStage(args) {
|
|
707
721
|
const pageSize = Math.max(1, args.pageSize ?? DEFAULT_PAGE_SIZE);
|
|
708
|
-
const ordered = orderParticipants(
|
|
722
|
+
const ordered = orderParticipants(
|
|
723
|
+
args.participants.filter((participant) => !isObserverRole(participant.role)),
|
|
724
|
+
args.activeSpeakers
|
|
725
|
+
);
|
|
709
726
|
const sharer = ordered.find((participant) => participant.screenSharing) ?? null;
|
|
710
727
|
const pinnedParticipant = args.pinned === null ? null : ordered.find((participant) => participant.identity === args.pinned) ?? null;
|
|
711
728
|
const spotlit = args.spotlight == null ? null : ordered.find((participant) => participant.identity === args.spotlight) ?? null;
|
|
@@ -731,8 +748,96 @@ function gridColumns(count) {
|
|
|
731
748
|
return 5;
|
|
732
749
|
}
|
|
733
750
|
|
|
751
|
+
// src/react/app-panel.tsx
|
|
752
|
+
import { createContext as createContext2, useContext as useContext2, useMemo as useMemo3 } from "react";
|
|
753
|
+
|
|
754
|
+
// src/core/collab-state.ts
|
|
755
|
+
function availableActivities(collab, isHost) {
|
|
756
|
+
const settings = collab?.settings ?? null;
|
|
757
|
+
if (settings === null) return [];
|
|
758
|
+
const out = [];
|
|
759
|
+
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
760
|
+
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
761
|
+
if (settings.qaEnabled) out.push("qa");
|
|
762
|
+
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
763
|
+
return out;
|
|
764
|
+
}
|
|
765
|
+
function activityAttention(collab, isHost) {
|
|
766
|
+
if (collab === null) return false;
|
|
767
|
+
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
768
|
+
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
769
|
+
return false;
|
|
770
|
+
}
|
|
771
|
+
async function performCollab(runtime, request) {
|
|
772
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
773
|
+
try {
|
|
774
|
+
const result = await runtime.inRoom.collab(request);
|
|
775
|
+
return { ok: true, message: result.message, itemId: result.itemId };
|
|
776
|
+
} catch (error) {
|
|
777
|
+
return { ok: false, message: error.message ?? "That did not work." };
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
async function moveToRoom(runtime, roomId) {
|
|
781
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
782
|
+
try {
|
|
783
|
+
await runtime.engine.moveToBreakout(roomId);
|
|
784
|
+
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
785
|
+
} catch (error) {
|
|
786
|
+
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
function untranslatedLines(lines, translations) {
|
|
790
|
+
return lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text }) => ({ id, text }));
|
|
791
|
+
}
|
|
792
|
+
function nextTranslationBatch(pending, language, asked) {
|
|
793
|
+
const batch = pending.filter((line) => !asked.has(`${language}:${line.id}`)).slice(-20);
|
|
794
|
+
for (const line of batch) asked.add(`${language}:${line.id}`);
|
|
795
|
+
return batch;
|
|
796
|
+
}
|
|
797
|
+
function setCaptionLanguage(store, next) {
|
|
798
|
+
store.patch({
|
|
799
|
+
collab: {
|
|
800
|
+
...store.snapshot().collab,
|
|
801
|
+
captionLanguage: next,
|
|
802
|
+
captionTranslations: {},
|
|
803
|
+
captionTranslationError: null
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
function takePanelRequest(store) {
|
|
808
|
+
const request = store.snapshot().collab.panelRequest;
|
|
809
|
+
if (request === null) return null;
|
|
810
|
+
store.patch({ collab: { ...store.snapshot().collab, panelRequest: null } });
|
|
811
|
+
return request.panel;
|
|
812
|
+
}
|
|
813
|
+
function takeMoveRequest(store) {
|
|
814
|
+
const request = store.snapshot().collab.moveRequest;
|
|
815
|
+
if (request === null) return null;
|
|
816
|
+
store.patch({ collab: { ...store.snapshot().collab, moveRequest: null } });
|
|
817
|
+
return { roomId: request.roomId };
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
// src/react/app-panel.tsx
|
|
821
|
+
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
822
|
+
var RegistryContext = createContext2({});
|
|
823
|
+
function useMeetAppPanelRegistry() {
|
|
824
|
+
return useContext2(RegistryContext);
|
|
825
|
+
}
|
|
826
|
+
function useMeetAppPanel(meeting) {
|
|
827
|
+
const snapshot = useMeetSnapshot();
|
|
828
|
+
const registry = useMeetAppPanelRegistry();
|
|
829
|
+
const record = meeting ?? snapshot?.meeting ?? null;
|
|
830
|
+
return useMemo3(() => {
|
|
831
|
+
const panel = appPanelOf(record);
|
|
832
|
+
if (panel === null || record === null) return null;
|
|
833
|
+
const entry = registry[panel.key];
|
|
834
|
+
if (entry === void 0) return null;
|
|
835
|
+
return { ...entry, panel, organizationId: record.organizationId };
|
|
836
|
+
}, [record, registry]);
|
|
837
|
+
}
|
|
838
|
+
|
|
734
839
|
// src/react/hooks.ts
|
|
735
|
-
import { useCallback as useCallback2, useEffect as useEffect3, useMemo as
|
|
840
|
+
import { useCallback as useCallback2, useEffect as useEffect3, useMemo as useMemo4, useRef as useRef3, useState as useState2, useSyncExternalStore as useSyncExternalStore2 } from "react";
|
|
736
841
|
import { useRealtimeManager as useRealtimeManager2 } from "@ai-matrx/realtime/react";
|
|
737
842
|
|
|
738
843
|
// src/core/record.ts
|
|
@@ -911,7 +1016,7 @@ function useRoom() {
|
|
|
911
1016
|
function useStage(pageSize = DEFAULT_PAGE_SIZE) {
|
|
912
1017
|
const snapshot = useMeetSnapshot();
|
|
913
1018
|
const [page, setPage] = useState2(0);
|
|
914
|
-
const stage =
|
|
1019
|
+
const stage = useMemo4(
|
|
915
1020
|
() => computeStage({
|
|
916
1021
|
participants: snapshot?.participants ?? [],
|
|
917
1022
|
layout: snapshot?.layout ?? "grid",
|
|
@@ -1023,7 +1128,7 @@ function useMeetAi() {
|
|
|
1023
1128
|
const participants = snapshot?.participants ?? [];
|
|
1024
1129
|
const notes = snapshot?.notes ?? [];
|
|
1025
1130
|
const wrapUp = snapshot?.wrapUp ?? null;
|
|
1026
|
-
const status =
|
|
1131
|
+
const status = useMemo4(
|
|
1027
1132
|
() => noteTakerStatus({
|
|
1028
1133
|
meeting,
|
|
1029
1134
|
participants,
|
|
@@ -1032,7 +1137,7 @@ function useMeetAi() {
|
|
|
1032
1137
|
[meeting, participants, snapshot?.noteTakerRefusal]
|
|
1033
1138
|
);
|
|
1034
1139
|
const names = snapshot?.names ?? EMPTY_NAMES;
|
|
1035
|
-
const transcript =
|
|
1140
|
+
const transcript = useMemo4(
|
|
1036
1141
|
() => readableTranscript(snapshot?.transcript ?? []).map((line) => ({
|
|
1037
1142
|
id: line.id,
|
|
1038
1143
|
identity: line.identity,
|
|
@@ -1255,7 +1360,7 @@ function useHostControls() {
|
|
|
1255
1360
|
}
|
|
1256
1361
|
function useHandQueue() {
|
|
1257
1362
|
const snapshot = useMeetSnapshot();
|
|
1258
|
-
return
|
|
1363
|
+
return useMemo4(
|
|
1259
1364
|
() => (snapshot?.participants ?? []).filter((participant) => participant.handRaised).sort((a, b) => (a.handRaisedAt ?? 0) - (b.handRaisedAt ?? 0)),
|
|
1260
1365
|
[snapshot?.participants]
|
|
1261
1366
|
);
|
|
@@ -1393,72 +1498,6 @@ function useGuestRecordAccess(meeting) {
|
|
|
1393
1498
|
};
|
|
1394
1499
|
}
|
|
1395
1500
|
|
|
1396
|
-
// src/core/collab-state.ts
|
|
1397
|
-
function availableActivities(collab, isHost) {
|
|
1398
|
-
const settings = collab?.settings ?? null;
|
|
1399
|
-
if (settings === null) return [];
|
|
1400
|
-
const out = [];
|
|
1401
|
-
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
1402
|
-
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
1403
|
-
if (settings.qaEnabled) out.push("qa");
|
|
1404
|
-
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
1405
|
-
return out;
|
|
1406
|
-
}
|
|
1407
|
-
function activityAttention(collab, isHost) {
|
|
1408
|
-
if (collab === null) return false;
|
|
1409
|
-
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
1410
|
-
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
1411
|
-
return false;
|
|
1412
|
-
}
|
|
1413
|
-
async function performCollab(runtime, request) {
|
|
1414
|
-
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
1415
|
-
try {
|
|
1416
|
-
const result = await runtime.inRoom.collab(request);
|
|
1417
|
-
return { ok: true, message: result.message, itemId: result.itemId };
|
|
1418
|
-
} catch (error) {
|
|
1419
|
-
return { ok: false, message: error.message ?? "That did not work." };
|
|
1420
|
-
}
|
|
1421
|
-
}
|
|
1422
|
-
async function moveToRoom(runtime, roomId) {
|
|
1423
|
-
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
1424
|
-
try {
|
|
1425
|
-
await runtime.engine.moveToBreakout(roomId);
|
|
1426
|
-
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
1427
|
-
} catch (error) {
|
|
1428
|
-
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
1429
|
-
}
|
|
1430
|
-
}
|
|
1431
|
-
function untranslatedLines(lines, translations) {
|
|
1432
|
-
return lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text }) => ({ id, text }));
|
|
1433
|
-
}
|
|
1434
|
-
function nextTranslationBatch(pending, language, asked) {
|
|
1435
|
-
const batch = pending.filter((line) => !asked.has(`${language}:${line.id}`)).slice(-20);
|
|
1436
|
-
for (const line of batch) asked.add(`${language}:${line.id}`);
|
|
1437
|
-
return batch;
|
|
1438
|
-
}
|
|
1439
|
-
function setCaptionLanguage(store, next) {
|
|
1440
|
-
store.patch({
|
|
1441
|
-
collab: {
|
|
1442
|
-
...store.snapshot().collab,
|
|
1443
|
-
captionLanguage: next,
|
|
1444
|
-
captionTranslations: {},
|
|
1445
|
-
captionTranslationError: null
|
|
1446
|
-
}
|
|
1447
|
-
});
|
|
1448
|
-
}
|
|
1449
|
-
function takePanelRequest(store) {
|
|
1450
|
-
const request = store.snapshot().collab.panelRequest;
|
|
1451
|
-
if (request === null) return null;
|
|
1452
|
-
store.patch({ collab: { ...store.snapshot().collab, panelRequest: null } });
|
|
1453
|
-
return request.panel;
|
|
1454
|
-
}
|
|
1455
|
-
function takeMoveRequest(store) {
|
|
1456
|
-
const request = store.snapshot().collab.moveRequest;
|
|
1457
|
-
if (request === null) return null;
|
|
1458
|
-
store.patch({ collab: { ...store.snapshot().collab, moveRequest: null } });
|
|
1459
|
-
return { roomId: request.roomId };
|
|
1460
|
-
}
|
|
1461
|
-
|
|
1462
1501
|
// src/react/collab-hooks.ts
|
|
1463
1502
|
import { useEffect as useEffect4, useRef as useRef4 } from "react";
|
|
1464
1503
|
function useCollab() {
|
|
@@ -1525,7 +1564,7 @@ function useMeetCore() {
|
|
|
1525
1564
|
const role = useRole();
|
|
1526
1565
|
const isHost = useIsHost();
|
|
1527
1566
|
const observation = useCoreObservation();
|
|
1528
|
-
return
|
|
1567
|
+
return useMemo5(
|
|
1529
1568
|
() => ({ host, snapshot, devices, role, isHost, observation }),
|
|
1530
1569
|
[host, snapshot, devices, role, isHost, observation]
|
|
1531
1570
|
);
|
|
@@ -1538,9 +1577,9 @@ import { Alert, AlertDescription, Button, Checkbox, ErrorBox, Label, SegmentedCo
|
|
|
1538
1577
|
import { useEffect as useEffect5, useRef as useRef5, useState as useState3 } from "react";
|
|
1539
1578
|
|
|
1540
1579
|
// src/skins/meet/icons.tsx
|
|
1541
|
-
import { jsx as
|
|
1580
|
+
import { jsx as jsx4, jsxs } from "react/jsx-runtime";
|
|
1542
1581
|
function Icon({ children, ...props }) {
|
|
1543
|
-
return /* @__PURE__ */
|
|
1582
|
+
return /* @__PURE__ */ jsx4(
|
|
1544
1583
|
"svg",
|
|
1545
1584
|
{
|
|
1546
1585
|
width: "20",
|
|
@@ -1560,223 +1599,223 @@ function Icon({ children, ...props }) {
|
|
|
1560
1599
|
}
|
|
1561
1600
|
function MicIcon(props) {
|
|
1562
1601
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1563
|
-
/* @__PURE__ */
|
|
1564
|
-
/* @__PURE__ */
|
|
1565
|
-
/* @__PURE__ */
|
|
1602
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
|
|
1603
|
+
/* @__PURE__ */ jsx4("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
|
|
1604
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 19v3" })
|
|
1566
1605
|
] });
|
|
1567
1606
|
}
|
|
1568
1607
|
function MicOffIcon(props) {
|
|
1569
1608
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1570
|
-
/* @__PURE__ */
|
|
1571
|
-
/* @__PURE__ */
|
|
1572
|
-
/* @__PURE__ */
|
|
1573
|
-
/* @__PURE__ */
|
|
1574
|
-
/* @__PURE__ */
|
|
1609
|
+
/* @__PURE__ */ jsx4("path", { d: "M2 2l20 20" }),
|
|
1610
|
+
/* @__PURE__ */ jsx4("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
|
|
1611
|
+
/* @__PURE__ */ jsx4("path", { d: "M15 9.34V5a3 3 0 0 0-5.94-.6" }),
|
|
1612
|
+
/* @__PURE__ */ jsx4("path", { d: "M19 10v2a7 7 0 0 1-.11 1.23M5 10v2a7 7 0 0 0 11 5.66" }),
|
|
1613
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 19v3" })
|
|
1575
1614
|
] });
|
|
1576
1615
|
}
|
|
1577
1616
|
function CameraIcon(props) {
|
|
1578
1617
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1579
|
-
/* @__PURE__ */
|
|
1580
|
-
/* @__PURE__ */
|
|
1618
|
+
/* @__PURE__ */ jsx4("path", { d: "m23 7-7 5 7 5V7Z" }),
|
|
1619
|
+
/* @__PURE__ */ jsx4("rect", { x: "1", y: "5", width: "15", height: "14", rx: "2" })
|
|
1581
1620
|
] });
|
|
1582
1621
|
}
|
|
1583
1622
|
function CameraOffIcon(props) {
|
|
1584
1623
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1585
|
-
/* @__PURE__ */
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
/* @__PURE__ */
|
|
1624
|
+
/* @__PURE__ */ jsx4("path", { d: "M2 2l20 20" }),
|
|
1625
|
+
/* @__PURE__ */ jsx4("path", { d: "M10.66 5H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10" }),
|
|
1626
|
+
/* @__PURE__ */ jsx4("path", { d: "M16 16a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2" })
|
|
1588
1627
|
] });
|
|
1589
1628
|
}
|
|
1590
1629
|
function ScreenShareIcon(props) {
|
|
1591
1630
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1592
|
-
/* @__PURE__ */
|
|
1593
|
-
/* @__PURE__ */
|
|
1594
|
-
/* @__PURE__ */
|
|
1631
|
+
/* @__PURE__ */ jsx4("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2" }),
|
|
1632
|
+
/* @__PURE__ */ jsx4("path", { d: "M8 21h8M12 17v4" }),
|
|
1633
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 13V8m0 0-2.5 2.5M12 8l2.5 2.5" })
|
|
1595
1634
|
] });
|
|
1596
1635
|
}
|
|
1597
1636
|
function PhoneIcon(props) {
|
|
1598
|
-
return /* @__PURE__ */
|
|
1637
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("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" }) });
|
|
1599
1638
|
}
|
|
1600
1639
|
function PhoneOffIcon(props) {
|
|
1601
|
-
return /* @__PURE__ */
|
|
1640
|
+
return /* @__PURE__ */ jsx4(Icon, { fill: "currentColor", stroke: "none", ...props, children: /* @__PURE__ */ jsx4("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" }) });
|
|
1602
1641
|
}
|
|
1603
1642
|
function HandIcon(props) {
|
|
1604
1643
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1605
|
-
/* @__PURE__ */
|
|
1606
|
-
/* @__PURE__ */
|
|
1607
|
-
/* @__PURE__ */
|
|
1608
|
-
/* @__PURE__ */
|
|
1644
|
+
/* @__PURE__ */ jsx4("path", { d: "M18 11V6a2 2 0 0 0-4 0v5" }),
|
|
1645
|
+
/* @__PURE__ */ jsx4("path", { d: "M14 10V4a2 2 0 0 0-4 0v7" }),
|
|
1646
|
+
/* @__PURE__ */ jsx4("path", { d: "M10 10.5V6a2 2 0 0 0-4 0v8" }),
|
|
1647
|
+
/* @__PURE__ */ jsx4("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" })
|
|
1609
1648
|
] });
|
|
1610
1649
|
}
|
|
1611
1650
|
function ChatIcon(props) {
|
|
1612
|
-
return /* @__PURE__ */
|
|
1651
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z" }) });
|
|
1613
1652
|
}
|
|
1614
1653
|
function PeopleIcon(props) {
|
|
1615
1654
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1616
|
-
/* @__PURE__ */
|
|
1617
|
-
/* @__PURE__ */
|
|
1618
|
-
/* @__PURE__ */
|
|
1655
|
+
/* @__PURE__ */ jsx4("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
|
|
1656
|
+
/* @__PURE__ */ jsx4("circle", { cx: "9", cy: "7", r: "4" }),
|
|
1657
|
+
/* @__PURE__ */ jsx4("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" })
|
|
1619
1658
|
] });
|
|
1620
1659
|
}
|
|
1621
1660
|
function RecordIcon(props) {
|
|
1622
|
-
return /* @__PURE__ */
|
|
1661
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
|
|
1623
1662
|
}
|
|
1624
1663
|
function SparklesIcon(props) {
|
|
1625
1664
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1626
|
-
/* @__PURE__ */
|
|
1627
|
-
/* @__PURE__ */
|
|
1665
|
+
/* @__PURE__ */ jsx4("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" }),
|
|
1666
|
+
/* @__PURE__ */ jsx4("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" })
|
|
1628
1667
|
] });
|
|
1629
1668
|
}
|
|
1630
1669
|
function LockIcon(props) {
|
|
1631
1670
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1632
|
-
/* @__PURE__ */
|
|
1633
|
-
/* @__PURE__ */
|
|
1671
|
+
/* @__PURE__ */ jsx4("rect", { x: "4", y: "10", width: "16", height: "11", rx: "2" }),
|
|
1672
|
+
/* @__PURE__ */ jsx4("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
|
|
1634
1673
|
] });
|
|
1635
1674
|
}
|
|
1636
1675
|
function LayoutIcon(props) {
|
|
1637
1676
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1638
|
-
/* @__PURE__ */
|
|
1639
|
-
/* @__PURE__ */
|
|
1677
|
+
/* @__PURE__ */ jsx4("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
1678
|
+
/* @__PURE__ */ jsx4("path", { d: "M3 9h18M9 21V9" })
|
|
1640
1679
|
] });
|
|
1641
1680
|
}
|
|
1642
1681
|
function SettingsIcon(props) {
|
|
1643
1682
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1644
|
-
/* @__PURE__ */
|
|
1645
|
-
/* @__PURE__ */
|
|
1683
|
+
/* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "3" }),
|
|
1684
|
+
/* @__PURE__ */ jsx4("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" })
|
|
1646
1685
|
] });
|
|
1647
1686
|
}
|
|
1648
1687
|
function CheckIcon(props) {
|
|
1649
|
-
return /* @__PURE__ */
|
|
1688
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M20 6 9 17l-5-5" }) });
|
|
1650
1689
|
}
|
|
1651
1690
|
function CloseIcon(props) {
|
|
1652
|
-
return /* @__PURE__ */
|
|
1691
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M18 6 6 18M6 6l12 12" }) });
|
|
1653
1692
|
}
|
|
1654
1693
|
function PinIcon(props) {
|
|
1655
1694
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1656
|
-
/* @__PURE__ */
|
|
1657
|
-
/* @__PURE__ */
|
|
1695
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 17v5" }),
|
|
1696
|
+
/* @__PURE__ */ jsx4("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
|
|
1658
1697
|
] });
|
|
1659
1698
|
}
|
|
1660
1699
|
function WifiLowIcon(props) {
|
|
1661
1700
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1662
|
-
/* @__PURE__ */
|
|
1663
|
-
/* @__PURE__ */
|
|
1701
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 20h.01" }),
|
|
1702
|
+
/* @__PURE__ */ jsx4("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
|
|
1664
1703
|
] });
|
|
1665
1704
|
}
|
|
1666
1705
|
function SmileIcon(props) {
|
|
1667
1706
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1668
|
-
/* @__PURE__ */
|
|
1669
|
-
/* @__PURE__ */
|
|
1670
|
-
/* @__PURE__ */
|
|
1671
|
-
/* @__PURE__ */
|
|
1707
|
+
/* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "10" }),
|
|
1708
|
+
/* @__PURE__ */ jsx4("path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }),
|
|
1709
|
+
/* @__PURE__ */ jsx4("line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }),
|
|
1710
|
+
/* @__PURE__ */ jsx4("line", { x1: "15", x2: "15.01", y1: "9", y2: "9" })
|
|
1672
1711
|
] });
|
|
1673
1712
|
}
|
|
1674
1713
|
function MoreIcon(props) {
|
|
1675
1714
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1676
|
-
/* @__PURE__ */
|
|
1677
|
-
/* @__PURE__ */
|
|
1678
|
-
/* @__PURE__ */
|
|
1715
|
+
/* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "1" }),
|
|
1716
|
+
/* @__PURE__ */ jsx4("circle", { cx: "19", cy: "12", r: "1" }),
|
|
1717
|
+
/* @__PURE__ */ jsx4("circle", { cx: "5", cy: "12", r: "1" })
|
|
1679
1718
|
] });
|
|
1680
1719
|
}
|
|
1681
1720
|
function SearchIcon(props) {
|
|
1682
1721
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1683
|
-
/* @__PURE__ */
|
|
1684
|
-
/* @__PURE__ */
|
|
1722
|
+
/* @__PURE__ */ jsx4("circle", { cx: "11", cy: "11", r: "8" }),
|
|
1723
|
+
/* @__PURE__ */ jsx4("path", { d: "m21 21-4.3-4.3" })
|
|
1685
1724
|
] });
|
|
1686
1725
|
}
|
|
1687
1726
|
function KeyboardIcon(props) {
|
|
1688
1727
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1689
|
-
/* @__PURE__ */
|
|
1690
|
-
/* @__PURE__ */
|
|
1728
|
+
/* @__PURE__ */ jsx4("path", { d: "M10 8h.01M12 12h.01M14 8h.01M16 12h.01M18 8h.01M6 8h.01M7 16h10M8 12h.01" }),
|
|
1729
|
+
/* @__PURE__ */ jsx4("rect", { width: "20", height: "16", x: "2", y: "4", rx: "2" })
|
|
1691
1730
|
] });
|
|
1692
1731
|
}
|
|
1693
1732
|
function SpotlightIcon(props) {
|
|
1694
|
-
return /* @__PURE__ */
|
|
1733
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("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" }) });
|
|
1695
1734
|
}
|
|
1696
1735
|
function SignalIcon({ bars, ...props }) {
|
|
1697
1736
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1698
|
-
/* @__PURE__ */
|
|
1699
|
-
/* @__PURE__ */
|
|
1700
|
-
/* @__PURE__ */
|
|
1701
|
-
/* @__PURE__ */
|
|
1737
|
+
/* @__PURE__ */ jsx4("path", { d: "M4 20v-2", opacity: bars >= 1 ? 1 : 0.3 }),
|
|
1738
|
+
/* @__PURE__ */ jsx4("path", { d: "M10 20v-6", opacity: bars >= 2 ? 1 : 0.3 }),
|
|
1739
|
+
/* @__PURE__ */ jsx4("path", { d: "M16 20V9", opacity: bars >= 3 ? 1 : 0.3 }),
|
|
1740
|
+
/* @__PURE__ */ jsx4("path", { d: "M22 20V4", opacity: bars >= 3 ? 1 : 0.3 })
|
|
1702
1741
|
] });
|
|
1703
1742
|
}
|
|
1704
1743
|
function SpeakerIcon(props) {
|
|
1705
1744
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1706
|
-
/* @__PURE__ */
|
|
1707
|
-
/* @__PURE__ */
|
|
1708
|
-
/* @__PURE__ */
|
|
1745
|
+
/* @__PURE__ */ jsx4("path", { d: "M11 5 6 9H2v6h4l5 4V5Z" }),
|
|
1746
|
+
/* @__PURE__ */ jsx4("path", { d: "M15.54 8.46a5 5 0 0 1 0 7.07" }),
|
|
1747
|
+
/* @__PURE__ */ jsx4("path", { d: "M19.07 4.93a10 10 0 0 1 0 14.14" })
|
|
1709
1748
|
] });
|
|
1710
1749
|
}
|
|
1711
1750
|
function FlagIcon(props) {
|
|
1712
1751
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1713
|
-
/* @__PURE__ */
|
|
1714
|
-
/* @__PURE__ */
|
|
1752
|
+
/* @__PURE__ */ jsx4("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" }),
|
|
1753
|
+
/* @__PURE__ */ jsx4("line", { x1: "4", x2: "4", y1: "22", y2: "15" })
|
|
1715
1754
|
] });
|
|
1716
1755
|
}
|
|
1717
1756
|
function PencilIcon(props) {
|
|
1718
|
-
return /* @__PURE__ */
|
|
1757
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" }) });
|
|
1719
1758
|
}
|
|
1720
1759
|
function ActivitiesIcon(props) {
|
|
1721
1760
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1722
|
-
/* @__PURE__ */
|
|
1723
|
-
/* @__PURE__ */
|
|
1724
|
-
/* @__PURE__ */
|
|
1761
|
+
/* @__PURE__ */ jsx4("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" }),
|
|
1762
|
+
/* @__PURE__ */ jsx4("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
|
|
1763
|
+
/* @__PURE__ */ jsx4("circle", { cx: "17.5", cy: "17.5", r: "3.5" })
|
|
1725
1764
|
] });
|
|
1726
1765
|
}
|
|
1727
1766
|
function PollIcon(props) {
|
|
1728
1767
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1729
|
-
/* @__PURE__ */
|
|
1730
|
-
/* @__PURE__ */
|
|
1731
|
-
/* @__PURE__ */
|
|
1768
|
+
/* @__PURE__ */ jsx4("line", { x1: "18", x2: "18", y1: "20", y2: "10" }),
|
|
1769
|
+
/* @__PURE__ */ jsx4("line", { x1: "12", x2: "12", y1: "20", y2: "4" }),
|
|
1770
|
+
/* @__PURE__ */ jsx4("line", { x1: "6", x2: "6", y1: "20", y2: "14" })
|
|
1732
1771
|
] });
|
|
1733
1772
|
}
|
|
1734
1773
|
function QuestionIcon(props) {
|
|
1735
1774
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1736
|
-
/* @__PURE__ */
|
|
1737
|
-
/* @__PURE__ */
|
|
1738
|
-
/* @__PURE__ */
|
|
1775
|
+
/* @__PURE__ */ jsx4("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z" }),
|
|
1776
|
+
/* @__PURE__ */ jsx4("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
|
|
1777
|
+
/* @__PURE__ */ jsx4("path", { d: "M12 17h.01" })
|
|
1739
1778
|
] });
|
|
1740
1779
|
}
|
|
1741
1780
|
function WhiteboardIcon(props) {
|
|
1742
1781
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1743
|
-
/* @__PURE__ */
|
|
1744
|
-
/* @__PURE__ */
|
|
1745
|
-
/* @__PURE__ */
|
|
1782
|
+
/* @__PURE__ */ jsx4("path", { d: "M2 3h20" }),
|
|
1783
|
+
/* @__PURE__ */ jsx4("path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" }),
|
|
1784
|
+
/* @__PURE__ */ jsx4("path", { d: "m7 21 5-5 5 5" })
|
|
1746
1785
|
] });
|
|
1747
1786
|
}
|
|
1748
1787
|
function BreakoutIcon(props) {
|
|
1749
1788
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1750
|
-
/* @__PURE__ */
|
|
1751
|
-
/* @__PURE__ */
|
|
1752
|
-
/* @__PURE__ */
|
|
1789
|
+
/* @__PURE__ */ jsx4("rect", { width: "7", height: "18", x: "3", y: "3", rx: "1" }),
|
|
1790
|
+
/* @__PURE__ */ jsx4("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }),
|
|
1791
|
+
/* @__PURE__ */ jsx4("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })
|
|
1753
1792
|
] });
|
|
1754
1793
|
}
|
|
1755
1794
|
function UpvoteIcon(props) {
|
|
1756
|
-
return /* @__PURE__ */
|
|
1795
|
+
return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
|
|
1757
1796
|
}
|
|
1758
1797
|
function EraserIcon(props) {
|
|
1759
1798
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1760
|
-
/* @__PURE__ */
|
|
1761
|
-
/* @__PURE__ */
|
|
1762
|
-
/* @__PURE__ */
|
|
1799
|
+
/* @__PURE__ */ jsx4("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" }),
|
|
1800
|
+
/* @__PURE__ */ jsx4("path", { d: "M22 21H7" }),
|
|
1801
|
+
/* @__PURE__ */ jsx4("path", { d: "m5 11 9 9" })
|
|
1763
1802
|
] });
|
|
1764
1803
|
}
|
|
1765
1804
|
function HighlighterIcon(props) {
|
|
1766
1805
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1767
|
-
/* @__PURE__ */
|
|
1768
|
-
/* @__PURE__ */
|
|
1806
|
+
/* @__PURE__ */ jsx4("path", { d: "m9 11-6 6v3h9l3-3" }),
|
|
1807
|
+
/* @__PURE__ */ jsx4("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" })
|
|
1769
1808
|
] });
|
|
1770
1809
|
}
|
|
1771
1810
|
function UndoIcon(props) {
|
|
1772
1811
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
1773
|
-
/* @__PURE__ */
|
|
1774
|
-
/* @__PURE__ */
|
|
1812
|
+
/* @__PURE__ */ jsx4("path", { d: "M9 14 4 9l5-5" }),
|
|
1813
|
+
/* @__PURE__ */ jsx4("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" })
|
|
1775
1814
|
] });
|
|
1776
1815
|
}
|
|
1777
1816
|
|
|
1778
1817
|
// src/skins/meet/collab.tsx
|
|
1779
|
-
import { jsx as
|
|
1818
|
+
import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
1780
1819
|
function useNotice() {
|
|
1781
1820
|
const [notice, setNotice] = useState3(null);
|
|
1782
1821
|
useEffect5(() => {
|
|
@@ -1788,7 +1827,7 @@ function useNotice() {
|
|
|
1788
1827
|
}
|
|
1789
1828
|
function Notice({ notice }) {
|
|
1790
1829
|
if (notice === null) return null;
|
|
1791
|
-
return /* @__PURE__ */
|
|
1830
|
+
return /* @__PURE__ */ jsx5("p", { className: notice.failed ? "mx-meet__panel-note mx-meet__collab-error" : "mx-meet__panel-note", role: "status", children: notice.text });
|
|
1792
1831
|
}
|
|
1793
1832
|
var ACTIVITY_LABELS = {
|
|
1794
1833
|
polls: "Polls",
|
|
@@ -1798,10 +1837,10 @@ var ACTIVITY_LABELS = {
|
|
|
1798
1837
|
};
|
|
1799
1838
|
function ActivityIcon({ panel }) {
|
|
1800
1839
|
const props = { width: 16, height: 16 };
|
|
1801
|
-
if (panel === "polls") return /* @__PURE__ */
|
|
1802
|
-
if (panel === "qa") return /* @__PURE__ */
|
|
1803
|
-
if (panel === "whiteboard") return /* @__PURE__ */
|
|
1804
|
-
return /* @__PURE__ */
|
|
1840
|
+
if (panel === "polls") return /* @__PURE__ */ jsx5(PollIcon, { ...props });
|
|
1841
|
+
if (panel === "qa") return /* @__PURE__ */ jsx5(QuestionIcon, { ...props });
|
|
1842
|
+
if (panel === "whiteboard") return /* @__PURE__ */ jsx5(WhiteboardIcon, { ...props });
|
|
1843
|
+
return /* @__PURE__ */ jsx5(BreakoutIcon, { ...props });
|
|
1805
1844
|
}
|
|
1806
1845
|
function ActivitiesControl({
|
|
1807
1846
|
active,
|
|
@@ -1813,10 +1852,10 @@ function ActivitiesControl({
|
|
|
1813
1852
|
if (available.length === 0) return null;
|
|
1814
1853
|
return /* @__PURE__ */ jsxs2("span", { className: "mx-meet__anchor", children: [
|
|
1815
1854
|
/* @__PURE__ */ jsxs2(ControlButton, { label: "Activities", active: open || active !== null, onClick: () => setOpen(!open), children: [
|
|
1816
|
-
/* @__PURE__ */
|
|
1817
|
-
attention ? /* @__PURE__ */
|
|
1855
|
+
/* @__PURE__ */ jsx5(ActivitiesIcon, {}),
|
|
1856
|
+
attention ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
1818
1857
|
] }),
|
|
1819
|
-
open ? /* @__PURE__ */
|
|
1858
|
+
open ? /* @__PURE__ */ jsx5(Popover, { label: "Activities", onClose: () => setOpen(false), children: /* @__PURE__ */ jsx5("div", { className: "mx-meet__menu", role: "menu", children: available.map((panel) => /* @__PURE__ */ jsxs2(
|
|
1820
1859
|
MenuItem,
|
|
1821
1860
|
{
|
|
1822
1861
|
onSelect: () => {
|
|
@@ -1824,7 +1863,7 @@ function ActivitiesControl({
|
|
|
1824
1863
|
onOpen(panel);
|
|
1825
1864
|
},
|
|
1826
1865
|
children: [
|
|
1827
|
-
/* @__PURE__ */
|
|
1866
|
+
/* @__PURE__ */ jsx5(ActivityIcon, { panel }),
|
|
1828
1867
|
" ",
|
|
1829
1868
|
ACTIVITY_LABELS[panel]
|
|
1830
1869
|
]
|
|
@@ -1872,8 +1911,8 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
1872
1911
|
},
|
|
1873
1912
|
children: [
|
|
1874
1913
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
1875
|
-
/* @__PURE__ */
|
|
1876
|
-
/* @__PURE__ */
|
|
1914
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Question" }),
|
|
1915
|
+
/* @__PURE__ */ jsx5(
|
|
1877
1916
|
"input",
|
|
1878
1917
|
{
|
|
1879
1918
|
className: "mx-meet__input",
|
|
@@ -1886,7 +1925,7 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
1886
1925
|
)
|
|
1887
1926
|
] }),
|
|
1888
1927
|
options.map((option, index) => /* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
|
|
1889
|
-
/* @__PURE__ */
|
|
1928
|
+
/* @__PURE__ */ jsx5(
|
|
1890
1929
|
"input",
|
|
1891
1930
|
{
|
|
1892
1931
|
className: "mx-meet__input",
|
|
@@ -1897,22 +1936,22 @@ function PollComposer({ maxOptions, onDone }) {
|
|
|
1897
1936
|
onChange: (event) => setOptions(options.map((o, i) => i === index ? event.target.value : o))
|
|
1898
1937
|
}
|
|
1899
1938
|
),
|
|
1900
|
-
options.length > 2 ? /* @__PURE__ */
|
|
1939
|
+
options.length > 2 ? /* @__PURE__ */ jsx5(ControlButton, { label: `Remove answer ${index + 1}`, onClick: () => setOptions(options.filter((_, i) => i !== index)), children: /* @__PURE__ */ jsx5(CloseIcon, { width: 14, height: 14 }) }) : null
|
|
1901
1940
|
] }, index)),
|
|
1902
|
-
options.length < maxOptions ? /* @__PURE__ */
|
|
1941
|
+
options.length < maxOptions ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
|
|
1903
1942
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
1904
|
-
/* @__PURE__ */
|
|
1943
|
+
/* @__PURE__ */ jsx5("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
|
|
1905
1944
|
"People can pick more than one"
|
|
1906
1945
|
] }),
|
|
1907
1946
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
1908
|
-
/* @__PURE__ */
|
|
1947
|
+
/* @__PURE__ */ jsx5("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
|
|
1909
1948
|
"Anonymous \u2014 nobody sees who picked what"
|
|
1910
1949
|
] }),
|
|
1911
|
-
/* @__PURE__ */
|
|
1950
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
1912
1951
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
1913
|
-
/* @__PURE__ */
|
|
1914
|
-
/* @__PURE__ */
|
|
1915
|
-
/* @__PURE__ */
|
|
1952
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__primary mx-meet__primary--small", disabled: !ready || busy, children: "Launch" }),
|
|
1953
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", disabled: !ready || busy, onClick: () => void save(false), children: "Save draft" }),
|
|
1954
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: onDone, children: "Cancel" })
|
|
1916
1955
|
] })
|
|
1917
1956
|
]
|
|
1918
1957
|
}
|
|
@@ -1934,8 +1973,8 @@ function PollCard({ poll }) {
|
|
|
1934
1973
|
};
|
|
1935
1974
|
return /* @__PURE__ */ jsxs2("article", { className: "mx-meet__collab-card", "aria-label": poll.question, children: [
|
|
1936
1975
|
/* @__PURE__ */ jsxs2("header", { className: "mx-meet__collab-head", children: [
|
|
1937
|
-
/* @__PURE__ */
|
|
1938
|
-
/* @__PURE__ */
|
|
1976
|
+
/* @__PURE__ */ jsx5("strong", { className: "mx-meet__collab-title", children: poll.question }),
|
|
1977
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-state", children: stateWord })
|
|
1939
1978
|
] }),
|
|
1940
1979
|
/* @__PURE__ */ jsxs2("p", { className: "mx-meet__panel-note", children: [
|
|
1941
1980
|
poll.multiple ? "Pick any." : "Pick one.",
|
|
@@ -1943,7 +1982,7 @@ function PollCard({ poll }) {
|
|
|
1943
1982
|
counts && poll.voterCount !== null ? ` ${poll.voterCount} voted.` : "",
|
|
1944
1983
|
isHost && poll.state !== "draft" && !poll.resultsShared ? " Results are visible only to hosts." : ""
|
|
1945
1984
|
] }),
|
|
1946
|
-
/* @__PURE__ */
|
|
1985
|
+
/* @__PURE__ */ jsx5("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
|
|
1947
1986
|
const share = counts && total > 0 ? Math.round((option.votes ?? 0) / total * 100) : 0;
|
|
1948
1987
|
const chosen = picked.includes(option.id);
|
|
1949
1988
|
return /* @__PURE__ */ jsxs2("li", { children: [
|
|
@@ -1956,8 +1995,8 @@ function PollCard({ poll }) {
|
|
|
1956
1995
|
disabled: !canVote,
|
|
1957
1996
|
onClick: () => toggle(option.id),
|
|
1958
1997
|
children: [
|
|
1959
|
-
counts ? /* @__PURE__ */
|
|
1960
|
-
/* @__PURE__ */
|
|
1998
|
+
counts ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__poll-bar", style: { width: `${share}%` }, "aria-hidden": "true" }) : null,
|
|
1999
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__poll-text", children: option.text }),
|
|
1961
2000
|
counts ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__poll-count", children: [
|
|
1962
2001
|
option.votes ?? 0,
|
|
1963
2002
|
" \xB7 ",
|
|
@@ -1967,12 +2006,12 @@ function PollCard({ poll }) {
|
|
|
1967
2006
|
]
|
|
1968
2007
|
}
|
|
1969
2008
|
),
|
|
1970
|
-
option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */
|
|
2009
|
+
option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
|
|
1971
2010
|
] }, option.id);
|
|
1972
2011
|
}) }),
|
|
1973
|
-
/* @__PURE__ */
|
|
2012
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
1974
2013
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
1975
|
-
canVote ? /* @__PURE__ */
|
|
2014
|
+
canVote ? /* @__PURE__ */ jsx5(
|
|
1976
2015
|
"button",
|
|
1977
2016
|
{
|
|
1978
2017
|
type: "button",
|
|
@@ -1982,10 +2021,10 @@ function PollCard({ poll }) {
|
|
|
1982
2021
|
children: voted ? "Change vote" : "Vote"
|
|
1983
2022
|
}
|
|
1984
2023
|
) : null,
|
|
1985
|
-
isHost && poll.state === "draft" ? /* @__PURE__ */
|
|
1986
|
-
isHost && poll.state === "live" ? /* @__PURE__ */
|
|
1987
|
-
isHost && poll.state !== "draft" ? /* @__PURE__ */
|
|
1988
|
-
isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */
|
|
2024
|
+
isHost && poll.state === "draft" ? /* @__PURE__ */ jsx5("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,
|
|
2025
|
+
isHost && poll.state === "live" ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_close", itemId: poll.id }).then(show), children: "End poll" }) : null,
|
|
2026
|
+
isHost && poll.state !== "draft" ? /* @__PURE__ */ jsx5("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,
|
|
2027
|
+
isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "poll_delete", itemId: poll.id }).then(show), children: "Delete" }) : null
|
|
1989
2028
|
] })
|
|
1990
2029
|
] });
|
|
1991
2030
|
}
|
|
@@ -1996,11 +2035,11 @@ function PollsPanel({ onClose }) {
|
|
|
1996
2035
|
const maxOptions = collab?.settings?.pollMaxOptions ?? 10;
|
|
1997
2036
|
const ordered = [...polls].reverse();
|
|
1998
2037
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Polls", onClose, children: [
|
|
1999
|
-
collab?.error != null ? /* @__PURE__ */
|
|
2000
|
-
isHost && !composing ? /* @__PURE__ */
|
|
2001
|
-
isHost && composing ? /* @__PURE__ */
|
|
2002
|
-
ordered.length === 0 && !composing ? /* @__PURE__ */
|
|
2003
|
-
ordered.map((poll) => /* @__PURE__ */
|
|
2038
|
+
collab?.error != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
2039
|
+
isHost && !composing ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => setComposing(true), children: "New poll" }) : null,
|
|
2040
|
+
isHost && composing ? /* @__PURE__ */ jsx5(PollComposer, { maxOptions, onDone: () => setComposing(false) }) : null,
|
|
2041
|
+
ordered.length === 0 && !composing ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: isHost ? "No polls yet. Polls and their results are kept with the meeting." : "No polls yet." }) : null,
|
|
2042
|
+
ordered.map((poll) => /* @__PURE__ */ jsx5(PollCard, { poll }, poll.id))
|
|
2004
2043
|
] });
|
|
2005
2044
|
}
|
|
2006
2045
|
function QuestionCard({ question }) {
|
|
@@ -2020,18 +2059,18 @@ function QuestionCard({ question }) {
|
|
|
2020
2059
|
disabled: question.state === "dismissed",
|
|
2021
2060
|
onClick: () => void act({ action: "question_upvote", itemId: question.id }).then((r) => r.ok ? void 0 : show(r)),
|
|
2022
2061
|
children: [
|
|
2023
|
-
/* @__PURE__ */
|
|
2024
|
-
/* @__PURE__ */
|
|
2062
|
+
/* @__PURE__ */ jsx5(UpvoteIcon, { width: 16, height: 16 }),
|
|
2063
|
+
/* @__PURE__ */ jsx5("span", { children: question.upvotes })
|
|
2025
2064
|
]
|
|
2026
2065
|
}
|
|
2027
2066
|
),
|
|
2028
2067
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__question-body", children: [
|
|
2029
2068
|
/* @__PURE__ */ jsxs2("span", { className: "mx-meet__chat-meta", children: [
|
|
2030
|
-
/* @__PURE__ */
|
|
2031
|
-
question.mine && question.anonymous ? /* @__PURE__ */
|
|
2032
|
-
question.state !== "open" ? /* @__PURE__ */
|
|
2069
|
+
/* @__PURE__ */ jsx5("strong", { children: question.mine ? "You" : question.askerName }),
|
|
2070
|
+
question.mine && question.anonymous ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-private", children: "anonymous" }) : null,
|
|
2071
|
+
question.state !== "open" ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-state", children: question.state === "answered" ? "Answered" : "Dismissed" }) : null
|
|
2033
2072
|
] }),
|
|
2034
|
-
/* @__PURE__ */
|
|
2073
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-text", children: question.text }),
|
|
2035
2074
|
question.answer !== null ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__question-answer", children: [
|
|
2036
2075
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
2037
2076
|
question.answeredByName ?? "Host",
|
|
@@ -2057,7 +2096,7 @@ function QuestionCard({ question }) {
|
|
|
2057
2096
|
});
|
|
2058
2097
|
},
|
|
2059
2098
|
children: [
|
|
2060
|
-
/* @__PURE__ */
|
|
2099
|
+
/* @__PURE__ */ jsx5(
|
|
2061
2100
|
"input",
|
|
2062
2101
|
{
|
|
2063
2102
|
className: "mx-meet__input",
|
|
@@ -2069,16 +2108,16 @@ function QuestionCard({ question }) {
|
|
|
2069
2108
|
autoFocus: true
|
|
2070
2109
|
}
|
|
2071
2110
|
),
|
|
2072
|
-
/* @__PURE__ */
|
|
2111
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", children: "Done" })
|
|
2073
2112
|
]
|
|
2074
2113
|
}
|
|
2075
2114
|
) : null,
|
|
2076
|
-
/* @__PURE__ */
|
|
2115
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
2077
2116
|
isHost || question.mine ? /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
|
|
2078
|
-
isHost && question.state === "open" && !answering ? /* @__PURE__ */
|
|
2079
|
-
isHost && question.state === "open" ? /* @__PURE__ */
|
|
2080
|
-
isHost && question.state !== "open" ? /* @__PURE__ */
|
|
2081
|
-
question.mine || isHost ? /* @__PURE__ */
|
|
2117
|
+
isHost && question.state === "open" && !answering ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => setAnswering(true), children: "Answer" }) : null,
|
|
2118
|
+
isHost && question.state === "open" ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_dismiss", itemId: question.id }).then(show), children: "Dismiss" }) : null,
|
|
2119
|
+
isHost && question.state !== "open" ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_reopen", itemId: question.id }).then(show), children: "Reopen" }) : null,
|
|
2120
|
+
question.mine || isHost ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "question_delete", itemId: question.id }).then(show), children: "Delete" }) : null
|
|
2082
2121
|
] }) : null
|
|
2083
2122
|
] });
|
|
2084
2123
|
}
|
|
@@ -2095,7 +2134,7 @@ function QaPanel({ onClose }) {
|
|
|
2095
2134
|
(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 ?? "")
|
|
2096
2135
|
);
|
|
2097
2136
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Q&A", onClose, children: [
|
|
2098
|
-
collab?.error != null ? /* @__PURE__ */
|
|
2137
|
+
collab?.error != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
2099
2138
|
/* @__PURE__ */ jsxs2(
|
|
2100
2139
|
"form",
|
|
2101
2140
|
{
|
|
@@ -2111,7 +2150,7 @@ function QaPanel({ onClose }) {
|
|
|
2111
2150
|
},
|
|
2112
2151
|
children: [
|
|
2113
2152
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
|
|
2114
|
-
/* @__PURE__ */
|
|
2153
|
+
/* @__PURE__ */ jsx5(
|
|
2115
2154
|
"input",
|
|
2116
2155
|
{
|
|
2117
2156
|
className: "mx-meet__input",
|
|
@@ -2122,17 +2161,17 @@ function QaPanel({ onClose }) {
|
|
|
2122
2161
|
"aria-label": "Ask the host a question"
|
|
2123
2162
|
}
|
|
2124
2163
|
),
|
|
2125
|
-
/* @__PURE__ */
|
|
2164
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
|
|
2126
2165
|
] }),
|
|
2127
2166
|
allowAnonymous ? /* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
|
|
2128
|
-
/* @__PURE__ */
|
|
2167
|
+
/* @__PURE__ */ jsx5("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
|
|
2129
2168
|
"Ask anonymously"
|
|
2130
2169
|
] }) : null
|
|
2131
2170
|
]
|
|
2132
2171
|
}
|
|
2133
2172
|
),
|
|
2134
|
-
/* @__PURE__ */
|
|
2135
|
-
questions.length > 1 ? /* @__PURE__ */
|
|
2173
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
2174
|
+
questions.length > 1 ? /* @__PURE__ */ jsx5("div", { className: "mx-meet__pills", role: "group", "aria-label": "Order questions", children: ["popular", "recent"].map((value) => /* @__PURE__ */ jsx5(
|
|
2136
2175
|
"button",
|
|
2137
2176
|
{
|
|
2138
2177
|
type: "button",
|
|
@@ -2143,7 +2182,7 @@ function QaPanel({ onClose }) {
|
|
|
2143
2182
|
},
|
|
2144
2183
|
value
|
|
2145
2184
|
)) }) : null,
|
|
2146
|
-
questions.length === 0 ? /* @__PURE__ */
|
|
2185
|
+
questions.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: "No questions yet. Questions are kept with the meeting." }) : /* @__PURE__ */ jsx5("ul", { className: "mx-meet__chat", children: questions.map((question) => /* @__PURE__ */ jsx5(QuestionCard, { question }, question.id)) })
|
|
2147
2186
|
] });
|
|
2148
2187
|
}
|
|
2149
2188
|
var BOARD_W = 1600;
|
|
@@ -2157,7 +2196,7 @@ function strokePath(points) {
|
|
|
2157
2196
|
return `${move} ${rest.map(([x, y]) => `L${(x * BOARD_W).toFixed(1)} ${(y * BOARD_H).toFixed(1)}`).join(" ")}`;
|
|
2158
2197
|
}
|
|
2159
2198
|
function StrokeView({ stroke, onPick }) {
|
|
2160
|
-
return /* @__PURE__ */
|
|
2199
|
+
return /* @__PURE__ */ jsx5(
|
|
2161
2200
|
"path",
|
|
2162
2201
|
{
|
|
2163
2202
|
d: strokePath(stroke.points),
|
|
@@ -2169,7 +2208,7 @@ function StrokeView({ stroke, onPick }) {
|
|
|
2169
2208
|
strokeLinejoin: "round",
|
|
2170
2209
|
onPointerDown: onPick,
|
|
2171
2210
|
style: onPick !== void 0 ? { cursor: "pointer" } : void 0,
|
|
2172
|
-
children: /* @__PURE__ */
|
|
2211
|
+
children: /* @__PURE__ */ jsx5("title", { children: stroke.byName })
|
|
2173
2212
|
}
|
|
2174
2213
|
);
|
|
2175
2214
|
}
|
|
@@ -2214,12 +2253,12 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2214
2253
|
};
|
|
2215
2254
|
return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__whiteboard", "aria-label": "Whiteboard", children: [
|
|
2216
2255
|
/* @__PURE__ */ jsxs2("header", { className: "mx-meet__whiteboard-bar", children: [
|
|
2217
|
-
/* @__PURE__ */
|
|
2218
|
-
/* @__PURE__ */
|
|
2219
|
-
["pen", "Pen", /* @__PURE__ */
|
|
2220
|
-
["highlighter", "Highlighter", /* @__PURE__ */
|
|
2221
|
-
["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */
|
|
2222
|
-
].map(([value, label, icon]) => /* @__PURE__ */
|
|
2256
|
+
/* @__PURE__ */ jsx5("strong", { className: "mx-meet__panel-title", children: "Whiteboard" }),
|
|
2257
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__pills", role: "group", "aria-label": "Tool", children: [
|
|
2258
|
+
["pen", "Pen", /* @__PURE__ */ jsx5(PencilIcon, { width: 16, height: 16 }, "p")],
|
|
2259
|
+
["highlighter", "Highlighter", /* @__PURE__ */ jsx5(HighlighterIcon, { width: 16, height: 16 }, "h")],
|
|
2260
|
+
["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ jsx5(EraserIcon, { width: 16, height: 16 }, "e")]
|
|
2261
|
+
].map(([value, label, icon]) => /* @__PURE__ */ jsx5(
|
|
2223
2262
|
"button",
|
|
2224
2263
|
{
|
|
2225
2264
|
type: "button",
|
|
@@ -2232,7 +2271,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2232
2271
|
},
|
|
2233
2272
|
value
|
|
2234
2273
|
)) }),
|
|
2235
|
-
/* @__PURE__ */
|
|
2274
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ jsx5(
|
|
2236
2275
|
"button",
|
|
2237
2276
|
{
|
|
2238
2277
|
type: "button",
|
|
@@ -2247,7 +2286,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2247
2286
|
},
|
|
2248
2287
|
ink
|
|
2249
2288
|
)) }),
|
|
2250
|
-
/* @__PURE__ */
|
|
2289
|
+
/* @__PURE__ */ jsx5(
|
|
2251
2290
|
ControlButton,
|
|
2252
2291
|
{
|
|
2253
2292
|
label: "Undo my last stroke",
|
|
@@ -2255,14 +2294,14 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2255
2294
|
const last = mine[mine.length - 1];
|
|
2256
2295
|
if (last !== void 0) void act({ action: "stroke_erase", itemId: last.id }).then((r) => r.ok ? void 0 : show(r));
|
|
2257
2296
|
},
|
|
2258
|
-
children: /* @__PURE__ */
|
|
2297
|
+
children: /* @__PURE__ */ jsx5(UndoIcon, { width: 16, height: 16 })
|
|
2259
2298
|
}
|
|
2260
2299
|
),
|
|
2261
|
-
isHost && strokes.length > 0 ? /* @__PURE__ */
|
|
2262
|
-
/* @__PURE__ */
|
|
2263
|
-
/* @__PURE__ */
|
|
2300
|
+
isHost && strokes.length > 0 ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "whiteboard_clear" }).then(show), children: "Clear board" }) : null,
|
|
2301
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__whiteboard-note", children: "Saved with the meeting" }),
|
|
2302
|
+
/* @__PURE__ */ jsx5(ControlButton, { label: "Close whiteboard", onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }) })
|
|
2264
2303
|
] }),
|
|
2265
|
-
/* @__PURE__ */
|
|
2304
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
2266
2305
|
/* @__PURE__ */ jsxs2(
|
|
2267
2306
|
"svg",
|
|
2268
2307
|
{
|
|
@@ -2287,8 +2326,8 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2287
2326
|
onPointerUp: finish,
|
|
2288
2327
|
onPointerCancel: finish,
|
|
2289
2328
|
children: [
|
|
2290
|
-
/* @__PURE__ */
|
|
2291
|
-
strokes.map((stroke) => /* @__PURE__ */
|
|
2329
|
+
/* @__PURE__ */ jsx5("rect", { x: 0, y: 0, width: BOARD_W, height: BOARD_H, className: "mx-meet__board-paper" }),
|
|
2330
|
+
strokes.map((stroke) => /* @__PURE__ */ jsx5(
|
|
2292
2331
|
StrokeView,
|
|
2293
2332
|
{
|
|
2294
2333
|
stroke,
|
|
@@ -2296,8 +2335,8 @@ function WhiteboardPanel({ onClose }) {
|
|
|
2296
2335
|
},
|
|
2297
2336
|
stroke.id
|
|
2298
2337
|
)),
|
|
2299
|
-
pending.map((stroke) => /* @__PURE__ */
|
|
2300
|
-
drawing !== null ? /* @__PURE__ */
|
|
2338
|
+
pending.map((stroke) => /* @__PURE__ */ jsx5(StrokeView, { stroke }, stroke.id)),
|
|
2339
|
+
drawing !== null ? /* @__PURE__ */ jsx5(
|
|
2301
2340
|
StrokeView,
|
|
2302
2341
|
{
|
|
2303
2342
|
stroke: {
|
|
@@ -2354,8 +2393,8 @@ function BreakoutSetup() {
|
|
|
2354
2393
|
const nameOf = (identity) => people.find((p) => p.identity === identity)?.displayName ?? identity;
|
|
2355
2394
|
return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-card", children: [
|
|
2356
2395
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
2357
|
-
/* @__PURE__ */
|
|
2358
|
-
/* @__PURE__ */
|
|
2396
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Rooms" }),
|
|
2397
|
+
/* @__PURE__ */ jsx5(
|
|
2359
2398
|
"input",
|
|
2360
2399
|
{
|
|
2361
2400
|
className: "mx-meet__input",
|
|
@@ -2367,11 +2406,11 @@ function BreakoutSetup() {
|
|
|
2367
2406
|
}
|
|
2368
2407
|
)
|
|
2369
2408
|
] }),
|
|
2370
|
-
/* @__PURE__ */
|
|
2409
|
+
/* @__PURE__ */ jsx5("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
|
|
2371
2410
|
["auto", "Automatically"],
|
|
2372
2411
|
["manual", "Manually"],
|
|
2373
2412
|
["choose", "Let people choose"]
|
|
2374
|
-
].map(([value, label]) => /* @__PURE__ */
|
|
2413
|
+
].map(([value, label]) => /* @__PURE__ */ jsx5(
|
|
2375
2414
|
"button",
|
|
2376
2415
|
{
|
|
2377
2416
|
type: "button",
|
|
@@ -2383,8 +2422,8 @@ function BreakoutSetup() {
|
|
|
2383
2422
|
value
|
|
2384
2423
|
)) }),
|
|
2385
2424
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
2386
|
-
/* @__PURE__ */
|
|
2387
|
-
/* @__PURE__ */
|
|
2425
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
|
|
2426
|
+
/* @__PURE__ */ jsx5(
|
|
2388
2427
|
"input",
|
|
2389
2428
|
{
|
|
2390
2429
|
className: "mx-meet__input",
|
|
@@ -2396,8 +2435,8 @@ function BreakoutSetup() {
|
|
|
2396
2435
|
}
|
|
2397
2436
|
)
|
|
2398
2437
|
] }),
|
|
2399
|
-
mode === "manual" ? people.length === 0 ? /* @__PURE__ */
|
|
2400
|
-
/* @__PURE__ */
|
|
2438
|
+
mode === "manual" ? people.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: "Nobody else is in the meeting yet." }) : /* @__PURE__ */ jsx5("ul", { className: "mx-meet__people", children: people.map((person) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
|
|
2439
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__person-name", children: person.displayName }),
|
|
2401
2440
|
/* @__PURE__ */ jsxs2(
|
|
2402
2441
|
"select",
|
|
2403
2442
|
{
|
|
@@ -2406,7 +2445,7 @@ function BreakoutSetup() {
|
|
|
2406
2445
|
value: manual[person.identity] ?? -1,
|
|
2407
2446
|
onChange: (event) => setManual({ ...manual, [person.identity]: Number(event.target.value) }),
|
|
2408
2447
|
children: [
|
|
2409
|
-
/* @__PURE__ */
|
|
2448
|
+
/* @__PURE__ */ jsx5("option", { value: -1, children: "Main room" }),
|
|
2410
2449
|
Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ jsxs2("option", { value: index, children: [
|
|
2411
2450
|
"Room ",
|
|
2412
2451
|
index + 1
|
|
@@ -2414,15 +2453,15 @@ function BreakoutSetup() {
|
|
|
2414
2453
|
]
|
|
2415
2454
|
}
|
|
2416
2455
|
)
|
|
2417
|
-
] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */
|
|
2456
|
+
] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ jsx5("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ jsxs2("li", { children: [
|
|
2418
2457
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
2419
2458
|
"Room ",
|
|
2420
2459
|
index + 1
|
|
2421
2460
|
] }),
|
|
2422
2461
|
" ",
|
|
2423
|
-
/* @__PURE__ */
|
|
2424
|
-
] }, index)) }) : /* @__PURE__ */
|
|
2425
|
-
/* @__PURE__ */
|
|
2462
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__panel-note", children: members.length === 0 ? "empty" : members.map(nameOf).join(", ") })
|
|
2463
|
+
] }, index)) }) : /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: "Everyone picks a room from their own screen." }),
|
|
2464
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
2426
2465
|
/* @__PURE__ */ jsxs2(
|
|
2427
2466
|
"button",
|
|
2428
2467
|
{
|
|
@@ -2477,17 +2516,17 @@ function BreakoutRun({ plan }) {
|
|
|
2477
2516
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
2478
2517
|
plan.allowChoose ? " \xB7 people choose their room" : ""
|
|
2479
2518
|
] }),
|
|
2480
|
-
/* @__PURE__ */
|
|
2519
|
+
/* @__PURE__ */ jsx5("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
|
|
2481
2520
|
const here = breakoutRoomId === room.id;
|
|
2482
2521
|
const mayJoin = isHost || plan.allowChoose || mine?.id === room.id;
|
|
2483
2522
|
return /* @__PURE__ */ jsxs2("li", { className: here ? "mx-meet__breakout-room mx-meet__breakout-room--here" : "mx-meet__breakout-room", children: [
|
|
2484
2523
|
/* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-head", children: [
|
|
2485
|
-
/* @__PURE__ */
|
|
2486
|
-
here ? /* @__PURE__ */
|
|
2524
|
+
/* @__PURE__ */ jsx5("strong", { children: room.name }),
|
|
2525
|
+
here ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-state", children: "You are here" }) : mayJoin ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(room.id), children: "Join" }) : null
|
|
2487
2526
|
] }),
|
|
2488
|
-
/* @__PURE__ */
|
|
2489
|
-
isHost && room.identities.length > 0 ? /* @__PURE__ */
|
|
2490
|
-
/* @__PURE__ */
|
|
2527
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__panel-note", children: room.identities.length === 0 ? "Nobody assigned" : room.identities.map(nameOf).join(", ") }),
|
|
2528
|
+
isHost && room.identities.length > 0 ? /* @__PURE__ */ jsx5("ul", { className: "mx-meet__people", children: room.identities.map((identity) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
|
|
2529
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__person-name", children: nameOf(identity) }),
|
|
2491
2530
|
/* @__PURE__ */ jsxs2(
|
|
2492
2531
|
"select",
|
|
2493
2532
|
{
|
|
@@ -2500,15 +2539,15 @@ function BreakoutRun({ plan }) {
|
|
|
2500
2539
|
roomId: event.target.value === "" ? null : event.target.value
|
|
2501
2540
|
}).then(show),
|
|
2502
2541
|
children: [
|
|
2503
|
-
/* @__PURE__ */
|
|
2504
|
-
plan.rooms.map((option) => /* @__PURE__ */
|
|
2542
|
+
/* @__PURE__ */ jsx5("option", { value: "", children: "Main room" }),
|
|
2543
|
+
plan.rooms.map((option) => /* @__PURE__ */ jsx5("option", { value: option.id, children: option.name }, option.id))
|
|
2505
2544
|
]
|
|
2506
2545
|
}
|
|
2507
2546
|
)
|
|
2508
2547
|
] }, identity)) }) : null
|
|
2509
2548
|
] }, room.id);
|
|
2510
2549
|
}) }),
|
|
2511
|
-
breakoutRoomId !== null ? /* @__PURE__ */
|
|
2550
|
+
breakoutRoomId !== null ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
|
|
2512
2551
|
isHost ? /* @__PURE__ */ jsxs2(
|
|
2513
2552
|
"form",
|
|
2514
2553
|
{
|
|
@@ -2523,7 +2562,7 @@ function BreakoutRun({ plan }) {
|
|
|
2523
2562
|
});
|
|
2524
2563
|
},
|
|
2525
2564
|
children: [
|
|
2526
|
-
/* @__PURE__ */
|
|
2565
|
+
/* @__PURE__ */ jsx5(
|
|
2527
2566
|
"input",
|
|
2528
2567
|
{
|
|
2529
2568
|
className: "mx-meet__input",
|
|
@@ -2534,12 +2573,12 @@ function BreakoutRun({ plan }) {
|
|
|
2534
2573
|
"aria-label": "Message every room"
|
|
2535
2574
|
}
|
|
2536
2575
|
),
|
|
2537
|
-
/* @__PURE__ */
|
|
2576
|
+
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
|
|
2538
2577
|
]
|
|
2539
2578
|
}
|
|
2540
2579
|
) : null,
|
|
2541
|
-
/* @__PURE__ */
|
|
2542
|
-
isHost ? /* @__PURE__ */
|
|
2580
|
+
/* @__PURE__ */ jsx5(Notice, { notice }),
|
|
2581
|
+
isHost ? /* @__PURE__ */ jsx5(
|
|
2543
2582
|
"button",
|
|
2544
2583
|
{
|
|
2545
2584
|
type: "button",
|
|
@@ -2554,8 +2593,8 @@ function BreakoutsPanel({ onClose }) {
|
|
|
2554
2593
|
const { collab, isHost } = useCollab();
|
|
2555
2594
|
const plan = collab?.breakout?.state === "open" ? collab.breakout : null;
|
|
2556
2595
|
return /* @__PURE__ */ jsxs2(PanelShell, { title: "Breakout rooms", onClose, children: [
|
|
2557
|
-
collab?.error != null ? /* @__PURE__ */
|
|
2558
|
-
plan !== null ? /* @__PURE__ */
|
|
2596
|
+
collab?.error != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
|
|
2597
|
+
plan !== null ? /* @__PURE__ */ jsx5(BreakoutRun, { plan }) : isHost ? /* @__PURE__ */ jsx5(BreakoutSetup, {}) : /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: "Breakout rooms are closed." })
|
|
2559
2598
|
] });
|
|
2560
2599
|
}
|
|
2561
2600
|
function BreakoutBanner() {
|
|
@@ -2590,16 +2629,16 @@ function BreakoutBanner() {
|
|
|
2590
2629
|
const room = open?.rooms.find((r) => r.id === breakoutRoomId) ?? null;
|
|
2591
2630
|
if (open === null && failure === null) return null;
|
|
2592
2631
|
return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__breakout-banner", role: "status", children: [
|
|
2593
|
-
failure !== null ? /* @__PURE__ */
|
|
2632
|
+
failure !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-error", children: failure }) : null,
|
|
2594
2633
|
room !== null ? /* @__PURE__ */ jsxs2("span", { children: [
|
|
2595
|
-
/* @__PURE__ */
|
|
2634
|
+
/* @__PURE__ */ jsx5("strong", { children: room.name }),
|
|
2596
2635
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
2597
|
-
/* @__PURE__ */
|
|
2636
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
|
|
2598
2637
|
] }) : assigned !== null ? /* @__PURE__ */ jsxs2("span", { children: [
|
|
2599
2638
|
"You are assigned to ",
|
|
2600
|
-
/* @__PURE__ */
|
|
2639
|
+
/* @__PURE__ */ jsx5("strong", { children: assigned.name }),
|
|
2601
2640
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
2602
|
-
/* @__PURE__ */
|
|
2641
|
+
/* @__PURE__ */ jsx5(
|
|
2603
2642
|
"button",
|
|
2604
2643
|
{
|
|
2605
2644
|
type: "button",
|
|
@@ -2611,7 +2650,7 @@ function BreakoutBanner() {
|
|
|
2611
2650
|
children: "Join"
|
|
2612
2651
|
}
|
|
2613
2652
|
)
|
|
2614
|
-
] }) : open?.allowChoose ? /* @__PURE__ */
|
|
2653
|
+
] }) : open?.allowChoose ? /* @__PURE__ */ jsx5("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
|
|
2615
2654
|
showBroadcast ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__breakout-broadcast", children: [
|
|
2616
2655
|
/* @__PURE__ */ jsxs2("strong", { children: [
|
|
2617
2656
|
broadcast.by,
|
|
@@ -2619,7 +2658,7 @@ function BreakoutBanner() {
|
|
|
2619
2658
|
] }),
|
|
2620
2659
|
" ",
|
|
2621
2660
|
broadcast.text,
|
|
2622
|
-
/* @__PURE__ */
|
|
2661
|
+
/* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
|
|
2623
2662
|
] }) : null
|
|
2624
2663
|
] });
|
|
2625
2664
|
}
|
|
@@ -2635,7 +2674,7 @@ function CaptionLanguageSettings() {
|
|
|
2635
2674
|
const choices = CAPTION_LANGUAGES.some((l) => l.tag === preferred) ? CAPTION_LANGUAGES : [{ tag: preferred, name: preferred }, ...CAPTION_LANGUAGES];
|
|
2636
2675
|
return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__section", "aria-label": "Captions", children: [
|
|
2637
2676
|
/* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
|
|
2638
|
-
/* @__PURE__ */
|
|
2677
|
+
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
|
|
2639
2678
|
/* @__PURE__ */ jsxs2(
|
|
2640
2679
|
"select",
|
|
2641
2680
|
{
|
|
@@ -2646,29 +2685,29 @@ function CaptionLanguageSettings() {
|
|
|
2646
2685
|
setCaptionLanguage(host.store, next);
|
|
2647
2686
|
},
|
|
2648
2687
|
children: [
|
|
2649
|
-
/* @__PURE__ */
|
|
2688
|
+
/* @__PURE__ */ jsx5("option", { value: "", children: "Off \u2014 as spoken" }),
|
|
2650
2689
|
current === "" ? /* @__PURE__ */ jsxs2("option", { value: preferred, children: [
|
|
2651
2690
|
choices.find((c) => c.tag === preferred)?.name ?? preferred,
|
|
2652
2691
|
" (yours)"
|
|
2653
2692
|
] }) : null,
|
|
2654
|
-
choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */
|
|
2693
|
+
choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ jsx5("option", { value: choice.tag, children: choice.name }, choice.tag))
|
|
2655
2694
|
]
|
|
2656
2695
|
}
|
|
2657
2696
|
)
|
|
2658
2697
|
] }),
|
|
2659
|
-
collab?.captionTranslationError != null ? /* @__PURE__ */
|
|
2698
|
+
collab?.captionTranslationError != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
|
|
2660
2699
|
] });
|
|
2661
2700
|
}
|
|
2662
2701
|
|
|
2663
2702
|
// src/skins/meet/components.tsx
|
|
2664
|
-
import { Fragment, jsx as
|
|
2703
|
+
import { Fragment, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
2665
2704
|
function InertNotice({ what }) {
|
|
2666
2705
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__empty", role: "status", children: [
|
|
2667
2706
|
/* @__PURE__ */ jsxs3("p", { className: "mx-meet__empty-title", children: [
|
|
2668
2707
|
what,
|
|
2669
2708
|
" is not ready yet"
|
|
2670
2709
|
] }),
|
|
2671
|
-
/* @__PURE__ */
|
|
2710
|
+
/* @__PURE__ */ jsx6("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." })
|
|
2672
2711
|
] });
|
|
2673
2712
|
}
|
|
2674
2713
|
function Avatar({
|
|
@@ -2678,7 +2717,7 @@ function Avatar({
|
|
|
2678
2717
|
}) {
|
|
2679
2718
|
const tint = avatarPaletteIndex(name);
|
|
2680
2719
|
if (url != null && url.length > 0) {
|
|
2681
|
-
return /* @__PURE__ */
|
|
2720
|
+
return /* @__PURE__ */ jsx6(
|
|
2682
2721
|
"img",
|
|
2683
2722
|
{
|
|
2684
2723
|
className: "mx-meet__avatar",
|
|
@@ -2690,7 +2729,7 @@ function Avatar({
|
|
|
2690
2729
|
}
|
|
2691
2730
|
);
|
|
2692
2731
|
}
|
|
2693
|
-
return /* @__PURE__ */
|
|
2732
|
+
return /* @__PURE__ */ jsx6(
|
|
2694
2733
|
"span",
|
|
2695
2734
|
{
|
|
2696
2735
|
className: "mx-meet__avatar mx-meet__avatar--initials",
|
|
@@ -2712,7 +2751,7 @@ function ControlButton({
|
|
|
2712
2751
|
onClick,
|
|
2713
2752
|
children
|
|
2714
2753
|
}) {
|
|
2715
|
-
return /* @__PURE__ */
|
|
2754
|
+
return /* @__PURE__ */ jsx6(
|
|
2716
2755
|
"button",
|
|
2717
2756
|
{
|
|
2718
2757
|
type: "button",
|
|
@@ -2738,7 +2777,7 @@ function RecordingIndicator() {
|
|
|
2738
2777
|
role: "status",
|
|
2739
2778
|
"aria-live": "polite",
|
|
2740
2779
|
children: [
|
|
2741
|
-
/* @__PURE__ */
|
|
2780
|
+
/* @__PURE__ */ jsx6(RecordIcon, { width: 10, height: 10 }),
|
|
2742
2781
|
label
|
|
2743
2782
|
]
|
|
2744
2783
|
}
|
|
@@ -2746,15 +2785,16 @@ function RecordingIndicator() {
|
|
|
2746
2785
|
}
|
|
2747
2786
|
function ConnectionDot({ quality }) {
|
|
2748
2787
|
if (quality === "excellent" || quality === "good" || quality === "unknown") return null;
|
|
2749
|
-
return /* @__PURE__ */
|
|
2788
|
+
return /* @__PURE__ */ jsx6("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ jsx6(WifiLowIcon, { width: 14, height: 14 }) });
|
|
2750
2789
|
}
|
|
2751
2790
|
function RoleBadge({
|
|
2752
2791
|
role,
|
|
2753
2792
|
standing
|
|
2754
2793
|
}) {
|
|
2755
|
-
if (role === "host") return /* @__PURE__ */
|
|
2756
|
-
if (role === "cohost") return /* @__PURE__ */
|
|
2757
|
-
if (
|
|
2794
|
+
if (role === "host") return /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Host" });
|
|
2795
|
+
if (role === "cohost") return /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Co-host" });
|
|
2796
|
+
if (isObserverRole(role)) return /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", "data-meet-observing": "", children: "Observing" });
|
|
2797
|
+
if (isLinkFollower(standing)) return /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" });
|
|
2758
2798
|
return null;
|
|
2759
2799
|
}
|
|
2760
2800
|
function ParticipantTile({
|
|
@@ -2784,7 +2824,7 @@ function ParticipantTile({
|
|
|
2784
2824
|
"data-identity": participant.identity,
|
|
2785
2825
|
...participantAttributes(participant),
|
|
2786
2826
|
children: [
|
|
2787
|
-
showVideo ? /* @__PURE__ */
|
|
2827
|
+
showVideo ? /* @__PURE__ */ jsx6(
|
|
2788
2828
|
"video",
|
|
2789
2829
|
{
|
|
2790
2830
|
ref: videoRef,
|
|
@@ -2793,43 +2833,43 @@ function ParticipantTile({
|
|
|
2793
2833
|
playsInline: true,
|
|
2794
2834
|
muted: participant.isLocal
|
|
2795
2835
|
}
|
|
2796
|
-
) : /* @__PURE__ */
|
|
2836
|
+
) : /* @__PURE__ */ jsx6("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx6(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
|
|
2797
2837
|
participant.handRaised ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-hand", title: `Hand raised \xB7 ${ordinal(handPosition)} in line`, children: [
|
|
2798
|
-
/* @__PURE__ */
|
|
2838
|
+
/* @__PURE__ */ jsx6(HandIcon, { width: 14, height: 14 }),
|
|
2799
2839
|
handPosition > 0 ? handPosition : null
|
|
2800
2840
|
] }) : null,
|
|
2801
2841
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__tile-bar", children: [
|
|
2802
2842
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-name", children: [
|
|
2803
|
-
spotlit ? /* @__PURE__ */
|
|
2843
|
+
spotlit ? /* @__PURE__ */ jsx6("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ jsx6(SpotlightIcon, { width: 12, height: 12 }) }) : null,
|
|
2804
2844
|
participant.displayName,
|
|
2805
2845
|
participant.isLocal ? " (you)" : "",
|
|
2806
|
-
participant.isAgent ? /* @__PURE__ */
|
|
2807
|
-
/* @__PURE__ */
|
|
2846
|
+
participant.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "AI" }) : null,
|
|
2847
|
+
/* @__PURE__ */ jsx6(RoleBadge, { role: participant.role, standing: participant.standing })
|
|
2808
2848
|
] }),
|
|
2809
|
-
!participant.micEnabled ? /* @__PURE__ */
|
|
2810
|
-
/* @__PURE__ */
|
|
2849
|
+
!participant.micEnabled ? /* @__PURE__ */ jsx6(MicOffIcon, { width: 14, height: 14 }) : null,
|
|
2850
|
+
/* @__PURE__ */ jsx6(QualityBars, { quality: participant.quality })
|
|
2811
2851
|
] }),
|
|
2812
2852
|
/* @__PURE__ */ jsxs3("div", { className: menu ? "mx-meet__tile-actions mx-meet__tile-actions--open" : "mx-meet__tile-actions", children: [
|
|
2813
|
-
/* @__PURE__ */
|
|
2853
|
+
/* @__PURE__ */ jsx6(
|
|
2814
2854
|
ControlButton,
|
|
2815
2855
|
{
|
|
2816
2856
|
label: pinnedHere ? "Unpin" : `Pin ${participant.displayName} for me`,
|
|
2817
2857
|
active: pinnedHere,
|
|
2818
2858
|
onClick: () => host?.engine.pin(pinnedHere ? null : participant.identity),
|
|
2819
|
-
children: /* @__PURE__ */
|
|
2859
|
+
children: /* @__PURE__ */ jsx6(PinIcon, { width: 16, height: 16 })
|
|
2820
2860
|
}
|
|
2821
2861
|
),
|
|
2822
2862
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
2823
|
-
/* @__PURE__ */
|
|
2863
|
+
/* @__PURE__ */ jsx6(
|
|
2824
2864
|
ControlButton,
|
|
2825
2865
|
{
|
|
2826
2866
|
label: `More for ${participant.displayName}`,
|
|
2827
2867
|
active: menu,
|
|
2828
2868
|
onClick: () => setMenu(!menu),
|
|
2829
|
-
children: /* @__PURE__ */
|
|
2869
|
+
children: /* @__PURE__ */ jsx6(MoreIcon, { width: 16, height: 16 })
|
|
2830
2870
|
}
|
|
2831
2871
|
),
|
|
2832
|
-
menu ? /* @__PURE__ */
|
|
2872
|
+
menu ? /* @__PURE__ */ jsx6(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
|
|
2833
2873
|
] })
|
|
2834
2874
|
] })
|
|
2835
2875
|
]
|
|
@@ -2845,25 +2885,25 @@ function QualityBars({ quality }) {
|
|
|
2845
2885
|
if (quality === "unknown") return null;
|
|
2846
2886
|
const bars = quality === "excellent" ? 3 : quality === "good" ? 2 : quality === "poor" ? 1 : 0;
|
|
2847
2887
|
const label = quality === "lost" ? "Connection lost" : quality === "poor" ? "Poor connection" : `Connection ${quality}`;
|
|
2848
|
-
return /* @__PURE__ */
|
|
2888
|
+
return /* @__PURE__ */ jsx6("span", { className: `mx-meet__signal mx-meet__signal--${quality}`, title: label, "aria-label": label, role: "img", children: /* @__PURE__ */ jsx6(SignalIcon, { bars, width: 14, height: 14 }) });
|
|
2849
2889
|
}
|
|
2850
2890
|
function Stage({ pageSize }) {
|
|
2851
2891
|
const stage = useStage(pageSize);
|
|
2852
2892
|
const columns = gridColumns(stage.tiles.length);
|
|
2853
2893
|
if (stage.feature === null && stage.tiles.length === 0) {
|
|
2854
2894
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__stage mx-meet__stage--empty", children: [
|
|
2855
|
-
/* @__PURE__ */
|
|
2856
|
-
/* @__PURE__ */
|
|
2895
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-title", children: "Waiting for others to join" }),
|
|
2896
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: "Share the meeting link and people can join from anywhere \u2014 no account needed." })
|
|
2857
2897
|
] });
|
|
2858
2898
|
}
|
|
2859
2899
|
return /* @__PURE__ */ jsxs3("div", { className: `mx-meet__stage${stage.feature !== null ? " mx-meet__stage--speaker" : ""}`, children: [
|
|
2860
|
-
stage.feature !== null ? /* @__PURE__ */
|
|
2861
|
-
/* @__PURE__ */
|
|
2900
|
+
stage.feature !== null ? /* @__PURE__ */ jsx6(ParticipantTile, { participant: stage.feature, featured: true }) : null,
|
|
2901
|
+
/* @__PURE__ */ jsx6(
|
|
2862
2902
|
"div",
|
|
2863
2903
|
{
|
|
2864
2904
|
className: "mx-meet__grid",
|
|
2865
2905
|
style: { "--mx-meet-columns": columns },
|
|
2866
|
-
children: stage.tiles.map((participant) => /* @__PURE__ */
|
|
2906
|
+
children: stage.tiles.map((participant) => /* @__PURE__ */ jsx6(ParticipantTile, { participant }, participant.identity))
|
|
2867
2907
|
}
|
|
2868
2908
|
),
|
|
2869
2909
|
stage.overflow > 0 ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__overflow", children: [
|
|
@@ -2889,6 +2929,13 @@ function ControlBar({ onLeave }) {
|
|
|
2889
2929
|
const micUnavailable = useLocalMedia().microphone.unavailable;
|
|
2890
2930
|
const unread = useUnreadChat(panel === "chat");
|
|
2891
2931
|
const [whiteboard, setWhiteboard] = useState4(false);
|
|
2932
|
+
const app = useMeetAppPanel();
|
|
2933
|
+
const appOpened = useRef6(false);
|
|
2934
|
+
useEffect6(() => {
|
|
2935
|
+
if (app === null || appOpened.current) return;
|
|
2936
|
+
appOpened.current = true;
|
|
2937
|
+
setPanel("app");
|
|
2938
|
+
}, [app]);
|
|
2892
2939
|
const toggle = (next) => setPanel(panel === next ? "none" : next);
|
|
2893
2940
|
const openActivity = (activity) => {
|
|
2894
2941
|
if (activity === "whiteboard") setWhiteboard(true);
|
|
@@ -2916,10 +2963,10 @@ function ControlBar({ onLeave }) {
|
|
|
2916
2963
|
});
|
|
2917
2964
|
const hasSpotlight = snapshot?.spotlight !== null && snapshot?.spotlight !== void 0;
|
|
2918
2965
|
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
2919
|
-
/* @__PURE__ */
|
|
2920
|
-
shortcuts ? /* @__PURE__ */
|
|
2921
|
-
panel === "chat" ? /* @__PURE__ */
|
|
2922
|
-
panel === "people" ? /* @__PURE__ */
|
|
2966
|
+
/* @__PURE__ */ jsx6(MeetingOverlays, {}),
|
|
2967
|
+
shortcuts ? /* @__PURE__ */ jsx6(ShortcutsSheet, { onClose: () => setShortcuts(false) }) : null,
|
|
2968
|
+
panel === "chat" ? /* @__PURE__ */ jsx6(ChatPanel, { onClose: () => setPanel("none"), to: chatTo, onTo: setChatTo }) : null,
|
|
2969
|
+
panel === "people" ? /* @__PURE__ */ jsx6(
|
|
2923
2970
|
PeoplePanel,
|
|
2924
2971
|
{
|
|
2925
2972
|
onClose: () => setPanel("none"),
|
|
@@ -2929,53 +2976,61 @@ function ControlBar({ onLeave }) {
|
|
|
2929
2976
|
}
|
|
2930
2977
|
}
|
|
2931
2978
|
) : null,
|
|
2932
|
-
panel === "ai" ? /* @__PURE__ */
|
|
2933
|
-
panel === "settings" ? /* @__PURE__ */
|
|
2934
|
-
panel === "polls" ? /* @__PURE__ */
|
|
2935
|
-
panel === "qa" ? /* @__PURE__ */
|
|
2936
|
-
panel === "breakouts" ? /* @__PURE__ */
|
|
2937
|
-
whiteboard ? /* @__PURE__ */
|
|
2938
|
-
/* @__PURE__ */
|
|
2939
|
-
|
|
2979
|
+
panel === "ai" ? /* @__PURE__ */ jsx6(AiPanel, { onClose: () => setPanel("none") }) : null,
|
|
2980
|
+
panel === "settings" ? /* @__PURE__ */ jsx6(SettingsPanel, { onClose: () => setPanel("none") }) : null,
|
|
2981
|
+
panel === "polls" ? /* @__PURE__ */ jsx6(PollsPanel, { onClose: () => setPanel("none") }) : null,
|
|
2982
|
+
panel === "qa" ? /* @__PURE__ */ jsx6(QaPanel, { onClose: () => setPanel("none") }) : null,
|
|
2983
|
+
panel === "breakouts" ? /* @__PURE__ */ jsx6(BreakoutsPanel, { onClose: () => setPanel("none") }) : null,
|
|
2984
|
+
whiteboard ? /* @__PURE__ */ jsx6(WhiteboardPanel, { onClose: () => setWhiteboard(false) }) : null,
|
|
2985
|
+
panel === "app" && app !== null ? /* @__PURE__ */ jsx6(PanelShell, { title: app.title, onClose: () => setPanel("none"), children: /* @__PURE__ */ jsx6("div", { className: "mx-meet__app-panel", "data-meet-app-panel": app.panel.key, children: /* @__PURE__ */ jsx6(
|
|
2986
|
+
app.Component,
|
|
2987
|
+
{
|
|
2988
|
+
recordId: app.panel.recordId,
|
|
2989
|
+
organizationId: app.organizationId,
|
|
2990
|
+
panelKey: app.panel.key
|
|
2991
|
+
}
|
|
2992
|
+
) }) }) : null,
|
|
2993
|
+
/* @__PURE__ */ jsx6(BreakoutBanner, {}),
|
|
2994
|
+
controls.notice !== null && panel !== "people" ? /* @__PURE__ */ jsx6(Toast, { text: controls.notice.text, failed: controls.notice.failed, onDone: controls.clearNotice }) : null,
|
|
2940
2995
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__controls", children: [
|
|
2941
|
-
/* @__PURE__ */
|
|
2996
|
+
/* @__PURE__ */ jsx6(
|
|
2942
2997
|
ControlButton,
|
|
2943
2998
|
{
|
|
2944
2999
|
label: micUnavailable !== null ? `Unmute \u2014 ${micUnavailable.remedy}` : room.local?.micEnabled === true ? "Mute (\u2318D)" : "Unmute (\u2318D)",
|
|
2945
3000
|
active: room.local?.micEnabled === true,
|
|
2946
3001
|
onClick: () => void room.toggleMicrophone(),
|
|
2947
|
-
children: room.local?.micEnabled === true ? /* @__PURE__ */
|
|
3002
|
+
children: room.local?.micEnabled === true ? /* @__PURE__ */ jsx6(MicIcon, {}) : /* @__PURE__ */ jsx6(MicOffIcon, {})
|
|
2948
3003
|
}
|
|
2949
3004
|
),
|
|
2950
|
-
/* @__PURE__ */
|
|
3005
|
+
/* @__PURE__ */ jsx6(
|
|
2951
3006
|
ControlButton,
|
|
2952
3007
|
{
|
|
2953
3008
|
label: room.local?.cameraEnabled === true ? "Stop video (\u2318E)" : "Start video (\u2318E)",
|
|
2954
3009
|
active: room.local?.cameraEnabled === true,
|
|
2955
3010
|
onClick: () => void room.toggleCamera(),
|
|
2956
|
-
children: room.local?.cameraEnabled === true ? /* @__PURE__ */
|
|
3011
|
+
children: room.local?.cameraEnabled === true ? /* @__PURE__ */ jsx6(CameraIcon, {}) : /* @__PURE__ */ jsx6(CameraOffIcon, {})
|
|
2957
3012
|
}
|
|
2958
3013
|
),
|
|
2959
|
-
room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */
|
|
3014
|
+
room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ jsx6(
|
|
2960
3015
|
ControlButton,
|
|
2961
3016
|
{
|
|
2962
3017
|
label: room.local?.screenSharing === true ? "Stop sharing" : "Share screen",
|
|
2963
3018
|
active: room.local?.screenSharing === true,
|
|
2964
3019
|
onClick: () => void room.toggleScreenShare(),
|
|
2965
|
-
children: /* @__PURE__ */
|
|
3020
|
+
children: /* @__PURE__ */ jsx6(ScreenShareIcon, {})
|
|
2966
3021
|
}
|
|
2967
3022
|
) : null,
|
|
2968
3023
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
2969
|
-
/* @__PURE__ */
|
|
3024
|
+
/* @__PURE__ */ jsx6(
|
|
2970
3025
|
ControlButton,
|
|
2971
3026
|
{
|
|
2972
3027
|
label: "Send a reaction",
|
|
2973
3028
|
active: popover === "reactions",
|
|
2974
3029
|
onClick: () => setPopover(popover === "reactions" ? "none" : "reactions"),
|
|
2975
|
-
children: /* @__PURE__ */
|
|
3030
|
+
children: /* @__PURE__ */ jsx6(SmileIcon, {})
|
|
2976
3031
|
}
|
|
2977
3032
|
),
|
|
2978
|
-
popover === "reactions" ? /* @__PURE__ */
|
|
3033
|
+
popover === "reactions" ? /* @__PURE__ */ jsx6(Popover, { label: "Reactions", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsx6("div", { className: "mx-meet__emoji-bar", children: MEET_REACTIONS.map((emoji) => /* @__PURE__ */ jsx6(
|
|
2979
3034
|
"button",
|
|
2980
3035
|
{
|
|
2981
3036
|
type: "button",
|
|
@@ -2987,18 +3042,19 @@ function ControlBar({ onLeave }) {
|
|
|
2987
3042
|
emoji
|
|
2988
3043
|
)) }) }) : null
|
|
2989
3044
|
] }),
|
|
2990
|
-
/* @__PURE__ */
|
|
3045
|
+
/* @__PURE__ */ jsx6(
|
|
2991
3046
|
ControlButton,
|
|
2992
3047
|
{
|
|
2993
3048
|
label: room.local?.handRaised === true ? "Lower hand (\u2318\u2325H)" : "Raise hand (\u2318\u2325H)",
|
|
2994
3049
|
active: room.local?.handRaised === true,
|
|
2995
3050
|
onClick: () => void room.toggleHand(),
|
|
2996
|
-
children: /* @__PURE__ */
|
|
3051
|
+
children: /* @__PURE__ */ jsx6(HandIcon, {})
|
|
2997
3052
|
}
|
|
2998
3053
|
),
|
|
3054
|
+
app !== null ? /* @__PURE__ */ jsx6(ControlButton, { label: app.title, active: panel === "app", onClick: () => toggle("app"), children: /* @__PURE__ */ jsx6(FlagIcon, {}) }) : null,
|
|
2999
3055
|
/* @__PURE__ */ jsxs3(ControlButton, { label: "Chat (\u2318\u2325C)", active: panel === "chat", onClick: () => toggle("chat"), children: [
|
|
3000
|
-
/* @__PURE__ */
|
|
3001
|
-
unread > 0 ? /* @__PURE__ */
|
|
3056
|
+
/* @__PURE__ */ jsx6(ChatIcon, {}),
|
|
3057
|
+
unread > 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
3002
3058
|
] }),
|
|
3003
3059
|
/* @__PURE__ */ jsxs3(
|
|
3004
3060
|
ControlButton,
|
|
@@ -3007,32 +3063,32 @@ function ControlBar({ onLeave }) {
|
|
|
3007
3063
|
active: panel === "people",
|
|
3008
3064
|
onClick: () => toggle("people"),
|
|
3009
3065
|
children: [
|
|
3010
|
-
/* @__PURE__ */
|
|
3011
|
-
lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */
|
|
3066
|
+
/* @__PURE__ */ jsx6(PeopleIcon, {}),
|
|
3067
|
+
lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
|
|
3012
3068
|
]
|
|
3013
3069
|
}
|
|
3014
3070
|
),
|
|
3015
|
-
/* @__PURE__ */
|
|
3071
|
+
/* @__PURE__ */ jsx6(
|
|
3016
3072
|
ActivitiesControl,
|
|
3017
3073
|
{
|
|
3018
3074
|
active: whiteboard ? "whiteboard" : panel === "polls" || panel === "qa" || panel === "breakouts" ? panel : null,
|
|
3019
3075
|
onOpen: openActivity
|
|
3020
3076
|
}
|
|
3021
3077
|
),
|
|
3022
|
-
/* @__PURE__ */
|
|
3023
|
-
recording.canStart ? /* @__PURE__ */
|
|
3024
|
-
recording.canStop ? /* @__PURE__ */
|
|
3078
|
+
/* @__PURE__ */ jsx6(AiControl, { active: panel === "ai", onToggle: () => toggle("ai") }),
|
|
3079
|
+
recording.canStart ? /* @__PURE__ */ jsx6(ControlButton, { label: "Start recording", onClick: () => void recording.start(), children: /* @__PURE__ */ jsx6(RecordIcon, {}) }) : null,
|
|
3080
|
+
recording.canStop ? /* @__PURE__ */ jsx6(ControlButton, { label: "Stop recording", active: true, onClick: () => void recording.stop(), children: /* @__PURE__ */ jsx6(RecordIcon, {}) }) : null,
|
|
3025
3081
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
3026
|
-
/* @__PURE__ */
|
|
3082
|
+
/* @__PURE__ */ jsx6(
|
|
3027
3083
|
ControlButton,
|
|
3028
3084
|
{
|
|
3029
3085
|
label: "More options",
|
|
3030
3086
|
active: popover === "more" || panel === "settings",
|
|
3031
3087
|
onClick: () => setPopover(popover === "more" ? "none" : "more"),
|
|
3032
|
-
children: /* @__PURE__ */
|
|
3088
|
+
children: /* @__PURE__ */ jsx6(MoreIcon, {})
|
|
3033
3089
|
}
|
|
3034
3090
|
),
|
|
3035
|
-
popover === "more" ? /* @__PURE__ */
|
|
3091
|
+
popover === "more" ? /* @__PURE__ */ jsx6(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
|
|
3036
3092
|
/* @__PURE__ */ jsxs3(
|
|
3037
3093
|
MenuItem,
|
|
3038
3094
|
{
|
|
@@ -3041,7 +3097,7 @@ function ControlBar({ onLeave }) {
|
|
|
3041
3097
|
setPanel("settings");
|
|
3042
3098
|
},
|
|
3043
3099
|
children: [
|
|
3044
|
-
/* @__PURE__ */
|
|
3100
|
+
/* @__PURE__ */ jsx6(SettingsIcon, { width: 16, height: 16 }),
|
|
3045
3101
|
" Settings"
|
|
3046
3102
|
]
|
|
3047
3103
|
}
|
|
@@ -3054,13 +3110,13 @@ function ControlBar({ onLeave }) {
|
|
|
3054
3110
|
setShortcuts(true);
|
|
3055
3111
|
},
|
|
3056
3112
|
children: [
|
|
3057
|
-
/* @__PURE__ */
|
|
3113
|
+
/* @__PURE__ */ jsx6(KeyboardIcon, { width: 16, height: 16 }),
|
|
3058
3114
|
" Keyboard shortcuts"
|
|
3059
3115
|
]
|
|
3060
3116
|
}
|
|
3061
3117
|
),
|
|
3062
3118
|
controls.isHost ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
3063
|
-
/* @__PURE__ */
|
|
3119
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__menu-sep", role: "separator" }),
|
|
3064
3120
|
/* @__PURE__ */ jsxs3(
|
|
3065
3121
|
MenuItem,
|
|
3066
3122
|
{
|
|
@@ -3069,7 +3125,7 @@ function ControlBar({ onLeave }) {
|
|
|
3069
3125
|
void controls.run({ action: "mute_all" });
|
|
3070
3126
|
},
|
|
3071
3127
|
children: [
|
|
3072
|
-
/* @__PURE__ */
|
|
3128
|
+
/* @__PURE__ */ jsx6(MicOffIcon, { width: 16, height: 16 }),
|
|
3073
3129
|
" Mute everyone"
|
|
3074
3130
|
]
|
|
3075
3131
|
}
|
|
@@ -3082,7 +3138,7 @@ function ControlBar({ onLeave }) {
|
|
|
3082
3138
|
void controls.run({ action: "ask_all_unmute" });
|
|
3083
3139
|
},
|
|
3084
3140
|
children: [
|
|
3085
|
-
/* @__PURE__ */
|
|
3141
|
+
/* @__PURE__ */ jsx6(MicIcon, { width: 16, height: 16 }),
|
|
3086
3142
|
" Ask everyone to unmute"
|
|
3087
3143
|
]
|
|
3088
3144
|
}
|
|
@@ -3095,7 +3151,7 @@ function ControlBar({ onLeave }) {
|
|
|
3095
3151
|
void controls.run({ action: "lower_all_hands" });
|
|
3096
3152
|
},
|
|
3097
3153
|
children: [
|
|
3098
|
-
/* @__PURE__ */
|
|
3154
|
+
/* @__PURE__ */ jsx6(HandIcon, { width: 16, height: 16 }),
|
|
3099
3155
|
" Lower all hands (",
|
|
3100
3156
|
queue.length,
|
|
3101
3157
|
")"
|
|
@@ -3110,7 +3166,7 @@ function ControlBar({ onLeave }) {
|
|
|
3110
3166
|
void controls.run({ action: "spotlight", identity: null });
|
|
3111
3167
|
},
|
|
3112
3168
|
children: [
|
|
3113
|
-
/* @__PURE__ */
|
|
3169
|
+
/* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
|
|
3114
3170
|
" Remove spotlight"
|
|
3115
3171
|
]
|
|
3116
3172
|
}
|
|
@@ -3118,7 +3174,7 @@ function ControlBar({ onLeave }) {
|
|
|
3118
3174
|
] }) : null
|
|
3119
3175
|
] }) }) : null
|
|
3120
3176
|
] }),
|
|
3121
|
-
/* @__PURE__ */
|
|
3177
|
+
/* @__PURE__ */ jsx6(
|
|
3122
3178
|
ControlButton,
|
|
3123
3179
|
{
|
|
3124
3180
|
label: "Leave",
|
|
@@ -3127,7 +3183,7 @@ function ControlBar({ onLeave }) {
|
|
|
3127
3183
|
void room.leave();
|
|
3128
3184
|
onLeave?.();
|
|
3129
3185
|
},
|
|
3130
|
-
children: /* @__PURE__ */
|
|
3186
|
+
children: /* @__PURE__ */ jsx6(PhoneOffIcon, {})
|
|
3131
3187
|
}
|
|
3132
3188
|
)
|
|
3133
3189
|
] })
|
|
@@ -3223,14 +3279,14 @@ function Popover({
|
|
|
3223
3279
|
window.removeEventListener("pointerdown", onPointer);
|
|
3224
3280
|
};
|
|
3225
3281
|
}, [onClose]);
|
|
3226
|
-
return /* @__PURE__ */
|
|
3282
|
+
return /* @__PURE__ */ jsx6("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
|
|
3227
3283
|
}
|
|
3228
3284
|
function MenuItem({
|
|
3229
3285
|
onSelect,
|
|
3230
3286
|
danger = false,
|
|
3231
3287
|
children
|
|
3232
3288
|
}) {
|
|
3233
|
-
return /* @__PURE__ */
|
|
3289
|
+
return /* @__PURE__ */ jsx6(
|
|
3234
3290
|
"button",
|
|
3235
3291
|
{
|
|
3236
3292
|
type: "button",
|
|
@@ -3247,8 +3303,8 @@ function Toast({ text, failed, onDone }) {
|
|
|
3247
3303
|
return () => clearTimeout(timer);
|
|
3248
3304
|
}, [text, failed, onDone]);
|
|
3249
3305
|
return /* @__PURE__ */ jsxs3("div", { className: failed ? "mx-meet__toast mx-meet__toast--failed" : "mx-meet__toast", role: "status", children: [
|
|
3250
|
-
/* @__PURE__ */
|
|
3251
|
-
/* @__PURE__ */
|
|
3306
|
+
/* @__PURE__ */ jsx6("span", { children: text }),
|
|
3307
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: onDone, children: /* @__PURE__ */ jsx6(CloseIcon, { width: 14, height: 14 }) })
|
|
3252
3308
|
] });
|
|
3253
3309
|
}
|
|
3254
3310
|
function MeetingOverlays() {
|
|
@@ -3256,14 +3312,14 @@ function MeetingOverlays() {
|
|
|
3256
3312
|
const { notice, dismiss } = useModerationNotice();
|
|
3257
3313
|
const room = useRoom();
|
|
3258
3314
|
return /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
3259
|
-
/* @__PURE__ */
|
|
3315
|
+
/* @__PURE__ */ jsx6(ReactionOverlay, { reactions }),
|
|
3260
3316
|
notice !== null && notice.kind !== "removed" ? (
|
|
3261
3317
|
// A host's request ("the host is asking you to unmute"), not an error:
|
|
3262
3318
|
// an assertive status, so it is announced at once without being filed
|
|
3263
3319
|
// as a failure (design-system error-box census).
|
|
3264
3320
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__notice-bar", role: "status", "aria-live": "assertive", children: [
|
|
3265
|
-
/* @__PURE__ */
|
|
3266
|
-
notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */
|
|
3321
|
+
/* @__PURE__ */ jsx6("span", { children: notice.text }),
|
|
3322
|
+
notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ jsx6(
|
|
3267
3323
|
"button",
|
|
3268
3324
|
{
|
|
3269
3325
|
type: "button",
|
|
@@ -3275,7 +3331,7 @@ function MeetingOverlays() {
|
|
|
3275
3331
|
children: "Unmute"
|
|
3276
3332
|
}
|
|
3277
3333
|
) : null,
|
|
3278
|
-
/* @__PURE__ */
|
|
3334
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ jsx6(CloseIcon, { width: 14, height: 14 }) })
|
|
3279
3335
|
] })
|
|
3280
3336
|
) : null
|
|
3281
3337
|
] });
|
|
@@ -3288,7 +3344,7 @@ function ShortcutsSheet({ onClose }) {
|
|
|
3288
3344
|
window.addEventListener("keydown", onKey);
|
|
3289
3345
|
return () => window.removeEventListener("keydown", onKey);
|
|
3290
3346
|
}, [onClose]);
|
|
3291
|
-
return /* @__PURE__ */
|
|
3347
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs3(
|
|
3292
3348
|
"div",
|
|
3293
3349
|
{
|
|
3294
3350
|
className: "mx-meet__sheet",
|
|
@@ -3297,12 +3353,12 @@ function ShortcutsSheet({ onClose }) {
|
|
|
3297
3353
|
onClick: (event) => event.stopPropagation(),
|
|
3298
3354
|
children: [
|
|
3299
3355
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
|
|
3300
|
-
/* @__PURE__ */
|
|
3301
|
-
/* @__PURE__ */
|
|
3356
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__panel-title", children: "Keyboard shortcuts" }),
|
|
3357
|
+
/* @__PURE__ */ jsx6(ControlButton, { label: "Close", onClick: onClose, children: /* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 }) })
|
|
3302
3358
|
] }),
|
|
3303
|
-
/* @__PURE__ */
|
|
3304
|
-
/* @__PURE__ */
|
|
3305
|
-
/* @__PURE__ */
|
|
3359
|
+
/* @__PURE__ */ jsx6("dl", { className: "mx-meet__shortcuts", children: MEET_SHORTCUTS.map((shortcut) => /* @__PURE__ */ jsxs3("div", { className: "mx-meet__shortcut", children: [
|
|
3360
|
+
/* @__PURE__ */ jsx6("dt", { children: shortcut.label }),
|
|
3361
|
+
/* @__PURE__ */ jsx6("dd", { children: /* @__PURE__ */ jsx6("kbd", { className: "mx-meet__kbd", children: shortcut.keys }) })
|
|
3306
3362
|
] }, shortcut.id)) })
|
|
3307
3363
|
]
|
|
3308
3364
|
}
|
|
@@ -3312,7 +3368,7 @@ function AiControl({ active, onToggle }) {
|
|
|
3312
3368
|
const snapshot = useMeetSnapshot();
|
|
3313
3369
|
const meeting = snapshot?.meeting ?? null;
|
|
3314
3370
|
if (meeting === null || !meeting.aiEnabled) return null;
|
|
3315
|
-
return /* @__PURE__ */
|
|
3371
|
+
return /* @__PURE__ */ jsx6(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ jsx6(SparklesIcon, {}) });
|
|
3316
3372
|
}
|
|
3317
3373
|
function PanelShell({
|
|
3318
3374
|
title,
|
|
@@ -3334,10 +3390,10 @@ function PanelShell({
|
|
|
3334
3390
|
}, []);
|
|
3335
3391
|
return /* @__PURE__ */ jsxs3("aside", { ref, className: "mx-meet__panel", "aria-label": title, children: [
|
|
3336
3392
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
|
|
3337
|
-
/* @__PURE__ */
|
|
3338
|
-
/* @__PURE__ */
|
|
3393
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__panel-title", children: title }),
|
|
3394
|
+
/* @__PURE__ */ jsx6(ControlButton, { label: "Close panel", onClick: onClose, children: /* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 }) })
|
|
3339
3395
|
] }),
|
|
3340
|
-
/* @__PURE__ */
|
|
3396
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__panel-body", children })
|
|
3341
3397
|
] });
|
|
3342
3398
|
}
|
|
3343
3399
|
function ChatPanel({
|
|
@@ -3367,9 +3423,9 @@ function ChatPanel({
|
|
|
3367
3423
|
};
|
|
3368
3424
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Chat", onClose, children: [
|
|
3369
3425
|
/* @__PURE__ */ jsxs3("ul", { className: "mx-meet__chat", ref: listRef, children: [
|
|
3370
|
-
snapshot?.chatHistoryError != null ? /* @__PURE__ */
|
|
3371
|
-
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */
|
|
3372
|
-
messages.map((message) => /* @__PURE__ */
|
|
3426
|
+
snapshot?.chatHistoryError != null ? /* @__PURE__ */ jsx6("li", { className: "mx-meet__panel-note", children: snapshot.chatHistoryError }) : null,
|
|
3427
|
+
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ jsx6("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ jsx6("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,
|
|
3428
|
+
messages.map((message) => /* @__PURE__ */ jsx6(ChatLine, { message, local, people }, message.id))
|
|
3373
3429
|
] }),
|
|
3374
3430
|
/* @__PURE__ */ jsxs3(
|
|
3375
3431
|
"form",
|
|
@@ -3392,7 +3448,7 @@ function ChatPanel({
|
|
|
3392
3448
|
value: recipient ?? "",
|
|
3393
3449
|
onChange: (event) => choose(event.target.value === "" ? null : event.target.value),
|
|
3394
3450
|
children: [
|
|
3395
|
-
/* @__PURE__ */
|
|
3451
|
+
/* @__PURE__ */ jsx6("option", { value: "", children: "Everyone" }),
|
|
3396
3452
|
people.map((participant) => /* @__PURE__ */ jsxs3("option", { value: participant.identity, children: [
|
|
3397
3453
|
participant.displayName,
|
|
3398
3454
|
" (private)"
|
|
@@ -3401,7 +3457,7 @@ function ChatPanel({
|
|
|
3401
3457
|
}
|
|
3402
3458
|
) : null,
|
|
3403
3459
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__composer-row", children: [
|
|
3404
|
-
/* @__PURE__ */
|
|
3460
|
+
/* @__PURE__ */ jsx6(
|
|
3405
3461
|
"input",
|
|
3406
3462
|
{
|
|
3407
3463
|
className: "mx-meet__input",
|
|
@@ -3412,7 +3468,7 @@ function ChatPanel({
|
|
|
3412
3468
|
maxLength: 4e3
|
|
3413
3469
|
}
|
|
3414
3470
|
),
|
|
3415
|
-
/* @__PURE__ */
|
|
3471
|
+
/* @__PURE__ */ jsx6("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
|
|
3416
3472
|
] }),
|
|
3417
3473
|
recipientName !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
|
|
3418
3474
|
"Only ",
|
|
@@ -3442,16 +3498,16 @@ function ChatLine({
|
|
|
3442
3498
|
].filter(Boolean).join(" "),
|
|
3443
3499
|
children: [
|
|
3444
3500
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-meta", children: [
|
|
3445
|
-
/* @__PURE__ */
|
|
3501
|
+
/* @__PURE__ */ jsx6("strong", { children: mine ? "You" : message.displayName }),
|
|
3446
3502
|
counterpart !== null ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-private", children: [
|
|
3447
3503
|
"to ",
|
|
3448
3504
|
counterpart,
|
|
3449
3505
|
" \xB7 private"
|
|
3450
3506
|
] }) : null,
|
|
3451
|
-
/* @__PURE__ */
|
|
3507
|
+
/* @__PURE__ */ jsx6("time", { dateTime: message.at, children: clockOf(message.at) })
|
|
3452
3508
|
] }),
|
|
3453
|
-
/* @__PURE__ */
|
|
3454
|
-
message.failed !== void 0 ? /* @__PURE__ */
|
|
3509
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__chat-text", children: message.text }),
|
|
3510
|
+
message.failed !== void 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__chat-failed", children: message.failed }) : privateTo === null && message.saved === false ? /* @__PURE__ */ jsx6("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
|
|
3455
3511
|
]
|
|
3456
3512
|
}
|
|
3457
3513
|
);
|
|
@@ -3467,18 +3523,21 @@ function PeoplePanel({
|
|
|
3467
3523
|
const [menuFor, setMenuFor] = useState4(null);
|
|
3468
3524
|
const myRole = useRole();
|
|
3469
3525
|
const local = snapshot?.localIdentity ?? null;
|
|
3470
|
-
const
|
|
3526
|
+
const observersHidden = snapshot?.grants.observersVisibleTo === "hosts" && !controls.isHost;
|
|
3527
|
+
const everyone = (snapshot?.participants ?? []).filter(
|
|
3528
|
+
(participant) => !observersHidden || !isObserverRole(participant.role) || participant.identity === local
|
|
3529
|
+
);
|
|
3471
3530
|
const needle = query.trim().toLowerCase();
|
|
3472
3531
|
const shown = needle.length === 0 ? everyone : everyone.filter((participant) => participant.displayName.toLowerCase().includes(needle));
|
|
3473
3532
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: `People (${everyone.length})`, onClose, children: [
|
|
3474
|
-
/* @__PURE__ */
|
|
3533
|
+
/* @__PURE__ */ jsx6(LobbyPanel, {}),
|
|
3475
3534
|
queue.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Raised hands", children: [
|
|
3476
3535
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__section-head", children: [
|
|
3477
3536
|
/* @__PURE__ */ jsxs3("h3", { className: "mx-meet__section-title", children: [
|
|
3478
3537
|
"Raised hands \xB7 ",
|
|
3479
3538
|
queue.length
|
|
3480
3539
|
] }),
|
|
3481
|
-
controls.isHost ? /* @__PURE__ */
|
|
3540
|
+
controls.isHost ? /* @__PURE__ */ jsx6(
|
|
3482
3541
|
"button",
|
|
3483
3542
|
{
|
|
3484
3543
|
type: "button",
|
|
@@ -3488,13 +3547,13 @@ function PeoplePanel({
|
|
|
3488
3547
|
}
|
|
3489
3548
|
) : null
|
|
3490
3549
|
] }),
|
|
3491
|
-
/* @__PURE__ */
|
|
3492
|
-
/* @__PURE__ */
|
|
3550
|
+
/* @__PURE__ */ jsx6("ol", { className: "mx-meet__queue", children: queue.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
|
|
3551
|
+
/* @__PURE__ */ jsx6(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 28 }),
|
|
3493
3552
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
3494
3553
|
participant.displayName,
|
|
3495
|
-
participant.identity === local ? /* @__PURE__ */
|
|
3554
|
+
participant.identity === local ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__you", children: " (you)" }) : null
|
|
3496
3555
|
] }),
|
|
3497
|
-
controls.isHost || participant.identity === local ? /* @__PURE__ */
|
|
3556
|
+
controls.isHost || participant.identity === local ? /* @__PURE__ */ jsx6(
|
|
3498
3557
|
"button",
|
|
3499
3558
|
{
|
|
3500
3559
|
type: "button",
|
|
@@ -3507,7 +3566,7 @@ function PeoplePanel({
|
|
|
3507
3566
|
] }) : null,
|
|
3508
3567
|
controls.isHost && everyone.length > 1 ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__bulk", children: [
|
|
3509
3568
|
/* @__PURE__ */ jsxs3("button", { type: "button", className: "mx-meet__chip", onClick: () => void controls.run({ action: "mute_all" }), children: [
|
|
3510
|
-
/* @__PURE__ */
|
|
3569
|
+
/* @__PURE__ */ jsx6(MicOffIcon, { width: 14, height: 14 }),
|
|
3511
3570
|
" Mute all"
|
|
3512
3571
|
] }),
|
|
3513
3572
|
/* @__PURE__ */ jsxs3(
|
|
@@ -3517,15 +3576,15 @@ function PeoplePanel({
|
|
|
3517
3576
|
className: "mx-meet__chip",
|
|
3518
3577
|
onClick: () => void controls.run({ action: "ask_all_unmute" }),
|
|
3519
3578
|
children: [
|
|
3520
|
-
/* @__PURE__ */
|
|
3579
|
+
/* @__PURE__ */ jsx6(MicIcon, { width: 14, height: 14 }),
|
|
3521
3580
|
" Ask all to unmute"
|
|
3522
3581
|
]
|
|
3523
3582
|
}
|
|
3524
3583
|
)
|
|
3525
3584
|
] }) : null,
|
|
3526
3585
|
everyone.length > 4 ? /* @__PURE__ */ jsxs3("label", { className: "mx-meet__search", children: [
|
|
3527
|
-
/* @__PURE__ */
|
|
3528
|
-
/* @__PURE__ */
|
|
3586
|
+
/* @__PURE__ */ jsx6(SearchIcon, { width: 16, height: 16 }),
|
|
3587
|
+
/* @__PURE__ */ jsx6(
|
|
3529
3588
|
"input",
|
|
3530
3589
|
{
|
|
3531
3590
|
className: "mx-meet__input mx-meet__input--bare",
|
|
@@ -3536,37 +3595,37 @@ function PeoplePanel({
|
|
|
3536
3595
|
}
|
|
3537
3596
|
)
|
|
3538
3597
|
] }) : null,
|
|
3539
|
-
controls.notice !== null ? /* @__PURE__ */
|
|
3598
|
+
controls.notice !== null ? /* @__PURE__ */ jsx6("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
|
|
3540
3599
|
/* @__PURE__ */ jsxs3("ul", { className: "mx-meet__people", children: [
|
|
3541
3600
|
shown.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
|
|
3542
|
-
/* @__PURE__ */
|
|
3601
|
+
/* @__PURE__ */ jsx6(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
|
|
3543
3602
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
3544
3603
|
participant.displayName,
|
|
3545
|
-
participant.identity === local ? /* @__PURE__ */
|
|
3546
|
-
/* @__PURE__ */
|
|
3604
|
+
participant.identity === local ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__you", children: " (you)" }) : null,
|
|
3605
|
+
/* @__PURE__ */ jsx6(
|
|
3547
3606
|
RoleBadge,
|
|
3548
3607
|
{
|
|
3549
3608
|
role: participant.identity === local ? myRole : participant.role,
|
|
3550
3609
|
standing: participant.standing
|
|
3551
3610
|
}
|
|
3552
3611
|
),
|
|
3553
|
-
isNoteTaker(participant) ? /* @__PURE__ */
|
|
3554
|
-
snapshot?.spotlight === participant.identity ? /* @__PURE__ */
|
|
3612
|
+
isNoteTaker(participant) ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
|
|
3613
|
+
snapshot?.spotlight === participant.identity ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
|
|
3555
3614
|
] }),
|
|
3556
|
-
participant.handRaised ? /* @__PURE__ */
|
|
3557
|
-
!participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */
|
|
3558
|
-
/* @__PURE__ */
|
|
3615
|
+
participant.handRaised ? /* @__PURE__ */ jsx6(HandIcon, { width: 14, height: 14 }) : null,
|
|
3616
|
+
!participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ jsx6(MicOffIcon, { width: 14, height: 14 }) : null,
|
|
3617
|
+
/* @__PURE__ */ jsx6(QualityBars, { quality: participant.quality }),
|
|
3559
3618
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
|
|
3560
|
-
/* @__PURE__ */
|
|
3619
|
+
/* @__PURE__ */ jsx6(
|
|
3561
3620
|
ControlButton,
|
|
3562
3621
|
{
|
|
3563
3622
|
label: `More for ${participant.displayName}`,
|
|
3564
3623
|
active: menuFor === participant.identity,
|
|
3565
3624
|
onClick: () => setMenuFor(menuFor === participant.identity ? null : participant.identity),
|
|
3566
|
-
children: /* @__PURE__ */
|
|
3625
|
+
children: /* @__PURE__ */ jsx6(MoreIcon, { width: 16, height: 16 })
|
|
3567
3626
|
}
|
|
3568
3627
|
),
|
|
3569
|
-
menuFor === participant.identity ? /* @__PURE__ */
|
|
3628
|
+
menuFor === participant.identity ? /* @__PURE__ */ jsx6(
|
|
3570
3629
|
PersonMenu,
|
|
3571
3630
|
{
|
|
3572
3631
|
participant,
|
|
@@ -3583,7 +3642,7 @@ function PeoplePanel({
|
|
|
3583
3642
|
"\u201D."
|
|
3584
3643
|
] }) : null
|
|
3585
3644
|
] }),
|
|
3586
|
-
snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */
|
|
3645
|
+
snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ jsx6(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
|
|
3587
3646
|
] });
|
|
3588
3647
|
}
|
|
3589
3648
|
function PersonMenu({
|
|
@@ -3610,10 +3669,10 @@ function PersonMenu({
|
|
|
3610
3669
|
else setRefused(true);
|
|
3611
3670
|
});
|
|
3612
3671
|
};
|
|
3613
|
-
const refusal = refused && controls.notice?.failed === true ? /* @__PURE__ */
|
|
3672
|
+
const refusal = refused && controls.notice?.failed === true ? /* @__PURE__ */ jsx6(ErrorBox, { as: "p", className: "mx-meet__error", message: controls.notice.text, operation: "Change this participant", origin: "meet/components", children: controls.notice.text }) : null;
|
|
3614
3673
|
if (mode === "rename" || mode === "report") {
|
|
3615
3674
|
const renaming = mode === "rename";
|
|
3616
|
-
return /* @__PURE__ */
|
|
3675
|
+
return /* @__PURE__ */ jsx6(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ jsxs3(
|
|
3617
3676
|
"form",
|
|
3618
3677
|
{
|
|
3619
3678
|
className: "mx-meet__menu-form",
|
|
@@ -3626,8 +3685,8 @@ function PersonMenu({
|
|
|
3626
3685
|
},
|
|
3627
3686
|
children: [
|
|
3628
3687
|
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
3629
|
-
/* @__PURE__ */
|
|
3630
|
-
renaming ? /* @__PURE__ */
|
|
3688
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__field-label", children: renaming ? "Name shown in this meeting" : `What did ${participant.displayName} do?` }),
|
|
3689
|
+
renaming ? /* @__PURE__ */ jsx6(
|
|
3631
3690
|
"input",
|
|
3632
3691
|
{
|
|
3633
3692
|
className: "mx-meet__input",
|
|
@@ -3636,7 +3695,7 @@ function PersonMenu({
|
|
|
3636
3695
|
value: text,
|
|
3637
3696
|
onChange: (event) => setText(event.target.value)
|
|
3638
3697
|
}
|
|
3639
|
-
) : /* @__PURE__ */
|
|
3698
|
+
) : /* @__PURE__ */ jsx6(
|
|
3640
3699
|
"textarea",
|
|
3641
3700
|
{
|
|
3642
3701
|
className: "mx-meet__input",
|
|
@@ -3650,8 +3709,8 @@ function PersonMenu({
|
|
|
3650
3709
|
] }),
|
|
3651
3710
|
refusal,
|
|
3652
3711
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
|
|
3653
|
-
/* @__PURE__ */
|
|
3654
|
-
/* @__PURE__ */
|
|
3712
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Back" }),
|
|
3713
|
+
/* @__PURE__ */ jsx6("button", { type: "submit", className: "mx-meet__send", disabled: text.trim().length === 0 || controls.busy, children: renaming ? "Rename" : "Report" })
|
|
3655
3714
|
] })
|
|
3656
3715
|
]
|
|
3657
3716
|
}
|
|
@@ -3659,12 +3718,12 @@ function PersonMenu({
|
|
|
3659
3718
|
}
|
|
3660
3719
|
if (mode === "remove" || mode === "transfer") {
|
|
3661
3720
|
const removing = mode === "remove";
|
|
3662
|
-
return /* @__PURE__ */
|
|
3663
|
-
/* @__PURE__ */
|
|
3721
|
+
return /* @__PURE__ */ jsx6(Popover, { label: removing ? "Remove" : "Make host", onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-form", children: [
|
|
3722
|
+
/* @__PURE__ */ jsx6("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.` }),
|
|
3664
3723
|
refusal,
|
|
3665
3724
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
|
|
3666
|
-
/* @__PURE__ */
|
|
3667
|
-
/* @__PURE__ */
|
|
3725
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
|
|
3726
|
+
/* @__PURE__ */ jsx6(
|
|
3668
3727
|
"button",
|
|
3669
3728
|
{
|
|
3670
3729
|
type: "button",
|
|
@@ -3677,7 +3736,7 @@ function PersonMenu({
|
|
|
3677
3736
|
] })
|
|
3678
3737
|
] }) });
|
|
3679
3738
|
}
|
|
3680
|
-
return /* @__PURE__ */
|
|
3739
|
+
return /* @__PURE__ */ jsx6(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
|
|
3681
3740
|
/* @__PURE__ */ jsxs3(
|
|
3682
3741
|
MenuItem,
|
|
3683
3742
|
{
|
|
@@ -3686,7 +3745,7 @@ function PersonMenu({
|
|
|
3686
3745
|
onClose();
|
|
3687
3746
|
},
|
|
3688
3747
|
children: [
|
|
3689
|
-
/* @__PURE__ */
|
|
3748
|
+
/* @__PURE__ */ jsx6(PinIcon, { width: 16, height: 16 }),
|
|
3690
3749
|
" ",
|
|
3691
3750
|
pinned ? "Unpin" : "Pin for me"
|
|
3692
3751
|
]
|
|
@@ -3704,39 +3763,39 @@ function PersonMenu({
|
|
|
3704
3763
|
onClose();
|
|
3705
3764
|
},
|
|
3706
3765
|
children: [
|
|
3707
|
-
/* @__PURE__ */
|
|
3766
|
+
/* @__PURE__ */ jsx6(ChatIcon, { width: 16, height: 16 }),
|
|
3708
3767
|
" Message privately"
|
|
3709
3768
|
]
|
|
3710
3769
|
}
|
|
3711
3770
|
) : null,
|
|
3712
3771
|
controls.isHost ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "spotlight", identity: spotlit ? null : participant.identity }), children: [
|
|
3713
|
-
/* @__PURE__ */
|
|
3772
|
+
/* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
|
|
3714
3773
|
" ",
|
|
3715
3774
|
spotlit ? "Remove spotlight" : "Spotlight for everyone"
|
|
3716
3775
|
] }) : null,
|
|
3717
3776
|
moderate ? /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
3718
|
-
/* @__PURE__ */
|
|
3777
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__menu-sep", role: "separator" }),
|
|
3719
3778
|
participant.micEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "mute", identity: participant.identity }), children: [
|
|
3720
|
-
/* @__PURE__ */
|
|
3779
|
+
/* @__PURE__ */ jsx6(MicOffIcon, { width: 16, height: 16 }),
|
|
3721
3780
|
" Mute"
|
|
3722
3781
|
] }) : !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "ask_unmute", identity: participant.identity }), children: [
|
|
3723
|
-
/* @__PURE__ */
|
|
3782
|
+
/* @__PURE__ */ jsx6(MicIcon, { width: 16, height: 16 }),
|
|
3724
3783
|
" Ask to unmute"
|
|
3725
3784
|
] }) : null,
|
|
3726
3785
|
participant.cameraEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_video", identity: participant.identity }), children: [
|
|
3727
|
-
/* @__PURE__ */
|
|
3786
|
+
/* @__PURE__ */ jsx6(CameraOffIcon, { width: 16, height: 16 }),
|
|
3728
3787
|
" Stop video"
|
|
3729
3788
|
] }) : null,
|
|
3730
3789
|
participant.screenSharing ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_screen", identity: participant.identity }), children: [
|
|
3731
|
-
/* @__PURE__ */
|
|
3790
|
+
/* @__PURE__ */ jsx6(ScreenShareIcon, { width: 16, height: 16 }),
|
|
3732
3791
|
" Stop screen share"
|
|
3733
3792
|
] }) : null,
|
|
3734
3793
|
participant.handRaised ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "lower_hand", identity: participant.identity }), children: [
|
|
3735
|
-
/* @__PURE__ */
|
|
3794
|
+
/* @__PURE__ */ jsx6(HandIcon, { width: 16, height: 16 }),
|
|
3736
3795
|
" Lower hand"
|
|
3737
3796
|
] }) : null,
|
|
3738
3797
|
hasAccount && !participant.isAgent && participant.role !== "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "make_cohost", identity: participant.identity }), children: [
|
|
3739
|
-
/* @__PURE__ */
|
|
3798
|
+
/* @__PURE__ */ jsx6(PeopleIcon, { width: 16, height: 16 }),
|
|
3740
3799
|
" Make co-host"
|
|
3741
3800
|
] }) : null,
|
|
3742
3801
|
!participant.isAgent ? /* @__PURE__ */ jsxs3(
|
|
@@ -3747,18 +3806,18 @@ function PersonMenu({
|
|
|
3747
3806
|
setMode("rename");
|
|
3748
3807
|
},
|
|
3749
3808
|
children: [
|
|
3750
|
-
/* @__PURE__ */
|
|
3809
|
+
/* @__PURE__ */ jsx6(PencilIcon, { width: 16, height: 16 }),
|
|
3751
3810
|
" Rename"
|
|
3752
3811
|
]
|
|
3753
3812
|
}
|
|
3754
3813
|
) : null
|
|
3755
3814
|
] }) : null,
|
|
3756
3815
|
controls.isOwner && participant.role === "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "revoke_cohost", identity: participant.identity }), children: [
|
|
3757
|
-
/* @__PURE__ */
|
|
3816
|
+
/* @__PURE__ */ jsx6(PeopleIcon, { width: 16, height: 16 }),
|
|
3758
3817
|
" Remove co-host"
|
|
3759
3818
|
] }) : null,
|
|
3760
3819
|
controls.isOwner && !self && hasAccount && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => setMode("transfer"), children: [
|
|
3761
|
-
/* @__PURE__ */
|
|
3820
|
+
/* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
|
|
3762
3821
|
" Make host"
|
|
3763
3822
|
] }) : null,
|
|
3764
3823
|
self ? /* @__PURE__ */ jsxs3(
|
|
@@ -3769,7 +3828,7 @@ function PersonMenu({
|
|
|
3769
3828
|
setMode("rename");
|
|
3770
3829
|
},
|
|
3771
3830
|
children: [
|
|
3772
|
-
/* @__PURE__ */
|
|
3831
|
+
/* @__PURE__ */ jsx6(PencilIcon, { width: 16, height: 16 }),
|
|
3773
3832
|
" Rename yourself"
|
|
3774
3833
|
]
|
|
3775
3834
|
}
|
|
@@ -3782,13 +3841,13 @@ function PersonMenu({
|
|
|
3782
3841
|
setMode("report");
|
|
3783
3842
|
},
|
|
3784
3843
|
children: [
|
|
3785
|
-
/* @__PURE__ */
|
|
3844
|
+
/* @__PURE__ */ jsx6(FlagIcon, { width: 16, height: 16 }),
|
|
3786
3845
|
" Report"
|
|
3787
3846
|
]
|
|
3788
3847
|
}
|
|
3789
3848
|
) : null,
|
|
3790
3849
|
moderate && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { danger: true, onSelect: () => setMode("remove"), children: [
|
|
3791
|
-
/* @__PURE__ */
|
|
3850
|
+
/* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 }),
|
|
3792
3851
|
" Remove from meeting"
|
|
3793
3852
|
] }) : null
|
|
3794
3853
|
] }) });
|
|
@@ -3796,7 +3855,7 @@ function PersonMenu({
|
|
|
3796
3855
|
function SettingsPanel({ onClose }) {
|
|
3797
3856
|
const host = useRequiredMeetHost();
|
|
3798
3857
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Settings", onClose, children: [
|
|
3799
|
-
/* @__PURE__ */
|
|
3858
|
+
/* @__PURE__ */ jsx6(
|
|
3800
3859
|
DeviceSettings,
|
|
3801
3860
|
{
|
|
3802
3861
|
onPick: (kind, deviceId) => {
|
|
@@ -3805,8 +3864,8 @@ function SettingsPanel({ onClose }) {
|
|
|
3805
3864
|
}
|
|
3806
3865
|
}
|
|
3807
3866
|
),
|
|
3808
|
-
/* @__PURE__ */
|
|
3809
|
-
/* @__PURE__ */
|
|
3867
|
+
/* @__PURE__ */ jsx6(EffectsSettings, {}),
|
|
3868
|
+
/* @__PURE__ */ jsx6(CaptionLanguageSettings, {})
|
|
3810
3869
|
] });
|
|
3811
3870
|
}
|
|
3812
3871
|
function DeviceSettings({
|
|
@@ -3823,9 +3882,9 @@ function DeviceSettings({
|
|
|
3823
3882
|
void host.devices.refresh();
|
|
3824
3883
|
}, [host]);
|
|
3825
3884
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
|
|
3826
|
-
/* @__PURE__ */
|
|
3827
|
-
/* @__PURE__ */
|
|
3828
|
-
/* @__PURE__ */
|
|
3885
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "audioinput", label: "Microphone", onPick }),
|
|
3886
|
+
/* @__PURE__ */ jsx6("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__ */ jsx6("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }),
|
|
3887
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "audiooutput", label: "Speaker", onPick }),
|
|
3829
3888
|
/* @__PURE__ */ jsxs3(
|
|
3830
3889
|
"button",
|
|
3831
3890
|
{
|
|
@@ -3837,13 +3896,13 @@ function DeviceSettings({
|
|
|
3837
3896
|
void playTestSound(speaker).finally(() => setTesting(false));
|
|
3838
3897
|
},
|
|
3839
3898
|
children: [
|
|
3840
|
-
/* @__PURE__ */
|
|
3899
|
+
/* @__PURE__ */ jsx6(SpeakerIcon, { width: 14, height: 14 }),
|
|
3841
3900
|
" ",
|
|
3842
3901
|
testing ? "Playing\u2026" : "Test speaker"
|
|
3843
3902
|
]
|
|
3844
3903
|
}
|
|
3845
3904
|
),
|
|
3846
|
-
/* @__PURE__ */
|
|
3905
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
|
|
3847
3906
|
] });
|
|
3848
3907
|
}
|
|
3849
3908
|
function EffectsSettings({ preview }) {
|
|
@@ -3863,7 +3922,7 @@ function EffectsSettings({ preview }) {
|
|
|
3863
3922
|
};
|
|
3864
3923
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Effects", children: [
|
|
3865
3924
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
3866
|
-
/* @__PURE__ */
|
|
3925
|
+
/* @__PURE__ */ jsx6(
|
|
3867
3926
|
Checkbox,
|
|
3868
3927
|
{
|
|
3869
3928
|
id: "mx-meet-noise",
|
|
@@ -3872,13 +3931,13 @@ function EffectsSettings({ preview }) {
|
|
|
3872
3931
|
}
|
|
3873
3932
|
),
|
|
3874
3933
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check-text", children: [
|
|
3875
|
-
/* @__PURE__ */
|
|
3876
|
-
/* @__PURE__ */
|
|
3934
|
+
/* @__PURE__ */ jsx6(Label, { htmlFor: "mx-meet-noise", children: "Noise suppression" }),
|
|
3935
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__hint", children: "Filters keyboards, fans and background chatter." })
|
|
3877
3936
|
] })
|
|
3878
3937
|
] }),
|
|
3879
3938
|
supported ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
|
|
3880
|
-
/* @__PURE__ */
|
|
3881
|
-
/* @__PURE__ */
|
|
3939
|
+
/* @__PURE__ */ jsx6(Label, { children: "Background" }),
|
|
3940
|
+
/* @__PURE__ */ jsx6(
|
|
3882
3941
|
SegmentedControl,
|
|
3883
3942
|
{
|
|
3884
3943
|
fullWidth: true,
|
|
@@ -3897,7 +3956,7 @@ function EffectsSettings({ preview }) {
|
|
|
3897
3956
|
]
|
|
3898
3957
|
}
|
|
3899
3958
|
),
|
|
3900
|
-
/* @__PURE__ */
|
|
3959
|
+
/* @__PURE__ */ jsx6(
|
|
3901
3960
|
"input",
|
|
3902
3961
|
{
|
|
3903
3962
|
ref: fileRef,
|
|
@@ -3912,7 +3971,7 @@ function EffectsSettings({ preview }) {
|
|
|
3912
3971
|
}
|
|
3913
3972
|
}
|
|
3914
3973
|
),
|
|
3915
|
-
error !== null ? /* @__PURE__ */
|
|
3974
|
+
error !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__error", children: error }) : null
|
|
3916
3975
|
] }) : null
|
|
3917
3976
|
] });
|
|
3918
3977
|
}
|
|
@@ -3999,29 +4058,29 @@ function LobbyPanel() {
|
|
|
3999
4058
|
if (!lobby.canAdmit || lobby.waiting.length === 0) return null;
|
|
4000
4059
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__lobby", "aria-label": "Waiting room", children: [
|
|
4001
4060
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__lobby-head", children: [
|
|
4002
|
-
/* @__PURE__ */
|
|
4003
|
-
/* @__PURE__ */
|
|
4061
|
+
/* @__PURE__ */ jsx6("h3", { className: "mx-meet__lobby-title", children: lobby.waiting.length === 1 ? "1 person is waiting" : `${lobby.waiting.length} people are waiting` }),
|
|
4062
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: () => void lobby.admitAll(), children: "Admit all" })
|
|
4004
4063
|
] }),
|
|
4005
|
-
/* @__PURE__ */
|
|
4064
|
+
/* @__PURE__ */ jsx6("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ jsxs3(
|
|
4006
4065
|
"li",
|
|
4007
4066
|
{
|
|
4008
4067
|
className: "mx-meet__lobby-row",
|
|
4009
4068
|
"data-meet-lobby-entry": "",
|
|
4010
4069
|
"data-meet-participant-name": entry.displayName,
|
|
4011
4070
|
children: [
|
|
4012
|
-
/* @__PURE__ */
|
|
4071
|
+
/* @__PURE__ */ jsx6(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
|
|
4013
4072
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
|
|
4014
4073
|
entry.displayName,
|
|
4015
|
-
entry.userId === null ? /* @__PURE__ */
|
|
4074
|
+
entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null
|
|
4016
4075
|
] }),
|
|
4017
|
-
/* @__PURE__ */
|
|
4018
|
-
/* @__PURE__ */
|
|
4076
|
+
/* @__PURE__ */ jsx6(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx6(CheckIcon, { width: 16, height: 16 }) }),
|
|
4077
|
+
/* @__PURE__ */ jsx6(
|
|
4019
4078
|
ControlButton,
|
|
4020
4079
|
{
|
|
4021
4080
|
label: `Deny ${entry.displayName}`,
|
|
4022
4081
|
danger: true,
|
|
4023
4082
|
onClick: () => void lobby.deny(entry),
|
|
4024
|
-
children: /* @__PURE__ */
|
|
4083
|
+
children: /* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 })
|
|
4025
4084
|
}
|
|
4026
4085
|
)
|
|
4027
4086
|
]
|
|
@@ -4036,19 +4095,19 @@ function NoteTakerRow() {
|
|
|
4036
4095
|
const duplicateError = status.refusal !== null && ai.error !== null && status.refusal.reason === ai.error.message && status.refusal.remedy === ai.error.remedy;
|
|
4037
4096
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-taker", "aria-label": "Note-taker", children: [
|
|
4038
4097
|
/* @__PURE__ */ jsxs3("p", { className: `mx-meet__note-taker-state mx-meet__note-taker-state--${status.state}`, children: [
|
|
4039
|
-
/* @__PURE__ */
|
|
4098
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
|
|
4040
4099
|
ai.noteTakerLabel
|
|
4041
4100
|
] }),
|
|
4042
|
-
status.detail !== null ? /* @__PURE__ */
|
|
4101
|
+
status.detail !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
|
|
4043
4102
|
status.refusal !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: status.refusal, operation: "Join this meeting", origin: "meet/components", children: [
|
|
4044
|
-
/* @__PURE__ */
|
|
4045
|
-
status.refusal.remedy.length > 0 ? /* @__PURE__ */
|
|
4103
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: status.refusal.reason }),
|
|
4104
|
+
status.refusal.remedy.length > 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: status.refusal.remedy }) : null
|
|
4046
4105
|
] }) : null,
|
|
4047
4106
|
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: [
|
|
4048
|
-
/* @__PURE__ */
|
|
4049
|
-
/* @__PURE__ */
|
|
4107
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
|
|
4108
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
|
|
4050
4109
|
] }) : null,
|
|
4051
|
-
ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */
|
|
4110
|
+
ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ jsx6(
|
|
4052
4111
|
"button",
|
|
4053
4112
|
{
|
|
4054
4113
|
type: "button",
|
|
@@ -4056,7 +4115,7 @@ function NoteTakerRow() {
|
|
|
4056
4115
|
onClick: () => void ai.stopNoteTaker(),
|
|
4057
4116
|
children: "Dismiss the note-taker"
|
|
4058
4117
|
}
|
|
4059
|
-
) : /* @__PURE__ */
|
|
4118
|
+
) : /* @__PURE__ */ jsx6(
|
|
4060
4119
|
"button",
|
|
4061
4120
|
{
|
|
4062
4121
|
type: "button",
|
|
@@ -4073,10 +4132,10 @@ function NoteList({
|
|
|
4073
4132
|
empty
|
|
4074
4133
|
}) {
|
|
4075
4134
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": title, children: [
|
|
4076
|
-
/* @__PURE__ */
|
|
4077
|
-
notes.length === 0 ? /* @__PURE__ */
|
|
4135
|
+
/* @__PURE__ */ jsx6("h3", { className: "mx-meet__note-group-title", children: title }),
|
|
4136
|
+
notes.length === 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: empty }) : /* @__PURE__ */ jsx6("ul", { className: "mx-meet__notes", children: notes.map((note) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__note", children: [
|
|
4078
4137
|
note.text,
|
|
4079
|
-
note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */
|
|
4138
|
+
note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
|
|
4080
4139
|
] }, note.id)) })
|
|
4081
4140
|
] });
|
|
4082
4141
|
}
|
|
@@ -4084,10 +4143,10 @@ function AiPanel({ onClose }) {
|
|
|
4084
4143
|
const ai = useMeetAi();
|
|
4085
4144
|
const [question, setQuestion] = useState4("");
|
|
4086
4145
|
return /* @__PURE__ */ jsxs3(PanelShell, { title: "Meeting assistant", onClose, children: [
|
|
4087
|
-
/* @__PURE__ */
|
|
4146
|
+
/* @__PURE__ */ jsx6(NoteTakerRow, {}),
|
|
4088
4147
|
ai.summary !== null ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Summary", children: [
|
|
4089
|
-
/* @__PURE__ */
|
|
4090
|
-
/* @__PURE__ */
|
|
4148
|
+
/* @__PURE__ */ jsx6("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
|
|
4149
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__summary", children: ai.summary.text })
|
|
4091
4150
|
] }) : null,
|
|
4092
4151
|
ai.wrapUp !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__wrap-up-notice", role: "status", children: [
|
|
4093
4152
|
"The wrap-up is written \u2014 ",
|
|
@@ -4101,7 +4160,7 @@ function AiPanel({ onClose }) {
|
|
|
4101
4160
|
ai.wrapUp.segmentCount === 1 ? "transcript line" : "transcript lines",
|
|
4102
4161
|
"."
|
|
4103
4162
|
] }) : null,
|
|
4104
|
-
/* @__PURE__ */
|
|
4163
|
+
/* @__PURE__ */ jsx6(
|
|
4105
4164
|
NoteList,
|
|
4106
4165
|
{
|
|
4107
4166
|
title: "Notes",
|
|
@@ -4109,7 +4168,7 @@ function AiPanel({ onClose }) {
|
|
|
4109
4168
|
empty: "Notes appear here as the meeting goes on."
|
|
4110
4169
|
}
|
|
4111
4170
|
),
|
|
4112
|
-
/* @__PURE__ */
|
|
4171
|
+
/* @__PURE__ */ jsx6(
|
|
4113
4172
|
NoteList,
|
|
4114
4173
|
{
|
|
4115
4174
|
title: "Decisions",
|
|
@@ -4117,7 +4176,7 @@ function AiPanel({ onClose }) {
|
|
|
4117
4176
|
empty: "Nothing has been decided yet."
|
|
4118
4177
|
}
|
|
4119
4178
|
),
|
|
4120
|
-
/* @__PURE__ */
|
|
4179
|
+
/* @__PURE__ */ jsx6(
|
|
4121
4180
|
NoteList,
|
|
4122
4181
|
{
|
|
4123
4182
|
title: "Action items",
|
|
@@ -4126,14 +4185,14 @@ function AiPanel({ onClose }) {
|
|
|
4126
4185
|
}
|
|
4127
4186
|
),
|
|
4128
4187
|
ai.transcript.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Transcript", children: [
|
|
4129
|
-
/* @__PURE__ */
|
|
4130
|
-
/* @__PURE__ */
|
|
4188
|
+
/* @__PURE__ */ jsx6("h3", { className: "mx-meet__note-group-title", children: "Transcript" }),
|
|
4189
|
+
/* @__PURE__ */ jsx6("ul", { className: "mx-meet__transcript", children: ai.transcript.map((line) => /* @__PURE__ */ jsxs3(
|
|
4131
4190
|
"li",
|
|
4132
4191
|
{
|
|
4133
4192
|
className: line.final && line.source === "record" ? "mx-meet__line" : "mx-meet__line mx-meet__line--interim",
|
|
4134
4193
|
children: [
|
|
4135
|
-
/* @__PURE__ */
|
|
4136
|
-
/* @__PURE__ */
|
|
4194
|
+
/* @__PURE__ */ jsx6("strong", { children: line.speaker }),
|
|
4195
|
+
/* @__PURE__ */ jsx6("span", { children: line.text })
|
|
4137
4196
|
]
|
|
4138
4197
|
},
|
|
4139
4198
|
line.id
|
|
@@ -4150,7 +4209,7 @@ function AiPanel({ onClose }) {
|
|
|
4150
4209
|
void ai.ask(asked);
|
|
4151
4210
|
},
|
|
4152
4211
|
children: [
|
|
4153
|
-
/* @__PURE__ */
|
|
4212
|
+
/* @__PURE__ */ jsx6(
|
|
4154
4213
|
"input",
|
|
4155
4214
|
{
|
|
4156
4215
|
className: "mx-meet__input",
|
|
@@ -4160,12 +4219,12 @@ function AiPanel({ onClose }) {
|
|
|
4160
4219
|
"aria-label": "Ask about this meeting"
|
|
4161
4220
|
}
|
|
4162
4221
|
),
|
|
4163
|
-
/* @__PURE__ */
|
|
4222
|
+
/* @__PURE__ */ jsx6("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
|
|
4164
4223
|
]
|
|
4165
4224
|
}
|
|
4166
4225
|
),
|
|
4167
|
-
ai.asking && ai.phase !== null ? /* @__PURE__ */
|
|
4168
|
-
ai.answer !== null ? /* @__PURE__ */
|
|
4226
|
+
ai.asking && ai.phase !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: "status", children: ai.phase }) : null,
|
|
4227
|
+
ai.answer !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__answer", children: ai.answer }) : null,
|
|
4169
4228
|
ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__coverage", children: [
|
|
4170
4229
|
"Answered from ",
|
|
4171
4230
|
ai.coverage.segmentsUsed,
|
|
@@ -4176,8 +4235,8 @@ function AiPanel({ onClose }) {
|
|
|
4176
4235
|
"."
|
|
4177
4236
|
] }) : null,
|
|
4178
4237
|
ai.error !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
|
|
4179
|
-
/* @__PURE__ */
|
|
4180
|
-
/* @__PURE__ */
|
|
4238
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
|
|
4239
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
|
|
4181
4240
|
] }) : null
|
|
4182
4241
|
] });
|
|
4183
4242
|
}
|
|
@@ -4194,22 +4253,22 @@ function Captions({ lines = 3 }) {
|
|
|
4194
4253
|
{
|
|
4195
4254
|
className: line.final ? "mx-meet__caption" : "mx-meet__caption mx-meet__caption--interim",
|
|
4196
4255
|
children: [
|
|
4197
|
-
/* @__PURE__ */
|
|
4256
|
+
/* @__PURE__ */ jsx6("strong", { children: line.speaker }),
|
|
4198
4257
|
" ",
|
|
4199
4258
|
translated ?? line.text,
|
|
4200
|
-
translated !== void 0 ? /* @__PURE__ */
|
|
4259
|
+
translated !== void 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__caption-original", children: line.text }) : null
|
|
4201
4260
|
]
|
|
4202
4261
|
},
|
|
4203
4262
|
line.id
|
|
4204
4263
|
);
|
|
4205
4264
|
}),
|
|
4206
|
-
translation.language !== null && translation.error !== null ? /* @__PURE__ */
|
|
4265
|
+
translation.language !== null && translation.error !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
|
|
4207
4266
|
] });
|
|
4208
4267
|
}
|
|
4209
4268
|
function ConsentNotice() {
|
|
4210
4269
|
const notice = useConsentNotice();
|
|
4211
4270
|
if (notice === null) return null;
|
|
4212
|
-
return /* @__PURE__ */
|
|
4271
|
+
return /* @__PURE__ */ jsx6("p", { className: "mx-meet__consent", role: "status", children: notice });
|
|
4213
4272
|
}
|
|
4214
4273
|
function AttendanceNotice() {
|
|
4215
4274
|
const media = useLocalMedia();
|
|
@@ -4225,21 +4284,22 @@ function AttendanceNotice() {
|
|
|
4225
4284
|
...code !== null ? { "data-meet-notice": code } : {},
|
|
4226
4285
|
children: [
|
|
4227
4286
|
notice,
|
|
4228
|
-
refused === null ? null : /* @__PURE__ */
|
|
4287
|
+
refused === null ? null : /* @__PURE__ */ jsx6("span", { className: "mx-meet__remedy", children: refused.remedy })
|
|
4229
4288
|
]
|
|
4230
4289
|
}
|
|
4231
4290
|
);
|
|
4232
4291
|
}
|
|
4233
4292
|
function PreJoin(props) {
|
|
4234
4293
|
const host = useMeetHost();
|
|
4235
|
-
if (host === null) return /* @__PURE__ */
|
|
4236
|
-
return /* @__PURE__ */
|
|
4294
|
+
if (host === null) return /* @__PURE__ */ jsx6(InertNotice, { what: "This meeting" });
|
|
4295
|
+
return /* @__PURE__ */ jsx6(PreJoinBody, { ...props, host });
|
|
4237
4296
|
}
|
|
4238
4297
|
function PreJoinBody({
|
|
4239
4298
|
roomName,
|
|
4240
4299
|
meetingId,
|
|
4241
4300
|
slug,
|
|
4242
4301
|
onJoined,
|
|
4302
|
+
observe: observe2 = false,
|
|
4243
4303
|
host
|
|
4244
4304
|
}) {
|
|
4245
4305
|
const room = useRoom();
|
|
@@ -4261,7 +4321,7 @@ function PreJoinBody({
|
|
|
4261
4321
|
}, [host]);
|
|
4262
4322
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin", children: [
|
|
4263
4323
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__preview", children: [
|
|
4264
|
-
mode === "video" && preview.preview !== null ? /* @__PURE__ */
|
|
4324
|
+
mode === "video" && preview.preview !== null ? /* @__PURE__ */ jsx6(
|
|
4265
4325
|
"video",
|
|
4266
4326
|
{
|
|
4267
4327
|
className: "mx-meet__video mx-meet__video--mirror",
|
|
@@ -4272,16 +4332,16 @@ function PreJoinBody({
|
|
|
4272
4332
|
if (element !== null) preview.preview?.attach(element);
|
|
4273
4333
|
}
|
|
4274
4334
|
}
|
|
4275
|
-
) : /* @__PURE__ */
|
|
4276
|
-
mode === "video" && preview.error !== null ? /* @__PURE__ */
|
|
4277
|
-
microphone && micStream !== null ? /* @__PURE__ */
|
|
4335
|
+
) : /* @__PURE__ */ jsx6("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx6(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 96 }) }),
|
|
4336
|
+
mode === "video" && preview.error !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__preview-note", children: preview.error }) : null,
|
|
4337
|
+
microphone && micStream !== null ? /* @__PURE__ */ jsx6("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__ */ jsx6("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }) : null
|
|
4278
4338
|
] }),
|
|
4279
4339
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-panel", children: [
|
|
4280
|
-
/* @__PURE__ */
|
|
4281
|
-
notice?.kind === "removed" ? /* @__PURE__ */
|
|
4340
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__prejoin-title", children: "Ready to join?" }),
|
|
4341
|
+
notice?.kind === "removed" ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__warning", children: notice.text }) : null,
|
|
4282
4342
|
devices?.labelsHidden === true ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
|
|
4283
4343
|
"Your browser is hiding device names until you allow camera and microphone access.",
|
|
4284
|
-
/* @__PURE__ */
|
|
4344
|
+
/* @__PURE__ */ jsx6(
|
|
4285
4345
|
"button",
|
|
4286
4346
|
{
|
|
4287
4347
|
type: "button",
|
|
@@ -4293,10 +4353,10 @@ function PreJoinBody({
|
|
|
4293
4353
|
}
|
|
4294
4354
|
)
|
|
4295
4355
|
] }) : null,
|
|
4296
|
-
devices?.fallbackNotice != null ? /* @__PURE__ */
|
|
4297
|
-
/* @__PURE__ */
|
|
4356
|
+
devices?.fallbackNotice != null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
|
|
4357
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "audioinput", label: "Microphone" }),
|
|
4298
4358
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__field-row", children: [
|
|
4299
|
-
/* @__PURE__ */
|
|
4359
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
|
|
4300
4360
|
/* @__PURE__ */ jsxs3(
|
|
4301
4361
|
Button,
|
|
4302
4362
|
{
|
|
@@ -4310,19 +4370,19 @@ function PreJoinBody({
|
|
|
4310
4370
|
);
|
|
4311
4371
|
},
|
|
4312
4372
|
children: [
|
|
4313
|
-
/* @__PURE__ */
|
|
4373
|
+
/* @__PURE__ */ jsx6(SpeakerIcon, {}),
|
|
4314
4374
|
" ",
|
|
4315
4375
|
speakerTesting ? "Playing\u2026" : "Test"
|
|
4316
4376
|
]
|
|
4317
4377
|
}
|
|
4318
4378
|
)
|
|
4319
4379
|
] }),
|
|
4320
|
-
/* @__PURE__ */
|
|
4321
|
-
/* @__PURE__ */
|
|
4322
|
-
recording.consentNotice !== null ? /* @__PURE__ */
|
|
4380
|
+
/* @__PURE__ */ jsx6(DevicePicker, { kind: "videoinput", label: "Camera" }),
|
|
4381
|
+
/* @__PURE__ */ jsx6(EffectsSettings, { preview: preview.preview }),
|
|
4382
|
+
recording.consentNotice !== null ? /* @__PURE__ */ jsx6(Alert, { variant: "info", children: /* @__PURE__ */ jsx6(AlertDescription, { children: recording.consentNotice }) }) : null,
|
|
4323
4383
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-actions", children: [
|
|
4324
4384
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
4325
|
-
/* @__PURE__ */
|
|
4385
|
+
/* @__PURE__ */ jsx6(
|
|
4326
4386
|
Checkbox,
|
|
4327
4387
|
{
|
|
4328
4388
|
id: "mx-meet-join-video",
|
|
@@ -4330,10 +4390,10 @@ function PreJoinBody({
|
|
|
4330
4390
|
onCheckedChange: (checked) => setMode(checked === true ? "video" : "audio")
|
|
4331
4391
|
}
|
|
4332
4392
|
),
|
|
4333
|
-
/* @__PURE__ */
|
|
4393
|
+
/* @__PURE__ */ jsx6(Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
|
|
4334
4394
|
] }),
|
|
4335
4395
|
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
|
|
4336
|
-
/* @__PURE__ */
|
|
4396
|
+
/* @__PURE__ */ jsx6(
|
|
4337
4397
|
Checkbox,
|
|
4338
4398
|
{
|
|
4339
4399
|
id: "mx-meet-join-mic",
|
|
@@ -4341,9 +4401,9 @@ function PreJoinBody({
|
|
|
4341
4401
|
onCheckedChange: (checked) => setMicrophone(checked === true)
|
|
4342
4402
|
}
|
|
4343
4403
|
),
|
|
4344
|
-
/* @__PURE__ */
|
|
4404
|
+
/* @__PURE__ */ jsx6(Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
|
|
4345
4405
|
] }),
|
|
4346
|
-
/* @__PURE__ */
|
|
4406
|
+
/* @__PURE__ */ jsx6(
|
|
4347
4407
|
Button,
|
|
4348
4408
|
{
|
|
4349
4409
|
type: "button",
|
|
@@ -4354,19 +4414,21 @@ function PreJoinBody({
|
|
|
4354
4414
|
preview.release();
|
|
4355
4415
|
void room.join({
|
|
4356
4416
|
roomName,
|
|
4357
|
-
|
|
4358
|
-
|
|
4417
|
+
// An observer publishes nothing: no camera, no microphone (MD-16).
|
|
4418
|
+
mode: observe2 ? "audio" : mode,
|
|
4419
|
+
microphone: observe2 ? false : microphone,
|
|
4359
4420
|
...meetingId !== void 0 ? { meetingId } : {},
|
|
4360
|
-
...slug !== void 0 ? { slug } : {}
|
|
4421
|
+
...slug !== void 0 ? { slug } : {},
|
|
4422
|
+
...observe2 ? { observe: true } : {}
|
|
4361
4423
|
}).then(() => onJoined?.()).catch(() => void 0).finally(() => setJoining(false));
|
|
4362
4424
|
},
|
|
4363
|
-
children: joining ? "Joining\u2026" : "Join now"
|
|
4425
|
+
children: joining ? "Joining\u2026" : observe2 ? "Observe" : "Join now"
|
|
4364
4426
|
}
|
|
4365
4427
|
)
|
|
4366
4428
|
] }),
|
|
4367
4429
|
room.failure !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__error", children: [
|
|
4368
4430
|
room.failure.message,
|
|
4369
|
-
/* @__PURE__ */
|
|
4431
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__remedy", children: room.failure.remedy })
|
|
4370
4432
|
] }) : null
|
|
4371
4433
|
] })
|
|
4372
4434
|
] });
|
|
@@ -4425,7 +4487,7 @@ function DevicePicker({
|
|
|
4425
4487
|
const valueOf = (deviceId) => deviceId.length > 0 ? deviceId : "default";
|
|
4426
4488
|
const current = devices?.selected[kind] ?? host.devices.resolve(kind) ?? "";
|
|
4427
4489
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
|
|
4428
|
-
/* @__PURE__ */
|
|
4490
|
+
/* @__PURE__ */ jsx6(Label, { htmlFor: triggerId, children: label }),
|
|
4429
4491
|
/* @__PURE__ */ jsxs3(
|
|
4430
4492
|
Select,
|
|
4431
4493
|
{
|
|
@@ -4436,8 +4498,8 @@ function DevicePicker({
|
|
|
4436
4498
|
else host.devices.select(kind, deviceId);
|
|
4437
4499
|
},
|
|
4438
4500
|
children: [
|
|
4439
|
-
/* @__PURE__ */
|
|
4440
|
-
/* @__PURE__ */
|
|
4501
|
+
/* @__PURE__ */ jsx6(SelectTrigger, { id: triggerId, "aria-label": label, children: /* @__PURE__ */ jsx6(SelectValue, { placeholder: label }) }),
|
|
4502
|
+
/* @__PURE__ */ jsx6(SelectContent, { children: list.map((device) => /* @__PURE__ */ jsx6(SelectItem, { value: valueOf(device.deviceId), children: device.label.length > 0 ? device.label : `${label} (name hidden)` }, device.deviceId || "default")) })
|
|
4441
4503
|
]
|
|
4442
4504
|
}
|
|
4443
4505
|
)
|
|
@@ -4448,46 +4510,49 @@ function MeetSkinRoom({
|
|
|
4448
4510
|
meetingId,
|
|
4449
4511
|
slug,
|
|
4450
4512
|
onLeave,
|
|
4451
|
-
headerControls
|
|
4513
|
+
headerControls,
|
|
4514
|
+
observe: observe2 = false
|
|
4452
4515
|
}) {
|
|
4453
4516
|
const { host, snapshot, isHost } = useMeetCore();
|
|
4454
4517
|
const elapsed = useElapsed(snapshot?.meeting?.startedAt ?? null);
|
|
4455
4518
|
const phase = snapshot?.phase ?? "idle";
|
|
4456
4519
|
if (host === null) return null;
|
|
4457
4520
|
if (phase === "idle" || phase === "failed" || phase === "left") {
|
|
4458
|
-
return /* @__PURE__ */
|
|
4521
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet", children: /* @__PURE__ */ jsx6(
|
|
4459
4522
|
PreJoin,
|
|
4460
4523
|
{
|
|
4461
4524
|
roomName,
|
|
4462
4525
|
...meetingId !== void 0 ? { meetingId } : {},
|
|
4463
|
-
...slug !== void 0 ? { slug } : {}
|
|
4526
|
+
...slug !== void 0 ? { slug } : {},
|
|
4527
|
+
observe: observe2
|
|
4464
4528
|
}
|
|
4465
4529
|
) });
|
|
4466
4530
|
}
|
|
4467
4531
|
if (phase === "lobby") {
|
|
4468
|
-
return /* @__PURE__ */
|
|
4532
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ jsx6(WaitingRoom, { host, ...onLeave !== void 0 ? { onLeave } : {} }) });
|
|
4469
4533
|
}
|
|
4470
4534
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet", children: [
|
|
4471
|
-
/* @__PURE__ */
|
|
4472
|
-
/* @__PURE__ */
|
|
4535
|
+
/* @__PURE__ */ jsx6(ConsentNotice, {}),
|
|
4536
|
+
/* @__PURE__ */ jsx6(AttendanceNotice, {}),
|
|
4473
4537
|
/* @__PURE__ */ jsxs3("header", { className: "mx-meet__header", children: [
|
|
4474
|
-
/* @__PURE__ */
|
|
4538
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
|
|
4475
4539
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__meta", children: [
|
|
4476
4540
|
participantSummary(snapshot?.participants ?? []),
|
|
4477
4541
|
elapsed > 0 ? ` \xB7 ${formatDurationMs2(elapsed)}` : ""
|
|
4478
4542
|
] }),
|
|
4479
|
-
/* @__PURE__ */
|
|
4543
|
+
/* @__PURE__ */ jsx6(RecordingIndicator, {}),
|
|
4544
|
+
isObserverRole(snapshot?.grants.role) ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", "data-meet-observing": "self", children: "Observing" }) : null,
|
|
4480
4545
|
snapshot?.locked === true ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__badge", children: [
|
|
4481
|
-
/* @__PURE__ */
|
|
4546
|
+
/* @__PURE__ */ jsx6(LockIcon, { width: 12, height: 12 }),
|
|
4482
4547
|
" Locked"
|
|
4483
4548
|
] }) : null,
|
|
4484
|
-
headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */
|
|
4485
|
-
isHost ? /* @__PURE__ */
|
|
4549
|
+
headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__header-controls", "data-meet-header-controls": "", children: headerControls }) : null,
|
|
4550
|
+
isHost ? /* @__PURE__ */ jsx6(HostMenu, {}) : null
|
|
4486
4551
|
] }),
|
|
4487
|
-
phase === "reconnecting" ? /* @__PURE__ */
|
|
4488
|
-
/* @__PURE__ */
|
|
4489
|
-
/* @__PURE__ */
|
|
4490
|
-
/* @__PURE__ */
|
|
4552
|
+
phase === "reconnecting" ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__banner", role: "status", children: "Reconnecting\u2026" }) : null,
|
|
4553
|
+
/* @__PURE__ */ jsx6(Stage, {}),
|
|
4554
|
+
/* @__PURE__ */ jsx6(Captions, {}),
|
|
4555
|
+
/* @__PURE__ */ jsx6(ControlBar, { ...onLeave !== void 0 ? { onLeave } : {} })
|
|
4491
4556
|
] });
|
|
4492
4557
|
}
|
|
4493
4558
|
function WaitingRoom({ host, onLeave }) {
|
|
@@ -4498,33 +4563,33 @@ function WaitingRoom({ host, onLeave }) {
|
|
|
4498
4563
|
setBusy(true);
|
|
4499
4564
|
void action().catch(() => void 0).finally(() => setBusy(false));
|
|
4500
4565
|
};
|
|
4501
|
-
const home = /* @__PURE__ */
|
|
4566
|
+
const home = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", onClick: () => onLeave !== void 0 ? onLeave() : window.location.assign("/"), children: "Back to home" });
|
|
4502
4567
|
let title;
|
|
4503
4568
|
let line = null;
|
|
4504
4569
|
let actions;
|
|
4505
4570
|
switch (admission) {
|
|
4506
4571
|
case "waiting_host":
|
|
4507
4572
|
title = "Waiting for the host to start";
|
|
4508
|
-
actions = /* @__PURE__ */
|
|
4573
|
+
actions = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", disabled: busy, onClick: run(withdraw), children: "Leave" });
|
|
4509
4574
|
break;
|
|
4510
4575
|
case "denied":
|
|
4511
4576
|
title = "The host declined your request";
|
|
4512
4577
|
actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
4513
|
-
waiting?.reknockAllowed === true ? /* @__PURE__ */
|
|
4578
|
+
waiting?.reknockAllowed === true ? /* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Ask to join again" }) : null,
|
|
4514
4579
|
home
|
|
4515
4580
|
] });
|
|
4516
4581
|
break;
|
|
4517
4582
|
case "expired":
|
|
4518
4583
|
title = "No one responded";
|
|
4519
4584
|
actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
4520
|
-
/* @__PURE__ */
|
|
4585
|
+
/* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Ask again" }),
|
|
4521
4586
|
home
|
|
4522
4587
|
] });
|
|
4523
4588
|
break;
|
|
4524
4589
|
case "withdrawn":
|
|
4525
4590
|
title = "You left the waiting room";
|
|
4526
4591
|
actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
|
|
4527
|
-
/* @__PURE__ */
|
|
4592
|
+
/* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Rejoin" }),
|
|
4528
4593
|
home
|
|
4529
4594
|
] });
|
|
4530
4595
|
break;
|
|
@@ -4535,13 +4600,13 @@ function WaitingRoom({ host, onLeave }) {
|
|
|
4535
4600
|
default:
|
|
4536
4601
|
title = "Waiting for the host to let you in";
|
|
4537
4602
|
line = waiting?.admittersPresent === false ? "The host isn't here yet" : null;
|
|
4538
|
-
actions = /* @__PURE__ */
|
|
4603
|
+
actions = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", disabled: busy, onClick: run(withdraw), children: "Cancel request" });
|
|
4539
4604
|
}
|
|
4540
4605
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__waiting", children: [
|
|
4541
|
-
/* @__PURE__ */
|
|
4542
|
-
/* @__PURE__ */
|
|
4543
|
-
line !== null ? /* @__PURE__ */
|
|
4544
|
-
/* @__PURE__ */
|
|
4606
|
+
/* @__PURE__ */ jsx6(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 72 }),
|
|
4607
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__prejoin-title", children: title }),
|
|
4608
|
+
line !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", role: "status", "data-meet-notice": "host-absent", children: line }) : null,
|
|
4609
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__waiting-actions", children: actions })
|
|
4545
4610
|
] });
|
|
4546
4611
|
}
|
|
4547
4612
|
function HostMenu() {
|
|
@@ -4551,7 +4616,7 @@ function HostMenu() {
|
|
|
4551
4616
|
const [confirmingEnd, setConfirmingEnd] = useState4(false);
|
|
4552
4617
|
const locked = snapshot?.locked === true;
|
|
4553
4618
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__host-menu", children: [
|
|
4554
|
-
/* @__PURE__ */
|
|
4619
|
+
/* @__PURE__ */ jsx6(
|
|
4555
4620
|
"button",
|
|
4556
4621
|
{
|
|
4557
4622
|
type: "button",
|
|
@@ -4563,8 +4628,8 @@ function HostMenu() {
|
|
|
4563
4628
|
}
|
|
4564
4629
|
),
|
|
4565
4630
|
end.canEnd ? confirmingEnd ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__confirm", role: "group", "aria-label": "End this meeting?", children: [
|
|
4566
|
-
/* @__PURE__ */
|
|
4567
|
-
/* @__PURE__ */
|
|
4631
|
+
/* @__PURE__ */ jsx6("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." }),
|
|
4632
|
+
/* @__PURE__ */ jsx6(
|
|
4568
4633
|
"button",
|
|
4569
4634
|
{
|
|
4570
4635
|
type: "button",
|
|
@@ -4576,7 +4641,7 @@ function HostMenu() {
|
|
|
4576
4641
|
children: "End it"
|
|
4577
4642
|
}
|
|
4578
4643
|
),
|
|
4579
|
-
/* @__PURE__ */
|
|
4644
|
+
/* @__PURE__ */ jsx6(
|
|
4580
4645
|
"button",
|
|
4581
4646
|
{
|
|
4582
4647
|
type: "button",
|
|
@@ -4585,7 +4650,7 @@ function HostMenu() {
|
|
|
4585
4650
|
children: "Keep it running"
|
|
4586
4651
|
}
|
|
4587
4652
|
)
|
|
4588
|
-
] }) : /* @__PURE__ */
|
|
4653
|
+
] }) : /* @__PURE__ */ jsx6(
|
|
4589
4654
|
"button",
|
|
4590
4655
|
{
|
|
4591
4656
|
type: "button",
|
|
@@ -4594,14 +4659,14 @@ function HostMenu() {
|
|
|
4594
4659
|
children: end.ending ? "Ending\u2026" : "End meeting for everyone"
|
|
4595
4660
|
}
|
|
4596
4661
|
) : null,
|
|
4597
|
-
end.notice !== null ? /* @__PURE__ */
|
|
4662
|
+
end.notice !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
|
|
4598
4663
|
] });
|
|
4599
4664
|
}
|
|
4600
4665
|
function ReactionOverlay({
|
|
4601
4666
|
reactions
|
|
4602
4667
|
}) {
|
|
4603
4668
|
if (reactions.length === 0) return null;
|
|
4604
|
-
return /* @__PURE__ */
|
|
4669
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ jsx6("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
|
|
4605
4670
|
}
|
|
4606
4671
|
function clockOf(iso) {
|
|
4607
4672
|
const at = new Date(iso);
|
|
@@ -4619,10 +4684,10 @@ function GuestRecordAccessControl({
|
|
|
4619
4684
|
if (host === null || !isHost) return null;
|
|
4620
4685
|
const resolved = access.setting === "default" && access.effective !== null ? ` Right now that means: ${guestRecordAccessLabel(access.effective.level).toLowerCase()}.` : "";
|
|
4621
4686
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__record-section", "aria-label": "What guests may read", children: [
|
|
4622
|
-
/* @__PURE__ */
|
|
4687
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
|
|
4623
4688
|
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
4624
|
-
/* @__PURE__ */
|
|
4625
|
-
/* @__PURE__ */
|
|
4689
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
|
|
4690
|
+
/* @__PURE__ */ jsx6(
|
|
4626
4691
|
"select",
|
|
4627
4692
|
{
|
|
4628
4693
|
className: "mx-meet__select",
|
|
@@ -4633,7 +4698,7 @@ function GuestRecordAccessControl({
|
|
|
4633
4698
|
event.target.value
|
|
4634
4699
|
);
|
|
4635
4700
|
},
|
|
4636
|
-
children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */
|
|
4701
|
+
children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ jsx6("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
|
|
4637
4702
|
}
|
|
4638
4703
|
)
|
|
4639
4704
|
] }),
|
|
@@ -4641,10 +4706,10 @@ function GuestRecordAccessControl({
|
|
|
4641
4706
|
guestRecordAccessExplanation(access.setting),
|
|
4642
4707
|
resolved
|
|
4643
4708
|
] }),
|
|
4644
|
-
access.saving ? /* @__PURE__ */
|
|
4709
|
+
access.saving ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
|
|
4645
4710
|
access.error !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: access.error, operation: "Change who can join", origin: "meet/components", children: [
|
|
4646
|
-
/* @__PURE__ */
|
|
4647
|
-
/* @__PURE__ */
|
|
4711
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: access.error.message }),
|
|
4712
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: access.error.remedy })
|
|
4648
4713
|
] }) : null
|
|
4649
4714
|
] });
|
|
4650
4715
|
}
|