@ai-matrx/meet 0.9.0 → 0.10.1

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.
@@ -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 useMemo4 } from "react";
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";
@@ -184,7 +184,17 @@ var MEET_ROUTES = {
184
184
  */
185
185
  collab: "/api/v1/meet/collab",
186
186
  /** Meet wave 5: translate finished caption lines into this viewer's language. */
187
- captionsTranslate: "/api/v1/meet/captions/translate"
187
+ captionsTranslate: "/api/v1/meet/captions/translate",
188
+ /**
189
+ * S4 — THE STATE READ (CORE-DESIGN §2.6): `GET ?meeting_id=` with `x-meet-pass`. This
190
+ * person's admission (lazy expiry applied), whether anyone who can admit is here, the run's
191
+ * phase. Read every `waiting_poll_seconds` while waiting and on every `mx.state.changed`.
192
+ */
193
+ state: "/api/v1/meet/state",
194
+ /** S4: `withdraw` (stop waiting) or `leave` (close this tab); the pass may ride in the body. */
195
+ leave: "/api/v1/meet/leave",
196
+ /** S4: a pass holder (guests included) saw the recording notice, for this run. */
197
+ consent: "/api/v1/meet/consent"
188
198
  };
189
199
 
190
200
  // src/core/recording.ts
@@ -245,6 +255,20 @@ function isLinkFollower(standing) {
245
255
  function isHostRole(role) {
246
256
  return role === "host" || role === "cohost";
247
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
+ }
248
272
 
249
273
  // src/core/collab.ts
250
274
  function assignedRoom(plan, identity) {
@@ -366,7 +390,7 @@ function observedPhase(input) {
366
390
  case "left":
367
391
  return "prejoin";
368
392
  case "lobby":
369
- return "waiting:knocking";
393
+ return waitingPhase(snapshot);
370
394
  case "requesting-token":
371
395
  case "connecting":
372
396
  return "joining";
@@ -375,6 +399,24 @@ function observedPhase(input) {
375
399
  return "in_call";
376
400
  }
377
401
  }
402
+ function waitingPhase(snapshot) {
403
+ switch (snapshot.waiting?.admission) {
404
+ case "waiting_host":
405
+ return "waiting:host_not_started";
406
+ case "denied":
407
+ return "denied";
408
+ case "expired":
409
+ return "knock_expired";
410
+ case "withdrawn":
411
+ return "left";
412
+ case "ended":
413
+ return "ended";
414
+ case "removed":
415
+ return "refused:removed";
416
+ default:
417
+ return "waiting:knocking";
418
+ }
419
+ }
378
420
  var ADMITTER_ROLES = /* @__PURE__ */ new Set(["host", "cohost"]);
379
421
  function observe(input) {
380
422
  const { snapshot } = input;
@@ -389,7 +431,7 @@ function observe(input) {
389
431
  reason: phase.startsWith("refused:") ? phase.slice("refused:".length) : null,
390
432
  role,
391
433
  connection: snapshot?.phase === "reconnecting" ? "reconnecting" : "stable",
392
- hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : null,
434
+ hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : snapshot?.phase === "lobby" ? snapshot.waiting?.admittersPresent ?? null : null,
393
435
  lobbyCount: canAdmit && snapshot !== null ? snapshot.lobby.filter((entry) => entry.state === "knocking").length : 0,
394
436
  recording: snapshot?.recording === "recording" || snapshot?.recording === "stopping",
395
437
  audioBlocked: null,
@@ -677,7 +719,10 @@ function orderParticipants(participants, activeSpeakers) {
677
719
  }
678
720
  function computeStage(args) {
679
721
  const pageSize = Math.max(1, args.pageSize ?? DEFAULT_PAGE_SIZE);
680
- const ordered = orderParticipants(args.participants, args.activeSpeakers);
722
+ const ordered = orderParticipants(
723
+ args.participants.filter((participant) => !isObserverRole(participant.role)),
724
+ args.activeSpeakers
725
+ );
681
726
  const sharer = ordered.find((participant) => participant.screenSharing) ?? null;
682
727
  const pinnedParticipant = args.pinned === null ? null : ordered.find((participant) => participant.identity === args.pinned) ?? null;
683
728
  const spotlit = args.spotlight == null ? null : ordered.find((participant) => participant.identity === args.spotlight) ?? null;
@@ -703,8 +748,96 @@ function gridColumns(count) {
703
748
  return 5;
704
749
  }
705
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
+
706
839
  // src/react/hooks.ts
707
- import { useCallback as useCallback2, useEffect as useEffect3, useMemo as useMemo3, useRef as useRef3, useState as useState2, useSyncExternalStore as useSyncExternalStore2 } from "react";
840
+ import { useCallback as useCallback2, useEffect as useEffect3, useMemo as useMemo4, useRef as useRef3, useState as useState2, useSyncExternalStore as useSyncExternalStore2 } from "react";
708
841
  import { useRealtimeManager as useRealtimeManager2 } from "@ai-matrx/realtime/react";
709
842
 
710
843
  // src/core/record.ts
@@ -883,7 +1016,7 @@ function useRoom() {
883
1016
  function useStage(pageSize = DEFAULT_PAGE_SIZE) {
884
1017
  const snapshot = useMeetSnapshot();
885
1018
  const [page, setPage] = useState2(0);
886
- const stage = useMemo3(
1019
+ const stage = useMemo4(
887
1020
  () => computeStage({
888
1021
  participants: snapshot?.participants ?? [],
889
1022
  layout: snapshot?.layout ?? "grid",
@@ -935,12 +1068,22 @@ function useLobby() {
935
1068
  async () => requireSession(session, "admitAll").admitAll(),
936
1069
  [session]
937
1070
  ),
938
- knock: useCallback2(
939
- (roomName) => requireSession(session, "knock").knock(roomName),
1071
+ undeny: useCallback2(
1072
+ async (entry) => requireSession(session, "undeny").undeny(entry),
940
1073
  [session]
941
1074
  )
942
1075
  };
943
1076
  }
1077
+ function useWaiting() {
1078
+ const host = useMeetHost();
1079
+ const snapshot = useMeetSnapshot();
1080
+ const session = host?.meetings ?? null;
1081
+ return {
1082
+ waiting: snapshot?.waiting ?? null,
1083
+ withdraw: useCallback2(async () => requireSession(session, "withdraw").withdraw(), [session]),
1084
+ askAgain: useCallback2(async () => requireSession(session, "askAgain").askAgain(), [session])
1085
+ };
1086
+ }
944
1087
  function useRecording() {
945
1088
  const host = useMeetHost();
946
1089
  const snapshot = useMeetSnapshot();
@@ -985,7 +1128,7 @@ function useMeetAi() {
985
1128
  const participants = snapshot?.participants ?? [];
986
1129
  const notes = snapshot?.notes ?? [];
987
1130
  const wrapUp = snapshot?.wrapUp ?? null;
988
- const status = useMemo3(
1131
+ const status = useMemo4(
989
1132
  () => noteTakerStatus({
990
1133
  meeting,
991
1134
  participants,
@@ -994,7 +1137,7 @@ function useMeetAi() {
994
1137
  [meeting, participants, snapshot?.noteTakerRefusal]
995
1138
  );
996
1139
  const names = snapshot?.names ?? EMPTY_NAMES;
997
- const transcript = useMemo3(
1140
+ const transcript = useMemo4(
998
1141
  () => readableTranscript(snapshot?.transcript ?? []).map((line) => ({
999
1142
  id: line.id,
1000
1143
  identity: line.identity,
@@ -1217,7 +1360,7 @@ function useHostControls() {
1217
1360
  }
1218
1361
  function useHandQueue() {
1219
1362
  const snapshot = useMeetSnapshot();
1220
- return useMemo3(
1363
+ return useMemo4(
1221
1364
  () => (snapshot?.participants ?? []).filter((participant) => participant.handRaised).sort((a, b) => (a.handRaisedAt ?? 0) - (b.handRaisedAt ?? 0)),
1222
1365
  [snapshot?.participants]
1223
1366
  );
@@ -1355,72 +1498,6 @@ function useGuestRecordAccess(meeting) {
1355
1498
  };
1356
1499
  }
1357
1500
 
1358
- // src/core/collab-state.ts
1359
- function availableActivities(collab, isHost) {
1360
- const settings = collab?.settings ?? null;
1361
- if (settings === null) return [];
1362
- const out = [];
1363
- if (settings.whiteboardEnabled) out.push("whiteboard");
1364
- if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
1365
- if (settings.qaEnabled) out.push("qa");
1366
- if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
1367
- return out;
1368
- }
1369
- function activityAttention(collab, isHost) {
1370
- if (collab === null) return false;
1371
- if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
1372
- if (isHost && collab.questions.some((q) => q.state === "open")) return true;
1373
- return false;
1374
- }
1375
- async function performCollab(runtime, request) {
1376
- if (runtime === null) return { ok: false, message: "This meeting is not connected." };
1377
- try {
1378
- const result = await runtime.inRoom.collab(request);
1379
- return { ok: true, message: result.message, itemId: result.itemId };
1380
- } catch (error) {
1381
- return { ok: false, message: error.message ?? "That did not work." };
1382
- }
1383
- }
1384
- async function moveToRoom(runtime, roomId) {
1385
- if (runtime === null) return { ok: false, message: "This meeting is not connected." };
1386
- try {
1387
- await runtime.engine.moveToBreakout(roomId);
1388
- return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
1389
- } catch (error) {
1390
- return { ok: false, message: error.message ?? "That room could not be joined." };
1391
- }
1392
- }
1393
- function untranslatedLines(lines, translations) {
1394
- return lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text }) => ({ id, text }));
1395
- }
1396
- function nextTranslationBatch(pending, language, asked) {
1397
- const batch = pending.filter((line) => !asked.has(`${language}:${line.id}`)).slice(-20);
1398
- for (const line of batch) asked.add(`${language}:${line.id}`);
1399
- return batch;
1400
- }
1401
- function setCaptionLanguage(store, next) {
1402
- store.patch({
1403
- collab: {
1404
- ...store.snapshot().collab,
1405
- captionLanguage: next,
1406
- captionTranslations: {},
1407
- captionTranslationError: null
1408
- }
1409
- });
1410
- }
1411
- function takePanelRequest(store) {
1412
- const request = store.snapshot().collab.panelRequest;
1413
- if (request === null) return null;
1414
- store.patch({ collab: { ...store.snapshot().collab, panelRequest: null } });
1415
- return request.panel;
1416
- }
1417
- function takeMoveRequest(store) {
1418
- const request = store.snapshot().collab.moveRequest;
1419
- if (request === null) return null;
1420
- store.patch({ collab: { ...store.snapshot().collab, moveRequest: null } });
1421
- return { roomId: request.roomId };
1422
- }
1423
-
1424
1501
  // src/react/collab-hooks.ts
1425
1502
  import { useEffect as useEffect4, useRef as useRef4 } from "react";
1426
1503
  function useCollab() {
@@ -1487,7 +1564,7 @@ function useMeetCore() {
1487
1564
  const role = useRole();
1488
1565
  const isHost = useIsHost();
1489
1566
  const observation = useCoreObservation();
1490
- return useMemo4(
1567
+ return useMemo5(
1491
1568
  () => ({ host, snapshot, devices, role, isHost, observation }),
1492
1569
  [host, snapshot, devices, role, isHost, observation]
1493
1570
  );
@@ -1500,9 +1577,9 @@ import { Alert, AlertDescription, Button, Checkbox, ErrorBox, Label, SegmentedCo
1500
1577
  import { useEffect as useEffect5, useRef as useRef5, useState as useState3 } from "react";
1501
1578
 
1502
1579
  // src/skins/meet/icons.tsx
1503
- import { jsx as jsx3, jsxs } from "react/jsx-runtime";
1580
+ import { jsx as jsx4, jsxs } from "react/jsx-runtime";
1504
1581
  function Icon({ children, ...props }) {
1505
- return /* @__PURE__ */ jsx3(
1582
+ return /* @__PURE__ */ jsx4(
1506
1583
  "svg",
1507
1584
  {
1508
1585
  width: "20",
@@ -1522,223 +1599,223 @@ function Icon({ children, ...props }) {
1522
1599
  }
1523
1600
  function MicIcon(props) {
1524
1601
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1525
- /* @__PURE__ */ jsx3("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
1526
- /* @__PURE__ */ jsx3("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
1527
- /* @__PURE__ */ jsx3("path", { d: "M12 19v3" })
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" })
1528
1605
  ] });
1529
1606
  }
1530
1607
  function MicOffIcon(props) {
1531
1608
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1532
- /* @__PURE__ */ jsx3("path", { d: "M2 2l20 20" }),
1533
- /* @__PURE__ */ jsx3("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
1534
- /* @__PURE__ */ jsx3("path", { d: "M15 9.34V5a3 3 0 0 0-5.94-.6" }),
1535
- /* @__PURE__ */ jsx3("path", { d: "M19 10v2a7 7 0 0 1-.11 1.23M5 10v2a7 7 0 0 0 11 5.66" }),
1536
- /* @__PURE__ */ jsx3("path", { d: "M12 19v3" })
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" })
1537
1614
  ] });
1538
1615
  }
1539
1616
  function CameraIcon(props) {
1540
1617
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1541
- /* @__PURE__ */ jsx3("path", { d: "m23 7-7 5 7 5V7Z" }),
1542
- /* @__PURE__ */ jsx3("rect", { x: "1", y: "5", width: "15", height: "14", rx: "2" })
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" })
1543
1620
  ] });
1544
1621
  }
1545
1622
  function CameraOffIcon(props) {
1546
1623
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1547
- /* @__PURE__ */ jsx3("path", { d: "M2 2l20 20" }),
1548
- /* @__PURE__ */ jsx3("path", { d: "M10.66 5H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10" }),
1549
- /* @__PURE__ */ jsx3("path", { d: "M16 16a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2" })
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" })
1550
1627
  ] });
1551
1628
  }
1552
1629
  function ScreenShareIcon(props) {
1553
1630
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1554
- /* @__PURE__ */ jsx3("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2" }),
1555
- /* @__PURE__ */ jsx3("path", { d: "M8 21h8M12 17v4" }),
1556
- /* @__PURE__ */ jsx3("path", { d: "M12 13V8m0 0-2.5 2.5M12 8l2.5 2.5" })
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" })
1557
1634
  ] });
1558
1635
  }
1559
1636
  function PhoneIcon(props) {
1560
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6A19.79 19.79 0 0 1 2.12 4.18 2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92Z" }) });
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" }) });
1561
1638
  }
1562
1639
  function PhoneOffIcon(props) {
1563
- return /* @__PURE__ */ jsx3(Icon, { fill: "currentColor", stroke: "none", ...props, children: /* @__PURE__ */ jsx3("path", { d: "M12 9c-1.6 0-3.15.25-4.6.72v3.1c0 .39-.23.74-.56.9-.98.49-1.87 1.12-2.66 1.85-.18.18-.43.28-.7.28-.28 0-.53-.11-.71-.29L.29 13.08a.99.99 0 0 1-.29-.7c0-.28.11-.53.29-.71C3.34 8.78 7.46 7 12 7s8.66 1.78 11.71 4.67c.18.18.29.43.29.71 0 .28-.11.53-.29.71l-2.48 2.48c-.18.18-.43.29-.71.29-.27 0-.52-.11-.7-.28a11.27 11.27 0 0 0-2.67-1.85.996.996 0 0 1-.56-.9v-3.1C15.15 9.25 13.6 9 12 9Z" }) });
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" }) });
1564
1641
  }
1565
1642
  function HandIcon(props) {
1566
1643
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1567
- /* @__PURE__ */ jsx3("path", { d: "M18 11V6a2 2 0 0 0-4 0v5" }),
1568
- /* @__PURE__ */ jsx3("path", { d: "M14 10V4a2 2 0 0 0-4 0v7" }),
1569
- /* @__PURE__ */ jsx3("path", { d: "M10 10.5V6a2 2 0 0 0-4 0v8" }),
1570
- /* @__PURE__ */ jsx3("path", { d: "M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2a8 8 0 0 1-8-8v-1a2 2 0 1 1 4 0" })
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" })
1571
1648
  ] });
1572
1649
  }
1573
1650
  function ChatIcon(props) {
1574
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z" }) });
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" }) });
1575
1652
  }
1576
1653
  function PeopleIcon(props) {
1577
1654
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1578
- /* @__PURE__ */ jsx3("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
1579
- /* @__PURE__ */ jsx3("circle", { cx: "9", cy: "7", r: "4" }),
1580
- /* @__PURE__ */ jsx3("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" })
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" })
1581
1658
  ] });
1582
1659
  }
1583
1660
  function RecordIcon(props) {
1584
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
1661
+ return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
1585
1662
  }
1586
1663
  function SparklesIcon(props) {
1587
1664
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1588
- /* @__PURE__ */ jsx3("path", { d: "M12 3l1.9 4.6L18.5 9.5l-4.6 1.9L12 16l-1.9-4.6L5.5 9.5l4.6-1.9L12 3Z" }),
1589
- /* @__PURE__ */ jsx3("path", { d: "M19 15l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9L19 15Z" })
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" })
1590
1667
  ] });
1591
1668
  }
1592
1669
  function LockIcon(props) {
1593
1670
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1594
- /* @__PURE__ */ jsx3("rect", { x: "4", y: "10", width: "16", height: "11", rx: "2" }),
1595
- /* @__PURE__ */ jsx3("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
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" })
1596
1673
  ] });
1597
1674
  }
1598
1675
  function LayoutIcon(props) {
1599
1676
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1600
- /* @__PURE__ */ jsx3("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1601
- /* @__PURE__ */ jsx3("path", { d: "M3 9h18M9 21V9" })
1677
+ /* @__PURE__ */ jsx4("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1678
+ /* @__PURE__ */ jsx4("path", { d: "M3 9h18M9 21V9" })
1602
1679
  ] });
1603
1680
  }
1604
1681
  function SettingsIcon(props) {
1605
1682
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1606
- /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "3" }),
1607
- /* @__PURE__ */ jsx3("path", { d: "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.6a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z" })
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" })
1608
1685
  ] });
