@ai-matrx/meet 0.7.84 → 0.7.85
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 +26 -0
- package/README.md +13 -7
- package/dist/collab-Bss-_Jfp.d.cts +805 -0
- package/dist/collab-Bss-_Jfp.d.ts +805 -0
- package/dist/components-BOUmOiPj.d.cts +240 -0
- package/dist/components-BmgstFx_.d.ts +240 -0
- package/dist/core.cjs +6737 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.cts +3048 -0
- package/dist/core.d.ts +3048 -0
- package/dist/core.js +6704 -0
- package/dist/core.js.map +1 -0
- package/dist/index.cjs +79 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3780
- package/dist/index.d.ts +5 -3780
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +461 -590
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +77 -365
- package/dist/react.d.ts +77 -365
- package/dist/react.js +405 -547
- package/dist/react.js.map +1 -1
- package/dist/skins/meet.cjs +4647 -0
- package/dist/skins/meet.cjs.map +1 -0
- package/dist/skins/meet.d.cts +113 -0
- package/dist/skins/meet.d.ts +113 -0
- package/dist/skins/meet.js +4628 -0
- package/dist/skins/meet.js.map +1 -0
- package/package.json +26 -5
package/dist/react.js
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
|
+
// src/core/slot.ts
|
|
5
|
+
var NAMESPACE = "ai-matrx.meet";
|
|
6
|
+
function globalSlot(name, create) {
|
|
7
|
+
const key = /* @__PURE__ */ Symbol.for(`${NAMESPACE}.${name}`);
|
|
8
|
+
const host = globalThis;
|
|
9
|
+
const existing = host[key];
|
|
10
|
+
if (existing !== void 0) return existing;
|
|
11
|
+
const created = create();
|
|
12
|
+
host[key] = created;
|
|
13
|
+
return created;
|
|
14
|
+
}
|
|
15
|
+
|
|
4
16
|
// src/react/provider.tsx
|
|
5
17
|
import {
|
|
6
18
|
createContext,
|
|
@@ -901,20 +913,6 @@ function fileDownloadPath(fileId) {
|
|
|
901
913
|
|
|
902
914
|
// src/core/channels.ts
|
|
903
915
|
import { defineChannelNamespace } from "@ai-matrx/realtime";
|
|
904
|
-
|
|
905
|
-
// src/core/slot.ts
|
|
906
|
-
var NAMESPACE = "ai-matrx.meet";
|
|
907
|
-
function globalSlot(name, create) {
|
|
908
|
-
const key = /* @__PURE__ */ Symbol.for(`${NAMESPACE}.${name}`);
|
|
909
|
-
const host = globalThis;
|
|
910
|
-
const existing = host[key];
|
|
911
|
-
if (existing !== void 0) return existing;
|
|
912
|
-
const created = create();
|
|
913
|
-
host[key] = created;
|
|
914
|
-
return created;
|
|
915
|
-
}
|
|
916
|
-
|
|
917
|
-
// src/core/channels.ts
|
|
918
916
|
function namespaces() {
|
|
919
917
|
return globalSlot("channel-namespaces", () => ({
|
|
920
918
|
user: defineChannelNamespace({
|
|
@@ -5223,7 +5221,7 @@ async function createCameraPreview(deviceId2, effect) {
|
|
|
5223
5221
|
|
|
5224
5222
|
// src/react/provider.tsx
|
|
5225
5223
|
import { jsx } from "react/jsx-runtime";
|
|
5226
|
-
var MeetContext = createContext(null);
|
|
5224
|
+
var MeetContext = globalSlot("react.context", () => createContext(null));
|
|
5227
5225
|
function defaultDiagnostics(event) {
|
|
5228
5226
|
const line = `[@ai-matrx/meet] ${event.message}${event.remedy !== void 0 ? `
|
|
5229
5227
|
\u2192 ${event.remedy}` : ""}`;
|
|
@@ -7201,23 +7199,15 @@ function useGuestRecordAccess(meeting) {
|
|
|
7201
7199
|
};
|
|
7202
7200
|
}
|
|
7203
7201
|
|
|
7204
|
-
// src/react/
|
|
7205
|
-
import { useEffect as
|
|
7206
|
-
|
|
7207
|
-
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
SegmentedControl,
|
|
7214
|
-
Select,
|
|
7215
|
-
SelectContent,
|
|
7216
|
-
SelectItem,
|
|
7217
|
-
SelectTrigger,
|
|
7218
|
-
SelectValue
|
|
7219
|
-
} from "@ai-matrx/design-system";
|
|
7220
|
-
import { avatarPaletteIndex, formatDurationMs as formatDurationMs4, getInitials } from "@ai-matrx/kit/format";
|
|
7202
|
+
// src/react/skin-root.tsx
|
|
7203
|
+
import { useEffect as useEffect8 } from "react";
|
|
7204
|
+
|
|
7205
|
+
// src/skins/meet/components.tsx
|
|
7206
|
+
import { useEffect as useEffect6, useLayoutEffect, useRef as useRef6, useState as useState4 } from "react";
|
|
7207
|
+
|
|
7208
|
+
// src/react/facade.ts
|
|
7209
|
+
import { useMemo as useMemo4 } from "react";
|
|
7210
|
+
import { avatarPaletteIndex, formatDurationMs as formatDurationMs3, getInitials } from "@ai-matrx/kit/format";
|
|
7221
7211
|
|
|
7222
7212
|
// src/core/after.ts
|
|
7223
7213
|
import { toDelimited } from "@ai-matrx/kit/delimited";
|
|
@@ -7654,11 +7644,151 @@ function countLabel(count2, singular, plural = `${singular}s`) {
|
|
|
7654
7644
|
return `${count2} ${count2 === 1 ? singular : plural}`;
|
|
7655
7645
|
}
|
|
7656
7646
|
|
|
7657
|
-
// src/
|
|
7658
|
-
|
|
7659
|
-
|
|
7647
|
+
// src/core/collab-state.ts
|
|
7648
|
+
function availableActivities(collab, isHost) {
|
|
7649
|
+
const settings = collab?.settings ?? null;
|
|
7650
|
+
if (settings === null) return [];
|
|
7651
|
+
const out = [];
|
|
7652
|
+
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
7653
|
+
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
7654
|
+
if (settings.qaEnabled) out.push("qa");
|
|
7655
|
+
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
7656
|
+
return out;
|
|
7657
|
+
}
|
|
7658
|
+
function activityAttention(collab, isHost) {
|
|
7659
|
+
if (collab === null) return false;
|
|
7660
|
+
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
7661
|
+
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
7662
|
+
return false;
|
|
7663
|
+
}
|
|
7664
|
+
async function performCollab(runtime, request) {
|
|
7665
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
7666
|
+
try {
|
|
7667
|
+
const result = await runtime.inRoom.collab(request);
|
|
7668
|
+
return { ok: true, message: result.message, itemId: result.itemId };
|
|
7669
|
+
} catch (error) {
|
|
7670
|
+
return { ok: false, message: error.message ?? "That did not work." };
|
|
7671
|
+
}
|
|
7672
|
+
}
|
|
7673
|
+
async function moveToRoom(runtime, roomId) {
|
|
7674
|
+
if (runtime === null) return { ok: false, message: "This meeting is not connected." };
|
|
7675
|
+
try {
|
|
7676
|
+
await runtime.engine.moveToBreakout(roomId);
|
|
7677
|
+
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
7678
|
+
} catch (error) {
|
|
7679
|
+
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
7680
|
+
}
|
|
7681
|
+
}
|
|
7682
|
+
function untranslatedLines(lines, translations) {
|
|
7683
|
+
return lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text: text3 }) => ({ id, text: text3 }));
|
|
7684
|
+
}
|
|
7685
|
+
function nextTranslationBatch(pending, language, asked) {
|
|
7686
|
+
const batch = pending.filter((line) => !asked.has(`${language}:${line.id}`)).slice(-20);
|
|
7687
|
+
for (const line of batch) asked.add(`${language}:${line.id}`);
|
|
7688
|
+
return batch;
|
|
7689
|
+
}
|
|
7690
|
+
function setCaptionLanguage(store, next) {
|
|
7691
|
+
store.patch({
|
|
7692
|
+
collab: {
|
|
7693
|
+
...store.snapshot().collab,
|
|
7694
|
+
captionLanguage: next,
|
|
7695
|
+
captionTranslations: {},
|
|
7696
|
+
captionTranslationError: null
|
|
7697
|
+
}
|
|
7698
|
+
});
|
|
7699
|
+
}
|
|
7700
|
+
function takePanelRequest(store) {
|
|
7701
|
+
const request = store.snapshot().collab.panelRequest;
|
|
7702
|
+
if (request === null) return null;
|
|
7703
|
+
store.patch({ collab: { ...store.snapshot().collab, panelRequest: null } });
|
|
7704
|
+
return request.panel;
|
|
7705
|
+
}
|
|
7706
|
+
function takeMoveRequest(store) {
|
|
7707
|
+
const request = store.snapshot().collab.moveRequest;
|
|
7708
|
+
if (request === null) return null;
|
|
7709
|
+
store.patch({ collab: { ...store.snapshot().collab, moveRequest: null } });
|
|
7710
|
+
return { roomId: request.roomId };
|
|
7711
|
+
}
|
|
7660
7712
|
|
|
7661
|
-
// src/react/
|
|
7713
|
+
// src/react/collab-hooks.ts
|
|
7714
|
+
import { useEffect as useEffect4, useRef as useRef4 } from "react";
|
|
7715
|
+
function useCollab() {
|
|
7716
|
+
const host = useMeetHost();
|
|
7717
|
+
const snapshot = useMeetSnapshot();
|
|
7718
|
+
const isHost = useIsHost();
|
|
7719
|
+
return {
|
|
7720
|
+
collab: snapshot?.collab ?? null,
|
|
7721
|
+
isHost,
|
|
7722
|
+
localIdentity: snapshot?.localIdentity ?? null,
|
|
7723
|
+
breakoutRoomId: snapshot?.breakoutRoomId ?? null,
|
|
7724
|
+
act: (request) => performCollab(host, request),
|
|
7725
|
+
moveTo: (roomId) => moveToRoom(host, roomId)
|
|
7726
|
+
};
|
|
7727
|
+
}
|
|
7728
|
+
function useAvailableActivities() {
|
|
7729
|
+
const { collab, isHost } = useCollab();
|
|
7730
|
+
return availableActivities(collab, isHost);
|
|
7731
|
+
}
|
|
7732
|
+
function useActivityAttention() {
|
|
7733
|
+
const { collab, isHost } = useCollab();
|
|
7734
|
+
return activityAttention(collab, isHost);
|
|
7735
|
+
}
|
|
7736
|
+
function useCaptionTranslation(lines) {
|
|
7737
|
+
const host = useMeetHost();
|
|
7738
|
+
const snapshot = useMeetSnapshot();
|
|
7739
|
+
const collab = snapshot?.collab ?? null;
|
|
7740
|
+
const language = collab?.captionLanguage ?? null;
|
|
7741
|
+
const asked = useRef4(/* @__PURE__ */ new Set());
|
|
7742
|
+
const translations = collab?.captionTranslations ?? {};
|
|
7743
|
+
const missing = untranslatedLines(lines, translations);
|
|
7744
|
+
const key = `${language ?? ""}|${missing.map((l) => l.id).join(",")}`;
|
|
7745
|
+
const pending = useRef4(missing);
|
|
7746
|
+
pending.current = missing;
|
|
7747
|
+
useEffect4(() => {
|
|
7748
|
+
if (host === null || language === null) return;
|
|
7749
|
+
const batch = nextTranslationBatch(pending.current, language, asked.current);
|
|
7750
|
+
if (batch.length === 0) return;
|
|
7751
|
+
void host.inRoom.translateCaptions(language, batch).catch(() => void 0);
|
|
7752
|
+
}, [host, language, key]);
|
|
7753
|
+
return { language, translations, error: collab?.captionTranslationError ?? null };
|
|
7754
|
+
}
|
|
7755
|
+
function useCollabPanelRequest(onRequest) {
|
|
7756
|
+
const host = useMeetHost();
|
|
7757
|
+
const at = useMeetSnapshot()?.collab.panelRequest?.at ?? null;
|
|
7758
|
+
const callback = useRef4(onRequest);
|
|
7759
|
+
callback.current = onRequest;
|
|
7760
|
+
useEffect4(() => {
|
|
7761
|
+
if (host === null) return;
|
|
7762
|
+
const panel = takePanelRequest(host.store);
|
|
7763
|
+
if (panel === null) return;
|
|
7764
|
+
callback.current(panel);
|
|
7765
|
+
}, [at, host]);
|
|
7766
|
+
}
|
|
7767
|
+
|
|
7768
|
+
// src/core/reactions.ts
|
|
7769
|
+
var MEET_REACTIONS = ["\u{1F496}", "\u{1F44D}", "\u{1F389}", "\u{1F44F}", "\u{1F602}", "\u{1F62E}", "\u{1F622}", "\u{1F914}", "\u{1F44E}"];
|
|
7770
|
+
|
|
7771
|
+
// src/react/facade.ts
|
|
7772
|
+
function useMeetCore() {
|
|
7773
|
+
const host = useMeetHost();
|
|
7774
|
+
const snapshot = useMeetSnapshot();
|
|
7775
|
+
const devices = useDeviceSnapshot();
|
|
7776
|
+
const role = useRole();
|
|
7777
|
+
const isHost = useIsHost();
|
|
7778
|
+
const observation = useCoreObservation();
|
|
7779
|
+
return useMemo4(
|
|
7780
|
+
() => ({ host, snapshot, devices, role, isHost, observation }),
|
|
7781
|
+
[host, snapshot, devices, role, isHost, observation]
|
|
7782
|
+
);
|
|
7783
|
+
}
|
|
7784
|
+
|
|
7785
|
+
// src/skins/meet/components.tsx
|
|
7786
|
+
import { Alert, AlertDescription, Button, Checkbox, ErrorBox, Label, SegmentedControl, Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@ai-matrx/design-system";
|
|
7787
|
+
|
|
7788
|
+
// src/skins/meet/collab.tsx
|
|
7789
|
+
import { useEffect as useEffect5, useRef as useRef5, useState as useState3 } from "react";
|
|
7790
|
+
|
|
7791
|
+
// src/skins/meet/icons.tsx
|
|
7662
7792
|
import { jsx as jsx3, jsxs } from "react/jsx-runtime";
|
|
7663
7793
|
function Icon({ children, ...props }) {
|
|
7664
7794
|
return /* @__PURE__ */ jsx3(
|
|
@@ -7754,12 +7884,6 @@ function LockIcon(props) {
|
|
|
7754
7884
|
/* @__PURE__ */ jsx3("path", { d: "M8 10V7a4 4 0 0 1 8 0v3" })
|
|
7755
7885
|
] });
|
|
7756
7886
|
}
|
|
7757
|
-
function LayoutIcon(props) {
|
|
7758
|
-
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7759
|
-
/* @__PURE__ */ jsx3("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
|
|
7760
|
-
/* @__PURE__ */ jsx3("path", { d: "M3 9h18M9 21V9" })
|
|
7761
|
-
] });
|
|
7762
|
-
}
|
|
7763
7887
|
function SettingsIcon(props) {
|
|
7764
7888
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7765
7889
|
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "3" }),
|
|
@@ -7778,12 +7902,6 @@ function PinIcon(props) {
|
|
|
7778
7902
|
/* @__PURE__ */ jsx3("path", { d: "M9 2h6l-1 6 3.5 3.5V14H6.5v-2.5L10 8 9 2Z" })
|
|
7779
7903
|
] });
|
|
7780
7904
|
}
|
|
7781
|
-
function WifiLowIcon(props) {
|
|
7782
|
-
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7783
|
-
/* @__PURE__ */ jsx3("path", { d: "M12 20h.01" }),
|
|
7784
|
-
/* @__PURE__ */ jsx3("path", { d: "M8.5 16.5a5 5 0 0 1 7 0" })
|
|
7785
|
-
] });
|
|
7786
|
-
}
|
|
7787
7905
|
function SmileIcon(props) {
|
|
7788
7906
|
return /* @__PURE__ */ jsxs(Icon, { ...props, children: [
|
|
7789
7907
|
/* @__PURE__ */ jsx3("circle", { cx: "12", cy: "12", r: "10" }),
|
|
@@ -7896,40 +8014,11 @@ function UndoIcon(props) {
|
|
|
7896
8014
|
] });
|
|
7897
8015
|
}
|
|
7898
8016
|
|
|
7899
|
-
// src/
|
|
8017
|
+
// src/skins/meet/collab.tsx
|
|
7900
8018
|
import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
7901
|
-
function useCollab() {
|
|
7902
|
-
const host = useMeetHost();
|
|
7903
|
-
const snapshot = useMeetSnapshot();
|
|
7904
|
-
const isHost = useIsHost();
|
|
7905
|
-
return {
|
|
7906
|
-
collab: snapshot?.collab ?? null,
|
|
7907
|
-
isHost,
|
|
7908
|
-
localIdentity: snapshot?.localIdentity ?? null,
|
|
7909
|
-
breakoutRoomId: snapshot?.breakoutRoomId ?? null,
|
|
7910
|
-
async act(request) {
|
|
7911
|
-
if (host === null) return { ok: false, message: "This meeting is not connected." };
|
|
7912
|
-
try {
|
|
7913
|
-
const result = await host.inRoom.collab(request);
|
|
7914
|
-
return { ok: true, message: result.message, itemId: result.itemId };
|
|
7915
|
-
} catch (error) {
|
|
7916
|
-
return { ok: false, message: error.message ?? "That did not work." };
|
|
7917
|
-
}
|
|
7918
|
-
},
|
|
7919
|
-
async moveTo(roomId) {
|
|
7920
|
-
if (host === null) return { ok: false, message: "This meeting is not connected." };
|
|
7921
|
-
try {
|
|
7922
|
-
await host.engine.moveToBreakout(roomId);
|
|
7923
|
-
return { ok: true, message: roomId === null ? "Back in the main room." : "Joined the breakout room." };
|
|
7924
|
-
} catch (error) {
|
|
7925
|
-
return { ok: false, message: error.message ?? "That room could not be joined." };
|
|
7926
|
-
}
|
|
7927
|
-
}
|
|
7928
|
-
};
|
|
7929
|
-
}
|
|
7930
8019
|
function useNotice() {
|
|
7931
8020
|
const [notice, setNotice] = useState3(null);
|
|
7932
|
-
|
|
8021
|
+
useEffect5(() => {
|
|
7933
8022
|
if (notice === null) return void 0;
|
|
7934
8023
|
const timer = setTimeout(() => setNotice(null), notice.failed ? 7e3 : 3e3);
|
|
7935
8024
|
return () => clearTimeout(timer);
|
|
@@ -7953,24 +8042,6 @@ function ActivityIcon({ panel }) {
|
|
|
7953
8042
|
if (panel === "whiteboard") return /* @__PURE__ */ jsx4(WhiteboardIcon, { ...props });
|
|
7954
8043
|
return /* @__PURE__ */ jsx4(BreakoutIcon, { ...props });
|
|
7955
8044
|
}
|
|
7956
|
-
function useAvailableActivities() {
|
|
7957
|
-
const { collab, isHost } = useCollab();
|
|
7958
|
-
const settings = collab?.settings ?? null;
|
|
7959
|
-
if (settings === null) return [];
|
|
7960
|
-
const out = [];
|
|
7961
|
-
if (settings.whiteboardEnabled) out.push("whiteboard");
|
|
7962
|
-
if (settings.pollsEnabled && (isHost || (collab?.polls.length ?? 0) > 0)) out.push("polls");
|
|
7963
|
-
if (settings.qaEnabled) out.push("qa");
|
|
7964
|
-
if (settings.breakoutsEnabled && (isHost || collab?.breakout?.state === "open")) out.push("breakouts");
|
|
7965
|
-
return out;
|
|
7966
|
-
}
|
|
7967
|
-
function useActivityAttention() {
|
|
7968
|
-
const { collab, isHost } = useCollab();
|
|
7969
|
-
if (collab === null) return false;
|
|
7970
|
-
if (collab.polls.some((poll) => poll.state === "live" && poll.myVote.length === 0 && !isHost)) return true;
|
|
7971
|
-
if (isHost && collab.questions.some((q) => q.state === "open")) return true;
|
|
7972
|
-
return false;
|
|
7973
|
-
}
|
|
7974
8045
|
function ActivitiesControl({
|
|
7975
8046
|
active,
|
|
7976
8047
|
onOpen
|
|
@@ -8090,7 +8161,7 @@ function PollCard({ poll }) {
|
|
|
8090
8161
|
const { act, isHost } = useCollab();
|
|
8091
8162
|
const [picked, setPicked] = useState3(poll.myVote.slice());
|
|
8092
8163
|
const [notice, show] = useNotice();
|
|
8093
|
-
|
|
8164
|
+
useEffect5(() => setPicked(poll.myVote.slice()), [poll.myVote]);
|
|
8094
8165
|
const counts = poll.options.some((o) => o.votes !== void 0);
|
|
8095
8166
|
const total = poll.options.reduce((sum, o) => sum + (o.votes ?? 0), 0);
|
|
8096
8167
|
const canVote = poll.state === "live";
|
|
@@ -8348,7 +8419,7 @@ function WhiteboardPanel({ onClose }) {
|
|
|
8348
8419
|
const [drawing, setDrawing] = useState3(null);
|
|
8349
8420
|
const [pending, setPending] = useState3([]);
|
|
8350
8421
|
const [notice, show] = useNotice();
|
|
8351
|
-
const svgRef =
|
|
8422
|
+
const svgRef = useRef5(null);
|
|
8352
8423
|
const strokes = collab?.strokes ?? [];
|
|
8353
8424
|
const mine = strokes.filter((s) => s.by === localIdentity);
|
|
8354
8425
|
const point = (event) => {
|
|
@@ -8490,7 +8561,7 @@ function clock(ms2) {
|
|
|
8490
8561
|
var BREAKOUT_EXPIRE_RETRY_MS = 5e3;
|
|
8491
8562
|
function useNow(active) {
|
|
8492
8563
|
const [now, setNow] = useState3(() => Date.now());
|
|
8493
|
-
|
|
8564
|
+
useEffect5(() => {
|
|
8494
8565
|
if (!active) return void 0;
|
|
8495
8566
|
const timer = setInterval(() => setNow(Date.now()), 1e3);
|
|
8496
8567
|
return () => clearInterval(timer);
|
|
@@ -8736,17 +8807,17 @@ function BreakoutBanner() {
|
|
|
8736
8807
|
const assigned = assignedRoom(open, localIdentity);
|
|
8737
8808
|
const [dismissedBroadcast, setDismissedBroadcast] = useState3(null);
|
|
8738
8809
|
const [failure, setFailure] = useState3(null);
|
|
8739
|
-
const expireAsked =
|
|
8810
|
+
const expireAsked = useRef5(null);
|
|
8740
8811
|
const moveAt = collab?.moveRequest?.at ?? null;
|
|
8741
|
-
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8812
|
+
useEffect5(() => {
|
|
8813
|
+
if (host === null) return;
|
|
8814
|
+
const request = takeMoveRequest(host.store);
|
|
8815
|
+
if (request === null) return;
|
|
8745
8816
|
const here = host.store.snapshot().breakoutRoomId;
|
|
8746
8817
|
if ((here ?? null) === request.roomId) return;
|
|
8747
8818
|
void moveTo(request.roomId).then((result) => setFailure(result.ok ? null : result.message));
|
|
8748
8819
|
}, [moveAt, host, moveTo]);
|
|
8749
|
-
|
|
8820
|
+
useEffect5(() => {
|
|
8750
8821
|
if (open === null || remaining === null || remaining > 0) return;
|
|
8751
8822
|
const asked = expireAsked.current;
|
|
8752
8823
|
if (asked !== null && asked.id === open.id && now - asked.at < BREAKOUT_EXPIRE_RETRY_MS) return;
|
|
@@ -8791,26 +8862,6 @@ function BreakoutBanner() {
|
|
|
8791
8862
|
] }) : null
|
|
8792
8863
|
] });
|
|
8793
8864
|
}
|
|
8794
|
-
function useCaptionTranslation(lines) {
|
|
8795
|
-
const host = useMeetHost();
|
|
8796
|
-
const snapshot = useMeetSnapshot();
|
|
8797
|
-
const collab = snapshot?.collab ?? null;
|
|
8798
|
-
const language = collab?.captionLanguage ?? null;
|
|
8799
|
-
const asked = useRef4(/* @__PURE__ */ new Set());
|
|
8800
|
-
const translations = collab?.captionTranslations ?? {};
|
|
8801
|
-
const missing = lines.filter((line) => line.final && translations[line.id] === void 0).map(({ id, text: text3 }) => ({ id, text: text3 }));
|
|
8802
|
-
const key = `${language ?? ""}|${missing.map((l) => l.id).join(",")}`;
|
|
8803
|
-
const pending = useRef4(missing);
|
|
8804
|
-
pending.current = missing;
|
|
8805
|
-
useEffect4(() => {
|
|
8806
|
-
if (host === null || language === null) return;
|
|
8807
|
-
const batch = pending.current.filter((line) => !asked.current.has(`${language}:${line.id}`)).slice(-20);
|
|
8808
|
-
if (batch.length === 0) return;
|
|
8809
|
-
for (const line of batch) asked.current.add(`${language}:${line.id}`);
|
|
8810
|
-
void host.inRoom.translateCaptions(language, batch).catch(() => void 0);
|
|
8811
|
-
}, [host, language, key]);
|
|
8812
|
-
return { language, translations, error: collab?.captionTranslationError ?? null };
|
|
8813
|
-
}
|
|
8814
8865
|
function CaptionLanguageSettings() {
|
|
8815
8866
|
const host = useMeetHost();
|
|
8816
8867
|
const snapshot = useMeetSnapshot();
|
|
@@ -8831,14 +8882,7 @@ function CaptionLanguageSettings() {
|
|
|
8831
8882
|
value: current,
|
|
8832
8883
|
onChange: (event) => {
|
|
8833
8884
|
const next = event.target.value === "" ? null : event.target.value;
|
|
8834
|
-
host.store
|
|
8835
|
-
collab: {
|
|
8836
|
-
...host.store.snapshot().collab,
|
|
8837
|
-
captionLanguage: next,
|
|
8838
|
-
captionTranslations: {},
|
|
8839
|
-
captionTranslationError: null
|
|
8840
|
-
}
|
|
8841
|
-
});
|
|
8885
|
+
setCaptionLanguage(host.store, next);
|
|
8842
8886
|
},
|
|
8843
8887
|
children: [
|
|
8844
8888
|
/* @__PURE__ */ jsx4("option", { value: "", children: "Off \u2014 as spoken" }),
|
|
@@ -8854,20 +8898,8 @@ function CaptionLanguageSettings() {
|
|
|
8854
8898
|
collab?.captionTranslationError != null ? /* @__PURE__ */ jsx4("p", { className: "mx-meet__panel-note mx-meet__collab-error", children: collab.captionTranslationError }) : null
|
|
8855
8899
|
] });
|
|
8856
8900
|
}
|
|
8857
|
-
function useCollabPanelRequest(onRequest) {
|
|
8858
|
-
const host = useMeetHost();
|
|
8859
|
-
const at = useMeetSnapshot()?.collab.panelRequest?.at ?? null;
|
|
8860
|
-
const callback = useRef4(onRequest);
|
|
8861
|
-
callback.current = onRequest;
|
|
8862
|
-
useEffect4(() => {
|
|
8863
|
-
const request = host?.store.snapshot().collab.panelRequest ?? null;
|
|
8864
|
-
if (request === null || host === null) return;
|
|
8865
|
-
host.store.patch({ collab: { ...host.store.snapshot().collab, panelRequest: null } });
|
|
8866
|
-
callback.current(request.panel);
|
|
8867
|
-
}, [at, host]);
|
|
8868
|
-
}
|
|
8869
8901
|
|
|
8870
|
-
// src/
|
|
8902
|
+
// src/skins/meet/components.tsx
|
|
8871
8903
|
import { Fragment, jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
8872
8904
|
function InertNotice({ what }) {
|
|
8873
8905
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__empty", role: "status", children: [
|
|
@@ -8951,10 +8983,6 @@ function RecordingIndicator() {
|
|
|
8951
8983
|
}
|
|
8952
8984
|
);
|
|
8953
8985
|
}
|
|
8954
|
-
function ConnectionDot({ quality }) {
|
|
8955
|
-
if (quality === "excellent" || quality === "good" || quality === "unknown") return null;
|
|
8956
|
-
return /* @__PURE__ */ jsx5("span", { className: `mx-meet__quality mx-meet__quality--${quality}`, title: `Connection ${quality}`, children: /* @__PURE__ */ jsx5(WifiLowIcon, { width: 14, height: 14 }) });
|
|
8957
|
-
}
|
|
8958
8986
|
function RoleBadge({ role }) {
|
|
8959
8987
|
if (role === "host") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Host" });
|
|
8960
8988
|
if (role === "cohost") return /* @__PURE__ */ jsx5("span", { className: "mx-meet__badge", children: "Co-host" });
|
|
@@ -9079,7 +9107,6 @@ function Stage({ pageSize }) {
|
|
|
9079
9107
|
] }) : null
|
|
9080
9108
|
] });
|
|
9081
9109
|
}
|
|
9082
|
-
var MEET_REACTIONS = ["\u{1F496}", "\u{1F44D}", "\u{1F389}", "\u{1F44F}", "\u{1F602}", "\u{1F62E}", "\u{1F622}", "\u{1F914}", "\u{1F44E}"];
|
|
9083
9110
|
function ControlBar({ onLeave }) {
|
|
9084
9111
|
const room = useRoom();
|
|
9085
9112
|
const recording = useRecording();
|
|
@@ -9104,7 +9131,7 @@ function ControlBar({ onLeave }) {
|
|
|
9104
9131
|
});
|
|
9105
9132
|
const privateChatAt = snapshot?.privateChatRequest?.at ?? null;
|
|
9106
9133
|
const meetStore = useMeetHost()?.store ?? null;
|
|
9107
|
-
|
|
9134
|
+
useEffect6(() => {
|
|
9108
9135
|
const request = meetStore?.snapshot().privateChatRequest ?? null;
|
|
9109
9136
|
if (request === null) return;
|
|
9110
9137
|
setChatTo(request.to);
|
|
@@ -9343,12 +9370,12 @@ function useUnreadChat(open) {
|
|
|
9343
9370
|
const chat = snapshot?.chat ?? [];
|
|
9344
9371
|
const local = snapshot?.localIdentity ?? null;
|
|
9345
9372
|
const [seen, setSeen] = useState4(0);
|
|
9346
|
-
|
|
9373
|
+
useEffect6(() => {
|
|
9347
9374
|
if (open) setSeen(chat.length);
|
|
9348
9375
|
}, [open, chat.length]);
|
|
9349
9376
|
const loaded = snapshot?.chatLoaded === true;
|
|
9350
9377
|
const [baseline, setBaseline] = useState4(null);
|
|
9351
|
-
|
|
9378
|
+
useEffect6(() => {
|
|
9352
9379
|
if (loaded && baseline === null) setBaseline(chat.length);
|
|
9353
9380
|
}, [loaded, baseline, chat.length]);
|
|
9354
9381
|
if (open) return 0;
|
|
@@ -9361,7 +9388,7 @@ function Popover({
|
|
|
9361
9388
|
children,
|
|
9362
9389
|
placement = "up"
|
|
9363
9390
|
}) {
|
|
9364
|
-
const ref =
|
|
9391
|
+
const ref = useRef6(null);
|
|
9365
9392
|
const [style, setStyle] = useState4({
|
|
9366
9393
|
position: "fixed",
|
|
9367
9394
|
top: 0,
|
|
@@ -9413,7 +9440,7 @@ function Popover({
|
|
|
9413
9440
|
window.removeEventListener("scroll", place, true);
|
|
9414
9441
|
};
|
|
9415
9442
|
}, [placement]);
|
|
9416
|
-
|
|
9443
|
+
useEffect6(() => {
|
|
9417
9444
|
const onKey = (event) => {
|
|
9418
9445
|
if (event.key === "Escape") onClose();
|
|
9419
9446
|
};
|
|
@@ -9447,7 +9474,7 @@ function MenuItem({
|
|
|
9447
9474
|
);
|
|
9448
9475
|
}
|
|
9449
9476
|
function Toast({ text: text3, failed, onDone }) {
|
|
9450
|
-
|
|
9477
|
+
useEffect6(() => {
|
|
9451
9478
|
const timer = setTimeout(onDone, failed ? 7e3 : 4e3);
|
|
9452
9479
|
return () => clearTimeout(timer);
|
|
9453
9480
|
}, [text3, failed, onDone]);
|
|
@@ -9486,7 +9513,7 @@ function MeetingOverlays() {
|
|
|
9486
9513
|
] });
|
|
9487
9514
|
}
|
|
9488
9515
|
function ShortcutsSheet({ onClose }) {
|
|
9489
|
-
|
|
9516
|
+
useEffect6(() => {
|
|
9490
9517
|
const onKey = (event) => {
|
|
9491
9518
|
if (event.key === "Escape") onClose();
|
|
9492
9519
|
};
|
|
@@ -9524,7 +9551,7 @@ function PanelShell({
|
|
|
9524
9551
|
onClose,
|
|
9525
9552
|
children
|
|
9526
9553
|
}) {
|
|
9527
|
-
const ref =
|
|
9554
|
+
const ref = useRef6(null);
|
|
9528
9555
|
useLayoutEffect(() => {
|
|
9529
9556
|
const panel = ref.current;
|
|
9530
9557
|
const root = panel?.closest(".mx-meet");
|
|
@@ -9554,15 +9581,15 @@ function ChatPanel({
|
|
|
9554
9581
|
const room = useRoom();
|
|
9555
9582
|
const [draft, setDraft] = useState4("");
|
|
9556
9583
|
const [recipient, setRecipient] = useState4(to);
|
|
9557
|
-
const listRef =
|
|
9584
|
+
const listRef = useRef6(null);
|
|
9558
9585
|
const messages = snapshot?.chat ?? [];
|
|
9559
9586
|
const local = snapshot?.localIdentity ?? null;
|
|
9560
9587
|
const people = (snapshot?.participants ?? []).filter(
|
|
9561
9588
|
(participant) => !participant.isLocal && !participant.isAgent
|
|
9562
9589
|
);
|
|
9563
9590
|
const recipientName = recipient === null ? null : people.find((p) => p.identity === recipient)?.displayName ?? null;
|
|
9564
|
-
|
|
9565
|
-
|
|
9591
|
+
useEffect6(() => setRecipient(to), [to]);
|
|
9592
|
+
useEffect6(() => {
|
|
9566
9593
|
const list = listRef.current;
|
|
9567
9594
|
if (list !== null) list.scrollTop = list.scrollHeight;
|
|
9568
9595
|
}, [messages.length]);
|
|
@@ -10018,7 +10045,7 @@ function DeviceSettings({
|
|
|
10018
10045
|
const stream = useMicrophoneStream(microphone);
|
|
10019
10046
|
const level = useAudioLevel(stream);
|
|
10020
10047
|
const [testing, setTesting] = useState4(false);
|
|
10021
|
-
|
|
10048
|
+
useEffect6(() => {
|
|
10022
10049
|
void host.devices.refresh();
|
|
10023
10050
|
}, [host]);
|
|
10024
10051
|
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__section", "aria-label": "Devices", children: [
|
|
@@ -10048,7 +10075,7 @@ function DeviceSettings({
|
|
|
10048
10075
|
function EffectsSettings({ preview }) {
|
|
10049
10076
|
const effects = useMediaEffects();
|
|
10050
10077
|
const [error, setError] = useState4(null);
|
|
10051
|
-
const fileRef =
|
|
10078
|
+
const fileRef = useRef6(null);
|
|
10052
10079
|
const supported = effects.backgroundsSupported || preview != null || videoEffectsSupported();
|
|
10053
10080
|
const apply = (next) => {
|
|
10054
10081
|
setError(null);
|
|
@@ -10171,7 +10198,7 @@ async function playTestSound(sinkId) {
|
|
|
10171
10198
|
}
|
|
10172
10199
|
function useMicrophoneStream(deviceId2) {
|
|
10173
10200
|
const [stream, setStream] = useState4(null);
|
|
10174
|
-
|
|
10201
|
+
useEffect6(() => {
|
|
10175
10202
|
if (deviceId2 === "off") return void 0;
|
|
10176
10203
|
let live = true;
|
|
10177
10204
|
let opened = null;
|
|
@@ -10455,7 +10482,7 @@ function PreJoinBody({
|
|
|
10455
10482
|
const micStream = useMicrophoneStream(microphone ? mic : "off");
|
|
10456
10483
|
const level = useAudioLevel(micStream);
|
|
10457
10484
|
const [speakerTesting, setSpeakerTesting] = useState4(false);
|
|
10458
|
-
|
|
10485
|
+
useEffect6(() => {
|
|
10459
10486
|
void host.devices.refresh();
|
|
10460
10487
|
}, [host]);
|
|
10461
10488
|
return /* @__PURE__ */ jsxs3("div", { className: "mx-meet__prejoin", children: [
|
|
@@ -10573,10 +10600,10 @@ function PreJoinBody({
|
|
|
10573
10600
|
function useCameraPreview(deviceId2, effects) {
|
|
10574
10601
|
const [preview, setPreview] = useState4(null);
|
|
10575
10602
|
const [error, setError] = useState4(null);
|
|
10576
|
-
const current =
|
|
10577
|
-
const initialEffect =
|
|
10603
|
+
const current = useRef6(null);
|
|
10604
|
+
const initialEffect = useRef6(toVideoEffect(effects));
|
|
10578
10605
|
initialEffect.current = toVideoEffect(effects);
|
|
10579
|
-
|
|
10606
|
+
useEffect6(() => {
|
|
10580
10607
|
if (deviceId2 === void 0) return void 0;
|
|
10581
10608
|
let live = true;
|
|
10582
10609
|
setError(null);
|
|
@@ -10642,43 +10669,17 @@ function DevicePicker({
|
|
|
10642
10669
|
)
|
|
10643
10670
|
] });
|
|
10644
10671
|
}
|
|
10645
|
-
function
|
|
10646
|
-
const host = useMeetHost();
|
|
10647
|
-
if (host === null) {
|
|
10648
|
-
return /* @__PURE__ */ jsx5(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx5("div", { className: "mx-meet", children: /* @__PURE__ */ jsx5(InertNotice, { what: "This meeting" }) }) });
|
|
10649
|
-
}
|
|
10650
|
-
return /* @__PURE__ */ jsx5(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx5(MeetingRoomBody, { ...props, host }) });
|
|
10651
|
-
}
|
|
10652
|
-
function MeetingRoomBody({
|
|
10672
|
+
function MeetSkinRoom({
|
|
10653
10673
|
roomName,
|
|
10654
10674
|
meetingId,
|
|
10655
10675
|
slug,
|
|
10656
|
-
meeting: given,
|
|
10657
10676
|
onLeave,
|
|
10658
|
-
headerControls
|
|
10659
|
-
host
|
|
10677
|
+
headerControls
|
|
10660
10678
|
}) {
|
|
10661
|
-
const snapshot =
|
|
10662
|
-
const isHost = useIsHost();
|
|
10679
|
+
const { host, snapshot, isHost } = useMeetCore();
|
|
10663
10680
|
const elapsed = useElapsed(snapshot?.meeting?.startedAt ?? null);
|
|
10664
10681
|
const phase = snapshot?.phase ?? "idle";
|
|
10665
|
-
|
|
10666
|
-
host.meetings.watch(roomName);
|
|
10667
|
-
}, [host, roomName]);
|
|
10668
|
-
useEffect5(() => {
|
|
10669
|
-
if (given === void 0) return;
|
|
10670
|
-
if (host.store.snapshot().meeting !== null) return;
|
|
10671
|
-
host.store.patch({ meeting: given, locked: given.locked });
|
|
10672
|
-
}, [host, given]);
|
|
10673
|
-
const watchedId = meetingId ?? snapshot?.meeting?.id ?? null;
|
|
10674
|
-
useEffect5(() => {
|
|
10675
|
-
if (watchedId === null) return;
|
|
10676
|
-
host.meetings.watchMeeting(asMeetingId(watchedId));
|
|
10677
|
-
}, [host, watchedId]);
|
|
10678
|
-
const record = snapshot?.meeting ?? given ?? null;
|
|
10679
|
-
if (hasEnded(record) && phase !== "connected" && phase !== "reconnecting") {
|
|
10680
|
-
return /* @__PURE__ */ jsx5(MeetingRecordView, { meeting: record });
|
|
10681
|
-
}
|
|
10682
|
+
if (host === null) return null;
|
|
10682
10683
|
if (phase === "idle" || phase === "failed" || phase === "left") {
|
|
10683
10684
|
return /* @__PURE__ */ jsx5("div", { className: "mx-meet", children: /* @__PURE__ */ jsx5(
|
|
10684
10685
|
PreJoin,
|
|
@@ -10699,7 +10700,7 @@ function MeetingRoomBody({
|
|
|
10699
10700
|
/* @__PURE__ */ jsx5("h1", { className: "mx-meet__title", children: snapshot?.meeting?.title ?? "Meeting" }),
|
|
10700
10701
|
/* @__PURE__ */ jsxs3("span", { className: "mx-meet__meta", children: [
|
|
10701
10702
|
participantSummary(snapshot?.participants ?? []),
|
|
10702
|
-
elapsed > 0 ? ` \xB7 ${
|
|
10703
|
+
elapsed > 0 ? ` \xB7 ${formatDurationMs3(elapsed)}` : ""
|
|
10703
10704
|
] }),
|
|
10704
10705
|
/* @__PURE__ */ jsx5(RecordingIndicator, {}),
|
|
10705
10706
|
snapshot?.locked === true ? /* @__PURE__ */ jsxs3("span", { className: "mx-meet__badge", children: [
|
|
@@ -10716,8 +10717,8 @@ function MeetingRoomBody({
|
|
|
10716
10717
|
] });
|
|
10717
10718
|
}
|
|
10718
10719
|
function WaitingRoom({ roomName, host }) {
|
|
10719
|
-
const knocked =
|
|
10720
|
-
|
|
10720
|
+
const knocked = useRef6(false);
|
|
10721
|
+
useEffect6(() => {
|
|
10721
10722
|
if (knocked.current) return;
|
|
10722
10723
|
knocked.current = true;
|
|
10723
10724
|
host.meetings.knock(roomName);
|
|
@@ -10785,150 +10786,17 @@ function HostMenu() {
|
|
|
10785
10786
|
end.notice !== null ? /* @__PURE__ */ jsx5("span", { className: "mx-meet__notice", role: "status", children: end.notice }) : null
|
|
10786
10787
|
] });
|
|
10787
10788
|
}
|
|
10788
|
-
function CallButton({
|
|
10789
|
-
person,
|
|
10790
|
-
mode = "video",
|
|
10791
|
-
children
|
|
10792
|
-
}) {
|
|
10793
|
-
const calls = useCalls();
|
|
10794
|
-
if (!calls.canCall) return null;
|
|
10795
|
-
return /* @__PURE__ */ jsx5(
|
|
10796
|
-
"button",
|
|
10797
|
-
{
|
|
10798
|
-
type: "button",
|
|
10799
|
-
className: "mx-meet__call-button",
|
|
10800
|
-
onClick: () => {
|
|
10801
|
-
void calls.call([person.userId], mode);
|
|
10802
|
-
},
|
|
10803
|
-
"aria-label": `Call ${person.displayName}`,
|
|
10804
|
-
children: children ?? /* @__PURE__ */ jsx5(PhoneIcon, { width: 18, height: 18 })
|
|
10805
|
-
}
|
|
10806
|
-
);
|
|
10807
|
-
}
|
|
10808
|
-
function IncomingCallHost() {
|
|
10809
|
-
const calls = useCalls();
|
|
10810
|
-
if (calls.incoming.length === 0) return null;
|
|
10811
|
-
return /* @__PURE__ */ jsx5("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ jsx5(IncomingCallCard, { invite }, invite.id)) });
|
|
10812
|
-
}
|
|
10813
|
-
function IncomingCallCard({ invite }) {
|
|
10814
|
-
const calls = useCalls();
|
|
10815
|
-
return /* @__PURE__ */ jsxs3("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
|
|
10816
|
-
/* @__PURE__ */ jsx5(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
|
|
10817
|
-
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__ringing-text", children: [
|
|
10818
|
-
/* @__PURE__ */ jsx5("strong", { children: invite.callerName }),
|
|
10819
|
-
/* @__PURE__ */ jsx5("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
|
|
10820
|
-
] }),
|
|
10821
|
-
/* @__PURE__ */ jsxs3("div", { className: "mx-meet__ringing-actions", children: [
|
|
10822
|
-
/* @__PURE__ */ jsx5(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ jsx5(PhoneOffIcon, {}) }),
|
|
10823
|
-
invite.mode === "video" ? /* @__PURE__ */ jsx5(
|
|
10824
|
-
ControlButton,
|
|
10825
|
-
{
|
|
10826
|
-
label: "Accept without video",
|
|
10827
|
-
onClick: () => void calls.accept({ ...invite, mode: "audio" }),
|
|
10828
|
-
children: /* @__PURE__ */ jsx5(CameraOffIcon, {})
|
|
10829
|
-
}
|
|
10830
|
-
) : null,
|
|
10831
|
-
/* @__PURE__ */ jsx5(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ jsx5(PhoneIcon, {}) })
|
|
10832
|
-
] })
|
|
10833
|
-
] });
|
|
10834
|
-
}
|
|
10835
|
-
function ScheduleMeeting(props) {
|
|
10836
|
-
const host = useMeetHost();
|
|
10837
|
-
if (host === null) return /* @__PURE__ */ jsx5(InertNotice, { what: "Scheduling a meeting" });
|
|
10838
|
-
return /* @__PURE__ */ jsx5(ScheduleMeetingBody, { ...props, host });
|
|
10839
|
-
}
|
|
10840
|
-
function ScheduleMeetingBody({
|
|
10841
|
-
appBaseUrl,
|
|
10842
|
-
onScheduled,
|
|
10843
|
-
host
|
|
10844
|
-
}) {
|
|
10845
|
-
const [title, setTitle] = useState4("");
|
|
10846
|
-
const [when2, setWhen] = useState4("");
|
|
10847
|
-
const [kind, setKind] = useState4("scheduled");
|
|
10848
|
-
const [busy, setBusy] = useState4(false);
|
|
10849
|
-
const [link, setLink] = useState4(null);
|
|
10850
|
-
const [error, setError] = useState4(null);
|
|
10851
|
-
const disabled = useMemo4(() => title.trim().length === 0 || busy, [title, busy]);
|
|
10852
|
-
return /* @__PURE__ */ jsxs3(
|
|
10853
|
-
"form",
|
|
10854
|
-
{
|
|
10855
|
-
className: "mx-meet__schedule",
|
|
10856
|
-
onSubmit: (event) => {
|
|
10857
|
-
event.preventDefault();
|
|
10858
|
-
if (host.identity.userId === null) return;
|
|
10859
|
-
setBusy(true);
|
|
10860
|
-
setError(null);
|
|
10861
|
-
void host.repository.getOrCreateMeeting({
|
|
10862
|
-
organizationId: host.identity.organizationId,
|
|
10863
|
-
hostUserId: host.identity.userId,
|
|
10864
|
-
title: title.trim(),
|
|
10865
|
-
kind,
|
|
10866
|
-
scheduledFor: when2.length > 0 ? new Date(when2).toISOString() : null
|
|
10867
|
-
}).then((meeting) => {
|
|
10868
|
-
setLink(meetingLink(appBaseUrl, meeting.slug));
|
|
10869
|
-
onScheduled?.(meeting.slug);
|
|
10870
|
-
}).catch((thrown) => {
|
|
10871
|
-
setError(
|
|
10872
|
-
thrown.remedy ?? thrown.message ?? "The meeting could not be created."
|
|
10873
|
-
);
|
|
10874
|
-
}).finally(() => setBusy(false));
|
|
10875
|
-
},
|
|
10876
|
-
children: [
|
|
10877
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10878
|
-
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Title" }),
|
|
10879
|
-
/* @__PURE__ */ jsx5(
|
|
10880
|
-
"input",
|
|
10881
|
-
{
|
|
10882
|
-
className: "mx-meet__input",
|
|
10883
|
-
value: title,
|
|
10884
|
-
onChange: (event) => setTitle(event.target.value),
|
|
10885
|
-
placeholder: "Weekly sync"
|
|
10886
|
-
}
|
|
10887
|
-
)
|
|
10888
|
-
] }),
|
|
10889
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10890
|
-
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "When" }),
|
|
10891
|
-
/* @__PURE__ */ jsx5(
|
|
10892
|
-
"input",
|
|
10893
|
-
{
|
|
10894
|
-
className: "mx-meet__input",
|
|
10895
|
-
type: "datetime-local",
|
|
10896
|
-
value: when2,
|
|
10897
|
-
onChange: (event) => setWhen(event.target.value)
|
|
10898
|
-
}
|
|
10899
|
-
)
|
|
10900
|
-
] }),
|
|
10901
|
-
/* @__PURE__ */ jsxs3("label", { className: "mx-meet__field", children: [
|
|
10902
|
-
/* @__PURE__ */ jsx5("span", { className: "mx-meet__field-label", children: "Repeats" }),
|
|
10903
|
-
/* @__PURE__ */ jsxs3(
|
|
10904
|
-
"select",
|
|
10905
|
-
{
|
|
10906
|
-
className: "mx-meet__select",
|
|
10907
|
-
value: kind,
|
|
10908
|
-
onChange: (event) => setKind(event.target.value),
|
|
10909
|
-
children: [
|
|
10910
|
-
/* @__PURE__ */ jsx5("option", { value: "scheduled", children: "Once" }),
|
|
10911
|
-
/* @__PURE__ */ jsx5("option", { value: "recurring", children: "Recurring \u2014 one link, every time" })
|
|
10912
|
-
]
|
|
10913
|
-
}
|
|
10914
|
-
)
|
|
10915
|
-
] }),
|
|
10916
|
-
/* @__PURE__ */ jsx5("button", { type: "submit", className: "mx-meet__primary", disabled, children: busy ? "Creating\u2026" : "Create meeting" }),
|
|
10917
|
-
link !== null ? /* @__PURE__ */ jsxs3("p", { className: "mx-meet__link-out", children: [
|
|
10918
|
-
/* @__PURE__ */ jsx5("span", { children: "Anyone with this link can join \u2014 no account needed." }),
|
|
10919
|
-
/* @__PURE__ */ jsx5("code", { children: link })
|
|
10920
|
-
] }) : null,
|
|
10921
|
-
error !== null ? /* @__PURE__ */ jsx5("p", { className: "mx-meet__error", children: error }) : null
|
|
10922
|
-
]
|
|
10923
|
-
}
|
|
10924
|
-
);
|
|
10925
|
-
}
|
|
10926
10789
|
function ReactionOverlay({
|
|
10927
10790
|
reactions
|
|
10928
10791
|
}) {
|
|
10929
10792
|
if (reactions.length === 0) return null;
|
|
10930
10793
|
return /* @__PURE__ */ jsx5("div", { className: "mx-meet__reactions", "aria-hidden": "true", children: reactions.map((reaction) => /* @__PURE__ */ jsx5("span", { className: "mx-meet__reaction", children: reaction.emoji }, reaction.id)) });
|
|
10931
10794
|
}
|
|
10795
|
+
function clockOf(iso) {
|
|
10796
|
+
const at = new Date(iso);
|
|
10797
|
+
if (Number.isNaN(at.getTime())) return "";
|
|
10798
|
+
return at.toLocaleTimeString(void 0, { hour: "numeric", minute: "2-digit" });
|
|
10799
|
+
}
|
|
10932
10800
|
function GuestRecordAccessControl({
|
|
10933
10801
|
meeting
|
|
10934
10802
|
}) {
|
|
@@ -10969,15 +10837,20 @@ function GuestRecordAccessControl({
|
|
|
10969
10837
|
] }) : null
|
|
10970
10838
|
] });
|
|
10971
10839
|
}
|
|
10840
|
+
|
|
10841
|
+
// src/react/record.tsx
|
|
10842
|
+
import { useEffect as useEffect7, useState as useState5 } from "react";
|
|
10843
|
+
import { ErrorBox as ErrorBox2 } from "@ai-matrx/design-system";
|
|
10844
|
+
import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
10972
10845
|
function MeetingRecordView({
|
|
10973
10846
|
meeting,
|
|
10974
10847
|
onRejoin
|
|
10975
10848
|
}) {
|
|
10976
10849
|
const host = useMeetHost();
|
|
10977
10850
|
if (host === null) {
|
|
10978
|
-
return /* @__PURE__ */
|
|
10851
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsx6(InertNotice, { what: "This meeting record" }) });
|
|
10979
10852
|
}
|
|
10980
|
-
return /* @__PURE__ */
|
|
10853
|
+
return /* @__PURE__ */ jsx6(MeetingRecordBody, { meeting, ...onRejoin !== void 0 ? { onRejoin } : {} });
|
|
10981
10854
|
}
|
|
10982
10855
|
function MeetingRecordBody({
|
|
10983
10856
|
meeting,
|
|
@@ -10985,19 +10858,19 @@ function MeetingRecordBody({
|
|
|
10985
10858
|
}) {
|
|
10986
10859
|
const host = useRequiredMeetHost();
|
|
10987
10860
|
const record = useMeetingRecord(meeting);
|
|
10988
|
-
const [question, setQuestion] =
|
|
10989
|
-
const [tab, setTab] =
|
|
10861
|
+
const [question, setQuestion] = useState5("");
|
|
10862
|
+
const [tab, setTab] = useState5("summary");
|
|
10990
10863
|
if (record.failure !== null) {
|
|
10991
|
-
return /* @__PURE__ */
|
|
10992
|
-
/* @__PURE__ */
|
|
10993
|
-
/* @__PURE__ */
|
|
10994
|
-
/* @__PURE__ */
|
|
10864
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__empty", error: record.failure, operation: "Open this meeting record", origin: "meet/components", children: [
|
|
10865
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-title", children: "This meeting record could not be opened" }),
|
|
10866
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: record.failure.message }),
|
|
10867
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: record.failure.remedy })
|
|
10995
10868
|
] }) });
|
|
10996
10869
|
}
|
|
10997
10870
|
if (record.loading || record.record === null) {
|
|
10998
|
-
return /* @__PURE__ */
|
|
10999
|
-
/* @__PURE__ */
|
|
11000
|
-
/* @__PURE__ */
|
|
10871
|
+
return /* @__PURE__ */ jsx6("div", { className: "mx-meet mx-meet--record", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__empty", role: "status", children: [
|
|
10872
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-title", children: "Opening the meeting record\u2026" }),
|
|
10873
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__empty-body", children: "Reading the summary, the notes and the transcript this meeting left behind." })
|
|
11001
10874
|
] }) });
|
|
11002
10875
|
}
|
|
11003
10876
|
const bundle = record.record;
|
|
@@ -11016,44 +10889,44 @@ function MeetingRecordBody({
|
|
|
11016
10889
|
);
|
|
11017
10890
|
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;
|
|
11018
10891
|
if (entirelyRestricted) {
|
|
11019
|
-
return /* @__PURE__ */
|
|
11020
|
-
/* @__PURE__ */
|
|
11021
|
-
/* @__PURE__ */
|
|
11022
|
-
/* @__PURE__ */
|
|
11023
|
-
/* @__PURE__ */
|
|
11024
|
-
onRejoin !== void 0 ? /* @__PURE__ */
|
|
10892
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet mx-meet--record", children: [
|
|
10893
|
+
/* @__PURE__ */ jsx6("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-head-inner", children: [
|
|
10894
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
|
|
10895
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__record-title", children: meeting.title }),
|
|
10896
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
|
|
10897
|
+
onRejoin !== void 0 ? /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
|
|
11025
10898
|
] }) }),
|
|
11026
|
-
/* @__PURE__ */
|
|
11027
|
-
/* @__PURE__ */
|
|
11028
|
-
/* @__PURE__ */
|
|
11029
|
-
/* @__PURE__ */
|
|
10899
|
+
/* @__PURE__ */ jsx6("div", { className: "mx-meet__record-body", children: restrictionNotices.map((notice2) => /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-access", role: "status", children: [
|
|
10900
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-title", children: "About this record" }),
|
|
10901
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-message", children: notice2.message }),
|
|
10902
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
|
|
11030
10903
|
] }, notice2.parts.join("-"))) })
|
|
11031
10904
|
] });
|
|
11032
10905
|
}
|
|
11033
|
-
return /* @__PURE__ */
|
|
11034
|
-
/* @__PURE__ */
|
|
11035
|
-
/* @__PURE__ */
|
|
11036
|
-
/* @__PURE__ */
|
|
11037
|
-
/* @__PURE__ */
|
|
11038
|
-
onRejoin !== void 0 ? /* @__PURE__ */
|
|
10906
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet mx-meet--record", children: [
|
|
10907
|
+
/* @__PURE__ */ jsx6("header", { className: "mx-meet__record-head", children: /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-head-inner", children: [
|
|
10908
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-eyebrow", children: "Meeting record" }),
|
|
10909
|
+
/* @__PURE__ */ jsx6("h1", { className: "mx-meet__record-title", children: meeting.title }),
|
|
10910
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-when", children: meetingWhen(meeting) }),
|
|
10911
|
+
onRejoin !== void 0 ? /* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: onRejoin, children: "Open this link again" }) : null
|
|
11039
10912
|
] }) }),
|
|
11040
|
-
/* @__PURE__ */
|
|
11041
|
-
restrictionNotices.map((notice2) => /* @__PURE__ */
|
|
11042
|
-
/* @__PURE__ */
|
|
11043
|
-
/* @__PURE__ */
|
|
11044
|
-
/* @__PURE__ */
|
|
10913
|
+
/* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-body", children: [
|
|
10914
|
+
restrictionNotices.map((notice2) => /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-access", role: "status", children: [
|
|
10915
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-title", children: "About this record" }),
|
|
10916
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-message", children: notice2.message }),
|
|
10917
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__record-access-remedy", children: notice2.remedy })
|
|
11045
10918
|
] }, notice2.parts.join("-"))),
|
|
11046
10919
|
attended.length === 0 ? (
|
|
11047
10920
|
/* NOT SILENCE. A refused attendance read used to remove the whole
|
|
11048
10921
|
section, so the reader could not tell "nobody" from "not shown". */
|
|
11049
|
-
/* @__PURE__ */
|
|
11050
|
-
/* @__PURE__ */
|
|
11051
|
-
/* @__PURE__ */
|
|
10922
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
|
|
10923
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
|
|
10924
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(bundle, "attendance", "Nobody is recorded as having attended.") })
|
|
11052
10925
|
] })
|
|
11053
|
-
) : /* @__PURE__ */
|
|
11054
|
-
/* @__PURE__ */
|
|
11055
|
-
/* @__PURE__ */
|
|
11056
|
-
/* @__PURE__ */
|
|
10926
|
+
) : /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Who attended", children: [
|
|
10927
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Who attended" }),
|
|
10928
|
+
/* @__PURE__ */ jsx6("ul", { className: "mx-meet__record-attendees", children: attended.map((person) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__record-attendee", children: [
|
|
10929
|
+
/* @__PURE__ */ jsx6(
|
|
11057
10930
|
Avatar,
|
|
11058
10931
|
{
|
|
11059
10932
|
name: displayNameFor(bundle.names, person.identity, person.displayName),
|
|
@@ -11061,26 +10934,26 @@ function MeetingRecordBody({
|
|
|
11061
10934
|
size: 28
|
|
11062
10935
|
}
|
|
11063
10936
|
),
|
|
11064
|
-
/* @__PURE__ */
|
|
10937
|
+
/* @__PURE__ */ jsxs4("span", { className: "mx-meet__person-name", children: [
|
|
11065
10938
|
displayNameFor(bundle.names, person.identity, person.displayName),
|
|
11066
|
-
person.role === "host" ? /* @__PURE__ */
|
|
11067
|
-
person.role === "guest" ? /* @__PURE__ */
|
|
11068
|
-
person.isAgent ? /* @__PURE__ */
|
|
10939
|
+
person.role === "host" ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Host" }) : null,
|
|
10940
|
+
person.role === "guest" ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Guest" }) : null,
|
|
10941
|
+
person.isAgent ? /* @__PURE__ */ jsx6("span", { className: "mx-meet__badge", children: "Meeting assistant" }) : null
|
|
11069
10942
|
] })
|
|
11070
10943
|
] }, person.id)) })
|
|
11071
10944
|
] }),
|
|
11072
|
-
bundle.recording !== null ? /* @__PURE__ */
|
|
11073
|
-
/* @__PURE__ */
|
|
11074
|
-
fileId !== null ? /* @__PURE__ */
|
|
11075
|
-
/* @__PURE__ */
|
|
11076
|
-
notice !== null ? /* @__PURE__ */
|
|
11077
|
-
] }) : /* @__PURE__ */
|
|
11078
|
-
] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */
|
|
11079
|
-
/* @__PURE__ */
|
|
11080
|
-
/* @__PURE__ */
|
|
10945
|
+
bundle.recording !== null ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section mx-meet__recording-card", "aria-label": "Recording", children: [
|
|
10946
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
|
|
10947
|
+
fileId !== null ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
10948
|
+
/* @__PURE__ */ jsx6(RecordingPlayer, { fileId }),
|
|
10949
|
+
notice !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: notice }) : null
|
|
10950
|
+
] }) : /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: notice ?? "This recording has no file." })
|
|
10951
|
+
] }) : wasRefused(bundle, "recording") ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Recording", children: [
|
|
10952
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Recording" }),
|
|
10953
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: REFUSED_ABSENCE })
|
|
11081
10954
|
] }) : null,
|
|
11082
|
-
/* @__PURE__ */
|
|
11083
|
-
/* @__PURE__ */
|
|
10955
|
+
/* @__PURE__ */ jsxs4("nav", { className: "mx-meet__record-tabs", "aria-label": "Meeting record sections", children: [
|
|
10956
|
+
/* @__PURE__ */ jsx6(
|
|
11084
10957
|
"button",
|
|
11085
10958
|
{
|
|
11086
10959
|
type: "button",
|
|
@@ -11090,7 +10963,7 @@ function MeetingRecordBody({
|
|
|
11090
10963
|
children: "Summary & decisions"
|
|
11091
10964
|
}
|
|
11092
10965
|
),
|
|
11093
|
-
/* @__PURE__ */
|
|
10966
|
+
/* @__PURE__ */ jsx6(
|
|
11094
10967
|
"button",
|
|
11095
10968
|
{
|
|
11096
10969
|
type: "button",
|
|
@@ -11100,7 +10973,7 @@ function MeetingRecordBody({
|
|
|
11100
10973
|
children: "Notes as it happened"
|
|
11101
10974
|
}
|
|
11102
10975
|
),
|
|
11103
|
-
/* @__PURE__ */
|
|
10976
|
+
/* @__PURE__ */ jsx6(
|
|
11104
10977
|
"button",
|
|
11105
10978
|
{
|
|
11106
10979
|
type: "button",
|
|
@@ -11111,15 +10984,15 @@ function MeetingRecordBody({
|
|
|
11111
10984
|
}
|
|
11112
10985
|
)
|
|
11113
10986
|
] }),
|
|
11114
|
-
tab === "summary" ? /* @__PURE__ */
|
|
11115
|
-
/* @__PURE__ */
|
|
11116
|
-
/* @__PURE__ */
|
|
11117
|
-
wrapUp.state === "written" ? /* @__PURE__ */
|
|
11118
|
-
/* @__PURE__ */
|
|
11119
|
-
/* @__PURE__ */
|
|
11120
|
-
] }) : /* @__PURE__ */
|
|
10987
|
+
tab === "summary" ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
10988
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Summary", children: [
|
|
10989
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Summary" }),
|
|
10990
|
+
wrapUp.state === "written" ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__record-summary", children: bundle.summary?.text }) : wrapUp.state === "in-progress" ? /* @__PURE__ */ jsxs4("div", { className: "mx-meet__panel-note", role: "status", children: [
|
|
10991
|
+
/* @__PURE__ */ jsx6("p", { children: wrapUp.message }),
|
|
10992
|
+
/* @__PURE__ */ jsx6("button", { type: "button", className: "mx-meet__link", onClick: record.reload, children: "Check again" })
|
|
10993
|
+
] }) : /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", role: wrapUp.state === "failed" ? "alert" : void 0, children: wrapUp.message })
|
|
11121
10994
|
] }),
|
|
11122
|
-
/* @__PURE__ */
|
|
10995
|
+
/* @__PURE__ */ jsx6(
|
|
11123
10996
|
NoteList,
|
|
11124
10997
|
{
|
|
11125
10998
|
title: "Decisions",
|
|
@@ -11131,7 +11004,7 @@ function MeetingRecordBody({
|
|
|
11131
11004
|
)
|
|
11132
11005
|
}
|
|
11133
11006
|
),
|
|
11134
|
-
/* @__PURE__ */
|
|
11007
|
+
/* @__PURE__ */ jsx6(
|
|
11135
11008
|
NoteList,
|
|
11136
11009
|
{
|
|
11137
11010
|
title: "Action items",
|
|
@@ -11144,42 +11017,42 @@ function MeetingRecordBody({
|
|
|
11144
11017
|
}
|
|
11145
11018
|
)
|
|
11146
11019
|
] }) : null,
|
|
11147
|
-
tab === "notes" ? /* @__PURE__ */
|
|
11148
|
-
/* @__PURE__ */
|
|
11149
|
-
bundle.liveNotes.length === 0 ? /* @__PURE__ */
|
|
11020
|
+
tab === "notes" ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Notes as it happened", children: [
|
|
11021
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Notes as it happened" }),
|
|
11022
|
+
bundle.liveNotes.length === 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(
|
|
11150
11023
|
bundle,
|
|
11151
11024
|
"notes",
|
|
11152
11025
|
"No live notes are available for this meeting."
|
|
11153
|
-
) }) : /* @__PURE__ */
|
|
11154
|
-
note.window !== null ? /* @__PURE__ */
|
|
11026
|
+
) }) : /* @__PURE__ */ jsx6("ul", { className: "mx-meet__notes", children: bundle.liveNotes.map((note) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__note", children: [
|
|
11027
|
+
note.window !== null ? /* @__PURE__ */ jsxs4("span", { className: "mx-meet__badge", children: [
|
|
11155
11028
|
"Window ",
|
|
11156
11029
|
note.window
|
|
11157
11030
|
] }) : null,
|
|
11158
11031
|
note.text
|
|
11159
11032
|
] }, note.id)) })
|
|
11160
11033
|
] }) : null,
|
|
11161
|
-
tab === "transcript" ? /* @__PURE__ */
|
|
11162
|
-
/* @__PURE__ */
|
|
11034
|
+
tab === "transcript" ? /* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Transcript", children: [
|
|
11035
|
+
/* @__PURE__ */ jsxs4("h2", { className: "mx-meet__record-section-title", children: [
|
|
11163
11036
|
"Transcript",
|
|
11164
|
-
/* @__PURE__ */
|
|
11037
|
+
/* @__PURE__ */ jsx6("span", { className: "mx-meet__record-count", children: bundle.transcript.length === 1 ? "1 line" : `${bundle.transcript.length} lines` })
|
|
11165
11038
|
] }),
|
|
11166
|
-
blocks.length === 0 ? /* @__PURE__ */
|
|
11039
|
+
blocks.length === 0 ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: absenceSentence(
|
|
11167
11040
|
bundle,
|
|
11168
11041
|
"transcript",
|
|
11169
11042
|
"No transcript is available for this meeting."
|
|
11170
|
-
) }) : /* @__PURE__ */
|
|
11171
|
-
/* @__PURE__ */
|
|
11043
|
+
) }) : /* @__PURE__ */ jsx6("ol", { className: "mx-meet__record-transcript", children: blocks.map((block) => /* @__PURE__ */ jsxs4("li", { className: "mx-meet__record-block", children: [
|
|
11044
|
+
/* @__PURE__ */ jsxs4("p", { className: "mx-meet__record-speaker", children: [
|
|
11172
11045
|
block.speaker,
|
|
11173
|
-
/* @__PURE__ */
|
|
11046
|
+
/* @__PURE__ */ jsx6("time", { className: "mx-meet__record-time", dateTime: block.startedAt, children: clockOf(block.startedAt) })
|
|
11174
11047
|
] }),
|
|
11175
|
-
block.lines.map((line) => /* @__PURE__ */
|
|
11048
|
+
block.lines.map((line) => /* @__PURE__ */ jsx6("p", { className: "mx-meet__record-line", children: line.text }, line.id))
|
|
11176
11049
|
] }, block.id)) })
|
|
11177
11050
|
] }) : null,
|
|
11178
|
-
/* @__PURE__ */
|
|
11179
|
-
/* @__PURE__ */
|
|
11180
|
-
/* @__PURE__ */
|
|
11181
|
-
guestFinishedMeeting ? /* @__PURE__ */
|
|
11182
|
-
/* @__PURE__ */
|
|
11051
|
+
/* @__PURE__ */ jsx6(GuestRecordAccessControl, { meeting }),
|
|
11052
|
+
/* @__PURE__ */ jsxs4("section", { className: "mx-meet__record-section", "aria-label": "Ask about this meeting", children: [
|
|
11053
|
+
/* @__PURE__ */ jsx6("h2", { className: "mx-meet__record-section-title", children: "Ask about this meeting" }),
|
|
11054
|
+
guestFinishedMeeting ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: "Sign in to ask the assistant about a meeting after it ends." }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
11055
|
+
/* @__PURE__ */ jsxs4(
|
|
11183
11056
|
"form",
|
|
11184
11057
|
{
|
|
11185
11058
|
className: "mx-meet__composer",
|
|
@@ -11190,7 +11063,7 @@ function MeetingRecordBody({
|
|
|
11190
11063
|
void record.ask(trimmed);
|
|
11191
11064
|
},
|
|
11192
11065
|
children: [
|
|
11193
|
-
/* @__PURE__ */
|
|
11066
|
+
/* @__PURE__ */ jsx6(
|
|
11194
11067
|
"input",
|
|
11195
11068
|
{
|
|
11196
11069
|
className: "mx-meet__input",
|
|
@@ -11200,7 +11073,7 @@ function MeetingRecordBody({
|
|
|
11200
11073
|
"aria-label": "Ask about this meeting"
|
|
11201
11074
|
}
|
|
11202
11075
|
),
|
|
11203
|
-
/* @__PURE__ */
|
|
11076
|
+
/* @__PURE__ */ jsx6(
|
|
11204
11077
|
"button",
|
|
11205
11078
|
{
|
|
11206
11079
|
type: "submit",
|
|
@@ -11212,8 +11085,8 @@ function MeetingRecordBody({
|
|
|
11212
11085
|
]
|
|
11213
11086
|
}
|
|
11214
11087
|
),
|
|
11215
|
-
record.answer !== null ? /* @__PURE__ */
|
|
11216
|
-
record.coverage !== null ? /* @__PURE__ */
|
|
11088
|
+
record.answer !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__answer", children: record.answer }) : null,
|
|
11089
|
+
record.coverage !== null ? /* @__PURE__ */ jsxs4("p", { className: "mx-meet__coverage", children: [
|
|
11217
11090
|
"Answered from ",
|
|
11218
11091
|
record.coverage.segmentsUsed,
|
|
11219
11092
|
" of ",
|
|
@@ -11224,9 +11097,9 @@ function MeetingRecordBody({
|
|
|
11224
11097
|
record.coverage.truncated ? " (the oldest were left out)" : "",
|
|
11225
11098
|
"."
|
|
11226
11099
|
] }) : null,
|
|
11227
|
-
record.askError !== null ? /* @__PURE__ */
|
|
11228
|
-
/* @__PURE__ */
|
|
11229
|
-
/* @__PURE__ */
|
|
11100
|
+
record.askError !== null ? /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__refusal", error: record.askError, operation: "Ask about this meeting", origin: "meet/components", children: [
|
|
11101
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: record.askError.message }),
|
|
11102
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: record.askError.remedy })
|
|
11230
11103
|
] }) : null
|
|
11231
11104
|
] })
|
|
11232
11105
|
] })
|
|
@@ -11237,21 +11110,21 @@ var STREAM_REFUSED = "Streaming playback did not start, so this recording was do
|
|
|
11237
11110
|
var PLAYBACK_RETRY_REMEDY = "Reload the page and try again. If it still will not play, ask a meeting host to check the recording.";
|
|
11238
11111
|
function RecordingPlayer(props) {
|
|
11239
11112
|
const host = useMeetHost();
|
|
11240
|
-
if (host === null) return /* @__PURE__ */
|
|
11241
|
-
return /* @__PURE__ */
|
|
11113
|
+
if (host === null) return /* @__PURE__ */ jsx6(InertNotice, { what: "This recording" });
|
|
11114
|
+
return /* @__PURE__ */ jsx6(RecordingPlayerBody, { ...props, host });
|
|
11242
11115
|
}
|
|
11243
11116
|
function RecordingPlayerBody({ fileId, host }) {
|
|
11244
|
-
const [media, setMedia] =
|
|
11245
|
-
const [loading, setLoading] =
|
|
11246
|
-
const [error, setError] =
|
|
11247
|
-
|
|
11117
|
+
const [media, setMedia] = useState5(null);
|
|
11118
|
+
const [loading, setLoading] = useState5(false);
|
|
11119
|
+
const [error, setError] = useState5(null);
|
|
11120
|
+
useEffect7(() => {
|
|
11248
11121
|
if (media === null || media.kind !== "bytes") return void 0;
|
|
11249
11122
|
const url = media.url;
|
|
11250
11123
|
return () => URL.revokeObjectURL(url);
|
|
11251
11124
|
}, [media]);
|
|
11252
11125
|
if (media !== null) {
|
|
11253
|
-
return /* @__PURE__ */
|
|
11254
|
-
/* @__PURE__ */
|
|
11126
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-section", children: [
|
|
11127
|
+
/* @__PURE__ */ jsx6(
|
|
11255
11128
|
"video",
|
|
11256
11129
|
{
|
|
11257
11130
|
className: "mx-meet__record-player",
|
|
@@ -11293,15 +11166,15 @@ function RecordingPlayerBody({ fileId, host }) {
|
|
|
11293
11166
|
}
|
|
11294
11167
|
}
|
|
11295
11168
|
),
|
|
11296
|
-
media.fallbackReason !== null ? /* @__PURE__ */
|
|
11169
|
+
media.fallbackReason !== null ? /* @__PURE__ */ jsx6("p", { className: "mx-meet__panel-note", children: media.fallbackReason }) : null
|
|
11297
11170
|
] });
|
|
11298
11171
|
}
|
|
11299
|
-
return /* @__PURE__ */
|
|
11300
|
-
error !== null ? /* @__PURE__ */
|
|
11301
|
-
/* @__PURE__ */
|
|
11302
|
-
/* @__PURE__ */
|
|
11172
|
+
return /* @__PURE__ */ jsxs4("div", { className: "mx-meet__record-section", children: [
|
|
11173
|
+
error !== null ? /* @__PURE__ */ jsxs4(ErrorBox2, { as: "div", className: "mx-meet__refusal", error, operation: "Complete this meeting action", origin: "meet/components", children: [
|
|
11174
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-reason", children: error.message }),
|
|
11175
|
+
/* @__PURE__ */ jsx6("p", { className: "mx-meet__refusal-remedy", children: error.remedy })
|
|
11303
11176
|
] }) : null,
|
|
11304
|
-
/* @__PURE__ */
|
|
11177
|
+
/* @__PURE__ */ jsx6(
|
|
11305
11178
|
"button",
|
|
11306
11179
|
{
|
|
11307
11180
|
type: "button",
|
|
@@ -11329,45 +11202,84 @@ function RecordingPlayerBody({ fileId, host }) {
|
|
|
11329
11202
|
)
|
|
11330
11203
|
] });
|
|
11331
11204
|
}
|
|
11332
|
-
|
|
11333
|
-
|
|
11334
|
-
|
|
11335
|
-
|
|
11336
|
-
}
|
|
11337
|
-
function MeetingList({ baseUrl }) {
|
|
11205
|
+
|
|
11206
|
+
// src/react/skin-root.tsx
|
|
11207
|
+
import { jsx as jsx7 } from "react/jsx-runtime";
|
|
11208
|
+
function MeetingSkinRoot(props) {
|
|
11338
11209
|
const host = useMeetHost();
|
|
11339
|
-
|
|
11340
|
-
|
|
11341
|
-
if (list.failure !== null) {
|
|
11342
|
-
return /* @__PURE__ */ jsxs3(ErrorBox, { as: "div", className: "mx-meet__empty", error: list.failure, operation: "List your meetings", origin: "meet/components", children: [
|
|
11343
|
-
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-title", children: "Your meetings could not be listed" }),
|
|
11344
|
-
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: list.failure.message }),
|
|
11345
|
-
/* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-body", children: list.failure.remedy })
|
|
11346
|
-
] });
|
|
11347
|
-
}
|
|
11348
|
-
if (list.loading) {
|
|
11349
|
-
return /* @__PURE__ */ jsx5("div", { className: "mx-meet__empty", role: "status", children: /* @__PURE__ */ jsx5("p", { className: "mx-meet__empty-title", children: "Loading your meetings\u2026" }) });
|
|
11210
|
+
if (host === null) {
|
|
11211
|
+
return /* @__PURE__ */ jsx7(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx7("div", { className: "mx-meet", children: /* @__PURE__ */ jsx7(InertNotice, { what: "This meeting" }) }) });
|
|
11350
11212
|
}
|
|
11351
|
-
|
|
11352
|
-
|
|
11353
|
-
|
|
11354
|
-
|
|
11355
|
-
|
|
11213
|
+
return /* @__PURE__ */ jsx7(MeetRoot, { meeting: props.meeting, children: /* @__PURE__ */ jsx7(MeetingSkinRootBody, { ...props, host }) });
|
|
11214
|
+
}
|
|
11215
|
+
function MeetingSkinRootBody({
|
|
11216
|
+
roomName,
|
|
11217
|
+
meetingId,
|
|
11218
|
+
slug,
|
|
11219
|
+
meeting: given,
|
|
11220
|
+
onLeave,
|
|
11221
|
+
headerControls,
|
|
11222
|
+
host
|
|
11223
|
+
}) {
|
|
11224
|
+
const snapshot = useMeetSnapshot();
|
|
11225
|
+
const phase = snapshot?.phase ?? "idle";
|
|
11226
|
+
useEffect8(() => {
|
|
11227
|
+
host.meetings.watch(roomName);
|
|
11228
|
+
}, [host, roomName]);
|
|
11229
|
+
useEffect8(() => {
|
|
11230
|
+
if (given === void 0) return;
|
|
11231
|
+
if (host.store.snapshot().meeting !== null) return;
|
|
11232
|
+
host.store.patch({ meeting: given, locked: given.locked });
|
|
11233
|
+
}, [host, given]);
|
|
11234
|
+
const watchedId = meetingId ?? snapshot?.meeting?.id ?? null;
|
|
11235
|
+
useEffect8(() => {
|
|
11236
|
+
if (watchedId === null) return;
|
|
11237
|
+
host.meetings.watchMeeting(asMeetingId(watchedId));
|
|
11238
|
+
}, [host, watchedId]);
|
|
11239
|
+
const record = snapshot?.meeting ?? given ?? null;
|
|
11240
|
+
if (hasEnded(record) && phase !== "connected" && phase !== "reconnecting") {
|
|
11241
|
+
return /* @__PURE__ */ jsx7(MeetingRecordView, { meeting: record });
|
|
11356
11242
|
}
|
|
11357
|
-
|
|
11358
|
-
|
|
11359
|
-
|
|
11360
|
-
|
|
11361
|
-
|
|
11362
|
-
|
|
11363
|
-
|
|
11364
|
-
|
|
11365
|
-
|
|
11366
|
-
|
|
11367
|
-
|
|
11368
|
-
|
|
11369
|
-
|
|
11370
|
-
|
|
11243
|
+
return /* @__PURE__ */ jsx7(
|
|
11244
|
+
MeetSkinRoom,
|
|
11245
|
+
{
|
|
11246
|
+
roomName,
|
|
11247
|
+
...meetingId !== void 0 ? { meetingId } : {},
|
|
11248
|
+
...slug !== void 0 ? { slug } : {},
|
|
11249
|
+
...onLeave !== void 0 ? { onLeave } : {},
|
|
11250
|
+
...headerControls !== void 0 ? { headerControls } : {}
|
|
11251
|
+
}
|
|
11252
|
+
);
|
|
11253
|
+
}
|
|
11254
|
+
|
|
11255
|
+
// src/react/calls-ui.tsx
|
|
11256
|
+
import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
11257
|
+
function IncomingCallHost() {
|
|
11258
|
+
const calls = useCalls();
|
|
11259
|
+
if (calls.incoming.length === 0) return null;
|
|
11260
|
+
return /* @__PURE__ */ jsx8("div", { className: "mx-meet__ringing-stack", children: calls.incoming.map((invite) => /* @__PURE__ */ jsx8(IncomingCallCard, { invite }, invite.id)) });
|
|
11261
|
+
}
|
|
11262
|
+
function IncomingCallCard({ invite }) {
|
|
11263
|
+
const calls = useCalls();
|
|
11264
|
+
return /* @__PURE__ */ jsxs5("section", { className: "mx-meet__ringing", role: "alertdialog", "aria-label": "Incoming call", children: [
|
|
11265
|
+
/* @__PURE__ */ jsx8(Avatar, { name: invite.callerName, url: invite.callerAvatarUrl, size: 56 }),
|
|
11266
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-meet__ringing-text", children: [
|
|
11267
|
+
/* @__PURE__ */ jsx8("strong", { children: invite.callerName }),
|
|
11268
|
+
/* @__PURE__ */ jsx8("span", { children: invite.mode === "video" ? "Incoming video call" : "Incoming call" })
|
|
11269
|
+
] }),
|
|
11270
|
+
/* @__PURE__ */ jsxs5("div", { className: "mx-meet__ringing-actions", children: [
|
|
11271
|
+
/* @__PURE__ */ jsx8(ControlButton, { label: "Decline", danger: true, onClick: () => void calls.decline(invite), children: /* @__PURE__ */ jsx8(PhoneOffIcon, {}) }),
|
|
11272
|
+
invite.mode === "video" ? /* @__PURE__ */ jsx8(
|
|
11273
|
+
ControlButton,
|
|
11274
|
+
{
|
|
11275
|
+
label: "Accept without video",
|
|
11276
|
+
onClick: () => void calls.accept({ ...invite, mode: "audio" }),
|
|
11277
|
+
children: /* @__PURE__ */ jsx8(CameraOffIcon, {})
|
|
11278
|
+
}
|
|
11279
|
+
) : null,
|
|
11280
|
+
/* @__PURE__ */ jsx8(ControlButton, { label: "Accept", onClick: () => void calls.accept(invite), children: /* @__PURE__ */ jsx8(PhoneIcon, {}) })
|
|
11281
|
+
] })
|
|
11282
|
+
] });
|
|
11371
11283
|
}
|
|
11372
11284
|
|
|
11373
11285
|
// src/core/invitations.ts
|
|
@@ -11522,54 +11434,26 @@ async function pushMeetingToGoogleCalendar(api, meetingId, target) {
|
|
|
11522
11434
|
}
|
|
11523
11435
|
export {
|
|
11524
11436
|
ATTENDANCE_CSV_HEADER,
|
|
11525
|
-
ActivitiesControl,
|
|
11526
|
-
ActivitiesIcon,
|
|
11527
|
-
AiPanel,
|
|
11528
|
-
AttendanceNotice,
|
|
11529
|
-
Avatar,
|
|
11530
|
-
BreakoutBanner,
|
|
11531
|
-
BreakoutIcon,
|
|
11532
|
-
BreakoutsPanel,
|
|
11533
11437
|
CALL_INVITE_KIND,
|
|
11534
11438
|
CALL_INVITE_VERSION,
|
|
11535
11439
|
CAPTION_LANGUAGES,
|
|
11536
11440
|
CONSENT_NOTICE_ATTRIBUTE,
|
|
11537
|
-
CallButton,
|
|
11538
|
-
CameraIcon,
|
|
11539
|
-
CameraOffIcon,
|
|
11540
|
-
CaptionLanguageSettings,
|
|
11541
|
-
Captions,
|
|
11542
|
-
ChatIcon,
|
|
11543
|
-
ChatPanel,
|
|
11544
|
-
CheckIcon,
|
|
11545
|
-
CloseIcon,
|
|
11546
|
-
ConnectionDot,
|
|
11547
|
-
ConsentNotice,
|
|
11548
|
-
ControlBar,
|
|
11549
|
-
ControlButton,
|
|
11550
11441
|
DATA_TOPICS,
|
|
11551
11442
|
DEFAULT_EFFECTS,
|
|
11552
11443
|
DEFAULT_PAGE_SIZE,
|
|
11553
11444
|
EMPTY_COLLAB,
|
|
11554
11445
|
END_MEETING_NOT_SERVED,
|
|
11555
11446
|
FILE_SESSION_PATH,
|
|
11556
|
-
FlagIcon,
|
|
11557
11447
|
GUEST_RECORD_ACCESS_CHOICES,
|
|
11558
11448
|
GUEST_RECORD_ACCESS_LEVELS,
|
|
11559
11449
|
GUEST_RECORD_ACCESS_METADATA_KEY,
|
|
11560
11450
|
GUEST_RECORD_NOT_SHARED,
|
|
11561
11451
|
GuestRecordAccessControl,
|
|
11562
|
-
HandIcon,
|
|
11563
|
-
HostMenu,
|
|
11564
11452
|
IDLE_MEDIA,
|
|
11565
11453
|
IDLE_TRACK,
|
|
11566
11454
|
IncomingCallCard,
|
|
11567
11455
|
IncomingCallHost,
|
|
11568
|
-
KeyboardIcon,
|
|
11569
11456
|
LISTEN_ONLY_NOTICE,
|
|
11570
|
-
LayoutIcon,
|
|
11571
|
-
LobbyPanel,
|
|
11572
|
-
LockIcon,
|
|
11573
11457
|
MEETING_INVITE_KIND,
|
|
11574
11458
|
MEETING_INVITE_VERSION,
|
|
11575
11459
|
MEETING_RECORD_GRACE_MS,
|
|
@@ -11584,33 +11468,14 @@ export {
|
|
|
11584
11468
|
MeetError,
|
|
11585
11469
|
MeetProvider,
|
|
11586
11470
|
MeetRoot,
|
|
11587
|
-
MeetingList,
|
|
11588
|
-
MeetingOverlays,
|
|
11589
11471
|
MeetingRecordView,
|
|
11590
|
-
|
|
11591
|
-
MicIcon,
|
|
11592
|
-
MicOffIcon,
|
|
11593
|
-
MoreIcon,
|
|
11472
|
+
MeetingSkinRoot,
|
|
11594
11473
|
NOTE_TAKER_IDENTITY_PREFIX,
|
|
11595
11474
|
NOTE_TAKER_METADATA_KEY,
|
|
11596
11475
|
NO_GRANTS,
|
|
11597
11476
|
ORGANIZATION_HEADER,
|
|
11598
11477
|
PARTICIPANT_CAN_RECORD_ATTRIBUTE,
|
|
11599
11478
|
PARTICIPANT_ROLE_ATTRIBUTE,
|
|
11600
|
-
ParticipantTile,
|
|
11601
|
-
PencilIcon,
|
|
11602
|
-
PeopleIcon,
|
|
11603
|
-
PeoplePanel,
|
|
11604
|
-
PersonMenu,
|
|
11605
|
-
PhoneIcon,
|
|
11606
|
-
PhoneOffIcon,
|
|
11607
|
-
PinIcon,
|
|
11608
|
-
PollIcon,
|
|
11609
|
-
PollsPanel,
|
|
11610
|
-
PreJoin,
|
|
11611
|
-
QaPanel,
|
|
11612
|
-
QualityBars,
|
|
11613
|
-
QuestionIcon,
|
|
11614
11479
|
REACTION_TTL_MS,
|
|
11615
11480
|
REFUSED_ABSENCE,
|
|
11616
11481
|
ROLE_RANK,
|
|
@@ -11618,30 +11483,13 @@ export {
|
|
|
11618
11483
|
ROOM_EVENT_PREFIX,
|
|
11619
11484
|
ROOM_TOKEN_HEADER,
|
|
11620
11485
|
RPCS,
|
|
11621
|
-
ReactionOverlay,
|
|
11622
|
-
RecordIcon,
|
|
11623
|
-
RecordingIndicator,
|
|
11624
11486
|
RecordingPlayer,
|
|
11625
|
-
ScheduleMeeting,
|
|
11626
|
-
ScreenShareIcon,
|
|
11627
|
-
SearchIcon,
|
|
11628
|
-
SettingsIcon,
|
|
11629
|
-
SettingsPanel,
|
|
11630
|
-
ShortcutsSheet,
|
|
11631
|
-
SignalIcon,
|
|
11632
|
-
SmileIcon,
|
|
11633
|
-
SparklesIcon,
|
|
11634
|
-
SpeakerIcon,
|
|
11635
|
-
SpotlightIcon,
|
|
11636
|
-
Stage,
|
|
11637
11487
|
TABLES,
|
|
11638
11488
|
TRANSCRIPTION_ATTRIBUTES,
|
|
11639
11489
|
TRANSCRIPTION_TOPIC,
|
|
11640
|
-
WhiteboardIcon,
|
|
11641
|
-
WhiteboardPanel,
|
|
11642
|
-
WifiLowIcon,
|
|
11643
11490
|
absenceSentence,
|
|
11644
11491
|
activeWrapUpSummary,
|
|
11492
|
+
activityAttention,
|
|
11645
11493
|
announceMeeting,
|
|
11646
11494
|
applyCollabPacket,
|
|
11647
11495
|
applyRoomEvent,
|
|
@@ -11658,6 +11506,7 @@ export {
|
|
|
11658
11506
|
attendanceTotals,
|
|
11659
11507
|
attendeeKey,
|
|
11660
11508
|
autoAssign,
|
|
11509
|
+
availableActivities,
|
|
11661
11510
|
breakoutRemainingMs,
|
|
11662
11511
|
callInviteAction,
|
|
11663
11512
|
callInviteText,
|
|
@@ -11730,6 +11579,8 @@ export {
|
|
|
11730
11579
|
mergeCaption,
|
|
11731
11580
|
mergeRecord,
|
|
11732
11581
|
microphoneNoticeCode,
|
|
11582
|
+
moveToRoom,
|
|
11583
|
+
nextTranslationBatch,
|
|
11733
11584
|
normalizeDeviceError,
|
|
11734
11585
|
normalizeMeetError,
|
|
11735
11586
|
normalizeSpoken,
|
|
@@ -11746,6 +11597,7 @@ export {
|
|
|
11746
11597
|
parseRoomToken,
|
|
11747
11598
|
participantAttributes,
|
|
11748
11599
|
participantSummary,
|
|
11600
|
+
performCollab,
|
|
11749
11601
|
playableRecordingFileId,
|
|
11750
11602
|
projectInvitee,
|
|
11751
11603
|
projectLibraryRecording,
|
|
@@ -11768,15 +11620,20 @@ export {
|
|
|
11768
11620
|
rootAttributes,
|
|
11769
11621
|
searchTranscript,
|
|
11770
11622
|
sendFollowUp,
|
|
11623
|
+
setCaptionLanguage,
|
|
11771
11624
|
setGuestRecordAccess,
|
|
11772
11625
|
settingsPatch,
|
|
11773
11626
|
snapshotParticipant,
|
|
11774
11627
|
snippetRuns,
|
|
11775
11628
|
staticObservation,
|
|
11776
11629
|
summarizeMeetingRecordRestrictions,
|
|
11630
|
+
takeMoveRequest,
|
|
11631
|
+
takePanelRequest,
|
|
11777
11632
|
transcriptDocument,
|
|
11778
11633
|
unavailableFrom,
|
|
11779
11634
|
uniqueAttendees,
|
|
11635
|
+
untranslatedLines,
|
|
11636
|
+
useActivityAttention,
|
|
11780
11637
|
useAudioLevel,
|
|
11781
11638
|
useAvailableActivities,
|
|
11782
11639
|
useCalls,
|
|
@@ -11801,6 +11658,7 @@ export {
|
|
|
11801
11658
|
useLocalUserId,
|
|
11802
11659
|
useMediaEffects,
|
|
11803
11660
|
useMeetAi,
|
|
11661
|
+
useMeetCore,
|
|
11804
11662
|
useMeetHost,
|
|
11805
11663
|
useMeetShortcuts,
|
|
11806
11664
|
useMeetSnapshot,
|