@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.
@@ -6,7 +6,7 @@ import $3Sbms$styledcomponents, {keyframes as $3Sbms$keyframes, ThemeProvider as
6
6
  import $3Sbms$react, {useState as $3Sbms$useState, useRef as $3Sbms$useRef, useEffect as $3Sbms$useEffect, useContext as $3Sbms$useContext, useMemo as $3Sbms$useMemo, createContext as $3Sbms$createContext, useReducer as $3Sbms$useReducer, useLayoutEffect as $3Sbms$useLayoutEffect, useCallback as $3Sbms$useCallback, forwardRef as $3Sbms$forwardRef} from "react";
7
7
  import "inobounce";
8
8
  import $3Sbms$i18next from "i18next";
9
- import {initReactI18next as $3Sbms$initReactI18next, useTranslation as $3Sbms$useTranslation} from "react-i18next";
9
+ import {initReactI18next as $3Sbms$initReactI18next, useTranslation as $3Sbms$useTranslation, Trans as $3Sbms$Trans} from "react-i18next";
10
10
  import {parse as $3Sbms$parse, getParser as $3Sbms$getParser} from "bowser";
11
11
  import {v4 as $3Sbms$v4} from "uuid";
12
12
  import {WebSocketTransport as $3Sbms$WebSocketTransport, Peer as $3Sbms$Peer} from "protoo-client";
@@ -18,11 +18,11 @@ import {createPortal as $3Sbms$createPortal} from "react-dom";
18
18
  import {toCanvas as $3Sbms$toCanvas} from "qrcode";
19
19
  import {useOverlayTriggerState as $3Sbms$useOverlayTriggerState, useToggleState as $3Sbms$useToggleState} from "react-stately";
20
20
  import $3Sbms$classnames from "classnames";
21
- import {useToggleButton as $3Sbms$useToggleButton, useFocusRing as $3Sbms$useFocusRing, useButton as $3Sbms$useButton} from "react-aria";
22
- import {useModalOverlay as $3Sbms$useModalOverlay, Overlay as $3Sbms$Overlay} from "@react-aria/overlays";
21
+ import {useToggleButton as $3Sbms$useToggleButton, useFocusRing as $3Sbms$useFocusRing, useModalOverlay as $3Sbms$useModalOverlay, Overlay as $3Sbms$Overlay, useButton as $3Sbms$useButton} from "react-aria";
23
22
  import {useViewportSize as $3Sbms$useViewportSize} from "@react-aria/utils";
24
23
  import {CSSTransition as $3Sbms$CSSTransition} from "react-transition-group";
25
24
  import {useHover as $3Sbms$useHover} from "@react-aria/interactions";
25
+ import {useModalOverlay as $3Sbms$useModalOverlay1, Overlay as $3Sbms$Overlay1} from "@react-aria/overlays";
26
26
  import $3Sbms$reactcontentloader from "react-content-loader";
27
27
 
28
28
  function $parcel$interopDefault(a) {
@@ -467,6 +467,8 @@ const $18fb8799f38eb407$export$84584c2a98eb6753 = {
467
467
  someone: "Someone",
468
468
  camera: "Camera",
469
469
  microphone: "Microphone",
470
+ photo: "Photo",
471
+ video: "Video",
470
472
  screen: "Screen",
471
473
  speaker: "Speaker",
472
474
  user: "User",
@@ -474,7 +476,10 @@ const $18fb8799f38eb407$export$84584c2a98eb6753 = {
474
476
  from: "From",
475
477
  accept: "Accept",
476
478
  decline: "Decline",
477
- you: "You"
479
+ you: "You",
480
+ cancel: "Cancel",
481
+ confirm: "Confirm",
482
+ remove: "Remove"
478
483
  },
479
484
  greeting: {
480
485
  mainTitle: "Welcome to SnapCall",
@@ -484,6 +489,46 @@ const $18fb8799f38eb407$export$84584c2a98eb6753 = {
484
489
  nameSubmit: "Join Conversation",
485
490
  footerTitle: "Powered by SnapCall",
486
491
  footerDescription: "Meet SnapCall, the easiest way to add real-time video to platform, product or service."
492
+ },
493
+ recorder: {
494
+ submissionTitle: "Thank you for your submission!",
495
+ submissionDescription: "Your photo/video has been successfully sent. We will review it and get back to you soon.",
496
+ confirmRemovalTitle: "Confirm removal",
497
+ confirmRemovalDescription: "Are you sure you want to remove this photo/video? This action cannot be undone.",
498
+ elementBeingProcessed: "Please wait a moment while your {{ type }} is being processed...",
499
+ waitVideo: "It may take up to 15 seconds for a video to be ready.",
500
+ elementCaptureSuccess: "{{ type }} successfully captured",
501
+ takeNewElement: "Take new {{ type }}",
502
+ sendElement: "Send {{ type }}",
503
+ sendElements: "Send {{ count }} elements",
504
+ allowAccess: "Allow access",
505
+ okay: "Okay",
506
+ allowCamMicAccess: "Allow access to cam/mic",
507
+ allowScreenShareAccess: "Allow access to screen sharing",
508
+ permissionDeniedTitle: "Something went wrong!",
509
+ 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.",
510
+ photoInstructionsTitle: "Ready to take a shot?",
511
+ videoInstructionsTitle: "Ready to record a video?",
512
+ screenShareInstructionsTitle: "Ready to capture your screen?",
513
+ instructions: {
514
+ allowAccessOnPrompt: "When prompted, <1>allow access</1> to camera and microphone.",
515
+ tapPhotoButton: "Tap the <1 /><2> Camera button</2> to take a photo.",
516
+ multiplePhotos: "Don't hesitate to take multiple photos for more detail.",
517
+ reviewAndSendPhotos: "You can review your photo and then <1>send it when you're done.</1>",
518
+ tapVideoButton: "Tap the <1 /><2> Record button</2> to start a recording.",
519
+ videoSpeech: "You can <1>speak during</1> the recording for added detail.",
520
+ tapStopVideoButton: "When you're finished, tap the <1 /><2> Stop button</2>.",
521
+ reviewAndSendVideos: "You can review your video and then <1>send it when you're done</2>.",
522
+ tapScreenShareButton: "Tap on <1> Record my screen</1> to start a recording.",
523
+ tapStopScreenShareButton: "When you're finished, tap on <1>Stop recording</1>.",
524
+ reviewAnsSendScreenShare: "You can review your video and then <1>send it when you're done</1>."
525
+ },
526
+ switchToMobileTitle: "Switch to your mobile",
527
+ switchToMobileDescription: "Enjoy an even more convenient experience by using your phone to take photos and record videos.",
528
+ useDesktopVersion: "Use desktop version",
529
+ scanQRCode: "Scan this QR code with a compatible device.",
530
+ startScreenShareButton: "Record my screen",
531
+ stopScreenShareButton: "Stop recording"
487
532
  }
488
533
  }
489
534
  };
@@ -621,6 +666,8 @@ const $c5472fb74fa04782$export$acb2a88f7d552ebf = {
621
666
  someone: "Quelqu'un",
622
667
  camera: "Cam\xe9ra",
623
668
  microphone: "Micro",
669
+ photo: "Photo",
670
+ video: "Vid\xe9o",
624
671
  screen: "\xc9cran",
625
672
  speaker: "Haut-parleur",
626
673
  user: "Utilisateur",
@@ -628,7 +675,10 @@ const $c5472fb74fa04782$export$acb2a88f7d552ebf = {
628
675
  from: "Depuis",
629
676
  accept: "Accepter",
630
677
  decline: "D\xe9cliner",
631
- you: "Vous"
678
+ you: "Vous",
679
+ cancel: "Annuler",
680
+ confirm: "Confirmer",
681
+ remove: "Enlever"
632
682
  },
633
683
  greeting: {
634
684
  mainTitle: "Bienvenue sur SnapCall",
@@ -638,6 +688,46 @@ const $c5472fb74fa04782$export$acb2a88f7d552ebf = {
638
688
  nameSubmit: "Rejoindre la conversation",
639
689
  footerTitle: "Propuls\xe9 par SnapCall",
640
690
  footerDescription: "D\xe9couvrez SnapCall, ajoutez de la vid\xe9o en temps r\xe9el \xe0 n'importe quelle plateforme, produit ou service."
691
+ },
692
+ recorder: {
693
+ submissionTitle: "Merci pour votre soumission!",
694
+ submissionDescription: "Votre photo/vid\xe9o a \xe9t\xe9 envoy\xe9e avec succ\xe8s. Nous l'examinerons et reviendrons vers vous bient\xf4t.",
695
+ confirmRemovalTitle: "Confirmer la suppression",
696
+ confirmRemovalDescription: "Voulez-vous vraiment supprimer cette photo/vid\xe9o? Cette action ne peut pas \xeatre annul\xe9e.",
697
+ elementBeingProcessed: "Veuillez patienter un moment pendant que votre {{ type }} est en cours de traitement...",
698
+ waitVideo: "Cela peut prendre jusqu'\xe0 15 secondes pour qu'une vid\xe9o soit pr\xeate.",
699
+ elementCaptureSuccess: "{{ type }} captur\xe9e avec succ\xe8s",
700
+ takeNewElement: "Prendre une nouvelle {{ type }}",
701
+ sendElement: "Envoyer une {{ type }}",
702
+ sendElements: "Envoyer {{ count }} \xe9l\xe9ments",
703
+ allowAccess: "Permettre l'acc\xe8s",
704
+ okay: "D'accord",
705
+ allowCamMicAccess: "Autoriser l'acc\xe8s \xe0 la cam\xe9ra/au micro",
706
+ allowScreenShareAccess: "Autoriser l'acc\xe8s au partage d'\xe9cran",
707
+ permissionDeniedTitle: "Quelque chose s'est mal pass\xe9!",
708
+ 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.",
709
+ photoInstructionsTitle: "Pr\xeat \xe0 prendre une photo?",
710
+ videoInstructionsTitle: "Pr\xeat \xe0 enregistrer une vid\xe9o?",
711
+ screenShareInstructionsTitle: "Pr\xeat \xe0 capturer votre \xe9cran?",
712
+ instructions: {
713
+ allowAccessOnPrompt: "Lorsque vous y \xeates invit\xe9, <1>autorisez l'acc\xe8s</1> \xe0 la cam\xe9ra et au microphone.",
714
+ tapPhotoButton: "Appuyez sur le <1 /><2>bouton Appareil photo</2> pour prendre une photo.",
715
+ multiplePhotos: "N'h\xe9sitez pas \xe0 prendre plusieurs photos pour plus de d\xe9tails.",
716
+ reviewAndSendPhotos: "Vous pouvez revoir votre photo, puis <1>l'envoyer lorsque vous avez termin\xe9.</1>",
717
+ tapVideoButton: "Appuyez sur le <1 /><2>bouton d'enregistrement</2> pour d\xe9marrer un enregistrement.",
718
+ videoSpeech: "Vous pouvez <1>parler pendant</1> l'enregistrement pour plus de d\xe9tails.",
719
+ tapStopVideoButton: "Lorsque vous avez termin\xe9, appuyez sur le <1 /><2>bouton Arr\xeater</2>.",
720
+ reviewAndSendVideos: "Vous pouvez revoir votre vid\xe9o, puis <1>l'envoyer lorsque vous avez termin\xe9</2>.",
721
+ tapScreenShareButton: "Appuyez sur <1>Enregistrer mon \xe9cran</1> pour d\xe9marrer un enregistrement.",
722
+ tapStopScreenShareButton: "Lorsque vous avez termin\xe9, appuyez sur <1>Arr\xeater l'enregistrement</1>.",
723
+ reviewAnsSendScreenShare: "Vous pouvez revoir votre vid\xe9o, puis <1>l'envoyer lorsque vous avez termin\xe9</1>."
724
+ },
725
+ switchToMobileTitle: "Basculez vers votre mobile",
726
+ switchToMobileDescription: "Profitez d'une exp\xe9rience encore plus pratique en utilisant votre t\xe9l\xe9phone pour prendre des photos et enregistrer des vid\xe9os.",
727
+ useDesktopVersion: "Utiliser la version de bureau",
728
+ scanQRCode: "Scannez ce code QR avec un appareil compatible.",
729
+ startScreenShareButton: "Enregistrer mon \xe9cran",
730
+ stopScreenShareButton: "Arr\xeater d'enregistrer"
641
731
  }
642
732
  }
643
733
  };
@@ -779,6 +869,8 @@ const $b7790fb9e48df5c4$export$3486a10f30cf1ee4 = {
779
869
  someone: "Qualcuno",
780
870
  camera: "Telecamera",
781
871
  microphone: "Microfono",
872
+ photo: "Foto",
873
+ video: "Video",
782
874
  screen: "Schermo",
783
875
  speaker: "Altoparlante",
784
876
  user: "Utente",
@@ -786,7 +878,10 @@ const $b7790fb9e48df5c4$export$3486a10f30cf1ee4 = {
786
878
  from: "Da",
787
879
  accept: "Accettare",
788
880
  decline: "Declinare",
789
- you: "Voi"
881
+ you: "Voi",
882
+ cancel: "Annulla",
883
+ confirm: "Confermare",
884
+ remove: "Rimuovere"
790
885
  },
791
886
  greeting: {
792
887
  mainTitle: "Benvenuto a SnapCall",
@@ -796,6 +891,46 @@ const $b7790fb9e48df5c4$export$3486a10f30cf1ee4 = {
796
891
  nameSubmit: "Partecipa alla conversazione",
797
892
  footerTitle: "Offerto da SnapCall",
798
893
  footerDescription: "Incontrare SnapCall, il modo pi\xf9 semplice per aggiungere video in tempo reale a piattaforma, prodotto o servizio."
894
+ },
895
+ recorder: {
896
+ submissionTitle: "Grazie per la vostra presentazione!",
897
+ submissionDescription: "La tua foto/video \xe8 stato inviato con successo. Lo esamineremo e ti ricontatteremo presto.",
898
+ confirmRemovalTitle: "Conferma la rimozione",
899
+ confirmRemovalDescription: "Sei sicuro di voler rimuovere questa foto/video? Questa azione non pu\xf2 essere annullata.",
900
+ elementBeingProcessed: "Attendi un momento mentre la tua {{ type }} \xe8 in fase di elaborazione...",
901
+ waitVideo: "Potrebbero essere necessari fino a 15 secondi prima che un video sia pronto.",
902
+ elementCaptureSuccess: "{{ type }} catturato con successo",
903
+ takeNewElement: "Scatta una nuova {{ type }}",
904
+ sendElement: "Invia una {{ type }}",
905
+ sendElements: "Invia {{ count }} elementi",
906
+ allowAccess: "Consentire l'accesso",
907
+ okay: "Va bene",
908
+ allowCamMicAccess: "Consenti l'accesso a cam/microfono",
909
+ allowScreenShareAccess: "Consenti l'accesso alla condivisione dello schermo",
910
+ permissionDeniedTitle: "Qualcosa \xe8 andato storto!",
911
+ 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.",
912
+ photoInstructionsTitle: "Pronto a fare un tentativo?",
913
+ videoInstructionsTitle: "Pronto a registrare un video?",
914
+ screenShareInstructionsTitle: "Pronto a catturare il tuo schermo?",
915
+ instructions: {
916
+ allowAccessOnPrompt: "Quando richiesto, <1>consenti l'accesso</1> alla videocamera e al microfono.",
917
+ tapPhotoButton: "Tocca il <1 /><2> pulsante Fotocamera</2> per scattare una foto.",
918
+ multiplePhotos: "Non esitate a scattare pi\xf9 foto per maggiori dettagli.",
919
+ reviewAndSendPhotos: "Puoi rivedere la tua foto e poi <1>inviarla quando hai finito.</1>",
920
+ tapVideoButton: "Tocca il <1 /><2> pulsante Registra</2> per avviare una registrazione.",
921
+ videoSpeech: "Puoi <1>parlare durante</1> la registrazione per ulteriori dettagli.",
922
+ tapStopVideoButton: "Al termine, tocca il <1 /><2> pulsante Interrompi</2>.",
923
+ reviewAndSendVideos: "Puoi rivedere il tuo video e poi <1>inviarlo quando hai finito</2>.",
924
+ tapScreenShareButton: "Tocca <1> Registra il mio schermo</1> per avviare una registrazione.",
925
+ tapStopScreenShareButton: "Al termine, tocca <1>Interrompi registrazione</1>.",
926
+ reviewAnsSendScreenShare: "Puoi rivedere il tuo video e poi <1>inviarlo quando hai finito</1>."
927
+ },
928
+ switchToMobileTitle: "Passa al tuo cellulare",
929
+ switchToMobileDescription: "Goditi un'esperienza ancora pi\xf9 comoda utilizzando il telefono per scattare foto e registrare video.",
930
+ useDesktopVersion: "Usa la versione desktop",
931
+ scanQRCode: "Scansiona questo codice QR con un dispositivo compatibile.",
932
+ startScreenShareButton: "Registra il mio schermo",
933
+ stopScreenShareButton: "Interrompi la registrazione"
799
934
  }
800
935
  }
801
936
  };
@@ -1439,6 +1574,49 @@ class $0148b6fd862a22e8$export$2e2bcd8739ae039 {
1439
1574
  }
1440
1575
 
1441
1576
 
1577
+ const $107ba89b5d0109ab$var$audioContextConstructor = window.AudioContext || window.webkitAudioContext;
1578
+ class $107ba89b5d0109ab$export$22ddc20344c01547 {
1579
+ audioSources = {};
1580
+ tracks = {};
1581
+ constructor(){
1582
+ this.audioContext = new $107ba89b5d0109ab$var$audioContextConstructor();
1583
+ this.audioDestination = this.audioContext.createMediaStreamDestination();
1584
+ }
1585
+ getSetting(identifier) {
1586
+ return this.tracks[identifier]?.getSettings();
1587
+ }
1588
+ removeTrack(identifier) {
1589
+ const track = this.tracks[identifier];
1590
+ if (track) {
1591
+ this.audioSources[identifier]?.disconnect();
1592
+ delete this.tracks[identifier];
1593
+ delete this.audioSources[identifier];
1594
+ track.stop();
1595
+ }
1596
+ }
1597
+ addTrack(identifier, track) {
1598
+ if (track.kind === "audio") {
1599
+ this.removeTrack(identifier);
1600
+ const stream = new MediaStream([
1601
+ track
1602
+ ]);
1603
+ const audioSource = this.audioContext.createMediaStreamSource(stream);
1604
+ this.audioSources[identifier] = audioSource;
1605
+ this.tracks[identifier] = track;
1606
+ if (this.audioDestination) audioSource.connect(this.audioDestination);
1607
+ }
1608
+ }
1609
+ getFinalTrack() {
1610
+ return this.audioDestination.stream.getTracks()[0];
1611
+ }
1612
+ removeAll() {
1613
+ Object.keys(this.tracks).forEach((identifier)=>{
1614
+ this.removeTrack(identifier);
1615
+ });
1616
+ }
1617
+ }
1618
+
1619
+
1442
1620
  const $c31e3fb4360572af$var$log = new (0, $0f65a9eaf4a1e910$export$2e2bcd8739ae039)("StreamerClient");
1443
1621
  const $c31e3fb4360572af$export$103bedf43ba882db = {
1444
1622
  WEBRTC_FAILED: "WRTC1",
@@ -1978,6 +2156,7 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
1978
2156
  this.audioLevel?.release();
1979
2157
  this.audioLevel = undefined;
1980
2158
  if (this.micProducer && this.micProducer.track) {
2159
+ this.audioMedia?.removeTrack("mic");
1981
2160
  this.micProducer?.track?.stop();
1982
2161
  $c31e3fb4360572af$var$log.log("switchMicrophone", "stopping previous track");
1983
2162
  }
@@ -1990,7 +2169,9 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
1990
2169
  }));
