@snapcall/stream-ui 1.11.5 → 1.12.0

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
@@ -19,10 +19,10 @@ var $jQDcL$qrcode = require("qrcode");
19
19
  var $jQDcL$reactstately = require("react-stately");
20
20
  var $jQDcL$classnames = require("classnames");
21
21
  var $jQDcL$reactaria = require("react-aria");
22
- var $jQDcL$reactariaoverlays = require("@react-aria/overlays");
23
22
  var $jQDcL$reactariautils = require("@react-aria/utils");
24
23
  var $jQDcL$reacttransitiongroup = require("react-transition-group");
25
24
  var $jQDcL$reactariainteractions = require("@react-aria/interactions");
25
+ var $jQDcL$reactariaoverlays = require("@react-aria/overlays");
26
26
  var $jQDcL$reactcontentloader = require("react-content-loader");
27
27
 
28
28
  function $parcel$interopDefault(a) {
@@ -472,6 +472,8 @@ const $91fcbf58e59aae79$export$84584c2a98eb6753 = {
472
472
  someone: "Someone",
473
473
  camera: "Camera",
474
474
  microphone: "Microphone",
475
+ photo: "Photo",
476
+ video: "Video",
475
477
  screen: "Screen",
476
478
  speaker: "Speaker",
477
479
  user: "User",
@@ -479,7 +481,10 @@ const $91fcbf58e59aae79$export$84584c2a98eb6753 = {
479
481
  from: "From",
480
482
  accept: "Accept",
481
483
  decline: "Decline",
482
- you: "You"
484
+ you: "You",
485
+ cancel: "Cancel",
486
+ confirm: "Confirm",
487
+ remove: "Remove"
483
488
  },
484
489
  greeting: {
485
490
  mainTitle: "Welcome to SnapCall",
@@ -489,6 +494,46 @@ const $91fcbf58e59aae79$export$84584c2a98eb6753 = {
489
494
  nameSubmit: "Join Conversation",
490
495
  footerTitle: "Powered by SnapCall",
491
496
  footerDescription: "Meet SnapCall, the easiest way to add real-time video to platform, product or service."
497
+ },
498
+ recorder: {
499
+ submissionTitle: "Thank you for your submission!",
500
+ submissionDescription: "Your photo/video has been successfully sent. We will review it and get back to you soon.",
501
+ confirmRemovalTitle: "Confirm removal",
502
+ confirmRemovalDescription: "Are you sure you want to remove this photo/video? This action cannot be undone.",
503
+ elementBeingProcessed: "Please wait a moment while your {{ type }} is being processed...",
504
+ waitVideo: "It may take up to 15 seconds for a video to be ready.",
505
+ elementCaptureSuccess: "{{ type }} successfully captured",
506
+ takeNewElement: "Take new {{ type }}",
507
+ sendElement: "Send {{ type }}",
508
+ sendElements: "Send {{ count }} elements",
509
+ allowAccess: "Allow access",
510
+ okay: "Okay",
511
+ allowCamMicAccess: "Allow access to cam/mic",
512
+ allowScreenShareAccess: "Allow access to screen sharing",
513
+ permissionDeniedTitle: "Something went wrong!",
514
+ permissionDeniedDescription: "Without camera and microphone access, you can't take photos or videos to share with the support team. Please grant access in your browser settings.",
515
+ photoInstructionsTitle: "Ready to take a shot?",
516
+ videoInstructionsTitle: "Ready to record a video?",
517
+ screenShareInstructionsTitle: "Ready to capture your screen?",
518
+ instructions: {
519
+ allowAccessOnPrompt: "When prompted, <1>allow access</1> to camera and microphone.",
520
+ tapPhotoButton: "Tap the <1 /><2> Camera button</2> to take a photo.",
521
+ multiplePhotos: "Don't hesitate to take multiple photos for more detail.",
522
+ reviewAndSendPhotos: "You can review your photo and then <1>send it when you're done.</1>",
523
+ tapVideoButton: "Tap the <1 /><2> Record button</2> to start a recording.",
524
+ videoSpeech: "You can <1>speak during</1> the recording for added detail.",
525
+ tapStopVideoButton: "When you're finished, tap the <1 /><2> Stop button</2>.",
526
+ reviewAndSendVideos: "You can review your video and then <1>send it when you're done</2>.",
527
+ tapScreenShareButton: "Tap on <1> Record my screen</1> to start a recording.",
528
+ tapStopScreenShareButton: "When you're finished, tap on <1>Stop recording</1>.",
529
+ reviewAnsSendScreenShare: "You can review your video and then <1>send it when you're done</1>."
530
+ },
531
+ switchToMobileTitle: "Switch to your mobile",
532
+ switchToMobileDescription: "Enjoy an even more convenient experience by using your phone to take photos and record videos.",
533
+ useDesktopVersion: "Use desktop version",
534
+ scanQRCode: "Scan this QR code with a compatible device.",
535
+ startScreenShareButton: "Record my screen",
536
+ stopScreenShareButton: "Stop recording"
492
537
  }
493
538
  }
494
539
  };
@@ -626,6 +671,8 @@ const $e52ca91c2b296e41$export$acb2a88f7d552ebf = {
626
671
  someone: "Quelqu'un",
627
672
  camera: "Cam\xe9ra",
628
673
  microphone: "Micro",
674
+ photo: "Photo",
675
+ video: "Vid\xe9o",
629
676
  screen: "\xc9cran",
630
677
  speaker: "Haut-parleur",
631
678
  user: "Utilisateur",
@@ -633,7 +680,10 @@ const $e52ca91c2b296e41$export$acb2a88f7d552ebf = {
633
680
  from: "Depuis",
634
681
  accept: "Accepter",
635
682
  decline: "D\xe9cliner",
636
- you: "Vous"
683
+ you: "Vous",
684
+ cancel: "Annuler",
685
+ confirm: "Confirmer",
686
+ remove: "Enlever"
637
687
  },
638
688
  greeting: {
639
689
  mainTitle: "Bienvenue sur SnapCall",
@@ -643,6 +693,46 @@ const $e52ca91c2b296e41$export$acb2a88f7d552ebf = {
643
693
  nameSubmit: "Rejoindre la conversation",
644
694
  footerTitle: "Propuls\xe9 par SnapCall",
645
695
  footerDescription: "D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n'importe quelle plateforme, produit ou service."
696
+ },
697
+ recorder: {
698
+ submissionTitle: "Merci pour votre soumission!",
699
+ submissionDescription: "Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l'examinerons et reviendrons vers vous bient\xf4t.",
700
+ confirmRemovalTitle: "Confirmer la suppression",
701
+ confirmRemovalDescription: "Voulez-vous vraiment supprimer cette photo/vid\xe9o? Cette action ne peut pas \xeatre annul\xe9e.",
702
+ elementBeingProcessed: "Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...",
703
+ waitVideo: "Cela peut prendre jusqu'\xe0 15 secondes pour qu'une vid\xe9o soit pr\xeate.",
704
+ elementCaptureSuccess: "{{ type }} captur\xe9e avec succ\xe8s",
705
+ takeNewElement: "Prendre une nouvelle {{ type }}",
706
+ sendElement: "Envoyer une {{ type }}",
707
+ sendElements: "Envoyer {{ count }} \xe9l\xe9ments",
708
+ allowAccess: "Permettre l'acc\xe8s",
709
+ okay: "D'accord",
710
+ allowCamMicAccess: "Autoriser l'acc\xe8s \xe0 la cam\xe9ra/au micro",
711
+ allowScreenShareAccess: "Autoriser l'acc\xe8s au partage d'\xe9cran",
712
+ permissionDeniedTitle: "Quelque chose s'est mal pass\xe9!",
713
+ permissionDeniedDescription: "Sans acc\xe8s \xe0 la cam\xe9ra et au microphone, vous ne pouvez pas prendre de photos ou de vid\xe9os \xe0 partager avec l'\xe9quipe d'assistance. Veuillez accorder l'acc\xe8s dans les param\xe8tres de votre navigateur.",
714
+ photoInstructionsTitle: "Pr\xeat \xe0 prendre une photo?",
715
+ videoInstructionsTitle: "Pr\xeat \xe0 enregistrer une vid\xe9o?",
716
+ screenShareInstructionsTitle: "Pr\xeat \xe0 capturer votre \xe9cran?",
717
+ instructions: {
718
+ allowAccessOnPrompt: "Lorsque vous y \xeates invit\xe9, <1>autorisez l'acc\xe8s</1> \xe0 la cam\xe9ra et au microphone.",
719
+ tapPhotoButton: "Appuyez sur le <1 /><2>bouton Appareil photo</2> pour prendre une photo.",
720
+ multiplePhotos: "N'h\xe9sitez pas \xe0 prendre plusieurs photos pour plus de d\xe9tails.",
721
+ reviewAndSendPhotos: "Vous pouvez revoir votre photo, puis <1>l'envoyer lorsque vous avez termin\xe9.</1>",
722
+ tapVideoButton: "Appuyez sur le <1 /><2>bouton d'enregistrement</2> pour d\xe9marrer un enregistrement.",
723
+ videoSpeech: "Vous pouvez <1>parler pendant</1> l'enregistrement pour plus de d\xe9tails.",
724
+ tapStopVideoButton: "Lorsque vous avez termin\xe9, appuyez sur le <1 /><2>bouton Arr\xeater</2>.",
725
+ reviewAndSendVideos: "Vous pouvez revoir votre vid\xe9o, puis <1>l'envoyer lorsque vous avez termin\xe9</2>.",
726
+ tapScreenShareButton: "Appuyez sur <1>Enregistrer mon \xe9cran</1> pour d\xe9marrer un enregistrement.",
727
+ tapStopScreenShareButton: "Lorsque vous avez termin\xe9, appuyez sur <1>Arr\xeater l'enregistrement</1>.",
728
+ reviewAnsSendScreenShare: "Vous pouvez revoir votre vid\xe9o, puis <1>l'envoyer lorsque vous avez termin\xe9</1>."
729
+ },
730
+ switchToMobileTitle: "Basculez vers votre mobile",
731
+ switchToMobileDescription: "Profitez d'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.",
732
+ useDesktopVersion: "Utiliser la version de bureau",
733
+ scanQRCode: "Scannez ce code QR avec un appareil compatible.",
734
+ startScreenShareButton: "Enregistrer mon \xe9cran",
735
+ stopScreenShareButton: "Arr\xeater d'enregistrer"
646
736
  }
647
737
  }
648
738
  };
@@ -784,6 +874,8 @@ const $e0ae3d23c2381da3$export$3486a10f30cf1ee4 = {
784
874
  someone: "Qualcuno",
785
875
  camera: "Telecamera",
786
876
  microphone: "Microfono",
877
+ photo: "Foto",
878
+ video: "Video",
787
879
  screen: "Schermo",
788
880
  speaker: "Altoparlante",
789
881
  user: "Utente",
@@ -791,7 +883,10 @@ const $e0ae3d23c2381da3$export$3486a10f30cf1ee4 = {
791
883
  from: "Da",
792
884
  accept: "Accettare",
793
885
  decline: "Declinare",
794
- you: "Voi"
886
+ you: "Voi",
887
+ cancel: "Annulla",
888
+ confirm: "Confermare",
889
+ remove: "Rimuovere"
795
890
  },
796
891
  greeting: {
797
892
  mainTitle: "Benvenuto a SnapCall",
@@ -801,6 +896,46 @@ const $e0ae3d23c2381da3$export$3486a10f30cf1ee4 = {
801
896
  nameSubmit: "Partecipa alla conversazione",
802
897
  footerTitle: "Offerto da SnapCall",
803
898
  footerDescription: "Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio."
899
+ },
900
+ recorder: {
901
+ submissionTitle: "Grazie per la vostra presentazione!",
902
+ submissionDescription: "La tua foto/video \xe8 stato inviato con successo. Lo esamineremo e ti ricontatteremo presto.",
903
+ confirmRemovalTitle: "Conferma la rimozione",
904
+ confirmRemovalDescription: "Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.",
905
+ elementBeingProcessed: "Attendi un momento mentre la tua {{ type }} \xe8 in fase di elaborazione...",
906
+ waitVideo: "Potrebbero essere necessari fino a 15 secondi prima che un video sia pronto.",
907
+ elementCaptureSuccess: "{{ type }} catturato con successo",
908
+ takeNewElement: "Scatta una nuova {{ type }}",
909
+ sendElement: "Invia una {{ type }}",
910
+ sendElements: "Invia {{ count }} elementi",
911
+ allowAccess: "Consentire l'accesso",
912
+ okay: "Va bene",
913
+ allowCamMicAccess: "Consenti l'accesso a cam/microfono",
914
+ allowScreenShareAccess: "Consenti l'accesso alla condivisione dello schermo",
915
+ permissionDeniedTitle: "Qualcosa \xe8 andato storto!",
916
+ permissionDeniedDescription: "Senza l'accesso alla fotocamera e al microfono, non puoi scattare foto o registrare video da condividere con il team di supporto. Concedi l'accesso nelle impostazioni del tuo browser.",
917
+ photoInstructionsTitle: "Pronto a fare un tentativo?",
918
+ videoInstructionsTitle: "Pronto a registrare un video?",
919
+ screenShareInstructionsTitle: "Pronto a catturare il tuo schermo?",
920
+ instructions: {
921
+ allowAccessOnPrompt: "Quando richiesto, <1>consenti l'accesso</1> alla videocamera e al microfono.",
922
+ tapPhotoButton: "Tocca il <1 /><2> pulsante Fotocamera</2> per scattare una foto.",
923
+ multiplePhotos: "Non esitate a scattare pi\xf9 foto per maggiori dettagli.",
924
+ reviewAndSendPhotos: "Puoi rivedere la tua foto e poi <1>inviarla quando hai finito.</1>",
925
+ tapVideoButton: "Tocca il <1 /><2> pulsante Registra</2> per avviare una registrazione.",
926
+ videoSpeech: "Puoi <1>parlare durante</1> la registrazione per ulteriori dettagli.",
927
+ tapStopVideoButton: "Al termine, tocca il <1 /><2> pulsante Interrompi</2>.",
928
+ reviewAndSendVideos: "Puoi rivedere il tuo video e poi <1>inviarlo quando hai finito</2>.",
929
+ tapScreenShareButton: "Tocca <1> Registra il mio schermo</1> per avviare una registrazione.",
930
+ tapStopScreenShareButton: "Al termine, tocca <1>Interrompi registrazione</1>.",
931
+ reviewAnsSendScreenShare: "Puoi rivedere il tuo video e poi <1>inviarlo quando hai finito</1>."
932
+ },
933
+ switchToMobileTitle: "Passa al tuo cellulare",
934
+ switchToMobileDescription: "Goditi un'esperienza ancora pi\xf9 comoda utilizzando il telefono per scattare foto e registrare video.",
935
+ useDesktopVersion: "Usa la versione desktop",
936
+ scanQRCode: "Scansiona questo codice QR con un dispositivo compatibile.",
937
+ startScreenShareButton: "Registra il mio schermo",
938
+ stopScreenShareButton: "Interrompi la registrazione"
804
939
  }
805
940
  }
806
941
  };
@@ -1444,6 +1579,49 @@ class $cb913ea078a876a6$export$2e2bcd8739ae039 {
1444
1579
  }
1445
1580
 
1446
1581
 
1582
+ const $93041e14f6aa3f24$var$audioContextConstructor = window.AudioContext || window.webkitAudioContext;
1583
+ class $93041e14f6aa3f24$export$22ddc20344c01547 {
1584
+ audioSources = {};
1585
+ tracks = {};
1586
+ constructor(){
1587
+ this.audioContext = new $93041e14f6aa3f24$var$audioContextConstructor();
1588
+ this.audioDestination = this.audioContext.createMediaStreamDestination();
1589
+ }
1590
+ getSetting(identifier) {
1591
+ return this.tracks[identifier]?.getSettings();
1592
+ }
1593
+ removeTrack(identifier) {
1594
+ const track = this.tracks[identifier];
1595
+ if (track) {
1596
+ this.audioSources[identifier]?.disconnect();
1597
+ delete this.tracks[identifier];
1598
+ delete this.audioSources[identifier];
1599
+ track.stop();
1600
+ }
1601
+ }
1602
+ addTrack(identifier, track) {
1603
+ if (track.kind === "audio") {
1604
+ this.removeTrack(identifier);
1605
+ const stream = new MediaStream([
1606
+ track
1607
+ ]);
1608
+ const audioSource = this.audioContext.createMediaStreamSource(stream);
1609
+ this.audioSources[identifier] = audioSource;
1610
+ this.tracks[identifier] = track;
1611
+ if (this.audioDestination) audioSource.connect(this.audioDestination);
1612
+ }
1613
+ }
1614
+ getFinalTrack() {
1615
+ return this.audioDestination.stream.getTracks()[0];
1616
+ }
1617
+ removeAll() {
1618
+ Object.keys(this.tracks).forEach((identifier)=>{
1619
+ this.removeTrack(identifier);
1620
+ });
1621
+ }
1622
+ }
1623
+
1624
+
1447
1625
  const $1dedebd5ff3002eb$var$log = new (0, $d0c6baf97675ab49$export$2e2bcd8739ae039)("StreamerClient");
1448
1626
  const $1dedebd5ff3002eb$export$103bedf43ba882db = {
1449
1627
  WEBRTC_FAILED: "WRTC1",
@@ -1983,6 +2161,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
1983
2161
  this.audioLevel?.release();
1984
2162
  this.audioLevel = undefined;
1985
2163
  if (this.micProducer && this.micProducer.track) {
2164
+ this.audioMedia?.removeTrack("mic");
1986
2165
  this.micProducer?.track?.stop();
1987
2166
  $1dedebd5ff3002eb$var$log.log("switchMicrophone", "stopping previous track");
1988
2167
  }
@@ -1995,7 +2174,9 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
1995
2174
  }));
