@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/CHANGELOG.md +20 -0
- package/dist/index.cjs +140 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +61 -1
- package/dist/index.d.ts +61 -1
- package/dist/index.js +140 -0
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +1229 -1024
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +34 -3
- package/dist/react.d.ts +34 -3
- package/dist/react.js +851 -646
- package/dist/react.js.map +1 -1
- package/package.json +15 -2
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/
|
|
5868
|
+
// src/react/root.tsx
|
|
5858
5869
|
var import_react3 = require("react");
|
|
5859
|
-
|
|
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,
|
|
6730
|
+
join: (0, import_react4.useCallback)(
|
|
6545
6731
|
async (request) => requireEngine(engine, "join").join(request),
|
|
6546
6732
|
[engine]
|
|
6547
6733
|
),
|
|
6548
|
-
leave: (0,
|
|
6549
|
-
toggleMicrophone: (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6755
|
+
react: (0, import_react4.useCallback)(
|
|
6570
6756
|
async (emoji) => requireEngine(engine, "react").react(emoji),
|
|
6571
6757
|
[engine]
|
|
6572
6758
|
),
|
|
6573
|
-
sendChat: (0,
|
|
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,
|
|
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,
|
|
6770
|
+
pin: (0, import_react4.useCallback)(
|
|
6585
6771
|
(identity) => requireEngine(engine, "pin").pin(identity),
|
|
6586
6772
|
[engine]
|
|
6587
6773
|
),
|
|
6588
|
-
setLayout: (0,
|
|
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,
|
|
6597
|
-
const stage = (0,
|
|
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,
|
|
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,
|
|
6617
|
-
return (0,
|
|
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,
|
|
6631
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6876
|
+
admit: (0, import_react4.useCallback)(
|
|
6691
6877
|
async (entry) => requireSession(session, "admit").admit(entry, true),
|
|
6692
6878
|
[session]
|
|
6693
6879
|
),
|
|
6694
|
-
deny: (0,
|
|
6880
|
+
deny: (0, import_react4.useCallback)(
|
|
6695
6881
|
async (entry) => requireSession(session, "deny").admit(entry, false),
|
|
6696
6882
|
[session]
|
|
6697
6883
|
),
|
|
6698
|
-
admitAll: (0,
|
|
6884
|
+
admitAll: (0, import_react4.useCallback)(
|
|
6699
6885
|
async () => requireSession(session, "admitAll").admitAll(),
|
|
6700
6886
|
[session]
|
|
6701
6887
|
),
|
|
6702
|
-
knock: (0,
|
|
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,
|
|
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,
|
|
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,
|
|
6743
|
-
const [answer, setAnswer] = (0,
|
|
6744
|
-
const [coverage, setCoverage] = (0,
|
|
6745
|
-
const [phase, setPhase] = (0,
|
|
6746
|
-
const [error, setError] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6861
|
-
const [notice, setNotice] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
6915
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
6974
|
-
canModerate: (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7023
|
-
(0,
|
|
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,
|
|
7248
|
+
const ref = (0, import_react4.useRef)(handlers);
|
|
7063
7249
|
ref.current = handlers;
|
|
7064
|
-
(0,
|
|
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,
|
|
7112
|
-
const [answer, setAnswer] = (0,
|
|
7113
|
-
const [coverage, setCoverage] = (0,
|
|
7114
|
-
const [askError, setAskError] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
7346
|
+
(0, import_react4.useEffect)(() => {
|
|
7161
7347
|
if (key !== null && meeting !== null) cache.setMeeting(key, meeting);
|
|
7162
7348
|
}, [cache, key, meeting]);
|
|
7163
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
7260
|
-
const [hasMore, setHasMore] = (0,
|
|
7261
|
-
const [loading, setLoading] = (0,
|
|
7262
|
-
const [failure, setFailure] = (0,
|
|
7263
|
-
const [nonce, setNonce] = (0,
|
|
7264
|
-
(0,
|
|
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,
|
|
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,
|
|
7299
|
-
const [effective, setEffective] = (0,
|
|
7300
|
-
const [saving, setSaving] = (0,
|
|
7301
|
-
const [error, setError] = (0,
|
|
7302
|
-
(0,
|
|
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,
|
|
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
|
|
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
|
|
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
|
|
7969
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
7784
7970
|
function Icon({ children, ...props }) {
|
|
7785
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
7805
|
-
/* @__PURE__ */ (0,
|
|
7806
|
-
/* @__PURE__ */ (0,
|
|
7807
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7812
|
-
/* @__PURE__ */ (0,
|
|
7813
|
-
/* @__PURE__ */ (0,
|
|
7814
|
-
/* @__PURE__ */ (0,
|
|
7815
|
-
/* @__PURE__ */ (0,
|
|
7816
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7821
|
-
/* @__PURE__ */ (0,
|
|
7822
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7827
|
-
/* @__PURE__ */ (0,
|
|
7828
|
-
/* @__PURE__ */ (0,
|
|
7829
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7834
|
-
/* @__PURE__ */ (0,
|
|
7835
|
-
/* @__PURE__ */ (0,
|
|
7836
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
7847
|
-
/* @__PURE__ */ (0,
|
|
7848
|
-
/* @__PURE__ */ (0,
|
|
7849
|
-
/* @__PURE__ */ (0,
|
|
7850
|
-
/* @__PURE__ */ (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,
|
|
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,
|
|
7858
|
-
/* @__PURE__ */ (0,
|
|
7859
|
-
/* @__PURE__ */ (0,
|
|
7860
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7868
|
-
/* @__PURE__ */ (0,
|
|
7869
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7874
|
-
/* @__PURE__ */ (0,
|
|
7875
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7880
|
-
/* @__PURE__ */ (0,
|
|
7881
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7886
|
-
/* @__PURE__ */ (0,
|
|
7887
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
7898
|
-
/* @__PURE__ */ (0,
|
|
7899
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7904
|
-
/* @__PURE__ */ (0,
|
|
7905
|
-
/* @__PURE__ */ (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,
|
|
7910
|
-
/* @__PURE__ */ (0,
|
|
7911
|
-
/* @__PURE__ */ (0,
|
|
7912
|
-
/* @__PURE__ */ (0,
|
|
7913
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7918
|
-
/* @__PURE__ */ (0,
|
|
7919
|
-
/* @__PURE__ */ (0,
|
|
7920
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7925
|
-
/* @__PURE__ */ (0,
|
|
7926
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7931
|
-
/* @__PURE__ */ (0,
|
|
7932
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7940
|
-
/* @__PURE__ */ (0,
|
|
7941
|
-
/* @__PURE__ */ (0,
|
|
7942
|
-
/* @__PURE__ */ (0,
|
|
7943
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7948
|
-
/* @__PURE__ */ (0,
|
|
7949
|
-
/* @__PURE__ */ (0,
|
|
7950
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7955
|
-
/* @__PURE__ */ (0,
|
|
7956
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
7964
|
-
/* @__PURE__ */ (0,
|
|
7965
|
-
/* @__PURE__ */ (0,
|
|
7966
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7971
|
-
/* @__PURE__ */ (0,
|
|
7972
|
-
/* @__PURE__ */ (0,
|
|
7973
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7978
|
-
/* @__PURE__ */ (0,
|
|
7979
|
-
/* @__PURE__ */ (0,
|
|
7980
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7985
|
-
/* @__PURE__ */ (0,
|
|
7986
|
-
/* @__PURE__ */ (0,
|
|
7987
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
7992
|
-
/* @__PURE__ */ (0,
|
|
7993
|
-
/* @__PURE__ */ (0,
|
|
7994
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8002
|
-
/* @__PURE__ */ (0,
|
|
8003
|
-
/* @__PURE__ */ (0,
|
|
8004
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8009
|
-
/* @__PURE__ */ (0,
|
|
8010
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8015
|
-
/* @__PURE__ */ (0,
|
|
8016
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
8053
|
-
(0,
|
|
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,
|
|
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,
|
|
8073
|
-
if (panel === "qa") return /* @__PURE__ */ (0,
|
|
8074
|
-
if (panel === "whiteboard") return /* @__PURE__ */ (0,
|
|
8075
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8104
|
-
/* @__PURE__ */ (0,
|
|
8105
|
-
/* @__PURE__ */ (0,
|
|
8106
|
-
attention ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8128
|
-
const [options, setOptions] = (0,
|
|
8129
|
-
const [multiple, setMultiple] = (0,
|
|
8130
|
-
const [anonymous, setAnonymous] = (0,
|
|
8131
|
-
const [busy, setBusy] = (0,
|
|
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,
|
|
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,
|
|
8164
|
-
/* @__PURE__ */ (0,
|
|
8165
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8178
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8192
|
-
/* @__PURE__ */ (0,
|
|
8193
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8197
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8201
|
-
/* @__PURE__ */ (0,
|
|
8202
|
-
/* @__PURE__ */ (0,
|
|
8203
|
-
/* @__PURE__ */ (0,
|
|
8204
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8398
|
+
const [picked, setPicked] = (0, import_react6.useState)(poll.myVote.slice());
|
|
8213
8399
|
const [notice, show] = useNotice();
|
|
8214
|
-
(0,
|
|
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,
|
|
8225
|
-
/* @__PURE__ */ (0,
|
|
8226
|
-
/* @__PURE__ */ (0,
|
|
8227
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8239
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8249
|
-
/* @__PURE__ */ (0,
|
|
8250
|
-
counts ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8263
|
-
/* @__PURE__ */ (0,
|
|
8264
|
-
canVote ? /* @__PURE__ */ (0,
|
|
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,
|
|
8275
|
-
isHost && poll.state === "live" ? /* @__PURE__ */ (0,
|
|
8276
|
-
isHost && poll.state !== "draft" ? /* @__PURE__ */ (0,
|
|
8277
|
-
isHost && poll.state === "live" ? null : isHost ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8288
|
-
collab?.error != null ? /* @__PURE__ */ (0,
|
|
8289
|
-
isHost && !composing ? /* @__PURE__ */ (0,
|
|
8290
|
-
isHost && composing ? /* @__PURE__ */ (0,
|
|
8291
|
-
ordered.length === 0 && !composing ? /* @__PURE__ */ (0,
|
|
8292
|
-
ordered.map((poll) => /* @__PURE__ */ (0,
|
|
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,
|
|
8298
|
-
const [reply, setReply] = (0,
|
|
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,
|
|
8301
|
-
/* @__PURE__ */ (0,
|
|
8302
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8313
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8318
|
-
/* @__PURE__ */ (0,
|
|
8319
|
-
/* @__PURE__ */ (0,
|
|
8320
|
-
question.mine && question.anonymous ? /* @__PURE__ */ (0,
|
|
8321
|
-
question.state !== "open" ? /* @__PURE__ */ (0,
|
|
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,
|
|
8324
|
-
question.answer !== null ? /* @__PURE__ */ (0,
|
|
8325
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8366
|
-
isHost || question.mine ? /* @__PURE__ */ (0,
|
|
8367
|
-
isHost && question.state === "open" && !answering ? /* @__PURE__ */ (0,
|
|
8368
|
-
isHost && question.state === "open" ? /* @__PURE__ */ (0,
|
|
8369
|
-
isHost && question.state !== "open" ? /* @__PURE__ */ (0,
|
|
8370
|
-
question.mine || isHost ? /* @__PURE__ */ (0,
|
|
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,
|
|
8377
|
-
const [anonymous, setAnonymous] = (0,
|
|
8378
|
-
const [order, setOrder] = (0,
|
|
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,
|
|
8387
|
-
collab?.error != null ? /* @__PURE__ */ (0,
|
|
8388
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8403
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8417
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8424
|
-
questions.length > 1 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
8468
|
-
const [color, setColor] = (0,
|
|
8469
|
-
const [drawing, setDrawing] = (0,
|
|
8470
|
-
const [pending, setPending] = (0,
|
|
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,
|
|
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,
|
|
8505
|
-
/* @__PURE__ */ (0,
|
|
8506
|
-
/* @__PURE__ */ (0,
|
|
8507
|
-
/* @__PURE__ */ (0,
|
|
8508
|
-
["pen", "Pen", /* @__PURE__ */ (0,
|
|
8509
|
-
["highlighter", "Highlighter", /* @__PURE__ */ (0,
|
|
8510
|
-
["eraser", "Eraser \u2014 click a stroke", /* @__PURE__ */ (0,
|
|
8511
|
-
].map(([value, label, icon]) => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8733
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(UndoIcon, { width: 16, height: 16 })
|
|
8548
8734
|
}
|
|
8549
8735
|
),
|
|
8550
|
-
isHost && strokes.length > 0 ? /* @__PURE__ */ (0,
|
|
8551
|
-
/* @__PURE__ */ (0,
|
|
8552
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8555
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8580
|
-
strokes.map((stroke) => /* @__PURE__ */ (0,
|
|
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,
|
|
8589
|
-
drawing !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
8614
|
-
(0,
|
|
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,
|
|
8629
|
-
const [mode, setMode] = (0,
|
|
8630
|
-
const [minutes, setMinutes] = (0,
|
|
8631
|
-
const [manual, setManual] = (0,
|
|
8632
|
-
const [busy, setBusy] = (0,
|
|
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,
|
|
8645
|
-
/* @__PURE__ */ (0,
|
|
8646
|
-
/* @__PURE__ */ (0,
|
|
8647
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8675
|
-
/* @__PURE__ */ (0,
|
|
8676
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8689
|
-
/* @__PURE__ */ (0,
|
|
8690
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8699
|
-
Array.from({ length: rooms }, (_, index) => /* @__PURE__ */ (0,
|
|
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,
|
|
8707
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8713
|
-
] }, index)) }) : /* @__PURE__ */ (0,
|
|
8714
|
-
/* @__PURE__ */ (0,
|
|
8715
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8761
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
8773
|
-
/* @__PURE__ */ (0,
|
|
8774
|
-
/* @__PURE__ */ (0,
|
|
8775
|
-
here ? /* @__PURE__ */ (0,
|
|
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,
|
|
8778
|
-
isHost && room.identities.length > 0 ? /* @__PURE__ */ (0,
|
|
8779
|
-
/* @__PURE__ */ (0,
|
|
8780
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8793
|
-
plan.rooms.map((option) => /* @__PURE__ */ (0,
|
|
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,
|
|
8801
|
-
isHost ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8831
|
-
isHost ? /* @__PURE__ */ (0,
|
|
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,
|
|
8846
|
-
collab?.error != null ? /* @__PURE__ */ (0,
|
|
8847
|
-
plan !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
8859
|
-
const [failure, setFailure] = (0,
|
|
8860
|
-
const expireAsked = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
8882
|
-
failure !== null ? /* @__PURE__ */ (0,
|
|
8883
|
-
room !== null ? /* @__PURE__ */ (0,
|
|
8884
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8887
|
-
] }) : assigned !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
9075
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("strong", { children: assigned.name }),
|
|
8890
9076
|
remaining !== null ? ` \xB7 ${clock(remaining)} left` : "",
|
|
8891
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8904
|
-
showBroadcast ? /* @__PURE__ */ (0,
|
|
8905
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9110
|
+
const pending = (0, import_react6.useRef)(missing);
|
|
8925
9111
|
pending.current = missing;
|
|
8926
|
-
(0,
|
|
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,
|
|
8946
|
-
/* @__PURE__ */ (0,
|
|
8947
|
-
/* @__PURE__ */ (0,
|
|
8948
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
8966
|
-
current === "" ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9167
|
+
const callback = (0, import_react6.useRef)(onRequest);
|
|
8982
9168
|
callback.current = onRequest;
|
|
8983
|
-
(0,
|
|
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
|
|
9178
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
8993
9179
|
function InertNotice({ what }) {
|
|
8994
|
-
return /* @__PURE__ */ (0,
|
|
8995
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9081
|
-
if (role === "cohost") return /* @__PURE__ */ (0,
|
|
9082
|
-
if (role === "guest") return /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9121
|
-
participant.handRaised ? /* @__PURE__ */ (0,
|
|
9122
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9126
|
-
/* @__PURE__ */ (0,
|
|
9127
|
-
spotlit ? /* @__PURE__ */ (0,
|
|
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,
|
|
9131
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9134
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9137
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9330
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PinIcon, { width: 16, height: 16 })
|
|
9144
9331
|
}
|
|
9145
9332
|
),
|
|
9146
|
-
/* @__PURE__ */ (0,
|
|
9147
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9340
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, { width: 16, height: 16 })
|
|
9154
9341
|
}
|
|
9155
9342
|
),
|
|
9156
|
-
menu ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9179
|
-
/* @__PURE__ */ (0,
|
|
9180
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9184
|
-
stage.feature !== null ? /* @__PURE__ */ (0,
|
|
9185
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9207
|
-
const [chatTo, setChatTo] = (0,
|
|
9208
|
-
const [popover, setPopover] = (0,
|
|
9209
|
-
const [shortcuts, setShortcuts] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9244
|
-
/* @__PURE__ */ (0,
|
|
9245
|
-
shortcuts ? /* @__PURE__ */ (0,
|
|
9246
|
-
panel === "chat" ? /* @__PURE__ */ (0,
|
|
9247
|
-
panel === "people" ? /* @__PURE__ */ (0,
|
|
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,
|
|
9258
|
-
panel === "settings" ? /* @__PURE__ */ (0,
|
|
9259
|
-
panel === "polls" ? /* @__PURE__ */ (0,
|
|
9260
|
-
panel === "qa" ? /* @__PURE__ */ (0,
|
|
9261
|
-
panel === "breakouts" ? /* @__PURE__ */ (0,
|
|
9262
|
-
whiteboard ? /* @__PURE__ */ (0,
|
|
9263
|
-
/* @__PURE__ */ (0,
|
|
9264
|
-
controls.notice !== null && panel !== "people" ? /* @__PURE__ */ (0,
|
|
9265
|
-
/* @__PURE__ */ (0,
|
|
9266
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9477
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(ScreenShareIcon, {})
|
|
9291
9478
|
}
|
|
9292
9479
|
) : null,
|
|
9293
|
-
/* @__PURE__ */ (0,
|
|
9294
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9487
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SmileIcon, {})
|
|
9301
9488
|
}
|
|
9302
9489
|
),
|
|
9303
|
-
popover === "reactions" ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9508
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(HandIcon, {})
|
|
9322
9509
|
}
|
|
9323
9510
|
),
|
|
9324
|
-
/* @__PURE__ */ (0,
|
|
9325
|
-
/* @__PURE__ */ (0,
|
|
9326
|
-
unread > 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9336
|
-
lobby.waiting.length > 0 || controls.isHost && queue.length > 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9348
|
-
recording.canStart ? /* @__PURE__ */ (0,
|
|
9349
|
-
recording.canStop ? /* @__PURE__ */ (0,
|
|
9350
|
-
/* @__PURE__ */ (0,
|
|
9351
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9544
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, {})
|
|
9358
9545
|
}
|
|
9359
9546
|
),
|
|
9360
|
-
popover === "more" ? /* @__PURE__ */ (0,
|
|
9361
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9556
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SettingsIcon, { width: 16, height: 16 }),
|
|
9370
9557
|
" Settings"
|
|
9371
9558
|
]
|
|
9372
9559
|
}
|
|
9373
9560
|
),
|
|
9374
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9388
|
-
/* @__PURE__ */ (0,
|
|
9389
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9466
|
-
(0,
|
|
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,
|
|
9471
|
-
(0,
|
|
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,
|
|
9485
|
-
const [style, setStyle] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9575
|
-
/* @__PURE__ */ (0,
|
|
9576
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9584
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9590
|
-
/* @__PURE__ */ (0,
|
|
9591
|
-
notice.kind === "ask-unmute" && room.local?.micEnabled !== true ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9625
|
-
/* @__PURE__ */ (0,
|
|
9626
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9629
|
-
/* @__PURE__ */ (0,
|
|
9630
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9648
|
-
(0,
|
|
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,
|
|
9661
|
-
/* @__PURE__ */ (0,
|
|
9662
|
-
/* @__PURE__ */ (0,
|
|
9663
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9676
|
-
const [recipient, setRecipient] = (0,
|
|
9677
|
-
const listRef = (0,
|
|
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,
|
|
9685
|
-
(0,
|
|
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,
|
|
9694
|
-
/* @__PURE__ */ (0,
|
|
9695
|
-
snapshot?.chatHistoryError != null ? /* @__PURE__ */ (0,
|
|
9696
|
-
snapshot?.chatLoaded !== true && messages.length === 0 ? /* @__PURE__ */ (0,
|
|
9697
|
-
messages.map((message) => /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9721
|
-
people.map((participant) => /* @__PURE__ */ (0,
|
|
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,
|
|
9729
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9770
|
-
/* @__PURE__ */ (0,
|
|
9771
|
-
counterpart !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
9963
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("time", { dateTime: message.at, children: clockOf(message.at) })
|
|
9777
9964
|
] }),
|
|
9778
|
-
/* @__PURE__ */ (0,
|
|
9779
|
-
message.failed !== void 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
9792
|
-
const [menuFor, setMenuFor] = (0,
|
|
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,
|
|
9799
|
-
/* @__PURE__ */ (0,
|
|
9800
|
-
queue.length > 0 ? /* @__PURE__ */ (0,
|
|
9801
|
-
/* @__PURE__ */ (0,
|
|
9802
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9817
|
-
/* @__PURE__ */ (0,
|
|
9818
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9834
|
-
/* @__PURE__ */ (0,
|
|
9835
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9852
|
-
/* @__PURE__ */ (0,
|
|
9853
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9865
|
-
/* @__PURE__ */ (0,
|
|
9866
|
-
shown.map((participant) => /* @__PURE__ */ (0,
|
|
9867
|
-
/* @__PURE__ */ (0,
|
|
9868
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9871
|
-
/* @__PURE__ */ (0,
|
|
9872
|
-
isNoteTaker(participant) ? /* @__PURE__ */ (0,
|
|
9873
|
-
snapshot?.spotlight === participant.identity ? /* @__PURE__ */ (0,
|
|
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,
|
|
9876
|
-
!participant.micEnabled && !isNoteTaker(participant) ? /* @__PURE__ */ (0,
|
|
9877
|
-
/* @__PURE__ */ (0,
|
|
9878
|
-
/* @__PURE__ */ (0,
|
|
9879
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10072
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(MoreIcon, { width: 16, height: 16 })
|
|
9886
10073
|
}
|
|
9887
10074
|
),
|
|
9888
|
-
menuFor === participant.identity ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
9918
|
-
const [text3, setText] = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
9948
|
-
/* @__PURE__ */ (0,
|
|
9949
|
-
renaming ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
9972
|
-
/* @__PURE__ */ (0,
|
|
9973
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9982
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
9985
|
-
/* @__PURE__ */ (0,
|
|
9986
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10000
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10032
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10037
|
-
/* @__PURE__ */ (0,
|
|
10038
|
-
participant.micEnabled ? /* @__PURE__ */ (0,
|
|
10039
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10042
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10046
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10050
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10054
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10058
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10076
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10080
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10110
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10118
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10128
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10141
|
-
(0,
|
|
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,
|
|
10145
|
-
/* @__PURE__ */ (0,
|
|
10146
|
-
/* @__PURE__ */ (0,
|
|
10147
|
-
/* @__PURE__ */ (0,
|
|
10148
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10171
|
-
const fileRef = (0,
|
|
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,
|
|
10184
|
-
/* @__PURE__ */ (0,
|
|
10185
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10194
|
-
/* @__PURE__ */ (0,
|
|
10195
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10199
|
-
/* @__PURE__ */ (0,
|
|
10200
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10294
|
-
(0,
|
|
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,
|
|
10320
|
-
/* @__PURE__ */ (0,
|
|
10321
|
-
/* @__PURE__ */ (0,
|
|
10322
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10325
|
-
|
|
10326
|
-
|
|
10327
|
-
|
|
10328
|
-
entry
|
|
10329
|
-
|
|
10330
|
-
|
|
10331
|
-
|
|
10332
|
-
|
|
10333
|
-
|
|
10334
|
-
|
|
10335
|
-
|
|
10336
|
-
onClick: () => void lobby.
|
|
10337
|
-
|
|
10338
|
-
|
|
10339
|
-
|
|
10340
|
-
|
|
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,
|
|
10348
|
-
/* @__PURE__ */ (0,
|
|
10349
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10353
|
-
status.refusal !== null ? /* @__PURE__ */ (0,
|
|
10354
|
-
/* @__PURE__ */ (0,
|
|
10355
|
-
status.refusal.remedy.length > 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
10358
|
-
/* @__PURE__ */ (0,
|
|
10359
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10386
|
-
/* @__PURE__ */ (0,
|
|
10387
|
-
notes.length === 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
10396
|
-
return /* @__PURE__ */ (0,
|
|
10397
|
-
/* @__PURE__ */ (0,
|
|
10398
|
-
ai.summary !== null ? /* @__PURE__ */ (0,
|
|
10399
|
-
/* @__PURE__ */ (0,
|
|
10400
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10439
|
-
/* @__PURE__ */ (0,
|
|
10440
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10446
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10478
|
-
ai.answer !== null ? /* @__PURE__ */ (0,
|
|
10479
|
-
ai.answer !== null && ai.coverage !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
10489
|
-
/* @__PURE__ */ (0,
|
|
10490
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10703
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: line.speaker }),
|
|
10508
10704
|
" ",
|
|
10509
10705
|
translated ?? line.text,
|
|
10510
|
-
translated !== void 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
10530
|
-
|
|
10531
|
-
|
|
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,
|
|
10537
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
10552
|
-
const [microphone, setMicrophone] = (0,
|
|
10553
|
-
const [joining, setJoining] = (0,
|
|
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,
|
|
10560
|
-
(0,
|
|
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,
|
|
10564
|
-
/* @__PURE__ */ (0,
|
|
10565
|
-
mode === "video" && preview.preview !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
10577
|
-
mode === "video" && preview.error !== null ? /* @__PURE__ */ (0,
|
|
10578
|
-
microphone && micStream !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
10581
|
-
/* @__PURE__ */ (0,
|
|
10582
|
-
notice?.kind === "removed" ? /* @__PURE__ */ (0,
|
|
10583
|
-
devices?.labelsHidden === true ? /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
10598
|
-
/* @__PURE__ */ (0,
|
|
10599
|
-
/* @__PURE__ */ (0,
|
|
10600
|
-
/* @__PURE__ */ (0,
|
|
10601
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
10622
|
-
/* @__PURE__ */ (0,
|
|
10623
|
-
recording.consentNotice !== null ? /* @__PURE__ */ (0,
|
|
10624
|
-
/* @__PURE__ */ (0,
|
|
10625
|
-
/* @__PURE__ */ (0,
|
|
10626
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
10637
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10873
|
+
room.failure !== null ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "mx-meet__error", children: [
|
|
10669
10874
|
room.failure.message,
|
|
10670
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10677
|
-
const [error, setError] = (0,
|
|
10678
|
-
const current = (0,
|
|
10679
|
-
const initialEffect = (0,
|
|
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,
|
|
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,
|
|
10729
|
-
/* @__PURE__ */ (0,
|
|
10730
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10741
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
10972
|
+
(0, import_react7.useEffect)(() => {
|
|
10768
10973
|
host.meetings.watch(roomName);
|
|
10769
10974
|
}, [host, roomName]);
|
|
10770
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10796
|
-
}
|
|
10797
|
-
return /* @__PURE__ */ (0,
|
|
10798
|
-
/* @__PURE__ */ (0,
|
|
10799
|
-
/* @__PURE__ */ (0,
|
|
10800
|
-
/* @__PURE__ */ (0,
|
|
10801
|
-
/* @__PURE__ */ (0,
|
|
10802
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10807
|
-
snapshot?.locked === true ? /* @__PURE__ */ (0,
|
|
10808
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10812
|
-
isHost ? /* @__PURE__ */ (0,
|
|
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,
|
|
10815
|
-
/* @__PURE__ */ (0,
|
|
10816
|
-
/* @__PURE__ */ (0,
|
|
10817
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10822
|
-
(0,
|
|
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,
|
|
10828
|
-
/* @__PURE__ */ (0,
|
|
10829
|
-
/* @__PURE__ */ (0,
|
|
10830
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11046
|
+
const [confirmingEnd, setConfirmingEnd] = (0, import_react7.useState)(false);
|
|
10842
11047
|
const locked = snapshot?.locked === true;
|
|
10843
|
-
return /* @__PURE__ */ (0,
|
|
10844
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10856
|
-
/* @__PURE__ */ (0,
|
|
10857
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
10918
|
-
/* @__PURE__ */ (0,
|
|
10919
|
-
/* @__PURE__ */ (0,
|
|
10920
|
-
/* @__PURE__ */ (0,
|
|
10921
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10924
|
-
/* @__PURE__ */ (0,
|
|
10925
|
-
invite.mode === "video" ? /* @__PURE__ */ (0,
|
|
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,
|
|
11135
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(CameraOffIcon, {})
|
|
10931
11136
|
}
|
|
10932
11137
|
) : null,
|
|
10933
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10940
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
10948
|
-
const [when2, setWhen] = (0,
|
|
10949
|
-
const [kind, setKind] = (0,
|
|
10950
|
-
const [busy, setBusy] = (0,
|
|
10951
|
-
const [link, setLink] = (0,
|
|
10952
|
-
const [error, setError] = (0,
|
|
10953
|
-
const disabled = (0,
|
|
10954
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
10980
|
-
/* @__PURE__ */ (0,
|
|
10981
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
10992
|
-
/* @__PURE__ */ (0,
|
|
10993
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11004
|
-
/* @__PURE__ */ (0,
|
|
11005
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11013
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11019
|
-
link !== null ? /* @__PURE__ */ (0,
|
|
11020
|
-
/* @__PURE__ */ (0,
|
|
11021
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11045
|
-
/* @__PURE__ */ (0,
|
|
11046
|
-
/* @__PURE__ */ (0,
|
|
11047
|
-
/* @__PURE__ */ (0,
|
|
11048
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11068
|
-
access.error !== null ? /* @__PURE__ */ (0,
|
|
11069
|
-
/* @__PURE__ */ (0,
|
|
11070
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11091
|
-
const [tab, setTab] = (0,
|
|
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,
|
|
11094
|
-
/* @__PURE__ */ (0,
|
|
11095
|
-
/* @__PURE__ */ (0,
|
|
11096
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11101
|
-
/* @__PURE__ */ (0,
|
|
11102
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11122
|
-
/* @__PURE__ */ (0,
|
|
11123
|
-
/* @__PURE__ */ (0,
|
|
11124
|
-
/* @__PURE__ */ (0,
|
|
11125
|
-
/* @__PURE__ */ (0,
|
|
11126
|
-
onRejoin !== void 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
11129
|
-
/* @__PURE__ */ (0,
|
|
11130
|
-
/* @__PURE__ */ (0,
|
|
11131
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11136
|
-
/* @__PURE__ */ (0,
|
|
11137
|
-
/* @__PURE__ */ (0,
|
|
11138
|
-
/* @__PURE__ */ (0,
|
|
11139
|
-
/* @__PURE__ */ (0,
|
|
11140
|
-
onRejoin !== void 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
11143
|
-
restrictionNotices.map((notice2) => /* @__PURE__ */ (0,
|
|
11144
|
-
/* @__PURE__ */ (0,
|
|
11145
|
-
/* @__PURE__ */ (0,
|
|
11146
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11152
|
-
/* @__PURE__ */ (0,
|
|
11153
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11156
|
-
/* @__PURE__ */ (0,
|
|
11157
|
-
/* @__PURE__ */ (0,
|
|
11158
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
11169
|
-
person.role === "guest" ? /* @__PURE__ */ (0,
|
|
11170
|
-
person.isAgent ? /* @__PURE__ */ (0,
|
|
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,
|
|
11175
|
-
/* @__PURE__ */ (0,
|
|
11176
|
-
fileId !== null ? /* @__PURE__ */ (0,
|
|
11177
|
-
/* @__PURE__ */ (0,
|
|
11178
|
-
notice !== null ? /* @__PURE__ */ (0,
|
|
11179
|
-
] }) : /* @__PURE__ */ (0,
|
|
11180
|
-
] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */ (0,
|
|
11181
|
-
/* @__PURE__ */ (0,
|
|
11182
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11185
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11217
|
-
/* @__PURE__ */ (0,
|
|
11218
|
-
/* @__PURE__ */ (0,
|
|
11219
|
-
wrapUp.state === "written" ? /* @__PURE__ */ (0,
|
|
11220
|
-
/* @__PURE__ */ (0,
|
|
11221
|
-
/* @__PURE__ */ (0,
|
|
11222
|
-
] }) : /* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11250
|
-
/* @__PURE__ */ (0,
|
|
11251
|
-
bundle.liveNotes.length === 0 ? /* @__PURE__ */ (0,
|
|
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,
|
|
11256
|
-
note.window !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
11264
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11273
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11281
|
-
/* @__PURE__ */ (0,
|
|
11282
|
-
/* @__PURE__ */ (0,
|
|
11283
|
-
guestFinishedMeeting ? /* @__PURE__ */ (0,
|
|
11284
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11318
|
-
record.coverage !== null ? /* @__PURE__ */ (0,
|
|
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,
|
|
11330
|
-
/* @__PURE__ */ (0,
|
|
11331
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11343
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
11347
|
-
const [loading, setLoading] = (0,
|
|
11348
|
-
const [error, setError] = (0,
|
|
11349
|
-
(0,
|
|
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,
|
|
11356
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
11402
|
-
error !== null ? /* @__PURE__ */ (0,
|
|
11403
|
-
/* @__PURE__ */ (0,
|
|
11404
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
11445
|
-
/* @__PURE__ */ (0,
|
|
11446
|
-
/* @__PURE__ */ (0,
|
|
11447
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
11455
|
-
/* @__PURE__ */ (0,
|
|
11456
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
11463
|
-
/* @__PURE__ */ (0,
|
|
11464
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
11671
|
+
ended ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet__badge", children: "Ended" }) : null
|
|
11467
11672
|
] }),
|
|
11468
|
-
/* @__PURE__ */ (0,
|
|
11673
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "mx-meet-list__when", children: meetingWhen(meeting) })
|
|
11469
11674
|
] }),
|
|
11470
|
-
/* @__PURE__ */ (0,
|
|
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
|
}
|