@snapcall/stream-ui 1.11.1 → 1.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/stream-ui.js CHANGED
@@ -1115,6 +1115,16 @@ const $3575c8a563f2a1da$export$4a210166cc9cb64b = async (src)=>{
1115
1115
 
1116
1116
 
1117
1117
  const $a62e7f17be5cf3a0$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)("StreamerMediasoup");
1118
+ const $a62e7f17be5cf3a0$var$SCREEN_SHARING_SIMULCAST_ENCODINGS = [
1119
+ {
1120
+ dtx: true,
1121
+ maxBitrate: 1500000
1122
+ },
1123
+ {
1124
+ dtx: true,
1125
+ maxBitrate: 6000000
1126
+ }
1127
+ ];
1118
1128
  function $a62e7f17be5cf3a0$var$deviceAutoDetection() {
1119
1129
  try {
1120
1130
  const ua = navigator.userAgent;
@@ -1231,6 +1241,30 @@ class $a62e7f17be5cf3a0$export$2e2bcd8739ae039 {
1231
1241
  if (direction === "send") return await this.createSendTransport(server);
1232
1242
  else return await this.createRecvTransport(server);
1233
1243
  }
1244
+ async produceAudio(transport, track, appData) {
1245
+ const producer = await transport.produce({
1246
+ track: track,
1247
+ codecOptions: {
1248
+ opusStereo: true,
1249
+ opusDtx: true
1250
+ },
1251
+ appData: appData
1252
+ });
1253
+ return producer;
1254
+ }
1255
+ async produceVideo(transport, track, appData) {
1256
+ const encodings = undefined;
1257
+ const codecOptions = {
1258
+ videoGoogleStartBitrate: 1000
1259
+ };
1260
+ const producer = await transport.produce({
1261
+ track: track,
1262
+ encodings: encodings,
1263
+ codecOptions: codecOptions,
1264
+ appData: appData
1265
+ });
1266
+ return producer;
1267
+ }
1234
1268
  }
1235
1269
 
1236
1270
 
@@ -1437,16 +1471,6 @@ const $1dedebd5ff3002eb$var$WEBCAM_SIMULCAST_ENCODINGS = [
1437
1471
  maxBitrate: 5000000
1438
1472
  }
1439
1473
  ];
1440
- const $1dedebd5ff3002eb$var$SCREEN_SHARING_SIMULCAST_ENCODINGS = [
1441
- {
1442
- dtx: true,
1443
- maxBitrate: 1500000
1444
- },
1445
- {
1446
- dtx: true,
1447
- maxBitrate: 6000000
1448
- }
1449
- ];
1450
1474
  class $1dedebd5ff3002eb$var$SnapcallEvent extends CustomEvent {
1451
1475
  // eslint-disable-next-line @typescript-eslint/no-useless-constructor
1452
1476
  constructor(name, data){
@@ -1503,7 +1527,6 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
1503
1527
  this.roomId = "";
1504
1528
  this.peerId = "";
1505
1529
  this.webcamProducer = null;
1506
- this.screenshareProducer = null;
1507
1530
  this.customMessages = new Map();
1508
1531
  this.audioRenderers = {};
1509
1532
  this.profile = {};
@@ -1965,7 +1988,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
1965
1988
  detail: {}
1966
1989
  });
1967
1990
  this.dispatchEvent(event);