1996
2175
  this.audioLevel = new (0, $6a90fae7e584afd4$export$ea669869acd8f177)(stream, this);
1997
2176
  // this.audioLevel.analyse();
2177
+ this.audioMedia = this.audioMedia || new (0, $93041e14f6aa3f24$export$22ddc20344c01547)();
1998
2178
  const track = stream.getAudioTracks()[0];
2179
+ this.audioMedia.addTrack("mic", track);
1999
2180
  await this.micProducer?.replaceTrack({
2000
2181
  track: track
2001
2182
  });
@@ -2071,10 +2252,12 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2071
2252
  const transport = await this.getTransport("audio", "send");
2072
2253
  this.audioLevel = new (0, $6a90fae7e584afd4$export$ea669869acd8f177)(stream, this);
2073
2254
  // this.audioLevel.analyse();
2255
+ this.audioMedia = this.audioMedia || new (0, $93041e14f6aa3f24$export$22ddc20344c01547)();
2074
2256
  const track = stream.getAudioTracks()[0];
2257
+ this.audioMedia.addTrack("mic", track);
2075
2258
  const deviceType = "microphone";
2076
2259
  const micProducer = await transport.produce({
2077
- track: track,
2260
+ track: this.audioMedia.getFinalTrack(),
2078
2261
  codecOptions: {
2079
2262
  opusStereo: true,
2080
2263
  opusDtx: true
@@ -2151,6 +2334,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2151
2334
  this.mediaPipe.clean();
2152
2335
  this.mediaPipe = undefined;
2153
2336
  }
2337
+ this.audioMedia?.removeAll();
2154
2338
  this.webcamTrack?.stop();
2155
2339
  this.webcamTrack = null;
2156
2340
  this.protooTransport.close();
@@ -2499,10 +2683,13 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2499
2683
  });
2500
2684
  this.dispatchEvent(event);
2501
2685
  }
