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