1968
- await this.protoo.request("closeProducer", {
1991
+ if (this.protoo.connected) await this.protoo.request("closeProducer", {
1969
1992
  producerId: producerId
1970
1993
  });
1971
1994
  }
@@ -2108,7 +2131,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2108
2131
  this.protooTransport.close();
2109
2132
  this.protoo.close();
2110
2133
  this.micProducer?.close();
2111
- this.screenshareProducer?.close();
2134
+ this.screenshareVideoProducer?.close();
2112
2135
  this.webcamProducer?.close();
2113
2136
  this.consumers.forEach((consumer)=>{
2114
2137
  consumer.mediaSoupConsumer.close();
@@ -2210,7 +2233,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2210
2233
  this.consumers.forEach((consumer)=>{
2211
2234
  if (consumer.mediaSoupConsumer.kind === "video") videoCount++;
2212
2235
  });
2213
- if (this.screenshareProducer && !this.screenshareProducer.closed) videoCount++;
2236
+ if (this.screenshareVideoProducer && !this.screenshareVideoProducer.closed) videoCount++;
2214
2237
  let scale = {
2215
2238
  scaleResolutionDownBy: 1
2216
2239
  };
@@ -2442,7 +2465,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2442
2465
  async disableVideo() {
2443
2466
  if (!this.webcamProducer) return;
2444
2467
  this.webcamProducer.close();
2445
- await this.protoo.request("closeProducer", {
2468
+ if (this.protoo.connected) await this.protoo.request("closeProducer", {
2446
2469
  producerId: this.webcamProducer.id
2447
2470
  });
2448
2471
  this.webcamProducer = null;
@@ -2454,7 +2477,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2454
2477
  async enableScreenshare() {
2455
2478
  if (!this.permissions.find((permission)=>permission === "screen_sharing")) throw new Error("feature not allowed");
2456
2479
  const stream = await this.handleGetUserMediaError("screen", navigator.mediaDevices.getDisplayMedia({
2457
- audio: false,
2480
+ audio: true,
2458
2481
  video: {
2459
2482
  displaySurface: "monitor",
2460
2483
  logicalSurface: true,
@@ -2470,26 +2493,28 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2470
2493
  }
2471
2494
  }));
2472
2495
  if (!stream) return;
2473
- const transport = await this.getTransport("video", "send");
2474
- const track = stream.getVideoTracks()[0];
2475
- const encodings = undefined;
2476
- const codecOptions = {
2477
- videoGoogleStartBitrate: 1000
2478
- };
2479
- let deviceType = "screen";
2480
- this.screenshareProducer = await transport.produce({
2481
- track: track,
2482
- encodings: encodings,
2483
- codecOptions: codecOptions,
2484
- appData: {
2496
+ const deviceType = "screen";
2497
+ const audioTransport = await this.getTransport("audio", "send");
2498
+ const audioTrack = stream.getAudioTracks()[0];
2499
+ if (audioTrack) {
2500
+ this.screenshareAudioProducer = await this.streamerMediasoup?.produceAudio(audioTransport, audioTrack, {
2485
2501
  deviceType: deviceType,
2486
2502
  share: true
2487
- }
2503
+ });
2504
+ this.screenshareVideoProducer?.on("transportclose", ()=>{
2505
+ this.screenshareVideoProducer = undefined;
2506
+ });
2507
+ }
2508
+ const track = stream.getVideoTracks()[0];
2509
+ const videoTransport = await this.getTransport("video", "send");
2510
+ this.screenshareVideoProducer = await this.streamerMediasoup?.produceVideo(videoTransport, track, {
2511
+ deviceType: deviceType,
2512
+ share: true
2488
2513
  });
2489
- this.screenshareProducer.on("transportclose", ()=>{
2490
- this.screenshareProducer = null;
2514
+ this.screenshareVideoProducer?.on("transportclose", ()=>{
2515
+ this.screenshareVideoProducer = undefined;
2491
2516
  });
2492
- this.screenshareProducer.on("trackended", ()=>{
2517
+ this.screenshareVideoProducer?.on("trackended", ()=>{
2493
2518
  this.disableScreenshare().catch(()=>{});
2494
2519
  });
2495
2520
  const event = new $1dedebd5ff3002eb$var$SnapcallEvent("screenshareEnabled", {
@@ -2498,12 +2523,19 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2498
2523
  this.dispatchEvent(event);
2499
2524
  }
2500
2525
  async disableScreenshare() {
2501
- if (this.screenshareProducer) {
2502
- this.screenshareProducer.close();
2503
- await this.protoo.request("closeProducer", {
2504
- producerId: this.screenshareProducer.id
2526
+ if (this.screenshareVideoProducer) {
2527
+ this.screenshareVideoProducer.close();
2528
+ if (this.protoo.connected) await this.protoo.request("closeProducer", {
2529
+ producerId: this.screenshareVideoProducer.id
2530
+ });
2531
+ this.screenshareVideoProducer = undefined;
2532
+ }
2533
+ if (this.screenshareAudioProducer) {
2534
+ this.screenshareAudioProducer.close();
2535
+ if (this.protoo.connected) await this.protoo.request("closeProducer", {
2536
+ producerId: this.screenshareAudioProducer.id
2505
2537
  });
2506
- this.screenshareProducer = null;
2538
+ this.screenshareAudioProducer = undefined;
2507
2539
  }
2508
2540
  const event = new $1dedebd5ff3002eb$var$SnapcallEvent("screenshareDisabled", {
2509
2541
  detail: {}
@@ -2587,9 +2619,9 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2587
2619
  } else throw new Error("webcam producer not available yet");
2588
2620
  }
2589
2621
  requestLocalScreenshare(element) {
2590
- if (this.screenshareProducer) {
2622
+ if (this.screenshareVideoProducer) {
2591
2623
  const mediaStream = new MediaStream();
2592
- mediaStream.addTrack(this.screenshareProducer.track);
2624
+ mediaStream.addTrack(this.screenshareVideoProducer.track);
2593
2625
  element.srcObject = mediaStream;
2594
2626
  } else $1dedebd5ff3002eb$var$log.log("requestLocalScreenshare", "screenshare producer not available yet");
2595
2627
  }
@@ -2715,7 +2747,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2715
2747
  getDevicesState() {
2716
2748
  const microphoneEnabled = this.micProducer ? !this.micProducer.closed : false;
2717
2749
  const cameraEnabled = this.webcamProducer ? !this.webcamProducer.closed : false;
2718
- const screenshareEnabled = this.screenshareProducer ? !this.screenshareProducer.closed : false;
2750
+ const screenshareEnabled = this.screenshareVideoProducer ? !this.screenshareVideoProducer.closed : false;
2719
2751
  return {
2720
2752
  microphone: {
2721
2753
  enabled: microphoneEnabled,
@@ -10591,29 +10623,34 @@ function $48c2553f62767e40$export$2b77a92f1a5ad772(props) {
10591
10623
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10592
10624
  ...modalProps,
10593
10625
  ref: ref,
10594
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-white rounded-[10px] z-[1] overflow-auto focus:outline-none", modalSize[size]),
10626
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-white rounded-[10px] z-[1] overflow-x-auto focus:outline-none", modalSize[size]),
10595
10627
  style: {
10596
10628
  maxHeight: `${maxHeight}px`
10597
10629
  },
10598
10630
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10599
- className: "flex flex-col gap-5 px-5 py-[25px]",
10631
+ className: "flex flex-col gap-5 px-5 py-[25px] max-h-[inherit]",
10600
10632
  children: [
10601
10633
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10602
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex flex-col gap-[5px]", {
10603
- "text-center": centered
10604
- }),
10634
+ className: "flex flex-col gap-5 overflow-auto",
10605
10635
  children: [
10606
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
10607
- className: "text-xl font-medium",
10608
- children: title
10636
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10637
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex flex-col gap-[5px]", {
10638
+ "text-center": centered
10639
+ }),
10640
+ children: [
10641
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
10642
+ className: "text-xl font-medium",
10643
+ children: title
10644
+ }),
10645
+ description && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
10646
+ className: "text-sm text-secondary",
10647
+ children: description
10648
+ })
10649
+ ]
10609
10650
  }),
10610
- description && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
10611
- className: "text-sm text-secondary",
10612
- children: description
10613
- })
10651
+ children
10614
10652
  ]
10615
10653
  }),
10616
- children,
10617
10654
  (primaryAction || secondaryAction) && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10618
10655
  className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex justify-end gap-2.5", centered ? "justify-center" : "justify-end"),
10619
10656
  children: [
@@ -10771,6 +10808,44 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10771
10808
  state: state,
10772
10809
  centered: permissionsState !== "refused",
10773
10810
  isDismissable: false,
10811
+ primaryAction: ()=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {
10812
+ children: permissionsState === "refused" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10813
+ fullWidth: true,
10814
+ onPress: ()=>window.location.reload(),
10815
+ children: "Allow access"
10816
+ }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {
10817
+ children: permissionsState === "granted" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10818
+ fullWidth: true,
10819
+ onPress: state.close,
10820
+ children: "Okay"
10821
+ }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10822
+ fullWidth: true,
10823
+ isDisabled: permissionsState === "requesting" || isRoomReady === false,
10824
+ onPress: async ()=>{
10825
+ setPermissionsState("requesting");
10826
+ try {
10827
+ const mediaResult = await navigator.mediaDevices.getUserMedia({
10828
+ audio: true,
10829
+ video: true
10830
+ });
10831
+ mediaResult.getTracks().forEach((track)=>track.stop());
10832
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
10833
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo({
10834
+ resolution: "vga",
10835
+ frameRate: 20,
10836
+ facingMode: "environment"
10837
+ });
10838
+ } catch {
10839
+ setPermissionsState("refused");
10840
+ }
10841
+ },
10842
+ children: [
10843
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $41e530447f5fd995$export$2e2bcd8739ae039), {}),
10844
+ "Allow access to cam/mic"
10845
+ ]
10846
+ })
10847
+ })
10848
+ }),
10774
10849
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10775
10850
  className: "flex flex-col gap-[20px]",
10776
10851
  children: [
@@ -10893,39 +10968,6 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10893
10968
  muted: true,
10894
10969
  loop: true
10895
10970
  })
10896
- }),
10897
- permissionsState === "refused" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10898
- onPress: ()=>window.location.reload(),
10899
- children: "Allow access"
10900
- }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {
10901
- children: permissionsState === "granted" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10902
- onPress: state.close,
10903
- children: "Okay"
10904
- }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10905
- isDisabled: permissionsState === "requesting" || isRoomReady === false,
10906
- onPress: async ()=>{
10907
- setPermissionsState("requesting");
10908
- try {
10909
- const mediaResult = await navigator.mediaDevices.getUserMedia({
10910
- audio: true,
10911
- video: true
10912
- });
10913
- mediaResult.getTracks().forEach((track)=>track.stop());
10914
- await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
10915
- await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo({
10916
- resolution: "vga",
10917
- frameRate: 20,
10918
- facingMode: "environment"
10919
- });
10920
- } catch {
10921
- setPermissionsState("refused");
10922
- }
10923
- },
10924
- children: [
10925
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $41e530447f5fd995$export$2e2bcd8739ae039), {}),
10926
- "Allow access to cam/mic"
10927
- ]
10928
- })
10929
10971
  })