2502
- async enableScreenshare() {
2686
+ async enableScreenshare(option = {
2687
+ audioTransportOption: "classic"
2688
+ }) {
2503
2689
  if (!this.permissions.find((permission)=>permission === "screen_sharing")) throw new Error("feature not allowed");
2690
+ if (option.audioTransportOption === "mix" && !this.micProducer) throw new Error("microphone not activated and audio mix transport requested");
2504
2691
  const stream = await this.handleGetUserMediaError("screen", navigator.mediaDevices.getDisplayMedia({
2505
- audio: true,
2692
+ audio: option.audioTransportOption !== "none",
2506
2693
  video: {
2507
2694
  displaySurface: "monitor",
2508
2695
  logicalSurface: true,
@@ -2522,13 +2709,23 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2522
2709
  const audioTransport = await this.getTransport("audio", "send");
2523
2710
  const audioTrack = stream.getAudioTracks()[0];
2524
2711
  if (audioTrack) {
2525
- this.screenshareAudioProducer = await this.streamerMediasoup?.produceAudio(audioTransport, audioTrack, {
2526
- deviceType: deviceType,
2527
- share: true
2528
- });
2529
- this.screenshareVideoProducer?.on("transportclose", ()=>{
2530
- this.screenshareVideoProducer = undefined;
2531
- });
2712
+ if (option.audioTransportOption === "classic") {
2713
+ this.screenshareAudioProducer = await this.streamerMediasoup?.produceAudio(audioTransport, audioTrack, {
2714
+ deviceType: deviceType,
2715
+ share: true
2716
+ });
2717
+ this.screenshareVideoProducer?.on("transportclose", ()=>{
2718
+ this.screenshareVideoProducer = undefined;
2719
+ });
2720
+ } else if (option.audioTransportOption === "mix") {
2721
+ this.audioMedia = this.audioMedia || new (0, $93041e14f6aa3f24$export$22ddc20344c01547)();
2722
+ this.audioMedia.addTrack("screen", audioTrack);
2723
+ const finalTracks = this.audioMedia.getFinalTrack();
2724
+ // currently microphone producer has to be enabled before.
2725
+ if (finalTracks && this.micProducer) this.micProducer.replaceTrack({
2726
+ track: finalTracks
2727
+ });
2728
+ }
2532
2729
  }
2533
2730
  const track = stream.getVideoTracks()[0];
2534
2731
  const videoTransport = await this.getTransport("video", "send");
@@ -2555,6 +2752,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2555
2752
  });
2556
2753
  this.screenshareVideoProducer = undefined;
2557
2754
  }
2755
+ this.audioMedia?.removeTrack("screen");
2558
2756
  if (this.screenshareAudioProducer) {
2559
2757
  this.screenshareAudioProducer.close();
2560
2758
  if (this.protoo.connected) await this.protoo.request("closeProducer", {
@@ -2852,7 +3050,7 @@ class $1dedebd5ff3002eb$export$2e2bcd8739ae039 extends $1dedebd5ff3002eb$var$Str
2852
3050
  return this.webcam;
2853
3051
  }
2854
3052
  getCurrentMicrophoneId() {
2855
- return this.micProducer?.track?.getSettings().deviceId;
3053
+ return this.audioMedia?.getSetting("mic") || this.micProducer?.track?.getSettings().deviceId;
2856
3054
  }
2857
3055
  getCurrentSpeakerId() {
2858
3056
  const audioRendererKeys = Object.keys(this.audioRenderers);
@@ -10526,6 +10724,8 @@ const $e3bb2c5d0e5b45b5$export$914ddf2021ea8ee6 = (0, ($parcel$interopDefault($j
10526
10724
 
10527
10725
 
10528
10726
 
10727
+
10728
+
10529
10729
 
10530
10730
 
10531
10731
 
@@ -10571,6 +10771,61 @@ const $6e29654b44f114e1$export$d2b052e7b4be1756 = /*#__PURE__*/ (0, $jQDcL$react
10571
10771
 
10572
10772
 
10573
10773
 
10774
+ const $6fa093aef38ba660$export$a703eb468fcf7e69 = (props)=>{
10775
+ const { state: state , children: children } = props;
10776
+ const ref = (0, $jQDcL$react.useRef)(null);
10777
+ const { modalProps: modalProps , underlayProps: underlayProps } = (0, $jQDcL$reactaria.useModalOverlay)({
10778
+ isDismissable: true,
10779
+ ...props
10780
+ }, state, ref);
10781
+ const [exited, setExited] = (0, $jQDcL$react.useState)(!state.isOpen);
10782
+ if (!(state.isOpen || !exited)) return null;
10783
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactaria.Overlay), {
10784
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacttransitiongroup.CSSTransition), {
10785
+ in: state.isOpen,
10786
+ appear: true,
10787
+ onEntered: ()=>setExited(false),
10788
+ onExited: ()=>setExited(true),
10789
+ timeout: {
10790
+ enter: 0,
10791
+ exit: 300
10792
+ },
10793
+ classNames: {
10794
+ enter: "opacity-0",
10795
+ enterDone: "opacity-1 transition ease-in",
10796
+ exit: "opacity-0 transition ease-out"
10797
+ },
10798
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10799
+ className: "fixed z-[100] inset-0 bg-black bg-opacity-90 flex justify-center items-center inter",
10800
+ ...underlayProps,
10801
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacttransitiongroup.CSSTransition), {
10802
+ in: state.isOpen,
10803
+ appear: true,
10804
+ nodeRef: ref,
10805
+ timeout: {
10806
+ enter: 0,
10807
+ exit: 300
10808
+ },
10809
+ classNames: {
10810
+ appear: "translate-y-2",
10811
+ appearDone: "translate-y-0 transition ease-in",
10812
+ exit: "translate-y-2 transition ease-out"
10813
+ },
10814
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10815
+ ...modalProps,
10816
+ ref: ref,
10817
+ children: children
10818
+ })
10819
+ })
10820
+ })
10821
+ })
10822
+ });
10823
+ };
10824
+
10825
+
10826
+
10827
+
10828
+
10574
10829
 
10575
10830
 
10576
10831
 
@@ -10586,6 +10841,7 @@ const $f98f91fb267f52c8$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $jQDcL$react
10586
10841
  primary: (0, ($parcel$interopDefault($jQDcL$classnames)))(isActive ? "bg-primaryLight" : "bg-primary", "text-white disabled:bg-secondaryLight"),
10587
10842
  secondary: (0, ($parcel$interopDefault($jQDcL$classnames)))(isActive ? "bg-graySelected" : "bg-transparent", "text-primary border border-secondaryLight disabled:text-secondaryLight disabled:bg-graySelected"),
10588
10843
  basic: (0, ($parcel$interopDefault($jQDcL$classnames)))(isActive ? "bg-graySelected" : "bg-white", "text-primary disabled:text-secondaryLight disabled:bg-graySelected"),
10844
+ tertiary: (0, ($parcel$interopDefault($jQDcL$classnames)))(isActive ? "bg-tertiarySelected" : "bg-tertiary", "text-mainBlue disabled:opacity-50"),
10589
10845
  custom: ""
10590
10846
  };
10591
10847
  const sizeStyle = {
@@ -10613,12 +10869,6 @@ const $f98f91fb267f52c8$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $jQDcL$react
10613
10869
 
10614
10870
  function $48c2553f62767e40$export$2b77a92f1a5ad772(props) {
10615
10871
  const { children: children , state: state , size: size = "small" , title: title , description: description , primaryAction: primaryAction , secondaryAction: secondaryAction , centered: centered = false } = props;
10616
- const ref = (0, ($parcel$interopDefault($jQDcL$react))).useRef(null);
10617
- const { modalProps: modalProps , underlayProps: underlayProps } = (0, $jQDcL$reactariaoverlays.useModalOverlay)({
10618
- isDismissable: true,
10619
- ...props
10620
- }, state, ref);
10621
- const [exited, setExited] = (0, $jQDcL$react.useState)(!state.isOpen);
10622
10872
  const viewport = (0, $jQDcL$reactariautils.useViewportSize)();
10623
10873
  const maxHeight = viewport.height - 64;
10624
10874
  const modalSize = {
@@ -10626,96 +10876,60 @@ function $48c2553f62767e40$export$2b77a92f1a5ad772(props) {
10626
10876
  medium: "max-w-[600px]",
10627
10877
  large: "max-w-[800px]"
10628
10878
  };
10629
- // Don't render anything if the modal is not open and we're not animating out.
10630
- if (!(state.isOpen || !exited)) return null;
10631
- return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactariaoverlays.Overlay), {
10632
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacttransitiongroup.CSSTransition), {
10633
- in: state.isOpen,
10634
- appear: true,
10635
- onEntered: ()=>setExited(false),
10636
- onExited: ()=>setExited(true),
10637
- timeout: {
10638
- enter: 0,
10639
- exit: 300
10640
- },
10641
- classNames: {
10642
- enter: "opacity-0",
10643
- enterDone: "opacity-1 transition ease-in",
10644
- exit: "opacity-0 transition ease-out"
10879
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6fa093aef38ba660$export$a703eb468fcf7e69), {
10880
+ state: state,
10881
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10882
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-white rounded-[10px] z-[1] overflow-x-auto focus:outline-none", modalSize[size]),
10883
+ style: {
10884
+ maxHeight: `${maxHeight}px`
10645
10885
  },
10646
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10647
- className: "fixed z-[100] inset-0 bg-black bg-opacity-90 flex justify-center items-center inter",
10648
- ...underlayProps,
10649
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reacttransitiongroup.CSSTransition), {
10650
- in: state.isOpen,
10651
- appear: true,
10652
- nodeRef: ref,
10653
- timeout: {
10654
- enter: 0,
10655
- exit: 300
10656
- },
10657
- classNames: {
10658
- appear: "translate-y-2",
10659
- appearDone: "translate-y-0 transition ease-in",
10660
- exit: "translate-y-2 transition ease-out"
10661
- },
10662
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
10663
- ...modalProps,
10664
- ref: ref,
10665
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-white rounded-[10px] z-[1] overflow-x-auto focus:outline-none", modalSize[size]),
10666
- style: {
10667
- maxHeight: `${maxHeight}px`
10668
- },
10669
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10670
- className: "flex flex-col gap-5 px-5 py-[25px] max-h-[inherit]",
10671
- children: [
10672
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10673
- className: "flex flex-col gap-5 overflow-auto",
10674
- children: [
10675
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10676
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex flex-col gap-[5px]", {
10677
- "text-center": centered
10678
- }),
10679
- children: [
10680
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
10681
- className: "text-xl font-medium",
10682
- children: title
10683
- }),
10684
- description && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
10685
- className: "text-sm text-secondary",
10686
- children: description
10687
- })
10688
- ]
10689
- }),
10690
- children
10691
- ]
10886
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10887
+ className: "flex flex-col gap-5 px-5 py-[25px] max-h-[inherit]",
10888
+ children: [
10889
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10890
+ className: "flex flex-col gap-5 overflow-auto",
10891
+ children: [
10892
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10893
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex flex-col gap-[5px]", {
10894
+ "text-center": centered
10692
10895
  }),