1609
1686
  }
1610
1687
  function CheckIcon(props) {
1611
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M20 6 9 17l-5-5" }) });
1688
+ return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M20 6 9 17l-5-5" }) });
1612
1689
  }
1613
1690
  function CloseIcon(props) {
1614
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M18 6 6 18M6 6l12 12" }) });
1691
+ return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M18 6 6 18M6 6l12 12" }) });
1615
1692
  }
1616
1693
  function PinIcon(props) {
1617
1694
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1618
- /* @__PURE__ */ jsx3("path", { d: "M12 17v5" }),
1619
- /* @__PURE__ */ jsx3("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
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" })
1620
1697
  ] });
1621
1698
  }
1622
1699
  function WifiLowIcon(props) {
1623
1700
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1624
- /* @__PURE__ */ jsx3("path", { d: "M12 20h.01" }),
1625
- /* @__PURE__ */ jsx3("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
1701
+ /* @__PURE__ */ jsx4("path", { d: "M12 20h.01" }),
1702
+ /* @__PURE__ */ jsx4("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
1626
1703
  ] });
1627
1704
  }
1628
1705
  function SmileIcon(props) {
1629
1706
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1630
- /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "10" }),
1631
- /* @__PURE__ */ jsx3("path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }),
1632
- /* @__PURE__ */ jsx3("line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }),
1633
- /* @__PURE__ */ jsx3("line", { x1: "15", x2: "15.01", y1: "9", y2: "9" })
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" })
1634
1711
  ] });
1635
1712
  }
1636
1713
  function MoreIcon(props) {
1637
1714
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1638
- /* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "1" }),
1639
- /* @__PURE__ */ jsx3("circle", { cx: "19", cy: "12", r: "1" }),
1640
- /* @__PURE__ */ jsx3("circle", { cx: "5", cy: "12", r: "1" })
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" })
1641
1718
  ] });
1642
1719
  }
1643
1720
  function SearchIcon(props) {
1644
1721
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1645
- /* @__PURE__ */ jsx3("circle", { cx: "11", cy: "11", r: "8" }),
1646
- /* @__PURE__ */ jsx3("path", { d: "m21 21-4.3-4.3" })
1722
+ /* @__PURE__ */ jsx4("circle", { cx: "11", cy: "11", r: "8" }),
1723
+ /* @__PURE__ */ jsx4("path", { d: "m21 21-4.3-4.3" })
1647
1724
  ] });
1648
1725
  }
1649
1726
  function KeyboardIcon(props) {
1650
1727
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1651
- /* @__PURE__ */ jsx3("path", { d: "M10 8h.01M12 12h.01M14 8h.01M16 12h.01M18 8h.01M6 8h.01M7 16h10M8 12h.01" }),
1652
- /* @__PURE__ */ jsx3("rect", { width: "20", height: "16", x: "2", y: "4", rx: "2" })
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" })
1653
1730
  ] });
1654
1731
  }
1655
1732
  function SpotlightIcon(props) {
1656
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M12 2 15 8.5 22 9.3 17 14 18.2 21 12 17.6 5.8 21 7 14 2 9.3 9 8.5Z" }) });
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" }) });
1657
1734
  }
1658
1735
  function SignalIcon({ bars, ...props }) {
1659
1736
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1660
- /* @__PURE__ */ jsx3("path", { d: "M4 20v-2", opacity: bars >= 1 ? 1 : 0.3 }),
1661
- /* @__PURE__ */ jsx3("path", { d: "M10 20v-6", opacity: bars >= 2 ? 1 : 0.3 }),
1662
- /* @__PURE__ */ jsx3("path", { d: "M16 20V9", opacity: bars >= 3 ? 1 : 0.3 }),
1663
- /* @__PURE__ */ jsx3("path", { d: "M22 20V4", opacity: bars >= 3 ? 1 : 0.3 })
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 })
1664
1741
  ] });
1665
1742
  }
1666
1743
  function SpeakerIcon(props) {
1667
1744
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1668
- /* @__PURE__ */ jsx3("path", { d: "M11 5 6 9H2v6h4l5 4V5Z" }),
1669
- /* @__PURE__ */ jsx3("path", { d: "M15.54 8.46a5 5 0 0 1 0 7.07" }),
1670
- /* @__PURE__ */ jsx3("path", { d: "M19.07 4.93a10 10 0 0 1 0 14.14" })
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" })
1671
1748
  ] });
1672
1749
  }
1673
1750
  function FlagIcon(props) {
1674
1751
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1675
- /* @__PURE__ */ jsx3("path", { d: "M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z" }),
1676
- /* @__PURE__ */ jsx3("line", { x1: "4", x2: "4", y1: "22", y2: "15" })
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" })
1677
1754
  ] });
1678
1755
  }
1679
1756
  function PencilIcon(props) {
1680
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" }) });
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" }) });
1681
1758
  }
1682
1759
  function ActivitiesIcon(props) {
1683
1760
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1684
- /* @__PURE__ */ jsx3("path", { d: "M8.3 10a.7.7 0 0 1-.626-1.079L11.4 3a.7.7 0 0 1 1.198-.043L16.3 8.9a.7.7 0 0 1-.572 1.1Z" }),
1685
- /* @__PURE__ */ jsx3("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
1686
- /* @__PURE__ */ jsx3("circle", { cx: "17.5", cy: "17.5", r: "3.5" })
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" })
1687
1764
  ] });
1688
1765
  }
1689
1766
  function PollIcon(props) {
1690
1767
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1691
- /* @__PURE__ */ jsx3("line", { x1: "18", x2: "18", y1: "20", y2: "10" }),
1692
- /* @__PURE__ */ jsx3("line", { x1: "12", x2: "12", y1: "20", y2: "4" }),
1693
- /* @__PURE__ */ jsx3("line", { x1: "6", x2: "6", y1: "20", y2: "14" })
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" })
1694
1771
  ] });
1695
1772
  }
1696
1773
  function QuestionIcon(props) {
1697
1774
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1698
- /* @__PURE__ */ jsx3("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z" }),
1699
- /* @__PURE__ */ jsx3("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
1700
- /* @__PURE__ */ jsx3("path", { d: "M12 17h.01" })
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" })
1701
1778
  ] });
1702
1779
  }
1703
1780
  function WhiteboardIcon(props) {
1704
1781
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1705
- /* @__PURE__ */ jsx3("path", { d: "M2 3h20" }),
1706
- /* @__PURE__ */ jsx3("path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" }),
1707
- /* @__PURE__ */ jsx3("path", { d: "m7 21 5-5 5 5" })
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" })
1708
1785
  ] });
1709
1786
  }
1710
1787
  function BreakoutIcon(props) {
1711
1788
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1712
- /* @__PURE__ */ jsx3("rect", { width: "7", height: "18", x: "3", y: "3", rx: "1" }),
1713
- /* @__PURE__ */ jsx3("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }),
1714
- /* @__PURE__ */ jsx3("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })
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" })
1715
1792
  ] });
1716
1793
  }
1717
1794
  function UpvoteIcon(props) {
1718
- return /* @__PURE__ */ jsx3(Icon, { ...props, children: /* @__PURE__ */ jsx3("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
1795
+ return /* @__PURE__ */ jsx4(Icon, { ...props, children: /* @__PURE__ */ jsx4("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
1719
1796
  }
1720
1797
  function EraserIcon(props) {
1721
1798
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1722
- /* @__PURE__ */ jsx3("path", { d: "m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21" }),
1723
- /* @__PURE__ */ jsx3("path", { d: "M22 21H7" }),
1724
- /* @__PURE__ */ jsx3("path", { d: "m5 11 9 9" })
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" })
1725
1802
  ] });
1726
1803
  }
1727
1804
  function HighlighterIcon(props) {
1728
1805
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1729
- /* @__PURE__ */ jsx3("path", { d: "m9 11-6 6v3h9l3-3" }),
1730
- /* @__PURE__ */ jsx3("path", { d: "m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4" })
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" })
1731
1808
  ] });
1732
1809
  }
1733
1810
  function UndoIcon(props) {
1734
1811
  return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
1735
- /* @__PURE__ */ jsx3("path", { d: "M9 14 4 9l5-5" }),
1736
- /* @__PURE__ */ jsx3("path", { d: "M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11" })
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" })
1737
1814
  ] });
1738
1815
  }
1739
1816
 
1740
1817
  // src/skins/meet/collab.tsx
1741
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
1818
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
1742
1819
  function useNotice() {
1743
1820
  const [notice, setNotice] = useState3(null);
1744
1821
  useEffect5(() => {
@@ -1750,7 +1827,7 @@ function useNotice() {
1750
1827
  }
1751
1828
  function Notice({ notice }) {
1752
1829
  if (notice === null) return null;
1753
- return /* @__PURE__ */ jsx4("p", { className: notice.failed ? "mx-meet__panel-note mx-meet__collab-error" : "mx-meet__panel-note", role: "status", children: notice.text });
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 });
1754
1831
  }
1755
1832
  var ACTIVITY_LABELS = {
1756
1833
  polls: "Polls",
@@ -1760,10 +1837,10 @@ var ACTIVITY_LABELS = {
1760
1837
  };
1761
1838
  function ActivityIcon({ panel }) {
1762
1839
  const props = { width: 16, height: 16 };
1763
- if (panel === "polls") return /* @__PURE__ */ jsx4(PollIcon, { ...props });
1764
- if (panel === "qa") return /* @__PURE__ */ jsx4(QuestionIcon, { ...props });
1765
- if (panel === "whiteboard") return /* @__PURE__ */ jsx4(WhiteboardIcon, { ...props });
1766
- return /* @__PURE__ */ jsx4(BreakoutIcon, { ...props });
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 });
1767
1844
  }
1768
1845
  function ActivitiesControl({
1769
1846
  active,
@@ -1775,10 +1852,10 @@ function ActivitiesControl({
1775
1852
  if (available.length === 0) return null;
1776
1853
  return /* @__PURE__ */ jsxs2("span", { className: "mx-meet__anchor", children: [
1777
1854
  /* @__PURE__ */ jsxs2(ControlButton, { label: "Activities", active: open || active !== null, onClick: () => setOpen(!open), children: [
1778
- /* @__PURE__ */ jsx4(ActivitiesIcon, {}),
1779
- attention ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
1855
+ /* @__PURE__ */ jsx5(ActivitiesIcon, {}),
1856
+ attention ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
1780
1857
  ] }),
1781
- open ? /* @__PURE__ */ jsx4(Popover, { label: "Activities", onClose: () => setOpen(false), children: /* @__PURE__ */ jsx4("div", { className: "mx-meet__menu", role: "menu", children: available.map((panel) => /* @__PURE__ */ jsxs2(
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(
1782
1859
  MenuItem,
1783
1860
  {
1784
1861
  onSelect: () => {
@@ -1786,7 +1863,7 @@ function ActivitiesControl({
1786
1863
  onOpen(panel);
1787
1864
  },
1788
1865
  children: [
1789
- /* @__PURE__ */ jsx4(ActivityIcon, { panel }),
1866
+ /* @__PURE__ */ jsx5(ActivityIcon, { panel }),
1790
1867
  " ",
1791
1868
  ACTIVITY_LABELS[panel]
1792
1869
  ]
@@ -1834,8 +1911,8 @@ function PollComposer({ maxOptions, onDone }) {
1834
1911
  },
1835
1912
  children: [
1836
1913
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
1837
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Question" }),
1838
- /* @__PURE__ */ jsx4(
1914
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Question" }),
1915
+ /* @__PURE__ */ jsx5(
1839
1916
  "input",
1840
1917
  {
1841
1918
  className: "mx-meet__input",
@@ -1848,7 +1925,7 @@ function PollComposer({ maxOptions, onDone }) {
1848
1925
  )
1849
1926
  ] }),
1850
1927
  options.map((option, index) => /* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
1851
- /* @__PURE__ */ jsx4(
1928
+ /* @__PURE__ */ jsx5(
1852
1929
  "input",
1853
1930
  {
1854
1931
  className: "mx-meet__input",
@@ -1859,22 +1936,22 @@ function PollComposer({ maxOptions, onDone }) {
1859
1936
  onChange: (event) => setOptions(options.map((o, i) => i === index ? event.target.value : o))
1860
1937
  }
1861
1938
  ),
1862
- options.length > 2 ? /* @__PURE__ */ jsx4(ControlButton, { label: `Remove answer ${index + 1}`, onClick: () => setOptions(options.filter((_, i) => i !== index)), children: /* @__PURE__ */ jsx4(CloseIcon, { width: 14, height: 14 }) }) : null
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
1863
1940
  ] }, index)),
1864
- options.length < maxOptions ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
1941
+ options.length < maxOptions ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
1865
1942
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
1866
- /* @__PURE__ */ jsx4("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
1943
+ /* @__PURE__ */ jsx5("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
1867
1944
  "People can pick more than one"
1868
1945
  ] }),
1869
1946
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
1870
- /* @__PURE__ */ jsx4("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
1947
+ /* @__PURE__ */ jsx5("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
1871
1948
  "Anonymous \u2014 nobody sees who picked what"
1872
1949
  ] }),
1873
- /* @__PURE__ */ jsx4(Notice, { notice }),
1950
+ /* @__PURE__ */ jsx5(Notice, { notice }),
1874
1951
  /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
1875
- /* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__primary mx-meet__primary--small", disabled: !ready || busy, children: "Launch" }),
1876
- /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", disabled: !ready || busy, onClick: () => void save(false), children: "Save draft" }),
1877
- /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: onDone, children: "Cancel" })
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" })
1878
1955
  ] })
1879
1956
  ]
1880
1957
  }
@@ -1896,8 +1973,8 @@ function PollCard({ poll }) {
1896
1973
  };
1897
1974
  return /* @__PURE__ */ jsxs2("article", { className: "mx-meet__collab-card", "aria-label": poll.question, children: [
1898
1975
  /* @__PURE__ */ jsxs2("header", { className: "mx-meet__collab-head", children: [
1899
- /* @__PURE__ */ jsx4("strong", { className: "mx-meet__collab-title", children: poll.question }),
1900
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: stateWord })
1976
+ /* @__PURE__ */ jsx5("strong", { className: "mx-meet__collab-title", children: poll.question }),
1977
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-state", children: stateWord })
1901
1978
  ] }),
1902
1979
  /* @__PURE__ */ jsxs2("p", { className: "mx-meet__panel-note", children: [
1903
1980
  poll.multiple ? "Pick any." : "Pick one.",
@@ -1905,7 +1982,7 @@ function PollCard({ poll }) {
1905
1982
  counts && poll.voterCount !== null ? ` ${poll.voterCount} voted.` : "",
1906
1983
  isHost && poll.state !== "draft" && !poll.resultsShared ? " Results are visible only to hosts." : ""
1907
1984
  ] }),
1908
- /* @__PURE__ */ jsx4("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
1985
+ /* @__PURE__ */ jsx5("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
1909
1986
  const share = counts && total > 0 ? Math.round((option.votes ?? 0) / total * 100) : 0;
1910
1987
  const chosen = picked.includes(option.id);
1911
1988
  return /* @__PURE__ */ jsxs2("li", { children: [
@@ -1918,8 +1995,8 @@ function PollCard({ poll }) {
1918
1995
  disabled: !canVote,
1919
1996
  onClick: () => toggle(option.id),
1920
1997
  children: [
1921
- counts ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-bar", style: { width: `${share}%` }, "aria-hidden": "true" }) : null,
1922
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-text", children: option.text }),
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 }),
1923
2000
  counts ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__poll-count", children: [
1924
2001
  option.votes ?? 0,
1925
2002
  " \xB7 ",
@@ -1929,12 +2006,12 @@ function PollCard({ poll }) {
1929
2006
  ]
1930
2007
  }
1931
2008
  ),
1932
- option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
2009
+ option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
1933
2010
  ] }, option.id);
1934
2011
  }) }),
1935
- /* @__PURE__ */ jsx4(Notice, { notice }),
2012
+ /* @__PURE__ */ jsx5(Notice, { notice }),
1936
2013
  /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
1937
- canVote ? /* @__PURE__ */ jsx4(
2014
+ canVote ? /* @__PURE__ */ jsx5(
1938
2015
  "button",
1939
2016
  {
1940
2017
  type: "button",
@@ -1944,10 +2021,10 @@ function PollCard({ poll }) {
1944
2021
  children: voted ? "Change vote" : "Vote"
1945
2022
  }
1946
2023
  ) : null,
1947
- isHost && poll.state === "draft" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => void act({ action: "poll_launch", itemId: poll.id }).then(show), children: "Launch" }) : null,
1948
- isHost && poll.state === "live" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_close", itemId: poll.id }).then(show), children: "End poll" }) : null,
1949
- isHost && poll.state !== "draft" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_share", itemId: poll.id }).then(show), children: poll.resultsShared ? "Hide results" : "Share results" }) : null,
1950
- isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "poll_delete", itemId: poll.id }).then(show), children: "Delete" }) : null
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
1951
2028
  ] })
1952
2029
  ] });
1953
2030
  }
@@ -1958,11 +2035,11 @@ function PollsPanel({ onClose }) {
1958
2035
  const maxOptions = collab?.settings?.pollMaxOptions ?? 10;
1959
2036
  const ordered = [...polls].reverse();
1960
2037
  return /* @__PURE__ */ jsxs2(PanelShell, { title: "Polls", onClose, children: [
1961
- collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
1962
- isHost && !composing ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => setComposing(true), children: "New poll" }) : null,
1963
- isHost && composing ? /* @__PURE__ */ jsx4(PollComposer, { maxOptions, onDone: () => setComposing(false) }) : null,
1964
- ordered.length === 0 && !composing ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: isHost ? "No polls yet. Polls and their results are kept with the meeting." : "No polls yet." }) : null,
1965
- ordered.map((poll) => /* @__PURE__ */ jsx4(PollCard, { poll }, poll.id))
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))
1966
2043
  ] });
