@ai-matrx/meet 0.7.82 → 0.7.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.cjs CHANGED
@@ -94,6 +94,7 @@ __export(react_exports, {
94
94
  MODERATION_ACTIONS: () => MODERATION_ACTIONS,
95
95
  MeetError: () => MeetError,
96
96
  MeetProvider: () => MeetProvider,
97
+ MeetRoot: () => MeetRoot,
97
98
  MeetingList: () => MeetingList,
98
99
  MeetingOverlays: () => MeetingOverlays,
99
100
  MeetingRecordView: () => MeetingRecordView,
@@ -239,6 +240,7 @@ __export(react_exports, {
239
240
  meetingWhen: () => meetingWhen,
240
241
  mergeCaption: () => mergeCaption,
241
242
  mergeRecord: () => mergeRecord,
243
+ microphoneNoticeCode: () => microphoneNoticeCode,
242
244
  normalizeDeviceError: () => normalizeDeviceError,
243
245
  normalizeMeetError: () => normalizeMeetError,
244
246
  normalizeSpoken: () => normalizeSpoken,
@@ -247,8 +249,13 @@ __export(react_exports, {
247
249
  noteTakerParticipant: () => noteTakerParticipant,
248
250
  noteTakerStatus: () => noteTakerStatus,
249
251
  notesDocument: () => notesDocument,
252
+ observeMeeting: () => observe,
253
+ observedDevice: () => observedDevice,
254
+ observedPhase: () => observedPhase,
255
+ observedQuality: () => observedQuality,
250
256
  orderParticipants: () => orderParticipants,
251
257
  parseRoomToken: () => parseRoomToken,
258
+ participantAttributes: () => participantAttributes,
252
259
  participantSummary: () => participantSummary,
253
260
  playableRecordingFileId: () => playableRecordingFileId,
254
261
  projectInvitee: () => projectInvitee,
@@ -269,12 +276,14 @@ __export(react_exports, {
269
276
  recordingOffsetMs: () => recordingOffsetMs,
270
277
  roleOf: () => roleOf,
271
278
  roomTopic: () => roomTopic,
279
+ rootAttributes: () => rootAttributes,
272
280
  searchTranscript: () => searchTranscript,
273
281
  sendFollowUp: () => sendFollowUp,
274
282
  setGuestRecordAccess: () => setGuestRecordAccess,
275
283
  settingsPatch: () => settingsPatch,
276
284
  snapshotParticipant: () => snapshotParticipant,
277
285
  snippetRuns: () => snippetRuns,
286
+ staticObservation: () => staticObservation,
278
287
  summarizeMeetingRecordRestrictions: () => summarizeMeetingRecordRestrictions,
279
288
  transcriptDocument: () => transcriptDocument,
280
289
  unavailableFrom: () => unavailableFrom,
@@ -288,6 +297,8 @@ __export(react_exports, {
288
297
  useCollab: () => useCollab,
289
298
  useCollabPanelRequest: () => useCollabPanelRequest,
290
299
  useConsentNotice: () => useConsentNotice,
300
+ useCoreObservation: () => useCoreObservation,
301
+ useCoreRootProps: () => useCoreRootProps,
291
302
  useDeviceSnapshot: () => useDeviceSnapshot,
292
303
  useElapsed: () => useElapsed,
293
304
  useEndMeeting: () => useEndMeeting,
@@ -5854,9 +5865,184 @@ function useLocalUserId() {
5854
5865
  return useMeetHost()?.identity.userId ?? null;
5855
5866
  }
5856
5867
 
5857
- // src/react/hooks.ts
5868
+ // src/react/root.tsx
5858
5869
  var import_react3 = require("react");
5859
- var import_react4 = require("@ai-matrx/realtime/react");
5870
+
5871
+ // src/core/observation.ts
5872
+ function observedDevice(track) {
5873
+ if (track.enabled) return "on";
5874
+ const refused = track.unavailable;
5875
+ if (refused === null) return "muted_by_me";
5876
+ switch (refused.code) {
5877
+ case "permission-denied":
5878
+ return "unavailable:denied";
5879
+ case "device-not-found":
5880
+ return "unavailable:none";
5881
+ case "device-in-use":
5882
+ return "unavailable:busy";
5883
+ case "insecure-context":
5884
+ return "unavailable:blocked_site";
5885
+ default:
5886
+ return "unavailable:failed";
5887
+ }
5888
+ }
5889
+ function endedRecord(snapshot, given) {
5890
+ const record = snapshot?.meeting ?? given;
5891
+ return record !== null && record.endedAt !== null;
5892
+ }
5893
+ function observedPhase(input) {
5894
+ const { snapshot } = input;
5895
+ if (snapshot === null) return "resolving";
5896
+ const raw = snapshot.phase;
5897
+ const live = raw === "connected" || raw === "reconnecting";
5898
+ if (endedRecord(snapshot, input.meeting ?? null) && !live) return "ended";
5899
+ switch (raw) {
5900
+ case "idle":
5901
+ case "failed":
5902
+ case "left":
5903
+ return "prejoin";
5904
+ case "lobby":
5905
+ return "waiting:knocking";
5906
+ case "requesting-token":
5907
+ case "connecting":
5908
+ return "joining";
5909
+ case "connected":
5910
+ case "reconnecting":
5911
+ return "in_call";
5912
+ }
5913
+ }
5914
+ var ADMITTER_ROLES = /* @__PURE__ */ new Set(["host", "cohost"]);
5915
+ function observe(input) {
5916
+ const { snapshot } = input;
5917
+ const phase = observedPhase(input);
5918
+ const inCall = phase === "in_call";
5919
+ const role = inCall && snapshot !== null ? effectiveRole(snapshot) : "none";
5920
+ const canAdmit = role !== "none" && ADMITTER_ROLES.has(role);
5921
+ const deviceInPlay = phase === "joining" || inCall;
5922
+ return {
5923
+ phase,
5924
+ reason: null,
5925
+ role,
5926
+ connection: snapshot?.phase === "reconnecting" ? "reconnecting" : "stable",
5927
+ hostPresent: inCall && snapshot !== null ? snapshot.participants.some((p) => ADMITTER_ROLES.has(p.role)) : null,
5928
+ lobbyCount: canAdmit && snapshot !== null ? snapshot.lobby.filter((entry) => entry.state === "knocking").length : 0,
5929
+ recording: snapshot?.recording === "recording" || snapshot?.recording === "stopping",
5930
+ audioBlocked: null,
5931
+ camera: deviceInPlay && snapshot !== null ? observedDevice(snapshot.media.camera) : null,
5932
+ microphone: deviceInPlay && snapshot !== null ? observedDevice(snapshot.media.microphone) : null
5933
+ };
5934
+ }
5935
+ function staticObservation(phase, reason = null) {
5936
+ return {
5937
+ phase,
5938
+ reason,
5939
+ role: "none",
5940
+ connection: phase === "disconnected" ? "server_unreachable" : "stable",
5941
+ hostPresent: null,
5942
+ lobbyCount: 0,
5943
+ recording: false,
5944
+ audioBlocked: null,
5945
+ camera: null,
5946
+ microphone: null
5947
+ };
5948
+ }
5949
+ function rootAttributes(o) {
5950
+ const attrs = {
5951
+ "data-meet-root": "",
5952
+ "data-meet-phase": o.phase,
5953
+ "data-meet-role": o.role,
5954
+ "data-meet-connection": o.connection,
5955
+ "data-meet-lobby-count": String(o.lobbyCount),
5956
+ "data-meet-recording": String(o.recording)
5957
+ };
5958
+ if (o.reason !== null) attrs["data-meet-reason"] = o.reason;
5959
+ if (o.hostPresent !== null) attrs["data-meet-host-present"] = String(o.hostPresent);
5960
+ if (o.audioBlocked !== null) attrs["data-meet-audio-blocked"] = String(o.audioBlocked);
5961
+ if (o.camera !== null) attrs["data-meet-camera"] = o.camera;
5962
+ if (o.microphone !== null) attrs["data-meet-microphone"] = o.microphone;
5963
+ attrs["data-meet-regions"] = JSON.stringify({
5964
+ connection: o.connection,
5965
+ camera: o.camera,
5966
+ mic: o.microphone,
5967
+ audio_output: o.audioBlocked === null ? null : o.audioBlocked ? "blocked" : "playing",
5968
+ recording: o.recording
5969
+ });
5970
+ return attrs;
5971
+ }
5972
+ function observedQuality(quality) {
5973
+ switch (quality) {
5974
+ case "excellent":
5975
+ case "good":
5976
+ return "good";
5977
+ case "poor":
5978
+ return "poor";
5979
+ case "lost":
5980
+ return "lost";
5981
+ default:
5982
+ return null;
5983
+ }
5984
+ }
5985
+ function participantAttributes(p) {
5986
+ const attrs = {
5987
+ "data-meet-participant": "",
5988
+ "data-meet-participant-identity": p.identity,
5989
+ "data-meet-participant-name": p.displayName,
5990
+ "data-meet-participant-role": p.role,
5991
+ "data-meet-participant-self": String(p.isLocal)
5992
+ };
5993
+ const quality = observedQuality(p.quality);
5994
+ if (quality !== null) attrs["data-meet-participant-connection"] = quality;
5995
+ return attrs;
5996
+ }
5997
+ function microphoneNoticeCode(track) {
5998
+ const refused = track.unavailable;
5999
+ if (refused === null) return null;
6000
+ return refused.code === "permission-denied" || refused.code === "insecure-context" ? "mic-blocked" : "device-lost";
6001
+ }
6002
+
6003
+ // src/react/root.tsx
6004
+ var import_jsx_runtime2 = require("react/jsx-runtime");
6005
+ function useCoreObservation(options = {}) {
6006
+ const snapshot = useMeetSnapshot();
6007
+ const { meeting, phase, reason } = options;
6008
+ return (0, import_react3.useMemo)(
6009
+ () => phase !== void 0 ? staticObservation(phase, reason ?? null) : observe({ snapshot, meeting: meeting ?? null }),
6010
+ [snapshot, meeting, phase, reason]
6011
+ );
6012
+ }
6013
+ function useCoreRootProps(options = {}) {
6014
+ const observation = useCoreObservation(options);
6015
+ return (0, import_react3.useMemo)(() => rootAttributes(observation), [observation]);
6016
+ }
6017
+ function MeetRoot({
6018
+ children,
6019
+ ...options
6020
+ }) {
6021
+ const snapshot = useMeetSnapshot();
6022
+ const observation = useCoreObservation(options);
6023
+ const attrs = (0, import_react3.useMemo)(() => rootAttributes(observation), [observation]);
6024
+ const latest = (0, import_react3.useRef)({ observation, storePhase: snapshot?.phase ?? null });
6025
+ latest.current = { observation, storePhase: snapshot?.phase ?? null };
6026
+ (0, import_react3.useEffect)(() => {
6027
+ if (typeof window === "undefined") return void 0;
6028
+ const diagnostics = {
6029
+ contract: "HARNESS-CONTRACT",
6030
+ snapshot: () => latest.current,
6031
+ activeCatalogStates: [],
6032
+ activeCatalogStatesDerived: false
6033
+ };
6034
+ const target = window;
6035
+ target.__matrxMeet = diagnostics;
6036
+ return () => {
6037
+ if (target.__matrxMeet === diagnostics) delete target.__matrxMeet;
6038
+ };
6039
+ }, []);
6040
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { ...attrs, style: { display: "contents" }, children });
6041
+ }
6042
+
6043
+ // src/react/hooks.ts
6044
+ var import_react4 = require("react");
6045
+ var import_react5 = require("@ai-matrx/realtime/react");
5860
6046
 
5861
6047
  // src/core/record.ts
5862
6048
  var import_format = require("@ai-matrx/kit/format");
@@ -6541,51 +6727,51 @@ function useRoom() {
6541
6727
  failure: snapshot?.failure ?? null,
6542
6728
  local,
6543
6729
  canShareScreen: engine?.supportsScreenShare() ?? true,
6544
- join: (0, import_react3.useCallback)(
6730
+ join: (0, import_react4.useCallback)(
6545
6731
  async (request) => requireEngine(engine, "join").join(request),
6546
6732
  [engine]
6547
6733
  ),
6548
- leave: (0, import_react3.useCallback)(async () => requireEngine(engine, "leave").leave(), [engine]),
6549
- toggleMicrophone: (0, import_react3.useCallback)(
6734
+ leave: (0, import_react4.useCallback)(async () => requireEngine(engine, "leave").leave(), [engine]),
6735
+ toggleMicrophone: (0, import_react4.useCallback)(
6550
6736
  async () => requireEngine(engine, "toggleMicrophone").setMicrophoneEnabled(
6551
6737
  !(local?.micEnabled ?? false)
6552
6738
  ),
6553
6739
  [engine, local]
6554
6740
  ),
6555
- toggleCamera: (0, import_react3.useCallback)(
6741
+ toggleCamera: (0, import_react4.useCallback)(
6556
6742
  async () => requireEngine(engine, "toggleCamera").setCameraEnabled(!(local?.cameraEnabled ?? false)),
6557
6743
  [engine, local]
6558
6744
  ),
6559
- toggleScreenShare: (0, import_react3.useCallback)(
6745
+ toggleScreenShare: (0, import_react4.useCallback)(
6560
6746
  async () => requireEngine(engine, "toggleScreenShare").setScreenShareEnabled(
6561
6747
  !(local?.screenSharing ?? false)
6562
6748
  ),
6563
6749
  [engine, local]
6564
6750
  ),
6565
- toggleHand: (0, import_react3.useCallback)(
6751
+ toggleHand: (0, import_react4.useCallback)(
6566
6752
  async () => requireEngine(engine, "toggleHand").raiseHand(!(local?.handRaised ?? false)),
6567
6753
  [engine, local]
6568
6754
  ),
6569
- react: (0, import_react3.useCallback)(
6755
+ react: (0, import_react4.useCallback)(
6570
6756
  async (emoji) => requireEngine(engine, "react").react(emoji),
6571
6757
  [engine]
6572
6758
  ),
6573
- sendChat: (0, import_react3.useCallback)(
6759
+ sendChat: (0, import_react4.useCallback)(
6574
6760
  async (text3) => {
6575
6761
  if (host === null) throw noRuntime("sendChat");
6576
6762
  await host.inRoom.sendChat(text3);
6577
6763
  },
6578
6764
  [host]
6579
6765
  ),
6580
- sendPrivateChat: (0, import_react3.useCallback)(
6766
+ sendPrivateChat: (0, import_react4.useCallback)(
6581
6767
  async (to, text3) => requireEngine(engine, "sendPrivateChat").sendPrivateChat(to, text3),
6582
6768
  [engine]
6583
6769
  ),
6584
- pin: (0, import_react3.useCallback)(
6770
+ pin: (0, import_react4.useCallback)(
6585
6771
  (identity) => requireEngine(engine, "pin").pin(identity),
6586
6772
  [engine]
6587
6773
  ),
6588
- setLayout: (0, import_react3.useCallback)(
6774
+ setLayout: (0, import_react4.useCallback)(
6589
6775
  (layout) => requireEngine(engine, "setLayout").setLayout(layout),
6590
6776
  [engine]
6591
6777
  )
@@ -6593,8 +6779,8 @@ function useRoom() {
6593
6779
  }
6594
6780
  function useStage(pageSize = DEFAULT_PAGE_SIZE) {
6595
6781
  const snapshot = useMeetSnapshot();
6596
- const [page, setPage] = (0, import_react3.useState)(0);
6597
- const stage = (0, import_react3.useMemo)(
6782
+ const [page, setPage] = (0, import_react4.useState)(0);
6783
+ const stage = (0, import_react4.useMemo)(
6598
6784
  () => computeStage({
6599
6785
  participants: snapshot?.participants ?? [],
6600
6786
  layout: snapshot?.layout ?? "grid",
@@ -6606,15 +6792,15 @@ function useStage(pageSize = DEFAULT_PAGE_SIZE) {
6606
6792
  }),
6607
6793
  [snapshot, pageSize, page]
6608
6794
  );
6609
- (0, import_react3.useEffect)(() => {
6795
+ (0, import_react4.useEffect)(() => {
6610
6796
  if (page > stage.pageCount - 1) setPage(Math.max(0, stage.pageCount - 1));
6611
6797
  }, [page, stage.pageCount]);
6612
6798
  return stage;
6613
6799
  }
6614
6800
  function useTrack(identity, kind) {
6615
6801
  const host = useMeetHost();
6616
- const detachRef = (0, import_react3.useRef)(null);
6617
- return (0, import_react3.useCallback)(
6802
+ const detachRef = (0, import_react4.useRef)(null);
6803
+ return (0, import_react4.useCallback)(
6618
6804
  (element) => {
6619
6805
  detachRef.current?.();
6620
6806
  detachRef.current = null;
@@ -6627,8 +6813,8 @@ function useTrack(identity, kind) {
6627
6813
  function useCalls() {
6628
6814
  const host = useMeetHost();
6629
6815
  const center = host?.calls ?? null;
6630
- const [, force] = (0, import_react3.useState)(0);
6631
- (0, import_react3.useEffect)(() => {
6816
+ const [, force] = (0, import_react4.useState)(0);
6817
+ (0, import_react4.useEffect)(() => {
6632
6818
  if (center === null) return void 0;
6633
6819
  const timer = setInterval(() => force((value) => value + 1), 1e3);
6634
6820
  return () => clearInterval(timer);
@@ -6637,7 +6823,7 @@ function useCalls() {
6637
6823
  incoming: center?.incoming() ?? [],
6638
6824
  outgoing: center?.outgoing() ?? null,
6639
6825
  canCall: center !== null,
6640
- call: (0, import_react3.useCallback)(
6826
+ call: (0, import_react4.useCallback)(
6641
6827
  async (people, mode) => {
6642
6828
  if (center === null) {
6643
6829
  throw noRuntime(
@@ -6650,7 +6836,7 @@ function useCalls() {
6650
6836
  },
6651
6837
  [center, host]
6652
6838
  ),
6653
- accept: (0, import_react3.useCallback)(
6839
+ accept: (0, import_react4.useCallback)(
6654
6840
  async (invite) => {
6655
6841
  if (center === null || host === null) return;
6656
6842
  await center.accept(invite.id, invite.mode);
@@ -6659,7 +6845,7 @@ function useCalls() {
6659
6845
  },
6660
6846
  [center, host]
6661
6847
  ),
6662
- decline: (0, import_react3.useCallback)(
6848
+ decline: (0, import_react4.useCallback)(
6663
6849
  async (invite, message) => {
6664
6850
  if (center === null) return;
6665
6851
  await center.decline(invite.id, message);
@@ -6667,7 +6853,7 @@ function useCalls() {
6667
6853
  },
6668
6854
  [center]
6669
6855
  ),
6670
- cancel: (0, import_react3.useCallback)(
6856
+ cancel: (0, import_react4.useCallback)(
6671
6857
  async (invite) => {
6672
6858
  if (center === null) return;
6673
6859
  await center.cancel(invite.id);
@@ -6687,19 +6873,19 @@ function useLobby() {
6687
6873
  // No runtime means no host powers — `<LobbyPanel>` renders nothing rather
6688
6874
  // than an admit button that would throw.
6689
6875
  canAdmit: session !== null && isHost,
6690
- admit: (0, import_react3.useCallback)(
6876
+ admit: (0, import_react4.useCallback)(
6691
6877
  async (entry) => requireSession(session, "admit").admit(entry, true),
6692
6878
  [session]
6693
6879
  ),
6694
- deny: (0, import_react3.useCallback)(
6880
+ deny: (0, import_react4.useCallback)(
6695
6881
  async (entry) => requireSession(session, "deny").admit(entry, false),
6696
6882
  [session]
6697
6883
  ),
6698
- admitAll: (0, import_react3.useCallback)(
6884
+ admitAll: (0, import_react4.useCallback)(
6699
6885
  async () => requireSession(session, "admitAll").admitAll(),
6700
6886
  [session]
6701
6887
  ),
6702
- knock: (0, import_react3.useCallback)(
6888
+ knock: (0, import_react4.useCallback)(
6703
6889
  (roomName) => requireSession(session, "knock").knock(roomName),
6704
6890
  [session]
6705
6891
  )
@@ -6719,7 +6905,7 @@ function useRecording() {
6719
6905
  // `stopping` is already stopping; the other in-flight states can be.
6720
6906
  canStop: host !== null && canRecord && (state === "recording" || state === "starting"),
6721
6907
  consentNotice: host?.recording.consentNotice(meeting) ?? null,
6722
- start: (0, import_react3.useCallback)(async () => {
6908
+ start: (0, import_react4.useCallback)(async () => {
6723
6909
  const live = requireHost(host, "startRecording");
6724
6910
  if (meeting === null || live.identity.userId === null) return;
6725
6911
  await live.recording.start({
@@ -6728,7 +6914,7 @@ function useRecording() {
6728
6914
  by: live.identity.userId
6729
6915
  });
6730
6916
  }, [host, meeting]),
6731
- stop: (0, import_react3.useCallback)(async () => {
6917
+ stop: (0, import_react4.useCallback)(async () => {
6732
6918
  const live = requireHost(host, "stopRecording");
6733
6919
  if (meeting === null || live.identity.userId === null) return;
6734
6920
  await live.recording.stop({ meetingId: meeting.id, by: live.identity.userId });
@@ -6739,17 +6925,17 @@ function useMeetAi() {
6739
6925
  const host = useMeetHost();
6740
6926
  const snapshot = useMeetSnapshot();
6741
6927
  const isHost = useIsHost();
6742
- const [asking, setAsking] = (0, import_react3.useState)(false);
6743
- const [answer, setAnswer] = (0, import_react3.useState)(null);
6744
- const [coverage, setCoverage] = (0, import_react3.useState)(null);
6745
- const [phase, setPhase] = (0, import_react3.useState)(null);
6746
- const [error, setError] = (0, import_react3.useState)(null);
6928
+ const [asking, setAsking] = (0, import_react4.useState)(false);
6929
+ const [answer, setAnswer] = (0, import_react4.useState)(null);
6930
+ const [coverage, setCoverage] = (0, import_react4.useState)(null);
6931
+ const [phase, setPhase] = (0, import_react4.useState)(null);
6932
+ const [error, setError] = (0, import_react4.useState)(null);
6747
6933
  const ai = host?.ai ?? null;
6748
6934
  const meeting = snapshot?.meeting ?? null;
6749
6935
  const participants = snapshot?.participants ?? [];
6750
6936
  const notes = snapshot?.notes ?? [];
6751
6937
  const wrapUp = snapshot?.wrapUp ?? null;
6752
- const status = (0, import_react3.useMemo)(
6938
+ const status = (0, import_react4.useMemo)(
6753
6939
  () => noteTakerStatus({
6754
6940
  meeting,
6755
6941
  participants,
@@ -6758,7 +6944,7 @@ function useMeetAi() {
6758
6944
  [meeting, participants, snapshot?.noteTakerRefusal]
6759
6945
  );
6760
6946
  const names = snapshot?.names ?? EMPTY_NAMES;
6761
- const transcript = (0, import_react3.useMemo)(
6947
+ const transcript = (0, import_react4.useMemo)(
6762
6948
  () => readableTranscript(snapshot?.transcript ?? []).map((line) => ({
6763
6949
  id: line.id,
6764
6950
  identity: line.identity,
@@ -6774,7 +6960,7 @@ function useMeetAi() {
6774
6960
  })),
6775
6961
  [snapshot?.transcript, names]
6776
6962
  );
6777
- const dispatchNoteTaker = (0, import_react3.useCallback)(
6963
+ const dispatchNoteTaker = (0, import_react4.useCallback)(
6778
6964
  async (run) => {
6779
6965
  setError(null);
6780
6966
  try {
@@ -6810,7 +6996,7 @@ function useMeetAi() {
6810
6996
  coverage,
6811
6997
  phase,
6812
6998
  error,
6813
- ask: (0, import_react3.useCallback)(
6999
+ ask: (0, import_react4.useCallback)(
6814
7000
  async (question) => {
6815
7001
  if (ai === null || meeting === null) return;
6816
7002
  setAsking(true);
@@ -6841,13 +7027,13 @@ function useMeetAi() {
6841
7027
  },
6842
7028
  [ai, meeting]
6843
7029
  ),
6844
- startNoteTaker: (0, import_react3.useCallback)(async () => {
7030
+ startNoteTaker: (0, import_react4.useCallback)(async () => {
6845
7031
  if (ai === null || meeting === null) return;
6846
7032
  await dispatchNoteTaker(
6847
7033
  () => ai.startNoteTaker({ meetingId: meeting.id, roomName: meeting.roomName })
6848
7034
  );
6849
7035
  }, [ai, meeting, dispatchNoteTaker]),
6850
- stopNoteTaker: (0, import_react3.useCallback)(async () => {
7036
+ stopNoteTaker: (0, import_react4.useCallback)(async () => {
6851
7037
  if (ai === null || meeting === null) return;
6852
7038
  await dispatchNoteTaker(() => ai.stopNoteTaker({ meetingId: meeting.id }));
6853
7039
  }, [ai, meeting, dispatchNoteTaker])
@@ -6857,8 +7043,8 @@ function useEndMeeting() {
6857
7043
  const host = useMeetHost();
6858
7044
  const snapshot = useMeetSnapshot();
6859
7045
  const isHost = useIsHost();
6860
- const [ending, setEnding] = (0, import_react3.useState)(false);
6861
- const [notice, setNotice] = (0, import_react3.useState)(null);
7046
+ const [ending, setEnding] = (0, import_react4.useState)(false);
7047
+ const [notice, setNotice] = (0, import_react4.useState)(null);
6862
7048
  const meeting = snapshot?.meeting ?? null;
6863
7049
  const session = host?.meetings ?? null;
6864
7050
  return {
@@ -6866,7 +7052,7 @@ function useEndMeeting() {
6866
7052
  ending,
6867
7053
  ended: meeting?.endedAt !== null && meeting?.endedAt !== void 0,
6868
7054
  notice,
6869
- end: (0, import_react3.useCallback)(async () => {
7055
+ end: (0, import_react4.useCallback)(async () => {
6870
7056
  const live = requireSession(session, "endForEveryone");
6871
7057
  setEnding(true);
6872
7058
  setNotice(null);
@@ -6903,7 +7089,7 @@ function useReactions() {
6903
7089
  const host = useMeetHost();
6904
7090
  const snapshot = useMeetSnapshot();
6905
7091
  const store = host?.store ?? null;
6906
- (0, import_react3.useEffect)(() => {
7092
+ (0, import_react4.useEffect)(() => {
6907
7093
  if (store === null) return void 0;
6908
7094
  const timer = setInterval(() => store.expireReactions(Date.now()), REACTION_TTL_MS / 2);
6909
7095
  return () => clearInterval(timer);
@@ -6911,8 +7097,8 @@ function useReactions() {
6911
7097
  return snapshot?.reactions ?? [];
6912
7098
  }
6913
7099
  function useElapsed(startedAt) {
6914
- const [now, setNow] = (0, import_react3.useState)(() => Date.now());
6915
- (0, import_react3.useEffect)(() => {
7100
+ const [now, setNow] = (0, import_react4.useState)(() => Date.now());
7101
+ (0, import_react4.useEffect)(() => {
6916
7102
  if (startedAt === null) return void 0;
6917
7103
  const timer = setInterval(() => setNow(Date.now()), 1e3);
6918
7104
  return () => clearInterval(timer);
@@ -6936,15 +7122,15 @@ function useHostControls() {
6936
7122
  (participant) => participant.identity === snapshot.localIdentity
6937
7123
  );
6938
7124
  const actor = me === void 0 ? void 0 : { ...me, role };
6939
- const [busy, setBusy] = (0, import_react3.useState)(false);
7125
+ const [busy, setBusy] = (0, import_react4.useState)(false);
6940
7126
  const inRoom = host?.inRoom ?? null;
6941
7127
  const store = host?.store ?? null;
6942
7128
  const notice = snapshot?.actionNotice ?? null;
6943
- const setNotice = (0, import_react3.useCallback)(
7129
+ const setNotice = (0, import_react4.useCallback)(
6944
7130
  (next) => store?.patch({ actionNotice: next === null ? null : { ...next, at: Date.now() } }),
6945
7131
  [store]
6946
7132
  );
6947
- const run = (0, import_react3.useCallback)(
7133
+ const run = (0, import_react4.useCallback)(
6948
7134
  async (request) => {
6949
7135
  if (inRoom === null) throw noRuntime(`moderate(${request.action})`);
6950
7136
  setBusy(true);
@@ -6970,19 +7156,19 @@ function useHostControls() {
6970
7156
  isOwner: role === "host",
6971
7157
  notice,
6972
7158
  busy,
6973
- clearNotice: (0, import_react3.useCallback)(() => setNotice(null), [setNotice]),
6974
- canModerate: (0, import_react3.useCallback)(
7159
+ clearNotice: (0, import_react4.useCallback)(() => setNotice(null), [setNotice]),
7160
+ canModerate: (0, import_react4.useCallback)(
6975
7161
  (target) => canModerateParticipant(actor, target),
6976
7162
  [actor]
6977
7163
  ),
6978
7164
  run,
6979
- mute: (0, import_react3.useCallback)(
7165
+ mute: (0, import_react4.useCallback)(
6980
7166
  async (target) => {
6981
7167
  await run({ action: "mute", identity: target.identity });
6982
7168
  },
6983
7169
  [run]
6984
7170
  ),
6985
- remove: (0, import_react3.useCallback)(
7171
+ remove: (0, import_react4.useCallback)(
6986
7172
  async (target) => {
6987
7173
  await run({ action: "remove", identity: target.identity });
6988
7174
  },
@@ -6992,7 +7178,7 @@ function useHostControls() {
6992
7178
  }
6993
7179
  function useHandQueue() {
6994
7180
  const snapshot = useMeetSnapshot();
6995
- return (0, import_react3.useMemo)(
7181
+ return (0, import_react4.useMemo)(
6996
7182
  () => (snapshot?.participants ?? []).filter((participant) => participant.handRaised).sort((a, b) => (a.handRaisedAt ?? 0) - (b.handRaisedAt ?? 0)),
6997
7183
  [snapshot?.participants]
6998
7184
  );
@@ -7004,7 +7190,7 @@ function useMediaEffects() {
7004
7190
  return {
7005
7191
  effects: snapshot?.effects ?? DEFAULT_EFFECTS,
7006
7192
  backgroundsSupported: engine?.supportsVideoEffects() ?? false,
7007
- set: (0, import_react3.useCallback)(
7193
+ set: (0, import_react4.useCallback)(
7008
7194
  async (next) => requireEngine(engine, "setEffects").setEffects(next),
7009
7195
  [engine]
7010
7196
  )
@@ -7015,12 +7201,12 @@ function useModerationNotice() {
7015
7201
  const snapshot = useMeetSnapshot();
7016
7202
  return {
7017
7203
  notice: snapshot?.moderationNotice ?? null,
7018
- dismiss: (0, import_react3.useCallback)(() => host?.store.patch({ moderationNotice: null }), [host])
7204
+ dismiss: (0, import_react4.useCallback)(() => host?.store.patch({ moderationNotice: null }), [host])
7019
7205
  };
7020
7206
  }
7021
7207
  function useAudioLevel(stream) {
7022
- const [level, setLevel] = (0, import_react3.useState)(0);
7023
- (0, import_react3.useEffect)(() => {
7208
+ const [level, setLevel] = (0, import_react4.useState)(0);
7209
+ (0, import_react4.useEffect)(() => {
7024
7210
  if (stream === null || stream.getAudioTracks().length === 0) {
7025
7211
  setLevel(0);
7026
7212
  return void 0;
@@ -7059,9 +7245,9 @@ var MEET_SHORTCUTS = [
7059
7245
  { id: "help", keys: "Shift + ?", label: "Show keyboard shortcuts" }
7060
7246
  ];
7061
7247
  function useMeetShortcuts(handlers) {
7062
- const ref = (0, import_react3.useRef)(handlers);
7248
+ const ref = (0, import_react4.useRef)(handlers);
7063
7249
  ref.current = handlers;
7064
- (0, import_react3.useEffect)(() => {
7250
+ (0, import_react4.useEffect)(() => {
7065
7251
  const target = globalThis.window;
7066
7252
  if (target === void 0) return void 0;
7067
7253
  const onKey = (event) => {
@@ -7108,23 +7294,23 @@ function useMeetingRecord(meeting) {
7108
7294
  const repository = host?.repository ?? null;
7109
7295
  const ai = host?.ai ?? null;
7110
7296
  const readerId = host?.identity.userId ?? null;
7111
- const [asking, setAsking] = (0, import_react3.useState)(false);
7112
- const [answer, setAnswer] = (0, import_react3.useState)(null);
7113
- const [coverage, setCoverage] = (0, import_react3.useState)(null);
7114
- const [askError, setAskError] = (0, import_react3.useState)(null);
7297
+ const [asking, setAsking] = (0, import_react4.useState)(false);
7298
+ const [answer, setAnswer] = (0, import_react4.useState)(null);
7299
+ const [coverage, setCoverage] = (0, import_react4.useState)(null);
7300
+ const [askError, setAskError] = (0, import_react4.useState)(null);
7115
7301
  const meetingId = meeting?.id ?? null;
7116
7302
  const api = host?.api ?? null;
7117
7303
  const tokens = host?.tokens ?? null;
7118
7304
  const roomName = meeting?.roomName ?? null;
7119
- const manager = (0, import_react4.useRealtimeManager)();
7305
+ const manager = (0, import_react5.useRealtimeManager)();
7120
7306
  const cache = meetingRecordCache();
7121
7307
  const key = repository !== null && meetingId !== null ? `${readerId ?? `guest:${roomName ?? "-"}`}|${meetingId}` : null;
7122
- const state = (0, import_react3.useSyncExternalStore)(
7308
+ const state = (0, import_react4.useSyncExternalStore)(
7123
7309
  cache.subscribe,
7124
7310
  () => cache.state(key),
7125
7311
  () => cache.state(null)
7126
7312
  );
7127
- const readRef = (0, import_react3.useRef)(() => Promise.reject(new Error("not ready")));
7313
+ const readRef = (0, import_react4.useRef)(() => Promise.reject(new Error("not ready")));
7128
7314
  readRef.current = async () => {
7129
7315
  if (repository === null || meeting === null || meetingId === null) throw new Error("No meeting to read.");
7130
7316
  if (readerId === null && api !== null && tokens !== null && roomName !== null) {
@@ -7153,14 +7339,14 @@ function useMeetingRecord(meeting) {
7153
7339
  }
7154
7340
  return { kind: "parts", meeting, parts };
7155
7341
  };
7156
- (0, import_react3.useEffect)(() => {
7342
+ (0, import_react4.useEffect)(() => {
7157
7343
  if (key === null) return;
7158
7344
  void cache.ensure(key, () => readRef.current());
7159
7345
  }, [cache, key]);
7160
- (0, import_react3.useEffect)(() => {
7346
+ (0, import_react4.useEffect)(() => {
7161
7347
  if (key !== null && meeting !== null) cache.setMeeting(key, meeting);
7162
7348
  }, [cache, key, meeting]);
7163
- (0, import_react3.useEffect)(() => {
7349
+ (0, import_react4.useEffect)(() => {
7164
7350
  if (key === null || manager === null || repository === null || meetingId === null || readerId === null) {
7165
7351
  return void 0;
7166
7352
  }
@@ -7221,7 +7407,7 @@ function useMeetingRecord(meeting) {
7221
7407
  answer,
7222
7408
  coverage,
7223
7409
  askError,
7224
- ask: (0, import_react3.useCallback)(
7410
+ ask: (0, import_react4.useCallback)(
7225
7411
  async (question) => {
7226
7412
  if (ai === null || meetingId === null) return;
7227
7413
  setAsking(true);
@@ -7247,7 +7433,7 @@ function useMeetingRecord(meeting) {
7247
7433
  },
7248
7434
  [ai, meetingId]
7249
7435
  ),
7250
- reload: (0, import_react3.useCallback)(() => {
7436
+ reload: (0, import_react4.useCallback)(() => {
7251
7437
  if (key !== null) void cache.ensure(key, () => readRef.current(), { force: true });
7252
7438
  }, [cache, key])
7253
7439
  };
@@ -7256,12 +7442,12 @@ function useMeetings(limit = 25, organizationFilter = null) {
7256
7442
  const host = useMeetHost();
7257
7443
  const repository = host?.repository ?? null;
7258
7444
  const organizationId = organizationFilter;
7259
- const [meetings, setMeetings] = (0, import_react3.useState)([]);
7260
- const [hasMore, setHasMore] = (0, import_react3.useState)(false);
7261
- const [loading, setLoading] = (0, import_react3.useState)(true);
7262
- const [failure, setFailure] = (0, import_react3.useState)(null);
7263
- const [nonce, setNonce] = (0, import_react3.useState)(0);
7264
- (0, import_react3.useEffect)(() => {
7445
+ const [meetings, setMeetings] = (0, import_react4.useState)([]);
7446
+ const [hasMore, setHasMore] = (0, import_react4.useState)(false);
7447
+ const [loading, setLoading] = (0, import_react4.useState)(true);
7448
+ const [failure, setFailure] = (0, import_react4.useState)(null);
7449
+ const [nonce, setNonce] = (0, import_react4.useState)(0);
7450
+ (0, import_react4.useEffect)(() => {
7265
7451
  if (repository === null) return void 0;
7266
7452
  let live = true;
7267
7453
  setLoading(true);
@@ -7288,18 +7474,18 @@ function useMeetings(limit = 25, organizationFilter = null) {
7288
7474
  meetings,
7289
7475
  hasMore,
7290
7476
  failure,
7291
- reload: (0, import_react3.useCallback)(() => setNonce((value) => value + 1), [])
7477
+ reload: (0, import_react4.useCallback)(() => setNonce((value) => value + 1), [])
7292
7478
  };
7293
7479
  }
7294
7480
  function useGuestRecordAccess(meeting) {
7295
7481
  const host = useMeetHost();
7296
7482
  const api = host?.api ?? null;
7297
7483
  const stored = guestRecordAccessSetting(meeting);
7298
- const [chosen, setChosen] = (0, import_react3.useState)(null);
7299
- const [effective, setEffective] = (0, import_react3.useState)(null);
7300
- const [saving, setSaving] = (0, import_react3.useState)(false);
7301
- const [error, setError] = (0, import_react3.useState)(null);
7302
- (0, import_react3.useEffect)(() => {
7484
+ const [chosen, setChosen] = (0, import_react4.useState)(null);
7485
+ const [effective, setEffective] = (0, import_react4.useState)(null);
7486
+ const [saving, setSaving] = (0, import_react4.useState)(false);
7487
+ const [error, setError] = (0, import_react4.useState)(null);
7488
+ (0, import_react4.useEffect)(() => {
7303
7489
  setChosen(null);
7304
7490
  }, [stored, meeting?.id]);
7305
7491
  return {
@@ -7307,7 +7493,7 @@ function useGuestRecordAccess(meeting) {
7307
7493
  effective,
7308
7494
  saving,
7309
7495
  error,
7310
- choose: (0, import_react3.useCallback)(
7496
+ choose: (0, import_react4.useCallback)(
7311
7497
  async (next) => {
7312
7498
  if (api === null || meeting === null) return;
7313
7499
  setSaving(true);
@@ -7336,7 +7522,7 @@ function useGuestRecordAccess(meeting) {
7336
7522
  }
7337
7523
 
7338
7524
  // src/react/components.tsx
7339
- var import_react6 = require("react");
7525
+ var import_react7 = require("react");
7340
7526
  var import_design_system = require("@ai-matrx/design-system");
7341
7527
  var import_format4 = require("@ai-matrx/kit/format");
7342
7528
 
@@ -7776,13 +7962,13 @@ function countLabel(count2, singular, plural = `${singular}s`) {
7776
7962
  }
7777
7963
 
7778
7964
  // src/react/collab.tsx
7779
- var import_react5 = require("react");
7965
+ var import_react6 = require("react");
7780
7966
  var import_format3 = require("@ai-matrx/kit/format");
7781
7967
 
7782
7968
  // src/react/icons.tsx
7783
- var import_jsx_runtime2 = require("react/jsx-runtime");
7969
+ var import_jsx_runtime3 = require("react/jsx-runtime");
7784
7970
  function Icon({ children, ...props }) {
7785
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
7971
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
7786
7972
  "svg",
7787
7973
  {
7788
7974
  width: "20",
@@ -7801,224 +7987,224 @@ function Icon({ children, ...props }) {
7801
7987
  );
7802
7988
  }
7803
7989
  function MicIcon(props) {
7804
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7805
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
7806
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
7807
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 19v3" })
7990
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
7991
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z" }),
7992
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M19 10v2a7 7 0 0 1-14 0v-2" }),
7993
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 19v3" })
7808
7994
  ] });
7809
7995
  }
7810
7996
  function MicOffIcon(props) {
7811
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7812
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M2 2l20 20" }),
7813
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
7814
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M15 9.34V5a3 3 0 0 0-5.94-.6" }),
7815
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M19 10v2a7 7 0 0 1-.11 1.23M5 10v2a7 7 0 0 0 11 5.66" }),
7816
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 19v3" })
7997
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
7998
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M2 2l20 20" }),
7999
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M9 9v3a3 3 0 0 0 5.12 2.12" }),
8000
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M15 9.34V5a3 3 0 0 0-5.94-.6" }),
8001
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M19 10v2a7 7 0 0 1-.11 1.23M5 10v2a7 7 0 0 0 11 5.66" }),
8002
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 19v3" })
7817
8003
  ] });
7818
8004
  }
7819
8005
  function CameraIcon(props) {
7820
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7821
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m23 7-7 5 7 5V7Z" }),
7822
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "1", y: "5", width: "15", height: "14", rx: "2" })
8006
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8007
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m23 7-7 5 7 5V7Z" }),
8008
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "1", y: "5", width: "15", height: "14", rx: "2" })
7823
8009
  ] });
7824
8010
  }
7825
8011
  function CameraOffIcon(props) {
7826
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7827
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M2 2l20 20" }),
7828
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M10.66 5H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10" }),
7829
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M16 16a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2" })
8012
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8013
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M2 2l20 20" }),
8014
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M10.66 5H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10" }),
8015
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M16 16a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2" })
7830
8016
  ] });
7831
8017
  }
7832
8018
  function ScreenShareIcon(props) {
7833
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7834
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2" }),
7835
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M8 21h8M12 17v4" }),
7836
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 13V8m0 0-2.5 2.5M12 8l2.5 2.5" })
8019
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8020
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "2", y: "3", width: "20", height: "14", rx: "2" }),
8021
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M8 21h8M12 17v4" }),
8022
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 13V8m0 0-2.5 2.5M12 8l2.5 2.5" })
7837
8023
  ] });
7838
8024
  }
7839
8025
  function PhoneIcon(props) {
7840
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }) });
8026
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }) });
7841
8027
  }
7842
8028
  function PhoneOffIcon(props) {
7843
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { fill: "currentColor", stroke: "none", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }) });
8029
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { fill: "currentColor", stroke: "none", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }) });
7844
8030
  }
7845
8031
  function HandIcon(props) {
7846
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7847
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M18 11V6a2 2 0 0 0-4 0v5" }),
7848
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M14 10V4a2 2 0 0 0-4 0v7" }),
7849
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M10 10.5V6a2 2 0 0 0-4 0v8" }),
7850
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" })
8032
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8033
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 11V6a2 2 0 0 0-4 0v5" }),
8034
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M14 10V4a2 2 0 0 0-4 0v7" }),
8035
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M10 10.5V6a2 2 0 0 0-4 0v8" }),
8036
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" })
7851
8037
  ] });
7852
8038
  }
7853
8039
  function ChatIcon(props) {
7854
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z" }) });
8040
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2Z" }) });
7855
8041
  }
7856
8042
  function PeopleIcon(props) {
7857
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7858
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
7859
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "9", cy: "7", r: "4" }),
7860
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" })
8043
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8044
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }),
8045
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "9", cy: "7", r: "4" }),
8046
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M22 21v-2a4 4 0 0 0-3-3.87M16 3.13a4 4 0 0 1 0 7.75" })
7861
8047
  ] });
7862
8048
  }
7863
8049
  function RecordIcon(props) {
7864
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
8050
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "12", cy: "12", r: "8", fill: "currentColor", stroke: "none" }) });
7865
8051
  }
7866
8052
  function SparklesIcon(props) {
7867
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7868
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }),
7869
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" })
8053
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8054
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }),
8055
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" })
7870
8056
  ] });
7871
8057
  }
7872
8058
  function LockIcon(props) {
7873
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7874
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "4", y: "10", width: "16", height: "11", rx: "2" }),
7875
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
8059
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8060
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "4", y: "10", width: "16", height: "11", rx: "2" }),
8061
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
7876
8062
  ] });
7877
8063
  }
7878
8064
  function LayoutIcon(props) {
7879
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7880
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
7881
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M3 9h18M9 21V9" })
8065
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8066
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
8067
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M3 9h18M9 21V9" })
7882
8068
  ] });
7883
8069
  }
7884
8070
  function SettingsIcon(props) {
7885
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7886
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "3" }),
7887
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" })
8071
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8072
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "12", cy: "12", r: "3" }),
8073
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" })
7888
8074
  ] });
7889
8075
  }
7890
8076
  function CheckIcon(props) {
7891
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M20 6 9 17l-5-5" }) });
8077
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M20 6 9 17l-5-5" }) });
7892
8078
  }
7893
8079
  function CloseIcon(props) {
7894
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M18 6 6 18M6 6l12 12" }) });
8080
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 6 6 18M6 6l12 12" }) });
7895
8081
  }
7896
8082
  function PinIcon(props) {
7897
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7898
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 17v5" }),
7899
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
8083
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8084
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 17v5" }),
8085
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
7900
8086
  ] });
7901
8087
  }
7902
8088
  function WifiLowIcon(props) {
7903
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7904
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 20h.01" }),
7905
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
8089
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8090
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 20h.01" }),
8091
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
7906
8092
  ] });
7907
8093
  }
7908
8094
  function SmileIcon(props) {
7909
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7910
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
7911
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }),
7912
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }),
7913
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "15", x2: "15.01", y1: "9", y2: "9" })
8095
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8096
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
8097
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }),
8098
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }),
8099
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "15", x2: "15.01", y1: "9", y2: "9" })
7914
8100
  ] });
7915
8101
  }
7916
8102
  function MoreIcon(props) {
7917
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7918
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "1" }),
7919
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "19", cy: "12", r: "1" }),
7920
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "5", cy: "12", r: "1" })
8103
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8104
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "12", cy: "12", r: "1" }),
8105
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "19", cy: "12", r: "1" }),
8106
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "5", cy: "12", r: "1" })
7921
8107
  ] });
7922
8108
  }
7923
8109
  function SearchIcon(props) {
7924
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7925
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
7926
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m21 21-4.3-4.3" })
8110
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8111
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
8112
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m21 21-4.3-4.3" })
7927
8113
  ] });
7928
8114
  }
7929
8115
  function KeyboardIcon(props) {
7930
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7931
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M10 8h.01M12 12h.01M14 8h.01M16 12h.01M18 8h.01M6 8h.01M7 16h10M8 12h.01" }),
7932
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { width: "20", height: "16", x: "2", y: "4", rx: "2" })
8116
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8117
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M10 8h.01M12 12h.01M14 8h.01M16 12h.01M18 8h.01M6 8h.01M7 16h10M8 12h.01" }),
8118
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { width: "20", height: "16", x: "2", y: "4", rx: "2" })
7933
8119
  ] });
7934
8120
  }
7935
8121
  function SpotlightIcon(props) {
7936
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }) });
8122
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }) });
7937
8123
  }
7938
8124
  function SignalIcon({ bars, ...props }) {
7939
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7940
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M4 20v-2", opacity: bars >= 1 ? 1 : 0.3 }),
7941
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M10 20v-6", opacity: bars >= 2 ? 1 : 0.3 }),
7942
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M16 20V9", opacity: bars >= 3 ? 1 : 0.3 }),
7943
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M22 20V4", opacity: bars >= 3 ? 1 : 0.3 })
8125
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8126
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M4 20v-2", opacity: bars >= 1 ? 1 : 0.3 }),
8127
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M10 20v-6", opacity: bars >= 2 ? 1 : 0.3 }),
8128
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M16 20V9", opacity: bars >= 3 ? 1 : 0.3 }),
8129
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M22 20V4", opacity: bars >= 3 ? 1 : 0.3 })
7944
8130
  ] });
7945
8131
  }
7946
8132
  function SpeakerIcon(props) {
7947
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7948
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M11 5 6 9H2v6h4l5 4V5Z" }),
7949
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M15.54 8.46a5 5 0 0 1 0 7.07" }),
7950
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M19.07 4.93a10 10 0 0 1 0 14.14" })
8133
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8134
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M11 5 6 9H2v6h4l5 4V5Z" }),
8135
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M15.54 8.46a5 5 0 0 1 0 7.07" }),
8136
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M19.07 4.93a10 10 0 0 1 0 14.14" })
7951
8137
  ] });
7952
8138
  }
7953
8139
  function FlagIcon(props) {
7954
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7955
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }),
7956
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "4", x2: "4", y1: "22", y2: "15" })
8140
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8141
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }),
8142
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "4", x2: "4", y1: "22", y2: "15" })
7957
8143
  ] });
7958
8144
  }
7959
8145
  function PencilIcon(props) {
7960
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" }) });
8146
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" }) });
7961
8147
  }
7962
8148
  function ActivitiesIcon(props) {
7963
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7964
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }),
7965
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
7966
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "17.5", cy: "17.5", r: "3.5" })
8149
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8150
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }),
8151
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1" }),
8152
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("circle", { cx: "17.5", cy: "17.5", r: "3.5" })
7967
8153
  ] });