10693
- (primaryAction || secondaryAction) && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10694
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex justify-end gap-2.5", centered ? "justify-center" : "justify-end"),
10695
- children: [
10696
- typeof secondaryAction === "string" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10697
- variant: "secondary",
10698
- onPress: state.close,
10699
- fullWidth: centered,
10700
- children: secondaryAction
10701
- }),
10702
- typeof secondaryAction === "function" && secondaryAction({
10703
- close: state.close
10704
- }),
10705
- typeof primaryAction === "string" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10706
- onPress: state.close,
10707
- fullWidth: centered,
10708
- children: primaryAction
10709
- }),
10710
- typeof primaryAction === "function" && primaryAction({
10711
- close: state.close
10712
- })
10713
- ]
10714
- })
10715
- ]
10716
- })
10896
+ children: [
10897
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h2", {
10898
+ className: "text-xl font-medium",
10899
+ children: title
10900
+ }),
10901
+ description && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
10902
+ className: "text-sm text-secondary",
10903
+ children: description
10904
+ })
10905
+ ]
10906
+ }),
10907
+ children
10908
+ ]
10909
+ }),
10910
+ (primaryAction || secondaryAction) && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
10911
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex justify-end gap-2.5", centered ? "justify-center" : "justify-end"),
10912
+ children: [
10913
+ typeof secondaryAction === "string" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10914
+ variant: "secondary",
10915
+ onPress: state.close,
10916
+ fullWidth: centered,
10917
+ children: secondaryAction
10918
+ }),
10919
+ typeof secondaryAction === "function" && secondaryAction({
10920
+ close: state.close
10921
+ }),
10922
+ typeof primaryAction === "string" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10923
+ onPress: state.close,
10924
+ fullWidth: centered,
10925
+ children: primaryAction
10926
+ }),
10927
+ typeof primaryAction === "function" && primaryAction({
10928
+ close: state.close
10929
+ })
10930
+ ]
10717
10931
  })
10718
- })
10932
+ ]
10719
10933
  })
10720
10934
  })
10721
10935
  });
@@ -10811,32 +11025,39 @@ const $b46da51ab7ae33e7$var$InstructionRow = ({ children: children , index: inde
10811
11025
  ]
10812
11026
  });
10813
11027
  const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type })=>{
11028
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
10814
11029
  const [permissionsState, setPermissionsState] = (0, $jQDcL$react.useState)("idle");
11030
+ (0, $jQDcL$react.useEffect)(()=>{
11031
+ const { deviceState: deviceState } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getState();
11032
+ if (deviceState.screenshare.enabled && type === "screen") return setPermissionsState("granted");
11033
+ if (deviceState.camera.enabled && type !== "screen") return setPermissionsState("granted");
11034
+ setPermissionsState("idle");
11035
+ }, [
11036
+ type
11037
+ ]);
11038
+ const { deviceState: deviceState } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).getState();
10815
11039
  const [isRoomReady, setRoomReady] = (0, $jQDcL$react.useState)(false);
10816
11040
  const { orientation: orientation } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
10817
11041
  const device = orientation === "landscape" ? "desktop" : "mobile";
10818
11042
  const videoLength = permissionsState === "granted" ? "short" : "full";
10819
- const videoType = type === "picture" ? "photo" : "video";
10820
- const onDeviceEnabled = ()=>setPermissionsState("granted");
11043
+ const videoType = type === "photo" ? "photo" : "video";
10821
11044
  const onEnterRoom = ()=>setRoomReady(true);
10822
11045
  const onLeaveRoom = ()=>setRoomReady(false);
10823
11046
  const ref = (0, $jQDcL$react.useRef)(null);
10824
11047
  const title = (0, $jQDcL$react.useMemo)(()=>{
10825
- if (permissionsState === "refused") return "Something went wrong!";
10826
- if (type === "picture") return "Ready to take a shot?";
10827
- return "Ready to record a video?";
11048
+ if (permissionsState === "refused") return t("recorder.permissionDeniedTitle");
11049
+ if (type === "photo") return t("recorder.photoInstructionsTitle");
11050
+ else if (type === "video") return t("recorder.videoInstructionsTitle");
11051
+ else return t("recorder.screenShareInstructionsTitle");
10828
11052
  }, [
10829
11053
  permissionsState,
10830
- type
11054
+ type,
11055
+ t
10831
11056
  ]);
10832
11057
  (0, $jQDcL$react.useEffect)(()=>{
10833
- (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("localVideoAvailable", onDeviceEnabled);
10834
- (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("microphoneEnabled", onDeviceEnabled);
10835
11058
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("enterRoom", onEnterRoom);
10836
11059
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("leaveRoom", onLeaveRoom);
10837
11060
  return ()=>{
10838
- (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("localVideoAvailable", onDeviceEnabled);
10839
- (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("microphoneEnabled", onDeviceEnabled);
10840
11061
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("enterRoom", onEnterRoom);
10841
11062
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("leaveRoom", onLeaveRoom);
10842
11063
  };
@@ -10851,36 +11072,50 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10851
11072
  children: permissionsState === "refused" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10852
11073
  fullWidth: true,
10853
11074
  onPress: ()=>window.location.reload(),
10854
- children: "Allow access"
11075
+ children: t("recorder.allowAccess")
10855
11076
  }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $jQDcL$reactjsxruntime.Fragment), {
10856
11077
  children: permissionsState === "granted" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10857
11078
  fullWidth: true,
10858
11079
  onPress: state.close,
10859
- children: "Okay"
11080
+ children: t("recorder.okay")
10860
11081
  }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
10861
11082
  fullWidth: true,
10862
11083
  isDisabled: permissionsState === "requesting" || isRoomReady === false,
10863
11084
  onPress: async ()=>{
10864
11085
  setPermissionsState("requesting");
10865
11086
  try {
10866
- const mediaResult = await navigator.mediaDevices.getUserMedia({
10867
- audio: true,
10868
- video: true
10869
- });
10870
- mediaResult.getTracks().forEach((track)=>track.stop());
10871
- await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
10872
- await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo({
10873
- resolution: "vga",
10874
- frameRate: 20,
10875
- facingMode: "environment"
10876
- });
10877
- } catch {
11087
+ if (!deviceState.microphone.enabled) {
11088
+ const mediaResult = await navigator.mediaDevices.getUserMedia({
11089
+ audio: true,
11090
+ video: type !== "screen"
11091
+ });
11092
+ mediaResult.getTracks().forEach((track)=>track.stop());
11093
+ }
11094
+ if (!deviceState.microphone.enabled) await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableMicrophone();
11095
+ if (!deviceState.camera.enabled && type !== "screen") {
11096
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).disableScreenshare();
11097
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableVideo({
11098
+ resolution: "vga",
11099
+ frameRate: 20,
11100
+ facingMode: "environment"
11101
+ });
11102
+ }
11103
+ if (!deviceState.screenshare.enabled && type === "screen") {
11104
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).disableVideo();
11105
+ await (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).enableScreenshare({
11106
+ audioTransportOption: "mix"
11107
+ });
11108
+ }
11109
+ setPermissionsState("granted");
11110
+ state.close();
11111
+ } catch (error) {
11112
+ console.log("error", error);
10878
11113
  setPermissionsState("refused");
10879
11114
  }
10880
11115
  },
10881
11116
  children: [
10882
11117
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $41e530447f5fd995$export$2e2bcd8739ae039), {}),
10883
- "Allow access to cam/mic"
11118
+ type !== "screen" ? t("recorder.allowCamMicAccess") : t("recorder.allowScreenShareAccess")
10884
11119
  ]
10885
11120
  })
10886
11121
  })
@@ -10892,51 +11127,61 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10892
11127
  className: "flex flex-col gap-[10px]",
10893
11128
  ref: ref,
10894
11129
  children: permissionsState === "refused" ? /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
10895
- children: "Without camera and microphone access, you can't take photos or videos to share with the support team. Please grant access in your browser settings."
11130
+ children: t("recorder.permissionDeniedDescription")
10896
11131
  }) : /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
10897
11132
  children: [
10898
11133
  permissionsState !== "granted" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10899
11134
  index: 1,
10900
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10901
- children: [
10902
- "When prompted, ",
10903
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10904
- children: "allow access"
10905
- }),
10906
- " to camera and microphone."
10907
- ]
11135
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11136
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11137
+ i18nKey: "recorder.instructions.allowAccessOnPrompt",
11138
+ children: [
11139
+ "When prompted, ",
11140
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11141
+ children: "allow access"
11142
+ }),
11143
+ " to camera and microphone."
11144
+ ]
11145
+ })
10908
11146
  })
10909
11147
  }),
10910
- type === "picture" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
11148
+ type === "photo" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
10911
11149
  children: [
10912
11150
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10913
11151
  index: 1 + permissionsInstructionIndex,
10914
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10915
- children: [
10916
- "Tap the ",
10917
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$dce36e07153365d), {}),
10918
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10919
- children: " Camera button"
10920
- }),
10921
- " to take a photo."
10922
- ]
11152
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11153
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11154
+ i18nKey: "recorder.instructions.tapPhotoButton",
11155
+ com: true,
11156
+ children: [
11157
+ "Tap the ",
11158
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$dce36e07153365d), {}),
11159
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11160
+ children: " Camera button"
11161
+ }),
11162
+ " to take a photo."
11163
+ ]
11164
+ })
10923
11165
  })
10924
11166
  }),
10925
11167
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10926
11168
  index: 2 + permissionsInstructionIndex,
10927
11169
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
10928
- children: "Don't hesitate to take multiple photos for more detail."
11170
+ children: t("recorder.instructions.multiplePhotos")
10929
11171
  })
10930
11172
  }),
10931
11173
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10932
11174
  index: 3 + permissionsInstructionIndex,