1967
2044
  }
1968
2045
  function QuestionCard({ question }) {
@@ -1982,18 +2059,18 @@ function QuestionCard({ question }) {
1982
2059
  disabled: question.state === "dismissed",
1983
2060
  onClick: () => void act({ action: "question_upvote", itemId: question.id }).then((r) => r.ok ? void 0 : show(r)),
1984
2061
  children: [
1985
- /* @__PURE__ */ jsx4(UpvoteIcon, { width: 16, height: 16 }),
1986
- /* @__PURE__ */ jsx4("span", { children: question.upvotes })
2062
+ /* @__PURE__ */ jsx5(UpvoteIcon, { width: 16, height: 16 }),
2063
+ /* @__PURE__ */ jsx5("span", { children: question.upvotes })
1987
2064
  ]
1988
2065
  }
1989
2066
  ),
1990
2067
  /* @__PURE__ */ jsxs2("div", { className: "mx-meet__question-body", children: [
1991
2068
  /* @__PURE__ */ jsxs2("span", { className: "mx-meet__chat-meta", children: [
1992
- /* @__PURE__ */ jsx4("strong", { children: question.mine ? "You" : question.askerName }),
1993
- question.mine && question.anonymous ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__chat-private", children: "anonymous" }) : null,
1994
- question.state !== "open" ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: question.state === "answered" ? "Answered" : "Dismissed" }) : null
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
1995
2072
  ] }),
1996
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__chat-text", children: question.text }),
2073
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-text", children: question.text }),
1997
2074
  question.answer !== null ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__question-answer", children: [
1998
2075
  /* @__PURE__ */ jsxs2("strong", { children: [
1999
2076
  question.answeredByName ?? "Host",
@@ -2019,7 +2096,7 @@ function QuestionCard({ question }) {
2019
2096
  });
2020
2097
  },
2021
2098
  children: [
2022
- /* @__PURE__ */ jsx4(
2099
+ /* @__PURE__ */ jsx5(
2023
2100
  "input",
2024
2101
  {
2025
2102
  className: "mx-meet__input",
@@ -2031,16 +2108,16 @@ function QuestionCard({ question }) {
2031
2108
  autoFocus: true
2032
2109
  }
2033
2110
  ),
2034
- /* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", children: "Done" })
2111
+ /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", children: "Done" })
2035
2112
  ]
2036
2113
  }
2037
2114
  ) : null,
2038
- /* @__PURE__ */ jsx4(Notice, { notice }),
2115
+ /* @__PURE__ */ jsx5(Notice, { notice }),
2039
2116
  isHost || question.mine ? /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-actions", children: [
2040
- isHost && question.state === "open" && !answering ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => setAnswering(true), children: "Answer" }) : null,
2041
- isHost && question.state === "open" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_dismiss", itemId: question.id }).then(show), children: "Dismiss" }) : null,
2042
- isHost && question.state !== "open" ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_reopen", itemId: question.id }).then(show), children: "Reopen" }) : null,
2043
- question.mine || isHost ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "question_delete", itemId: question.id }).then(show), children: "Delete" }) : null
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
2044
2121
  ] }) : null
2045
2122
  ] });
2046
2123
  }
@@ -2057,7 +2134,7 @@ function QaPanel({ onClose }) {
2057
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 ?? "")
2058
2135
  );
2059
2136
  return /* @__PURE__ */ jsxs2(PanelShell, { title: "Q&A", onClose, children: [
2060
- collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
2137
+ collab?.error != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
2061
2138
  /* @__PURE__ */ jsxs2(
2062
2139
  "form",
2063
2140
  {
@@ -2073,7 +2150,7 @@ function QaPanel({ onClose }) {
2073
2150
  },
2074
2151
  children: [
2075
2152
  /* @__PURE__ */ jsxs2("div", { className: "mx-meet__composer-row", children: [
2076
- /* @__PURE__ */ jsx4(
2153
+ /* @__PURE__ */ jsx5(
2077
2154
  "input",
2078
2155
  {
2079
2156
  className: "mx-meet__input",
@@ -2084,17 +2161,17 @@ function QaPanel({ onClose }) {
2084
2161
  "aria-label": "Ask the host a question"
2085
2162
  }
2086
2163
  ),
2087
- /* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
2164
+ /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
2088
2165
  ] }),
2089
2166
  allowAnonymous ? /* @__PURE__ */ jsxs2("label", { className: "mx-meet__toggle", children: [
2090
- /* @__PURE__ */ jsx4("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
2167
+ /* @__PURE__ */ jsx5("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
2091
2168
  "Ask anonymously"
2092
2169
  ] }) : null
2093
2170
  ]
2094
2171
  }
2095
2172
  ),
2096
- /* @__PURE__ */ jsx4(Notice, { notice }),
2097
- questions.length > 1 ? /* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "Order questions", children: ["popular", "recent"].map((value) => /* @__PURE__ */ jsx4(
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(
2098
2175
  "button",
2099
2176
  {
2100
2177
  type: "button",
@@ -2105,7 +2182,7 @@ function QaPanel({ onClose }) {
2105
2182
  },
2106
2183
  value
2107
2184
  )) }) : null,
2108
- questions.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "No questions yet. Questions are kept with the meeting." }) : /* @__PURE__ */ jsx4("ul", { className: "mx-meet__chat", children: questions.map((question) => /* @__PURE__ */ jsx4(QuestionCard, { question }, question.id)) })
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)) })
2109
2186
  ] });
2110
2187
  }
2111
2188
  var BOARD_W = 1600;
@@ -2119,7 +2196,7 @@ function strokePath(points) {
2119
2196
  return `${move} ${rest.map(([x, y]) => `L${(x * BOARD_W).toFixed(1)} ${(y * BOARD_H).toFixed(1)}`).join(" ")}`;
2120
2197
  }
2121
2198
  function StrokeView({ stroke, onPick }) {
2122
- return /* @__PURE__ */ jsx4(
2199
+ return /* @__PURE__ */ jsx5(
2123
2200
  "path",
2124
2201
  {
2125
2202
  d: strokePath(stroke.points),
@@ -2131,7 +2208,7 @@ function StrokeView({ stroke, onPick }) {
2131
2208
  strokeLinejoin: "round",
2132
2209
  onPointerDown: onPick,
2133
2210
  style: onPick !== void 0 ? { cursor: "pointer" } : void 0,
2134
- children: /* @__PURE__ */ jsx4("title", { children: stroke.byName })
2211
+ children: /* @__PURE__ */ jsx5("title", { children: stroke.byName })
2135
2212
  }
2136
2213
  );
2137
2214
  }
@@ -2176,12 +2253,12 @@ function WhiteboardPanel({ onClose }) {
2176
2253
  };
2177
2254
  return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__whiteboard", "aria-label": "Whiteboard", children: [
2178
2255
  /* @__PURE__ */ jsxs2("header", { className: "mx-meet__whiteboard-bar", children: [
2179
- /* @__PURE__ */ jsx4("strong", { className: "mx-meet__panel-title", children: "Whiteboard" }),
2180
- /* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "Tool", children: [
2181
- ["pen", "Pen", /* @__PURE__ */ jsx4(PencilIcon, { width: 16, height: 16 }, "p")],
2182
- ["highlighter", "Highlighter", /* @__PURE__ */ jsx4(HighlighterIcon, { width: 16, height: 16 }, "h")],
2183
- ["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ jsx4(EraserIcon, { width: 16, height: 16 }, "e")]
2184
- ].map(([value, label, icon]) => /* @__PURE__ */ jsx4(
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(
2185
2262
  "button",
2186
2263
  {
2187
2264
  type: "button",
@@ -2194,7 +2271,7 @@ function WhiteboardPanel({ onClose }) {
2194
2271
  },
2195
2272
  value
2196
2273
  )) }),
2197
- /* @__PURE__ */ jsx4("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ jsx4(
2274
+ /* @__PURE__ */ jsx5("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ jsx5(
2198
2275
  "button",
2199
2276
  {
2200
2277
  type: "button",
@@ -2209,7 +2286,7 @@ function WhiteboardPanel({ onClose }) {
2209
2286
  },
2210
2287
  ink
2211
2288
  )) }),
2212
- /* @__PURE__ */ jsx4(
2289
+ /* @__PURE__ */ jsx5(
2213
2290
  ControlButton,
2214
2291
  {
2215
2292
  label: "Undo my last stroke",
@@ -2217,14 +2294,14 @@ function WhiteboardPanel({ onClose }) {
2217
2294
  const last = mine[mine.length - 1];
2218
2295
  if (last !== void 0) void act({ action: "stroke_erase", itemId: last.id }).then((r) => r.ok ? void 0 : show(r));
2219
2296
  },
2220
- children: /* @__PURE__ */ jsx4(UndoIcon, { width: 16, height: 16 })
2297
+ children: /* @__PURE__ */ jsx5(UndoIcon, { width: 16, height: 16 })
2221
2298
  }
2222
2299
  ),
2223
- isHost && strokes.length > 0 ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "whiteboard_clear" }).then(show), children: "Clear board" }) : null,
2224
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__whiteboard-note", children: "Saved with the meeting" }),
2225
- /* @__PURE__ */ jsx4(ControlButton, { label: "Close whiteboard", onClick: onClose, children: /* @__PURE__ */ jsx4(CloseIcon, { width: 16, height: 16 }) })
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 }) })
2226
2303
  ] }),
2227
- /* @__PURE__ */ jsx4(Notice, { notice }),
2304
+ /* @__PURE__ */ jsx5(Notice, { notice }),
2228
2305
  /* @__PURE__ */ jsxs2(
2229
2306
  "svg",
2230
2307
  {
@@ -2249,8 +2326,8 @@ function WhiteboardPanel({ onClose }) {
2249
2326
  onPointerUp: finish,
2250
2327
  onPointerCancel: finish,
2251
2328
  children: [
2252
- /* @__PURE__ */ jsx4("rect", { x: 0, y: 0, width: BOARD_W, height: BOARD_H, className: "mx-meet__board-paper" }),
2253
- strokes.map((stroke) => /* @__PURE__ */ jsx4(
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(
2254
2331
  StrokeView,
2255
2332
  {
2256
2333
  stroke,
@@ -2258,8 +2335,8 @@ function WhiteboardPanel({ onClose }) {
2258
2335
  },
2259
2336
  stroke.id
2260
2337
  )),
2261
- pending.map((stroke) => /* @__PURE__ */ jsx4(StrokeView, { stroke }, stroke.id)),
2262
- drawing !== null ? /* @__PURE__ */ jsx4(
2338
+ pending.map((stroke) => /* @__PURE__ */ jsx5(StrokeView, { stroke }, stroke.id)),
2339
+ drawing !== null ? /* @__PURE__ */ jsx5(
2263
2340
  StrokeView,
2264
2341
  {
2265
2342
  stroke: {
@@ -2316,8 +2393,8 @@ function BreakoutSetup() {
2316
2393
  const nameOf = (identity) => people.find((p) => p.identity === identity)?.displayName ?? identity;
2317
2394
  return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-card", children: [
2318
2395
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
2319
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Rooms" }),
2320
- /* @__PURE__ */ jsx4(
2396
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Rooms" }),
2397
+ /* @__PURE__ */ jsx5(
2321
2398
  "input",
2322
2399
  {
2323
2400
  className: "mx-meet__input",
@@ -2329,11 +2406,11 @@ function BreakoutSetup() {
2329
2406
  }
2330
2407
  )
2331
2408
  ] }),
2332
- /* @__PURE__ */ jsx4("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
2409
+ /* @__PURE__ */ jsx5("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
2333
2410
  ["auto", "Automatically"],
2334
2411
  ["manual", "Manually"],
2335
2412
  ["choose", "Let people choose"]
2336
- ].map(([value, label]) => /* @__PURE__ */ jsx4(
2413
+ ].map(([value, label]) => /* @__PURE__ */ jsx5(
2337
2414
  "button",
2338
2415
  {
2339
2416
  type: "button",
@@ -2345,8 +2422,8 @@ function BreakoutSetup() {
2345
2422
  value
2346
2423
  )) }),
2347
2424
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
2348
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
2349
- /* @__PURE__ */ jsx4(
2425
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
2426
+ /* @__PURE__ */ jsx5(
2350
2427
  "input",
2351
2428
  {
2352
2429
  className: "mx-meet__input",
@@ -2358,8 +2435,8 @@ function BreakoutSetup() {
2358
2435
  }
2359
2436
  )
2360
2437
  ] }),
2361
- mode === "manual" ? people.length === 0 ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Nobody else is in the meeting yet." }) : /* @__PURE__ */ jsx4("ul", { className: "mx-meet__people", children: people.map((person) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
2362
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__person-name", children: person.displayName }),
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 }),
2363
2440
  /* @__PURE__ */ jsxs2(
2364
2441
  "select",
2365
2442
  {
@@ -2368,7 +2445,7 @@ function BreakoutSetup() {
2368
2445
  value: manual[person.identity] ?? -1,
2369
2446
  onChange: (event) => setManual({ ...manual, [person.identity]: Number(event.target.value) }),
2370
2447
  children: [
2371
- /* @__PURE__ */ jsx4("option", { value: -1, children: "Main room" }),
2448
+ /* @__PURE__ */ jsx5("option", { value: -1, children: "Main room" }),
2372
2449
  Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ jsxs2("option", { value: index, children: [
2373
2450
  "Room ",
2374
2451
  index + 1
@@ -2376,15 +2453,15 @@ function BreakoutSetup() {
2376
2453
  ]
2377
2454
  }
2378
2455
  )
2379
- ] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ jsx4("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ jsxs2("li", { children: [
2456
+ ] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ jsx5("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ jsxs2("li", { children: [
2380
2457
  /* @__PURE__ */ jsxs2("strong", { children: [
2381
2458
  "Room ",
2382
2459
  index + 1
2383
2460
  ] }),
2384
2461
  " ",
2385
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__panel-note", children: members.length === 0 ? "empty" : members.map(nameOf).join(", ") })
2386
- ] }, index)) }) : /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Everyone picks a room from their own screen." }),
2387
- /* @__PURE__ */ jsx4(Notice, { notice }),
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 }),
2388
2465
  /* @__PURE__ */ jsxs2(
2389
2466
  "button",
2390
2467
  {
@@ -2439,17 +2516,17 @@ function BreakoutRun({ plan }) {
2439
2516
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
2440
2517
  plan.allowChoose ? " \xB7 people choose their room" : ""
2441
2518
  ] }),
2442
- /* @__PURE__ */ jsx4("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
2519
+ /* @__PURE__ */ jsx5("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
2443
2520
  const here = breakoutRoomId === room.id;
2444
2521
  const mayJoin = isHost || plan.allowChoose || mine?.id === room.id;
2445
2522
  return /* @__PURE__ */ jsxs2("li", { className: here ? "mx-meet__breakout-room mx-meet__breakout-room--here" : "mx-meet__breakout-room", children: [
2446
2523
  /* @__PURE__ */ jsxs2("div", { className: "mx-meet__collab-head", children: [
2447
- /* @__PURE__ */ jsx4("strong", { children: room.name }),
2448
- here ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-state", children: "You are here" }) : mayJoin ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(room.id), children: "Join" }) : null
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
2449
2526
  ] }),
2450
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__panel-note", children: room.identities.length === 0 ? "Nobody assigned" : room.identities.map(nameOf).join(", ") }),
2451
- isHost && room.identities.length > 0 ? /* @__PURE__ */ jsx4("ul", { className: "mx-meet__people", children: room.identities.map((identity) => /* @__PURE__ */ jsxs2("li", { className: "mx-meet__person", children: [
2452
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__person-name", children: nameOf(identity) }),
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) }),
2453
2530
  /* @__PURE__ */ jsxs2(
2454
2531
  "select",
2455
2532
  {
@@ -2462,15 +2539,15 @@ function BreakoutRun({ plan }) {
2462
2539
  roomId: event.target.value === "" ? null : event.target.value
2463
2540
  }).then(show),
2464
2541
  children: [
2465
- /* @__PURE__ */ jsx4("option", { value: "", children: "Main room" }),
2466
- plan.rooms.map((option) => /* @__PURE__ */ jsx4("option", { value: option.id, children: option.name }, option.id))
2542
+ /* @__PURE__ */ jsx5("option", { value: "", children: "Main room" }),
2543
+ plan.rooms.map((option) => /* @__PURE__ */ jsx5("option", { value: option.id, children: option.name }, option.id))
2467
2544
  ]
2468
2545
  }
2469
2546
  )
2470
2547
  ] }, identity)) }) : null
2471
2548
  ] }, room.id);
2472
2549
  }) }),
2473
- breakoutRoomId !== null ? /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
2550
+ breakoutRoomId !== null ? /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
2474
2551
  isHost ? /* @__PURE__ */ jsxs2(
2475
2552
  "form",
2476
2553
  {
@@ -2485,7 +2562,7 @@ function BreakoutRun({ plan }) {
2485
2562
  });
2486
2563
  },