7968
8154
  }
7969
8155
  function PollIcon(props) {
7970
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7971
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "18", x2: "18", y1: "20", y2: "10" }),
7972
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "12", x2: "12", y1: "20", y2: "4" }),
7973
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("line", { x1: "6", x2: "6", y1: "20", y2: "14" })
8156
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8157
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "18", x2: "18", y1: "20", y2: "10" }),
8158
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "12", x2: "12", y1: "20", y2: "4" }),
8159
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "6", x2: "6", y1: "20", y2: "14" })
7974
8160
  ] });
7975
8161
  }
7976
8162
  function QuestionIcon(props) {
7977
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7978
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z" }),
7979
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
7980
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 17h.01" })
8163
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8164
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M7.9 20A9 9 0 1 0 4 16.1L2 22Z" }),
8165
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }),
8166
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M12 17h.01" })
7981
8167
  ] });
7982
8168
  }
7983
8169
  function WhiteboardIcon(props) {
7984
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7985
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M2 3h20" }),
7986
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" }),
7987
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m7 21 5-5 5 5" })
8170
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8171
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M2 3h20" }),
8172
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3" }),
8173
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m7 21 5-5 5 5" })
7988
8174
  ] });
7989
8175
  }
7990
8176
  function BreakoutIcon(props) {
7991
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
7992
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { width: "7", height: "18", x: "3", y: "3", rx: "1" }),
7993
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }),
7994
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })
8177
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8178
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { width: "7", height: "18", x: "3", y: "3", rx: "1" }),
8179
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }),
8180
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })
7995
8181
  ] });
7996
8182
  }
7997
8183
  function UpvoteIcon(props) {
7998
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
8184
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Icon, { ...props, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M9 18v-6H5l7-7 7 7h-4v6H9z" }) });
7999
8185
  }
8000
8186
  function EraserIcon(props) {
8001
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
8002
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" }),
8003
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M22 21H7" }),
8004
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m5 11 9 9" })
8187
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8188
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" }),
8189
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M22 21H7" }),
8190
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m5 11 9 9" })
8005
8191
  ] });
8006
8192
  }
8007
8193
  function HighlighterIcon(props) {
8008
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
8009
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m9 11-6 6v3h9l3-3" }),
8010
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" })
8194
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8195
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "m9 11-6 6v3h9l3-3" }),
8196
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" })
8011
8197
  ] });
8012
8198
  }
8013
8199
  function UndoIcon(props) {
8014
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Icon, { ...props, children: [
8015
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9 14 4 9l5-5" }),
8016
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("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" })
8200
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Icon, { ...props, children: [
8201
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M9 14 4 9l5-5" }),
8202
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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" })
8017
8203
  ] });
8018
8204
  }
8019
8205
 
8020
8206
  // src/react/collab.tsx
8021
- var import_jsx_runtime3 = require("react/jsx-runtime");
8207
+ var import_jsx_runtime4 = require("react/jsx-runtime");
8022
8208
  function useCollab() {
8023
8209
  const host = useMeetHost();
8024
8210
  const snapshot = useMeetSnapshot();
@@ -8049,8 +8235,8 @@ function useCollab() {
8049
8235
  };
8050
8236
  }
8051
8237
  function useNotice() {
8052
- const [notice, setNotice] = (0, import_react5.useState)(null);
8053
- (0, import_react5.useEffect)(() => {
8238
+ const [notice, setNotice] = (0, import_react6.useState)(null);
8239
+ (0, import_react6.useEffect)(() => {
8054
8240
  if (notice === null) return void 0;
8055
8241
  const timer = setTimeout(() => setNotice(null), notice.failed ? 7e3 : 3e3);
8056
8242
  return () => clearTimeout(timer);
@@ -8059,7 +8245,7 @@ function useNotice() {
8059
8245
  }
8060
8246
  function Notice({ notice }) {
8061
8247
  if (notice === null) return null;
8062
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: notice.failed ? "mx-meet__panel-note mx-meet__collab-error" : "mx-meet__panel-note", role: "status", children: notice.text });
8248
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: notice.failed ? "mx-meet__panel-note mx-meet__collab-error" : "mx-meet__panel-note", role: "status", children: notice.text });
8063
8249
  }
8064
8250
  var ACTIVITY_LABELS = {
8065
8251
  polls: "Polls",
@@ -8069,10 +8255,10 @@ var ACTIVITY_LABELS = {
8069
8255
  };
8070
8256
  function ActivityIcon({ panel }) {
8071
8257
  const props = { width: 16, height: 16 };
8072
- if (panel === "polls") return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PollIcon, { ...props });
8073
- if (panel === "qa") return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(QuestionIcon, { ...props });
8074
- if (panel === "whiteboard") return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WhiteboardIcon, { ...props });
8075
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(BreakoutIcon, { ...props });
8258
+ if (panel === "polls") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PollIcon, { ...props });
8259
+ if (panel === "qa") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(QuestionIcon, { ...props });
8260
+ if (panel === "whiteboard") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(WhiteboardIcon, { ...props });
8261
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreakoutIcon, { ...props });
8076
8262
  }