10933
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10934
- children: [
10935
- "You can review your photo and then ",
10936
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10937
- children: "send it when you're done."
10938
- })
10939
- ]
11175
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11176
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11177
+ i18nKey: "recorder.instructions.reviewAndSendPhotos",
11178
+ children: [
11179
+ "You can review your photo and then ",
11180
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11181
+ children: "send it when you're done."
11182
+ })
11183
+ ]
11184
+ })
10940
11185
  })
10941
11186
  })
10942
11187
  ]
@@ -10945,52 +11190,128 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
10945
11190
  children: [
10946
11191
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10947
11192
  index: 1 + permissionsInstructionIndex,
10948
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10949
- children: [
10950
- "Tap the ",
10951
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$f9da3144ae2525a3), {}),
10952
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10953
- children: " Record button"
10954
- }),
10955
- " to start a recording."
10956
- ]
11193
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11194
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11195
+ i18nKey: "recorder.instructions.tapVideoButton",
11196
+ children: [
11197
+ "Tap the ",
11198
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$f9da3144ae2525a3), {}),
11199
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11200
+ children: " Record button"
11201
+ }),
11202
+ " to start a recording."
11203
+ ]
11204
+ })
10957
11205
  })
10958
11206
  }),
10959
11207
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10960
11208
  index: 2 + permissionsInstructionIndex,
10961
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10962
- children: [
10963
- "You can ",
10964
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10965
- children: "speak during"
10966
- }),
10967
- " the recording for added detail."
10968
- ]
11209
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11210
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11211
+ i18nKey: "recorder.instructions.videoSpeech",
11212
+ children: [
11213
+ "You can ",
11214
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11215
+ children: "speak during"
11216
+ }),
11217
+ " the recording for added detail."
11218
+ ]
11219
+ })
10969
11220
  })
10970
11221
  }),
10971
11222
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10972
11223
  index: 3 + permissionsInstructionIndex,
10973
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10974
- children: [
10975
- "When you're finished, tap the ",
10976
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$c6a849fd9d9d93a2), {}),
10977
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10978
- children: " Stop button"
10979
- }),
10980
- "."
10981
- ]
11224
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11225
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11226
+ i18nKey: "recorder.instructions.tapStopVideoButton",
11227
+ children: [
11228
+ "When you're finished, tap the ",
11229
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $bec7bca3a7448591$export$c6a849fd9d9d93a2), {}),
11230
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11231
+ children: " Stop button"
11232
+ }),
11233
+ "."
11234
+ ]
11235
+ })
10982
11236
  })
10983
11237
  }),
10984
11238
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
10985
11239
  index: 4 + permissionsInstructionIndex,
10986
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)($b46da51ab7ae33e7$var$Text, {
10987
- children: [
10988
- "You can review your video and then ",
10989
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
10990
- children: "send it when you're done"
10991
- }),
10992
- "."
10993
- ]
11240
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11241
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11242
+ i18nKey: "recorder.instructions.reviewAndSendVideos",
11243
+ children: [
11244
+ "You can review your video and then ",
11245
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11246
+ children: "send it when you're done"
11247
+ }),
11248
+ "."
11249
+ ]
11250
+ })
11251
+ })
11252
+ })
11253
+ ]
11254
+ }),
11255
+ type === "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
11256
+ children: [
11257
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
11258
+ index: 1 + permissionsInstructionIndex,
11259
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11260
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11261
+ i18nKey: "recorder.instructions.tapScreenShareButton",
11262
+ children: [
11263
+ "Tap on",
11264
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11265
+ children: " Record my screen"
11266
+ }),
11267
+ " to start a recording."
11268
+ ]
11269
+ })
11270
+ })
11271
+ }),
11272
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
11273
+ index: 2 + permissionsInstructionIndex,
11274
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11275
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11276
+ i18nKey: "recorder.instructions.videoSpeech",
11277
+ children: [
11278
+ "You can ",
11279
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11280
+ children: "speak during"
11281
+ }),
11282
+ " the recording for added detail."
11283
+ ]
11284
+ })
11285
+ })
11286
+ }),
11287
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
11288
+ index: 3 + permissionsInstructionIndex,
11289
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11290
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11291
+ i18nKey: "recorder.instructions.tapStopScreenShareButton",
11292
+ children: [
11293
+ "When you're finished, tap on ",
11294
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11295
+ children: "Stop recording"
11296
+ }),
11297
+ "."
11298
+ ]
11299
+ })
11300
+ })
11301
+ }),
11302
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$InstructionRow, {
11303
+ index: 4 + permissionsInstructionIndex,
11304
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Text, {
11305
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reacti18next.Trans), {
11306
+ i18nKey: "recorder.instructions.reviewAnsSendScreenShare",
11307
+ children: [
11308
+ "You can review your video and then ",
11309
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)($b46da51ab7ae33e7$var$Bold, {
11310
+ children: "send it when you're done"
11311
+ }),
11312
+ "."
11313
+ ]
11314
+ })
10994
11315
  })
10995
11316
  })
10996
11317
  ]
@@ -11022,7 +11343,9 @@ const $b46da51ab7ae33e7$export$788cb893d96254c8 = ({ state: state , type: type
11022
11343
 
11023
11344
 
11024
11345
 
11346
+
11025
11347
  const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: setReady })=>{
11348
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11026
11349
  const QRCodeRef = (0, $jQDcL$react.useRef)(null);
11027
11350
  const { options: options } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
11028
11351
  const [QRCodeContainerRef, { width: QRCodeContainerWidth }] = (0, $56e1e7a85d8bf4bb$export$e295b0c537d32d7d)();
@@ -11039,8 +11362,8 @@ const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: se
11039
11362
  ]);
11040
11363
  return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
11041
11364
  centered: true,
11042
- title: "Switch to your mobile",
11043
- description: "Enjoy an even more convenient experience by using your phone to take photos and record videos.",
11365
+ title: t("recorder.switchToMobileTitle"),
11366
+ description: t("recorder.switchToMobileDescription"),
11044
11367
  isDismissable: false,
11045
11368
  state: state,
11046
11369
  primaryAction: ()=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
@@ -11049,7 +11372,7 @@ const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: se
11049
11372
  setReady(true);
11050
11373
  state.close();
11051
11374
  },
11052
- children: "Use desktop version"
11375
+ children: t("recorder.useDesktopVersion")
11053
11376
  }),
11054
11377
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11055
11378
  className: "flex flex-col gap-[20px]",
@@ -11069,7 +11392,7 @@ const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: se
11069
11392
  }),
11070
11393
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("p", {
11071
11394
  className: "flex items-center justify-center text-xs text-primaryLight text-center",
11072
- children: "Scan this QR code with a compatible device."
11395
+ children: t("recorder.scanQRCode")
11073
11396
  })
11074
11397
  ]
11075
11398
  })
@@ -11080,29 +11403,21 @@ const $4dac51e936eb334f$export$f9d8408fefd786da = ({ state: state , setReady: se
11080
11403
  function $d7eacc710221ffb1$export$fc3bf4634b488af8({ mode: mode }) {
11081
11404
  const { orientation: orientation } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
11082
11405
  const desktop = orientation === "landscape";
11083
- const [ready, setReady] = (0, $jQDcL$react.useState)(!desktop);
11406
+ const [ready, setReady] = (0, $jQDcL$react.useState)(mode === "screen" || !desktop);
11407
+ const [isInstructionsModalOpen, setIsInstructionsModalOpen] = (0, $jQDcL$react.useState)(ready);
11408
+ const modalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({
11409
+ isOpen: isInstructionsModalOpen && ready,
11410
+ onOpenChange: setIsInstructionsModalOpen
11411
+ });
11084
11412
  (0, $jQDcL$react.useEffect)(()=>{
11085
- if (ready) {
11086
- setIsPhotoInstructionsModalOpen(mode === "photo" && ready);
11087
- setIsVideoInstructionsModalOpen(mode === "video" && ready);
11088
- }
11413
+ setIsInstructionsModalOpen(true);
11089
11414
  }, [
11090
11415
  ready,
11091
11416
  mode
11092
11417
  ]);
11093
- const [isPhotoInstructionsModalOpen, setIsPhotoInstructionsModalOpen] = (0, $jQDcL$react.useState)(mode === "photo" && ready);
11094
- const [isVideoInstructionsModalOpen, setIsVideoInstructionsModalOpen] = (0, $jQDcL$react.useState)(mode === "video" && ready);
11095
- const photoInstructionsModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({
11096
- isOpen: isPhotoInstructionsModalOpen,
11097
- onOpenChange: setIsPhotoInstructionsModalOpen
11098
- });
11099
- const videoInstructionsModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({
11100
- isOpen: isVideoInstructionsModalOpen,
11101
- onOpenChange: setIsVideoInstructionsModalOpen
11102
- });
11103
11418
  return {
11104
- photoInstructionsModalState: photoInstructionsModalState,
11105
- videoInstructionsModalState: videoInstructionsModalState,
11419
+ mode: mode,
11420
+ modalState: modalState,
11106
11421
  ready: ready,
11107
11422
  setReady: setReady
11108
11423
  };
@@ -11116,12 +11431,8 @@ const $d7eacc710221ffb1$export$bee10e8ab511933f = ({ state: state })=>{
11116
11431
  return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
11117
11432
  children: [
11118
11433
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $b46da51ab7ae33e7$export$788cb893d96254c8), {
11119
- state: state.photoInstructionsModalState,
11120
- type: "picture"
11121
- }),
11122
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $b46da51ab7ae33e7$export$788cb893d96254c8), {
11123
- state: state.videoInstructionsModalState,
11124
- type: "video"
11434
+ state: state.modalState,
11435
+ type: state.mode
11125
11436
  }),
11126
11437
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $4dac51e936eb334f$export$f9d8408fefd786da), {
11127
11438
  state: switchToMobileModalState,
@@ -11132,22 +11443,54 @@ const $d7eacc710221ffb1$export$bee10e8ab511933f = ({ state: state })=>{
11132
11443
  };
11133
11444
 
11134
11445
 
11135
- function $6f223c293b335d40$export$bd7b6af6aa16550c({ photo: photo = true }) {
11136
- const [isPhoto, setPhoto] = (0, $jQDcL$react.useState)(photo);
11446
+
11447
+
11448
+
11449
+ const $a55fb1fbe863b99c$export$4e594bceac139abd = (props)=>{
11450
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11451
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11452
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex rounded-full h-[40px] p-[10px] border-2 border-white text-white justify-center items-center align-middle", "font-semibold", "cursor-pointer", {
11453
+ "bg-[#f12828]": !props.state.streaming
11454
+ }),
11455
+ onClick: ()=>props.onCapturePress(),
11456
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11457
+ children: props.state.streaming ? t("recorder.stopScreenShareButton") : t("recorder.startScreenShareButton")
11458
+ })
11459
+ });
11460
+ };
11461
+ const $a55fb1fbe863b99c$export$f9da3144ae2525a3 = (props)=>{
11462
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11463
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-white rounded-full w-[72px] h-[72px] p-[3px]"),
11464
+ onClick: ()=>props.onCapturePress(),
11465
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11466
+ className: "bg-primary rounded-full w-full h-full p-[3px] flex items-center justify-center cursor-pointer",
11467
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11468
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("w-full h-full transition-[transform,border-radius] duration-300", props.state.mode === "photo" ? "bg-white" : "bg-[#f12828]", props.state.streaming ? "rounded-[5px] scale-[0.4]" : "rounded-[60px]")
11469
+ })
11470
+ })
11471
+ });
11472
+ };
11473
+
11474
+
11475
+ function $6f223c293b335d40$export$bd7b6af6aa16550c({ state: state = "photo" }) {
11476
+ const [currentMode, setMode] = (0, $jQDcL$react.useState)(state);
11137
11477
  const [streaming, setStreaming] = (0, $jQDcL$react.useState)(false);
11138
11478
  return {
11139
- photo: isPhoto,
11140
- setPhoto: setPhoto,
11479
+ mode: currentMode,
11480
+ setMode: (mode)=>{
11481
+ setMode(mode);
11482
+ },
11141
11483
  streaming: streaming,
11142
11484
  setStreaming: setStreaming
11143
11485
  };
11144
11486
  }