10930
10972
  ]
10931
10973
  })
@@ -10939,48 +10981,59 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10939
10981
 
10940
10982
 
10941
10983
 
10984
+
10985
+
10942
10986
  const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: setReady })=>{
10943
10987
  const QRCodeRef = (0, $jQDcL$react.useRef)(null);
10988
+ const { options: options } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
10989
+ const [QRCodeContainerRef, { width: QRCodeContainerWidth }] = (0, $56e1e7a85d8bf4bb$export$e295b0c537d32d7d)();
10944
10990
  (0, $jQDcL$react.useEffect)(()=>{
10945
- $jQDcL$qrcode.toCanvas(QRCodeRef.current, window.location.href, {
10946
- errorCorrectionLevel: "M"
10991
+ const url = options.sharedURL || window.location.href;
10992
+ $jQDcL$qrcode.toCanvas(QRCodeRef.current, url, {
10993
+ width: QRCodeContainerWidth > 300 ? 300 : QRCodeContainerWidth,
10994
+ errorCorrectionLevel: "Q",
10995
+ margin: 0
10947
10996
  });
10948
- }, []);
10949
- return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
10997
+ }, [
10998
+ QRCodeContainerWidth,
10999
+ options.sharedURL
11000
+ ]);
11001
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
10950
11002
  centered: true,
10951
11003
  title: "Switch to your mobile",
10952
11004
  description: "Enjoy an even more convenient experience by using your phone to take photos and record videos.",
11005
+ isDismissable: false,
10953
11006
  state: state,
10954
- children: [
10955
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10956
- className: "pb-[20px]",
10957
- children: [
10958
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10959
- className: "flex flex-1 items-center justify-center relative",
10960
- children: [
10961
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10962
- className: "absolute w-[70px] h-[70px]",
10963
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $8745dbdbe55f5ff3$export$2e2bcd8739ae039), {})
10964
- }),
10965
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("canvas", {
10966
- ref: QRCodeRef
10967
- })
10968
- ]
10969
- }),
10970
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
10971
- className: "flex items-center justify-center text-xs text-primaryLight",
10972
- children: "Scan this QR code with a compatible device."
10973
- })
10974
- ]
10975
- }),
10976
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11007
+ primaryAction: ()=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11008
+ fullWidth: true,
10977
11009
  onPress: ()=>{
10978
11010
  setReady(true);
10979
11011
  state.close();
10980
11012
  },
10981
11013
  children: "Use desktop version"
10982
- })
10983
- ]
11014
+ }),
11015
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11016
+ className: "flex flex-col gap-[20px]",
11017
+ children: [
11018
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11019
+ ref: QRCodeContainerRef,
11020
+ className: "flex flex-1 items-center justify-center relative",
11021
+ children: [
11022
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11023
+ className: "absolute w-1/3 h-1/3 max-w-[70px] max-h-[70px] flex items-center justify-center",
11024
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $8745dbdbe55f5ff3$export$2e2bcd8739ae039), {})
11025
+ }),
11026
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("canvas", {
11027
+ ref: QRCodeRef
11028
+ })
11029
+ ]
11030
+ }),
11031
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
11032
+ className: "flex items-center justify-center text-xs text-primaryLight text-center",
11033
+ children: "Scan this QR code with a compatible device."
11034
+ })
11035
+ ]
11036
+ })
10984
11037
  });