8077
8263
  function useAvailableActivities() {
8078
8264
  const { collab, isHost } = useCollab();
@@ -8096,16 +8282,16 @@ function ActivitiesControl({
8096
8282
  active,
8097
8283
  onOpen
8098
8284
  }) {
8099
- const [open, setOpen] = (0, import_react5.useState)(false);
8285
+ const [open, setOpen] = (0, import_react6.useState)(false);
8100
8286
  const available = useAvailableActivities();
8101
8287
  const attention = useActivityAttention();
8102
8288
  if (available.length === 0) return null;
8103
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "mx-meet__anchor", children: [
8104
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(ControlButton, { label: "Activities", active: open || active !== null, onClick: () => setOpen(!open), children: [
8105
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ActivitiesIcon, {}),
8106
- attention ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
8289
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__anchor", children: [
8290
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(ControlButton, { label: "Activities", active: open || active !== null, onClick: () => setOpen(!open), children: [
8291
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActivitiesIcon, {}),
8292
+ attention ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
8107
8293
  ] }),
8108
- open ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Popover, { label: "Activities", onClose: () => setOpen(false), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mx-meet__menu", role: "menu", children: available.map((panel) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8294
+ open ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: "Activities", onClose: () => setOpen(false), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__menu", role: "menu", children: available.map((panel) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8109
8295
  MenuItem,
8110
8296
  {
8111
8297
  onSelect: () => {
@@ -8113,7 +8299,7 @@ function ActivitiesControl({
8113
8299
  onOpen(panel);
8114
8300
  },
8115
8301
  children: [
8116
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ActivityIcon, { panel }),
8302
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ActivityIcon, { panel }),
8117
8303
  " ",
8118
8304
  ACTIVITY_LABELS[panel]
8119
8305
  ]
@@ -8124,11 +8310,11 @@ function ActivitiesControl({
8124
8310
  }
8125
8311
  function PollComposer({ maxOptions, onDone }) {
8126
8312
  const { act } = useCollab();
8127
- const [question, setQuestion] = (0, import_react5.useState)("");
8128
- const [options, setOptions] = (0, import_react5.useState)(["", ""]);
8129
- const [multiple, setMultiple] = (0, import_react5.useState)(false);
8130
- const [anonymous, setAnonymous] = (0, import_react5.useState)(false);
8131
- const [busy, setBusy] = (0, import_react5.useState)(false);
8313
+ const [question, setQuestion] = (0, import_react6.useState)("");
8314
+ const [options, setOptions] = (0, import_react6.useState)(["", ""]);
8315
+ const [multiple, setMultiple] = (0, import_react6.useState)(false);
8316
+ const [anonymous, setAnonymous] = (0, import_react6.useState)(false);
8317
+ const [busy, setBusy] = (0, import_react6.useState)(false);
8132
8318
  const [notice, show] = useNotice();
8133
8319
  const filled = options.map((o) => o.trim()).filter(Boolean);
8134
8320
  const ready = question.trim().length > 0 && filled.length >= 2;
@@ -8151,7 +8337,7 @@ function PollComposer({ maxOptions, onDone }) {
8151
8337
  setBusy(false);
8152
8338
  onDone();
8153
8339
  };
8154
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8340
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8155
8341
  "form",
8156
8342
  {
8157
8343
  className: "mx-meet__collab-card",
@@ -8160,9 +8346,9 @@ function PollComposer({ maxOptions, onDone }) {
8160
8346
  if (ready) void save(true);
8161
8347
  },
8162
8348
  children: [
8163
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__field", children: [
8164
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__field-label", children: "Question" }),
8165
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8349
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
8350
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Question" }),
8351
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8166
8352
  "input",
8167
8353
  {
8168
8354
  className: "mx-meet__input",
@@ -8174,8 +8360,8 @@ function PollComposer({ maxOptions, onDone }) {
8174
8360
  }
8175
8361
  )
8176
8362
  ] }),
8177
- options.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__composer-row", children: [
8178
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8363
+ options.map((option, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__composer-row", children: [
8364
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8179
8365
  "input",
8180
8366
  {
8181
8367
  className: "mx-meet__input",
@@ -8186,22 +8372,22 @@ function PollComposer({ maxOptions, onDone }) {
8186
8372
  onChange: (event) => setOptions(options.map((o, i) => i === index ? event.target.value : o))
8187
8373
  }
8188
8374
  ),
8189
- options.length > 2 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ControlButton, { label: `Remove answer ${index + 1}`, onClick: () => setOptions(options.filter((_, i) => i !== index)), children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(CloseIcon, { width: 14, height: 14 }) }) : null
8375
+ options.length > 2 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: `Remove answer ${index + 1}`, onClick: () => setOptions(options.filter((_, i) => i !== index)), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 14, height: 14 }) }) : null
8190
8376
  ] }, index)),
8191
- options.length < maxOptions ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
8192
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__toggle", children: [
8193
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
8377
+ options.length < maxOptions ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setOptions([...options, ""]), children: "Add an answer" }) : null,
8378
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__toggle", children: [
8379
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { type: "checkbox", checked: multiple, onChange: (event) => setMultiple(event.target.checked) }),
8194
8380
  "People can pick more than one"
8195
8381
  ] }),
8196
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__toggle", children: [
8197
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
8382
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__toggle", children: [
8383
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
8198
8384
  "Anonymous \u2014 nobody sees who picked what"
8199
8385
  ] }),
8200
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8201
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8202
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "submit", className: "mx-meet__primary mx-meet__primary--small", disabled: !ready || busy, children: "Launch" }),
8203
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", disabled: !ready || busy, onClick: () => void save(false), children: "Save draft" }),
8204
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onDone, children: "Cancel" })
8386
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8387
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8388
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__primary mx-meet__primary--small", disabled: !ready || busy, children: "Launch" }),
8389
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", disabled: !ready || busy, onClick: () => void save(false), children: "Save draft" }),
8390
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onDone, children: "Cancel" })
8205
8391
  ] })
8206
8392
  ]
8207
8393
  }
@@ -8209,9 +8395,9 @@ function PollComposer({ maxOptions, onDone }) {
8209
8395
  }
8210
8396
  function PollCard({ poll }) {
8211
8397
  const { act, isHost } = useCollab();
8212
- const [picked, setPicked] = (0, import_react5.useState)(poll.myVote.slice());
8398
+ const [picked, setPicked] = (0, import_react6.useState)(poll.myVote.slice());
8213
8399
  const [notice, show] = useNotice();
8214
- (0, import_react5.useEffect)(() => setPicked(poll.myVote.slice()), [poll.myVote]);
8400
+ (0, import_react6.useEffect)(() => setPicked(poll.myVote.slice()), [poll.myVote]);
8215
8401
  const counts = poll.options.some((o) => o.votes !== void 0);
8216
8402
  const total = poll.options.reduce((sum, o) => sum + (o.votes ?? 0), 0);
8217
8403
  const canVote = poll.state === "live";
@@ -8221,22 +8407,22 @@ function PollCard({ poll }) {
8221
8407
  if (!canVote) return;
8222
8408
  setPicked(poll.multiple ? picked.includes(id) ? picked.filter((p) => p !== id) : [...picked, id] : [id]);
8223
8409
  };
8224
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("article", { className: "mx-meet__collab-card", "aria-label": poll.question, children: [
8225
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("header", { className: "mx-meet__collab-head", children: [
8226
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { className: "mx-meet__collab-title", children: poll.question }),
8227
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__collab-state", children: stateWord })
8410
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("article", { className: "mx-meet__collab-card", "aria-label": poll.question, children: [
8411
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__collab-head", children: [
8412
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { className: "mx-meet__collab-title", children: poll.question }),
8413
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__collab-state", children: stateWord })
8228
8414
  ] }),
8229
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "mx-meet__panel-note", children: [
8415
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__panel-note", children: [
8230
8416
  poll.multiple ? "Pick any." : "Pick one.",
8231
8417
  poll.anonymous ? " Anonymous." : "",
8232
8418
  counts && poll.voterCount !== null ? ` ${poll.voterCount} voted.` : "",
8233
8419
  isHost && poll.state !== "draft" && !poll.resultsShared ? " Results are visible only to hosts." : ""
8234
8420
  ] }),
8235
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
8421
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__poll-options", children: poll.options.map((option) => {
8236
8422
  const share = counts && total > 0 ? Math.round((option.votes ?? 0) / total * 100) : 0;
8237
8423
  const chosen = picked.includes(option.id);
8238
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { children: [
8239
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8424
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { children: [
8425
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8240
8426
  "button",
8241
8427
  {
8242
8428
  type: "button",
@@ -8245,9 +8431,9 @@ function PollCard({ poll }) {
8245
8431
  disabled: !canVote,
8246
8432
  onClick: () => toggle(option.id),
8247
8433
  children: [
8248
- counts ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__poll-bar", style: { width: `${share}%` }, "aria-hidden": "true" }) : null,
8249
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__poll-text", children: option.text }),
8250
- counts ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "mx-meet__poll-count", children: [
8434
+ counts ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__poll-bar", style: { width: `${share}%` }, "aria-hidden": "true" }) : null,
8435
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__poll-text", children: option.text }),
8436
+ counts ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__poll-count", children: [
8251
8437
  option.votes ?? 0,
8252
8438
  " \xB7 ",
8253
8439
  share,
@@ -8256,12 +8442,12 @@ function PollCard({ poll }) {
8256
8442
  ]
8257
8443
  }
8258
8444
  ),
8259
- option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
8445
+ option.voters !== void 0 && option.voters.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__poll-voters", children: option.voters.join(", ") }) : null
8260
8446
  ] }, option.id);
8261
8447
  }) }),
8262
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8263
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8264
- canVote ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8448
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8449
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8450
+ canVote ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8265
8451
  "button",
8266
8452
  {
8267
8453
  type: "button",
@@ -8271,35 +8457,35 @@ function PollCard({ poll }) {
8271
8457
  children: voted ? "Change vote" : "Vote"
8272
8458
  }
8273
8459
  ) : null,
8274
- isHost && poll.state === "draft" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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,
8275
- isHost && poll.state === "live" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_close", itemId: poll.id }).then(show), children: "End poll" }) : null,
8276
- isHost && poll.state !== "draft" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("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,
8277
- isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "poll_delete", itemId: poll.id }).then(show), children: "Delete" }) : null
8460
+ isHost && poll.state === "draft" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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,
8461
+ isHost && poll.state === "live" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "poll_close", itemId: poll.id }).then(show), children: "End poll" }) : null,
8462
+ isHost && poll.state !== "draft" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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,
8463
+ isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "poll_delete", itemId: poll.id }).then(show), children: "Delete" }) : null
8278
8464
  ] })
8279
8465
  ] });
8280
8466
  }
8281
8467
  function PollsPanel({ onClose }) {
8282
8468
  const { collab, isHost } = useCollab();
8283
- const [composing, setComposing] = (0, import_react5.useState)(false);
8469
+ const [composing, setComposing] = (0, import_react6.useState)(false);
8284
8470
  const polls = collab?.polls ?? [];
8285
8471
  const maxOptions = collab?.settings?.pollMaxOptions ?? 10;
8286
8472
  const ordered = [...polls].reverse();
8287
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PanelShell, { title: "Polls", onClose, children: [
8288
- collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
8289
- isHost && !composing ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => setComposing(true), children: "New poll" }) : null,
8290
- isHost && composing ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PollComposer, { maxOptions, onDone: () => setComposing(false) }) : null,
8291
- ordered.length === 0 && !composing ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note", children: isHost ? "No polls yet. Polls and their results are kept with the meeting." : "No polls yet." }) : null,
8292
- ordered.map((poll) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PollCard, { poll }, poll.id))
8473
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Polls", onClose, children: [
8474
+ collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
8475
+ isHost && !composing ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__primary mx-meet__primary--small", onClick: () => setComposing(true), children: "New poll" }) : null,
8476
+ isHost && composing ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PollComposer, { maxOptions, onDone: () => setComposing(false) }) : null,
8477
+ ordered.length === 0 && !composing ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: isHost ? "No polls yet. Polls and their results are kept with the meeting." : "No polls yet." }) : null,
8478
+ ordered.map((poll) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PollCard, { poll }, poll.id))
8293
8479
  ] });
8294
8480
  }
8295
8481
  function QuestionCard({ question }) {
8296
8482
  const { act, isHost } = useCollab();
8297
- const [answering, setAnswering] = (0, import_react5.useState)(false);
8298
- const [reply, setReply] = (0, import_react5.useState)("");
8483
+ const [answering, setAnswering] = (0, import_react6.useState)(false);
8484
+ const [reply, setReply] = (0, import_react6.useState)("");
8299
8485
  const [notice, show] = useNotice();
8300
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { className: `mx-meet__collab-card mx-meet__question mx-meet__question--${question.state}`, children: [
8301
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__question-row", children: [
8302
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8486
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: `mx-meet__collab-card mx-meet__question mx-meet__question--${question.state}`, children: [
8487
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__question-row", children: [
8488
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8303
8489
  "button",
8304
8490
  {
8305
8491
  type: "button",
@@ -8309,20 +8495,20 @@ function QuestionCard({ question }) {
8309
8495
  disabled: question.state === "dismissed",
8310
8496
  onClick: () => void act({ action: "question_upvote", itemId: question.id }).then((r) => r.ok ? void 0 : show(r)),
8311
8497
  children: [
8312
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(UpvoteIcon, { width: 16, height: 16 }),
8313
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: question.upvotes })
8498
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(UpvoteIcon, { width: 16, height: 16 }),
8499
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: question.upvotes })
8314
8500
  ]
8315
8501
  }
8316
8502
  ),
8317
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__question-body", children: [
8318
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "mx-meet__chat-meta", children: [
8319
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: question.mine ? "You" : question.askerName }),
8320
- question.mine && question.anonymous ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__chat-private", children: "anonymous" }) : null,
8321
- question.state !== "open" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__collab-state", children: question.state === "answered" ? "Answered" : "Dismissed" }) : null
8503
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__question-body", children: [
8504
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__chat-meta", children: [
8505
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: question.mine ? "You" : question.askerName }),
8506
+ question.mine && question.anonymous ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__chat-private", children: "anonymous" }) : null,
8507
+ question.state !== "open" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__collab-state", children: question.state === "answered" ? "Answered" : "Dismissed" }) : null
8322
8508
  ] }),
8323
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__chat-text", children: question.text }),
8324
- question.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "mx-meet__question-answer", children: [
8325
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("strong", { children: [
8509
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__chat-text", children: question.text }),
8510
+ question.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__question-answer", children: [
8511
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("strong", { children: [
8326
8512
  question.answeredByName ?? "Host",
8327
8513
  ":"
8328
8514
  ] }),
@@ -8331,7 +8517,7 @@ function QuestionCard({ question }) {
8331
8517
  ] }) : null
8332
8518
  ] })
8333
8519
  ] }),
8334
- answering ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8520
+ answering ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8335
8521
  "form",
8336
8522
  {
8337
8523
  className: "mx-meet__composer-row",
@@ -8346,7 +8532,7 @@ function QuestionCard({ question }) {
8346
8532
  });
8347
8533
  },
8348
8534
  children: [
8349
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8535
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8350
8536
  "input",
8351
8537
  {
8352
8538
  className: "mx-meet__input",
@@ -8358,24 +8544,24 @@ function QuestionCard({ question }) {
8358
8544
  autoFocus: true
8359
8545
  }
8360
8546
  ),
8361
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "submit", className: "mx-meet__send", children: "Done" })
8547
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", children: "Done" })
8362
8548
  ]
8363
8549
  }
8364
8550
  ) : null,
8365
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8366
- isHost || question.mine ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8367
- isHost && question.state === "open" && !answering ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => setAnswering(true), children: "Answer" }) : null,
8368
- isHost && question.state === "open" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_dismiss", itemId: question.id }).then(show), children: "Dismiss" }) : null,
8369
- isHost && question.state !== "open" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_reopen", itemId: question.id }).then(show), children: "Reopen" }) : null,
8370
- question.mine || isHost ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "question_delete", itemId: question.id }).then(show), children: "Delete" }) : null
8551
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8552
+ isHost || question.mine ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-actions", children: [
8553
+ isHost && question.state === "open" && !answering ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => setAnswering(true), children: "Answer" }) : null,
8554
+ isHost && question.state === "open" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_dismiss", itemId: question.id }).then(show), children: "Dismiss" }) : null,
8555
+ isHost && question.state !== "open" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "question_reopen", itemId: question.id }).then(show), children: "Reopen" }) : null,
8556
+ question.mine || isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void act({ action: "question_delete", itemId: question.id }).then(show), children: "Delete" }) : null
8371
8557
  ] }) : null
8372
8558
  ] });
8373
8559
  }
8374
8560
  function QaPanel({ onClose }) {
8375
8561
  const { collab, act } = useCollab();
8376
- const [draft, setDraft] = (0, import_react5.useState)("");
8377
- const [anonymous, setAnonymous] = (0, import_react5.useState)(false);
8378
- const [order, setOrder] = (0, import_react5.useState)("popular");
8562
+ const [draft, setDraft] = (0, import_react6.useState)("");
8563
+ const [anonymous, setAnonymous] = (0, import_react6.useState)(false);
8564
+ const [order, setOrder] = (0, import_react6.useState)("popular");
8379
8565
  const [notice, show] = useNotice();
8380
8566
  const allowAnonymous = collab?.settings?.qaAnonymousAllowed === true;
8381
8567
  const questions = [...collab?.questions ?? []];
@@ -8383,9 +8569,9 @@ function QaPanel({ onClose }) {
8383
8569
  questions.sort(
8384
8570
  (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 ?? "")
8385
8571
  );
8386
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PanelShell, { title: "Q&A", onClose, children: [
8387
- collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
8388
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8572
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Q&A", onClose, children: [
8573
+ collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
8574
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8389
8575
  "form",
8390
8576
  {
8391
8577
  className: "mx-meet__composer mx-meet__composer--chat",
@@ -8399,8 +8585,8 @@ function QaPanel({ onClose }) {
8399
8585
  });
8400
8586
  },
8401
8587
  children: [
8402
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__composer-row", children: [
8403
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8588
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__composer-row", children: [
8589
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8404
8590
  "input",
8405
8591
  {
8406
8592
  className: "mx-meet__input",
@@ -8411,17 +8597,17 @@ function QaPanel({ onClose }) {
8411
8597
  "aria-label": "Ask the host a question"
8412
8598
  }
8413
8599
  ),
8414
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
8600
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Ask" })
8415
8601
  ] }),
8416
- allowAnonymous ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__toggle", children: [
8417
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
8602
+ allowAnonymous ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__toggle", children: [
8603
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("input", { type: "checkbox", checked: anonymous, onChange: (event) => setAnonymous(event.target.checked) }),
8418
8604
  "Ask anonymously"
8419
8605
  ] }) : null
8420
8606
  ]
8421
8607
  }
8422
8608
  ),
8423
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8424
- questions.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "Order questions", children: ["popular", "recent"].map((value) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8609
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8610
+ questions.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "Order questions", children: ["popular", "recent"].map((value) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8425
8611
  "button",
8426
8612
  {
8427
8613
  type: "button",
@@ -8432,7 +8618,7 @@ function QaPanel({ onClose }) {
8432
8618
  },
8433
8619
  value
8434
8620
  )) }) : null,
8435
- questions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note", children: "No questions yet. Questions are kept with the meeting." }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__chat", children: questions.map((question) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(QuestionCard, { question }, question.id)) })
8621
+ questions.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: "No questions yet. Questions are kept with the meeting." }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__chat", children: questions.map((question) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(QuestionCard, { question }, question.id)) })
8436
8622
  ] });
8437
8623
  }
8438
8624
  var BOARD_W = 1600;
@@ -8446,7 +8632,7 @@ function strokePath(points) {
8446
8632
  return `${move} ${rest.map(([x, y]) => `L${(x * BOARD_W).toFixed(1)} ${(y * BOARD_H).toFixed(1)}`).join(" ")}`;
8447
8633
  }
8448
8634
  function StrokeView({ stroke, onPick }) {
8449
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8635
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8450
8636
  "path",
8451
8637
  {
8452
8638
  d: strokePath(stroke.points),
@@ -8458,18 +8644,18 @@ function StrokeView({ stroke, onPick }) {
8458
8644
  strokeLinejoin: "round",
8459
8645
  onPointerDown: onPick,
8460
8646
  style: onPick !== void 0 ? { cursor: "pointer" } : void 0,
8461
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("title", { children: stroke.byName })
8647
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("title", { children: stroke.byName })
8462
8648
  }
8463
8649
  );
8464
8650
  }
8465
8651
  function WhiteboardPanel({ onClose }) {
8466
8652
  const { collab, act, isHost, localIdentity } = useCollab();
8467
- const [tool, setTool] = (0, import_react5.useState)("pen");
8468
- const [color, setColor] = (0, import_react5.useState)(INK[0]);
8469
- const [drawing, setDrawing] = (0, import_react5.useState)(null);
8470
- const [pending, setPending] = (0, import_react5.useState)([]);
8653
+ const [tool, setTool] = (0, import_react6.useState)("pen");
8654
+ const [color, setColor] = (0, import_react6.useState)(INK[0]);
8655
+ const [drawing, setDrawing] = (0, import_react6.useState)(null);
8656
+ const [pending, setPending] = (0, import_react6.useState)([]);
8471
8657
  const [notice, show] = useNotice();
8472
- const svgRef = (0, import_react5.useRef)(null);
8658
+ const svgRef = (0, import_react6.useRef)(null);
8473
8659
  const strokes = collab?.strokes ?? [];
8474
8660
  const mine = strokes.filter((s) => s.by === localIdentity);
8475
8661
  const point = (event) => {
@@ -8501,14 +8687,14 @@ function WhiteboardPanel({ onClose }) {
8501
8687
  if (!result.ok) show(result);
8502
8688
  });
8503
8689
  };
8504
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("section", { className: "mx-meet__whiteboard", "aria-label": "Whiteboard", children: [
8505
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("header", { className: "mx-meet__whiteboard-bar", children: [
8506
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { className: "mx-meet__panel-title", children: "Whiteboard" }),
8507
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "Tool", children: [
8508
- ["pen", "Pen", /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(PencilIcon, { width: 16, height: 16 }, "p")],
8509
- ["highlighter", "Highlighter", /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(HighlighterIcon, { width: 16, height: 16 }, "h")],
8510
- ["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(EraserIcon, { width: 16, height: 16 }, "e")]
8511
- ].map(([value, label, icon]) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8690
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__whiteboard", "aria-label": "Whiteboard", children: [
8691
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__whiteboard-bar", children: [
8692
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { className: "mx-meet__panel-title", children: "Whiteboard" }),
8693
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "Tool", children: [
8694
+ ["pen", "Pen", /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PencilIcon, { width: 16, height: 16 }, "p")],
8695
+ ["highlighter", "Highlighter", /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HighlighterIcon, { width: 16, height: 16 }, "h")],
8696
+ ["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EraserIcon, { width: 16, height: 16 }, "e")]
8697
+ ].map(([value, label, icon]) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8512
8698
  "button",
8513
8699
  {
8514
8700
  type: "button",
@@ -8521,7 +8707,7 @@ function WhiteboardPanel({ onClose }) {
8521
8707
  },
8522
8708
  value
8523
8709
  )) }),
8524
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8710
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__swatches", role: "group", "aria-label": "Color", children: INK.map((ink) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8525
8711
  "button",
8526
8712
  {
8527
8713
  type: "button",
@@ -8536,7 +8722,7 @@ function WhiteboardPanel({ onClose }) {
8536
8722
  },
8537
8723
  ink
8538
8724
  )) }),
8539
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8725
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8540
8726
  ControlButton,
8541
8727
  {
8542
8728
  label: "Undo my last stroke",
@@ -8544,15 +8730,15 @@ function WhiteboardPanel({ onClose }) {
8544
8730
  const last = mine[mine.length - 1];
8545
8731
  if (last !== void 0) void act({ action: "stroke_erase", itemId: last.id }).then((r) => r.ok ? void 0 : show(r));
8546
8732
  },
8547
- children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(UndoIcon, { width: 16, height: 16 })
8733
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(UndoIcon, { width: 16, height: 16 })
8548
8734
  }
8549
8735
  ),
8550
- isHost && strokes.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "whiteboard_clear" }).then(show), children: "Clear board" }) : null,
8551
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__whiteboard-note", children: "Saved with the meeting" }),
8552
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ControlButton, { label: "Close whiteboard", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(CloseIcon, { width: 16, height: 16 }) })
8736
+ isHost && strokes.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void act({ action: "whiteboard_clear" }).then(show), children: "Clear board" }) : null,
8737
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__whiteboard-note", children: "Saved with the meeting" }),
8738
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Close whiteboard", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 16, height: 16 }) })
8553
8739
  ] }),
8554
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8555
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8740
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8741
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8556
8742
  "svg",