1991
2170
  this.audioLevel = new (0, $67e45b2e30dcc030$export$ea669869acd8f177)(stream, this);
1992
2171
  // this.audioLevel.analyse();
2172
+ this.audioMedia = this.audioMedia || new (0, $107ba89b5d0109ab$export$22ddc20344c01547)();
1993
2173
  const track = stream.getAudioTracks()[0];
2174
+ this.audioMedia.addTrack("mic", track);
1994
2175
  await this.micProducer?.replaceTrack({
1995
2176
  track: track
1996
2177
  });
@@ -2066,10 +2247,12 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2066
2247
  const transport = await this.getTransport("audio", "send");
2067
2248
  this.audioLevel = new (0, $67e45b2e30dcc030$export$ea669869acd8f177)(stream, this);
2068
2249
  // this.audioLevel.analyse();
2250
+ this.audioMedia = this.audioMedia || new (0, $107ba89b5d0109ab$export$22ddc20344c01547)();
2069
2251
  const track = stream.getAudioTracks()[0];
2252
+ this.audioMedia.addTrack("mic", track);
2070
2253
  const deviceType = "microphone";
2071
2254
  const micProducer = await transport.produce({
2072
- track: track,
2255
+ track: this.audioMedia.getFinalTrack(),
2073
2256
  codecOptions: {
2074
2257
  opusStereo: true,
2075
2258
  opusDtx: true
@@ -2146,6 +2329,7 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2146
2329
  this.mediaPipe.clean();
2147
2330
  this.mediaPipe = undefined;
2148
2331
  }
2332
+ this.audioMedia?.removeAll();
2149
2333
  this.webcamTrack?.stop();
2150
2334
  this.webcamTrack = null;
2151
2335
  this.protooTransport.close();
@@ -2494,10 +2678,13 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2494
2678
  });