2487
2564
  children: [
2488
- /* @__PURE__ */ jsx4(
2565
+ /* @__PURE__ */ jsx5(
2489
2566
  "input",
2490
2567
  {
2491
2568
  className: "mx-meet__input",
@@ -2496,12 +2573,12 @@ function BreakoutRun({ plan }) {
2496
2573
  "aria-label": "Message every room"
2497
2574
  }
2498
2575
  ),
2499
- /* @__PURE__ */ jsx4("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
2576
+ /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
2500
2577
  ]
2501
2578
  }
2502
2579
  ) : null,
2503
- /* @__PURE__ */ jsx4(Notice, { notice }),
2504
- isHost ? /* @__PURE__ */ jsx4(
2580
+ /* @__PURE__ */ jsx5(Notice, { notice }),
2581
+ isHost ? /* @__PURE__ */ jsx5(
2505
2582
  "button",
2506
2583
  {
2507
2584
  type: "button",
@@ -2516,8 +2593,8 @@ function BreakoutsPanel({ onClose }) {
2516
2593
  const { collab, isHost } = useCollab();
2517
2594
  const plan = collab?.breakout?.state === "open" ? collab.breakout : null;
2518
2595
  return /* @__PURE__ */ jsxs2(PanelShell, { title: "Breakout rooms", onClose, children: [
2519
- collab?.error != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
2520
- plan !== null ? /* @__PURE__ */ jsx4(BreakoutRun, { plan }) : isHost ? /* @__PURE__ */ jsx4(BreakoutSetup, {}) : /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note", children: "Breakout rooms are closed." })
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." })
2521
2598
  ] });
2522
2599
  }
2523
2600
  function BreakoutBanner() {
@@ -2552,16 +2629,16 @@ function BreakoutBanner() {
2552
2629
  const room = open?.rooms.find((r) => r.id === breakoutRoomId) ?? null;
2553
2630
  if (open === null && failure === null) return null;
2554
2631
  return /* @__PURE__ */ jsxs2("div", { className: "mx-meet__breakout-banner", role: "status", children: [
2555
- failure !== null ? /* @__PURE__ */ jsx4("span", { className: "mx-meet__collab-error", children: failure }) : null,
2632
+ failure !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__collab-error", children: failure }) : null,
2556
2633
  room !== null ? /* @__PURE__ */ jsxs2("span", { children: [
2557
- /* @__PURE__ */ jsx4("strong", { children: room.name }),
2634
+ /* @__PURE__ */ jsx5("strong", { children: room.name }),
2558
2635
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
2559
- /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
2636
+ /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
2560
2637
  ] }) : assigned !== null ? /* @__PURE__ */ jsxs2("span", { children: [
2561
2638
  "You are assigned to ",
2562
- /* @__PURE__ */ jsx4("strong", { children: assigned.name }),
2639
+ /* @__PURE__ */ jsx5("strong", { children: assigned.name }),
2563
2640
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
2564
- /* @__PURE__ */ jsx4(
2641
+ /* @__PURE__ */ jsx5(
2565
2642
  "button",
2566
2643
  {
2567
2644
  type: "button",
@@ -2573,7 +2650,7 @@ function BreakoutBanner() {
2573
2650
  children: "Join"
2574
2651
  }
2575
2652
  )
2576
- ] }) : open?.allowChoose ? /* @__PURE__ */ jsx4("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
2653
+ ] }) : open?.allowChoose ? /* @__PURE__ */ jsx5("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
2577
2654
  showBroadcast ? /* @__PURE__ */ jsxs2("span", { className: "mx-meet__breakout-broadcast", children: [
2578
2655
  /* @__PURE__ */ jsxs2("strong", { children: [
2579
2656
  broadcast.by,
@@ -2581,7 +2658,7 @@ function BreakoutBanner() {
2581
2658
  ] }),
2582
2659
  " ",
2583
2660
  broadcast.text,
2584
- /* @__PURE__ */ jsx4("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
2661
+ /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
2585
2662
  ] }) : null
2586
2663
  ] });
2587
2664
  }
@@ -2597,7 +2674,7 @@ function CaptionLanguageSettings() {
2597
2674
  const choices = CAPTION_LANGUAGES.some((l) => l.tag === preferred) ? CAPTION_LANGUAGES : [{ tag: preferred, name: preferred }, ...CAPTION_LANGUAGES];
2598
2675
  return /* @__PURE__ */ jsxs2("section", { className: "mx-meet__section", "aria-label": "Captions", children: [
2599
2676
  /* @__PURE__ */ jsxs2("label", { className: "mx-meet__field", children: [
2600
- /* @__PURE__ */ jsx4("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
2677
+ /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
2601
2678
  /* @__PURE__ */ jsxs2(
2602
2679
  "select",
2603
2680
  {
@@ -2608,29 +2685,29 @@ function CaptionLanguageSettings() {
2608
2685
  setCaptionLanguage(host.store, next);
2609
2686
  },
2610
2687
  children: [
2611
- /* @__PURE__ */ jsx4("option", { value: "", children: "Off \u2014 as spoken" }),
2688
+ /* @__PURE__ */ jsx5("option", { value: "", children: "Off \u2014 as spoken" }),
2612
2689
  current === "" ? /* @__PURE__ */ jsxs2("option", { value: preferred, children: [
2613
2690
  choices.find((c) => c.tag === preferred)?.name ?? preferred,
2614
2691
  " (yours)"
2615
2692
  ] }) : null,
2616
- choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ jsx4("option", { value: choice.tag, children: choice.name }, choice.tag))
2693
+ choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ jsx5("option", { value: choice.tag, children: choice.name }, choice.tag))
2617
2694
  ]
2618
2695
  }
2619
2696
  )
2620
2697
  ] }),
2621
- collab?.captionTranslationError != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
2698
+ collab?.captionTranslationError != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
2622
2699
  ] });
2623
2700
  }
2624
2701
 
2625
2702
  // src/skins/meet/components.tsx
2626
- import { Fragment, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
2703
+ import { Fragment, jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
2627
2704
  function InertNotice({ what }) {
2628
2705
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__empty", role: "status", children: [
2629
2706
  /* @__PURE__ */ jsxs3("p", { className: "mx-meet__empty-title", children: [
2630
2707
  what,
2631
2708
  " is not ready yet"
2632
2709
  ] }),
2633
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: "Calls and meetings need a signed-in identity and an active organization. This will appear as soon as they resolve." })
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." })
2634
2711
  ] });
2635
2712
  }
2636
2713
  function Avatar({
@@ -2640,7 +2717,7 @@ function Avatar({
2640
2717
  }) {
2641
2718
  const tint = avatarPaletteIndex(name);
2642
2719
  if (url != null && url.length > 0) {
2643
- return /* @__PURE__ */ jsx5(
2720
+ return /* @__PURE__ */ jsx6(
2644
2721
  "img",
2645
2722
  {
2646
2723
  className: "mx-meet__avatar",
@@ -2652,7 +2729,7 @@ function Avatar({
2652
2729
  }
2653
2730
  );
2654
2731
  }
2655
- return /* @__PURE__ */ jsx5(
2732
+ return /* @__PURE__ */ jsx6(
2656
2733
  "span",
2657
2734
  {
2658
2735
  className: "mx-meet__avatar mx-meet__avatar--initials",
@@ -2674,7 +2751,7 @@ function ControlButton({
2674
2751
  onClick,
2675
2752
  children
2676
2753
  }) {
2677
- return /* @__PURE__ */ jsx5(
2754
+ return /* @__PURE__ */ jsx6(
2678
2755
  "button",
2679
2756
  {
2680
2757
  type: "button",
@@ -2700,7 +2777,7 @@ function RecordingIndicator() {
2700
2777
  role: "status",
2701
2778
  "aria-live": "polite",
2702
2779
  children: [
2703
- /* @__PURE__ */ jsx5(RecordIcon, { width: 10, height: 10 }),
2780
+ /* @__PURE__ */ jsx6(RecordIcon, { width: 10, height: 10 }),
2704
2781
  label
2705
2782
  ]
2706
2783
  }
@@ -2708,15 +2785,16 @@ function RecordingIndicator() {
2708
2785
  }
2709
2786
  function ConnectionDot({ quality }) {
2710
2787
  if (quality === "excellent" || quality === "good" || quality === "unknown") return null;
2711
- return /* @__PURE__ */ jsx5("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ jsx5(WifiLowIcon, { width: 14, height: 14 }) });
2788
+ return /* @__PURE__ */ jsx6("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ jsx6(WifiLowIcon, { width: 14, height: 14 }) });
2712
2789
  }
2713
2790
  function RoleBadge({
2714
2791
  role,
2715
2792
  standing
2716
2793
  }) {
2717
- if (role === "host") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Host" });
2718
- if (role === "cohost") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Co-host" });
2719
- if (isLinkFollower(standing)) return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Guest" });
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" });
2720
2798
  return null;
2721
2799
  }
2722
2800
  function ParticipantTile({
@@ -2746,7 +2824,7 @@ function ParticipantTile({
2746
2824
  "data-identity": participant.identity,
2747
2825
  ...participantAttributes(participant),
2748
2826
  children: [
2749
- showVideo ? /* @__PURE__ */ jsx5(
2827
+ showVideo ? /* @__PURE__ */ jsx6(
2750
2828
  "video",
2751
2829
  {
2752
2830
  ref: videoRef,
@@ -2755,43 +2833,43 @@ function ParticipantTile({
2755
2833
  playsInline: true,
2756
2834
  muted: participant.isLocal
2757
2835
  }
2758
- ) : /* @__PURE__ */ jsx5("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
2836
+ ) : /* @__PURE__ */ jsx6("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx6(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
2759
2837
  participant.handRaised ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-hand", title: `Hand raised \xB7 ${ordinal(handPosition)} in line`, children: [
2760
- /* @__PURE__ */ jsx5(HandIcon, { width: 14, height: 14 }),
2838
+ /* @__PURE__ */ jsx6(HandIcon, { width: 14, height: 14 }),
2761
2839
  handPosition > 0 ? handPosition : null
2762
2840
  ] }) : null,
2763
2841
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__tile-bar", children: [
2764
2842
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__tile-name", children: [
2765
- spotlit ? /* @__PURE__ */ jsx5("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ jsx5(SpotlightIcon, { width: 12, height: 12 }) }) : null,
2843
+ spotlit ? /* @__PURE__ */ jsx6("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ jsx6(SpotlightIcon, { width: 12, height: 12 }) }) : null,
2766
2844
  participant.displayName,
2767
2845
  participant.isLocal ? " (you)" : "",
2768
- participant.isAgent ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "AI" }) : null,
2769
- /* @__PURE__ */ jsx5(RoleBadge, { role: participant.role, standing: participant.standing })
2846
+ participant.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "AI" }) : null,
2847
+ /* @__PURE__ */ jsx6(RoleBadge, { role: participant.role, standing: participant.standing })
2770
2848
  ] }),
2771
- !participant.micEnabled ? /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }) : null,
2772
- /* @__PURE__ */ jsx5(QualityBars, { quality: participant.quality })
2849
+ !participant.micEnabled ? /* @__PURE__ */ jsx6(MicOffIcon, { width: 14, height: 14 }) : null,
2850
+ /* @__PURE__ */ jsx6(QualityBars, { quality: participant.quality })
2773
2851
  ] }),
2774
2852
  /* @__PURE__ */ jsxs3("div", { className: menu ? "mx-meet__tile-actions mx-meet__tile-actions--open" : "mx-meet__tile-actions", children: [
2775
- /* @__PURE__ */ jsx5(
2853
+ /* @__PURE__ */ jsx6(
2776
2854
  ControlButton,
2777
2855
  {
2778
2856
  label: pinnedHere ? "Unpin" : `Pin ${participant.displayName} for me`,
2779
2857
  active: pinnedHere,
2780
2858
  onClick: () => host?.engine.pin(pinnedHere ? null : participant.identity),
2781
- children: /* @__PURE__ */ jsx5(PinIcon, { width: 16, height: 16 })
2859
+ children: /* @__PURE__ */ jsx6(PinIcon, { width: 16, height: 16 })
2782
2860
  }
2783
2861
  ),
2784
2862
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
2785
- /* @__PURE__ */ jsx5(
2863
+ /* @__PURE__ */ jsx6(
2786
2864
  ControlButton,
2787
2865
  {
2788
2866
  label: `More for ${participant.displayName}`,
2789
2867
  active: menu,
2790
2868
  onClick: () => setMenu(!menu),
2791
- children: /* @__PURE__ */ jsx5(MoreIcon, { width: 16, height: 16 })
2869
+ children: /* @__PURE__ */ jsx6(MoreIcon, { width: 16, height: 16 })
2792
2870
  }
2793
2871
  ),
2794
- menu ? /* @__PURE__ */ jsx5(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
2872
+ menu ? /* @__PURE__ */ jsx6(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
2795
2873
  ] })
2796
2874
  ] })
2797
2875
  ]
@@ -2807,25 +2885,25 @@ function QualityBars({ quality }) {
2807
2885
  if (quality === "unknown") return null;
2808
2886
  const bars = quality === "excellent" ? 3 : quality === "good" ? 2 : quality === "poor" ? 1 : 0;
2809
2887
  const label = quality === "lost" ? "Connection lost" : quality === "poor" ? "Poor connection" : `Connection ${quality}`;
2810
- return /* @__PURE__ */ jsx5("span", { className: `mx-meet__signal mx-meet__signal--${quality}`, title: label, "aria-label": label, role: "img", children: /* @__PURE__ */ jsx5(SignalIcon, { bars, width: 14, height: 14 }) });
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 }) });
2811
2889
  }
2812
2890
  function Stage({ pageSize }) {
2813
2891
  const stage = useStage(pageSize);
2814
2892
  const columns = gridColumns(stage.tiles.length);
2815
2893
  if (stage.feature === null && stage.tiles.length === 0) {
2816
2894
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__stage mx-meet__stage--empty", children: [
2817
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-title", children: "Waiting for others to join" }),
2818
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: "Share the meeting link and people can join from anywhere \u2014 no account needed." })
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." })
2819
2897
  ] });
2820
2898
  }
2821
2899
  return /* @__PURE__ */ jsxs3("div", { className: `mx-meet__stage${stage.feature !== null ? " mx-meet__stage--speaker" : ""}`, children: [
2822
- stage.feature !== null ? /* @__PURE__ */ jsx5(ParticipantTile, { participant: stage.feature, featured: true }) : null,
2823
- /* @__PURE__ */ jsx5(
2900
+ stage.feature !== null ? /* @__PURE__ */ jsx6(ParticipantTile, { participant: stage.feature, featured: true }) : null,
2901
+ /* @__PURE__ */ jsx6(
2824
2902
  "div",
2825
2903
  {
2826
2904
  className: "mx-meet__grid",
2827
2905
  style: { "--mx-meet-columns": columns },
2828
- children: stage.tiles.map((participant) => /* @__PURE__ */ jsx5(ParticipantTile, { participant }, participant.identity))
2906
+ children: stage.tiles.map((participant) => /* @__PURE__ */ jsx6(ParticipantTile, { participant }, participant.identity))
2829
2907
  }
2830
2908
  ),
2831
2909
  stage.overflow > 0 ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__overflow", children: [
@@ -2851,6 +2929,13 @@ function ControlBar({ onLeave }) {
2851
2929
  const micUnavailable = useLocalMedia().microphone.unavailable;
2852
2930
  const unread = useUnreadChat(panel === "chat");
2853
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]);
2854
2939
  const toggle = (next) => setPanel(panel === next ? "none" : next);
2855
2940
  const openActivity = (activity) => {
2856
2941
  if (activity === "whiteboard") setWhiteboard(true);
@@ -2878,10 +2963,10 @@ function ControlBar({ onLeave }) {
2878
2963
  });
2879
2964
  const hasSpotlight = snapshot?.spotlight !== null && snapshot?.spotlight !== void 0;
2880
2965
  return /* @__PURE__ */ jsxs3(Fragment, { children: [
2881
- /* @__PURE__ */ jsx5(MeetingOverlays, {}),
2882
- shortcuts ? /* @__PURE__ */ jsx5(ShortcutsSheet, { onClose: () => setShortcuts(false) }) : null,
2883
- panel === "chat" ? /* @__PURE__ */ jsx5(ChatPanel, { onClose: () => setPanel("none"), to: chatTo, onTo: setChatTo }) : null,
2884
- panel === "people" ? /* @__PURE__ */ jsx5(
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(
2885
2970
  PeoplePanel,
2886
2971
  {
2887
2972
  onClose: () => setPanel("none"),
@@ -2891,53 +2976,61 @@ function ControlBar({ onLeave }) {
2891
2976
  }
2892
2977
  }
2893
2978
  ) : null,
2894
- panel === "ai" ? /* @__PURE__ */ jsx5(AiPanel, { onClose: () => setPanel("none") }) : null,
2895
- panel === "settings" ? /* @__PURE__ */ jsx5(SettingsPanel, { onClose: () => setPanel("none") }) : null,
2896
- panel === "polls" ? /* @__PURE__ */ jsx5(PollsPanel, { onClose: () => setPanel("none") }) : null,
2897
- panel === "qa" ? /* @__PURE__ */ jsx5(QaPanel, { onClose: () => setPanel("none") }) : null,
2898
- panel === "breakouts" ? /* @__PURE__ */ jsx5(BreakoutsPanel, { onClose: () => setPanel("none") }) : null,
2899
- whiteboard ? /* @__PURE__ */ jsx5(WhiteboardPanel, { onClose: () => setWhiteboard(false) }) : null,
2900
- /* @__PURE__ */ jsx5(BreakoutBanner, {}),
2901
- controls.notice !== null && panel !== "people" ? /* @__PURE__ */ jsx5(Toast, { text: controls.notice.text, failed: controls.notice.failed, onDone: controls.clearNotice }) : null,
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,
2902
2995
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__controls", children: [
2903
- /* @__PURE__ */ jsx5(
2996
+ /* @__PURE__ */ jsx6(
2904
2997
  ControlButton,
2905
2998
  {
2906
2999
  label: micUnavailable !== null ? `Unmute \u2014 ${micUnavailable.remedy}` : room.local?.micEnabled === true ? "Mute (\u2318D)" : "Unmute (\u2318D)",
2907
3000
  active: room.local?.micEnabled === true,
2908
3001
  onClick: () => void room.toggleMicrophone(),
2909
- children: room.local?.micEnabled === true ? /* @__PURE__ */ jsx5(MicIcon, {}) : /* @__PURE__ */ jsx5(MicOffIcon, {})
3002
+ children: room.local?.micEnabled === true ? /* @__PURE__ */ jsx6(MicIcon, {}) : /* @__PURE__ */ jsx6(MicOffIcon, {})
2910
3003
  }
2911
3004
  ),
2912
- /* @__PURE__ */ jsx5(
3005
+ /* @__PURE__ */ jsx6(
2913
3006
  ControlButton,
2914
3007
  {
2915
3008
  label: room.local?.cameraEnabled === true ? "Stop video (\u2318E)" : "Start video (\u2318E)",
2916
3009
  active: room.local?.cameraEnabled === true,
2917
3010
  onClick: () => void room.toggleCamera(),
2918
- children: room.local?.cameraEnabled === true ? /* @__PURE__ */ jsx5(CameraIcon, {}) : /* @__PURE__ */ jsx5(CameraOffIcon, {})
3011
+ children: room.local?.cameraEnabled === true ? /* @__PURE__ */ jsx6(CameraIcon, {}) : /* @__PURE__ */ jsx6(CameraOffIcon, {})
2919
3012
  }
2920
3013
  ),
2921
- room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ jsx5(
3014
+ room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ jsx6(
2922
3015
  ControlButton,
2923
3016
  {
2924
3017
  label: room.local?.screenSharing === true ? "Stop sharing" : "Share screen",
2925
3018
  active: room.local?.screenSharing === true,
2926
3019
  onClick: () => void room.toggleScreenShare(),
2927
- children: /* @__PURE__ */ jsx5(ScreenShareIcon, {})
3020
+ children: /* @__PURE__ */ jsx6(ScreenShareIcon, {})
2928
3021
  }
2929
3022
  ) : null,
2930
3023
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
2931
- /* @__PURE__ */ jsx5(
3024
+ /* @__PURE__ */ jsx6(
2932
3025
  ControlButton,
2933
3026
  {
2934
3027
  label: "Send a reaction",
2935
3028
  active: popover === "reactions",
2936
3029
  onClick: () => setPopover(popover === "reactions" ? "none" : "reactions"),
2937
- children: /* @__PURE__ */ jsx5(SmileIcon, {})
3030
+ children: /* @__PURE__ */ jsx6(SmileIcon, {})
2938
3031
  }
2939
3032
  ),
2940
- popover === "reactions" ? /* @__PURE__ */ jsx5(Popover, { label: "Reactions", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsx5("div", { className: "mx-meet__emoji-bar", children: MEET_REACTIONS.map((emoji) => /* @__PURE__ */ jsx5(
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(
2941
3034
  "button",
2942
3035
  {
2943
3036
  type: "button",
@@ -2949,18 +3042,19 @@ function ControlBar({ onLeave }) {
2949
3042
  emoji
2950
3043
  )) }) }) : null
2951
3044
  ] }),
2952
- /* @__PURE__ */ jsx5(
3045
+ /* @__PURE__ */ jsx6(
2953
3046
  ControlButton,
2954
3047
  {
2955
3048
  label: room.local?.handRaised === true ? "Lower hand (\u2318\u2325H)" : "Raise hand (\u2318\u2325H)",
2956
3049
  active: room.local?.handRaised === true,
2957
3050
  onClick: () => void room.toggleHand(),
2958
- children: /* @__PURE__ */ jsx5(HandIcon, {})
3051
+ children: /* @__PURE__ */ jsx6(HandIcon, {})
2959
3052
  }
2960
3053
  ),
3054
+ app !== null ? /* @__PURE__ */ jsx6(ControlButton, { label: app.title, active: panel === "app", onClick: () => toggle("app"), children: /* @__PURE__ */ jsx6(FlagIcon, {}) }) : null,
2961
3055
  /* @__PURE__ */ jsxs3(ControlButton, { label: "Chat (\u2318\u2325C)", active: panel === "chat", onClick: () => toggle("chat"), children: [
2962
- /* @__PURE__ */ jsx5(ChatIcon, {}),
2963
- unread > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
3056
+ /* @__PURE__ */ jsx6(ChatIcon, {}),
3057
+ unread > 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
2964
3058
  ] }),
2965
3059
  /* @__PURE__ */ jsxs3(
2966
3060
  ControlButton,
@@ -2969,32 +3063,32 @@ function ControlBar({ onLeave }) {
2969
3063
  active: panel === "people",
2970
3064
  onClick: () => toggle("people"),
2971
3065
  children: [
2972
- /* @__PURE__ */ jsx5(PeopleIcon, {}),
2973
- lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
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
2974
3068
  ]
2975
3069
  }
2976
3070
  ),
2977
- /* @__PURE__ */ jsx5(
3071
+ /* @__PURE__ */ jsx6(
2978
3072
  ActivitiesControl,
2979
3073
  {
2980
3074
  active: whiteboard ? "whiteboard" : panel === "polls" || panel === "qa" || panel === "breakouts" ? panel : null,
2981
3075
  onOpen: openActivity
2982
3076
  }
2983
3077
  ),
2984
- /* @__PURE__ */ jsx5(AiControl, { active: panel === "ai", onToggle: () => toggle("ai") }),
2985
- recording.canStart ? /* @__PURE__ */ jsx5(ControlButton, { label: "Start recording", onClick: () => void recording.start(), children: /* @__PURE__ */ jsx5(RecordIcon, {}) }) : null,
2986
- recording.canStop ? /* @__PURE__ */ jsx5(ControlButton, { label: "Stop recording", active: true, onClick: () => void recording.stop(), children: /* @__PURE__ */ jsx5(RecordIcon, {}) }) : null,
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,
2987
3081
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
2988
- /* @__PURE__ */ jsx5(
3082
+ /* @__PURE__ */ jsx6(
2989
3083
  ControlButton,
2990
3084
  {
2991
3085
  label: "More options",
2992
3086
  active: popover === "more" || panel === "settings",
2993
3087
  onClick: () => setPopover(popover === "more" ? "none" : "more"),
2994
- children: /* @__PURE__ */ jsx5(MoreIcon, {})
3088
+ children: /* @__PURE__ */ jsx6(MoreIcon, {})
2995
3089
  }
2996
3090
  ),
2997
- popover === "more" ? /* @__PURE__ */ jsx5(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
3091
+ popover === "more" ? /* @__PURE__ */ jsx6(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
2998
3092
  /* @__PURE__ */ jsxs3(
2999
3093
  MenuItem,
3000
3094
  {
@@ -3003,7 +3097,7 @@ function ControlBar({ onLeave }) {
3003
3097
  setPanel("settings");
3004
3098
  },
3005
3099
  children: [
3006
- /* @__PURE__ */ jsx5(SettingsIcon, { width: 16, height: 16 }),
3100
+ /* @__PURE__ */ jsx6(SettingsIcon, { width: 16, height: 16 }),
3007
3101
  " Settings"
3008
3102
  ]
3009
3103
  }
@@ -3016,13 +3110,13 @@ function ControlBar({ onLeave }) {
3016
3110
  setShortcuts(true);
3017
3111
  },
3018
3112
  children: [
3019
- /* @__PURE__ */ jsx5(KeyboardIcon, { width: 16, height: 16 }),
3113
+ /* @__PURE__ */ jsx6(KeyboardIcon, { width: 16, height: 16 }),
3020
3114
  " Keyboard shortcuts"
3021
3115
  ]
3022
3116
  }
3023
3117
  ),
3024
3118
  controls.isHost ? /* @__PURE__ */ jsxs3(Fragment, { children: [
3025
- /* @__PURE__ */ jsx5("div", { className: "mx-meet__menu-sep", role: "separator" }),
3119
+ /* @__PURE__ */ jsx6("div", { className: "mx-meet__menu-sep", role: "separator" }),
3026
3120
  /* @__PURE__ */ jsxs3(
3027
3121
  MenuItem,
3028
3122
  {
@@ -3031,7 +3125,7 @@ function ControlBar({ onLeave }) {
3031
3125
  void controls.run({ action: "mute_all" });
3032
3126
  },
3033
3127
  children: [
3034
- /* @__PURE__ */ jsx5(MicOffIcon, { width: 16, height: 16 }),
3128
+ /* @__PURE__ */ jsx6(MicOffIcon, { width: 16, height: 16 }),
3035
3129
  " Mute everyone"
3036
3130
  ]
3037
3131
  }
@@ -3044,7 +3138,7 @@ function ControlBar({ onLeave }) {
3044
3138
  void controls.run({ action: "ask_all_unmute" });
3045
3139
  },
3046
3140
  children: [
3047
- /* @__PURE__ */ jsx5(MicIcon, { width: 16, height: 16 }),
3141
+ /* @__PURE__ */ jsx6(MicIcon, { width: 16, height: 16 }),
3048
3142
  " Ask everyone to unmute"
3049
3143
  ]
3050
3144
  }
@@ -3057,7 +3151,7 @@ function ControlBar({ onLeave }) {
3057
3151
  void controls.run({ action: "lower_all_hands" });
3058
3152
  },
3059
3153
  children: [
3060
- /* @__PURE__ */ jsx5(HandIcon, { width: 16, height: 16 }),
3154
+ /* @__PURE__ */ jsx6(HandIcon, { width: 16, height: 16 }),
3061
3155
  " Lower all hands (",
3062
3156
  queue.length,
3063
3157
  ")"
@@ -3072,7 +3166,7 @@ function ControlBar({ onLeave }) {
3072
3166
  void controls.run({ action: "spotlight", identity: null });
3073
3167
  },
3074
3168
  children: [
3075
- /* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
3169
+ /* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
3076
3170
  " Remove spotlight"
3077
3171
  ]
3078
3172
  }
@@ -3080,7 +3174,7 @@ function ControlBar({ onLeave }) {
3080
3174
  ] }) : null
3081
3175
  ] }) }) : null
3082
3176
  ] }),
3083
- /* @__PURE__ */ jsx5(
3177
+ /* @__PURE__ */ jsx6(
3084
3178
  ControlButton,
3085
3179
  {
3086
3180
  label: "Leave",
@@ -3089,7 +3183,7 @@ function ControlBar({ onLeave }) {
3089
3183
  void room.leave();
3090
3184
  onLeave?.();
3091
3185
  },
3092
- children: /* @__PURE__ */ jsx5(PhoneOffIcon, {})
3186
+ children: /* @__PURE__ */ jsx6(PhoneOffIcon, {})
3093
3187
  }
3094
3188
  )
3095
3189
  ] })
@@ -3185,14 +3279,14 @@ function Popover({
3185
3279
  window.removeEventListener("pointerdown", onPointer);
3186
3280
  };
3187
3281
  }, [onClose]);
3188
- return /* @__PURE__ */ jsx5("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
3282
+ return /* @__PURE__ */ jsx6("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
3189
3283
  }
3190
3284
  function MenuItem({
3191
3285
  onSelect,
3192
3286
  danger = false,
3193
3287
  children
3194
3288
  }) {
3195
- return /* @__PURE__ */ jsx5(
3289
+ return /* @__PURE__ */ jsx6(
3196
3290
  "button",
3197
3291
  {
3198
3292
  type: "button",
@@ -3209,8 +3303,8 @@ function Toast({ text, failed, onDone }) {
3209
3303
  return () => clearTimeout(timer);
3210
3304
  }, [text, failed, onDone]);
3211
3305
  return /* @__PURE__ */ jsxs3("div", { className: failed ? "mx-meet__toast mx-meet__toast--failed" : "mx-meet__toast", role: "status", children: [
3212
- /* @__PURE__ */ jsx5("span", { children: text }),
3213
- /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: onDone, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 14, height: 14 }) })
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 }) })
3214
3308
  ] });
3215
3309
  }
3216
3310
  function MeetingOverlays() {
@@ -3218,14 +3312,14 @@ function MeetingOverlays() {
3218
3312
  const { notice, dismiss } = useModerationNotice();
3219
3313
  const room = useRoom();
3220
3314
  return /* @__PURE__ */ jsxs3(Fragment, { children: [
3221
- /* @__PURE__ */ jsx5(ReactionOverlay, { reactions }),
3315
+ /* @__PURE__ */ jsx6(ReactionOverlay, { reactions }),
3222
3316
  notice !== null && notice.kind !== "removed" ? (
3223
3317
  // A host's request ("the host is asking you to unmute"), not an error:
3224
3318
  // an assertive status, so it is announced at once without being filed
3225
3319
  // as a failure (design-system error-box census).
3226
3320
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__notice-bar", role: "status", "aria-live": "assertive", children: [
3227
- /* @__PURE__ */ jsx5("span", { children: notice.text }),
3228
- notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ jsx5(
3321
+ /* @__PURE__ */ jsx6("span", { children: notice.text }),
3322
+ notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ jsx6(
3229
3323
  "button",
3230
3324
  {
3231
3325
  type: "button",
@@ -3237,7 +3331,7 @@ function MeetingOverlays() {
3237
3331
  children: "Unmute"
3238
3332
  }
3239
3333
  ) : null,
3240
- /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 14, height: 14 }) })
3334
+ /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ jsx6(CloseIcon, { width: 14, height: 14 }) })
3241
3335
  ] })
3242
3336
  ) : null
3243
3337
  ] });
@@ -3250,7 +3344,7 @@ function ShortcutsSheet({ onClose }) {
3250
3344
  window.addEventListener("keydown", onKey);
3251
3345
  return () => window.removeEventListener("keydown", onKey);
3252
3346
  }, [onClose]);
3253
- return /* @__PURE__ */ jsx5("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs3(
3347
+ return /* @__PURE__ */ jsx6("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ jsxs3(
3254
3348
  "div",
3255
3349
  {
3256
3350
  className: "mx-meet__sheet",
@@ -3259,12 +3353,12 @@ function ShortcutsSheet({ onClose }) {
3259
3353
  onClick: (event) => event.stopPropagation(),
3260
3354
  children: [
3261
3355
  /* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
3262
- /* @__PURE__ */ jsx5("h2", { className: "mx-meet__panel-title", children: "Keyboard shortcuts" }),
3263
- /* @__PURE__ */ jsx5(ControlButton, { label: "Close", onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }) })
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 }) })
3264
3358
  ] }),
3265
- /* @__PURE__ */ jsx5("dl", { className: "mx-meet__shortcuts", children: MEET_SHORTCUTS.map((shortcut) => /* @__PURE__ */ jsxs3("div", { className: "mx-meet__shortcut", children: [
3266
- /* @__PURE__ */ jsx5("dt", { children: shortcut.label }),
3267
- /* @__PURE__ */ jsx5("dd", { children: /* @__PURE__ */ jsx5("kbd", { className: "mx-meet__kbd", children: shortcut.keys }) })
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 }) })
3268
3362
  ] }, shortcut.id)) })
3269
3363
  ]
3270
3364
  }
@@ -3274,7 +3368,7 @@ function AiControl({ active, onToggle }) {
3274
3368
  const snapshot = useMeetSnapshot();
3275
3369
  const meeting = snapshot?.meeting ?? null;
3276
3370
  if (meeting === null || !meeting.aiEnabled) return null;
3277
- return /* @__PURE__ */ jsx5(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ jsx5(SparklesIcon, {}) });
3371
+ return /* @__PURE__ */ jsx6(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ jsx6(SparklesIcon, {}) });
3278
3372
  }
3279
3373
  function PanelShell({
3280
3374
  title,
@@ -3296,10 +3390,10 @@ function PanelShell({
3296
3390
  }, []);
3297
3391
  return /* @__PURE__ */ jsxs3("aside", { ref, className: "mx-meet__panel", "aria-label": title, children: [
3298
3392
  /* @__PURE__ */ jsxs3("header", { className: "mx-meet__panel-head", children: [
3299
- /* @__PURE__ */ jsx5("h2", { className: "mx-meet__panel-title", children: title }),
3300
- /* @__PURE__ */ jsx5(ControlButton, { label: "Close panel", onClick: onClose, children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }) })
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 }) })
3301
3395
  ] }),