8557
8743
  {
8558
8744
  ref: svgRef,
@@ -8576,8 +8762,8 @@ function WhiteboardPanel({ onClose }) {
8576
8762
  onPointerUp: finish,
8577
8763
  onPointerCancel: finish,
8578
8764
  children: [
8579
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("rect", { x: 0, y: 0, width: BOARD_W, height: BOARD_H, className: "mx-meet__board-paper" }),
8580
- strokes.map((stroke) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8765
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("rect", { x: 0, y: 0, width: BOARD_W, height: BOARD_H, className: "mx-meet__board-paper" }),
8766
+ strokes.map((stroke) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8581
8767
  StrokeView,
8582
8768
  {
8583
8769
  stroke,
@@ -8585,8 +8771,8 @@ function WhiteboardPanel({ onClose }) {
8585
8771
  },
8586
8772
  stroke.id
8587
8773
  )),
8588
- pending.map((stroke) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(StrokeView, { stroke }, stroke.id)),
8589
- drawing !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8774
+ pending.map((stroke) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(StrokeView, { stroke }, stroke.id)),
8775
+ drawing !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8590
8776
  StrokeView,
8591
8777
  {
8592
8778
  stroke: {
@@ -8610,8 +8796,8 @@ function clock(ms2) {
8610
8796
  }
8611
8797
  var BREAKOUT_EXPIRE_RETRY_MS = 5e3;
8612
8798
  function useNow(active) {
8613
- const [now, setNow] = (0, import_react5.useState)(() => Date.now());
8614
- (0, import_react5.useEffect)(() => {
8799
+ const [now, setNow] = (0, import_react6.useState)(() => Date.now());
8800
+ (0, import_react6.useEffect)(() => {
8615
8801
  if (!active) return void 0;
8616
8802
  const timer = setInterval(() => setNow(Date.now()), 1e3);
8617
8803
  return () => clearInterval(timer);
@@ -8625,11 +8811,11 @@ function BreakoutSetup() {
8625
8811
  const people = (snapshot?.participants ?? []).filter(
8626
8812
  (p) => !p.isAgent && p.role !== "host" && p.role !== "cohost"
8627
8813
  );
8628
- const [count2, setCount] = (0, import_react5.useState)(Math.min(Math.max(2, Math.ceil(people.length / 4)), settings?.breakoutMaxRooms ?? 20));
8629
- const [mode, setMode] = (0, import_react5.useState)("auto");
8630
- const [minutes, setMinutes] = (0, import_react5.useState)(settings?.breakoutDefaultMinutes ?? 15);
8631
- const [manual, setManual] = (0, import_react5.useState)({});
8632
- const [busy, setBusy] = (0, import_react5.useState)(false);
8814
+ const [count2, setCount] = (0, import_react6.useState)(Math.min(Math.max(2, Math.ceil(people.length / 4)), settings?.breakoutMaxRooms ?? 20));
8815
+ const [mode, setMode] = (0, import_react6.useState)("auto");
8816
+ const [minutes, setMinutes] = (0, import_react6.useState)(settings?.breakoutDefaultMinutes ?? 15);
8817
+ const [manual, setManual] = (0, import_react6.useState)({});
8818
+ const [busy, setBusy] = (0, import_react6.useState)(false);
8633
8819
  const [notice, show] = useNotice();
8634
8820
  const max = settings?.breakoutMaxRooms ?? 20;
8635
8821
  const rooms = Math.min(Math.max(1, count2), max);
@@ -8641,10 +8827,10 @@ function BreakoutSetup() {
8641
8827
  (_, index) => people.filter((p) => (manual[p.identity] ?? -1) === index).map((p) => p.identity)
8642
8828
  ) : Array.from({ length: rooms }, () => []);
8643
8829
  const nameOf = (identity) => people.find((p) => p.identity === identity)?.displayName ?? identity;
8644
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-card", children: [
8645
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__field", children: [
8646
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__field-label", children: "Rooms" }),
8647
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8830
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-card", children: [
8831
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
8832
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Rooms" }),
8833
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8648
8834
  "input",
8649
8835
  {
8650
8836
  className: "mx-meet__input",
@@ -8656,11 +8842,11 @@ function BreakoutSetup() {
8656
8842
  }
8657
8843
  )
8658
8844
  ] }),
8659
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
8845
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__pills", role: "group", "aria-label": "How people are placed", children: [
8660
8846
  ["auto", "Automatically"],
8661
8847
  ["manual", "Manually"],
8662
8848
  ["choose", "Let people choose"]
8663
- ].map(([value, label]) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8849
+ ].map(([value, label]) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8664
8850
  "button",
8665
8851
  {
8666
8852
  type: "button",
@@ -8671,9 +8857,9 @@ function BreakoutSetup() {
8671
8857
  },
8672
8858
  value
8673
8859
  )) }),
8674
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__field", children: [
8675
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
8676
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
8860
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
8861
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Timer (minutes, 0 for none)" }),
8862
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8677
8863
  "input",
8678
8864
  {
8679
8865
  className: "mx-meet__input",
@@ -8685,9 +8871,9 @@ function BreakoutSetup() {
8685
8871
  }
8686
8872
  )
8687
8873
  ] }),
8688
- mode === "manual" ? people.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note", children: "Nobody else is in the meeting yet." }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__people", children: people.map((person) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { className: "mx-meet__person", children: [
8689
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__person-name", children: person.displayName }),
8690
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8874
+ mode === "manual" ? people.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: "Nobody else is in the meeting yet." }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__people", children: people.map((person) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__person", children: [
8875
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__person-name", children: person.displayName }),
8876
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8691
8877
  "select",
8692
8878
  {
8693
8879
  className: "mx-meet__select mx-meet__select--compact",
@@ -8695,24 +8881,24 @@ function BreakoutSetup() {
8695
8881
  value: manual[person.identity] ?? -1,
8696
8882
  onChange: (event) => setManual({ ...manual, [person.identity]: Number(event.target.value) }),
8697
8883
  children: [
8698
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: -1, children: "Main room" }),
8699
- Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("option", { value: index, children: [
8884
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: -1, children: "Main room" }),
8885
+ Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("option", { value: index, children: [
8700
8886
  "Room ",
8701
8887
  index + 1
8702
8888
  ] }, index))
8703
8889
  ]
8704
8890
  }
8705
8891
  )
8706
- ] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { children: [
8707
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("strong", { children: [
8892
+ ] }, person.identity)) }) : mode === "auto" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__breakout-rooms", children: assignment.map((members, index) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { children: [
8893
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("strong", { children: [
8708
8894
  "Room ",
8709
8895
  index + 1
8710
8896
  ] }),
8711
8897
  " ",
8712
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__panel-note", children: members.length === 0 ? "empty" : members.map(nameOf).join(", ") })
8713
- ] }, index)) }) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note", children: "Everyone picks a room from their own screen." }),
8714
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8715
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8898
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__panel-note", children: members.length === 0 ? "empty" : members.map(nameOf).join(", ") })
8899
+ ] }, index)) }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: "Everyone picks a room from their own screen." }),
8900
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
8901
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8716
8902
  "button",
8717
8903
  {
8718
8904
  type: "button",
@@ -8745,7 +8931,7 @@ function BreakoutRun({ plan }) {
8745
8931
  const snapshot = useMeetSnapshot();
8746
8932
  const now = useNow(plan.endsAt !== null);
8747
8933
  const remaining = breakoutRemainingMs(plan, now);
8748
- const [broadcast, setBroadcast] = (0, import_react5.useState)("");
8934
+ const [broadcast, setBroadcast] = (0, import_react6.useState)("");
8749
8935
  const [notice, show] = useNotice();
8750
8936
  const nameOf = (identity) => displayNameFor(snapshot?.names ?? {}, identity, snapshot?.participants.find((p) => p.identity === identity)?.displayName);
8751
8937
  const mine = assignedRoom(plan, localIdentity);
@@ -8757,8 +8943,8 @@ function BreakoutRun({ plan }) {
8757
8943
  }
8758
8944
  show(await moveTo(roomId));
8759
8945
  };
8760
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-card", children: [
8761
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "mx-meet__panel-note", children: [
8946
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-card", children: [
8947
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__panel-note", children: [
8762
8948
  plan.rooms.length,
8763
8949
  " room",
8764
8950
  plan.rooms.length === 1 ? "" : "s",
@@ -8766,18 +8952,18 @@ function BreakoutRun({ plan }) {
8766
8952
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
8767
8953
  plan.allowChoose ? " \xB7 people choose their room" : ""
8768
8954
  ] }),
8769
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
8955
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__breakout-rooms", children: plan.rooms.map((room) => {
8770
8956
  const here = breakoutRoomId === room.id;
8771
8957
  const mayJoin = isHost || plan.allowChoose || mine?.id === room.id;
8772
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { className: here ? "mx-meet__breakout-room mx-meet__breakout-room--here" : "mx-meet__breakout-room", children: [
8773
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__collab-head", children: [
8774
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: room.name }),
8775
- here ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__collab-state", children: "You are here" }) : mayJoin ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(room.id), children: "Join" }) : null
8958
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: here ? "mx-meet__breakout-room mx-meet__breakout-room--here" : "mx-meet__breakout-room", children: [
8959
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__collab-head", children: [
8960
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: room.name }),
8961
+ here ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__collab-state", children: "You are here" }) : mayJoin ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(room.id), children: "Join" }) : null
8776
8962
  ] }),
8777
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__panel-note", children: room.identities.length === 0 ? "Nobody assigned" : room.identities.map(nameOf).join(", ") }),
8778
- isHost && room.identities.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: "mx-meet__people", children: room.identities.map((identity) => /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("li", { className: "mx-meet__person", children: [
8779
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__person-name", children: nameOf(identity) }),
8780
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8963
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__panel-note", children: room.identities.length === 0 ? "Nobody assigned" : room.identities.map(nameOf).join(", ") }),
8964
+ isHost && room.identities.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__people", children: room.identities.map((identity) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__person", children: [
8965
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__person-name", children: nameOf(identity) }),
8966
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8781
8967
  "select",
8782
8968
  {
8783
8969
  className: "mx-meet__select mx-meet__select--compact",
@@ -8789,16 +8975,16 @@ function BreakoutRun({ plan }) {
8789
8975
  roomId: event.target.value === "" ? null : event.target.value
8790
8976
  }).then(show),
8791
8977
  children: [
8792
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: "", children: "Main room" }),
8793
- plan.rooms.map((option) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: option.id, children: option.name }, option.id))
8978
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "", children: "Main room" }),
8979
+ plan.rooms.map((option) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: option.id, children: option.name }, option.id))
8794
8980
  ]
8795
8981
  }
8796
8982
  )
8797
8983
  ] }, identity)) }) : null
8798
8984
  ] }, room.id);
8799
8985
  }) }),
8800
- breakoutRoomId !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
8801
- isHost ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
8986
+ breakoutRoomId !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void join(null), children: "Return to the main room" }) : null,
8987
+ isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8802
8988
  "form",
8803
8989
  {
8804
8990
  className: "mx-meet__composer-row",
@@ -8812,7 +8998,7 @@ function BreakoutRun({ plan }) {
8812
8998
  });
8813
8999
  },
8814
9000
  children: [
8815
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
9001
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8816
9002
  "input",
8817
9003
  {
8818
9004
  className: "mx-meet__input",
@@ -8823,12 +9009,12 @@ function BreakoutRun({ plan }) {
8823
9009
  "aria-label": "Message every room"
8824
9010
  }
8825
9011
  ),
8826
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
9012
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: broadcast.trim().length === 0, children: "Send" })
8827
9013
  ]
8828
9014
  }
8829
9015
  ) : null,
8830
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Notice, { notice }),
8831
- isHost ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
9016
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Notice, { notice }),
9017
+ isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8832
9018
  "button",
8833
9019
  {
8834
9020
  type: "button",
@@ -8842,9 +9028,9 @@ function BreakoutRun({ plan }) {
8842
9028
  function BreakoutsPanel({ onClose }) {
8843
9029
  const { collab, isHost } = useCollab();
8844
9030
  const plan = collab?.breakout?.state === "open" ? collab.breakout : null;
8845
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(PanelShell, { title: "Breakout rooms", onClose, children: [
8846
- collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
8847
- plan !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(BreakoutRun, { plan }) : isHost ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(BreakoutSetup, {}) : /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note", children: "Breakout rooms are closed." })
9031
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Breakout rooms", onClose, children: [
9032
+ collab?.error != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.error }) : null,
9033
+ plan !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreakoutRun, { plan }) : isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreakoutSetup, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: "Breakout rooms are closed." })
8848
9034
  ] });
8849
9035
  }
8850
9036
  function BreakoutBanner() {
@@ -8855,11 +9041,11 @@ function BreakoutBanner() {
8855
9041
  const now = useNow(open?.endsAt != null);
8856
9042
  const remaining = breakoutRemainingMs(open, now);
8857
9043
  const assigned = assignedRoom(open, localIdentity);
8858
- const [dismissedBroadcast, setDismissedBroadcast] = (0, import_react5.useState)(null);
8859
- const [failure, setFailure] = (0, import_react5.useState)(null);
8860
- const expireAsked = (0, import_react5.useRef)(null);
9044
+ const [dismissedBroadcast, setDismissedBroadcast] = (0, import_react6.useState)(null);
9045
+ const [failure, setFailure] = (0, import_react6.useState)(null);
9046
+ const expireAsked = (0, import_react6.useRef)(null);
8861
9047
  const moveAt = collab?.moveRequest?.at ?? null;
8862
- (0, import_react5.useEffect)(() => {
9048
+ (0, import_react6.useEffect)(() => {
8863
9049
  const request = host?.store.snapshot().collab.moveRequest ?? null;
8864
9050
  if (request === null || host === null) return;
8865
9051
  host.store.patch({ collab: { ...host.store.snapshot().collab, moveRequest: null } });
@@ -8867,7 +9053,7 @@ function BreakoutBanner() {
8867
9053
  if ((here ?? null) === request.roomId) return;
8868
9054
  void moveTo(request.roomId).then((result) => setFailure(result.ok ? null : result.message));
8869
9055
  }, [moveAt, host, moveTo]);
8870
- (0, import_react5.useEffect)(() => {
9056
+ (0, import_react6.useEffect)(() => {
8871
9057
  if (open === null || remaining === null || remaining > 0) return;
8872
9058
  const asked = expireAsked.current;
8873
9059
  if (asked !== null && asked.id === open.id && now - asked.at < BREAKOUT_EXPIRE_RETRY_MS) return;
@@ -8878,17 +9064,17 @@ function BreakoutBanner() {
8878
9064
  const showBroadcast = broadcast !== null && broadcast.at !== dismissedBroadcast && open !== null;
8879
9065
  const room = open?.rooms.find((r) => r.id === breakoutRoomId) ?? null;
8880
9066
  if (open === null && failure === null) return null;
8881
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "mx-meet__breakout-banner", role: "status", children: [
8882
- failure !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__collab-error", children: failure }) : null,
8883
- room !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { children: [
8884
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: room.name }),
9067
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__breakout-banner", role: "status", children: [
9068
+ failure !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__collab-error", children: failure }) : null,
9069
+ room !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
9070
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: room.name }),
8885
9071
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
8886
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
8887
- ] }) : assigned !== null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { children: [
9072
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__chip", onClick: () => void moveTo(null), children: "Return to main room" })
9073
+ ] }) : assigned !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { children: [
8888
9074
  "You are assigned to ",
8889
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("strong", { children: assigned.name }),
9075
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: assigned.name }),
8890
9076
  remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
8891
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
9077
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
8892
9078
  "button",
8893
9079
  {
8894
9080
  type: "button",
@@ -8900,15 +9086,15 @@ function BreakoutBanner() {
8900
9086
  children: "Join"
8901
9087
  }
8902
9088
  )
8903
- ] }) : open?.allowChoose ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
8904
- showBroadcast ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "mx-meet__breakout-broadcast", children: [
8905
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("strong", { children: [
9089
+ ] }) : open?.allowChoose ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "Breakout rooms are open \u2014 pick one under Activities." }) : null,
9090
+ showBroadcast ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__breakout-broadcast", children: [
9091
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("strong", { children: [
8906
9092
  broadcast.by,
8907
9093
  ":"
8908
9094
  ] }),
8909
9095
  " ",
8910
9096
  broadcast.text,
8911
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
9097
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setDismissedBroadcast(broadcast.at), children: "Dismiss" })
8912
9098
  ] }) : null
8913
9099
  ] });
8914
9100
  }
@@ -8917,13 +9103,13 @@ function useCaptionTranslation(lines) {
8917
9103
  const snapshot = useMeetSnapshot();
8918
9104
  const collab = snapshot?.collab ?? null;
8919
9105
  const language = collab?.captionLanguage ?? null;
8920
- const asked = (0, import_react5.useRef)(/* @__PURE__ */ new Set());
9106
+ const asked = (0, import_react6.useRef)(/* @__PURE__ */ new Set());
8921
9107
  const translations = collab?.captionTranslations ?? {};
8922
9108
  const missing = lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text: text3 }) => ({ id, text: text3 }));
8923
9109
  const key = `${language ?? ""}|${missing.map((l) => l.id).join(",")}`;
8924
- const pending = (0, import_react5.useRef)(missing);
9110
+ const pending = (0, import_react6.useRef)(missing);
8925
9111
  pending.current = missing;
8926
- (0, import_react5.useEffect)(() => {
9112
+ (0, import_react6.useEffect)(() => {
8927
9113
  if (host === null || language === null) return;
8928
9114
  const batch = pending.current.filter((line) => !asked.current.has(`${language}:${line.id}`)).slice(-20);
8929
9115
  if (batch.length === 0) return;
@@ -8942,10 +9128,10 @@ function CaptionLanguageSettings() {
8942
9128
  const preferred = defaultCaptionLanguage(settings, viewer);
8943
9129
  const current = collab?.captionLanguage ?? "";
8944
9130
  const choices = CAPTION_LANGUAGES.some((l) => l.tag === preferred) ? CAPTION_LANGUAGES : [{ tag: preferred, name: preferred }, ...CAPTION_LANGUAGES];
8945
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("section", { className: "mx-meet__section", "aria-label": "Captions", children: [
8946
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("label", { className: "mx-meet__field", children: [
8947
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
8948
- /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
9131
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__section", "aria-label": "Captions", children: [
9132
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
9133
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Translate captions to" }),
9134
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
8949
9135
  "select",
8950
9136
  {
8951
9137
  className: "mx-meet__select",
@@ -8962,25 +9148,25 @@ function CaptionLanguageSettings() {
8962
9148
  });
8963
9149
  },
8964
9150
  children: [
8965
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: "", children: "Off \u2014 as spoken" }),
8966
- current === "" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("option", { value: preferred, children: [
9151
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "", children: "Off \u2014 as spoken" }),
9152
+ current === "" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("option", { value: preferred, children: [
8967
9153
  choices.find((c) => c.tag === preferred)?.name ?? preferred,
8968
9154
  " (yours)"
8969
9155
  ] }) : null,
8970
- choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("option", { value: choice.tag, children: choice.name }, choice.tag))
9156
+ choices.filter((choice) => current !== "" || choice.tag !== preferred).map((choice) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: choice.tag, children: choice.name }, choice.tag))
8971
9157
  ]
8972
9158
  }
8973
9159
  )
8974
9160
  ] }),
8975
- collab?.captionTranslationError != null ? /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
9161
+ collab?.captionTranslationError != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
8976
9162
  ] });
8977
9163
  }
8978
9164
  function useCollabPanelRequest(onRequest) {
8979
9165
  const host = useMeetHost();
8980
9166
  const at = useMeetSnapshot()?.collab.panelRequest?.at ?? null;
8981
- const callback = (0, import_react5.useRef)(onRequest);
9167
+ const callback = (0, import_react6.useRef)(onRequest);
8982
9168
  callback.current = onRequest;
8983
- (0, import_react5.useEffect)(() => {
9169
+ (0, import_react6.useEffect)(() => {
8984
9170
  const request = host?.store.snapshot().collab.panelRequest ?? null;
8985
9171
  if (request === null || host === null) return;
8986
9172
  host.store.patch({ collab: { ...host.store.snapshot().collab, panelRequest: null } });
@@ -8989,14 +9175,14 @@ function useCollabPanelRequest(onRequest) {
8989
9175
  }
8990
9176
 
8991
9177
  // src/react/components.tsx
8992
- var import_jsx_runtime4 = require("react/jsx-runtime");
9178
+ var import_jsx_runtime5 = require("react/jsx-runtime");
8993
9179
  function InertNotice({ what }) {
8994
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
8995
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__empty-title", children: [
9180
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
9181
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__empty-title", children: [
8996
9182
  what,
8997
9183
  " is not ready yet"
8998
9184
  ] }),
8999
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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." })
9185
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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." })
9000
9186
  ] });
9001
9187
  }
9002
9188
  function Avatar({
@@ -9006,7 +9192,7 @@ function Avatar({
9006
9192
  }) {
9007
9193
  const tint = (0, import_format4.avatarPaletteIndex)(name);
9008
9194
  if (url != null && url.length > 0) {
9009
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9195
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9010
9196
  "img",
9011
9197
  {
9012
9198
  className: "mx-meet__avatar",
@@ -9018,7 +9204,7 @@ function Avatar({
9018
9204
  }
9019
9205
  );
9020
9206
  }
9021
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9207
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9022
9208
  "span",
9023
9209
  {
9024
9210
  className: "mx-meet__avatar mx-meet__avatar--initials",
@@ -9040,7 +9226,7 @@ function ControlButton({
9040
9226
  onClick,
9041
9227
  children
9042
9228
  }) {
9043
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9229
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9044
9230
  "button",
9045
9231
  {
9046
9232
  type: "button",
@@ -9059,14 +9245,14 @@ function ControlButton({
9059
9245
  function RecordingIndicator() {
9060
9246
  const { state, label } = useRecording();
9061
9247
  if (label === null) return null;
9062
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9248
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9063
9249
  "span",
9064
9250
  {
9065
9251
  className: `mx-meet__recording mx-meet__recording--${state}`,
9066
9252
  role: "status",
9067
9253
  "aria-live": "polite",
9068
9254
  children: [
9069
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordIcon, { width: 10, height: 10 }),
9255
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordIcon, { width: 10, height: 10 }),
9070
9256
  label
9071
9257
  ]
9072
9258
  }
@@ -9074,12 +9260,12 @@ function RecordingIndicator() {
9074
9260
  }
9075
9261
  function ConnectionDot({ quality }) {
9076
9262
  if (quality === "excellent" || quality === "good" || quality === "unknown") return null;
9077
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(WifiLowIcon, { width: 14, height: 14 }) });
9263
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(WifiLowIcon, { width: 14, height: 14 }) });
9078
9264
  }
9079
9265
  function RoleBadge({ role }) {
9080
- if (role === "host") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Host" });
9081
- if (role === "cohost") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Co-host" });
9082
- if (role === "guest") return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Guest" });
9266
+ if (role === "host") return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Host" });
9267
+ if (role === "cohost") return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Co-host" });
9268
+ if (role === "guest") return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Guest" });
9083
9269
  return null;
9084
9270
  }
9085
9271
  function ParticipantTile({
@@ -9089,7 +9275,7 @@ function ParticipantTile({
9089
9275
  const host = useMeetHost();
9090
9276
  const snapshot = useMeetSnapshot();
9091
9277
  const queue = useHandQueue();
9092
- const [menu, setMenu] = (0, import_react6.useState)(false);
9278
+ const [menu, setMenu] = (0, import_react7.useState)(false);
9093
9279
  const videoRef = useTrack(
9094
9280
  participant.identity,
9095
9281
  participant.screenSharing ? "screen" : "camera"
@@ -9098,7 +9284,7 @@ function ParticipantTile({
9098
9284
  const pinnedHere = snapshot?.pinned === participant.identity;
9099
9285
  const spotlit = snapshot?.spotlight === participant.identity;
9100
9286
  const handPosition = participant.handRaised ? queue.findIndex((entry) => entry.identity === participant.identity) + 1 : 0;
9101
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9287
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9102
9288
  "div",
9103
9289
  {
9104
9290
  className: [
@@ -9107,8 +9293,9 @@ function ParticipantTile({
9107
9293
  participant.speaking ? "mx-meet__tile--speaking" : ""
9108
9294
  ].filter(Boolean).join(" "),
9109
9295
  "data-identity": participant.identity,
9296
+ ...participantAttributes(participant),
9110
9297
  children: [
9111
- showVideo ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9298
+ showVideo ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9112
9299
  "video",
9113
9300
  {
9114
9301
  ref: videoRef,
@@ -9117,43 +9304,43 @@ function ParticipantTile({
9117
9304
  playsInline: true,
9118
9305
  muted: participant.isLocal
9119
9306
  }
9120
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
9121
- participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__tile-hand", title: `Hand raised \xB7 ${ordinal(handPosition)} in line`, children: [
9122
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HandIcon, { width: 14, height: 14 }),
9307
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: featured ? 96 : 56 }) }),
9308
+ participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__tile-hand", title: `Hand raised \xB7 ${ordinal(handPosition)} in line`, children: [
9309
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, { width: 14, height: 14 }),
9123
9310
  handPosition > 0 ? handPosition : null
9124
9311
  ] }) : null,
9125
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__tile-bar", children: [
9126
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__tile-name", children: [
9127
- spotlit ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpotlightIcon, { width: 12, height: 12 }) }) : null,
9312
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__tile-bar", children: [
9313
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__tile-name", children: [
9314
+ spotlit ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { title: "Spotlighted for everyone", className: "mx-meet__tile-flag", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpotlightIcon, { width: 12, height: 12 }) }) : null,
9128
9315
  participant.displayName,
9129
9316
  participant.isLocal ? " (you)" : "",
9130
- participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "AI" }) : null,
9131
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RoleBadge, { role: participant.role })
9317
+ participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "AI" }) : null,
9318
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RoleBadge, { role: participant.role })
9132
9319
  ] }),
9133
- !participant.micEnabled ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, { width: 14, height: 14 }) : null,
9134
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(QualityBars, { quality: participant.quality })
9320
+ !participant.micEnabled ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, { width: 14, height: 14 }) : null,
9321
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(QualityBars, { quality: participant.quality })
9135
9322
  ] }),
9136
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: menu ? "mx-meet__tile-actions mx-meet__tile-actions--open" : "mx-meet__tile-actions", children: [
9137
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9323
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: menu ? "mx-meet__tile-actions mx-meet__tile-actions--open" : "mx-meet__tile-actions", children: [
9324
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9138
9325
  ControlButton,
9139
9326
  {
9140
9327
  label: pinnedHere ? "Unpin" : `Pin ${participant.displayName} for me`,
9141
9328
  active: pinnedHere,
9142
9329
  onClick: () => host?.engine.pin(pinnedHere ? null : participant.identity),
9143
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PinIcon, { width: 16, height: 16 })
9330
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PinIcon, { width: 16, height: 16 })
9144
9331
  }
9145
9332
  ),
9146
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__anchor", children: [
9147
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9333
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__anchor", children: [
9334
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9148
9335
  ControlButton,
9149
9336
  {
9150
9337
  label: `More for ${participant.displayName}`,
9151
9338
  active: menu,
9152
9339
  onClick: () => setMenu(!menu),
9153
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MoreIcon, { width: 16, height: 16 })
9340
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, { width: 16, height: 16 })
9154
9341
  }
9155
9342
  ),
9156
- menu ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
9343
+ menu ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PersonMenu, { participant, onClose: () => setMenu(false), placement: "down" }) : null
9157
9344
  ] })
9158
9345
  ] })
9159
9346
  ]
@@ -9169,28 +9356,28 @@ function QualityBars({ quality }) {
9169
9356
  if (quality === "unknown") return null;
9170
9357
  const bars = quality === "excellent" ? 3 : quality === "good" ? 2 : quality === "poor" ? 1 : 0;
9171
9358
  const label = quality === "lost" ? "Connection lost" : quality === "poor" ? "Poor connection" : `Connection ${quality}`;
9172
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: `mx-meet__signal mx-meet__signal--${quality}`, title: label, "aria-label": label, role: "img", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SignalIcon, { bars, width: 14, height: 14 }) });
9359
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: `mx-meet__signal mx-meet__signal--${quality}`, title: label, "aria-label": label, role: "img", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SignalIcon, { bars, width: 14, height: 14 }) });
9173
9360
  }
9174
9361
  function Stage({ pageSize }) {
9175
9362
  const stage = useStage(pageSize);
9176
9363
  const columns = gridColumns(stage.tiles.length);
9177
9364
  if (stage.feature === null && stage.tiles.length === 0) {
9178
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__stage mx-meet__stage--empty", children: [
9179
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "Waiting for others to join" }),
9180
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: "Share the meeting link and people can join from anywhere \u2014 no account needed." })
9365
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__stage mx-meet__stage--empty", children: [
9366
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "Waiting for others to join" }),
9367
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: "Share the meeting link and people can join from anywhere \u2014 no account needed." })
9181
9368
  ] });
9182
9369
  }
9183
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: `mx-meet__stage${stage.feature !== null ? " mx-meet__stage--speaker" : ""}`, children: [
9184
- stage.feature !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ParticipantTile, { participant: stage.feature, featured: true }) : null,
9185
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9370
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: `mx-meet__stage${stage.feature !== null ? " mx-meet__stage--speaker" : ""}`, children: [
9371
+ stage.feature !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ParticipantTile, { participant: stage.feature, featured: true }) : null,
9372
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9186
9373
  "div",
9187
9374
  {
9188
9375
  className: "mx-meet__grid",
9189
9376
  style: { "--mx-meet-columns": columns },
9190
- children: stage.tiles.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ParticipantTile, { participant }, participant.identity))
9377
+ children: stage.tiles.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ParticipantTile, { participant }, participant.identity))
9191
9378
  }
9192
9379
  ),
9193
- stage.overflow > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__overflow", children: [
9380
+ stage.overflow > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__overflow", children: [
9194
9381
  "+",
9195
9382
  stage.overflow,
9196
9383
  " more ",