2495
2679
  this.dispatchEvent(event);
2496
2680
  }
2497
- async enableScreenshare() {
2681
+ async enableScreenshare(option = {
2682
+ audioTransportOption: "classic"
2683
+ }) {
2498
2684
  if (!this.permissions.find((permission)=>permission === "screen_sharing")) throw new Error("feature not allowed");
2685
+ if (option.audioTransportOption === "mix" && !this.micProducer) throw new Error("microphone not activated and audio mix transport requested");
2499
2686
  const stream = await this.handleGetUserMediaError("screen", navigator.mediaDevices.getDisplayMedia({
2500
- audio: true,
2687
+ audio: option.audioTransportOption !== "none",
2501
2688
  video: {
2502
2689
  displaySurface: "monitor",
2503
2690
  logicalSurface: true,
@@ -2517,13 +2704,23 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2517
2704
  const audioTransport = await this.getTransport("audio", "send");
2518
2705
  const audioTrack = stream.getAudioTracks()[0];
2519
2706
  if (audioTrack) {
2520
- this.screenshareAudioProducer = await this.streamerMediasoup?.produceAudio(audioTransport, audioTrack, {
2521
- deviceType: deviceType,
2522
- share: true
2523
- });
2524
- this.screenshareVideoProducer?.on("transportclose", ()=>{
2525
- this.screenshareVideoProducer = undefined;
2526
- });
2707
+ if (option.audioTransportOption === "classic") {
2708
+ this.screenshareAudioProducer = await this.streamerMediasoup?.produceAudio(audioTransport, audioTrack, {
2709
+ deviceType: deviceType,
2710
+ share: true
2711
+ });
2712
+ this.screenshareVideoProducer?.on("transportclose", ()=>{
2713
+ this.screenshareVideoProducer = undefined;
2714
+ });
2715
+ } else if (option.audioTransportOption === "mix") {
2716
+ this.audioMedia = this.audioMedia || new (0, $107ba89b5d0109ab$export$22ddc20344c01547)();
2717
+ this.audioMedia.addTrack("screen", audioTrack);
2718
+ const finalTracks = this.audioMedia.getFinalTrack();
2719
+ // currently microphone producer has to be enabled before.
2720
+ if (finalTracks && this.micProducer) this.micProducer.replaceTrack({
2721
+ track: finalTracks
2722
+ });
2723
+ }
2527
2724
  }
2528
2725
  const track = stream.getVideoTracks()[0];
2529
2726
  const videoTransport = await this.getTransport("video", "send");
@@ -2550,6 +2747,7 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2550
2747
  });
2551
2748
  this.screenshareVideoProducer = undefined;
2552
2749
  }
2750
+ this.audioMedia?.removeTrack("screen");
2553
2751
  if (this.screenshareAudioProducer) {
2554
2752
  this.screenshareAudioProducer.close();
2555
2753
  if (this.protoo.connected) await this.protoo.request("closeProducer", {
@@ -2847,7 +3045,7 @@ class $c31e3fb4360572af$export$2e2bcd8739ae039 extends $c31e3fb4360572af$var$Str
2847
3045
  return this.webcam;
2848
3046
  }
2849
3047
  getCurrentMicrophoneId() {
2850
- return this.micProducer?.track?.getSettings().deviceId;
3048
+ return this.audioMedia?.getSetting("mic") || this.micProducer?.track?.getSettings().deviceId;
2851
3049
  }
2852
3050
  getCurrentSpeakerId() {
2853
3051
  const audioRendererKeys = Object.keys(this.audioRenderers);
@@ -10521,6 +10719,8 @@ const $4fb4815baa04b470$export$914ddf2021ea8ee6 = (0, $3Sbms$styledcomponents).d
10521
10719
 
10522
10720
 
10523
10721
 
10722
+
10723
+
10524
10724
 
10525
10725
 
10526
10726
 
@@ -10566,6 +10766,61 @@ const $5a48b7481979330f$export$d2b052e7b4be1756 = /*#__PURE__*/ (0, $3Sbms$forwa
10566
10766
 
10567
10767
 
10568
10768
 
10769
+ const $91e337bf8187124b$export$a703eb468fcf7e69 = (props)=>{
10770
+ const { state: state , children: children } = props;
10771
+ const ref = (0, $3Sbms$useRef)(null);
10772
+ const { modalProps: modalProps , underlayProps: underlayProps } = (0, $3Sbms$useModalOverlay)({
10773
+ isDismissable: true,
10774
+ ...props
10775
+ }, state, ref);
10776
+ const [exited, setExited] = (0, $3Sbms$useState)(!state.isOpen);
10777
+ if (!(state.isOpen || !exited)) return null;
10778
+ return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$Overlay), {
10779
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$CSSTransition), {
10780
+ in: state.isOpen,
10781
+ appear: true,
10782
+ onEntered: ()=>setExited(false),
10783
+ onExited: ()=>setExited(true),
10784
+ timeout: {
10785
+ enter: 0,
10786
+ exit: 300
10787
+ },
10788
+ classNames: {
10789
+ enter: "opacity-0",
10790
+ enterDone: "opacity-1 transition ease-in",
10791
+ exit: "opacity-0 transition ease-out"
10792
+ },
10793
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
10794
+ className: "fixed z-[100] inset-0 bg-black bg-opacity-90 flex justify-center items-center inter",
10795
+ ...underlayProps,
10796
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$CSSTransition), {
10797
+ in: state.isOpen,
10798
+ appear: true,
10799
+ nodeRef: ref,
10800
+ timeout: {
10801
+ enter: 0,
10802
+ exit: 300
10803
+ },
10804
+ classNames: {
10805
+ appear: "translate-y-2",
10806
+ appearDone: "translate-y-0 transition ease-in",
10807
+ exit: "translate-y-2 transition ease-out"
10808
+ },
10809
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
10810
+ ...modalProps,
10811
+ ref: ref,
10812
+ children: children
10813
+ })
10814
+ })
10815
+ })
10816
+ })
10817
+ });
10818
+ };
10819
+
10820
+
10821
+
10822
+
10823
+
10569
10824
 
10570
10825
 
10571
10826
 
@@ -10581,6 +10836,7 @@ const $0590ee3141e14968$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $3Sbms$forwa
10581
10836
  primary: (0, $3Sbms$classnames)(isActive ? "bg-primaryLight" : "bg-primary", "text-white disabled:bg-secondaryLight"),
10582
10837
  secondary: (0, $3Sbms$classnames)(isActive ? "bg-graySelected" : "bg-transparent", "text-primary border border-secondaryLight disabled:text-secondaryLight disabled:bg-graySelected"),
10583
10838
  basic: (0, $3Sbms$classnames)(isActive ? "bg-graySelected" : "bg-white", "text-primary disabled:text-secondaryLight disabled:bg-graySelected"),
10839
+ tertiary: (0, $3Sbms$classnames)(isActive ? "bg-tertiarySelected" : "bg-tertiary", "text-mainBlue disabled:opacity-50"),
10584
10840
  custom: ""
10585
10841
  };