10985
11038
  };
10986
11039
 
@@ -11541,6 +11594,7 @@ const $47dee8347993fb81$export$53819c0e58f98d49 = (props)=>{
11541
11594
  };
11542
11595
 
11543
11596
 
11597
+
11544
11598
  const $7925c01e7577d264$var$timerText = (delta)=>{
11545
11599
  const d = [
11546
11600
  Math.floor(delta / 60),
@@ -11549,6 +11603,7 @@ const $7925c01e7577d264$var$timerText = (delta)=>{
11549
11603
  return d.join(":");
11550
11604
  };
11551
11605
  const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11606
+ const { options: options } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
11552
11607
  const [startRecordTime, setStartRecordTime] = (0, $jQDcL$react.useState)(undefined);
11553
11608
  const [timer, setTimer] = (0, $jQDcL$react.useState)(0);
11554
11609
  const [countdownVisible, setCountdownVisible] = (0, $jQDcL$react.useState)(false);
@@ -11563,7 +11618,9 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11563
11618
  });
11564
11619
  const sendAssetsModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
11565
11620
  const [flashAnimation, setFlashAnimation] = (0, $jQDcL$react.useState)(false);
11566
- const menuBarState = (0, $6f223c293b335d40$export$bd7b6af6aa16550c)({});
11621
+ const menuBarState = (0, $6f223c293b335d40$export$bd7b6af6aa16550c)({
11622
+ photo: options?.recorder?.defaultState !== "video"
11623
+ });
11567
11624
  const exitStreaming = (0, $jQDcL$react.useCallback)(()=>{
11568
11625
  menuBarState.setStreaming(false);
11569
11626
  setStartRecordTime(undefined);
@@ -11810,7 +11867,7 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: options })=>{
11810
11867
  const streamUIContainerRef = (0, $jQDcL$react.useRef)(null);
11811
11868
  const videosContainerRef = (0, $jQDcL$react.useRef)(null);
11812
11869
  const remoteTilesContainerRef = (0, $jQDcL$react.useRef)(null);
11813
- const [streamState, setStreamState] = (0, $jQDcL$react.useState)(options.recorder ? "recorder" : "streaming");
11870
+ const [streamState, setStreamState] = (0, $jQDcL$react.useState)(options.recorder?.enabled ? "recorder" : "streaming");
11814
11871
  const [isQuickConnectPopupVisible, setIsQuickConnectPopupVisible] = (0, $jQDcL$react.useState)(false);
11815
11872
  const [isSettingsMenuVisible, setIsSettingsMenuVisible] = (0, $jQDcL$react.useState)(false);
11816
11873
  const [isYoutubePopupVisible, setIsYoutubePopupVisible] = (0, $jQDcL$react.useState)(false);
@@ -11962,7 +12019,7 @@ const $ee8cb448c2c74888$var$StreamUI = ({ options: options })=>{
11962
12019
  setPermissions(event.detail.permissions);
11963
12020
  console.log(event.detail.permissions);
11964
12021
  setSelfPeerId(peerId);
11965
- if (!options.recorder) try {
12022
+ if (!options.recorder?.enabled) try {
11966
12023
  await (0, $c3d5253d9d597eb5$export$494039379563c94d)(options);
11967
12024
  setUserInteractionTriggered(true);
11968
12025
  } catch (userInteractionError) {
@@ -12478,18 +12535,18 @@ var $3305ca02e86dabd1$export$2e2bcd8739ae039 = $3305ca02e86dabd1$var$GreetingVie
12478
12535
 
12479
12536
 
12480
12537
  var $54541b0286afc2de$exports = {};
12481
- $54541b0286afc2de$exports = "*, :before, :after, ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #3b82f680;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n.visible {\n visibility: visible;\n}\n\n.fixed {\n position: fixed;\n}\n\n.absolute {\n position: absolute;\n}\n\n.relative {\n position: relative;\n}\n\n.inset-0 {\n inset: 0;\n}\n\n.left-0 {\n left: 0;\n}\n\n.top-0 {\n top: 0;\n}\n\n.z-50 {\n z-index: 50;\n}\n\n.z-\\[100\\] {\n z-index: 100;\n}\n\n.z-\\[1\\] {\n z-index: 1;\n}\n\n.m-\\[10px\\] {\n margin: 10px;\n}\n\n.mx-\\[20px\\] {\n margin-left: 20px;\n margin-right: 20px;\n}\n\n.ml-\\[10px\\] {\n margin-left: 10px;\n}\n\n.mt-\\[10px\\] {\n margin-top: 10px;\n}\n\n.mt-\\[50px\\] {\n margin-top: 50px;\n}\n\n.block {\n display: block;\n}\n\n.inline {\n display: inline;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.hidden {\n display: none;\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-\\[150px\\] {\n height: 150px;\n}\n\n.h-\\[60px\\] {\n height: 60px;\n}\n\n.h-\\[72px\\] {\n height: 72px;\n}\n\n.h-\\[56px\\] {\n height: 56px;\n}\n\n.h-\\[40px\\] {\n height: 40px;\n}\n\n.h-\\[235px\\] {\n height: 235px;\n}\n\n.h-\\[93px\\] {\n height: 93px;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n\n.h-\\[24px\\] {\n height: 24px;\n}\n\n.h-\\[30px\\] {\n height: 30px;\n}\n\n.h-\\[70px\\] {\n height: 70px;\n}\n\n.min-h-0 {\n min-height: 0;\n}\n\n.min-h-\\[100\\%\\] {\n min-height: 100%;\n}\n\n.w-full {\n width: 100%;\n}\n\n.w-\\[60px\\] {\n width: 60px;\n}\n\n.w-\\[72px\\] {\n width: 72px;\n}\n\n.w-\\[56px\\] {\n width: 56px;\n}\n\n.w-\\[76px\\] {\n width: 76px;\n}\n\n.w-screen {\n width: 100vw;\n}\n\n.w-\\[360px\\] {\n width: 360px;\n}\n\n.w-\\[400px\\] {\n width: 400px;\n}\n\n.w-\\[320px\\] {\n width: 320px;\n}\n\n.w-\\[24px\\] {\n width: 24px;\n}\n\n.w-\\[30px\\] {\n width: 30px;\n}\n\n.w-\\[70px\\] {\n width: 70px;\n}\n\n.min-w-\\[100\\%\\] {\n min-width: 100%;\n}\n\n.min-w-\\[24px\\] {\n min-width: 24px;\n}\n\n.max-w-\\[400px\\] {\n max-width: 400px;\n}\n\n.max-w-\\[600px\\] {\n max-width: 600px;\n}\n\n.max-w-\\[800px\\] {\n max-width: 800px;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n.flex-auto {\n flex: auto;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.translate-y-2 {\n --tw-translate-y: .5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-\\[200\\%\\] {\n --tw-translate-y: 200%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-full {\n --tw-translate-y: 100%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-\\[0\\.4\\] {\n --tw-scale-x: .4;\n --tw-scale-y: .4;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-x-\\[-1\\] {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.resize {\n resize: both;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.items-end {\n align-items: flex-end;\n}\n\n.items-center {\n align-items: center;\n}\n\n.justify-end {\n justify-content: flex-end;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.gap-\\[5px\\] {\n gap: 5px;\n}\n\n.gap-2\\.5 {\n gap: .625rem;\n}\n\n.gap-2 {\n gap: .5rem;\n}\n\n.gap-\\[10px\\] {\n gap: 10px;\n}\n\n.gap-5 {\n gap: 1.25rem;\n}\n\n.gap-\\[20px\\] {\n gap: 20px;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.rounded-lg {\n border-radius: .5rem;\n}\n\n.rounded-md {\n border-radius: .375rem;\n}\n\n.rounded-\\[15px\\] {\n border-radius: 15px;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-\\[5px\\] {\n border-radius: 5px;\n}\n\n.rounded-\\[60px\\] {\n border-radius: 60px;\n}\n\n.rounded-\\[10px\\] {\n border-radius: 10px;\n}\n\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n\n.rounded-\\[8px\\] {\n border-radius: 8px;\n}\n\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n\n.rounded-t-\\[15px\\] {\n border-top-left-radius: 15px;\n border-top-right-radius: 15px;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-secondaryLight {\n --tw-border-opacity: 1;\n border-color: rgb(179 179 179 / var(--tw-border-opacity));\n}\n\n.border-primaryLight {\n --tw-border-opacity: 1;\n border-color: rgb(86 86 86 / var(--tw-border-opacity));\n}\n\n.bg-primaryLight {\n --tw-bg-opacity: 1;\n background-color: rgb(86 86 86 / var(--tw-bg-opacity));\n}\n\n.bg-primary {\n --tw-bg-opacity: 1;\n background-color: rgb(29 28 32 / var(--tw-bg-opacity));\n}\n\n.bg-graySelected {\n --tw-bg-opacity: 1;\n background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.bg-transparent {\n background-color: #0000;\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-black\\/\\[\\.6\\] {\n background-color: #0009;\n}\n\n.bg-\\[\\#f12828\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(241 40 40 / var(--tw-bg-opacity));\n}\n\n.bg-\\[\\#565656\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(86 86 86 / var(--tw-bg-opacity));\n}\n\n.bg-black, .bg-\\[\\#000\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n\n.bg-\\[\\#FFFFFF\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-underlay {\n background-color: #00000040;\n}\n\n.bg-\\[\\#f3f3f3\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 243 243 / var(--tw-bg-opacity));\n}\n\n.bg-secondaryVLight {\n --tw-bg-opacity: 1;\n background-color: rgb(235 235 235 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-90 {\n --tw-bg-opacity: .9;\n}\n\n.object-cover {\n object-fit: cover;\n}\n\n.p-2\\.5 {\n padding: .625rem;\n}\n\n.p-2 {\n padding: .5rem;\n}\n\n.p-\\[3px\\] {\n padding: 3px;\n}\n\n.p-\\[12px\\] {\n padding: 12px;\n}\n\n.py-3 {\n padding-top: .75rem;\n padding-bottom: .75rem;\n}\n\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.py-\\[9px\\] {\n padding-top: 9px;\n padding-bottom: 9px;\n}\n\n.px-3\\.5 {\n padding-left: .875rem;\n padding-right: .875rem;\n}\n\n.px-3 {\n padding-left: .75rem;\n padding-right: .75rem;\n}\n\n.py-2 {\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\n.py-1\\.5 {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.px-2\\.5 {\n padding-left: .625rem;\n padding-right: .625rem;\n}\n\n.py-1 {\n padding-top: .25rem;\n padding-bottom: .25rem;\n}\n\n.px-2 {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.px-\\[10px\\] {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n\n.py-\\[25px\\] {\n padding-top: 25px;\n padding-bottom: 25px;\n}\n\n.px-\\[20px\\] {\n padding-left: 20px;\n padding-right: 20px;\n}\n\n.pt-2\\.5 {\n padding-top: .625rem;\n}\n\n.pt-2 {\n padding-top: .5rem;\n}\n\n.pb-2\\.5 {\n padding-bottom: .625rem;\n}\n\n.pb-2 {\n padding-bottom: .5rem;\n}\n\n.pb-\\[25px\\] {\n padding-bottom: 25px;\n}\n\n.pb-\\[20px\\] {\n padding-bottom: 20px;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-base {\n letter-spacing: -.02em;\n font-size: 16px;\n line-height: 19px;\n}\n\n.text-sm {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 17px;\n}\n\n.text-xs {\n letter-spacing: -.02em;\n font-size: 12px;\n line-height: 14px;\n}\n\n.text-\\[112px\\] {\n font-size: 112px;\n}\n\n.text-xl {\n letter-spacing: -.02em;\n font-size: 20px;\n line-height: 24px;\n}\n\n.text-lg {\n letter-spacing: -.02em;\n font-size: 18px;\n line-height: 22px;\n}\n\n.font-medium {\n font-weight: 500;\n}\n\n.font-bold {\n font-weight: 700;\n}\n\n.font-normal {\n font-weight: 400;\n}\n\n.leading-\\[20px\\] {\n line-height: 20px;\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-primary {\n --tw-text-opacity: 1;\n color: rgb(29 28 32 / var(--tw-text-opacity));\n}\n\n.text-white\\/80 {\n color: #fffc;\n}\n\n.text-secondary {\n --tw-text-opacity: 1;\n color: rgb(134 134 134 / var(--tw-text-opacity));\n}\n\n.text-primaryLight {\n --tw-text-opacity: 1;\n color: rgb(86 86 86 / var(--tw-text-opacity));\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n\n.underline {\n text-decoration-line: underline;\n}\n\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.opacity-0 {\n opacity: 0;\n}\n\n.opacity-50 {\n opacity: .5;\n}\n\n.opacity-\\[0\\.4\\] {\n opacity: .4;\n}\n\n.opacity-90 {\n opacity: .9;\n}\n\n.outline {\n outline-style: solid;\n}\n\n.ring-\\[3px\\] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-cta {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(38 138 250 / var(--tw-ring-opacity));\n}\n\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.transition-\\[transform\\,border-radius\\] {\n transition-property: transform, border-radius;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.duration-300 {\n transition-duration: .3s;\n}\n\n.ease-in-out {\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-in {\n transition-timing-function: cubic-bezier(.4, 0, 1, 1);\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.inter {\n font-family: Inter, sans-serif;\n}\n\n@supports (font-variation-settings: normal) {\n .inter {\n font-family: Inter var, sans-serif;\n }\n}\n\n.first-letter\\:capitalize:first-letter {\n text-transform: capitalize;\n}\n\n.focus\\:outline-none:focus {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.disabled\\:bg-secondaryLight:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(179 179 179 / var(--tw-bg-opacity));\n}\n\n.disabled\\:bg-graySelected:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.disabled\\:text-secondaryLight:disabled {\n --tw-text-opacity: 1;\n color: rgb(179 179 179 / var(--tw-text-opacity));\n}\n\n";
12538
+ $54541b0286afc2de$exports = "*, :before, :after, ::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: #3b82f680;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n.visible {\n visibility: visible;\n}\n\n.fixed {\n position: fixed;\n}\n\n.absolute {\n position: absolute;\n}\n\n.relative {\n position: relative;\n}\n\n.inset-0 {\n inset: 0;\n}\n\n.left-0 {\n left: 0;\n}\n\n.top-0 {\n top: 0;\n}\n\n.z-50 {\n z-index: 50;\n}\n\n.z-\\[100\\] {\n z-index: 100;\n}\n\n.z-\\[1\\] {\n z-index: 1;\n}\n\n.m-\\[10px\\] {\n margin: 10px;\n}\n\n.mx-\\[20px\\] {\n margin-left: 20px;\n margin-right: 20px;\n}\n\n.ml-\\[10px\\] {\n margin-left: 10px;\n}\n\n.mt-\\[10px\\] {\n margin-top: 10px;\n}\n\n.mt-\\[50px\\] {\n margin-top: 50px;\n}\n\n.block {\n display: block;\n}\n\n.inline {\n display: inline;\n}\n\n.flex {\n display: flex;\n}\n\n.table {\n display: table;\n}\n\n.hidden {\n display: none;\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-\\[150px\\] {\n height: 150px;\n}\n\n.h-\\[60px\\] {\n height: 60px;\n}\n\n.h-\\[72px\\] {\n height: 72px;\n}\n\n.h-\\[56px\\] {\n height: 56px;\n}\n\n.h-\\[40px\\] {\n height: 40px;\n}\n\n.h-\\[235px\\] {\n height: 235px;\n}\n\n.h-\\[93px\\] {\n height: 93px;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n\n.h-\\[24px\\] {\n height: 24px;\n}\n\n.h-\\[30px\\] {\n height: 30px;\n}\n\n.h-1\\/3 {\n height: 33.3333%;\n}\n\n.max-h-\\[inherit\\] {\n max-height: inherit;\n}\n\n.max-h-\\[70px\\] {\n max-height: 70px;\n}\n\n.min-h-0 {\n min-height: 0;\n}\n\n.min-h-\\[100\\%\\] {\n min-height: 100%;\n}\n\n.w-full {\n width: 100%;\n}\n\n.w-\\[60px\\] {\n width: 60px;\n}\n\n.w-\\[72px\\] {\n width: 72px;\n}\n\n.w-\\[56px\\] {\n width: 56px;\n}\n\n.w-\\[76px\\] {\n width: 76px;\n}\n\n.w-screen {\n width: 100vw;\n}\n\n.w-\\[360px\\] {\n width: 360px;\n}\n\n.w-\\[400px\\] {\n width: 400px;\n}\n\n.w-\\[320px\\] {\n width: 320px;\n}\n\n.w-\\[24px\\] {\n width: 24px;\n}\n\n.w-\\[30px\\] {\n width: 30px;\n}\n\n.w-1\\/3 {\n width: 33.3333%;\n}\n\n.min-w-\\[100\\%\\] {\n min-width: 100%;\n}\n\n.min-w-\\[24px\\] {\n min-width: 24px;\n}\n\n.max-w-\\[400px\\] {\n max-width: 400px;\n}\n\n.max-w-\\[600px\\] {\n max-width: 600px;\n}\n\n.max-w-\\[800px\\] {\n max-width: 800px;\n}\n\n.max-w-\\[70px\\] {\n max-width: 70px;\n}\n\n.flex-1 {\n flex: 1;\n}\n\n.flex-auto {\n flex: auto;\n}\n\n.flex-grow {\n flex-grow: 1;\n}\n\n.translate-y-2 {\n --tw-translate-y: .5rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-0 {\n --tw-translate-y: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-\\[200\\%\\] {\n --tw-translate-y: 200%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-y-full {\n --tw-translate-y: 100%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-\\[0\\.4\\] {\n --tw-scale-x: .4;\n --tw-scale-y: .4;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-x-\\[-1\\] {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.cursor-not-allowed {\n cursor: not-allowed;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.resize {\n resize: both;\n}\n\n.flex-row {\n flex-direction: row;\n}\n\n.flex-col {\n flex-direction: column;\n}\n\n.flex-wrap {\n flex-wrap: wrap;\n}\n\n.items-end {\n align-items: flex-end;\n}\n\n.items-center {\n align-items: center;\n}\n\n.justify-end {\n justify-content: flex-end;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.gap-\\[5px\\] {\n gap: 5px;\n}\n\n.gap-2\\.5 {\n gap: .625rem;\n}\n\n.gap-2 {\n gap: .5rem;\n}\n\n.gap-\\[10px\\] {\n gap: 10px;\n}\n\n.gap-5 {\n gap: 1.25rem;\n}\n\n.gap-\\[20px\\] {\n gap: 20px;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.overflow-x-auto {\n overflow-x: auto;\n}\n\n.rounded-lg {\n border-radius: .5rem;\n}\n\n.rounded-md {\n border-radius: .375rem;\n}\n\n.rounded-\\[15px\\] {\n border-radius: 15px;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-\\[5px\\] {\n border-radius: 5px;\n}\n\n.rounded-\\[60px\\] {\n border-radius: 60px;\n}\n\n.rounded-\\[10px\\] {\n border-radius: 10px;\n}\n\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n\n.rounded-\\[8px\\] {\n border-radius: 8px;\n}\n\n.rounded-\\[50\\%\\] {\n border-radius: 50%;\n}\n\n.rounded-t-\\[15px\\] {\n border-top-left-radius: 15px;\n border-top-right-radius: 15px;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-secondaryLight {\n --tw-border-opacity: 1;\n border-color: rgb(179 179 179 / var(--tw-border-opacity));\n}\n\n.border-primaryLight {\n --tw-border-opacity: 1;\n border-color: rgb(86 86 86 / var(--tw-border-opacity));\n}\n\n.bg-primaryLight {\n --tw-bg-opacity: 1;\n background-color: rgb(86 86 86 / var(--tw-bg-opacity));\n}\n\n.bg-primary {\n --tw-bg-opacity: 1;\n background-color: rgb(29 28 32 / var(--tw-bg-opacity));\n}\n\n.bg-graySelected {\n --tw-bg-opacity: 1;\n background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.bg-transparent {\n background-color: #0000;\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-black\\/\\[\\.6\\] {\n background-color: #0009;\n}\n\n.bg-\\[\\#f12828\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(241 40 40 / var(--tw-bg-opacity));\n}\n\n.bg-\\[\\#565656\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(86 86 86 / var(--tw-bg-opacity));\n}\n\n.bg-black, .bg-\\[\\#000\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-opacity));\n}\n\n.bg-\\[\\#FFFFFF\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n\n.bg-underlay {\n background-color: #00000040;\n}\n\n.bg-\\[\\#f3f3f3\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(243 243 243 / var(--tw-bg-opacity));\n}\n\n.bg-secondaryVLight {\n --tw-bg-opacity: 1;\n background-color: rgb(235 235 235 / var(--tw-bg-opacity));\n}\n\n.bg-opacity-90 {\n --tw-bg-opacity: .9;\n}\n\n.object-cover {\n object-fit: cover;\n}\n\n.p-2\\.5 {\n padding: .625rem;\n}\n\n.p-2 {\n padding: .5rem;\n}\n\n.p-\\[3px\\] {\n padding: 3px;\n}\n\n.p-\\[12px\\] {\n padding: 12px;\n}\n\n.py-3 {\n padding-top: .75rem;\n padding-bottom: .75rem;\n}\n\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.py-\\[9px\\] {\n padding-top: 9px;\n padding-bottom: 9px;\n}\n\n.px-3\\.5 {\n padding-left: .875rem;\n padding-right: .875rem;\n}\n\n.px-3 {\n padding-left: .75rem;\n padding-right: .75rem;\n}\n\n.py-2 {\n padding-top: .5rem;\n padding-bottom: .5rem;\n}\n\n.py-1\\.5 {\n padding-top: .375rem;\n padding-bottom: .375rem;\n}\n\n.px-2\\.5 {\n padding-left: .625rem;\n padding-right: .625rem;\n}\n\n.py-1 {\n padding-top: .25rem;\n padding-bottom: .25rem;\n}\n\n.px-2 {\n padding-left: .5rem;\n padding-right: .5rem;\n}\n\n.px-\\[10px\\] {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n\n.py-\\[25px\\] {\n padding-top: 25px;\n padding-bottom: 25px;\n}\n\n.px-\\[20px\\] {\n padding-left: 20px;\n padding-right: 20px;\n}\n\n.pt-2\\.5 {\n padding-top: .625rem;\n}\n\n.pt-2 {\n padding-top: .5rem;\n}\n\n.pb-2\\.5 {\n padding-bottom: .625rem;\n}\n\n.pb-2 {\n padding-bottom: .5rem;\n}\n\n.pb-\\[25px\\] {\n padding-bottom: 25px;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-base {\n letter-spacing: -.02em;\n font-size: 16px;\n line-height: 19px;\n}\n\n.text-sm {\n letter-spacing: -.02em;\n font-size: 14px;\n line-height: 17px;\n}\n\n.text-xs {\n letter-spacing: -.02em;\n font-size: 12px;\n line-height: 14px;\n}\n\n.text-\\[112px\\] {\n font-size: 112px;\n}\n\n.text-xl {\n letter-spacing: -.02em;\n font-size: 20px;\n line-height: 24px;\n}\n\n.text-lg {\n letter-spacing: -.02em;\n font-size: 18px;\n line-height: 22px;\n}\n\n.font-medium {\n font-weight: 500;\n}\n\n.font-bold {\n font-weight: 700;\n}\n\n.font-normal {\n font-weight: 400;\n}\n\n.leading-\\[20px\\] {\n line-height: 20px;\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n\n.text-primary {\n --tw-text-opacity: 1;\n color: rgb(29 28 32 / var(--tw-text-opacity));\n}\n\n.text-white\\/80 {\n color: #fffc;\n}\n\n.text-secondary {\n --tw-text-opacity: 1;\n color: rgb(134 134 134 / var(--tw-text-opacity));\n}\n\n.text-primaryLight {\n --tw-text-opacity: 1;\n color: rgb(86 86 86 / var(--tw-text-opacity));\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity));\n}\n\n.underline {\n text-decoration-line: underline;\n}\n\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.opacity-0 {\n opacity: 0;\n}\n\n.opacity-50 {\n opacity: .5;\n}\n\n.opacity-\\[0\\.4\\] {\n opacity: .4;\n}\n\n.opacity-90 {\n opacity: .9;\n}\n\n.outline {\n outline-style: solid;\n}\n\n.ring-\\[3px\\] {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n\n.ring-cta {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(38 138 250 / var(--tw-ring-opacity));\n}\n\n.blur {\n --tw-blur: blur(8px);\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter, backdrop-filter;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.transition-\\[transform\\,border-radius\\] {\n transition-property: transform, border-radius;\n transition-duration: .15s;\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.duration-300 {\n transition-duration: .3s;\n}\n\n.ease-in-out {\n transition-timing-function: cubic-bezier(.4, 0, .2, 1);\n}\n\n.ease-in {\n transition-timing-function: cubic-bezier(.4, 0, 1, 1);\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, .2, 1);\n}\n\n.inter {\n font-family: Inter, sans-serif;\n}\n\n@supports (font-variation-settings: normal) {\n .inter {\n font-family: Inter var, sans-serif;\n }\n}\n\n.first-letter\\:capitalize:first-letter {\n text-transform: capitalize;\n}\n\n.focus\\:outline-none:focus {\n outline-offset: 2px;\n outline: 2px solid #0000;\n}\n\n.disabled\\:bg-secondaryLight:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(179 179 179 / var(--tw-bg-opacity));\n}\n\n.disabled\\:bg-graySelected:disabled {\n --tw-bg-opacity: 1;\n background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.disabled\\:text-secondaryLight:disabled {\n --tw-text-opacity: 1;\n color: rgb(179 179 179 / var(--tw-text-opacity));\n}\n\n";
12482
12539
 
12483
12540
 
12484
12541
  var $9833f4335ab609cd$exports = {};
12485
12542
  $9833f4335ab609cd$exports = "*, :before, :after {\n box-sizing: border-box;\n border: 0 solid #e5e7eb;\n}\n\n:before, :after {\n --tw-content: \"\";\n}\n\nhtml {\n -webkit-text-size-adjust: 100%;\n tab-size: 4;\n font-feature-settings: normal;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;\n line-height: 1.5;\n}\n\nbody {\n line-height: inherit;\n margin: 0;\n}\n\nhr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n}\n\nabbr:where([title]) {\n text-decoration: underline dotted;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\nb, strong {\n font-weight: bolder;\n}\n\ncode, kbd, samp, pre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;\n font-size: 1em;\n}\n\nsmall {\n font-size: 80%;\n}\n\nsub, sup {\n vertical-align: baseline;\n font-size: 75%;\n line-height: 0;\n position: relative;\n}\n\nsub {\n bottom: -.25em;\n}\n\nsup {\n top: -.5em;\n}\n\ntable {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n}\n\nbutton, input, optgroup, select, textarea {\n font-family: inherit;\n font-size: 100%;\n font-weight: inherit;\n line-height: inherit;\n color: inherit;\n margin: 0;\n padding: 0;\n}\n\nbutton, select {\n text-transform: none;\n}\n\nbutton, [type=\"button\"], [type=\"reset\"], [type=\"submit\"] {\n -webkit-appearance: button;\n background-color: #0000;\n background-image: none;\n}\n\n:-moz-focusring {\n outline: auto;\n}\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type=\"search\"] {\n -webkit-appearance: textfield;\n outline-offset: -2px;\n}\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n font: inherit;\n}\n\nsummary {\n display: list-item;\n}\n\nblockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol, ul, menu {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\ninput::placeholder, textarea::placeholder {\n opacity: 1;\n color: #9ca3af;\n}\n\nbutton, [role=\"button\"] {\n cursor: pointer;\n}\n\n:disabled {\n cursor: default;\n}\n\nimg, svg, video, canvas, audio, iframe, embed, object {\n vertical-align: middle;\n display: block;\n}\n\nimg, video {\n max-width: 100%;\n height: auto;\n}\n\n[hidden] {\n display: none;\n}\n\n";
12486
12543
 
12487
12544
 
12488
- const $e68207026aca356b$var$currentURL = new URL(window.location.href);
12489
- const $e68207026aca356b$var$microphoneEnabled = $e68207026aca356b$var$currentURL.searchParams.get("microphone-enabled") !== "0";
12490
- const $e68207026aca356b$var$cameraEnabled = $e68207026aca356b$var$currentURL.searchParams.get("camera-enabled") === "1";
12491
12545
  const $e68207026aca356b$var$defaultOptions = {
12492
- recorder: false,
12546
+ recorder: {
12547
+ enabled: false,
12548
+ defaultState: "photo"
12549
+ },
12493
12550
  sharedURL: window.location.href,
12494
12551
  showMenuButton: true,
12495
12552
  settingsShortcuts: [
@@ -12501,11 +12558,11 @@ const $e68207026aca356b$var$defaultOptions = {
12501
12558
  controls: {
12502
12559
  microphone: {
12503
12560
  available: true,
12504
- enabled: $e68207026aca356b$var$microphoneEnabled
12561
+ enabled: true
12505
12562
  },
12506
12563
  camera: {
12507
12564
  available: true,
12508
- enabled: $e68207026aca356b$var$cameraEnabled
12565
+ enabled: false
12509
12566
  },
12510
12567
  screenshare: {
12511
12568
  available: true