@@ -9203,17 +9390,17 @@ var MEET_REACTIONS = ["\u{1F496}", "\u{1F44D}", "\u{1F389}", "\u{1F44F}", "\u{1F
9203
9390
  function ControlBar({ onLeave }) {
9204
9391
  const room = useRoom();
9205
9392
  const recording = useRecording();
9206
- const [panel, setPanel] = (0, import_react6.useState)("none");
9207
- const [chatTo, setChatTo] = (0, import_react6.useState)(null);
9208
- const [popover, setPopover] = (0, import_react6.useState)("none");
9209
- const [shortcuts, setShortcuts] = (0, import_react6.useState)(false);
9393
+ const [panel, setPanel] = (0, import_react7.useState)("none");
9394
+ const [chatTo, setChatTo] = (0, import_react7.useState)(null);
9395
+ const [popover, setPopover] = (0, import_react7.useState)("none");
9396
+ const [shortcuts, setShortcuts] = (0, import_react7.useState)(false);
9210
9397
  const snapshot = useMeetSnapshot();
9211
9398
  const lobby = useLobby();
9212
9399
  const controls = useHostControls();
9213
9400
  const queue = useHandQueue();
9214
9401
  const micUnavailable = useLocalMedia().microphone.unavailable;
9215
9402
  const unread = useUnreadChat(panel === "chat");
9216
- const [whiteboard, setWhiteboard] = (0, import_react6.useState)(false);
9403
+ const [whiteboard, setWhiteboard] = (0, import_react7.useState)(false);
9217
9404
  const toggle = (next) => setPanel(panel === next ? "none" : next);
9218
9405
  const openActivity = (activity) => {
9219
9406
  if (activity === "whiteboard") setWhiteboard(true);
@@ -9224,7 +9411,7 @@ function ControlBar({ onLeave }) {
9224
9411
  });
9225
9412
  const privateChatAt = snapshot?.privateChatRequest?.at ?? null;
9226
9413
  const meetStore = useMeetHost()?.store ?? null;
9227
- (0, import_react6.useEffect)(() => {
9414
+ (0, import_react7.useEffect)(() => {
9228
9415
  const request = meetStore?.snapshot().privateChatRequest ?? null;
9229
9416
  if (request === null) return;
9230
9417
  setChatTo(request.to);
@@ -9240,11 +9427,11 @@ function ControlBar({ onLeave }) {
9240
9427
  help: () => setShortcuts(true)
9241
9428
  });
9242
9429
  const hasSpotlight = snapshot?.spotlight !== null && snapshot?.spotlight !== void 0;
9243
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
9244
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MeetingOverlays, {}),
9245
- shortcuts ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ShortcutsSheet, { onClose: () => setShortcuts(false) }) : null,
9246
- panel === "chat" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChatPanel, { onClose: () => setPanel("none"), to: chatTo, onTo: setChatTo }) : null,
9247
- panel === "people" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9430
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
9431
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetingOverlays, {}),
9432
+ shortcuts ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ShortcutsSheet, { onClose: () => setShortcuts(false) }) : null,
9433
+ panel === "chat" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ChatPanel, { onClose: () => setPanel("none"), to: chatTo, onTo: setChatTo }) : null,
9434
+ panel === "people" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9248
9435
  PeoplePanel,
9249
9436
  {
9250
9437
  onClose: () => setPanel("none"),
@@ -9254,53 +9441,53 @@ function ControlBar({ onLeave }) {
9254
9441
  }
9255
9442
  }
9256
9443
  ) : null,
9257
- panel === "ai" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AiPanel, { onClose: () => setPanel("none") }) : null,
9258
- panel === "settings" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SettingsPanel, { onClose: () => setPanel("none") }) : null,
9259
- panel === "polls" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PollsPanel, { onClose: () => setPanel("none") }) : null,
9260
- panel === "qa" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(QaPanel, { onClose: () => setPanel("none") }) : null,
9261
- panel === "breakouts" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreakoutsPanel, { onClose: () => setPanel("none") }) : null,
9262
- whiteboard ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(WhiteboardPanel, { onClose: () => setWhiteboard(false) }) : null,
9263
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BreakoutBanner, {}),
9264
- controls.notice !== null && panel !== "people" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Toast, { text: controls.notice.text, failed: controls.notice.failed, onDone: controls.clearNotice }) : null,
9265
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__controls", children: [
9266
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9444
+ panel === "ai" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AiPanel, { onClose: () => setPanel("none") }) : null,
9445
+ panel === "settings" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SettingsPanel, { onClose: () => setPanel("none") }) : null,
9446
+ panel === "polls" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PollsPanel, { onClose: () => setPanel("none") }) : null,
9447
+ panel === "qa" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(QaPanel, { onClose: () => setPanel("none") }) : null,
9448
+ panel === "breakouts" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(BreakoutsPanel, { onClose: () => setPanel("none") }) : null,
9449
+ whiteboard ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(WhiteboardPanel, { onClose: () => setWhiteboard(false) }) : null,
9450
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(BreakoutBanner, {}),
9451
+ controls.notice !== null && panel !== "people" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Toast, { text: controls.notice.text, failed: controls.notice.failed, onDone: controls.clearNotice }) : null,
9452
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__controls", children: [
9453
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9267
9454
  ControlButton,
9268
9455
  {
9269
9456
  label: micUnavailable !== null ? `Unmute \u2014 ${micUnavailable.remedy}` : room.local?.micEnabled === true ? "Mute (\u2318D)" : "Unmute (\u2318D)",
9270
9457
  active: room.local?.micEnabled === true,
9271
9458
  onClick: () => void room.toggleMicrophone(),
9272
- children: room.local?.micEnabled === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, {})
9459
+ children: room.local?.micEnabled === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, {})
9273
9460
  }
9274
9461
  ),
9275
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9462
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9276
9463
  ControlButton,
9277
9464
  {
9278
9465
  label: room.local?.cameraEnabled === true ? "Stop video (\u2318E)" : "Start video (\u2318E)",
9279
9466
  active: room.local?.cameraEnabled === true,
9280
9467
  onClick: () => void room.toggleCamera(),
9281
- children: room.local?.cameraEnabled === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CameraIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CameraOffIcon, {})
9468
+ children: room.local?.cameraEnabled === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CameraIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CameraOffIcon, {})
9282
9469
  }
9283
9470
  ),
9284
- room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9471
+ room.canShareScreen || room.local?.screenSharing === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9285
9472
  ControlButton,
9286
9473
  {
9287
9474
  label: room.local?.screenSharing === true ? "Stop sharing" : "Share screen",
9288
9475
  active: room.local?.screenSharing === true,
9289
9476
  onClick: () => void room.toggleScreenShare(),
9290
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ScreenShareIcon, {})
9477
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScreenShareIcon, {})
9291
9478
  }
9292
9479
  ) : null,
9293
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__anchor", children: [
9294
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9480
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__anchor", children: [
9481
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9295
9482
  ControlButton,
9296
9483
  {
9297
9484
  label: "Send a reaction",
9298
9485
  active: popover === "reactions",
9299
9486
  onClick: () => setPopover(popover === "reactions" ? "none" : "reactions"),
9300
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SmileIcon, {})
9487
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SmileIcon, {})
9301
9488
  }
9302
9489
  ),
9303
- popover === "reactions" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: "Reactions", onClose: () => setPopover("none"), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__emoji-bar", children: MEET_REACTIONS.map((emoji) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9490
+ popover === "reactions" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Popover, { label: "Reactions", onClose: () => setPopover("none"), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__emoji-bar", children: MEET_REACTIONS.map((emoji) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9304
9491
  "button",
9305
9492
  {
9306
9493
  type: "button",
@@ -9312,53 +9499,53 @@ function ControlBar({ onLeave }) {
9312
9499
  emoji
9313
9500
  )) }) }) : null
9314
9501
  ] }),
9315
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9502
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9316
9503
  ControlButton,
9317
9504
  {
9318
9505
  label: room.local?.handRaised === true ? "Lower hand (\u2318\u2325H)" : "Raise hand (\u2318\u2325H)",
9319
9506
  active: room.local?.handRaised === true,
9320
9507
  onClick: () => void room.toggleHand(),
9321
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HandIcon, {})
9508
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, {})
9322
9509
  }
9323
9510
  ),
9324
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(ControlButton, { label: "Chat (\u2318\u2325C)", active: panel === "chat", onClick: () => toggle("chat"), children: [
9325
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChatIcon, {}),
9326
- unread > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
9511
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(ControlButton, { label: "Chat (\u2318\u2325C)", active: panel === "chat", onClick: () => toggle("chat"), children: [
9512
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ChatIcon, {}),
9513
+ unread > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
9327
9514
  ] }),
9328
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9515
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9329
9516
  ControlButton,
9330
9517
  {
9331
9518
  label: lobby.waiting.length > 0 ? `People \u2014 ${lobby.waiting.length} waiting` : `People \u2014 ${(snapshot?.participants ?? []).length} in the meeting`,
9332
9519
  active: panel === "people",
9333
9520
  onClick: () => toggle("people"),
9334
9521
  children: [
9335
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PeopleIcon, {}),
9336
- lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
9522
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PeopleIcon, {}),
9523
+ lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__dot", "aria-hidden": "true" }) : null
9337
9524
  ]
9338
9525
  }
9339
9526
  ),
9340
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9527
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9341
9528
  ActivitiesControl,
9342
9529
  {
9343
9530
  active: whiteboard ? "whiteboard" : panel === "polls" || panel === "qa" || panel === "breakouts" ? panel : null,
9344
9531
  onOpen: openActivity
9345
9532
  }
9346
9533
  ),
9347
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AiControl, { active: panel === "ai", onToggle: () => toggle("ai") }),
9348
- recording.canStart ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Start recording", onClick: () => void recording.start(), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordIcon, {}) }) : null,
9349
- recording.canStop ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Stop recording", active: true, onClick: () => void recording.stop(), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordIcon, {}) }) : null,
9350
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__anchor", children: [
9351
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9534
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AiControl, { active: panel === "ai", onToggle: () => toggle("ai") }),
9535
+ recording.canStart ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Start recording", onClick: () => void recording.start(), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordIcon, {}) }) : null,
9536
+ recording.canStop ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Stop recording", active: true, onClick: () => void recording.stop(), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordIcon, {}) }) : null,
9537
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__anchor", children: [
9538
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9352
9539
  ControlButton,
9353
9540
  {
9354
9541
  label: "More options",
9355
9542
  active: popover === "more" || panel === "settings",
9356
9543
  onClick: () => setPopover(popover === "more" ? "none" : "more"),
9357
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MoreIcon, {})
9544
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, {})
9358
9545
  }
9359
9546
  ),
9360
- popover === "more" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__menu", role: "menu", children: [
9361
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9547
+ popover === "more" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Popover, { label: "More options", onClose: () => setPopover("none"), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__menu", role: "menu", children: [
9548
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9362
9549
  MenuItem,
9363
9550
  {
9364
9551
  onSelect: () => {
@@ -9366,12 +9553,12 @@ function ControlBar({ onLeave }) {
9366
9553
  setPanel("settings");
9367
9554
  },
9368
9555
  children: [
9369
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SettingsIcon, { width: 16, height: 16 }),
9556
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SettingsIcon, { width: 16, height: 16 }),
9370
9557
  " Settings"
9371
9558
  ]
9372
9559
  }
9373
9560
  ),
9374
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9561
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9375
9562
  MenuItem,
9376
9563
  {
9377
9564
  onSelect: () => {
@@ -9379,14 +9566,14 @@ function ControlBar({ onLeave }) {
9379
9566
  setShortcuts(true);
9380
9567
  },
9381
9568
  children: [
9382
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(KeyboardIcon, { width: 16, height: 16 }),
9569
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KeyboardIcon, { width: 16, height: 16 }),
9383
9570
  " Keyboard shortcuts"
9384
9571
  ]
9385
9572
  }
9386
9573
  ),
9387
- controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
9388
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__menu-sep", role: "separator" }),
9389
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9574
+ controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
9575
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__menu-sep", role: "separator" }),
9576
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9390
9577
  MenuItem,
9391
9578
  {
9392
9579
  onSelect: () => {
@@ -9394,12 +9581,12 @@ function ControlBar({ onLeave }) {
9394
9581
  void controls.run({ action: "mute_all" });
9395
9582
  },
9396
9583
  children: [
9397
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, { width: 16, height: 16 }),
9584
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, { width: 16, height: 16 }),
9398
9585
  " Mute everyone"
9399
9586
  ]
9400
9587
  }
9401
9588
  ),
9402
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9589
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9403
9590
  MenuItem,
9404
9591
  {
9405
9592
  onSelect: () => {
@@ -9407,12 +9594,12 @@ function ControlBar({ onLeave }) {
9407
9594
  void controls.run({ action: "ask_all_unmute" });
9408
9595
  },
9409
9596
  children: [
9410
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicIcon, { width: 16, height: 16 }),
9597
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicIcon, { width: 16, height: 16 }),
9411
9598
  " Ask everyone to unmute"
9412
9599
  ]
9413
9600
  }
9414
9601
  ),
9415
- queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9602
+ queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9416
9603
  MenuItem,
9417
9604
  {
9418
9605
  onSelect: () => {
@@ -9420,14 +9607,14 @@ function ControlBar({ onLeave }) {
9420
9607
  void controls.run({ action: "lower_all_hands" });
9421
9608
  },
9422
9609
  children: [
9423
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HandIcon, { width: 16, height: 16 }),
9610
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, { width: 16, height: 16 }),
9424
9611
  " Lower all hands (",
9425
9612
  queue.length,
9426
9613
  ")"
9427
9614
  ]
9428
9615
  }
9429
9616
  ) : null,
9430
- hasSpotlight ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9617
+ hasSpotlight ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9431
9618
  MenuItem,
9432
9619
  {
9433
9620
  onSelect: () => {
@@ -9435,7 +9622,7 @@ function ControlBar({ onLeave }) {
9435
9622
  void controls.run({ action: "spotlight", identity: null });
9436
9623
  },
9437
9624
  children: [
9438
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpotlightIcon, { width: 16, height: 16 }),
9625
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpotlightIcon, { width: 16, height: 16 }),
9439
9626
  " Remove spotlight"
9440
9627
  ]
9441
9628
  }
@@ -9443,7 +9630,7 @@ function ControlBar({ onLeave }) {
9443
9630
  ] }) : null
9444
9631
  ] }) }) : null
9445
9632
  ] }),
9446
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9633
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9447
9634
  ControlButton,
9448
9635
  {
9449
9636
  label: "Leave",
@@ -9452,7 +9639,7 @@ function ControlBar({ onLeave }) {
9452
9639
  void room.leave();
9453
9640
  onLeave?.();
9454
9641
  },
9455
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PhoneOffIcon, {})
9642
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PhoneOffIcon, {})
9456
9643
  }
9457
9644
  )
9458
9645
  ] })
@@ -9462,13 +9649,13 @@ function useUnreadChat(open) {
9462
9649
  const snapshot = useMeetSnapshot();
9463
9650
  const chat = snapshot?.chat ?? [];
9464
9651
  const local = snapshot?.localIdentity ?? null;
9465
- const [seen, setSeen] = (0, import_react6.useState)(0);
9466
- (0, import_react6.useEffect)(() => {
9652
+ const [seen, setSeen] = (0, import_react7.useState)(0);
9653
+ (0, import_react7.useEffect)(() => {
9467
9654
  if (open) setSeen(chat.length);
9468
9655
  }, [open, chat.length]);
9469
9656
  const loaded = snapshot?.chatLoaded === true;
9470
- const [baseline, setBaseline] = (0, import_react6.useState)(null);
9471
- (0, import_react6.useEffect)(() => {
9657
+ const [baseline, setBaseline] = (0, import_react7.useState)(null);
9658
+ (0, import_react7.useEffect)(() => {
9472
9659
  if (loaded && baseline === null) setBaseline(chat.length);
9473
9660
  }, [loaded, baseline, chat.length]);
9474
9661
  if (open) return 0;
@@ -9481,14 +9668,14 @@ function Popover({
9481
9668
  children,
9482
9669
  placement = "up"
9483
9670
  }) {
9484
- const ref = (0, import_react6.useRef)(null);
9485
- const [style, setStyle] = (0, import_react6.useState)({
9671
+ const ref = (0, import_react7.useRef)(null);
9672
+ const [style, setStyle] = (0, import_react7.useState)({
9486
9673
  position: "fixed",
9487
9674
  top: 0,
9488
9675
  left: 0,
9489
9676
  visibility: "hidden"
9490
9677
  });
9491
- (0, import_react6.useLayoutEffect)(() => {
9678
+ (0, import_react7.useLayoutEffect)(() => {
9492
9679
  const element = ref.current;
9493
9680
  const anchor = element?.parentElement ?? null;
9494
9681
  if (element === null || anchor === null) return;
@@ -9533,7 +9720,7 @@ function Popover({
9533
9720
  window.removeEventListener("scroll", place, true);
9534
9721
  };
9535
9722
  }, [placement]);
9536
- (0, import_react6.useEffect)(() => {
9723
+ (0, import_react7.useEffect)(() => {
9537
9724
  const onKey = (event) => {
9538
9725
  if (event.key === "Escape") onClose();
9539
9726
  };
@@ -9548,14 +9735,14 @@ function Popover({
9548
9735
  window.removeEventListener("pointerdown", onPointer);
9549
9736
  };
9550
9737
  }, [onClose]);
9551
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
9738
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { ref, className: "mx-meet__popover", style, role: "dialog", "aria-label": label, children });
9552
9739
  }
9553
9740
  function MenuItem({
9554
9741
  onSelect,
9555
9742
  danger = false,
9556
9743
  children
9557
9744
  }) {
9558
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9745
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9559
9746
  "button",
9560
9747
  {
9561
9748
  type: "button",
@@ -9567,28 +9754,28 @@ function MenuItem({
9567
9754
  );
9568
9755
  }
9569
9756
  function Toast({ text: text3, failed, onDone }) {
9570
- (0, import_react6.useEffect)(() => {
9757
+ (0, import_react7.useEffect)(() => {
9571
9758
  const timer = setTimeout(onDone, failed ? 7e3 : 4e3);
9572
9759
  return () => clearTimeout(timer);
9573
9760
  }, [text3, failed, onDone]);
9574
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: failed ? "mx-meet__toast mx-meet__toast--failed" : "mx-meet__toast", role: "status", children: [
9575
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: text3 }),
9576
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: onDone, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 14, height: 14 }) })
9761
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: failed ? "mx-meet__toast mx-meet__toast--failed" : "mx-meet__toast", role: "status", children: [
9762
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: text3 }),
9763
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: onDone, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 14, height: 14 }) })
9577
9764
  ] });
9578
9765
  }
9579
9766
  function MeetingOverlays() {
9580
9767
  const reactions = useReactions();
9581
9768
  const { notice, dismiss } = useModerationNotice();
9582
9769
  const room = useRoom();
9583
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
9584
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ReactionOverlay, { reactions }),
9770
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
9771
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ReactionOverlay, { reactions }),
9585
9772
  notice !== null && notice.kind !== "removed" ? (
9586
9773
  // A host's request ("the host is asking you to unmute"), not an error:
9587
9774
  // an assertive status, so it is announced at once without being filed
9588
9775
  // as a failure (design-system error-box census).
9589
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__notice-bar", role: "status", "aria-live": "assertive", children: [
9590
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: notice.text }),
9591
- notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9776
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__notice-bar", role: "status", "aria-live": "assertive", children: [
9777
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: notice.text }),
9778
+ notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9592
9779
  "button",
9593
9780
  {
9594
9781
  type: "button",
@@ -9600,20 +9787,20 @@ function MeetingOverlays() {
9600
9787
  children: "Unmute"
9601
9788
  }
9602
9789
  ) : null,
9603
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 14, height: 14 }) })
9790
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__toast-close", "aria-label": "Dismiss", onClick: dismiss, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 14, height: 14 }) })
9604
9791
  ] })
9605
9792
  ) : null
9606
9793
  ] });
9607
9794
  }
9608
9795
  function ShortcutsSheet({ onClose }) {
9609
- (0, import_react6.useEffect)(() => {
9796
+ (0, import_react7.useEffect)(() => {
9610
9797
  const onKey = (event) => {
9611
9798
  if (event.key === "Escape") onClose();
9612
9799
  };
9613
9800
  window.addEventListener("keydown", onKey);
9614
9801
  return () => window.removeEventListener("keydown", onKey);
9615
9802
  }, [onClose]);
9616
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9803
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__sheet-backdrop", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9617
9804
  "div",
9618
9805
  {
9619
9806
  className: "mx-meet__sheet",
@@ -9621,13 +9808,13 @@ function ShortcutsSheet({ onClose }) {
9621
9808
  "aria-label": "Keyboard shortcuts",
9622
9809
  onClick: (event) => event.stopPropagation(),
9623
9810
  children: [
9624
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__panel-head", children: [
9625
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__panel-title", children: "Keyboard shortcuts" }),
9626
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Close", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 16, height: 16 }) })
9811
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "mx-meet__panel-head", children: [
9812
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__panel-title", children: "Keyboard shortcuts" }),
9813
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Close", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 16, height: 16 }) })
9627
9814
  ] }),
9628
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("dl", { className: "mx-meet__shortcuts", children: MEET_SHORTCUTS.map((shortcut) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__shortcut", children: [
9629
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("dt", { children: shortcut.label }),
9630
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("dd", { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("kbd", { className: "mx-meet__kbd", children: shortcut.keys }) })
9815
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dl", { className: "mx-meet__shortcuts", children: MEET_SHORTCUTS.map((shortcut) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__shortcut", children: [
9816
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dt", { children: shortcut.label }),
9817
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("dd", { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("kbd", { className: "mx-meet__kbd", children: shortcut.keys }) })
9631
9818
  ] }, shortcut.id)) })
9632
9819
  ]
9633
9820
  }
@@ -9637,15 +9824,15 @@ function AiControl({ active, onToggle }) {
9637
9824
  const snapshot = useMeetSnapshot();
9638
9825
  const meeting = snapshot?.meeting ?? null;
9639
9826
  if (meeting === null || !meeting.aiEnabled) return null;
9640
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SparklesIcon, {}) });
9827
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Meeting assistant", active, onClick: onToggle, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SparklesIcon, {}) });
9641
9828
  }
9642
9829
  function PanelShell({
9643
9830
  title,
9644
9831
  onClose,
9645
9832
  children
9646
9833
  }) {
9647
- const ref = (0, import_react6.useRef)(null);
9648
- (0, import_react6.useLayoutEffect)(() => {
9834
+ const ref = (0, import_react7.useRef)(null);
9835
+ (0, import_react7.useLayoutEffect)(() => {
9649
9836
  const panel = ref.current;
9650
9837
  const root = panel?.closest(".mx-meet");
9651
9838
  const header = root?.querySelector(":scope > .mx-meet__header") ?? null;
@@ -9657,12 +9844,12 @@ function PanelShell({
9657
9844
  observer.observe(header);
9658
9845
  return () => observer.disconnect();
9659
9846
  }, []);
9660
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("aside", { ref, className: "mx-meet__panel", "aria-label": title, children: [
9661
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__panel-head", children: [
9662
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__panel-title", children: title }),
9663
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 16, height: 16 }) })
9847
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("aside", { ref, className: "mx-meet__panel", "aria-label": title, children: [
9848
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "mx-meet__panel-head", children: [
9849
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__panel-title", children: title }),
9850
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Close panel", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 16, height: 16 }) })
9664
9851
  ] }),
9665
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__panel-body", children })
9852
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__panel-body", children })
9666
9853
  ] });
9667
9854
  }
9668
9855
  function ChatPanel({
@@ -9672,17 +9859,17 @@ function ChatPanel({
9672
9859
  }) {
9673
9860
  const snapshot = useMeetSnapshot();
9674
9861
  const room = useRoom();
9675
- const [draft, setDraft] = (0, import_react6.useState)("");
9676
- const [recipient, setRecipient] = (0, import_react6.useState)(to);
9677
- const listRef = (0, import_react6.useRef)(null);
9862
+ const [draft, setDraft] = (0, import_react7.useState)("");
9863
+ const [recipient, setRecipient] = (0, import_react7.useState)(to);
9864
+ const listRef = (0, import_react7.useRef)(null);
9678
9865
  const messages = snapshot?.chat ?? [];
9679
9866
  const local = snapshot?.localIdentity ?? null;
9680
9867
  const people = (snapshot?.participants ?? []).filter(
9681
9868
  (participant) => !participant.isLocal && !participant.isAgent
9682
9869
  );
9683
9870
  const recipientName = recipient === null ? null : people.find((p) => p.identity === recipient)?.displayName ?? null;
9684
- (0, import_react6.useEffect)(() => setRecipient(to), [to]);
9685
- (0, import_react6.useEffect)(() => {
9871
+ (0, import_react7.useEffect)(() => setRecipient(to), [to]);
9872
+ (0, import_react7.useEffect)(() => {
9686
9873
  const list = listRef.current;
9687
9874
  if (list !== null) list.scrollTop = list.scrollHeight;
9688
9875
  }, [messages.length]);
@@ -9690,13 +9877,13 @@ function ChatPanel({
9690
9877
  setRecipient(next);
9691
9878
  onTo?.(next);
9692
9879
  };
9693
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Chat", onClose, children: [
9694
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("ul", { className: "mx-meet__chat", ref: listRef, children: [
9695
- snapshot?.chatHistoryError != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { className: "mx-meet__panel-note", children: snapshot.chatHistoryError }) : null,
9696
- snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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,
9697
- messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChatLine, { message, local, people }, message.id))
9880
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(PanelShell, { title: "Chat", onClose, children: [
9881
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("ul", { className: "mx-meet__chat", ref: listRef, children: [
9882
+ snapshot?.chatHistoryError != null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { className: "mx-meet__panel-note", children: snapshot.chatHistoryError }) : null,
9883
+ snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("li", { className: "mx-meet__panel-note", children: "Reading earlier messages\u2026" }) : messages.length === 0 && snapshot?.chatHistoryError == null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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,
9884
+ messages.map((message) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ChatLine, { message, local, people }, message.id))
9698
9885
  ] }),
9699
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9886
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9700
9887
  "form",
9701
9888
  {
9702
9889
  className: "mx-meet__composer mx-meet__composer--chat",
@@ -9709,7 +9896,7 @@ function ChatPanel({
9709
9896
  else void room.sendPrivateChat(recipient, text3);
9710
9897
  },
9711
9898
  children: [
9712
- people.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9899
+ people.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9713
9900
  "select",
9714
9901
  {
9715
9902
  className: "mx-meet__select mx-meet__select--compact",
@@ -9717,16 +9904,16 @@ function ChatPanel({
9717
9904
  value: recipient ?? "",
9718
9905
  onChange: (event) => choose(event.target.value === "" ? null : event.target.value),
9719
9906
  children: [
9720
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "", children: "Everyone" }),
9721
- people.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("option", { value: participant.identity, children: [
9907
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "", children: "Everyone" }),
9908
+ people.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("option", { value: participant.identity, children: [
9722
9909
  participant.displayName,
9723
9910
  " (private)"
9724
9911
  ] }, participant.identity))
9725
9912
  ]
9726
9913
  }
9727
9914
  ) : null,
9728
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__composer-row", children: [
9729
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9915
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__composer-row", children: [
9916
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9730
9917
  "input",
9731
9918
  {
9732
9919
  className: "mx-meet__input",
@@ -9737,9 +9924,9 @@ function ChatPanel({
9737
9924
  maxLength: 4e3
9738
9925
  }
9739
9926
  ),
9740
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
9927
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: draft.trim().length === 0, children: "Send" })
9741
9928
  ] }),
9742
- recipientName !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__panel-note", children: [
9929
+ recipientName !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__panel-note", children: [
9743
9930
  "Only ",
9744
9931
  recipientName,
9745
9932
  " sees this. Private messages are not saved."
@@ -9757,7 +9944,7 @@ function ChatLine({
9757
9944
  const mine = message.identity === local;
9758
9945
  const privateTo = message.to ?? null;
9759
9946
  const counterpart = privateTo === null ? null : mine ? people.find((p) => p.identity === privateTo)?.displayName ?? "them" : "you";
9760
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
9947
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9761
9948
  "li",
9762
9949
  {
9763
9950
  className: [
@@ -9766,17 +9953,17 @@ function ChatLine({
9766
9953
  message.failed !== void 0 ? "mx-meet__chat-line--failed" : ""
9767
9954
  ].filter(Boolean).join(" "),
9768
9955
  children: [
9769
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__chat-meta", children: [
9770
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: mine ? "You" : message.displayName }),
9771
- counterpart !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__chat-private", children: [
9956
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__chat-meta", children: [
9957
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: mine ? "You" : message.displayName }),
9958
+ counterpart !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__chat-private", children: [
9772
9959
  "to ",
9773
9960
  counterpart,
9774
9961
  " \xB7 private"
9775
9962
  ] }) : null,
9776
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("time", { dateTime: message.at, children: clockOf(message.at) })
9963
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("time", { dateTime: message.at, children: clockOf(message.at) })
9777
9964
  ] }),
9778
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__chat-text", children: message.text }),
9779
- message.failed !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__chat-failed", children: message.failed }) : privateTo === null && message.saved === false ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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
9965
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__chat-text", children: message.text }),
9966
+ message.failed !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__chat-failed", children: message.failed }) : privateTo === null && message.saved === false ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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
9780
9967
  ]
9781
9968
  }