10586
10842
  const sizeStyle = {
@@ -10608,12 +10864,6 @@ const $0590ee3141e14968$export$353f5b6fc5456de1 = /*#__PURE__*/ (0, $3Sbms$forwa
10608
10864
 
10609
10865
  function $c0bb66c3d546ed81$export$2b77a92f1a5ad772(props) {
10610
10866
  const { children: children , state: state , size: size = "small" , title: title , description: description , primaryAction: primaryAction , secondaryAction: secondaryAction , centered: centered = false } = props;
10611
- const ref = (0, $3Sbms$react).useRef(null);
10612
- const { modalProps: modalProps , underlayProps: underlayProps } = (0, $3Sbms$useModalOverlay)({
10613
- isDismissable: true,
10614
- ...props
10615
- }, state, ref);
10616
- const [exited, setExited] = (0, $3Sbms$useState)(!state.isOpen);
10617
10867
  const viewport = (0, $3Sbms$useViewportSize)();
10618
10868
  const maxHeight = viewport.height - 64;
10619
10869
  const modalSize = {
@@ -10621,96 +10871,60 @@ function $c0bb66c3d546ed81$export$2b77a92f1a5ad772(props) {
10621
10871
  medium: "max-w-[600px]",
10622
10872
  large: "max-w-[800px]"
10623
10873
  };
10624
- // Don't render anything if the modal is not open and we're not animating out.
10625
- if (!(state.isOpen || !exited)) return null;
10626
- return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$Overlay), {
10627
- children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$CSSTransition), {
10628
- in: state.isOpen,
10629
- appear: true,
10630
- onEntered: ()=>setExited(false),
10631
- onExited: ()=>setExited(true),
10632
- timeout: {
10633
- enter: 0,
10634
- exit: 300
10635
- },
10636
- classNames: {
10637
- enter: "opacity-0",
10638
- enterDone: "opacity-1 transition ease-in",
10639
- exit: "opacity-0 transition ease-out"
10874
+ return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $91e337bf8187124b$export$a703eb468fcf7e69), {
10875
+ state: state,
10876
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
10877
+ className: (0, $3Sbms$classnames)("bg-white rounded-[10px] z-[1] overflow-x-auto focus:outline-none", modalSize[size]),
10878
+ style: {
10879
+ maxHeight: `${maxHeight}px`
10640
10880
  },
10641
- children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
10642
- className: "fixed z-[100] inset-0 bg-black bg-opacity-90 flex justify-center items-center inter",
10643
- ...underlayProps,
10644
- children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$CSSTransition), {
10645
- in: state.isOpen,
10646
- appear: true,
10647
- nodeRef: ref,
10648
- timeout: {
10649
- enter: 0,
10650
- exit: 300
10651
- },
10652
- classNames: {
10653
- appear: "translate-y-2",
10654
- appearDone: "translate-y-0 transition ease-in",
10655
- exit: "translate-y-2 transition ease-out"
10656
- },
10657
- children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
10658
- ...modalProps,
10659
- ref: ref,
10660
- className: (0, $3Sbms$classnames)("bg-white rounded-[10px] z-[1] overflow-x-auto focus:outline-none", modalSize[size]),
10661
- style: {
10662
- maxHeight: `${maxHeight}px`
10663
- },
10664
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10665
- className: "flex flex-col gap-5 px-5 py-[25px] max-h-[inherit]",
10666
- children: [
10667
- /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10668
- className: "flex flex-col gap-5 overflow-auto",
10669
- children: [
10670
- /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10671
- className: (0, $3Sbms$classnames)("flex flex-col gap-[5px]", {
10672
- "text-center": centered
10673
- }),
10674
- children: [
10675
- /*#__PURE__*/ (0, $3Sbms$jsx)("h2", {
10676
- className: "text-xl font-medium",
10677
- children: title
10678
- }),
10679
- description && /*#__PURE__*/ (0, $3Sbms$jsx)("p", {
10680
- className: "text-sm text-secondary",
10681
- children: description
10682
- })
10683
- ]
10684
- }),
10685
- children
10686
- ]
10881
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10882
+ className: "flex flex-col gap-5 px-5 py-[25px] max-h-[inherit]",
10883
+ children: [
10884
+ /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10885
+ className: "flex flex-col gap-5 overflow-auto",
10886
+ children: [
10887
+ /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10888
+ className: (0, $3Sbms$classnames)("flex flex-col gap-[5px]", {
10889
+ "text-center": centered
10687
10890
  }),
10688
- (primaryAction || secondaryAction) && /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10689
- className: (0, $3Sbms$classnames)("flex justify-end gap-2.5", centered ? "justify-center" : "justify-end"),
10690
- children: [
10691
- typeof secondaryAction === "string" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10692
- variant: "secondary",
10693
- onPress: state.close,
10694
- fullWidth: centered,
10695
- children: secondaryAction
10696
- }),
10697
- typeof secondaryAction === "function" && secondaryAction({
10698
- close: state.close
10699
- }),
10700
- typeof primaryAction === "string" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10701
- onPress: state.close,
10702
- fullWidth: centered,
10703
- children: primaryAction
10704
- }),
10705
- typeof primaryAction === "function" && primaryAction({
10706
- close: state.close
10707
- })
10708
- ]
10709
- })
10710
- ]
10711
- })
10891
+ children: [
10892
+ /*#__PURE__*/ (0, $3Sbms$jsx)("h2", {
10893
+ className: "text-xl font-medium",
10894
+ children: title
10895
+ }),
10896
+ description && /*#__PURE__*/ (0, $3Sbms$jsx)("p", {
10897
+ className: "text-sm text-secondary",
10898
+ children: description
10899
+ })
10900
+ ]
10901
+ }),
10902
+ children
10903
+ ]
10904
+ }),
10905
+ (primaryAction || secondaryAction) && /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
10906
+ className: (0, $3Sbms$classnames)("flex justify-end gap-2.5", centered ? "justify-center" : "justify-end"),
10907
+ children: [
10908
+ typeof secondaryAction === "string" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10909
+ variant: "secondary",
10910
+ onPress: state.close,
10911
+ fullWidth: centered,
10912
+ children: secondaryAction
10913
+ }),
10914
+ typeof secondaryAction === "function" && secondaryAction({
10915
+ close: state.close
10916
+ }),
10917
+ typeof primaryAction === "string" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10918
+ onPress: state.close,
10919
+ fullWidth: centered,
10920
+ children: primaryAction
10921
+ }),
10922
+ typeof primaryAction === "function" && primaryAction({
10923
+ close: state.close
10924
+ })
10925
+ ]
10712
10926
  })
10713
- })
10927
+ ]
10714
10928
  })
10715
10929
  })
10716
10930
  });
@@ -10806,32 +11020,39 @@ const $96999d2514f71e51$var$InstructionRow = ({ children: children , index: inde
10806
11020
  ]
10807
11021
  });
10808
11022
  const $96999d2514f71e51$export$788cb893d96254c8 = ({ state: state , type: type })=>{
11023
+ const { t: t } = (0, $3Sbms$useTranslation)();
10809
11024
  const [permissionsState, setPermissionsState] = (0, $3Sbms$useState)("idle");
11025
+ (0, $3Sbms$useEffect)(()=>{
11026
+ const { deviceState: deviceState } = (0, $c9e496369b59be7a$export$2f377c2162fd02b2).getState();
11027
+ if (deviceState.screenshare.enabled && type === "screen") return setPermissionsState("granted");
11028
+ if (deviceState.camera.enabled && type !== "screen") return setPermissionsState("granted");
11029
+ setPermissionsState("idle");
11030
+ }, [
11031
+ type
11032
+ ]);
11033
+ const { deviceState: deviceState } = (0, $c9e496369b59be7a$export$2f377c2162fd02b2).getState();
10810
11034
  const [isRoomReady, setRoomReady] = (0, $3Sbms$useState)(false);
10811
11035
  const { orientation: orientation } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
10812
11036
  const device = orientation === "landscape" ? "desktop" : "mobile";
10813
11037
  const videoLength = permissionsState === "granted" ? "short" : "full";
10814
- const videoType = type === "picture" ? "photo" : "video";
10815
- const onDeviceEnabled = ()=>setPermissionsState("granted");
11038
+ const videoType = type === "photo" ? "photo" : "video";
10816
11039
  const onEnterRoom = ()=>setRoomReady(true);
10817
11040
  const onLeaveRoom = ()=>setRoomReady(false);
10818
11041
  const ref = (0, $3Sbms$useRef)(null);
10819
11042
  const title = (0, $3Sbms$useMemo)(()=>{
10820
- if (permissionsState === "refused") return "Something went wrong!";
10821
- if (type === "picture") return "Ready to take a shot?";
10822
- return "Ready to record a video?";
11043
+ if (permissionsState === "refused") return t("recorder.permissionDeniedTitle");
11044
+ if (type === "photo") return t("recorder.photoInstructionsTitle");
11045
+ else if (type === "video") return t("recorder.videoInstructionsTitle");
11046
+ else return t("recorder.screenShareInstructionsTitle");
10823
11047
  }, [
10824
11048
  permissionsState,
10825
- type
11049
+ type,
11050
+ t
10826
11051
  ]);
10827
11052
  (0, $3Sbms$useEffect)(()=>{
10828
- (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("localVideoAvailable", onDeviceEnabled);
10829
- (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("microphoneEnabled", onDeviceEnabled);
10830
11053
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("enterRoom", onEnterRoom);
10831
11054
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("leaveRoom", onLeaveRoom);
10832
11055
  return ()=>{
10833
- (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("localVideoAvailable", onDeviceEnabled);
10834
- (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("microphoneEnabled", onDeviceEnabled);
10835
11056
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("enterRoom", onEnterRoom);
10836
11057
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("leaveRoom", onLeaveRoom);
10837
11058
  };
@@ -10846,36 +11067,50 @@ const $96999d2514f71e51$export$788cb893d96254c8 = ({ state: state , type: type
10846
11067
  children: permissionsState === "refused" ? /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10847
11068
  fullWidth: true,
10848
11069
  onPress: ()=>window.location.reload(),
10849
- children: "Allow access"
11070
+ children: t("recorder.allowAccess")
10850
11071
  }) : /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$Fragment), {
10851
11072
  children: permissionsState === "granted" ? /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10852
11073
  fullWidth: true,
10853
11074
  onPress: state.close,
10854
- children: "Okay"
11075
+ children: t("recorder.okay")
10855
11076
  }) : /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
10856
11077
  fullWidth: true,
10857
11078
  isDisabled: permissionsState === "requesting" || isRoomReady === false,
10858
11079
  onPress: async ()=>{
10859
11080
  setPermissionsState("requesting");
10860
11081
  try {
10861
- const mediaResult = await navigator.mediaDevices.getUserMedia({
10862
- audio: true,
10863
- video: true
10864
- });
10865
- mediaResult.getTracks().forEach((track)=>track.stop());
10866
- await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).enableMicrophone();
10867
- await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).enableVideo({
10868
- resolution: "vga",
10869
- frameRate: 20,
10870
- facingMode: "environment"
10871
- });
10872
- } catch {
11082
+ if (!deviceState.microphone.enabled) {
11083
+ const mediaResult = await navigator.mediaDevices.getUserMedia({
11084
+ audio: true,
11085
+ video: type !== "screen"
11086
+ });
11087
+ mediaResult.getTracks().forEach((track)=>track.stop());
11088
+ }
11089
+ if (!deviceState.microphone.enabled) await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).enableMicrophone();
11090
+ if (!deviceState.camera.enabled && type !== "screen") {
11091
+ await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).disableScreenshare();
11092
+ await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).enableVideo({
11093
+ resolution: "vga",
11094
+ frameRate: 20,
11095
+ facingMode: "environment"
11096
+ });
11097
+ }
11098
+ if (!deviceState.screenshare.enabled && type === "screen") {
11099
+ await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).disableVideo();
11100
+ await (0, $c9e496369b59be7a$export$2f377c2162fd02b2).enableScreenshare({
11101
+ audioTransportOption: "mix"
11102
+ });
11103
+ }
11104
+ setPermissionsState("granted");
11105
+ state.close();
11106
+ } catch (error) {
11107
+ console.log("error", error);
10873
11108
  setPermissionsState("refused");
10874
11109
  }
10875
11110
  },
10876
11111
  children: [
10877
11112
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $910dd7d7d872a463$export$2e2bcd8739ae039), {}),
10878
- "Allow access to cam/mic"
11113
+ type !== "screen" ? t("recorder.allowCamMicAccess") : t("recorder.allowScreenShareAccess")
10879
11114
  ]
10880
11115
  })
10881
11116
  })
@@ -10887,51 +11122,61 @@ const $96999d2514f71e51$export$788cb893d96254c8 = ({ state: state , type: type
10887
11122
  className: "flex flex-col gap-[10px]",
10888
11123
  ref: ref,
10889
11124
  children: permissionsState === "refused" ? /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
10890
- 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."
11125
+ children: t("recorder.permissionDeniedDescription")
10891
11126
  }) : /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
10892
11127
  children: [
10893
11128
  permissionsState !== "granted" && /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10894
11129
  index: 1,
10895
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10896
- children: [
10897
- "When prompted, ",
10898
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10899
- children: "allow access"
10900
- }),
10901
- " to camera and microphone."
10902
- ]
11130
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11131
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11132
+ i18nKey: "recorder.instructions.allowAccessOnPrompt",
11133
+ children: [
11134
+ "When prompted, ",
11135
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11136
+ children: "allow access"
11137
+ }),
11138
+ " to camera and microphone."
11139
+ ]
11140
+ })
10903
11141
  })