11145
11487
  const $6f223c293b335d40$export$11a6fe490bbc4873 = (props)=>{
11488
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11146
11489
  const setupModalsState = (0, $d7eacc710221ffb1$export$fc3bf4634b488af8)({
11147
- mode: props.state.photo ? "photo" : "video"
11490
+ mode: props.state.mode
11148
11491
  });
11149
11492
  return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11150
- className: "flex flex-col bg-primary h-[150px] w-full max-w-[400px] rounded-[15px] p-2.5 gap-2.5",
11493
+ className: "flex flex-col bg-primary h-[150px] w-full max-w-[500px] rounded-[15px] p-2.5 gap-2.5",
11151
11494
  children: [
11152
11495
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $d7eacc710221ffb1$export$bee10e8ab511933f), {
11153
11496
  state: setupModalsState
@@ -11168,25 +11511,39 @@ const $6f223c293b335d40$export$11a6fe490bbc4873 = (props)=>{
11168
11511
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11169
11512
  className: "flex flex-row justify-end flex-auto items-center gap-[10px] ",
11170
11513
  children: [
11171
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6e29654b44f114e1$export$d2b052e7b4be1756), {
11172
- onPress: ()=>{
11173
- if (!props.state.streaming) {
11174
- props.state.setPhoto(true);
11175
- setupModalsState.photoInstructionsModalState.open();
11176
- }
11177
- },
11178
- isSelected: props.state.photo,
11179
- children: "Photo"
11514
+ props.state.mode !== "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $jQDcL$reactjsxruntime.Fragment), {
11515
+ children: [
11516
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6e29654b44f114e1$export$d2b052e7b4be1756), {
11517
+ onPress: ()=>{
11518
+ if (!props.state.streaming) {
11519
+ props.state.setMode("photo");
11520
+ setupModalsState.modalState.open();
11521
+ }
11522
+ },
11523
+ isSelected: props.state.mode === "photo",
11524
+ children: t("misc.photo")
11525
+ }),
11526
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6e29654b44f114e1$export$d2b052e7b4be1756), {
11527
+ onPress: ()=>{
11528
+ if (!props.state.streaming) {
11529
+ props.state.setMode("video");
11530
+ setupModalsState.modalState.open();
11531
+ }
11532
+ },
11533
+ isSelected: props.state.mode === "video",
11534
+ children: t("misc.video")
11535
+ })
11536
+ ]
11180
11537
  }),
11181
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6e29654b44f114e1$export$d2b052e7b4be1756), {
11538
+ props.state.mode === "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6e29654b44f114e1$export$d2b052e7b4be1756), {
11182
11539
  onPress: ()=>{
11183
11540
  if (!props.state.streaming) {
11184
- props.state.setPhoto(false);
11185
- setupModalsState.videoInstructionsModalState.open();
11541
+ props.state.setMode("screen");
11542
+ setupModalsState.modalState.open();
11186
11543
  }
11187
11544
  },
11188
- isSelected: !props.state.photo,
11189
- children: "Video"
11545
+ isSelected: props.state.mode === "screen",
11546
+ children: t("misc.screen")
11190
11547
  })
11191
11548
  ]
11192
11549
  })
@@ -11199,20 +11556,18 @@ const $6f223c293b335d40$export$11a6fe490bbc4873 = (props)=>{
11199
11556
  className: "w-[60px] h-[60px]",
11200
11557
  children: props.thumbnail
11201
11558
  }),
11202
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11203
- className: "bg-white rounded-full w-[72px] h-[72px] p-[3px]",
11204
- onClick: ()=>props.onCapturePress(),
11205
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11206
- className: "bg-primary rounded-full w-full h-full p-[3px] flex items-center justify-center cursor-pointer",
11207
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11208
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("w-full h-full transition-[transform,border-radius] duration-300", props.state.photo ? "bg-white" : "bg-[#f12828]", props.state.streaming ? "rounded-[5px] scale-[0.4]" : "rounded-[60px]")
11209
- })
11210
- })
11559
+ props.state.mode === "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a55fb1fbe863b99c$export$4e594bceac139abd), {
11560
+ ...props
11561
+ }),
11562
+ props.state.mode !== "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $a55fb1fbe863b99c$export$f9da3144ae2525a3), {
11563
+ ...props
11211
11564
  }),
11212
11565
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11213
11566
  onClick: props.onSwitch,
11214
- className: "bg-[#565656] rounded-full w-[56px] h-[56px] flex items-center justify-center cursor-pointer",
11215
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ec8eb252693ca260$export$aefffb14595958fe), {})
11567
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("rounded-full w-[56px] h-[56px] flex items-center justify-center", {
11568
+ "bg-[#565656] cursor-pointer": props.state.mode !== "screen"
11569
+ }),
11570
+ children: props.state.mode !== "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $ec8eb252693ca260$export$aefffb14595958fe), {})
11216
11571
  })
11217
11572
  ]
11218
11573
  })
@@ -11232,6 +11587,7 @@ const $6f223c293b335d40$export$11a6fe490bbc4873 = (props)=>{
11232
11587
 
11233
11588
 
11234
11589
 
11590
+
11235
11591
  function $14fb55a0ce44e022$export$4589ed81930b555c(props) {
11236
11592
  const { children: children , state: state } = props;
11237
11593
  const ref = (0, ($parcel$interopDefault($jQDcL$react))).useRef(null);
@@ -11299,6 +11655,8 @@ function $14fb55a0ce44e022$export$4589ed81930b555c(props) {
11299
11655
 
11300
11656
 
11301
11657
 
11658
+
11659
+
11302
11660
  const $f4dfc8739f142557$export$480db61f4dcd7727 = ()=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("svg", {
11303
11661
  width: "12",
11304
11662
  height: "15",
@@ -11355,26 +11713,61 @@ const $b0f41bfff6a6128d$export$28e1ba20e0688eb7 = ()=>/*#__PURE__*/ (0, $jQDcL$r
11355
11713
  });
11356
11714
 
11357
11715
 
11358
- const $1571ff3dce984dbd$var$dateFormat = new Intl.DateTimeFormat("default", {
11359
- dateStyle: "short"
11360
- });
11361
- const $1571ff3dce984dbd$var$timeFormat = new Intl.DateTimeFormat("default", {
11362
- hour: "numeric",
11363
- minute: "2-digit"
11364
- });
11365
- function $1571ff3dce984dbd$var$formatDate(date) {
11366
- const ampm = date.getHours() % 12 >= 12 ? "PM" : "AM";
11367
- return `${$1571ff3dce984dbd$var$dateFormat.format(date)} at ${$1571ff3dce984dbd$var$timeFormat.format(date)} ${ampm}`;
11368
- }
11716
+
11717
+
11718
+
11719
+ const $af5bf6f1b1afdb63$export$f56b3b5841ad32ae = ({ asset: asset , state: state })=>{
11720
+ return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6fa093aef38ba660$export$a703eb468fcf7e69), {
11721
+ state: state,
11722
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11723
+ className: "flex flex-col items-center w-screen h-screen p-[15px] gap-[10px]",
11724
+ children: [
11725
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11726
+ className: "flex items-center max-w-[400px] w-full h-full",
11727
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11728
+ className: "min-w-full rounded-[10px] overflow-hidden",
11729
+ children: [
11730
+ asset.type === "picture" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("img", {
11731
+ src: asset.objectUrl,
11732
+ alt: `Asset-${asset.assetId}`,
11733
+ className: "object-fill"
11734
+ }),
11735
+ asset.type === "video" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
11736
+ src: asset.objectUrl,
11737
+ playsInline: true,
11738
+ autoPlay: true,
11739
+ controls: true
11740
+ })
11741
+ ]
11742
+ })
11743
+ }),
11744
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11745
+ className: "max-w-[135px] w-1/3",
11746
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11747
+ onPress: state.close,
11748
+ variant: "tertiary",
11749
+ size: "large",
11750
+ fullWidth: true,
11751
+ children: "Close"
11752
+ })
11753
+ })
11754
+ ]
11755
+ })
11756
+ });
11757
+ };
11758
+
11759
+
11369
11760
  const $1571ff3dce984dbd$export$c9169049516d8bcf = ({ asset: asset , index: index , removeAsset: removeAsset })=>{
11761
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11370
11762
  const confirmRemovalModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
11763
+ const previewAssetModalProps = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
11371
11764
  return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11372
11765
  className: "flex flex-row justify-between items-center",
11373
11766
  children: [
11374
11767
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
11375
- title: "Confirm removal",
11768
+ title: t("recorder.confirmRemovalTitle"),
11376
11769
  state: confirmRemovalModalState,
11377
- description: "Are you sure you want to remove this photo/video? This action cannot be undone.",
11770
+ description: t("recorder.confirmRemovalDescription"),
11378
11771
  primaryAction: ({ close: close })=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11379
11772
  onPress: async ()=>{
11380
11773
  await removeAsset(asset);
@@ -11382,29 +11775,34 @@ const $1571ff3dce984dbd$export$c9169049516d8bcf = ({ asset: asset , index: index
11382
11775
  },
11383
11776
  children: [
11384
11777
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $b0f41bfff6a6128d$export$28e1ba20e0688eb7), {}),
11385
- "Confirm"
11778
+ t("misc.confirm")
11386
11779
  ]
11387
11780
  }),