9782
9969
  );
@@ -9788,22 +9975,22 @@ function PeoplePanel({
9788
9975
  const snapshot = useMeetSnapshot();
9789
9976
  const controls = useHostControls();
9790
9977
  const queue = useHandQueue();
9791
- const [query, setQuery] = (0, import_react6.useState)("");
9792
- const [menuFor, setMenuFor] = (0, import_react6.useState)(null);
9978
+ const [query, setQuery] = (0, import_react7.useState)("");
9979
+ const [menuFor, setMenuFor] = (0, import_react7.useState)(null);
9793
9980
  const myRole = useRole();
9794
9981
  const local = snapshot?.localIdentity ?? null;
9795
9982
  const everyone = snapshot?.participants ?? [];
9796
9983
  const needle = query.trim().toLowerCase();
9797
9984
  const shown = needle.length === 0 ? everyone : everyone.filter((participant) => participant.displayName.toLowerCase().includes(needle));
9798
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: `People (${everyone.length})`, onClose, children: [
9799
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LobbyPanel, {}),
9800
- queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__section", "aria-label": "Raised hands", children: [
9801
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__section-head", children: [
9802
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("h3", { className: "mx-meet__section-title", children: [
9985
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(PanelShell, { title: `People (${everyone.length})`, onClose, children: [
9986
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(LobbyPanel, {}),
9987
+ queue.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__section", "aria-label": "Raised hands", children: [
9988
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "mx-meet__section-head", children: [
9989
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h3", { className: "mx-meet__section-title", children: [
9803
9990
  "Raised hands \xB7 ",
9804
9991
  queue.length
9805
9992
  ] }),
9806
- controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
9993
+ controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9807
9994
  "button",
9808
9995
  {
9809
9996
  type: "button",
@@ -9813,13 +10000,13 @@ function PeoplePanel({
9813
10000
  }
9814
10001
  ) : null
9815
10002
  ] }),
9816
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ol", { className: "mx-meet__queue", children: queue.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__person", children: [
9817
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 28 }),
9818
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__person-name", children: [
10003
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ol", { className: "mx-meet__queue", children: queue.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__person", children: [
10004
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 28 }),
10005
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__person-name", children: [
9819
10006
  participant.displayName,
9820
- participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__you", children: " (you)" }) : null
10007
+ participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__you", children: " (you)" }) : null
9821
10008
  ] }),
9822
- controls.isHost || participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10009
+ controls.isHost || participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9823
10010
  "button",
9824
10011
  {
9825
10012
  type: "button",
@@ -9830,27 +10017,27 @@ function PeoplePanel({
9830
10017
  ) : null
9831
10018
  ] }, participant.identity)) })
9832
10019
  ] }) : null,
9833
- controls.isHost && everyone.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__bulk", children: [
9834
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { type: "button", className: "mx-meet__chip", onClick: () => void controls.run({ action: "mute_all" }), children: [
9835
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, { width: 14, height: 14 }),
10020
+ controls.isHost && everyone.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__bulk", children: [
10021
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("button", { type: "button", className: "mx-meet__chip", onClick: () => void controls.run({ action: "mute_all" }), children: [
10022
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, { width: 14, height: 14 }),
9836
10023
  " Mute all"
9837
10024
  ] }),
9838
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10025
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9839
10026
  "button",
9840
10027
  {
9841
10028
  type: "button",
9842
10029
  className: "mx-meet__chip",
9843
10030
  onClick: () => void controls.run({ action: "ask_all_unmute" }),
9844
10031
  children: [
9845
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicIcon, { width: 14, height: 14 }),
10032
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicIcon, { width: 14, height: 14 }),
9846
10033
  " Ask all to unmute"
9847
10034
  ]
9848
10035
  }
9849
10036
  )
9850
10037
  ] }) : null,
9851
- everyone.length > 4 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__search", children: [
9852
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SearchIcon, { width: 16, height: 16 }),
9853
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10038
+ everyone.length > 4 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__search", children: [
10039
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SearchIcon, { width: 16, height: 16 }),
10040
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9854
10041
  "input",
9855
10042
  {
9856
10043
  className: "mx-meet__input mx-meet__input--bare",
@@ -9861,31 +10048,31 @@ function PeoplePanel({
9861
10048
  }
9862
10049
  )
9863
10050
  ] }) : null,
9864
- controls.notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
9865
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("ul", { className: "mx-meet__people", children: [
9866
- shown.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__person", children: [
9867
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
9868
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__person-name", children: [
10051
+ controls.notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: controls.notice.failed ? "mx-meet__error" : "mx-meet__notice", role: "status", children: controls.notice.text }) : null,
10052
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("ul", { className: "mx-meet__people", children: [
10053
+ shown.map((participant) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__person", children: [
10054
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: participant.displayName, url: participant.avatarUrl, size: 32 }),
10055
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__person-name", children: [
9869
10056
  participant.displayName,
9870
- participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__you", children: " (you)" }) : null,
9871
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RoleBadge, { role: participant.identity === local ? myRole : participant.role }),
9872
- isNoteTaker(participant) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
9873
- snapshot?.spotlight === participant.identity ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
10057
+ participant.identity === local ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__you", children: " (you)" }) : null,
10058
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RoleBadge, { role: participant.identity === local ? myRole : participant.role }),
10059
+ isNoteTaker(participant) ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null,
10060
+ snapshot?.spotlight === participant.identity ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Spotlight" }) : null
9874
10061
  ] }),
9875
- participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HandIcon, { width: 14, height: 14 }) : null,
9876
- !participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, { width: 14, height: 14 }) : null,
9877
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(QualityBars, { quality: participant.quality }),
9878
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__anchor", children: [
9879
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10062
+ participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, { width: 14, height: 14 }) : null,
10063
+ !participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, { width: 14, height: 14 }) : null,
10064
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(QualityBars, { quality: participant.quality }),
10065
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__anchor", children: [
10066
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9880
10067
  ControlButton,
9881
10068
  {
9882
10069
  label: `More for ${participant.displayName}`,
9883
10070
  active: menuFor === participant.identity,
9884
10071
  onClick: () => setMenuFor(menuFor === participant.identity ? null : participant.identity),
9885
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MoreIcon, { width: 16, height: 16 })
10072
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, { width: 16, height: 16 })
9886
10073
  }
9887
10074
  ),
9888
- menuFor === participant.identity ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10075
+ menuFor === participant.identity ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9889
10076
  PersonMenu,
9890
10077
  {
9891
10078
  participant,
@@ -9896,13 +10083,13 @@ function PeoplePanel({
9896
10083
  ) : null
9897
10084
  ] })
9898
10085
  ] }, participant.identity)),
9899
- shown.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__panel-note", children: [
10086
+ shown.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__panel-note", children: [
9900
10087
  "Nobody matches \u201C",
9901
10088
  query,
9902
10089
  "\u201D."
9903
10090
  ] }) : null
9904
10091
  ] }),
9905
- snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
10092
+ snapshot?.meeting !== null && snapshot?.meeting !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(GuestRecordAccessControl, { meeting: snapshot.meeting }) : null
9906
10093
  ] });
9907
10094
  }
9908
10095
  function PersonMenu({
@@ -9914,14 +10101,14 @@ function PersonMenu({
9914
10101
  const host = useMeetHost();
9915
10102
  const snapshot = useMeetSnapshot();
9916
10103
  const controls = useHostControls();
9917
- const [mode, setMode] = (0, import_react6.useState)("menu");
9918
- const [text3, setText] = (0, import_react6.useState)("");
10104
+ const [mode, setMode] = (0, import_react7.useState)("menu");
10105
+ const [text3, setText] = (0, import_react7.useState)("");
9919
10106
  const self = participant.identity === snapshot?.localIdentity;
9920
10107
  const moderate = controls.canModerate(participant);
9921
10108
  const pinned = snapshot?.pinned === participant.identity;
9922
10109
  const spotlit = snapshot?.spotlight === participant.identity;
9923
10110
  const hasAccount = participant.userId !== null;
9924
- const [refused, setRefused] = (0, import_react6.useState)(false);
10111
+ const [refused, setRefused] = (0, import_react7.useState)(false);
9925
10112
  const act = (request) => {
9926
10113
  setRefused(false);
9927
10114
  void controls.run(request).then((result) => {
@@ -9929,10 +10116,10 @@ function PersonMenu({
9929
10116
  else setRefused(true);
9930
10117
  });
9931
10118
  };
9932
- const refusal2 = refused && controls.notice?.failed === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.ErrorBox, { as: "p", className: "mx-meet__error", message: controls.notice.text, operation: "Change this participant", origin: "meet/components", children: controls.notice.text }) : null;
10119
+ const refusal2 = refused && controls.notice?.failed === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.ErrorBox, { as: "p", className: "mx-meet__error", message: controls.notice.text, operation: "Change this participant", origin: "meet/components", children: controls.notice.text }) : null;
9933
10120
  if (mode === "rename" || mode === "report") {
9934
10121
  const renaming = mode === "rename";
9935
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10122
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Popover, { label: renaming ? "Rename" : "Report", onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
9936
10123
  "form",
9937
10124
  {
9938
10125
  className: "mx-meet__menu-form",
@@ -9944,9 +10131,9 @@ function PersonMenu({
9944
10131
  );
9945
10132
  },
9946
10133
  children: [
9947
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
9948
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: renaming ? "Name shown in this meeting" : `What did ${participant.displayName} do?` }),
9949
- renaming ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10134
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__field", children: [
10135
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__field-label", children: renaming ? "Name shown in this meeting" : `What did ${participant.displayName} do?` }),
10136
+ renaming ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9950
10137
  "input",
9951
10138
  {
9952
10139
  className: "mx-meet__input",
@@ -9955,7 +10142,7 @@ function PersonMenu({
9955
10142
  value: text3,
9956
10143
  onChange: (event) => setText(event.target.value)
9957
10144
  }
9958
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10145
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9959
10146
  "textarea",
9960
10147
  {
9961
10148
  className: "mx-meet__input",
@@ -9968,9 +10155,9 @@ function PersonMenu({
9968
10155
  )
9969
10156
  ] }),
9970
10157
  refusal2,
9971
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__menu-actions", children: [
9972
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Back" }),
9973
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: text3.trim().length === 0 || controls.busy, children: renaming ? "Rename" : "Report" })
10158
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__menu-actions", children: [
10159
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Back" }),
10160
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: text3.trim().length === 0 || controls.busy, children: renaming ? "Rename" : "Report" })
9974
10161
  ] })
9975
10162
  ]
9976
10163
  }
@@ -9978,12 +10165,12 @@ function PersonMenu({
9978
10165
  }
9979
10166
  if (mode === "remove" || mode === "transfer") {
9980
10167
  const removing = mode === "remove";
9981
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: removing ? "Remove" : "Make host", onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__menu-form", children: [
9982
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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.` }),
10168
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Popover, { label: removing ? "Remove" : "Make host", onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__menu-form", children: [
10169
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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.` }),
9983
10170
  refusal2,
9984
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__menu-actions", children: [
9985
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
9986
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10171
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__menu-actions", children: [
10172
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => setMode("menu"), children: "Cancel" }),
10173
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
9987
10174
  "button",
9988
10175
  {
9989
10176
  type: "button",
@@ -9996,8 +10183,8 @@ function PersonMenu({
9996
10183
  ] })
9997
10184
  ] }) });
9998
10185
  }
9999
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__menu", role: "menu", children: [
10000
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10186
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Popover, { label: `Options for ${participant.displayName}`, onClose, placement, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__menu", role: "menu", children: [
10187
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10001
10188
  MenuItem,
10002
10189
  {
10003
10190
  onSelect: () => {
@@ -10005,13 +10192,13 @@ function PersonMenu({
10005
10192
  onClose();
10006
10193
  },
10007
10194
  children: [
10008
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PinIcon, { width: 16, height: 16 }),
10195
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PinIcon, { width: 16, height: 16 }),
10009
10196
  " ",
10010
10197
  pinned ? "Unpin" : "Pin for me"
10011
10198
  ]
10012
10199
  }
10013
10200
  ),
10014
- !self && !participant.isAgent && (onMessage !== void 0 || host !== null) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10201
+ !self && !participant.isAgent && (onMessage !== void 0 || host !== null) ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10015
10202
  MenuItem,
10016
10203
  {
10017
10204
  onSelect: () => {
@@ -10023,42 +10210,42 @@ function PersonMenu({
10023
10210
  onClose();
10024
10211
  },
10025
10212
  children: [
10026
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ChatIcon, { width: 16, height: 16 }),
10213
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ChatIcon, { width: 16, height: 16 }),
10027
10214
  " Message privately"
10028
10215
  ]
10029
10216
  }
10030
10217
  ) : null,
10031
- controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "spotlight", identity: spotlit ? null : participant.identity }), children: [
10032
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpotlightIcon, { width: 16, height: 16 }),
10218
+ controls.isHost ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "spotlight", identity: spotlit ? null : participant.identity }), children: [
10219
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpotlightIcon, { width: 16, height: 16 }),
10033
10220
  " ",
10034
10221
  spotlit ? "Remove spotlight" : "Spotlight for everyone"
10035
10222
  ] }) : null,
10036
- moderate ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
10037
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__menu-sep", role: "separator" }),
10038
- participant.micEnabled ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "mute", identity: participant.identity }), children: [
10039
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicOffIcon, { width: 16, height: 16 }),
10223
+ moderate ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
10224
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__menu-sep", role: "separator" }),
10225
+ participant.micEnabled ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "mute", identity: participant.identity }), children: [
10226
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicOffIcon, { width: 16, height: 16 }),
10040
10227
  " Mute"
10041
- ] }) : !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "ask_unmute", identity: participant.identity }), children: [
10042
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MicIcon, { width: 16, height: 16 }),
10228
+ ] }) : !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "ask_unmute", identity: participant.identity }), children: [
10229
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MicIcon, { width: 16, height: 16 }),
10043
10230
  " Ask to unmute"
10044
10231
  ] }) : null,
10045
- participant.cameraEnabled ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "stop_video", identity: participant.identity }), children: [
10046
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CameraOffIcon, { width: 16, height: 16 }),
10232
+ participant.cameraEnabled ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "stop_video", identity: participant.identity }), children: [
10233
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CameraOffIcon, { width: 16, height: 16 }),
10047
10234
  " Stop video"
10048
10235
  ] }) : null,
10049
- participant.screenSharing ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "stop_screen", identity: participant.identity }), children: [
10050
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ScreenShareIcon, { width: 16, height: 16 }),
10236
+ participant.screenSharing ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "stop_screen", identity: participant.identity }), children: [
10237
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScreenShareIcon, { width: 16, height: 16 }),
10051
10238
  " Stop screen share"
10052
10239
  ] }) : null,
10053
- participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "lower_hand", identity: participant.identity }), children: [
10054
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HandIcon, { width: 16, height: 16 }),
10240
+ participant.handRaised ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "lower_hand", identity: participant.identity }), children: [
10241
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, { width: 16, height: 16 }),
10055
10242
  " Lower hand"
10056
10243
  ] }) : null,
10057
- hasAccount && !participant.isAgent && participant.role !== "cohost" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "make_cohost", identity: participant.identity }), children: [
10058
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PeopleIcon, { width: 16, height: 16 }),
10244
+ hasAccount && !participant.isAgent && participant.role !== "cohost" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "make_cohost", identity: participant.identity }), children: [
10245
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PeopleIcon, { width: 16, height: 16 }),
10059
10246
  " Make co-host"
10060
10247
  ] }) : null,
10061
- !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10248
+ !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10062
10249
  MenuItem,
10063
10250
  {
10064
10251
  onSelect: () => {
@@ -10066,21 +10253,21 @@ function PersonMenu({
10066
10253
  setMode("rename");
10067
10254
  },
10068
10255
  children: [
10069
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PencilIcon, { width: 16, height: 16 }),
10256
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PencilIcon, { width: 16, height: 16 }),
10070
10257
  " Rename"
10071
10258
  ]
10072
10259
  }
10073
10260
  ) : null
10074
10261
  ] }) : null,
10075
- controls.isOwner && participant.role === "cohost" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => act({ action: "revoke_cohost", identity: participant.identity }), children: [
10076
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PeopleIcon, { width: 16, height: 16 }),
10262
+ controls.isOwner && participant.role === "cohost" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => act({ action: "revoke_cohost", identity: participant.identity }), children: [
10263
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PeopleIcon, { width: 16, height: 16 }),
10077
10264
  " Remove co-host"
10078
10265
  ] }) : null,
10079
- controls.isOwner && !self && hasAccount && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { onSelect: () => setMode("transfer"), children: [
10080
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpotlightIcon, { width: 16, height: 16 }),
10266
+ controls.isOwner && !self && hasAccount && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { onSelect: () => setMode("transfer"), children: [
10267
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpotlightIcon, { width: 16, height: 16 }),
10081
10268
  " Make host"
10082
10269
  ] }) : null,
10083
- self ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10270
+ self ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10084
10271
  MenuItem,
10085
10272
  {
10086
10273
  onSelect: () => {
@@ -10088,12 +10275,12 @@ function PersonMenu({
10088
10275
  setMode("rename");
10089
10276
  },
10090
10277
  children: [
10091
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PencilIcon, { width: 16, height: 16 }),
10278
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PencilIcon, { width: 16, height: 16 }),
10092
10279
  " Rename yourself"
10093
10280
  ]
10094
10281
  }
10095
10282
  ) : null,
10096
- !self && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10283
+ !self && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10097
10284
  MenuItem,
10098
10285
  {
10099
10286
  onSelect: () => {
@@ -10101,21 +10288,21 @@ function PersonMenu({
10101
10288
  setMode("report");
10102
10289
  },
10103
10290
  children: [
10104
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(FlagIcon, { width: 16, height: 16 }),
10291
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(FlagIcon, { width: 16, height: 16 }),
10105
10292
  " Report"
10106
10293
  ]
10107
10294
  }
10108
10295
  ) : null,
10109
- moderate && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(MenuItem, { danger: true, onSelect: () => setMode("remove"), children: [
10110
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 16, height: 16 }),
10296
+ moderate && !participant.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(MenuItem, { danger: true, onSelect: () => setMode("remove"), children: [
10297
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 16, height: 16 }),
10111
10298
  " Remove from meeting"
10112
10299
  ] }) : null
10113
10300
  ] }) });
10114
10301
  }
10115
10302
  function SettingsPanel({ onClose }) {
10116
10303
  const host = useRequiredMeetHost();
10117
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Settings", onClose, children: [
10118
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10304
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(PanelShell, { title: "Settings", onClose, children: [
10305
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10119
10306
  DeviceSettings,
10120
10307
  {
10121
10308
  onPick: (kind, deviceId2) => {
@@ -10124,8 +10311,8 @@ function SettingsPanel({ onClose }) {
10124
10311
  }
10125
10312
  }
10126
10313
  ),
10127
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EffectsSettings, {}),
10128
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CaptionLanguageSettings, {})
10314
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(EffectsSettings, {}),
10315
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CaptionLanguageSettings, {})
10129
10316
  ] });
10130
10317
  }
10131
10318
  function DeviceSettings({
@@ -10137,15 +10324,15 @@ function DeviceSettings({
10137
10324
  const speaker = devices?.selected.audiooutput ?? host.devices.resolve("audiooutput");
10138
10325
  const stream = useMicrophoneStream(microphone);
10139
10326
  const level = useAudioLevel(stream);
10140
- const [testing, setTesting] = (0, import_react6.useState)(false);
10141
- (0, import_react6.useEffect)(() => {
10327
+ const [testing, setTesting] = (0, import_react7.useState)(false);
10328
+ (0, import_react7.useEffect)(() => {
10142
10329
  void host.devices.refresh();
10143
10330
  }, [host]);
10144
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
10145
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "audioinput", label: "Microphone", onPick }),
10146
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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__ */ (0, import_jsx_runtime4.jsx)("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }),
10147
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "audiooutput", label: "Speaker", onPick }),
10148
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10331
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
10332
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "audioinput", label: "Microphone", onPick }),
10333
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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__ */ (0, import_jsx_runtime5.jsx)("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }),
10334
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "audiooutput", label: "Speaker", onPick }),
10335
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10149
10336
  "button",
10150
10337
  {
10151
10338
  type: "button",
@@ -10156,19 +10343,19 @@ function DeviceSettings({
10156
10343
  void playTestSound(speaker).finally(() => setTesting(false));
10157
10344
  },
10158
10345
  children: [
10159
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpeakerIcon, { width: 14, height: 14 }),
10346
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpeakerIcon, { width: 14, height: 14 }),
10160
10347
  " ",
10161
10348
  testing ? "Playing\u2026" : "Test speaker"
10162
10349
  ]
10163
10350
  }
10164
10351
  ),
10165
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
10352
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "videoinput", label: "Camera", onPick })
10166
10353
  ] });
10167
10354
  }
10168
10355
  function EffectsSettings({ preview }) {
10169
10356
  const effects = useMediaEffects();
10170
- const [error, setError] = (0, import_react6.useState)(null);
10171
- const fileRef = (0, import_react6.useRef)(null);
10357
+ const [error, setError] = (0, import_react7.useState)(null);
10358
+ const fileRef = (0, import_react7.useRef)(null);
10172
10359
  const supported = effects.backgroundsSupported || preview != null || videoEffectsSupported();
10173
10360
  const apply = (next) => {
10174
10361
  setError(null);
@@ -10180,9 +10367,9 @@ function EffectsSettings({ preview }) {
10180
10367
  );
10181
10368
  }
10182
10369
  };
10183
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__section", "aria-label": "Effects", children: [
10184
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__check", children: [
10185
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10370
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__section", "aria-label": "Effects", children: [
10371
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__check", children: [
10372
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10186
10373
  import_design_system.Checkbox,
10187
10374
  {
10188
10375
  id: "mx-meet-noise",
@@ -10190,14 +10377,14 @@ function EffectsSettings({ preview }) {
10190
10377
  onCheckedChange: (checked) => apply({ noiseSuppression: checked === true })
10191
10378
  }
10192
10379
  ),
10193
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__check-text", children: [
10194
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Label, { htmlFor: "mx-meet-noise", children: "Noise suppression" }),
10195
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__hint", children: "Filters keyboards, fans and background chatter." })
10380
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__check-text", children: [
10381
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Label, { htmlFor: "mx-meet-noise", children: "Noise suppression" }),
10382
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__hint", children: "Filters keyboards, fans and background chatter." })
10196
10383
  ] })
10197
10384
  ] }),
10198
- supported ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__field", children: [
10199
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Label, { children: "Background" }),
10200
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10385
+ supported ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__field", children: [
10386
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Label, { children: "Background" }),
10387
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10201
10388
  import_design_system.SegmentedControl,
10202
10389
  {
10203
10390
  fullWidth: true,
@@ -10216,7 +10403,7 @@ function EffectsSettings({ preview }) {
10216
10403
  ]
10217
10404
  }
10218
10405
  ),
10219
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10406
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10220
10407
  "input",
10221
10408
  {
10222
10409
  ref: fileRef,
@@ -10231,7 +10418,7 @@ function EffectsSettings({ preview }) {
10231
10418
  }
10232
10419
  }
10233
10420
  ),
10234
- error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__error", children: error }) : null
10421
+ error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__error", children: error }) : null
10235
10422
  ] }) : null
10236
10423
  ] });
10237
10424
  }
@@ -10290,8 +10477,8 @@ async function playTestSound(sinkId) {
10290
10477
  await context.close();
10291
10478
  }
10292
10479
  function useMicrophoneStream(deviceId2) {
10293
- const [stream, setStream] = (0, import_react6.useState)(null);
10294
- (0, import_react6.useEffect)(() => {
10480
+ const [stream, setStream] = (0, import_react7.useState)(null);
10481
+ (0, import_react7.useEffect)(() => {
10295
10482
  if (deviceId2 === "off") return void 0;
10296
10483
  let live = true;
10297
10484
  let opened = null;
@@ -10316,49 +10503,58 @@ function useMicrophoneStream(deviceId2) {
10316
10503
  function LobbyPanel() {
10317
10504
  const lobby = useLobby();
10318
10505
  if (!lobby.canAdmit || lobby.waiting.length === 0) return null;
10319
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__lobby", "aria-label": "Waiting room", children: [
10320
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__lobby-head", children: [
10321
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "mx-meet__lobby-title", children: lobby.waiting.length === 1 ? "1 person is waiting" : `${lobby.waiting.length} people are waiting` }),
10322
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void lobby.admitAll(), children: "Admit all" })
10506
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__lobby", "aria-label": "Waiting room", children: [
10507
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "mx-meet__lobby-head", children: [
10508
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "mx-meet__lobby-title", children: lobby.waiting.length === 1 ? "1 person is waiting" : `${lobby.waiting.length} people are waiting` }),
10509
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: () => void lobby.admitAll(), children: "Admit all" })
10323
10510
  ] }),
10324
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__lobby-row", children: [
10325
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
10326
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__person-name", children: [
10327
- entry.displayName,
10328
- entry.userId === null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Guest" }) : null
10329
- ] }),
10330
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CheckIcon, { width: 16, height: 16 }) }),
10331
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10332
- ControlButton,
10333
- {
10334
- label: `Deny ${entry.displayName}`,
10335
- danger: true,
10336
- onClick: () => void lobby.deny(entry),
10337
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CloseIcon, { width: 16, height: 16 })
10338
- }
10339
- )
10340
- ] }, entry.identity)) })
10511
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet__lobby-list", children: lobby.waiting.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10512
+ "li",
10513
+ {
10514
+ className: "mx-meet__lobby-row",
10515
+ "data-meet-lobby-entry": "",
10516
+ "data-meet-participant-name": entry.displayName,
10517
+ children: [
10518
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: entry.displayName, url: entry.avatarUrl, size: 32 }),
10519
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__person-name", children: [
10520
+ entry.displayName,
10521
+ entry.userId === null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Guest" }) : null
10522
+ ] }),
10523
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: `Admit ${entry.displayName}`, onClick: () => void lobby.admit(entry), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CheckIcon, { width: 16, height: 16 }) }),
10524
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10525
+ ControlButton,
10526
+ {
10527
+ label: `Deny ${entry.displayName}`,
10528
+ danger: true,
10529
+ onClick: () => void lobby.deny(entry),
10530
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CloseIcon, { width: 16, height: 16 })
10531
+ }
10532
+ )
10533
+ ]
10534
+ },
10535
+ entry.identity
10536
+ )) })
10341
10537
  ] });