3302
- /* @__PURE__ */ jsx5("div", { className: "mx-meet__panel-body", children })
3396
+ /* @__PURE__ */ jsx6("div", { className: "mx-meet__panel-body", children })
3303
3397
  ] });
3304
3398
  }
3305
3399
  function ChatPanel({
@@ -3329,9 +3423,9 @@ function ChatPanel({
3329
3423
  };
3330
3424
  return /* @__PURE__ */ jsxs3(PanelShell, { title: "Chat", onClose, children: [
3331
3425
  /* @__PURE__ */ jsxs3("ul", { className: "mx-meet__chat", ref: listRef, children: [
3332
- snapshot?.chatHistoryError != null ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: snapshot.chatHistoryError }) : null,
3333
- snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ jsx5("li", { className: "mx-meet__panel-note", children: "No messages yet. Messages to everyone stay with the meeting, so people who join later see them." }) : null,
3334
- messages.map((message) => /* @__PURE__ */ jsx5(ChatLine, { message, local, people }, message.id))
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))
3335
3429
  ] }),
3336
3430
  /* @__PURE__ */ jsxs3(
3337
3431
  "form",
@@ -3354,7 +3448,7 @@ function ChatPanel({
3354
3448
  value: recipient ?? "",
3355
3449
  onChange: (event) => choose(event.target.value === "" ? null : event.target.value),
3356
3450
  children: [
3357
- /* @__PURE__ */ jsx5("option", { value: "", children: "Everyone" }),
3451
+ /* @__PURE__ */ jsx6("option", { value: "", children: "Everyone" }),
3358
3452
  people.map((participant) => /* @__PURE__ */ jsxs3("option", { value: participant.identity, children: [
3359
3453
  participant.displayName,
3360
3454
  " (private)"
@@ -3363,7 +3457,7 @@ function ChatPanel({
3363
3457
  }
3364
3458
  ) : null,
3365
3459
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__composer-row", children: [
3366
- /* @__PURE__ */ jsx5(
3460
+ /* @__PURE__ */ jsx6(
3367
3461
  "input",
3368
3462
  {
3369
3463
  className: "mx-meet__input",
@@ -3374,7 +3468,7 @@ function ChatPanel({
3374
3468
  maxLength: 4e3
3375
3469
  }
3376
3470
  ),
3377
- /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
3471
+ /* @__PURE__ */ jsx6("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
3378
3472
  ] }),
3379
3473
  recipientName !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
3380
3474
  "Only ",
@@ -3404,16 +3498,16 @@ function ChatLine({
3404
3498
  ].filter(Boolean).join(" "),
3405
3499
  children: [
3406
3500
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-meta", children: [
3407
- /* @__PURE__ */ jsx5("strong", { children: mine ? "You" : message.displayName }),
3501
+ /* @__PURE__ */ jsx6("strong", { children: mine ? "You" : message.displayName }),
3408
3502
  counterpart !== null ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__chat-private", children: [
3409
3503
  "to ",
3410
3504
  counterpart,
3411
3505
  " \xB7 private"
3412
3506
  ] }) : null,
3413
- /* @__PURE__ */ jsx5("time", { dateTime: message.at, children: clockOf(message.at) })
3507
+ /* @__PURE__ */ jsx6("time", { dateTime: message.at, children: clockOf(message.at) })
3414
3508
  ] }),
3415
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-text", children: message.text }),
3416
- message.failed !== void 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-failed", children: message.failed }) : privateTo === null && message.saved === false ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__chat-pending", children: message.id.startsWith("pending-") ? "Sending\u2026" : "Not saved \u2014 people who join later will not see this" }) : null
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
3417
3511
  ]
3418
3512
  }
3419
3513
  );
@@ -3429,18 +3523,21 @@ function PeoplePanel({
3429
3523
  const [menuFor, setMenuFor] = useState4(null);
3430
3524
  const myRole = useRole();
3431
3525
  const local = snapshot?.localIdentity ?? null;
3432
- const everyone = snapshot?.participants ?? [];
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
+ );
3433
3530
  const needle = query.trim().toLowerCase();
3434
3531
  const shown = needle.length === 0 ? everyone : everyone.filter((participant) => participant.displayName.toLowerCase().includes(needle));
3435
3532
  return /* @__PURE__ */ jsxs3(PanelShell, { title: `People (${everyone.length})`, onClose, children: [
3436
- /* @__PURE__ */ jsx5(LobbyPanel, {}),
3533
+ /* @__PURE__ */ jsx6(LobbyPanel, {}),
3437
3534
  queue.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Raised hands", children: [
3438
3535
  /* @__PURE__ */ jsxs3("header", { className: "mx-meet__section-head", children: [
3439
3536
  /* @__PURE__ */ jsxs3("h3", { className: "mx-meet__section-title", children: [
3440
3537
  "Raised hands \xB7 ",
3441
3538
  queue.length
3442
3539
  ] }),
3443
- controls.isHost ? /* @__PURE__ */ jsx5(
3540
+ controls.isHost ? /* @__PURE__ */ jsx6(
3444
3541
  "button",
3445
3542
  {
3446
3543
  type: "button",
@@ -3450,13 +3547,13 @@ function PeoplePanel({
3450
3547
  }
3451
3548
  ) : null
3452
3549
  ] }),
3453
- /* @__PURE__ */ jsx5("ol", { className: "mx-meet__queue", children: queue.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
3454
- /* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 28 }),
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 }),
3455
3552
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
3456
3553
  participant.displayName,
3457
- participant.identity === local ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__you", children: " (you)" }) : null
3554
+ participant.identity === local ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__you", children: " (you)" }) : null
3458
3555
  ] }),
3459
- controls.isHost || participant.identity === local ? /* @__PURE__ */ jsx5(
3556
+ controls.isHost || participant.identity === local ? /* @__PURE__ */ jsx6(
3460
3557
  "button",
3461
3558
  {
3462
3559
  type: "button",
@@ -3469,7 +3566,7 @@ function PeoplePanel({
3469
3566
  ] }) : null,
3470
3567
  controls.isHost && everyone.length > 1 ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__bulk", children: [
3471
3568
  /* @__PURE__ */ jsxs3("button", { type: "button", className: "mx-meet__chip", onClick: () => void controls.run({ action: "mute_all" }), children: [
3472
- /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }),
3569
+ /* @__PURE__ */ jsx6(MicOffIcon, { width: 14, height: 14 }),
3473
3570
  " Mute all"
3474
3571
  ] }),
3475
3572
  /* @__PURE__ */ jsxs3(
@@ -3479,15 +3576,15 @@ function PeoplePanel({
3479
3576
  className: "mx-meet__chip",
3480
3577
  onClick: () => void controls.run({ action: "ask_all_unmute" }),
3481
3578
  children: [
3482
- /* @__PURE__ */ jsx5(MicIcon, { width: 14, height: 14 }),
3579
+ /* @__PURE__ */ jsx6(MicIcon, { width: 14, height: 14 }),
3483
3580
  " Ask all to unmute"
3484
3581
  ]
3485
3582
  }
3486
3583
  )
3487
3584
  ] }) : null,
3488
3585
  everyone.length > 4 ? /* @__PURE__ */ jsxs3("label", { className: "mx-meet__search", children: [
3489
- /* @__PURE__ */ jsx5(SearchIcon, { width: 16, height: 16 }),
3490
- /* @__PURE__ */ jsx5(
3586
+ /* @__PURE__ */ jsx6(SearchIcon, { width: 16, height: 16 }),
3587
+ /* @__PURE__ */ jsx6(
3491
3588
  "input",
3492
3589
  {
3493
3590
  className: "mx-meet__input mx-meet__input--bare",
@@ -3498,37 +3595,37 @@ function PeoplePanel({
3498
3595
  }
3499
3596
  )
3500
3597
  ] }) : null,
3501
- controls.notice !== null ? /* @__PURE__ */ jsx5("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
3598
+ controls.notice !== null ? /* @__PURE__ */ jsx6("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
3502
3599
  /* @__PURE__ */ jsxs3("ul", { className: "mx-meet__people", children: [
3503
3600
  shown.map((participant) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__person", children: [
3504
- /* @__PURE__ */ jsx5(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
3601
+ /* @__PURE__ */ jsx6(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
3505
3602
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
3506
3603
  participant.displayName,
3507
- participant.identity === local ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__you", children: " (you)" }) : null,
3508
- /* @__PURE__ */ jsx5(
3604
+ participant.identity === local ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__you", children: " (you)" }) : null,
3605
+ /* @__PURE__ */ jsx6(
3509
3606
  RoleBadge,
3510
3607
  {
3511
3608
  role: participant.identity === local ? myRole : participant.role,
3512
3609
  standing: participant.standing
3513
3610
  }
3514
3611
  ),
3515
- isNoteTaker(participant) ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
3516
- snapshot?.spotlight === participant.identity ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
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
3517
3614
  ] }),
3518
- participant.handRaised ? /* @__PURE__ */ jsx5(HandIcon, { width: 14, height: 14 }) : null,
3519
- !participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ jsx5(MicOffIcon, { width: 14, height: 14 }) : null,
3520
- /* @__PURE__ */ jsx5(QualityBars, { quality: participant.quality }),
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 }),
3521
3618
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__anchor", children: [
3522
- /* @__PURE__ */ jsx5(
3619
+ /* @__PURE__ */ jsx6(
3523
3620
  ControlButton,
3524
3621
  {
3525
3622
  label: `More for ${participant.displayName}`,
3526
3623
  active: menuFor === participant.identity,
3527
3624
  onClick: () => setMenuFor(menuFor === participant.identity ? null : participant.identity),
3528
- children: /* @__PURE__ */ jsx5(MoreIcon, { width: 16, height: 16 })
3625
+ children: /* @__PURE__ */ jsx6(MoreIcon, { width: 16, height: 16 })
3529
3626
  }
3530
3627
  ),
3531
- menuFor === participant.identity ? /* @__PURE__ */ jsx5(
3628
+ menuFor === participant.identity ? /* @__PURE__ */ jsx6(
3532
3629
  PersonMenu,
3533
3630
  {
3534
3631
  participant,
@@ -3545,7 +3642,7 @@ function PeoplePanel({
3545
3642
  "\u201D."
3546
3643
  ] }) : null
3547
3644
  ] }),
3548
- snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ jsx5(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
3645
+ snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ jsx6(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
3549
3646
  ] });
3550
3647
  }
3551
3648
  function PersonMenu({
@@ -3572,10 +3669,10 @@ function PersonMenu({
3572
3669
  else setRefused(true);
3573
3670
  });
3574
3671
  };
3575
- const refusal = refused && controls.notice?.failed === true ? /* @__PURE__ */ jsx5(ErrorBox, { as: "p", className: "mx-meet__error", message: controls.notice.text, operation: "Change this participant", origin: "meet/components", children: controls.notice.text }) : null;
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;
3576
3673
  if (mode === "rename" || mode === "report") {
3577
3674
  const renaming = mode === "rename";
3578
- return /* @__PURE__ */ jsx5(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ jsxs3(
3675
+ return /* @__PURE__ */ jsx6(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ jsxs3(
3579
3676
  "form",
3580
3677
  {
3581
3678
  className: "mx-meet__menu-form",
@@ -3588,8 +3685,8 @@ function PersonMenu({
3588
3685
  },
3589
3686
  children: [
3590
3687
  /* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
3591
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: renaming ? "Name shown in this meeting" : `What did ${participant.displayName} do?` }),
3592
- renaming ? /* @__PURE__ */ jsx5(
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(
3593
3690
  "input",
3594
3691
  {
3595
3692
  className: "mx-meet__input",
@@ -3598,7 +3695,7 @@ function PersonMenu({
3598
3695
  value: text,
3599
3696
  onChange: (event) => setText(event.target.value)
3600
3697
  }
3601
- ) : /* @__PURE__ */ jsx5(
3698
+ ) : /* @__PURE__ */ jsx6(
3602
3699
  "textarea",
3603
3700
  {
3604
3701
  className: "mx-meet__input",
@@ -3612,8 +3709,8 @@ function PersonMenu({
3612
3709
  ] }),
3613
3710
  refusal,
3614
3711
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
3615
- /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Back" }),
3616
- /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: text.trim().length === 0 || controls.busy, children: renaming ? "Rename" : "Report" })
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" })
3617
3714
  ] })
3618
3715
  ]
3619
3716
  }
@@ -3621,12 +3718,12 @@ function PersonMenu({
3621
3718
  }
3622
3719
  if (mode === "remove" || mode === "transfer") {
3623
3720
  const removing = mode === "remove";
3624
- return /* @__PURE__ */ jsx5(Popover, { label: removing ? "Remove" : "Make host", onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-form", children: [
3625
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__confirm-text", children: removing ? `Remove ${participant.displayName}? They leave immediately and cannot rejoin this meeting.` : `Make ${participant.displayName} the host? They get every host control and own this meeting. You stay on as a co-host.` }),
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.` }),
3626
3723
  refusal,
3627
3724
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu-actions", children: [
3628
- /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
3629
- /* @__PURE__ */ jsx5(
3725
+ /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
3726
+ /* @__PURE__ */ jsx6(
3630
3727
  "button",
3631
3728
  {
3632
3729
  type: "button",
@@ -3639,7 +3736,7 @@ function PersonMenu({
3639
3736
  ] })
3640
3737
  ] }) });
3641
3738
  }
3642
- return /* @__PURE__ */ jsx5(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
3739
+ return /* @__PURE__ */ jsx6(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ jsxs3("div", { className: "mx-meet__menu", role: "menu", children: [
3643
3740
  /* @__PURE__ */ jsxs3(
3644
3741
  MenuItem,
3645
3742
  {
@@ -3648,7 +3745,7 @@ function PersonMenu({
3648
3745
  onClose();
3649
3746
  },
3650
3747
  children: [
3651
- /* @__PURE__ */ jsx5(PinIcon, { width: 16, height: 16 }),
3748
+ /* @__PURE__ */ jsx6(PinIcon, { width: 16, height: 16 }),
3652
3749
  " ",
3653
3750
  pinned ? "Unpin" : "Pin for me"
3654
3751
  ]
@@ -3666,39 +3763,39 @@ function PersonMenu({
3666
3763
  onClose();
3667
3764
  },
3668
3765
  children: [
3669
- /* @__PURE__ */ jsx5(ChatIcon, { width: 16, height: 16 }),
3766
+ /* @__PURE__ */ jsx6(ChatIcon, { width: 16, height: 16 }),
3670
3767
  " Message privately"
3671
3768
  ]
3672
3769
  }
3673
3770
  ) : null,
3674
3771
  controls.isHost ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "spotlight", identity: spotlit ? null : participant.identity }), children: [
3675
- /* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
3772
+ /* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
3676
3773
  " ",
3677
3774
  spotlit ? "Remove spotlight" : "Spotlight for everyone"
3678
3775
  ] }) : null,
3679
3776
  moderate ? /* @__PURE__ */ jsxs3(Fragment, { children: [
3680
- /* @__PURE__ */ jsx5("div", { className: "mx-meet__menu-sep", role: "separator" }),
3777
+ /* @__PURE__ */ jsx6("div", { className: "mx-meet__menu-sep", role: "separator" }),
3681
3778
  participant.micEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "mute", identity: participant.identity }), children: [
3682
- /* @__PURE__ */ jsx5(MicOffIcon, { width: 16, height: 16 }),
3779
+ /* @__PURE__ */ jsx6(MicOffIcon, { width: 16, height: 16 }),
3683
3780
  " Mute"
3684
3781
  ] }) : !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "ask_unmute", identity: participant.identity }), children: [
3685
- /* @__PURE__ */ jsx5(MicIcon, { width: 16, height: 16 }),
3782
+ /* @__PURE__ */ jsx6(MicIcon, { width: 16, height: 16 }),
3686
3783
  " Ask to unmute"
3687
3784
  ] }) : null,
3688
3785
  participant.cameraEnabled ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_video", identity: participant.identity }), children: [
3689
- /* @__PURE__ */ jsx5(CameraOffIcon, { width: 16, height: 16 }),
3786
+ /* @__PURE__ */ jsx6(CameraOffIcon, { width: 16, height: 16 }),
3690
3787
  " Stop video"
3691
3788
  ] }) : null,
3692
3789
  participant.screenSharing ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "stop_screen", identity: participant.identity }), children: [
3693
- /* @__PURE__ */ jsx5(ScreenShareIcon, { width: 16, height: 16 }),
3790
+ /* @__PURE__ */ jsx6(ScreenShareIcon, { width: 16, height: 16 }),
3694
3791
  " Stop screen share"
3695
3792
  ] }) : null,
3696
3793
  participant.handRaised ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "lower_hand", identity: participant.identity }), children: [
3697
- /* @__PURE__ */ jsx5(HandIcon, { width: 16, height: 16 }),
3794
+ /* @__PURE__ */ jsx6(HandIcon, { width: 16, height: 16 }),
3698
3795
  " Lower hand"
3699
3796
  ] }) : null,
3700
3797
  hasAccount && !participant.isAgent && participant.role !== "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "make_cohost", identity: participant.identity }), children: [
3701
- /* @__PURE__ */ jsx5(PeopleIcon, { width: 16, height: 16 }),
3798
+ /* @__PURE__ */ jsx6(PeopleIcon, { width: 16, height: 16 }),
3702
3799
  " Make co-host"
3703
3800
  ] }) : null,
3704
3801
  !participant.isAgent ? /* @__PURE__ */ jsxs3(
@@ -3709,18 +3806,18 @@ function PersonMenu({
3709
3806
  setMode("rename");
3710
3807
  },
3711
3808
  children: [
3712
- /* @__PURE__ */ jsx5(PencilIcon, { width: 16, height: 16 }),
3809
+ /* @__PURE__ */ jsx6(PencilIcon, { width: 16, height: 16 }),
3713
3810
  " Rename"
3714
3811
  ]
3715
3812
  }
3716
3813
  ) : null
3717
3814
  ] }) : null,
3718
3815
  controls.isOwner && participant.role === "cohost" ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => act({ action: "revoke_cohost", identity: participant.identity }), children: [
3719
- /* @__PURE__ */ jsx5(PeopleIcon, { width: 16, height: 16 }),
3816
+ /* @__PURE__ */ jsx6(PeopleIcon, { width: 16, height: 16 }),
3720
3817
  " Remove co-host"
3721
3818
  ] }) : null,
3722
3819
  controls.isOwner && !self && hasAccount && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { onSelect: () => setMode("transfer"), children: [
3723
- /* @__PURE__ */ jsx5(SpotlightIcon, { width: 16, height: 16 }),
3820
+ /* @__PURE__ */ jsx6(SpotlightIcon, { width: 16, height: 16 }),
3724
3821
  " Make host"
3725
3822
  ] }) : null,
3726
3823
  self ? /* @__PURE__ */ jsxs3(
@@ -3731,7 +3828,7 @@ function PersonMenu({
3731
3828
  setMode("rename");
3732
3829
  },
3733
3830
  children: [
3734
- /* @__PURE__ */ jsx5(PencilIcon, { width: 16, height: 16 }),
3831
+ /* @__PURE__ */ jsx6(PencilIcon, { width: 16, height: 16 }),
3735
3832
  " Rename yourself"
3736
3833
  ]
3737
3834
  }
@@ -3744,13 +3841,13 @@ function PersonMenu({
3744
3841
  setMode("report");
3745
3842
  },
3746
3843
  children: [
3747
- /* @__PURE__ */ jsx5(FlagIcon, { width: 16, height: 16 }),
3844
+ /* @__PURE__ */ jsx6(FlagIcon, { width: 16, height: 16 }),
3748
3845
  " Report"
3749
3846
  ]
3750
3847
  }
3751
3848
  ) : null,
3752
3849
  moderate && !participant.isAgent ? /* @__PURE__ */ jsxs3(MenuItem, { danger: true, onSelect: () => setMode("remove"), children: [
3753
- /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 }),
3850
+ /* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 }),
3754
3851
  " Remove from meeting"
3755
3852
  ] }) : null
3756
3853
  ] }) });
@@ -3758,7 +3855,7 @@ function PersonMenu({
3758
3855
  function SettingsPanel({ onClose }) {
3759
3856
  const host = useRequiredMeetHost();
3760
3857
  return /* @__PURE__ */ jsxs3(PanelShell, { title: "Settings", onClose, children: [
3761
- /* @__PURE__ */ jsx5(
3858
+ /* @__PURE__ */ jsx6(
3762
3859
  DeviceSettings,
3763
3860
  {
3764
3861
  onPick: (kind, deviceId) => {
@@ -3767,8 +3864,8 @@ function SettingsPanel({ onClose }) {
3767
3864
  }
3768
3865
  }
3769
3866
  ),
3770
- /* @__PURE__ */ jsx5(EffectsSettings, {}),
3771
- /* @__PURE__ */ jsx5(CaptionLanguageSettings, {})
3867
+ /* @__PURE__ */ jsx6(EffectsSettings, {}),
3868
+ /* @__PURE__ */ jsx6(CaptionLanguageSettings, {})
3772
3869
  ] });
3773
3870
  }
3774
3871
  function DeviceSettings({
@@ -3785,9 +3882,9 @@ function DeviceSettings({
3785
3882
  void host.devices.refresh();
3786
3883
  }, [host]);
3787
3884
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
3788
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "audioinput", label: "Microphone", onPick }),
3789
- /* @__PURE__ */ jsx5("div", { className: "mx-meet__meter", role: "meter", "aria-label": "Microphone level", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(level * 100), children: /* @__PURE__ */ jsx5("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }),
3790
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "audiooutput", label: "Speaker", onPick }),
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 }),
3791
3888
  /* @__PURE__ */ jsxs3(
3792
3889
  "button",
3793
3890
  {
@@ -3799,13 +3896,13 @@ function DeviceSettings({
3799
3896
  void playTestSound(speaker).finally(() => setTesting(false));
3800
3897
  },
3801
3898
  children: [
3802
- /* @__PURE__ */ jsx5(SpeakerIcon, { width: 14, height: 14 }),
3899
+ /* @__PURE__ */ jsx6(SpeakerIcon, { width: 14, height: 14 }),
3803
3900
  " ",
3804
3901
  testing ? "Playing\u2026" : "Test speaker"
3805
3902
  ]
3806
3903
  }
3807
3904
  ),
3808
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
3905
+ /* @__PURE__ */ jsx6(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
3809
3906
  ] });
3810
3907
  }
3811
3908
  function EffectsSettings({ preview }) {
@@ -3825,7 +3922,7 @@ function EffectsSettings({ preview }) {
3825
3922
  };
3826
3923
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Effects", children: [
3827
3924
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
3828
- /* @__PURE__ */ jsx5(
3925
+ /* @__PURE__ */ jsx6(
3829
3926
  Checkbox,
3830
3927
  {
3831
3928
  id: "mx-meet-noise",
@@ -3834,13 +3931,13 @@ function EffectsSettings({ preview }) {
3834
3931
  }
3835
3932
  ),
3836
3933
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__check-text", children: [
3837
- /* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-noise", children: "Noise suppression" }),
3838
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__hint", children: "Filters keyboards, fans and background chatter." })
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." })
3839
3936
  ] })
3840
3937
  ] }),
3841
3938
  supported ? /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
3842
- /* @__PURE__ */ jsx5(Label, { children: "Background" }),
3843
- /* @__PURE__ */ jsx5(
3939
+ /* @__PURE__ */ jsx6(Label, { children: "Background" }),
3940
+ /* @__PURE__ */ jsx6(
3844
3941
  SegmentedControl,
3845
3942
  {
3846
3943
  fullWidth: true,
@@ -3859,7 +3956,7 @@ function EffectsSettings({ preview }) {
3859
3956
  ]
3860
3957
  }
3861
3958
  ),
3862
- /* @__PURE__ */ jsx5(
3959
+ /* @__PURE__ */ jsx6(
3863
3960
  "input",
3864
3961
  {
3865
3962
  ref: fileRef,
@@ -3874,7 +3971,7 @@ function EffectsSettings({ preview }) {
3874
3971
  }
3875
3972
  }
3876
3973
  ),
3877
- error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__error", children: error }) : null
3974
+ error !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__error", children: error }) : null
3878
3975
  ] }) : null
3879
3976
  ] });
3880
3977
  }
@@ -3961,29 +4058,29 @@ function LobbyPanel() {
3961
4058
  if (!lobby.canAdmit || lobby.waiting.length === 0) return null;
3962
4059
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__lobby", "aria-label": "Waiting room", children: [
3963
4060
  /* @__PURE__ */ jsxs3("header", { className: "mx-meet__lobby-head", children: [
3964
- /* @__PURE__ */ jsx5("h3", { className: "mx-meet__lobby-title", children: lobby.waiting.length === 1 ? "1 person is waiting" : `${lobby.waiting.length} people are waiting` }),
3965
- /* @__PURE__ */ jsx5("button", { type: "button", className: "mx-meet__link", onClick: () => void lobby.admitAll(), children: "Admit all" })
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" })
3966
4063
  ] }),
3967
- /* @__PURE__ */ jsx5("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ jsxs3(
4064
+ /* @__PURE__ */ jsx6("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ jsxs3(
3968
4065
  "li",
3969
4066
  {
3970
4067
  className: "mx-meet__lobby-row",
3971
4068
  "data-meet-lobby-entry": "",
3972
4069
  "data-meet-participant-name": entry.displayName,
3973
4070
  children: [
3974
- /* @__PURE__ */ jsx5(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
4071
+ /* @__PURE__ */ jsx6(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
3975
4072
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__person-name", children: [
3976
4073
  entry.displayName,
3977
- entry.userId === null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Guest" }) : null
4074
+ entry.userId === null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null
3978
4075
  ] }),
3979
- /* @__PURE__ */ jsx5(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx5(CheckIcon, { width: 16, height: 16 }) }),
3980
- /* @__PURE__ */ jsx5(
4076
+ /* @__PURE__ */ jsx6(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ jsx6(CheckIcon, { width: 16, height: 16 }) }),
4077
+ /* @__PURE__ */ jsx6(
3981
4078
  ControlButton,
3982
4079
  {
3983
4080
  label: `Deny ${entry.displayName}`,
3984
4081
  danger: true,
3985
4082
  onClick: () => void lobby.deny(entry),
3986
- children: /* @__PURE__ */ jsx5(CloseIcon, { width: 16, height: 16 })
4083
+ children: /* @__PURE__ */ jsx6(CloseIcon, { width: 16, height: 16 })
3987
4084
  }
3988
4085
  )
3989
4086
  ]
@@ -3998,19 +4095,19 @@ function NoteTakerRow() {
3998
4095
  const duplicateError = status.refusal !== null && ai.error !== null && status.refusal.reason === ai.error.message && status.refusal.remedy === ai.error.remedy;
3999
4096
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-taker", "aria-label": "Note-taker", children: [
4000
4097
  /* @__PURE__ */ jsxs3("p", { className: `mx-meet__note-taker-state mx-meet__note-taker-state--${status.state}`, children: [
4001
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
4098
+ /* @__PURE__ */ jsx6("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
4002
4099
  ai.noteTakerLabel
4003
4100
  ] }),
4004
- status.detail !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
4101
+ status.detail !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
4005
4102
  status.refusal !== null ? /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__refusal", error: status.refusal, operation: "Join this meeting", origin: "meet/components", children: [
4006
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: status.refusal.reason }),
4007
- status.refusal.remedy.length > 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: status.refusal.remedy }) : null
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
4008
4105
  ] }) : null,
4009
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: [
4010
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
4011
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
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 })
4012
4109
  ] }) : null,
4013
- ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ jsx5(
4110
+ ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ jsx6(
4014
4111
  "button",
4015
4112
  {
4016
4113
  type: "button",
@@ -4018,7 +4115,7 @@ function NoteTakerRow() {
4018
4115
  onClick: () => void ai.stopNoteTaker(),
4019
4116
  children: "Dismiss the note-taker"
4020
4117
  }
4021
- ) : /* @__PURE__ */ jsx5(
4118
+ ) : /* @__PURE__ */ jsx6(
4022
4119
  "button",
4023
4120
  {
4024
4121
  type: "button",
@@ -4035,10 +4132,10 @@ function NoteList({
4035
4132
  empty
4036
4133
  }) {
4037
4134
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": title, children: [
4038
- /* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: title }),
4039
- notes.length === 0 ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", children: empty }) : /* @__PURE__ */ jsx5("ul", { className: "mx-meet__notes", children: notes.map((note) => /* @__PURE__ */ jsxs3("li", { className: "mx-meet__note", children: [
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: [
4040
4137
  note.text,
4041
- note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
4138
+ note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
4042
4139
  ] }, note.id)) })
4043
4140
  ] });
4044
4141
  }
@@ -4046,10 +4143,10 @@ function AiPanel({ onClose }) {
4046
4143
  const ai = useMeetAi();
4047
4144
  const [question, setQuestion] = useState4("");
4048
4145
  return /* @__PURE__ */ jsxs3(PanelShell, { title: "Meeting assistant", onClose, children: [
4049
- /* @__PURE__ */ jsx5(NoteTakerRow, {}),
4146
+ /* @__PURE__ */ jsx6(NoteTakerRow, {}),
4050
4147
  ai.summary !== null ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Summary", children: [
4051
- /* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
4052
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__summary", children: ai.summary.text })
4148
+ /* @__PURE__ */ jsx6("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
4149
+ /* @__PURE__ */ jsx6("p", { className: "mx-meet__summary", children: ai.summary.text })
4053
4150
  ] }) : null,
4054
4151
  ai.wrapUp !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__wrap-up-notice", role: "status", children: [
4055
4152
  "The wrap-up is written \u2014 ",
@@ -4063,7 +4160,7 @@ function AiPanel({ onClose }) {
4063
4160
  ai.wrapUp.segmentCount === 1 ? "transcript line" : "transcript lines",
4064
4161
  "."
4065
4162
  ] }) : null,
4066
- /* @__PURE__ */ jsx5(
4163
+ /* @__PURE__ */ jsx6(
4067
4164
  NoteList,
4068
4165
  {
4069
4166
  title: "Notes",
@@ -4071,7 +4168,7 @@ function AiPanel({ onClose }) {
4071
4168
  empty: "Notes appear here as the meeting goes on."
4072
4169
  }
4073
4170
  ),
4074
- /* @__PURE__ */ jsx5(
4171
+ /* @__PURE__ */ jsx6(
4075
4172
  NoteList,
4076
4173
  {
4077
4174
  title: "Decisions",
@@ -4079,7 +4176,7 @@ function AiPanel({ onClose }) {
4079
4176
  empty: "Nothing has been decided yet."
4080
4177
  }
4081
4178
  ),
4082
- /* @__PURE__ */ jsx5(
4179
+ /* @__PURE__ */ jsx6(
4083
4180
  NoteList,
4084
4181
  {
4085
4182
  title: "Action items",
@@ -4088,14 +4185,14 @@ function AiPanel({ onClose }) {
4088
4185
  }
4089
4186
  ),
4090
4187
  ai.transcript.length > 0 ? /* @__PURE__ */ jsxs3("section", { className: "mx-meet__note-group", "aria-label": "Transcript", children: [
4091
- /* @__PURE__ */ jsx5("h3", { className: "mx-meet__note-group-title", children: "Transcript" }),
4092
- /* @__PURE__ */ jsx5("ul", { className: "mx-meet__transcript", children: ai.transcript.map((line) => /* @__PURE__ */ jsxs3(
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(
4093
4190
  "li",
4094
4191
  {
4095
4192
  className: line.final && line.source === "record" ? "mx-meet__line" : "mx-meet__line mx-meet__line--interim",
4096
4193
  children: [
4097
- /* @__PURE__ */ jsx5("strong", { children: line.speaker }),
4098
- /* @__PURE__ */ jsx5("span", { children: line.text })
4194
+ /* @__PURE__ */ jsx6("strong", { children: line.speaker }),
4195
+ /* @__PURE__ */ jsx6("span", { children: line.text })
4099
4196
  ]
4100
4197
  },
4101
4198
  line.id
@@ -4112,7 +4209,7 @@ function AiPanel({ onClose }) {
4112
4209
  void ai.ask(asked);
4113
4210
  },
4114
4211
  children: [
4115
- /* @__PURE__ */ jsx5(
4212
+ /* @__PURE__ */ jsx6(
4116
4213
  "input",
4117
4214
  {
4118
4215
  className: "mx-meet__input",
@@ -4122,12 +4219,12 @@ function AiPanel({ onClose }) {
4122
4219
  "aria-label": "Ask about this meeting"
4123
4220
  }
4124
4221
  ),
4125
- /* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
4222
+ /* @__PURE__ */ jsx6("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
4126
4223
  ]
4127
4224
  }
4128
4225
  ),
4129
- ai.asking && ai.phase !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", role: "status", children: ai.phase }) : null,
4130
- ai.answer !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__answer", children: ai.answer }) : null,
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,
4131
4228
  ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__coverage", children: [
4132
4229
  "Answered from ",
4133
4230
  ai.coverage.segmentsUsed,
@@ -4138,8 +4235,8 @@ function AiPanel({ onClose }) {
4138
4235
  "."
4139
4236
  ] }) : null,
4140
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: [
4141
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
4142
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
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 })
4143
4240
  ] }) : null
4144
4241
  ] });
4145
4242
  }
@@ -4156,22 +4253,22 @@ function Captions({ lines = 3 }) {
4156
4253
  {
4157
4254
  className: line.final ? "mx-meet__caption" : "mx-meet__caption mx-meet__caption--interim",
4158
4255
  children: [
4159
- /* @__PURE__ */ jsx5("strong", { children: line.speaker }),
4256
+ /* @__PURE__ */ jsx6("strong", { children: line.speaker }),
4160
4257
  " ",
4161
4258
  translated ?? line.text,
4162
- translated !== void 0 ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__caption-original", children: line.text }) : null
4259
+ translated !== void 0 ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__caption-original", children: line.text }) : null
4163
4260
  ]
4164
4261
  },
4165
4262
  line.id
4166
4263
  );
4167
4264
  }),
4168
- translation.language !== null && translation.error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
4265
+ translation.language !== null && translation.error !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
4169
4266
  ] });
4170
4267
  }
4171
4268
  function ConsentNotice() {
4172
4269
  const notice = useConsentNotice();
4173
4270
  if (notice === null) return null;
4174
- return /* @__PURE__ */ jsx5("p", { className: "mx-meet__consent", role: "status", children: notice });
4271
+ return /* @__PURE__ */ jsx6("p", { className: "mx-meet__consent", role: "status", children: notice });
4175
4272
  }
4176
4273
  function AttendanceNotice() {
4177
4274
  const media = useLocalMedia();
@@ -4187,21 +4284,22 @@ function AttendanceNotice() {
4187
4284
  ...code !== null ? { "data-meet-notice": code } : {},
4188
4285
  children: [
4189
4286
  notice,
4190
- refused === null ? null : /* @__PURE__ */ jsx5("span", { className: "mx-meet__remedy", children: refused.remedy })
4287
+ refused === null ? null : /* @__PURE__ */ jsx6("span", { className: "mx-meet__remedy", children: refused.remedy })
4191
4288
  ]
4192
4289
  }
4193
4290
  );
4194
4291
  }
4195
4292
  function PreJoin(props) {
4196
4293
  const host = useMeetHost();
4197
- if (host === null) return /* @__PURE__ */ jsx5(InertNotice, { what: "This meeting" });
4198
- return /* @__PURE__ */ jsx5(PreJoinBody, { ...props, host });
4294
+ if (host === null) return /* @__PURE__ */ jsx6(InertNotice, { what: "This meeting" });
4295
+ return /* @__PURE__ */ jsx6(PreJoinBody, { ...props, host });
4199
4296
  }
4200
4297
  function PreJoinBody({
4201
4298
  roomName,
4202
4299
  meetingId,
4203
4300
  slug,
4204
4301
  onJoined,
4302
+ observe: observe2 = false,
4205
4303
  host
4206
4304
  }) {
4207
4305
  const room = useRoom();
@@ -4223,7 +4321,7 @@ function PreJoinBody({
4223
4321
  }, [host]);
4224
4322
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin", children: [
4225
4323
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__preview", children: [
4226
- mode === "video" && preview.preview !== null ? /* @__PURE__ */ jsx5(
4324
+ mode === "video" && preview.preview !== null ? /* @__PURE__ */ jsx6(
4227
4325
  "video",
4228
4326
  {
4229
4327
  className: "mx-meet__video mx-meet__video--mirror",
@@ -4234,16 +4332,16 @@ function PreJoinBody({
4234
4332
  if (element !== null) preview.preview?.attach(element);
4235
4333
  }
4236
4334
  }
4237
- ) : /* @__PURE__ */ jsx5("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ jsx5(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 96 }) }),
4238
- mode === "video" && preview.error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__preview-note", children: preview.error }) : null,
4239
- microphone && micStream !== null ? /* @__PURE__ */ jsx5("div", { className: "mx-meet__meter mx-meet__meter--preview", role: "meter", "aria-label": "Microphone level", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(level * 100), children: /* @__PURE__ */ jsx5("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }) : null
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
4240
4338
  ] }),
4241
4339
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-panel", children: [
4242
- /* @__PURE__ */ jsx5("h1", { className: "mx-meet__prejoin-title", children: "Ready to join?" }),
4243
- notice?.kind === "removed" ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__warning", children: notice.text }) : null,
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,
4244
4342
  devices?.labelsHidden === true ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__panel-note", children: [
4245
4343
  "Your browser is hiding device names until you allow camera and microphone access.",
4246
- /* @__PURE__ */ jsx5(
4344
+ /* @__PURE__ */ jsx6(
4247
4345
  "button",
4248
4346
  {
4249
4347
  type: "button",
@@ -4255,10 +4353,10 @@ function PreJoinBody({
4255
4353
  }
4256
4354
  )
4257
4355
  ] }) : null,
4258
- devices?.fallbackNotice != null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
4259
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "audioinput", label: "Microphone" }),
4356
+ devices?.fallbackNotice != null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
4357
+ /* @__PURE__ */ jsx6(DevicePicker, { kind: "audioinput", label: "Microphone" }),
4260
4358
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field-row", children: [
4261
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
4359
+ /* @__PURE__ */ jsx6(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
4262
4360
  /* @__PURE__ */ jsxs3(
4263
4361
  Button,
4264
4362
  {
@@ -4272,19 +4370,19 @@ function PreJoinBody({
4272
4370
  );
4273
4371
  },
4274
4372
  children: [
4275
- /* @__PURE__ */ jsx5(SpeakerIcon, {}),
4373
+ /* @__PURE__ */ jsx6(SpeakerIcon, {}),
4276
4374
  " ",
4277
4375
  speakerTesting ? "Playing\u2026" : "Test"
4278
4376
  ]
4279
4377
  }
4280
4378
  )
4281
4379
  ] }),
4282
- /* @__PURE__ */ jsx5(DevicePicker, { kind: "videoinput", label: "Camera" }),
4283
- /* @__PURE__ */ jsx5(EffectsSettings, { preview: preview.preview }),
4284
- recording.consentNotice !== null ? /* @__PURE__ */ jsx5(Alert, { variant: "info", children: /* @__PURE__ */ jsx5(AlertDescription, { children: recording.consentNotice }) }) : null,
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,
4285
4383
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin-actions", children: [
4286
4384
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
4287
- /* @__PURE__ */ jsx5(
4385
+ /* @__PURE__ */ jsx6(
4288
4386
  Checkbox,
4289
4387
  {
4290
4388
  id: "mx-meet-join-video",
@@ -4292,10 +4390,10 @@ function PreJoinBody({
4292
4390
  onCheckedChange: (checked) => setMode(checked === true ? "video" : "audio")
4293
4391
  }
4294
4392
  ),
4295
- /* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
4393
+ /* @__PURE__ */ jsx6(Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
4296
4394
  ] }),
4297
4395
  /* @__PURE__ */ jsxs3("div", { className: "mx-meet__check", children: [
4298
- /* @__PURE__ */ jsx5(
4396
+ /* @__PURE__ */ jsx6(
4299
4397
  Checkbox,
4300
4398
  {
4301
4399
  id: "mx-meet-join-mic",
@@ -4303,9 +4401,9 @@ function PreJoinBody({
4303
4401
  onCheckedChange: (checked) => setMicrophone(checked === true)
4304
4402
  }
4305
4403
  ),
4306
- /* @__PURE__ */ jsx5(Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
4404
+ /* @__PURE__ */ jsx6(Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
4307
4405
  ] }),
4308
- /* @__PURE__ */ jsx5(
4406
+ /* @__PURE__ */ jsx6(
4309
4407
  Button,
4310
4408
  {
4311
4409
  type: "button",
@@ -4316,19 +4414,21 @@ function PreJoinBody({
4316
4414
  preview.release();
4317
4415
  void room.join({
4318
4416
  roomName,
4319
- mode,
4320
- microphone,
4417
+ // An observer publishes nothing: no camera, no microphone (MD-16).
4418
+ mode: observe2 ? "audio" : mode,
4419
+ microphone: observe2 ? false : microphone,
4321
4420
  ...meetingId !== void 0 ? { meetingId } : {},
4322
- ...slug !== void 0 ? { slug } : {}
4421
+ ...slug !== void 0 ? { slug } : {},
4422
+ ...observe2 ? { observe: true } : {}
4323
4423
  }).then(() => onJoined?.()).catch(() => void 0).finally(() => setJoining(false));
4324
4424
  },
4325
- children: joining ? "Joining\u2026" : "Join now"
4425
+ children: joining ? "Joining\u2026" : observe2 ? "Observe" : "Join now"
4326
4426
  }
4327
4427
  )
4328
4428
  ] }),
4329
4429
  room.failure !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__error", children: [
4330
4430
  room.failure.message,
4331
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__remedy", children: room.failure.remedy })
4431
+ /* @__PURE__ */ jsx6("span", { className: "mx-meet__remedy", children: room.failure.remedy })
4332
4432
  ] }) : null
4333
4433
  ] })
4334
4434
  ] });
@@ -4387,7 +4487,7 @@ function DevicePicker({
4387
4487
  const valueOf = (deviceId) => deviceId.length > 0 ? deviceId : "default";
4388
4488
  const current = devices?.selected[kind] ?? host.devices.resolve(kind) ?? "";
4389
4489
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__field", children: [
4390
- /* @__PURE__ */ jsx5(Label, { htmlFor: triggerId, children: label }),
4490
+ /* @__PURE__ */ jsx6(Label, { htmlFor: triggerId, children: label }),
4391
4491
  /* @__PURE__ */ jsxs3(
4392
4492
  Select,
4393
4493
  {
@@ -4398,8 +4498,8 @@ function DevicePicker({
4398
4498
  else host.devices.select(kind, deviceId);
4399
4499
  },
4400
4500
  children: [
4401
- /* @__PURE__ */ jsx5(SelectTrigger, { id: triggerId, "aria-label": label, children: /* @__PURE__ */ jsx5(SelectValue, { placeholder: label }) }),
4402
- /* @__PURE__ */ jsx5(SelectContent, { children: list.map((device) => /* @__PURE__ */ jsx5(SelectItem, { value: valueOf(device.deviceId), children: device.label.length > 0 ? device.label : `${label} (name hidden)` }, device.deviceId || "default")) })
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")) })
4403
4503
  ]
4404
4504
  }
4405
4505
  )
@@ -4410,63 +4510,103 @@ function MeetSkinRoom({
4410
4510
  meetingId,
4411
4511
  slug,
4412
4512
  onLeave,
4413
- headerControls
4513
+ headerControls,
4514
+ observe: observe2 = false
4414
4515
  }) {
4415
4516
  const { host, snapshot, isHost } = useMeetCore();
4416
4517
  const elapsed = useElapsed(snapshot?.meeting?.startedAt ?? null);
4417
4518
  const phase = snapshot?.phase ?? "idle";
4418
4519
  if (host === null) return null;
4419
4520
  if (phase === "idle" || phase === "failed" || phase === "left") {
4420
- return /* @__PURE__ */ jsx5("div", { className: "mx-meet", children: /* @__PURE__ */ jsx5(
4521
+ return /* @__PURE__ */ jsx6("div", { className: "mx-meet", children: /* @__PURE__ */ jsx6(
4421
4522
  PreJoin,
4422
4523
  {
4423
4524
  roomName,
4424
4525
  ...meetingId !== void 0 ? { meetingId } : {},
4425
- ...slug !== void 0 ? { slug } : {}
4526
+ ...slug !== void 0 ? { slug } : {},
4527
+ observe: observe2
4426
4528
  }
4427
4529
  ) });
4428
4530
  }
4429
4531
  if (phase === "lobby") {
4430
- return /* @__PURE__ */ jsx5("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ jsx5(WaitingRoom, { roomName, host }) });
4532
+ return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ jsx6(WaitingRoom, { host, ...onLeave !== void 0 ? { onLeave } : {} }) });
4431
4533
  }
4432
4534
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet", children: [
4433
- /* @__PURE__ */ jsx5(ConsentNotice, {}),
4434
- /* @__PURE__ */ jsx5(AttendanceNotice, {}),
4535
+ /* @__PURE__ */ jsx6(ConsentNotice, {}),
4536
+ /* @__PURE__ */ jsx6(AttendanceNotice, {}),
4435
4537
  /* @__PURE__ */ jsxs3("header", { className: "mx-meet__header", children: [
4436
- /* @__PURE__ */ jsx5("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
4538
+ /* @__PURE__ */ jsx6("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
4437
4539
  /* @__PURE__ */ jsxs3("span", { className: "mx-meet__meta", children: [
4438
4540
  participantSummary(snapshot?.participants ?? []),
4439
4541
  elapsed > 0 ? ` \xB7 ${formatDurationMs2(elapsed)}` : ""
4440
4542
  ] }),
4441
- /* @__PURE__ */ jsx5(RecordingIndicator, {}),
4543
+ /* @__PURE__ */ jsx6(RecordingIndicator, {}),
4544
+ isObserverRole(snapshot?.grants.role) ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", "data-meet-observing": "self", children: "Observing" }) : null,
4442
4545
  snapshot?.locked === true ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__badge", children: [
4443
- /* @__PURE__ */ jsx5(LockIcon, { width: 12, height: 12 }),
4546
+ /* @__PURE__ */ jsx6(LockIcon, { width: 12, height: 12 }),
4444
4547
  " Locked"
4445
4548
  ] }) : null,
4446
- headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__header-controls", "data-meet-header-controls": "", children: headerControls }) : null,
4447
- isHost ? /* @__PURE__ */ jsx5(HostMenu, {}) : null
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
4448
4551
  ] }),
4449
- phase === "reconnecting" ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__banner", role: "status", children: "Reconnecting\u2026" }) : null,
4450
- /* @__PURE__ */ jsx5(Stage, {}),
4451
- /* @__PURE__ */ jsx5(Captions, {}),
4452
- /* @__PURE__ */ jsx5(ControlBar, { ...onLeave !== void 0 ? { onLeave } : {} })
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 } : {} })
4453
4556
  ] });
4454
4557
  }
4455
- function WaitingRoom({ roomName, host }) {
4456
- const knocked = useRef6(false);
4457
- useEffect6(() => {
4458
- if (knocked.current) return;
4459
- knocked.current = true;
4460
- host.meetings.knock(roomName);
4461
- }, [host, roomName]);
4558
+ function WaitingRoom({ host, onLeave }) {
4559
+ const { waiting, withdraw, askAgain } = useWaiting();
4560
+ const [busy, setBusy] = useState4(false);
4561
+ const admission = waiting?.admission ?? "knocking";
4562
+ const run = (action) => () => {
4563
+ setBusy(true);
4564
+ void action().catch(() => void 0).finally(() => setBusy(false));
4565
+ };
4566
+ const home = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", onClick: () => onLeave !== void 0 ? onLeave() : window.location.assign("/"), children: "Back to home" });
4567
+ let title;
4568
+ let line = null;
4569
+ let actions;
4570
+ switch (admission) {
4571
+ case "waiting_host":
4572
+ title = "Waiting for the host to start";
4573
+ actions = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", disabled: busy, onClick: run(withdraw), children: "Leave" });
4574
+ break;
4575
+ case "denied":
4576
+ title = "The host declined your request";
4577
+ actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
4578
+ waiting?.reknockAllowed === true ? /* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Ask to join again" }) : null,
4579
+ home
4580
+ ] });
4581
+ break;
4582
+ case "expired":
4583
+ title = "No one responded";
4584
+ actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
4585
+ /* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Ask again" }),
4586
+ home
4587
+ ] });
4588
+ break;
4589
+ case "withdrawn":
4590
+ title = "You left the waiting room";
4591
+ actions = /* @__PURE__ */ jsxs3(Fragment, { children: [
4592
+ /* @__PURE__ */ jsx6(Button, { type: "button", disabled: busy, onClick: run(askAgain), children: "Rejoin" }),
4593
+ home
4594
+ ] });
4595
+ break;
4596
+ case "ended":
4597
+ title = "The meeting has ended";
4598
+ actions = home;
4599
+ break;
4600
+ default:
4601
+ title = "Waiting for the host to let you in";
4602
+ line = waiting?.admittersPresent === false ? "The host isn't here yet" : null;
4603
+ actions = /* @__PURE__ */ jsx6(Button, { type: "button", variant: "outline", disabled: busy, onClick: run(withdraw), children: "Cancel request" });
4604
+ }
4462
4605
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__waiting", children: [
4463
- /* @__PURE__ */ jsx5(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 72 }),
4464
- /* @__PURE__ */ jsx5("h1", { className: "mx-meet__prejoin-title", children: "Waiting for the host to let you in" }),
4465
- /* @__PURE__ */ jsxs3("p", { className: "mx-meet__empty-body", children: [
4466
- "You are in the waiting room as ",
4467
- host.identity.displayName,
4468
- ". You will join automatically once you are admitted."
4469
- ] })
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 })
4470
4610
  ] });
4471
4611
  }
4472
4612
  function HostMenu() {
@@ -4476,7 +4616,7 @@ function HostMenu() {
4476
4616
  const [confirmingEnd, setConfirmingEnd] = useState4(false);
4477
4617
  const locked = snapshot?.locked === true;
4478
4618
  return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__host-menu", children: [
4479
- /* @__PURE__ */ jsx5(
4619
+ /* @__PURE__ */ jsx6(
4480
4620
  "button",
4481
4621
  {
4482
4622
  type: "button",
@@ -4488,8 +4628,8 @@ function HostMenu() {
4488
4628
  }
4489
4629
  ),
4490
4630
  end.canEnd ? confirmingEnd ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__confirm", role: "group", "aria-label": "End this meeting?", children: [
4491
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__confirm-text", children: "End it for everyone? Every participant is disconnected, the note-taker stops, and the wrap-up is written. Nobody can rejoin this meeting afterwards." }),
4492
- /* @__PURE__ */ jsx5(
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(
4493
4633
  "button",
4494
4634
  {
4495
4635
  type: "button",
@@ -4501,7 +4641,7 @@ function HostMenu() {
4501
4641
  children: "End it"
4502
4642
  }
4503
4643
  ),
4504
- /* @__PURE__ */ jsx5(
4644
+ /* @__PURE__ */ jsx6(
4505
4645
  "button",
4506
4646
  {
4507
4647
  type: "button",
@@ -4510,7 +4650,7 @@ function HostMenu() {
4510
4650
  children: "Keep it running"
4511
4651
  }
4512
4652
  )
4513
- ] }) : /* @__PURE__ */ jsx5(
4653
+ ] }) : /* @__PURE__ */ jsx6(
4514
4654
  "button",
4515
4655
  {
4516
4656
  type: "button",
@@ -4519,14 +4659,14 @@ function HostMenu() {
4519
4659
  children: end.ending ? "Ending\u2026" : "End meeting for everyone"
4520
4660
  }
4521
4661
  ) : null,
4522
- end.notice !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
4662
+ end.notice !== null ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
4523
4663
  ] });
4524
4664
  }
4525
4665
  function ReactionOverlay({
4526
4666
  reactions
4527
4667
  }) {
4528
4668
  if (reactions.length === 0) return null;
4529
- return /* @__PURE__ */ jsx5("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ jsx5("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
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)) });
4530
4670
  }
4531
4671
  function clockOf(iso) {
4532
4672
  const at = new Date(iso);
@@ -4544,10 +4684,10 @@ function GuestRecordAccessControl({
4544
4684
  if (host === null || !isHost) return null;
4545
4685
  const resolved = access.setting === "default" && access.effective !== null ? ` Right now that means: ${guestRecordAccessLabel(access.effective.level).toLowerCase()}.` : "";
4546
4686
  return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__record-section", "aria-label": "What guests may read", children: [
4547
- /* @__PURE__ */ jsx5("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
4687
+ /* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
4548
4688
  /* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
4549
- /* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
4550
- /* @__PURE__ */ jsx5(
4689
+ /* @__PURE__ */ jsx6("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
4690
+ /* @__PURE__ */ jsx6(
4551
4691
  "select",
4552
4692
  {
4553
4693
  className: "mx-meet__select",
@@ -4558,7 +4698,7 @@ function GuestRecordAccessControl({
4558
4698
  event.target.value
4559
4699
  );
4560
4700
  },
4561
- children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ jsx5("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
4701
+ children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ jsx6("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
4562
4702
  }
4563
4703
  )
4564
4704
  ] }),
@@ -4566,10 +4706,10 @@ function GuestRecordAccessControl({
4566
4706
  guestRecordAccessExplanation(access.setting),
4567
4707
  resolved
4568
4708
  ] }),
4569
- access.saving ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
4709
+ access.saving ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
4570
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: [
4571
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-reason", children: access.error.message }),
4572
- /* @__PURE__ */ jsx5("p", { className: "mx-meet__refusal-remedy", children: access.error.remedy })
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 })
4573
4713
  ] }) : null
4574
4714
  ] });
4575
4715
  }