11388
- secondaryAction: "Cancel"
11781
+ secondaryAction: t("misc.cancel")
11389
11782
  }),
11390
11783
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11391
11784
  className: "flex flex-row gap-[10px] items-center",
11392
11785
  children: [
11393
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $dc46069ab394f8fc$export$1cd1efc78cb52ca5), {
11786
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $af5bf6f1b1afdb63$export$f56b3b5841ad32ae), {
11787
+ state: previewAssetModalProps,
11394
11788
  asset: asset
11395
11789
  }),
11790
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $dc46069ab394f8fc$export$1cd1efc78cb52ca5), {
11791
+ asset: asset,
11792
+ onClick: previewAssetModalProps.open
11793
+ }),
11396
11794
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("span", {
11397
11795
  className: "text-sm",
11398
11796
  style: {
11399
11797
  hyphens: "manual"
11400
11798
  },
11401
11799
  children: [
11402
- asset.type === "picture" ? "Photo" : "Video",
11800
+ asset.type === "picture" ? t("misc.photo") : t("misc.video"),
11403
11801
  " ",
11404
11802
  index + 1,
11405
11803
  " \xb7",
11406
11804
  " ",
11407
- $1571ff3dce984dbd$var$formatDate(new Date(asset.timestamp))
11805
+ (0, $7925c01e7577d264$export$3ae94a2503e890a1)(new Date(asset.timestamp))
11408
11806
  ]
11409
11807
  })
11410
11808
  ]
@@ -11412,7 +11810,7 @@ const $1571ff3dce984dbd$export$c9169049516d8bcf = ({ asset: asset , index: index
11412
11810
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
11413
11811
  className: "text-xs font-bold underline cursor-pointer ml-[10px]",
11414
11812
  onClick: confirmRemovalModalState.open,
11415
- children: "Remove"
11813
+ children: t("misc.remove")
11416
11814
  })
11417
11815
  ]
11418
11816
  }, asset.assetId);
@@ -11495,6 +11893,7 @@ const $aaab1e39040d455b$export$4fa52f68b1c78fbf = ()=>/*#__PURE__*/ (0, $jQDcL$r
11495
11893
 
11496
11894
 
11497
11895
  const $0bca8bbbf74ddff9$export$5c334f209b1aa661 = ({ assets: assets , state: state , onSendAssets: onSendAssets , removeAsset: removeAsset , loading: loading })=>{
11896
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11498
11897
  const ref = (0, $jQDcL$react.useRef)(null);
11499
11898
  const [assetKind, setAssetKind] = (0, $jQDcL$react.useState)(assets[assets.length - 1]?.type === "picture" ? "photo" : "video");
11500
11899
  const { orientation: orientation } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
@@ -11522,7 +11921,7 @@ const $0bca8bbbf74ddff9$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11522
11921
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11523
11922
  className: (0, ($parcel$interopDefault($jQDcL$classnames)))("fixed justify-center w-screen h-screen top-0 left-0 bg-black z-[1]", state.isOpen ? "flex" : "hidden"),
11524
11923
  children: loading && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11525
- className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex mt-[50px] h-fit opacity-1", desktop ? "flex-row items-center w-[400px]" : "flex-col items-center text-center w-[320px]"),
11924
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("flex mt-[50px] h-fit opacity-1", desktop ? "flex-row items-center w-[450px]" : "flex-col items-center text-center w-[320px]"),
11526
11925
  children: [
11527
11926
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11528
11927
  className: "w-[24px] h-[24px] m-[10px]",
@@ -11531,10 +11930,10 @@ const $0bca8bbbf74ddff9$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11531
11930
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("span", {
11532
11931
  className: "text-sm text-white",
11533
11932
  children: [
11534
- "Please wait a moment while your ",
11535
- loading,
11536
- " is being processed...",
11537
- loading === "video" ? " It may take up to 15 seconds for a video to be ready." : ""
11933
+ t("recorder.elementBeingProcessed", {
11934
+ type: loading === "picture" ? t("misc.photo").toLocaleLowerCase() : t("misc.video").toLocaleLowerCase()
11935
+ }),
11936
+ loading === "video" && t("recorder.waitVideo")
11538
11937
  ]
11539
11938
  })
11540
11939
  ]
@@ -11553,12 +11952,11 @@ const $0bca8bbbf74ddff9$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11553
11952
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11554
11953
  className: "flex flex-row justify-between p-[12px]",
11555
11954
  children: [
11556
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("h1", {
11955
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("h1", {
11557
11956
  className: "text-lg first-letter:capitalize",
11558
- children: [
11559
- assetKind,
11560
- " successfully captured"
11561
- ]
11957
+ children: t("recorder.elementCaptureSuccess", {
11958
+ type: t(`misc.${assetKind}`)
11959
+ })
11562
11960
  }),
11563
11961
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11564
11962
  className: "flex justify-center items-center rounded-full bg-[#f3f3f3] h-[30px] w-[30px] cursor-pointer",
@@ -11577,23 +11975,23 @@ const $0bca8bbbf74ddff9$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11577
11975
  index: index,
11578
11976
  removeAsset: removeAsset
11579
11977
  }, asset.assetId)),
11580
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11978
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11581
11979
  variant: "secondary",
11582
11980
  onPress: state.close,
11583
- children: [
11584
- "Take new ",
11585
- assetKind
11586
- ]
11981
+ children: t("recorder.takeNewElement", {
11982
+ type: t(`misc.${assetKind}`).toLocaleLowerCase()
11983
+ })
11587
11984
  }),
11588
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11985
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $f98f91fb267f52c8$export$353f5b6fc5456de1), {
11589
11986
  onPress: ()=>{
11590
11987
  onSendAssets();
11591
11988
  state.close();
11592
11989
  },
11593
- children: [
11594
- "Send ",
11595
- assets.length > 1 ? `${assets.length} elements` : assetKind
11596
- ]
11990
+ children: assets.length > 1 ? t("recorder.sendElements", {
11991
+ count: assets.length
11992
+ }) : t("recorder.sendElement", {
11993
+ type: t(`misc.${assetKind}`).toLocaleLowerCase()
11994
+ })
11597
11995
  })
11598
11996
  ]
11599
11997
  })
@@ -11641,7 +12039,18 @@ const $7925c01e7577d264$var$timerText = (delta)=>{
11641
12039
  ].map((n)=>`${n < 10 ? "0" : ""}${n}`);
11642
12040
  return d.join(":");
11643
12041
  };
12042
+ const $7925c01e7577d264$var$dateFormat = new Intl.DateTimeFormat("default", {
12043
+ dateStyle: "short"
12044
+ });
12045
+ const $7925c01e7577d264$var$timeFormat = new Intl.DateTimeFormat("default", {
12046
+ hour: "numeric",
12047
+ minute: "2-digit"
12048
+ });
12049
+ function $7925c01e7577d264$export$3ae94a2503e890a1(date) {
12050
+ return `${$7925c01e7577d264$var$dateFormat.format(date)} at ${$7925c01e7577d264$var$timeFormat.format(date)}`;
12051
+ }
11644
12052
  const $7925c01e7577d264$export$336a011955157f9a = ()=>{
12053
+ const { t: t } = (0, $jQDcL$reacti18next.useTranslation)();
11645
12054
  const { options: options } = (0, $jQDcL$react.useContext)((0, $8b39f32976a7698a$export$2e2bcd8739ae039));
11646
12055
  const [startRecordTime, setStartRecordTime] = (0, $jQDcL$react.useState)(undefined);
11647
12056
  const [timer, setTimer] = (0, $jQDcL$react.useState)(0);
@@ -11658,7 +12067,7 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11658
12067
  const sendAssetsModalState = (0, $jQDcL$reactstately.useOverlayTriggerState)({});
11659
12068
  const [flashAnimation, setFlashAnimation] = (0, $jQDcL$react.useState)(false);
11660
12069
  const menuBarState = (0, $6f223c293b335d40$export$bd7b6af6aa16550c)({
11661
- photo: options?.recorder?.defaultState !== "video"
12070
+ state: options?.recorder?.defaultState || "photo"
11662
12071
  });
11663
12072
  const exitStreaming = (0, $jQDcL$react.useCallback)(()=>{
11664
12073
  menuBarState.setStreaming(false);
@@ -11673,6 +12082,10 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11673
12082
  const { facingMode: newFacingMode } = (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalVideo(videoElementRef?.current);
11674
12083
  setFacingMode(newFacingMode);
11675
12084
  };
12085
+ const onScreenshareEnabled = (event)=>{
12086
+ if (!videoElementRef.current) return;
12087
+ (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).requestLocalScreenshare(videoElementRef.current);
12088
+ };
11676
12089
  const onStopRecord = (0, $jQDcL$react.useCallback)((event)=>{
11677
12090
  const { url: url , assetId: assetId } = event.detail;
11678
12091
  exitStreaming();
@@ -11736,10 +12149,12 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11736
12149
  ]);
11737
12150
  (0, $jQDcL$react.useEffect)(()=>{
11738
12151
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("localVideoAvailable", onLocalVideoChange);
12152
+ (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("screenshareEnabled", onScreenshareEnabled);
11739
12153
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("localVideoChange", onLocalVideoChange);
11740
12154
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).addEventListener("recordStopped", onStopRecord);
11741
12155
  return ()=>{
11742
12156
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("localVideoChange", onLocalVideoChange);
12157
+ (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("screenshareEnabled", onScreenshareEnabled);
11743
12158
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("localVideoAvailable", onLocalVideoChange);
11744
12159
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).removeEventListener("recordStopped", onStopRecord);
11745
12160
  };
@@ -11747,16 +12162,18 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11747
12162
  onStopRecord
11748
12163
  ]);
11749
12164
  return /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11750
- className: "bg-[#000] w-full h-full justify-center flex flex-col antialiased inter",
12165
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("bg-[#000] w-full h-full justify-center flex flex-col antialiased inter", {
12166
+ "bg-[url('https://cdn.snapcall.io/img/assist/gradient-bg.jpg')] bg-cover": menuBarState.mode === "screen"
12167
+ }),
11751
12168
  children: [
11752
- !menuBarState.photo && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
12169
+ (menuBarState.mode === "video" || menuBarState.mode === "screen" && menuBarState.streaming) && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11753
12170
  className: "text-base text-white text-center font-medium pt-2.5",
11754
12171
  children: $7925c01e7577d264$var$timerText(timer)
11755
12172
  }),
11756
12173
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11757
- className: "flex-1 min-h-0 p-2.5",
12174
+ className: "flex-1 min-h-0 p-2.5 ",
11758
12175
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
11759
- className: "relative w-full h-full rounded-[10px]",
12176
+ className: "relative w-full h-full rounded-[10px] ",
11760
12177
  children: [
11761
12178
  countdownVisible && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $47dee8347993fb81$export$53819c0e58f98d49), {
11762
12179
  initialValue: 3,
@@ -11774,7 +12191,20 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11774
12191
  assetsPopupState.open();
11775
12192
  }
11776
12193
  }),