10342
10538
  }
10343
10539
  function NoteTakerRow() {
10344
10540
  const ai = useMeetAi();
10345
10541
  const status = ai.noteTaker;
10346
10542
  const duplicateError = status.refusal !== null && ai.error !== null && status.refusal.reason === ai.error.message && status.refusal.remedy === ai.error.remedy;
10347
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__note-taker", "aria-label": "Note-taker", children: [
10348
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: `mx-meet__note-taker-state mx-meet__note-taker-state--${status.state}`, children: [
10349
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
10543
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__note-taker", "aria-label": "Note-taker", children: [
10544
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: `mx-meet__note-taker-state mx-meet__note-taker-state--${status.state}`, children: [
10545
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__note-taker-dot", "aria-hidden": "true" }),
10350
10546
  ai.noteTakerLabel
10351
10547
  ] }),
10352
- status.detail !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
10353
- status.refusal !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: status.refusal, operation: "Join this meeting", origin: "meet/components", children: [
10354
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: status.refusal.reason }),
10355
- status.refusal.remedy.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: status.refusal.remedy }) : null
10548
+ status.detail !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: status.detail }) : null,
10549
+ status.refusal !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: status.refusal, operation: "Join this meeting", origin: "meet/components", children: [
10550
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: status.refusal.reason }),
10551
+ status.refusal.remedy.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: status.refusal.remedy }) : null
10356
10552
  ] }) : null,
10357
- ai.error !== null && !duplicateError ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
10358
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
10359
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
10553
+ ai.error !== null && !duplicateError ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
10554
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
10555
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
10360
10556
  ] }) : null,
10361
- ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10557
+ ai.canControlNoteTaker ? status.state === "transcribing" || status.state === "joining" || status.state === "handoff_pending" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10362
10558
  "button",
10363
10559
  {
10364
10560
  type: "button",
@@ -10366,7 +10562,7 @@ function NoteTakerRow() {
10366
10562
  onClick: () => void ai.stopNoteTaker(),
10367
10563
  children: "Dismiss the note-taker"
10368
10564
  }
10369
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10565
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10370
10566
  "button",
10371
10567
  {
10372
10568
  type: "button",
@@ -10382,24 +10578,24 @@ function NoteList({
10382
10578
  notes,
10383
10579
  empty
10384
10580
  }) {
10385
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__note-group", "aria-label": title, children: [
10386
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "mx-meet__note-group-title", children: title }),
10387
- notes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: empty }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__notes", children: notes.map((note) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__note", children: [
10581
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__note-group", "aria-label": title, children: [
10582
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "mx-meet__note-group-title", children: title }),
10583
+ notes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: empty }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet__notes", children: notes.map((note) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__note", children: [
10388
10584
  note.text,
10389
- note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
10585
+ note.assigneeDisplayName !== void 0 && note.assigneeDisplayName !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__assignee", children: note.assigneeDisplayName }) : null
10390
10586
  ] }, note.id)) })
10391
10587
  ] });
10392
10588
  }
10393
10589
  function AiPanel({ onClose }) {
10394
10590
  const ai = useMeetAi();
10395
- const [question, setQuestion] = (0, import_react6.useState)("");
10396
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(PanelShell, { title: "Meeting assistant", onClose, children: [
10397
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(NoteTakerRow, {}),
10398
- ai.summary !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__note-group", "aria-label": "Summary", children: [
10399
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
10400
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__summary", children: ai.summary.text })
10591
+ const [question, setQuestion] = (0, import_react7.useState)("");
10592
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(PanelShell, { title: "Meeting assistant", onClose, children: [
10593
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(NoteTakerRow, {}),
10594
+ ai.summary !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__note-group", "aria-label": "Summary", children: [
10595
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "mx-meet__note-group-title", children: "Summary" }),
10596
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__summary", children: ai.summary.text })
10401
10597
  ] }) : null,
10402
- ai.wrapUp !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__wrap-up-notice", role: "status", children: [
10598
+ ai.wrapUp !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__wrap-up-notice", role: "status", children: [
10403
10599
  "The wrap-up is written \u2014 ",
10404
10600
  ai.wrapUp.noteIds.length,
10405
10601
  " ",
@@ -10411,7 +10607,7 @@ function AiPanel({ onClose }) {
10411
10607
  ai.wrapUp.segmentCount === 1 ? "transcript line" : "transcript lines",
10412
10608
  "."
10413
10609
  ] }) : null,
10414
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10610
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10415
10611
  NoteList,
10416
10612
  {
10417
10613
  title: "Notes",
@@ -10419,7 +10615,7 @@ function AiPanel({ onClose }) {
10419
10615
  empty: "Notes appear here as the meeting goes on."
10420
10616
  }
10421
10617
  ),
10422
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10618
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10423
10619
  NoteList,
10424
10620
  {
10425
10621
  title: "Decisions",
@@ -10427,7 +10623,7 @@ function AiPanel({ onClose }) {
10427
10623
  empty: "Nothing has been decided yet."
10428
10624
  }
10429
10625
  ),
10430
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10626
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10431
10627
  NoteList,
10432
10628
  {
10433
10629
  title: "Action items",
@@ -10435,21 +10631,21 @@ function AiPanel({ onClose }) {
10435
10631
  empty: "No action items yet."
10436
10632
  }
10437
10633
  ),
10438
- ai.transcript.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__note-group", "aria-label": "Transcript", children: [
10439
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "mx-meet__note-group-title", children: "Transcript" }),
10440
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__transcript", children: ai.transcript.map((line) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10634
+ ai.transcript.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__note-group", "aria-label": "Transcript", children: [
10635
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h3", { className: "mx-meet__note-group-title", children: "Transcript" }),
10636
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet__transcript", children: ai.transcript.map((line) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10441
10637
  "li",
10442
10638
  {
10443
10639
  className: line.final && line.source === "record" ? "mx-meet__line" : "mx-meet__line mx-meet__line--interim",
10444
10640
  children: [
10445
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: line.speaker }),
10446
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: line.text })
10641
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: line.speaker }),
10642
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: line.text })
10447
10643
  ]
10448
10644
  },
10449
10645
  line.id
10450
10646
  )) })
10451
10647
  ] }) : null,
10452
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10648
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10453
10649
  "form",
10454
10650
  {
10455
10651
  className: "mx-meet__composer",
@@ -10460,7 +10656,7 @@ function AiPanel({ onClose }) {
10460
10656
  void ai.ask(asked);
10461
10657
  },
10462
10658
  children: [
10463
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10659
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10464
10660
  "input",
10465
10661
  {
10466
10662
  className: "mx-meet__input",
@@ -10470,13 +10666,13 @@ function AiPanel({ onClose }) {
10470
10666
  "aria-label": "Ask about this meeting"
10471
10667
  }
10472
10668
  ),
10473
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
10669
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "submit", className: "mx-meet__send", disabled: ai.asking, children: ai.asking ? "Asking\u2026" : "Ask" })
10474
10670
  ]
10475
10671
  }
10476
10672
  ),
10477
- ai.asking && ai.phase !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", role: "status", children: ai.phase }) : null,
10478
- ai.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__answer", children: ai.answer }) : null,
10479
- ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__coverage", children: [
10673
+ ai.asking && ai.phase !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", role: "status", children: ai.phase }) : null,
10674
+ ai.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__answer", children: ai.answer }) : null,
10675
+ ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__coverage", children: [
10480
10676
  "Answered from ",
10481
10677
  ai.coverage.segmentsUsed,
10482
10678
  " of ",
@@ -10485,9 +10681,9 @@ function AiPanel({ onClose }) {
10485
10681
  ai.coverage.truncated ? " (the oldest were left out)" : "",
10486
10682
  "."
10487
10683
  ] }) : null,
10488
- ai.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
10489
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
10490
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
10684
+ ai.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: ai.error, operation: "Run the meeting assistant", origin: "meet/components", children: [
10685
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: ai.error.message }),
10686
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: ai.error.remedy })
10491
10687
  ] }) : null
10492
10688
  ] });
10493
10689
  }
@@ -10496,45 +10692,54 @@ function Captions({ lines = 3 }) {
10496
10692
  const visible = ai.transcript.slice(-lines);
10497
10693
  const translation = useCaptionTranslation(visible);
10498
10694
  if (visible.length === 0) return null;
10499
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__captions", "aria-live": "polite", "aria-label": "Live captions", children: [
10695
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__captions", "aria-live": "polite", "aria-label": "Live captions", children: [
10500
10696
  visible.map((line) => {
10501
10697
  const translated = translation.language === null ? void 0 : translation.translations[line.id];
10502
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10698
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10503
10699
  "p",
10504
10700
  {
10505
10701
  className: line.final ? "mx-meet__caption" : "mx-meet__caption mx-meet__caption--interim",
10506
10702
  children: [
10507
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: line.speaker }),
10703
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: line.speaker }),
10508
10704
  " ",
10509
10705
  translated ?? line.text,
10510
- translated !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__caption-original", children: line.text }) : null
10706
+ translated !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__caption-original", children: line.text }) : null
10511
10707
  ]
10512
10708
  },
10513
10709
  line.id
10514
10710
  );
10515
10711
  }),
10516
- translation.language !== null && translation.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
10712
+ translation.language !== null && translation.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__caption mx-meet__caption--interim", children: translation.error }) : null
10517
10713
  ] });
10518
10714
  }
10519
10715
  function ConsentNotice() {
10520
10716
  const notice = useConsentNotice();
10521
10717
  if (notice === null) return null;
10522
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__consent", role: "status", children: notice });
10718
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__consent", role: "status", children: notice });
10523
10719
  }
10524
10720
  function AttendanceNotice() {
10525
10721
  const media = useLocalMedia();
10526
10722
  const notice = listenOnlyNotice(media);
10527
10723
  if (notice === null) return null;
10528
10724
  const refused = media.microphone.unavailable;
10529
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__banner mx-meet__banner--attendance", role: "status", children: [
10530
- notice,
10531
- refused === null ? null : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__remedy", children: refused.remedy })
10532
- ] });
10725
+ const code = microphoneNoticeCode(media.microphone);
10726
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10727
+ "p",
10728
+ {
10729
+ className: "mx-meet__banner mx-meet__banner--attendance",
10730
+ role: "status",
10731
+ ...code !== null ? { "data-meet-notice": code } : {},
10732
+ children: [
10733
+ notice,
10734
+ refused === null ? null : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__remedy", children: refused.remedy })
10735
+ ]
10736
+ }
10737
+ );
10533
10738
  }
10534
10739
  function PreJoin(props) {
10535
10740
  const host = useMeetHost();
10536
- if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "This meeting" });
10537
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PreJoinBody, { ...props, host });
10741
+ if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "This meeting" });
10742
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PreJoinBody, { ...props, host });
10538
10743
  }
10539
10744
  function PreJoinBody({
10540
10745
  roomName,
@@ -10548,21 +10753,21 @@ function PreJoinBody({
10548
10753
  const recording = useRecording();
10549
10754
  const effects = useMediaEffects();
10550
10755
  const { notice } = useModerationNotice();
10551
- const [mode, setMode] = (0, import_react6.useState)("video");
10552
- const [microphone, setMicrophone] = (0, import_react6.useState)(true);
10553
- const [joining, setJoining] = (0, import_react6.useState)(false);
10756
+ const [mode, setMode] = (0, import_react7.useState)("video");
10757
+ const [microphone, setMicrophone] = (0, import_react7.useState)(true);
10758
+ const [joining, setJoining] = (0, import_react7.useState)(false);
10554
10759
  const camera = devices?.selected.videoinput ?? host.devices.resolve("videoinput");
10555
10760
  const mic = devices?.selected.audioinput ?? host.devices.resolve("audioinput");
10556
10761
  const preview = useCameraPreview(mode === "video" ? camera : void 0, effects.effects);
10557
10762
  const micStream = useMicrophoneStream(microphone ? mic : "off");
10558
10763
  const level = useAudioLevel(micStream);
10559
- const [speakerTesting, setSpeakerTesting] = (0, import_react6.useState)(false);
10560
- (0, import_react6.useEffect)(() => {
10764
+ const [speakerTesting, setSpeakerTesting] = (0, import_react7.useState)(false);
10765
+ (0, import_react7.useEffect)(() => {
10561
10766
  void host.devices.refresh();
10562
10767
  }, [host]);
10563
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__prejoin", children: [
10564
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__preview", children: [
10565
- mode === "video" && preview.preview !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10768
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__prejoin", children: [
10769
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__preview", children: [
10770
+ mode === "video" && preview.preview !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10566
10771
  "video",
10567
10772
  {
10568
10773
  className: "mx-meet__video mx-meet__video--mirror",
@@ -10573,16 +10778,16 @@ function PreJoinBody({
10573
10778
  if (element !== null) preview.preview?.attach(element);
10574
10779
  }
10575
10780
  }
10576
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 96 }) }),
10577
- mode === "video" && preview.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__preview-note", children: preview.error }) : null,
10578
- microphone && micStream !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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__ */ (0, import_jsx_runtime4.jsx)("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }) : null
10781
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__tile-placeholder", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 96 }) }),
10782
+ mode === "video" && preview.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__preview-note", children: preview.error }) : null,
10783
+ microphone && micStream !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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__ */ (0, import_jsx_runtime5.jsx)("span", { style: { width: `${Math.min(100, Math.round(level * 160))}%` } }) }) : null
10579
10784
  ] }),
10580
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__prejoin-panel", children: [
10581
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "mx-meet__prejoin-title", children: "Ready to join?" }),
10582
- notice?.kind === "removed" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__warning", children: notice.text }) : null,
10583
- devices?.labelsHidden === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__panel-note", children: [
10785
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__prejoin-panel", children: [
10786
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "mx-meet__prejoin-title", children: "Ready to join?" }),
10787
+ notice?.kind === "removed" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__warning", children: notice.text }) : null,
10788
+ devices?.labelsHidden === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__panel-note", children: [
10584
10789
  "Your browser is hiding device names until you allow camera and microphone access.",
10585
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10790
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10586
10791
  "button",
10587
10792
  {
10588
10793
  type: "button",
@@ -10594,11 +10799,11 @@ function PreJoinBody({
10594
10799
  }
10595
10800
  )
10596
10801
  ] }) : null,
10597
- devices?.fallbackNotice != null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
10598
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "audioinput", label: "Microphone" }),
10599
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__field-row", children: [
10600
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
10601
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10802
+ devices?.fallbackNotice != null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__warning", children: devices.fallbackNotice }) : null,
10803
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "audioinput", label: "Microphone" }),
10804
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__field-row", children: [
10805
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "audiooutput", label: "Speaker" }),
10806
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10602
10807
  import_design_system.Button,
10603
10808
  {
10604
10809
  type: "button",
@@ -10611,19 +10816,19 @@ function PreJoinBody({
10611
10816
  );
10612
10817
  },
10613
10818
  children: [
10614
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SpeakerIcon, {}),
10819
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SpeakerIcon, {}),
10615
10820
  " ",
10616
10821
  speakerTesting ? "Playing\u2026" : "Test"
10617
10822
  ]
10618
10823
  }
10619
10824
  )
10620
10825
  ] }),
10621
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DevicePicker, { kind: "videoinput", label: "Camera" }),
10622
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EffectsSettings, { preview: preview.preview }),
10623
- recording.consentNotice !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Alert, { variant: "info", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.AlertDescription, { children: recording.consentNotice }) }) : null,
10624
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__prejoin-actions", children: [
10625
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__check", children: [
10626
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10826
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DevicePicker, { kind: "videoinput", label: "Camera" }),
10827
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(EffectsSettings, { preview: preview.preview }),
10828
+ recording.consentNotice !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Alert, { variant: "info", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.AlertDescription, { children: recording.consentNotice }) }) : null,
10829
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__prejoin-actions", children: [
10830
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__check", children: [
10831
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10627
10832
  import_design_system.Checkbox,
10628
10833
  {
10629
10834
  id: "mx-meet-join-video",
@@ -10631,10 +10836,10 @@ function PreJoinBody({
10631
10836
  onCheckedChange: (checked) => setMode(checked === true ? "video" : "audio")
10632
10837
  }
10633
10838
  ),
10634
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
10839
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Label, { htmlFor: "mx-meet-join-video", children: "Join with video" })
10635
10840
  ] }),
10636
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__check", children: [
10637
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10841
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__check", children: [
10842
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10638
10843
  import_design_system.Checkbox,
10639
10844
  {
10640
10845
  id: "mx-meet-join-mic",
@@ -10642,9 +10847,9 @@ function PreJoinBody({
10642
10847
  onCheckedChange: (checked) => setMicrophone(checked === true)
10643
10848
  }
10644
10849
  ),
10645
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
10850
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Label, { htmlFor: "mx-meet-join-mic", children: "Join with microphone" })
10646
10851
  ] }),
10647
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10852
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10648
10853
  import_design_system.Button,
10649
10854
  {
10650
10855
  type: "button",
@@ -10665,20 +10870,20 @@ function PreJoinBody({
10665
10870
  }
10666
10871
  )
10667
10872
  ] }),
10668
- room.failure !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__error", children: [
10873
+ room.failure !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__error", children: [
10669
10874
  room.failure.message,
10670
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__remedy", children: room.failure.remedy })
10875
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__remedy", children: room.failure.remedy })
10671
10876
  ] }) : null
10672
10877
  ] })
10673
10878
  ] });
10674
10879
  }
10675
10880
  function useCameraPreview(deviceId2, effects) {
10676
- const [preview, setPreview] = (0, import_react6.useState)(null);
10677
- const [error, setError] = (0, import_react6.useState)(null);
10678
- const current = (0, import_react6.useRef)(null);
10679
- const initialEffect = (0, import_react6.useRef)(toVideoEffect(effects));
10881
+ const [preview, setPreview] = (0, import_react7.useState)(null);
10882
+ const [error, setError] = (0, import_react7.useState)(null);
10883
+ const current = (0, import_react7.useRef)(null);
10884
+ const initialEffect = (0, import_react7.useRef)(toVideoEffect(effects));
10680
10885
  initialEffect.current = toVideoEffect(effects);
10681
- (0, import_react6.useEffect)(() => {
10886
+ (0, import_react7.useEffect)(() => {
10682
10887
  if (deviceId2 === void 0) return void 0;
10683
10888
  let live = true;
10684
10889
  setError(null);
@@ -10725,9 +10930,9 @@ function DevicePicker({
10725
10930
  const triggerId = `mx-meet-device-${kind}`;
10726
10931
  const valueOf = (deviceId2) => deviceId2.length > 0 ? deviceId2 : "default";
10727
10932
  const current = devices?.selected[kind] ?? host.devices.resolve(kind) ?? "";
10728
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__field", children: [
10729
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.Label, { htmlFor: triggerId, children: label }),
10730
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
10933
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__field", children: [
10934
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.Label, { htmlFor: triggerId, children: label }),
10935
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10731
10936
  import_design_system.Select,
10732
10937
  {
10733
10938
  ...current.length > 0 ? { value: valueOf(current) } : {},
@@ -10737,8 +10942,8 @@ function DevicePicker({
10737
10942
  else host.devices.select(kind, deviceId2);
10738
10943
  },
10739
10944
  children: [
10740
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.SelectTrigger, { id: triggerId, "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.SelectValue, { placeholder: label }) }),
10741
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.SelectContent, { children: list.map((device) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_design_system.SelectItem, { value: valueOf(device.deviceId), children: device.label.length > 0 ? device.label : `${label} (name hidden)` }, device.deviceId || "default")) })
10945
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.SelectTrigger, { id: triggerId, "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.SelectValue, { placeholder: label }) }),
10946
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.SelectContent, { children: list.map((device) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_design_system.SelectItem, { value: valueOf(device.deviceId), children: device.label.length > 0 ? device.label : `${label} (name hidden)` }, device.deviceId || "default")) })
10742
10947
  ]
10743
10948
  }
10744
10949
  )
@@ -10747,9 +10952,9 @@ function DevicePicker({
10747
10952
  function MeetingRoom(props) {
10748
10953
  const host = useMeetHost();
10749
10954
  if (host === null) {
10750
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "This meeting" }) });
10955
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "This meeting" }) }) });
10751
10956
  }
10752
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MeetingRoomBody, { ...props, host });
10957
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetingRoomBody, { ...props, host }) });
10753
10958
  }
10754
10959
  function MeetingRoomBody({
10755
10960
  roomName,
@@ -10764,25 +10969,25 @@ function MeetingRoomBody({
10764
10969
  const isHost = useIsHost();
10765
10970
  const elapsed = useElapsed(snapshot?.meeting?.startedAt ?? null);
10766
10971
  const phase = snapshot?.phase ?? "idle";
10767
- (0, import_react6.useEffect)(() => {
10972
+ (0, import_react7.useEffect)(() => {
10768
10973
  host.meetings.watch(roomName);
10769
10974
  }, [host, roomName]);
10770
- (0, import_react6.useEffect)(() => {
10975
+ (0, import_react7.useEffect)(() => {
10771
10976
  if (given === void 0) return;
10772
10977
  if (host.store.snapshot().meeting !== null) return;
10773
10978
  host.store.patch({ meeting: given, locked: given.locked });
10774
10979
  }, [host, given]);
10775
10980
  const watchedId = meetingId ?? snapshot?.meeting?.id ?? null;
10776
- (0, import_react6.useEffect)(() => {
10981
+ (0, import_react7.useEffect)(() => {
10777
10982
  if (watchedId === null) return;
10778
10983
  host.meetings.watchMeeting(asMeetingId(watchedId));
10779
10984
  }, [host, watchedId]);
10780
10985
  const record = snapshot?.meeting ?? given ?? null;
10781
10986
  if (hasEnded(record) && phase !== "connected" && phase !== "reconnecting") {
10782
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MeetingRecordView, { meeting: record });
10987
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetingRecordView, { meeting: record });
10783
10988
  }
10784
10989
  if (phase === "idle" || phase === "failed" || phase === "left") {
10785
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
10990
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10786
10991
  PreJoin,
10787
10992
  {
10788
10993
  roomName,
@@ -10792,42 +10997,42 @@ function MeetingRoomBody({
10792
10997
  ) });
10793
10998
  }
10794
10999
  if (phase === "lobby") {
10795
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(WaitingRoom, { roomName, host }) });
10796
- }
10797
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet", children: [
10798
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ConsentNotice, {}),
10799
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AttendanceNotice, {}),
10800
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "mx-meet__header", children: [
10801
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
10802
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__meta", children: [
11000
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet mx-meet--lobby", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(WaitingRoom, { roomName, host }) });
11001
+ }
11002
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet", children: [
11003
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ConsentNotice, {}),
11004
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AttendanceNotice, {}),
11005
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "mx-meet__header", children: [
11006
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
11007
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__meta", children: [
10803
11008
  participantSummary(snapshot?.participants ?? []),
10804
11009
  elapsed > 0 ? ` \xB7 ${(0, import_format4.formatDurationMs)(elapsed)}` : ""
10805
11010
  ] }),
10806
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordingIndicator, {}),
10807
- snapshot?.locked === true ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__badge", children: [
10808
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LockIcon, { width: 12, height: 12 }),
11011
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordingIndicator, {}),
11012
+ snapshot?.locked === true ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__badge", children: [
11013
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(LockIcon, { width: 12, height: 12 }),
10809
11014
  " Locked"
10810
11015
  ] }) : null,
10811
- headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__header-controls", "data-meet-header-controls": "", children: headerControls }) : null,
10812
- isHost ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(HostMenu, {}) : null
11016
+ headerControls !== void 0 && headerControls !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__header-controls", "data-meet-header-controls": "", children: headerControls }) : null,
11017
+ isHost ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HostMenu, {}) : null
10813
11018
  ] }),
10814
- phase === "reconnecting" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__banner", role: "status", children: "Reconnecting\u2026" }) : null,
10815
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Stage, {}),
10816
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Captions, {}),
10817
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlBar, { ...onLeave !== void 0 ? { onLeave } : {} })
11019
+ phase === "reconnecting" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__banner", role: "status", children: "Reconnecting\u2026" }) : null,
11020
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Stage, {}),
11021
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Captions, {}),
11022
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlBar, { ...onLeave !== void 0 ? { onLeave } : {} })
10818
11023
  ] });
10819
11024
  }
10820
11025
  function WaitingRoom({ roomName, host }) {
10821
- const knocked = (0, import_react6.useRef)(false);
10822
- (0, import_react6.useEffect)(() => {
11026
+ const knocked = (0, import_react7.useRef)(false);
11027
+ (0, import_react7.useEffect)(() => {
10823
11028
  if (knocked.current) return;
10824
11029
  knocked.current = true;
10825
11030
  host.meetings.knock(roomName);
10826
11031
  }, [host, roomName]);
10827
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__waiting", children: [
10828
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 72 }),
10829
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "mx-meet__prejoin-title", children: "Waiting for the host to let you in" }),
10830
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__empty-body", children: [
11032
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__waiting", children: [
11033
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: host.identity.displayName, url: host.identity.avatarUrl, size: 72 }),
11034
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "mx-meet__prejoin-title", children: "Waiting for the host to let you in" }),
11035
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__empty-body", children: [
10831
11036
  "You are in the waiting room as ",
10832
11037
  host.identity.displayName,
10833
11038
  ". You will join automatically once you are admitted."
@@ -10838,10 +11043,10 @@ function HostMenu() {
10838
11043
  const host = useRequiredMeetHost();
10839
11044
  const snapshot = useMeetSnapshot();
10840
11045
  const end = useEndMeeting();
10841
- const [confirmingEnd, setConfirmingEnd] = (0, import_react6.useState)(false);
11046
+ const [confirmingEnd, setConfirmingEnd] = (0, import_react7.useState)(false);
10842
11047
  const locked = snapshot?.locked === true;
10843
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__host-menu", children: [
10844
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11048
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__host-menu", children: [
11049
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10845
11050
  "button",
10846
11051
  {
10847
11052
  type: "button",
@@ -10852,9 +11057,9 @@ function HostMenu() {
10852
11057
  children: locked ? "Unlock meeting" : "Lock meeting"
10853
11058
  }
10854
11059
  ),
10855
- end.canEnd ? confirmingEnd ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__confirm", role: "group", "aria-label": "End this meeting?", children: [
10856
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("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." }),
10857
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11060
+ end.canEnd ? confirmingEnd ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__confirm", role: "group", "aria-label": "End this meeting?", children: [
11061
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("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." }),
11062
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10858
11063
  "button",
10859
11064
  {
10860
11065
  type: "button",
@@ -10866,7 +11071,7 @@ function HostMenu() {
10866
11071
  children: "End it"
10867
11072
  }
10868
11073
  ),
10869
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11074
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10870
11075
  "button",
10871
11076
  {
10872
11077
  type: "button",
@@ -10875,7 +11080,7 @@ function HostMenu() {
10875
11080
  children: "Keep it running"
10876
11081
  }
10877
11082
  )
10878
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11083
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10879
11084
  "button",
10880
11085
  {
10881
11086
  type: "button",
@@ -10884,7 +11089,7 @@ function HostMenu() {
10884
11089
  children: end.ending ? "Ending\u2026" : "End meeting for everyone"
10885
11090
  }
10886
11091
  ) : null,
10887
- end.notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
11092
+ end.notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
10888
11093
  ] });
10889
11094
  }