10904
11142
  }),
10905
- type === "picture" && /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
11143
+ type === "photo" && /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
10906
11144
  children: [
10907
11145
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10908
11146
  index: 1 + permissionsInstructionIndex,
10909
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10910
- children: [
10911
- "Tap the ",
10912
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$dce36e07153365d), {}),
10913
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10914
- children: " Camera button"
10915
- }),
10916
- " to take a photo."
10917
- ]
11147
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11148
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11149
+ i18nKey: "recorder.instructions.tapPhotoButton",
11150
+ com: true,
11151
+ children: [
11152
+ "Tap the ",
11153
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$dce36e07153365d), {}),
11154
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11155
+ children: " Camera button"
11156
+ }),
11157
+ " to take a photo."
11158
+ ]
11159
+ })
10918
11160
  })
10919
11161
  }),
10920
11162
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10921
11163
  index: 2 + permissionsInstructionIndex,
10922
11164
  children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
10923
- children: "Don't hesitate to take multiple photos for more detail."
11165
+ children: t("recorder.instructions.multiplePhotos")
10924
11166
  })
10925
11167
  }),
10926
11168
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10927
11169
  index: 3 + permissionsInstructionIndex,
10928
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10929
- children: [
10930
- "You can review your photo and then ",
10931
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10932
- children: "send it when you're done."
10933
- })
10934
- ]
11170
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11171
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11172
+ i18nKey: "recorder.instructions.reviewAndSendPhotos",
11173
+ children: [
11174
+ "You can review your photo and then ",
11175
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11176
+ children: "send it when you're done."
11177
+ })
11178
+ ]
11179
+ })
10935
11180
  })
10936
11181
  })
10937
11182
  ]
@@ -10940,52 +11185,128 @@ const $96999d2514f71e51$export$788cb893d96254c8 = ({ state: state , type: type
10940
11185
  children: [
10941
11186
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10942
11187
  index: 1 + permissionsInstructionIndex,
10943
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10944
- children: [
10945
- "Tap the ",
10946
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$f9da3144ae2525a3), {}),
10947
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10948
- children: " Record button"
10949
- }),
10950
- " to start a recording."
10951
- ]
11188
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11189
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11190
+ i18nKey: "recorder.instructions.tapVideoButton",
11191
+ children: [
11192
+ "Tap the ",
11193
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$f9da3144ae2525a3), {}),
11194
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11195
+ children: " Record button"
11196
+ }),
11197
+ " to start a recording."
11198
+ ]
11199
+ })
11200
+ })
11201
+ }),
11202
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
11203
+ index: 2 + permissionsInstructionIndex,
11204
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11205
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11206
+ i18nKey: "recorder.instructions.videoSpeech",
11207
+ children: [
11208
+ "You can ",
11209
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11210
+ children: "speak during"
11211
+ }),
11212
+ " the recording for added detail."
11213
+ ]
11214
+ })
11215
+ })
11216
+ }),
11217
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
11218
+ index: 3 + permissionsInstructionIndex,
11219
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11220
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11221
+ i18nKey: "recorder.instructions.tapStopVideoButton",
11222
+ children: [
11223
+ "When you're finished, tap the ",
11224
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$c6a849fd9d9d93a2), {}),
11225
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11226
+ children: " Stop button"
11227
+ }),
11228
+ "."
11229
+ ]
11230
+ })
11231
+ })
11232
+ }),
11233
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
11234
+ index: 4 + permissionsInstructionIndex,
11235
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11236
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11237
+ i18nKey: "recorder.instructions.reviewAndSendVideos",
11238
+ children: [
11239
+ "You can review your video and then ",
11240
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11241
+ children: "send it when you're done"
11242
+ }),
11243
+ "."
11244
+ ]
11245
+ })
11246
+ })
11247
+ })
11248
+ ]
11249
+ }),
11250
+ type === "screen" && /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
11251
+ children: [
11252
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
11253
+ index: 1 + permissionsInstructionIndex,
11254
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11255
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11256
+ i18nKey: "recorder.instructions.tapScreenShareButton",
11257
+ children: [
11258
+ "Tap on",
11259
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11260
+ children: " Record my screen"
11261
+ }),
11262
+ " to start a recording."
11263
+ ]
11264
+ })
10952
11265
  })
10953
11266
  }),
10954
11267
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10955
11268
  index: 2 + permissionsInstructionIndex,
10956
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10957
- children: [
10958
- "You can ",
10959
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10960
- children: "speak during"
10961
- }),
10962
- " the recording for added detail."
10963
- ]
11269
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11270
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11271
+ i18nKey: "recorder.instructions.videoSpeech",
11272
+ children: [
11273
+ "You can ",
11274
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11275
+ children: "speak during"
11276
+ }),
11277
+ " the recording for added detail."
11278
+ ]
11279
+ })
10964
11280
  })
10965
11281
  }),
10966
11282
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10967
11283
  index: 3 + permissionsInstructionIndex,
10968
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10969
- children: [
10970
- "When you're finished, tap the ",
10971
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $444e1dd9fa8f6883$export$c6a849fd9d9d93a2), {}),
10972
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10973
- children: " Stop button"
10974
- }),
10975
- "."
10976
- ]
11284
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11285
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11286
+ i18nKey: "recorder.instructions.tapStopScreenShareButton",
11287
+ children: [
11288
+ "When you're finished, tap on ",
11289
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11290
+ children: "Stop recording"
11291
+ }),
11292
+ "."
11293
+ ]
11294
+ })
10977
11295
  })
10978
11296
  }),
10979
11297
  /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$InstructionRow, {
10980
11298
  index: 4 + permissionsInstructionIndex,
10981
- children: /*#__PURE__*/ (0, $3Sbms$jsxs)($96999d2514f71e51$var$Text, {
10982
- children: [
10983
- "You can review your video and then ",
10984
- /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
10985
- children: "send it when you're done"
10986
- }),
10987
- "."
10988
- ]
11299
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Text, {
11300
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Trans), {
11301
+ i18nKey: "recorder.instructions.reviewAnsSendScreenShare",
11302
+ children: [
11303
+ "You can review your video and then ",
11304
+ /*#__PURE__*/ (0, $3Sbms$jsx)($96999d2514f71e51$var$Bold, {
11305
+ children: "send it when you're done"
11306
+ }),
11307
+ "."
11308
+ ]
11309
+ })
10989
11310
  })
10990
11311
  })
10991
11312
  ]
@@ -11017,7 +11338,9 @@ const $96999d2514f71e51$export$788cb893d96254c8 = ({ state: state , type: type
11017
11338
 
11018
11339
 
11019
11340
 
11341
+
11020
11342
  const $1c8fc500105e5c78$export$f9d8408fefd786da = ({ state: state , setReady: setReady })=>{
11343
+ const { t: t } = (0, $3Sbms$useTranslation)();
11021
11344
  const QRCodeRef = (0, $3Sbms$useRef)(null);
11022
11345
  const { options: options } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
11023
11346
  const [QRCodeContainerRef, { width: QRCodeContainerWidth }] = (0, $af23c74942bdcae7$export$e295b0c537d32d7d)();
@@ -11034,8 +11357,8 @@ const $1c8fc500105e5c78$export$f9d8408fefd786da = ({ state: state , setReady: se
11034
11357
  ]);
11035
11358
  return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c0bb66c3d546ed81$export$2b77a92f1a5ad772), {
11036
11359
  centered: true,
11037
- title: "Switch to your mobile",
11038
- description: "Enjoy an even more convenient experience by using your phone to take photos and record videos.",
11360
+ title: t("recorder.switchToMobileTitle"),
11361
+ description: t("recorder.switchToMobileDescription"),
11039
11362
  isDismissable: false,
11040
11363
  state: state,
11041
11364
  primaryAction: ()=>/*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
@@ -11044,7 +11367,7 @@ const $1c8fc500105e5c78$export$f9d8408fefd786da = ({ state: state , setReady: se
11044
11367
  setReady(true);
11045
11368
  state.close();
11046
11369
  },
11047
- children: "Use desktop version"
11370
+ children: t("recorder.useDesktopVersion")
11048
11371
  }),
11049
11372
  children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11050
11373
  className: "flex flex-col gap-[20px]",
@@ -11064,7 +11387,7 @@ const $1c8fc500105e5c78$export$f9d8408fefd786da = ({ state: state , setReady: se
11064
11387
  }),
11065
11388
  /*#__PURE__*/ (0, $3Sbms$jsx)("p", {
11066
11389
  className: "flex items-center justify-center text-xs text-primaryLight text-center",
11067
- children: "Scan this QR code with a compatible device."
11390
+ children: t("recorder.scanQRCode")
11068
11391
  })
11069
11392
  ]
11070
11393
  })