11777
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
12194
+ menuBarState.mode === "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
12195
+ className: "object-fit h-full",
12196
+ children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
12197
+ autoPlay: true,
12198
+ muted: true,
12199
+ playsInline: true,
12200
+ ref: videoElementRef,
12201
+ className: (0, ($parcel$interopDefault($jQDcL$classnames)))("w-full h-full rounded-[inherit]", {
12202
+ "scale-x-[-1]": facingMode === "user" && menuBarState.mode !== "screen",
12203
+ "max-w-[screen]": menuBarState.mode === "screen"
12204
+ })
12205
+ })
12206
+ }),
12207
+ menuBarState.mode !== "screen" && /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("video", {
11778
12208
  autoPlay: true,
11779
12209
  muted: true,
11780
12210
  playsInline: true,
@@ -11787,7 +12217,7 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11787
12217
  })
11788
12218
  }),
11789
12219
  /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
11790
- className: "flex justify-center px-2.5 pb-2.5",
12220
+ className: "flex justify-center px-2.5 pb-2.5 z-10",
11791
12221
  children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $6f223c293b335d40$export$11a6fe490bbc4873), {
11792
12222
  state: menuBarState,
11793
12223
  thumbnail: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $dc46069ab394f8fc$export$1cd1efc78cb52ca5), {
@@ -11798,16 +12228,16 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11798
12228
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).rotateVideo();
11799
12229
  },
11800
12230
  onCapturePress: ()=>{
11801
- if (menuBarState.photo && videoElementRef.current) {
12231
+ if (menuBarState.mode === "photo" && videoElementRef.current) {
11802
12232
  onPhotoCapture(videoElementRef.current);
11803
12233
  setFlashAnimation(true);
11804
12234
  }
11805
- if (!menuBarState.photo && !menuBarState.streaming) {
12235
+ if (menuBarState.mode !== "photo" && !menuBarState.streaming) {
11806
12236
  menuBarState.setStreaming(true);
11807
12237
  setTimer(0);
11808
12238
  setCountdownVisible(true);
11809
12239
  }
11810
- if (!menuBarState.photo && menuBarState.streaming) {
12240
+ if (menuBarState.mode !== "photo" && menuBarState.streaming) {
11811
12241
  exitStreaming();
11812
12242
  if (startRecordTime) {
11813
12243
  (0, $c48c1ecc38fed4e9$export$2f377c2162fd02b2).stopRecord();
@@ -11828,14 +12258,41 @@ const $7925c01e7577d264$export$336a011955157f9a = ()=>{
11828
12258
  removeAsset: removeAsset,
11829
12259
  loading: assetLoading
11830
12260
  }),
11831
- /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
11832
- title: "Thank you for your submission!",
12261
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)((0, $48c2553f62767e40$export$2b77a92f1a5ad772), {
12262
+ title: t("recorder.submissionTitle"),
11833
12263
  state: sendAssetsModalState,
11834
12264
  isDismissable: false,
11835
- children: /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
11836
- className: "text-base text-primaryLight",
11837
- children: "Your photo/video has been successfully sent. We will review it and get back to you soon."
11838
- })
12265
+ children: [
12266
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("span", {
12267
+ className: "text-base text-primaryLight",
12268
+ children: t("recorder.submissionDescription")
12269
+ }),
12270
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)("div", {
12271
+ className: "flex flex-col gap-[20px] border-t border-secondaryVLight pt-[20px]",
12272
+ children: assets.map((asset, index)=>/*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("div", {
12273
+ className: "flex flex-row items-center gap-[10px]",
12274
+ children: [
12275
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsx)((0, $dc46069ab394f8fc$export$1cd1efc78cb52ca5), {
12276
+ asset: asset
12277
+ }),
12278
+ /*#__PURE__*/ (0, $jQDcL$reactjsxruntime.jsxs)("span", {
12279
+ className: "text-sm",
12280
+ style: {
12281
+ hyphens: "manual"
12282
+ },
12283
+ children: [
12284
+ asset.type === "picture" ? "Photo" : "Video",
12285
+ " ",
12286
+ index + 1,
12287
+ " \xb7",
12288
+ " ",
12289
+ $7925c01e7577d264$export$3ae94a2503e890a1(new Date(asset.timestamp))
12290
+ ]
12291
+ })
12292
+ ]
12293
+ }))
12294
+ })
12295
+ ]
11839
12296
  })
11840
12297
  ]
11841
12298
  });
@@ -12584,7 +13041,7 @@ var $3305ca02e86dabd1$export$2e2bcd8739ae039 = $3305ca02e86dabd1$var$GreetingVie
12584
13041
 
12585
13042
 
12586
13043
  var $54541b0286afc2de$exports = {};
12587
- $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";
13044
+ $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-\\[100\\] {\n z-index: 100;\n}\n\n.z-50 {\n z-index: 50;\n}\n\n.z-\\[1\\] {\n z-index: 1;\n}\n\n.z-10 {\n z-index: 10;\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-screen {\n height: 100vh;\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-\\[56px\\] {\n height: 56px;\n}\n\n.h-\\[40px\\] {\n height: 40px;\n}\n\n.h-\\[72px\\] {\n height: 72px;\n}\n\n.h-\\[235px\\] {\n height: 235px;\n}\n\n.h-\\[93px\\] {\n height: 93px;\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-screen {\n width: 100vw;\n}\n\n.w-full {\n width: 100%;\n}\n\n.w-1\\/3 {\n width: 33.3333%;\n}\n\n.w-\\[60px\\] {\n width: 60px;\n}\n\n.w-\\[56px\\] {\n width: 56px;\n}\n\n.w-\\[72px\\] {\n width: 72px;\n}\n\n.w-\\[76px\\] {\n width: 76px;\n}\n\n.w-\\[360px\\] {\n width: 360px;\n}\n\n.w-\\[450px\\] {\n width: 450px;\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.min-w-full, .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-\\[135px\\] {\n max-width: 135px;\n}\n\n.max-w-\\[500px\\] {\n max-width: 500px;\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-\\[screen\\] {\n max-width: screen;\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-\\[10px\\] {\n gap: 10px;\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-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-\\[10px\\] {\n border-radius: 10px;\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-\\[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-2 {\n border-width: 2px;\n}\n\n.border-t {\n border-top-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-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n\n.border-secondaryVLight {\n --tw-border-opacity: 1;\n border-color: rgb(235 235 235 / 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-black {\n --tw-bg-opacity: 1;\n background-color: rgb(0 0 0 / var(--tw-bg-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-tertiarySelected {\n --tw-bg-opacity: 1;\n background-color: rgb(216 216 216 / var(--tw-bg-opacity));\n}\n\n.bg-tertiary {\n --tw-bg-opacity: 1;\n background-color: rgb(245 245 245 / var(--tw-bg-opacity));\n}\n\n.bg-black\\/\\[\\.6\\] {\n background-color: #0009;\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-\\[\\#f12828\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(241 40 40 / var(--tw-bg-opacity));\n}\n\n.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.bg-\\[url\\(\\'https\\:\\/\\/cdn\\.snapcall\\.io\\/img\\/assist\\/gradient-bg\\.jpg\\'\\)\\] {\n background-image: url(\"https://cdn.snapcall.io/img/assist/gradient-bg.jpg\");\n}\n\n.bg-cover {\n background-size: cover;\n}\n\n.object-cover {\n object-fit: cover;\n}\n\n.object-fill {\n object-fit: fill;\n}\n\n.p-\\[15px\\] {\n padding: 15px;\n}\n\n.p-2\\.5 {\n padding: .625rem;\n}\n\n.p-2 {\n padding: .5rem;\n}\n\n.p-\\[10px\\] {\n padding: 10px;\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.pt-\\[20px\\] {\n padding-top: 20px;\n}\n\n.pb-\\[25px\\] {\n padding-bottom: 25px;\n}\n\n.text-center {\n text-align: center;\n}\n\n.align-middle {\n vertical-align: middle;\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-semibold {\n font-weight: 600;\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-mainBlue {\n --tw-text-opacity: 1;\n color: rgb(0 106 255 / 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 {\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.ease-in-out {\n transition-timing-function: cubic-bezier(.4, 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.disabled\\:opacity-50:disabled {\n opacity: .5;\n}\n\n";
12588
13045
 
12589
13046
 
12590
13047
  var $9833f4335ab609cd$exports = {};