10890
11095
  function CallButton({
@@ -10894,7 +11099,7 @@ function CallButton({
10894
11099
  }) {
10895
11100
  const calls = useCalls();
10896
11101
  if (!calls.canCall) return null;
10897
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11102
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10898
11103
  "button",
10899
11104
  {
10900
11105
  type: "button",
@@ -10903,55 +11108,55 @@ function CallButton({
10903
11108
  void calls.call([person.userId], mode);
10904
11109
  },
10905
11110
  "aria-label": `Call ${person.displayName}`,
10906
- children: children ?? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PhoneIcon, { width: 18, height: 18 })
11111
+ children: children ?? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PhoneIcon, { width: 18, height: 18 })
10907
11112
  }
10908
11113
  );
10909
11114
  }
10910
11115
  function IncomingCallHost() {
10911
11116
  const calls = useCalls();
10912
11117
  if (calls.incoming.length === 0) return null;
10913
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(IncomingCallCard, { invite }, invite.id)) });
11118
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(IncomingCallCard, { invite }, invite.id)) });
10914
11119
  }
10915
11120
  function IncomingCallCard({ invite }) {
10916
11121
  const calls = useCalls();
10917
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
10918
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
10919
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__ringing-text", children: [
10920
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: invite.callerName }),
10921
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
11122
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
11123
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
11124
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__ringing-text", children: [
11125
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: invite.callerName }),
11126
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
10922
11127
  ] }),
10923
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__ringing-actions", children: [
10924
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PhoneOffIcon, {}) }),
10925
- invite.mode === "video" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11128
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__ringing-actions", children: [
11129
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PhoneOffIcon, {}) }),
11130
+ invite.mode === "video" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10926
11131
  ControlButton,
10927
11132
  {
10928
11133
  label: "Accept without video",
10929
11134
  onClick: () => void calls.accept({ ...invite, mode: "audio" }),
10930
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(CameraOffIcon, {})
11135
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CameraOffIcon, {})
10931
11136
  }
10932
11137
  ) : null,
10933
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PhoneIcon, {}) })
11138
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PhoneIcon, {}) })
10934
11139
  ] })
10935
11140
  ] });
10936
11141
  }
10937
11142
  function ScheduleMeeting(props) {
10938
11143
  const host = useMeetHost();
10939
- if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "Scheduling a meeting" });
10940
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(ScheduleMeetingBody, { ...props, host });
11144
+ if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "Scheduling a meeting" });
11145
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScheduleMeetingBody, { ...props, host });
10941
11146
  }
10942
11147
  function ScheduleMeetingBody({
10943
11148
  appBaseUrl,
10944
11149
  onScheduled,
10945
11150
  host
10946
11151
  }) {
10947
- const [title, setTitle] = (0, import_react6.useState)("");
10948
- const [when2, setWhen] = (0, import_react6.useState)("");
10949
- const [kind, setKind] = (0, import_react6.useState)("scheduled");
10950
- const [busy, setBusy] = (0, import_react6.useState)(false);
10951
- const [link, setLink] = (0, import_react6.useState)(null);
10952
- const [error, setError] = (0, import_react6.useState)(null);
10953
- const disabled = (0, import_react6.useMemo)(() => title.trim().length === 0 || busy, [title, busy]);
10954
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
11152
+ const [title, setTitle] = (0, import_react7.useState)("");
11153
+ const [when2, setWhen] = (0, import_react7.useState)("");
11154
+ const [kind, setKind] = (0, import_react7.useState)("scheduled");
11155
+ const [busy, setBusy] = (0, import_react7.useState)(false);
11156
+ const [link, setLink] = (0, import_react7.useState)(null);
11157
+ const [error, setError] = (0, import_react7.useState)(null);
11158
+ const disabled = (0, import_react7.useMemo)(() => title.trim().length === 0 || busy, [title, busy]);
11159
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
10955
11160
  "form",
10956
11161
  {
10957
11162
  className: "mx-meet__schedule",
@@ -10976,9 +11181,9 @@ function ScheduleMeetingBody({
10976
11181
  }).finally(() => setBusy(false));
10977
11182
  },
10978
11183
  children: [
10979
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
10980
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Title" }),
10981
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11184
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__field", children: [
11185
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__field-label", children: "Title" }),
11186
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10982
11187
  "input",
10983
11188
  {
10984
11189
  className: "mx-meet__input",
@@ -10988,9 +11193,9 @@ function ScheduleMeetingBody({
10988
11193
  }
10989
11194
  )
10990
11195
  ] }),
10991
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
10992
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "When" }),
10993
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11196
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__field", children: [
11197
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__field-label", children: "When" }),
11198
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
10994
11199
  "input",
10995
11200
  {
10996
11201
  className: "mx-meet__input",
@@ -11000,27 +11205,27 @@ function ScheduleMeetingBody({
11000
11205
  }
11001
11206
  )
11002
11207
  ] }),
11003
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
11004
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "Repeats" }),
11005
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
11208
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__field", children: [
11209
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__field-label", children: "Repeats" }),
11210
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
11006
11211
  "select",
11007
11212
  {
11008
11213
  className: "mx-meet__select",
11009
11214
  value: kind,
11010
11215
  onChange: (event) => setKind(event.target.value),
11011
11216
  children: [
11012
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "scheduled", children: "Once" }),
11013
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: "recurring", children: "Recurring \u2014 one link, every time" })
11217
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "scheduled", children: "Once" }),
11218
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: "recurring", children: "Recurring \u2014 one link, every time" })
11014
11219
  ]
11015
11220
  }
11016
11221
  )
11017
11222
  ] }),
11018
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "submit", className: "mx-meet__primary", disabled, children: busy ? "Creating\u2026" : "Create meeting" }),
11019
- link !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__link-out", children: [
11020
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { children: "Anyone with this link can join \u2014 no account needed." }),
11021
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("code", { children: link })
11223
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "submit", className: "mx-meet__primary", disabled, children: busy ? "Creating\u2026" : "Create meeting" }),
11224
+ link !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__link-out", children: [
11225
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { children: "Anyone with this link can join \u2014 no account needed." }),
11226
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("code", { children: link })
11022
11227
  ] }) : null,
11023
- error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__error", children: error }) : null
11228
+ error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__error", children: error }) : null
11024
11229
  ]
11025
11230
  }
11026
11231
  );
@@ -11029,7 +11234,7 @@ function ReactionOverlay({
11029
11234
  reactions
11030
11235
  }) {
11031
11236
  if (reactions.length === 0) return null;
11032
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
11237
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
11033
11238
  }
11034
11239
  function GuestRecordAccessControl({
11035
11240
  meeting
@@ -11041,11 +11246,11 @@ function GuestRecordAccessControl({
11041
11246
  const isHost = inRoomHost || viewerId !== null && meeting.hostUserId === viewerId;
11042
11247
  if (host === null || !isHost) return null;
11043
11248
  const resolved = access.setting === "default" && access.effective !== null ? ` Right now that means: ${guestRecordAccessLabel(access.effective.level).toLowerCase()}.` : "";
11044
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "What guests may read", children: [
11045
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
11046
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("label", { className: "mx-meet__field", children: [
11047
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
11048
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11249
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "What guests may read", children: [
11250
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "What guests may read" }),
11251
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("label", { className: "mx-meet__field", children: [
11252
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__field-label", children: "People who attended by link, without an account" }),
11253
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11049
11254
  "select",
11050
11255
  {
11051
11256
  className: "mx-meet__select",
@@ -11056,18 +11261,18 @@ function GuestRecordAccessControl({
11056
11261
  event.target.value
11057
11262
  );
11058
11263
  },
11059
- children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
11264
+ children: GUEST_RECORD_ACCESS_CHOICES.map((choice) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("option", { value: choice, children: guestRecordAccessLabel(choice) }, choice))
11060
11265
  }
11061
11266
  )
11062
11267
  ] }),
11063
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__panel-note", children: [
11268
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__panel-note", children: [
11064
11269
  guestRecordAccessExplanation(access.setting),
11065
11270
  resolved
11066
11271
  ] }),
11067
- access.saving ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
11068
- access.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: access.error, operation: "Change who can join", origin: "meet/components", children: [
11069
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: access.error.message }),
11070
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: access.error.remedy })
11272
+ access.saving ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", role: "status", children: "Saving what guests may read\u2026" }) : null,
11273
+ access.error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: access.error, operation: "Change who can join", origin: "meet/components", children: [
11274
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: access.error.message }),
11275
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: access.error.remedy })
11071
11276
  ] }) : null
11072
11277
  ] });
11073
11278
  }
@@ -11077,9 +11282,9 @@ function MeetingRecordView({
11077
11282
  }) {
11078
11283
  const host = useMeetHost();
11079
11284
  if (host === null) {
11080
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "This meeting record" }) });
11285
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "This meeting record" }) });
11081
11286
  }
11082
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(MeetingRecordBody, { meeting, ...onRejoin !== void 0 ? { onRejoin } : {} });
11287
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MeetingRecordBody, { meeting, ...onRejoin !== void 0 ? { onRejoin } : {} });
11083
11288
  }
11084
11289
  function MeetingRecordBody({
11085
11290
  meeting,
@@ -11087,19 +11292,19 @@ function MeetingRecordBody({
11087
11292
  }) {
11088
11293
  const host = useRequiredMeetHost();
11089
11294
  const record = useMeetingRecord(meeting);
11090
- const [question, setQuestion] = (0, import_react6.useState)("");
11091
- const [tab, setTab] = (0, import_react6.useState)("summary");
11295
+ const [question, setQuestion] = (0, import_react7.useState)("");
11296
+ const [tab, setTab] = (0, import_react7.useState)("summary");
11092
11297
  if (record.failure !== null) {
11093
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__empty", error: record.failure, operation: "Open this meeting record", origin: "meet/components", children: [
11094
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "This meeting record could not be opened" }),
11095
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: record.failure.message }),
11096
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: record.failure.remedy })
11298
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__empty", error: record.failure, operation: "Open this meeting record", origin: "meet/components", children: [
11299
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "This meeting record could not be opened" }),
11300
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: record.failure.message }),
11301
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: record.failure.remedy })
11097
11302
  ] }) });
11098
11303
  }
11099
11304
  if (record.loading || record.record === null) {
11100
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
11101
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "Opening the meeting record\u2026" }),
11102
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: "Reading the summary, the notes and the transcript this meeting left behind." })
11305
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
11306
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "Opening the meeting record\u2026" }),
11307
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: "Reading the summary, the notes and the transcript this meeting left behind." })
11103
11308
  ] }) });
11104
11309
  }
11105
11310
  const bundle = record.record;
@@ -11118,44 +11323,44 @@ function MeetingRecordBody({
11118
11323
  );
11119
11324
  const entirelyRestricted = everyRecordPartRefused && bundle.attendees.length === 0 && bundle.liveNotes.length === 0 && bundle.transcript.length === 0 && bundle.recording === null && bundle.summary === null && bundle.decisions.length === 0 && bundle.actionItems.length === 0;
11120
11325
  if (entirelyRestricted) {
11121
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet mx-meet--record", children: [
11122
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-head-inner", children: [
11123
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
11124
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "mx-meet__record-title", children: meeting.title }),
11125
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
11126
- onRejoin !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
11326
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet mx-meet--record", children: [
11327
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-head-inner", children: [
11328
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
11329
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "mx-meet__record-title", children: meeting.title }),
11330
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
11331
+ onRejoin !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
11127
11332
  ] }) }),
11128
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__record-body", children: restrictionNotices.map((notice2) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-access", role: "status", children: [
11129
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-title", children: "About this record" }),
11130
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-message", children: notice2.message }),
11131
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
11333
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__record-body", children: restrictionNotices.map((notice2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-access", role: "status", children: [
11334
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-title", children: "About this record" }),
11335
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-message", children: notice2.message }),
11336
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
11132
11337
  ] }, notice2.parts.join("-"))) })
11133
11338
  ] });
11134
11339
  }
11135
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet mx-meet--record", children: [
11136
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-head-inner", children: [
11137
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
11138
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "mx-meet__record-title", children: meeting.title }),
11139
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
11140
- onRejoin !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
11340
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet mx-meet--record", children: [
11341
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-head-inner", children: [
11342
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
11343
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "mx-meet__record-title", children: meeting.title }),
11344
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
11345
+ onRejoin !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
11141
11346
  ] }) }),
11142
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-body", children: [
11143
- restrictionNotices.map((notice2) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-access", role: "status", children: [
11144
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-title", children: "About this record" }),
11145
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-message", children: notice2.message }),
11146
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
11347
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-body", children: [
11348
+ restrictionNotices.map((notice2) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-access", role: "status", children: [
11349
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-title", children: "About this record" }),
11350
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-message", children: notice2.message }),
11351
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
11147
11352
  ] }, notice2.parts.join("-"))),
11148
11353
  attended.length === 0 ? (
11149
11354
  /* NOT SILENCE. A refused attendance read used to remove the whole
11150
11355
  section, so the reader could not tell "nobody" from "not shown". */
11151
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
11152
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
11153
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(bundle, "attendance", "Nobody is recorded as having attended.") })
11356
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
11357
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
11358
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(bundle, "attendance", "Nobody is recorded as having attended.") })
11154
11359
  ] })
11155
- ) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
11156
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
11157
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__record-attendees", children: attended.map((person) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__record-attendee", children: [
11158
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11360
+ ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
11361
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
11362
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet__record-attendees", children: attended.map((person) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__record-attendee", children: [
11363
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11159
11364
  Avatar,
11160
11365
  {
11161
11366
  name: displayNameFor(bundle.names, person.identity, person.displayName),
@@ -11163,26 +11368,26 @@ function MeetingRecordBody({
11163
11368
  size: 28
11164
11369
  }
11165
11370
  ),
11166
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__person-name", children: [
11371
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__person-name", children: [
11167
11372
  displayNameFor(bundle.names, person.identity, person.displayName),
11168
- person.role === "host" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Host" }) : null,
11169
- person.role === "guest" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Guest" }) : null,
11170
- person.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null
11373
+ person.role === "host" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Host" }) : null,
11374
+ person.role === "guest" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Guest" }) : null,
11375
+ person.isAgent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null
11171
11376
  ] })
11172
11377
  ] }, person.id)) })
11173
11378
  ] }),
11174
- bundle.recording !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section mx-meet__recording-card", "aria-label": "Recording", children: [
11175
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
11176
- fileId !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
11177
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordingPlayer, { fileId }),
11178
- notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: notice }) : null
11179
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: notice ?? "This recording has no file." })
11180
- ] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Recording", children: [
11181
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
11182
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: REFUSED_ABSENCE })
11379
+ bundle.recording !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section mx-meet__recording-card", "aria-label": "Recording", children: [
11380
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
11381
+ fileId !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
11382
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordingPlayer, { fileId }),
11383
+ notice !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: notice }) : null
11384
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: notice ?? "This recording has no file." })
11385
+ ] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Recording", children: [
11386
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
11387
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: REFUSED_ABSENCE })
11183
11388
  ] }) : null,
11184
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("nav", { className: "mx-meet__record-tabs", "aria-label": "Meeting record sections", children: [
11185
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11389
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("nav", { className: "mx-meet__record-tabs", "aria-label": "Meeting record sections", children: [
11390
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11186
11391
  "button",
11187
11392
  {
11188
11393
  type: "button",
@@ -11192,7 +11397,7 @@ function MeetingRecordBody({
11192
11397
  children: "Summary & decisions"
11193
11398
  }
11194
11399
  ),
11195
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11400
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11196
11401
  "button",
11197
11402
  {
11198
11403
  type: "button",
@@ -11202,7 +11407,7 @@ function MeetingRecordBody({
11202
11407
  children: "Notes as it happened"
11203
11408
  }
11204
11409
  ),
11205
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11410
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11206
11411
  "button",
11207
11412
  {
11208
11413
  type: "button",
@@ -11213,15 +11418,15 @@ function MeetingRecordBody({
11213
11418
  }
11214
11419
  )
11215
11420
  ] }),
11216
- tab === "summary" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
11217
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Summary", children: [
11218
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Summary" }),
11219
- wrapUp.state === "written" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-summary", children: bundle.summary?.text }) : wrapUp.state === "in-progress" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__panel-note", role: "status", children: [
11220
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: wrapUp.message }),
11221
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { type: "button", className: "mx-meet__link", onClick: record.reload, children: "Check again" })
11222
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", role: wrapUp.state === "failed" ? "alert" : void 0, children: wrapUp.message })
11421
+ tab === "summary" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
11422
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Summary", children: [
11423
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Summary" }),
11424
+ wrapUp.state === "written" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-summary", children: bundle.summary?.text }) : wrapUp.state === "in-progress" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__panel-note", role: "status", children: [
11425
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { children: wrapUp.message }),
11426
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("button", { type: "button", className: "mx-meet__link", onClick: record.reload, children: "Check again" })
11427
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", role: wrapUp.state === "failed" ? "alert" : void 0, children: wrapUp.message })
11223
11428
  ] }),
11224
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11429
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11225
11430
  NoteList,
11226
11431
  {
11227
11432
  title: "Decisions",
@@ -11233,7 +11438,7 @@ function MeetingRecordBody({
11233
11438
  )
11234
11439
  }
11235
11440
  ),
11236
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11441
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11237
11442
  NoteList,
11238
11443
  {
11239
11444
  title: "Action items",
@@ -11246,42 +11451,42 @@ function MeetingRecordBody({
11246
11451
  }
11247
11452
  )
11248
11453
  ] }) : null,
11249
- tab === "notes" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Notes as it happened", children: [
11250
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Notes as it happened" }),
11251
- bundle.liveNotes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(
11454
+ tab === "notes" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Notes as it happened", children: [
11455
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Notes as it happened" }),
11456
+ bundle.liveNotes.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(
11252
11457
  bundle,
11253
11458
  "notes",
11254
11459
  "No live notes are available for this meeting."
11255
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet__notes", children: bundle.liveNotes.map((note) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__note", children: [
11256
- note.window !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet__badge", children: [
11460
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet__notes", children: bundle.liveNotes.map((note) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__note", children: [
11461
+ note.window !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet__badge", children: [
11257
11462
  "Window ",
11258
11463
  note.window
11259
11464
  ] }) : null,
11260
11465
  note.text
11261
11466
  ] }, note.id)) })
11262
11467
  ] }) : null,
11263
- tab === "transcript" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Transcript", children: [
11264
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("h2", { className: "mx-meet__record-section-title", children: [
11468
+ tab === "transcript" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Transcript", children: [
11469
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("h2", { className: "mx-meet__record-section-title", children: [
11265
11470
  "Transcript",
11266
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__record-count", children: bundle.transcript.length === 1 ? "1 line" : `${bundle.transcript.length} lines` })
11471
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__record-count", children: bundle.transcript.length === 1 ? "1 line" : `${bundle.transcript.length} lines` })
11267
11472
  ] }),
11268
- blocks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(
11473
+ blocks.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: absenceSentence(
11269
11474
  bundle,
11270
11475
  "transcript",
11271
11476
  "No transcript is available for this meeting."
11272
- ) }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ol", { className: "mx-meet__record-transcript", children: blocks.map((block) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet__record-block", children: [
11273
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__record-speaker", children: [
11477
+ ) }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ol", { className: "mx-meet__record-transcript", children: blocks.map((block) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet__record-block", children: [
11478
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__record-speaker", children: [
11274
11479
  block.speaker,
11275
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("time", { className: "mx-meet__record-time", dateTime: block.startedAt, children: clockOf(block.startedAt) })
11480
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("time", { className: "mx-meet__record-time", dateTime: block.startedAt, children: clockOf(block.startedAt) })
11276
11481
  ] }),
11277
- block.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__record-line", children: line.text }, line.id))
11482
+ block.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__record-line", children: line.text }, line.id))
11278
11483
  ] }, block.id)) })
11279
11484
  ] }) : null,
11280
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(GuestRecordAccessControl, { meeting }),
11281
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Ask about this meeting", children: [
11282
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "mx-meet__record-section-title", children: "Ask about this meeting" }),
11283
- guestFinishedMeeting ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: "Sign in to ask the assistant about a meeting after it ends." }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
11284
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
11485
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(GuestRecordAccessControl, { meeting }),
11486
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "mx-meet__record-section", "aria-label": "Ask about this meeting", children: [
11487
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "mx-meet__record-section-title", children: "Ask about this meeting" }),
11488
+ guestFinishedMeeting ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: "Sign in to ask the assistant about a meeting after it ends." }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
11489
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
11285
11490
  "form",
11286
11491
  {
11287
11492
  className: "mx-meet__composer",
@@ -11292,7 +11497,7 @@ function MeetingRecordBody({
11292
11497
  void record.ask(trimmed);
11293
11498
  },
11294
11499
  children: [
11295
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11500
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11296
11501
  "input",
11297
11502
  {
11298
11503
  className: "mx-meet__input",
@@ -11302,7 +11507,7 @@ function MeetingRecordBody({
11302
11507
  "aria-label": "Ask about this meeting"
11303
11508
  }
11304
11509
  ),
11305
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11510
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11306
11511
  "button",
11307
11512
  {
11308
11513
  type: "submit",
@@ -11314,8 +11519,8 @@ function MeetingRecordBody({
11314
11519
  ]
11315
11520
  }
11316
11521
  ),
11317
- record.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__answer", children: record.answer }) : null,
11318
- record.coverage !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "mx-meet__coverage", children: [
11522
+ record.answer !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__answer", children: record.answer }) : null,
11523
+ record.coverage !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__coverage", children: [
11319
11524
  "Answered from ",
11320
11525
  record.coverage.segmentsUsed,
11321
11526
  " of ",
@@ -11326,9 +11531,9 @@ function MeetingRecordBody({
11326
11531
  record.coverage.truncated ? " (the oldest were left out)" : "",
11327
11532
  "."
11328
11533
  ] }) : null,
11329
- record.askError !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: record.askError, operation: "Ask about this meeting", origin: "meet/components", children: [
11330
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: record.askError.message }),
11331
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: record.askError.remedy })
11534
+ record.askError !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error: record.askError, operation: "Ask about this meeting", origin: "meet/components", children: [
11535
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: record.askError.message }),
11536
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: record.askError.remedy })
11332
11537
  ] }) : null
11333
11538
  ] })
11334
11539
  ] })
@@ -11339,21 +11544,21 @@ var STREAM_REFUSED = "Streaming playback did not start, so this recording was do
11339
11544
  var PLAYBACK_RETRY_REMEDY = "Reload the page and try again. If it still will not play, ask a meeting host to check the recording.";
11340
11545
  function RecordingPlayer(props) {
11341
11546
  const host = useMeetHost();
11342
- if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "This recording" });
11343
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(RecordingPlayerBody, { ...props, host });
11547
+ if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "This recording" });
11548
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(RecordingPlayerBody, { ...props, host });
11344
11549
  }
11345
11550
  function RecordingPlayerBody({ fileId, host }) {
11346
- const [media, setMedia] = (0, import_react6.useState)(null);
11347
- const [loading, setLoading] = (0, import_react6.useState)(false);
11348
- const [error, setError] = (0, import_react6.useState)(null);
11349
- (0, import_react6.useEffect)(() => {
11551
+ const [media, setMedia] = (0, import_react7.useState)(null);
11552
+ const [loading, setLoading] = (0, import_react7.useState)(false);
11553
+ const [error, setError] = (0, import_react7.useState)(null);
11554
+ (0, import_react7.useEffect)(() => {
11350
11555
  if (media === null || media.kind !== "bytes") return void 0;
11351
11556
  const url = media.url;
11352
11557
  return () => URL.revokeObjectURL(url);
11353
11558
  }, [media]);
11354
11559
  if (media !== null) {
11355
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-section", children: [
11356
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11560
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-section", children: [
11561
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11357
11562
  "video",
11358
11563
  {
11359
11564
  className: "mx-meet__record-player",
@@ -11395,15 +11600,15 @@ function RecordingPlayerBody({ fileId, host }) {
11395
11600
  }
11396
11601
  }
11397
11602
  ),
11398
- media.fallbackReason !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__panel-note", children: media.fallbackReason }) : null
11603
+ media.fallbackReason !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__panel-note", children: media.fallbackReason }) : null
11399
11604
  ] });
11400
11605
  }
11401
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__record-section", children: [
11402
- error !== null ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error, operation: "Complete this meeting action", origin: "meet/components", children: [
11403
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-reason", children: error.message }),
11404
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__refusal-remedy", children: error.remedy })
11606
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__record-section", children: [
11607
+ error !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__refusal", error, operation: "Complete this meeting action", origin: "meet/components", children: [
11608
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-reason", children: error.message }),
11609
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__refusal-remedy", children: error.remedy })
11405
11610
  ] }) : null,
11406
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
11611
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
11407
11612
  "button",
11408
11613
  {
11409
11614
  type: "button",
@@ -11439,35 +11644,35 @@ function clockOf(iso) {
11439
11644
  function MeetingList({ baseUrl }) {
11440
11645
  const host = useMeetHost();
11441
11646
  const list = useMeetings();
11442
- if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(InertNotice, { what: "Your meetings" });
11647
+ if (host === null) return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(InertNotice, { what: "Your meetings" });
11443
11648
  if (list.failure !== null) {
11444
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__empty", error: list.failure, operation: "List your meetings", origin: "meet/components", children: [
11445
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "Your meetings could not be listed" }),
11446
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: list.failure.message }),
11447
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: list.failure.remedy })
11649
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_design_system.ErrorBox, { as: "div", className: "mx-meet__empty", error: list.failure, operation: "List your meetings", origin: "meet/components", children: [
11650
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "Your meetings could not be listed" }),
11651
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: list.failure.message }),
11652
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: list.failure.remedy })
11448
11653
  ] });
11449
11654
  }
11450
11655
  if (list.loading) {
11451
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "mx-meet__empty", role: "status", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "Loading your meetings\u2026" }) });
11656
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "mx-meet__empty", role: "status", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "Loading your meetings\u2026" }) });
11452
11657
  }
11453
11658
  if (list.meetings.length === 0) {
11454
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
11455
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-title", children: "No meetings yet" }),
11456
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "mx-meet__empty-body", children: "Create one above. Its link works before, during and after the meeting \u2014 afterwards it opens the record." })
11659
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet__empty", role: "status", children: [
11660
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-title", children: "No meetings yet" }),
11661
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "mx-meet__empty-body", children: "Create one above. Its link works before, during and after the meeting \u2014 afterwards it opens the record." })
11457
11662
  ] });
11458
11663
  }
11459
11664
  const origin = baseUrl ?? (typeof window === "undefined" ? "" : window.location.origin);
11460
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "mx-meet-list", children: list.meetings.map((meeting) => {
11665
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("ul", { className: "mx-meet-list", children: list.meetings.map((meeting) => {
11461
11666
  const ended = meeting.endedAt !== null;
11462
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("li", { className: "mx-meet-list__row", children: [
11463
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "mx-meet-list__main", children: [
11464
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "mx-meet-list__title", children: [
11667
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("li", { className: "mx-meet-list__row", children: [
11668
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "mx-meet-list__main", children: [
11669
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "mx-meet-list__title", children: [
11465
11670
  meeting.title,
11466
- ended ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet__badge", children: "Ended" }) : null
11671
+ ended ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Ended" }) : null
11467
11672
  ] }),
11468
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "mx-meet-list__when", children: meetingWhen(meeting) })
11673
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet-list__when", children: meetingWhen(meeting) })
11469
11674
  ] }),
11470
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("a", { className: "mx-meet-list__action", href: meetingLink(origin, meeting.slug), children: ended ? "Open the record" : "Join" })
11675
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", { className: "mx-meet-list__action", href: meetingLink(origin, meeting.slug), children: ended ? "Open the record" : "Join" })
11471
11676
  ] }, meeting.id);
11472
11677
  }) });
11473
11678
  }