@@ -11075,29 +11398,21 @@ const $1c8fc500105e5c78$export$f9d8408fefd786da = ({ state: state , setReady: se
11075
11398
  function $d48329960b5b412c$export$fc3bf4634b488af8({ mode: mode }) {
11076
11399
  const { orientation: orientation } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
11077
11400
  const desktop = orientation === "landscape";
11078
- const [ready, setReady] = (0, $3Sbms$useState)(!desktop);
11401
+ const [ready, setReady] = (0, $3Sbms$useState)(mode === "screen" || !desktop);
11402
+ const [isInstructionsModalOpen, setIsInstructionsModalOpen] = (0, $3Sbms$useState)(ready);
11403
+ const modalState = (0, $3Sbms$useOverlayTriggerState)({
11404
+ isOpen: isInstructionsModalOpen && ready,
11405
+ onOpenChange: setIsInstructionsModalOpen
11406
+ });
11079
11407
  (0, $3Sbms$useEffect)(()=>{
11080
- if (ready) {
11081
- setIsPhotoInstructionsModalOpen(mode === "photo" && ready);
11082
- setIsVideoInstructionsModalOpen(mode === "video" && ready);
11083
- }
11408
+ setIsInstructionsModalOpen(true);
11084
11409
  }, [
11085
11410
  ready,
11086
11411
  mode
11087
11412
  ]);
11088
- const [isPhotoInstructionsModalOpen, setIsPhotoInstructionsModalOpen] = (0, $3Sbms$useState)(mode === "photo" && ready);
11089
- const [isVideoInstructionsModalOpen, setIsVideoInstructionsModalOpen] = (0, $3Sbms$useState)(mode === "video" && ready);
11090
- const photoInstructionsModalState = (0, $3Sbms$useOverlayTriggerState)({
11091
- isOpen: isPhotoInstructionsModalOpen,
11092
- onOpenChange: setIsPhotoInstructionsModalOpen
11093
- });
11094
- const videoInstructionsModalState = (0, $3Sbms$useOverlayTriggerState)({
11095
- isOpen: isVideoInstructionsModalOpen,
11096
- onOpenChange: setIsVideoInstructionsModalOpen
11097
- });
11098
11413
  return {
11099
- photoInstructionsModalState: photoInstructionsModalState,
11100
- videoInstructionsModalState: videoInstructionsModalState,
11414
+ mode: mode,
11415
+ modalState: modalState,
11101
11416
  ready: ready,
11102
11417
  setReady: setReady
11103
11418
  };
@@ -11111,12 +11426,8 @@ const $d48329960b5b412c$export$bee10e8ab511933f = ({ state: state })=>{
11111
11426
  return /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
11112
11427
  children: [
11113
11428
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $96999d2514f71e51$export$788cb893d96254c8), {
11114
- state: state.photoInstructionsModalState,
11115
- type: "picture"
11116
- }),
11117
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $96999d2514f71e51$export$788cb893d96254c8), {
11118
- state: state.videoInstructionsModalState,
11119
- type: "video"
11429
+ state: state.modalState,
11430
+ type: state.mode
11120
11431
  }),
11121
11432
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $1c8fc500105e5c78$export$f9d8408fefd786da), {
11122
11433
  state: switchToMobileModalState,
@@ -11127,22 +11438,54 @@ const $d48329960b5b412c$export$bee10e8ab511933f = ({ state: state })=>{
11127
11438
  };
11128
11439
 
11129
11440
 
11130
- function $a94f21ef9007b90a$export$bd7b6af6aa16550c({ photo: photo = true }) {
11131
- const [isPhoto, setPhoto] = (0, $3Sbms$useState)(photo);
11441
+
11442
+
11443
+
11444
+ const $39932392769664d0$export$4e594bceac139abd = (props)=>{
11445
+ const { t: t } = (0, $3Sbms$useTranslation)();
11446
+ return /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11447
+ className: (0, $3Sbms$classnames)("flex rounded-full h-[40px] p-[10px] border-2 border-white text-white justify-center items-center align-middle", "font-semibold", "cursor-pointer", {
11448
+ "bg-[#f12828]": !props.state.streaming
11449
+ }),
11450
+ onClick: ()=>props.onCapturePress(),
11451
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11452
+ children: props.state.streaming ? t("recorder.stopScreenShareButton") : t("recorder.startScreenShareButton")
11453
+ })
11454
+ });
11455
+ };
11456
+ const $39932392769664d0$export$f9da3144ae2525a3 = (props)=>{
11457
+ return /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11458
+ className: (0, $3Sbms$classnames)("bg-white rounded-full w-[72px] h-[72px] p-[3px]"),
11459
+ onClick: ()=>props.onCapturePress(),
11460
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11461
+ className: "bg-primary rounded-full w-full h-full p-[3px] flex items-center justify-center cursor-pointer",
11462
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11463
+ className: (0, $3Sbms$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]")
11464
+ })
11465
+ })
11466
+ });
11467
+ };
11468
+
11469
+
11470
+ function $a94f21ef9007b90a$export$bd7b6af6aa16550c({ state: state = "photo" }) {
11471
+ const [currentMode, setMode] = (0, $3Sbms$useState)(state);
11132
11472
  const [streaming, setStreaming] = (0, $3Sbms$useState)(false);
11133
11473
  return {
11134
- photo: isPhoto,
11135
- setPhoto: setPhoto,
11474
+ mode: currentMode,
11475
+ setMode: (mode)=>{
11476
+ setMode(mode);
11477
+ },
11136
11478
  streaming: streaming,
11137
11479
  setStreaming: setStreaming
11138
11480
  };
11139
11481
  }
11140
11482
  const $a94f21ef9007b90a$export$11a6fe490bbc4873 = (props)=>{
11483
+ const { t: t } = (0, $3Sbms$useTranslation)();
11141
11484
  const setupModalsState = (0, $d48329960b5b412c$export$fc3bf4634b488af8)({
11142
- mode: props.state.photo ? "photo" : "video"
11485
+ mode: props.state.mode
11143
11486
  });
11144
11487
  return /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11145
- className: "flex flex-col bg-primary h-[150px] w-full max-w-[400px] rounded-[15px] p-2.5 gap-2.5",
11488
+ className: "flex flex-col bg-primary h-[150px] w-full max-w-[500px] rounded-[15px] p-2.5 gap-2.5",
11146
11489
  children: [
11147
11490
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $d48329960b5b412c$export$bee10e8ab511933f), {
11148
11491
  state: setupModalsState
@@ -11163,25 +11506,39 @@ const $a94f21ef9007b90a$export$11a6fe490bbc4873 = (props)=>{
11163
11506
  /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11164
11507
  className: "flex flex-row justify-end flex-auto items-center gap-[10px] ",
11165
11508
  children: [
11166
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $5a48b7481979330f$export$d2b052e7b4be1756), {
11167
- onPress: ()=>{
11168
- if (!props.state.streaming) {
11169
- props.state.setPhoto(true);
11170
- setupModalsState.photoInstructionsModalState.open();
11171
- }
11172
- },
11173
- isSelected: props.state.photo,
11174
- children: "Photo"
11509
+ props.state.mode !== "screen" && /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $3Sbms$Fragment), {
11510
+ children: [
11511
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $5a48b7481979330f$export$d2b052e7b4be1756), {
11512
+ onPress: ()=>{
11513
+ if (!props.state.streaming) {
11514
+ props.state.setMode("photo");
11515
+ setupModalsState.modalState.open();
11516
+ }
11517
+ },
11518
+ isSelected: props.state.mode === "photo",
11519
+ children: t("misc.photo")
11520
+ }),
11521
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $5a48b7481979330f$export$d2b052e7b4be1756), {
11522
+ onPress: ()=>{
11523
+ if (!props.state.streaming) {
11524
+ props.state.setMode("video");
11525
+ setupModalsState.modalState.open();
11526
+ }
11527
+ },
11528
+ isSelected: props.state.mode === "video",
11529
+ children: t("misc.video")
11530
+ })
11531
+ ]
11175
11532
  }),
11176
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $5a48b7481979330f$export$d2b052e7b4be1756), {
11533
+ props.state.mode === "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $5a48b7481979330f$export$d2b052e7b4be1756), {
11177
11534
  onPress: ()=>{
11178
11535
  if (!props.state.streaming) {
11179
- props.state.setPhoto(false);
11180
- setupModalsState.videoInstructionsModalState.open();
11536
+ props.state.setMode("screen");
11537
+ setupModalsState.modalState.open();
11181
11538
  }
11182
11539
  },
11183
- isSelected: !props.state.photo,
11184
- children: "Video"
11540
+ isSelected: props.state.mode === "screen",
11541
+ children: t("misc.screen")
11185
11542
  })
11186
11543
  ]
11187
11544
  })
@@ -11194,20 +11551,18 @@ const $a94f21ef9007b90a$export$11a6fe490bbc4873 = (props)=>{
11194
11551
  className: "w-[60px] h-[60px]",
11195
11552
  children: props.thumbnail
11196
11553
  }),
11197
- /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11198
- className: "bg-white rounded-full w-[72px] h-[72px] p-[3px]",
11199
- onClick: ()=>props.onCapturePress(),
11200
- children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11201
- className: "bg-primary rounded-full w-full h-full p-[3px] flex items-center justify-center cursor-pointer",
11202
- children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11203
- className: (0, $3Sbms$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]")
11204
- })
11205
- })
11554
+ props.state.mode === "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $39932392769664d0$export$4e594bceac139abd), {
11555
+ ...props
11556
+ }),
11557
+ props.state.mode !== "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $39932392769664d0$export$f9da3144ae2525a3), {
11558
+ ...props
11206
11559
  }),
11207
11560
  /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11208
11561
  onClick: props.onSwitch,
11209
- className: "bg-[#565656] rounded-full w-[56px] h-[56px] flex items-center justify-center cursor-pointer",
11210
- children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $58d405d56c1abe95$export$aefffb14595958fe), {})
11562
+ className: (0, $3Sbms$classnames)("rounded-full w-[56px] h-[56px] flex items-center justify-center", {
11563
+ "bg-[#565656] cursor-pointer": props.state.mode !== "screen"
11564
+ }),
11565
+ children: props.state.mode !== "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $58d405d56c1abe95$export$aefffb14595958fe), {})
11211
11566
  })
11212
11567
  ]
11213
11568
  })
@@ -11227,18 +11582,19 @@ const $a94f21ef9007b90a$export$11a6fe490bbc4873 = (props)=>{
11227
11582
 
11228
11583
 
11229
11584
 
11585
+
11230
11586
  function $38cdd553fb158eaa$export$4589ed81930b555c(props) {
11231
11587
  const { children: children , state: state } = props;
11232
11588
  const ref = (0, $3Sbms$react).useRef(null);
11233
11589
  const { orientation: orientation } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
11234
- const { modalProps: modalProps , underlayProps: underlayProps } = (0, $3Sbms$useModalOverlay)(props, state, ref);
11590
+ const { modalProps: modalProps , underlayProps: underlayProps } = (0, $3Sbms$useModalOverlay1)(props, state, ref);
11235
11591
  const [exited, setExited] = (0, $3Sbms$useState)(!state.isOpen);
11236
11592
  const viewport = (0, $3Sbms$useViewportSize)();
11237
11593
  const maxHeight = viewport.height - 64;
11238
11594
  const desktop = orientation === "landscape";
11239
11595
  // Don't render anything if the modal is not open and we're not animating out.
11240
11596
  if (!(state.isOpen || !exited)) return null;
11241
- return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$Overlay), {
11597
+ return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$Overlay1), {
11242
11598
  children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $3Sbms$CSSTransition), {
11243
11599
  in: state.isOpen,
11244
11600
  appear: true,
@@ -11294,6 +11650,8 @@ function $38cdd553fb158eaa$export$4589ed81930b555c(props) {
11294
11650
 
11295
11651
 
11296
11652
 
11653
+
11654
+
11297
11655
  const $4425c0dfad3f82bb$export$480db61f4dcd7727 = ()=>/*#__PURE__*/ (0, $3Sbms$jsx)("svg", {
11298
11656
  width: "12",
11299
11657
  height: "15",
@@ -11350,26 +11708,61 @@ const $a879d6bc7f43b0c5$export$28e1ba20e0688eb7 = ()=>/*#__PURE__*/ (0, $3Sbms$j
11350
11708
  });
11351
11709
 
11352
11710
 
11353
- const $77fb06ba253d6f7c$var$dateFormat = new Intl.DateTimeFormat("default", {
11354
- dateStyle: "short"
11355
- });
11356
- const $77fb06ba253d6f7c$var$timeFormat = new Intl.DateTimeFormat("default", {
11357
- hour: "numeric",
11358
- minute: "2-digit"
11359
- });
11360
- function $77fb06ba253d6f7c$var$formatDate(date) {
11361
- const ampm = date.getHours() % 12 >= 12 ? "PM" : "AM";
11362
- return `${$77fb06ba253d6f7c$var$dateFormat.format(date)} at ${$77fb06ba253d6f7c$var$timeFormat.format(date)} ${ampm}`;
11363
- }
11711
+
11712
+
11713
+
11714
+ const $a4b1c68ef470f35c$export$f56b3b5841ad32ae = ({ asset: asset , state: state })=>{
11715
+ return /*#__PURE__*/ (0, $3Sbms$jsx)((0, $91e337bf8187124b$export$a703eb468fcf7e69), {
11716
+ state: state,
11717
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11718
+ className: "flex flex-col items-center w-screen h-screen p-[15px] gap-[10px]",
11719
+ children: [
11720
+ /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11721
+ className: "flex items-center max-w-[400px] w-full h-full",
11722
+ children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11723
+ className: "min-w-full rounded-[10px] overflow-hidden",
11724
+ children: [
11725
+ asset.type === "picture" && /*#__PURE__*/ (0, $3Sbms$jsx)("img", {
11726
+ src: asset.objectUrl,
11727
+ alt: `Asset-${asset.assetId}`,
11728
+ className: "object-fill"
11729
+ }),
11730
+ asset.type === "video" && /*#__PURE__*/ (0, $3Sbms$jsx)("video", {
11731
+ src: asset.objectUrl,
11732
+ playsInline: true,
11733
+ autoPlay: true,
11734
+ controls: true
11735
+ })
11736
+ ]
11737
+ })
11738
+ }),
11739
+ /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11740
+ className: "max-w-[135px] w-1/3",
11741
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11742
+ onPress: state.close,
11743
+ variant: "tertiary",
11744
+ size: "large",
11745
+ fullWidth: true,
11746
+ children: "Close"
11747
+ })
11748
+ })
11749
+ ]
11750
+ })
11751
+ });
11752
+ };
11753
+
11754
+
11364
11755
  const $77fb06ba253d6f7c$export$c9169049516d8bcf = ({ asset: asset , index: index , removeAsset: removeAsset })=>{
11756
+ const { t: t } = (0, $3Sbms$useTranslation)();
11365
11757
  const confirmRemovalModalState = (0, $3Sbms$useOverlayTriggerState)({});
11758
+ const previewAssetModalProps = (0, $3Sbms$useOverlayTriggerState)({});
11366
11759
  return /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11367
11760
  className: "flex flex-row justify-between items-center",
11368
11761
  children: [
11369
11762
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c0bb66c3d546ed81$export$2b77a92f1a5ad772), {
11370
- title: "Confirm removal",
11763
+ title: t("recorder.confirmRemovalTitle"),
11371
11764
  state: confirmRemovalModalState,
11372
- description: "Are you sure you want to remove this photo/video? This action cannot be undone.",
11765
+ description: t("recorder.confirmRemovalDescription"),
11373
11766
  primaryAction: ({ close: close })=>/*#__PURE__*/ (0, $3Sbms$jsxs)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11374
11767
  onPress: async ()=>{
11375
11768
  await removeAsset(asset);
@@ -11377,29 +11770,34 @@ const $77fb06ba253d6f7c$export$c9169049516d8bcf = ({ asset: asset , index: index
11377
11770
  },
11378
11771
  children: [
11379
11772
  /*#__PURE__*/ (0, $3Sbms$jsx)((0, $a879d6bc7f43b0c5$export$28e1ba20e0688eb7), {}),
11380
- "Confirm"
11773
+ t("misc.confirm")
11381
11774
  ]
11382
11775
  }),
11383
- secondaryAction: "Cancel"
11776
+ secondaryAction: t("misc.cancel")
11384
11777
  }),
11385
11778
  /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11386
11779
  className: "flex flex-row gap-[10px] items-center",
11387
11780
  children: [
11388
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c7542aa0d9bb5f39$export$1cd1efc78cb52ca5), {
11781
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $a4b1c68ef470f35c$export$f56b3b5841ad32ae), {
11782
+ state: previewAssetModalProps,
11389
11783
  asset: asset
11390
11784
  }),
11785
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c7542aa0d9bb5f39$export$1cd1efc78cb52ca5), {
11786
+ asset: asset,
11787
+ onClick: previewAssetModalProps.open
11788
+ }),
11391
11789
  /*#__PURE__*/ (0, $3Sbms$jsxs)("span", {
11392
11790
  className: "text-sm",
11393
11791
  style: {
11394
11792
  hyphens: "manual"
11395
11793
  },
11396
11794
  children: [
11397
- asset.type === "picture" ? "Photo" : "Video",
11795
+ asset.type === "picture" ? t("misc.photo") : t("misc.video"),
11398
11796
  " ",
11399
11797
  index + 1,
11400
11798
  " \xb7",
11401
11799
  " ",
11402
- $77fb06ba253d6f7c$var$formatDate(new Date(asset.timestamp))
11800
+ (0, $92672d57809ea9d3$export$3ae94a2503e890a1)(new Date(asset.timestamp))
11403
11801
  ]
11404
11802
  })
11405
11803
  ]
@@ -11407,7 +11805,7 @@ const $77fb06ba253d6f7c$export$c9169049516d8bcf = ({ asset: asset , index: index
11407
11805
  /*#__PURE__*/ (0, $3Sbms$jsx)("span", {
11408
11806
  className: "text-xs font-bold underline cursor-pointer ml-[10px]",
11409
11807
  onClick: confirmRemovalModalState.open,
11410
- children: "Remove"
11808
+ children: t("misc.remove")
11411
11809
  })
11412
11810
  ]
11413
11811
  }, asset.assetId);
@@ -11490,6 +11888,7 @@ const $7436fc0a14c16764$export$4fa52f68b1c78fbf = ()=>/*#__PURE__*/ (0, $3Sbms$j
11490
11888
 
11491
11889
 
11492
11890
  const $d4d374dc7955cc18$export$5c334f209b1aa661 = ({ assets: assets , state: state , onSendAssets: onSendAssets , removeAsset: removeAsset , loading: loading })=>{
11891
+ const { t: t } = (0, $3Sbms$useTranslation)();
11493
11892
  const ref = (0, $3Sbms$useRef)(null);
11494
11893
  const [assetKind, setAssetKind] = (0, $3Sbms$useState)(assets[assets.length - 1]?.type === "picture" ? "photo" : "video");
11495
11894
  const { orientation: orientation } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
@@ -11517,7 +11916,7 @@ const $d4d374dc7955cc18$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11517
11916
  children: /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11518
11917
  className: (0, $3Sbms$classnames)("fixed justify-center w-screen h-screen top-0 left-0 bg-black z-[1]", state.isOpen ? "flex" : "hidden"),
11519
11918
  children: loading && /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11520
- className: (0, $3Sbms$classnames)("flex mt-[50px] h-fit opacity-1", desktop ? "flex-row items-center w-[400px]" : "flex-col items-center text-center w-[320px]"),
11919
+ className: (0, $3Sbms$classnames)("flex mt-[50px] h-fit opacity-1", desktop ? "flex-row items-center w-[450px]" : "flex-col items-center text-center w-[320px]"),
11521
11920
  children: [
11522
11921
  /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11523
11922
  className: "w-[24px] h-[24px] m-[10px]",
@@ -11526,10 +11925,10 @@ const $d4d374dc7955cc18$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11526
11925
  /*#__PURE__*/ (0, $3Sbms$jsxs)("span", {
11527
11926
  className: "text-sm text-white",
11528
11927
  children: [
11529
- "Please wait a moment while your ",
11530
- loading,
11531
- " is being processed...",
11532
- loading === "video" ? " It may take up to 15 seconds for a video to be ready." : ""
11928
+ t("recorder.elementBeingProcessed", {
11929
+ type: loading === "picture" ? t("misc.photo").toLocaleLowerCase() : t("misc.video").toLocaleLowerCase()
11930
+ }),
11931
+ loading === "video" && t("recorder.waitVideo")
11533
11932
  ]
11534
11933
  })
11535
11934
  ]
@@ -11548,12 +11947,11 @@ const $d4d374dc7955cc18$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11548
11947
  /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11549
11948
  className: "flex flex-row justify-between p-[12px]",
11550
11949
  children: [
11551
- /*#__PURE__*/ (0, $3Sbms$jsxs)("h1", {
11950
+ /*#__PURE__*/ (0, $3Sbms$jsx)("h1", {
11552
11951
  className: "text-lg first-letter:capitalize",
11553
- children: [
11554
- assetKind,
11555
- " successfully captured"
11556
- ]
11952
+ children: t("recorder.elementCaptureSuccess", {
11953
+ type: t(`misc.${assetKind}`)
11954
+ })
11557
11955
  }),
11558
11956
  /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11559
11957
  className: "flex justify-center items-center rounded-full bg-[#f3f3f3] h-[30px] w-[30px] cursor-pointer",
@@ -11572,23 +11970,23 @@ const $d4d374dc7955cc18$export$5c334f209b1aa661 = ({ assets: assets , state: sta
11572
11970
  index: index,
11573
11971
  removeAsset: removeAsset
11574
11972
  }, asset.assetId)),
11575
- /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11973
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11576
11974
  variant: "secondary",
11577
11975
  onPress: state.close,
11578
- children: [
11579
- "Take new ",
11580
- assetKind
11581
- ]
11976
+ children: t("recorder.takeNewElement", {
11977
+ type: t(`misc.${assetKind}`).toLocaleLowerCase()
11978
+ })
11582
11979
  }),
11583
- /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11980
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $0590ee3141e14968$export$353f5b6fc5456de1), {
11584
11981
  onPress: ()=>{
11585
11982
  onSendAssets();
11586
11983
  state.close();
11587
11984
  },
11588
- children: [
11589
- "Send ",
11590
- assets.length > 1 ? `${assets.length} elements` : assetKind
11591
- ]
11985
+ children: assets.length > 1 ? t("recorder.sendElements", {
11986
+ count: assets.length
11987
+ }) : t("recorder.sendElement", {
11988
+ type: t(`misc.${assetKind}`).toLocaleLowerCase()
11989
+ })
11592
11990
  })
11593
11991
  ]
11594
11992
  })
@@ -11636,7 +12034,18 @@ const $92672d57809ea9d3$var$timerText = (delta)=>{
11636
12034
  ].map((n)=>`${n < 10 ? "0" : ""}${n}`);
11637
12035
  return d.join(":");
11638
12036
  };
12037
+ const $92672d57809ea9d3$var$dateFormat = new Intl.DateTimeFormat("default", {
12038
+ dateStyle: "short"
12039
+ });
12040
+ const $92672d57809ea9d3$var$timeFormat = new Intl.DateTimeFormat("default", {
12041
+ hour: "numeric",
12042
+ minute: "2-digit"
12043
+ });
12044
+ function $92672d57809ea9d3$export$3ae94a2503e890a1(date) {
12045
+ return `${$92672d57809ea9d3$var$dateFormat.format(date)} at ${$92672d57809ea9d3$var$timeFormat.format(date)}`;
12046
+ }
11639
12047
  const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
12048
+ const { t: t } = (0, $3Sbms$useTranslation)();
11640
12049
  const { options: options } = (0, $3Sbms$useContext)((0, $5f30d8bf4f04621e$export$2e2bcd8739ae039));
11641
12050
  const [startRecordTime, setStartRecordTime] = (0, $3Sbms$useState)(undefined);
11642
12051
  const [timer, setTimer] = (0, $3Sbms$useState)(0);
@@ -11653,7 +12062,7 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11653
12062
  const sendAssetsModalState = (0, $3Sbms$useOverlayTriggerState)({});
11654
12063
  const [flashAnimation, setFlashAnimation] = (0, $3Sbms$useState)(false);
11655
12064
  const menuBarState = (0, $a94f21ef9007b90a$export$bd7b6af6aa16550c)({
11656
- photo: options?.recorder?.defaultState !== "video"
12065
+ state: options?.recorder?.defaultState || "photo"
11657
12066
  });
11658
12067
  const exitStreaming = (0, $3Sbms$useCallback)(()=>{
11659
12068
  menuBarState.setStreaming(false);
@@ -11668,6 +12077,10 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11668
12077
  const { facingMode: newFacingMode } = (0, $c9e496369b59be7a$export$2f377c2162fd02b2).requestLocalVideo(videoElementRef?.current);
11669
12078
  setFacingMode(newFacingMode);
11670
12079
  };
12080
+ const onScreenshareEnabled = (event)=>{
12081
+ if (!videoElementRef.current) return;
12082
+ (0, $c9e496369b59be7a$export$2f377c2162fd02b2).requestLocalScreenshare(videoElementRef.current);
12083
+ };
11671
12084
  const onStopRecord = (0, $3Sbms$useCallback)((event)=>{
11672
12085
  const { url: url , assetId: assetId } = event.detail;
11673
12086
  exitStreaming();
@@ -11731,10 +12144,12 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11731
12144
  ]);
11732
12145
  (0, $3Sbms$useEffect)(()=>{
11733
12146
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("localVideoAvailable", onLocalVideoChange);
12147
+ (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("screenshareEnabled", onScreenshareEnabled);
11734
12148
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("localVideoChange", onLocalVideoChange);
11735
12149
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).addEventListener("recordStopped", onStopRecord);
11736
12150
  return ()=>{
11737
12151
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("localVideoChange", onLocalVideoChange);
12152
+ (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("screenshareEnabled", onScreenshareEnabled);
11738
12153
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("localVideoAvailable", onLocalVideoChange);
11739
12154
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).removeEventListener("recordStopped", onStopRecord);
11740
12155
  };
@@ -11742,16 +12157,18 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11742
12157
  onStopRecord
11743
12158
  ]);
11744
12159
  return /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11745
- className: "bg-[#000] w-full h-full justify-center flex flex-col antialiased inter",
12160
+ className: (0, $3Sbms$classnames)("bg-[#000] w-full h-full justify-center flex flex-col antialiased inter", {
12161
+ "bg-[url('https://cdn.snapcall.io/img/assist/gradient-bg.jpg')] bg-cover": menuBarState.mode === "screen"
12162
+ }),
11746
12163
  children: [
11747
- !menuBarState.photo && /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
12164
+ (menuBarState.mode === "video" || menuBarState.mode === "screen" && menuBarState.streaming) && /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11748
12165
  className: "text-base text-white text-center font-medium pt-2.5",
11749
12166
  children: $92672d57809ea9d3$var$timerText(timer)
11750
12167
  }),
11751
12168
  /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11752
- className: "flex-1 min-h-0 p-2.5",
12169
+ className: "flex-1 min-h-0 p-2.5 ",
11753
12170
  children: /*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
11754
- className: "relative w-full h-full rounded-[10px]",
12171
+ className: "relative w-full h-full rounded-[10px] ",
11755
12172
  children: [
11756
12173
  countdownVisible && /*#__PURE__*/ (0, $3Sbms$jsx)((0, $db82628e5503d51b$export$53819c0e58f98d49), {
11757
12174
  initialValue: 3,
@@ -11769,7 +12186,20 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11769
12186
  assetsPopupState.open();
11770
12187
  }
11771
12188
  }),
11772
- /*#__PURE__*/ (0, $3Sbms$jsx)("video", {
12189
+ menuBarState.mode === "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
12190
+ className: "object-fit h-full",
12191
+ children: /*#__PURE__*/ (0, $3Sbms$jsx)("video", {
12192
+ autoPlay: true,
12193
+ muted: true,
12194
+ playsInline: true,
12195
+ ref: videoElementRef,
12196
+ className: (0, $3Sbms$classnames)("w-full h-full rounded-[inherit]", {
12197
+ "scale-x-[-1]": facingMode === "user" && menuBarState.mode !== "screen",
12198
+ "max-w-[screen]": menuBarState.mode === "screen"
12199
+ })
12200
+ })
12201
+ }),
12202
+ menuBarState.mode !== "screen" && /*#__PURE__*/ (0, $3Sbms$jsx)("video", {
11773
12203
  autoPlay: true,
11774
12204
  muted: true,
11775
12205
  playsInline: true,
@@ -11782,7 +12212,7 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11782
12212
  })
11783
12213
  }),
11784
12214
  /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
11785
- className: "flex justify-center px-2.5 pb-2.5",
12215
+ className: "flex justify-center px-2.5 pb-2.5 z-10",
11786
12216
  children: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $a94f21ef9007b90a$export$11a6fe490bbc4873), {
11787
12217
  state: menuBarState,
11788
12218
  thumbnail: /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c7542aa0d9bb5f39$export$1cd1efc78cb52ca5), {
@@ -11793,16 +12223,16 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11793
12223
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).rotateVideo();
11794
12224
  },
11795
12225
  onCapturePress: ()=>{
11796
- if (menuBarState.photo && videoElementRef.current) {
12226
+ if (menuBarState.mode === "photo" && videoElementRef.current) {
11797
12227
  onPhotoCapture(videoElementRef.current);
11798
12228
  setFlashAnimation(true);
11799
12229
  }
11800
- if (!menuBarState.photo && !menuBarState.streaming) {
12230
+ if (menuBarState.mode !== "photo" && !menuBarState.streaming) {
11801
12231
  menuBarState.setStreaming(true);
11802
12232
  setTimer(0);
11803
12233
  setCountdownVisible(true);
11804
12234
  }
11805
- if (!menuBarState.photo && menuBarState.streaming) {
12235
+ if (menuBarState.mode !== "photo" && menuBarState.streaming) {
11806
12236
  exitStreaming();
11807
12237
  if (startRecordTime) {
11808
12238
  (0, $c9e496369b59be7a$export$2f377c2162fd02b2).stopRecord();
@@ -11823,14 +12253,41 @@ const $92672d57809ea9d3$export$336a011955157f9a = ()=>{
11823
12253
  removeAsset: removeAsset,
11824
12254
  loading: assetLoading
11825
12255
  }),
11826
- /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c0bb66c3d546ed81$export$2b77a92f1a5ad772), {
11827
- title: "Thank you for your submission!",
12256
+ /*#__PURE__*/ (0, $3Sbms$jsxs)((0, $c0bb66c3d546ed81$export$2b77a92f1a5ad772), {
12257
+ title: t("recorder.submissionTitle"),
11828
12258
  state: sendAssetsModalState,
11829
12259
  isDismissable: false,
11830
- children: /*#__PURE__*/ (0, $3Sbms$jsx)("span", {
11831
- className: "text-base text-primaryLight",
11832
- children: "Your photo/video has been successfully sent. We will review it and get back to you soon."
11833
- })
12260
+ children: [
12261
+ /*#__PURE__*/ (0, $3Sbms$jsx)("span", {
12262
+ className: "text-base text-primaryLight",
12263
+ children: t("recorder.submissionDescription")
12264
+ }),
12265
+ /*#__PURE__*/ (0, $3Sbms$jsx)("div", {
12266
+ className: "flex flex-col gap-[20px] border-t border-secondaryVLight pt-[20px]",
12267
+ children: assets.map((asset, index)=>/*#__PURE__*/ (0, $3Sbms$jsxs)("div", {
12268
+ className: "flex flex-row items-center gap-[10px]",
12269
+ children: [
12270
+ /*#__PURE__*/ (0, $3Sbms$jsx)((0, $c7542aa0d9bb5f39$export$1cd1efc78cb52ca5), {
12271
+ asset: asset
12272
+ }),
12273
+ /*#__PURE__*/ (0, $3Sbms$jsxs)("span", {
12274
+ className: "text-sm",
12275
+ style: {
12276
+ hyphens: "manual"
12277
+ },
12278
+ children: [
12279
+ asset.type === "picture" ? "Photo" : "Video",
12280
+ " ",
12281
+ index + 1,
12282
+ " \xb7",
12283
+ " ",
12284
+ $92672d57809ea9d3$export$3ae94a2503e890a1(new Date(asset.timestamp))
12285
+ ]
12286
+ })
12287
+ ]
12288
+ }))
12289
+ })
12290
+ ]
11834
12291
  })
11835
12292
  ]
11836
12293
  });
@@ -12579,7 +13036,7 @@ var $f8d57e3d223f5089$export$2e2bcd8739ae039 = $f8d57e3d223f5089$var$GreetingVie
12579
13036
 
12580
13037
 
12581
13038
  var $1e2747ca72d0ab49$exports = {};
12582
- $1e2747ca72d0ab49$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";
13039
+ $1e2747ca72d0ab49$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";
12583
13040
 
12584
13041
 
12585
13042
  var $e02c50a47b475960$exports = {};